DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_ACCOUNTING_CACHE_PKG

Source


1 PACKAGE BODY xla_accounting_cache_pkg AS
2 -- $Header: xlaapche.pkb 120.61.12020000.3 2012/09/07 04:58:23 nmikkili ship $
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | FILENAME                                                                   |
9 |    xlaapche.pkb                                                            |
10 |                                                                            |
11 | PACKAGE NAME                                                               |
12 |    xla_accounting_cache_pkg                                                |
13 |                                                                            |
14 | DESCRIPTION                                                                |
15 |    This package is defined to cache the frequently used data during        |
16 |    execution of Accounting Program. This is to improve performance and     |
17 |    provide modular structure and lean interaction between Accounting Engine|
18 |    and Accounting Program.                                                 |
19 |                                                                            |
20 |    Note: the APIs do not excute COMMIT or ROLLBACK.                        |
21 |                                                                            |
22 | HISTORY                                                                    |
23 |    30-Oct-02  S. Singhania    Created                                      |
24 |    06-Dec-02  S. Singhania    Made changes to reslove bug # 2695671.       |
25 |                                 Added NVL statement to default ledger's    |
26 |                                 description language to USERENV('LANG')    |
27 |    11-Dec-02  K. Boussema     Updated function GetBaseLedgerId             |
28 |    19-Dec-02  S. Singhania    Fixed the bug # 2701293. Added new sources to|
29 |                                 the cache. Added set_process_cache.        |
30 |    06-Jan-03  S. Singhania    Made changes due to change in column names of|
31 |                                 ledger view XLA_ALT_CURR_LEDGERS_V         |
32 |    08-Jan-03  K. Boussema     Update GetTranslatedValueChar to get         |
33 |                                 XLA_NLS_DESC_LANGUAGE and                  |
34 |                                 XLA_ACCT_REVERSAL_OPTION values            |
35 |    16-Jan-03  S. Singhania    Made changes due to changes in the ledger    |
36 |                                 view XLA_ALT_CURR_LEDGERS_V                |
37 |    21-Feb-03  S. Singhania    Made changes for the new bulk approach of the|
38 |                                 accounting program                         |
39 |                                      - added 'p_max_event_date' param to   |
40 |                                           load_application_ledgers         |
41 |                                      - added procedure 'get_pad_info'      |
42 |                                      - removed datatypes to cache event    |
43 |                                           information                      |
44 |                                      - merged ledger cahce structures      |
45 |                                      - formatting.                         |
46 |    04-Apr-03  S. Singhania    rewrote the APIs and Modified the specs for: |
47 |                                 - GetValueNum                              |
48 |                                 - GetValueDate                             |
49 |                                 - GetValueChar                             |
50 |                               Made changes due to amb_context_code and new |
51 |                                 sources. Please refer to bug # 2887554     |
52 |    02-May-03  S. Singhania    Added section to initilize variables under   |
53 |                                 LOAD_APPLICATION_LEDGERS                   |
54 |                               Added 'allow_intercompany_post_flag' to the  |
55 |                                 cache (bug # 2922615)                      |
56 |    03-May-03  S. Singhania    Added more exception handlers for debugging  |
57 |    07-May-03  S. Singhania    Based on requirements from the 'Accounting   |
58 |                                 Engine' remodified the specifications for: |
59 |                                 - GetValueNum                              |
60 |                                 - GetValueDate                             |
61 |                                 - GetValueChar                             |
62 |                                 - load_application_ledgers                 |
63 |                                 - GetAlcLedgers                            |
64 |                               Modified code to support new specifications  |
65 |                               Renamed 'GetBaseLedgers' to 'GetLedgers'     |
66 |                               Modified the structure of cache to handle ALC|
67 |                                 as there will not be any ALC for secondary |
68 |                               Added local 'Trace' package                  |
69 |    08-May-03  S. Singhania    Modified ALC cache structure and alc cursor  |
70 |                                 to include SLA_LEDGER_ID as attribute of   |
71 |                                 ALC ledgers.(bug # 2948635)                |
72 |    12-Jun-03  S. Singhania    Added trace messages in GET_PAD_INFO         |
73 |                               Added correct calls to FND Messages (bug #   |
74 |                                 3001156)                                   |
75 |    25-Jun-03  S. Singhania    Modified the package to use FND_LOG.         |
76 |    16-Jul-03  S. Singhania    Added following APIs:                        |
77 |                                 - GetValueNum         (Overloaded)         |
78 |                                 - GetValueDate        (Overloaded)         |
79 |                                 - GetValueChar        (Overloaded)         |
80 |                                 - GetSessionValueChar                      |
81 |                                 - GetSessionValueChar (Overloaded)         |
82 |                                 - get_event_info                           |
83 |                               Added following internal routines            |
84 |                                 - load_system_sources                      |
85 |                                 - is_source_valid                          |
86 |                               Modified specifications for:                 |
87 |                                 - GetValueChar                             |
88 |                                 - Get_PAD_info                             |
89 |                               Modified the cache structures.               |
90 |    21-Jul-03  S. Singhania    Added NVL in GET_PAD_INFO for date comparison|
91 |                               modified the where clause for csr_ledger_pad |
92 |                                 to select all pads before event's max date |
93 |                                 (bug # 3036628)                            |
94 |    25-Jul-03  S. Singhania    Modified LOAD_APPLICATION_LEDGERS to reduce  |
95 |                                 code maintenance.                          |
96 |    01-Aug-03  S. Singhania    Enabled the validation in IS_SOURCE_VALID to |
97 |                                 make sure the system source code is defined|
98 |                                 in AMB.                                    |
99 |    11-Sep-03  S. Singhania    Made changes to cache je_category (# 3109690)|
100 |                                 - Modified the structures that store 'event|
101 |                                   class' and 'event type' info.            |
102 |                                 - Modified CACHE_APPLICATION_SETUP to cache|
103 |                                   je_categories for event_class/ledger.    |
104 |                                 - Added API GET_JE_CATEGORY                |
105 |    21-Nov-03  S. Singhania    Added new system source (bug # 3264446)      |
106 |                                   DYNAMIC_INSERTS_ALLOWED_FLAG.            |
107 |    22-Dec-03  S. Singhania    Made changes for the FND_LOG.                |
108 |                               Added the condition in cursor csr_base_ledger|
109 |                                 in LOAD_APPLICATION_LEDGERS to check if    |
110 |                                 relationship is enabled in configurations. |
111 |    06-Jan-04  S. Singhania    Further FND_LOG changes.                     |
112 |    16-Feb-04  S. Singhania    Bug 3443779. Cached ledger_category_code for |
113 |                                 ALC ledgers.                               |
114 |    18-Mar-04  S. Singhania    Added a parameter p_module to the TRACE calls|
115 |                                 and the procedure.                         |
116 |    20-Sep-04  S. Singhania    Added the following to support bulk changes  |
117 |                                 in the accounting engine                   |
118 |                                 - Added API GetArrayPad                    |
119 |    01-NOV-04  S. Singhania    Made changes for Valuation Method            |
120 |                                 .Enhancements:                             |
121 |                                 - Modified LOAD_APPLICATION_LEDGERS        |
122 |                               Fixed GSCC warning File.Sql.35               |
123 |    9-Mar-05   W. Shen         Add the function BuildLedgerArray and        |
124 |                                 GetLedgerArray to support the calculation  |
125 |                                 of rounding                                |
126 |                               Add several field to the cache too           |
127 |                                 XLA_ALC_ENABLED_FLAG                       |
128 |                                 XLA_ROUNDING_CCID                          |
129 |                                 XLA_INHERIT_CONVERSION_TYPE                |
130 |                                 XLA_DEFAULT_CONV_RATE_TYPE                 |
131 |                                 XLA_MAX_DAYS_ROLL_RATE                     |
132 |                                 XLA_CURRENCY_MAU                           |
133 |                                 XLA_ROUNDING_RULE_CODE                     |
134 |    26-May-05   W. Shen         Add the function GetCurrencyMau             |
135 |    27-May-05   W. Chan         Fix bug 4161247 - Add following to cache:   |
136 |                                1. transaction_calendar_id                  |
137 |                                2. enable_average_balances_flag             |
138 |                                3. effective_date_rule_code                 |
139 |    20-Jun-05   W. Shen         Fix bug 4444191, add ledger name for alc    |
140 |    5-Jul-05    W. Shen         Fix bug 4476180, treat the flag             |
141 |                                'ALC_INHERIT_CONVERSION_TYPE' as 'Y' when   |
142 |                                it is null                                  |
143 |    17-Aug-05   V. Swapna       Fix bug 4554935, modified                   |
144 |                                  cursor csr_je_category                    |
145 |    01-Dec-05   S. Singhania    Bug 4640689. Modified cursors:              |
146 |                                 csr_base_ledger and csr_alc_ledger         |
147 |                                 to get right value for sla_ledger_id       |
148 |    24-Jan-06   V. Swapna       Fix bug 4736579. Added an exception         |
149 |                                 in get_je_category procedure.              |
150 |    02-Mar-06   V. Swapna       Bug 5018098: Added an exception in          |
151 |                                 load_application_ledgers procedure.        |
152 |    24-Jan-2011 karamakr        Bug:11680489- Made code changes for VM based|
153 |                                secondary ledger                            |
154 |    19-Dec-2011 vgopiset        12985804 changes to perform ALC Accounting  |
155 |                                based on the MO Access to support 11i ALC   |
156 |                                Specific accounting at Org Level.           |
157 |    29-Aug-2012 nmikkili        14522783 changes to use the rounding        |
158 |                                differences tracking account for the        |
159 |                                reporting ledger from the ledger setup of   |
160 |                                the reporting ledger. Only if it is not     |
161 |                                defined for the reporting ledger we should  |
162 |                                use it from the primary ledger.             |
163 +===========================================================================*/
164 
165 --=============================================================================
166 --           ****************  declarations  ********************
167 --=============================================================================
168 -------------------------------------------------------------------------------
169 -- declaring data types
170 -------------------------------------------------------------------------------
171 -------------------------------------------------------------------------------
172 --
173 -------------------------------------------------------------------------------
174 TYPE t_array_char_value IS TABLE OF VARCHAR2(240) INDEX BY VARCHAR2(30);
175 
176 -------------------------------------------------------------------------------
177 --
178 -------------------------------------------------------------------------------
179 TYPE t_array_num_value IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
180 
181 -------------------------------------------------------------------------------
182 --
183 -------------------------------------------------------------------------------
184 TYPE t_array_date_value IS TABLE OF DATE INDEX BY VARCHAR2(30);
185 
186 -------------------------------------------------------------------------------
187 --
188 -------------------------------------------------------------------------------
189 TYPE t_array_je_category IS TABLE OF VARCHAR2(80) INDEX BY BINARY_INTEGER;
190 
191 -------------------------------------------------------------------------------
192 --
193 -------------------------------------------------------------------------------
194 TYPE t_record_sources IS RECORD
195    (char_sources                t_array_char_value
196    ,num_sources                 t_array_num_value
197    ,date_sources                t_array_date_value
198    ,char_sources_sl             t_array_char_value);
199 
200 -------------------------------------------------------------------------------
201 --
202 -------------------------------------------------------------------------------
203 TYPE t_record_ledger IS RECORD
204    (category_code               VARCHAR2(30)
205    ,char_sources                t_array_char_value
206    ,num_sources                 t_array_num_value
207    ,date_sources                t_array_date_value
208    ,char_sources_sl             t_array_char_value
209    ,pads                        t_array_pad);
210 
211 -------------------------------------------------------------------------------
212 --
213 -------------------------------------------------------------------------------
214 TYPE t_array_ledger IS TABLE OF t_record_ledger INDEX BY BINARY_INTEGER;
215 
216 -------------------------------------------------------------------------------
217 --
218 -------------------------------------------------------------------------------
219 TYPE t_record_event_type IS RECORD
220    (event_type_name_tl                       t_array_char_value
221    ,event_type_name_sl                       VARCHAR2(240));
222 
223 -------------------------------------------------------------------------------
224 --
225 -------------------------------------------------------------------------------
226 TYPE t_array_event_type IS TABLE of t_record_event_type INDEX BY VARCHAR2(30);
227 
228 -------------------------------------------------------------------------------
229 --
230 -------------------------------------------------------------------------------
231 TYPE t_record_event_class IS RECORD
232    (event_class_name_tl                    t_array_char_value
233    ,xla_je_category                        t_array_je_category
234    ,event_class_name_sl                    VARCHAR2(240));
235 
236 TYPE t_record_currency_mau is RECORD
237    ( currency_code                         VARCHAR2(30)
238     ,currency_mau                          NUMBER);
239 -------------------------------------------------------------------------------
240 --
241 -------------------------------------------------------------------------------
242 TYPE t_array_event_class IS TABLE of t_record_event_class INDEX BY VARCHAR2(30);
243 
244 -------------------------------------------------------------------------------
245 -- declaring package variables
246 -------------------------------------------------------------------------------
247 g_primary_ledger_id                 NUMBER;
248 g_record_session                    t_record_sources;
249 g_base_ledger_ids                   t_array_ledger_id;
250 g_alc_ledger_ids                    t_array_ledger_id;
251 g_array_ledger                      t_array_ledger;
252 g_array_sources                     t_array_char_value;
253 g_array_event_classes               t_array_event_class;
254 g_array_event_types                 t_array_event_type;
255 g_array_ledger_attrs                t_array_ledger_attrs;
256 g_entered_currency_mau              t_record_currency_mau;
257 g_entered_currency_mau1             t_record_currency_mau;
258 g_entered_currency_mau2             t_record_currency_mau;
259 
260 
261 -------------------------------------------------------------------------------
262 -- Forward declaration of local routines
263 -------------------------------------------------------------------------------
264 PROCEDURE cache_application_setup
265        (p_application_id             IN  INTEGER
266        ,p_ledger_id                  IN  INTEGER
267        ,p_ledger_category            IN  VARCHAR2);
268 
269 PROCEDURE load_system_sources;
270 
271 FUNCTION is_source_valid
272        (p_source_code         IN VARCHAR2
273        ,p_datatype            IN VARCHAR2)
274 RETURN BOOLEAN;
275 --=============================================================================
276 --               *********** Local Trace Routine **********
277 --=============================================================================
278 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
279 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
280 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
281 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
282 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
283 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
284 
285 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
286 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_accounting_cache_pkg';
287 
288 --g_log_module          VARCHAR2(240);
289 g_log_level           NUMBER;
290 g_log_enabled         BOOLEAN;
291 
292 PROCEDURE trace
293        (p_msg                        IN VARCHAR2
294        ,p_level                      IN NUMBER
295        ,p_module                     IN VARCHAR2) IS
296 --l_module         VARCHAR2(240);
297 BEGIN
298    IF (p_msg IS NULL AND p_level >= g_log_level) THEN
299       fnd_log.message(p_level, NVL(p_module,C_DEFAULT_MODULE));
300    ELSIF p_level >= g_log_level THEN
301       fnd_log.string(p_level, NVL(p_module,C_DEFAULT_MODULE), p_msg);
302    END IF;
303 
304 EXCEPTION
305    WHEN xla_exceptions_pkg.application_exception THEN
306       RAISE;
307    WHEN OTHERS THEN
308       xla_exceptions_pkg.raise_message
309          (p_location   => 'xla_accounting_cache_pkg.trace');
310 END trace;
311 
312 
313 --=============================================================================
314 --          *********** public procedures and functions **********
315 --=============================================================================
316 
317 --=============================================================================
318 --
319 --
320 --
321 --
322 --
323 --
324 --
325 --
326 --
327 --
328 -- Following are public routines
329 --
330 --    1.    load_application_ledgers
331 --    2.    get_pad_info
332 --    3.    get_event_info
333 --    4.    GetValueNum
334 --    5.    GetValueNum           (Overloaded API)
335 --    6.    GetValueDate
336 --    7.    GetValueDate          (Overloaded API)
337 --    8.    GetValueChar
338 --    9.    GetValueChar          (overloaded API)
339 --   10.    GetSessionValueChar
340 --   11.    GetSessionValueChar   (overloaded API)
341 --   12.    GetAlcLedgers
342 --   13.    GetLedgers
343 --   14.    get_je_category
344 --   15.    GetArrayPad
345 --
346 --
347 --
348 --
349 --
350 --
351 --
352 --
353 --
354 --
355 --
356 --=============================================================================
357 
358 --=============================================================================
359 --
360 --
361 --
362 --=============================================================================
363 PROCEDURE load_application_ledgers
364        (p_application_id             IN  INTEGER
365        ,p_event_ledger_id            IN  INTEGER
366        ,p_max_event_date             IN  DATE) IS
367 CURSOR csr_base_ledger (x_event_ledger_category IN VARCHAR2) IS
368    (SELECT fat.application_name                 application_name
369           ,fat.application_id                   application_id
370           ,gjs.user_je_source_name              user_je_source_name
371           ,xso.je_source_name                   je_source_name
372           ,xso.name                             ledger_name
373           ,xso.ledger_id                        ledger_id
374           ,fst.id_flex_structure_name           ledger_coa_name
375           ,fsv.id_flex_structure_name           session_coa_name
376           ,fsv.dynamic_inserts_allowed_flag     dynamic_inserts_allowed_flag
377           ,xso.chart_of_accounts_id             coa_id
378           ,amt.name                             ledger_slam_name
379           ,amv.name                             session_slam_name
380           ,xso.sla_accounting_method_code       slam_code
381           ,xso.sla_accounting_method_type       slam_type
382           ,xso.currency_code                    xla_currency_code
383           ,NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
384                                                 xla_description_language
385           ,NVL(fla.nls_language,SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE'))
386                                                 xla_nls_desc_language
387           ,xso.sla_entered_cur_bal_sus_ccid     xla_entered_cur_bal_sus_ccid
388           ,xso.res_encumb_code_combination_id   res_encumb_code_combination_id
389           ,xso.ledger_category_code             ledger_category_code
390           ,fcu.precision                        ledger_currency_precision
391           ,nvl(fcu.minimum_accountable_unit, power(10, -1* fcu.precision))
392                                                 ledger_currency_mau
393           ,xso.rounding_rule_code               xla_rounding_rule_code
394           ,xso.sl_coa_mapping_id                coa_mapping_id
395           ,gcm.name                             coa_mapping_name
396           ,xso.bal_seg_column_name              bal_seg_column_name
397           ,xso.mgt_seg_column_name              mgt_seg_column_name
398           ,xso.sla_bal_by_ledger_curr_flag      xla_ledger_cur_bal_flag
399           ,xso.sla_ledger_cur_bal_sus_ccid      xla_ledger_cur_bal_sus_ccid
400           ,xso.rounding_code_combination_id     xla_rounding_ccid
401           ,xso.acct_reversal_option_code        xla_acct_reversal_option_code
402           -- the following is modified for bug 4640689
403           ,decode(xso.capture_event_flag
404                  ,'Y',xso.ledger_id
405                  ,xso.primary_ledger_id)        sla_ledger_id
406           ,xso.latest_encumbrance_year          latest_encumbrance_year
407           ,xso.bal_seg_value_option_code        bal_seg_value_option_code
408           ,xso.mgt_seg_value_option_code        mgt_seg_value_option_code
409           ,xso.allow_intercompany_post_flag     allow_intercompany_post_flag
410           ,nvl(xso.ALC_INHERIT_CONVERSION_TYPE, 'Y') ALC_INHERIT_CONVERSION_TYPE
411           ,xso.ALC_DEFAULT_CONV_RATE_TYPE
412           ,decode(xso.ALC_NO_RATE_ACTION_CODE, 'FIND_RATE', nvl(xso.ALC_MAX_DAYS_ROLL_RATE, -1), 0)
413                                                 ALC_MAX_DAYS_ROLL_RATE
414           ,xso.transaction_calendar_id      transaction_calendar_id
415           ,xso.enable_average_balances_flag enable_average_balances_flag
416           ,gjs.effective_date_rule_code     effective_date_rule_code
417           ,xso.suspense_allowed_flag        suspense_allowed_flag
418       FROM xla_subledger_options_v          xso
419           ,fnd_application_tl               fat
420           ,gl_je_sources_vl                 gjs
421           ,fnd_id_flex_structures_tl        fst
422           ,fnd_id_flex_structures_vl        fsv
423           ,xla_acctg_methods_tl             amt
424           ,xla_acctg_methods_vl             amv
425           ,fnd_currencies                   fcu
426           ,fnd_languages                    fla
427           ,gl_coa_mappings                  gcm
428      WHERE xso.application_id               = p_application_id
429        AND xso.relationship_enabled_flag    = 'Y'
430        AND xso.sla_accounting_method_code   IS NOT NULL
431        --
432        -- >> valuation method enhanacements
433        --
434        AND DECODE(x_event_ledger_category
435                  ,'PRIMARY',xso.primary_ledger_id
436                  ,xso.ledger_id)            = p_event_ledger_id
437        AND DECODE(x_event_ledger_category
438                  ,'PRIMARY',DECODE(xso.ledger_category_code
439                                   ,'PRIMARY','Y'
440                                   ,'N')
441                  ,'Y')                      = xso.capture_event_flag
442        --
443        -- << valuation method enhanacements
444        --
445        AND xso.enabled_flag                 = 'Y'
446        AND fat.application_id               = xso.application_id
447        AND fat.language                     =
448                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
449        AND gjs.je_source_name               = xso.je_source_name
450        AND fst.application_id               = 101
451        AND fst.id_flex_code                 = 'GL#'
452        AND fst.id_flex_num                  = xso.chart_of_accounts_id
453        AND fst.language                     =
454                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
455        AND fsv.application_id               = 101
456        AND fsv.id_flex_code                 = 'GL#'
457        AND fsv.id_flex_num                  = xso.chart_of_accounts_id
458        AND amt.accounting_method_code       = xso.sla_accounting_method_code
459        AND amt.accounting_method_type_code  = xso.sla_accounting_method_type
460        AND amt.language                     =
461                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
462        AND amv.accounting_method_code       = xso.sla_accounting_method_code
463        AND amv.accounting_method_type_code  = xso.sla_accounting_method_type
464        AND fcu.currency_code                = xso.currency_code
465        AND fla.language_code                     =
466                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
467        AND gcm.coa_mapping_id(+)            = xso.sl_coa_mapping_id)
468      ORDER BY xso.ledger_category_code;
469 
470 CURSOR csr_alc_ledger (p_base_ledger_id        IN NUMBER) IS
471    (SELECT xlr.target_ledger_id                 ledger_id
472           ,xlr.name                             ledger_name
473           ,xlr.currency_code                    ledger_currency
474           ,fcu.precision                        ledger_currency_precision
475           ,nvl(fcu.minimum_accountable_unit, power(10, -1* fcu.precision))
476                                                 ledger_currency_mau
477           -- the following is modified for bug 4640689
478           ,decode(xsl.alc_enabled_flag
479                  ,'Y',p_base_ledger_id
480                  ,xlr.target_ledger_id)         sla_ledger_id
481           ,nvl(xlr.ALC_INHERIT_CONVERSION_TYPE, 'Y') ALC_INHERIT_CONVERSION_TYPE
482           ,xlr.ALC_DEFAULT_CONV_RATE_TYPE
483           ,decode(xlr.ALC_NO_RATE_ACTION_CODE, 'FIND_RATE', nvl(xlr.ALC_MAX_DAYS_ROLL_RATE, -1), 0)
484                                                 ALC_MAX_DAYS_ROLL_RATE
485 	  ,l.ROUNDING_CODE_COMBINATION_ID       ROUNDING_CODE_COMBINATION_ID -- added for bug14522783
486       FROM xla_ledger_relationships_v  xlr
487           ,fnd_currencies              fcu
488           -- the following is added for bug 4640689
489           ,xla_subledgers              xsl
490 	  ,gl_ledgers l                              -- 14522783
491      WHERE xlr.primary_ledger_id          = p_base_ledger_id
492        AND l.ledger_id = xlr.target_ledger_id --14522783
493        AND xlr.relationship_enabled_flag  = 'Y'
494        AND xlr.ledger_category_code       = 'ALC'
495        AND fcu.currency_code              = xlr.currency_code
496        AND xsl.application_id             = p_application_id
497         -- added 12985804
498        AND ( p_application_id NOT IN (140,200,201,222,275,707)
499              OR
500 	     ( p_application_id = 707
501 	       AND TRIM(xsl.SECURITY_FUNCTION_NAME) IS NULL
502 	     )
503 	   )
504      UNION
505     SELECT glr.target_ledger_id                 ledger_id
506           ,glg.name                             ledger_name
507           ,glg.currency_code                    ledger_currency
508           ,fcu.precision                        ledger_currency_precision
509           ,nvl(fcu.minimum_accountable_unit, power(10, -1* fcu.precision))
510                                                 ledger_currency_mau
511           ,decode(xsl.alc_enabled_flag
512                  ,'Y',p_base_ledger_id
513                  ,glr.target_ledger_id)         sla_ledger_id
514           ,nvl(glr.ALC_INHERIT_CONVERSION_TYPE, 'Y') ALC_INHERIT_CONVERSION_TYPE
515           ,glr.ALC_DEFAULT_CONV_RATE_TYPE
516           ,decode(glr.ALC_NO_RATE_ACTION_CODE, 'FIND_RATE', nvl(glr.ALC_MAX_DAYS_ROLL_RATE, -1), 0)
517                                                 ALC_MAX_DAYS_ROLL_RATE
518 	  ,glg.ROUNDING_CODE_COMBINATION_ID       ROUNDING_CODE_COMBINATION_ID -- added for bug14522783
519       FROM gl_ledger_relationships     glr
520           ,gl_ledgers                  glg
521           ,fnd_currencies              fcu
522           ,xla_subledgers              xsl
523      WHERE glr.primary_ledger_id          = p_base_ledger_id
524        AND glr.relationship_enabled_flag  = 'Y'
525        AND glg.ledger_category_code       = 'ALC'
526        AND glr.relationship_type_code     = 'SUBLEDGER'
527        AND glr.target_ledger_id           = glg.ledger_id
528        AND glg.object_type_code           = 'L'
529        AND glg.le_ledger_type_code        = 'L'
530        AND fcu.currency_code              = glg.currency_code
531        AND xsl.application_id             = p_application_id
532        AND glr.application_id             = decode(xsl.application_id,707,201,xsl.application_id) -- added 12985804 to make Costing follow org setting of Purchasing
533        AND ( p_application_id IN (140,200,201,222,275)
534              OR
535 	     ( p_application_id = 707
536 	       AND TRIM(xsl.SECURITY_FUNCTION_NAME) IS NOT NULL
537 	     )
538 	   )
539        AND (glr.org_id                    = -99
540             OR mo_global.check_access(glr.org_id) = 'Y')
541        AND glr.relationship_id IN (SELECT Max(glr2.relationship_id)
542                                      FROM gl_ledger_relationships glr2
543                                     WHERE glr2.primary_ledger_id   = glr.primary_ledger_id
544                                       AND glr2.target_ledger_id    = glr.target_ledger_id
545                                       AND glr2.application_id      = glr.application_id
546                                       AND (glr2.org_id             = -99
547                                            OR mo_global.check_access(glr2.org_id) = 'Y'))
548        );
549 
550 CURSOR csr_ledger_pad
551           (p_accounting_method_type            IN VARCHAR2
552           ,p_accounting_method_code            IN VARCHAR2
553           ,p_ledger_desc_language              IN VARCHAR2) IS
554    (SELECT xmr.acctg_method_rule_id              rule_id
555           ,xmr.amb_context_code                  amb_context_code
556           ,xmr.product_rule_type_code            pad_type
557           ,xmr.product_rule_code                 pad_code
558           ,prt.name                              ledger_pad_name
559           ,prv.name                              session_pad_name
560           ,xpr.compile_status_code               compile_status
561           ,xmr.start_date_active                 start_date
562           ,xmr.end_date_active                   end_date
563           ,xla_cmp_hash_pkg.BuildPackageName
564               (p_application_id
565               ,xmr.product_rule_code
566               ,xmr.product_rule_type_code
567               ,xmr.amb_context_code)          pad_package_name
568       FROM xla_acctg_method_rules             xmr
569           ,xla_product_rules_b                xpr
570           ,xla_product_rules_tl               prt
571           ,xla_product_rules_vl               prv
572      WHERE xmr.application_id                 =  p_application_id
573        AND xmr.accounting_method_type_code    =  p_accounting_method_type
574        AND xmr.accounting_method_code         =  p_accounting_method_code
575        AND xmr.amb_context_code               =  NVL(fnd_profile.value('XLA_AMB_CONTEXT'),'DEFAULT')
576        AND NVL(xmr.start_date_active
577               ,NVL(p_max_event_date
578                   ,TRUNC(sysdate)
579                   )
580               )
581                                               <= NVL(p_max_event_date,TRUNC(sysdate))
582        AND xpr.application_id                 =  p_application_id
583        AND xpr.amb_context_code               =  xmr.amb_context_code
584        AND xpr.product_rule_type_code         =  xmr.product_rule_type_code
585        AND xpr.product_rule_code              =  xmr.product_rule_code
586        AND xpr.enabled_flag                   =  'Y'
587        AND prt.application_id                 =  xpr.application_id
588        AND prt.amb_context_code               =  xpr.amb_context_code
589        AND prt.product_rule_type_code         =  xpr.product_rule_type_code
590        AND prt.product_rule_code              =  xpr.product_rule_code
591        AND prt.language                       =  p_ledger_desc_language
592        AND prv.application_id                 =  xpr.application_id
593        AND prv.amb_context_code               =  xpr.amb_context_code
594        AND prv.product_rule_type_code         =  xpr.product_rule_type_code
595        AND prv.product_rule_code              =  xpr.product_rule_code);
596 
597 --Bug :11680489-Load Primary Ledger---------
598 CURSOR csr_primary_ledger (x_event_ledger_category IN VARCHAR2
599                            , x_primary_ledger_id IN NUMBER) IS
600    (SELECT fat.application_name                 application_name
601           ,fat.application_id                   application_id
602           ,gjs.user_je_source_name              user_je_source_name
603           ,xso.je_source_name                   je_source_name
604           ,xso.name                             ledger_name
605           ,xso.ledger_id                        ledger_id
606           ,fst.id_flex_structure_name           ledger_coa_name
607           ,fsv.id_flex_structure_name           session_coa_name
608           ,fsv.dynamic_inserts_allowed_flag     dynamic_inserts_allowed_flag
609           ,xso.chart_of_accounts_id             coa_id
610           ,amt.name                             ledger_slam_name
611           ,amv.name                             session_slam_name
612           ,xso.sla_accounting_method_code       slam_code
613           ,xso.sla_accounting_method_type       slam_type
614           ,xso.currency_code                    xla_currency_code
615           ,NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
616                                                 xla_description_language
617           ,NVL(fla.nls_language,SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE'))
618                                                 xla_nls_desc_language
619           ,xso.sla_entered_cur_bal_sus_ccid     xla_entered_cur_bal_sus_ccid
620           ,xso.res_encumb_code_combination_id   res_encumb_code_combination_id
621           ,xso.ledger_category_code             ledger_category_code
622           ,fcu.precision                        ledger_currency_precision
623           ,nvl(fcu.minimum_accountable_unit, power(10, -1* fcu.precision))
624                                                 ledger_currency_mau
625           ,xso.rounding_rule_code               xla_rounding_rule_code
626           ,xso.sl_coa_mapping_id                coa_mapping_id
627           ,gcm.name                             coa_mapping_name
628           ,xso.bal_seg_column_name              bal_seg_column_name
629           ,xso.mgt_seg_column_name              mgt_seg_column_name
630           ,xso.sla_bal_by_ledger_curr_flag      xla_ledger_cur_bal_flag
631           ,xso.sla_ledger_cur_bal_sus_ccid      xla_ledger_cur_bal_sus_ccid
632           ,xso.rounding_code_combination_id     xla_rounding_ccid
633           ,xso.acct_reversal_option_code        xla_acct_reversal_option_code
634           -- the following is modified for bug 4640689
635           ,decode(xso.capture_event_flag
636                  ,'Y',xso.ledger_id
637                  ,xso.primary_ledger_id)        sla_ledger_id
638           ,xso.latest_encumbrance_year          latest_encumbrance_year
639           ,xso.bal_seg_value_option_code        bal_seg_value_option_code
640           ,xso.mgt_seg_value_option_code        mgt_seg_value_option_code
641           ,xso.allow_intercompany_post_flag     allow_intercompany_post_flag
642           ,nvl(xso.ALC_INHERIT_CONVERSION_TYPE, 'Y') ALC_INHERIT_CONVERSION_TYPE
643           ,xso.ALC_DEFAULT_CONV_RATE_TYPE
644           ,decode(xso.ALC_NO_RATE_ACTION_CODE, 'FIND_RATE', nvl(xso.ALC_MAX_DAYS_ROLL_RATE, -1), 0)
645                                                 ALC_MAX_DAYS_ROLL_RATE
646           ,xso.transaction_calendar_id      transaction_calendar_id
647           ,xso.enable_average_balances_flag enable_average_balances_flag
648           ,gjs.effective_date_rule_code     effective_date_rule_code
649           ,xso.suspense_allowed_flag        suspense_allowed_flag
650       FROM xla_subledger_options_v          xso
651           ,fnd_application_tl               fat
652           ,gl_je_sources_vl                 gjs
653           ,fnd_id_flex_structures_tl        fst
654           ,fnd_id_flex_structures_vl        fsv
655           ,xla_acctg_methods_tl             amt
656           ,xla_acctg_methods_vl             amv
657           ,fnd_currencies                   fcu
658           ,fnd_languages                    fla
659           ,gl_coa_mappings                  gcm
660      WHERE xso.application_id               = p_application_id
661        AND xso.relationship_enabled_flag    = 'Y'
662        AND xso.sla_accounting_method_code   IS NOT NULL
663        --
664        -- >> valuation method enhanacements
665        --
666        AND DECODE(x_event_ledger_category
667                  ,'PRIMARY',xso.primary_ledger_id
668                  ,xso.ledger_id)            = x_primary_ledger_id
669        AND DECODE(x_event_ledger_category
670                  ,'PRIMARY',DECODE(xso.ledger_category_code
671                                   ,'PRIMARY','Y'
672                                   ,'N')
673                  ,'Y')                      = xso.capture_event_flag
674        --
675        -- << valuation method enhanacements
676        --
677        AND xso.enabled_flag                 = 'Y'
678        AND fat.application_id               = xso.application_id
679        AND fat.language                     =
680                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
681        AND gjs.je_source_name               = xso.je_source_name
682        AND fst.application_id               = 101
683        AND fst.id_flex_code                 = 'GL#'
684        AND fst.id_flex_num                  = xso.chart_of_accounts_id
685        AND fst.language                     =
686                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
687        AND fsv.application_id               = 101
688        AND fsv.id_flex_code                 = 'GL#'
689        AND fsv.id_flex_num                  = xso.chart_of_accounts_id
690        AND amt.accounting_method_code       = xso.sla_accounting_method_code
691        AND amt.accounting_method_type_code  = xso.sla_accounting_method_type
692        AND amt.language                     =
693                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
694        AND amv.accounting_method_code       = xso.sla_accounting_method_code
695        AND amv.accounting_method_type_code  = xso.sla_accounting_method_type
696        AND fcu.currency_code                = xso.currency_code
697        AND fla.language_code                     =
698                          NVL(xso.sla_description_language,SYS_CONTEXT('USERENV','LANG'))
699        AND gcm.coa_mapping_id(+)            = xso.sl_coa_mapping_id)
700      ORDER BY xso.ledger_category_code;
701 --------Load Primary Ledger ends---------
702 
703 --Bug :11680489- Code change for VM based secondary ledger having different CoA than primary
704 CURSOR csr IS
705 SELECT xso.primary_ledger_id
706  FROM  xla_subledger_options_v xso
707  WHERE xso.ledger_id = p_event_ledger_id
708    AND xso.application_id =p_application_id
709    AND ledger_category_code = 'SECONDARY'
710    AND valuation_method_flag = 'Y';
711 
712 l_pad_count                 NUMBER;
713 l_application_name          VARCHAR2(240);
714 l_ledger_name               VARCHAR2(240);
715 l_base_ledger_count         NUMBER          := 0;
716 l_alc_ledger_count          NUMBER          := 0;
717 l_event_ledger_category     VARCHAR2(80);
718 l_log_module                VARCHAR2(240);
719 l_primary_ledger_id         NUMBER; --Bug :11680489
720 BEGIN
721    IF g_log_enabled THEN
722       l_log_module := C_DEFAULT_MODULE||'.load_application_ledgers';
723    END IF;
724 
725 --   IF ((g_log_enabled = TRUE) AND (C_LEVEL_PROCEDURE >= g_log_level)) THEN
726    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
727       trace
728          (p_msg      => 'BEGIN of procedure LOAD_APPLICATION_LEDGERS'
729          ,p_level    => C_LEVEL_PROCEDURE
730          ,p_module   => l_log_module);
731       trace
732          (p_msg      => 'p_application_id = '  ||TO_CHAR(p_application_id)
733          ,p_level    => C_LEVEL_PROCEDURE
734          ,p_module   => l_log_module);
735       trace
736          (p_msg      => 'p_event_ledger_id = '||TO_CHAR(p_event_ledger_id)
737          ,p_level    => C_LEVEL_PROCEDURE
738          ,p_module   => l_log_module);
739       trace
740          (p_msg      => 'p_max_event_date = ' ||TO_CHAR(p_max_event_date)
741          ,p_level    => C_LEVEL_PROCEDURE
742          ,p_module   => l_log_module);
743    END IF;
744 
745    ----------------------------------------------------------------------------
746    -- initializing all the variables
747    ----------------------------------------------------------------------------
748    g_record_session                   := NULL;
749    g_primary_ledger_id                := NULL;
750    g_base_ledger_ids.DELETE;
751    g_alc_ledger_ids.DELETE;
752    g_array_ledger.DELETE;
753    g_array_sources.DELETE;
754    g_array_event_classes.DELETE;
755    g_array_event_types.DELETE;
756    g_array_ledger_attrs.array_ledger_id.DELETE;
757    g_array_ledger_attrs.array_ledger_type.DELETE;
758    g_array_ledger_attrs.array_ledger_currency_code.DELETE;
759    g_array_ledger_attrs.array_rounding_rule_code.DELETE;
760    g_array_ledger_attrs.array_rounding_offset.DELETE;
761    g_array_ledger_attrs.array_mau.DELETE;
762    g_entered_currency_mau:= NULL;
763    g_entered_currency_mau1:= NULL;
764    g_entered_currency_mau2:= NULL;
765 
766 
767    ----------------------------------------------------------------------------
768    -- Caching application level information
769    ----------------------------------------------------------------------------
770    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
771       trace
772          (p_msg      => 'Reading application level cache for application '||
773                         TO_CHAR(p_application_id)
774          ,p_level    => C_LEVEL_STATEMENT
775          ,p_module   => l_log_module);
776    END IF;
777 
778    SELECT TRUNC(sysdate)
779          ,fnd_profile.value('USER_ID')
780          ,xsl.application_id
781          ,fav.application_short_name
782          ,fav.application_name
783          ,xsl.je_source_name
784          ,jsv.user_je_source_name
785          ,xsl.valuation_method_flag
786          ,decode(nvl(xsl.control_account_type_code, 'N'), 'N', 'N', 'Y')
787          ,xsl.alc_enabled_flag
788      INTO g_record_session.date_sources('XLA_CREATION_DATE')
789          ,g_record_session.num_sources('XLA_ENTRY_CREATED_BY')
790          ,g_record_session.num_sources('XLA_EVENT_APPL_ID')
791          ,g_record_session.char_sources('XLA_EVENT_APPL_SHORT_NAME')
792          ,g_record_session.char_sources_sl('XLA_EVENT_APPL_NAME')
793          ,g_record_session.char_sources('XLA_JE_SOURCE_NAME')
794          ,g_record_session.char_sources_sl('XLA_USER_JE_SOURCE_NAME')
795          ,g_record_session.char_sources('VALUATION_METHOD_FLAG')
796          ,g_record_session.char_sources('CONTROL_ACCOUNT_ENABLED_FLAG')
797          ,g_record_session.char_sources('XLA_ALC_ENABLED_FLAG')
798      FROM xla_subledgers           xsl
799          ,fnd_application_vl       fav
800          ,gl_je_sources_vl         jsv
801     WHERE xsl.application_id       = p_application_id
802       AND fav.application_id       = xsl.application_id
803       AND jsv.je_source_name       = xsl.je_source_name;
804 
805    IF SQL%NOTFOUND THEN
806       IF (C_LEVEL_ERROR >= g_log_level) THEN
807          trace
808             (p_msg      => 'ERROR: Problem in caching the session level sources '||
809                            'for the application. application ID = '||TO_CHAR(p_application_id)
810             ,p_level    => C_LEVEL_ERROR
811             ,p_module   => l_log_module);
812       END IF;
813 
814       xla_exceptions_pkg.raise_message
815          (p_appli_s_name   => 'XLA'
816          ,p_msg_name       => 'XLA_COMMON_ERROR'
817          ,p_token_1        => 'ERROR'
818          ,p_value_1        => 'Problem in caching the session level sources for the application.'
819          ,p_token_2        => 'LOCATION'
820          ,p_value_2        => 'load_application_ledgers');
821    END IF;
822 
823    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
824       trace
825          (p_msg      => 'xla_event_appl_short_name = '||
826                         g_record_session.char_sources('XLA_EVENT_APPL_SHORT_NAME')
827          ,p_level    => C_LEVEL_STATEMENT
828          ,p_module   => l_log_module);
829       trace
830          (p_msg      => 'xla_creation_date = '||
831                         TO_CHAR(g_record_session.date_sources('XLA_CREATION_DATE'))
832          ,p_level    => C_LEVEL_STATEMENT
833          ,p_module   => l_log_module);
834       trace
835          (p_msg      => 'xla_entry_created_by = '||
836                         TO_CHAR(g_record_session.num_sources('XLA_ENTRY_CREATED_BY'))
837          ,p_level    => C_LEVEL_STATEMENT
838          ,p_module   => l_log_module);
839       trace
840          (p_msg      => 'application_id = '||
841                         TO_CHAR(g_record_session.num_sources('XLA_EVENT_APPL_ID'))
842          ,p_level    => C_LEVEL_STATEMENT
843          ,p_module   => l_log_module);
844       trace
845          (p_msg      => 'valuation_method_flag = '||
846                         g_record_session.char_sources('VALUATION_METHOD_FLAG')
847          ,p_level    => C_LEVEL_STATEMENT
848          ,p_module   => l_log_module);
849       trace
850          (p_msg      => 'control_account_enabled_flag = '||
851                         g_record_session.char_sources('CONTROL_ACCOUNT_ENABLED_FLAG')
852          ,p_level    => C_LEVEL_STATEMENT
853          ,p_module   => l_log_module);
854       trace
855          (p_msg      => 'xla_alc_enabled_flag= '||
856                         g_record_session.char_sources('XLA_ALC_ENABLED_FLAG')
857          ,p_level    => C_LEVEL_STATEMENT
858          ,p_module   => l_log_module);
859    END IF;
860 
861    ----------------------------------------------------------------------------
862    -- Caching base ledger information
863    ----------------------------------------------------------------------------
864    --
865    -- >> valuation method enhanacements
866    --
867    SELECT ledger_category_code
868      INTO l_event_ledger_category
869      FROM gl_ledgers
870     WHERE ledger_id = p_event_ledger_id;
871    --
872    -- << valuation method enhanacements
873    --
874 
875    FOR c1 IN csr_base_ledger (l_event_ledger_category) LOOP
876       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
877          trace
878             (p_msg      =>'Reading ledger level cache for ledger '||TO_CHAR(c1.ledger_id)
879             ,p_level    => C_LEVEL_STATEMENT
880             ,p_module   => l_log_module);
881       END IF;
882 
883       -------------------------------------------------------------------------
884       -- Storing ledger_id in an array
885       -------------------------------------------------------------------------
886       l_base_ledger_count := l_base_ledger_count +1;
887       g_base_ledger_ids(l_base_ledger_count) := c1.ledger_id;
888 
889       -------------------------------------------------------------------------
890       -- Storing category code in array to efficiently know the ledger
891       -- category
892       -------------------------------------------------------------------------
893       g_array_ledger(c1.ledger_id).category_code     := c1.ledger_category_code;
894 
895       -------------------------------------------------------------------------
896       -- Caching translated information
897       -------------------------------------------------------------------------
898       g_array_ledger(c1.ledger_id)
899                 .char_sources('XLA_EVENT_APPL_NAME') := c1.application_name;
900 
901       g_array_ledger(c1.ledger_id)
902                 .char_sources('XLA_USER_JE_SOURCE_NAME') := c1.user_je_source_name;
903 
904       g_array_ledger(c1.ledger_id)
905                 .char_sources('XLA_LEDGER_NAME') := c1.ledger_name;
906 
907       g_array_ledger(c1.ledger_id)
908                 .char_sources('XLA_COA_NAME') := c1.ledger_coa_name;
909 
910       g_array_ledger(c1.ledger_id)
911                 .char_sources_sl('XLA_COA_NAME') := c1.session_coa_name;
912 
913       g_array_ledger(c1.ledger_id)
914                 .char_sources('XLA_ACCOUNTING_METHOD_NAME') := c1.ledger_slam_name;
915 
916       g_array_ledger(c1.ledger_id)
917                 .char_sources_sl('XLA_ACCOUNTING_METHOD_NAME') := c1.session_slam_name;
918 
919 
920       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
921          trace
922             (p_msg      =>'application_name = '||c1.application_name
923             ,p_level    => C_LEVEL_STATEMENT
924             ,p_module   => l_log_module);
925          trace
926             (p_msg      =>'user_je_source_name = '||c1.user_je_source_name
927             ,p_level    => C_LEVEL_STATEMENT
928             ,p_module   => l_log_module);
929          trace
930             (p_msg      =>'ledger_name = '||c1.ledger_name
931             ,p_level    => C_LEVEL_STATEMENT
932             ,p_module   => l_log_module);
933          trace
934             (p_msg      =>'ledger_coa_name = '||c1.ledger_coa_name
935             ,p_level    => C_LEVEL_STATEMENT
936             ,p_module   => l_log_module);
937          trace
938             (p_msg      =>'session_coa_name = '||c1.session_coa_name
939             ,p_level    => C_LEVEL_STATEMENT
940             ,p_module   => l_log_module);
941          trace
942             (p_msg      =>'ledger_slam_name = '||c1.ledger_slam_name
943             ,p_level    => C_LEVEL_STATEMENT
944             ,p_module   => l_log_module);
945          trace
946             (p_msg      =>'session_slam_name = '||c1.session_slam_name
947             ,p_level    => C_LEVEL_STATEMENT
948             ,p_module   => l_log_module);
949       END IF;
950 
951       -------------------------------------------------------------------------
952       -- Caching untranslated information
953       -------------------------------------------------------------------------
954       g_array_ledger(c1.ledger_id)
955                 .char_sources('DYNAMIC_INSERTS_ALLOWED_FLAG') := c1.dynamic_inserts_allowed_flag;
956 
957       g_array_ledger(c1.ledger_id)
958                 .num_sources('XLA_COA_ID') := c1.coa_id;
959 
960       g_array_ledger(c1.ledger_id)
961                 .char_sources('XLA_ACCOUNTING_METHOD_OWNER') := c1.slam_type;
962 
963       g_array_ledger(c1.ledger_id)
964                 .char_sources('XLA_CURRENCY_CODE') := c1.xla_currency_code;
965 
966       g_array_ledger(c1.ledger_id)
967                 .char_sources('XLA_DESCRIPTION_LANGUAGE') := c1.xla_description_language;
968 
969       g_array_ledger(c1.ledger_id)
970                 .char_sources('XLA_NLS_DESC_LANGUAGE') := c1.xla_nls_desc_language;
971 
972       g_array_ledger(c1.ledger_id)
973                 .num_sources('XLA_ENTERED_CUR_BAL_SUS_CCID') := c1.xla_entered_cur_bal_sus_ccid;
974 
975       g_array_ledger(c1.ledger_id)
976                 .num_sources('XLA_LEDGER_CUR_BAL_SUS_CCID') := c1.xla_ledger_cur_bal_sus_ccid;
977 
978       g_array_ledger(c1.ledger_id)
979                 .num_sources('RES_ENCUMB_CODE_COMBINATION_ID') := c1.res_encumb_code_combination_id;
980 
981       g_array_ledger(c1.ledger_id)
982                 .num_sources('XLA_ROUNDING_CCID') := c1.xla_rounding_ccid;
983 
984       g_array_ledger(c1.ledger_id)
985                 .num_sources('XLA_MAX_DAYS_ROLL_RATE') := c1.ALC_MAX_DAYS_ROLL_RATE;
986 
987       g_array_ledger(c1.ledger_id)
988                 .char_sources('XLA_INHERIT_CONVERSION_TYPE') := c1.ALC_INHERIT_CONVERSION_TYPE;
989 
990       g_array_ledger(c1.ledger_id)
991                 .char_sources('XLA_DEFAULT_CONV_RATE_TYPE') := c1.ALC_DEFAULT_CONV_RATE_TYPE;
992 
993       g_array_ledger(c1.ledger_id)
994                 .char_sources('LEDGER_CATEGORY_CODE') := c1.ledger_category_code;
995 
996       g_array_ledger(c1.ledger_id)
997                 .num_sources('XLA_CURRENCY_PRECISION') := c1.ledger_currency_precision;
998 
999       g_array_ledger(c1.ledger_id)
1000                 .num_sources('XLA_CURRENCY_MAU') := c1.ledger_currency_mau;
1001 
1002       g_array_ledger(c1.ledger_id)
1003                 .char_sources('XLA_ROUNDING_RULE_CODE') := c1.xla_rounding_rule_code;
1004 
1005       g_array_ledger(c1.ledger_id)
1006                 .num_sources('SL_COA_MAPPING_ID') := c1.coa_mapping_id;
1007 
1008       g_array_ledger(c1.ledger_id)
1009                 .char_sources('GL_COA_MAPPING_NAME') := c1.coa_mapping_name;
1010 
1011       g_array_ledger(c1.ledger_id)
1012                 .char_sources('BAL_SEG_COLUMN_NAME') := c1.bal_seg_column_name;
1013 
1014       g_array_ledger(c1.ledger_id)
1015                 .char_sources('MGT_SEG_COLUMN_NAME') := c1.mgt_seg_column_name;
1016 
1017       g_array_ledger(c1.ledger_id)
1018                 .char_sources('SLA_BAL_BY_LEDGER_CURR_FLAG') := c1.xla_ledger_cur_bal_flag;
1019 
1020       g_array_ledger(c1.ledger_id)
1021                 .char_sources('XLA_ACCT_REVERSAL_OPTION') := c1.xla_acct_reversal_option_code;
1022 
1023       g_array_ledger(c1.ledger_id)
1024                 .num_sources('SLA_LEDGER_ID') := c1.sla_ledger_id ;
1025 
1026       g_array_ledger(c1.ledger_id)
1027                 .num_sources('LATEST_ENCUMBRANCE_YEAR') := c1.latest_encumbrance_year;
1028 
1029       g_array_ledger(c1.ledger_id)
1030                 .char_sources('BAL_SEG_VALUE_OPTION_CODE') := c1.bal_seg_value_option_code;
1031 
1032       g_array_ledger(c1.ledger_id)
1033                 .char_sources('MGT_SEG_VALUE_OPTION_CODE') := c1.mgt_seg_value_option_code;
1034 
1035       g_array_ledger(c1.ledger_id)
1036                 .char_sources('ALLOW_INTERCOMPANY_POST_FLAG') := c1.allow_intercompany_post_flag;
1037 
1038       g_array_ledger(c1.ledger_id)
1039                 .num_sources('TRANSACTION_CALENDAR_ID') := c1.transaction_calendar_id;
1040 
1041       g_array_ledger(c1.ledger_id)
1042                 .char_sources('ENABLE_AVERAGE_BALANCES_FLAG') := c1.enable_average_balances_flag;
1043 
1044       g_array_ledger(c1.ledger_id)
1045                 .char_sources('EFFECTIVE_DATE_RULE_CODE') := c1.effective_date_rule_code;
1046 
1047       g_array_ledger(c1.ledger_id)
1048                 .char_sources('SUSPENSE_ALLOWED_FLAG') := c1.suspense_allowed_flag;
1049 
1050       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1051          trace
1052             (p_msg      =>'dynamic_inserts_allowed_flag = '||c1.dynamic_inserts_allowed_flag
1053             ,p_level    => C_LEVEL_STATEMENT
1054             ,p_module   => l_log_module);
1055          trace
1056             (p_msg      =>'coa_id = '||TO_CHAR(c1.coa_id)
1057             ,p_level    => C_LEVEL_STATEMENT
1058             ,p_module   => l_log_module);
1059          trace
1060             (p_msg      =>'slam_type = '||c1.slam_type
1061             ,p_level    => C_LEVEL_STATEMENT
1062             ,p_module   => l_log_module);
1063          trace
1064             (p_msg      =>'xla_currency_code = '||c1.xla_currency_code
1065             ,p_level    => C_LEVEL_STATEMENT
1066             ,p_module   => l_log_module);
1067          trace
1068             (p_msg      =>'xla_description_language = '||c1.xla_description_language
1069             ,p_level    => C_LEVEL_STATEMENT
1070             ,p_module   => l_log_module);
1071          trace
1072             (p_msg      =>'xla_nls_desc_language = '||c1.xla_nls_desc_language
1073             ,p_level    => C_LEVEL_STATEMENT
1074             ,p_module   => l_log_module);
1075          trace
1076             (p_msg      =>'xla_entered_cur_bal_sus_ccid = '||TO_CHAR(c1.xla_entered_cur_bal_sus_ccid)
1077             ,p_level    => C_LEVEL_STATEMENT
1078             ,p_module   => l_log_module);
1079          trace
1080             (p_msg      =>'xla_ledger_cur_bal_sus_ccid = '||TO_CHAR(c1.xla_ledger_cur_bal_sus_ccid)
1081             ,p_level    => C_LEVEL_STATEMENT
1082             ,p_module   => l_log_module);
1083          trace
1084             (p_msg      =>'res_encumb_code_combination_id = '||TO_CHAR(c1.res_encumb_code_combination_id)
1085             ,p_level    => C_LEVEL_STATEMENT
1086             ,p_module   => l_log_module);
1087          trace
1088             (p_msg      =>'ledger_category_code = '||c1.ledger_category_code
1089             ,p_level    => C_LEVEL_STATEMENT
1090             ,p_module   => l_log_module);
1091          trace
1092             (p_msg      =>'ledger_currency_precision = '||TO_CHAR(c1.ledger_currency_precision)
1093             ,p_level    => C_LEVEL_STATEMENT
1094             ,p_module   => l_log_module);
1095          trace
1096             (p_msg      =>'coa_mapping_id = '||TO_CHAR(c1.coa_mapping_id)
1097             ,p_level    => C_LEVEL_STATEMENT
1098             ,p_module   => l_log_module);
1099          trace
1100             (p_msg      =>'coa_mapping_name = '||c1.coa_mapping_name
1101             ,p_level    => C_LEVEL_STATEMENT
1102             ,p_module   => l_log_module);
1103          trace
1104             (p_msg      =>'bal_seg_column_name = '||c1.bal_seg_column_name
1105             ,p_level    => C_LEVEL_STATEMENT
1106             ,p_module   => l_log_module);
1107          trace
1108             (p_msg      =>'mgt_seg_column_name = '||c1.mgt_seg_column_name
1109             ,p_level    => C_LEVEL_STATEMENT
1110             ,p_module   => l_log_module);
1111          trace
1112             (p_msg      =>'xla_ledger_cur_bal_flag = '||c1.xla_ledger_cur_bal_flag
1113             ,p_level    => C_LEVEL_STATEMENT
1114             ,p_module   => l_log_module);
1115          trace
1116             (p_msg      =>'xla_acct_reversal_option_code = '||c1.xla_acct_reversal_option_code
1117             ,p_level    => C_LEVEL_STATEMENT
1118             ,p_module   => l_log_module);
1119          trace
1120             (p_msg      =>'sla_ledger_id = '||TO_CHAR(c1.sla_ledger_id)
1121             ,p_level    => C_LEVEL_STATEMENT
1122             ,p_module   => l_log_module);
1123          trace
1124             (p_msg      =>'latest_encumbrance_year = '||TO_CHAR(c1.latest_encumbrance_year)
1125             ,p_level    => C_LEVEL_STATEMENT
1126             ,p_module   => l_log_module);
1127          trace
1128             (p_msg      =>'bal_seg_value_option_code = '||c1.bal_seg_value_option_code
1129             ,p_level    => C_LEVEL_STATEMENT
1130             ,p_module   => l_log_module);
1131          trace
1132             (p_msg      =>'mgt_seg_value_option_code = '||c1.mgt_seg_value_option_code
1133             ,p_level    => C_LEVEL_STATEMENT
1134             ,p_module   => l_log_module);
1135          trace
1136             (p_msg      =>'allow_intercompany_post_flag = '||c1.allow_intercompany_post_flag
1137             ,p_level    => C_LEVEL_STATEMENT
1138             ,p_module   => l_log_module);
1139          trace
1140             (p_msg      =>'transaction_calendar_id = '||c1.transaction_calendar_id
1141             ,p_level    => C_LEVEL_STATEMENT
1142             ,p_module   => l_log_module);
1143          trace
1144             (p_msg      =>'enable_average_balance_flag = '||c1.enable_average_balances_flag
1145             ,p_level    => C_LEVEL_STATEMENT
1146             ,p_module   => l_log_module);
1147          trace
1148             (p_msg      =>'effective_date_rule_code = '||c1.effective_date_rule_code
1149             ,p_level    => C_LEVEL_STATEMENT
1150             ,p_module   => l_log_module);
1151       END IF;
1152 
1153       -------------------------------------------------------------------------
1154       -- Caching alc ledger ids only if base ledger is a primary ledger. There
1155       -- cannot be ALC ledgers for a secondary ledger
1156       -------------------------------------------------------------------------
1157       IF c1.ledger_category_code = 'PRIMARY' THEN
1158          g_primary_ledger_id := c1.ledger_id;
1159 
1160 	 --8238617
1161 	 g_primary_ledger_currency := c1.xla_currency_code;
1162 
1163          ----------------------------------------------------------------------
1164          -- Caching currecny information for alc ledgers
1165          ----------------------------------------------------------------------
1166          FOR c2 IN csr_alc_ledger (c1.ledger_id) LOOP
1167             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1168                trace
1169                   (p_msg      =>'Caching information for alc ledger = '||TO_CHAR(c2.ledger_id)
1170                   ,p_level    => C_LEVEL_STATEMENT
1171                   ,p_module   => l_log_module);
1172             END IF;
1173             -------------------------------------------------------------------------
1174             -- Storing ledger_id in an array
1175             -------------------------------------------------------------------------
1176             l_alc_ledger_count := l_alc_ledger_count + 1;
1177             g_alc_ledger_ids(l_alc_ledger_count) := c2.ledger_id;
1178 
1179             -------------------------------------------------------------------------
1180             -- Storing category code in array to efficiently know the ledger
1181             -- category
1182             -------------------------------------------------------------------------
1183             g_array_ledger(c2.ledger_id).category_code       := 'ALC';
1184 
1185             g_array_ledger(c2.ledger_id)
1186                 .char_sources('LEDGER_CATEGORY_CODE') := 'ALC';
1187 
1188             g_array_ledger(c2.ledger_id)
1189                  .char_sources('XLA_LEDGER_NAME') := c2.ledger_name;
1190 
1191             g_array_ledger(c2.ledger_id)
1192                  .char_sources('XLA_CURRENCY_CODE') := c2.ledger_currency;
1193 
1194             g_array_ledger(c2.ledger_id)
1195                  .num_sources('XLA_CURRENCY_PRECISION') := c2.ledger_currency_precision;
1196 
1197             g_array_ledger(c2.ledger_id)
1198                  .num_sources('XLA_CURRENCY_MAU') := c2.ledger_currency_mau;
1199 
1200             g_array_ledger(c2.ledger_id)
1201                 .num_sources('XLA_MAX_DAYS_ROLL_RATE') := c2.ALC_MAX_DAYS_ROLL_RATE;
1202 
1203             g_array_ledger(c2.ledger_id)
1204                 .char_sources('XLA_INHERIT_CONVERSION_TYPE') := c2.ALC_INHERIT_CONVERSION_TYPE;
1205 
1206             g_array_ledger(c2.ledger_id)
1207                 .char_sources('XLA_DEFAULT_CONV_RATE_TYPE') := c2.ALC_DEFAULT_CONV_RATE_TYPE;
1208 
1209 
1210             g_array_ledger(c2.ledger_id)
1211                  .num_sources('SLA_LEDGER_ID') := c2.sla_ledger_id;
1212 
1213             -- added below if for bug14522783
1214 			IF 	c2.ROUNDING_CODE_COMBINATION_ID IS NOT NULL THEN
1215 			   g_array_ledger(c2.ledger_id).num_sources('XLA_ROUNDING_CCID') := c2.ROUNDING_CODE_COMBINATION_ID;
1216                         END IF;
1217 
1218             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1219                trace
1220                   (p_msg      =>'ledger_category_code = ALC'
1221                   ,p_level    => C_LEVEL_STATEMENT
1222                   ,p_module   => l_log_module);
1223                trace
1224                   (p_msg      =>'ledger_currency = '||c2.ledger_currency
1225                   ,p_level    => C_LEVEL_STATEMENT
1226                   ,p_module   => l_log_module);
1227                trace
1228                   (p_msg      =>'ledger_currency_precision = '||TO_CHAR(c2.ledger_currency_precision)
1229                   ,p_level    => C_LEVEL_STATEMENT
1230                   ,p_module   => l_log_module);
1231                trace
1232                   (p_msg      =>'sla_ledger_id = '||TO_CHAR(c2.sla_ledger_id)
1233                   ,p_level    => C_LEVEL_STATEMENT
1234                   ,p_module   => l_log_module);
1235 	       trace
1236                   (p_msg      =>'XLA_ROUNDING_CCID = '||TO_CHAR(c2.ROUNDING_CODE_COMBINATION_ID)
1237                   ,p_level    => C_LEVEL_STATEMENT
1238                   ,p_module   => l_log_module); -- added for bug14522783
1239             END IF;
1240 
1241          END LOOP;
1242 
1243          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1244             trace
1245                (p_msg      =>'Number of alc ledgers = '||TO_CHAR(g_alc_ledger_ids.COUNT)
1246                ,p_level    => C_LEVEL_STATEMENT
1247                ,p_module   => l_log_module);
1248          END IF;
1249       END IF;
1250 
1251       -------------------------------------------------------------------------
1252       -- Caching PAD information for the ledger
1253       -------------------------------------------------------------------------
1254       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1255          trace
1256             (p_msg      => 'Caching product definitions for the ledger '||
1257                            TO_CHAR(c1.ledger_id)
1258             ,p_level    => C_LEVEL_STATEMENT
1259             ,p_module   => l_log_module);
1260       END IF;
1261 
1262       l_pad_count := 0;
1263       FOR c2 IN csr_ledger_pad (c1.slam_type
1264                                ,c1.slam_code
1265                                ,c1.xla_description_language)
1266       LOOP
1267          l_pad_count := l_pad_count + 1;
1268 
1269          g_array_ledger(c1.ledger_id)
1270               .pads(l_pad_count)
1271               .acctg_method_rule_id    := c2.rule_id;
1272 
1273          g_array_ledger(c1.ledger_id)
1274               .pads(l_pad_count)
1275               .amb_context_code        := c2.amb_context_code;
1276 
1277          g_array_ledger(c1.ledger_id)
1278               .pads(l_pad_count)
1279               .product_rule_owner      := c2.pad_type;
1280 
1281          g_array_ledger(c1.ledger_id)
1282               .pads(l_pad_count)
1283               .product_rule_code       := c2.pad_code;
1284 
1285          g_array_ledger(c1.ledger_id)
1286               .pads(l_pad_count)
1287               .ledger_product_rule_name       := c2.ledger_pad_name;
1288 
1289          g_array_ledger(c1.ledger_id)
1290               .pads(l_pad_count)
1291               .session_product_rule_name       := c2.session_pad_name;
1292 
1293          g_array_ledger(c1.ledger_id)
1294               .pads(l_pad_count)
1295               .pad_package_name        := c2.pad_package_name;
1296 
1297          g_array_ledger(c1.ledger_id)
1298               .pads(l_pad_count)
1299               .compile_status_code     := c2.compile_status;
1300 
1301          g_array_ledger(c1.ledger_id)
1302               .pads(l_pad_count)
1303               .start_date_active       := c2.start_date;
1304 
1305          g_array_ledger(c1.ledger_id)
1306               .pads(l_pad_count)
1307               .end_date_active         := c2.end_date;
1308 
1309          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1310             trace
1311                (p_msg      =>'rule_id = '||TO_CHAR(c2.rule_id)
1312                ,p_level    => C_LEVEL_STATEMENT
1313                ,p_module   => l_log_module);
1314             trace
1315                (p_msg      =>'amb_context_code = '||c2.amb_context_code
1316                ,p_level    => C_LEVEL_STATEMENT
1317                ,p_module   => l_log_module);
1318             trace
1319                (p_msg      =>'pad_type = '||c2.pad_type
1320                ,p_level    => C_LEVEL_STATEMENT
1321                ,p_module   => l_log_module);
1322             trace
1323                (p_msg      =>'pad_code = '||c2.pad_code
1324                ,p_level    => C_LEVEL_STATEMENT
1325                ,p_module   => l_log_module);
1326             trace
1327                (p_msg      =>'ledger_pad_name = '||c2.ledger_pad_name
1328                ,p_level    => C_LEVEL_STATEMENT
1329                ,p_module   => l_log_module);
1330             trace
1331                (p_msg      =>'session_pad_name = '||c2.session_pad_name
1332                ,p_level    => C_LEVEL_STATEMENT
1333                ,p_module   => l_log_module);
1334             trace
1335                (p_msg      =>'pad_package_name = '||c2.pad_package_name
1336                ,p_level    => C_LEVEL_STATEMENT
1337                ,p_module   => l_log_module);
1338             trace
1339                (p_msg      =>'compile_status = '||c2.compile_status
1340                ,p_level    => C_LEVEL_STATEMENT
1341                ,p_module   => l_log_module);
1342             trace
1343                (p_msg      =>'start_date = '||TO_CHAR(c2.start_date)
1344                ,p_level    => C_LEVEL_STATEMENT
1345                ,p_module   => l_log_module);
1346             trace
1347                (p_msg      =>'end_date = '||TO_CHAR(c2.end_date)
1348                ,p_level    => C_LEVEL_STATEMENT
1349                ,p_module   => l_log_module);
1350          END IF;
1351 
1352       END LOOP;
1353 
1354       IF g_array_ledger.EXISTS(c1.ledger_id) THEN
1355          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1356             trace
1357                (p_msg      =>'Number of PADs = '||
1358                              TO_CHAR(g_array_ledger(c1.ledger_id).pads.COUNT)
1359                ,p_level    => C_LEVEL_STATEMENT
1360                ,p_module   => l_log_module);
1361          END IF;
1362       END IF;
1363 
1364    END LOOP;
1365 
1366    ----Bug :11680489- Code change for VM based secondary ledger having different CoA than primary
1367    ------Start Load Primary Ledger info----------
1368   OPEN csr;
1369   FETCH csr INTO l_primary_ledger_id;
1370   IF csr%NOTFOUND THEN
1371     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1372 
1373       trace
1374          (p_msg      => p_event_ledger_id||' is not a VM based secondary ledger'
1375          ,p_level    => C_LEVEL_PROCEDURE
1376          ,p_module   => l_log_module);
1377     END IF;
1378   END IF;
1379   CLOSE csr;
1380 
1381   IF l_primary_ledger_id IS NOT NULL
1382   THEN
1383    FOR c4 IN csr_primary_ledger (l_event_ledger_category, l_primary_ledger_id) LOOP
1384       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1385          trace
1386             (p_msg      =>'Reading ledger level cache for ledger '||TO_CHAR(c4.ledger_id)
1387             ,p_level    => C_LEVEL_STATEMENT
1388             ,p_module   => l_log_module);
1389       END IF;
1390 
1391       -------------------------------------------------------------------------
1392       -- Storing category code in array to efficiently know the ledger
1393       -- category
1394       -------------------------------------------------------------------------
1395       g_array_ledger(c4.ledger_id).category_code     := c4.ledger_category_code;
1396 
1397       -------------------------------------------------------------------------
1398       -- Caching translated information
1399       -------------------------------------------------------------------------
1400       g_array_ledger(c4.ledger_id)
1401                 .char_sources('XLA_EVENT_APPL_NAME') := c4.application_name;
1402 
1403       g_array_ledger(c4.ledger_id)
1404                 .char_sources('XLA_USER_JE_SOURCE_NAME') := c4.user_je_source_name;
1405 
1406       g_array_ledger(c4.ledger_id)
1407                 .char_sources('XLA_LEDGER_NAME') := c4.ledger_name;
1408 
1409       g_array_ledger(c4.ledger_id)
1410                 .char_sources('XLA_COA_NAME') := c4.ledger_coa_name;
1411 
1412       g_array_ledger(c4.ledger_id)
1413                 .char_sources_sl('XLA_COA_NAME') := c4.session_coa_name;
1414 
1415       g_array_ledger(c4.ledger_id)
1416                 .char_sources('XLA_ACCOUNTING_METHOD_NAME') := c4.ledger_slam_name;
1417 
1418       g_array_ledger(c4.ledger_id)
1419                 .char_sources_sl('XLA_ACCOUNTING_METHOD_NAME') := c4.session_slam_name;
1420 
1421 
1422       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1423          trace
1424             (p_msg      =>'application_name = '||c4.application_name
1425             ,p_level    => C_LEVEL_STATEMENT
1426             ,p_module   => l_log_module);
1427          trace
1428             (p_msg      =>'user_je_source_name = '||c4.user_je_source_name
1429             ,p_level    => C_LEVEL_STATEMENT
1430             ,p_module   => l_log_module);
1431          trace
1432             (p_msg      =>'ledger_name = '||c4.ledger_name
1433             ,p_level    => C_LEVEL_STATEMENT
1434             ,p_module   => l_log_module);
1435          trace
1436             (p_msg      =>'ledger_coa_name = '||c4.ledger_coa_name
1437             ,p_level    => C_LEVEL_STATEMENT
1438             ,p_module   => l_log_module);
1439          trace
1440             (p_msg      =>'session_coa_name = '||c4.session_coa_name
1441             ,p_level    => C_LEVEL_STATEMENT
1442             ,p_module   => l_log_module);
1443          trace
1444             (p_msg      =>'ledger_slam_name = '||c4.ledger_slam_name
1445             ,p_level    => C_LEVEL_STATEMENT
1446             ,p_module   => l_log_module);
1447          trace
1448             (p_msg      =>'session_slam_name = '||c4.session_slam_name
1449             ,p_level    => C_LEVEL_STATEMENT
1450             ,p_module   => l_log_module);
1451       END IF;
1452 
1453       -------------------------------------------------------------------------
1454       -- Caching untranslated information
1455       -------------------------------------------------------------------------
1456       g_array_ledger(c4.ledger_id)
1457                 .char_sources('DYNAMIC_INSERTS_ALLOWED_FLAG') := c4.dynamic_inserts_allowed_flag;
1458 
1459       g_array_ledger(c4.ledger_id)
1460                 .num_sources('XLA_COA_ID') := c4.coa_id;
1461 
1462       g_array_ledger(c4.ledger_id)
1463                 .char_sources('XLA_ACCOUNTING_METHOD_OWNER') := c4.slam_type;
1464 
1465       g_array_ledger(c4.ledger_id)
1466                 .char_sources('XLA_CURRENCY_CODE') := c4.xla_currency_code;
1467 
1468       g_array_ledger(c4.ledger_id)
1469                 .char_sources('XLA_DESCRIPTION_LANGUAGE') := c4.xla_description_language;
1470 
1471       g_array_ledger(c4.ledger_id)
1472                 .char_sources('XLA_NLS_DESC_LANGUAGE') := c4.xla_nls_desc_language;
1473 
1474       g_array_ledger(c4.ledger_id)
1475                 .num_sources('XLA_ENTERED_CUR_BAL_SUS_CCID') := c4.xla_entered_cur_bal_sus_ccid;
1476 
1477       g_array_ledger(c4.ledger_id)
1478                 .num_sources('XLA_LEDGER_CUR_BAL_SUS_CCID') := c4.xla_ledger_cur_bal_sus_ccid;
1479 
1480       g_array_ledger(c4.ledger_id)
1481                 .num_sources('RES_ENCUMB_CODE_COMBINATION_ID') := c4.res_encumb_code_combination_id;
1482 
1483       g_array_ledger(c4.ledger_id)
1484                 .num_sources('XLA_ROUNDING_CCID') := c4.xla_rounding_ccid;
1485 
1486       g_array_ledger(c4.ledger_id)
1487                 .num_sources('XLA_MAX_DAYS_ROLL_RATE') := c4.ALC_MAX_DAYS_ROLL_RATE;
1488 
1489       g_array_ledger(c4.ledger_id)
1490                 .char_sources('XLA_INHERIT_CONVERSION_TYPE') := c4.ALC_INHERIT_CONVERSION_TYPE;
1491 
1492       g_array_ledger(c4.ledger_id)
1493                 .char_sources('XLA_DEFAULT_CONV_RATE_TYPE') := c4.ALC_DEFAULT_CONV_RATE_TYPE;
1494 
1495       g_array_ledger(c4.ledger_id)
1496                 .char_sources('LEDGER_CATEGORY_CODE') := c4.ledger_category_code;
1497 
1498       g_array_ledger(c4.ledger_id)
1499                 .num_sources('XLA_CURRENCY_PRECISION') := c4.ledger_currency_precision;
1500 
1501       g_array_ledger(c4.ledger_id)
1502                 .num_sources('XLA_CURRENCY_MAU') := c4.ledger_currency_mau;
1503 
1504       g_array_ledger(c4.ledger_id)
1505                 .char_sources('XLA_ROUNDING_RULE_CODE') := c4.xla_rounding_rule_code;
1506 
1507       g_array_ledger(c4.ledger_id)
1508                 .num_sources('SL_COA_MAPPING_ID') := c4.coa_mapping_id;
1509 
1510       g_array_ledger(c4.ledger_id)
1511                 .char_sources('GL_COA_MAPPING_NAME') := c4.coa_mapping_name;
1512 
1513       g_array_ledger(c4.ledger_id)
1514                 .char_sources('BAL_SEG_COLUMN_NAME') := c4.bal_seg_column_name;
1515 
1516       g_array_ledger(c4.ledger_id)
1517                 .char_sources('MGT_SEG_COLUMN_NAME') := c4.mgt_seg_column_name;
1518 
1519       g_array_ledger(c4.ledger_id)
1520                 .char_sources('SLA_BAL_BY_LEDGER_CURR_FLAG') := c4.xla_ledger_cur_bal_flag;
1521 
1522       g_array_ledger(c4.ledger_id)
1523                 .char_sources('XLA_ACCT_REVERSAL_OPTION') := c4.xla_acct_reversal_option_code;
1524 
1525       g_array_ledger(c4.ledger_id)
1526                 .num_sources('SLA_LEDGER_ID') := c4.sla_ledger_id ;
1527 
1528       g_array_ledger(c4.ledger_id)
1529                 .num_sources('LATEST_ENCUMBRANCE_YEAR') := c4.latest_encumbrance_year;
1530 
1531       g_array_ledger(c4.ledger_id)
1532                 .char_sources('BAL_SEG_VALUE_OPTION_CODE') := c4.bal_seg_value_option_code;
1533 
1534       g_array_ledger(c4.ledger_id)
1535                 .char_sources('MGT_SEG_VALUE_OPTION_CODE') := c4.mgt_seg_value_option_code;
1536 
1537       g_array_ledger(c4.ledger_id)
1538                 .char_sources('ALLOW_INTERCOMPANY_POST_FLAG') := c4.allow_intercompany_post_flag;
1539 
1540       g_array_ledger(c4.ledger_id)
1541                 .num_sources('TRANSACTION_CALENDAR_ID') := c4.transaction_calendar_id;
1542 
1543       g_array_ledger(c4.ledger_id)
1544                 .char_sources('ENABLE_AVERAGE_BALANCES_FLAG') := c4.enable_average_balances_flag;
1545 
1546       g_array_ledger(c4.ledger_id)
1547                 .char_sources('EFFECTIVE_DATE_RULE_CODE') := c4.effective_date_rule_code;
1548 
1549       g_array_ledger(c4.ledger_id)
1550                 .char_sources('SUSPENSE_ALLOWED_FLAG') := c4.suspense_allowed_flag;
1551 
1552       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1553          trace
1554             (p_msg      =>'dynamic_inserts_allowed_flag = '||c4.dynamic_inserts_allowed_flag
1555             ,p_level    => C_LEVEL_STATEMENT
1556             ,p_module   => l_log_module);
1557          trace
1558             (p_msg      =>'coa_id = '||TO_CHAR(c4.coa_id)
1559             ,p_level    => C_LEVEL_STATEMENT
1560             ,p_module   => l_log_module);
1561          trace
1562             (p_msg      =>'slam_type = '||c4.slam_type
1563             ,p_level    => C_LEVEL_STATEMENT
1564             ,p_module   => l_log_module);
1565          trace
1566             (p_msg      =>'xla_currency_code = '||c4.xla_currency_code
1567             ,p_level    => C_LEVEL_STATEMENT
1568             ,p_module   => l_log_module);
1569          trace
1570             (p_msg      =>'xla_description_language = '||c4.xla_description_language
1571             ,p_level    => C_LEVEL_STATEMENT
1572             ,p_module   => l_log_module);
1573          trace
1574             (p_msg      =>'xla_nls_desc_language = '||c4.xla_nls_desc_language
1575             ,p_level    => C_LEVEL_STATEMENT
1576             ,p_module   => l_log_module);
1577          trace
1578             (p_msg      =>'xla_entered_cur_bal_sus_ccid = '||TO_CHAR(c4.xla_entered_cur_bal_sus_ccid)
1579             ,p_level    => C_LEVEL_STATEMENT
1580             ,p_module   => l_log_module);
1581          trace
1582             (p_msg      =>'xla_ledger_cur_bal_sus_ccid = '||TO_CHAR(c4.xla_ledger_cur_bal_sus_ccid)
1583             ,p_level    => C_LEVEL_STATEMENT
1584             ,p_module   => l_log_module);
1585          trace
1586             (p_msg      =>'res_encumb_code_combination_id = '||TO_CHAR(c4.res_encumb_code_combination_id)
1587             ,p_level    => C_LEVEL_STATEMENT
1588             ,p_module   => l_log_module);
1589          trace
1590             (p_msg      =>'ledger_category_code = '||c4.ledger_category_code
1591             ,p_level    => C_LEVEL_STATEMENT
1592             ,p_module   => l_log_module);
1593          trace
1594             (p_msg      =>'ledger_currency_precision = '||TO_CHAR(c4.ledger_currency_precision)
1595             ,p_level    => C_LEVEL_STATEMENT
1596             ,p_module   => l_log_module);
1597          trace
1598             (p_msg      =>'coa_mapping_id = '||TO_CHAR(c4.coa_mapping_id)
1599             ,p_level    => C_LEVEL_STATEMENT
1600             ,p_module   => l_log_module);
1601          trace
1602             (p_msg      =>'coa_mapping_name = '||c4.coa_mapping_name
1603             ,p_level    => C_LEVEL_STATEMENT
1604             ,p_module   => l_log_module);
1605          trace
1606             (p_msg      =>'bal_seg_column_name = '||c4.bal_seg_column_name
1607             ,p_level    => C_LEVEL_STATEMENT
1608             ,p_module   => l_log_module);
1609          trace
1610             (p_msg      =>'mgt_seg_column_name = '||c4.mgt_seg_column_name
1611             ,p_level    => C_LEVEL_STATEMENT
1612             ,p_module   => l_log_module);
1613          trace
1614             (p_msg      =>'xla_ledger_cur_bal_flag = '||c4.xla_ledger_cur_bal_flag
1615             ,p_level    => C_LEVEL_STATEMENT
1616             ,p_module   => l_log_module);
1617          trace
1618             (p_msg      =>'xla_acct_reversal_option_code = '||c4.xla_acct_reversal_option_code
1619             ,p_level    => C_LEVEL_STATEMENT
1620             ,p_module   => l_log_module);
1621          trace
1622             (p_msg      =>'sla_ledger_id = '||TO_CHAR(c4.sla_ledger_id)
1623             ,p_level    => C_LEVEL_STATEMENT
1624             ,p_module   => l_log_module);
1625          trace
1626             (p_msg      =>'latest_encumbrance_year = '||TO_CHAR(c4.latest_encumbrance_year)
1627             ,p_level    => C_LEVEL_STATEMENT
1628             ,p_module   => l_log_module);
1629          trace
1630             (p_msg      =>'bal_seg_value_option_code = '||c4.bal_seg_value_option_code
1631             ,p_level    => C_LEVEL_STATEMENT
1632             ,p_module   => l_log_module);
1633          trace
1634             (p_msg      =>'mgt_seg_value_option_code = '||c4.mgt_seg_value_option_code
1635             ,p_level    => C_LEVEL_STATEMENT
1636             ,p_module   => l_log_module);
1637          trace
1638             (p_msg      =>'allow_intercompany_post_flag = '||c4.allow_intercompany_post_flag
1639             ,p_level    => C_LEVEL_STATEMENT
1640             ,p_module   => l_log_module);
1641          trace
1642             (p_msg      =>'transaction_calendar_id = '||c4.transaction_calendar_id
1643             ,p_level    => C_LEVEL_STATEMENT
1644             ,p_module   => l_log_module);
1645          trace
1646             (p_msg      =>'enable_average_balance_flag = '||c4.enable_average_balances_flag
1647             ,p_level    => C_LEVEL_STATEMENT
1648             ,p_module   => l_log_module);
1649          trace
1650             (p_msg      =>'effective_date_rule_code = '||c4.effective_date_rule_code
1651             ,p_level    => C_LEVEL_STATEMENT
1652             ,p_module   => l_log_module);
1653       END IF;
1654 
1655       -------------------------------------------------------------------------
1656       -- Caching alc ledger ids only if base ledger is a primary ledger. There
1657       -- cannot be ALC ledgers for a secondary ledger
1658       -------------------------------------------------------------------------
1659       IF c4.ledger_category_code = 'PRIMARY' THEN
1660          g_primary_ledger_id := c4.ledger_id;
1661 
1662 	 END IF;
1663 
1664    END LOOP;
1665  END IF;
1666    -----End Load primary Ledger Info------------
1667 
1668    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1669       trace
1670          (p_msg      =>'Number of base ledgers = '||TO_CHAR(g_base_ledger_ids.COUNT)
1671          ,p_level    => C_LEVEL_STATEMENT
1672          ,p_module   => l_log_module);
1673    END IF;
1674 
1675    IF g_base_ledger_ids.count = 0 THEN
1676       IF (C_LEVEL_ERROR >= g_log_level) THEN
1677          trace
1678             (p_msg      => 'ERROR: Problem in caching ledgers. Probably the ledger '||
1679                            'setup is incomplete. ledger ID = '||TO_CHAR(p_event_ledger_id)
1680             ,p_level    => C_LEVEL_ERROR
1681             ,p_module   => l_log_module);
1682       END IF;
1683 
1684       xla_exceptions_pkg.raise_message
1685          (p_appli_s_name   => 'XLA'
1686          ,p_msg_name       => 'XLA_COMMON_ERROR'
1687          ,p_token_1        => 'ERROR'
1688          ,p_value_1        => 'There is problem in caching the ledger. '||
1689                               'Probably, the ledger setup is not complete.'
1690          ,p_token_2        => 'LOCATION'
1691          ,p_value_2        => 'load_application_ledgers');
1692    END IF;
1693 
1694    ----------------------------------------------------------------------------
1695    -- Call routine to cache application setups
1696    ----------------------------------------------------------------------------
1697    cache_application_setup
1698       (p_application_id      => p_application_id
1699       ,p_ledger_id           => p_event_ledger_id
1700       ,p_ledger_category     => l_event_ledger_category); --pass ledger category also Bug #4554935
1701 
1702    ----------------------------------------------------------------------------
1703    -- Call routine to cache defined system sources
1704    ----------------------------------------------------------------------------
1705    load_system_sources;
1706 
1707    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1708       trace
1709          (p_msg      => 'END of procedure LOAD_APPLICATION_LEDGERS'
1710          ,p_level    => C_LEVEL_PROCEDURE
1711          ,p_module   => l_log_module);
1712    END IF;
1713 
1714 EXCEPTION
1715 -- Bug 5018098
1716 WHEN NO_DATA_FOUND THEN
1717   IF csr_base_ledger%NOTFOUND THEN
1718      xla_exceptions_pkg.raise_message
1719             (p_appli_s_name   => 'XLA'
1720             ,p_msg_name       => 'XLA_COMMON_ERROR'
1721             ,p_token_1        => 'ERROR'
1722             ,p_value_1        => 'ERROR: Problem getting ledger information for application '||p_application_id||'. '||
1723                                   'Subledger Accounting Options are not defined for this ledger and application.
1724                                    Please run Update Subledger Accounting Options program for your application.'
1725             ,p_token_2        => 'LOCATION'
1726             ,p_value_2        => 'xla_accounting_cache_pkg.load_application_ledgers');
1727   END IF;
1728 WHEN xla_exceptions_pkg.application_exception THEN
1729    RAISE;
1730 WHEN OTHERS                                   THEN
1731    xla_exceptions_pkg.raise_message
1732       (p_location => l_log_module);
1733 END load_application_ledgers;
1734 
1735 
1736 --=============================================================================
1737 --
1738 --
1739 --
1740 --=============================================================================
1741 PROCEDURE get_pad_info
1742        (p_ledger_id                  IN  NUMBER
1743        ,p_event_date                 IN  DATE
1744        ,p_pad_owner                  OUT NOCOPY VARCHAR2
1745        ,p_pad_code                   OUT NOCOPY VARCHAR2
1746        ,p_ledger_pad_name            OUT NOCOPY VARCHAR2
1747        ,p_session_pad_name           OUT NOCOPY VARCHAR2
1748        ,p_pad_compile_status         OUT NOCOPY VARCHAR2
1749        ,p_pad_package_name           OUT NOCOPY VARCHAR2) IS
1750 l_ledger_id                 NUMBER;
1751 l_pad_found                 BOOLEAN    := FALSE;
1752 l_log_module                VARCHAR2(240);
1753 BEGIN
1754    IF g_log_enabled THEN
1755       l_log_module := C_DEFAULT_MODULE||'.get_pad_info';
1756    END IF;
1757 
1758    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1759       trace
1760          (p_msg      => 'BEGIN of procedure GET_PAD_INFO'
1761          ,p_level    => C_LEVEL_PROCEDURE
1762          ,p_module   => l_log_module);
1763       trace
1764          (p_msg      => 'p_ledger_id = '  ||TO_CHAR(p_ledger_id)
1765          ,p_level    => C_LEVEL_PROCEDURE
1766          ,p_module   => l_log_module);
1767       trace
1768          (p_msg      => 'p_event_date = '||TO_CHAR(p_event_date)
1769          ,p_level    => C_LEVEL_PROCEDURE
1770          ,p_module   => l_log_module);
1771    END IF;
1772 
1773    l_ledger_id := p_ledger_id;
1774 
1775    IF (g_array_ledger(l_ledger_id).category_code = 'ALC')
1776    THEN
1777       l_ledger_id := g_primary_ledger_id;
1778    END IF;
1779 
1780    ----------------------------------------------------------------------------
1781    -- PAD start date and end date could be null. PAD effective dates must be
1782    -- compared using NVL.
1783    ----------------------------------------------------------------------------
1784    FOR i in 1..g_array_ledger(l_ledger_id).pads.COUNT LOOP
1785       IF (p_event_date >=
1786                NVL(g_array_ledger(l_ledger_id).pads(i).start_date_active, p_event_date-1)
1787          )
1788          AND
1789          (p_event_date <=
1790                NVL(g_array_ledger(p_ledger_id).pads(i).end_date_active, p_event_date+1)
1791          )
1792       THEN
1793          p_pad_owner          := g_array_ledger(l_ledger_id)
1794                                      .pads(i).product_rule_owner;
1795          p_pad_code           := g_array_ledger(l_ledger_id)
1796                                      .pads(i).product_rule_code;
1797          p_ledger_pad_name    := g_array_ledger(l_ledger_id)
1798                                      .pads(i).ledger_product_rule_name;
1799          p_session_pad_name   := g_array_ledger(l_ledger_id)
1800                                      .pads(i).session_product_rule_name;
1801          p_pad_compile_status := g_array_ledger(l_ledger_id)
1802                                      .pads(i).compile_status_code;
1803          p_pad_package_name   := g_array_ledger(l_ledger_id)
1804                                      .pads(i).pad_package_name;
1805          l_pad_found := TRUE;
1806          EXIT;
1807       END IF;
1808    END LOOP;
1809 
1810    IF NOT l_pad_found THEN
1811       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1812          trace
1813             (p_msg      => 'WARNNING: No PAD found for : '||
1814                            'ledger = '||TO_CHAR(p_ledger_id)||
1815                            ' and event date = '||TO_CHAR(p_event_date)
1816             ,p_level    => C_LEVEL_EXCEPTION
1817             ,p_module   => l_log_module);
1818       END IF;
1819    END IF;
1820 
1821    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1822       trace
1823          (p_msg      => 'p_pad_owner = '||p_pad_owner
1824          ,p_level    => C_LEVEL_PROCEDURE
1825          ,p_module   => l_log_module);
1826       trace
1827          (p_msg      => 'p_pad_code = '||p_pad_code
1828          ,p_level    => C_LEVEL_PROCEDURE
1829          ,p_module   => l_log_module);
1830       trace
1831          (p_msg      => 'p_ledger_pad_name = '||p_ledger_pad_name
1832          ,p_level    => C_LEVEL_PROCEDURE
1833          ,p_module   => l_log_module);
1834       trace
1835          (p_msg      => 'p_session_pad_name = '||p_session_pad_name
1836          ,p_level    => C_LEVEL_PROCEDURE
1837          ,p_module   => l_log_module);
1838       trace
1839          (p_msg      => 'p_pad_compile_status = '||p_pad_compile_status
1840          ,p_level    => C_LEVEL_PROCEDURE
1841          ,p_module   => l_log_module);
1842       trace
1843          (p_msg      => 'p_pad_package_name = '||p_pad_package_name
1844          ,p_level    => C_LEVEL_PROCEDURE
1845          ,p_module   => l_log_module);
1846       trace
1847          (p_msg      => 'END of procedure GET_PAD_INFO'
1848          ,p_level    => C_LEVEL_PROCEDURE
1849          ,p_module   => l_log_module);
1850    END IF;
1851 EXCEPTION
1852 WHEN xla_exceptions_pkg.application_exception THEN
1853    RAISE;
1854 WHEN OTHERS                                   THEN
1855    xla_exceptions_pkg.raise_message
1856       (p_location => l_log_module);
1857 END get_pad_info;
1858 
1859 
1860 --=============================================================================
1861 --
1862 --
1863 --
1864 --=============================================================================
1865 PROCEDURE get_event_info
1866         (p_ledger_id                  IN  NUMBER
1867         ,p_event_class_code           IN  VARCHAR2
1868         ,p_event_type_code            IN  VARCHAR2
1869         ,p_ledger_event_class_name    OUT NOCOPY VARCHAR2
1870         ,p_session_event_class_name   OUT NOCOPY VARCHAR2
1871         ,p_ledger_event_type_name     OUT NOCOPY VARCHAR2
1872         ,p_session_event_type_name    OUT NOCOPY VARCHAR2) IS
1873 l_ledger_id                 NUMBER;
1874 l_language                  VARCHAR2(30);
1875 l_log_module                VARCHAR2(240);
1876 BEGIN
1877    IF g_log_enabled THEN
1878       l_log_module := C_DEFAULT_MODULE||'.get_event_info';
1879    END IF;
1880 
1881    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1882       trace
1883          (p_msg      => 'BEGIN of procedure GET_EVENT_INFO'
1884          ,p_level    => C_LEVEL_PROCEDURE
1885          ,p_module   => l_log_module);
1886       trace
1887          (p_msg      => 'p_ledger_id = '  ||TO_CHAR(p_ledger_id)
1888          ,p_level    => C_LEVEL_PROCEDURE
1889          ,p_module   => l_log_module);
1890       trace
1891          (p_msg      => 'p_event_class_code = '||p_event_class_code
1892          ,p_level    => C_LEVEL_PROCEDURE
1893          ,p_module   => l_log_module);
1894       trace
1895          (p_msg      => 'p_event_type_code = '||p_event_type_code
1896          ,p_level    => C_LEVEL_PROCEDURE
1897          ,p_module   => l_log_module);
1898    END IF;
1899 
1900    l_ledger_id := p_ledger_id;
1901 
1902    IF (g_array_ledger(l_ledger_id).category_code = 'ALC')
1903    THEN
1904       l_ledger_id := g_primary_ledger_id;
1905    END IF;
1906 
1907    l_language := g_array_ledger(l_ledger_id).char_sources('XLA_DESCRIPTION_LANGUAGE');
1908 
1909    p_ledger_event_class_name  := g_array_event_classes(p_event_class_code)
1910                                          .event_class_name_tl(l_language);
1911    p_ledger_event_type_name   := g_array_event_types(p_event_type_code)
1912                                          .event_type_name_tl(l_language);
1913    p_session_event_class_name := g_array_event_classes(p_event_class_code)
1914                                          .event_class_name_sl;
1915    p_session_event_type_name  := g_array_event_types(p_event_type_code)
1916                                          .event_type_name_sl;
1917 
1918    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1919       trace
1920          (p_msg      => 'p_ledger_event_class_name = '||p_ledger_event_class_name
1921          ,p_level    => C_LEVEL_PROCEDURE
1922          ,p_module   => l_log_module);
1923       trace
1924          (p_msg      => 'p_session_event_class_name = '||p_session_event_class_name
1925          ,p_level    => C_LEVEL_PROCEDURE
1926          ,p_module   => l_log_module);
1927       trace
1928          (p_msg      => 'p_ledger_event_type_name = '||p_ledger_event_type_name
1929          ,p_level    => C_LEVEL_PROCEDURE
1930          ,p_module   => l_log_module);
1931       trace
1932          (p_msg      => 'p_session_event_type_name = '||p_session_event_type_name
1933          ,p_level    => C_LEVEL_PROCEDURE
1934          ,p_module   => l_log_module);
1935       trace
1936          (p_msg      => 'END of procedure GET_EVENT_INFO'
1937          ,p_level    => C_LEVEL_PROCEDURE
1938          ,p_module   => l_log_module);
1939    END IF;
1940 EXCEPTION
1941 WHEN xla_exceptions_pkg.application_exception THEN
1942    RAISE;
1943 WHEN OTHERS                                   THEN
1944    xla_exceptions_pkg.raise_message
1945       (p_location => l_log_module);
1946 END get_event_info;
1947 
1948 
1949 --=============================================================================
1950 --
1951 -- get values from accounting cache
1952 --
1953 --=============================================================================
1954 FUNCTION GetValueNum
1955        (p_source_code                IN VARCHAR2
1956        ,p_target_ledger_id           IN NUMBER)
1957 RETURN NUMBER IS
1958 l_ledger_id                 NUMBER;
1959 l_value                     NUMBER;
1960 l_log_module                VARCHAR2(240);
1961 
1962 BEGIN
1963    IF g_log_enabled THEN
1964       l_log_module := C_DEFAULT_MODULE||'.GetValueNum';
1965    END IF;
1966 
1967    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1968       trace
1969          (p_msg      => 'BEGIN of function GETVALUENUM'
1970          ,p_level    => C_LEVEL_PROCEDURE
1971          ,p_module   => l_log_module);
1972       trace
1973          (p_msg      => 'p_source_code = '  ||p_source_code
1974          ,p_level    => C_LEVEL_PROCEDURE
1975          ,p_module   => l_log_module);
1976       trace
1977          (p_msg      => 'p_target_ledger_id = '||TO_CHAR(p_target_ledger_id)
1978          ,p_level    => C_LEVEL_PROCEDURE
1979          ,p_module   => l_log_module);
1980    END IF;
1981 
1982    IF is_source_valid
1983          (p_source_code  => p_source_code
1984          ,p_datatype     => 'D')
1985    THEN
1986       l_ledger_id := p_target_ledger_id;
1987 
1988       IF ((g_array_ledger(l_ledger_id).category_code = 'ALC') AND
1989           (NOT(g_array_ledger(l_ledger_id).num_sources.EXISTS(p_source_code))))
1990       THEN
1991          l_ledger_id := g_primary_ledger_id;
1992       END IF;
1993 
1994       l_value := g_array_ledger(l_ledger_id).num_sources(p_source_code);
1995    END IF;
1996 
1997    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1998       trace
1999          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2000          ,p_level    => C_LEVEL_PROCEDURE
2001          ,p_module   => l_log_module);
2002       trace
2003          (p_msg      => 'END of function GETVALUENUM'
2004          ,p_level    => C_LEVEL_PROCEDURE
2005          ,p_module   => l_log_module);
2006    END IF;
2007 
2008    RETURN l_value;
2009 EXCEPTION
2010 WHEN xla_exceptions_pkg.application_exception THEN
2011    RAISE;
2012 WHEN OTHERS  THEN
2013    xla_exceptions_pkg.raise_message
2014       (p_location => l_log_module);
2015 END GetValueNum;
2016 
2017 
2018 --=============================================================================
2019 --
2020 -- get values from accounting cache
2021 --
2022 --=============================================================================
2023 FUNCTION GetValueNum
2024        (p_source_code                IN VARCHAR2)
2025 RETURN NUMBER IS
2026 l_value                     NUMBER;
2027 l_log_module                VARCHAR2(240);
2028 BEGIN
2029    IF g_log_enabled THEN
2030       l_log_module := C_DEFAULT_MODULE||'.GetValueNum';
2031    END IF;
2032 
2033    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2034       trace
2035          (p_msg      => 'BEGIN of function GETVALUENUM'
2036          ,p_level    => C_LEVEL_PROCEDURE
2037          ,p_module   => l_log_module);
2038       trace
2039          (p_msg      => 'p_source_code = '  ||p_source_code
2040          ,p_level    => C_LEVEL_PROCEDURE
2041          ,p_module   => l_log_module);
2042    END IF;
2043 
2044    IF is_source_valid
2045          (p_source_code  => p_source_code
2046          ,p_datatype     => 'D')
2047    THEN
2048       l_value := g_record_session.num_sources(p_source_code);
2049    END IF;
2050 
2051    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2052       trace
2053          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2054          ,p_level    => C_LEVEL_PROCEDURE
2055          ,p_module   => l_log_module);
2056       trace
2057          (p_msg      => 'END of function GETVALUENUM'
2058          ,p_level    => C_LEVEL_PROCEDURE
2059          ,p_module   => l_log_module);
2060    END IF;
2061 
2062    RETURN l_value;
2063 EXCEPTION
2064 WHEN xla_exceptions_pkg.application_exception THEN
2065    RAISE;
2066 WHEN OTHERS  THEN
2067    xla_exceptions_pkg.raise_message
2068       (p_location => l_log_module);
2069 END GetValueNum;
2070 
2071 
2072 
2073 --=============================================================================
2074 --
2075 --
2076 --
2077 --=============================================================================
2078 FUNCTION GetValueDate
2079        (p_source_code                IN VARCHAR2
2080        ,p_target_ledger_id           IN NUMBER)
2081 RETURN DATE IS
2082 l_ledger_id                 NUMBER;
2083 l_value                     DATE;
2084 l_log_module                VARCHAR2(240);
2085 BEGIN
2086    IF g_log_enabled THEN
2087       l_log_module := C_DEFAULT_MODULE||'.GetValueDate';
2088    END IF;
2089 
2090    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2091       trace
2092          (p_msg      => 'BEGIN of function GETVALUEDATE'
2093          ,p_level    => C_LEVEL_PROCEDURE
2094          ,p_module   => l_log_module);
2095       trace
2096          (p_msg      => 'p_source_code = '  ||p_source_code
2097          ,p_level    => C_LEVEL_PROCEDURE
2098          ,p_module   => l_log_module);
2099       trace
2100          (p_msg      => 'p_target_ledger_id = '||TO_CHAR(p_target_ledger_id)
2101          ,p_level    => C_LEVEL_PROCEDURE
2102          ,p_module   => l_log_module);
2103    END IF;
2104 
2105    IF is_source_valid
2106          (p_source_code  => p_source_code
2107          ,p_datatype     => 'D')
2108    THEN
2109       l_ledger_id := p_target_ledger_id;
2110       IF ((g_array_ledger(l_ledger_id).category_code = 'ALC') AND
2111           (NOT(g_array_ledger(l_ledger_id).date_sources.EXISTS(p_source_code))))
2112       THEN
2113          l_ledger_id := g_primary_ledger_id;
2114       END IF;
2115 
2116       l_value := g_array_ledger(l_ledger_id).date_sources(p_source_code);
2117    END IF;
2118 
2119    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2120       trace
2121          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2122          ,p_level    => C_LEVEL_PROCEDURE
2123          ,p_module   => l_log_module);
2124       trace
2125          (p_msg      => 'END of function GETVALUEDATE'
2126          ,p_level    => C_LEVEL_PROCEDURE
2127          ,p_module   => l_log_module);
2128    END IF;
2129 
2130    RETURN l_value;
2131 EXCEPTION
2132 WHEN xla_exceptions_pkg.application_exception THEN
2133    RAISE;
2134 WHEN OTHERS  THEN
2135    xla_exceptions_pkg.raise_message
2136       (p_location => l_log_module);
2137 END GetValueDate;
2138 
2139 
2140 --=============================================================================
2141 --
2142 --
2143 --
2144 --=============================================================================
2145 FUNCTION GetValueDate
2146        (p_source_code                IN VARCHAR2)
2147 RETURN DATE IS
2148 l_value                     DATE;
2149 l_log_module                VARCHAR2(240);
2150 BEGIN
2151    IF g_log_enabled THEN
2152       l_log_module := C_DEFAULT_MODULE||'.GetValueDate';
2153    END IF;
2154 
2155    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2156       trace
2157          (p_msg      => 'BEGIN of function GETVALUEDATE'
2158          ,p_level    => C_LEVEL_PROCEDURE
2159          ,p_module   => l_log_module);
2160       trace
2161          (p_msg      => 'p_source_code = '  ||p_source_code
2162          ,p_level    => C_LEVEL_PROCEDURE
2163          ,p_module   => l_log_module);
2164    END IF;
2165 
2166    IF is_source_valid
2167          (p_source_code  => p_source_code
2168          ,p_datatype     => 'D')
2169    THEN
2170       l_value := g_record_session.date_sources(p_source_code);
2171    END IF;
2172 
2173    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2174       trace
2175          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2176          ,p_level    => C_LEVEL_PROCEDURE
2177          ,p_module   => l_log_module);
2178       trace
2179          (p_msg      => 'END of function GETVALUEDATE'
2180          ,p_level    => C_LEVEL_PROCEDURE
2181          ,p_module   => l_log_module);
2182    END IF;
2183 
2184    RETURN l_value;
2185 EXCEPTION
2186 WHEN xla_exceptions_pkg.application_exception THEN
2187    RAISE;
2188 WHEN OTHERS  THEN
2189    xla_exceptions_pkg.raise_message
2190       (p_location => l_log_module);
2191 END GetValueDate;
2192 
2193 
2194 --=============================================================================
2195 --
2196 --
2197 --
2198 --=============================================================================
2199 FUNCTION GetValueChar
2200        (p_source_code                IN VARCHAR2
2201        ,p_target_ledger_id           IN NUMBER)
2202 RETURN VARCHAR2 IS
2203 l_ledger_id                 NUMBER;
2204 l_value                     VARCHAR2(240);
2205 l_log_module                VARCHAR2(240);
2206 BEGIN
2207    IF g_log_enabled THEN
2208       l_log_module := C_DEFAULT_MODULE||'.GetValueChar';
2209    END IF;
2210 
2211    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2212       trace
2213          (p_msg      => 'BEGIN of function GETVALUECHAR'
2214          ,p_level    => C_LEVEL_PROCEDURE
2215          ,p_module   => l_log_module);
2216       trace
2217          (p_msg      => 'p_source_code = '  ||p_source_code
2218          ,p_level    => C_LEVEL_PROCEDURE
2219          ,p_module   => l_log_module);
2220       trace
2221          (p_msg      => 'p_target_ledger_id = '||TO_CHAR(p_target_ledger_id)
2222          ,p_level    => C_LEVEL_PROCEDURE
2223          ,p_module   => l_log_module);
2224    END IF;
2225 
2226    IF is_source_valid
2227          (p_source_code  => p_source_code
2228          ,p_datatype     => 'C')
2229    THEN
2230       l_ledger_id := p_target_ledger_id;
2231       IF ((g_array_ledger(l_ledger_id).category_code = 'ALC') AND
2232           (NOT(g_array_ledger(l_ledger_id).char_sources.EXISTS(p_source_code))))
2233       THEN
2234          l_ledger_id := g_primary_ledger_id;
2235       END IF;
2236 
2237       l_value := g_array_ledger(l_ledger_id).char_sources(p_source_code);
2238    END IF;
2239 
2240    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2241       trace
2242          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2243          ,p_level    => C_LEVEL_PROCEDURE
2244          ,p_module   => l_log_module);
2245       trace
2246          (p_msg      => 'END of function GETVALUECHAR'
2247          ,p_level    => C_LEVEL_PROCEDURE
2248          ,p_module   => l_log_module);
2249    END IF;
2250 
2251    RETURN l_value;
2252 EXCEPTION
2253 WHEN xla_exceptions_pkg.application_exception THEN
2254    RAISE;
2255 WHEN OTHERS  THEN
2256    xla_exceptions_pkg.raise_message
2257       (p_location => l_log_module);
2258 END GetValueChar;
2259 
2260 
2261 --=============================================================================
2262 --
2263 --
2264 --
2265 --=============================================================================
2266 FUNCTION GetValueChar
2267        (p_source_code                IN VARCHAR2)
2268 RETURN VARCHAR2 IS
2269 l_value                     VARCHAR2(240);
2270 l_log_module                VARCHAR2(240);
2271 
2272 BEGIN
2273    IF g_log_enabled THEN
2274       l_log_module := C_DEFAULT_MODULE||'.GetValueChar';
2275    END IF;
2276 
2277    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2278       trace
2279          (p_msg      => 'BEGIN of function GETVALUECHAR'
2280          ,p_level    => C_LEVEL_PROCEDURE
2281          ,p_module   => l_log_module);
2282       trace
2283          (p_msg      => 'p_source_code = '  ||p_source_code
2284          ,p_level    => C_LEVEL_PROCEDURE
2285          ,p_module   => l_log_module);
2286    END IF;
2287 
2288    IF is_source_valid
2289          (p_source_code  => p_source_code
2290          ,p_datatype     => 'C')
2291    THEN
2292       l_value := g_record_session.char_sources(p_source_code);
2293    END IF;
2294 
2295    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2296       trace
2297          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2298          ,p_level    => C_LEVEL_PROCEDURE
2299          ,p_module   => l_log_module);
2300       trace
2301          (p_msg      => 'END of function GETVALUECHAR'
2302          ,p_level    => C_LEVEL_PROCEDURE
2303          ,p_module   => l_log_module);
2304    END IF;
2305 
2306    RETURN l_value;
2307 EXCEPTION
2308 WHEN xla_exceptions_pkg.application_exception THEN
2309    RAISE;
2310 WHEN OTHERS  THEN
2311    xla_exceptions_pkg.raise_message
2312       (p_location => l_log_module);
2313 END GetValueChar;
2314 
2315 
2316 --=============================================================================
2317 --
2318 --
2319 --
2320 --=============================================================================
2321 FUNCTION GetSessionValueChar
2322        (p_source_code                IN VARCHAR2
2323        ,p_target_ledger_id           IN NUMBER)
2324 RETURN VARCHAR2 IS
2325 l_ledger_id                 NUMBER;
2326 l_value                     VARCHAR2(240);
2327 l_log_module                VARCHAR2(240);
2328 BEGIN
2329    IF g_log_enabled THEN
2330       l_log_module := C_DEFAULT_MODULE||'.GetSessionValueChar';
2331    END IF;
2332 
2333    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2334       trace
2335          (p_msg      => 'BEGIN of function GETSESSIONVALUECHAR'
2336          ,p_level    => C_LEVEL_PROCEDURE
2337          ,p_module   => l_log_module);
2338       trace
2339          (p_msg      => 'p_source_code = '  ||p_source_code
2340          ,p_level    => C_LEVEL_PROCEDURE
2341          ,p_module   => l_log_module);
2342       trace
2343          (p_msg      => 'p_target_ledger_id = '||TO_CHAR(p_target_ledger_id)
2344          ,p_level    => C_LEVEL_PROCEDURE
2345          ,p_module   => l_log_module);
2346    END IF;
2347 
2348    IF is_source_valid
2349          (p_source_code  => p_source_code
2350          ,p_datatype     => 'C')
2351    THEN
2352       l_ledger_id := p_target_ledger_id;
2353 
2354       IF ((g_array_ledger(l_ledger_id).category_code = 'ALC') AND
2355           (NOT(g_array_ledger(l_ledger_id).char_sources_sl.EXISTS(p_source_code))))
2356       THEN
2357          l_ledger_id := g_primary_ledger_id;
2358       END IF;
2359 
2360       l_value := g_array_ledger(l_ledger_id).char_sources_sl(p_source_code);
2361    END IF;
2362 
2363    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2364       trace
2365          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2366          ,p_level    => C_LEVEL_PROCEDURE
2367          ,p_module   => l_log_module);
2368       trace
2369          (p_msg      => 'END of function GETSESSIONVALUECHAR'
2370          ,p_level    => C_LEVEL_PROCEDURE
2371          ,p_module   => l_log_module);
2372    END IF;
2373 
2374    RETURN l_value;
2375 EXCEPTION
2376 WHEN xla_exceptions_pkg.application_exception THEN
2377    RAISE;
2378 WHEN OTHERS  THEN
2379    xla_exceptions_pkg.raise_message
2380       (p_location => l_log_module);
2381 END GetSessionValueChar;
2382 
2383 
2384 --=============================================================================
2385 --
2386 --
2387 --
2388 --=============================================================================
2389 FUNCTION GetSessionValueChar
2390        (p_source_code                IN VARCHAR2)
2391 RETURN VARCHAR2 IS
2392 l_value                     VARCHAR2(240);
2393 l_log_module                VARCHAR2(240);
2394 BEGIN
2395    IF g_log_enabled THEN
2396       l_log_module := C_DEFAULT_MODULE||'.GetSessionValueChar';
2397    END IF;
2398 
2399    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2400       trace
2401          (p_msg      => 'BEGIN of function GETSESSIONVALUECHAR'
2402          ,p_level    => C_LEVEL_PROCEDURE
2403          ,p_module   => l_log_module);
2404       trace
2405          (p_msg      => 'p_source_code = '  ||p_source_code
2406          ,p_level    => C_LEVEL_PROCEDURE
2407          ,p_module   => l_log_module);
2408    END IF;
2409 
2410    IF is_source_valid
2411          (p_source_code  => p_source_code
2412          ,p_datatype     => 'C')
2413    THEN
2414       l_value := g_record_session.char_sources_sl(p_source_code);
2415    END IF;
2416 
2417    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2418       trace
2419          (p_msg      => 'return value. = '||TO_CHAR(l_value)
2420          ,p_level    => C_LEVEL_PROCEDURE
2421          ,p_module   => l_log_module);
2422       trace
2423          (p_msg      => 'END of function GETSESSIONVALUECHAR'
2424          ,p_level    => C_LEVEL_PROCEDURE
2425          ,p_module   => l_log_module);
2426    END IF;
2427 
2428    RETURN l_value;
2429 EXCEPTION
2430 WHEN xla_exceptions_pkg.application_exception THEN
2431    RAISE;
2432 WHEN OTHERS  THEN
2433    xla_exceptions_pkg.raise_message
2434       (p_location => l_log_module);
2435 END GetSessionValueChar;
2436 
2437 
2438 --=============================================================================
2439 --
2440 --
2441 --
2442 --=============================================================================
2443 FUNCTION GetAlcLedgers
2444        (p_primary_ledger_id          IN NUMBER)
2445 RETURN t_array_ledger_id IS
2446 l_array_alc_ledgers         t_array_ledger_id;
2447 l_log_module                VARCHAR2(240);
2448 BEGIN
2449    IF g_log_enabled THEN
2450       l_log_module := C_DEFAULT_MODULE||'.GetAlcLedgers';
2451    END IF;
2452 
2453    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2454       trace
2455          (p_msg      => 'BEGIN of function GETALCLEDGERS'
2456          ,p_level    => C_LEVEL_PROCEDURE
2457          ,p_module   => l_log_module);
2458       trace
2459          (p_msg      => 'p_primary_ledger_id = '||TO_CHAR(p_primary_ledger_id)
2460          ,p_level    => C_LEVEL_PROCEDURE
2461          ,p_module   => l_log_module);
2462    END IF;
2463 
2464    IF p_primary_ledger_id = g_primary_ledger_id THEN
2465       l_array_alc_ledgers := g_alc_ledger_ids;
2466    END IF;
2467 
2468    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2469       trace
2470          (p_msg      => 'Count of alc ledgers returned = '||
2471                          TO_CHAR(l_array_alc_ledgers.COUNT)
2472          ,p_level    => C_LEVEL_PROCEDURE
2473          ,p_module   => l_log_module);
2474       trace
2475          (p_msg      => 'END of function GETALCLEDGERS'
2476          ,p_level    => C_LEVEL_PROCEDURE
2477          ,p_module   => l_log_module);
2478    END IF;
2479 
2480    RETURN l_array_alc_ledgers;
2481 EXCEPTION
2482 WHEN xla_exceptions_pkg.application_exception THEN
2483    RAISE;
2484 WHEN OTHERS  THEN
2485    xla_exceptions_pkg.raise_message
2486       (p_location => l_log_module);
2487 END GetAlcLedgers;
2488 
2489 
2490 --=============================================================================
2491 --
2492 --
2493 --
2494 --=============================================================================
2495 FUNCTION GetLedgers
2496 RETURN t_array_ledger_id IS
2497 l_log_module                VARCHAR2(240);
2498 BEGIN
2499    IF g_log_enabled THEN
2500       l_log_module := C_DEFAULT_MODULE||'.GetLedgers';
2501    END IF;
2502 
2503    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2504       trace
2505          (p_msg      => 'BEGIN of function GETLEDGERS'
2506          ,p_level    => C_LEVEL_PROCEDURE
2507          ,p_module   => l_log_module);
2508    END IF;
2509 
2510    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2511       trace
2512          (p_msg      => 'Count of ledgers returned = '||
2513                          TO_CHAR(g_base_ledger_ids.COUNT)
2514          ,p_level    => C_LEVEL_PROCEDURE
2515          ,p_module   => l_log_module);
2516       trace
2517          (p_msg      => 'END of function GETLEDGERS'
2518          ,p_level    => C_LEVEL_PROCEDURE
2519          ,p_module   => l_log_module);
2520    END IF;
2521 
2522    RETURN g_base_ledger_ids;
2523 EXCEPTION
2524 WHEN xla_exceptions_pkg.application_exception THEN
2525    RAISE;
2526 WHEN OTHERS  THEN
2527    xla_exceptions_pkg.raise_message
2528       (p_location => l_log_module);
2529 END GetLedgers;
2530 
2531 
2532 
2533 --=============================================================================
2534 --
2535 --
2536 --
2537 --=============================================================================
2538 FUNCTION get_je_category
2539         (p_ledger_id                  IN  NUMBER
2540         ,p_event_class_code           IN  VARCHAR2)
2541 RETURN VARCHAR2 IS
2542 l_ledger_id                 NUMBER;
2543 l_je_category               VARCHAR2(240);
2544 l_log_module                VARCHAR2(240);
2545 BEGIN
2546    IF g_log_enabled THEN
2547       l_log_module := C_DEFAULT_MODULE||'.get_je_category';
2548    END IF;
2549 
2550    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2551       trace
2552          (p_msg      => 'BEGIN of function GET_JE_CATEGORY'
2553          ,p_level    => C_LEVEL_PROCEDURE
2554          ,p_module   => l_log_module);
2555       trace
2556          (p_msg      => 'p_ledger_id = '  ||TO_CHAR(p_ledger_id)
2557          ,p_level    => C_LEVEL_PROCEDURE
2558          ,p_module   => l_log_module);
2559       trace
2560          (p_msg      => 'p_event_class_code = '||p_event_class_code
2561          ,p_level    => C_LEVEL_PROCEDURE
2562          ,p_module   => l_log_module);
2563    END IF;
2564 
2565    l_ledger_id := p_ledger_id;
2566 
2567    IF (g_array_ledger(l_ledger_id).category_code = 'ALC')
2568    THEN
2569       l_ledger_id := g_primary_ledger_id;
2570    END IF;
2571 
2572    l_je_category := g_array_event_classes(p_event_class_code)
2573                          .xla_je_category(l_ledger_id);
2574 
2575    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2576       trace
2577          (p_msg      => 'Return Value = '||l_je_category
2578          ,p_level    => C_LEVEL_PROCEDURE
2579          ,p_module   => l_log_module);
2580       trace
2581          (p_msg      => 'END of function GET_JE_CATEGORY'
2582          ,p_level    => C_LEVEL_PROCEDURE
2583          ,p_module   => l_log_module);
2584    END IF;
2585 
2586    RETURN l_je_category;
2587 EXCEPTION
2588 -- Bug 4736579
2589 WHEN NO_DATA_FOUND THEN
2590      xla_exceptions_pkg.raise_message
2591             (p_appli_s_name   => 'XLA'
2592             ,p_msg_name       => 'XLA_COMMON_ERROR'
2593             ,p_token_1        => 'ERROR'
2594             ,p_value_1        => 'ERROR: Problem getting journal category information for '||p_event_class_code||' and ledger '||p_ledger_id||'. '||
2595                                   'Subledger Accounting Options are not defined for the ledger and your application.'||
2596                                   'Please run Update Subledger Accounting Options program for your application.'
2597 
2598             ,p_token_2        => 'LOCATION'
2599             ,p_value_2        => 'xla_accounting_cache_pkg.get_je_category');
2600 
2601 WHEN xla_exceptions_pkg.application_exception THEN
2602    RAISE;
2603 WHEN OTHERS                                   THEN
2604    xla_exceptions_pkg.raise_message
2605       (p_location => l_log_module);
2606 END get_je_category;
2607 
2608 
2609 
2610 --=============================================================================
2611 --
2612 --
2613 --
2614 --=============================================================================
2615 FUNCTION GetArrayPad
2616        (p_ledger_id                  IN  NUMBER -- primary/secondary ledger id
2617        ,p_max_event_date             IN  DATE
2618        ,p_min_event_date             IN  DATE)
2619 RETURN t_array_pad IS
2620 l_ledger_id                 NUMBER;
2621 l_array_pads                t_array_pad;
2622 l_pad_found                 BOOLEAN    := FALSE;
2623 l_log_module                VARCHAR2(240);
2624 j                           NUMBER := 0;
2625 BEGIN
2626    IF g_log_enabled THEN
2627       l_log_module := C_DEFAULT_MODULE||'.GetArrayPad';
2628    END IF;
2629 
2630    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2631       trace
2632          (p_msg      => 'BEGIN of function GETARRAYPAD'
2633          ,p_level    => C_LEVEL_PROCEDURE
2634          ,p_module   => l_log_module);
2635       trace
2636          (p_msg      => 'p_ledger_id = '||p_ledger_id
2637          ,p_level    => C_LEVEL_PROCEDURE
2638          ,p_module   => l_log_module);
2639       trace
2640          (p_msg      => 'p_max_event_date = '||p_max_event_date
2641          ,p_level    => C_LEVEL_PROCEDURE
2642          ,p_module   => l_log_module);
2643       trace
2644          (p_msg      => 'p_min_event_date = '||p_min_event_date
2645          ,p_level    => C_LEVEL_PROCEDURE
2646          ,p_module   => l_log_module);
2647    END IF;
2648 
2649    l_ledger_id := p_ledger_id;
2650 
2651    IF (g_array_ledger(l_ledger_id).category_code = 'ALC')
2652    THEN
2653       l_ledger_id := g_primary_ledger_id;
2654    END IF;
2655 
2656    ----------------------------------------------------------------------------
2657    -- PAD start date and end date could be null. PAD effective dates must be
2658    -- compared using NVL.
2659    ----------------------------------------------------------------------------
2660    FOR i in 1..g_array_ledger(l_ledger_id).pads.COUNT LOOP
2661       IF (p_min_event_date <=
2662                NVL(g_array_ledger(l_ledger_id).pads(i).end_date_active, p_min_event_date+1)
2663          )
2664          AND
2665          (p_max_event_date >=
2666                NVL(g_array_ledger(p_ledger_id).pads(i).start_date_active, p_max_event_date-1)
2667          )
2668       THEN
2669          j := j + 1;
2670          l_array_pads(j).acctg_method_rule_id := g_array_ledger(l_ledger_id)
2671                                      .pads(i).acctg_method_rule_id;
2672          l_array_pads(j).amb_context_code := g_array_ledger(l_ledger_id)
2673                                      .pads(i).amb_context_code;
2674          l_array_pads(j).product_rule_owner := g_array_ledger(l_ledger_id)
2675                                      .pads(i).product_rule_owner;
2676          l_array_pads(j).product_rule_code := g_array_ledger(l_ledger_id)
2677                                      .pads(i).product_rule_code;
2678          l_array_pads(j).ledger_product_rule_name := g_array_ledger(l_ledger_id)
2679                                      .pads(i).ledger_product_rule_name;
2680          l_array_pads(j).session_product_rule_name := g_array_ledger(l_ledger_id)
2681                                      .pads(i).session_product_rule_name;
2682          l_array_pads(j).compile_status_code := g_array_ledger(l_ledger_id)
2683                                      .pads(i).compile_status_code;
2684          l_array_pads(j).pad_package_name   := g_array_ledger(l_ledger_id)
2685                                      .pads(i).pad_package_name;
2686          l_array_pads(j).start_date_active := g_array_ledger(l_ledger_id)
2687                                      .pads(i).start_date_active;
2688          l_array_pads(j).end_date_active := g_array_ledger(l_ledger_id)
2689                                      .pads(i).end_date_active;
2690       END IF;
2691    END LOOP;
2692 
2693    IF l_array_pads.COUNT = 0 THEN
2694       IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
2695          trace
2696             (p_msg      => 'WARNNING: No PAD found for : '||
2697                            'ledger = '||TO_CHAR(p_ledger_id)||
2698                            ' and date between '||TO_CHAR(p_min_event_date)||
2699                            ' and '||TO_CHAR(p_max_event_date)
2700             ,p_level    => C_LEVEL_EXCEPTION
2701             ,p_module   => l_log_module);
2702       END IF;
2703    END IF;
2704    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2705       trace
2706          (p_msg      => 'Count of pads = '||l_array_pads.COUNT
2707          ,p_level    => C_LEVEL_PROCEDURE
2708          ,p_module   => l_log_module);
2709       trace
2710          (p_msg      => 'END of function GETARRAYPAD'
2711          ,p_level    => C_LEVEL_PROCEDURE
2712          ,p_module   => l_log_module);
2713    END IF;
2714 return l_array_pads;
2715 END GetArrayPad;
2716 
2717 
2718 --=============================================================================
2719 --          *********** local procedures and functions **********
2720 --=============================================================================
2721 
2722 --=============================================================================
2723 --
2724 --
2725 --
2726 --
2727 --
2728 --
2729 --
2730 --
2731 --
2732 --
2733 -- Following are local routines
2734 --
2735 --    1.    cache_application_setup
2736 --    2.    load_system_sources
2737 --    3.    is_source_valid
2738 --
2739 --
2740 --
2741 --
2742 --
2743 --
2744 --
2745 --
2746 --
2747 --
2748 --
2749 --=============================================================================
2750 
2751 --=============================================================================
2752 --
2753 --
2754 --
2755 --=============================================================================
2756 PROCEDURE cache_application_setup
2757    (p_application_id                  IN  INTEGER
2758    ,p_ledger_id                       IN  INTEGER
2759    ,p_ledger_category                 IN  VARCHAR2) IS
2760 
2761 CURSOR csr_event_class IS
2762    SELECT ect.event_class_code      event_class_code
2763          ,ect.name                  ledger_event_class_name
2764          ,ecv.name                  session_event_class_name
2765          ,ect.language              language
2766      FROM xla_subledger_options_v   xso
2767          ,xla_event_classes_tl      ect
2768          ,xla_event_classes_vl      ecv
2769     WHERE xso.application_id          = p_application_id
2770       AND DECODE(xso.valuation_method_flag
2771                 ,'N',xso.primary_ledger_id
2772                 ,xso.ledger_id)       = p_ledger_id
2773       AND xso.enabled_flag            = 'Y'
2774       AND ect.application_id          = p_application_id
2775       AND ect.language               IN
2776                  (NVL(xso.sla_description_language,USERENV('LANG'))
2777                  ,USERENV('LANG'))
2778       AND ecv.application_id          = p_application_id
2779       AND ecv.event_class_code        = ect.event_class_code
2780    GROUP BY ect.event_class_code
2781            ,ecv.name
2782            ,ect.language
2783            ,ect.name;
2784 
2785 CURSOR csr_je_category(x_event_ledger_category IN VARCHAR2) IS
2786    SELECT xjc.event_class_code      event_class_code
2787          ,xjc.je_category_name      je_category_name
2788          ,xso.ledger_id             ledger_id
2789      FROM xla_subledger_options_v   xso
2790          ,xla_je_categories         xjc
2791     WHERE xso.application_id          = p_application_id
2792       AND xso.enabled_flag            = 'Y'
2793       AND xjc.application_id          = p_application_id
2794       AND xjc.ledger_id               = xso.ledger_id
2795       AND DECODE(x_event_ledger_category
2796                  ,'PRIMARY',xso.primary_ledger_id
2797                  ,xso.ledger_id)            = p_ledger_id
2798       AND DECODE(x_event_ledger_category
2799                  ,'PRIMARY',DECODE(xso.ledger_category_code
2800                                   ,'PRIMARY','Y','N')
2801                  ,'Y')                      = xso.capture_event_flag;
2802 
2803 
2804 
2805 CURSOR csr_event_type IS
2806    SELECT ett.event_type_code       event_type_code
2807          ,ett.name                  ledger_event_type_name
2808          ,etv.name                  session_event_type_name
2809          ,ett.language              language
2810      FROM xla_subledger_options_v   xso
2811          ,xla_event_types_tl        ett
2812          ,xla_event_types_vl        etv
2813     WHERE xso.application_id          = p_application_id
2814       AND DECODE(xso.valuation_method_flag
2815                 ,'N',xso.primary_ledger_id
2816                 ,xso.ledger_id)       = p_ledger_id
2817       AND xso.enabled_flag            = 'Y'
2818       AND ett.application_id          = p_application_id
2819       AND ett.language               IN
2820                  (NVL(xso.sla_description_language,USERENV('LANG'))
2821                  ,USERENV('LANG'))
2822       AND etv.application_id          = p_application_id
2823       AND etv.event_type_code         = ett.event_type_code
2824    GROUP BY ett.event_type_code
2825            ,etv.name
2826            ,ett.language
2827            ,ett.name;
2828 
2829 l_log_module                VARCHAR2(240);
2830 l_event_ledger_category     VARCHAR2(30);
2831 BEGIN
2832    IF g_log_enabled THEN
2833       l_log_module := C_DEFAULT_MODULE||'.cache_application_setup';
2834    END IF;
2835 
2836    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2837       trace
2838          (p_msg      => 'BEGIN of procedure CACHE_APPLICATION_SETUP'
2839          ,p_level    => C_LEVEL_PROCEDURE
2840          ,p_module   => l_log_module);
2841       trace
2842          (p_msg      => 'p_application_id = '||TO_CHAR(p_application_id)
2843          ,p_level    => C_LEVEL_PROCEDURE
2844          ,p_module   => l_log_module);
2845       trace
2846          (p_msg      => 'p_ledger_id = '||TO_CHAR(p_ledger_id)
2847          ,p_level    => C_LEVEL_PROCEDURE
2848          ,p_module   => l_log_module);
2849    END IF;
2850    l_event_ledger_category := p_ledger_category;
2851 
2852    FOR c1 IN csr_event_class LOOP
2853       g_array_event_classes(c1.event_class_code)
2854                .event_class_name_tl(c1.language) := c1.ledger_event_class_name;
2855       g_array_event_classes(c1.event_class_code)
2856                .event_class_name_sl := c1.session_event_class_name;
2857    END LOOP;
2858 
2859    ----------------------------------------------------------------------------
2860    -- following is added to cache je_categories defined for a event_class and
2861    -- ledger. (bug # 3109690)
2862    ----------------------------------------------------------------------------
2863    FOR c1 IN csr_je_category(l_event_ledger_category) LOOP
2864       g_array_event_classes(c1.event_class_code)
2865                .xla_je_category(c1.ledger_id) := c1.je_category_name;
2866    END LOOP;
2867 
2868    FOR c1 IN csr_event_type LOOP
2869       g_array_event_types(c1.event_type_code)
2870                .event_type_name_tl(c1.language) := c1.ledger_event_type_name;
2871       g_array_event_types(c1.event_type_code)
2872                .event_type_name_sl := c1.session_event_type_name;
2873    END LOOP;
2874 
2875    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2876       trace
2877          (p_msg      => 'Number of event classes = '||TO_CHAR(g_array_event_classes.COUNT)
2878          ,p_level    => C_LEVEL_STATEMENT
2879          ,p_module   => l_log_module);
2880       trace
2881          (p_msg      => 'Number of event types = '||TO_CHAR(g_array_event_types.COUNT)
2882          ,p_level    => C_LEVEL_STATEMENT
2883          ,p_module   => l_log_module);
2884    END IF;
2885 
2886    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2887       trace
2888          (p_msg      => 'END of Procedure CACHE_APPLICATION_SETUP'
2889          ,p_level    => C_LEVEL_PROCEDURE
2890          ,p_module   => l_log_module);
2891    END IF;
2892 EXCEPTION
2893 WHEN xla_exceptions_pkg.application_exception THEN
2894    RAISE;
2895 WHEN OTHERS                                   THEN
2896    xla_exceptions_pkg.raise_message
2897       (p_location => l_log_module);
2898 END cache_application_setup;
2899 
2900 
2901 --=============================================================================
2902 --
2903 --
2904 --
2905 --=============================================================================
2906 PROCEDURE load_system_sources IS
2907 CURSOR csr_sources IS
2908    SELECT source_code
2909          ,datatype_code
2910      FROM xla_sources_b WHERE application_id = 602;
2911 
2912 l_log_module                VARCHAR2(240);
2913 BEGIN
2914    IF g_log_enabled THEN
2915       l_log_module := C_DEFAULT_MODULE||'.load_system_sources';
2916    END IF;
2917 
2918    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2919       trace
2920          (p_msg      => 'BEGIN of Procedure LOAD_SYSTEM_SOURCES'
2921          ,p_level    => C_LEVEL_PROCEDURE
2922          ,p_module   => l_log_module);
2923    END IF;
2924 
2925    FOR c1 IN csr_sources LOOP
2926       g_array_sources(c1.source_code) := c1.datatype_code;
2927    END LOOP;
2928 
2929    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2930       trace
2931          (p_msg      => 'END of Procedure LOAD_SYSTEM_SOURCES'
2932          ,p_level    => C_LEVEL_PROCEDURE
2933          ,p_module   => l_log_module);
2934    END IF;
2935 
2936 EXCEPTION
2937 WHEN xla_exceptions_pkg.application_exception THEN
2938    RAISE;
2939 WHEN OTHERS                                   THEN
2940    xla_exceptions_pkg.raise_message
2941       (p_location => l_log_module);
2942 END load_system_sources;
2943 
2944 --=============================================================================
2945 --
2946 --
2947 --
2948 --=============================================================================
2949 FUNCTION is_source_valid
2950        (p_source_code         IN VARCHAR2
2951        ,p_datatype            IN VARCHAR2)
2952 RETURN BOOLEAN IS
2953 l_return_value              BOOLEAN  := FALSE;
2954 l_dummy_value               VARCHAR2(30);
2955 l_log_module                VARCHAR2(240);
2956 BEGIN
2957    IF g_log_enabled THEN
2958       l_log_module := C_DEFAULT_MODULE||'.is_source_valid';
2959    END IF;
2960 
2961    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2962       trace
2963          (p_msg      => 'BEGIN of function IS_SOURCE_VALID'
2964          ,p_level    => C_LEVEL_PROCEDURE
2965          ,p_module   => l_log_module);
2966       trace
2967          (p_msg      => 'p_source_code = '||p_source_code
2968          ,p_level    => C_LEVEL_PROCEDURE
2969          ,p_module   => l_log_module);
2970       trace
2971          (p_msg      => 'p_datatype = '||p_datatype
2972          ,p_level    => C_LEVEL_PROCEDURE
2973          ,p_module   => l_log_module);
2974    END IF;
2975 
2976    IF g_array_sources.EXISTS(p_source_code) THEN
2977       l_return_value := TRUE;
2978       l_dummy_value  := 'TRUE';
2979    ELSE
2980       l_dummy_value  := 'FALSE';
2981       xla_exceptions_pkg.raise_message
2982          (p_appli_s_name   => 'XLA'
2983          ,p_msg_name       => 'XLA_AP_INVALID_SOURCE_CODE'
2984          ,p_token_1        => 'SOURCE_CODE'
2985          ,p_value_1        => p_source_code);
2986    END IF;
2987 
2988    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2989       trace
2990          (p_msg      => 'return value = '||l_dummy_value
2991          ,p_level    => C_LEVEL_PROCEDURE
2992          ,p_module   => l_log_module);
2993       trace
2994          (p_msg      => 'END of function IS_SOURCE_VALID'
2995          ,p_level    => C_LEVEL_PROCEDURE
2996          ,p_module   => l_log_module);
2997    END IF;
2998 
2999    RETURN l_return_value;
3000 EXCEPTION
3001 WHEN xla_exceptions_pkg.application_exception THEN
3002    RAISE;
3003 WHEN OTHERS                                   THEN
3004    xla_exceptions_pkg.raise_message
3005       (p_location => l_log_module);
3006 END is_source_valid;
3007 
3008 Procedure BuildLedgerArray
3009 ( p_array_ledger_attrs OUT NOCOPY t_array_ledger_attrs)
3010 IS
3011 l_log_module                VARCHAR2(240);
3012 l_count                     NUMBER :=0;
3013 l_rounding_offset           NUMBER;
3014 l_rounding_rule_code        VARCHAR2(30);
3015 l_pri_rounding_offset           NUMBER;
3016 l_pri_rounding_rule_code        VARCHAR2(30);
3017 BEGIN
3018   IF g_log_enabled THEN
3019     l_log_module := C_DEFAULT_MODULE||'.BuildLedgerArray';
3020   END IF;
3021 
3022   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3023     trace
3024          (p_msg      => 'BEGIN of Procedure BuildLedgerArray'
3025          ,p_level    => C_LEVEL_PROCEDURE
3026          ,p_module   => l_log_module);
3027   END IF;
3028 
3029   IF(g_array_ledger_attrs.array_ledger_id.COUNT>0) THEN
3030     p_array_ledger_attrs := g_array_ledger_attrs;
3031     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3032       trace
3033          (p_msg      => 'Already built, END of function BuildLedgerArray'
3034          ,p_level    => C_LEVEL_PROCEDURE
3035          ,p_module   => l_log_module);
3036     END IF;
3037 
3038     RETURN;
3039   END IF;
3040 
3041   FOR Idx IN g_base_ledger_ids.FIRST .. g_base_ledger_ids.LAST LOOP
3042 
3043     l_rounding_rule_code :=xla_accounting_cache_pkg.GetValueChar(
3044                            p_source_code        => 'XLA_ROUNDING_RULE_CODE'
3045                          , p_target_ledger_id   => g_base_ledger_ids(Idx)
3046                          );
3047     IF l_rounding_rule_code = 'NEAREST' THEN
3048       l_rounding_offset := 0;
3049     ELSIF l_rounding_rule_code = 'UP' THEN
3050       l_rounding_offset := .5-power(10, -30);
3051     ELSIF l_rounding_rule_code = 'DOWN' THEN
3052       l_rounding_offset :=-(.5-power(10, -30));
3053     ELSE
3054       l_rounding_offset := 0;
3055     END IF;
3056 
3057     l_count:=l_count+1;
3058 
3059     g_array_ledger_attrs.array_default_rate_type(l_count) :=
3060                           xla_accounting_cache_pkg.GetValueChar(
3061                            p_source_code        => 'XLA_DEFAULT_CONV_RATE_TYPE'
3062                          , p_target_ledger_id   => g_base_ledger_ids(Idx)
3063                          );
3064     g_array_ledger_attrs.array_inhert_type_flag(l_count) :=
3065                           xla_accounting_cache_pkg.GetValueChar(
3066                            p_source_code        => 'XLA_INHERIT_CONVERSION_TYPE'
3067                          , p_target_ledger_id   => g_base_ledger_ids(Idx)
3068                          );
3069     g_array_ledger_attrs.array_max_roll_date(l_count) :=
3070                           xla_accounting_cache_pkg.GetValueNum(
3071                            p_source_code        => 'XLA_MAX_DAYS_ROLL_RATE'
3072                          , p_target_ledger_id   => g_base_ledger_ids(Idx)
3073                          );
3074     g_array_ledger_attrs.array_ledger_id(l_count) := g_base_ledger_ids(Idx);
3075     g_array_ledger_attrs.array_ledger_currency_code(l_count):=
3076                      xla_accounting_cache_pkg.GetValueChar(
3077                            p_source_code        => 'XLA_CURRENCY_CODE'
3078                          , p_target_ledger_id   => g_base_ledger_ids(Idx));
3079     g_array_ledger_attrs.array_mau(l_count):=
3080                      xla_accounting_cache_pkg.GetValueNum(
3081                            p_source_code        => 'XLA_CURRENCY_MAU'
3082                          , p_target_ledger_id   => g_base_ledger_ids(Idx));
3083     g_array_ledger_attrs.array_rounding_rule_code(l_count):=
3084                      l_rounding_rule_code;
3085 
3086     g_array_ledger_attrs.array_rounding_offset(l_count):= l_rounding_offset;
3087 
3088     IF (g_primary_ledger_id = g_base_ledger_ids(Idx)) THEN
3089       g_array_ledger_attrs.array_ledger_type(l_count):= 'PRIMARY';
3090       l_pri_rounding_rule_code := l_rounding_rule_code;
3091       l_pri_rounding_offset := l_rounding_offset;
3092     ELSE
3093       g_array_ledger_attrs.array_ledger_type(l_count) := 'SECONDARY';
3094     END IF;
3095   END LOOP;
3096 
3097   IF(g_alc_ledger_ids.COUNT>0) THEN
3098     FOR Idx1 IN g_alc_ledger_ids.FIRST .. g_alc_ledger_ids.LAST LOOP
3099       l_count:=l_count+1;
3100       g_array_ledger_attrs.array_ledger_id(l_count) := g_alc_ledger_ids(Idx1);
3101       g_array_ledger_attrs.array_ledger_currency_code(l_count):=
3102                      xla_accounting_cache_pkg.GetValueChar(
3103                            p_source_code        => 'XLA_CURRENCY_CODE'
3104                          , p_target_ledger_id   => g_alc_ledger_ids(Idx1));
3105       g_array_ledger_attrs.array_mau(l_count):=
3106                      xla_accounting_cache_pkg.GetValueNum(
3107                            p_source_code        => 'XLA_CURRENCY_MAU'
3108                          , p_target_ledger_id   => g_alc_ledger_ids(Idx1)
3109                          );
3110       g_array_ledger_attrs.array_rounding_rule_code(l_count):= l_pri_rounding_rule_code;
3111       g_array_ledger_attrs.array_rounding_offset(l_count) := l_pri_rounding_offset;
3112       g_array_ledger_attrs.array_ledger_type(l_count) := 'ALC';
3113       g_array_ledger_attrs.array_default_rate_type(l_count) :=
3114                           xla_accounting_cache_pkg.GetValueChar(
3115                            p_source_code        => 'XLA_DEFAULT_CONV_RATE_TYPE'
3116                          , p_target_ledger_id   => g_alc_ledger_ids(Idx1)
3117                          );
3118       g_array_ledger_attrs.array_inhert_type_flag(l_count) :=
3119                           xla_accounting_cache_pkg.GetValueChar(
3120                            p_source_code        => 'XLA_INHERIT_CONVERSION_TYPE'
3121                          , p_target_ledger_id   => g_alc_ledger_ids(Idx1)
3122                          );
3123       g_array_ledger_attrs.array_max_roll_date(l_count) :=
3124                           xla_accounting_cache_pkg.GetValueNum(
3125                            p_source_code        => 'XLA_MAX_DAYS_ROLL_RATE'
3126                          , p_target_ledger_id   => g_alc_ledger_ids(Idx1)
3127                          );
3128     END LOOP;
3129   END IF;
3130 
3131   p_array_ledger_attrs := g_array_ledger_attrs;
3132 
3133   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3134       trace
3135          (p_msg      => 'Count of ledgers returned = '||
3136                          to_char(l_count)
3137          ,p_level    => C_LEVEL_PROCEDURE
3138          ,p_module   => l_log_module);
3139       trace
3140          (p_msg      => 'END of function BuildLedgerArray'
3141          ,p_level    => C_LEVEL_PROCEDURE
3142          ,p_module   => l_log_module);
3143   END IF;
3144 
3145 EXCEPTION
3146 WHEN xla_exceptions_pkg.application_exception THEN
3147    RAISE;
3148 WHEN OTHERS  THEN
3149    xla_exceptions_pkg.raise_message
3150       (p_location => l_log_module);
3151 END BuildLedgerArray;
3152 
3153 PROCEDURE GetLedgerArray
3154 ( p_array_ledger_attrs OUT NOCOPY t_array_ledger_attrs)
3155 IS
3156 l_log_module                VARCHAR2(240);
3157 BEGIN
3158    IF g_log_enabled THEN
3159       l_log_module := C_DEFAULT_MODULE||'.GetLedgerArray';
3160    END IF;
3161 
3162    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3163       trace
3164          (p_msg      => 'BEGIN of procedure GETLEDGERARRAY'
3165          ,p_level    => C_LEVEL_PROCEDURE
3166          ,p_module   => l_log_module);
3167    END IF;
3168 
3169    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3170       trace
3171          (p_msg      => 'Count of ledgers returned = '||
3172                          TO_CHAR(g_array_ledger_attrs.array_ledger_id.COUNT)
3173          ,p_level    => C_LEVEL_PROCEDURE
3174          ,p_module   => l_log_module);
3175       trace
3176          (p_msg      => 'END of function GETLEDGERARRAY'
3177          ,p_level    => C_LEVEL_PROCEDURE
3178          ,p_module   => l_log_module);
3179    END IF;
3180 
3181   p_array_ledger_attrs := g_array_ledger_attrs;
3182 
3183 EXCEPTION
3184 WHEN xla_exceptions_pkg.application_exception THEN
3185    RAISE;
3186 WHEN OTHERS  THEN
3187    xla_exceptions_pkg.raise_message
3188       (p_location => l_log_module);
3189 END GetLedgerArray;
3190 
3191 FUNCTION GetCurrencyMau(p_currency_code IN VARCHAR2) return NUMBER
3192 IS
3193 l_entered_currency_mau              t_record_currency_mau;
3194 l_log_module                VARCHAR2(240);
3195 BEGIN
3196   IF g_log_enabled THEN
3197     l_log_module := C_DEFAULT_MODULE||'.GetCurrencyMau';
3198   END IF;
3199 
3200   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3201     trace
3202          (p_msg      => 'BEGIN of procedure GetCurrencyMau'
3203          ,p_level    => C_LEVEL_PROCEDURE
3204          ,p_module   => l_log_module);
3205   END IF;
3206 
3207   IF(g_entered_currency_mau.currency_code is null or g_entered_currency_mau.currency_code <> p_currency_code) THEN
3208     IF(g_entered_currency_mau1.currency_code is not null and g_entered_currency_mau1.currency_code = p_currency_code) THEN
3209       l_entered_currency_mau := g_entered_currency_mau1;
3210       g_entered_currency_mau1 := g_entered_currency_mau;
3211       g_entered_currency_mau := l_entered_currency_mau;
3212     ELSIF(g_entered_currency_mau2.currency_code is not null and g_entered_currency_mau2.currency_code = p_currency_code) THEN
3213       l_entered_currency_mau := g_entered_currency_mau2;
3214       g_entered_currency_mau2 := g_entered_currency_mau;
3215       g_entered_currency_mau := l_entered_currency_mau;
3216     ELSE
3217       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3218         trace
3219           (p_msg      => 'get from the db'
3220           ,p_level    => C_LEVEL_STATEMENT
3221           ,p_module   => l_log_module);
3222       END IF;
3223 
3224 
3225       BEGIN  --bug9590326
3226 	      SELECT nvl(minimum_accountable_unit, power(10, -1* precision))
3227 		INTO l_entered_currency_mau.currency_mau
3228 		FROM FND_CURRENCIES
3229 	       WHERE currency_code = p_currency_code;
3230 
3231       EXCEPTION WHEN NO_DATA_FOUND THEN
3232 		l_entered_currency_mau.currency_mau := NULL;
3233       END;
3234 
3235 
3236       l_entered_currency_mau.currency_code := p_currency_code;
3237       g_entered_currency_mau2 := g_entered_currency_mau1;
3238       g_entered_currency_mau1 := g_entered_currency_mau;
3239       g_entered_currency_mau  := l_entered_currency_mau;
3240     END IF;
3241   END IF;
3242 
3243   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3244     trace
3245          (p_msg      => 'END of procedure GetCurrencyMau:'||to_char(g_entered_currency_mau.currency_mau)
3246          ,p_level    => C_LEVEL_PROCEDURE
3247          ,p_module   => l_log_module);
3248   END IF;
3249   return g_entered_currency_mau.currency_mau;
3250 
3251 EXCEPTION
3252 WHEN xla_exceptions_pkg.application_exception THEN
3253    RAISE;
3254 WHEN OTHERS  THEN
3255    xla_exceptions_pkg.raise_message
3256       (p_location => l_log_module);
3257 END GetCurrencyMau;
3258 
3259 --=============================================================================
3260 --          *********** Initialization routine **********
3261 --=============================================================================
3262 
3263 --=============================================================================
3264 --
3265 --
3266 --
3267 --
3268 --
3269 --
3270 --
3271 --
3272 --
3273 --
3274 -- Following code is executed when the package body is referenced for the first
3275 -- time
3276 --
3277 --
3278 --
3279 --
3280 --
3281 --
3282 --
3283 --
3284 --
3285 --
3286 --
3287 --
3288 --=============================================================================
3289 
3290 BEGIN
3291 --   l_log_module     := C_DEFAULT_MODULE;
3292    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3293    g_log_enabled    := fnd_log.test
3294                           (log_level  => g_log_level
3295                           ,module     => C_DEFAULT_MODULE);
3296 
3297    IF NOT g_log_enabled  THEN
3298       g_log_level := C_LEVEL_LOG_DISABLED;
3299    END IF;
3300 END xla_accounting_cache_pkg;