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