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