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