DBA Data[Home] [Help]

PACKAGE BODY: APPS.XLA_JOURNAL_ENTRIES_PKG

Source


1 PACKAGE BODY XLA_JOURNAL_ENTRIES_PKG AS
2 /* $Header: xlajejey.pkb 120.95.12010000.2 2008/08/06 21:14:51 sbhaskar ship $ */
3 
4 -------------------------------------------------------------------------------
5 -- declaring global types
6 -------------------------------------------------------------------------------
7 
8 TYPE t_je_info IS RECORD
9   (header_id                    INTEGER
10   ,ledger_id                    INTEGER
11   ,legal_entity_id		INTEGER
12   ,application_id               INTEGER
13   ,entity_id                    INTEGER
14   ,event_id                     INTEGER
15   ,gl_date                      DATE
16   ,status_code                  VARCHAR2(30)
17   ,type_code                    VARCHAR2(30)
18   ,description                  VARCHAR2(2400)
19   ,balance_type_code            VARCHAR2(30)
20   ,budget_version_id            INTEGER
21   ,reference_date               DATE
22   ,funds_status_code            VARCHAR2(30)
23   ,je_category_name             VARCHAR2(80)
24   ,packet_id                    INTEGER
25   ,amb_context_code		VARCHAR2(30)
26   ,event_type_code		VARCHAR2(30)
27   ,completed_date		DATE
28   ,gl_transfer_status_code	VARCHAR2(30)
29   ,accounting_batch_id		INTEGER
30   ,period_name			VARCHAR2(15)
31   ,product_rule_code		VARCHAR2(30)
32   ,product_rule_type_code	VARCHAR2(30)
33   ,product_rule_version		VARCHAR2(30)
34   ,gl_transfer_date		DATE
35   ,doc_sequence_id		INTEGER
36   ,doc_sequence_value		VARCHAR2(240)
37   ,close_acct_seq_version_id	INTEGER
38   ,close_acct_seq_value		VARCHAR2(240)
39   ,close_acct_seq_assign_id	INTEGER
40   ,completion_acct_seq_version_id INTEGER
41   ,completion_acct_seq_value	VARCHAR2(240)
42   ,completion_acct_seq_assign_id INTEGER
43   ,accrual_reversal_flag        VARCHAR2(1)   -- 4262811
44   ,budgetary_control_flag       VARCHAR2(1)
45   ,attribute_category		VARCHAR2(30)
46   ,attribute1			VARCHAR2(150)
47   ,attribute2			VARCHAR2(150)
48   ,attribute3			VARCHAR2(150)
49   ,attribute4			VARCHAR2(150)
50   ,attribute5			VARCHAR2(150)
51   ,attribute6			VARCHAR2(150)
52   ,attribute7			VARCHAR2(150)
53   ,attribute8			VARCHAR2(150)
54   ,attribute9			VARCHAR2(150)
55   ,attribute10			VARCHAR2(150)
56   ,attribute11			VARCHAR2(150)
57   ,attribute12			VARCHAR2(150)
58   ,attribute13			VARCHAR2(150)
59   ,attribute14			VARCHAR2(150)
60   ,attribute15			VARCHAR2(150));
61 
62 TYPE t_array_number IS TABLE of NUMBER				INDEX BY BINARY_INTEGER;
63 TYPE t_array_date IS TABLE of DATE 				INDEX BY BINARY_INTEGER;
64 TYPE t_array_varchar IS TABLE of VARCHAR2(30)			INDEX BY BINARY_INTEGER;
65 
66 TYPE t_array_int IS TABLE of INTEGER				INDEX BY BINARY_INTEGER;
67 
68 -------------------------------------------------------------------------------
69 --
70 --
71 --
72 --
73 --
74 --
75 -- forward declarion of private procedures and functions
76 --
77 --
78 --
79 --
80 --
81 --
82 -------------------------------------------------------------------------------
83 FUNCTION get_header_info
84   (p_ae_header_id       IN  INTEGER
85   ,p_application_id	IN  INTEGER
86   ,p_msg_mode		IN  VARCHAR2)
87 RETURN t_je_info;
88 
89 FUNCTION round_currency
90   (p_amount         IN NUMBER
91   ,p_currency_code  IN VARCHAR2
92   ,p_rounding_rule_code IN VARCHAR2)
93 RETURN NUMBER;
94 
95 PROCEDURE validate_line_number
96   (p_header_id     	IN  INTEGER
97   ,p_line_num		IN  INTEGER
98   ,p_application_id	IN  INTEGER
99   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
100 
101 PROCEDURE validate_display_line_number
102   (p_header_id     	IN  INTEGER
103   ,p_line_num		IN  INTEGER
104   ,p_display_line_num	IN  INTEGER
105   ,p_application_id	IN  INTEGER
106   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
107 
108 PROCEDURE validate_ae_type_code
109   (p_accounting_entry_type_code IN  VARCHAR2
110   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
111 
112 PROCEDURE validate_ae_status_code
113    (p_status_code       IN  VARCHAR2
114    ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
115 
116 /*
117 FUNCTION unreserve_funds
118    (p_ae_header_id      IN  INTEGER
119    ,p_application_id    IN  INTEGER
120    ,p_ledger_id         IN  INTEGER
121    ,p_packet_id         IN  INTEGER
122    ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
123 RETURN BOOLEAN;
124 */
125 
126 FUNCTION validate_completion_action
127    (p_entity_id		IN  INTEGER
128    ,p_event_id		IN  INTEGER
129    ,p_ledger_id		IN  INTEGER
130    ,p_ae_header_id	IN  INTEGER
131    ,p_completion_option IN  VARCHAR2)
132 RETURN INTEGER;
133 
134 FUNCTION validate_reversal_method
135    (p_entity_id		IN  INTEGER
136    ,p_event_id		IN  INTEGER
137    ,p_ledger_id		IN  INTEGER
138    ,p_ae_header_id	IN  INTEGER
139    ,p_reversal_method	IN  VARCHAR2)
140 RETURN INTEGER;
141 
142 FUNCTION is_budgetary_control_enabled
143    (p_ledger_id		IN  INTEGER
144    ,p_msg_mode		IN  VARCHAR2)
145 RETURN BOOLEAN;
146 
147 PROCEDURE create_reversal_entry
148   (p_info	        IN  t_je_info
149   ,p_reversal_method	IN  VARCHAR2
150   ,p_gl_date		IN  DATE
151   ,p_msg_mode           IN  VARCHAR2
152   ,p_rev_header_id	OUT NOCOPY INTEGER
153   ,p_rev_event_id	OUT NOCOPY INTEGER);
154 
155 FUNCTION reserve_funds
156   (p_info	         IN OUT NOCOPY t_je_info
157   ,p_msg_mode            IN            VARCHAR2)
158 RETURN VARCHAR2;
159 
160 FUNCTION populate_sequence_numbers
161  (p_info                 IN            t_je_info
162  ,p_je_source_name       IN            VARCHAR2
163  ,p_completed_date       IN            DATE
164  ,p_ledger_ids           IN            xla_je_validation_pkg.t_array_int
165  ,p_ae_header_ids        IN            xla_je_validation_pkg.t_array_int
166  ,p_status_codes         IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar
167  ,p_seq_version_ids      IN OUT NOCOPY t_array_int
168  ,p_seq_values           IN OUT NOCOPY t_array_int
169  ,p_seq_assign_ids       IN OUT NOCOPY t_array_int)
170 RETURN VARCHAR2;
171 
172 
173 PROCEDURE complete_journal_entry
174   (p_ae_header_id               IN  INTEGER
175   ,p_application_id             IN  INTEGER
176   ,p_completion_option          IN  VARCHAR2
177   ,p_functional_curr            IN  VARCHAR2
178   ,p_je_source_name             IN  VARCHAR2
179   ,p_ae_status_code             OUT NOCOPY VARCHAR2
180   ,p_funds_status_code          OUT NOCOPY VARCHAR2
181   ,p_completion_seq_value       OUT NOCOPY VARCHAR2
182   ,p_completion_seq_ver_id      OUT NOCOPY INTEGER
183   ,p_completed_date             OUT NOCOPY DATE
184   ,p_gl_transfer_status_code    OUT NOCOPY VARCHAR2
185   ,p_last_update_date           OUT NOCOPY DATE
186   ,p_last_updated_by            OUT NOCOPY INTEGER
187   ,p_last_update_login          OUT NOCOPY INTEGER
188   ,p_transfer_request_id        OUT NOCOPY INTEGER
189   ,p_retcode                    OUT NOCOPY VARCHAR2
190   ,p_msg_mode                   IN  VARCHAR2    DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE
191   ,p_rev_flag                   IN  VARCHAR2 DEFAULT 'N'
192   ,p_rev_method                 IN  VARCHAR2 DEFAULT 'N'
193   ,p_rev_orig_event_id          IN  NUMBER DEFAULT -1);
194 
195 PROCEDURE create_mrc_reversal_entry
196   (p_info               IN  t_je_info
197   ,p_reversal_method    IN  VARCHAR2
198   ,p_orig_event_id      IN  NUMBER
199   ,p_ledger_ids         IN OUT NOCOPY xla_je_validation_pkg.t_array_int
200   ,p_rev_ae_header_ids  IN OUT NOCOPY xla_je_validation_pkg.t_array_int
201   ,p_rev_status_codes   IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar);
202 
203 
204 FUNCTION create_mrc_entries
205   (p_info		IN OUT NOCOPY t_je_info
206   ,p_je_source_name	IN            VARCHAR2
207   ,p_ledger_ids         IN OUT NOCOPY xla_je_validation_pkg.t_array_int
208   ,p_ae_header_ids      IN OUT NOCOPY xla_je_validation_pkg.t_array_int
209   ,p_status_codes       IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar)
210 RETURN VARCHAR2;
211 
212 PROCEDURE delete_mrc_entries
213   (p_event_id		IN  INTEGER
214   ,p_application_id	IN  INTEGER
215   ,p_ledger_id		IN  INTEGER);
216 
217 PROCEDURE update_event_status
218  (p_info                IN t_je_info
219  ,p_completion_option   IN VARCHAR2);
220 
221 PROCEDURE transfer_to_gl
222  (p_info                IN t_je_info
223  ,p_application_id      IN INTEGER
224  ,p_completion_option   IN VARCHAR2
225  ,p_transfer_request_id IN OUT NOCOPY INTEGER);
226 
227 PROCEDURE update_segment_values
228   (p_ae_header_id	IN  INTEGER
229   ,p_seg_type		IN  VARCHAR2
230   ,p_seg_value		IN  VARCHAR2
231   ,p_action		IN  VARCHAR2);
232 
233 PROCEDURE validate_delete_mode
234   (p_status_code	IN  VARCHAR2
235   ,p_mode 		IN  VARCHAR2
236   ,p_msg_mode		IN  VARCHAR2);
237 
238 PROCEDURE validate_balance_type_code
239   (p_balance_type_code	IN  VARCHAR2
240   ,p_msg_mode		IN  VARCHAR2 DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
241 
242 FUNCTION validate_description
243   (p_entity_id		IN  INTEGER
244   ,p_event_id		IN  INTEGER
245   ,p_ledger_id		IN  INTEGER
246   ,p_ae_header_id	IN  INTEGER
247   ,p_description  	IN  VARCHAR2)
248 RETURN INTEGER;
249 
250 FUNCTION validate_legal_entity_id
251   (p_entity_id		IN  INTEGER
252   ,p_event_id		IN  INTEGER
253   ,p_ledger_id		IN  INTEGER
254   ,p_ae_header_id	IN  INTEGER
255   ,p_legal_entity_id  	IN  INTEGER)
256 RETURN INTEGER;
257 
258 PROCEDURE get_ledger_info
259   (p_ledger_id			IN  INTEGER
260   ,p_application_id      	IN  INTEGER
261   ,p_code_combination_id	IN  INTEGER
262   ,p_funct_curr			OUT NOCOPY VARCHAR2
263   ,p_rounding_rule_code		OUT NOCOPY VARCHAR2
264   ,p_bal_seg_val		OUT NOCOPY VARCHAR2
265   ,p_mgt_seg_val		OUT NOCOPY VARCHAR2);
266 
267 PROCEDURE get_ledger_options
268   (p_application_id            IN INTEGER
269   ,p_ledger_id                 IN INTEGER
270   ,p_transfer_to_gl_mode_code  OUT NOCOPY VARCHAR2);
271 
272 FUNCTION clear_errors
273    (p_event_id		IN  INTEGER
274    ,p_ae_header_id	IN  INTEGER
275    ,p_ae_line_num	IN  INTEGER)
276 RETURN BOOLEAN;
277 
278 PROCEDURE validate_je_category
279   (p_je_category_name	IN  VARCHAR2
280   ,p_msg_mode		IN  VARCHAR2);
281 
282 PROCEDURE validate_application_id
283   (p_application_id     IN  INTEGER);
284 
285 PROCEDURE validate_code_combination_id
286    (p_line_num              IN  INTEGER
287    ,p_code_combination_id   IN  INTEGER
288    ,p_msg_mode		    IN  VARCHAR2 DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE);
289 
290 FUNCTION validate_lines
291    (p_entity_id		IN  INTEGER
292    ,p_event_id		IN  INTEGER
293    ,p_ledger_id		IN  INTEGER
294    ,p_application_id	IN  INTEGER
295    ,p_ae_header_id	IN  INTEGER)
296 RETURN INTEGER;
297 
298 PROCEDURE validate_ledger
299   (p_ledger_id              IN  INTEGER
300   ,p_balance_type_code      IN  VARCHAR2
301   ,p_budgetary_control_flag IN  VARCHAR2);
302 
303 FUNCTION validate_line_counts
304   (p_entity_id		IN  INTEGER
305   ,p_event_id		IN  INTEGER
306   ,p_ledger_id		IN  INTEGER
307   ,p_ae_header_id	IN  INTEGER
308   ,p_application_id  	IN  INTEGER
309   ,p_balance_type_code  IN  VARCHAR2)
310 RETURN INTEGER;
311 
312 PROCEDURE calculate_amounts
313   (p_entered_dr           IN OUT NOCOPY NUMBER
314   ,p_entered_cr           IN OUT NOCOPY NUMBER
315   ,p_currency_code        IN OUT NOCOPY VARCHAR2
316   ,p_functional_curr      IN VARCHAR2
317   ,p_rounding_rule_code	  IN VARCHAR2
318   ,p_accounted_dr         IN OUT NOCOPY NUMBER
319   ,p_accounted_cr         IN OUT NOCOPY NUMBER
320   ,p_unrounded_entered_dr IN OUT NOCOPY NUMBER
321   ,p_unrounded_entered_cr IN OUT NOCOPY NUMBER
322   ,p_unrounded_accted_dr  IN OUT NOCOPY NUMBER
323   ,p_unrounded_accted_cr  IN OUT NOCOPY NUMBER
324   ,p_conv_type            IN OUT NOCOPY VARCHAR2
325   ,p_conv_date            IN OUT NOCOPY DATE
326   ,p_conv_rate            IN OUT NOCOPY NUMBER);
327 
328 FUNCTION validate_amounts
329   (p_entity_id          IN  INTEGER
330   ,p_event_id           IN  INTEGER
331   ,p_ledger_id          IN  INTEGER
332   ,p_ae_header_id       IN  INTEGER
333   ,p_application_id	IN  INTEGER
334   ,p_functional_curr	IN  VARCHAR2)
335 RETURN INTEGER;
336 
337 PROCEDURE reorder_line_number
338   (p_application_id	IN  INTEGER
339   ,p_ae_header_id	IN  INTEGER);
340 
341 PROCEDURE undo_draft_entry
342   (p_info	        IN  t_je_info);
343 
344 FUNCTION get_period_name
345   (p_ledger_id          IN  INTEGER
346   ,p_accounting_date    IN  DATE
347   ,p_closing_status     OUT NOCOPY VARCHAR2
348   ,p_period_type        OUT NOCOPY VARCHAR2)
349 RETURN VARCHAR2;
350 
351 PROCEDURE create_distribution_link
352   (p_application_id             IN  INTEGER
353   ,p_ae_header_id               IN  INTEGER
354   ,p_ae_line_num                IN  INTEGER
355   ,p_temp_line_num              IN  INTEGER
356   ,p_ref_ae_header_id           IN  INTEGER
357   ,p_ref_event_id               IN  INTEGER
358   ,p_ref_temp_line_num          IN  INTEGER);
359 
360 PROCEDURE delete_distribution_link
361   (p_application_id		IN  INTEGER
362   ,p_ae_header_id       IN  INTEGER
363   ,p_ref_ae_header_id   IN  INTEGER
364   ,p_temp_line_num      IN  INTEGER);
365 
366 PROCEDURE update_distribution_link
367   (p_application_id             IN  INTEGER
368   ,p_ae_header_id               IN  INTEGER
369   ,p_ref_ae_header_id           IN  INTEGER
370   ,p_temp_line_num             	IN  INTEGER
371   ,p_unrounded_entered_dr       IN  NUMBER
372   ,p_unrounded_entered_cr       IN  NUMBER
373   ,p_unrounded_accounted_dr     IN  NUMBER
374   ,p_undournde_accounted_cr     IN  NUMBER
375   ,p_statistical_amount         IN  NUMBER);
376 
377 PROCEDURE create_reversal_distr_link
378   (p_application_id             IN  INTEGER
379   ,p_ae_header_id               IN  INTEGER
380   ,p_ref_ae_header_id           IN  INTEGER
381   ,p_ref_event_id               IN  INTEGER);
382 
383 PROCEDURE get_rev_line_info
384   (p_application_id             IN            INTEGER
385   ,p_ae_header_id               IN            INTEGER
386   ,p_temp_line_num              IN OUT NOCOPY INTEGER
387   ,p_ref_ae_header_id           OUT    NOCOPY INTEGER
388   ,p_ref_event_id               OUT    NOCOPY INTEGER);
389 
390 PROCEDURE get_mrc_rev_line_info
391   (p_application_id             IN            INTEGER
392   ,p_ae_header_id               IN            INTEGER
393   ,p_temp_line_num              IN OUT NOCOPY INTEGER
394   ,p_ref_ae_header_id           OUT    NOCOPY INTEGER
395   ,p_ref_temp_line_num          OUT    NOCOPY INTEGER
396   ,p_ref_event_id               OUT    NOCOPY INTEGER);
397 
398 FUNCTION is_reversal
399   (p_application_id             IN            INTEGER
400   ,p_ae_header_id               IN            INTEGER
401   ,p_temp_line_num              IN            INTEGER)
402 RETURN BOOLEAN;
403 
404 -------------------------------------------------------------------------------
405 -- declaring global constants
406 -------------------------------------------------------------------------------
407 C_AE_STATUS_INCOMPLETE          CONSTANT VARCHAR2(30) := 'N';
408 C_AE_STATUS_INVALID             CONSTANT VARCHAR2(30) := 'I';
409 C_AE_STATUS_RELATED             CONSTANT VARCHAR2(30) := 'R';
410 C_AE_STATUS_DRAFT               CONSTANT VARCHAR2(30) := 'D';
411 C_AE_STATUS_FINAL               CONSTANT VARCHAR2(30) := 'F';
412 
413 C_EVENT_TYPE_CODE_MANUAL	CONSTANT VARCHAR2(30) := 'MANUAL';
414 C_EVENT_CLASS_CODE_MANUAL	CONSTANT VARCHAR2(30) := 'MANUAL';
415 C_ENTITY_TYPE_CODE_MANUAL	CONSTANT VARCHAR2(30) := 'MANUAL';
416 
417 C_TYPE_MANUAL                   CONSTANT VARCHAR2(30)   := 'MANUAL';
418 C_TYPE_UPGRADE                  CONSTANT VARCHAR2(30)   := 'UPGRADE';
419 C_TYPE_MERGE                    CONSTANT VARCHAR2(30)   := 'MERGE';
420 
421 C_GL_TRANSFER_MODE_NO		CONSTANT VARCHAR2(30) := 'N';
422 C_GL_TRANSFER_MODE_YES		CONSTANT VARCHAR2(30) := 'Y';
423 C_GL_TRANSFER_MODE_SELECTED	CONSTANT VARCHAR2(30) := 'S';
424 C_GL_APPLICATION_ID		CONSTANT INTEGER := 101;
425 C_XLA_APPLICATION_ID		CONSTANT INTEGER := 602;
426 
427 C_ACTION_ADD			CONSTANT VARCHAR2(1) := 'A';
428 C_ACTION_DEL			CONSTANT VARCHAR2(1) := 'D';
429 
430 C_JE_ACTUAL			CONSTANT VARCHAR2(30) := 'A';
431 C_JE_BUDGET			CONSTANT VARCHAR2(30) := 'B';
432 C_JE_ENCUMBRANCE		CONSTANT VARCHAR2(30) := 'E';
433 
434 C_SEG_BALANCING			CONSTANT VARCHAR2(1) := 'B';
435 C_SEG_MANAGEMENT		CONSTANT VARCHAR2(1) := 'M';
436 
437 C_GL_TRANSFER_SUMMARY		CONSTANT VARCHAR2(1) := 'S';
438 C_GL_TRANSFER_DETAIL		CONSTANT VARCHAR2(1) := 'D';
439 
440 C_FUNDS_SUCCESS			CONSTANT VARCHAR2(1) := 'S';
441 C_FUNDS_ADVISORY		CONSTANT VARCHAR2(1) := 'A';
442 C_FUNDS_PARTIAL			CONSTANT VARCHAR2(1) := 'P';
443 C_FUNDS_FAILED			CONSTANT VARCHAR2(1) := 'F';
444 
445 C_BALANCE_DELETE		CONSTANT VARCHAR2(1) := 'D';
446 C_BALANCE_ADD			CONSTANT VARCHAR2(1) := 'A';
447 C_BALANCE_D_TO_F		CONSTANT VARCHAR2(1) := 'F';
448 
449 C_BALANCE_ONLINE		CONSTANT VARCHAR2(1) := 'O';
450 
451 C_COMPLETION_OPTION_SAVE        CONSTANT VARCHAR2(1)    := 'S';
452 C_COMPLETION_OPTION_DRAFT       CONSTANT VARCHAR2(1)    := 'D';
453 C_COMPLETION_OPTION_FINAL       CONSTANT VARCHAR2(1)    := 'F';
454 C_COMPLETION_OPTION_TRANSFER    CONSTANT VARCHAR2(1)    := 'T';
455 C_COMPLETION_OPTION_POST        CONSTANT VARCHAR2(1)    := 'P';
456 
457 C_REVERSAL_CHANGE_SIGN          CONSTANT VARCHAR2(30)    := 'SIGN';
458 C_REVERSAL_SWITCH_DR_CR         CONSTANT VARCHAR2(30)    := 'SIDE';
459 
460 C_DELETE_FORCE_MODE             CONSTANT VARCHAR2(1)    := 'F';
461 
462 C_NUM                           CONSTANT NUMBER      := 9.99E125;
463 C_CHAR                          CONSTANT VARCHAR2(1) := fnd_global.local_chr(12);
464 C_DATE                          CONSTANT DATE        := TO_DATE('1','j');
465 
466 -- 5109240
467 C_ITEM_HEADER_DESCRIPTION       CONSTANT VARCHAR2(20) := 'HEADER_DESCRIPTION';
468 C_ITEM_GL_DATE                  CONSTANT VARCHAR2(20) := 'GL_DATE';
469 C_ITEM_REFERENCE_DATE           CONSTANT VARCHAR2(20) := 'REFERENCE_DATE';
470 C_ITEM_LINE_DESCRIPTION         CONSTANT VARCHAR2(20) := 'LINE_DESCRIPTION';
471 C_ITEM_ACCOUNT                  CONSTANT VARCHAR2(20) := 'ACCOUNT';
472 C_ITEM_ACCOUNTED_DR             CONSTANT VARCHAR2(20) := 'ACCOUNTED_DR';
473 C_ITEM_ACCOUNTED_CR             CONSTANT VARCHAR2(20) := 'ACCOUNTED_CR';
474 C_ITEM_CURRENCY_CODE            CONSTANT VARCHAR2(20) := 'CURRENCY_CODE';
475 C_ITEM_CURR_CONV_TYPE           CONSTANT VARCHAR2(20) := 'CURR_CONV_TYPE';
476 C_ITEM_CURR_CONV_RATE           CONSTANT VARCHAR2(20) := 'CURR_CONV_RATE';
477 C_ITEM_CURR_CONV_DATE           CONSTANT VARCHAR2(20) := 'CURR_CONV_DATE';
478 C_ITEM_ENTERED_DR               CONSTANT VARCHAR2(20) := 'ENTERED_DR';
479 C_ITEM_ENTERED_CR               CONSTANT VARCHAR2(20) := 'ENTERED_CR';
480 C_ITEM_ACCOUNTING_CLASS         CONSTANT VARCHAR2(20) := 'ACCOUNTING_CLASS';
481 
482 --=============================================================================
483 --               *********** Local Trace Routine **********
484 --=============================================================================
485 C_LEVEL_STATEMENT     CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
486 C_LEVEL_PROCEDURE     CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
487 C_LEVEL_EVENT         CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
488 C_LEVEL_EXCEPTION     CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
489 C_LEVEL_ERROR         CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
490 C_LEVEL_UNEXPECTED    CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
491 
492 C_LEVEL_LOG_DISABLED  CONSTANT NUMBER := 99;
493 C_DEFAULT_MODULE      CONSTANT VARCHAR2(240) := 'xla.plsql.xla_journal_entries_pkg';
494 
495 g_log_level           NUMBER;
496 g_log_enabled         BOOLEAN;
497 
498 PROCEDURE trace
499   (p_msg                        IN VARCHAR2
500   ,p_module                     IN VARCHAR2
501   ,p_level                      IN NUMBER) IS
502 BEGIN
503   ----------------------------------------------------------------------------
504   -- Following is for FND log.
505   ----------------------------------------------------------------------------
506   IF (p_msg IS NULL AND p_level >= g_log_level) THEN
507     fnd_log.message(p_level, p_module);
508   ELSIF p_level >= g_log_level THEN
509     fnd_log.string(p_level, p_module, p_msg);
510   END IF;
511 
512 EXCEPTION
513   WHEN xla_exceptions_pkg.application_exception THEN
514     RAISE;
515 
516   WHEN OTHERS THEN
517     xla_exceptions_pkg.raise_message
518       (p_location   => 'xla_journal_entries_pkg.trace');
519 END trace;
520 
521 --=============================================================================
522 --
523 --
524 --
525 --
526 --
527 --
528 --          *********** public procedures and functions **********
529 --
530 --
531 --
532 --
533 --
534 --
535 --=============================================================================
536 
537 
538 --=============================================================================
539 --
540 -- Following are the routines on which created for public manual journal
541 -- entries APIs.
542 --
543 --    1.    create_journal_entry_header
544 --    2.    create_journal_entry_line
545 --    3.    update_journal_entry_header
546 --    4.    update_journal_entry_line
547 --    5.    delete_journal_entry
548 --    6.    delete_journal_entry_line
549 --    7.    complete_journal_entry
550 --    8.    reverse_journal_entry
551 --
552 --
553 --=============================================================================
554 
555 
556 --=============================================================================
557 --
558 -- Name: create_journal_entry_header
559 -- Description: Create a journal entry header.
560 --              This API is called by MJE page, and the ledger determines if
561 --              budgetary control events is created for this JE.
562 --
563 --=============================================================================
564 PROCEDURE create_journal_entry_header
565   (p_application_id             IN  INTEGER
566   ,p_ledger_id                  IN  INTEGER
567   ,p_legal_entity_id            IN  INTEGER     DEFAULT NULL
568   ,p_gl_date                    IN  DATE
569   ,p_accounting_entry_type_code IN  VARCHAR2
570   ,p_description                IN  VARCHAR2
571   ,p_je_category_name           IN  VARCHAR2
572   ,p_balance_type_code          IN  VARCHAR2
573   ,p_budget_version_id          IN  INTEGER     DEFAULT NULL
574   ,p_reference_date             IN  DATE        DEFAULT NULL
575   ,p_attribute_category         IN  VARCHAR2    DEFAULT NULL
576   ,p_attribute1                 IN  VARCHAR2    DEFAULT NULL
577   ,p_attribute2                 IN  VARCHAR2    DEFAULT NULL
578   ,p_attribute3                 IN  VARCHAR2    DEFAULT NULL
579   ,p_attribute4                 IN  VARCHAR2    DEFAULT NULL
580   ,p_attribute5                 IN  VARCHAR2    DEFAULT NULL
581   ,p_attribute6                 IN  VARCHAR2    DEFAULT NULL
582   ,p_attribute7                 IN  VARCHAR2    DEFAULT NULL
583   ,p_attribute8                 IN  VARCHAR2    DEFAULT NULL
584   ,p_attribute9                 IN  VARCHAR2    DEFAULT NULL
585   ,p_attribute10                IN  VARCHAR2    DEFAULT NULL
586   ,p_attribute11                IN  VARCHAR2    DEFAULT NULL
587   ,p_attribute12                IN  VARCHAR2    DEFAULT NULL
588   ,p_attribute13                IN  VARCHAR2    DEFAULT NULL
589   ,p_attribute14                IN  VARCHAR2    DEFAULT NULL
590   ,p_attribute15                IN  VARCHAR2    DEFAULT NULL
591   ,p_ae_header_id               OUT NOCOPY INTEGER
592   ,p_event_id                   OUT NOCOPY INTEGER
593   ,p_period_name                OUT NOCOPY VARCHAR2
594   ,p_creation_date              OUT NOCOPY DATE
595   ,p_created_by                 OUT NOCOPY INTEGER
596   ,p_last_update_date           OUT NOCOPY DATE
597   ,p_last_updated_by            OUT NOCOPY INTEGER
598   ,p_last_update_login          OUT NOCOPY INTEGER
599   ,p_retcode                    OUT NOCOPY INTEGER
600   ,p_msg_mode                   IN  VARCHAR2    DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
601 IS
602   CURSOR c IS
603     SELECT enable_budgetary_control_flag
604       FROM gl_ledgers
605      WHERE ledger_id = p_ledger_id;
606 
607   l_bc_flag             VARCHAR2(1);
608   l_log_module          VARCHAR2(240);
609 BEGIN
610   IF g_log_enabled THEN
611     l_log_module := C_DEFAULT_MODULE||'.create_journal_entry_header';
612   END IF;
613 
614   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
615     trace(p_msg    => 'BEGIN of procedure create_journal_entry_header',
616           p_module => l_log_module,
617           p_level  => C_LEVEL_PROCEDURE);
618   END IF;
619 
620   OPEN c;
621   FETCH c INTO l_bc_flag;
622   CLOSE c;
623 
624   create_journal_entry_header
625             (p_application_id             => p_application_id
626             ,p_ledger_id                  => p_ledger_id
627             ,p_legal_entity_id            => p_legal_entity_id
628             ,p_gl_date                    => p_gl_date
629             ,p_accounting_entry_type_code => p_accounting_entry_type_code
630             ,p_description                => p_description
631             ,p_je_category_name           => p_je_category_name
632             ,p_balance_type_code          => p_balance_type_code
633             ,p_budget_version_id          => p_budget_version_id
634             ,p_reference_date             => p_reference_date
635             ,p_attribute_category         => p_attribute_category
636             ,p_attribute1                 => p_attribute1
637             ,p_attribute2                 => p_attribute2
638             ,p_attribute3                 => p_attribute3
639             ,p_attribute4                 => p_attribute4
640             ,p_attribute5                 => p_attribute5
641             ,p_attribute6                 => p_attribute6
642             ,p_attribute7                 => p_attribute7
643             ,p_attribute8                 => p_attribute8
644             ,p_attribute9                 => p_attribute9
645             ,p_attribute10                => p_attribute10
646             ,p_attribute11                => p_attribute11
647             ,p_attribute12                => p_attribute12
648             ,p_attribute13                => p_attribute13
649             ,p_attribute14                => p_attribute14
650             ,p_attribute15                => p_attribute15
651             ,p_budgetary_control_flag     => l_bc_flag
652             ,p_ae_header_id               => p_ae_header_id
653             ,p_event_id                   => p_event_id
654             ,p_period_name                => p_period_name
655             ,p_creation_date              => p_creation_date
656             ,p_created_by                 => p_created_by
657             ,p_last_update_date           => p_last_update_date
658             ,p_last_updated_by            => p_last_updated_by
659             ,p_last_update_login          => p_last_update_login
660             ,p_retcode                    => p_retcode
661             ,p_msg_mode                   => p_msg_mode);
662 
663   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
664     trace(p_msg    => 'END of procedure create_journal_entry_header',
665           p_module => l_log_module,
666           p_level  => C_LEVEL_PROCEDURE);
667   END IF;
668 
669 EXCEPTION
670 WHEN xla_exceptions_pkg.application_exception THEN
671   ROLLBACK;
672   RAISE;
673 
674 WHEN OTHERS                                   THEN
675   ROLLBACK;
676   xla_exceptions_pkg.raise_message
677       (p_location => 'xla_journal_entries_pkg.create_journal_entry_header');
678 
679 END create_journal_entry_header;
680 
681 --=============================================================================
682 --
683 -- Name: create_journal_entry_header
684 -- Description: Create a journal entry header.
685 --              This API is called by the datafix public package, the caller
686 --              determines if the journal entry should be created as BC event.
687 --
688 --=============================================================================
689 PROCEDURE create_journal_entry_header
690   (p_application_id             IN  INTEGER
691   ,p_ledger_id                  IN  INTEGER
692   ,p_legal_entity_id            IN  INTEGER
693   ,p_gl_date                    IN  DATE
694   ,p_accounting_entry_type_code	IN  VARCHAR2
695   ,p_description                IN  VARCHAR2
696   ,p_je_category_name           IN  VARCHAR2
697   ,p_balance_type_code          IN  VARCHAR2
698   ,p_budget_version_id          IN  INTEGER
699   ,p_reference_date             IN  DATE
700   ,p_attribute_category		IN  VARCHAR2
701   ,p_attribute1			IN  VARCHAR2
702   ,p_attribute2			IN  VARCHAR2
703   ,p_attribute3			IN  VARCHAR2
704   ,p_attribute4			IN  VARCHAR2
705   ,p_attribute5			IN  VARCHAR2
706   ,p_attribute6			IN  VARCHAR2
707   ,p_attribute7			IN  VARCHAR2
708   ,p_attribute8			IN  VARCHAR2
709   ,p_attribute9			IN  VARCHAR2
710   ,p_attribute10		IN  VARCHAR2
711   ,p_attribute11		IN  VARCHAR2
712   ,p_attribute12		IN  VARCHAR2
713   ,p_attribute13		IN  VARCHAR2
714   ,p_attribute14		IN  VARCHAR2
715   ,p_attribute15		IN  VARCHAR2
716   ,p_budgetary_control_flag     IN  VARCHAR2
717   ,p_ae_header_id		OUT NOCOPY INTEGER
718   ,p_event_id			OUT NOCOPY INTEGER
719   ,p_period_name		OUT NOCOPY VARCHAR2
720   ,p_creation_date              OUT NOCOPY DATE
721   ,p_created_by                 OUT NOCOPY INTEGER
722   ,p_last_update_date           OUT NOCOPY DATE
723   ,p_last_updated_by            OUT NOCOPY INTEGER
724   ,p_last_update_login          OUT NOCOPY INTEGER
725   ,p_retcode			OUT NOCOPY INTEGER
726   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
727 IS
728 
729   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
730   l_entity_id		INTEGER;
731   l_closing_status	VARCHAR2(30);
732   l_status_code		VARCHAR2(30) := C_AE_STATUS_INCOMPLETE;
733   l_result2		INTEGER := 0;
734   l_period_type		VARCHAR2(30);
735 
736   l_budget_version_id	INTEGER;
737 
738   l_log_module          VARCHAR2(240);
739 BEGIN
740   IF g_log_enabled THEN
741     l_log_module := C_DEFAULT_MODULE||'.create_journal_entry_header';
742   END IF;
743 
744   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
745     trace(p_msg    => 'BEGIN of procedure create_journal_entry_header',
746           p_module => l_log_module,
747           p_level  => C_LEVEL_PROCEDURE);
748   END IF;
749 
750   fnd_msg_pub.initialize;
751   p_retcode := 0;
752 
753   --
754   -- Validation where exception will be throw
755   --
756   validate_application_id(p_application_id);
757   validate_ledger(p_ledger_id, p_balance_type_code, p_budgetary_control_flag);
758   validate_je_category(p_je_category_name, p_msg_mode);
759   validate_balance_type_code(p_balance_type_code, p_msg_mode);
760   validate_ae_type_code(p_accounting_entry_type_code, p_msg_mode);
761 
762   -- Done validation
763 
764   IF (p_balance_type_code = C_JE_ACTUAL) THEN
765     l_budget_version_id := NULL;
766   ELSIF (p_balance_type_code = C_JE_BUDGET) THEN
767     l_budget_version_id := p_budget_version_id;
768   ELSE
769     l_budget_version_id := NULL;
770   END IF;
771 
772   --
773   -- Create entity and event for the journal entry
774   --
775   l_event_source_info.application_id := p_application_id;
776   l_event_source_info.legal_entity_id := p_legal_entity_id;
777   l_event_source_info.ledger_id := p_ledger_id;
778   l_event_source_info.entity_type_code := C_ENTITY_TYPE_CODE_MANUAL;
779 
780   p_event_id := xla_events_pkg.create_manual_event
781    (p_event_source_info 	  => l_event_source_info
782    ,p_event_type_code             => C_EVENT_TYPE_CODE_MANUAL
783    ,p_event_date                  => p_gl_date
784    ,p_event_status_code           => xla_events_pub_pkg.C_EVENT_UNPROCESSED
785    ,p_process_status_code	  => xla_events_pkg.C_INTERNAL_UNPROCESSED
786    ,p_event_number                => 1
787    ,p_budgetary_control_flag      => p_budgetary_control_flag
788    );
789 
790   SELECT 	entity_id
791   INTO		l_entity_id
792   FROM		xla_events
793   WHERE		event_id = p_event_id;
794 
795   --
796   -- Retrieve period name
797   --
798   p_period_name := get_period_name
799 	(p_ledger_id		=> p_ledger_id
800 	,p_accounting_date	=> p_gl_date
801 	,p_closing_status	=> l_closing_status
802 	,p_period_type		=> l_period_type);
803 
804   IF (p_period_name IS NULL) THEN
805     xla_exceptions_pkg.raise_message
806 	 (p_appli_s_name	=> 'XLA'
807 	 ,p_msg_name		=> 'XLA_AP_INVALID_GL_DATE'
808 	 ,p_msg_mode		=> p_msg_mode);
809   END IF;
810 
811   --
812   -- Create entry in the xla_ae_headers table
813   --
814   INSERT INTO xla_ae_headers
815      (ae_header_id
816      ,application_id
817      ,ledger_id
818      ,entity_id
819      ,event_id
820      ,event_type_code
821      ,accounting_date
822      ,reference_date
823      ,balance_type_code
824      ,budget_version_id
825      ,gl_transfer_status_code
826      ,je_category_name
827      ,accounting_entry_status_code
828      ,accounting_entry_type_code
829      ,description
830      ,period_name
831      ,attribute_category
832      ,attribute1
833      ,attribute2
834      ,attribute3
835      ,attribute4
836      ,attribute5
837      ,attribute6
838      ,attribute7
839      ,attribute8
840      ,attribute9
841      ,attribute10
842      ,attribute11
843      ,attribute12
844      ,attribute13
845      ,attribute14
846      ,attribute15
847      ,creation_date
848      ,created_by
849      ,last_update_date
850      ,last_updated_by
851      ,last_update_login
852      ,accrual_reversal_flag    -- 4262811
853   )
854   values
855      (xla_ae_headers_s.NEXTVAL
856      ,p_application_id
857      ,p_ledger_id
858      ,l_entity_id
859      ,p_event_id
860      ,C_EVENT_TYPE_CODE_MANUAL
861      ,p_gl_date
862      ,p_reference_date
863      ,p_balance_type_code
864      ,l_budget_version_id
865      ,C_GL_TRANSFER_MODE_NO
866      ,p_je_category_name
867      ,l_status_code
868      ,p_accounting_entry_type_code
869      ,p_description
870      ,p_period_name
871      ,p_attribute_category
872      ,p_attribute1
873      ,p_attribute2
874      ,p_attribute3
875      ,p_attribute4
876      ,p_attribute5
877      ,p_attribute6
878      ,p_attribute7
879      ,p_attribute8
880      ,p_attribute9
881      ,p_attribute10
882      ,p_attribute11
883      ,p_attribute12
884      ,p_attribute13
885      ,p_attribute14
886      ,p_attribute15
887      ,sysdate
888      ,nvl(xla_environment_pkg.g_usr_id,-1)
889      ,sysdate
890      ,nvl(xla_environment_pkg.g_usr_id,-1)
891      ,nvl(xla_environment_pkg.g_login_id,-1)
892      ,'N')              -- 4262811 accrual_reversal_flag
893      RETURNING 	 ae_header_id
894 	    	,creation_date
895 	    	,created_by
896   	    	,last_update_date
897 	    	,last_updated_by
898 	    	,last_update_login
899 	INTO	 p_ae_header_id
900 		,p_creation_date
901 		,p_created_by
902 		,p_last_update_date
903 		,p_last_updated_by
904 		,p_last_update_login;
905 
906   IF (C_LEVEL_EVENT >= g_log_level) THEN
907     trace(p_msg    => 'header id = '||p_ae_header_id,
908           p_module => l_log_module,
909           p_level  => C_LEVEL_EVENT);
910   END IF;
911 
912   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
913     trace(p_msg    => 'END of procedure create_journal_entry_header',
914           p_module => l_log_module,
915           p_level  => C_LEVEL_PROCEDURE);
916   END IF;
917 
918 EXCEPTION
919 WHEN xla_exceptions_pkg.application_exception THEN
920   ROLLBACK;
921   RAISE;
922 
923 WHEN OTHERS                                   THEN
924   ROLLBACK;
925   xla_exceptions_pkg.raise_message
926       (p_location => 'xla_journal_entries_pkg.create_journal_entry_header');
927 
928 END create_journal_entry_header;
929 
930 
931 
932 
933 --=============================================================================
934 --
935 -- Name: update_journal_entry_header
936 -- Description: Update a journal entry header.
937 --
938 --=============================================================================
939 PROCEDURE update_journal_entry_header
940   (p_ae_header_id               IN  INTEGER
941   ,p_application_id		IN  INTEGER
942   ,p_legal_entity_id            IN  INTEGER	DEFAULT NULL
943   ,p_gl_date                    IN  DATE
944   ,p_accounting_entry_type_code	IN  VARCHAR2
945   ,p_description                IN  VARCHAR2
946   ,p_je_category_name           IN  VARCHAR2
947   ,p_budget_version_id          IN  INTEGER 	DEFAULT NULL
948   ,p_reference_date             IN  DATE	DEFAULT NULL
949   ,p_attribute_category		IN  VARCHAR2	DEFAULT NULL
950   ,p_attribute1			IN  VARCHAR2	DEFAULT NULL
951   ,p_attribute2			IN  VARCHAR2	DEFAULT NULL
952   ,p_attribute3			IN  VARCHAR2	DEFAULT NULL
953   ,p_attribute4			IN  VARCHAR2	DEFAULT NULL
954   ,p_attribute5			IN  VARCHAR2	DEFAULT NULL
955   ,p_attribute6			IN  VARCHAR2	DEFAULT NULL
956   ,p_attribute7			IN  VARCHAR2	DEFAULT NULL
957   ,p_attribute8			IN  VARCHAR2	DEFAULT NULL
958   ,p_attribute9			IN  VARCHAR2	DEFAULT NULL
959   ,p_attribute10		IN  VARCHAR2	DEFAULT NULL
960   ,p_attribute11		IN  VARCHAR2	DEFAULT NULL
961   ,p_attribute12		IN  VARCHAR2	DEFAULT NULL
962   ,p_attribute13		IN  VARCHAR2	DEFAULT NULL
963   ,p_attribute14		IN  VARCHAR2	DEFAULT NULL
964   ,p_attribute15		IN  VARCHAR2	DEFAULT NULL
965   ,p_period_name		OUT NOCOPY VARCHAR2
966   ,p_last_update_date           OUT NOCOPY DATE
967   ,p_last_updated_by            OUT NOCOPY INTEGER
968   ,p_last_update_login          OUT NOCOPY INTEGER
969   ,p_retcode			OUT NOCOPY INTEGER
970   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
971 IS
972   l_info		t_je_info;
973   l_status_code		VARCHAR2(30) := C_AE_STATUS_INCOMPLETE;
974   l_closing_status	VARCHAR2(30);
975   l_result2		INTEGER;
976   l_period_type		VARCHAR2(30);
977 
978   l_budget_version_id	INTEGER;
979 
980   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
981 
982   l_log_module          VARCHAR2(240);
983 BEGIN
984   IF g_log_enabled THEN
985     l_log_module := C_DEFAULT_MODULE||'.update_journal_entry_header';
986   END IF;
987 
988   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
989     trace(p_msg    => 'BEGIN of procedure update_journal_entry_header',
990           p_module => l_log_module,
991           p_level  => C_LEVEL_PROCEDURE);
992   END IF;
993 
994   fnd_msg_pub.initialize;
995   p_retcode := 0;
996 
997   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
998 
999   --
1000   -- Validation where exception will be throw
1001   --
1002   validate_ae_type_code(l_info.type_code, p_msg_mode);
1003   validate_ae_status_code(l_info.status_code, p_msg_mode);
1004   validate_je_category(p_je_category_name, p_msg_mode);
1005   -- Done Validation
1006 
1007   IF (l_info.balance_type_code = C_JE_ACTUAL) THEN
1008     l_budget_version_id := NULL;
1009   ELSIF (l_info.balance_type_code = C_JE_BUDGET) THEN
1010     l_budget_version_id := p_budget_version_id;
1011   ELSE
1012     l_budget_version_id := NULL;
1013   END IF;
1014 
1015   --
1016   -- Get Period Name
1017   --
1018   p_period_name := get_period_name
1019 	(p_ledger_id		=> l_info.ledger_id
1020 	,p_accounting_date	=> p_gl_date
1021 	,p_closing_status	=> l_closing_status
1022 	,p_period_type		=> l_period_type);
1023 
1024   IF (p_period_name IS NULL) THEN
1025     xla_exceptions_pkg.raise_message
1026 	 (p_appli_s_name	=> 'XLA'
1027 	 ,p_msg_name		=> 'XLA_AP_INVALID_GL_DATE'
1028 	 ,p_msg_mode		=> p_msg_mode);
1029   END IF;
1030 
1031   IF (l_info.status_code = C_AE_STATUS_INVALID ) THEN
1032     IF (NOT clear_errors(l_info.event_id, p_ae_header_id, NULL)) THEN
1033       l_status_code := C_AE_STATUS_INVALID;
1034     END IF;
1035   END IF;
1036 
1037   --
1038   -- Update xla_transaction_entities if ledger entity id is updated
1039   --
1040   IF (l_info.legal_entity_id <> p_legal_entity_id) THEN
1041     UPDATE xla_transaction_entities
1042 	  SET	legal_entity_id		= p_legal_entity_id
1043 	  WHERE	application_id	        = p_application_id   -- 4928660
1044           AND   entity_id		= l_info.entity_id;
1045   END IF;
1046 
1047   --
1048   -- Update xla_events if gl date is updated
1049   --
1050   IF (l_info.gl_date <> p_gl_date) THEN
1051     UPDATE xla_events
1052        SET event_date	  = p_gl_date
1053      WHERE application_id = p_application_id
1054        AND event_id       = l_info.event_id;
1055 
1056     UPDATE xla_ae_lines
1057        SET accounting_date = p_gl_date
1058      WHERE application_id  = p_application_id
1059        AND ae_header_id    = p_ae_header_id;
1060   END IF;
1061 
1062   --
1063   -- If the entry was a draft entry, undo draft
1064   --
1065   undo_draft_entry(l_info);
1066 
1067   --
1068   -- Update xla_ae_headers with modified information
1069   --
1070   UPDATE xla_ae_headers
1071 	SET	 reference_date 		= p_reference_date
1072 		,budget_version_id		= l_budget_version_id
1073   		,accounting_entry_type_code 	= p_accounting_entry_type_code
1074 		,accounting_entry_status_code	= l_status_code
1075    		,accounting_date		= p_gl_date
1076 		,period_name			= p_period_name
1077    		,je_category_name		= p_je_category_name
1078    		,description			= p_description
1079    		,last_update_date		= sysdate
1080    		,last_updated_by		= nvl(xla_environment_pkg.g_usr_id,-1)
1081    		,last_update_login		= nvl(xla_environment_pkg.g_login_id,-1)
1082 		,attribute_category		= p_attribute_category
1083 		,attribute1			= p_attribute1
1084 		,attribute2			= p_attribute2
1085 		,attribute3			= p_attribute3
1086 		,attribute4			= p_attribute4
1087 		,attribute5			= p_attribute5
1088 		,attribute6			= p_attribute6
1089 		,attribute7			= p_attribute7
1090 		,attribute8			= p_attribute8
1091 		,attribute9			= p_attribute9
1092 		,attribute10			= p_attribute10
1093 		,attribute11			= p_attribute11
1094 		,attribute12			= p_attribute12
1095 		,attribute13			= p_attribute13
1096 		,attribute14			= p_attribute14
1097 		,attribute15			= p_attribute15
1098 	WHERE	ae_header_id			= p_ae_header_id
1099           AND	application_id			= p_application_id
1100      RETURNING 	 last_update_date
1101 	    	,last_updated_by
1102 	    	,last_update_login
1103 	INTO	 p_last_update_date
1104 		,p_last_updated_by
1105 		,p_last_update_login;
1106 
1107   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1108     trace(p_msg    => 'END of procedure update_journal_entry_header',
1109           p_module => l_log_module,
1110           p_level  => C_LEVEL_PROCEDURE);
1111   END IF;
1112 
1113 EXCEPTION
1114 WHEN xla_exceptions_pkg.application_exception THEN
1115   ROLLBACK;
1116   RAISE;
1117 WHEN OTHERS                                   THEN
1118   ROLLBACK;
1119   xla_exceptions_pkg.raise_message
1120       (p_location => 'xla_journal_entries_pkg.update_journal_entry_header');
1121 
1122 END update_journal_entry_header;
1123 
1124 --=============================================================================
1125 --
1126 -- Name: delete_journal_entry
1127 -- Description: Delete a journal entry
1128 --
1129 --=============================================================================
1130 
1131 PROCEDURE delete_journal_entry
1132   (p_ae_header_id		IN  INTEGER
1133   ,p_application_id		IN  INTEGER
1134   ,p_mode			IN  VARCHAR2	DEFAULT C_DELETE_NORMAL_MODE
1135   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
1136 IS
1137   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
1138   l_info		t_je_info;
1139   l_log_module  VARCHAR2(240);
1140 BEGIN
1141   IF g_log_enabled THEN
1142     l_log_module := C_DEFAULT_MODULE||'.delete_journal_entry';
1143   END IF;
1144 
1145   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1146     trace(p_msg    => 'BEGIN of procedure delete_journal_entry',
1147           p_module => l_log_module,
1148           p_level  => C_LEVEL_PROCEDURE);
1149   END IF;
1150 
1151   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
1152 
1153   --
1154   -- Validation where exception will be throw
1155   --
1156   validate_ae_type_code(l_info.type_code, p_msg_mode);
1157   validate_delete_mode(l_info.status_code, p_mode, p_msg_mode);
1158 
1159   l_event_source_info.application_id     := p_application_id;
1160   l_event_source_info.legal_entity_id    := l_info.legal_entity_id;
1161   l_event_source_info.ledger_id          := l_info.ledger_id;
1162   l_event_source_info.entity_type_code   := C_ENTITY_TYPE_CODE_MANUAL;
1163 
1164   IF (l_info.status_code = C_AE_STATUS_FINAL) THEN
1165     XLA_EVENTS_PKG.delete_processed_event
1166    	    (p_event_source_info            => l_event_source_info
1167    	    ,p_event_id                     => l_info.event_id);
1168   ELSE
1169     XLA_EVENTS_PKG.delete_event
1170    	    (p_event_source_info            => l_event_source_info
1171             ,p_valuation_method             => NULL
1172    	    ,p_event_id                     => l_info.event_id);
1173   END IF;
1174 
1175   -- Delete from Funda Checker entries
1176   psa_funds_checker_pkg.glxfpp(p_eventid => l_info.event_id);
1177 
1178   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1179     trace(p_msg    => 'END of procedure delete_journal_entry',
1180           p_module => l_log_module,
1181           p_level  => C_LEVEL_PROCEDURE);
1182   END IF;
1183 EXCEPTION
1184 WHEN xla_exceptions_pkg.application_exception THEN
1185   ROLLBACK;
1186   RAISE;
1187 
1188 WHEN OTHERS                                   THEN
1189   ROLLBACK;
1190   xla_exceptions_pkg.raise_message
1191       (p_location => 'xla_journal_entries_pkg.update_journal_entry_header');
1192 
1193 END delete_journal_entry;
1194 
1195 
1196 --=============================================================================
1197 --
1198 -- Name: delete_journal_entry
1199 -- Description: Delete all journal entries of an event.
1200 --
1201 --=============================================================================
1202 PROCEDURE delete_journal_entries
1203   (p_event_id                   IN  INTEGER
1204   ,p_application_id		IN  INTEGER)
1205 IS
1206   CURSOR c_entries IS
1207     SELECT  h.ae_header_id                  ae_header_id
1208            ,e.ledger_id                     ledger_id
1209            ,h.accounting_entry_status_code  status_code
1210            ,h.accounting_entry_type_code    type_code
1211            ,h.funds_status_code             funds_status_code
1212            ,h.packet_id                     packet_id
1213            ,h.entity_id                     entity_id
1214       FROM xla_ae_headers                  h
1215           ,xla_transaction_entities        e
1216      WHERE e.application_id   = p_application_id
1217        AND e.entity_id        = h.entity_id
1218        AND h.application_id   = p_application_id
1219        AND h.event_id         = p_event_id
1220     FOR UPDATE NOWAIT;
1221 
1222   CURSOR c_period IS
1223     SELECT       'exist'
1224     FROM         xla_ae_headers h
1225 		,gl_period_statuses p
1226     WHERE       p.application_id(+)       	= C_GL_APPLICATION_ID
1227       AND       p.ledger_id(+)             	= h.ledger_id
1228       AND       p.adjustment_period_flag(+) 	= 'N'
1229       AND	p.period_name(+)	     	= h.period_name
1230       AND	nvl(p.closing_status, 'C')   	NOT in ('0', 'F')
1231       AND	h.accounting_entry_status_code 	= C_AE_STATUS_FINAL
1232       AND       h.application_id		= p_application_id
1233       AND	h.event_id			= p_event_id;
1234 
1235   l_ae_header_ids       t_array_int;
1236   l_entry               c_entries%ROWTYPE;
1237 
1238   l_result		INTEGER;
1239   l_funds_retcode	VARCHAR2(30);
1240   l_open_retcode	INTEGER;
1241   l_period_name		VARCHAR2(30);
1242 
1243   l_error		VARCHAR(30);
1244 
1245   j			INTEGER := 0;
1246   k			INTEGER := 0;
1247   l_log_module  VARCHAR2(240);
1248 BEGIN
1249   IF g_log_enabled THEN
1250     l_log_module := C_DEFAULT_MODULE||'.delete_journal_entries';
1251   END IF;
1252 
1253   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1254     trace(p_msg    => 'BEGIN of procedure delete_journal_entries',
1255           p_module => l_log_module,
1256           p_level  => C_LEVEL_PROCEDURE);
1257   END IF;
1258 
1259   --
1260   -- Ensure no Final journal entry within the event exists in a closed period
1261   --
1262   OPEN c_period;
1263   IF (c_period%FOUND) THEN
1264     CLOSE c_period;
1265     xla_exceptions_pkg.raise_message
1266             (p_appli_s_name     => 'XLA'
1267             ,p_msg_name         => 'XLA_MJE_CANT_DEL_CLOSED_PERIOD'
1268             ,p_msg_mode	        => xla_exceptions_pkg.C_STANDARD_MESSAGE);
1269   END IF;
1270   CLOSE c_period;
1271 
1272   OPEN c_entries;
1273   FETCH c_entries INTO l_entry;
1274 
1275  /*  -- Maintaining the Draft balance is no more required bug 5529569
1276 
1277   IF (l_entry.ae_header_id IS NOT NULL) THEN
1278     --
1279     -- If deleting a draft or final journal entry, DELETE the balance
1280     --
1281     IF (l_entry.status_code IN (C_AE_STATUS_DRAFT, C_AE_STATUS_FINAL)) THEN
1282       IF (NOT xla_balances_pkg.massive_update
1283 	  		(p_application_id 	=> p_application_id
1284 	  		,p_ledger_id		=> NULL
1285 			,p_entity_id		=> l_entry.entity_id
1286    	  		,p_event_id		=> NULL
1287 			,p_request_id		=> NULL
1288 	  		,p_accounting_batch_id	=> NULL
1289    	  		,p_update_mode		=> C_BALANCE_DELETE
1290 	  		,p_execution_mode	=> C_BALANCE_ONLINE)) THEN
1291         xla_exceptions_pkg.raise_message
1292           (p_appli_s_name	=> 'XLA'
1293           ,p_msg_name		=> 'XLA_INTERNAL_ERROR'
1294           ,p_token_1            => 'MESSAGE'
1295           ,p_value_1            => 'Error in balance calculation'
1296           ,p_token_2            => 'LOCATION'
1297           ,p_value_2            => 'XLA_JOURNAL_ENTRIES_PKG.delete_journal_entries'
1298 	  ,p_msg_mode		=> xla_exceptions_pkg.C_STANDARD_MESSAGE);
1299       END IF;
1300     END IF;
1301   END IF;
1302 */
1303   WHILE (c_entries%FOUND) LOOP
1304 
1305     IF (nvl(l_entry.funds_status_code,C_CHAR) IN (C_FUNDS_SUCCESS, C_FUNDS_ADVISORY)) THEN
1306       PSA_FUNDS_CHECKER_PKG.glxfpp(p_eventid => p_event_id);
1307     END IF;
1308 
1309     j := j+1;
1310     l_ae_header_ids(j) := l_entry.ae_header_id;
1311 
1312     FETCH c_entries INTO l_entry;
1313   END LOOP;
1314 
1315   CLOSE c_entries;
1316 
1317   DELETE FROM xla_accounting_errors
1318      WHERE event_id = p_event_id;
1319 
1320   DELETE FROM xla_distribution_links
1321    WHERE application_id = p_application_id
1322      AND ae_header_id IN (SELECT ae_header_id
1323                             FROM xla_ae_headers
1324                            WHERE application_id = p_application_id
1325                              AND event_id       = p_event_id);
1326 
1327   IF (l_entry.ae_header_id IS NOT NULL) THEN
1328 
1329     FORALL k in 1..j
1330       DELETE FROM xla_ae_segment_values
1331        WHERE ae_header_id = l_ae_header_ids(k);
1332 
1333     FOR k in 1..j LOOP
1334       IF (NOT xla_analytical_criteria_pkg.single_update_detail_value
1335 	(p_application_id		=> p_application_id
1336 	,p_ae_header_id			=> l_ae_header_ids(k)
1337 	,p_ae_line_num			=> NULL
1338 	,p_anacri_code			=> NULL
1339 	,p_anacri_type_code		=> NULL
1340 	,p_amb_context_code		=> NULL
1341 	,p_update_mode			=> 'D')) THEN
1342       ROLLBACK to SAVEPOINT DELETE_JOURNAL_ENTRIES;
1343 
1344       xla_exceptions_pkg.raise_message
1345          (p_appli_s_name        => 'XLA'
1346          ,p_msg_name            => 'XLA_COMMON_INTERNAL_ERROR'
1347          ,p_token_1            	=> 'MESSAGE'
1348          ,p_value_1            	=> 'Error in xla_analytical_criteria_pkg.single_update_detail_value'
1349          ,p_token_2            	=> 'LOCATION'
1350          ,p_value_2            	=> 'XLA_JOURNAL_ENTRIES_PKG.delete_journal_entries'
1351          ,p_msg_mode            => xla_exceptions_pkg.C_STANDARD_MESSAGE);
1352       END IF;
1353     END LOOP;
1354 
1355     FORALL k in 1..j
1356       DELETE FROM xla_ae_line_acs
1357        WHERE ae_header_id = l_ae_header_ids(k);
1358 
1359     FORALL k in 1..j
1360       DELETE FROM xla_ae_header_acs
1361        WHERE ae_header_id = l_ae_header_ids(k);
1362 
1363     FORALL k in 1..j
1364       DELETE FROM xla_ae_lines
1365       WHERE application_id = p_application_id
1366         AND ae_header_id = l_ae_header_ids(k);
1367 
1368     FORALL k in 1..j
1369       DELETE xla_ae_headers
1370       WHERE application_id = p_application_id
1371         AND ae_header_id = l_ae_header_ids(k);
1372 
1373   END IF;
1374 
1375   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1376     trace(p_msg    => 'END of procedure delete_journal_entries',
1377           p_module => l_log_module,
1378           p_level  => C_LEVEL_PROCEDURE);
1379   END IF;
1380 
1381 EXCEPTION
1382 WHEN xla_exceptions_pkg.application_exception THEN
1383   ROLLBACK;
1384   IF (c_entries%ISOPEN) THEN
1385     CLOSE c_entries;
1386   END IF;
1387   IF (c_period%ISOPEN) THEN
1388     CLOSE c_period;
1389   END IF;
1390   RAISE;
1391 
1392 WHEN OTHERS                                   THEN
1393   ROLLBACK;
1394   IF (c_entries%ISOPEN) THEN
1395     CLOSE c_entries;
1396   END IF;
1397   IF (c_period%ISOPEN) THEN
1398     CLOSE c_period;
1399   END IF;
1400   xla_exceptions_pkg.raise_message
1401       (p_location => 'xla_journal_entries_pkg.delete_journal_entries');
1402 
1403 END delete_journal_entries;
1404 
1405 
1406 --=============================================================================
1407 --
1408 -- Name: create_journal_entry_line
1409 -- Description: Create a journal entry line.
1410 --
1411 --=============================================================================
1412 
1413 PROCEDURE create_journal_entry_line
1414   (p_ae_header_id               IN  INTEGER
1415   ,p_displayed_line_number	IN  INTEGER
1416   ,p_application_id		IN  INTEGER
1417   ,p_code_combination_id        IN  INTEGER
1418   ,p_gl_transfer_mode          	IN  VARCHAR2
1419   ,p_accounting_class_code	IN  VARCHAR2
1420   ,p_entered_dr          	IN  OUT NOCOPY NUMBER
1421   ,p_entered_cr	       		IN  OUT NOCOPY NUMBER
1422   ,p_currency_code          	IN  OUT NOCOPY VARCHAR2
1423   ,p_accounted_dr		IN  OUT NOCOPY NUMBER
1424   ,p_accounted_cr		IN  OUT NOCOPY NUMBER
1425   ,p_conversion_type		IN  OUT NOCOPY VARCHAR2
1426   ,p_conversion_date   		IN  OUT NOCOPY DATE
1427   ,p_conversion_rate   		IN  OUT NOCOPY NUMBER
1428   ,p_party_type_code          	IN  VARCHAR2	DEFAULT NULL
1429   ,p_party_id          		IN  INTEGER	DEFAULT NULL
1430   ,p_party_site_id          	IN  INTEGER	DEFAULT NULL
1431   ,p_description          	IN  VARCHAR2 	DEFAULT NULL
1432   ,p_statistical_amount         IN  NUMBER 	DEFAULT NULL
1433   ,p_jgzz_recon_ref          	IN  VARCHAR2 	DEFAULT NULL
1434   ,p_attribute_category		IN  VARCHAR2	DEFAULT NULL
1435   ,p_encumbrance_type_id        IN  INTEGER 	DEFAULT NULL
1436   ,p_attribute1			IN  VARCHAR2	DEFAULT NULL
1437   ,p_attribute2			IN  VARCHAR2	DEFAULT NULL
1438   ,p_attribute3			IN  VARCHAR2	DEFAULT NULL
1439   ,p_attribute4			IN  VARCHAR2	DEFAULT NULL
1440   ,p_attribute5			IN  VARCHAR2	DEFAULT NULL
1441   ,p_attribute6			IN  VARCHAR2	DEFAULT NULL
1442   ,p_attribute7			IN  VARCHAR2	DEFAULT NULL
1443   ,p_attribute8			IN  VARCHAR2	DEFAULT NULL
1444   ,p_attribute9			IN  VARCHAR2	DEFAULT NULL
1445   ,p_attribute10		IN  VARCHAR2	DEFAULT NULL
1446   ,p_attribute11		IN  VARCHAR2	DEFAULT NULL
1447   ,p_attribute12		IN  VARCHAR2	DEFAULT NULL
1448   ,p_attribute13		IN  VARCHAR2	DEFAULT NULL
1449   ,p_attribute14		IN  VARCHAR2	DEFAULT NULL
1450   ,p_attribute15		IN  VARCHAR2	DEFAULT NULL
1451   ,p_ae_line_num             	OUT NOCOPY INTEGER
1452   ,p_creation_date		OUT NOCOPY DATE
1453   ,p_created_by			OUT NOCOPY INTEGER
1454   ,p_last_update_date           OUT NOCOPY DATE
1455   ,p_last_updated_by            OUT NOCOPY INTEGER
1456   ,p_last_update_login          OUT NOCOPY INTEGER
1457   ,p_retcode			OUT NOCOPY INTEGER
1458   ,p_msg_mode			IN VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
1459 IS
1460   l_info		        t_je_info;
1461 
1462   l_funct_curr		    VARCHAR2(15);
1463   l_bal_seg		        VARCHAR2(25);
1464   l_mgt_seg		        VARCHAR2(25);
1465 
1466   l_status_code		    VARCHAR2(30) := C_AE_STATUS_INCOMPLETE;
1467   l_gl_transfer_mode    VARCHAR2(30) := p_gl_transfer_mode;
1468   l_result2 		    INTEGER := 0;
1469   l_encumbrance_type_id	INTEGER;
1470 
1471   l_unrounded_entered_dr NUMBER;
1472   l_unrounded_entered_cr NUMBER;
1473   l_unrounded_accted_dr  NUMBER;
1474   l_unrounded_accted_cr  NUMBER;
1475 
1476   CURSOR c IS	SELECT	max(ae_line_num)+1
1477 		FROM	xla_ae_lines
1478 		WHERE	application_id = p_application_id
1479 		AND	ae_header_id = p_ae_header_id;
1480 
1481   l_rounding_rule_code  VARCHAR2(30);
1482   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
1483   l_log_module  VARCHAR2(240);
1484 
1485   CURSOR cur_enc IS  -- 5522973
1486     SELECT enabled_flag, encumbrance_type
1487     FROM  gl_encumbrance_types e
1488     WHERE e.encumbrance_type_id   = l_encumbrance_type_id;
1489   l_enabled   VARCHAR2(1);
1490   l_enc_type  VARCHAR2(30);
1491 
1492 BEGIN
1493   IF g_log_enabled THEN
1494     l_log_module := C_DEFAULT_MODULE||'.create_journal_entry_line';
1495   END IF;
1496 
1497   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1498     trace(p_msg    => 'BEGIN of procedure create_journal_entry_line',
1499           p_module => l_log_module,
1500           p_level  => C_LEVEL_PROCEDURE);
1501   END IF;
1502 
1503   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
1504 
1505   --
1506   -- Validation where exception will be throw
1507   --
1508   validate_display_line_number(p_ae_header_id, NULL, p_displayed_line_number, p_application_id, p_msg_mode);
1509   validate_ae_type_code(l_info.type_code, p_msg_mode);
1510   validate_ae_status_code(l_info.status_code, p_msg_mode);
1511   validate_code_combination_id(p_displayed_line_number, p_code_combination_id, p_msg_mode);
1512 
1513   get_ledger_info(l_info.ledger_id, p_application_id, p_code_combination_id, l_funct_curr, l_rounding_rule_code, l_bal_seg, l_mgt_seg);
1514   p_currency_code := nvl(p_currency_code, l_funct_curr);
1515 
1516   IF (l_gl_transfer_mode IS NULL OR l_gl_transfer_mode NOT IN ('D','S')) THEN
1517     get_ledger_options(p_application_id, l_info.ledger_id, l_gl_transfer_mode);
1518   END IF;
1519 
1520   IF (l_info.balance_type_code = C_JE_ACTUAL) THEN
1521     l_encumbrance_type_id := NULL;
1522   ELSIF (l_info.balance_type_code = C_JE_BUDGET) THEN
1523     l_encumbrance_type_id := NULL;
1524   ELSE
1525     l_encumbrance_type_id := p_encumbrance_type_id;
1526 
1527     IF l_encumbrance_type_id IS NULL THEN  -- 5522973
1528        xla_exceptions_pkg.raise_message(
1529          p_appli_s_name           => 'XLA'
1530         ,p_msg_name               => 'XLA_AP_NO_ENCUM_TYPE'
1531 	,p_msg_mode		=> p_msg_mode);
1532     ELSE
1533        OPEN cur_enc;
1534        FETCH cur_enc INTO l_enabled, l_enc_type;
1535        IF cur_enc%NOTFOUND THEN
1536           CLOSE cur_enc;
1537           xla_exceptions_pkg.raise_message(
1538              p_appli_s_name         => 'XLA'
1539             ,p_msg_name             => 'XLA_AP_INVALID_ENCU_TYPE'
1540             ,p_token_1              => 'ENCUMBRANCE_TYPE_ID'
1541             ,p_value_1              => l_encumbrance_type_id
1542             ,p_msg_mode             => p_msg_mode);
1543        ELSIF l_enabled = 'N' THEN
1544           CLOSE cur_enc;
1545           xla_exceptions_pkg.raise_message(
1546              p_appli_s_name         => 'XLA'
1547             ,p_msg_name             => 'XLA_AP_INACTIVE_ENCUM_TYPE'
1548             ,p_token_1              => 'ENCUMBRANCE_TYPE_ID'
1549             ,p_value_1              => l_enc_type
1550             ,p_msg_mode             => p_msg_mode);
1551        END IF;
1552        IF cur_enc%ISOPEN THEN
1553           CLOSE cur_enc;
1554        END IF;
1555     END IF;
1556 
1557   END IF;
1558 
1559   --
1560   -- Validation where errors will be  into accounting error table
1561   --
1562   calculate_amounts
1563 	(p_entered_dr		=> p_entered_dr
1564 	,p_entered_cr		=> p_entered_cr
1565    	,p_currency_code	=> p_currency_code
1566 	,p_functional_curr	=> l_funct_curr
1567 	,p_rounding_rule_code   => l_rounding_rule_code
1568    	,p_accounted_cr		=> p_accounted_cr
1569     	,p_accounted_dr		=> p_accounted_dr
1570    	,p_unrounded_entered_cr	=> l_unrounded_entered_cr
1571    	,p_unrounded_entered_dr	=> l_unrounded_entered_dr
1572    	,p_unrounded_accted_cr	=> l_unrounded_accted_cr
1573    	,p_unrounded_accted_dr	=> l_unrounded_accted_dr
1574    	,p_conv_type		=> p_conversion_type
1575    	,p_conv_date		=> p_conversion_date
1576    	,p_conv_rate		=> p_conversion_rate);
1577 
1578   -- Done Validation
1579 
1580   IF (l_info.status_code = C_AE_STATUS_INVALID) THEN
1581     IF (NOT clear_errors(l_info.event_id, p_ae_header_id, p_ae_line_num)) THEN
1582       l_status_code := C_AE_STATUS_INVALID;
1583     END IF;
1584   END IF;
1585 
1586   --
1587   -- If the entry was a draft entry, undo draft
1588   --
1589   undo_draft_entry(l_info);
1590 
1591   OPEN c;
1592   FETCH c INTO p_ae_line_num;
1593   CLOSE c;
1594 
1595   IF (p_ae_line_num IS NULL) THEN
1596     p_ae_line_num := 1;
1597   END IF;
1598 
1599   IF (C_LEVEL_EVENT >= g_log_level) THEN
1600     trace(p_msg    => 'p_ae_line_num = '||p_ae_line_num,
1601           p_module => l_log_module,
1602           p_level  => C_LEVEL_EVENT);
1603   END IF;
1604 
1605   --
1606   -- Create journal entry line
1607   --
1608   INSERT INTO xla_ae_lines
1609    	(ae_header_id
1610 	,displayed_line_number
1611    	,ae_line_num
1612    	,code_combination_id
1613    	,gl_transfer_mode_code
1614    	,creation_date
1615    	,created_by
1616    	,last_update_date
1617    	,last_updated_by
1618    	,last_update_login
1619    	,party_type_code
1620    	,party_id
1621    	,party_site_id
1622    	,entered_dr
1623    	,entered_cr
1624    	,accounted_dr
1625    	,accounted_cr
1626    	,unrounded_accounted_dr
1627    	,unrounded_accounted_cr
1628    	,unrounded_entered_dr
1629    	,unrounded_entered_cr
1630 	,accounting_class_code
1631    	,description
1632    	,statistical_amount
1633    	,currency_code
1634    	,currency_conversion_type
1635    	,currency_conversion_date
1636    	,currency_conversion_rate
1637    	,jgzz_recon_ref
1638    	,control_balance_flag
1639    	,analytical_balance_flag
1640 	,gl_sl_link_table
1641      	,attribute_category
1642         ,encumbrance_type_id
1643      	,attribute1
1644      	,attribute2
1645      	,attribute3
1646      	,attribute4
1647      	,attribute5
1648      	,attribute6
1649      	,attribute7
1650      	,attribute8
1651      	,attribute9
1652      	,attribute10
1653      	,attribute11
1654      	,attribute12
1655      	,attribute13
1656      	,attribute14
1657      	,attribute15
1658    	,application_id
1659         ,gain_or_loss_flag
1660         ,ledger_id
1661         ,accounting_date
1662         ,mpa_accrual_entry_flag)   -- 4262811
1663     values
1664    	(p_ae_header_id
1665 	,p_displayed_line_number
1666    	,p_ae_line_num
1667    	,p_code_combination_id
1668    	,l_gl_transfer_mode
1669      	,sysdate
1670      	,nvl(xla_environment_pkg.g_usr_id,-1)
1671      	,sysdate
1672      	,nvl(xla_environment_pkg.g_usr_id,-1)
1673      	,nvl(xla_environment_pkg.g_login_id,-1)
1674    	,p_party_type_code
1675    	,p_party_id
1676    	,p_party_site_id
1677    	,p_entered_dr
1678    	,p_entered_cr
1679    	,p_accounted_dr
1680    	,p_accounted_cr
1681    	,l_unrounded_accted_dr
1682    	,l_unrounded_accted_cr
1683    	,l_unrounded_entered_dr
1684    	,l_unrounded_entered_cr
1685 	,p_accounting_class_code
1686    	,p_description
1687    	,p_statistical_amount
1688    	,p_currency_code
1689    	,p_conversion_type
1690    	,p_conversion_date
1691    	,p_conversion_rate
1692    	,p_jgzz_recon_ref
1693    	,NULL
1694    	,NULL
1695 	,'XLAJEL'
1696      	,p_attribute_category
1697         ,l_encumbrance_type_id
1698      	,p_attribute1
1699      	,p_attribute2
1700      	,p_attribute3
1701      	,p_attribute4
1702      	,p_attribute5
1703      	,p_attribute6
1704      	,p_attribute7
1705      	,p_attribute8
1706      	,p_attribute9
1707      	,p_attribute10
1708      	,p_attribute11
1709      	,p_attribute12
1710      	,p_attribute13
1711      	,p_attribute14
1712      	,p_attribute15
1713    	,l_info.application_id
1714         ,'N'
1715    	,l_info.ledger_id
1716    	,l_info.gl_date
1717         ,'N')   -- 4262811 mpa_accrual_entry_flag
1718      RETURNING 	 creation_date
1719 	    	,created_by
1720   	    	,last_update_date
1721 	    	,last_updated_by
1722 	    	,last_update_login
1723 	INTO	 p_creation_date
1724 		,p_created_by
1725 		,p_last_update_date
1726 		,p_last_updated_by
1727 		,p_last_update_login;
1728 
1729   IF (C_LEVEL_EVENT >= g_log_level) THEN
1730     trace(p_msg    => '# row inserted = '||SQL%ROWCOUNT,
1731           p_module => l_log_module,
1732           p_level  => C_LEVEL_EVENT);
1733   END IF;
1734 
1735   IF (l_bal_seg IS NOT NULL) THEN
1736     update_segment_values(p_ae_header_id, C_SEG_BALANCING, l_bal_seg, C_ACTION_ADD);
1737   END IF;
1738 
1739   IF (l_mgt_seg IS NOT NULL) THEN
1740     update_segment_values(p_ae_header_id, C_SEG_MANAGEMENT, l_mgt_seg, C_ACTION_ADD);
1741   END IF;
1742 
1743   create_distribution_link
1744     (p_application_id    => p_application_id
1745     ,p_ae_header_id      => p_ae_header_id
1746     ,p_ae_line_num       => p_ae_line_num
1747     ,p_temp_line_num     => p_ae_line_num
1748     ,p_ref_ae_header_id  => p_ae_header_id
1749     ,p_ref_event_id      => NULL
1750     ,p_ref_temp_line_num => NULL);
1751 
1752   IF (l_info.status_code <> l_status_code) THEN
1753     update	xla_ae_headers
1754     set		accounting_entry_status_code = l_status_code
1755     WHERE	ae_header_id	= p_ae_header_id
1756     AND		application_id	= p_application_id;
1757   END IF;
1758 
1759   p_retcode := 0;
1760 
1761   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1762     trace(p_msg    => 'END of procedure create_journal_entry_line',
1763           p_module => l_log_module,
1764           p_level  => C_LEVEL_PROCEDURE);
1765   END IF;
1766 
1767 EXCEPTION
1768 WHEN xla_exceptions_pkg.application_exception THEN
1769   ROLLBACK;
1770   IF (c%ISOPEN) THEN
1771     CLOSE c;
1772   END IF;
1773   RAISE;
1774 
1775 WHEN OTHERS                                   THEN
1776   ROLLBACK;
1777   IF (c%ISOPEN) THEN
1778     CLOSE c;
1779   END IF;
1780   xla_exceptions_pkg.raise_message
1781      (p_location => 'xla_journal_entries_pkg.create_journal_entry_line');
1782 
1783 END create_journal_entry_line;
1784 
1785 
1786 --=============================================================================
1787 --
1788 -- Name: update_journal_entry_line
1789 -- Description: Update a journal entry line.
1790 --
1791 --=============================================================================
1792 PROCEDURE update_journal_entry_line
1793   (p_ae_header_id               IN  INTEGER
1794   ,p_ae_line_num             	IN  INTEGER
1795   ,p_displayed_line_number	IN  INTEGER
1796   ,p_application_id		IN  INTEGER
1797   ,p_code_combination_id        IN  INTEGER
1798   ,p_gl_transfer_mode          	IN  VARCHAR2
1799   ,p_accounting_class_code	IN  VARCHAR2
1800   ,p_entered_dr          	IN  OUT NOCOPY NUMBER
1801   ,p_entered_cr          	IN  OUT NOCOPY NUMBER
1802   ,p_currency_code          	IN  OUT NOCOPY VARCHAR2
1803   ,p_accounted_dr		IN  OUT NOCOPY NUMBER
1804   ,p_accounted_cr		IN  OUT NOCOPY NUMBER
1805   ,p_conversion_type		IN  OUT NOCOPY VARCHAR2
1806   ,p_conversion_date   		IN  OUT NOCOPY DATE
1807   ,p_conversion_rate   		IN  OUT NOCOPY NUMBER
1808   ,p_party_type_code		IN  VARCHAR2	DEFAULT NULL
1809   ,p_party_id          		IN  INTEGER	DEFAULT NULL
1810   ,p_party_site_id          	IN  INTEGER	DEFAULT NULL
1811   ,p_description          	IN  VARCHAR2 	DEFAULT NULL
1812   ,p_statistical_amount         IN  NUMBER 	DEFAULT NULL
1813   ,p_jgzz_recon_ref          	IN  VARCHAR2 	DEFAULT NULL
1814   ,p_attribute_category		IN  VARCHAR2	DEFAULT NULL
1815   ,p_encumbrance_type_id        IN  INTEGER 	DEFAULT NULL
1816   ,p_attribute1			IN  VARCHAR2	DEFAULT NULL
1817   ,p_attribute2			IN  VARCHAR2	DEFAULT NULL
1818   ,p_attribute3			IN  VARCHAR2	DEFAULT NULL
1819   ,p_attribute4			IN  VARCHAR2	DEFAULT NULL
1820   ,p_attribute5			IN  VARCHAR2	DEFAULT NULL
1821   ,p_attribute6			IN  VARCHAR2	DEFAULT NULL
1822   ,p_attribute7			IN  VARCHAR2	DEFAULT NULL
1823   ,p_attribute8			IN  VARCHAR2	DEFAULT NULL
1824   ,p_attribute9			IN  VARCHAR2	DEFAULT NULL
1825   ,p_attribute10		IN  VARCHAR2	DEFAULT NULL
1826   ,p_attribute11		IN  VARCHAR2	DEFAULT NULL
1827   ,p_attribute12		IN  VARCHAR2	DEFAULT NULL
1828   ,p_attribute13		IN  VARCHAR2	DEFAULT NULL
1829   ,p_attribute14		IN  VARCHAR2	DEFAULT NULL
1830   ,p_attribute15		IN  VARCHAR2	DEFAULT NULL
1831   ,p_last_update_date           OUT NOCOPY DATE
1832   ,p_last_updated_by            OUT NOCOPY INTEGER
1833   ,p_last_update_login          OUT NOCOPY INTEGER
1834   ,p_retcode			OUT NOCOPY INTEGER
1835   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
1836 IS
1837   l_info		t_je_info;
1838 
1839   l_funct_curr		VARCHAR2(15);
1840   l_bal_seg_old		VARCHAR2(25); -- INTEGER;
1841   l_mgt_seg_old		VARCHAR2(25); -- INTEGER;
1842   l_bal_seg		VARCHAR2(25); -- INTEGER;
1843   l_mgt_seg		VARCHAR2(25); -- INTEGER;
1844 
1845   l_unrounded_entered_dr NUMBER;
1846   l_unrounded_entered_cr NUMBER;
1847   l_unrounded_accted_dr  NUMBER;
1848   l_unrounded_accted_cr  NUMBER;
1849   l_encumbrance_type_id	INTEGER;
1850 
1851   CURSOR c_line IS
1852     SELECT	code_combination_id
1853     FROM	xla_ae_lines
1854     WHERE	application_id = p_application_id
1855       AND       ae_header_id = p_ae_header_id
1856       AND	ae_line_num = p_ae_line_num;
1857 
1858   l_ccid_old		    INTEGER;
1859   l_status_code		    VARCHAR2(30);
1860   l_gl_transfer_mode    VARCHAR2(30);
1861 
1862   l_result2		        INTEGER;
1863   l_date		        DATE;
1864   l_rounding_rule_code  VARCHAR2(30);
1865 
1866   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
1867   l_ref_ae_header_id    INTEGER;
1868   l_temp_line_num       INTEGER;
1869   l_dummy               INTEGER;
1870   l_log_module          VARCHAR2(240);
1871 BEGIN
1872   IF g_log_enabled THEN
1873     l_log_module := C_DEFAULT_MODULE||'.update_journal_entry_line';
1874   END IF;
1875 
1876   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1877     trace(p_msg    => 'BEGIN of procedure update_journal_entry_line',
1878           p_module => l_log_module,
1879           p_level  => C_LEVEL_PROCEDURE);
1880   END IF;
1881 
1882   l_status_code		:= C_AE_STATUS_INCOMPLETE;
1883   l_gl_transfer_mode    := p_gl_transfer_mode;
1884 
1885   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
1886 
1887   p_retcode := 0;
1888 
1889   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
1890 
1891   IF (l_info.balance_type_code = C_JE_ACTUAL) THEN
1892     l_encumbrance_type_id := NULL;
1893   ELSIF (l_info.balance_type_code = C_JE_BUDGET) THEN
1894     l_encumbrance_type_id := NULL;
1895   ELSE
1896     l_encumbrance_type_id := p_encumbrance_type_id;
1897   END IF;
1898 
1899   --
1900   -- Validation where exception will be throw
1901   --
1902   OPEN c_line;
1903   FETCH c_line INTO l_ccid_old;
1904   CLOSE c_line;
1905 
1906   IF (l_ccid_old IS NULL) THEN
1907     xla_exceptions_pkg.raise_message
1908 	 (p_appli_s_name	=> 'XLA'
1909          ,p_msg_name		=> 'XLA_MJE_INVALID_LINE_NUM'
1910          ,p_token_1		=> 'LINE_NUM'
1911 	 ,p_value_1		=> p_ae_line_num
1912 	 ,p_msg_mode		=> p_msg_mode);
1913   END IF;
1914 
1915   validate_display_line_number(p_ae_header_id
1916                               ,p_ae_line_num
1917                               ,p_displayed_line_number
1918                               ,p_application_id
1919                               ,p_msg_mode);
1920   validate_ae_type_code(l_info.type_code, p_msg_mode);
1921   validate_ae_status_code(l_info.status_code, p_msg_mode);
1922 
1923   --
1924   -- Validation where error will be inserted into accounting error table
1925   --
1926   get_ledger_info(l_info.ledger_id, p_application_id, p_code_combination_id, l_funct_curr, l_rounding_rule_code, l_bal_seg, l_mgt_seg);
1927   p_currency_code := nvl(p_currency_code, l_funct_curr);
1928 
1929   IF (l_gl_transfer_mode IS NULL OR l_gl_transfer_mode NOT IN ('D','S')) THEN
1930     get_ledger_options(p_application_id, l_info.ledger_id, l_gl_transfer_mode);
1931   END IF;
1932 
1933   calculate_amounts
1934 	(p_entered_dr		=> p_entered_dr
1935 	,p_entered_cr		=> p_entered_cr
1936    	,p_currency_code	=> p_currency_code
1937 	,p_functional_curr	=> l_funct_curr
1938 	,p_rounding_rule_code   => l_rounding_rule_code
1939    	,p_accounted_dr		=> p_accounted_dr
1940    	,p_accounted_cr		=> p_accounted_cr
1941    	,p_unrounded_entered_cr	=> l_unrounded_entered_cr
1942    	,p_unrounded_entered_dr	=> l_unrounded_entered_dr
1943    	,p_unrounded_accted_cr	=> l_unrounded_accted_cr
1944    	,p_unrounded_accted_dr	=> l_unrounded_accted_dr
1945    	,p_conv_type		=> p_conversion_type
1946    	,p_conv_date		=> p_conversion_date
1947    	,p_conv_rate		=> p_conversion_rate);
1948 
1949   -- Done Validation
1950 
1951   IF (l_info.status_code = C_AE_STATUS_INVALID) THEN
1952     IF (NOT clear_errors(l_info.event_id, p_ae_header_id, p_ae_line_num)) THEN
1953       l_status_code := C_AE_STATUS_INVALID;
1954     END IF;
1955   END IF;
1956 
1957   --
1958   -- If the entry was a draft entry, undo draft
1959   --
1960   undo_draft_entry(l_info);
1961 
1962   --
1963   -- For the case reversed entries are updated
1964   --
1965   -- For reversal entries:
1966   --   ref_ae_header id <> p_ae_header_id
1967   --   temp_line_num = -1 * p_ae_line_num
1968   --
1969   -- For Non-reversal entries:
1970   --   ref_ae_header_id = p_ae_header_id
1971   --   temp_line_num = p_ae_line_num
1972   --
1973   l_temp_line_num := p_ae_line_num;
1974 
1975   get_rev_line_info
1976     (p_application_id   => p_application_id
1977     ,p_ae_header_id     => p_ae_header_id
1978     ,p_temp_line_num    => l_temp_line_num
1979     ,p_ref_ae_header_id => l_ref_ae_header_id
1980     ,p_ref_event_id     => l_dummy);
1981 
1982   update_distribution_link
1983     (p_application_id           => p_application_id
1984     ,p_ae_header_id             => p_ae_header_id
1985     ,p_ref_ae_header_id         => l_ref_ae_header_id
1986     ,p_temp_line_num            => l_temp_line_num
1987     ,p_unrounded_entered_dr     => l_unrounded_entered_dr
1988     ,p_unrounded_entered_cr     => l_unrounded_entered_cr
1989     ,p_unrounded_accounted_dr   => l_unrounded_accted_dr
1990     ,p_undournde_accounted_cr   => l_unrounded_accted_cr
1991     ,p_statistical_amount       => p_statistical_amount);
1992 
1993   --
1994   -- Update journal entry line with modified information
1995   --
1996   UPDATE xla_ae_lines
1997     SET	 code_combination_id	= p_code_combination_id
1998 	,displayed_line_number 	= p_displayed_line_number
1999       	,gl_transfer_mode_code	= l_gl_transfer_mode
2000    	,party_id		= p_party_id
2001    	,party_site_id		= p_party_site_id
2002    	,party_type_code	= p_party_type_code
2003    	,entered_dr		= p_entered_dr
2004    	,entered_cr		= p_entered_cr
2005    	,unrounded_entered_dr	= l_unrounded_entered_dr
2006    	,unrounded_entered_cr	= l_unrounded_entered_cr
2007    	,accounted_dr		= p_accounted_dr
2008    	,accounted_cr		= p_accounted_cr
2009    	,unrounded_accounted_dr	= l_unrounded_accted_dr
2010    	,unrounded_accounted_cr	= l_unrounded_accted_cr
2011    	,description		= p_description
2012  	,accounting_class_code	= p_accounting_class_code
2013    	,statistical_amount	= p_statistical_amount
2014 	,currency_code		= p_currency_code
2015    	,currency_conversion_type = p_conversion_type
2016    	,currency_conversion_date = p_conversion_date
2017    	,currency_conversion_rate = p_conversion_rate
2018    	,jgzz_recon_ref 	= p_jgzz_recon_ref
2019 	,attribute_category	= p_attribute_category
2020         ,encumbrance_type_id = l_encumbrance_type_id
2021 	,attribute1		= p_attribute1
2022 	,attribute2		= p_attribute2
2023 	,attribute3		= p_attribute3
2024 	,attribute4		= p_attribute4
2025 	,attribute5		= p_attribute5
2026 	,attribute6		= p_attribute6
2027 	,attribute7		= p_attribute7
2028 	,attribute8		= p_attribute8
2029 	,attribute9		= p_attribute9
2030 	,attribute10		= p_attribute10
2031 	,attribute11		= p_attribute11
2032 	,attribute12		= p_attribute12
2033 	,attribute13		= p_attribute13
2034 	,attribute14		= p_attribute14
2035 	,attribute15		= p_attribute15
2036 	,ledger_id	        = l_info.ledger_id
2037 	,accounting_date	= l_info.gl_date
2038    	,last_update_date	= sysdate
2039    	,last_updated_by	= nvl(xla_environment_pkg.g_usr_id,-1)
2040    	,last_update_login	= nvl(xla_environment_pkg.g_login_id,-1)
2041     WHERE	ae_header_id	= p_ae_header_id
2042       AND	ae_line_num	= p_ae_line_num
2043       AND	application_id	= p_application_id
2044      RETURNING 	 last_update_date
2045 	    	,last_updated_by
2046 	    	,last_update_login
2047 	INTO	 p_last_update_date
2048 		,p_last_updated_by
2049 		,p_last_update_login;
2050 
2051   IF (l_ccid_old <> p_code_combination_id) THEN
2052     get_ledger_info(l_info.ledger_id, p_application_id, p_code_combination_id, l_funct_curr, l_rounding_rule_code, l_bal_seg_old, l_mgt_seg_old);
2053 
2054     IF (l_bal_seg IS NULL) THEN
2055       update_segment_values(p_ae_header_id, C_SEG_BALANCING, l_bal_seg_old, C_ACTION_DEL);
2056     ELSIF (l_bal_seg <> l_bal_seg_old) THEN
2057       update_segment_values(p_ae_header_id, C_SEG_BALANCING, l_bal_seg_old, C_ACTION_DEL);
2058       update_segment_values(p_ae_header_id, C_SEG_BALANCING, l_bal_seg, C_ACTION_ADD);
2059     END IF;
2060 
2061     IF (l_mgt_seg IS NULL) THEN
2062       update_segment_values(p_ae_header_id, C_SEG_MANAGEMENT, l_mgt_seg_old, C_ACTION_DEL);
2063     ELSIF (l_mgt_seg <> l_mgt_seg_old) THEN
2064       update_segment_values(p_ae_header_id, C_SEG_MANAGEMENT, l_mgt_seg_old, C_ACTION_DEL);
2065       update_segment_values(p_ae_header_id, C_SEG_MANAGEMENT, l_mgt_seg, C_ACTION_ADD);
2066     END IF;
2067   END IF;
2068 
2069   IF (l_info.status_code <> l_status_code) THEN
2070     UPDATE xla_ae_headers
2071       set 	accounting_entry_status_code 	= l_status_code
2072       WHERE	ae_header_id	= p_ae_header_id
2073         AND	application_id	= l_info.application_id;
2074   END IF;
2075 
2076   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2077     trace(p_msg    => 'END of procedure update_journal_entry_line',
2078           p_module => l_log_module,
2079           p_level  => C_LEVEL_PROCEDURE);
2080   END IF;
2081 
2082 EXCEPTION
2083 WHEN xla_exceptions_pkg.application_exception THEN
2084   IF (c_line%ISOPEN) THEN
2085     CLOSE c_line;
2086   END IF;
2087   RAISE;
2088 WHEN OTHERS                                   THEN
2089   IF (c_line%ISOPEN) THEN
2090     CLOSE c_line;
2091   END IF;
2092   xla_exceptions_pkg.raise_message
2093     (p_location => 'xla_journal_entries_pkg.update_journal_entry_line');
2094 
2095 END update_journal_entry_line;
2096 
2097 
2098 --=============================================================================
2099 --
2100 -- Name: delete_journal_entry_line
2101 -- Description: Delete a journal entry line.
2102 --
2103 --=============================================================================
2104 PROCEDURE delete_journal_entry_line
2105   (p_ae_header_id               IN  INTEGER
2106   ,p_ae_line_num             	IN  INTEGER
2107   ,p_application_id		IN  INTEGER
2108   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
2109 IS
2110 
2111   l_info                t_je_info;
2112   l_bal_seg             INTEGER;
2113   l_mgt_seg             INTEGER;
2114   l_status_code	        VARCHAR2(30) := C_AE_STATUS_INCOMPLETE;
2115   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
2116 
2117   l_log_module          VARCHAR2(240);
2118 BEGIN
2119   IF g_log_enabled THEN
2120     l_log_module := C_DEFAULT_MODULE||'.delete_journal_entry_line';
2121   END IF;
2122 
2123   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2124     trace(p_msg    => 'BEGIN of procedure delete_journal_entry_line',
2125           p_module => l_log_module,
2126           p_level  => C_LEVEL_PROCEDURE);
2127   END IF;
2128 
2129   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
2130 
2131   --
2132   -- Validation where exception will be throw
2133   --
2134   validate_line_number(p_ae_header_id, p_ae_line_num, p_application_id, p_msg_mode);
2135   validate_ae_type_code(l_info.type_code, p_msg_mode);
2136   validate_ae_status_code(l_info.status_code, p_msg_mode);
2137   -- Done validation
2138 
2139   --
2140   -- If the entry was a draft entry, undo draft
2141   --
2142   undo_draft_entry(l_info);
2143 
2144   IF (l_info.status_code <> l_status_code) THEN
2145     UPDATE xla_ae_headers
2146       set 	accounting_entry_status_code 	= l_status_code
2147       WHERE	ae_header_id	= p_ae_header_id
2148       AND	application_id	= p_application_id;
2149   END IF;
2150 
2151   IF (NOT xla_analytical_criteria_pkg.single_update_detail_value
2152 	(p_application_id		=> p_application_id
2153 	,p_ae_header_id			=> p_ae_header_id
2154 	,p_ae_line_num			=> p_ae_line_num
2155 	,p_analytical_detail_value_id	=> NULL
2156 	,p_anacri_code			=> NULL
2157 	,p_anacri_type_code		=> NULL
2158 	,p_amb_context_code		=> NULL
2159 	,p_update_mode			=> 'D')) THEN
2160     ROLLBACK to SAVEPOINT DELETE_JOURNAL_ENTRY;
2161 
2162     xla_exceptions_pkg.raise_message
2163          (p_appli_s_name        => 'XLA'
2164          ,p_msg_name            => 'XLA_COMMON_INTERNAL_ERROR'
2165          ,p_token_1            	=> 'MESSAGE'
2166          ,p_value_1            	=> 'Error in xla_analytical_criteria_pkg.single_update_detail_value'
2167          ,p_token_2            	=> 'LOCATION'
2168          ,p_value_2            	=> 'XLA_JOURNAL_ENTRIES_PKG.delete_journal_entry'
2169          ,p_msg_mode            => p_msg_mode);
2170   END IF;
2171 
2172   delete_distribution_link
2173     (p_application_id           => p_application_id
2174     ,p_ae_header_id             => p_ae_header_id
2175     ,p_ref_ae_header_id         => p_ae_header_id
2176     ,p_temp_line_num            => p_ae_line_num);
2177 
2178   DELETE xla_ae_lines
2179 	WHERE ae_header_id = p_ae_header_id
2180 	  AND ae_line_num = p_ae_line_num
2181 	  AND application_id = p_application_id;
2182 
2183   update_segment_values(p_ae_header_id, C_SEG_BALANCING, l_bal_seg, C_ACTION_DEL);
2184   update_segment_values(p_ae_header_id, C_SEG_MANAGEMENT, l_mgt_seg, C_ACTION_DEL);
2185 
2186   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2187     trace(p_msg    => 'END of procedure delete_journal_entry_line',
2188           p_module => l_log_module,
2189           p_level  => C_LEVEL_PROCEDURE);
2190   END IF;
2191 
2192 EXCEPTION
2193 WHEN xla_exceptions_pkg.application_exception THEN
2194   ROLLBACK;
2195   RAISE;
2196 
2197 WHEN OTHERS                                   THEN
2198   ROLLBACK;
2199   xla_exceptions_pkg.raise_message
2200       (p_location => 'xla_journal_entries_pkg.delete_journal_entry_line');
2201 
2202 END delete_journal_entry_line;
2203 
2204 
2205 --=============================================================================
2206 --
2207 -- Name: complete_journal_entry
2208 -- Description: Complete a journal entry.
2209 --
2210 --=============================================================================
2211 PROCEDURE complete_journal_entry
2212   (p_ae_header_id               IN  INTEGER
2213   ,p_application_id             IN  INTEGER
2214   ,p_completion_option          IN  VARCHAR2
2215   ,p_functional_curr            IN  VARCHAR2
2216   ,p_je_source_name             IN  VARCHAR2
2217   ,p_ae_status_code             OUT NOCOPY VARCHAR2
2218   ,p_funds_status_code          OUT NOCOPY VARCHAR2
2219   ,p_completion_seq_value       OUT NOCOPY VARCHAR2
2220   ,p_completion_seq_ver_id      OUT NOCOPY INTEGER
2221   ,p_completed_date             OUT NOCOPY DATE
2222   ,p_gl_transfer_status_code    OUT NOCOPY VARCHAR2
2223   ,p_last_update_date           OUT NOCOPY DATE
2224   ,p_last_updated_by            OUT NOCOPY INTEGER
2225   ,p_last_update_login          OUT NOCOPY INTEGER
2226   ,p_transfer_request_id	OUT NOCOPY INTEGER
2227   ,p_retcode                    OUT NOCOPY VARCHAR2
2228   ,p_msg_mode                   IN  VARCHAR2    DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
2229 IS
2230   l_log_module  VARCHAR2(240);
2231 BEGIN
2232   IF g_log_enabled THEN
2233     l_log_module := C_DEFAULT_MODULE||'.complete_journal_entry';
2234   END IF;
2235 
2236   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2237     trace(p_msg    => 'BEGIN of procedure complete_journal_entry',
2238           p_module => l_log_module,
2239           p_level  => C_LEVEL_PROCEDURE);
2240   END IF;
2241 
2242   complete_journal_entry
2243         (p_ae_header_id                 => p_ae_header_id
2244         ,p_application_id               => p_application_id
2245         ,p_completion_option            => p_completion_option
2246         ,p_functional_curr              => p_functional_curr
2247         ,p_je_source_name               => p_je_source_name
2248         ,p_ae_status_code               => p_ae_status_code
2249         ,p_funds_status_code            => p_funds_status_code
2250         ,p_completion_seq_value         => p_completion_seq_value
2251         ,p_completion_seq_ver_id        => p_completion_seq_ver_id
2252         ,p_completed_date               => p_completed_date
2253         ,p_gl_transfer_status_code      => p_gl_transfer_status_code
2254         ,p_last_update_date             => p_last_update_date
2255         ,p_last_updated_by              => p_last_updated_by
2256         ,p_last_update_login            => p_last_update_login
2257         ,p_transfer_request_id          => p_transfer_request_id
2258         ,p_retcode                      => p_retcode
2259         ,p_rev_flag                     => 'N'
2260         ,p_rev_method                   => 'N'
2261         ,p_rev_orig_event_id            => -1
2262         ,p_msg_mode                     => p_msg_mode);
2263 
2264   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2265     trace(p_msg    => 'END of procedure complete_journal_entry',
2266           p_module => l_log_module,
2267           p_level  => C_LEVEL_PROCEDURE);
2268   END IF;
2269 
2270 EXCEPTION
2271 WHEN xla_exceptions_pkg.application_exception THEN
2272   ROLLBACK;
2273   RAISE;
2274 
2275 WHEN OTHERS                                   THEN
2276   ROLLBACK;
2277   xla_exceptions_pkg.raise_message
2278       (p_location => 'xla_journal_entries_pkg.complete_journal_entry');
2279 
2280 END complete_journal_entry;
2281 
2282 --=============================================================================
2283 --
2284 -- Name: complete_journal_entry
2285 -- Description: Complete a journal entry.
2286 --
2287 --=============================================================================
2288 PROCEDURE complete_journal_entry
2289   (p_ae_header_id               IN  INTEGER
2290   ,p_application_id             IN  INTEGER
2291   ,p_completion_option          IN  VARCHAR2
2292   ,p_functional_curr            IN  VARCHAR2
2293   ,p_je_source_name             IN  VARCHAR2
2294   ,p_ae_status_code             OUT NOCOPY VARCHAR2
2295   ,p_funds_status_code          OUT NOCOPY VARCHAR2
2296   ,p_completion_seq_value       OUT NOCOPY VARCHAR2
2297   ,p_completion_seq_ver_id      OUT NOCOPY INTEGER
2298   ,p_completed_date             OUT NOCOPY DATE
2299   ,p_gl_transfer_status_code    OUT NOCOPY VARCHAR2
2300   ,p_last_update_date           OUT NOCOPY DATE
2301   ,p_last_updated_by            OUT NOCOPY INTEGER
2302   ,p_last_update_login          OUT NOCOPY INTEGER
2303   ,p_transfer_request_id        OUT NOCOPY INTEGER
2304   ,p_retcode                    OUT NOCOPY VARCHAR2
2305   ,p_msg_mode                   IN  VARCHAR2    DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE
2306   ,p_rev_flag                   IN  VARCHAR2 DEFAULT 'N'
2307   ,p_rev_method                 IN  VARCHAR2 DEFAULT 'N'
2308   ,p_rev_orig_event_id          IN  NUMBER DEFAULT -1)
2309 IS
2310 
2311   l_info                t_je_info;
2312   l_ae_header_ids       xla_je_validation_pkg.t_array_int;
2313   l_ledger_ids          xla_je_validation_pkg.t_array_int;
2314   l_status_codes        xla_je_validation_pkg.t_array_varchar;
2315   l_seq_values          t_array_int;
2316   l_seq_version_ids     t_array_int;
2317   l_seq_assign_ids      t_array_int;
2318   l_orig_status_code    VARCHAR2(30);
2319   l_bal_update_mode     VARCHAR2(30) := NULL;
2320   l_result              INTEGER := 0;
2321   l_status_code         VARCHAR2(3) := NULL;
2322 
2323   l_log_module  VARCHAR2(240);
2324 BEGIN
2325   IF g_log_enabled THEN
2326     l_log_module := C_DEFAULT_MODULE||'.complete_journal_entry';
2327   END IF;
2328 
2329   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2330     trace(p_msg    => 'BEGIN of procedure complete_journal_entry',
2331           p_module => l_log_module,
2332           p_level  => C_LEVEL_PROCEDURE);
2333   END IF;
2334 
2335   p_retcode := C_COMPLETION_SUCCESS;
2336 
2337   reorder_line_number
2338   	(p_application_id	=> p_application_id
2339   	,p_ae_header_id		=> p_ae_header_id);
2340 
2341   -----------------------------------------------------------------------------
2342   -- Validation
2343   --
2344   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
2345   l_orig_status_code  := l_info.status_code;
2346   l_ledger_ids(1)     := l_info.ledger_id;
2347   l_ae_header_ids(1)  := p_ae_header_id;
2348 
2349   IF (l_orig_status_code = C_AE_STATUS_INVALID) THEN
2350     DELETE FROM xla_ae_lines
2351           WHERE application_id = p_application_id
2352             AND ae_header_id   = p_ae_header_id
2353             AND accounting_class_code IN ('ROUNDING', 'BALANCE', 'INTRA', 'INTER');
2354 
2355     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2356       trace(p_msg    => '# balancing line deleted = '||SQL%ROWCOUNT,
2357             p_module => l_log_module,
2358             p_level  => C_LEVEL_STATEMENT);
2359     END IF;
2360   END IF;
2361 
2362   xla_accounting_err_pkg.initialize
2363        (p_application_id          => p_application_id);
2364 
2365   validate_ae_type_code(l_info.type_code, p_msg_mode);
2366   validate_ae_status_code(l_orig_status_code, p_msg_mode);
2367 
2368   l_result := validate_completion_action
2369 	(p_entity_id		=> l_info.entity_id
2370 	,p_event_id		=> l_info.event_id
2371 	,p_ledger_id		=> l_info.ledger_id
2372 	,p_ae_header_id		=> p_ae_header_id
2373    	,p_completion_option 	=> p_completion_option);
2374 
2375   l_result := l_result + validate_description
2376   	(p_entity_id		=> l_info.entity_id
2377   	,p_event_id		=> l_info.event_id
2378   	,p_ledger_id		=> l_info.ledger_id
2379   	,p_ae_header_id		=> p_ae_header_id
2380   	,p_description  	=> l_info.description);
2381 
2382   l_result := l_result + validate_legal_entity_id
2383   	(p_entity_id		=> l_info.entity_id
2384   	,p_event_id		=> l_info.event_id
2385   	,p_ledger_id		=> l_info.ledger_id
2386   	,p_ae_header_id		=> p_ae_header_id
2387   	,p_legal_entity_id  	=> l_info.legal_entity_id);
2388 
2389   l_result := l_result + validate_line_counts
2390   	(p_entity_id		=> l_info.entity_id
2391   	,p_event_id		=> l_info.event_id
2392   	,p_ledger_id		=> l_info.ledger_id
2393   	,p_ae_header_id		=> p_ae_header_id
2394   	,p_application_id  	=> p_application_id
2395         ,p_balance_type_code    => l_info.balance_type_code);
2396 
2397   l_result := l_result + validate_amounts
2398 	(p_entity_id		=> l_info.entity_id
2399    	,p_event_id		=> l_info.event_id
2400 	,p_ledger_id		=> l_info.ledger_id
2401 	,p_ae_header_id		=> p_ae_header_id
2402 	,p_application_id	=> p_application_id
2403   	,p_functional_curr	=> p_functional_curr);
2404   -----------------------------------------------------------------------------
2405   -- Determine the status code of the journal entry
2406   --
2407   IF (l_result > 0) THEN
2408     p_retcode := C_COMPLETION_FAILED;
2409     l_status_codes(1) := C_AE_STATUS_INVALID;
2410   ELSIF (p_completion_option = C_COMPLETION_OPTION_DRAFT) THEN
2411     l_status_codes(1) := C_AE_STATUS_DRAFT;
2412   ELSE
2413     l_status_codes(1) := C_AE_STATUS_FINAL;
2414     p_completed_date := sysdate;
2415   END IF;
2416 
2417   -----------------------------------------------------------------------------
2418   -- Delete previously created entry for alternative currency ledger
2419   -- and re-create.  Does not apply to Budget entries.
2420   --
2421   IF (l_info.balance_type_code <> 'B') THEN
2422 
2423     delete_mrc_entries
2424                    (p_event_id             => l_info.event_id
2425                    ,p_application_id       => l_info.application_id
2426                    ,p_ledger_id            => l_info.ledger_id);
2427 
2428     IF (p_retcode = C_COMPLETION_SUCCESS) THEN
2429       IF(p_rev_flag = 'Y') THEN
2430         create_mrc_reversal_entry
2431                       (p_info                => l_info
2432                       ,p_reversal_method     => p_rev_method
2433                       ,p_orig_event_id       => p_rev_orig_event_id
2434                       ,p_ledger_ids          => l_ledger_ids
2435                       ,p_rev_ae_header_ids   => l_ae_header_ids
2436                       ,p_rev_status_codes    => l_status_codes);
2437       ELSE
2438         p_retcode := create_mrc_entries
2439                       (p_info            => l_info
2440                       ,p_je_source_name  => p_je_source_name
2441                       ,p_ledger_ids      => l_ledger_ids
2442                       ,p_ae_header_ids   => l_ae_header_ids
2443                       ,p_status_codes    => l_status_codes);
2444       END IF;
2445     END IF;
2446   END IF;
2447 
2448   -----------------------------------------------------------------------------
2449   -- Perform more validation and balance entries
2450   l_result := xla_je_validation_pkg.balance_manual_entry
2451 	(p_application_id	=> l_info.application_id
2452         ,p_balance_flag         => CASE WHEN p_retcode = C_COMPLETION_SUCCESS
2453                                         THEN TRUE
2454                                         ELSE FALSE END
2455         ,p_ledger_ids           => l_ledger_ids
2456         ,p_end_date             => l_info.gl_date      -- 4262811
2457         ,p_ae_header_ids        => l_ae_header_ids
2458         ,p_status_codes         => l_status_codes
2459         ,p_accounting_mode      => CASE WHEN p_completion_option = C_COMPLETION_OPTION_DRAFT
2460                                         THEN 'D'
2461                                         ELSE 'F' END);
2462 
2463   IF (l_result > 0) THEN
2464     p_retcode := C_COMPLETION_FAILED;
2465   END IF;
2466 
2467   SAVEPOINT BEFORE_RESERVE_FUNDS;
2468 
2469   -----------------------------------------------------------------------------
2470   -- Reserve funds
2471   IF (p_retcode = C_COMPLETION_SUCCESS AND
2472       p_completion_option <> C_COMPLETION_OPTION_DRAFT) THEN
2473     p_retcode := reserve_funds(p_info     => l_info
2474                               ,p_msg_mode => p_msg_mode);
2475     IF (p_retcode = C_COMPLETION_FAILED) THEN
2476       l_status_codes(1) := C_AE_STATUS_INVALID;
2477     END IF;
2478   END IF;
2479 
2480   -----------------------------------------------------------------------------
2481   -- Populate sequence numbers
2482   --
2483   IF (p_retcode = C_COMPLETION_SUCCESS AND
2484       p_completion_option <> C_COMPLETION_OPTION_DRAFT) THEN
2485     p_retcode := populate_sequence_numbers
2486                         (p_info                 => l_info
2487                         ,p_je_source_name       => p_je_source_name
2488                         ,p_completed_date       => p_completed_date
2489                         ,p_ledger_ids           => l_ledger_ids
2490                         ,p_ae_header_ids        => l_ae_header_ids
2491                         ,p_status_codes         => l_status_codes
2492                         ,p_seq_version_ids      => l_seq_version_ids
2493                         ,p_seq_values           => l_seq_values
2494                         ,p_seq_assign_ids       => l_seq_assign_ids);
2495 
2496   END IF;
2497 
2498   IF (p_retcode = C_COMPLETION_FAILED) THEN
2499     ROLLBACK TO SAVEPOINT BEFORE_RESERVE_FUNDS;
2500   END IF;
2501 
2502   IF (p_retcode = C_COMPLETION_FAILED OR
2503       p_completion_option = C_COMPLETION_OPTION_DRAFT) THEN
2504     FOR i IN 1..l_ae_header_ids.COUNT LOOP
2505       l_seq_values(i)       := -1;
2506       l_seq_version_ids(i)  := -1;
2507       l_seq_assign_ids(i)   := -1;
2508     END LOOP;
2509   END IF;
2510 
2511   --
2512   -- Clear the error table for the journal entry
2513   --
2514   DELETE FROM xla_accounting_errors WHERE event_id = l_info.event_id;
2515 
2516   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2517     trace(p_msg    => 'p_retcode = '||p_retcode,
2518           p_module => l_log_module,
2519           p_level  => C_LEVEL_STATEMENT);
2520   END IF;
2521 
2522   IF (p_retcode = C_COMPLETION_SUCCESS) THEN
2523     p_funds_status_code := l_info.funds_status_code;
2524     p_completion_seq_value := l_seq_values(1);
2525     p_completion_seq_ver_id := l_seq_version_ids(1);
2526     p_ae_status_code := l_status_codes(1);
2527   ELSE
2528     p_completed_date := NULL;
2529     p_funds_status_code := NULL;
2530 
2531     FOR i IN 1 .. l_ae_header_ids.COUNT LOOP
2532       IF (l_status_codes(i) <> C_AE_STATUS_INVALID) THEN
2533         l_status_codes(i) := C_AE_STATUS_RELATED;
2534         xla_accounting_err_pkg.build_message(
2535              p_appli_s_name         => 'XLA'
2536             ,p_msg_name             => 'XLA_AP_RELATED_INVALID_JE'
2537             ,p_entity_id            => l_info.entity_id
2538             ,p_event_id             => l_info.event_id
2539             ,p_ledger_id            => l_ledger_ids(i)
2540             ,p_ae_header_id         => l_ae_header_ids(i)
2541             ,p_ae_line_num          => NULL
2542             ,p_accounting_batch_id  => NULL);
2543       END IF;
2544     END LOOP;
2545 
2546     xla_accounting_err_pkg.insert_errors;
2547   END IF;
2548 
2549   p_last_update_date  := sysdate;
2550   p_last_updated_by   := nvl(xla_environment_pkg.g_usr_id,-1);
2551   p_last_update_login := nvl(xla_environment_pkg.g_login_id,-1);
2552   IF (l_info.type_code = C_TYPE_UPGRADE) THEN
2553     p_gl_transfer_status_code := C_GL_TRANSFER_MODE_SELECTED;
2554   ELSE
2555     p_gl_transfer_status_code := C_GL_TRANSFER_MODE_NO;
2556   END IF;
2557 
2558   --
2559   -- Update journal entry header
2560   --
2561   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2562     trace(p_msg    => 'Update header entry headers',
2563           p_module => l_log_module,
2564           p_level  => C_LEVEL_STATEMENT);
2565 
2566     FOR i IN 1 .. l_ae_header_ids.COUNT LOOP
2567       trace(p_msg    => 'ae_header_id = '||l_ae_header_ids(i),
2568             p_module => l_log_module,
2569             p_level  => C_LEVEL_STATEMENT);
2570       trace(p_msg    => 'status_code = '||l_status_codes(i),
2571             p_module => l_log_module,
2572             p_level  => C_LEVEL_STATEMENT);
2573       trace(p_msg    => 'seq_value = '||l_seq_values(i),
2574             p_module => l_log_module,
2575             p_level  => C_LEVEL_STATEMENT);
2576       trace(p_msg    => 'seq_version_id = '||l_seq_version_ids(i),
2577             p_module => l_log_module,
2578             p_level  => C_LEVEL_STATEMENT);
2579       trace(p_msg    => 'seq_assign_id = '||l_seq_assign_ids(i),
2580             p_module => l_log_module,
2581             p_level  => C_LEVEL_STATEMENT);
2582     END LOOP;
2583   END IF;
2584 
2585 
2586   FORALL i IN 1 .. l_ae_header_ids.COUNT
2587     UPDATE xla_ae_headers
2588        SET accounting_entry_status_code   = l_status_codes(i)
2589           ,funds_status_code              = p_funds_status_code
2590  	  ,completion_acct_seq_value      = DECODE(l_seq_values(i),-1,NULL,l_seq_values(i))
2591  	  ,completion_acct_seq_version_id = DECODE(l_seq_version_ids(i),-1,NULL,l_seq_version_ids(i))
2592 	  ,completion_acct_seq_assign_id  = DECODE(l_seq_assign_ids(i),-1,NULL,l_seq_assign_ids(i))
2593 	  ,completed_date                 = p_completed_date
2594 	  ,packet_id                      = l_info.packet_id
2595 	  ,gl_transfer_status_code        = p_gl_transfer_status_code
2596           ,last_update_date               = p_last_update_date
2597           ,last_updated_by                = p_last_updated_by
2598           ,last_update_login              = p_last_update_login
2599      WHERE ae_header_id                   = l_ae_header_ids(i)
2600        AND application_id                 = p_application_id;
2601 
2602 
2603   -- Fix bug 5074662 - populate gl_sl_link_id if JE is completed in Final mode
2604   IF ((p_completion_option = C_COMPLETION_OPTION_FINAL) OR
2605       (p_completion_option = C_COMPLETION_OPTION_POST)) THEN
2606     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2607       trace(p_msg    => 'p_completion_option = FINAL - Update gl_sl_link_id',
2608             p_module => l_log_module,
2609             p_level  => C_LEVEL_STATEMENT);
2610     END IF;
2611 
2612 
2613 
2614     FORALL i IN 1 .. l_ae_header_ids.COUNT
2615       UPDATE xla_ae_lines
2616          SET gl_sl_link_id                = XLA_GL_SL_LINK_ID_S.nextval
2617             ,last_update_date             = p_last_update_date
2618             ,last_updated_by              = p_last_updated_by
2619             ,last_update_login            = p_last_update_login
2620        WHERE ae_header_id                 = l_ae_header_ids(i)
2621          AND application_id               = p_application_id
2622 	 AND gl_sl_link_id    IS NULL;
2623   END IF;
2624 
2625   --
2626   -- Call balancing routine
2627   --
2628   IF (p_retcode = C_COMPLETION_FAILED) THEN
2629     l_bal_update_mode := C_BALANCE_DELETE;
2630   ELSIF (l_orig_status_code = C_AE_STATUS_DRAFT AND
2631          p_completion_option = C_COMPLETION_OPTION_FINAL) THEN
2632     l_bal_update_mode := C_BALANCE_D_TO_F;
2633   ELSIF (l_orig_status_code <> C_AE_STATUS_DRAFT or
2634 	 p_completion_option <> C_COMPLETION_OPTION_DRAFT) THEN
2635     l_bal_update_mode := C_BALANCE_ADD;
2636   ELSE
2637     l_bal_update_mode := NULL;
2638   END IF;
2639 
2640   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2641     trace(p_msg    => 'l_bal_update_mode:'||l_bal_update_mode,
2642           p_module => l_log_module,
2643           p_level  => C_LEVEL_STATEMENT);
2644   END IF;
2645 
2646 
2647 
2648   IF (l_bal_update_mode IS NOT NULL) THEN
2649     --FORALL i IN 1 .. l_ae_header_ids.COUNT
2650       UPDATE xla_ae_lines l
2651          SET control_balance_flag =
2652                   (SELECT DECODE(l.accounting_class_code,
2653                                  'INTER', NULL,
2654                                  'INTRA', NULL,
2655                                  DECODE(NVL(ccid.reference3,'N'),'N',NULL,
2656                                         DECODE(ccid.account_type, 'A', 'P'
2657                                                                 , 'L', 'P'
2658                                                                 , 'O', 'P'
2659                                                                 , NULL)))
2660                      FROM gl_code_combinations   ccid
2661                     WHERE ccid.code_combination_id = l.code_combination_id)
2662             ,analytical_balance_flag =
2663                   (SELECT DECODE(count(1),0,NULL,'P')
2664                      FROM xla_ae_line_acs ac
2665                     WHERE ac.ae_header_id(+) = l.ae_header_id
2666                       AND ac.ae_line_num(+)  = l.ae_line_num)
2667             ,last_update_date                 = p_last_update_date
2668             ,last_updated_by                  = p_last_updated_by
2669             ,last_update_login                = p_last_update_login
2670        WHERE l.application_id = p_application_id
2671          AND l.ae_header_id  = p_ae_header_id;
2672 
2673 
2674     IF (NOT xla_balances_pkg.massive_update
2675 	  		(p_application_id 	=> l_info.application_id
2676 	  		,p_ledger_id		=> NULL
2677 			,p_entity_id		=> l_info.entity_id
2678    	  		,p_event_id		=> NULL
2679 			,p_request_id		=> NULL
2680 	  		,p_accounting_batch_id	=> NULL
2681    	  		,p_update_mode		=> l_bal_update_mode
2682 	  		,p_execution_mode	=> C_BALANCE_ONLINE)) THEN
2683 
2684       xla_exceptions_pkg.raise_message
2685           (p_appli_s_name	=> 'XLA'
2686           ,p_msg_name		=> 'XLA_INTERNAL_ERROR'
2687           ,p_token_1            => 'MESSAGE'
2688           ,p_value_1            => 'Error in balance calculation'
2689           ,p_token_2            => 'LOCATION'
2690           ,p_value_2            => 'XLA_JOURNAL_ENTRIES_PKG.delete_journal_entries'
2691 	  ,p_msg_mode		=> xla_exceptions_pkg.C_STANDARD_MESSAGE);
2692     END IF;
2693   END IF;
2694 
2695   IF (p_retcode = C_COMPLETION_SUCCESS) THEN
2696 
2697     --
2698     -- Update event status to 'Processed'
2699     --
2700 
2701  /* Bug 7011889 - Call the update event status only if Reversal event id is not NULL and if it
2702                   is not already updated */
2703 
2704  IF g_rev_event_id IS NOT NULL THEN
2705 
2706     SELECT event_status_code
2707     INTO l_status_code
2708     FROM xla_events
2709     WHERE event_id = g_rev_event_id
2710     AND application_id = p_application_id;
2711 
2712   IF l_status_code <>'P' THEN
2713 
2714        update_event_status
2715            (p_info                  => l_info
2716            ,p_completion_option     => p_completion_option);
2717     ELSE
2718        IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2719           trace(p_msg    => 'Event id is already processed',
2720           p_module => l_log_module,
2721           p_level  => C_LEVEL_STATEMENT);
2722        END IF;
2723     END IF;
2724 END IF;
2725     --
2726     -- Transfer to GL
2727     --
2728    transfer_to_gl
2729            (p_info                  => l_info
2730            ,p_application_id        => p_application_id
2731            ,p_completion_option     => p_completion_option
2732            ,p_transfer_request_id   => p_transfer_request_id);
2733 
2734 
2735   END IF;
2736 
2737   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2738     trace(p_msg    => 'END of procedure complete_journal_entry',
2739           p_module => l_log_module,
2740           p_level  => C_LEVEL_PROCEDURE);
2741   END IF;
2742 EXCEPTION
2743 WHEN xla_exceptions_pkg.application_exception THEN
2744   ROLLBACK;
2745   RAISE;
2746 WHEN OTHERS THEN
2747   ROLLBACK;
2748   xla_exceptions_pkg.raise_message
2749       (p_location => 'xla_journal_entries_pkg.complete_journal_entry');
2750 
2751 END complete_journal_entry;
2752 
2753 
2754 --===============================================================================
2755 -- Overloading Reverse Journal Entry with INTEGER for regular calls without array
2756 -- Changed as part of Encumbarance DFIX API
2757 --===============================================================================
2758 --=============================================================================
2759 --
2760 -- Name: reverse_journal_entry
2761 -- Description: Reverse a journal entry.
2762 -- Bug 7011889 - Modified to handle array of header ids instead of variable
2763 --=============================================================================
2764 
2765 /* Bug 7011889 - Modified to handle array of header ids instead of variable */
2766 
2767 
2768 PROCEDURE reverse_journal_entry
2769   (p_array_je_header_id         IN  xla_je_validation_pkg.t_array_int
2770   ,p_application_id		IN  INTEGER
2771   ,p_reversal_method            IN  VARCHAR2
2772   ,p_gl_date                    IN  DATE
2773   ,p_completion_option          IN  VARCHAR2
2774   ,p_functional_curr		IN  VARCHAR2
2775   ,p_je_source_name		IN  VARCHAR2
2776   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE
2777   ,p_rev_header_id		OUT NOCOPY INTEGER
2778   ,p_rev_event_id		OUT NOCOPY INTEGER
2779   ,p_completion_retcode         OUT NOCOPY VARCHAR2
2780   ,p_transfer_request_id	OUT NOCOPY INTEGER)
2781 IS
2782   l_info		t_je_info;
2783   l_period_name		VARCHAR2(30);
2784   l_result		INTEGER;
2785 
2786   l_ae_status_code             VARCHAR2(30);
2787   l_funds_status_code          VARCHAR2(30);
2788   l_completion_seq_value       VARCHAR2(240);
2789   l_completion_seq_ver_id      INTEGER;
2790   l_completed_date             DATE;
2791   l_gl_transfer_status_code    VARCHAR2(30);
2792 
2793   l_last_update_date	DATE;
2794   l_last_updated_by	INTEGER;
2795   l_last_update_login	INTEGER;
2796   v_array_header_id     INTEGER;
2797 
2798   l_log_module          VARCHAR2(240);
2799 BEGIN
2800 
2801 /* Bug 7011889 - Assigning global variables to NULL */
2802   g_rev_event_id  :=  NULL;
2803   g_entity_id     :=  NULL;
2804 
2805   IF g_log_enabled THEN
2806     l_log_module := C_DEFAULT_MODULE||'.reverse_journal_entry';
2807   END IF;
2808 
2809   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2810     trace(p_msg    => 'BEGIN of procedure reverse_journal_entry',
2811           p_module => l_log_module,
2812           p_level  => C_LEVEL_PROCEDURE);
2813   END IF;
2814 
2815   fnd_msg_pub.initialize;
2816   --
2817   -- Validation
2818   --
2819 
2820  /* Bug 7011889 - Looping through for all header ids selected for an event for reversal */
2821 
2822   FOR i in p_array_je_header_id.FIRST..p_array_je_header_id.LAST
2823   LOOP
2824   l_info := get_header_info(p_array_je_header_id(i),p_application_id, p_msg_mode);
2825   validate_ae_type_code(l_info.type_code, p_msg_mode);
2826 
2827   l_result := validate_reversal_method
2828 	(p_entity_id		=> l_info.entity_id
2829 	,p_event_id		=> l_info.event_id
2830 	,p_ledger_id		=> l_info.ledger_id
2831    	,p_ae_header_id		=> p_array_je_header_id(i) --p_ae_header_id
2832    	,p_reversal_method	=> p_reversal_method);
2833 
2834   IF (p_completion_option NOT in (C_COMPLETION_OPTION_DRAFT,
2835 				  C_COMPLETION_OPTION_FINAL,
2836 			          C_COMPLETION_OPTION_TRANSFER,
2837 			          C_COMPLETION_OPTION_POST)) THEN
2838     xla_exceptions_pkg.raise_message
2839 	 (p_appli_s_name	=> 'XLA'
2840          ,p_msg_name		=> 'XLA_MJE_INVALID_COMP_OPTION'
2841 	 ,p_msg_mode		=> p_msg_mode);
2842   END IF;
2843 
2844   IF (l_info.status_code <> C_AE_STATUS_FINAL) THEN
2845     xla_exceptions_pkg.raise_message
2846 	 (p_appli_s_name	=> 'XLA'
2847          ,p_msg_name		=> 'XLA_MJE_NO_REV_NON_FINAL'
2848 	 ,p_msg_mode		=> p_msg_mode);
2849   END IF;
2850 
2851   -- Done validation
2852 
2853   --
2854   -- Create reversal journal entry
2855   --
2856   create_reversal_entry
2857   	(p_info			=> l_info
2858   	,p_reversal_method	=> p_reversal_method
2859 	,p_gl_date		=> p_gl_date
2860 	,p_msg_mode		=> p_msg_mode
2861 	,p_rev_header_id	=> p_rev_header_id
2862 	,p_rev_event_id		=> p_rev_event_id);
2863 
2864   --
2865   -- Complete journal entry if requested
2866   --
2867 
2868   IF (p_completion_option <> C_COMPLETION_OPTION_SAVE) THEN
2869     complete_journal_entry
2870 	(p_ae_header_id			=> p_rev_header_id
2871 	,p_application_id		=> l_info.application_id
2872 	,p_completion_option		=> p_completion_option
2873   	,p_functional_curr		=> p_functional_curr
2874   	,p_je_source_name		=> p_je_source_name
2875   	,p_ae_status_code		=> l_ae_status_code
2876   	,p_funds_status_code		=> l_funds_status_code
2877   	,p_completion_seq_value		=> l_completion_seq_value
2878   	,p_completion_seq_ver_id	=> l_completion_seq_ver_id
2879   	,p_completed_date		=> l_completed_date
2880   	,p_gl_transfer_status_code	=> l_gl_transfer_status_code
2881 	,p_last_update_date		=> l_last_update_date
2882 	,p_last_updated_by		=> l_last_updated_by
2883 	,p_last_update_login		=> l_last_update_login
2884 	,p_transfer_request_id		=> p_transfer_request_id
2885   	,p_retcode 			=> p_completion_retcode
2886         ,p_rev_flag                     => 'Y'
2887         ,p_rev_method                   => p_reversal_method
2888         ,p_rev_orig_event_id            => l_info.event_id
2889         ,p_msg_mode                     => p_msg_mode);
2890   END IF;
2891   END LOOP;
2892 
2893   /* Bug 7011889 - End of loop for all header ids selected for an event for reversal */
2894 
2895   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2896     trace(p_msg    => 'END of procedure reverse_journal_entry',
2897           p_module => l_log_module,
2898           p_level  => C_LEVEL_PROCEDURE);
2899   END IF;
2900 
2901 EXCEPTION
2902 WHEN xla_exceptions_pkg.application_exception THEN
2903   ROLLBACK;
2904   RAISE;
2905 
2906 WHEN OTHERS                                   THEN
2907   ROLLBACK;
2908   xla_exceptions_pkg.raise_message
2909       (p_location => 'xla_journal_entries_pkg.reverse_journal_entry');
2910 
2911 END reverse_journal_entry;
2912 
2913 
2914 
2915 --=============================================================================
2916 --
2917 -- Name: reverse_journal_entry
2918 -- Description: Reverse a journal entry.
2919 --
2920 --=============================================================================
2921 
2922 PROCEDURE reverse_journal_entry
2923   (p_ae_header_id               IN  INTEGER
2924   ,p_application_id		IN  INTEGER
2925   ,p_reversal_method            IN  VARCHAR2
2926   ,p_gl_date                    IN  DATE
2927   ,p_completion_option          IN  VARCHAR2
2928   ,p_functional_curr		IN  VARCHAR2
2929   ,p_je_source_name		IN  VARCHAR2
2930   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE
2931   ,p_rev_header_id		OUT NOCOPY INTEGER
2932   ,p_rev_event_id		OUT NOCOPY INTEGER
2933   ,p_completion_retcode         OUT NOCOPY VARCHAR2
2934   ,p_transfer_request_id	OUT NOCOPY INTEGER)
2935 IS
2936   l_info		t_je_info;
2937   l_period_name		VARCHAR2(30);
2938   l_result		INTEGER;
2939 
2940   l_ae_status_code             VARCHAR2(30);
2941   l_funds_status_code          VARCHAR2(30);
2942   l_completion_seq_value       VARCHAR2(240);
2943   l_completion_seq_ver_id      INTEGER;
2944   l_completed_date             DATE;
2945   l_gl_transfer_status_code    VARCHAR2(30);
2946 
2947   l_last_update_date	DATE;
2948   l_last_updated_by	INTEGER;
2949   l_last_update_login	INTEGER;
2950 
2951   l_log_module          VARCHAR2(240);
2952 BEGIN
2953   IF g_log_enabled THEN
2954     l_log_module := C_DEFAULT_MODULE||'.reverse_journal_entry';
2955   END IF;
2956 
2957   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2958     trace(p_msg    => 'BEGIN of procedure reverse_journal_entry',
2959           p_module => l_log_module,
2960           p_level  => C_LEVEL_PROCEDURE);
2961   END IF;
2962 
2963   fnd_msg_pub.initialize;
2964   --
2965   -- Validation
2966   --
2967   l_info := get_header_info(p_ae_header_id, p_application_id, p_msg_mode);
2968   validate_ae_type_code(l_info.type_code, p_msg_mode);
2969 
2970   l_result := validate_reversal_method
2971 	(p_entity_id		=> l_info.entity_id
2972 	,p_event_id		=> l_info.event_id
2973 	,p_ledger_id		=> l_info.ledger_id
2974    	,p_ae_header_id		=> p_ae_header_id
2975    	,p_reversal_method	=> p_reversal_method);
2976 
2977   IF (p_completion_option NOT in (C_COMPLETION_OPTION_DRAFT,
2978 				  C_COMPLETION_OPTION_FINAL,
2979 			          C_COMPLETION_OPTION_TRANSFER,
2980 			          C_COMPLETION_OPTION_POST)) THEN
2981     xla_exceptions_pkg.raise_message
2982 	 (p_appli_s_name	=> 'XLA'
2983          ,p_msg_name		=> 'XLA_MJE_INVALID_COMP_OPTION'
2984 	 ,p_msg_mode		=> p_msg_mode);
2985   END IF;
2986 
2987   IF (l_info.status_code <> C_AE_STATUS_FINAL) THEN
2988     xla_exceptions_pkg.raise_message
2989 	 (p_appli_s_name	=> 'XLA'
2990          ,p_msg_name		=> 'XLA_MJE_NO_REV_NON_FINAL'
2991 	 ,p_msg_mode		=> p_msg_mode);
2992   END IF;
2993 
2994   -- Done validation
2995 
2996   --
2997   -- Create reversal journal entry
2998   --
2999   create_reversal_entry
3000   	(p_info			=> l_info
3001   	,p_reversal_method	=> p_reversal_method
3002 	,p_gl_date		=> p_gl_date
3003 	,p_msg_mode		=> p_msg_mode
3004 	,p_rev_header_id	=> p_rev_header_id
3005 	,p_rev_event_id		=> p_rev_event_id);
3006 
3007   --
3008   -- Complete journal entry if requested
3009   --
3010   IF (p_completion_option <> C_COMPLETION_OPTION_SAVE) THEN
3011     complete_journal_entry
3012 	(p_ae_header_id			=> p_rev_header_id
3013 	,p_application_id		=> l_info.application_id
3014 	,p_completion_option		=> p_completion_option
3015   	,p_functional_curr		=> p_functional_curr
3016   	,p_je_source_name		=> p_je_source_name
3017   	,p_ae_status_code		=> l_ae_status_code
3018   	,p_funds_status_code		=> l_funds_status_code
3019   	,p_completion_seq_value		=> l_completion_seq_value
3020   	,p_completion_seq_ver_id	=> l_completion_seq_ver_id
3021   	,p_completed_date		=> l_completed_date
3022   	,p_gl_transfer_status_code	=> l_gl_transfer_status_code
3023 	,p_last_update_date		=> l_last_update_date
3024 	,p_last_updated_by		=> l_last_updated_by
3025 	,p_last_update_login		=> l_last_update_login
3026 	,p_transfer_request_id		=> p_transfer_request_id
3027   	,p_retcode 			=> p_completion_retcode
3028         ,p_rev_flag                     => 'Y'
3029         ,p_rev_method                   => p_reversal_method
3030         ,p_rev_orig_event_id            => l_info.event_id
3031         ,p_msg_mode                     => p_msg_mode);
3032   END IF;
3033 
3034   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3035     trace(p_msg    => 'END of procedure reverse_journal_entry',
3036           p_module => l_log_module,
3037           p_level  => C_LEVEL_PROCEDURE);
3038   END IF;
3039 
3040 EXCEPTION
3041 WHEN xla_exceptions_pkg.application_exception THEN
3042   ROLLBACK;
3043   RAISE;
3044 
3045 WHEN OTHERS                                   THEN
3046   ROLLBACK;
3047   xla_exceptions_pkg.raise_message
3048       (p_location => 'xla_journal_entries_pkg.reverse_journal_entry');
3049 
3050 END reverse_journal_entry;
3051 
3052 
3053 
3054 
3055 
3056 
3057 
3058 
3059 
3060 --=============================================================================
3061 --
3062 --
3063 --
3064 --
3065 --
3066 --
3067 --          *********** private procedures and functions **********
3068 --
3069 --
3070 --
3071 --
3072 --
3073 --
3074 --=============================================================================
3075 
3076 --=============================================================================
3077 --
3078 -- Name: get_header_info
3079 -- Description: Retrieve header information.
3080 -- Return: t_je_info
3081 --
3082 --=============================================================================
3083 FUNCTION get_header_info
3084   (p_ae_header_id	IN  INTEGER
3085   ,p_application_id	IN  INTEGER
3086   ,p_msg_mode		IN  VARCHAR2)
3087 RETURN t_je_info
3088 IS
3089   CURSOR c_header IS
3090   	SELECT	 xah.ae_header_id
3091   		,xah.ledger_id
3092   		,xte.legal_entity_id
3093   		,xah.application_id
3094   		,xah.entity_id
3095   		,xah.event_id
3096 		,xah.accounting_date
3097  		,xah.accounting_entry_status_code
3098 		,xah.accounting_entry_type_code
3099   		,xah.description
3100   		,xah.balance_type_code
3101   		,xah.budget_version_id
3102   		,xah.reference_date
3103   		,xah.funds_status_code
3104   		,xah.je_category_name
3105   		,xah.packet_id
3106   		,xah.amb_context_code
3107   		,xah.event_type_code
3108   		,xah.completed_date
3109   		,xah.gl_transfer_status_code
3110   		,xah.accounting_batch_id
3111   		,xah.period_name
3112   		,xah.product_rule_code
3113   		,xah.product_rule_type_code
3114   		,xah.product_rule_version
3115   		,xah.gl_transfer_date
3116   		,xah.doc_sequence_id
3117   		,xah.doc_sequence_value
3118   		,xah.close_acct_seq_version_id
3119   		,xah.close_acct_seq_value
3120   		,xah.close_acct_seq_assign_id
3121   		,xah.completion_acct_seq_version_id
3122   		,xah.completion_acct_seq_value
3123   		,xah.completion_acct_seq_assign_id
3124   		,NVL(xah.accrual_reversal_flag,'N')  -- 4262811
3125   		,xe.budgetary_control_flag
3126   		,xah.attribute_category
3127   		,xah.attribute1
3128   		,xah.attribute2
3129   		,xah.attribute3
3130   		,xah.attribute4
3131   		,xah.attribute5
3132   		,xah.attribute6
3133   		,xah.attribute7
3134   		,xah.attribute8
3135   		,xah.attribute9
3136   		,xah.attribute10
3137   		,xah.attribute11
3138   		,xah.attribute12
3139   		,xah.attribute13
3140   		,xah.attribute14
3141   		,xah.attribute15
3142     FROM	xla_ae_headers           xah
3143                ,xla_events               xe
3144                ,xla_transaction_entities xte
3145     WHERE	xte.entity_id		= xah.entity_id
3146       AND       xte.application_id      = xah.application_id
3147       AND       xe.event_id             = xah.event_id
3148       AND       xe.application_id       = xah.application_id
3149       AND	xah.ae_header_id 	= p_ae_header_id
3150       AND	xah.application_id	= p_application_id
3151     FOR UPDATE NOWAIT;
3152 
3153 
3154   l_info	t_je_info;
3155   l_log_module          VARCHAR2(240);
3156 BEGIN
3157 
3158   IF g_log_enabled THEN
3159     l_log_module := C_DEFAULT_MODULE||'.get_header_info';
3160   END IF;
3161 
3162   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3163     trace(p_msg    => 'BEGIN of procedure get_header_info',
3164           p_module => l_log_module,
3165           p_level  => C_LEVEL_PROCEDURE);
3166   END IF;
3167 
3168   OPEN c_header;
3169   FETCH c_header INTO 	 l_info.header_id
3170 			,l_info.ledger_id
3171   			,l_info.legal_entity_id
3172   			,l_info.application_id
3173   			,l_info.entity_id
3174   			,l_info.event_id
3175   			,l_info.gl_date
3176   			,l_info.status_code
3177   			,l_info.type_code
3178   			,l_info.description
3179   			,l_info.balance_type_code
3180   			,l_info.budget_version_id
3181   			,l_info.reference_date
3182   			,l_info.funds_status_code
3183   			,l_info.je_category_name
3184   			,l_info.packet_id
3185   			,l_info.amb_context_code
3186   			,l_info.event_type_code
3187   			,l_info.completed_date
3188   			,l_info.gl_transfer_status_code
3189   			,l_info.accounting_batch_id
3190   			,l_info.period_name
3191   			,l_info.product_rule_code
3192   			,l_info.product_rule_type_code
3193   			,l_info.product_rule_version
3194   			,l_info.gl_transfer_date
3195   			,l_info.doc_sequence_id
3196   			,l_info.doc_sequence_value
3197   			,l_info.close_acct_seq_version_id
3198   			,l_info.close_acct_seq_value
3199   			,l_info.close_acct_seq_assign_id
3200   			,l_info.completion_acct_seq_version_id
3201   			,l_info.completion_acct_seq_value
3202   			,l_info.completion_acct_seq_assign_id
3203   			,l_info.accrual_reversal_flag    -- 4262811
3204   		        ,l_info.budgetary_control_flag
3205   			,l_info.attribute_category
3206   			,l_info.attribute1
3207   			,l_info.attribute2
3208   			,l_info.attribute3
3209   			,l_info.attribute4
3210   			,l_info.attribute5
3211   			,l_info.attribute6
3212   			,l_info.attribute7
3213   			,l_info.attribute8
3214   			,l_info.attribute9
3215   			,l_info.attribute10
3216   			,l_info.attribute11
3217   			,l_info.attribute12
3218   			,l_info.attribute13
3219   			,l_info.attribute14
3220   			,l_info.attribute15;
3221   CLOSE c_header;
3222 
3223   IF (l_info.ledger_id IS NULL) THEN
3224     xla_exceptions_pkg.raise_message
3225 	 (p_appli_s_name	=> 'XLA'
3226          ,p_msg_name		=> 'XLA_MJE_INVALID_HEADER_ID'
3227 	 ,p_msg_mode		=> p_msg_mode);
3228   END IF;
3229 
3230   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3231     trace(p_msg    => 'END of procedure get_header_info',
3232           p_module => l_log_module,
3233           p_level  => C_LEVEL_PROCEDURE);
3234   END IF;
3235 
3236   RETURN l_info;
3237 EXCEPTION
3238 WHEN xla_exceptions_pkg.application_exception THEN
3239   IF (c_header%ISOPEN) THEN
3240     CLOSE c_header;
3241   END IF;
3242   RAISE;
3243 
3244 WHEN OTHERS                                   THEN
3245   IF (c_header%ISOPEN) THEN
3246     CLOSE c_header;
3247   END IF;
3248   xla_exceptions_pkg.raise_message
3249       (p_location => 'xla_journal_entries_pkg.get_header_info');
3250 END get_header_info;
3251 
3252 
3253 --=============================================================================
3254 --
3255 -- Name: validate_code_combination_id
3256 -- Description: Validate a code combination id.
3257 --
3258 --=============================================================================
3259 PROCEDURE validate_code_combination_id
3260    (p_line_num              IN  INTEGER
3261    ,p_code_combination_id   IN  INTEGER
3262    ,p_msg_mode		    IN  VARCHAR2 DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
3263 IS
3264   CURSOR C IS
3265     SELECT code_combination_id
3266       FROM gl_code_combinations
3267      WHERE code_combination_id = p_code_combination_id;
3268 
3269   l_ccid	        INTEGER := NULL;
3270   l_log_module          VARCHAR2(240);
3271 BEGIN
3272   IF g_log_enabled THEN
3273     l_log_module := C_DEFAULT_MODULE||'.validate_code_combination_id';
3274   END IF;
3275 
3276   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3277     trace(p_msg    => 'BEGIN of procedure validate_code_combination_id',
3278           p_module => l_log_module,
3279           p_level  => C_LEVEL_PROCEDURE);
3280   END IF;
3281 
3282   OPEN C;
3283   FETCH C INTO l_ccid;
3284   CLOSE C;
3285 
3286   IF (l_ccid IS NULL) THEN
3287     IF (C_LEVEL_ERROR >= g_log_level) THEN
3288       trace(p_msg    => 'Error: XLA_AP_INVALID_CCID',
3289             p_module => l_log_module,
3290             p_level  => C_LEVEL_ERROR);
3291     END IF;
3292 
3293     xla_exceptions_pkg.raise_message
3294 	 (p_appli_s_name	=> 'XLA'
3295          ,p_msg_name		=> 'XLA_AP_INVALID_CCID'
3296 	 ,p_token_1		=> 'ACCOUNT_VALUE'
3297 	 ,p_value_1		=> NULL
3298 	 ,p_token_2		=> 'LINE_NUM'
3299 	 ,p_value_2		=> p_line_num
3300 	 ,p_msg_mode		=> p_msg_mode);
3301   END IF;
3302 
3303   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3304     trace(p_msg    => 'END of procedure validate_code_combination_id',
3305           p_module => l_log_module,
3306           p_level  => C_LEVEL_PROCEDURE);
3307   END IF;
3308 
3309 EXCEPTION
3310 WHEN xla_exceptions_pkg.application_exception THEN
3311   IF (c%ISOPEN) THEN
3312     CLOSE c;
3313   END IF;
3314   RAISE;
3315 
3316 WHEN OTHERS                                   THEN
3317   IF (c%ISOPEN) THEN
3318     CLOSE c;
3319   END IF;
3320   xla_exceptions_pkg.raise_message
3321     (p_location => 'xla_journal_entries_pkg.validate_code_combination_id');
3322 END validate_code_combination_id;
3323 
3324 
3325 --=============================================================================
3326 --
3327 -- Name: validate_ae_status_code
3328 -- Description: Validate an accounting entry status code is not final.
3329 --
3330 --=============================================================================
3331 PROCEDURE validate_ae_status_code
3332    (p_status_code       IN  VARCHAR2
3333    ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
3334 IS
3335   l_log_module          VARCHAR2(240);
3336 BEGIN
3337   IF g_log_enabled THEN
3338     l_log_module := C_DEFAULT_MODULE||'.validate_ae_status_code';
3339   END IF;
3340 
3341   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3342     trace(p_msg    => 'BEGIN of procedure validate_ae_status_code',
3343           p_module => l_log_module,
3344           p_level  => C_LEVEL_PROCEDURE);
3345   END IF;
3346 
3347   -- Check to ensure the journal entry is not final
3348   --
3349   IF (p_status_code in (C_AE_STATUS_FINAL)) THEN
3350     IF (C_LEVEL_ERROR >= g_log_level) THEN
3351       trace(p_msg    => 'Error: XLA_MJE_INVALID_AE_STATUS',
3352             p_module => l_log_module,
3353             p_level  => C_LEVEL_ERROR);
3354     END IF;
3355 
3356     xla_exceptions_pkg.raise_message
3357 	 (p_appli_s_name	=> 'XLA'
3358          ,p_msg_name		=> 'XLA_MJE_INVALID_AE_STATUS'
3359 	 ,p_msg_mode		=> p_msg_mode);
3360   END IF;
3361 
3362   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3363     trace(p_msg    => 'END of procedure validate_ae_status_code',
3364           p_module => l_log_module,
3365           p_level  => C_LEVEL_PROCEDURE);
3366   END IF;
3367 
3368 EXCEPTION
3369 WHEN xla_exceptions_pkg.application_exception THEN
3370   RAISE;
3371 
3372 WHEN OTHERS                                   THEN
3373   xla_exceptions_pkg.raise_message
3374     (p_location => 'xla_journal_entries_pkg.validate_ae_status_code');
3375 END validate_ae_status_code;
3376 
3377 
3378 --=============================================================================
3379 --
3380 -- Name: validate_ae_type_code
3381 -- Description: Validate an accounting entry type code.
3382 --
3383 --=============================================================================
3384 PROCEDURE validate_ae_type_code
3385   (p_accounting_entry_type_code	IN  VARCHAR2
3386   ,p_msg_mode			IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
3387 IS
3388   l_log_module          VARCHAR2(240);
3389 BEGIN
3390   IF g_log_enabled THEN
3391     l_log_module := C_DEFAULT_MODULE||'.validate_ae_type_code';
3392   END IF;
3393 
3394   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3395     trace(p_msg    => 'BEGIN of procedure validate_ae_type_code',
3396           p_module => l_log_module,
3397           p_level  => C_LEVEL_PROCEDURE);
3398   END IF;
3399 
3400   IF (p_accounting_entry_type_code NOT in (C_TYPE_MANUAL,
3401 					   C_TYPE_UPGRADE,
3402 					   C_TYPE_MERGE)) THEN
3403     IF (C_LEVEL_ERROR >= g_log_level) THEN
3404       trace(p_msg    => 'Error: XLA_MJE_INVALID_AE_TYPE',
3405             p_module => l_log_module,
3406             p_level  => C_LEVEL_ERROR);
3407     END IF;
3408 
3409     xla_exceptions_pkg.raise_message
3410 	 (p_appli_s_name	=> 'XLA'
3411          ,p_msg_name		=> 'XLA_MJE_INVALID_AE_TYPE'
3412 	 ,p_token_1		=> 'TYPE'
3413 	 ,p_value_1		=> p_accounting_entry_type_code
3414 	 ,p_msg_mode		=> p_msg_mode);
3415   END IF;
3416 
3417   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3418     trace(p_msg    => 'END of procedure validate_ae_type_code',
3419           p_module => l_log_module,
3420           p_level  => C_LEVEL_PROCEDURE);
3421   END IF;
3422 
3423 EXCEPTION
3424 WHEN xla_exceptions_pkg.application_exception THEN
3425    RAISE;
3426 WHEN OTHERS                                   THEN
3427    xla_exceptions_pkg.raise_message
3428       (p_location => 'xla_journal_entries_pkg.validate_ae_type_code');
3429 END validate_ae_type_code;
3430 
3431 
3432 --=============================================================================
3433 --
3434 -- Name: validate_line_number
3435 -- Description: Validate a line number.
3436 --
3437 --=============================================================================
3438 
3439 PROCEDURE validate_line_number
3440   (p_header_id     	IN  INTEGER
3441   ,p_line_num		IN  INTEGER
3442   ,p_application_id	IN  INTEGER
3443   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
3444 IS
3445   CURSOR c IS
3446     SELECT ae_line_num
3447      FROM  xla_ae_lines
3448     WHERE  ae_header_id = p_header_id
3449       AND  ae_line_num = p_line_num
3450       AND  application_id = p_application_id;
3451 
3452   l_line_num 	        INTEGER;
3453   l_log_module          VARCHAR2(240);
3454 BEGIN
3455   IF g_log_enabled THEN
3456     l_log_module := C_DEFAULT_MODULE||'.validate_line_number';
3457   END IF;
3458 
3459   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3460     trace(p_msg    => 'BEGIN of procedure validate_line_number',
3461           p_module => l_log_module,
3462           p_level  => C_LEVEL_PROCEDURE);
3463   END IF;
3464 
3465   OPEN c;
3466   FETCH c INTO l_line_num;
3467   CLOSE c;
3468 
3469   IF (l_line_num IS NULL) THEN
3470     IF (C_LEVEL_ERROR >= g_log_level) THEN
3471       trace(p_msg    => 'Error: XLA_MJE_INVALID_LINE_NUM: '||p_line_num,
3472             p_module => l_log_module,
3473             p_level  => C_LEVEL_ERROR);
3474     END IF;
3475 
3476     xla_exceptions_pkg.raise_message
3477 	 (p_appli_s_name	=> 'XLA'
3478          ,p_msg_name		=> 'XLA_MJE_INVALID_LINE_NUM'
3479 	 ,p_token_1		=> 'LINE_NUM'
3480 	 ,p_value_1		=> p_line_num
3481 	 ,p_msg_mode		=> p_msg_mode);
3482   END IF;
3483 
3484   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3485     trace(p_msg    => 'END of procedure validate_line_number',
3486           p_module => l_log_module,
3487           p_level  => C_LEVEL_PROCEDURE);
3488   END IF;
3489 
3490 EXCEPTION
3491 WHEN xla_exceptions_pkg.application_exception THEN
3492   IF (c%ISOPEN) THEN
3493     CLOSE c;
3494   END IF;
3495   RAISE;
3496 
3497 WHEN OTHERS                                   THEN
3498   IF (c%ISOPEN) THEN
3499     CLOSE c;
3500   END IF;
3501   xla_exceptions_pkg.raise_message
3502       (p_location => 'xla_journal_entries_pkg.validate_line_number`');
3503 END validate_line_number;
3504 
3505 --=============================================================================
3506 --
3507 -- Name: validate_display_line_number
3508 -- Description: Validate a display line number
3509 --
3510 --=============================================================================
3511 PROCEDURE validate_display_line_number
3512   (p_header_id     	IN  INTEGER
3513   ,p_line_num		IN  INTEGER
3514   ,p_display_line_num	IN  INTEGER
3515   ,p_application_id	IN  INTEGER
3516   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
3517 IS
3518   CURSOR c IS
3519     SELECT ae_line_num
3520      FROM  xla_ae_lines
3521     WHERE  ae_header_id          = p_header_id
3522       AND  ae_line_num           <> nvl(p_line_num,-1)
3523       AND  displayed_line_number = p_display_line_num
3524       AND  application_id        = p_application_id;
3525 
3526   l_line_num 	        INTEGER;
3527   l_log_module          VARCHAR2(240);
3528 BEGIN
3529   IF g_log_enabled THEN
3530     l_log_module := C_DEFAULT_MODULE||'.validate_display_line_number';
3531   END IF;
3532 
3533   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3534     trace(p_msg    => 'BEGIN of procedure validate_display_line_number',
3535           p_module => l_log_module,
3536           p_level  => C_LEVEL_PROCEDURE);
3537   END IF;
3538 
3539   OPEN c;
3540   FETCH c INTO l_line_num;
3541   CLOSE c;
3542 
3543   IF (l_line_num IS NOT NULL) THEN
3544     IF (C_LEVEL_ERROR >= g_log_level) THEN
3545       trace(p_msg    => 'Error: XLA_MJE_LINE_NUM_EXIST: '||p_display_line_num,
3546             p_module => l_log_module,
3547             p_level  => C_LEVEL_ERROR);
3548     END IF;
3549 
3550     xla_exceptions_pkg.raise_message
3551 	 (p_appli_s_name	=> 'XLA'
3552          ,p_msg_name		=> 'XLA_MJE_LINE_NUM_EXIST'
3553 	 ,p_token_1		=> 'LINE_NUM'
3554 	 ,p_value_1		=> p_display_line_num
3555 	 ,p_msg_mode		=> p_msg_mode);
3556 
3557   END IF;
3558 
3559   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3560     trace(p_msg    => 'END of procedure validate_display_line_number',
3561           p_module => l_log_module,
3562           p_level  => C_LEVEL_PROCEDURE);
3563   END IF;
3564 
3565 EXCEPTION
3566 WHEN xla_exceptions_pkg.application_exception THEN
3567   IF (c%ISOPEN) THEN
3568     CLOSE c;
3569   END IF;
3570   RAISE;
3571 
3572 WHEN OTHERS                                   THEN
3573   IF (c%ISOPEN) THEN
3574     CLOSE c;
3575   END IF;
3576   xla_exceptions_pkg.raise_message
3577       (p_location => 'xla_journal_entries_pkg.validate_display_line_number`');
3578 
3579 END validate_display_line_number;
3580 
3581 
3582 --=============================================================================
3583 --
3584 -- Name: validate_lines
3585 -- Description: Validate line information.
3586 --
3587 -- Return Code: 0 - success
3588 --              1 - failed
3589 --
3590 --=============================================================================
3591 FUNCTION validate_lines
3592   (p_entity_id		IN  INTEGER
3593   ,p_event_id		IN  INTEGER
3594   ,p_ledger_id		IN  INTEGER
3595   ,p_application_id	IN  INTEGER
3596   ,p_ae_header_id	IN  INTEGER)
3597 RETURN INTEGER
3598 IS
3599   CURSOR c_line IS
3600     SELECT ae_line_num, accounting_class_code, gl_transfer_mode_code
3601       FROM xla_ae_lines
3602      WHERE ae_header_id    = p_ae_header_id
3603        AND application_id  = p_application_id;
3604 
3605   l_retcode		INTEGER := 0;
3606   l_log_module          VARCHAR2(240);
3607 BEGIN
3608   IF g_log_enabled THEN
3609     l_log_module := C_DEFAULT_MODULE||'.validate_lines';
3610   END IF;
3611 
3612   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3613     trace(p_msg    => 'BEGIN of procedure validate_lines',
3614           p_module => l_log_module,
3615           p_level  => C_LEVEL_PROCEDURE);
3616   END IF;
3617 
3618   IF (C_LEVEL_EVENT >= g_log_level) THEN
3619     trace(p_msg    => 'BEGIN LOOP - validate line',
3620           p_module => l_log_module,
3621           p_level  => C_LEVEL_EVENT);
3622   END IF;
3623 
3624   FOR l_line IN c_line LOOP
3625 
3626     IF (C_LEVEL_ERROR >= g_log_level) THEN
3627       trace(p_msg    => 'LOOP validate line: ae_line_num = '||l_line.ae_line_num,
3628             p_module => l_log_module,
3629             p_level  => C_LEVEL_ERROR);
3630     END IF;
3631 
3632     IF (l_line.gl_transfer_mode_code IS NOT NULL AND
3633 	l_line.gl_transfer_mode_code NOT in (C_GL_TRANSFER_SUMMARY, C_GL_TRANSFER_DETAIL)) THEN
3634       IF (C_LEVEL_ERROR >= g_log_level) THEN
3635         trace(p_msg    => 'Error: XLA_MJE_INVALID_GL_TRAN_MODE',
3636               p_module => l_log_module,
3637               p_level  => C_LEVEL_ERROR);
3638       END IF;
3639 
3640       xla_accounting_err_pkg.build_message(
3641          p_appli_s_name         => 'XLA'
3642         ,p_msg_name             => 'XLA_MJE_INVALID_GL_TRAN_MODE'
3643         ,p_entity_id            => p_entity_id
3644         ,p_event_id             => p_event_id
3645         ,p_ledger_id            => p_ledger_id
3646         ,p_ae_header_id         => p_ae_header_id
3647         ,p_ae_line_num          => l_line.ae_line_num
3648         ,p_accounting_batch_id  => NULL);
3649       l_retcode := 1;
3650     END IF;
3651 
3652     IF (length(trim(l_line.accounting_class_code)) = 0 OR
3653         l_line.accounting_class_code IS NULL) THEN
3654       IF (C_LEVEL_ERROR >= g_log_level) THEN
3655         trace(p_msg    => 'Error: XLA_MJE_NO_ACCT_CLASS',
3656               p_module => l_log_module,
3657               p_level  => C_LEVEL_ERROR);
3658       END IF;
3659 
3660       xla_accounting_err_pkg.build_message(
3661          p_appli_s_name         => 'XLA'
3662         ,p_msg_name             => 'XLA_MJE_NO_ACCT_CLASS'
3663 	,p_token_1		=> 'LINE_NUM'
3664 	,p_value_1		=> l_line.ae_line_num
3665         ,p_entity_id            => p_entity_id
3666         ,p_event_id             => p_event_id
3667         ,p_ledger_id            => p_ledger_id
3668         ,p_ae_header_id         => p_ae_header_id
3669         ,p_ae_line_num          => l_line.ae_line_num
3670         ,p_accounting_batch_id  => NULL);
3671       l_retcode := 1;
3672     END IF;
3673 
3674   END LOOP;
3675 
3676   IF (C_LEVEL_EVENT >= g_log_level) THEN
3677     trace(p_msg    => 'END LOOP - validate line',
3678           p_module => l_log_module,
3679           p_level  => C_LEVEL_EVENT);
3680   END IF;
3681 
3682   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3683     trace(p_msg    => 'END of procedure validate_lines',
3684           p_module => l_log_module,
3685           p_level  => C_LEVEL_PROCEDURE);
3686   END IF;
3687 
3688   RETURN l_retcode;
3689 EXCEPTION
3690 WHEN xla_exceptions_pkg.application_exception THEN
3691   IF (c_line%ISOPEN) THEN
3692     CLOSE c_line;
3693   END IF;
3694   RAISE;
3695 
3696 WHEN OTHERS                                   THEN
3697   IF (c_line%ISOPEN) THEN
3698     CLOSE c_line;
3699   END IF;
3700   xla_exceptions_pkg.raise_message
3701     (p_location => 'xla_journal_entries_pkg.validate_lines');
3702 END validate_lines;
3703 
3704 --=============================================================================
3705 --
3706 -- Name: validate_completion_action
3707 -- Description: Validation the completion option.
3708 --
3709 -- Return Code: 0 - success
3710 --              1 - failed
3711 --
3712 --=============================================================================
3713 FUNCTION validate_completion_action
3714   (p_entity_id		IN  INTEGER
3715   ,p_event_id		IN  INTEGER
3716   ,p_ledger_id		IN  INTEGER
3717   ,p_ae_header_id	IN  INTEGER
3718   ,p_completion_option 	IN  VARCHAR2)
3719 RETURN INTEGER
3720 IS
3721   l_retcode	        INTEGER := 0;
3722   l_log_module          VARCHAR2(240);
3723 BEGIN
3724   IF g_log_enabled THEN
3725     l_log_module := C_DEFAULT_MODULE||'.validate_completion_action';
3726   END IF;
3727 
3728   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3729     trace(p_msg    => 'BEGIN of procedure validate_completion_action',
3730           p_module => l_log_module,
3731           p_level  => C_LEVEL_PROCEDURE);
3732   END IF;
3733 
3734   IF (p_completion_option NOT in ( C_COMPLETION_OPTION_DRAFT,
3735 				   C_COMPLETION_OPTION_FINAL,
3736 			      	   C_COMPLETION_OPTION_TRANSFER,
3737 				   C_COMPLETION_OPTION_POST)) THEN
3738     IF (C_LEVEL_ERROR >= g_log_level) THEN
3739       trace(p_msg    => 'Error: XLA_MJE_INVALID_COMP_OPT',
3740             p_module => l_log_module,
3741             p_level  => C_LEVEL_ERROR);
3742     END IF;
3743 
3744     xla_accounting_err_pkg.build_message(
3745          p_appli_s_name         => 'XLA'
3746         ,p_msg_name             => 'XLA_MJE_INVALID_COMP_OPT'
3747         ,p_entity_id            => p_entity_id
3748         ,p_event_id             => p_event_id
3749         ,p_ledger_id            => p_ledger_id
3750         ,p_ae_header_id         => p_ae_header_id
3751         ,p_ae_line_num          => NULL
3752         ,p_accounting_batch_id  => NULL);
3753     l_retcode := 1;
3754   END IF;
3755 
3756   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3757     trace(p_msg    => 'END of procedure validate_completion_action',
3758           p_module => l_log_module,
3759           p_level  => C_LEVEL_PROCEDURE);
3760   END IF;
3761 
3762   RETURN l_retcode;
3763 EXCEPTION
3764 WHEN xla_exceptions_pkg.application_exception THEN
3765   RAISE;
3766 
3767 WHEN OTHERS                                   THEN
3768   xla_exceptions_pkg.raise_message
3769     (p_location => 'xla_journal_entries_pkg.validate_completion_action');
3770 END validate_completion_action;
3771 
3772 
3773 
3774 
3775 --=============================================================================
3776 --
3777 -- Name: is_budgetary_control_enabled
3778 -- Description: Determine if budgetary control is enabled for a ledger
3779 --
3780 -- Return Code: TRUE  - budgetary control is enabled
3781 --              FALSE - budgetary control is not enabled
3782 --
3783 --=============================================================================
3784 FUNCTION is_budgetary_control_enabled
3785   (p_ledger_id		IN  INTEGER
3786   ,p_msg_mode		IN  VARCHAR2)
3787 RETURN BOOLEAN
3788 IS
3789   CURSOR c_bc_enabled IS
3790     SELECT	ledger_id, nvl(enable_budgetary_control_flag, 'N')
3791     FROM	gl_ledgers
3792     WHERE	ledger_id = p_ledger_id;
3793 
3794   l_bc_enabled	VARCHAR2(30);
3795   l_ledger_id	INTEGER;
3796   l_return	BOOLEAN;
3797 
3798   l_log_module          VARCHAR2(240);
3799 BEGIN
3800   IF g_log_enabled THEN
3801     l_log_module := C_DEFAULT_MODULE||'.is_budgetary_control_enabled';
3802   END IF;
3803 
3804   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3805     trace(p_msg    => 'BEGIN of procedure is_budgetary_control_enabled',
3806           p_module => l_log_module,
3807           p_level  => C_LEVEL_PROCEDURE);
3808   END IF;
3809 
3810   OPEN c_bc_enabled;
3811   FETCH c_bc_enabled INTO l_ledger_id, l_bc_enabled;
3812   CLOSE c_bc_enabled;
3813 
3814   IF (l_ledger_id IS NULL) THEN
3815     IF (C_LEVEL_ERROR >= g_log_level) THEN
3816       trace(p_msg    => 'Error: XLA_MJE_INVALID_LEDGER_ID',
3817             p_module => l_log_module,
3818             p_level  => C_LEVEL_ERROR);
3819     END IF;
3820 
3821     xla_exceptions_pkg.raise_message
3822 	 (p_appli_s_name	=> 'XLA'
3823          ,p_msg_name		=> 'XLA_MJE_INVALID_LEDGER_ID'
3824 	 ,p_token_1		=> 'LEDGER_ID'
3825 	 ,p_value_1		=> p_ledger_id
3826 	 ,p_msg_mode		=> p_msg_mode);
3827   END IF;
3828 
3829   IF (l_bc_enabled = 'N') THEN
3830     l_return := FALSE;
3831   ELSE
3832     l_return := TRUE;
3833   END IF;
3834 
3835   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3836     trace(p_msg    => 'END of procedure is_budgetary_control_enabled',
3837           p_module => l_log_module,
3838           p_level  => C_LEVEL_PROCEDURE);
3839   END IF;
3840 
3841   RETURN l_return;
3842 EXCEPTION
3843 WHEN xla_exceptions_pkg.application_exception THEN
3844   IF (c_bc_enabled%ISOPEN) THEN
3845     CLOSE c_bc_enabled;
3846   END IF;
3847   RAISE;
3848 
3849 WHEN OTHERS                                   THEN
3850   IF (c_bc_enabled%ISOPEN) THEN
3851     CLOSE c_bc_enabled;
3852   END IF;
3853   xla_exceptions_pkg.raise_message
3854       (p_location => 'xla_journal_entries_pkg.is_budgetary_control_enabled');
3855 
3856 END is_budgetary_control_enabled;
3857 
3858 --=============================================================================
3859 --
3860 --
3861 --
3862 --=============================================================================
3863 PROCEDURE undo_draft_entry
3864   (p_info	        IN  t_je_info)
3865 IS
3866   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
3867   l_log_module          VARCHAR2(240);
3868 BEGIN
3869   IF g_log_enabled THEN
3870     l_log_module := C_DEFAULT_MODULE||'.undo_draft_entry';
3871   END IF;
3872 
3873   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3874     trace(p_msg    => 'BEGIN of procedure undo_draft_entry',
3875           p_module => l_log_module,
3876           p_level  => C_LEVEL_PROCEDURE);
3877   END IF;
3878 
3879   IF (C_LEVEL_EVENT >= g_log_level) THEN
3880     trace(p_msg    => 'status code = '||p_info.status_code,
3881           p_module => l_log_module,
3882           p_level  => C_LEVEL_EVENT);
3883   END IF;
3884 
3885   IF (p_info.status_code = C_AE_STATUS_DRAFT) THEN
3886     --
3887     -- If the entry was a draft entry, call update balance to reverse draft balance
3888     --
3889     IF (NOT xla_balances_pkg.massive_update
3890 	  		(p_application_id 	=> p_info.application_id
3891 	  		,p_ledger_id		=> NULL
3892    	  		,p_event_id		=> NULL
3893 			,p_entity_id		=> p_info.entity_id
3894 			,p_request_id		=> NULL
3895 	  		,p_accounting_batch_id	=> NULL
3896    	  		,p_update_mode		=> C_BALANCE_DELETE
3897 	  		,p_execution_mode	=> C_BALANCE_ONLINE)) THEN
3898       xla_exceptions_pkg.raise_message
3899           (p_appli_s_name	=> 'XLA'
3900           ,p_msg_name		=> 'XLA_INTERNAL_ERROR'
3901           ,p_token_1            => 'MESSAGE'
3902           ,p_value_1            => 'Error in balance calculation'
3903           ,p_token_2            => 'LOCATION'
3904           ,p_value_2            => 'XLA_JOURNAL_ENTRIES_PKG.update_journal_entry_header'
3905 	  ,p_msg_mode		=> xla_exceptions_pkg.C_STANDARD_MESSAGE);
3906     END IF;
3907 
3908     --
3909     -- Delete the MRC entries created for the draft entry
3910     --
3911     delete_mrc_entries(p_info.event_id, p_info.application_id, p_info.ledger_id);
3912 
3913     --
3914     -- Update the event process status to unprocessed
3915     --
3916     l_event_source_info.application_id := p_info.application_id;
3917     l_event_source_info.legal_entity_id := p_info.legal_entity_id;
3918     l_event_source_info.ledger_id := p_info.ledger_id;
3919     l_event_source_info.entity_type_code := C_ENTITY_TYPE_CODE_MANUAL;
3920 
3921     xla_events_pkg.update_manual_event
3922      		(p_event_source_info 	=> l_event_source_info
3923      		,p_event_id		=> p_info.event_id
3924      		,p_event_status_code    => xla_events_pub_pkg.C_EVENT_UNPROCESSED
3925      		,p_process_status_code	=> xla_events_pkg.C_INTERNAL_UNPROCESSED);
3926   END IF;
3927 
3928   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3929     trace(p_msg    => 'END of procedure undo_draft_entry',
3930           p_module => l_log_module,
3931           p_level  => C_LEVEL_PROCEDURE);
3932   END IF;
3933 
3934 EXCEPTION
3935 WHEN xla_exceptions_pkg.application_exception THEN
3936   RAISE;
3937 
3938 WHEN OTHERS                                   THEN
3939   xla_exceptions_pkg.raise_message
3940       (p_location => 'xla_journal_entries_pkg.undo_draft_entry');
3941 END undo_draft_entry;
3942 
3943 
3944 
3945 --=============================================================================
3946 --
3947 -- Name: validate_reversal_method
3948 -- Description: Validate the reversal method option.
3949 --
3950 -- Return Code: 0 - success
3951 --              1 - failed
3952 --
3953 --=============================================================================
3954 FUNCTION validate_reversal_method
3955   (p_entity_id		IN  INTEGER
3956   ,p_event_id		IN  INTEGER
3957   ,p_ledger_id		IN  INTEGER
3958   ,p_ae_header_id	IN  INTEGER
3959   ,p_reversal_method   	IN  VARCHAR2)
3960 RETURN INTEGER
3961 IS
3962   l_retcode	        INTEGER := 0;
3963   l_log_module          VARCHAR2(240);
3964 BEGIN
3965   IF g_log_enabled THEN
3966     l_log_module := C_DEFAULT_MODULE||'.validate_reversal_method';
3967   END IF;
3968 
3969   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3970     trace(p_msg    => 'BEGIN of procedure validate_reversal_method',
3971           p_module => l_log_module,
3972           p_level  => C_LEVEL_PROCEDURE);
3973   END IF;
3974 
3975   IF (p_reversal_method NOT in (C_REVERSAL_CHANGE_SIGN, C_REVERSAL_SWITCH_DR_CR)) THEN
3976     IF (C_LEVEL_ERROR >= g_log_level) THEN
3977       trace(p_msg    => 'Error: XLA_MJE_INVALID_REV_OPT',
3978             p_module => l_log_module,
3979             p_level  => C_LEVEL_ERROR);
3980     END IF;
3981 
3982     xla_accounting_err_pkg.build_message(
3983          p_appli_s_name         => 'XLA'
3984         ,p_msg_name             => 'XLA_MJE_INVALID_REV_OPT'
3985         ,p_entity_id            => p_entity_id
3986         ,p_event_id             => p_event_id
3987         ,p_ledger_id            => p_ledger_id
3988         ,p_ae_header_id         => p_ae_header_id
3989         ,p_ae_line_num          => NULL
3990         ,p_accounting_batch_id  => NULL);
3991     l_retcode := 1;
3992   END IF;
3993 
3994   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3995     trace(p_msg    => 'END of procedure validate_reversal_method',
3996           p_module => l_log_module,
3997           p_level  => C_LEVEL_PROCEDURE);
3998   END IF;
3999 
4000   RETURN l_retcode;
4001 EXCEPTION
4002 WHEN xla_exceptions_pkg.application_exception THEN
4003    RAISE;
4004 WHEN OTHERS                                   THEN
4005    xla_exceptions_pkg.raise_message
4006       (p_location => 'xla_journal_entries_pkg.validate_reversal_method');
4007 END validate_reversal_method;
4008 
4009 
4010 --=============================================================================
4011 --
4012 -- Name: create_mrc_reversal_entry
4013 -- Description: Create reversal entry for mrc journal entry
4014 --
4015 --=============================================================================
4016 PROCEDURE create_mrc_reversal_entry
4017   (p_info               IN  t_je_info
4018   ,p_reversal_method    IN  VARCHAR2
4019   ,p_orig_event_id      IN  NUMBER
4020   ,p_ledger_ids         IN OUT NOCOPY xla_je_validation_pkg.t_array_int
4021   ,p_rev_ae_header_ids  IN OUT NOCOPY xla_je_validation_pkg.t_array_int
4022   ,p_rev_status_codes   IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar)
4023 IS
4024   l_event_source_info   xla_events_pub_pkg.t_event_source_info;
4025   l_entity_id           INTEGER;
4026   l_period_name         VARCHAR2(30);
4027   l_closing_status      VARCHAR2(30);
4028   l_validate_period     INTEGER;
4029   l_result              INTEGER;
4030   l_period_type         VARCHAR2(30);
4031   l_reversal_label      VARCHAR2(240);
4032 
4033   l_last_updated_by     INTEGER;
4034   l_last_update_login   INTEGER;
4035   i                     INTEGER :=1;
4036 
4037   ------------------------------------------------------------------------------
4038   -- 5109240
4039   -- Modify to select both ALC and Secondary journal entries and also
4040   -- if there is MPA/Accrual Reversal entries.
4041   ------------------------------------------------------------------------------
4042   /*
4043   CURSOR c_mrc_headers IS
4044     SELECT xah.*
4045       FROM xla_ae_headers xah
4046            , xla_alt_curr_ledgers_v l
4047      WHERE xah.application_id  = p_info.application_id
4048        AND xah.event_id        = p_orig_event_id
4049        AND xah.ledger_id       = l.ledger_id
4050        AND l.primary_ledger_id = p_info.ledger_id
4051        AND l.enabled_flag      = 'Y';
4052   */
4053   CURSOR c_mrc_headers IS
4054   SELECT xah.*
4055   FROM   xla_ae_headers xah
4056        , xla_ledger_relationships_v l
4057   WHERE xah.application_id   = p_info.application_id
4058     AND xah.event_id         = p_orig_event_id
4059     AND xah.ledger_id        = l.ledger_id
4060     AND l.primary_ledger_id  = p_info.ledger_id
4061     AND  (l.LEDGER_CATEGORY_CODE IN ('ALC','SECONDARY')
4062     OR   (l.LEDGER_CATEGORY_CODE= 'PRIMARY' AND xah.parent_ae_header_id IS NOT NULL));
4063 
4064   l_log_module          VARCHAR2(240);
4065 BEGIN
4066   IF g_log_enabled THEN
4067     l_log_module := C_DEFAULT_MODULE||'.create_mrc_reversal_entry';
4068   END IF;
4069 
4070   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4071     trace(p_msg    => 'BEGIN of procedure create_mrc_reversal_entry',
4072           p_module => l_log_module,
4073           p_level  => C_LEVEL_PROCEDURE);
4074     trace(p_msg    => 'p_orig_event_id:'||to_char(p_orig_event_id),
4075           p_module => l_log_module,
4076           p_level  => C_LEVEL_PROCEDURE);
4077   END IF;
4078 
4079   l_last_updated_by    := nvl(xla_environment_pkg.g_usr_id,-1);
4080   l_last_update_login  := nvl(xla_environment_pkg.g_login_id,-1);
4081 
4082   fnd_message.set_name('XLA', 'XLA_MJE_LABEL_REVERSAL');
4083   l_reversal_label     := fnd_message.get();
4084 
4085   FOR l_mrc_header IN c_mrc_headers LOOP
4086 
4087     IF (C_LEVEL_EVENT >= g_log_level) THEN
4088       trace(p_msg    => 'LOOP - mrc header: ae_header_id = '||l_mrc_header.ae_header_id,
4089             p_module => l_log_module,
4090             p_level  => C_LEVEL_EVENT);
4091     END IF;
4092 
4093     i := i+1;
4094     p_ledger_ids(i) := l_mrc_header.ledger_id;
4095     p_rev_status_codes(i) := p_rev_status_codes(1);
4096 
4097     --
4098     -- Create a new journal entry header
4099     --
4100     INSERT INTO xla_ae_headers
4101      (ae_header_id
4102      ,application_id
4103      ,ledger_id
4104      ,entity_id
4105      ,event_id
4106      ,event_type_code
4107      ,accounting_date
4108      ,period_name
4109      ,reference_date
4110      ,balance_type_code
4111      ,budget_version_id
4112      ,encumbrance_type_id
4113      ,gl_transfer_status_code
4114      ,je_category_name
4115      ,accounting_entry_status_code
4116      ,accounting_entry_type_code
4117      ,description
4118      ,creation_date
4119      ,created_by
4120      ,last_update_date
4121      ,last_updated_by
4122      ,last_update_login
4123      ,accrual_reversal_flag)  -- 5109240
4124     values
4125      (xla_ae_headers_s.NEXTVAL
4126      ,l_mrc_header.application_id
4127      ,l_mrc_header.ledger_id
4128      ,p_info.entity_id
4129      ,p_info.event_id
4130      ,C_EVENT_TYPE_CODE_MANUAL
4131      ,p_info.gl_date
4132      ,p_info.period_name
4133      ,p_info.reference_date
4134      ,l_mrc_header.balance_type_code
4135      ,l_mrc_header.budget_version_id
4136      ,l_mrc_header.encumbrance_type_id
4137      ,C_GL_TRANSFER_MODE_NO
4138      ,l_mrc_header.je_category_name
4139      ,C_AE_STATUS_INCOMPLETE
4140      ,p_info.type_code
4141      ,l_reversal_label||': '||l_mrc_header.description
4142      ,sysdate
4143      ,l_last_updated_by
4144      ,sysdate
4145      ,l_last_updated_by
4146      ,l_last_update_login
4147      ,NVL(l_mrc_header.accrual_reversal_flag,'N'))  -- 5109240
4148     RETURNING ae_header_id INTO p_rev_ae_header_ids(i);
4149 
4150     --
4151     -- Copy header analytical criteria FROM the original entry to the reversal entry
4152     --
4153     INSERT INTO xla_ae_header_acs(
4154            ae_header_id
4155           ,analytical_criterion_code
4156           ,analytical_criterion_type_code
4157           ,amb_context_code
4158           ,ac1
4159           ,ac2
4160           ,ac3
4161           ,ac4
4162           ,ac5
4163           ,object_version_number)
4164    SELECT  p_rev_ae_header_ids(i)
4165           ,analytical_criterion_code
4166           ,analytical_criterion_type_code
4167           ,amb_context_code
4168           ,ac1
4169           ,ac2
4170           ,ac3
4171           ,ac4
4172           ,ac5
4173           ,1
4174      FROM  xla_ae_header_acs
4175     WHERE ae_header_id = l_mrc_header.ae_header_id;
4176 
4177     --
4178     -- Create journal entry lines for the reversal journal entry
4179     --
4180     INSERT INTO xla_ae_lines
4181        (application_id
4182        ,ae_header_id
4183        ,ae_line_num
4184        ,displayed_line_number
4185        ,code_combination_id
4186        ,gl_transfer_mode_code
4187        ,creation_date
4188        ,created_by
4189        ,last_update_date
4190        ,last_updated_by
4191        ,last_update_login
4192        ,party_id
4193        ,party_site_id
4194        ,party_type_code
4195        ,unrounded_entered_dr
4196        ,unrounded_entered_cr
4197        ,entered_dr
4198        ,entered_cr
4199        ,unrounded_accounted_dr
4200        ,unrounded_accounted_cr
4201        ,accounted_dr
4202        ,accounted_cr
4203        ,description
4204        ,statistical_amount
4205        ,currency_code
4206        ,currency_conversion_type
4207        ,currency_conversion_date
4208        ,currency_conversion_rate
4209        ,accounting_class_code
4210        ,jgzz_recon_ref
4211        ,gl_sl_link_table
4212        ,attribute_category
4213        ,attribute1
4214        ,attribute2
4215        ,attribute3
4216        ,attribute4
4217        ,attribute5
4218        ,attribute6
4219        ,attribute7
4220        ,attribute8
4221        ,attribute9
4222        ,attribute10
4223        ,attribute11
4224        ,attribute12
4225        ,attribute13
4226        ,attribute14
4227        ,attribute15
4228        ,ledger_id
4229        ,accounting_date
4230        ,gain_or_loss_flag
4231        ,mpa_accrual_entry_flag)  -- 4262811
4232       SELECT
4233         application_id
4234        ,p_rev_ae_header_ids(i)
4235        ,ae_line_num
4236        ,displayed_line_number
4237        ,code_combination_id
4238        ,gl_transfer_mode_code
4239        ,sysdate
4240        ,l_last_updated_by
4241        ,sysdate
4242        ,l_last_updated_by
4243        ,l_last_update_login
4244        ,party_id
4245        ,party_site_id
4246        ,party_type_code
4247        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4248                                 unrounded_entered_cr, -unrounded_entered_dr)
4249        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4250                                 unrounded_entered_dr, -unrounded_entered_cr)
4251        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4252                                 entered_cr, -entered_dr)
4253        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4254                                 entered_dr, -entered_cr)
4255        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4256                                 unrounded_accounted_cr, -unrounded_accounted_dr)
4257        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4258                                 unrounded_accounted_dr, -unrounded_accounted_cr)
4259        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4260                                 accounted_cr, -accounted_dr)
4261        ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4262                                 accounted_dr, -accounted_cr)
4263        ,description
4264        ,statistical_amount
4265        ,currency_code
4266        ,currency_conversion_type
4267        ,currency_conversion_date
4268        ,currency_conversion_rate
4269        ,accounting_class_code
4270        ,jgzz_recon_ref
4271        ,'XLAJEL'
4272        ,attribute_category
4273        ,attribute1
4274        ,attribute2
4275        ,attribute3
4276        ,attribute4
4277        ,attribute5
4278        ,attribute6
4279        ,attribute7
4280        ,attribute8
4281        ,attribute9
4282        ,attribute10
4283        ,attribute11
4284        ,attribute12
4285        ,attribute13
4286        ,attribute14
4287        ,attribute15
4288        ,l_mrc_header.ledger_id
4289        ,p_info.gl_date
4290        ,gain_or_loss_flag
4291        ,NVL(mpa_accrual_entry_flag,'N')
4292       FROM      xla_ae_lines
4293       WHERE     application_id = p_info.application_id
4294       AND       ae_header_id = l_mrc_header.ae_header_id;
4295 
4296     create_reversal_distr_link
4297       (p_application_id     => p_info.application_id
4298       ,p_ae_header_id       => p_rev_ae_header_ids(i)
4299       ,p_ref_ae_header_id   => l_mrc_header.ae_header_id
4300       ,p_ref_event_id       => p_orig_event_id);
4301 
4302     --
4303     -- Copy the journal entry lines' analytical criteria from the original entry to
4304     -- the reversal entry
4305     --
4306     INSERT INTO xla_ae_line_acs(
4307            ae_header_id
4308           ,ae_line_num
4309           ,analytical_criterion_code
4310           ,analytical_criterion_type_code
4311           ,amb_context_code
4312           ,ac1
4313           ,ac2
4314           ,ac3
4315           ,ac4
4316           ,ac5
4317           ,object_version_number)
4318     SELECT p_rev_ae_header_ids(i)
4319           ,ae_line_num
4320           ,analytical_criterion_code
4321           ,analytical_criterion_type_code
4322           ,amb_context_code
4323           ,ac1
4324           ,ac2
4325           ,ac3
4326           ,ac4
4327           ,ac5
4328           ,1
4329       FROM xla_ae_line_acs
4330      WHERE ae_header_id = l_mrc_header.ae_header_id;
4331 
4332     IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4333       trace(p_msg    => 'END of procedure create_mrc_reversal_entry',
4334             p_module => l_log_module,
4335             p_level  => C_LEVEL_PROCEDURE);
4336     END IF;
4337   END LOOP;
4338 
4339 EXCEPTION
4340 WHEN xla_exceptions_pkg.application_exception THEN
4341   ROLLBACK ;
4342   RAISE;
4343 
4344 WHEN OTHERS                                   THEN
4345   ROLLBACK;
4346   xla_exceptions_pkg.raise_message
4347       (p_location => 'xla_journal_entries_pkg.create_mrc_reversal_entry');
4348 
4349 END create_mrc_reversal_entry;
4350 
4351 
4352 --=============================================================================
4353 --
4354 -- Name: create_reversal_entry
4355 -- Description: Create reversal entry for a journal entry
4356 --
4357 --=============================================================================
4358 PROCEDURE create_reversal_entry
4359   (p_info	        IN  t_je_info
4360   ,p_reversal_method	IN  VARCHAR2
4361   ,p_gl_date		IN  DATE
4362   ,p_msg_mode       	IN  VARCHAR2
4363   ,p_rev_header_id	OUT NOCOPY INTEGER
4364   ,p_rev_event_id	OUT NOCOPY INTEGER)
4365 IS
4366   l_event_source_info	xla_events_pub_pkg.t_event_source_info;
4367   l_entity_id		INTEGER;
4368   l_period_name		VARCHAR2(30);
4369   l_closing_status	VARCHAR2(30);
4370   l_validate_period	INTEGER;
4371   l_result		INTEGER;
4372   l_period_type		VARCHAR2(30);
4373   l_reversal_label      VARCHAR2(240);
4374 
4375   l_last_updated_by     INTEGER;
4376   l_last_update_login   INTEGER;
4377 
4378   l_log_module          VARCHAR2(240);
4379 BEGIN
4380   IF g_log_enabled THEN
4381     l_log_module := C_DEFAULT_MODULE||'.create_reversal_entry';
4382   END IF;
4383 
4384   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4385     trace(p_msg    => 'BEGIN of procedure create_reversal_entry',
4386           p_module => l_log_module,
4387           p_level  => C_LEVEL_PROCEDURE);
4388   END IF;
4389 
4390   l_period_name := get_period_name
4391 	(p_ledger_id		=> p_info.ledger_id
4392 	,p_accounting_date	=> p_gl_date
4393 	,p_closing_status	=> l_closing_status
4394 	,p_period_type		=> l_period_type);
4395 
4396   IF (l_period_name IS NULL) THEN
4397     xla_exceptions_pkg.raise_message
4398 	 (p_appli_s_name	=> 'XLA'
4399 	 ,p_msg_name		=> 'XLA_AP_INVALID_GL_DATE'
4400 	 ,p_msg_mode		=> p_msg_mode);
4401   END IF;
4402 
4403   --
4404   -- Create event for the reversal entry
4405   --
4406   l_event_source_info.application_id := p_info.application_id;
4407   l_event_source_info.legal_entity_id := p_info.legal_entity_id;
4408   l_event_source_info.ledger_id := p_info.ledger_id;
4409   l_event_source_info.entity_type_code := C_ENTITY_TYPE_CODE_MANUAL;
4410 
4411 /* Bug 7011889 - If reversal event is already created for Actual, do not call for Encumbarance.
4412                - Checking that g_rev_event_id is not NULL to create event */
4413 
4414 IF g_rev_event_id IS NULL THEN
4415 
4416    p_rev_event_id := xla_events_pkg.create_manual_event
4417    (p_event_source_info 	  => l_event_source_info
4418    ,p_event_type_code             => C_EVENT_TYPE_CODE_MANUAL
4419    ,p_event_date                  => p_gl_date
4420    ,p_event_status_code           => xla_events_pub_pkg.C_EVENT_UNPROCESSED
4421    ,p_process_status_code	  => xla_events_pkg.C_INTERNAL_UNPROCESSED
4422    ,p_event_number                => 1
4423    ,p_budgetary_control_flag      => p_info.budgetary_control_flag
4424    );
4425    g_rev_event_id := p_rev_event_id;
4426 
4427    SELECT 	entity_id
4428    INTO 	g_entity_id
4429    FROM		xla_events
4430    WHERE	event_id = p_rev_event_id;
4431 
4432    l_entity_id := g_entity_id;
4433 
4434 ELSE
4435  /* Bug 7011889 - If already an event is created, make use of the same for Encumbarance */
4436 
4437   p_rev_event_id := g_rev_event_id;
4438   l_entity_id := g_entity_id;
4439 END IF;
4440 
4441 
4442   fnd_message.set_name('XLA', 'XLA_MJE_LABEL_REVERSAL');
4443   l_reversal_label     := fnd_message.get();
4444 
4445   l_last_updated_by    := nvl(xla_environment_pkg.g_usr_id,-1);
4446   l_last_update_login  := nvl(xla_environment_pkg.g_login_id,-1);
4447 
4448   --
4449   -- Create a new journal entry header
4450   --
4451 
4452   INSERT INTO xla_ae_headers
4453    (ae_header_id
4454    ,application_id
4455    ,ledger_id
4456    ,entity_id
4457    ,event_id
4458    ,event_type_code
4459    ,accounting_date
4460    ,period_name
4461    ,reference_date
4462    ,balance_type_code
4463    ,budget_version_id
4464    ,gl_transfer_status_code
4465    ,je_category_name
4466    ,accounting_entry_status_code
4467    ,accounting_entry_type_code
4468    ,description
4469    ,creation_date
4470    ,created_by
4471    ,last_update_date
4472    ,last_updated_by
4473    ,last_update_login
4474    ,accrual_reversal_flag)  -- 4262811
4475   values
4476    (xla_ae_headers_s.NEXTVAL
4477    ,p_info.application_id
4478    ,p_info.ledger_id
4479    ,l_entity_id
4480    ,p_rev_event_id
4481    ,C_EVENT_TYPE_CODE_MANUAL
4482    ,p_gl_date
4483    ,l_period_name
4484    ,p_info.reference_date
4485    ,p_info.balance_type_code
4486    ,p_info.budget_version_id
4487    ,C_GL_TRANSFER_MODE_NO
4488    ,p_info.je_category_name
4489    ,C_AE_STATUS_INCOMPLETE
4490    ,p_info.type_code
4491    ,l_reversal_label||': '||p_info.description
4492    ,sysdate
4493    ,l_last_updated_by
4494    ,sysdate
4495    ,l_last_updated_by
4496    ,l_last_update_login
4497    ,NVL(p_info.accrual_reversal_flag,'N'))             -- 4262811 accrual_reversal_flag
4498   RETURNING ae_header_id INTO p_rev_header_id;
4499 
4500   --
4501   -- Copy header analytical criteria FROM the original entry to the reversal entry
4502   --
4503   INSERT INTO xla_ae_header_acs(
4504          ae_header_id
4505         ,analytical_criterion_code
4506         ,analytical_criterion_type_code
4507         ,amb_context_code
4508         ,ac1
4509         ,ac2
4510         ,ac3
4511         ,ac4
4512         ,ac5
4513         ,object_version_number)
4514   SELECT p_rev_header_id
4515         ,analytical_criterion_code
4516         ,analytical_criterion_type_code
4517         ,amb_context_code
4518         ,ac1
4519         ,ac2
4520         ,ac3
4521         ,ac4
4522         ,ac5
4523         ,1
4524     FROM xla_ae_header_acs
4525    WHERE ae_header_id = p_info.header_id;
4526 
4527 
4528   --
4529   -- Create journal entry lines for the reversal journal entry
4530   --
4531   INSERT INTO xla_ae_lines
4532      (application_id
4533      ,ae_header_id
4534      ,ae_line_num
4535      ,displayed_line_number
4536      ,code_combination_id
4537      ,gl_transfer_mode_code
4538      ,creation_date
4539      ,created_by
4540      ,last_update_date
4541      ,last_updated_by
4542      ,last_update_login
4543      ,party_id
4544      ,party_site_id
4545      ,party_type_code
4546      ,entered_dr
4547      ,entered_cr
4548      ,accounted_dr
4549      ,accounted_cr
4550      ,unrounded_entered_dr   -- 5109240
4551      ,unrounded_entered_cr   -- 5109240
4552      ,unrounded_accounted_dr -- 5109240
4553      ,unrounded_accounted_cr -- 5109240
4554      ,description
4555      ,statistical_amount
4556      ,currency_code
4557      ,currency_conversion_type
4558      ,currency_conversion_date
4559      ,currency_conversion_rate
4560      ,accounting_class_code
4561      ,jgzz_recon_ref
4562      ,gl_sl_link_table
4563      ,attribute_category
4564      ,encumbrance_type_id
4565      ,attribute1
4566      ,attribute2
4567      ,attribute3
4568      ,attribute4
4569      ,attribute5
4570      ,attribute6
4571      ,attribute7
4572      ,attribute8
4573      ,attribute9
4574      ,attribute10
4575      ,attribute11
4576      ,attribute12
4577      ,attribute13
4578      ,attribute14
4579      ,attribute15
4580      ,gain_or_loss_flag
4581      ,ledger_id
4582      ,accounting_date
4583      ,mpa_accrual_entry_flag)  -- 4262811
4584     SELECT
4585       application_id
4586      ,p_rev_header_id
4587      ,ae_line_num
4588      ,displayed_line_number
4589      ,code_combination_id
4590      ,gl_transfer_mode_code
4591      ,sysdate
4592      ,l_last_updated_by
4593      ,sysdate
4594      ,l_last_updated_by
4595      ,l_last_update_login
4596      ,party_id
4597      ,party_site_id
4598      ,party_type_code
4599      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4600 				entered_cr, -entered_dr)
4601      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4602 				entered_dr, -entered_cr)
4603      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4604 				accounted_cr, -accounted_dr)
4605      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4606 				accounted_dr, -accounted_cr)
4607      -- 5109240 unrounded amounts
4608      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4609 				unrounded_entered_cr,   -unrounded_entered_dr)
4610      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4611 				unrounded_entered_dr,   -unrounded_entered_cr)
4612      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4613 				unrounded_accounted_cr, -unrounded_accounted_dr)
4614      ,DECODE(p_reversal_method, C_REVERSAL_SWITCH_DR_CR,
4615 				unrounded_accounted_dr, -unrounded_accounted_cr)
4616      ,description
4617      ,statistical_amount
4618      ,currency_code
4619      ,currency_conversion_type
4620      ,currency_conversion_date
4621      ,currency_conversion_rate
4622      ,accounting_class_code
4623      ,jgzz_recon_ref
4624      ,'XLAJEL'
4625      ,attribute_category
4626      ,encumbrance_type_id
4627      ,attribute1
4628      ,attribute2
4629      ,attribute3
4630      ,attribute4
4631      ,attribute5
4632      ,attribute6
4633      ,attribute7
4634      ,attribute8
4635      ,attribute9
4636      ,attribute10
4637      ,attribute11
4638      ,attribute12
4639      ,attribute13
4640      ,attribute14
4641      ,attribute15
4642      ,gain_or_loss_flag
4643      ,p_info.ledger_id
4644      ,p_gl_date
4645      ,NVL(mpa_accrual_entry_flag,'N')     -- 4262811 mpa_accrual_entry_flag
4646     FROM 	xla_ae_lines
4647     WHERE 	application_id = p_info.application_id
4648     AND		ae_header_id = p_info.header_id;
4649 
4650 
4651   create_reversal_distr_link
4652     (p_application_id     => p_info.application_id
4653     ,p_ae_header_id       => p_rev_header_id
4654     ,p_ref_ae_header_id   => p_info.header_id -- Original Ae Header
4655     ,p_ref_event_id       => NULL);
4656 
4657   --
4658   -- Copy the journal entry lines' analytical criteria from the original entry to
4659   -- the reversal entry
4660   --
4661   INSERT INTO xla_ae_line_acs(
4662          ae_header_id
4663         ,ae_line_num
4664         ,analytical_criterion_code
4665         ,analytical_criterion_type_code
4666         ,amb_context_code
4667         ,ac1
4668         ,ac2
4669         ,ac3
4670         ,ac4
4671         ,ac5
4672         ,object_version_number)
4673   SELECT p_rev_header_id
4674 	,ae_line_num
4675         ,analytical_criterion_code
4676         ,analytical_criterion_type_code
4677         ,amb_context_code
4678         ,ac1
4679         ,ac2
4680         ,ac3
4681         ,ac4
4682         ,ac5
4683         ,1
4684     FROM xla_ae_line_acs
4685    WHERE ae_header_id = p_info.header_id;
4686 
4687   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4688     trace(p_msg    => 'END of procedure create_reversal_entry',
4689           p_module => l_log_module,
4690           p_level  => C_LEVEL_PROCEDURE);
4691   END IF;
4692 
4693 EXCEPTION
4694 WHEN xla_exceptions_pkg.application_exception THEN
4695   ROLLBACK ;
4696   RAISE;
4697 
4698 WHEN OTHERS                                   THEN
4699   ROLLBACK;
4700   xla_exceptions_pkg.raise_message
4701       (p_location => 'xla_journal_entries_pkg.create_reversal_entry');
4702 
4703 END create_reversal_entry;
4704 
4705 
4706 --=============================================================================
4707 --
4708 -- Name: reorder_line_number
4709 -- Description: Reorder order line number
4710 --
4711 --=============================================================================
4712 PROCEDURE reorder_line_number
4713   (p_application_id	IN  INTEGER
4714   ,p_ae_header_id	IN  INTEGER)
4715 IS
4716   CURSOR c_lines IS
4717     SELECT ae_line_num
4718       FROM xla_ae_lines
4719      WHERE application_id    = p_application_id
4720        AND ae_header_id      = p_ae_header_id
4721      ORDER BY ae_line_num;
4722 
4723   l_ae_line_nums      	t_array_int;
4724   l_displayed_nums	t_array_int;
4725   i			INTEGER := 0;
4726   j			INTEGER;
4727   l_log_module          VARCHAR2(240);
4728 BEGIN
4729   IF g_log_enabled THEN
4730     l_log_module := C_DEFAULT_MODULE||'.reorder_line_number';
4731   END IF;
4732 
4733   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4734     trace(p_msg    => 'BEGIN of procedure reorder_line_number',
4735           p_module => l_log_module,
4736           p_level  => C_LEVEL_PROCEDURE);
4737   END IF;
4738 
4739   IF (C_LEVEL_EVENT >= g_log_level) THEN
4740     trace(p_msg    => 'BEGIN LOOP - reorder line number',
4741           p_module => l_log_module,
4742           p_level  => C_LEVEL_EVENT);
4743   END IF;
4744 
4745   FOR l_line IN c_lines LOOP
4746 
4747     IF (C_LEVEL_EVENT >= g_log_level) THEN
4748       trace(p_msg    => 'LOOP - reorder line number: ae_line_num = '||l_line.ae_line_num,
4749             p_module => l_log_module,
4750             p_level  => C_LEVEL_EVENT);
4751     END IF;
4752 
4753     i := i+1;
4754     l_ae_line_nums(i) := l_line.ae_line_num;
4755     l_displayed_nums(i) := i;
4756   END LOOP;
4757 
4758   IF (C_LEVEL_EVENT >= g_log_level) THEN
4759     trace(p_msg    => 'END LOOP - reorder line number',
4760           p_module => l_log_module,
4761           p_level  => C_LEVEL_EVENT);
4762   END IF;
4763 
4764   FORALL j in 1..i
4765     UPDATE xla_ae_lines
4766       	set 	displayed_line_number = l_displayed_nums(j)
4767 	WHERE	application_id = p_application_id
4768 	AND	ae_header_id = p_ae_header_id
4769 	AND	ae_line_num = l_ae_line_nums(j);
4770 
4771   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4772     trace(p_msg    => 'BEGIN of procedure reorder_line_number',
4773           p_module => l_log_module,
4774           p_level  => C_LEVEL_PROCEDURE);
4775   END IF;
4776 
4777 EXCEPTION
4778 WHEN xla_exceptions_pkg.application_exception THEN
4779   IF (c_lines%ISOPEN) THEN
4780     CLOSE c_lines;
4781   END IF;
4782   ROLLBACK;
4783   RAISE;
4784 
4785 WHEN OTHERS                                   THEN
4786   IF (c_lines%ISOPEN) THEN
4787     CLOSE c_lines;
4788   END IF;
4789   ROLLBACK;
4790   xla_exceptions_pkg.raise_message
4791       (p_location => 'xla_journal_entries_pkg.reorder_line_number');
4792 
4793 END reorder_line_number;
4794 
4795 
4796 --=============================================================================
4797 --
4798 -- Name: reserve_funds
4799 -- Description: Reserve funds when completing a final entry.
4800 --
4801 -- Return code: C_COMPLETION_SUCCESS, C_COMPLETION_FAILED
4802 --
4803 --=============================================================================
4804 FUNCTION reserve_funds
4805   (p_info	         IN OUT NOCOPY t_je_info
4806   ,p_msg_mode            IN            VARCHAR2)
4807 RETURN VARCHAR2
4808 IS
4809   l_retcode             VARCHAR2(30) := C_COMPLETION_SUCCESS;
4810   l_log_module          VARCHAR2(240);
4811 BEGIN
4812   IF g_log_enabled THEN
4813     l_log_module := C_DEFAULT_MODULE||'.reserve_funds';
4814   END IF;
4815 
4816   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4817     trace(p_msg    => 'BEGIN of procedure reserve_funds',
4818           p_module => l_log_module,
4819           p_level  => C_LEVEL_PROCEDURE);
4820   END IF;
4821 
4822   IF (p_info.budgetary_control_flag = 'Y' AND
4823       is_budgetary_control_enabled(p_info.ledger_id, p_msg_mode)) THEN
4824 
4825     IF (C_LEVEL_EVENT >= g_log_level) THEN
4826       trace(p_msg    => 'is_budgetary_control_enabled is TRUE',
4827             p_module => l_log_module,
4828             p_level  => C_LEVEL_STATEMENT);
4829     END IF;
4830 
4831     p_info.funds_status_code := xla_je_funds_checker_pkg.reserve_funds(
4832 			p_ae_header_id		=> p_info.header_id,
4833 			p_application_id 	=> p_info.application_id,
4834 			p_ledger_id		=> p_info.ledger_id,
4835 			p_packet_id		=> p_info.packet_id);
4836 
4837     IF (C_LEVEL_EVENT >= g_log_level) THEN
4838       trace(p_msg    => 'funds_status_code = '||p_info.funds_status_code,
4839             p_module => l_log_module,
4840             p_level  => C_LEVEL_STATEMENT);
4841     END IF;
4842 
4843     IF (p_info.funds_status_code IN (C_FUNDS_FAILED, C_FUNDS_PARTIAL)) THEN
4844       l_retcode := C_COMPLETION_FAILED;
4845 
4846       xla_accounting_err_pkg.build_message(
4847          p_appli_s_name         => 'XLA'
4848         ,p_msg_name             => 'XLA_MJE_CHECK_FUNDS_FAILED'
4849         ,p_entity_id            => p_info.entity_id
4850         ,p_event_id             => p_info.event_id
4851         ,p_ledger_id            => p_info.ledger_id
4852         ,p_ae_header_id         => p_info.header_id
4853         ,p_ae_line_num          => NULL
4854         ,p_accounting_batch_id  => NULL);
4855     END IF;
4856   END IF;
4857 
4858   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4859     trace(p_msg    => 'END of procedure reserve_funds',
4860           p_module => l_log_module,
4861           p_level  => C_LEVEL_PROCEDURE);
4862   END IF;
4863 
4864   RETURN l_retcode;
4865 EXCEPTION
4866 WHEN xla_exceptions_pkg.application_exception THEN
4867   RAISE;
4868 
4869 WHEN OTHERS THEN
4870   xla_exceptions_pkg.raise_message
4871       (p_location => 'xla_journal_entries_pkg.reserve_funds');
4872 END reserve_funds;
4873 
4874 --=============================================================================
4875 --
4876 -- Name: get_sequence_number
4877 -- Description: Get the sequence number for a journal entry.
4878 --
4879 --=============================================================================
4880 FUNCTION get_sequence_number
4881   (p_info	        	IN         t_je_info
4882   ,p_je_source_name		IN         VARCHAR2
4883   ,p_completed_date             IN         DATE
4884   ,p_ledger_id			IN         INTEGER
4885   ,p_comp_seq_version_id	OUT NOCOPY INTEGER
4886   ,p_comp_seq_value		OUT NOCOPY INTEGER
4887   ,p_comp_seq_assign_id		OUT NOCOPY INTEGER)
4888 RETURN VARCHAR2
4889 IS
4890   l_control_attributes	fun_seq.control_attribute_rec_type;
4891   l_control_dates	fun_seq.control_date_tbl_type := fun_seq.control_date_tbl_type();
4892   l_seq_error_code	VARCHAR2(30);
4893   l_retcode		VARCHAR2(30) := C_COMPLETION_SUCCESS;
4894   l_err_msg             VARCHAR2(400);
4895 
4896   l_log_module          VARCHAR2(240);
4897 BEGIN
4898   IF g_log_enabled THEN
4899     l_log_module := C_DEFAULT_MODULE||'.get_sequence_number';
4900   END IF;
4901 
4902   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4903     trace(p_msg    => 'BEGIN of procedure get_sequence_number',
4904           p_module => l_log_module,
4905           p_level  => C_LEVEL_PROCEDURE);
4906   END IF;
4907 
4908   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4909     trace(p_msg    => 'balance_type = '||p_info.balance_type_code||
4910                       ', journal_source = '||p_je_source_name||
4911                       ', journal_category = '||p_info.je_category_name,
4912           p_module => l_log_module,
4913           p_level  => C_LEVEL_STATEMENT);
4914     trace(p_msg    => 'completion_date = '||to_char(p_completed_date,'DD-MON-YYYY')||
4915                       ', gl_date = '||to_char(p_info.gl_date,'DD-MON-YYYY')||
4916                       ', reference_date = '||to_char(p_info.reference_date,'DD-MON-YYYY'),
4917           p_module => l_log_module,
4918           p_level  => C_LEVEL_STATEMENT);
4919   END IF;
4920 
4921   l_control_attributes.balance_type 		:= p_info.balance_type_code;
4922   l_control_attributes.accounting_event_type 	:= 'MANUAL';
4923   l_control_attributes.journal_source 		:= p_je_source_name;
4924   l_control_attributes.journal_category 	:= p_info.je_category_name;
4925   l_control_attributes.accounting_entry_type 	:= 'MANUAL';
4926 
4927   -- We always provides all three control dates and the SSA team will determine
4928   -- which date to use.
4929   l_control_dates.EXTEND(3);
4930   l_control_dates(1).date_type := 'COMPLETION_OR_POSTING_DATE';
4931   l_control_dates(1).date_value := p_completed_date;
4932   l_control_dates(2).date_type :=  'GL_DATE';
4933   l_control_dates(2).date_value := p_info.gl_date;
4934   l_control_dates(3).date_type :=  'REFERENCE_DATE';
4935   l_control_dates(3).date_value := p_info.reference_date;
4936 
4937   BEGIN
4938     fun_seq.get_sequence_number(
4939 			p_context_type    	   => 'LEDGER_AND_CURRENCY',
4940 			p_context_value   	   => to_char(p_ledger_id),
4941 			p_application_Id  	   => C_XLA_APPLICATION_ID,
4942 			p_table_name	  	   => 'XLA_AE_HEADERS',
4943 			p_event_code		   => 'COMPLETION',
4944 			p_control_attribute_rec    => l_control_attributes,
4945 			p_control_date_tbl	   => l_control_dates,
4946 			p_suppress_error 	   => 'N',
4947 			x_seq_version_id 	   => p_comp_seq_version_id,
4948 			x_sequence_number 	   => p_comp_seq_value,
4949 			x_assignment_id		   => p_comp_seq_assign_id,
4950 			x_error_code 		   => l_seq_error_code);
4951   EXCEPTION
4952     WHEN OTHERS THEN
4953       p_comp_seq_version_id := -1;
4954       p_comp_seq_value := -1;
4955       p_comp_seq_assign_id := -1;
4956       l_retcode := C_COMPLETION_FAILED;
4957 
4958       xla_accounting_err_pkg.build_message(
4959                  p_appli_s_name         => 'XLA'
4960                 ,p_msg_name             => 'XLA_INTERNAL_ERROR'
4961                 ,p_token_1              => 'LOCATION'
4962                 ,p_value_1              => 'FUN_SEQ.get_sequence_number'
4963                 ,p_token_2              => 'MESSAGE'
4964                 ,p_value_2              => fnd_message.get
4965                 ,p_entity_id            => p_info.entity_id
4966                 ,p_event_id             => p_info.event_id
4967                 ,p_ledger_id            => p_info.ledger_id
4968                 ,p_ae_header_id         => p_info.header_id
4969                 ,p_ae_line_num          => NULL
4970                 ,p_accounting_batch_id  => NULL);
4971   END;
4972 
4973   IF (C_LEVEL_EVENT >= g_log_level) THEN
4974     trace(p_msg    => 'return: fun_seq.get_sequence_number = '||l_seq_error_code,
4975           p_module => l_log_module,
4976           p_level  => C_LEVEL_EVENT);
4977     trace(p_msg    => 'return: p_comp_seq_version_id       = '||p_comp_seq_version_id,
4978           p_module => l_log_module,
4979           p_level  => C_LEVEL_EVENT);
4980     trace(p_msg    => 'return: p_comp_seq_value            = '||p_comp_seq_value,
4981           p_module => l_log_module,
4982           p_level  => C_LEVEL_EVENT);
4983     trace(p_msg    => 'return: p_comp_seq_assign_id        = '||p_comp_seq_assign_id,
4984           p_module => l_log_module,
4985           p_level  => C_LEVEL_EVENT);
4986   END IF;
4987 
4988   IF (p_comp_seq_version_id IS NULL) THEN
4989     p_comp_seq_version_id := -1;
4990   END IF;
4991   IF (p_comp_seq_value IS NULL) THEN
4992     p_comp_seq_value := -1;
4993   END IF;
4994   IF (p_comp_seq_assign_id IS NULL) THEN
4995     p_comp_seq_assign_id := -1;
4996   END IF;
4997 
4998   IF (l_seq_error_code <> 'SUCCESS') THEN
4999     l_retcode := C_COMPLETION_FAILED;
5000     xla_accounting_err_pkg.build_message(
5001                  p_appli_s_name         => 'XLA'
5002                 ,p_msg_name             => 'XLA_INTERNAL_ERROR'
5003                 ,p_token_1              => 'LOCATION'
5004                 ,p_value_1              => 'FUN_SEQ.get_sequence_number'
5005                 ,p_token_2              => 'MESSAGE'
5006                 ,p_value_2              => l_seq_error_code
5007                 ,p_entity_id            => p_info.entity_id
5008                 ,p_event_id             => p_info.event_id
5009                 ,p_ledger_id            => p_info.ledger_id
5010                 ,p_ae_header_id         => p_info.header_id
5011                 ,p_ae_line_num          => NULL
5012                 ,p_accounting_batch_id  => NULL);
5013   END IF;
5014 
5015   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5016     trace(p_msg    => 'END of procedure get_sequence_number',
5017           p_module => l_log_module,
5018           p_level  => C_LEVEL_PROCEDURE);
5019   END IF;
5020 
5021   RETURN l_retcode;
5022 EXCEPTION
5023 WHEN xla_exceptions_pkg.application_exception THEN
5024   RAISE;
5025 
5026 WHEN OTHERS THEN
5027   xla_exceptions_pkg.raise_message
5028       (p_location => 'xla_journal_entries_pkg.get_sequence_number');
5029 END get_sequence_number;
5030 
5031 
5032 
5033 --=============================================================================
5034 --
5035 -- Name: populate_sequence_numbers
5036 -- Description: Populate sequence number for the transaction ledger entry and
5037 --              MRC entries.
5038 --
5039 --=============================================================================
5040 FUNCTION populate_sequence_numbers
5041  (p_info                 IN            t_je_info
5042  ,p_je_source_name       IN            VARCHAR2
5043  ,p_completed_date       IN            DATE
5044  ,p_ledger_ids           IN            xla_je_validation_pkg.t_array_int
5045  ,p_ae_header_ids        IN            xla_je_validation_pkg.t_array_int
5046  ,p_status_codes         IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar
5047  ,p_seq_version_ids      IN OUT NOCOPY t_array_int
5048  ,p_seq_values           IN OUT NOCOPY t_array_int
5049  ,p_seq_assign_ids       IN OUT NOCOPY t_array_int)
5050 RETURN VARCHAR2
5051 IS
5052   l_ledger_id            INTEGER;
5053   l_seq_retcode          VARCHAR2(30);
5054   l_retcode              VARCHAR2(30) := C_COMPLETION_SUCCESS;
5055 
5056   l_log_module          VARCHAR2(240);
5057 BEGIN
5058   IF g_log_enabled THEN
5059     l_log_module := C_DEFAULT_MODULE||'.populate_sequence_numbers';
5060   END IF;
5061 
5062   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5063     trace(p_msg    => 'BEGIN of procedure populate_sequence_numbers',
5064           p_module => l_log_module,
5065           p_level  => C_LEVEL_PROCEDURE);
5066   END IF;
5067 
5068   SAVEPOINT POPULATE_SEQUENCE_NUMBERS;
5069 
5070   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5071     trace(p_msg    => '# of ledger id = '||p_ledger_ids.COUNT,
5072           p_module => l_log_module,
5073           p_level  => C_LEVEL_STATEMENT);
5074   END IF;
5075 
5076   FOR i IN 1..p_ledger_ids.COUNT LOOP
5077     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5078       trace(p_msg    => 'Processing ledger id = '||p_ledger_ids(i),
5079             p_module => l_log_module,
5080             p_level  => C_LEVEL_STATEMENT);
5081     END IF;
5082 
5083     l_seq_retcode := get_sequence_number
5084 			(p_info			=> p_info
5085   			,p_je_source_name	=> p_je_source_name
5086   			,p_completed_date	=> p_completed_date
5087   			,p_ledger_id		=> p_ledger_ids(i)
5088   			,p_comp_seq_version_id	=> p_seq_version_ids(i)
5089   			,p_comp_seq_value	=> p_seq_values(i)
5090   			,p_comp_seq_assign_id	=> p_seq_assign_ids(i));
5091 
5092     IF (l_seq_retcode = C_COMPLETION_FAILED) THEN
5093       l_retcode := C_COMPLETION_FAILED;
5094       p_status_codes(i) := C_AE_STATUS_INVALID;
5095     END IF;
5096   END LOOP;
5097 
5098   IF (l_retcode = C_COMPLETION_FAILED) THEN
5099     ROLLBACK to SAVEPOINT POPULATE_SEQUENCE_NUMBERS;
5100   END IF;
5101 
5102   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5103     trace(p_msg    => 'END of procedure populate_sequence_numbers',
5104           p_module => l_log_module,
5105           p_level  => C_LEVEL_PROCEDURE);
5106   END IF;
5107 
5108   RETURN l_retcode;
5109 EXCEPTION
5110 WHEN xla_exceptions_pkg.application_exception THEN
5111   ROLLBACK to SAVEPOINT POPULATE_SEQUENCE_NUMBERS;
5112   RAISE;
5113 
5114 WHEN OTHERS                                   THEN
5115   ROLLBACK to SAVEPOINT POPULATE_SEQUENCE_NUMBERS;
5116   xla_exceptions_pkg.raise_message
5117       (p_location => 'xla_journal_entries_pkg.populate_sequence_numbers');
5118 
5119 END populate_sequence_numbers;
5120 
5121 
5122 --=============================================================================
5123 --
5124 -- Name: create_mrc_entries
5125 -- Description: Create MRC entries.
5126 --
5127 --=============================================================================
5128 FUNCTION create_mrc_entries
5129   (p_info               IN OUT NOCOPY t_je_info
5130   ,p_je_source_name	    IN     VARCHAR2
5131   ,p_ledger_ids         IN OUT NOCOPY xla_je_validation_pkg.t_array_int
5132   ,p_ae_header_ids      IN OUT NOCOPY xla_je_validation_pkg.t_array_int
5133   ,p_status_codes       IN OUT NOCOPY xla_je_validation_pkg.t_array_varchar)
5134 RETURN VARCHAR2
5135 IS
5136   CURSOR c_trx_ledger (p_trx_ledger_id INTEGER, p_application_id INTEGER) IS
5137     SELECT gl.name, gl.currency_code, gl.ledger_category_code, xlo.rounding_rule_code
5138       FROM gl_ledgers gl, xla_ledger_options xlo
5139      WHERE gl.ledger_id = p_trx_ledger_id
5140        AND xlo.application_id = p_application_id
5141        AND xlo.ledger_id = p_trx_ledger_id;
5142 
5143   CURSOR c_mrc_ledgers IS
5144     SELECT xlr.target_ledger_id         ledger_id
5145          , xlr.name                     ledger_name
5146          , xlr.currency_code            ledger_currency
5147          , xlr.ALC_DEFAULT_CONV_RATE_TYPE
5148          , xlr.ALC_INHERIT_CONVERSION_TYPE
5149          , decode(xlr.ALC_NO_RATE_ACTION_CODE, 'FIND_RATE', nvl(xlr.ALC_MAX_DAYS_ROLL_RATE, -1), 0) max_roll_days
5150       FROM xla_ledger_relationships_v  xlr
5151           ,fnd_currencies              fcu
5152      WHERE xlr.primary_ledger_id          = p_info.ledger_id
5153        AND xlr.relationship_enabled_flag  = 'Y'
5154        AND xlr.ledger_category_code       = 'ALC'
5155        AND fcu.currency_code              = xlr.currency_code;
5156 
5157   CURSOR c_lines (p_mrc_currency VARCHAR2, p_primary_currency VARCHAR2) IS
5158     SELECT xal.*
5159          , decode( fc.derive_type, 'EURO', 'EURO', 'EMU',
5160                   decode( sign( trunc(nvl(xal.currency_conversion_date, xal.accounting_date)) -
5161                       trunc(fc.derive_effective)), -1, 'OTHER', 'EMU'), 'OTHER' ) from_type
5162          , decode( fc1.derive_type, 'EURO', 'EURO', 'EMU',
5163                   decode( sign( trunc(nvl(xal.currency_conversion_date, xal.accounting_date)) -
5164                       trunc(fc1.derive_effective)), -1, 'OTHER', 'EMU'), 'OTHER' ) to_type
5165          , decode( fc2.derive_type, 'EURO', 'EURO', 'EMU',
5166                   decode( sign( trunc(nvl(xal.currency_conversion_date, xal.accounting_date)) -
5167                       trunc(fc2.derive_effective)), -1, 'OTHER', 'EMU'), 'OTHER' ) primary_type
5168       FROM xla_ae_lines xal
5169          , fnd_currencies fc
5170          , fnd_currencies fc1
5171          , fnd_currencies fc2
5172      WHERE xal.ae_header_id      = p_info.header_id
5173        AND xal.application_id    = p_info.application_id
5174        AND fc.currency_code      = xal.currency_code
5175        AND fc1.currency_code     = p_mrc_currency
5176        and fc2.currency_code     = p_primary_currency
5177     ORDER BY xal.currency_code
5178             ,xal.currency_conversion_type
5179             ,xal.currency_conversion_date
5180             ,xal.currency_conversion_rate;
5181 
5182   l_trx_ledger_name         VARCHAR2(30);
5183   l_trx_ledger_currency     VARCHAR2(30);
5184   l_trx_ledger_category     VARCHAR2(30);
5185   l_trx_rounding_rule       VARCHAR2(30);
5186 
5187   l_last_curr_code          VARCHAR2(15);
5188   l_last_conv_type          VARCHAR2(30);
5189   l_last_conv_date          DATE;
5190   l_last_conv_rate          NUMBER;
5191 
5192   l_conv_type               VARCHAR2(30);
5193   l_conv_date               DATE;
5194   l_conv_rate               NUMBER;
5195 
5196   l_accounted_cr            NUMBER;
5197   l_accounted_dr            NUMBER;
5198 
5199   l_retcode                 VARCHAR2(30) := C_COMPLETION_SUCCESS;
5200   i                         INTEGER := 1;
5201 
5202   l_temp_line_num           INTEGER;
5203   l_ref_temp_line_num       INTEGER;
5204   l_ref_ae_header_id        INTEGER;
5205   l_ref_event_id            INTEGER;
5206 
5207   l_last_updated_by         INTEGER;
5208   l_last_update_login       INTEGER;
5209 
5210   l_log_module              VARCHAR2(240);
5211 BEGIN
5212   IF g_log_enabled THEN
5213     l_log_module := C_DEFAULT_MODULE||'.create_mrc_entries';
5214   END IF;
5215 
5216   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5217     trace(p_msg    => 'BEGIN of procedure create_mrc_entries',
5218           p_module => l_log_module,
5219           p_level  => C_LEVEL_PROCEDURE);
5220   END IF;
5221 
5222   l_last_updated_by   := nvl(xla_environment_pkg.g_usr_id,-1);
5223   l_last_update_login := nvl(xla_environment_pkg.g_login_id,-1);
5224 
5225   IF (C_LEVEL_EVENT >= g_log_level) THEN
5226     trace(p_msg    => 'BEGIN LOOP - mrc ledgers',
5227           p_module => l_log_module,
5228           p_level  => C_LEVEL_EVENT);
5229   END IF;
5230 
5231   OPEN c_trx_ledger(p_ledger_ids(1), p_info.application_id);
5232   FETCH c_trx_ledger INTO l_trx_ledger_name, l_trx_ledger_currency, l_trx_ledger_category, l_trx_rounding_rule;
5233   CLOSE c_trx_ledger;
5234 
5235   IF (l_trx_ledger_category IN ('PRIMARY', 'NONE')) THEN
5236 
5237   FOR l_mrc_ledger IN c_mrc_ledgers LOOP
5238 
5239     IF (C_LEVEL_EVENT >= g_log_level) THEN
5240       trace(p_msg    => 'LOOP - mrc ledger: ledger_id = '||l_mrc_ledger.ledger_id,
5241             p_module => l_log_module,
5242             p_level  => C_LEVEL_EVENT);
5243     END IF;
5244 
5245     i := i+1;
5246     p_ledger_ids(i) := l_mrc_ledger.ledger_id;
5247     p_status_codes(i) := p_status_codes(1);
5248 
5249     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5250       trace(p_msg    => 'process ledger    : '||l_mrc_ledger.ledger_id,
5251             p_module => l_log_module,
5252             p_level  => C_LEVEL_STATEMENT);
5253       trace(p_msg    => 'ledger_name       = '||l_mrc_ledger.ledger_name,
5254             p_module => l_log_module,
5255             p_level  => C_LEVEL_STATEMENT);
5256       trace(p_msg    => 'ledger currency   = '||l_mrc_ledger.ledger_currency,
5257             p_module => l_log_module,
5258             p_level  => C_LEVEL_STATEMENT);
5259       trace(p_msg    => 'ALC_DEFAULT_CONV_RATE_TYPE = '||l_mrc_ledger.ALC_DEFAULT_CONV_RATE_TYPE,
5260             p_module => l_log_module,
5261             p_level  => C_LEVEL_STATEMENT);
5262       trace(p_msg    => 'ALC_INHERIT_CONVERSION_TYPE = '||l_mrc_ledger.ALC_INHERIT_CONVERSION_TYPE,
5263             p_module => l_log_module,
5264             p_level  => C_LEVEL_STATEMENT);
5265       trace(p_msg    => 'ALC_MAX_DAYS_ROLL_RATE = '||l_mrc_ledger.max_roll_days,
5266             p_module => l_log_module,
5267             p_level  => C_LEVEL_STATEMENT);
5268     END IF;
5269 
5270     INSERT INTO xla_ae_headers
5271      	(ae_header_id
5272      	,application_id
5273      	,amb_context_code
5274      	,ledger_id
5275      	,entity_id
5276      	,event_id
5277      	,event_type_code
5278      	,accounting_date
5279      	,completed_date
5280      	,reference_date
5281      	,balance_type_code
5282      	,budget_version_id
5283      	,gl_transfer_status_code
5284      	,je_category_name
5285      	,accounting_entry_status_code
5286      	,accounting_entry_type_code
5287      	,description
5288      	,accounting_batch_id
5289      	,period_name
5290      	,packet_id
5291      	,product_rule_code
5292      	,product_rule_type_code
5293      	,product_rule_version
5294      	,gl_transfer_date
5295      	,doc_sequence_id
5296      	,doc_sequence_value
5297     	,close_acct_seq_version_id
5298      	,close_acct_seq_value
5299      	,close_acct_seq_assign_id
5300      	,funds_status_code
5301      	,attribute_category
5302      	,attribute1
5303      	,attribute2
5304      	,attribute3
5305      	,attribute4
5306      	,attribute5
5307      	,attribute6
5308      	,attribute7
5309      	,attribute8
5310      	,attribute9
5311      	,attribute10
5312      	,attribute11
5313      	,attribute12
5314      	,attribute13
5315      	,attribute14
5316      	,attribute15
5317      	,creation_date
5318      	,created_by
5319      	,last_update_date
5320      	,last_updated_by
5321      	,last_update_login
5322         ,accrual_reversal_flag)  -- 4262811
5323        values(   xla_ae_headers_s.NEXTVAL
5324      		,p_info.application_id
5325      		,p_info.amb_context_code
5326      		,l_mrc_ledger.ledger_id
5327      		,p_info.entity_id
5328      		,p_info.event_id
5329      		,p_info.event_type_code
5330      		,p_info.gl_date
5331 		,p_info.completed_date
5332      		,p_info.reference_date
5333      		,p_info.balance_type_code
5334      		,p_info.budget_version_id
5335      		,p_info.gl_transfer_status_code
5336      		,p_info.je_category_name
5337      		,p_info.status_code
5338      		,p_info.type_code
5339      		,p_info.description
5340      		,p_info.accounting_batch_id
5341      		,p_info.period_name
5342 		,p_info.packet_id
5343      		,p_info.product_rule_code
5344      		,p_info.product_rule_type_code
5345      		,p_info.product_rule_version
5346      		,p_info.gl_transfer_date
5347      		,p_info.doc_sequence_id
5348      		,p_info.doc_sequence_value
5349      		,p_info.close_acct_seq_version_id
5350      		,p_info.close_acct_seq_value
5351      		,p_info.close_acct_seq_assign_id
5352      		,p_info.funds_status_code
5353      		,p_info.attribute_category
5354      		,p_info.attribute1
5355      		,p_info.attribute2
5356      		,p_info.attribute3
5357      		,p_info.attribute4
5358      		,p_info.attribute5
5359      		,p_info.attribute6
5360      		,p_info.attribute7
5361      		,p_info.attribute8
5362      		,p_info.attribute9
5363      		,p_info.attribute10
5364      		,p_info.attribute11
5365      		,p_info.attribute12
5366      		,p_info.attribute13
5367      		,p_info.attribute14
5368      		,p_info.attribute15
5369      		,sysdate
5370      		,l_last_updated_by
5371      		,sysdate
5372      		,l_last_updated_by
5373      		,l_last_update_login
5374                 ,NVL(p_info.accrual_reversal_flag,'N'))   -- 4262811 accrual_reversal_flag
5375 	RETURNING	ae_header_id
5376 	INTO		p_ae_header_ids(i);
5377 
5378     IF (C_LEVEL_EVENT >= g_log_level) THEN
5379       trace(p_msg    => 'Created MRC entry = '||p_ae_header_ids(i),
5380             p_module => l_log_module,
5381             p_level  => C_LEVEL_EVENT);
5382     END IF;
5383 
5384     --
5385     -- Copy journal entry analytical criteria from the original entry to the MRC entry
5386     --
5387     INSERT INTO xla_ae_header_acs(
5388            ae_header_id
5389           ,analytical_criterion_code
5390           ,analytical_criterion_type_code
5391           ,amb_context_code
5392           ,ac1
5393           ,ac2
5394           ,ac3
5395           ,ac4
5396           ,ac5
5397           ,object_version_number)
5398     SELECT p_ae_header_ids(i)
5399           ,analytical_criterion_code
5400           ,analytical_criterion_type_code
5401           ,amb_context_code
5402           ,ac1
5403           ,ac2
5404           ,ac3
5405           ,ac4
5406           ,ac5
5407           ,1
5408       FROM xla_ae_header_acs
5409      WHERE ae_header_id = p_info.header_id;
5410 
5411     l_last_curr_code := '';
5412     l_last_conv_type := '';
5413     l_last_conv_rate := 0;
5414     l_last_conv_date := sysdate;
5415 
5416     --
5417     -- Copy journal entry line from the original entry to the mrc entry
5418     --
5419 
5420     IF (C_LEVEL_EVENT >= g_log_level) THEN
5421       trace(p_msg    => 'BEGIN LOOP - copy lines',
5422             p_module => l_log_module,
5423             p_level  => C_LEVEL_EVENT);
5424     END IF;
5425 
5426     For l in c_lines (l_mrc_ledger.ledger_currency, l_trx_ledger_currency) LOOP
5427       IF (C_LEVEL_EVENT >= g_log_level) THEN
5428         trace(p_msg    => 'process line: '||l.ae_line_num||' ('||l.displayed_line_number||') '||
5429                           ', from_type='||l.from_type||
5430                           ', to_type='||l.to_type||
5431                           ', primary_type='||l.primary_type||
5432                           ', curr='||l.currency_code||
5433                           ', type='||l.currency_conversion_type,
5434               p_module => l_log_module,
5435               p_level  => C_LEVEL_EVENT);
5436       END IF;
5437 
5438       IF (l_trx_ledger_currency = l_mrc_ledger.ledger_currency) THEN
5439 
5440         l_conv_type := l.currency_conversion_type;
5441         l_conv_date := l.currency_conversion_date;
5442         l_conv_rate := l.currency_conversion_rate;
5443 
5444       ELSIF (l_last_curr_code <> nvl(l.currency_code,C_CHAR) or
5445              l_last_conv_type <> nvl(l.currency_conversion_type,C_CHAR) or
5446              l_last_conv_rate <> nvl(l.currency_conversion_rate,C_NUM)) THEN
5447 
5448         --
5449         -- Compare the currency and conversion info with the previous journal entry line.
5450         -- Retrieve mrc conversion info from GL only IF they are difference.
5451         --
5452         l_last_curr_code := l.currency_code;
5453         l_last_conv_type := l.currency_conversion_type;
5454         l_last_conv_date := l.currency_conversion_date;
5455         l_last_conv_rate := l.currency_conversion_rate;
5456 
5457         IF (l.currency_code = l_mrc_ledger.ledger_currency) THEN
5458 
5459           l_conv_rate := 1;
5460 
5461         ELSE
5462 
5463           l_conv_date := nvl(l.currency_conversion_date,p_info.gl_date);
5464 
5465           BEGIN
5466 
5467             IF (l.from_type IN ('EMU', 'EURO') AND l.to_type IN ('EMU', 'EURO')) THEN
5468 
5469               IF (C_LEVEL_EVENT >= g_log_level) THEN
5470                 trace(p_msg    => ' case 1 ',
5471                       p_module => l_log_module,
5472                       p_level  => C_LEVEL_EVENT);
5473               END IF;
5474 
5475               l_conv_type := 'EMU Fixed';
5476               l_conv_rate := gl_currency_api.get_closest_rate
5477                             (x_from_currency    => l.currency_code
5478                             ,x_to_currency      => l_mrc_ledger.ledger_currency
5479                             ,x_conversion_date  => l_conv_date
5480                             ,x_conversion_type  => l_conv_type
5481                             ,x_max_roll_days    => l_mrc_ledger.max_roll_days);
5482 
5483             ELSIF (l.currency_conversion_type = 'User') THEN
5484               IF (l.primary_type IN ('EMU', 'EURO') AND l.from_type IN ('EMU', 'EURO')) THEN
5485 
5486                 IF (C_LEVEL_EVENT >= g_log_level) THEN
5487                   trace(p_msg    => ' case 2 ',
5488                         p_module => l_log_module,
5489                         p_level  => C_LEVEL_EVENT);
5490                 END IF;
5491 
5492                 l_conv_type := l_mrc_ledger.alc_default_conv_rate_type;
5493                 l_conv_rate := gl_currency_api.get_closest_rate
5494                             (x_from_currency    => l.currency_code
5495                             ,x_to_currency      => l_mrc_ledger.ledger_currency
5496                             ,x_conversion_date  => l_conv_date
5497                             ,x_conversion_type  => l_conv_type
5498                             ,x_max_roll_days    => l_mrc_ledger.max_roll_days);
5499               ELSE
5500 
5501                 IF (C_LEVEL_EVENT >= g_log_level) THEN
5502                   trace(p_msg    => ' case 3 ',
5503                         p_module => l_log_module,
5504                         p_level  => C_LEVEL_EVENT);
5505                 END IF;
5506 
5507                 l_conv_type := 'User';
5508                 l_conv_rate := l.currency_conversion_rate *
5509                            gl_currency_api.get_closest_rate
5510                             (x_from_currency    => l_trx_ledger_currency
5511                             ,x_to_currency      => l_mrc_ledger.ledger_currency
5512                             ,x_conversion_date  => l_conv_date
5513                             ,x_conversion_type  => l_mrc_ledger.alc_default_conv_rate_type
5514                             ,x_max_roll_days    => l_mrc_ledger.max_roll_days);
5515               END IF;
5516             ELSE
5517 
5518               IF (l_mrc_ledger.alc_inherit_conversion_type = 'Y' and l.currency_conversion_type IS NOT NULL) THEN
5519 
5520                 IF (C_LEVEL_EVENT >= g_log_level) THEN
5521                   trace(p_msg    => ' case 4 ',
5522                         p_module => l_log_module,
5523                         p_level  => C_LEVEL_EVENT);
5524                 END IF;
5525 
5526                 l_conv_type := l.currency_conversion_type;
5527                 l_conv_rate := gl_currency_api.get_closest_rate
5528                             (x_from_currency    => l.currency_code
5529                             ,x_to_currency      => l_mrc_ledger.ledger_currency
5530                             ,x_conversion_date  => l_conv_date
5531                             ,x_conversion_type  => l_conv_type
5532                             ,x_max_roll_days    => l_mrc_ledger.max_roll_days);
5533               ELSE
5534 
5535                 IF (C_LEVEL_EVENT >= g_log_level) THEN
5536                   trace(p_msg    => ' case 5 ',
5537                         p_module => l_log_module,
5538                         p_level  => C_LEVEL_EVENT);
5539                 END IF;
5540 
5541                 l_conv_type := l_mrc_ledger.alc_default_conv_rate_type;
5542                 l_conv_rate := gl_currency_api.get_closest_rate
5543                             (x_from_currency    => l.currency_code
5544                             ,x_to_currency      => l_mrc_ledger.ledger_currency
5545                             ,x_conversion_date  => l_conv_date
5546                             ,x_conversion_type  => l_conv_type
5547                             ,x_max_roll_days    => l_mrc_ledger.max_roll_days);
5548               END IF;
5549             END IF;
5550 
5551             IF (C_LEVEL_EVENT >= g_log_level) THEN
5552               trace(p_msg    => '  return: l_conv_type = '||l_conv_type||', l_conv_rate = '||l_conv_rate,
5553                     p_module => l_log_module,
5554                     p_level  => C_LEVEL_EVENT);
5555             END IF;
5556 
5557           EXCEPTION
5558             WHEN gl_currency_api.NO_RATE THEN
5559               p_status_codes(i) := C_AE_STATUS_INVALID;
5560               l_retcode := C_COMPLETION_FAILED;
5561               l_conv_rate := NULL;
5562 
5563               xla_accounting_err_pkg.build_message(
5564                      p_appli_s_name         => 'XLA'
5565                     ,p_msg_name             => 'XLA_MJE_MRC_NO_RATE'
5566                     ,p_token_1              => 'ALC_LEDGER'
5567                     ,p_value_1              => l_mrc_ledger.ledger_name
5568                     ,p_token_2              => 'LEDGER'
5569                     ,p_value_2              => l_trx_ledger_name
5570                     ,p_token_3              => 'CURRENCY_CODE'
5571                     ,p_value_3              => l.currency_code
5572                     ,p_token_4              => 'CONVERSION_DATE'
5573                     ,p_value_4              => l.currency_conversion_date
5574                     ,p_entity_id            => p_info.entity_id
5575                     ,p_event_id             => p_info.event_id
5576                     ,P_LEDGER_id            => l_mrc_ledger.ledger_id
5577                     ,p_ae_header_id         => p_ae_header_ids(i)
5578                     ,p_ae_line_num          => l.displayed_line_number
5579                     ,p_accounting_batch_id  => p_info.accounting_batch_id);
5580           END;
5581 
5582         END IF;
5583       END IF;
5584 
5585       IF(l_trx_ledger_currency = l_mrc_ledger.ledger_currency ) THEN
5586         l_accounted_cr := l.accounted_cr;
5587         l_accounted_dr := l.accounted_dr;
5588       ELSE
5589         l_accounted_cr := round_currency(l.unrounded_entered_cr * l_conv_rate,
5590                                     l_mrc_ledger.ledger_currency, l_trx_rounding_rule); -- accounted cr
5591         l_accounted_dr := round_currency(l.unrounded_entered_dr * l_conv_rate,
5592                                     l_mrc_ledger.ledger_currency, l_trx_rounding_rule); -- accounted dr
5593       END IF;
5594 
5595       --
5596       -- Create journal entry lines for the mrc entry
5597       --
5598       INSERT INTO xla_ae_lines
5599        		(ae_header_id
5600        		,ae_line_num
5601                 ,displayed_line_number
5602        		,application_id
5603        		,code_combination_id
5604        		,gl_transfer_mode_code
5605        		,accounting_class_code
5606        		,creation_date
5607        		,created_by
5608        		,last_update_date
5609        		,last_updated_by
5610        		,last_update_login
5611        		,party_id
5612        		,party_site_id
5613        		,party_type_code
5614        		,entered_dr
5615        		,entered_cr
5616        		,accounted_dr
5617        		,accounted_cr
5618                 ,unrounded_entered_dr
5619                 ,unrounded_entered_cr
5620        		,unrounded_accounted_dr
5621    	        ,unrounded_accounted_cr
5622       		,description
5623        		,statistical_amount
5624        		,currency_code
5625        		,currency_conversion_type
5626        		,currency_conversion_date
5627        		,currency_conversion_rate
5628        		,jgzz_recon_ref
5629        		,ussgl_transaction_code
5630                 ,gl_sl_link_table
5631        		,attribute_category
5632                 ,encumbrance_type_id
5633        		,attribute1
5634        		,attribute2
5635        		,attribute3
5636        		,attribute4
5637        		,attribute5
5638        		,attribute6
5639        		,attribute7
5640        		,attribute8
5641        		,attribute9
5642        		,attribute10
5643        		,attribute11
5644        		,attribute12
5645        		,attribute13
5646        		,attribute14
5647        		,attribute15
5648             ,gain_or_loss_flag
5649             ,ledger_id
5650             ,accounting_date
5651             ,mpa_accrual_entry_flag)  -- 4262811
5652       VALUES
5653        		(p_ae_header_ids(i)
5654        		,l.ae_line_num
5655                 ,l.displayed_line_number
5656        		,p_info.application_id
5657        		,l.code_combination_id
5658        		,l.gl_transfer_mode_code
5659        		,l.accounting_class_code
5660        		,sysdate
5661        		,l_last_updated_by
5662        		,sysdate
5663        		,l_last_updated_by
5664        		,l_last_update_login
5665        		,l.party_id
5666        		,l.party_site_id
5667        		,l.party_type_code
5668        		,l.entered_dr
5669        		,l.entered_cr
5670                 ,l_accounted_dr
5671                 ,l_accounted_cr
5672                 ,l.unrounded_entered_dr               -- unrounded entered dr
5673                 ,l.unrounded_entered_cr               -- unrounded entered cr
5674                 ,DECODE(l_trx_ledger_currency,l_mrc_ledger.ledger_currency
5675                        ,l.unrounded_accounted_dr,l.unrounded_entered_dr * l_conv_rate) -- unrounded accounted dr
5676                 ,DECODE(l_trx_ledger_currency,l_mrc_ledger.ledger_currency
5677                        ,l.unrounded_accounted_cr,l.unrounded_entered_cr * l_conv_rate) -- unrounded accounted cr
5678                 ,l.description
5679        	        ,l.statistical_amount
5680       	        ,l.currency_code
5681        	        ,decode(l.currency_code, l_mrc_ledger.ledger_currency, NULL, l_conv_type)
5682        	        ,decode(l.currency_code, l_mrc_ledger.ledger_currency, NULL, l_conv_date)
5683        	        ,decode(l.currency_code, l_mrc_ledger.ledger_currency, NULL, l_conv_rate)
5684        	        ,l.jgzz_recon_ref
5685        	        ,l.ussgl_transaction_code
5686                 ,'XLAJEL'
5687        	        ,l.attribute_category
5688      	        ,l.encumbrance_type_id
5689        	        ,l.attribute1
5690        	        ,l.attribute2
5691        	        ,l.attribute3
5692        	        ,l.attribute4
5693        	        ,l.attribute5
5694        	        ,l.attribute6
5695        	        ,l.attribute7
5696        	        ,l.attribute8
5697        	        ,l.attribute9
5698        	        ,l.attribute10
5699        	        ,l.attribute11
5700        	        ,l.attribute12
5701        	        ,l.attribute13
5702        	        ,l.attribute14
5703        	        ,l.attribute15
5704                 ,l.gain_or_loss_flag
5705      	        ,l_mrc_ledger.ledger_id
5706                 ,p_info.gl_date
5707                 ,NVL(l.mpa_accrual_entry_flag,'N'));     -- 4262811 mpa_accrual_entry_flag
5708 
5709        --
5710        -- Populate distribution links
5711        --
5712        IF NOT is_reversal
5713                 (p_application_id => p_info.application_id
5714                 ,p_ae_header_id   => p_info.header_id
5715                 ,p_temp_line_num  => l.ae_line_num)
5716        THEN
5717 
5718           create_distribution_link
5719             (p_application_id    => p_info.application_id
5720             ,p_ae_header_id      => p_ae_header_ids(i)
5721             ,p_ae_line_num       => l.ae_line_num
5722             ,p_temp_line_num     => l.ae_line_num
5723             ,p_ref_ae_header_id  => p_ae_header_ids(i)
5724             ,p_ref_event_id      => NULL
5725             ,p_ref_temp_line_num => NULL);
5726 
5727        ELSE
5728 
5729           l_temp_line_num := l.ae_line_num;
5730           --
5731           -- When reversal entries are updated
5732           -- create_mrc_entries is called insted of create_mrc_reversal_entry
5733           -- because it is not a 'Reversal' event.
5734           -- Mrc entries are deleted when draft entries are updated
5735           -- Therefore, need to retrieve reference information for mrc entries
5736           -- again.
5737           --
5738           get_mrc_rev_line_info
5739             (p_application_id    => p_info.application_id
5740             ,p_ae_header_id      => p_info.header_id
5741             ,p_temp_line_num     => l_temp_line_num  -- IN OUT
5742             ,p_ref_ae_header_id  => l_ref_ae_header_id
5743             ,p_ref_temp_line_num => l_ref_temp_line_num
5744             ,p_ref_event_id      => l_ref_event_id);
5745 
5746           create_distribution_link
5747             (p_application_id    => p_info.application_id
5748             ,p_ae_header_id      => p_ae_header_ids(i)
5749             ,p_ae_line_num       => l.ae_line_num
5750             ,p_temp_line_num     => l_temp_line_num
5751             ,p_ref_ae_header_id  => l_ref_ae_header_id
5752             ,p_ref_event_id      => l_ref_event_id
5753             ,p_ref_temp_line_num => l_ref_temp_line_num);
5754 
5755        END IF;
5756 
5757     END LOOP;
5758 
5759     IF (C_LEVEL_EVENT >= g_log_level) THEN
5760       trace(p_msg    => 'END LOOP - copy lines',
5761             p_module => l_log_module,
5762             p_level  => C_LEVEL_EVENT);
5763     END IF;
5764 
5765     --
5766     -- Copy the journal entry lines' analytical criteria from the original entry to
5767     -- the mrc entry
5768     --
5769     INSERT INTO xla_ae_line_acs (
5770            ae_header_id
5771           ,ae_line_num
5772           ,analytical_criterion_code
5773           ,analytical_criterion_type_code
5774           ,amb_context_code
5775           ,ac1
5776           ,ac2
5777           ,ac3
5778           ,ac4
5779           ,ac5
5780           ,object_version_number)
5781     SELECT p_ae_header_ids(i)
5782           ,ae_line_num
5783           ,analytical_criterion_code
5784           ,analytical_criterion_type_code
5785           ,amb_context_code
5786           ,ac1
5787           ,ac2
5788           ,ac3
5789           ,ac4
5790           ,ac5
5791           ,1
5792       FROM xla_ae_line_acs
5793      WHERE ae_header_id = p_info.header_id;
5794 
5795   END LOOP;
5796 
5797   END IF;
5798 
5799   IF (C_LEVEL_EVENT >= g_log_level) THEN
5800     trace(p_msg    => 'END LOOP - mrc ledgers',
5801           p_module => l_log_module,
5802           p_level  => C_LEVEL_EVENT);
5803   END IF;
5804 
5805   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5806     trace(p_msg    => 'END of procedure create_mrc_entries',
5807           p_module => l_log_module,
5808           p_level  => C_LEVEL_PROCEDURE);
5809   END IF;
5810 
5811   RETURN l_retcode;
5812 EXCEPTION
5813 WHEN xla_exceptions_pkg.application_exception THEN
5814   IF (c_lines%ISOPEN) THEN
5815     CLOSE c_lines;
5816   END IF;
5817   IF (c_mrc_ledgers%ISOPEN) THEN
5818     CLOSE c_mrc_ledgers;
5819   END IF;
5820 
5821   RAISE;
5822 WHEN OTHERS                                   THEN
5823   IF (c_lines%ISOPEN) THEN
5824     CLOSE c_lines;
5825   END IF;
5826   IF (c_mrc_ledgers%ISOPEN) THEN
5827     CLOSE c_mrc_ledgers;
5828   END IF;
5829 
5830   xla_exceptions_pkg.raise_message
5831       (p_location => 'xla_journal_entries_pkg.create_mrc_entries');
5832 
5833 END create_mrc_entries;
5834 
5835 
5836 --=============================================================================
5837 --
5838 -- Name: delete_mrc_entries
5839 -- Description: Delete MRC entries for a journal entry.
5840 --
5841 --=============================================================================
5842 PROCEDURE delete_mrc_entries
5843   (p_event_id		IN  INTEGER
5844   ,p_application_id	IN  INTEGER
5845   ,p_ledger_id		IN  INTEGER)
5846 IS
5847   CURSOR c_entries IS
5848     SELECT h.ae_header_id
5849       FROM xla_ae_headers h
5850      WHERE h.event_id          = p_event_id
5851        AND h.application_id    = p_application_id
5852        AND h.ledger_id         <> p_ledger_id;
5853 
5854   i		INTEGER := 0;
5855   j		INTEGER := 0;
5856   l_header_ids	t_array_int;
5857   l_log_module          VARCHAR2(240);
5858 BEGIN
5859   IF g_log_enabled THEN
5860     l_log_module := C_DEFAULT_MODULE||'.delete_mrc_entries';
5861   END IF;
5862 
5863   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5864     trace(p_msg    => 'BEGIN of procedure delete_mrc_entries',
5865           p_module => l_log_module,
5866           p_level  => C_LEVEL_PROCEDURE);
5867   END IF;
5868 
5869   IF (C_LEVEL_EVENT >= g_log_level) THEN
5870     trace(p_msg    => '    p_event_id       = '||p_event_id,
5871           p_module => l_log_module,
5872           p_level  => C_LEVEL_EVENT);
5873     trace(p_msg    => '    p_application_id = '||p_application_id,
5874           p_module => l_log_module,
5875           p_level  => C_LEVEL_EVENT);
5876     trace(p_msg    => '    p_ledger_id      = '||p_ledger_id,
5877           p_module => l_log_module,
5878           p_level  => C_LEVEL_EVENT);
5879   END IF;
5880 
5881   IF (C_LEVEL_EVENT >= g_log_level) THEN
5882     trace(p_msg    => 'BEGIN LOOP - delete mrc entries',
5883           p_module => l_log_module,
5884           p_level  => C_LEVEL_EVENT);
5885   END IF;
5886 
5887   FOR l_entry IN c_entries LOOP
5888     IF (C_LEVEL_EVENT >= g_log_level) THEN
5889       trace(p_msg    => 'LOOP - delete MRC entry: ae_header_id = '||l_entry.ae_header_id,
5890             p_module => l_log_module,
5891             p_level  => C_LEVEL_EVENT);
5892     END IF;
5893 
5894     i := i+1;
5895     l_header_ids(i) := l_entry.ae_header_id;
5896   END LOOP;
5897 
5898   IF (C_LEVEL_EVENT >= g_log_level) THEN
5899     trace(p_msg    => 'END LOOP - delete mrc entries',
5900           p_module => l_log_module,
5901           p_level  => C_LEVEL_EVENT);
5902   END IF;
5903 
5904   FORALL j in 1..i
5905     DELETE FROM xla_ae_line_acs
5906       WHERE ae_header_id = l_header_ids(j);
5907 
5908   FORALL j in 1..i
5909     DELETE FROM xla_ae_header_acs
5910       WHERE ae_header_id = l_header_ids(j);
5911 
5912   FORALL j IN 1..i
5913     DELETE xla_distribution_links
5914      WHERE ae_header_id   = l_header_ids(j)
5915        AND application_id = p_application_id;
5916 
5917   FORALL j in 1..i
5918     DELETE FROM xla_ae_segment_values
5919       WHERE ae_header_id = l_header_ids(j);
5920 
5921   FORALL j in 1..i
5922     DELETE FROM xla_ae_lines
5923       WHERE ae_header_id = l_header_ids(j)
5924 	AND application_id = p_application_id;
5925 
5926   FORALL j in 1..i
5927     DELETE xla_ae_headers
5928       WHERE ae_header_id = l_header_ids(j)
5929 	AND application_id = p_application_id;
5930 
5931   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5932     trace(p_msg    => 'END of procedure delete_mrc_entries',
5933           p_module => l_log_module,
5934           p_level  => C_LEVEL_PROCEDURE);
5935   END IF;
5936 
5937 EXCEPTION
5938 WHEN xla_exceptions_pkg.application_exception THEN
5939   ROLLBACK;
5940   IF (c_entries%ISOPEN) THEN
5941     CLOSE c_entries;
5942   END IF;
5943   RAISE;
5944 
5945 WHEN OTHERS                                   THEN
5946   ROLLBACK;
5947   IF (c_entries%ISOPEN) THEN
5948     CLOSE c_entries;
5949   END IF;
5950   xla_exceptions_pkg.raise_message
5951       (p_location => 'xla_journal_entries_pkg.delete_mrc_entries');
5952 END delete_mrc_entries;
5953 
5954 --=============================================================================
5955 --
5956 -- Name: transfer_to_gl
5957 -- Description: If the completion option is Transfer or Transfer and Post,
5958 --              issue Transfer to GL program.
5959 --
5960 --=============================================================================
5961 PROCEDURE transfer_to_gl
5962  (p_info                  IN t_je_info
5963  ,p_application_id        IN INTEGER
5964  ,p_completion_option     IN VARCHAR2
5965  ,p_transfer_request_id   IN OUT NOCOPY INTEGER)
5966 IS
5967   l_accounting_batch_id    INTEGER;
5968   l_transfer_errbuf 	   VARCHAR2(30);
5969   l_transfer_retcode	   NUMBER;
5970   l_event_source_info      xla_events_pub_pkg.t_event_source_info;
5971 
5972   l_log_module             VARCHAR2(240);
5973 BEGIN
5974   IF g_log_enabled THEN
5975     l_log_module := C_DEFAULT_MODULE||'.transfer_to_gl';
5976   END IF;
5977 
5978   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5979     trace(p_msg    => 'BEGIN of procedure transfer_to_gl',
5980           p_module => l_log_module,
5981           p_level  => C_LEVEL_PROCEDURE);
5982   END IF;
5983 
5984   IF (p_info.type_code <> C_TYPE_UPGRADE AND
5985       p_completion_option in (C_COMPLETION_OPTION_TRANSFER,
5986                               C_COMPLETION_OPTION_POST)) THEN
5987 
5988     IF (p_completion_option = C_COMPLETION_OPTION_TRANSFER) THEN
5989       -- Transfer to GL
5990       l_event_source_info.application_id := p_application_id;
5991       xla_accounting_pub_pkg.accounting_program_document
5992     	  (p_event_source_info 		=> l_event_source_info
5993     	  ,p_entity_id         		=> p_info.entity_id
5994     	  ,p_accounting_flag   		=> 'N'
5995     	  ,p_accounting_mode   		=> NULL
5996     	  ,p_transfer_flag     		=> 'Y'
5997     	  ,p_gl_posting_flag   		=> 'N'
5998     	  ,p_offline_flag     		=> 'Y'
5999     	  ,p_accounting_batch_id	=> l_accounting_batch_id
6000     	  ,p_errbuf  			=> l_transfer_errbuf
6001     	  ,p_retcode  			=> l_transfer_retcode
6002     	  ,p_request_id       		=> p_transfer_request_id);
6003 
6004     ELSE
6005       -- Transfer and post to GL
6006       l_event_source_info.application_id := p_application_id;
6007       xla_accounting_pub_pkg.accounting_program_document
6008     	  (p_event_source_info 		=> l_event_source_info
6009     	  ,p_entity_id         		=> p_info.entity_id
6010     	  ,p_accounting_flag   		=> 'N'
6011     	  ,p_accounting_mode   		=> NULL
6012     	  ,p_transfer_flag     		=> 'Y'
6013     	  ,p_gl_posting_flag   		=> 'Y'
6014     	  ,p_offline_flag     		=> 'Y'
6015     	  ,p_accounting_batch_id	=> l_accounting_batch_id
6016     	  ,p_errbuf  			=> l_transfer_errbuf
6017     	  ,p_retcode  			=> l_transfer_retcode
6018     	  ,p_request_id       		=> p_transfer_request_id);
6019     END IF;
6020 
6021   END IF;
6022 
6023   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6024     trace(p_msg    => 'END of procedure transfer_to_gl',
6025           p_module => l_log_module,
6026           p_level  => C_LEVEL_PROCEDURE);
6027   END IF;
6028 
6029 EXCEPTION
6030 WHEN xla_exceptions_pkg.application_exception THEN
6031   ROLLBACK;
6032   RAISE;
6033 
6034 WHEN OTHERS                                   THEN
6035   xla_exceptions_pkg.raise_message
6036       (p_location => 'xla_journal_entries_pkg.transfer_to_gl');
6037 END transfer_to_gl;
6038 
6039 --=============================================================================
6040 --
6041 -- Name: update_event_status
6042 -- Description: Update the event status to Processed.
6043 --
6044 --=============================================================================
6045 PROCEDURE update_event_status
6046  (p_info                   IN t_je_info
6047  ,p_completion_option      IN VARCHAR2)
6048 IS
6049   l_event_source_info   xla_events_pub_pkg.t_event_source_info;
6050   l_event_status        VARCHAR2(30);
6051   l_process_status      VARCHAR2(30);
6052 
6053   l_log_module          VARCHAR2(240);
6054 BEGIN
6055   IF g_log_enabled THEN
6056     l_log_module := C_DEFAULT_MODULE||'.update_event_status';
6057   END IF;
6058 
6059   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6060     trace(p_msg    => 'BEGIN of procedure update_event_status',
6061           p_module => l_log_module,
6062           p_level  => C_LEVEL_PROCEDURE);
6063   END IF;
6064 
6065   --
6066   -- Update event status to 'Processed'
6067   --
6068   l_event_source_info.application_id    := p_info.application_id;
6069   l_event_source_info.legal_entity_id   := p_info.legal_entity_id;
6070   l_event_source_info.ledger_id         := p_info.ledger_id;
6071   l_event_source_info.entity_type_code  := C_ENTITY_TYPE_CODE_MANUAL;
6072 
6073   IF (p_completion_option = C_COMPLETION_OPTION_DRAFT) THEN
6074     l_event_status   := xla_events_pub_pkg.C_EVENT_UNPROCESSED;
6075     l_process_status := xla_events_pkg.C_INTERNAL_DRAFT;
6076   ELSE
6077     l_event_status   := xla_events_pub_pkg.C_EVENT_PROCESSED;
6078     l_process_status := xla_events_pkg.C_INTERNAL_FINAL;
6079   END IF;
6080 
6081   xla_events_pkg.update_manual_event
6082      		(p_event_source_info 	=> l_event_source_info
6083      		,p_event_id		=> p_info.event_id
6084      		,p_event_status_code    => l_event_status
6085      		,p_process_status_code	=> l_process_status);
6086 
6087   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6088     trace(p_msg    => 'BEGIN of procedure update_event_status',
6089           p_module => l_log_module,
6090           p_level  => C_LEVEL_PROCEDURE);
6091   END IF;
6092 
6093 EXCEPTION
6094 WHEN xla_exceptions_pkg.application_exception THEN
6095   ROLLBACK;
6096   RAISE;
6097 
6098 WHEN OTHERS                                   THEN
6099   ROLLBACK;
6100   xla_exceptions_pkg.raise_message
6101       (p_location => 'xla_journal_entries_pkg.update_event_status');
6102 END update_event_status;
6103 
6104 
6105 --=============================================================================
6106 --
6107 --
6108 --
6109 --=============================================================================
6110 FUNCTION round_currency
6111   (p_amount         IN NUMBER
6112   ,p_currency_code  IN VARCHAR2
6113   ,p_rounding_rule_code IN VARCHAR2)
6114 RETURN NUMBER
6115 IS
6116   l_rounded_amount  NUMBER;
6117   l_log_module          VARCHAR2(240);
6118 BEGIN
6119   IF g_log_enabled THEN
6120     l_log_module := C_DEFAULT_MODULE||'.round_currency';
6121   END IF;
6122 
6123   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6124     trace(p_msg    => 'BEGIN of procedure round_currency',
6125           p_module => l_log_module,
6126           p_level  => C_LEVEL_PROCEDURE);
6127   END IF;
6128 
6129   SELECT decode(p_rounding_rule_code
6130            ,'UP'
6131                ,ceil(p_amount/nvl(minimum_accountable_unit, power(10, -1* precision)))*
6132                              nvl(minimum_accountable_unit, power(10, -1* precision))
6133            ,'DOWN'
6134                ,floor(p_amount/nvl(minimum_accountable_unit, power(10, -1* precision)))*
6135                              nvl(minimum_accountable_unit, power(10, -1* precision))
6136            ,decode(minimum_accountable_unit, NULL,
6137                 round(p_amount, precision),
6138                 round(p_amount/minimum_accountable_unit) * minimum_accountable_unit))
6139   INTO   l_rounded_amount
6140   FROM   fnd_currencies
6141   WHERE  currency_code = p_currency_code;
6142 
6143   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6144     trace(p_msg    => 'currency_code = '||p_currency_code,
6145           p_module => l_log_module,
6146           p_level  => C_LEVEL_STATEMENT);
6147     trace(p_msg    => p_amount||' is converted to '||l_rounded_amount,
6148           p_module => l_log_module,
6149           p_level  => C_LEVEL_STATEMENT);
6150   END IF;
6151 
6152   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6153     trace(p_msg    => 'END of procedure round_currency',
6154           p_module => l_log_module,
6155           p_level  => C_LEVEL_PROCEDURE);
6156   END IF;
6157 
6158 
6159   RETURN(l_rounded_amount);
6160 EXCEPTION
6161 
6162 WHEN NO_DATA_FOUND 			      THEN
6163   RETURN (NULL);
6164 
6165 WHEN xla_exceptions_pkg.application_exception THEN
6166   ROLLBACK;
6167   RAISE;
6168 
6169 WHEN OTHERS                                   THEN
6170   ROLLBACK;
6171   xla_exceptions_pkg.raise_message
6172       (p_location => 'xla_journal_entries_pkg.round_currency');
6173 END round_currency;
6174 
6175 
6176 --=============================================================================
6177 --
6178 --
6179 --
6180 --=============================================================================
6181 PROCEDURE validate_balance_type_code
6182   (p_balance_type_code	IN  VARCHAR2
6183   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
6184 IS
6185   l_log_module          VARCHAR2(240);
6186 BEGIN
6187   IF g_log_enabled THEN
6188     l_log_module := C_DEFAULT_MODULE||'.validate_balance_type_code';
6189   END IF;
6190 
6191   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6192     trace(p_msg    => 'BEGIN of procedure validate_balance_type_code',
6193           p_module => l_log_module,
6194           p_level  => C_LEVEL_PROCEDURE);
6195   END IF;
6196 
6197   IF (p_balance_type_code NOT in (C_JE_ACTUAL, C_JE_BUDGET, C_JE_ENCUMBRANCE)) THEN
6198     IF (C_LEVEL_ERROR >= g_log_level) THEN
6199       trace(p_msg    => 'Error: XLA_AP_INVALID_BALANCE_TYPE: '||p_balance_type_code,
6200             p_module => l_log_module,
6201             p_level  => C_LEVEL_ERROR);
6202     END IF;
6203 
6204     xla_exceptions_pkg.raise_message
6205 	 (p_appli_s_name	=> 'XLA'
6206          ,p_msg_name		=> 'XLA_AP_INVALID_BALANCE_TYPE'
6207 	 ,p_token_1		=> 'BALANCE_TYPE'
6208 	 ,p_value_1		=> p_balance_type_code
6209 	 ,p_msg_mode		=> p_msg_mode);
6210   END IF;
6211 
6212   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6213     trace(p_msg    => 'END of procedure validate_balance_type_code',
6214           p_module => l_log_module,
6215           p_level  => C_LEVEL_PROCEDURE);
6216   END IF;
6217 
6218 EXCEPTION
6219 WHEN xla_exceptions_pkg.application_exception THEN
6220   RAISE;
6221 
6222 WHEN OTHERS THEN
6223     xla_exceptions_pkg.raise_message
6224       (p_location => 'xla_journal_entries_pkg.validate_balance_type_code');
6225 END validate_balance_type_code;
6226 
6227 
6228 --=============================================================================
6229 --
6230 --
6231 --
6232 --=============================================================================
6233 FUNCTION validate_legal_entity_id
6234   (p_entity_id		IN  INTEGER
6235   ,p_event_id		IN  INTEGER
6236   ,p_ledger_id		IN  INTEGER
6237   ,p_ae_header_id	IN  INTEGER
6238   ,p_legal_entity_id  	IN  INTEGER)
6239 RETURN INTEGER
6240 IS
6241   CURSOR c IS 	SELECT	legal_entity_id
6242 		FROM 	xle_fp_ou_ledger_v
6243 		WHERE	legal_entity_id = p_legal_entity_id;
6244 
6245   l_le_id   	INTEGER;
6246   l_result	INTEGER := 0;
6247   l_log_module          VARCHAR2(240);
6248 BEGIN
6249   IF g_log_enabled THEN
6250     l_log_module := C_DEFAULT_MODULE||'.validate_legal_entity_id';
6251   END IF;
6252 
6253   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6254     trace(p_msg    => 'BEGIN of procedure validate_legal_entity_id',
6255           p_module => l_log_module,
6256           p_level  => C_LEVEL_PROCEDURE);
6257   END IF;
6258 
6259   IF (p_legal_entity_id IS NULL) THEN
6260     return l_result;
6261   END IF;
6262 
6263   OPEN c;
6264   FETCH c INTO l_le_id;
6265   CLOSE c;
6266 
6267   IF (l_le_id IS NULL) THEN
6268     IF (C_LEVEL_ERROR >= g_log_level) THEN
6269       trace(p_msg    => 'Error: XLA_MJE_INVALID_LEGAL_ENT_ID: '||p_legal_entity_id,
6270             p_module => l_log_module,
6271             p_level  => C_LEVEL_ERROR);
6272     END IF;
6273 
6274     xla_accounting_err_pkg.build_message(
6275          p_appli_s_name         => 'XLA'
6276         ,p_msg_name             => 'XLA_MJE_INVALID_LEGAL_ENT_ID'
6277 	,p_token_1		=> 'LEGAL_ENTITY_ID'
6278 	,p_value_1		=> p_legal_entity_id
6279         ,p_entity_id            => p_entity_id
6280         ,p_event_id             => p_event_id
6281         ,p_ledger_id            => p_ledger_id
6282         ,p_ae_header_id         => p_ae_header_id
6283         ,p_ae_line_num          => NULL
6284         ,p_accounting_batch_id  => NULL);
6285     l_result := 1;
6286   END IF;
6287 
6288   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6289     trace(p_msg    => 'END of procedure validate_legal_entity_id',
6290           p_module => l_log_module,
6291           p_level  => C_LEVEL_PROCEDURE);
6292   END IF;
6293 
6294   RETURN l_result;
6295 EXCEPTION
6296 WHEN xla_exceptions_pkg.application_exception THEN
6297   IF (c%ISOPEN) THEN
6298     CLOSE c;
6299   END IF;
6300   RAISE;
6301 
6302 WHEN OTHERS                                   THEN
6303   IF (c%ISOPEN) THEN
6304     CLOSE c;
6305   END IF;
6306   xla_exceptions_pkg.raise_message
6307       (p_location => 'xla_journal_entries_pkg.validate_legal_entity_id');
6308 END validate_legal_entity_id;
6309 
6310 --=============================================================================
6311 --
6312 --
6313 --
6314 --=============================================================================
6315 FUNCTION validate_line_counts
6316   (p_entity_id		IN  INTEGER
6317   ,p_event_id		IN  INTEGER
6318   ,p_ledger_id		IN  INTEGER
6319   ,p_ae_header_id	IN  INTEGER
6320   ,p_application_id  	IN  INTEGER
6321   ,p_balance_type_code  IN  VARCHAR2)
6322 RETURN INTEGER
6323 IS
6324   CURSOR c IS   SELECT    nvl(sum(nvl(accounted_dr,0)),0)
6325                         , nvl(sum(nvl(accounted_cr,0)),1)
6326                         , nvl(sum(CASE WHEN accounted_dr IS NULL THEN 0 ELSE 1 end),0)
6327                         , nvl(sum(CASE WHEN accounted_cr IS NULL THEN 0 ELSE 1 end),0)
6328                         , nvl(sum(CASE WHEN currency_code = 'STAT' THEN 1 ELSE 0 end),0)
6329                 FROM      xla_ae_lines
6330                 WHERE     application_id = p_application_id
6331                 AND       ae_header_id = p_ae_header_id;
6332 
6333   l_total_acct_dr       NUMBER := 0;
6334   l_total_acct_cr       NUMBER := 0;
6335   l_num_dr              INTEGER := 0;
6336   l_num_cr              INTEGER := 0;
6337   l_num_stat            INTEGER := 0;
6338   l_result	        INTEGER := 0;
6339   l_log_module          VARCHAR2(240);
6340 BEGIN
6341   IF g_log_enabled THEN
6342     l_log_module := C_DEFAULT_MODULE||'.validate_line_counts';
6343   END IF;
6344 
6345   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6346     trace(p_msg    => 'BEGIN of procedure validate_line_counts',
6347           p_module => l_log_module,
6348           p_level  => C_LEVEL_PROCEDURE);
6349   END IF;
6350 
6351   OPEN c;
6352   FETCH c INTO l_total_acct_dr, l_total_acct_cr, l_num_dr, l_num_cr, l_num_stat;
6353   CLOSE c;
6354 
6355   IF (l_num_stat>0) THEN
6356     IF (p_balance_type_code <> 'A') THEN
6357       IF (C_LEVEL_ERROR >= g_log_level) THEN
6358         trace(p_msg    => 'Error: XLA_MJE_INVALID_STAT_ENTRY_TYP',
6359               p_module => l_log_module,
6360               p_level  => C_LEVEL_ERROR);
6361       END IF;
6362 
6363       xla_accounting_err_pkg.build_message(
6364          p_appli_s_name         => 'XLA'
6365         ,p_msg_name             => 'XLA_MJE_INVALID_STAT_ENTRY_TYP'
6366         ,p_entity_id            => p_entity_id
6367         ,p_event_id             => p_event_id
6368         ,p_ledger_id            => p_ledger_id
6369         ,p_ae_header_id         => p_ae_header_id
6370         ,p_ae_line_num          => NULL
6371         ,p_accounting_batch_id  => NULL);
6372       l_result := 1;
6373     END IF;
6374   ELSIF (p_balance_type_code = 'B') THEN
6375     IF (l_num_dr+l_num_cr<=0) THEN
6376       IF (C_LEVEL_ERROR >= g_log_level) THEN
6377         trace(p_msg    => 'Error: XLA_MJE_INVALID_NUM_LINES_BUDG',
6378               p_module => l_log_module,
6379               p_level  => C_LEVEL_ERROR);
6380       END IF;
6381 
6382       xla_accounting_err_pkg.build_message(
6383          p_appli_s_name         => 'XLA'
6384         ,p_msg_name             => 'XLA_MJE_INVALID_NUM_LINES_BUDG'
6385         ,p_entity_id            => p_entity_id
6386         ,p_event_id             => p_event_id
6387         ,p_ledger_id            => p_ledger_id
6388         ,p_ae_header_id         => p_ae_header_id
6389         ,p_ae_line_num          => NULL
6390         ,p_accounting_batch_id  => NULL);
6391       l_result := 1;
6392     END IF;
6393   ELSIF (p_balance_type_code = 'E') THEN
6394     IF (l_num_dr+l_num_cr<=0) THEN
6395       IF (C_LEVEL_ERROR >= g_log_level) THEN
6396         trace(p_msg    => 'Error: XLA_MJE_INVALID_NUM_LINES_ENC',
6397               p_module => l_log_module,
6398               p_level  => C_LEVEL_ERROR);
6399       END IF;
6400 
6401       xla_accounting_err_pkg.build_message(
6402          p_appli_s_name         => 'XLA'
6403         ,p_msg_name             => 'XLA_MJE_INVALID_NUM_LINES_ENC'
6404         ,p_entity_id            => p_entity_id
6405         ,p_event_id             => p_event_id
6406         ,p_ledger_id            => p_ledger_id
6407         ,p_ae_header_id         => p_ae_header_id
6408         ,p_ae_line_num          => NULL
6409         ,p_accounting_batch_id  => NULL);
6410       l_result := 1;
6411     END IF;
6412   ELSE
6413     IF (l_num_dr<=0 or l_num_cr<=0) THEN
6414       IF (C_LEVEL_ERROR >= g_log_level) THEN
6415         trace(p_msg    => 'Error: XLA_MJE_INVALID_NUM_LINES',
6416               p_module => l_log_module,
6417               p_level  => C_LEVEL_ERROR);
6418       END IF;
6419 
6420       xla_accounting_err_pkg.build_message(
6421          p_appli_s_name         => 'XLA'
6422         ,p_msg_name             => 'XLA_MJE_INVALID_NUM_LINES'
6423         ,p_entity_id            => p_entity_id
6424         ,p_event_id             => p_event_id
6425         ,p_ledger_id            => p_ledger_id
6426         ,p_ae_header_id         => p_ae_header_id
6427         ,p_ae_line_num          => NULL
6428         ,p_accounting_batch_id  => NULL);
6429       l_result := 1;
6430     END IF;
6431 
6432   END IF;
6433 
6434   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6435     trace(p_msg    => 'END of procedure validate_line_counts',
6436           p_module => l_log_module,
6437           p_level  => C_LEVEL_PROCEDURE);
6438   END IF;
6439 
6440   RETURN l_result;
6441 EXCEPTION
6442 WHEN xla_exceptions_pkg.application_exception THEN
6443   IF (c%ISOPEN) THEN
6444     CLOSE c;
6445   END IF;
6446   RAISE;
6447 WHEN OTHERS                                   THEN
6448   IF (c%ISOPEN) THEN
6449     CLOSE c;
6450   END IF;
6451   xla_exceptions_pkg.raise_message
6452       (p_location => 'xla_journal_entries_pkg.validate_line_counts');
6453 END validate_line_counts;
6454 
6455 --=============================================================================
6456 --
6457 --
6458 --
6459 --=============================================================================
6460 FUNCTION validate_description
6461   (p_entity_id		IN  INTEGER
6462   ,p_event_id		IN  INTEGER
6463   ,p_ledger_id		IN  INTEGER
6464   ,p_ae_header_id	IN  INTEGER
6465   ,p_description  	IN  VARCHAR2)
6466 RETURN INTEGER
6467 IS
6468   l_result	        INTEGER := 0;
6469   l_log_module          VARCHAR2(240);
6470 BEGIN
6471   IF g_log_enabled THEN
6472     l_log_module := C_DEFAULT_MODULE||'.validate_description';
6473   END IF;
6474 
6475   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6476     trace(p_msg    => 'BEGIN of procedure validate_description',
6477           p_module => l_log_module,
6478           p_level  => C_LEVEL_PROCEDURE);
6479   END IF;
6480 
6481   IF (length(trim(p_description)) = 0 or p_description IS NULL) THEN
6482       IF (C_LEVEL_ERROR >= g_log_level) THEN
6483         trace(p_msg    => 'Error: XLA_MJE_NO_DESCRIPTION',
6484               p_module => l_log_module,
6485               p_level  => C_LEVEL_ERROR);
6486       END IF;
6487 
6488       xla_accounting_err_pkg.build_message(
6489          p_appli_s_name         => 'XLA'
6490         ,p_msg_name             => 'XLA_MJE_NO_DESCRIPTION'
6491         ,p_entity_id            => p_entity_id
6492         ,p_event_id             => p_event_id
6493         ,p_ledger_id            => p_ledger_id
6494         ,p_ae_header_id         => p_ae_header_id
6495         ,p_ae_line_num          => NULL
6496         ,p_accounting_batch_id  => NULL);
6497     l_result := 1;
6498   END IF;
6499 
6500   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6501     trace(p_msg    => 'END of procedure validate_description',
6502           p_module => l_log_module,
6503           p_level  => C_LEVEL_PROCEDURE);
6504   END IF;
6505 
6506   RETURN l_result;
6507 EXCEPTION
6508 WHEN xla_exceptions_pkg.application_exception THEN
6509   RAISE;
6510 WHEN OTHERS                                   THEN
6511   xla_exceptions_pkg.raise_message
6512       (p_location => 'xla_journal_entries_pkg.validate_description');
6513 END validate_description;
6514 
6515 
6516 --=============================================================================
6517 --
6518 --
6519 --
6520 --=============================================================================
6521 PROCEDURE validate_delete_mode
6522   (p_status_code	IN  VARCHAR2
6523   ,p_mode 		IN  VARCHAR2
6524   ,p_msg_mode		IN  VARCHAR2)
6525 IS
6526   l_log_module          VARCHAR2(240);
6527 BEGIN
6528   IF g_log_enabled THEN
6529     l_log_module := C_DEFAULT_MODULE||'.validate_delete_mode';
6530   END IF;
6531 
6532   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6533     trace(p_msg    => 'BEGIN of procedure validate_delete_mode',
6534           p_module => l_log_module,
6535           p_level  => C_LEVEL_PROCEDURE);
6536   END IF;
6537 
6538   IF (p_mode NOT in (C_DELETE_NORMAL_MODE, C_DELETE_FORCE_MODE)) THEN
6539     IF (C_LEVEL_ERROR >= g_log_level) THEN
6540       trace(p_msg    => 'Error: XLA_MJE_INVALID_DELETE_MODE',
6541             p_module => l_log_module,
6542             p_level  => C_LEVEL_ERROR);
6543     END IF;
6544 
6545     xla_exceptions_pkg.raise_message
6546 	 (p_appli_s_name	=> 'XLA'
6547          ,p_msg_name		=> 'XLA_MJE_INVALID_DELETE_MODE'
6548 	 ,p_msg_mode		=> p_msg_mode);
6549   ELSIF (p_status_code = C_AE_STATUS_FINAL AND
6550          p_mode <> C_DELETE_FORCE_MODE) THEN
6551     IF (C_LEVEL_ERROR >= g_log_level) THEN
6552       trace(p_msg    => 'Error: XLA_MJE_INVALID_DELETE_FINAL',
6553             p_module => l_log_module,
6554             p_level  => C_LEVEL_ERROR);
6555     END IF;
6556 
6557     xla_exceptions_pkg.raise_message
6558 	 (p_appli_s_name	=> 'XLA'
6559          ,p_msg_name		=> 'XLA_MJE_INVALID_DELETE_FINAL'
6560 	 ,p_msg_mode		=> p_msg_mode);
6561   END IF;
6562 
6563   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6564     trace(p_msg    => 'END of procedure validate_delete_mode',
6565           p_module => l_log_module,
6566           p_level  => C_LEVEL_PROCEDURE);
6567   END IF;
6568 
6569 EXCEPTION
6570 WHEN xla_exceptions_pkg.application_exception THEN
6571   RAISE;
6572 WHEN OTHERS                                   THEN
6573   xla_exceptions_pkg.raise_message
6574       (p_location => 'xla_journal_entries_pkg.validate_delete_mode');
6575 END validate_delete_mode;
6576 
6577 
6578 --=============================================================================
6579 --
6580 --
6581 --
6582 --=============================================================================
6583 FUNCTION clear_errors
6584   (p_event_id		IN  INTEGER
6585   ,p_ae_header_id	IN  INTEGER
6586   ,p_ae_line_num	IN  INTEGER)
6587 RETURN BOOLEAN
6588 IS
6589   CURSOR c IS
6590   	SELECT	ae_header_id
6591 	FROM	xla_accounting_errors
6592 	WHERE	ae_header_id = p_ae_header_id
6593   	  AND	ROWNUM = 1;
6594   l_exists              INTEGER;
6595   l_retcode             BOOLEAN := TRUE;
6596   l_log_module          VARCHAR2(240);
6597 BEGIN
6598   IF g_log_enabled THEN
6599     l_log_module := C_DEFAULT_MODULE||'.clear_errors';
6600   END IF;
6601 
6602   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6603     trace(p_msg    => 'BEGIN of procedure clear_errors',
6604           p_module => l_log_module,
6605           p_level  => C_LEVEL_PROCEDURE);
6606   END IF;
6607 
6608   DELETE FROM xla_accounting_errors
6609 	WHERE	ae_header_id = p_ae_header_id
6610 	  AND	event_id = p_event_id
6611           AND	nvl(ae_line_num,-1)  = nvl(p_ae_line_num,-1);
6612 
6613   OPEN c;
6614   FETCH c INTO l_exists;
6615   IF (c%FOUND) THEN
6616     l_retcode := FALSE;
6617   END IF;
6618   CLOSE c;
6619 
6620   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6621     trace(p_msg    => 'END of procedure clear_errors',
6622           p_module => l_log_module,
6623           p_level  => C_LEVEL_PROCEDURE);
6624   END IF;
6625 
6626   RETURN l_retcode;
6627 EXCEPTION
6628 WHEN xla_exceptions_pkg.application_exception THEN
6629   IF (c%ISOPEN) THEN
6630     CLOSE c;
6631   END IF;
6632   RAISE;
6633 
6634 WHEN OTHERS                                   THEN
6635   IF (c%ISOPEN) THEN
6636     CLOSE c;
6637   END IF;
6638   xla_exceptions_pkg.raise_message
6639       (p_location => 'xla_journal_entries_pkg.clear_errors');
6640 END clear_errors;
6641 
6642 --=============================================================================
6643 --
6644 --
6645 --
6646 --=============================================================================
6647 /*
6648 FUNCTION unreserve_funds
6649   (p_ae_header_id      	IN  INTEGER
6650   ,p_application_id    	IN  INTEGER
6651   ,p_ledger_id         	IN  INTEGER
6652   ,p_packet_id         	IN  INTEGER
6653   ,p_msg_mode		IN  VARCHAR2	DEFAULT xla_exceptions_pkg.C_STANDARD_MESSAGE)
6654 RETURN BOOLEAN
6655 IS
6656   l_funds_retcode	VARCHAR2(30);
6657   l_retcode		BOOLEAN := TRUE;
6658   l_log_module          VARCHAR2(240);
6659 BEGIN
6660   IF g_log_enabled THEN
6661     l_log_module := C_DEFAULT_MODULE||'.unreserve_funds';
6662   END IF;
6663 
6664   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6665     trace(p_msg    => 'BEGIN of procedure unreserve_funds',
6666           p_module => l_log_module,
6667           p_level  => C_LEVEL_PROCEDURE);
6668   END IF;
6669 
6670   l_funds_retcode := xla_je_funds_checker_pkg.unreserve_funds(
6671 			p_ae_header_id		=> p_ae_header_id,
6672 			p_application_id 	=> p_application_id,
6673 			p_ledger_id		=> p_ledger_id,
6674 			p_packet_id		=> p_packet_id);
6675 
6676   IF (l_funds_retcode NOT in (C_FUNDS_SUCCESS, C_FUNDS_ADVISORY)) THEN
6677     l_retcode := FALSE;
6678   END IF;
6679 
6680   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6681     trace(p_msg    => 'END of procedure unreserve_funds',
6682           p_module => l_log_module,
6683           p_level  => C_LEVEL_PROCEDURE);
6684   END IF;
6685 
6686   RETURN l_retcode;
6687 EXCEPTION
6688 WHEN xla_exceptions_pkg.application_exception THEN
6689   RAISE;
6690 WHEN OTHERS                                   THEN
6691   xla_exceptions_pkg.raise_message
6692       (p_location => 'xla_journal_entries_pkg.unreserve_funds');
6693 END unreserve_funds;
6694 */
6695 
6696 
6697 --=============================================================================
6698 --
6699 --
6700 --
6701 --=============================================================================
6702 PROCEDURE get_ledger_info
6703   (p_ledger_id			IN  INTEGER
6704   ,p_application_id	        IN  INTEGER
6705   ,p_code_combination_id	IN  INTEGER
6706   ,p_funct_curr			OUT NOCOPY VARCHAR2
6707   ,p_rounding_rule_code		OUT NOCOPY VARCHAR2
6708   ,p_bal_seg_val		OUT NOCOPY VARCHAR2
6709   ,p_mgt_seg_val		OUT NOCOPY VARCHAR2)
6710 IS
6711   CURSOR c IS
6712     SELECT	gl.currency_code,
6713 		xlo.rounding_rule_code,
6714 		DECODE(gl.bal_seg_column_name, 	'SEGMENT1', ccid.segment1,
6715 						'SEGMENT2', ccid.segment2,
6716 						'SEGMENT3', ccid.segment3,
6717 						'SEGMENT4', ccid.segment4,
6718 						'SEGMENT5', ccid.segment5,
6719 						'SEGMENT6', ccid.segment6,
6720 						'SEGMENT7', ccid.segment7,
6721 						'SEGMENT8', ccid.segment8,
6722 						'SEGMENT9', ccid.segment9,
6723 						'SEGMENT10', ccid.segment10,
6724 					 	'SEGMENT11', ccid.segment11,
6725 						'SEGMENT12', ccid.segment12,
6726 						'SEGMENT13', ccid.segment13,
6727 						'SEGMENT14', ccid.segment14,
6728 						'SEGMENT15', ccid.segment15,
6729 						'SEGMENT16', ccid.segment16,
6730 						'SEGMENT17', ccid.segment17,
6731 						'SEGMENT18', ccid.segment18,
6732 						'SEGMENT19', ccid.segment19,
6733 						'SEGMENT20', ccid.segment20,
6734 					 	'SEGMENT21', ccid.segment21,
6735 						'SEGMENT22', ccid.segment22,
6736 						'SEGMENT23', ccid.segment23,
6737 						'SEGMENT24', ccid.segment24,
6738 						'SEGMENT25', ccid.segment25,
6739 						'SEGMENT26', ccid.segment26,
6740 						'SEGMENT27', ccid.segment27,
6741 						'SEGMENT28', ccid.segment28,
6742 						'SEGMENT29', ccid.segment29,
6743 						'SEGMENT30', ccid.segment30),
6744 		DECODE(gl.mgt_seg_column_name, 	'SEGMENT1', ccid.segment1,
6745 						'SEGMENT2', ccid.segment2,
6746 						'SEGMENT3', ccid.segment3,
6747 						'SEGMENT4', ccid.segment4,
6748 						'SEGMENT5', ccid.segment5,
6749 						'SEGMENT6', ccid.segment6,
6750 						'SEGMENT7', ccid.segment7,
6751 						'SEGMENT8', ccid.segment8,
6752 						'SEGMENT9', ccid.segment9,
6753 						'SEGMENT10', ccid.segment10,
6754 					 	'SEGMENT11', ccid.segment11,
6755 						'SEGMENT12', ccid.segment12,
6756 						'SEGMENT13', ccid.segment13,
6757 						'SEGMENT14', ccid.segment14,
6758 						'SEGMENT15', ccid.segment15,
6759 						'SEGMENT16', ccid.segment16,
6760 						'SEGMENT17', ccid.segment17,
6761 						'SEGMENT18', ccid.segment18,
6762 						'SEGMENT19', ccid.segment19,
6763 						'SEGMENT20', ccid.segment20,
6764 					 	'SEGMENT21', ccid.segment21,
6765 						'SEGMENT22', ccid.segment22,
6766 						'SEGMENT23', ccid.segment23,
6767 						'SEGMENT24', ccid.segment24,
6768 						'SEGMENT25', ccid.segment25,
6769 						'SEGMENT26', ccid.segment26,
6770 						'SEGMENT27', ccid.segment27,
6771 						'SEGMENT28', ccid.segment28,
6772 						'SEGMENT29', ccid.segment29,
6773 						'SEGMENT30', ccid.segment30)
6774     FROM	gl_ledgers 	gl,
6775 		gl_code_combinations 	ccid,
6776 		xla_ledger_options     xlo
6777     WHERE	ccid.code_combination_id	= p_code_combination_id
6778       AND       gl.ledger_id                    = p_ledger_id
6779       AND       xlo.ledger_id                = p_ledger_id
6780       AND       xlo.application_id           = p_application_id
6781       ;
6782 
6783   l_log_module          VARCHAR2(240);
6784 BEGIN
6785   IF g_log_enabled THEN
6786     l_log_module := C_DEFAULT_MODULE||'.get_ledger_info';
6787   END IF;
6788 
6789   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6790     trace(p_msg    => 'BEGIN of procedure get_ledger_info',
6791           p_module => l_log_module,
6792           p_level  => C_LEVEL_PROCEDURE);
6793   END IF;
6794 
6795   OPEN c;
6796   FETCH c INTO p_funct_curr, p_rounding_rule_code, p_bal_seg_val, p_mgt_seg_val;
6797   CLOSE c;
6798 
6799   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6800     trace(p_msg    => 'END of procedure get_ledger_info',
6801           p_module => l_log_module,
6802           p_level  => C_LEVEL_PROCEDURE);
6803   END IF;
6804 
6805 EXCEPTION
6806 WHEN xla_exceptions_pkg.application_exception THEN
6807   IF (c%ISOPEN) THEN
6808     CLOSE c;
6809   END IF;
6810   RAISE;
6811 WHEN OTHERS					THEN
6812   IF (c%ISOPEN) THEN
6813     CLOSE c;
6814   END IF;
6815   xla_exceptions_pkg.raise_message
6816       (p_location => 'xla_journal_entries_pkg. get_ledger_info');
6817 END get_ledger_info;
6818 
6819 --=============================================================================
6820 --
6821 --
6822 --
6823 --=============================================================================
6824 PROCEDURE get_ledger_options
6825   (p_application_id            IN INTEGER
6826   ,p_ledger_id                 IN INTEGER
6827   ,p_transfer_to_gl_mode_code  OUT NOCOPY VARCHAR2)
6828 IS
6829   CURSOR c IS
6830     SELECT decode(transfer_to_gl_mode_code,'D','D','S')
6831       FROM xla_ledger_options
6832      WHERE application_id = p_application_id
6833        AND ledger_id      = p_ledger_id;
6834   l_log_module          VARCHAR2(240);
6835 BEGIN
6836   IF g_log_enabled THEN
6837     l_log_module := C_DEFAULT_MODULE||'.get_ledger_options';
6838   END IF;
6839 
6840   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6841     trace(p_msg    => 'BEGIN of procedure get_ledger_options',
6842           p_module => l_log_module,
6843           p_level  => C_LEVEL_PROCEDURE);
6844   END IF;
6845 
6846   OPEN c;
6847   FETCH c INTO p_transfer_to_gl_mode_code;
6848   CLOSE c;
6849 
6850   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6851     trace(p_msg    => 'END of procedure get_ledger_options',
6852           p_module => l_log_module,
6853           p_level  => C_LEVEL_PROCEDURE);
6854   END IF;
6855 
6856 EXCEPTION
6857 WHEN xla_exceptions_pkg.application_exception THEN
6858   IF (c%ISOPEN) THEN
6859     CLOSE c;
6860   END IF;
6861   RAISE;
6862 WHEN OTHERS                                     THEN
6863   IF (c%ISOPEN) THEN
6864     CLOSE c;
6865   END IF;
6866   xla_exceptions_pkg.raise_message
6867       (p_location => 'xla_journal_entries_pkg. get_ledger_options');
6868 END get_ledger_options;
6869 
6870 
6871 --=============================================================================
6872 --
6873 --
6874 --
6875 --=============================================================================
6876 PROCEDURE update_segment_values
6877   (p_ae_header_id		IN  INTEGER
6878   ,p_seg_type			IN  VARCHAR2
6879   ,p_seg_value			IN  VARCHAR2
6880   ,p_action			IN  VARCHAR2)
6881 IS
6882   CURSOR c_seg IS
6883     SELECT	ae_lines_count
6884     FROM	xla_ae_segment_values
6885     WHERE	segment_type_code = p_seg_type
6886       AND	ae_header_id = p_ae_header_id
6887       AND	segment_value = p_seg_value;
6888 
6889   l_seg_count           INTEGER;
6890   l_log_module          VARCHAR2(240);
6891 BEGIN
6892   IF g_log_enabled THEN
6893     l_log_module := C_DEFAULT_MODULE||'.update_segment_values';
6894   END IF;
6895 
6896   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6897     trace(p_msg    => 'BEGIN of procedure update_segment_values',
6898           p_module => l_log_module,
6899           p_level  => C_LEVEL_PROCEDURE);
6900   END IF;
6901 
6902   OPEN c_seg;
6903   FETCH c_seg INTO l_seg_count;
6904   CLOSE c_seg;
6905 
6906   IF (p_action = C_ACTION_DEL) THEN
6907     IF (l_seg_count = 1) THEN
6908       DELETE xla_ae_segment_values
6909        WHERE ae_header_id = p_ae_header_id
6910          AND segment_type_code = p_seg_type
6911          AND segment_value = p_seg_value;
6912     ELSE
6913       UPDATE xla_ae_segment_values
6914          SET ae_lines_count = ae_lines_count - 1
6915        WHERE ae_header_id = p_ae_header_id
6916          AND segment_type_code = p_seg_type
6917          AND segment_value = p_seg_value;
6918     END IF;
6919 
6920   ELSIF(p_action = C_ACTION_ADD) THEN
6921     IF (l_seg_count IS NULL) THEN
6922       INSERT INTO xla_ae_segment_values(ae_header_id, segment_type_code, segment_value, ae_lines_count)
6923    	VALUES(p_ae_header_id, p_seg_type, p_seg_value, 1);
6924     ELSE
6925       UPDATE xla_ae_segment_values
6926          SET ae_lines_count = ae_lines_count + 1
6927        WHERE ae_header_id = p_ae_header_id
6928          AND segment_type_code = p_seg_type
6929          AND segment_value = p_seg_value;
6930     END IF;
6931 
6932   END IF;
6933 
6934   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6935     trace(p_msg    => 'END of procedure update_segment_values',
6936           p_module => l_log_module,
6937           p_level  => C_LEVEL_PROCEDURE);
6938   END IF;
6939 
6940 EXCEPTION
6941 WHEN xla_exceptions_pkg.application_exception THEN
6942   IF (c_seg%ISOPEN) THEN
6943     CLOSE c_seg;
6944   END IF;
6945   RAISE;
6946 WHEN OTHERS					THEN
6947   IF (c_seg%ISOPEN) THEN
6948     CLOSE c_seg;
6949   END IF;
6950   xla_exceptions_pkg.raise_message
6951       (p_location => 'xla_journal_entries_pkg.update_segment_values');
6952 END update_segment_values;
6953 
6954 --=============================================================================
6955 --
6956 -- Name: validate_je_category
6957 -- Description: Raise error message IF the je category is invalid
6958 --
6959 --=============================================================================
6960 PROCEDURE validate_je_category
6961   (p_je_category_name           IN  VARCHAR2
6962   ,p_msg_mode			IN  VARCHAR2)
6963 IS
6964   CURSOR c IS
6965     SELECT      je_category_name
6966     FROM        gl_je_categories
6967     WHERE       je_category_name        = p_je_category_name;
6968   l_code        VARCHAR2(30);
6969 
6970   l_log_module          VARCHAR2(240);
6971 BEGIN
6972   IF g_log_enabled THEN
6973     l_log_module := C_DEFAULT_MODULE||'.validate_je_category';
6974   END IF;
6975 
6976   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6977     trace(p_msg    => 'BEGIN of procedure validate_je_category',
6978           p_module => l_log_module,
6979           p_level  => C_LEVEL_PROCEDURE);
6980   END IF;
6981 
6982   OPEN c;
6983   FETCH c INTO l_code;
6984   IF (c%NOTFOUND) THEN
6985     CLOSE c;
6986 
6987     xla_exceptions_pkg.raise_message
6988 	 (p_appli_s_name	=> 'XLA'
6989          ,p_msg_name		=> 'XLA_MJE_INVALID_JOURNAL_CAT'
6990 	 ,p_token_1		=> 'JE_CATEGORY'
6991 	 ,p_value_1		=> p_je_category_name
6992 	 ,p_msg_mode		=> p_msg_mode);
6993   END IF;
6994   CLOSE c;
6995 
6996   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6997     trace(p_msg    => 'END of procedure validate_je_category',
6998           p_module => l_log_module,
6999           p_level  => C_LEVEL_PROCEDURE);
7000   END IF;
7001 
7002 EXCEPTION
7003 WHEN xla_exceptions_pkg.application_exception THEN
7004   IF (c%ISOPEN) THEN
7005     CLOSE c;
7006   END IF;
7007   RAISE;
7008 
7009 WHEN OTHERS THEN
7010   IF (c%ISOPEN) THEN
7011     CLOSE c;
7012   END IF;
7013   xla_exceptions_pkg.raise_message
7014       (p_location => 'xla_journal_entries_pkg.validate_je_category');
7015 END validate_je_category;
7016 
7017 --============================================================================
7018 --
7019 -- Name: validate_application_id
7020 -- Description: Raise error message if the application id is invalid
7021 --
7022 --=============================================================================
7023 PROCEDURE validate_application_id
7024   (p_application_id     IN  INTEGER)
7025 IS
7026   CURSOR c IS
7027     SELECT      application_id
7028     FROM        xla_subledgers
7029     WHERE       application_id = p_application_id;
7030   l_app_id      INTEGER;
7031 
7032   l_log_module          VARCHAR2(240);
7033 BEGIN
7034   IF g_log_enabled THEN
7035     l_log_module := C_DEFAULT_MODULE||'.validate_application_id';
7036   END IF;
7037 
7038   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7039     trace(p_msg    => 'BEGIN of procedure validate_application_id',
7040           p_module => l_log_module,
7041           p_level  => C_LEVEL_PROCEDURE);
7042   END IF;
7043 
7044   OPEN c;
7045   FETCH c INTO l_app_id;
7046   IF (c%NOTFOUND) THEN
7047     xla_exceptions_pkg.raise_message
7048 	 (p_appli_s_name	=> 'XLA'
7049          ,p_msg_name		=> 'XLA_MJE_INVALID_APP_ID'
7050 	 ,p_token_1		=> 'APPLICATION_ID'
7051 	 ,p_value_1		=> p_application_id);
7052   END IF;
7053   CLOSE c;
7054 
7055   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7056     trace(p_msg    => 'END of procedure validate_application_id',
7057           p_module => l_log_module,
7058           p_level  => C_LEVEL_PROCEDURE);
7059   END IF;
7060 
7061 EXCEPTION
7062 WHEN xla_exceptions_pkg.application_exception THEN
7063   IF (c%ISOPEN) THEN
7064     CLOSE c;
7065   END IF;
7066   RAISE;
7067 
7068 WHEN OTHERS THEN
7069   IF (c%ISOPEN) THEN
7070     CLOSE c;
7071   END IF;
7072   xla_exceptions_pkg.raise_message
7073     (p_location => 'xla_journal_entries_pkg.validate_application_id');
7074 END validate_application_id;
7075 
7076 --=============================================================================
7077 --
7078 -- Name: validate_ledger
7079 -- Description: Raise error message if the ledger id is invalid, or, for
7080 --              budget AND encumbrance journal entry, the ledger type is not
7081 --              primary or alternative currency ledgers.
7082 --
7083 --=============================================================================
7084 PROCEDURE validate_ledger
7085   (p_ledger_id                  IN  INTEGER
7086   ,p_balance_type_code          IN  VARCHAR2
7087   ,p_budgetary_control_flag     IN  VARCHAR2)
7088 IS
7089   CURSOR c IS
7090     SELECT      name, ledger_category_code, latest_encumbrance_year, enable_budgetary_control_flag
7091     FROM        gl_ledgers
7092     WHERE       ledger_id = p_ledger_id;
7093 
7094   l_ledger_name                 gl_ledgers.name%TYPE;
7095   l_classification_code         gl_ledgers.ledger_category_code%TYPE;
7096   l_latest_encumbrance_year     gl_ledgers.latest_encumbrance_year%TYPE;
7097   l_bc_enabled_flag             gl_ledgers.enable_budgetary_control_flag%TYPE;
7098   l_log_module                  VARCHAR2(240);
7099 BEGIN
7100   IF g_log_enabled THEN
7101     l_log_module := C_DEFAULT_MODULE||'.validate_ledger';
7102   END IF;
7103 
7104   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7105     trace(p_msg    => 'BEGIN of procedure validate_ledger',
7106           p_module => l_log_module,
7107           p_level  => C_LEVEL_PROCEDURE);
7108   END IF;
7109 
7110   OPEN c;
7111   FETCH c INTO l_ledger_name, l_classification_code, l_latest_encumbrance_year, l_bc_enabled_flag;
7112 
7113   IF (c%NOTFOUND) THEN
7114     xla_exceptions_pkg.raise_message
7115 	 (p_appli_s_name	=> 'XLA'
7116          ,p_msg_name		=> 'XLA_MJE_INVALID_LEDGER_ID'
7117 	 ,p_token_1		=> 'LEDGER_ID'
7118 	 ,p_value_1		=> p_ledger_id);
7119   ELSE
7120     IF (p_balance_type_code in (C_JE_BUDGET, C_JE_ENCUMBRANCE) AND
7121          l_classification_code NOT in ('PRIMARY', 'ALC_TRANSACTION')) THEN
7122       xla_exceptions_pkg.raise_message
7123 	 (p_appli_s_name	=> 'XLA'
7124          ,p_msg_name		=> 'XLA_MJE_INVALID_LEDGER_ASSGN'
7125 	 ,p_token_1		=> 'LEDGER_NAME'
7126 	 ,p_value_1		=> l_ledger_name);
7127     END IF;
7128 
7129     IF (p_balance_type_code = C_JE_ENCUMBRANCE AND
7130         l_latest_encumbrance_year IS NULL) THEN
7131       xla_exceptions_pkg.raise_message
7132 	 (p_appli_s_name	=> 'XLA'
7133          ,p_msg_name		=> 'XLA_MJE_INVALID_ENCUM_LEDGER'
7134 	 ,p_token_1		=> 'LEDGER_NAME'
7135 	 ,p_value_1		=> l_ledger_name);
7136     END IF;
7137 
7138     IF (p_budgetary_control_flag = 'Y' AND l_bc_enabled_flag = 'N') THEN
7139             xla_exceptions_pkg.raise_message
7140          (p_appli_s_name        => 'XLA'
7141          ,p_msg_name            => 'XLA_MJE_INVALID_BC_LEDGER'
7142          ,p_token_1             => 'LEDGER_NAME'
7143          ,p_value_1             => l_ledger_name);
7144     END IF;
7145   END IF;
7146   CLOSE c;
7147 
7148   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7149     trace(p_msg    => 'END of procedure validate_ledger',
7150           p_module => l_log_module,
7151           p_level  => C_LEVEL_PROCEDURE);
7152   END IF;
7153 
7154 EXCEPTION
7155 WHEN xla_exceptions_pkg.application_exception THEN
7156   IF (c%ISOPEN) THEN
7157     CLOSE c;
7158   END IF;
7159   RAISE;
7160 
7161 WHEN OTHERS THEN
7162   IF (c%ISOPEN) THEN
7163     CLOSE c;
7164   END IF;
7165   xla_exceptions_pkg.raise_message
7166       (p_location => 'xla_journal_entries_pkg.validate_ledger');
7167 end validate_ledger;
7168 
7169 --=============================================================================
7170 --
7171 -- Name: validate_amounts
7172 -- Description: This API calculates the accounted amount.
7173 --
7174 --=============================================================================
7175 FUNCTION validate_amounts
7176   (p_entity_id                  IN  INTEGER
7177   ,p_event_id                   IN  INTEGER
7178   ,p_ledger_id                  IN  INTEGER
7179   ,p_ae_header_id               IN  INTEGER
7180   ,p_application_id		IN  INTEGER
7181   ,p_functional_curr		IN  VARCHAR2)
7182 RETURN INTEGER
7183 IS
7184   CURSOR c_lines IS
7185     SELECT ae_line_num
7186           ,entered_dr
7187           ,entered_cr
7188           ,currency_code
7189           ,accounted_dr
7190           ,accounted_cr
7191           ,currency_conversion_type conv_type
7192           ,currency_conversion_date conv_date
7193           ,currency_conversion_rate conv_rate
7194       FROM xla_ae_lines
7195      WHERE ae_header_id = p_ae_header_id
7196        AND application_id = p_application_id;
7197 
7198   l_result			INTEGER := 0;
7199   l_log_module          VARCHAR2(240);
7200 BEGIN
7201   IF g_log_enabled THEN
7202     l_log_module := C_DEFAULT_MODULE||'.validate_amounts';
7203   END IF;
7204 
7205   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7206     trace(p_msg    => 'BEGIN of procedure validate_amounts',
7207           p_module => l_log_module,
7208           p_level  => C_LEVEL_PROCEDURE);
7209   END IF;
7210 
7211   IF (C_LEVEL_EVENT >= g_log_level) THEN
7212     trace(p_msg    => 'BEGIN LOOP - validate amounts',
7213           p_module => l_log_module,
7214           p_level  => C_LEVEL_EVENT);
7215   END IF;
7216 
7217   FOR l_line IN c_lines LOOP
7218     IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7219       trace(p_msg    => 'LOOP validate amounts: ae_line_num = '||l_line.ae_line_num,
7220             p_module => l_log_module,
7221             p_level  => C_LEVEL_STATEMENT);
7222     END IF;
7223 
7224     l_line.currency_code := nvl(l_line.currency_code, p_functional_curr);
7225 
7226     IF (l_line.accounted_dr IS NULL AND l_line.accounted_dr IS NULL) THEN
7227       IF (l_line.currency_code <> p_functional_curr) THEN
7228         IF (l_line.conv_date IS NULL) THEN
7229           IF (C_LEVEL_ERROR >= g_log_level) THEN
7230             trace(p_msg    => 'Error: XLA_AP_NO_CONV_DATE',
7231                   p_module => l_log_module,
7232                   p_level  => C_LEVEL_ERROR);
7233           END IF;
7234 
7235           xla_accounting_err_pkg.build_message(
7236              p_appli_s_name             => 'XLA'
7237             ,p_msg_name                 => 'XLA_AP_NO_CONV_DATE'
7238             ,p_token_1                  => 'LINE_NUM'
7239             ,p_value_1                  => l_line.ae_line_num
7240             ,p_entity_id                => p_entity_id
7241             ,p_event_id                 => p_event_id
7242             ,p_ledger_id                => p_ledger_id
7243             ,p_ae_header_id             => p_ae_header_id
7244             ,p_ae_line_num              => l_line.ae_line_num
7245             ,p_accounting_batch_id      => NULL);
7246           l_result := 1;
7247       	END IF;
7248 
7249         IF (l_line.conv_type IS NULL) THEN
7250           IF (C_LEVEL_ERROR >= g_log_level) THEN
7251             trace(p_msg    => 'Error: XLA_AP_NO_CONV_TYPE',
7252                   p_module => l_log_module,
7253                   p_level  => C_LEVEL_ERROR);
7254           END IF;
7255 
7256           xla_accounting_err_pkg.build_message(
7257            p_appli_s_name               => 'XLA'
7258           ,p_msg_name                   => 'XLA_AP_NO_CONV_TYPE'
7259           ,p_token_1                    => 'LINE_NUM'
7260           ,p_value_1                    => l_line.ae_line_num
7261           ,p_entity_id                  => p_entity_id
7262           ,p_event_id                   => p_event_id
7263           ,p_ledger_id                  => p_ledger_id
7264           ,p_ae_header_id               => p_ae_header_id
7265           ,p_ae_line_num                => l_line.ae_line_num
7266           ,p_accounting_batch_id        => NULL);
7267           l_result := 1;
7268         ELSIF (l_line.conv_type = 'User') THEN
7269           IF (l_line.conv_rate IS NULL) THEN
7270             IF (C_LEVEL_ERROR >= g_log_level) THEN
7271               trace(p_msg    => 'Error: XLA_AP_NO_USER_CONV_RATE',
7272                     p_module => l_log_module,
7273                     p_level  => C_LEVEL_ERROR);
7274             END IF;
7275 
7276             xla_accounting_err_pkg.build_message(
7277            	p_appli_s_name               => 'XLA'
7278           	,p_msg_name                  => 'XLA_AP_NO_USER_CONV_RATE'
7279           	,p_token_1                   => 'LINE_NUM'
7280           	,p_value_1                   => l_line.ae_line_num
7281           	,p_entity_id                 => p_entity_id
7282           	,p_event_id                  => p_event_id
7283           	,p_ledger_id                 => p_ledger_id
7284           	,p_ae_header_id              => p_ae_header_id
7285           	,p_ae_line_num               => l_line.ae_line_num
7286           	,p_accounting_batch_id       => NULL);
7287           	l_result := 1;
7288             l_line.accounted_cr := l_line.entered_cr;
7289             l_line.accounted_dr := l_line.entered_dr;
7290           ELSE
7291             IF (l_line.entered_cr IS NOT NULL) THEN
7292               l_line.accounted_cr := l_line.entered_cr * l_line.conv_rate;
7293             END IF;
7294             IF (l_line.entered_dr IS NOT NULL) THEN
7295               l_line.accounted_dr := l_line.entered_dr * l_line.conv_rate;
7296             END IF;
7297           END IF;
7298         ELSE	-- l_conv_type <> 'User'
7299           begin
7300             l_line.conv_rate := gl_currency_api.get_rate(
7301              	 x_from_currency        => l_line.currency_code
7302             	,x_to_currency          => p_functional_curr
7303             	,x_conversion_date      => l_line.conv_date
7304             	,x_conversion_type      => l_line.conv_type);
7305           exception
7306             WHEN gl_currency_api.NO_RATE THEN
7307               IF (C_LEVEL_ERROR >= g_log_level) THEN
7308                 trace(p_msg    => 'Error: XLA_AP_NO_CONV_RATE',
7309                       p_module => l_log_module,
7310                       p_level  => C_LEVEL_ERROR);
7311               END IF;
7312 
7313               xla_accounting_err_pkg.build_message(
7314                	 p_appli_s_name             => 'XLA'
7315               	,p_msg_name                 => 'XLA_AP_NO_CONV_RATE'
7316               	,p_token_1                  => 'CURRENCY_CODE'
7317               	,p_value_1                  => l_line.currency_code
7318               	,p_token_2                  => 'CONVERSION_TYPE'
7319               	,p_value_2                  => l_line.conv_type
7320               	,p_token_3                  => 'CONVERSION_DATE'
7321               	,p_value_3                  => to_char(l_line.conv_date,'DD/MM/YYYY')
7322               	,p_token_4                  => 'LINE_NUM'
7323               	,p_value_4                  => p_ae_header_id
7324               	,p_entity_id                => p_entity_id
7325               	,p_event_id                 => p_event_id
7326               	,p_ledger_id                => p_ledger_id
7327               	,p_ae_header_id             => p_ae_header_id
7328               	,p_ae_line_num              => l_line.ae_line_num
7329               	,p_accounting_batch_id      => NULL);
7330               l_result := 1;
7331           end;
7332           IF (l_line.entered_cr IS NOT NULL) THEN
7333             l_line.accounted_cr := l_line.entered_cr * l_line.conv_rate;
7334           END IF;
7335           IF (l_line.entered_dr IS NOT NULL) THEN
7336             l_line.accounted_dr := l_line.entered_dr * l_line.conv_rate;
7337           END IF;
7338         END IF;
7339       ELSE
7340         l_line.accounted_dr := l_line.entered_dr;
7341         l_line.accounted_cr := l_line.entered_cr;
7342         l_line.conv_type := NULL;
7343         l_line.conv_rate := NULL;
7344         l_line.conv_date := NULL;
7345       END IF;
7346     END IF;
7347 
7348 /* removed, not sure why we need this
7349     IF (l_line.entered_cr IS NOT NULL) THEN
7350       l_line.entered_cr := round_currency(l_line.entered_cr, l_line.currency_code);
7351     END IF;
7352 
7353     IF (l_line.accounted_cr IS NOT NULL) THEN
7354       l_line.accounted_cr := round_currency(l_line.accounted_cr, p_functional_curr);
7355     END IF;
7356 
7357     IF (l_line.entered_dr IS NOT NULL) THEN
7358       l_line.entered_dr := round_currency(l_line.entered_dr, l_line.currency_code);
7359     END IF;
7360 
7361     IF (l_line.accounted_dr IS NOT NULL) THEN
7362       l_line.accounted_dr := round_currency(l_line.accounted_dr, p_functional_curr);
7363     END IF;
7364 */
7365 
7366   END LOOP;
7367 
7368   IF (C_LEVEL_EVENT >= g_log_level) THEN
7369     trace(p_msg    => 'END LOOP - validate amounts',
7370           p_module => l_log_module,
7371           p_level  => C_LEVEL_EVENT);
7372   END IF;
7373 
7374   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7375     trace(p_msg    => 'END of procedure validate_amounts',
7376           p_module => l_log_module,
7377           p_level  => C_LEVEL_PROCEDURE);
7378   END IF;
7379 
7380   RETURN l_result;
7381 EXCEPTION
7382 WHEN xla_exceptions_pkg.application_exception THEN
7383   IF (c_lines%ISOPEN) THEN
7384     CLOSE c_lines;
7385   END IF;
7386   RAISE;
7387 WHEN OTHERS THEN
7388   IF (c_lines%ISOPEN) THEN
7389     CLOSE c_lines;
7390   END IF;
7391   xla_exceptions_pkg.raise_message
7392       (p_location => 'xla_journal_entries_pkg.validate_amounts');
7393 end validate_amounts;
7394 
7395 --=============================================================================
7396 --
7397 -- Name: calculate_amounts
7398 -- Description: This API calculates the accounted amount.
7399 --
7400 --=============================================================================
7401 PROCEDURE calculate_amounts
7402   (p_entered_dr                 IN OUT NOCOPY NUMBER
7403   ,p_entered_cr                 IN OUT NOCOPY NUMBER
7404   ,p_currency_code              IN OUT NOCOPY VARCHAR2
7405   ,p_functional_curr            IN VARCHAR2
7406   ,p_rounding_rule_code         IN VARCHAR2
7407   ,p_accounted_dr               IN OUT NOCOPY NUMBER
7408   ,p_accounted_cr               IN OUT NOCOPY NUMBER
7409   ,p_unrounded_entered_dr       IN OUT NOCOPY NUMBER
7410   ,p_unrounded_entered_cr       IN OUT NOCOPY NUMBER
7411   ,p_unrounded_accted_dr        IN OUT NOCOPY NUMBER
7412   ,p_unrounded_accted_cr        IN OUT NOCOPY NUMBER
7413   ,p_conv_type                  IN OUT NOCOPY VARCHAR2
7414   ,p_conv_date                  IN OUT NOCOPY DATE
7415   ,p_conv_rate                  IN OUT NOCOPY NUMBER)
7416 IS
7417   l_log_module          VARCHAR2(240);
7418 BEGIN
7419   IF g_log_enabled THEN
7420     l_log_module := C_DEFAULT_MODULE||'.calculate_amounts';
7421   END IF;
7422 
7423   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7424     trace(p_msg    => 'BEGIN of procedure calculate_amounts',
7425           p_module => l_log_module,
7426           p_level  => C_LEVEL_PROCEDURE);
7427   END IF;
7428 
7429   p_currency_code := nvl(p_currency_code, p_functional_curr);
7430   p_unrounded_entered_dr := p_entered_dr;
7431   p_unrounded_entered_cr := p_entered_cr;
7432 
7433   IF (p_accounted_dr IS NULL AND p_accounted_cr IS NULL) THEN
7434     IF (p_currency_code <> p_functional_curr) THEN
7435 
7436       IF (p_conv_type IS NULL) THEN
7437 	p_unrounded_accted_cr := NULL;
7438 	p_unrounded_accted_dr := NULL;
7439 
7440       ELSIF (p_conv_type = 'User') THEN
7441 	IF (p_conv_rate IS NOT NULL) THEN
7442           IF (p_entered_cr IS NOT NULL) THEN
7443             p_unrounded_accted_cr := p_entered_cr * p_conv_rate;
7444           END IF;
7445           IF (p_entered_dr IS NOT NULL) THEN
7446             p_unrounded_accted_dr := p_entered_dr * p_conv_rate;
7447           END IF;
7448  	ELSE
7449 	  p_unrounded_accted_cr := NULL;
7450 	  p_unrounded_accted_dr := NULL;
7451         END IF;
7452 
7453       ELSIF (p_conv_date IS NOT NULL) THEN	-- p_conv_type is non-User
7454         begin
7455           p_conv_rate := gl_currency_api.get_rate(
7456              x_from_currency        => p_currency_code
7457             ,x_to_currency          => p_functional_curr
7458             ,x_conversion_date      => p_conv_date
7459             ,x_conversion_type      => p_conv_type);
7460 
7461           IF (p_entered_cr IS NOT NULL) THEN
7462             p_unrounded_accted_cr := p_entered_cr * p_conv_rate;
7463           END IF;
7464           IF (p_entered_dr IS NOT NULL) THEN
7465             p_unrounded_accted_dr := p_entered_dr * p_conv_rate;
7466           END IF;
7467 
7468         exception
7469           WHEN gl_currency_api.NO_RATE THEN
7470  	        p_conv_rate := NULL;
7471       		p_unrounded_accted_dr := NULL;
7472       		p_unrounded_accted_cr := NULL;
7473         end;
7474       ELSE  -- p_conv_type is non-User and p_conv_date IS NULL
7475         p_conv_rate := NULL;
7476       	p_unrounded_accted_dr := NULL;
7477       	p_unrounded_accted_cr := NULL;
7478       END IF;
7479     ELSE
7480       p_unrounded_accted_dr := p_entered_dr;
7481       p_unrounded_accted_cr := p_entered_cr;
7482       p_conv_type := NULL;
7483       p_conv_rate := NULL;
7484       p_conv_date := NULL;
7485     END IF;
7486   END IF;
7487 
7488   IF (p_entered_cr IS NOT NULL) THEN
7489     p_entered_cr := round_currency(p_entered_cr, p_currency_code, p_rounding_rule_code);
7490   END IF;
7491 
7492   IF (p_unrounded_accted_cr IS NOT NULL) THEN
7493     p_accounted_cr := round_currency(p_unrounded_accted_cr, p_functional_curr, p_rounding_rule_code);
7494   END IF;
7495 
7496   IF (p_entered_dr IS NOT NULL) THEN
7497     p_entered_dr := round_currency(p_entered_dr, p_currency_code, p_rounding_rule_code);
7498   END IF;
7499 
7500   IF (p_unrounded_accted_dr IS NOT NULL) THEN
7501     p_accounted_dr := round_currency(p_unrounded_accted_dr, p_functional_curr, p_rounding_rule_code);
7502   END IF;
7503 
7504   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7505     trace(p_msg    => 'END of procedure calculate_amounts',
7506           p_module => l_log_module,
7507           p_level  => C_LEVEL_PROCEDURE);
7508   END IF;
7509 
7510 EXCEPTION
7511 WHEN xla_exceptions_pkg.application_exception THEN
7512   RAISE;
7513 
7514 WHEN OTHERS THEN
7515   xla_exceptions_pkg.raise_message
7516       (p_location => 'xla_journal_entries_pkg.calculate_amounts');
7517 END calculate_amounts;
7518 
7519 
7520 --=============================================================================
7521 --
7522 -- Name: get_period_name
7523 -- Description: Retrieve the period name of an accounting date for a ledger,
7524 --              and its status and period type.
7525 --
7526 --=============================================================================
7527 FUNCTION get_period_name
7528   (p_ledger_id          IN  INTEGER
7529   ,p_accounting_date    IN  DATE
7530   ,p_closing_status     OUT NOCOPY VARCHAR2
7531   ,p_period_type        OUT NOCOPY VARCHAR2)
7532 RETURN VARCHAR2
7533 IS
7534   CURSOR c IS
7535     SELECT      closing_status, period_name, period_type
7536     FROM        gl_period_statuses
7537     WHERE       application_id          = C_GL_APPLICATION_ID
7538       AND       ledger_id               = p_ledger_id
7539       AND       adjustment_period_flag  = 'N'
7540       AND       p_accounting_date       BETWEEN start_date AND end_date;
7541   l_period_name         VARCHAR2(25);
7542   l_log_module          VARCHAR2(240);
7543 BEGIN
7544   IF g_log_enabled THEN
7545     l_log_module := C_DEFAULT_MODULE||'.get_period_name';
7546   END IF;
7547 
7548   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7549     trace(p_msg    => 'BEGIN of function get_period_name',
7550           p_module => l_log_module,
7551           p_level  => C_LEVEL_PROCEDURE);
7552     trace(p_msg    => 'p_ledger_id = '||p_ledger_id,
7553           p_module => l_log_module,
7554           p_level  => C_LEVEL_PROCEDURE);
7555     trace(p_msg    => 'p_accounting_date = '||p_accounting_date,
7556           p_module => l_log_module,
7557           p_level  => C_LEVEL_PROCEDURE);
7558   END IF;
7559 
7560   OPEN c;
7561   FETCH c INTO p_closing_status, l_period_name, p_period_type;
7562   CLOSE c;
7563 
7564   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7565     trace(p_msg    => 'END of function get_period_name',
7566           p_module => l_log_module,
7567           p_level  => C_LEVEL_PROCEDURE);
7568   END IF;
7569 
7570   RETURN l_period_name;
7571 EXCEPTION
7572 WHEN xla_exceptions_pkg.application_exception THEN
7573   IF (c%ISOPEN) THEN
7574     CLOSE c;
7575   END IF;
7576   RAISE;
7577 
7578 WHEN OTHERS THEN
7579   IF (c%ISOPEN) THEN
7580     CLOSE c;
7581   END IF;
7582   xla_exceptions_pkg.raise_message
7583       (p_location => 'xla_journal_entries_pkg.get_period_name');
7584 END get_period_name;
7585 
7586 
7587 --=============================================================================
7588 --
7589 -- Name: funds_check_result
7590 -- Description: This API creates the funds result.
7591 --
7592 --=============================================================================
7593 PROCEDURE funds_check_result
7594   (p_packet_id                  IN  INTEGER
7595   ,p_application_id             IN  INTEGER
7596   ,p_ledger_id                  IN  INTEGER
7597   ,p_sequence_id                IN OUT NOCOPY INTEGER)
7598 IS
7599   PRAGMA AUTONOMOUS_TRANSACTION;
7600 
7601   l_log_module          VARCHAR2(240);
7602 
7603   l_sequence_id         NUMBER(15);
7604   l_event_flag          VARCHAR2(1) := 'P';
7605   l_errbuf              VARCHAR2(2000);
7606   l_retcode             NUMBER(15);
7607 
7608 BEGIN
7609   IF g_log_enabled THEN
7610     l_log_module := C_DEFAULT_MODULE||'.funds_check_result';
7611   END IF;
7612 
7613   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7614     trace(p_msg    => 'BEGIN of procedure funds_check_result',
7615           p_module => l_log_module,
7616           p_level  => C_LEVEL_PROCEDURE);
7617   END IF;
7618 
7619   DELETE
7620     FROM PSA_BC_REPORT_EVENTS_GT;
7621 
7622   INSERT
7623   INTO PSA_BC_REPORT_EVENTS_GT(packet_id)
7624   VALUES(p_packet_id);
7625 
7626   SELECT PSA_BC_XML_REPORT_S.nextval
7627     INTO l_sequence_id
7628     FROM DUAL;
7629 
7630   -- Call XML Generation Procedure
7631 
7632   PSA_BC_XML_REPORT_PUB.create_bc_transaction_report
7633     (p_ledger_id         => p_ledger_id
7634     ,p_application_id    => p_application_id
7635     ,p_packet_event_flag => l_event_flag
7636     ,p_sequence_id       => l_sequence_id
7637     ,errbuf              => l_errbuf
7638     ,retcode             => l_retcode);
7639 
7640   p_sequence_id  := l_sequence_id;
7641 
7642   COMMIT;
7643 
7644   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7645     trace(p_msg    => 'END of procedure funds_check_result',
7646           p_module => l_log_module,
7647           p_level  => C_LEVEL_PROCEDURE);
7648   END IF;
7649 
7650 EXCEPTION
7651 WHEN xla_exceptions_pkg.application_exception THEN
7652   RAISE;
7653 
7654 WHEN OTHERS THEN
7655   xla_exceptions_pkg.raise_message
7656       (p_location => 'xla_journal_entries_pkg.funds_check_result');
7657 END funds_check_result;
7658 
7659 
7660 
7661 --=============================================================================
7662 --
7663 -- Description: This API is for datafix. Bug 5109240
7664 --
7665 --=============================================================================
7666 PROCEDURE update_data
7667   (p_api_version                IN  NUMBER
7668   ,p_init_msg_list              IN  VARCHAR2
7669   ,p_application_id             IN  INTEGER
7670   ,p_ae_header_id               IN  INTEGER
7671   ,p_ae_line_num                IN  INTEGER  DEFAULT NULL
7672   ,p_item_name                  IN  VARCHAR2
7673   ,p_value_varchar2             IN  VARCHAR2 DEFAULT NULL
7674   ,p_value_date                 IN  DATE     DEFAULT NULL
7675   ,p_value_number               IN  NUMBER   DEFAULT NULL
7676   ,x_return_status              OUT NOCOPY VARCHAR2
7677   ,x_msg_count                  OUT NOCOPY NUMBER
7678   ,x_msg_data                   OUT NOCOPY VARCHAR2
7679 ) IS
7680 
7681   l_api_name          CONSTANT VARCHAR2(30) := 'update_data';
7682   l_api_version       CONSTANT NUMBER       := 1.0;
7683 
7684   l_retcode           INTEGER;
7685   l_log_module        VARCHAR2(240);
7686   l_entity_id         INTEGER   DEFAULT NULL;
7687   l_gl_status         VARCHAR2(2);
7688   l_dummy             INTEGER;
7689 
7690 BEGIN
7691 
7692   IF g_log_enabled THEN
7693     l_log_module := C_DEFAULT_MODULE||'.update_data';
7694   END IF;
7695 
7696   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7697     trace(p_msg    => 'BEGIN of procedure update_data',
7698           p_module => l_log_module,
7699           p_level  => C_LEVEL_PROCEDURE);
7700   END IF;
7701 
7702   IF (FND_API.to_boolean(p_init_msg_list)) THEN
7703     FND_MSG_PUB.initialize;
7704   END IF;
7705 
7706   -- Standard call to check for call compatibility.
7707   IF (NOT FND_API.compatible_api_call
7708                  (p_current_version_number => l_api_version
7709                  ,p_caller_version_number  => p_api_version
7710                  ,p_api_name               => l_api_name
7711                  ,p_pkg_name               => C_DEFAULT_MODULE))
7712   THEN
7713     RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;
7714   END IF;
7715 
7716   --  Initialize global variables
7717   x_return_status        := FND_API.G_RET_STS_SUCCESS;
7718 
7719   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7720       trace(p_msg    => 'p_application_id = '||p_application_id,
7721             p_module => l_log_module,
7722             p_level  => C_LEVEL_STATEMENT);
7723       trace(p_msg    => 'p_ae_header_id   = '||p_ae_header_id,
7724             p_module => l_log_module,
7725             p_level  => C_LEVEL_STATEMENT);
7726       trace(p_msg    => 'p_ae_line_num    = '||p_ae_line_num,
7727             p_module => l_log_module,
7728             p_level  => C_LEVEL_STATEMENT);
7729       trace(p_msg    => 'p_item_name      = '||p_item_name,
7730             p_module => l_log_module,
7731             p_level  => C_LEVEL_STATEMENT);
7732       trace(p_msg    => 'p_value_varchar2 = '||p_value_varchar2,
7733             p_module => l_log_module,
7734             p_level  => C_LEVEL_STATEMENT);
7735       trace(p_msg    => 'p_value_date     = '||p_value_date,
7736             p_module => l_log_module,
7737             p_level  => C_LEVEL_STATEMENT);
7738       trace(p_msg    => 'p_value_number   = '||p_value_number,
7739             p_module => l_log_module,
7740             p_level  => C_LEVEL_STATEMENT);
7741   END IF;
7742 
7743   ---------------------------------------------
7744   -- check that only certain items are allowed
7745   ---------------------------------------------
7746   IF NVL(p_item_name,'N') NOT IN (C_ITEM_HEADER_DESCRIPTION, C_ITEM_LINE_DESCRIPTION,
7747                                   C_ITEM_GL_DATE,            C_ITEM_REFERENCE_DATE,
7748                                   C_ITEM_ACCOUNT,            C_ITEM_ACCOUNTED_DR,   C_ITEM_ACCOUNTED_CR,
7749                                   C_ITEM_CURRENCY_CODE,      C_ITEM_CURR_CONV_TYPE, C_ITEM_CURR_CONV_RATE,
7750                                   C_ITEM_CURR_CONV_DATE,     C_ITEM_ENTERED_DR,     C_ITEM_ENTERED_CR,
7751                                   C_ITEM_ACCOUNTING_CLASS ) THEN
7752      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7753       trace(p_msg    => 'Item name '||p_item_name||' is incorrect or is not supported.',
7754             p_module => l_log_module,
7755             p_level  => C_LEVEL_STATEMENT);
7756      END IF;
7757      xla_datafixes_pub.Log_error(p_module    => l_log_module
7758               ,p_error_msg => 'Item name '||p_item_name||' is incorrect or is not supported.');
7759   ELSE
7760 
7761      ------------------------------------------------
7762      -- check that the correct value type are passed
7763      ------------------------------------------------
7764      IF p_item_name IN    ( C_ITEM_HEADER_DESCRIPTION, C_ITEM_LINE_DESCRIPTION,  C_ITEM_CURRENCY_CODE,
7765                             C_ITEM_CURR_CONV_TYPE,     C_ITEM_ACCOUNTING_CLASS ) AND
7766                             p_value_varchar2 IS NULL THEN
7767         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7768           trace(p_msg    => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_VARCHAR2.',
7769                 p_module => l_log_module,
7770                 p_level  => C_LEVEL_STATEMENT);
7771         END IF;
7772         xla_datafixes_pub.Log_error(p_module    => l_log_module
7773                  ,p_error_msg => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_VARCHAR2.');
7774      ELSIF p_item_name IN ( C_ITEM_GL_DATE, C_ITEM_REFERENCE_DATE, C_ITEM_CURR_CONV_DATE ) AND
7775                             p_value_date IS NULL THEN
7776         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7777           trace(p_msg    => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_DATE.',
7778                 p_module => l_log_module,
7779                 p_level  => C_LEVEL_STATEMENT);
7780         END IF;
7781         xla_datafixes_pub.Log_error(p_module    => l_log_module
7782                  ,p_error_msg => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_DATE.');
7783      ELSIF p_item_name IN ( C_ITEM_ACCOUNT,        C_ITEM_ACCOUNTED_DR,   C_ITEM_ACCOUNTED_CR,
7784                             C_ITEM_CURR_CONV_RATE, C_ITEM_ENTERED_DR,     C_ITEM_ENTERED_CR ) AND
7785                             p_value_number IS NULL THEN
7786         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7787           trace(p_msg    => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_NUMBER.',
7788                 p_module => l_log_module,
7789                 p_level  => C_LEVEL_STATEMENT);
7790         END IF;
7791         xla_datafixes_pub.Log_error(p_module    => l_log_module
7792                  ,p_error_msg => 'The value for '||p_item_name||' should be passed using parameter P_VALUE_NUMBER.');
7793      END IF;
7794 
7795   END IF;
7796 
7797 
7798   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7799       trace(p_msg    => 'entity ='||l_entity_id||'  count='||SQL%ROWCOUNT,
7800             p_module => l_log_module,
7801             p_level  => C_LEVEL_STATEMENT);
7802   END IF;
7803 
7804   -------------------------------------------
7805   -- check that entry exists
7806   -------------------------------------------
7807   SELECT MIN(entity_id), MAX(gl_transfer_status_code)
7808   INTO   l_entity_id, l_gl_status
7809   FROM   xla_ae_headers
7810   WHERE  application_id = p_application_id
7811   AND    ae_header_id   = p_ae_header_id
7812   AND    accounting_entry_status_code = 'F';
7813 
7814   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7815       trace(p_msg    => 'entity ='||l_entity_id||',  gl_status='||l_gl_status||',  count='||SQL%ROWCOUNT,
7816             p_module => l_log_module,
7817             p_level  => C_LEVEL_STATEMENT);
7818   END IF;
7819 
7820   IF l_entity_id IS NULL THEN
7821 
7822      IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7823       trace(p_msg    => 'The entry does not exists or is not in Final mode.',
7824             p_module => l_log_module,
7825             p_level  => C_LEVEL_STATEMENT);
7826      END IF;
7827        xla_datafixes_pub.Log_error(p_module    => l_log_module
7828                 ,p_error_msg => 'The entry does not exists or is not in Final mode.');
7829   ELSE
7830 
7831       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7832           trace(p_msg    => 'Update details',
7833                 p_module => l_log_module,
7834                 p_level  => C_LEVEL_STATEMENT);
7835       END IF;
7836 
7837       --------------------------------------------------------------------
7838       -- To check that ae_line_num is valid
7839       --------------------------------------------------------------------
7840       IF p_item_name not in (C_ITEM_HEADER_DESCRIPTION, C_ITEM_REFERENCE_DATE) THEN
7841 
7842          IF p_ae_line_num IS NULL AND p_item_name <> C_ITEM_GL_DATE THEN
7843             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7844              trace(p_msg    => 'Need ae_line_num to update '||p_item_name||'.',
7845                    p_module => l_log_module,
7846                    p_level  => C_LEVEL_STATEMENT);
7847             END IF;
7848             xla_datafixes_pub.Log_error(p_module    => l_log_module
7849                      ,p_error_msg => 'Need ae_line_num to update '||p_item_name||'.');
7850 
7851          ELSIF p_ae_line_num IS NOT NULL and p_item_name = C_ITEM_GL_DATE THEN
7852             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7853              trace(p_msg    => 'Updating GL Date affects both headers and line number.  Ae_line_num is not required.',
7854                    p_module => l_log_module,
7855                    p_level  => C_LEVEL_STATEMENT);
7856             END IF;
7857             xla_datafixes_pub.Log_error(p_module    => l_log_module
7858                      ,p_error_msg => 'Updating GL Date affects both headers and line number.  Ae_line_num is not required.');
7859 
7860          ELSIF p_ae_line_num IS NOT NULL THEN
7861             -------------------------------------------
7862             -- check that lines exists
7863             -------------------------------------------
7864             SELECT count(*)
7865             INTO   l_dummy
7866             FROM   xla_ae_lines
7867             WHERE  application_id = p_application_id
7868             AND    ae_header_id   = p_ae_header_id
7869             AND    ae_line_num    = p_ae_line_num;
7870 
7871             IF l_dummy = 0 THEN
7872                IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7873                 trace(p_msg    => 'Line does not exists',
7874                       p_module => l_log_module,
7875                       p_level  => C_LEVEL_STATEMENT);
7876                END IF;
7877                xla_datafixes_pub.Log_error(p_module    => l_log_module
7878                         ,p_error_msg => 'Line does not exists');
7879             END IF;
7880          END IF;
7881 
7882       END IF;
7883       --
7884       ------------------------------------------------
7885       -- delete control balance
7886       ------------------------------------------------
7887       IF p_item_name IN (C_ITEM_GL_DATE,      C_ITEM_ACCOUNT
7888                         ,C_ITEM_ACCOUNTED_DR, C_ITEM_ACCOUNTED_CR,   C_ITEM_CURRENCY_CODE
7889                         ,C_ITEM_ENTERED_DR,   C_ITEM_ENTERED_CR) THEN
7890          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7891                 trace(p_msg    => 'Calling xla_balances_pkg.massive_update to delete',
7892                       p_module => l_log_module,
7893                       p_level  => C_LEVEL_STATEMENT);
7894          END IF;
7895          IF (NOT xla_balances_pkg.massive_update
7896                  (p_application_id       => p_application_id
7897                  ,p_ledger_id            => NULL
7898                  ,p_event_id             => NULL
7899                  ,p_entity_id            => l_entity_id
7900                  ,p_request_id           => NULL
7901                  ,p_accounting_batch_id  => NULL
7902                  ,p_update_mode          => 'D'         -- Delete
7903                  ,p_execution_mode       => 'O')) THEN  -- Online
7904             IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7905                 trace(p_msg    => 'Error from massive_update.',
7906                       p_module => l_log_module,
7907                       p_level  => C_LEVEL_STATEMENT);
7908             END IF;
7909             xla_datafixes_pub.Log_error(p_module    => l_log_module
7910                      ,p_error_msg => 'Error when deleting control balance calculation');
7911          END IF;
7912          IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7913                 trace(p_msg    => 'Returned from xla_balances_pkg.massive_update',
7914                       p_module => l_log_module,
7915                       p_level  => C_LEVEL_STATEMENT);
7916          END IF;
7917 
7918       END IF;
7919 
7920       ------------------------------------------------
7921       -- update header details
7922       ------------------------------------------------
7923       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7924                 trace(p_msg    => 'update header details',
7925                       p_module => l_log_module,
7926                       p_level  => C_LEVEL_STATEMENT);
7927       END IF;
7928       IF p_item_name in (C_ITEM_HEADER_DESCRIPTION, C_ITEM_REFERENCE_DATE, C_ITEM_GL_DATE) THEN
7929 
7930          Update XLA_AE_HEADERS
7931          SET    DESCRIPTION     = DECODE(p_item_name, C_ITEM_HEADER_DESCRIPTION,    p_value_varchar2, DESCRIPTION)
7932                ,ACCOUNTING_DATE = DECODE(p_item_name, C_ITEM_GL_DATE,        p_value_date,     ACCOUNTING_DATE)
7933                ,REFERENCE_DATE  = DECODE(p_item_name, C_ITEM_REFERENCE_DATE, p_value_date,     REFERENCE_DATE)
7934          WHERE application_id = p_application_id
7935          AND   ae_header_id   = p_ae_header_id;
7936 
7937          xla_datafixes_pub.audit_datafix (p_application_id   => p_application_id
7938                        ,p_ae_header_id     => p_ae_header_id);
7939 
7940       END IF;
7941 
7942       ------------------------------------------------
7943       -- update line details
7944       ------------------------------------------------
7945       IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7946                 trace(p_msg    => 'update line details',
7947                       p_module => l_log_module,
7948                       p_level  => C_LEVEL_STATEMENT);
7949       END IF;
7950       IF p_item_name NOT IN (C_ITEM_HEADER_DESCRIPTION, C_ITEM_REFERENCE_DATE) THEN
7951          Update XLA_AE_LINES
7952          SET   CODE_COMBINATION_ID      = DECODE(p_item_name, C_ITEM_ACCOUNT,          p_value_number,   CODE_COMBINATION_ID)
7953               ,ACCOUNTED_DR             = DECODE(p_item_name, C_ITEM_ACCOUNTED_DR,     p_value_number,   ACCOUNTED_DR)
7954               ,ACCOUNTED_CR             = DECODE(p_item_name, C_ITEM_ACCOUNTED_CR,     p_value_number,   ACCOUNTED_CR)
7955               ,CURRENCY_CODE            = DECODE(p_item_name, C_ITEM_CURRENCY_CODE,    p_value_varchar2, CURRENCY_CODE)
7956               ,CURRENCY_CONVERSION_TYPE = DECODE(p_item_name, C_ITEM_CURR_CONV_TYPE,   p_value_varchar2, CURRENCY_CONVERSION_TYPE)
7957               ,CURRENCY_CONVERSION_RATE = DECODE(p_item_name, C_ITEM_CURR_CONV_RATE,   p_value_number,   CURRENCY_CONVERSION_RATE)
7958               ,CURRENCY_CONVERSION_DATE = DECODE(p_item_name, C_ITEM_CURR_CONV_DATE,   p_value_date,     CURRENCY_CONVERSION_DATE)
7959               ,DESCRIPTION              = DECODE(p_item_name, C_ITEM_LINE_DESCRIPTION, p_value_varchar2, DESCRIPTION)
7960               ,ENTERED_DR               = DECODE(p_item_name, C_ITEM_ENTERED_DR,       p_value_number,   ENTERED_DR)
7961               ,ENTERED_CR               = DECODE(p_item_name, C_ITEM_ENTERED_CR,       p_value_number,   ENTERED_CR)
7962               ,ACCOUNTING_DATE          = DECODE(p_item_name, C_ITEM_GL_DATE,          p_value_date,     ACCOUNTING_DATE)
7963               ,ACCOUNTING_CLASS_CODE    = DECODE(p_item_name, C_ITEM_ACCOUNTING_CLASS, p_value_varchar2, ACCOUNTING_CLASS_CODE)
7964          WHERE application_id = p_application_id
7965          AND   ae_header_id   = p_ae_header_id
7966          AND   ae_line_num    = DECODE(p_item_name, C_ITEM_GL_DATE, ae_line_num, p_ae_line_num);
7967 
7968          --------------------------------------------------------------
7969          -- GL Date is stored in xla_ae_lines, need to audit all lines
7970          --------------------------------------------------------------
7971          IF p_item_name = 'GL_DATE' then
7972             xla_datafixes_pub.audit_datafix (p_application_id   => p_application_id
7973                           ,p_ae_header_id     => p_ae_header_id);
7974 
7975          ELSE
7976             xla_datafixes_pub.audit_datafix (p_application_id   => p_application_id
7977                           ,p_ae_header_id     => p_ae_header_id
7978                           ,p_ae_line_num      => p_ae_line_num);
7979          END IF;
7980 
7981       END IF;
7982 
7983      ------------------------------------------------
7984      -- add control balance
7985      ------------------------------------------------
7986      IF NVL(p_item_name,'N') IN (C_ITEM_GL_DATE,      C_ITEM_ACCOUNT,
7987                                  C_ITEM_ACCOUNTED_DR, C_ITEM_ACCOUNTED_CR,   C_ITEM_CURRENCY_CODE,
7988                                  C_ITEM_ENTERED_DR,   C_ITEM_ENTERED_CR ) THEN
7989         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7990                 trace(p_msg    => 'Calling xla_balances_pkg.massive_update to add',
7991                       p_module => l_log_module,
7992                       p_level  => C_LEVEL_STATEMENT);
7993         END IF;
7994         IF (NOT xla_balances_pkg.massive_update
7995                  (p_application_id       => p_application_id
7996                  ,p_ledger_id            => NULL
7997                  ,p_event_id             => NULL
7998                  ,p_entity_id            => l_entity_id
7999                  ,p_request_id           => NULL
8000                  ,p_accounting_batch_id  => NULL
8001                  ,p_update_mode          => 'A'         -- Add
8002                  ,p_execution_mode       => 'O')) THEN  -- Online
8003            xla_datafixes_pub.Log_error(p_module    => l_log_module
8004                     ,p_error_msg => 'Error when adding control balance calculation');
8005         END IF;
8006         IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8007                 trace(p_msg    => 'Returned from xla_balances_pkg.massive_update',
8008                       p_module => l_log_module,
8009                       p_level  => C_LEVEL_STATEMENT);
8010         END IF;
8011      END IF;
8012 
8013      ------------------------------------------------
8014      -- update trial balance
8015      ------------------------------------------------
8016      IF l_gl_status in ('S','Y') THEN
8017         IF NVL(p_item_name,'N') IN (C_ITEM_GL_DATE,      C_ITEM_ACCOUNT,
8018                                     C_ITEM_ACCOUNTED_DR, C_ITEM_ACCOUNTED_CR,   C_ITEM_CURRENCY_CODE,
8019                                     C_ITEM_ENTERED_DR,   C_ITEM_ENTERED_CR ) THEN
8020            IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8021                 trace(p_msg    => 'Calling xla_tb_data_manager_pvt.recreate_trial_balances',
8022                       p_module => l_log_module,
8023                       p_level  => C_LEVEL_STATEMENT);
8024            END IF;
8025            xla_tb_data_manager_pvt.recreate_trial_balances(
8026                       p_application_id   => p_application_id
8027                      ,p_ae_header_id     => p_ae_header_id);
8028            IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8029                 trace(p_msg    => 'Returned from xla_tb_data_manager_pvt.recreate_trial_balances',
8030                       p_module => l_log_module,
8031                       p_level  => C_LEVEL_STATEMENT);
8032            END IF;
8033         END IF;
8034      END IF;
8035 
8036   END IF;
8037 
8038   FND_MSG_PUB.count_and_get(p_count => x_msg_count
8039                            ,p_data  => x_msg_data);
8040 
8041   IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8042      trace(p_msg    => 'END of procedure update_data',
8043            p_module => l_log_module,
8044            p_level  => C_LEVEL_PROCEDURE);
8045   END IF;
8046 
8047 EXCEPTION
8048 WHEN FND_API.G_EXC_ERROR THEN
8049   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8050       trace(p_msg    => 'Error',
8051             p_module => l_log_module,
8052             p_level  => C_LEVEL_STATEMENT);
8053   END IF;
8054   ROLLBACK;
8055   x_return_status := FND_API.G_RET_STS_ERROR ;
8056   FND_MSG_PUB.count_and_get(p_count => x_msg_count
8057                            ,p_data  => x_msg_data);
8058 
8059 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8060   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8061       trace(p_msg    => 'Unexpected error',
8062             p_module => l_log_module,
8063             p_level  => C_LEVEL_STATEMENT);
8064   END IF;
8065   ROLLBACK;
8066   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8067 
8068 WHEN OTHERS THEN
8069   IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8070                 trace(p_msg    => 'Other error',
8071                       p_module => l_log_module,
8072                       p_level  => C_LEVEL_STATEMENT);
8073   END IF;
8074   ROLLBACK;
8075   x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8076   IF FND_MSG_PUB.check_msg_level(FND_MSG_PUB.g_msg_lvl_unexp_error) THEN
8077     FND_MSG_PUB.add_exc_msg(C_DEFAULT_MODULE, l_api_name);
8078   END IF;
8079   FND_MSG_PUB.count_and_get(p_count => x_msg_count
8080                            ,p_data  => x_msg_data);
8081 END update_data;
8082 
8083 --
8084 -- Procedure Name: Create_Distribution_link
8085 --
8086 -- This procedure is called in the following cases:
8087 -- 1. A manual journal entry is created
8088 -- 2. A draft entry is updated (as mrc lines are recreated)
8089 --
8090 PROCEDURE create_distribution_link
8091   (p_application_id             IN  INTEGER
8092   ,p_ae_header_id               IN  INTEGER
8093   ,p_ae_line_num                IN  INTEGER
8094   ,p_temp_line_num              IN  INTEGER
8095   ,p_ref_ae_header_id           IN  INTEGER
8096   ,p_ref_event_id               IN  INTEGER
8097   ,p_ref_temp_line_num          IN  INTEGER)
8098 IS
8099    l_log_module          VARCHAR2(240);
8100 BEGIN
8101    IF g_log_enabled THEN
8102      l_log_module := C_DEFAULT_MODULE||'.create_distribution_link';
8103    END IF;
8104 
8105    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8106      trace(p_msg    => 'BEGIN of procedure create_distribution_link',
8107            p_module => l_log_module,
8108            p_level  => C_LEVEL_PROCEDURE);
8109    END IF;
8110 
8111    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8112 
8113       trace(p_msg    => 'p_application_id = '||p_application_id,
8114             p_module => l_log_module,
8115             p_level  => C_LEVEL_STATEMENT);
8116 
8117       trace(p_msg    => 'p_ae_header_id   = '||p_ae_header_id,
8118             p_module => l_log_module,
8119             p_level  => C_LEVEL_STATEMENT);
8120 
8121       trace(p_msg    => 'p_ae_line_num    = '||p_ae_line_num,
8122             p_module => l_log_module,
8123             p_level  => C_LEVEL_STATEMENT);
8124 
8125    END IF;
8126 
8127    INSERT INTO xla_distribution_links
8128          (application_id
8129          ,event_id
8130          ,ae_header_id
8131          ,ae_line_num
8132          ,source_distribution_type
8133          ,statistical_amount
8134          ,ref_ae_header_id
8135          ,ref_temp_line_num
8136          ,merge_duplicate_code
8137          ,temp_line_num
8138          ,ref_event_id
8139          ,event_class_code
8140          ,event_type_code
8141          ,unrounded_entered_dr
8142          ,unrounded_entered_cr
8143          ,unrounded_accounted_dr
8144          ,unrounded_accounted_cr)
8145   SELECT p_application_id
8146         ,xah.event_id
8147         ,p_ae_header_id
8148         ,p_ae_line_num                -- ae line num
8149         ,'XLA_MANUAL'                 -- source distribution type
8150         ,xal.statistical_amount       -- statistical Amount
8151         ,p_ref_ae_header_id           -- ref ae header id
8152         ,p_ref_temp_line_num          -- ref temp line num
8153         ,'N'                          -- merge duplicate code
8154         ,p_temp_line_num              -- temp line num
8155         ,p_ref_event_id               -- ref event id
8156         ,C_EVENT_CLASS_CODE_MANUAL    -- event class code
8157         ,C_EVENT_TYPE_CODE_MANUAL     -- event type code
8158         ,xal.unrounded_entered_dr
8159         ,xal.unrounded_entered_cr
8160         ,xal.unrounded_accounted_dr
8161         ,xal.unrounded_accounted_cr
8162     FROM xla_ae_headers xah
8163         ,xla_ae_lines   xal
8164    WHERE xah.application_id = p_application_id
8165      AND xah.ae_header_id   = p_ae_header_id
8166      AND xal.application_id = xah.application_id
8167      AND xal.ae_header_id   = xah.ae_header_id
8168      AND xal.ae_line_num    = p_ae_line_num;
8169 
8170 
8171    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8172      trace(p_msg    => 'END of procedure create_distribution_link',
8173            p_module => l_log_module,
8174            p_level  => C_LEVEL_PROCEDURE);
8175    END IF;
8176 
8177 EXCEPTION
8178 WHEN xla_exceptions_pkg.application_exception THEN
8179   RAISE;
8180 
8181 WHEN OTHERS THEN
8182   xla_exceptions_pkg.raise_message
8183      (p_location => 'xla_journal_entries_pkg.create_distribution_link');
8184 
8185 END create_distribution_link;
8186 
8187 PROCEDURE delete_distribution_link
8188   (p_application_id		IN  INTEGER
8189   ,p_ae_header_id       IN  INTEGER
8190   ,p_ref_ae_header_id   IN  INTEGER
8191   ,p_temp_line_num      IN  INTEGER)
8192 IS
8193   l_log_module          VARCHAR2(240);
8194 BEGIN
8195    IF g_log_enabled THEN
8196      l_log_module := C_DEFAULT_MODULE||'.delete_distribution_link';
8197    END IF;
8198 
8199    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8200      trace(p_msg    => 'BEGIN of procedure delete_distribution_link',
8201            p_module => l_log_module,
8202            p_level  => C_LEVEL_PROCEDURE);
8203    END IF;
8204 
8205    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8206 
8207       trace(p_msg    => 'p_application_id = '||p_application_id,
8208             p_module => l_log_module,
8209             p_level  => C_LEVEL_STATEMENT);
8210 
8211       trace(p_msg    => 'p_ae_header_id   = '||p_ae_header_id,
8212             p_module => l_log_module,
8213             p_level  => C_LEVEL_STATEMENT);
8214 
8215       trace(p_msg    => 'p_ref_ae_header_id   = '||p_ref_ae_header_id,
8216             p_module => l_log_module,
8217             p_level  => C_LEVEL_STATEMENT);
8218 
8219       trace(p_msg    => 'p_temp_line_num    = '||p_temp_line_num,
8220             p_module => l_log_module,
8221             p_level  => C_LEVEL_STATEMENT);
8222 
8223    END IF;
8224 
8225    DELETE xla_distribution_links
8226     WHERE application_id   = p_application_id
8227       AND ref_ae_header_id = p_ref_ae_header_id
8228       AND temp_line_num    = p_temp_line_num
8229       AND ae_header_id     = p_ae_header_id;
8230 
8231    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8232      trace(p_msg    => 'END of procedure delete_distribution_link',
8233            p_module => l_log_module,
8234            p_level  => C_LEVEL_PROCEDURE);
8235    END IF;
8236 
8237 EXCEPTION
8238 WHEN xla_exceptions_pkg.application_exception THEN
8239   RAISE;
8240 
8241 WHEN OTHERS THEN
8242   xla_exceptions_pkg.raise_message
8243      (p_location => 'xla_journal_entries_pkg.delete_distribution_link');
8244 END delete_distribution_link;
8245 
8246 PROCEDURE update_distribution_link
8247   (p_application_id             IN  INTEGER
8248   ,p_ae_header_id               IN  INTEGER
8249   ,p_ref_ae_header_id           IN  INTEGER
8250   ,p_temp_line_num             	IN  INTEGER
8251   ,p_unrounded_entered_dr       IN  NUMBER
8252   ,p_unrounded_entered_cr       IN  NUMBER
8253   ,p_unrounded_accounted_dr     IN  NUMBER
8254   ,p_undournde_accounted_cr     IN  NUMBER
8255   ,p_statistical_amount         IN  NUMBER)
8256 IS
8257 
8258   l_log_module          VARCHAR2(240);
8259 
8260 BEGIN
8261    IF g_log_enabled THEN
8262      l_log_module := C_DEFAULT_MODULE||'.update_distribution_link';
8263    END IF;
8264 
8265    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8266      trace(p_msg    => 'BEGIN of procedure update_distribution_link',
8267            p_module => l_log_module,
8268            p_level  => C_LEVEL_PROCEDURE);
8269    END IF;
8270 
8271    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8272 
8273       trace(p_msg    => 'p_application_id         = '||p_application_id,
8274             p_module => l_log_module,
8275             p_level  => C_LEVEL_STATEMENT);
8276 
8277       trace(p_msg    => 'p_ae_header_id           = '||p_ae_header_id,
8278             p_module => l_log_module,
8279             p_level  => C_LEVEL_STATEMENT);
8280 
8281       trace(p_msg    => 'p_ref_ae_header_id       = '||p_ref_ae_header_id,
8282             p_module => l_log_module,
8283             p_level  => C_LEVEL_STATEMENT);
8284 
8285       trace(p_msg    => 'p_temp_line_num          = '||p_temp_line_num,
8286             p_module => l_log_module,
8287             p_level  => C_LEVEL_STATEMENT);
8288 
8289       trace(p_msg    => 'p_unrounded_entered_dr   = '||p_unrounded_entered_dr,
8290             p_module => l_log_module,
8291             p_level  => C_LEVEL_STATEMENT);
8292 
8293       trace(p_msg    => 'p_unrounded_entered_cr   = '||p_unrounded_entered_cr,
8294             p_module => l_log_module,
8295             p_level  => C_LEVEL_STATEMENT);
8296 
8297       trace(p_msg    => 'p_unrounded_accounted_dr = '||p_unrounded_accounted_dr,
8298             p_module => l_log_module,
8299             p_level  => C_LEVEL_STATEMENT);
8300 
8301       trace(p_msg    => 'p_undournde_accounted_cr = '||p_undournde_accounted_cr,
8302             p_module => l_log_module,
8303             p_level  => C_LEVEL_STATEMENT);
8304 
8305       trace(p_msg    => 'p_statistical_amount     = '||p_statistical_amount,
8306             p_module => l_log_module,
8307             p_level  => C_LEVEL_STATEMENT);
8308 
8309    END IF;
8310 
8311    UPDATE xla_distribution_links
8312       SET unrounded_entered_dr   = p_unrounded_entered_dr
8313          ,unrounded_entered_cr   = p_unrounded_entered_cr
8314          ,unrounded_accounted_dr = p_unrounded_accounted_dr
8315          ,unrounded_accounted_cr = p_undournde_accounted_cr
8316          ,statistical_amount     = p_statistical_amount
8317     WHERE application_id         = p_application_id
8318       AND ref_ae_header_id       = p_ref_ae_header_id
8319       AND temp_line_num          = p_temp_line_num
8320       AND ae_header_id           = p_ae_header_id;
8321 
8322    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8323      trace(p_msg    => 'END of procedure update_distribution_link',
8324            p_module => l_log_module,
8325            p_level  => C_LEVEL_PROCEDURE);
8326    END IF;
8327 
8328 EXCEPTION
8329 WHEN xla_exceptions_pkg.application_exception THEN
8330   RAISE;
8331 
8332 WHEN OTHERS THEN
8333   xla_exceptions_pkg.raise_message
8334      (p_location => 'xla_journal_entries_pkg.update_distribution_link');
8335 
8336 END update_distribution_link;
8337 
8338 PROCEDURE create_reversal_distr_link
8339   (p_application_id             IN  INTEGER
8340   ,p_ae_header_id               IN  INTEGER
8341   ,p_ref_ae_header_id           IN  INTEGER
8342   ,p_ref_event_id               IN  INTEGER)
8343 IS
8344    l_ref_event_id               INTEGER;
8345    l_log_module                 VARCHAR2(240);
8346 BEGIN
8347    IF g_log_enabled THEN
8348      l_log_module := C_DEFAULT_MODULE||'.create_reversal_distr_link';
8349    END IF;
8350 
8351    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8352      trace(p_msg    => 'BEGIN of procedure create_reversal_distr_link',
8353            p_module => l_log_module,
8354            p_level  => C_LEVEL_PROCEDURE);
8355    END IF;
8356 
8357    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8358 
8359       trace(p_msg    => 'p_application_id   = '||p_application_id,
8360             p_module => l_log_module,
8361             p_level  => C_LEVEL_STATEMENT);
8362 
8363       trace(p_msg    => 'p_ae_header_id     = '||p_ae_header_id,
8364             p_module => l_log_module,
8365             p_level  => C_LEVEL_STATEMENT);
8366 
8367       trace(p_msg    => 'p_ref_ae_header_id = '||p_ref_ae_header_id,
8368             p_module => l_log_module,
8369             p_level  => C_LEVEL_STATEMENT);
8370 
8371       trace(p_msg    => 'p_ref_event_id     = '||p_ref_event_id,
8372             p_module => l_log_module,
8373             p_level  => C_LEVEL_STATEMENT);
8374 
8375    END IF;
8376 
8377    IF p_ref_event_id IS NOT NULL THEN
8378       --
8379       -- Called from create_mrc_reversal_entry
8380       --
8381 
8382       l_ref_event_id := p_ref_event_id;
8383 
8384    ELSE
8385       --
8386       -- Called from create_reversal_entry
8387       --
8388       SELECT event_id
8389         INTO l_ref_event_id
8390         FROM xla_ae_headers
8391        WHERE application_id = p_application_id
8392          AND ae_header_id = p_ref_ae_header_id;
8393 
8394    END IF;
8395 
8396    INSERT INTO xla_distribution_links
8397          (application_id
8398          ,event_id
8399          ,ae_header_id
8400          ,ae_line_num
8401          ,source_distribution_type
8402          ,statistical_amount
8403          ,ref_ae_header_id
8404          ,ref_temp_line_num
8405          ,merge_duplicate_code
8406          ,temp_line_num
8407          ,ref_event_id
8408          ,event_class_code
8409          ,event_type_code
8410          ,unrounded_entered_dr
8411          ,unrounded_entered_cr
8412          ,unrounded_accounted_dr
8413          ,unrounded_accounted_cr)
8414    SELECT p_application_id
8415          ,xah.event_id
8416          ,p_ae_header_id
8417          ,ae_line_num
8418          ,'XLA_MANUAL'                 -- source distribution type
8419          ,xal.statistical_amount       -- statistical amount
8420          ,p_ref_ae_header_id           -- ref ae header id
8421          ,ae_line_num                  -- ref temp line num
8422          ,'N'                          -- merge duplicate code
8423          ,-1 * ae_line_num             -- temp line num
8424          ,l_ref_event_id               -- ref event id
8425          ,C_EVENT_CLASS_CODE_MANUAL    -- event class code
8426          ,C_EVENT_TYPE_CODE_MANUAL     -- event type code
8427          ,xal.unrounded_entered_dr
8428          ,xal.unrounded_entered_cr
8429          ,xal.unrounded_accounted_dr
8430          ,xal.unrounded_accounted_cr
8431      FROM xla_ae_headers xah
8432          ,xla_ae_lines   xal
8433     WHERE xah.application_id = p_application_id
8434       AND xah.ae_header_id   = p_ae_header_id
8435       AND xal.application_id = xah.application_id
8436       AND xal.ae_header_id   = xah.ae_header_id;
8437 
8438    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8439      trace(p_msg    => 'END of procedure create_reversal_distr_link',
8440            p_module => l_log_module,
8441            p_level  => C_LEVEL_PROCEDURE);
8442    END IF;
8443 
8444 EXCEPTION
8445 WHEN xla_exceptions_pkg.application_exception THEN
8446   RAISE;
8447 
8448 WHEN OTHERS THEN
8449   xla_exceptions_pkg.raise_message
8450      (p_location => 'xla_journal_entries_pkg.create_reversal_distr_link');
8451 END create_reversal_distr_link;
8452 
8453 FUNCTION is_reversal
8454   (p_application_id             IN            INTEGER
8455   ,p_ae_header_id               IN            INTEGER
8456   ,p_temp_line_num              IN            INTEGER)
8457 RETURN BOOLEAN IS
8458 
8459    l_log_module                 VARCHAR2(240);
8460    l_cnt                        PLS_INTEGER;
8461 BEGIN
8462 
8463    IF g_log_enabled THEN
8464      l_log_module := C_DEFAULT_MODULE||'.is_reversal';
8465    END IF;
8466 
8467    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8468      trace(p_msg    => 'BEGIN of procedure is_reversal',
8469            p_module => l_log_module,
8470            p_level  => C_LEVEL_PROCEDURE);
8471    END IF;
8472 
8473    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8474 
8475       trace(p_msg    => 'p_application_id   = '||p_application_id,
8476             p_module => l_log_module,
8477             p_level  => C_LEVEL_STATEMENT);
8478 
8479       trace(p_msg    => 'p_ae_header_id     = '||p_ae_header_id,
8480             p_module => l_log_module,
8481             p_level  => C_LEVEL_STATEMENT);
8482 
8483       trace(p_msg    => 'p_temp_line_num    = '||p_temp_line_num,
8484             p_module => l_log_module,
8485             p_level  => C_LEVEL_STATEMENT);
8486 
8487    END IF;
8488 
8489    SELECT COUNT(1)
8490      INTO l_cnt
8491      FROM xla_distribution_links
8492     WHERE application_id = p_application_id
8493       AND ae_header_id   = p_ae_header_id
8494       AND temp_line_num  = -1 * p_temp_line_num
8495       AND ROWNUM <=1;
8496 
8497    IF l_cnt = 0 THEN
8498 
8499       IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8500         trace(p_msg    => 'END of procedure is_reversal',
8501               p_module => l_log_module,
8502               p_level  => C_LEVEL_PROCEDURE);
8503       END IF;
8504 
8505      RETURN FALSE;
8506 
8507    ELSE
8508 
8509      IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8510         trace(p_msg    => 'END of procedure is_reversal',
8511              p_module => l_log_module,
8512              p_level  => C_LEVEL_PROCEDURE);
8513      END IF;
8514 
8515      RETURN TRUE;
8516 
8517    END IF;
8518 EXCEPTION
8519 WHEN xla_exceptions_pkg.application_exception THEN
8520   RAISE;
8521 
8522 WHEN OTHERS THEN
8523   xla_exceptions_pkg.raise_message
8524      (p_location => 'xla_journal_entries_pkg.is_reversal');
8525 END is_reversal;
8526 
8527 --
8528 --  get_rev_line_info
8529 --
8530 --  Retrieve information of reversed lines
8531 --
8532 PROCEDURE get_rev_line_info
8533   (p_application_id             IN            INTEGER
8534   ,p_ae_header_id               IN            INTEGER
8535   ,p_temp_line_num              IN OUT NOCOPY INTEGER
8536   ,p_ref_ae_header_id           OUT    NOCOPY INTEGER
8537   ,p_ref_event_id               OUT    NOCOPY INTEGER)
8538 IS
8539 
8540    l_ref_ae_header_id           INTEGER;
8541    l_ref_event_id               INTEGER;
8542    l_temp_line_num              INTEGER;
8543    l_log_module                 VARCHAR2(240);
8544 BEGIN
8545    IF g_log_enabled THEN
8546      l_log_module := C_DEFAULT_MODULE||'.get_rev_line_info';
8547    END IF;
8548 
8549    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8550      trace(p_msg    => 'BEGIN of procedure get_rev_line_info',
8551            p_module => l_log_module,
8552            p_level  => C_LEVEL_PROCEDURE);
8553    END IF;
8554 
8555    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8556 
8557       trace(p_msg    => 'p_application_id   = '||p_application_id,
8558             p_module => l_log_module,
8559             p_level  => C_LEVEL_STATEMENT);
8560 
8561       trace(p_msg    => 'p_ae_header_id     = '||p_ae_header_id,
8562             p_module => l_log_module,
8563             p_level  => C_LEVEL_STATEMENT);
8564 
8565       trace(p_msg    => 'p_temp_line_num    = '||p_temp_line_num,
8566             p_module => l_log_module,
8567             p_level  => C_LEVEL_STATEMENT);
8568 
8569    END IF;
8570 
8571    BEGIN
8572 
8573       --
8574       -- Retrieve information of reversal lines
8575       --
8576       SELECT ref_ae_header_id
8577             ,ref_event_id
8578             ,temp_line_num
8579         INTO l_ref_ae_header_id
8580             ,l_ref_event_id
8581             ,l_temp_line_num
8582         FROM xla_distribution_links
8583        WHERE application_id = p_application_id
8584          AND ae_header_id   = p_ae_header_id
8585          AND temp_line_num  = -1 * p_temp_line_num
8586          AND ROWNUM <= 1;
8587 
8588    EXCEPTION
8589    WHEN no_data_found THEN
8590 
8591       --
8592       -- This is not a reversal line.
8593       --
8594       l_ref_ae_header_id := p_ae_header_id;
8595       l_ref_event_id     := NULL;
8596       l_temp_line_num    := p_temp_line_num;
8597 
8598    END;
8599 
8600    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8601 
8602       trace(p_msg    => 'l_ref_ae_header_id   = '||l_ref_ae_header_id,
8603             p_module => l_log_module,
8604             p_level  => C_LEVEL_STATEMENT);
8605 
8606       trace(p_msg    => 'l_ref_event_id       = '||l_ref_event_id,
8607             p_module => l_log_module,
8608             p_level  => C_LEVEL_STATEMENT);
8609 
8610       trace(p_msg    => 'l_temp_line_num      = '||l_temp_line_num,
8611             p_module => l_log_module,
8612             p_level  => C_LEVEL_STATEMENT);
8613 
8614 
8615    END IF;
8616 
8617    p_ref_ae_header_id := l_ref_ae_header_id;
8618    p_ref_event_id     := l_ref_event_id;
8619    p_temp_line_num    := l_temp_line_num;
8620 
8621    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8622      trace(p_msg    => 'END of procedure get_rev_line_info',
8623            p_module => l_log_module,
8624            p_level  => C_LEVEL_PROCEDURE);
8625    END IF;
8626 
8627 EXCEPTION
8628 WHEN xla_exceptions_pkg.application_exception THEN
8629   RAISE;
8630 
8631 WHEN OTHERS THEN
8632   xla_exceptions_pkg.raise_message
8633      (p_location => 'xla_journal_entries_pkg.get_rev_line_info');
8634 END get_rev_line_info;
8635 
8636 --
8637 --  get_mrc_rev_line_info
8638 --
8639 --  Retrieve information of reversed mrc lines
8640 --
8641 PROCEDURE get_mrc_rev_line_info
8642   (p_application_id             IN            INTEGER
8643   ,p_ae_header_id               IN            INTEGER -- ae_header_id for primary ledgers
8644   ,p_temp_line_num              IN OUT NOCOPY INTEGER
8645   ,p_ref_ae_header_id           OUT    NOCOPY INTEGER
8646   ,p_ref_temp_line_num          OUT    NOCOPY INTEGER
8647   ,p_ref_event_id               OUT    NOCOPY INTEGER)
8648 IS
8649 
8650    l_ref_ae_header_id           INTEGER;
8651    l_ref_event_id               INTEGER;
8652    l_temp_line_num              INTEGER;
8653    l_ref_temp_line_num          INTEGER;
8654    l_log_module                 VARCHAR2(240);
8655 BEGIN
8656    IF g_log_enabled THEN
8657      l_log_module := C_DEFAULT_MODULE||'.get_mrc_rev_line_info';
8658    END IF;
8659 
8660    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8661      trace(p_msg    => 'BEGIN of procedure get_mrc_rev_line_info',
8662            p_module => l_log_module,
8663            p_level  => C_LEVEL_PROCEDURE);
8664    END IF;
8665 
8666    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8667 
8668       trace(p_msg    => 'p_application_id   = '||p_application_id,
8669             p_module => l_log_module,
8670             p_level  => C_LEVEL_STATEMENT);
8671 
8672       trace(p_msg    => 'p_ae_header_id     = '||p_ae_header_id,
8673             p_module => l_log_module,
8674             p_level  => C_LEVEL_STATEMENT);
8675 
8676       trace(p_msg    => 'p_temp_line_num    = '||p_temp_line_num,
8677             p_module => l_log_module,
8678             p_level  => C_LEVEL_STATEMENT);
8679 
8680    END IF;
8681 
8682 
8683    --
8684    --  Find lines with the same event as those of non-mrc JEs
8685    --  but with different header ids => original mrc lines reversed
8686    --
8687 
8688    SELECT ae_header_id
8689          ,event_id
8690          ,-1 * temp_line_num
8691          ,temp_line_num
8692      INTO l_ref_ae_header_id
8693          ,l_ref_event_id
8694          ,l_temp_line_num
8695          ,l_ref_temp_line_num
8696      FROM xla_distribution_links
8697     WHERE event_id =
8698             (SELECT ref_event_id
8699                FROM xla_distribution_links
8700               WHERE application_id = p_application_id      -- non mrc
8701                 AND ae_header_id   = p_ae_header_id        -- non mrc
8702                 AND temp_line_num  = -1 * p_temp_line_num  -- non mrc
8703                 AND ROWNUM <= 1)
8704       AND ae_header_id <>
8705             (SELECT ref_ae_header_id
8706                FROM xla_distribution_links
8707               WHERE application_id = p_application_id      -- non mrc
8708                 AND ae_header_id   = p_ae_header_id        -- non mrc
8709                 AND temp_line_num  = -1 * p_temp_line_num  -- non mrc
8710                 AND ROWNUM <= 1)
8711       AND temp_line_num = p_temp_line_num;
8712 
8713    IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8714 
8715       trace(p_msg    => 'l_ref_ae_header_id   = '||l_ref_ae_header_id,
8716             p_module => l_log_module,
8717             p_level  => C_LEVEL_STATEMENT);
8718 
8719       trace(p_msg    => 'l_ref_event_id       = '||l_ref_event_id,
8720             p_module => l_log_module,
8721             p_level  => C_LEVEL_STATEMENT);
8722 
8723       trace(p_msg    => 'l_temp_line_num      = '||l_temp_line_num,
8724             p_module => l_log_module,
8725             p_level  => C_LEVEL_STATEMENT);
8726 
8727    END IF;
8728 
8729    p_ref_ae_header_id  := l_ref_ae_header_id;
8730    p_ref_event_id      := l_ref_event_id;
8731    p_temp_line_num     := l_temp_line_num;
8732    p_ref_temp_line_num := l_ref_temp_line_num;
8733 
8734    IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8735      trace(p_msg    => 'END of procedure get_mrc_rev_line_info',
8736            p_module => l_log_module,
8737            p_level  => C_LEVEL_PROCEDURE);
8738    END IF;
8739 
8740 EXCEPTION
8741 WHEN xla_exceptions_pkg.application_exception THEN
8742   RAISE;
8743 
8744 WHEN OTHERS THEN
8745   xla_exceptions_pkg.raise_message
8746      (p_location => 'xla_journal_entries_pkg.get_mrc_rev_line_info');
8747 END get_mrc_rev_line_info;
8748 --=============================================================================
8749 --
8750 -- Following code is executed when the package body is referenced for the first
8751 -- time
8752 --
8753 --=============================================================================
8754 BEGIN
8755    g_log_level      := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
8756    g_log_enabled    := fnd_log.test
8757                           (log_level  => g_log_level
8758                           ,module     => C_DEFAULT_MODULE);
8759 
8760    g_log_level      := C_LEVEL_STATEMENT;
8761    g_log_enabled    := TRUE;
8762 
8763    IF NOT g_log_enabled  THEN
8764       g_log_level := C_LEVEL_LOG_DISABLED;
8765    END IF;
8766 
8767 END xla_journal_entries_pkg;