DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_ACCOUNTING_PUB_PKG

Source


1 PACKAGE BODY xla_accounting_pub_pkg AS
2 -- $Header: xlaappub.pkb 120.24.12010000.5 2009/04/15 14:11:02 nksurana ship $
3 /*===========================================================================+
4 |             Copyright (c) 2001-2002 Oracle Corporation                     |
5 |                       Redwood Shores, CA, USA                              |
6 |                         All rights reserved.                               |
7 +============================================================================+
8 | PACKAGE NAME                                                               |
9 |     xla_accounting_pub_pkg                                                 |
10 |                                                                            |
11 | DESCRIPTION                                                                |
12 |     This package contains all the public APIs related to Accounting        |
13 |     Program. It has two APIs, one to account for a "batch of docuements"   |
14 |     and one to account for a single "docuemnt".                            |
15 |     All these APIs are wrapper over routines in the "xla_accounting_pkg".  |
16 |                                                                            |
17 | HISTORY                                                                    |
18 |     11/08/2002    S. Singhania      Created                                |
19 |     07/22/2003    S. Singhania      Added NOCOPY hint to the OUT parameters|
20 |     08/05/2003    S. Singhania      Added P_ENTITY_ID and P_ACCOUNTING_FLAG|
21 |                                       to ACCOUNTING_PROGRAM_DOCUMENT       |
22 |                                     Modified ACCOUNTING_PROGRAM_DOCUMENT   |
23 |     09/22/2003    S. Singhania      Added p_source_application to the API  |
24 |                                       ACCOUNTING_PROGRAM_BATCH             |
25 |     10/14/2003    S. Singhania      Added semicolon to the EXIT statement. |
26 |                                       (Bug # 3165900)                      |
27 |     12/02/2003    S. Singhania      Modified the submit_request call in    |
28 |                                       ACCOUNTING_PROGRAM_DOCUMENT to match |
29 |                                       the correct parameter order in prog  |
30 |                                       XLAACCPB. (Bug # 3290398)            |
31 |     02/28/2004    S. Singhania      Bug 3416534. Added local trace package |
32 |                                       and FND_LOG messages.                |
33 |     03/23/2004    S. Singhania      Added a parameter p_module to the TRACE|
34 |                                       calls and the procedure.             |
35 |     04/25/2005    S. Singhania      Bug 4323078. Temporarily modified body |
36 |                                       of accounting_progra_document to pass|
37 |                                       NULL for valuation method while      |
38 |                                       calling xla_events_pkg.get_entity_id |
39 |     04/27/2005    V. Kumar          Bug 4323078. Removed the temporary fix |
40 |                                       and overloaded the procedure         |
41 |                                       get_accounting_document with extra   |
42 |                                       valuation method parameter.          |
43 |     04/29/2005    S. Singhania      Bug 4332679. Modified trace procedure  |
44 |                                       for the GSCC check File.Sql.46       |
45 |     08/01/2005    W. Chan           4458381 - Public Sector Enhancement    |
46 |     03/07/2006    V. Swapna         Bug 5080849. Modified submit request   |
47 |                                       call in accounting_program_document. |
48 |     03/21/2006    A. Wan            5109240a - accounting_program_events   |
49 |                                       should validate the accounting mode  |
50 |                                       in full (ie DRAFT, FINAL).           |
51 |     31/12/2007    V. Swapna         5339999 - Historic upgrade of sec/alc  |
52 |                                     Don't allow online accounting to run   |
53 |                                     when the upgrade process is running.   |
54 +===========================================================================*/
55 
56 C_NUM                 CONSTANT NUMBER       := 9.99E125;
57 C_CHAR                CONSTANT VARCHAR2(1)  := '
58 ';
59 
60 --=============================================================================
61 --               *********** Local Trace Routine **********
62 --=============================================================================
63 
64 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
65 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
66 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
67 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
68 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
69 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
70 
71 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
72 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_accounting_pub_pkg';
73 
74 g_log_level           NUMBER;
75 g_log_enabled         BOOLEAN;
76 
77 PROCEDURE trace
78        (p_msg                        IN VARCHAR2
79        ,p_level                      IN NUMBER
80        ,p_module                     IN VARCHAR2 DEFAULT C_DEFAULT_MODULE) IS
81 BEGIN
82    IF (p_msg IS NULL AND p_level >= g_log_level) THEN
83       fnd_log.message(p_level, p_module);
84    ELSIF p_level >= g_log_level THEN
85       fnd_log.string(p_level, p_module, p_msg);
86    END IF;
87 
88 EXCEPTION
89    WHEN xla_exceptions_pkg.application_exception THEN
90       RAISE;
91    WHEN OTHERS THEN
92       xla_exceptions_pkg.raise_message
93          (p_location   => 'xla_accounting_pub_pkg.trace');
94 END trace;
95 
96 --============================================================================
97 --
98 --
99 --
100 --============================================================================
101 PROCEDURE accounting_program_batch
102        (p_source_application_id      IN  NUMBER
103        ,p_application_id             IN  NUMBER
104        ,p_ledger_id                  IN  NUMBER
105        ,p_process_category           IN  VARCHAR2
106        ,p_end_date                   IN  DATE
107        ,p_accounting_flag            IN  VARCHAR2
108        ,p_accounting_mode            IN  VARCHAR2
109        ,p_error_only_flag            IN  VARCHAR2
110        ,p_transfer_flag              IN  VARCHAR2
111        ,p_gl_posting_flag            IN  VARCHAR2
112        ,p_gl_batch_name              IN  VARCHAR2
113        ,p_valuation_method           IN  VARCHAR2
114        ,p_security_id_int_1          IN  NUMBER
115        ,p_security_id_int_2          IN  NUMBER
116        ,p_security_id_int_3          IN  NUMBER
117        ,p_security_id_char_1         IN  VARCHAR2
118        ,p_security_id_char_2         IN  VARCHAR2
119        ,p_security_id_char_3         IN  VARCHAR2
120        ,p_accounting_batch_id        OUT NOCOPY NUMBER
121        ,p_errbuf                     OUT NOCOPY VARCHAR2
122        ,p_retcode                    OUT NOCOPY NUMBER) IS
123 l_log_module                VARCHAR2(240);
124 BEGIN
125    IF g_log_enabled THEN
126       l_log_module := C_DEFAULT_MODULE||'.accounting_program_batch';
127    END IF;
128    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
129       trace
130          (p_msg      => 'BEGIN of procedure ACCOUNTING_PROGRAM_BATCH'
131          ,p_level    => C_LEVEL_PROCEDURE
132          ,p_module   => l_log_module);
133    END IF;
134 
135    xla_accounting_pkg.accounting_program_batch
136       (p_source_application_id           => p_source_application_id
137       ,p_application_id                  => p_application_id
138       ,p_ledger_id                       => p_ledger_id
139       ,p_process_category                => p_process_category
140       ,p_end_date                        => p_end_date
141       ,p_accounting_flag                 => p_accounting_flag
142       ,p_accounting_mode                 => p_accounting_mode
143       ,p_error_only_flag                 => p_error_only_flag
144       ,p_transfer_flag                   => p_transfer_flag
145       ,p_gl_posting_flag                 => p_gl_posting_flag
146       ,p_gl_batch_name                   => p_gl_batch_name
147       ,p_valuation_method                => p_valuation_method
148       ,p_security_id_int_1               => p_security_id_int_1
149       ,p_security_id_int_2               => p_security_id_int_2
150       ,p_security_id_int_3               => p_security_id_int_3
151       ,p_security_id_char_1              => p_security_id_char_1
152       ,p_security_id_char_2              => p_security_id_char_2
153       ,p_security_id_char_3              => p_security_id_char_3
154       ,p_accounting_batch_id             => p_accounting_batch_id
155       ,p_errbuf                          => p_errbuf
156       ,p_retcode                         => p_retcode);
157 
158    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
159       trace
160          (p_msg      => 'END of procedure ACCOUNTING_PROGRAM_BATCH'
161          ,p_level    => C_LEVEL_PROCEDURE
162          ,p_module   => l_log_module);
163    END IF;
164 EXCEPTION
165 WHEN xla_exceptions_pkg.application_exception THEN
166    RAISE;
167 WHEN OTHERS THEN
168    xla_exceptions_pkg.raise_message
169        (p_location       => 'xla_accounting_pub_pkg.accounting_program_batch');
170 END accounting_program_batch; -- end of procedure
171 
172 
173 --============================================================================
174 --
175 -- Overloaded with extra valuation_method parameter
176 --
177 --============================================================================
178 PROCEDURE accounting_program_document
179        (p_event_source_info          IN  xla_events_pub_pkg.t_event_source_info
180        ,p_application_id             IN  NUMBER      DEFAULT NULL
181        ,p_valuation_method           IN  VARCHAR2
182        ,p_entity_id                  IN  NUMBER
183        ,p_accounting_flag            IN  VARCHAR2    DEFAULT 'Y'
184        ,p_accounting_mode            IN  VARCHAR2
185        ,p_transfer_flag              IN  VARCHAR2
186        ,p_gl_posting_flag            IN  VARCHAR2
187        ,p_offline_flag               IN  VARCHAR2
188        ,p_accounting_batch_id        OUT NOCOPY NUMBER
189        ,p_errbuf                     OUT NOCOPY VARCHAR2
190        ,p_retcode                    OUT NOCOPY NUMBER
191        ,p_request_id                 OUT NOCOPY NUMBER) IS
192 l_entity_id                 NUMBER;
193 l_application_id            NUMBER;
194 l_ledger_id                 NUMBER;
195 l_log_module                VARCHAR2(240);
196 historic_upgrade_running    EXCEPTION;
197 BEGIN
198    IF g_log_enabled THEN
199       l_log_module := C_DEFAULT_MODULE||'.accounting_program_document';
200    END IF;
201    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
202       trace
203          (p_msg      => 'BEGIN of procedure ACCOUNTING_PROGRAM_DOCUMENT'
204          ,p_level    => C_LEVEL_PROCEDURE
205          ,p_module   => l_log_module);
206       trace
207          (p_msg      => 'p_entity_id = '||p_entity_id
208          ,p_level    => C_LEVEL_PROCEDURE
209          ,p_module   => l_log_module);
210       trace
211          (p_msg      => 'p_valuation_method = '||p_valuation_method
212          ,p_level    => C_LEVEL_PROCEDURE
213          ,p_module   => l_log_module);
214 
215    END IF;
216 
217 
218    -- commented code added in 7253269 to test fix for 7380459 gl post error
219    --XLA_ACCOUNTING_CACHE_PKG.g_reversal_error := FALSE;
220 
221 
222    ----------------------------------------------------------------------------
223    -- Fetch entity information for the transaction.
224    ----------------------------------------------------------------------------
225    IF p_entity_id IS NULL THEN
226       -------------------------------------------------------------------------
227       -- Following sets the Security Context for the execution. This enables
228       -- the accounting program to respect the transaction security.
229       -------------------------------------------------------------------------
230 
231       IF (C_LEVEL_EVENT >= g_log_level) THEN
232          trace
233             (p_msg      => 'Setting security context for the applciation '||
234                            p_event_source_info.application_id
235             ,p_level    => C_LEVEL_EVENT
236             ,p_module   => l_log_module);
237       END IF;
238 
239       xla_security_pkg.set_security_context(p_event_source_info.application_id);
240 
241       l_entity_id := xla_events_pkg.get_entity_id
242                         (p_event_source_info     => p_event_source_info
243                         ,p_valuation_method      => p_valuation_method );
244       l_application_id := p_event_source_info.application_id;
245       l_ledger_id      := p_event_source_info.ledger_id;
246    ELSE
247       -- If application ID is not specified then derive entity information.
248       -- using just the entity_id. If the application ID is provided then
249       -- derive the application ID based enitity_id/application ID for
250       -- performance reasons.
251 
252       IF p_application_id IS NULL THEN
253          SELECT APPLICATION_ID
254                ,LEDGER_ID
255                ,ENTITY_ID
256          INTO L_APPLICATION_ID
257              ,L_LEDGER_ID
258              ,L_ENTITY_ID
259          FROM XLA_TRANSACTION_ENTITIES
260          WHERE ENTITY_ID = P_ENTITY_ID;
261       ELSE
262          SELECT APPLICATION_ID
263                ,LEDGER_ID
264                ,ENTITY_ID
265          INTO L_APPLICATION_ID
266              ,L_LEDGER_ID
267              ,L_ENTITY_ID
268          FROM XLA_TRANSACTION_ENTITIES
269          WHERE ENTITY_ID = P_ENTITY_ID
270          AND   application_id = p_application_id;
271       END IF;
272 
273       -- Added for bug 4599776
274       xla_security_pkg.set_security_context(l_application_id);
275 
276    END IF;
277 
278    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
279       trace
280          (p_msg      => 'l_application_id = '||l_application_id
281          ,p_level    => C_LEVEL_STATEMENT
282          ,p_module   => l_log_module);
283       trace
284          (p_msg      => 'l_ledger_id = '||l_ledger_id
285          ,p_level    => C_LEVEL_STATEMENT
286          ,p_module   => l_log_module);
287       trace
288          (p_msg      => 'l_entity_id = '||l_entity_id
289          ,p_level    => C_LEVEL_STATEMENT
290          ,p_module   => l_log_module);
291       trace
292          (p_msg      => 'p_offline_flag = '||p_offline_flag
293          ,p_level    => C_LEVEL_STATEMENT
294          ,p_module   => l_log_module);
295    END IF;
296 
297    IF NOT is_historic_upgrade_running(l_ledger_id) THEN -- Historic upgrade
298 
299    IF p_offline_flag = 'N' THEN
300 
301       -- added code to test fix for 7380459 gl post error
302       XLA_ACCOUNTING_CACHE_PKG.g_reversal_error := FALSE;
303 
304 
305       xla_accounting_pkg.accounting_program_document
306          (p_application_id                  => l_application_id
307          ,p_entity_id                       => l_entity_id
308          ,p_accounting_flag                 => p_accounting_flag
309          ,p_accounting_mode                 => p_accounting_mode
310          ,p_gl_posting_flag                 => p_gl_posting_flag
311          ,p_offline_flag                    => p_offline_flag
312          ,p_accounting_batch_id             => p_accounting_batch_id
313          ,p_errbuf                          => p_errbuf
314          ,p_retcode                         => p_retcode);
315 
316 
317    ELSE
318       IF (C_LEVEL_EVENT >= g_log_level) THEN
319          trace
320             (p_msg      => 'Calling procedure FND_REQUEST.SUBMIT_REQUEST'
321             ,p_level    => C_LEVEL_EVENT
322             ,p_module   => l_log_module);
323       END IF;
324 
325       p_request_id :=
326 
327   fnd_request.submit_request
328             (application     => 'XLA'
329             ,program         => 'XLAACCPB'
330             ,description     => NULL
331             ,start_time      => NULL
332             ,sub_request     => FALSE
333             ,argument1       => l_application_id  -- application_id
334             ,argument2       => NULL              -- source_application_id
335             ,argument3       => NULL              -- dummy
336             ,argument4       => l_ledger_id       -- ledger_id
337             ,argument5       => NULL              -- process_category_code
338             ,argument6       => NULL              -- end_date
339             ,argument7       => p_accounting_flag -- create_accounting_flag
343             ,argument11      => 'N'               -- errors_only_flag
340             ,argument8       => NULL              -- dummy_param_1
341             ,argument9       => p_accounting_mode -- accounting_mode
342             ,argument10      => NULL              -- dummy_param_2
344             ,argument12      => 'D'               -- report_style
345             ,argument13      => p_transfer_flag   -- transfer_to_gl_flag
346             ,argument14      => NULL              -- dummy_param_3
347             ,argument15      => p_gl_posting_flag -- post_in_gl_flag
348             ,argument16      => NULL              -- gl_batch_name
349             ,argument17      => fnd_profile.value('CURRENCY:MIXED_PRECISION') -- min_precision
350             ,argument18      => NULL              -- include_zero_amount_lines
351             ,argument19      => NULL              -- request_id
352             ,argument20      => l_entity_id       -- entity_id
353             ,argument21      => NULL              -- source_application_name
354             ,argument22      => NULL              -- application_name
355             ,argument23      => NULL              -- ledger_name
356             ,argument24      => NULL              -- process_category_name
357             ,argument25      => NULL              -- create_accounting
358             ,argument26      => NULL              -- accounting_mode_name
359             ,argument27      => NULL              -- errors_only
360             ,argument28      => NULL              -- accounting_report_level
361             ,argument29      => NULL              -- transfer_to_gl
362             ,argument30      => NULL              -- post_in_gl
363             ,argument31      => NULL              -- include_zero_amt_lines
364             ,argument32      => p_valuation_method-- valuation_method_code
365             ,argument33      => NULL              -- security_int_1
366             ,argument34      => NULL              -- security_int_2
367             ,argument35      => NULL              -- security_int_3
368             ,argument36      => NULL              -- security_char_1
369             ,argument37      => NULL              -- security_char_2
370             ,argument38      => NULL    );        -- security_char_3
371 
372       IF (C_LEVEL_EVENT >= g_log_level) THEN
373          trace
374             (p_msg      => 'Procedure FND_REQUEST.SUBMIT_REQUEST executed'
375             ,p_level    => C_LEVEL_EVENT
376             ,p_module   => l_log_module);
377       END IF;
378 
379       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
380          trace
381             (p_msg      => 'p_request_id = '||p_request_id
382             ,p_level    => C_LEVEL_STATEMENT
383             ,p_module   => l_log_module);
384       END IF;
385 
386       IF p_request_id = 0 THEN
387          IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
388             trace
389                (p_msg      => 'Technical Error : Unable to submit the request'
390                ,p_level    => C_LEVEL_EXCEPTION
391                ,p_module   => l_log_module);
392          END IF;
393 
394          xla_exceptions_pkg.raise_message
395             (p_appli_s_name   => 'XLA'
396             ,p_msg_name       => 'XLA_AP_TECHNICAL_ERROR'
397             ,p_token_1        => 'APPLICATION_NAME'
398             ,p_value_1        => 'SLA');
399       END IF;
400 
401    END IF;
402    ELSE
403       raise historic_upgrade_running;
404    END IF;
405 
406    IF XLA_ACCOUNTING_CACHE_PKG.g_hist_bflow_error_exists THEN
407       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
408       trace
409          (p_msg      => 'Missing bflow entries due to historic upgrade.'
410          ,p_level    => C_LEVEL_STATEMENT
411          ,p_module   => l_log_module);
412       END IF;
413      p_retcode := 2;
414 
415    END IF;
416 
417      -- bug 7253269, Online case
418 
419     IF XLA_ACCOUNTING_CACHE_PKG.g_reversal_error THEN
420       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
421       trace
422          (p_msg      => 'Could not create reversal entry'
423          ,p_level    => C_LEVEL_STATEMENT
424          ,p_module   => l_log_module);
425       END IF;
426      p_retcode := 2;
427 
428    END IF;
429 
430 
431 
432 
433    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
434       trace
435          (p_msg      => 'END of procedure ACCOUNTING_PROGRAM_DOCUMENT'
436          ,p_level    => C_LEVEL_PROCEDURE
437          ,p_module   => l_log_module);
438    END IF;
439 EXCEPTION
440 WHEN historic_upgrade_running THEN
441  p_retCode := 2;
442  p_errBuf  := 'XLA_UPG_HIST_RUNNING';
443 
444 
445 WHEN xla_exceptions_pkg.application_exception THEN
446    RAISE;
447 WHEN OTHERS THEN
448    xla_exceptions_pkg.raise_message
449        (p_location   => 'xla_accounting_pub_pkg.accounting_program_document');
450 END accounting_program_document; -- end of procedure
451 
452 
453 --============================================================================
454 --
455 --
456 --
457 --============================================================================
458 PROCEDURE accounting_program_document
459        (p_event_source_info          IN  xla_events_pub_pkg.t_event_source_info
460        ,p_application_id             IN  NUMBER      DEFAULT NULL
461        ,p_entity_id                  IN  NUMBER
462        ,p_accounting_flag            IN  VARCHAR2    DEFAULT 'Y'
463        ,p_accounting_mode            IN  VARCHAR2
464        ,p_transfer_flag              IN  VARCHAR2
465        ,p_gl_posting_flag            IN  VARCHAR2
466        ,p_offline_flag               IN  VARCHAR2
467        ,p_accounting_batch_id        OUT NOCOPY NUMBER
468        ,p_errbuf                     OUT NOCOPY VARCHAR2
469        ,p_retcode                    OUT NOCOPY NUMBER
473       ( p_event_source_info    =>  p_event_source_info
470        ,p_request_id                 OUT NOCOPY NUMBER) IS
471 BEGIN
472    accounting_program_document
474        ,p_application_id       =>  p_application_id
475        ,p_valuation_method     =>  NULL                 -- pass NULL for valuation method
476        ,p_entity_id            =>  p_entity_id
477        ,p_accounting_flag      =>  p_accounting_flag
478        ,p_accounting_mode      =>  p_accounting_mode
479        ,p_transfer_flag        =>  p_transfer_flag
480        ,p_gl_posting_flag      =>  p_gl_posting_flag
481        ,p_offline_flag         =>  p_offline_flag
482        ,p_accounting_batch_id  =>  p_accounting_batch_id
483        ,p_errbuf               =>  p_errbuf
484        ,p_retcode              =>  p_retcode
485        ,p_request_id           =>  p_request_id );
486 
487 EXCEPTION
488 WHEN xla_exceptions_pkg.application_exception THEN
489    RAISE;
490 WHEN OTHERS THEN
491    xla_exceptions_pkg.raise_message
492       (p_location   => 'xla_accounting_pub_pkg.accounting_program_document');
493 END accounting_program_document; -- end of procedure
494 
495 --============================================================================
496 --
497 --
498 --
499 --============================================================================
500 PROCEDURE accounting_program_doc_batch
501 (p_application_id        IN INTEGER
502 ,p_accounting_mode       IN VARCHAR2
503 ,p_gl_posting_flag       IN VARCHAR2
504 ,p_accounting_batch_id   IN OUT NOCOPY INTEGER
505 ,p_errbuf                IN OUT NOCOPY VARCHAR2
506 ,p_retcode               IN OUT NOCOPY INTEGER)
507 IS
508 l_count                  INTEGER;
509 l_log_module             VARCHAR2(240);
510 BEGIN
511    IF g_log_enabled THEN
512       l_log_module := C_DEFAULT_MODULE||'.accounting_program_doc_batch';
513    END IF;
514 
515    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
516       trace
517          (p_msg      => 'BEGIN of procedure accounting_program_doc_batch'
518          ,p_level    => C_LEVEL_PROCEDURE
519          ,p_module   => l_log_module);
520       trace
521          (p_msg      => 'p_application_id = '||p_application_id
522          ,p_level    => C_LEVEL_PROCEDURE
523          ,p_module   => l_log_module);
524       trace
525          (p_msg      => 'p_accounting_mode = '||p_accounting_mode
526          ,p_level    => C_LEVEL_PROCEDURE
527          ,p_module   => l_log_module);
528    END IF;
529 
530    UPDATE xla_acct_prog_docs_gt xap
531       SET entity_id =
532           (SELECT xte.entity_id
533              FROM xla_transaction_entities xte
534             WHERE xte.application_id                  = p_application_id
535               AND xte.ledger_id                       = xap.ledger_id
536               AND xte.entity_code                     = xap.entity_type_code
537               AND NVL(xte.valuation_method,C_CHAR)    = NVL(xap.valuation_method,C_CHAR)
538               AND NVL(xte.source_id_int_1,C_NUM)      = NVL(xap.source_id_int_1,C_NUM)
539               AND NVL(xte.source_id_int_2,C_NUM)      = NVL(xap.source_id_int_2,C_NUM)
540               AND NVL(xte.source_id_int_3,C_NUM)      = NVL(xap.source_id_int_3,C_NUM)
541               AND NVL(xte.source_id_int_4,C_NUM)      = NVL(xap.source_id_int_4,C_NUM)
542               AND NVL(xte.source_id_char_1,C_CHAR)    = NVL(xap.source_id_char_1,C_CHAR)
543               AND NVL(xte.source_id_char_2,C_CHAR)    = NVL(xap.source_id_char_2,C_CHAR)
544               AND NVL(xte.source_id_char_3,C_CHAR)    = NVL(xap.source_id_char_3,C_CHAR)
545               AND NVL(xte.source_id_char_4,C_CHAR)    = NVL(xap.source_id_char_4,C_CHAR))
546     WHERE xap.entity_id IS NULL;
547 
548    SELECT count(*) INTO l_count
549      FROM xla_acct_prog_docs_gt xap
550     WHERE entity_id IS NULL
551        OR NOT EXISTS (SELECT entity_id
552                         FROM xla_transaction_entities xte
553                        WHERE xte.application_id = p_application_id
554                          AND xte.entity_id      = xap.entity_id);
555 
556    IF (l_count > 0) THEN
557       IF (C_LEVEL_ERROR >= g_log_level) THEN
558         trace
559              (p_msg      => 'Invalid entity is used in the xla_acct_prog_docs_gt'
560              ,p_level    => C_LEVEL_ERROR
561              ,p_module   =>l_log_module);
562       END IF;
563       xla_exceptions_pkg.raise_message
564             (p_appli_s_name   => 'XLA'
565             ,p_msg_name       => 'XLA_COMMON_ERROR'
566             ,p_token_1        => 'ERROR'
567             ,p_value_1        => 'Invalid entity is used in the xla_acct_prog_docs_gt'
568             ,p_token_2        => 'LOCATION'
569             ,p_value_2        => 'xla_accounting_pub_pkg.accounting_program_doc_batch');
570 
571    END IF;
572 
573    INSERT INTO XLA_ACCT_PROG_EVENTS_GT(event_id, ledger_id)
574      SELECT xe.event_id, xte.ledger_id
575        FROM xla_acct_prog_docs_gt           xap
576            ,xla_events                      xe
577            ,xla_transaction_entities        xte
578       WHERE xte.application_id              = p_application_id
579         AND xte.entity_id                   = xap.entity_id
580         AND xap.entity_id                   IS NOT NULL
581         AND xe.application_id               = xte.application_id
582         AND xe.entity_id                    = xte.entity_id
583         AND NVL(budgetary_control_flag,'N') = DECODE(p_accounting_mode
584                                                     ,'D','N'
585                                                     ,'F','N'
586                                                     ,'Y');
587 
588    IF (C_LEVEL_EVENT >= g_log_level) THEN
589       trace
590          (p_msg      => '# row inserted into xla_acct_prog_events_gt = '||SQL%ROWCOUNT
591          ,p_level    => C_LEVEL_EVENT
592          ,p_module   => l_log_module);
596    --7390659 change start
593    END IF;
594 
595 
597 
598     INSERT INTO xla_evt_class_orders_gt
599       (event_class_code
600       ,processing_order
601       )
602       SELECT xec.event_class_code
603            , NVL(t.max_level, -1)
604         FROM xla_event_classes_b xec
605            , (SELECT application_id, event_class_code, max(LEVEL) AS max_level
606                 FROM (SELECT application_id, event_class_code, prior_event_class_code
607                         FROM xla_event_class_predecs
608                        WHERE application_id = p_application_id
609                        UNION
610                       SELECT application_id, prior_event_class_code, NULL
611                         FROM xla_event_class_predecs
612                        WHERE application_id = p_application_id) xep
613                 CONNECT BY application_id         = PRIOR application_id
614                        AND prior_event_class_code = PRIOR event_class_code
615                  GROUP BY application_id, event_class_code) t
616        WHERE xec.event_class_code = t.event_class_code(+)
617          AND xec.application_id   = t.application_id(+)
618          AND xec.application_id   = p_application_id
619          AND xec.event_class_code <> 'MANUAL';
620 
621 
622     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
623       trace
624          (p_msg      => 'Number of rows inserted into xla_evt_class_orders_gt = '||SQL%ROWCOUNT
625          ,p_level    => C_LEVEL_STATEMENT
626          ,p_module   => l_log_module);
627     END IF;
628 
629 
630 --7390659 change end
631 
632 
633 
634 
635 
636    xla_accounting_pkg.accounting_program_events
637            (p_application_id      => p_application_id
638            ,p_accounting_mode     => p_accounting_mode
639            ,p_gl_posting_flag     => p_gl_posting_flag
640            ,p_offline_flag        => 'N'
641            ,p_accounting_batch_id => p_accounting_batch_id
642            ,p_errbuf              => p_errbuf
643            ,p_retcode             => p_retcode);
644 
645    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
646       trace
647          (p_msg      => 'END of procedure accounting_program_doc_batch'
648          ,p_level    => C_LEVEL_PROCEDURE
649          ,p_module   => l_log_module);
650    END IF;
651 EXCEPTION
652 WHEN xla_exceptions_pkg.application_exception THEN
653    RAISE;
654 WHEN OTHERS THEN
655    xla_exceptions_pkg.raise_message
656       (p_location   => 'xla_accounting_pub_pkg.accounting_program_doc_batch');
657 END accounting_program_doc_batch; -- end of procedure
658 
659 --============================================================================
660 --
661 --
662 --
663 --============================================================================
664 PROCEDURE accounting_program_events
665 (p_application_id        IN INTEGER
666 ,p_accounting_mode       IN VARCHAR2
667 ,p_gl_posting_flag       IN VARCHAR2
668 ,p_accounting_batch_id   IN OUT NOCOPY INTEGER
669 ,p_errbuf                IN OUT NOCOPY VARCHAR2
670 ,p_retcode               IN OUT NOCOPY INTEGER
671 )
672 IS
673 CURSOR c_invalid_events IS
674   SELECT 1
675     FROM xla_acct_prog_events_gt            xap
676        , xla_events                         xe
677    WHERE xe.application_id                  = p_application_id
678      AND xe.event_id                        = xap.event_id
679      AND NVL(xe.budgetary_control_flag,'N') = DECODE(p_accounting_mode
680                                                     ,'DRAFT','Y'      -- 5109240a replace 'D'
681                                                     ,'FINAL','Y'      -- 5109240a replace 'F'
682                                                     ,'N')
683      AND ROWNUM = 1;
684 
685 l_dummy            INTEGER;
686 l_count            INTEGER;
687 l_log_module       VARCHAR2(240);
688 BEGIN
689    IF g_log_enabled THEN
690       l_log_module := C_DEFAULT_MODULE||'.accounting_program_events';
691    END IF;
692 
693    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
694       trace
695          (p_msg      => 'BEGIN of procedure accounting_program_events'
696          ,p_level    => C_LEVEL_PROCEDURE
697          ,p_module   => l_log_module);
698       trace
699          (p_msg      => 'p_application_id = '||p_application_id
700          ,p_level    => C_LEVEL_PROCEDURE
701          ,p_module   => l_log_module);
702       trace
703          (p_msg      => 'p_accounting_mode = '||p_accounting_mode
704          ,p_level    => C_LEVEL_PROCEDURE
705          ,p_module   => l_log_module);
706 
707    END IF;
708 
709       -- 7193986 start
710 
711 
712       INSERT INTO xla_evt_class_orders_gt
713          (event_class_code
714          ,processing_order
715          )
716          SELECT xec.event_class_code
717               , NVL(t.max_level, -1)
718            FROM xla_event_classes_b xec
719               , (SELECT application_id, event_class_code, max(LEVEL) AS max_level
720                    FROM (SELECT application_id, event_class_code, prior_event_class_code
721                            FROM xla_event_class_predecs
722                           WHERE application_id = p_application_id
723                           UNION
724                          SELECT application_id, prior_event_class_code, NULL
725                            FROM xla_event_class_predecs
726                           WHERE application_id = p_application_id) xep
727                    CONNECT BY application_id         = PRIOR application_id
728                           AND prior_event_class_code = PRIOR event_class_code
729                     GROUP BY application_id, event_class_code) t
730           WHERE xec.event_class_code = t.event_class_code(+)
734 
731             AND xec.application_id   = t.application_id(+)
732             AND xec.application_id   = p_application_id
733             AND xec.event_class_code <> 'MANUAL';
735 
736        IF (C_LEVEL_STATEMENT >= g_log_level) THEN
737          trace
738             (p_msg      => 'Number of rows inserted into xla_evt_class_orders_gt = '||SQL%ROWCOUNT
739             ,p_level    => C_LEVEL_STATEMENT
740             ,p_module   => l_log_module);
741        END IF;
742 
743         -- 7193986 end
744 
745 
746 
747 
748 
749 
750 
751    UPDATE xla_acct_prog_events_gt xpa
752       SET (ledger_id) =
753           (SELECT ledger_id
754              FROM xla_events xe
755                 , xla_transaction_entities xte
756             WHERE xte.application_id = xe.application_id
757               AND xte.entity_id      = xe.entity_id
758               AND xe.application_id  = p_application_id
759               AND xe.event_id        = xpa.event_id);
760 
761    SELECT count(*) into l_count
762      FROM xla_acct_prog_events_gt
763     WHERE ledger_id IS NULL;
764 
765    OPEN c_invalid_events;
766    FETCH c_invalid_events INTO l_dummy;
767    CLOSE c_invalid_events;
768 
769    IF (l_dummy IS NOT NULL) THEN
770     --IF (p_accounting_mode in ('D', 'F')) THEN
771       IF (p_accounting_mode in ('DRAFT', 'FINAL')) THEN  -- 5109240a
772         IF (C_LEVEL_ERROR >= g_log_level) THEN
773           trace
774              (p_msg      => 'Error: XLA_AP_INV_EVENT_MODE_NON_BC'
775              ,p_level    => C_LEVEL_PROCEDURE
776              ,p_module   => l_log_module);
777         END IF;
778 
779         xla_exceptions_pkg.raise_message
780             (p_appli_s_name   => 'XLA'
781             ,p_msg_name       => 'XLA_AP_INV_EVENT_MODE_NON_BC'
782             ,p_token_1        => 'LOCATION'
783             ,p_value_1        => 'xla_accounting_pub_pkg.accounting_program_events'
784             ,p_token_2        => 'ERROR'
785             ,p_value_2        => 'Budgetary control events exists for non-budgetary control mode');
786       ELSE
787         IF (C_LEVEL_ERROR >= g_log_level) THEN
788           trace
789              (p_msg      => 'Error: XLA_AP_INV_EVENT_MODE_BC'
790              ,p_level    => C_LEVEL_PROCEDURE
791              ,p_module   => l_log_module);
792         END IF;
793 
794         xla_exceptions_pkg.raise_message
795             (p_appli_s_name   => 'XLA'
796             ,p_msg_name       => 'XLA_AP_INV_EVENT_MODE_BC'
797             ,p_token_1        => 'LOCATION'
798             ,p_value_1        => 'xla_accounting_pub_pkg.accounting_program_events'
799             ,p_token_2        => 'ERROR'
800             ,p_value_2        => 'Non-budgetary control events exists for budgetary control mode');
801       END IF;
802    END IF;
803 
804    xla_accounting_pkg.accounting_program_events
805            (p_application_id      => p_application_id
806            ,p_accounting_mode     => p_accounting_mode
807            ,p_gl_posting_flag     => p_gl_posting_flag
808            ,p_offline_flag        => 'N'
809            ,p_accounting_batch_id => p_accounting_batch_id
810            ,p_errbuf              => p_errbuf
811            ,p_retcode             => p_retcode);
812 
813    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
814       trace
815          (p_msg      => 'END of procedure accounting_program_events'
816          ,p_level    => C_LEVEL_PROCEDURE
817          ,p_module   => l_log_module);
818    END IF;
819 EXCEPTION
820 WHEN xla_exceptions_pkg.application_exception THEN
821    RAISE;
822 WHEN OTHERS THEN
823    xla_exceptions_pkg.raise_message
824       (p_location   => 'xla_accounting_pub_pkg.accounting_program_events');
825 END accounting_program_events; -- end of procedure
826 
827 
828 --=============================================================================
829 --
830 --
831 --
832 --    Function is_historic_upgrade_running
833 --
834 --
835 --
836 --=============================================================================
837 
838 FUNCTION is_historic_upgrade_running
839     (
840     p_ledger_id     IN  NUMBER
841     ) RETURN BOOLEAN
842   IS
843   l_count     NUMBER := 0;
844   l_log_module VARCHAR2(240);
845 
846   BEGIN
847    IF g_log_enabled THEN
848       l_log_module := C_DEFAULT_MODULE||'.is_historic_upgrade_running';
849    END IF;
850      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
851       trace
852          (p_msg      => 'Begin of is_historic_upgrade_running'
853          ,p_level    => C_LEVEL_STATEMENT
854          ,p_module   => l_log_module);
855      END IF;
856 
857   xla_environment_pkg.Refresh;
858 
859   -- Check if any historic upgrade has been submitted for the same ledger as the current one .
860 
861 
862     select count(*) into l_count from dual
863     where exists (select 1 from gl_ledger_relationships
864                   where  primary_ledger_id = p_ledger_id and hist_conv_status_code = 'RUNNING');
865 
866     IF (l_count =1) THEN
867        RETURN (TRUE);
868     ELSE
869        RETURN (FALSE);
870     END IF;
871      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
872       trace
873          (p_msg      => 'End of is_historic_upgrade_running'
874          ,p_level    => C_LEVEL_STATEMENT
875          ,p_module   => l_log_module);
876      END IF;
877 
878   END is_historic_upgrade_running;
879 
880 
881 --=============================================================================
882 --          *********** Initialization routine **********
883 --=============================================================================
884 
885 --=============================================================================
886 --
887 --
888 --
889 --
890 --
891 --
892 --
893 --
894 --
895 --
896 -- Following code is executed when the package body is referenced for the first
897 -- time
898 --
899 --
900 --
901 --
902 --
903 --
904 --
905 --
906 --
907 --
908 --
909 --
910 --=============================================================================
911 
912 BEGIN
913    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
914    g_log_enabled    := fnd_log.test
915                           (log_level  => g_log_level
916                           ,module     => C_DEFAULT_MODULE);
917 
918    g_log_level      := C_LEVEL_STATEMENT;
919    g_log_enabled    := TRUE;
920 
921    IF NOT g_log_enabled  THEN
922       g_log_level := C_LEVEL_LOG_DISABLED;
923    END IF;
924 
925 END xla_accounting_pub_pkg; -- end of package body