[Home] [Help]
PACKAGE BODY: APPS.XLA_BALANCES_PKG
Source
1 PACKAGE BODY xla_balances_pkg AS
2 /* $Header: xlabacom.pkb 120.43.12010000.15 2008/12/24 10:58:25 svellani ship $ */
3 /*======================================================================+
4 | Copyright (c) 1995-2002 Oracle Corporation |
5 | Redwood Shores, CA, USA |
6 | All rights reserved. |
7 +=======================================================================+
8 | PACKAGE NAME |
9 | xla_balances_pkg |
10 | |
11 | DESCRIPTION |
12 | XLA Balances Package |
13 | |
14 | HISTORY |
15 | 27-AUG-02 A. Quaglia Created |
16 | 15-NOV-02 A. Quaglia -Added NOCOPY hint to OUT parameters |
17 | -'N' not allowed for balance_flags |
18 | -Analytical balances do not propagate |
19 | -beyond fiscal years. |
20 | 20-DEC-02 A. Quaglia -Implemented new propagation for |
21 | analytical criteria. |
22 | 16-JUN-03 A. Quaglia Global temporary tables renamed |
23 | changed je_source_name to |
24 | control_account_source_code in |
25 | xla_subledgers |
26 | 10-OCT-03 A. Quaglia Bug3177938 |
27 | massive_update: |
28 | p_application_id must be not null. |
29 | load_balance_temp_tables: |
30 | added support for p_application_id |
31 | not null when p_request_id not null |
32 | 29-OCT-03 A. Quaglia Bug3190083 |
33 | lock_create_balance_statuses: |
34 | replaced FND_FLEX_APIS |
35 | get_qualifier_segnum + get_segment_info|
36 | with get_segment_column |
37 | in all _srs: |
38 | added activate/deactivate trace stmts |
39 | 31-OCT-03 A.Quaglia Bug3202694: |
40 | massive_update: |
41 | added p_entity_id |
42 | old, deprecated API maintained until |
43 | uptake is done. |
44 | calculate_balances: |
45 | if no rows to process exit immediately |
46 | also when commit_flag <> 'Y' |
47 | 31-OCT-03 A.Quaglia Replaced other occurences of FND_FLEX_APIS|
48 | 26-NOV-03 A.Quaglia Bug3264347: |
49 | massive_update_srs: |
50 | new param p_dummy |
51 | massive_update: |
52 | changed concurrent submission of |
53 | XLABAOPE (new dummy param in def.) |
54 | 15-DEC-03 A.Quaglia Bug3315864: |
55 | move_balances_forward: |
56 | fixed carry forward of NULL amounts |
57 | move_identified_bals_forward: |
58 | fixed carry forward of NULL amounts |
59 | fixed missing outer join on one cond. |
60 | fixed running from SQLPlus (no req.id) |
61 | renamed to move_balances_forward_COMMIT|
62 | build_line_selection_dyn_stmts: |
63 | corrected WHEN clause in INSERT ALL |
64 | 05-MAR-04 A.Quaglia Changed trace handling as per Sandeep's |
65 | code. |
66 | 19-MAR-04 A.Quaglia Fixed debug changes issues: |
67 | -Replaced global variable for trace |
68 | with local one |
69 | -Fixed issue with SQL%ROWCOUNT which is |
70 | modified after calling debug proc |
71 | 29-JUL-04 A.Quaglia Bug3202694: |
72 | massive_update: |
73 | removed deprecated API |
74 | |
75 | 22-OCT-04 W.Shen New API is added |
76 | massive_update(p_application_id) |
77 | This API is for Bulk Event API only |
78 | It will update the balance for events |
79 | in events_gt table. |
80 | Two private functions: Calculate_balances,|
81 | Load_balance_temp_tables are updated |
82 | too |
83 | 11-MAR-05 W. Chan Fixed bug 4220415 - removed join to |
84 | xla_transaction_entities in |
85 | load_balance_temp_tables when the |
86 | entity_id IS NULL |
87 | |
88 | 01-APR-05 W. Chan Fixed bug 4277500 - removed join to |
89 | xla_events in load_balance_temp_tables |
90 | when the entity_id IS NULL |
91 | |
92 | 10-APR-05 W. Shen Fixed bug 4277500 - removed the table |
93 | 30-NOV-05 V. Kumar Bug 4769611 Modify SQLs in balance calcul- |
94 | ation routine |
95 | 19-Jan-05 V. Kumar Removed the code for AC balances |
96 | 03-Mar-06 V. Kumar Populating GL_SL_LINK_IN in xla_ae_lines |
97 | 05-Dec-08 karamakr 7608545- Reset l_begin_bal_dr, |
98 | l_begin_bal_cr to null |
99 +======================================================================*/
100
101 --Generic Procedure/Function template
102 /*======================================================================+
103 | |
104 | Private Function |
105 | |
106 | Description |
107 | ----------- |
108 | |
109 | |
110 | Pseudo-code |
111 | ----------- |
112 | |
113 | |
114 | Open issues |
115 | ----------- |
116 | |
117 | MUST SOLVE |
118 | |
119 | |
120 | NICE TO SOLVE |
121 | |
122 | |
123 +======================================================================*/
124
125 --
126 -- Private exceptions
127 --
128 le_resource_busy EXCEPTION;
129 PRAGMA exception_init(le_resource_busy, -00054);
130
131 --
132 -- Private types
133 --
134 TYPE table_of_pls_integer IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
135
136 --
137 -- Private constants
138 --
139 --maximum number of accounting lines processed in a COMMIT cycle.
140 C_BATCH_COMMIT_SIZE CONSTANT NATURAL := 10000;
141 --maximum numbers of values retrieved at a time by BULK COLLECT statements
142 C_BULK_LIMIT CONSTANT NATURAL := 1000;
143
144 --balance types: analytical criteria or control accounts
145 C_BALANCE_TYPE_ANALYTICAL CONSTANT VARCHAR2(10) := 'ANALYTICAL';
146 C_BALANCE_TYPE_CONTROL CONSTANT VARCHAR2(10) := 'CONTROL';
147
148 --balance modes: draft or final
149 C_BALANCE_MODE_DRAFT CONSTANT VARCHAR2(10) := 'DRAFT';
150 C_BALANCE_MODE_FINAL CONSTANT VARCHAR2(10) := 'FINAL';
151
152 /*
153 C_BALANCE_STATUS_RECREATE CONSTANT VARCHAR2(1) := 'R';
154 C_BALANCE_STATUS_REC_BAL CONSTANT VARCHAR2(1) := 'R';
155 */
156
157 --Analytical Criteria year end carry forward codes
158 --Just for reference, Currently not used in the code
159 C_AC_YEAR_END_CF_CODE_NEVER CONSTANT VARCHAR2(1) := 'N';
160 C_AC_YEAR_END_CF_CODE_ALWAYS CONSTANT VARCHAR2(1) := 'A';
161 C_AC_YEAR_END_CF_CODE_ACC_TYPE CONSTANT VARCHAR2(1) := 'B';
162
163 --
164 -- Global variables
165 --
166 g_user_id INTEGER;
167 g_login_id INTEGER;
168 g_date DATE;
169 g_prog_appl_id INTEGER;
170 g_prog_id INTEGER;
171 g_req_id INTEGER;
172
173 g_cached_ledgers table_of_pls_integer;
174 g_cached_single_period BOOLEAN;
175 --
176
177 -- Cursor declarations
178 --
179
180
181
182 --=============================================================================
183 -- *********** Local Trace Routine **********
184 --=============================================================================
185 C_LEVEL_STATEMENT CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
186 C_LEVEL_PROCEDURE CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
187 C_LEVEL_EVENT CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
188 C_LEVEL_EXCEPTION CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
189 C_LEVEL_ERROR CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
190 C_LEVEL_UNEXPECTED CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
191
192 C_LEVEL_LOG_DISABLED CONSTANT NUMBER := 99;
193 C_DEFAULT_MODULE CONSTANT VARCHAR2(240) := 'xla.plsql.xla_balances_pkg';
194
195 g_log_level NUMBER;
196 g_log_enabled BOOLEAN;
197
198 --1-STATEMENT, 2-PROCEDURE, 3-EVENT, 4-EXCEPTION, 5-ERROR, 6-UNEXPECTED
199
200 PROCEDURE trace
201 ( p_module IN VARCHAR2
202 ,p_msg IN VARCHAR2
203 ,p_level IN NUMBER
204 ) IS
205 BEGIN
206 IF (p_msg IS NULL AND p_level >= g_log_level) THEN
207 fnd_log.message(p_level, p_module);
208 ELSIF p_level >= g_log_level THEN
209 fnd_log.string(p_level, p_module, p_msg);
210 END IF;
211
212 EXCEPTION
213 WHEN xla_exceptions_pkg.application_exception THEN
214 RAISE;
215 WHEN OTHERS THEN
216 xla_exceptions_pkg.raise_message
217 (p_location => 'xla_balances_pkg.trace');
218 END trace;
219
220
221 FUNCTION get_account_segment_column
222 ( p_chart_of_accounts_id INTEGER
223 )
224 RETURN VARCHAR2
225 IS
226
227 l_id_flex_code VARCHAR2 ( 4);
228 l_account_segment_column VARCHAR2 (30);
229 l_balancing_value_set VARCHAR2 (60);
230 l_account_value_set VARCHAR2 (60);
231 l_log_module VARCHAR2 (2000);
232 BEGIN
233
234 l_id_flex_code := 'GL#';
235
236 IF g_log_enabled THEN
237 l_log_module := C_DEFAULT_MODULE||'.get_account_segment_column';
238 END IF;
239
240 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
241 trace
242 (p_module => l_log_module
243 ,p_msg => 'BEGIN ' || l_log_module
244 ,p_level => C_LEVEL_PROCEDURE);
245 END IF;
246
247 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
248 trace
249 (p_module => l_log_module
250 ,p_msg => 'p_chart_of_accounts_id :' || p_chart_of_accounts_id
251 ,p_level => C_LEVEL_STATEMENT
252 );
253 END IF;
254
255 IF FND_FLEX_APIS.get_segment_column( 101
256 ,l_id_flex_code
257 ,p_chart_of_accounts_id
258 ,'GL_ACCOUNT'
259 ,l_account_segment_column
260 )
261
262 THEN
263 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
264 trace
265 (p_module => l_log_module
266 ,p_msg =>
267 'l_account_segment_column:' || l_account_segment_column
268 ,p_level => C_LEVEL_STATEMENT);
269 END IF;
270 ELSE
271 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
272 trace
273 (p_module => l_log_module
274 ,p_msg => 'EXCEPTION: ' ||
275 'Unable to retrieve segment information for chart of accounts ' ||
276 p_chart_of_accounts_id
277 ,p_level => C_LEVEL_EXCEPTION
278 );
279 END IF;
280 xla_exceptions_pkg.raise_message
281 (p_appli_s_name => 'XLA'
282 ,p_msg_name => 'XLA_COMMON_ERROR'
283 ,p_token_1 => 'LOCATION'
284 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
285 ,p_token_2 => 'ERROR'
286 ,p_value_2 => 'EXCEPTION: Unable to retrieve segment information for chart of accounts ' ||
287 p_chart_of_accounts_id);
291
288 END IF;
289
290 RETURN l_account_segment_column;
292 EXCEPTION
293 WHEN xla_exceptions_pkg.application_exception
294 THEN
295 RAISE;
296 WHEN OTHERS
297 THEN
298 xla_exceptions_pkg.raise_message
299 (p_location => 'xla_balances_pkg.get_account_segment_column');
300 END get_account_segment_column;
301
302
303 FUNCTION move_balances_forward_COMMIT
304 ( p_application_id IN INTEGER
305 ,p_ledger_id IN INTEGER
306 ,p_balance_source_code IN VARCHAR2
307 ,p_source_effective_period_num IN INTEGER
308 ,p_balance_status_code_selected IN VARCHAR2
309 ,p_balance_status_code_not_sel IN VARCHAR2
310 )
311 RETURN BOOLEAN
312 IS
313 /*======================================================================+
314 | |
315 | Private Function |
316 | |
317 | Description |
318 | ----------- |
319 | |
320 | WARNING: this procedure performs COMMITs |
321 | |
322 | |
323 | |
324 | Pseudo-code |
325 | ----------- |
326 | |
327 | Open issues |
328 | ----------- |
329 | |
330 | |
331 +======================================================================*/
332
333 CURSOR lc_lock_balance_statuses ( cp_application_id INTEGER
334 ,cp_ledger_id INTEGER
335 ,cp_balance_status_code VARCHAR2
336 ,cp_balance_source_code VARCHAR2
337 ,cp_effective_period_num INTEGER
338 ,cp_request_id INTEGER
339 )
340 IS
341 SELECT xbs.code_combination_id
342 FROM xla_balance_statuses xbs
343 WHERE xbs.application_id = cp_application_id
344 AND xbs.ledger_id = cp_ledger_id
345 AND xbs.balance_status_code = cp_balance_status_code
346 AND xbs.balance_source_code = cp_balance_source_code
347 AND xbs.effective_period_num = cp_effective_period_num
348 AND xbs.request_id = cp_request_id
349 FOR UPDATE;
350
351
352 l_user_id INTEGER;
353 l_login_id INTEGER;
354 l_date DATE;
355 l_prog_appl_id INTEGER;
356 l_prog_id INTEGER;
357 l_req_id INTEGER;
358
359 l_source_period_name VARCHAR2(15);
360 l_dest_effective_period_num INTEGER;
361 l_dest_period_name VARCHAR2(15);
362 l_dest_period_year INTEGER;
363 l_dest_first_period_flag VARCHAR2(1);
364 l_return_value BOOLEAN;
365 l_row_count NUMBER;
366
367 l_log_module VARCHAR2 (2000);
368
369 C_DUMMY CONSTANT VARCHAR2(30) := '#$&';
370
371 BEGIN
372
373 l_user_id := xla_environment_pkg.g_usr_id;
374 l_login_id := xla_environment_pkg.g_login_id;
375 l_date := SYSDATE;
376 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
377 l_prog_id := xla_environment_pkg.g_prog_id;
378 l_req_id := xla_environment_pkg.g_req_id;
379
380 IF g_log_enabled THEN
381 l_log_module := C_DEFAULT_MODULE||'.move_balances_forward_COMMIT';
382 END IF;
383
384 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
385 trace
386 (p_module => l_log_module
387 ,p_msg => 'BEGIN ' || l_log_module
388 ,p_level => C_LEVEL_PROCEDURE);
389 END IF;
390
391 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
392 trace
393 (p_module => l_log_module
394 ,p_msg => 'p_application_id :' || p_application_id
395 ,p_level => C_LEVEL_STATEMENT);
396 trace
397 (p_module => l_log_module
398 ,p_msg => 'p_ledger_id :' || p_ledger_id
399 ,p_level => C_LEVEL_STATEMENT);
400 trace
401 (p_module => l_log_module
402 ,p_msg => 'p_balance_source_code :' || p_balance_source_code
403 ,p_level => C_LEVEL_STATEMENT);
404 trace
405 (p_module => l_log_module
409 (p_module => l_log_module
406 ,p_msg => 'p_source_effective_period_num :' || p_source_effective_period_num
407 ,p_level => C_LEVEL_STATEMENT);
408 trace
410 ,p_msg => 'p_balance_status_code_selected :' || p_balance_status_code_selected
411 ,p_level => C_LEVEL_STATEMENT);
412 trace
413 (p_module => l_log_module
414 ,p_msg => 'p_balance_status_code_not_sel :' || p_balance_status_code_not_sel
415 ,p_level => C_LEVEL_STATEMENT);
416 trace
417 (p_module => l_log_module
418 ,p_msg => 'l_req_id :' || l_req_id
419 ,p_level => C_LEVEL_STATEMENT);
420 END IF;
421
422 IF p_balance_status_code_selected IS NULL
423 AND p_balance_status_code_not_sel IS NULL
424 THEN
425 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
426 trace
427 (p_module => l_log_module
428 ,p_msg => 'EXCEPTION:'
429 ||'p_balance_status_code_selected and p_balance_status_code_not_sel '
430 || 'cannot be both NULL'
431 ,p_level => C_LEVEL_EXCEPTION
432 );
433 END IF;
434 xla_exceptions_pkg.raise_message
435 (p_appli_s_name => 'XLA'
436 ,p_msg_name => 'XLA_COMMON_ERROR'
437 ,p_token_1 => 'LOCATION'
438 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
439 ,p_token_2 => 'ERROR'
440 ,p_value_2 => 'EXCEPTION:'
441 ||'p_balance_status_code_selected and p_balance_status_code_not_sel '
442 || 'cannot be both NULL');
443
444 END IF;
445
446 IF p_source_effective_period_num IS NULL
447 THEN
448 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
449 trace
450 (p_module => l_log_module
451 ,p_msg => 'EXCEPTION: ' ||
452 'p_source_effective_period_num cannot be NULL'
453 ,p_level => C_LEVEL_EXCEPTION
454 );
455 END IF;
456 xla_exceptions_pkg.raise_message
457 (p_appli_s_name => 'XLA'
458 ,p_msg_name => 'XLA_COMMON_ERROR'
459 ,p_token_1 => 'LOCATION'
460 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
461 ,p_token_2 => 'ERROR'
462 ,p_value_2 => 'EXCEPTION: ' ||
463 'p_source_effective_period_num cannot be NULL');
464 END IF;
465
466 SELECT gpssource.period_name
467 ,gpsdest.period_name
468 ,gpsdest.effective_period_num
469 ,gpsdest.period_year
470 ,DECODE( gpssource.period_year
471 ,gpsdest.period_year
472 ,'N'
473 ,'Y'
474 ) first_period_flag
475 INTO l_source_period_name
476 ,l_dest_period_name
477 ,l_dest_effective_period_num
478 ,l_dest_period_year
479 ,l_dest_first_period_flag
480 FROM gl_period_statuses gpssource
481 ,gl_period_statuses gpsdest
482 WHERE gpssource.ledger_id = p_ledger_id
483 AND gpssource.application_id = 101
484 AND gpssource.closing_status IN ('O', 'C', 'P')
485 AND gpssource.adjustment_period_flag = 'N'
486 AND gpssource.effective_period_num = p_source_effective_period_num
487 AND gpsdest.ledger_id = p_ledger_id
488 AND gpsdest.application_id = 101
489 AND gpsdest.effective_period_num =
490 ( SELECT MIN(gps2.effective_period_num)
491 FROM gl_period_statuses gps2
492 WHERE gps2.ledger_id = p_ledger_id
493 AND gps2.application_id = 101
494 AND gps2.effective_period_num > p_source_effective_period_num
495 AND gps2.closing_status IN ('O', 'C', 'P')
496 AND gps2.adjustment_period_flag = 'N'
497 );
498
499 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
500 trace
501 (p_module => l_log_module
502 ,p_msg =>
503 'l_source_period_name :' || l_source_period_name
504 ,p_level => C_LEVEL_STATEMENT);
505 trace
506 (p_module => l_log_module
507 ,p_msg =>
508 'l_dest_period_name :' || l_dest_period_name
509 ,p_level => C_LEVEL_STATEMENT);
510 trace
511 (p_module => l_log_module
512 ,p_msg =>
513 'l_dest_effective_period_num :' || l_dest_effective_period_num
514 ,p_level => C_LEVEL_STATEMENT);
515 trace
516 (p_module => l_log_module
517 ,p_msg =>
518 'l_dest_period_year :' || l_dest_period_year
519 ,p_level => C_LEVEL_STATEMENT);
520 trace
521 (p_module => l_log_module
522 ,p_msg =>
523 'l_dest_first_period_flag :' || l_dest_first_period_flag
524 ,p_level => C_LEVEL_STATEMENT);
525 END IF;
526
527 LOOP --process a chunk of balance statuses at a time
528
529 --If called from SQLPlus we need exclusive access
530 IF NVL(l_req_id, -1) = -1
531 THEN
535 ,p_msg => 'Script called from SQLPlus (req_id NULL) '
532 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
533 trace
534 (p_module => l_log_module
536 ,p_level => C_LEVEL_STATEMENT
537 );
538 trace
539 (p_module => l_log_module
540 ,p_msg => 'trying to lock xla_balance_statuses'
541 ,p_level => C_LEVEL_STATEMENT
542 );
543 END IF;
544 LOCK TABLE xla_balance_statuses IN EXCLUSIVE MODE NOWAIT;
545
546 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
547 trace
548 (p_module => l_log_module
549 ,p_msg => 'trying to lock xla_control_balances'
550 ,p_level => C_LEVEL_STATEMENT
551 );
552 END IF;
553 LOCK TABLE xla_control_balances IN EXCLUSIVE MODE NOWAIT;
554
555 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
556 trace
557 (p_module => l_log_module
558 ,p_msg => 'trying to lock xla_ac_balances'
559 ,p_level => C_LEVEL_STATEMENT
560 );
561 END IF;
562 LOCK TABLE xla_ac_balances IN EXCLUSIVE MODE NOWAIT;
563
564 END IF;
565
566 l_date := SYSDATE;
567 UPDATE xla_balance_statuses xbsext
568 SET xbsext.balance_status_code = p_balance_status_code_selected
569 ,xbsext.last_update_date = l_date
570 ,xbsext.last_updated_by = l_user_id
571 ,xbsext.last_update_login = l_login_id
572 ,xbsext.program_update_date = l_date
573 ,xbsext.program_application_id = l_prog_appl_id
574 ,xbsext.program_id = l_prog_id
575 ,xbsext.request_id = NVL(l_req_id, -1)
576 WHERE xbsext.ROWID IN
577 (SELECT xbs.ROWID
578 FROM xla_balance_statuses xbs
579 ,fnd_concurrent_requests fnd
580 WHERE xbs.application_id = p_application_id
581 AND xbs.ledger_id = p_ledger_id
582 AND xbs.balance_source_code = NVL( p_balance_source_code
583 ,xbs.balance_source_code
584 )
585 AND xbs.effective_period_num = p_source_effective_period_num
586 AND xbs.balance_status_code IN ( p_balance_status_code_not_sel
587 ,p_balance_status_code_selected
588 )
589 AND fnd.request_id(+) = xbs.request_id
590 --pick up records being handled by this request
591 --or by any another request which is not running
592 AND ( NVL(xbs.request_id, -1) = NVL(l_req_id, -1)
593 OR NVL(fnd.status_code,'N') <> 'R'
594 )
595 --handle the case where the procedure is invoked
596 --outside a concurrent request
597 UNION
598 SELECT xbs.ROWID
599 FROM xla_balance_statuses xbs
600 WHERE xbs.application_id = p_application_id
601 AND xbs.ledger_id = p_ledger_id
602 AND xbs.balance_source_code = NVL( p_balance_source_code
603 ,xbs.balance_source_code
604 )
605 AND xbs.effective_period_num = p_source_effective_period_num
606 AND xbs.balance_status_code IN ( p_balance_status_code_not_sel
607 ,p_balance_status_code_selected
608 )
609 AND NVL(l_req_id, -1) = -1
610 )
611 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
612
613 l_row_count := SQL%ROWCOUNT;
614
615 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
616 trace
617 (p_module => l_log_module
618 ,p_msg => l_row_count
619 || ' xla_balance_statuses updated to '
620 || p_balance_status_code_selected
621 ,p_level => C_LEVEL_STATEMENT
622 );
623 END IF;
624
625 IF l_row_count = 0
626 THEN
627 l_return_value := TRUE;
628 COMMIT;
629 EXIT;
630 ELSE
631 COMMIT;
632 END IF;
633
634 LOOP
635 --If called from SQLPlus we need exclusive access
636 IF NVL(l_req_id, -1) = -1
637 THEN
638 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
639 trace
640 (p_module => l_log_module
641 ,p_msg => 'Script called from SQLPlus (req_id NULL) '
642 ,p_level => C_LEVEL_STATEMENT
643 );
644 trace
645 (p_module => l_log_module
646 ,p_msg => 'trying to lock xla_balance_statuses'
647 ,p_level => C_LEVEL_STATEMENT
648 );
649 END IF;
653 trace
650 LOCK TABLE xla_balance_statuses IN EXCLUSIVE MODE NOWAIT;
651
652 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
654 (p_module => l_log_module
655 ,p_msg => 'trying to lock xla_control_balances'
656 ,p_level => C_LEVEL_STATEMENT
657 );
658 END IF;
659 LOCK TABLE xla_control_balances IN EXCLUSIVE MODE NOWAIT;
660
661 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
662 trace
663 (p_module => l_log_module
664 ,p_msg => 'trying to lock xla_ac_balances'
665 ,p_level => C_LEVEL_STATEMENT
666 );
667 END IF;
668 LOCK TABLE xla_ac_balances IN EXCLUSIVE MODE NOWAIT;
669
670 END IF;
671
672 IF NVL(p_balance_source_code, 'C') = 'C'
673 THEN
674 --lock xla_balance_statuses and wait if necessary
675 OPEN lc_lock_balance_statuses
676 ( cp_application_id => p_application_id
677 ,cp_ledger_id => p_ledger_id
678 ,cp_balance_status_code => p_balance_status_code_selected
679 ,cp_balance_source_code => 'C'
680 ,cp_effective_period_num => p_source_effective_period_num
681 ,cp_request_id => NVL(l_req_id, -1)
682 );
683 CLOSE lc_lock_balance_statuses;
684
685 INSERT INTO xla_control_balances
686 ( application_id
687 ,ledger_id
688 ,code_combination_id
689 ,party_type_code
690 ,party_id
691 ,party_site_id
692 ,period_name
693 ,period_year
694 ,beginning_balance_dr
695 ,beginning_balance_cr
696 ,period_balance_dr
697 ,period_balance_cr
698 ,draft_beginning_balance_dr
699 ,draft_beginning_balance_cr
700 ,period_draft_balance_dr
701 ,period_draft_balance_cr
702 ,initial_balance_flag
703 ,first_period_flag
704 ,creation_date
705 ,created_by
706 ,last_update_date
707 ,last_updated_by
708 ,last_update_login
709 ,program_update_date
710 ,program_application_id
711 ,program_id
712 ,request_id
713 )
714 SELECT xba.application_id
715 ,xba.ledger_id
716 ,xba.code_combination_id
717 ,xba.party_type_code
718 ,xba.party_id
719 ,xba.party_site_id
720 ,l_dest_period_name
721 ,l_dest_period_year
722 ,DECODE( l_dest_first_period_flag
723 ,'Y'
724 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
725 -(NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0))
726 )
727 ,1
728 ,NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
729 - (NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0))
730 ,NULL
731 )
732 ,NVL2( xba.beginning_balance_dr
733 ,xba.beginning_balance_dr + NVL(xba.period_balance_dr, 0)
734 ,xba.period_balance_dr
735 )
736 ) --beginning_balance_dr
737 ,DECODE( l_dest_first_period_flag
738 ,'Y'
739 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
740 -(NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0))
741 )
742 ,1
743 ,NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
744 - ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0))
745 ,NULL
746 )
747 ,NVL2( xba.beginning_balance_cr
748 ,xba.beginning_balance_cr + NVL(xba.period_balance_cr, 0)
749 ,xba.period_balance_cr
750 )
751 ) --beginning_balance_cr
752 ,NULL --period_balance_dr
753 ,NULL --period_balance_cr
754 ,DECODE( l_dest_first_period_flag
755 ,'Y'
756 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0)
757 -( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0) )
758 )
759 ,1
760 ,NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0)
761 - ( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0) )
762 ,NULL
766 ,xba.period_draft_balance_dr
763 )
764 ,NVL2( xba.draft_beginning_balance_dr
765 ,xba.draft_beginning_balance_dr + NVL(xba.period_draft_balance_dr, 0)
767 )
768 ) --draft_beginning_balance_dr
769 ,DECODE( l_dest_first_period_flag
770 ,'Y'
771 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0)
772 -( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0) )
773 )
774 ,1
775 ,NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0)
776 - ( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0) )
777 ,NULL
778 )
779 ,NVL2( xba.draft_beginning_balance_cr
780 ,xba.draft_beginning_balance_cr + NVL(xba.period_draft_balance_cr, 0)
781 ,xba.period_draft_balance_cr
782 )
783 ) --draft_beginning_balance_cr
784 ,NULL --period_draft_balance_dr
785 ,NULL --period_draft_balance_cr
786 ,'N' --initial_balance_flag
787 ,l_dest_first_period_flag --first_period_flag
788 ,SYSDATE --creation_date
789 ,l_user_id --created_by
790 ,SYSDATE --last_update_date
791 ,l_user_id --last_update_by
792 ,l_login_id --last_update_login
793 ,SYSDATE --program_update_date
794 ,l_prog_appl_id --program_application_id
795 ,l_prog_id --program_id
796 ,NVL(l_req_id, -1) --request_id
797 FROM xla_balance_statuses xbs
798 ,xla_control_balances xba
799 ,xla_control_balances xbanew
800 WHERE xbs.application_id = p_application_id
801 AND xbs.ledger_id = p_ledger_id
802 AND xbs.balance_source_code = 'C'
803 AND xbs.balance_status_code = p_balance_status_code_selected
804 AND xbs.effective_period_num = p_source_effective_period_num
805 AND xbs.request_id = NVL(l_req_id, -1)
806 AND xba.ledger_id = p_ledger_id
807 AND xba.application_id = p_application_id
808 AND xba.code_combination_id = xbs.code_combination_id
809 AND xba.period_name = l_source_period_name
810 AND xbanew.application_id (+)= p_application_id
811 AND xbanew.ledger_id (+)= p_ledger_id
812 AND xbanew.application_id (+)= xba.application_id
813 AND xbanew.code_combination_id (+)= xba.code_combination_id
814 AND xbanew.period_name (+)= l_dest_period_name
815 AND xbanew.party_id (+)= xba.party_id
816 AND xbanew.party_site_id (+)= xba.party_site_id
817 AND xbanew.ledger_id IS NULL
818 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
819
820 l_row_count := SQL%ROWCOUNT;
821
822 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
823 trace
824 (p_module => l_log_module
825 ,p_msg => l_row_count
826 || 'control balances created '
827 ,p_level => C_LEVEL_STATEMENT
828 );
829 END IF;
830
831 END IF;
832
833 IF NVL(p_balance_source_code, 'A') = 'A'
834 THEN
835 --lock xla_balance_statuses and wait if necessary
836 OPEN lc_lock_balance_statuses
837 ( cp_application_id => p_application_id
838 ,cp_ledger_id => p_ledger_id
839 ,cp_balance_status_code => p_balance_status_code_selected
840 ,cp_balance_source_code => 'A'
841 ,cp_effective_period_num => p_source_effective_period_num
842 ,cp_request_id => NVL(l_req_id, -1)
843 );
844 CLOSE lc_lock_balance_statuses;
845
846 INSERT INTO xla_ac_balances
847 ( application_id
848 ,ledger_id
849 ,code_combination_id
850 ,analytical_criterion_code
851 ,analytical_criterion_type_code
852 ,amb_context_code
853 ,ac1
854 ,ac2
855 ,ac3
856 ,ac4
857 ,ac5
858 ,period_name
859 ,period_year
860 ,beginning_balance_dr
861 ,beginning_balance_cr
862 ,period_balance_dr
863 ,period_balance_cr
864 ,initial_balance_flag
865 ,first_period_flag
866 ,creation_date
867 ,created_by
868 ,last_update_date
872 ,program_application_id
869 ,last_updated_by
870 ,last_update_login
871 ,program_update_date
873 ,program_id
874 ,request_id
875 )
876 SELECT xba.application_id
877 ,xba.ledger_id
878 ,xba.code_combination_id
879 ,xba.analytical_criterion_code
880 ,xba.analytical_criterion_type_code
881 ,xba.amb_context_code
882 ,xba.ac1
883 ,xba.ac2
884 ,xba.ac3
885 ,xba.ac4
886 ,xba.ac5
887 ,l_dest_period_name
888 ,l_dest_period_year
889 ,DECODE( l_dest_first_period_flag
890 ,'Y'
891 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
892 -(NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0))
893 )
894 ,1
895 ,NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
896 - (NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0))
897 ,NULL
898 )
899 ,NVL2( xba.beginning_balance_dr
900 ,xba.beginning_balance_dr + NVL(xba.period_balance_dr, 0)
901 ,xba.period_balance_dr
902 )
903 ) --beginning_balance_dr
904 ,DECODE( l_dest_first_period_flag
905 ,'Y'
906 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
907 -(NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0))
908 )
909 ,1
910 ,NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
911 - ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0))
912 ,NULL
913 )
914 ,NVL2( xba.beginning_balance_cr
915 ,xba.beginning_balance_cr + NVL(xba.period_balance_cr, 0)
916 ,xba.period_balance_cr
917 )
918 ) --beginning_balance_cr
919 ,NULL --period_balance_dr
920 ,NULL --period_balance_cr
921 ,'N' --initial_balance_flag
922 ,l_dest_first_period_flag
923 ,SYSDATE --creation_date
924 ,l_user_id --created_by
925 ,SYSDATE --last_update_date
926 ,l_user_id --last_update_by
927 ,l_login_id --last_update_login
928 ,SYSDATE --program_update_date
929 ,l_prog_appl_id --program_application_id
930 ,l_prog_id --program_id
931 ,NVL(l_req_id, -1) --request_id
932 FROM xla_balance_statuses xbs
933 ,xla_ac_balances xba
934 ,xla_ac_balances xbanew
935 ,xla_analytical_hdrs_b xbh
936 WHERE xbs.application_id = p_application_id
937 AND xbs.ledger_id = p_ledger_id
938 AND xbs.balance_source_code = 'A'
939 AND xbs.balance_status_code = p_balance_status_code_selected
940 AND xbs.effective_period_num = p_source_effective_period_num
941 AND xbs.request_id = NVL(l_req_id, -1)
942 AND xba.application_id = p_application_id
943 AND xba.ledger_id = p_ledger_id
944 AND xba.application_id = xbs.application_id
945 AND xba.code_combination_id = xbs.code_combination_id
946 AND xba.period_name = l_source_period_name
947 AND xbanew.application_id (+)= p_application_id
948 AND xbanew.ledger_id (+)= p_ledger_id
949 AND xbanew.application_id (+)= xba.application_id
950 AND xbanew.code_combination_id (+)= xba.code_combination_id
951 AND xbanew.period_name (+)= l_dest_period_name
952 AND xbanew.analytical_criterion_code (+)= xba.analytical_criterion_code
953 AND xbanew.analytical_criterion_type_code
954 (+)= xba.analytical_criterion_type_code
955 AND xbanew.amb_context_code (+)= xba.amb_context_code
956 AND xbanew.ac1 (+)= xba.ac1
957 AND xbanew.ac2 (+)= xba.ac2
958 AND xbanew.ac3 (+)= xba.ac3
959 AND xbanew.ac4 (+)= xba.ac4
960 AND xbanew.ac5 (+)= xba.ac5
961 AND xbanew.ledger_id IS NULL
962 AND xbh.analytical_criterion_code = xba.analytical_criterion_code
963 AND xbh.analytical_criterion_type_code = xba.analytical_criterion_type_code
964 AND xbh.amb_context_code = xba.amb_context_code
965 AND ( xba.period_year = l_dest_period_year
966 OR xbh.year_end_carry_forward_code = 'A'
967 OR ( xbh.year_end_carry_forward_code = 'B'
968 AND xbs.account_type IN ('A', 'L', 'O')
969 )
970 )
974 WHERE xba1.application_id = xba.application_id
971 -- Bug 7321087 Begin
972 AND NOT EXISTS( SELECT 1
973 FROM xla_ac_balances xba1
975 AND xba1.ledger_id = xba.ledger_id
976 AND xba1.code_combination_id = xba.code_combination_id
977 AND xba1.analytical_criterion_code = xba.analytical_criterion_code
978 AND xba1.analytical_criterion_type_code = xba.analytical_criterion_type_code
979 AND xba1.amb_context_code = xba.amb_context_code
980 AND NVL(xba1.ac1,C_DUMMY) = NVL(xba.ac1,C_DUMMY)
981 AND NVL(xba1.ac2,C_DUMMY) = NVL(xba.ac2,C_DUMMY)
982 AND NVL(xba1.ac3,C_DUMMY) = NVL(xba.ac3,C_DUMMY)
983 AND NVL(xba1.ac4,C_DUMMY) = NVL(xba.ac4,C_DUMMY)
984 AND NVL(xba1.ac5,C_DUMMY) = NVL(xba.ac5,C_DUMMY)
985 AND xba1.period_name = l_dest_period_name)
986 -- Bug 7321087 End
987 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
988
989 l_row_count := SQL%ROWCOUNT;
990 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
991 trace
992 (p_module => l_log_module
993 ,p_msg => l_row_count
994 || 'analytical balances created '
995 ,p_level => C_LEVEL_STATEMENT
996 );
997 END IF;
998 END IF;
999
1000 IF l_row_count < C_BATCH_COMMIT_SIZE
1001 THEN
1002 l_return_value := TRUE;
1003 COMMIT;
1004 EXIT;
1005 END IF;
1006
1007 COMMIT;
1008
1009 END LOOP; --until there are no more balances to create in this period
1010
1011 --Update the records in xla_balance_statuses.
1012 l_date := SYSDATE;
1013
1014 UPDATE xla_balance_statuses xbs
1015 SET xbs.balance_status_code = p_balance_status_code_not_sel
1016 ,xbs.effective_period_num = l_dest_effective_period_num
1017 ,last_update_date = l_date
1018 ,last_updated_by = l_user_id
1019 ,last_update_login = l_login_id
1020 ,program_update_date = l_date
1021 ,program_application_id = l_prog_appl_id
1022 ,program_id = l_prog_id
1023 ,request_id = NVL(l_req_id, -1)
1024 WHERE xbs.application_id = p_application_id
1025 AND xbs.ledger_id = p_ledger_id
1026 AND xbs.balance_source_code = NVL( p_balance_source_code
1027 ,xbs.balance_source_code
1028 )
1029 AND xbs.effective_period_num = p_source_effective_period_num
1030 AND xbs.balance_status_code = p_balance_status_code_selected
1031 AND xbs.request_id = NVL(l_req_id, -1);
1032
1033 l_row_count := SQL%ROWCOUNT;
1034
1035 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1036 trace
1037 (p_module => l_log_module
1038 ,p_msg => l_row_count ||
1039 ' xla_balance_statuses updated to '
1040 || p_balance_status_code_not_sel
1041 ,p_level => C_LEVEL_STATEMENT
1042 );
1043 END IF;
1044 END LOOP;
1045
1046 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1047 trace
1048 (p_module => l_log_module
1049 ,p_msg => 'END ' || l_log_module
1050 ,p_level => C_LEVEL_PROCEDURE);
1051 END IF;
1052
1053 RETURN l_return_value;
1054
1055 EXCEPTION
1056 WHEN xla_exceptions_pkg.application_exception
1057 THEN
1058 RAISE;
1059 WHEN OTHERS
1060 THEN
1061 xla_exceptions_pkg.raise_message
1062 (p_location => 'xla_balances_pkg.move_balances_forward_COMMIT');
1063 END move_balances_forward_COMMIT;
1064
1065
1066 FUNCTION check_create_period_balances
1067 ( p_application_id IN INTEGER
1068 ,p_ledger_id IN INTEGER
1069 ,p_balance_source_code IN VARCHAR2
1070 )
1071 RETURN BOOLEAN
1072 IS
1073 /*======================================================================+
1074 | |
1075 | Private Procedure |
1076 | |
1077 | Description |
1078 | ----------- |
1079 | |
1080 | |
1081 | |
1082 | ISSUES COMMITS |
1083 | |
1084 | Pseudo-code |
1088 +======================================================================*/
1085 | ----------- |
1086 | |
1087 | |
1089
1090 l_min_bal_effective_period_num INTEGER;
1091 l_latest_effective_period_num INTEGER;
1092 l_return_value BOOLEAN;
1093 l_user_id INTEGER;
1094 l_login_id INTEGER;
1095 l_date DATE;
1096 l_prog_appl_id INTEGER;
1097 l_prog_id INTEGER;
1098 l_req_id INTEGER;
1099 l_log_module VARCHAR2 (2000);
1100
1101 BEGIN
1102
1103 l_user_id := xla_environment_pkg.g_usr_id;
1104 l_login_id := xla_environment_pkg.g_login_id;
1105 l_date := SYSDATE;
1106 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
1107 l_prog_id := xla_environment_pkg.g_prog_id;
1108 l_req_id := xla_environment_pkg.g_req_id;
1109
1110 IF g_log_enabled THEN
1111 l_log_module := C_DEFAULT_MODULE||'.check_create_period_balances';
1112 END IF;
1113 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1114 trace
1115 (p_module => l_log_module
1116 ,p_msg => 'BEGIN ' || l_log_module
1117 ,p_level => C_LEVEL_PROCEDURE);
1118 END IF;
1119
1120 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1121 trace
1122 (p_module => l_log_module
1123 ,p_msg => 'p_application_id :'
1124 || p_application_id
1125 ,p_level => C_LEVEL_STATEMENT
1126 );
1127 trace
1128 (p_module => l_log_module
1129 ,p_msg => 'p_ledger_id :'
1130 || p_ledger_id
1131 ,p_level => C_LEVEL_STATEMENT
1132 );
1133 trace
1134 (p_module => l_log_module
1135 ,p_msg => 'p_balance_source_code :'
1136 || p_balance_source_code
1137 ,p_level => C_LEVEL_STATEMENT
1138 );
1139 END IF;
1140
1141 SELECT MIN(xbs.effective_period_num)
1142 INTO l_min_bal_effective_period_num
1143 FROM xla_balance_statuses xbs
1144 WHERE xbs.application_id = p_application_id
1145 AND xbs.ledger_id = p_ledger_id
1146 AND xbs.balance_source_code = p_balance_source_code;
1147
1148 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1149 trace
1150 (p_module => l_log_module
1151 ,p_msg => 'Lowest balance status eff period num: ' ||
1152 l_min_bal_effective_period_num
1153 ,p_level => C_LEVEL_STATEMENT
1154 );
1155 END IF;
1156
1157 SELECT MAX(gps.effective_period_num)
1158 INTO l_latest_effective_period_num
1159 FROM gl_period_statuses gps
1160 WHERE gps.ledger_id = p_ledger_id
1161 AND gps.application_id = 101
1162 AND gps.closing_status IN ('O', 'C', 'P')
1163 AND gps.adjustment_period_flag = 'N';
1164
1165 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1166 trace
1167 (p_module => l_log_module
1168 ,p_msg => 'l_latest_effective_period_num: '
1169 || l_latest_effective_period_num
1170 ,p_level => C_LEVEL_STATEMENT
1171 );
1172 END IF;
1173
1174 l_return_value :=TRUE;
1175
1176 FOR i IN ( SELECT gps.effective_period_num
1177 FROM gl_period_statuses gps
1178 WHERE gps.ledger_id = p_ledger_id
1179 AND gps.application_id = 101
1180 AND gps.closing_status IN ('O', 'C', 'P')
1181 AND gps.adjustment_period_flag = 'N'
1182 AND gps.effective_period_num >= l_min_bal_effective_period_num
1183 AND gps.effective_period_num < l_latest_effective_period_num
1184 ORDER BY gps.effective_period_num
1185 )
1186 LOOP
1187 IF NOT move_balances_forward_COMMIT
1188 ( p_application_id => p_application_id
1189 ,p_ledger_id => p_ledger_id
1190 ,p_balance_source_code => p_balance_source_code
1191 ,p_source_effective_period_num => i.effective_period_num
1192 ,p_balance_status_code_selected => 'O'
1193 ,p_balance_status_code_not_sel => 'A'
1194 )
1195 THEN
1196 l_return_value := FALSE;
1197 EXIT;
1198 END IF;
1199
1200 END LOOP;
1201
1202 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1203 trace
1204 (p_module => l_log_module
1205 ,p_msg => 'END ' || l_log_module
1206 ,p_level => C_LEVEL_PROCEDURE);
1207 END IF;
1208
1209 RETURN l_return_value;
1210
1211 EXCEPTION
1212 WHEN xla_exceptions_pkg.application_exception THEN
1213 RAISE;
1214 WHEN OTHERS THEN
1218
1215 xla_exceptions_pkg.raise_message
1216 (p_location => 'xla_balances_pkg.check_create_period_balances');
1217 END check_create_period_balances;
1219
1220 FUNCTION AUT_check_create_period_bals
1221 ( p_application_id IN INTEGER
1222 ,p_ledger_id IN INTEGER
1223 ,p_balance_source_code IN VARCHAR2
1224 )
1225 RETURN BOOLEAN
1226 IS
1227 PRAGMA AUTONOMOUS_TRANSACTION;
1228 /*======================================================================+
1229 | |
1230 | Private Procedure |
1231 | |
1232 | Description |
1233 | ----------- |
1234 | |
1235 | |
1236 | |
1237 | ISSUES COMMITS |
1238 | |
1239 | Pseudo-code |
1240 | ----------- |
1241 | |
1242 | |
1243 +======================================================================*/
1244 l_return_value BOOLEAN;
1245 l_log_module VARCHAR2 (2000);
1246 BEGIN
1247 IF g_log_enabled THEN
1248 l_log_module := C_DEFAULT_MODULE||'.AUT_check_create_period_bals';
1249 END IF;
1250 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1251 trace
1252 (p_module => l_log_module
1253 ,p_msg => 'BEGIN ' || l_log_module
1254 ,p_level => C_LEVEL_PROCEDURE);
1255 END IF;
1256
1257 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1258 trace
1259 (p_module => l_log_module
1260 ,p_msg => 'p_application_id :'
1261 || p_application_id
1262 ,p_level => C_LEVEL_STATEMENT
1263 );
1264 trace
1265 (p_module => l_log_module
1266 ,p_msg => 'p_ledger_id :'
1267 || p_ledger_id
1268 ,p_level => C_LEVEL_STATEMENT
1269 );
1270 trace
1271 (p_module => l_log_module
1272 ,p_msg => 'p_balance_source_code :'
1273 || p_balance_source_code
1274 ,p_level => C_LEVEL_STATEMENT
1275 );
1276 END IF;
1277
1278 l_return_value :=
1279 check_create_period_balances
1280 ( p_application_id => p_application_id
1281 ,p_ledger_id => p_ledger_id
1282 ,p_balance_source_code => p_balance_source_code
1283 );
1284
1285 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1286 trace
1287 (p_module => l_log_module
1288 ,p_msg => 'END ' || l_log_module
1289 ,p_level => C_LEVEL_PROCEDURE);
1290 END IF;
1291
1292 RETURN l_return_value;
1293
1294 EXCEPTION
1295 WHEN xla_exceptions_pkg.application_exception THEN
1296 RAISE;
1297 WHEN OTHERS THEN
1298 xla_exceptions_pkg.raise_message
1299 (p_location => 'xla_balances_pkg.AUT_check_create_period_bals');
1300 END AUT_check_create_period_bals;
1301
1302 FUNCTION lock_create_balance_statuses
1303
1304 RETURN BOOLEAN
1305 IS
1306
1307 /*======================================================================+
1308 | |
1309 | Private Procedure |
1310 | |
1311 | Description |
1312 | ----------- |
1313 | |
1314 | |
1315 | Pseudo-code |
1316 | ----------- |
1317 | |
1318 | |
1319 | Open issues |
1320 | ----------- |
1321 | |
1322 | |
1323 +======================================================================*/
1324
1325
1326 CURSOR c_lock_control_statuses
1327 IS
1328 SELECT 1
1329 FROM xla_bal_ctrl_lines_gt xbct
1330 ,xla_balance_statuses xbs
1331 WHERE xbs.application_id = xbct.application_id
1332 AND xbs.ledger_id = xbct.ledger_id
1333 AND xbs.code_combination_id = xbct.code_combination_id
1334 AND xbs.balance_source_code = 'C'
1338 IS
1335 FOR UPDATE OF xbs.ledger_id NOWAIT;
1336
1337 CURSOR c_lock_analytical_statuses
1339 SELECT 1
1340 FROM xla_bal_anacri_lines_gt xblt
1341 ,xla_balance_statuses xbs
1342 WHERE xbs.application_id = xblt.application_id
1343 AND xbs.ledger_id = xblt.ledger_id
1344 AND xbs.code_combination_id = xblt.code_combination_id
1345 AND xbs.balance_source_code = 'A'
1346 FOR UPDATE OF xbs.ledger_id NOWAIT;
1347
1348 l_user_id INTEGER;
1349 l_login_id INTEGER;
1350 l_date DATE;
1351 l_prog_appl_id INTEGER;
1352 l_prog_id INTEGER;
1353 l_req_id INTEGER;
1354
1355 l_balance_status_code VARCHAR2(1);
1356 l_latest_open_eff_period_num NUMBER(15);
1357
1358 l_id_flex_code VARCHAR2 ( 4);
1359 l_chart_of_accounts_id NUMBER (15);
1360
1361 l_account_segment_column VARCHAR2 (30);
1362 l_balancing_segment_column VARCHAR2 (30);
1363
1364 l_row_count NUMBER;
1365
1366 l_return_status BOOLEAN;
1367 l_log_module VARCHAR2 (2000);
1368
1369 BEGIN
1370
1371 l_user_id := xla_environment_pkg.g_usr_id;
1372 l_login_id := xla_environment_pkg.g_login_id;
1373 l_date := SYSDATE;
1374 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
1375 l_prog_id := xla_environment_pkg.g_prog_id;
1376 l_req_id := xla_environment_pkg.g_req_id;
1377
1378 l_id_flex_code := 'GL#';
1379
1380 IF g_log_enabled THEN
1381 l_log_module := C_DEFAULT_MODULE||'.lock_create_balance_statuses';
1382 END IF;
1383 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1384 trace
1385 (p_module => l_log_module
1386 ,p_msg => 'BEGIN ' || l_log_module
1387 ,p_level => C_LEVEL_PROCEDURE);
1388 END IF;
1389
1390
1391 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1392 trace
1393 (p_module => l_log_module
1394 ,p_msg => 'Start inserting in xla_balance_statuses'
1395 ,p_level => C_LEVEL_STATEMENT
1396 );
1397 END IF;
1398
1399 --Create the missing records in xla_balance_statuses, if any.
1400 INSERT INTO xla_bal_statuses_gt
1401 ( application_id
1402 ,ledger_id
1403 ,code_combination_id
1404 ,balance_source_code
1405 ,balance_status_code
1406 ,effective_period_num
1407 ,natural_account_segment
1408 ,balancing_segment
1409 ,account_type
1410 )
1411 (
1412 SELECT DISTINCT
1413 xbct.application_id
1414 ,xbct.ledger_id
1415 ,xbct.code_combination_id
1416 ,'C'
1417 ,'A'
1418 , -1
1419 ,'TO BE DETERMINED'
1420 ,'TO BE DETERMINED'
1421 ,'?'
1422 FROM xla_bal_ctrl_lines_gt xbct
1423 ,xla_balance_statuses xbs
1424 WHERE xbs.application_id (+)= xbct.application_id
1425 AND xbs.ledger_id (+)= xbct.ledger_id
1426 AND xbs.code_combination_id (+)= xbct.code_combination_id
1427 AND xbs.balance_source_code (+)= 'C'
1428 AND xbs.ledger_id IS NULL
1429
1430 UNION ALL
1431
1432 SELECT DISTINCT
1433 xbat.application_id
1434 ,xbat.ledger_id
1435 ,xbat.code_combination_id
1436 ,'A'
1437 ,'A'
1438 , -1
1439 ,'TO BE DETERMINED'
1440 ,'TO BE DETERMINED'
1441 ,'?'
1442 FROM xla_bal_anacri_lines_gt xbat
1443 ,xla_balance_statuses xbs
1444 WHERE xbs.application_id (+)= xbat.application_id
1445 AND xbs.ledger_id (+)= xbat.ledger_id
1446 AND xbs.code_combination_id (+)= xbat.code_combination_id
1447 AND xbs.balance_source_code (+)= 'A'
1448 AND xbs.ledger_id IS NULL
1449
1450 );
1451
1452 l_row_count := SQL%ROWCOUNT;
1453
1454 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1455 trace
1456 (p_module => l_log_module
1457 ,p_msg => l_row_count ||
1458 ' records inserted in xla_bal_statuses_gt'
1459 ,p_level => C_LEVEL_STATEMENT
1460 );
1461 END IF;
1462
1463 FOR i IN (
1464 SELECT DISTINCT
1465 ledger_id
1466 FROM xla_bal_statuses_gt xbs
1467 )
1468 LOOP
1469
1470 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1471 trace
1472 (p_module => l_log_module
1473 ,p_msg => 'ledger_id : ' || i.ledger_id
1474 ,p_level => C_LEVEL_STATEMENT
1475 );
1476 END IF;
1477
1478 SELECT gle.chart_of_accounts_id
1479 ,gle.bal_seg_column_name
1480 INTO l_chart_of_accounts_id
1481 ,l_balancing_segment_column
1485 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1482 FROM gl_ledgers gle
1483 WHERE gle.ledger_id = i.ledger_id;
1484
1486 trace
1487 (p_module => l_log_module
1488 ,p_msg => 'l_chart_of_accounts_id : ' || l_chart_of_accounts_id
1489 ,p_level => C_LEVEL_STATEMENT
1490 );
1491 trace
1492 (p_module => l_log_module
1493 ,p_msg => 'l_balancing_segment_column: ' || l_balancing_segment_column
1494 ,p_level => C_LEVEL_STATEMENT
1495 );
1496 END IF;
1497
1498 SELECT MAX(gps2.effective_period_num)
1499 INTO l_latest_open_eff_period_num
1500 FROM gl_period_statuses gps2
1501 WHERE gps2.ledger_id = i.ledger_id
1502 AND gps2.application_id = 101
1503 AND gps2.closing_status IN ('O', 'C', 'P')
1504 AND gps2.adjustment_period_flag = 'N';
1505
1506 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1507 trace
1508 (p_module => l_log_module
1509 ,p_msg => 'l_latest_open_eff_period_num : '
1510 || l_latest_open_eff_period_num
1511 ,p_level => C_LEVEL_STATEMENT
1512 );
1513 END IF;
1514
1515 IF FND_FLEX_APIS.get_segment_column( 101
1516 ,l_id_flex_code
1517 ,l_chart_of_accounts_id
1518 ,'GL_ACCOUNT'
1519 ,l_account_segment_column
1520 )
1521
1522 THEN
1523 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1524 trace
1525 (p_module => l_log_module
1526 ,p_msg => 'GL_ACCOUNT segment column name: '
1527 || l_account_segment_column
1528 ,p_level => C_LEVEL_STATEMENT
1529 );
1530 END IF;
1531 ELSE
1532 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
1533 trace
1534 (p_module => l_log_module
1535 ,p_msg => 'EXCEPTION: ' ||
1536 'Unable to retrieve segment names for ledger_id '
1537 || i.ledger_id
1538 ,p_level => C_LEVEL_EXCEPTION
1539 );
1540 END IF;
1541 xla_exceptions_pkg.raise_message
1542 (p_appli_s_name => 'XLA'
1543 ,p_msg_name => 'XLA_COMMON_ERROR'
1544 ,p_token_1 => 'LOCATION'
1545 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
1546 ,p_token_2 => 'ERROR'
1547 ,p_value_2 => 'EXCEPTION: ' ||
1548 'Unable to retrieve segment names for ledger_id '
1549 || i.ledger_id);
1550 END IF;
1551
1552 EXECUTE IMMEDIATE
1553 '
1554 UPDATE xla_bal_statuses_gt xbst
1555 SET xbst.effective_period_num = ' ||l_latest_open_eff_period_num || '
1556 ,(
1557 xbst.natural_account_segment
1558 ,xbst.balancing_segment
1559 ,xbst.account_type
1560 )
1561 =
1562 ( SELECT ' || l_balancing_segment_column || '
1563 ,' || l_account_segment_column || '
1564 ,account_type
1565 FROM gl_code_combinations gcc
1566 WHERE gcc.code_combination_id = xbst.code_combination_id
1567 )
1568 WHERE xbst.ledger_id = ' || i.ledger_id;
1569
1570 l_row_count := SQL%ROWCOUNT;
1571
1572 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1573 trace
1574 (p_module => l_log_module
1575 ,p_msg => l_row_count ||
1576 ' records updated in xla_bal_statuses_gt'
1577 ,p_level => C_LEVEL_STATEMENT
1578 );
1579 END IF;
1580
1581 END LOOP;
1582
1583 INSERT INTO xla_balance_statuses
1584 ( application_id
1585 ,ledger_id
1586 ,code_combination_id
1587 ,balance_source_code
1588 ,balance_status_code
1589 ,effective_period_num
1590 ,natural_account_segment
1591 ,balancing_segment
1592 ,account_type
1593 ,creation_date
1594 ,created_by
1595 ,last_update_date
1596 ,last_updated_by
1597 ,last_update_login
1598 ,program_update_date
1599 ,program_application_id
1600 ,program_id
1601 ,request_id
1602 )
1603 SELECT application_id
1604 ,ledger_id
1605 ,code_combination_id
1606 ,balance_source_code
1607 ,balance_status_code
1608 ,effective_period_num
1609 ,natural_account_segment
1610 ,balancing_segment
1611 ,account_type
1612 ,l_date
1613 ,l_user_id
1614 ,l_date
1615 ,l_user_id
1616 ,l_login_id
1617 ,l_date
1618 ,l_prog_appl_id
1622
1619 ,l_prog_id
1620 ,NVL(l_req_id, -1)
1621 FROM xla_bal_statuses_gt xbst;
1623 l_row_count := SQL%ROWCOUNT;
1624
1625 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1626 trace
1627 (p_module => l_log_module
1628 ,p_msg => l_row_count ||
1629 ' records inserted in xla_balance_statuses'
1630 ,p_level => C_LEVEL_STATEMENT
1631 );
1632 END IF;
1633
1634 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1635 trace
1636 (p_module => l_log_module
1637 ,p_msg => ' Start locking xla_balance_statuses'
1638 ,p_level => C_LEVEL_STATEMENT
1639 );
1640 END IF;
1641
1642 --Lock the records in xla_balance_statuses.
1643
1644 OPEN c_lock_control_statuses;
1645 CLOSE c_lock_control_statuses;
1646 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1647 trace
1648 (p_module => l_log_module
1649 ,p_msg => 'Records in xla_balance_statuses (control) have been locked.'
1650 ,p_level => C_LEVEL_STATEMENT
1651 );
1652 END IF;
1653
1654 OPEN c_lock_analytical_statuses;
1655 CLOSE c_lock_analytical_statuses;
1656 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1657 trace
1658 (p_module => l_log_module
1659 ,p_msg => 'Records in xla_balance_statuses (anacri) have been locked.'
1660 ,p_level => C_LEVEL_STATEMENT
1661 );
1662 END IF;
1663
1664 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1665 trace
1666 (p_module => l_log_module
1667 ,p_msg => 'END ' || l_log_module
1668 ,p_level => C_LEVEL_PROCEDURE);
1669 END IF;
1670
1671 RETURN TRUE;
1672
1673 EXCEPTION
1674 WHEN le_resource_busy
1675 THEN
1676 IF (C_LEVEL_ERROR >= g_log_level) THEN
1677 trace
1678 (p_module => l_log_module
1679 ,p_msg => 'Cannot lock xla_balance_statuses records'
1680 ,p_level => C_LEVEL_ERROR
1681 );
1682 END IF;
1683 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1684 trace
1685 (p_module => l_log_module
1686 ,p_msg => 'END ' || l_log_module
1687 ,p_level => C_LEVEL_PROCEDURE);
1688 END IF;
1689 RETURN FALSE;
1690 WHEN xla_exceptions_pkg.application_exception THEN
1691 RAISE;
1692 WHEN OTHERS THEN
1693 xla_exceptions_pkg.raise_message
1694 (p_location => 'xla_balances_pkg.lock_create_balance_statuses');
1695 END lock_create_balance_statuses;
1696
1697 FUNCTION calculate_control_balances
1698 ( p_application_id IN INTEGER
1699 ,p_ledger_id IN INTEGER
1700 ,p_effective_period_num IN INTEGER
1701 ,p_operation_code IN VARCHAR2 --'F' Finalize
1702 --'A' Add
1703 --'R' Remove
1704 ) RETURN BOOLEAN
1705 IS
1706 /*======================================================================+
1707 | |
1708 | Private Function |
1709 | |
1710 | Description |
1711 | ----------- |
1712 | |
1713 | |
1714 | |
1715 | |
1716 | Pseudo-code |
1717 | ----------- |
1718 | |
1719 | |
1720 | |
1721 | |
1722 | |
1723 | Open issues |
1724 | ----------- |
1725 | |
1726 +======================================================================*/
1727
1728 CURSOR lc_control_contributions
1729 IS
1730 SELECT DISTINCT ctr.application_id
1731 ,ctr.ledger_id
1732 ,NVL(xba.period_year, ctr.period_year) contributed_period_year
1733 ,ctr.period_name
1734 ,ctr.period_year
1735 ,ctr.effective_period_num
1736 ,ctr.code_combination_id
1737 ,ctr.party_type_code
1738 ,ctr.party_id
1739 ,ctr.party_site_id
1740 ,ctr.contribution_dr
1741 ,ctr.contribution_cr
1742 ,ctr.contribution_draft_dr
1743 ,ctr.contribution_draft_cr
1744 ,NVL2( contribution_dr
1745 ,NVL2( contribution_cr
1746 ,DECODE( SIGN(contribution_dr - contribution_cr)
1747 ,1
1748 ,contribution_dr - contribution_cr
1749 ,0
1750 )
1754 ,0
1751 ,DECODE( SIGN(contribution_dr)
1752 ,1
1753 ,contribution_dr
1755 )
1756 )
1757 ,NVL2( contribution_cr
1758 ,DECODE( SIGN(contribution_cr)
1759 ,-1
1760 ,-contribution_cr
1761 ,NULL
1762 )
1763 ,NULL
1764 )
1765 ) net_contribution_dr
1766 ,NVL2( contribution_cr
1767 ,NVL2( contribution_dr
1768 ,DECODE( SIGN(contribution_cr - contribution_dr)
1769 ,1
1770 ,contribution_cr - contribution_dr
1771 ,0
1772 )
1773 ,DECODE( SIGN(contribution_cr)
1774 ,1
1775 ,contribution_cr
1776 ,0
1777 )
1778 )
1779 ,NVL2( contribution_dr
1780 ,DECODE( SIGN(contribution_dr)
1781 ,-1
1782 ,-contribution_dr
1783 ,NULL
1784 )
1785 ,NULL
1786 )
1787 ) net_contribution_cr
1788 ,NVL2( contribution_draft_dr
1789 ,NVL2( contribution_draft_cr
1790 ,DECODE( SIGN(contribution_draft_dr - contribution_draft_cr)
1791 ,1
1792 ,contribution_draft_dr - contribution_draft_cr
1793 ,0
1794 )
1795 ,DECODE( SIGN(contribution_draft_dr)
1796 ,1
1797 ,contribution_draft_dr
1798 ,0
1799 )
1800 )
1801 ,NVL2( contribution_draft_cr
1802 ,DECODE( SIGN(contribution_draft_cr)
1803 ,-1
1804 ,-contribution_draft_cr
1805 ,NULL
1806 )
1807 ,NULL
1808 )
1809 ) net_contribution_draft_dr
1810 ,NVL2( contribution_draft_cr
1811 ,NVL2( contribution_draft_dr
1812 ,DECODE( SIGN(contribution_draft_cr - contribution_draft_dr)
1813 ,1
1814 ,contribution_draft_cr - contribution_draft_dr
1815 ,0
1816 )
1817 ,DECODE( SIGN(contribution_draft_cr)
1818 ,1
1819 ,contribution_draft_cr
1820 ,0
1821 )
1822 )
1823 ,NVL2( contribution_draft_dr
1824 ,DECODE( SIGN(contribution_draft_dr)
1825 ,-1
1826 ,-contribution_draft_dr
1827 ,NULL
1828 )
1829 ,NULL
1830 )
1831 ) net_contribution_draft_cr
1832 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(ctr.contribution_dr, 0)
1833 -NVL(xba.beginning_balance_cr,0) - NVL(ctr.contribution_cr, 0)
1834 )
1835 ,1
1836 , NVL(ctr.contribution_dr, 0) - NVL(ctr.contribution_cr, 0)
1837 - NVL(xba.beginning_balance_cr, 0)
1838 ,- NVL(xba.beginning_balance_dr, 0)
1839 ) change_balance_dr
1840 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(ctr.contribution_cr , 0)
1841 -NVL(xba.beginning_balance_dr, 0) - NVL(ctr.contribution_dr, 0)
1842 )
1843 ,1
1844 , NVL(ctr.contribution_cr, 0) - NVL(ctr.contribution_dr, 0)
1845 - NVL(xba.beginning_balance_dr, 0)
1846 ,- NVL(xba.beginning_balance_cr, 0)
1847 ) change_balance_cr
1848 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_dr, 0)
1849 + NVL(ctr.contribution_draft_dr, 0)
1850 - NVL(xba.draft_beginning_balance_cr, 0)
1851 - NVL(ctr.contribution_draft_cr, 0)
1852 )
1853 ,1
1854 ,NVL(ctr.contribution_draft_dr, 0) - NVL(ctr.contribution_draft_cr, 0)
1855 - NVL(xba.draft_beginning_balance_cr, 0)
1856 ,-NVL(xba.draft_beginning_balance_dr, 0)
1857 ) change_draft_balance_dr
1858 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_cr, 0)
1859 + NVL(ctr.contribution_draft_cr, 0)
1860 - NVL(xba.draft_beginning_balance_dr, 0)
1861 - NVL(ctr.contribution_draft_dr, 0)
1862 )
1863 ,1
1864 ,NVL(ctr.contribution_draft_cr, 0) - NVL(ctr.contribution_draft_dr, 0)
1865 - NVL(xba.draft_beginning_balance_dr, 0)
1866 ,-NVL(xba.draft_beginning_balance_cr, 0)
1870 ,xla_control_balances xba
1867 ) change_draft_balance_cr
1868 ,ctr.balance_status_eff_per_num
1869 FROM xla_bal_ctrl_ctrbs_gt ctr
1871 WHERE ctr.application_id = p_application_id
1872 AND ctr.ledger_id = p_ledger_id
1873 AND ctr.effective_period_num = p_effective_period_num
1874 AND xba.application_id (+)= ctr.application_id
1875 AND xba.ledger_id (+)= ctr.ledger_id
1876 AND xba.code_combination_id (+)= ctr.code_combination_id
1877 AND xba.party_type_code (+)= ctr.party_type_code
1878 AND xba.party_id (+)= ctr.party_id
1879 AND xba.party_site_id (+)= ctr.party_site_id
1880 AND xba.first_period_flag (+)= 'Y'
1881 AND xba.period_year (+)>= ctr.period_year;
1882
1883 TYPE lt_table_varchar2_1 IS TABLE OF VARCHAR2(1);
1884 TYPE lt_table_varchar2_15 IS TABLE OF VARCHAR2(15);
1885 TYPE lt_table_varchar2_25 IS TABLE OF VARCHAR2(25);
1886 TYPE lt_table_integer IS TABLE OF INTEGER;
1887 TYPE lt_table_number IS TABLE OF NUMBER;
1888 TYPE lt_table_number_15 IS TABLE OF NUMBER(15);
1889
1890 la_application_id lt_table_number;
1891 la_ledger_id lt_table_number_15;
1892 la_party_type_code lt_table_varchar2_1;
1893 la_contributed_period_year lt_table_varchar2_15;
1894 la_contribution_period_name lt_table_varchar2_15;
1895 la_contribution_period_year lt_table_number_15;
1896 la_contribution_eff_per_num lt_table_number_15;
1897 la_code_combination_id lt_table_integer;
1898 la_party_id lt_table_integer;
1899 la_party_site_id lt_table_integer;
1900 la_balance_stat_eff_per_num lt_table_integer;
1901 la_contribution_dr lt_table_number;
1902 la_contribution_cr lt_table_number;
1903 la_contribution_draft_dr lt_table_number;
1904 la_contribution_draft_cr lt_table_number;
1905 la_net_contribution_dr lt_table_number;
1906 la_net_contribution_cr lt_table_number;
1907 la_net_contribution_draft_dr lt_table_number;
1908 la_net_contribution_draft_cr lt_table_number;
1909 la_change_balance_dr lt_table_number;
1910 la_change_balance_cr lt_table_number;
1911 la_change_draft_balance_dr lt_table_number;
1912 la_change_draft_balance_cr lt_table_number;
1913 l_begin_bal_dr NUMBER;
1914 l_begin_bal_cr NUMBER;
1915
1916 l_row_count NUMBER;
1917
1918 l_log_module VARCHAR2 (2000);
1919
1920 BEGIN
1921 IF g_log_enabled THEN
1922 l_log_module := C_DEFAULT_MODULE||'.calculate_control_balances';
1923 END IF;
1924 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
1925 trace
1926 (p_module => l_log_module
1927 ,p_msg => 'BEGIN ' || l_log_module
1928 ,p_level => C_LEVEL_PROCEDURE);
1929 END IF;
1930
1931 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1932 trace
1933 (p_module => l_log_module
1934 ,p_msg => 'p_application_id :' || p_application_id
1935 ,p_level => C_LEVEL_STATEMENT
1936 );
1937 trace
1938 (p_module => l_log_module
1939 ,p_msg => 'p_ledger_id :' || p_ledger_id
1940 ,p_level => C_LEVEL_STATEMENT
1941 );
1942 trace
1943 (p_module => l_log_module
1944 ,p_msg => 'p_effective_period_num :' || p_effective_period_num
1945 ,p_level => C_LEVEL_STATEMENT
1946 );
1947 trace
1948 (p_module => l_log_module
1949 ,p_msg => 'p_operation_code :' || p_operation_code
1950 ,p_level => C_LEVEL_STATEMENT
1951 );
1952 END IF;
1953
1954 OPEN lc_control_contributions;
1955
1956 LOOP --contributions are collected in chunks
1957 FETCH lc_control_contributions
1958 BULK COLLECT
1959 INTO la_application_id
1960 ,la_ledger_id
1961 ,la_contributed_period_year
1962 ,la_contribution_period_name
1963 ,la_contribution_period_year
1964 ,la_contribution_eff_per_num
1965 ,la_code_combination_id
1966 ,la_party_type_code
1967 ,la_party_id
1968 ,la_party_site_id
1969 ,la_contribution_dr
1970 ,la_contribution_cr
1971 ,la_contribution_draft_dr
1972 ,la_contribution_draft_cr
1973 ,la_net_contribution_dr
1974 ,la_net_contribution_cr
1975 ,la_net_contribution_draft_dr
1976 ,la_net_contribution_draft_cr
1977 ,la_change_balance_dr
1978 ,la_change_balance_cr
1979 ,la_change_draft_balance_dr
1980 ,la_change_draft_balance_cr
1981 ,la_balance_stat_eff_per_num
1982 LIMIT C_BULK_LIMIT;
1983
1984 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
1985 trace
1986 (p_module => l_log_module
1987 ,p_msg => 'Processing ' || la_code_combination_id.COUNT
1988 || ' contributions'
1989 ,p_level => C_LEVEL_STATEMENT
1990 );
1991 END IF;
1995 EXIT;
1992
1993 IF la_code_combination_id.COUNT = 0
1994 THEN
1996 END IF;
1997
1998 /*
1999 FOR i IN 1..la_code_combination_id.LAST
2000 LOOP
2001 trace(l_log_module,'CONTRIBUTION :'
2002 || i ,C_LEVEL_STATEMENT);
2003 trace(l_log_module,'contributed year :'
2004 || la_contributed_period_year(i) ,C_LEVEL_STATEMENT);
2005 trace(l_log_module,'ccid :'
2006 || la_code_combination_id(i),C_LEVEL_STATEMENT);
2007 trace(l_log_module,'Party info :'
2008 || la_party_type_code(i) || ','
2009 || la_party_id(i) || ','
2010 || la_party_site_id(i) ,C_LEVEL_STATEMENT);
2011 trace(l_log_module,'Contribution :'
2012 || la_contribution_dr(i) || ','
2013 || la_contribution_cr(i) || ','
2014 || la_contribution_draft_dr(i) || ','
2015 || la_contribution_draft_cr(i) ,C_LEVEL_STATEMENT);
2016 trace(l_log_module,'Net Contribution :'
2017 || la_net_contribution_dr(i) || ','
2018 || la_net_contribution_cr(i) || ','
2019 || la_net_contribution_draft_dr(i) || ','
2020 || la_net_contribution_draft_cr(i) ,C_LEVEL_STATEMENT);
2021 trace(l_log_module,'Begin balance variation :'
2022 || la_change_balance_dr(i) || ','
2023 || la_change_balance_cr(i) || ','
2024 || la_change_draft_balance_dr(i) || ','
2025 || la_change_draft_balance_cr(i),C_LEVEL_STATEMENT);
2026 trace(l_log_module,'Balance stat eff per num :'
2027 || la_balance_stat_eff_per_num(i), 1);
2028 END LOOP;
2029 */
2030
2031 g_date := SYSDATE;
2032
2033 --Update balances same year
2034 FORALL i IN 1..la_code_combination_id.LAST
2035 UPDATE xla_control_balances xba
2036 SET xba.beginning_balance_dr =
2037 DECODE( xba.period_name
2038 ,la_contribution_period_name (i)
2039 ,xba.beginning_balance_dr
2040 ,NVL2( la_contribution_dr (i)
2041 ,NVL(xba.beginning_balance_dr, 0) + la_contribution_dr (i)
2042 ,xba.beginning_balance_dr
2043 )
2044 )
2045 ,xba.beginning_balance_cr =
2046 DECODE( xba.period_name
2047 ,la_contribution_period_name (i)
2048 ,xba.beginning_balance_cr
2049 ,NVL2( la_contribution_cr (i)
2050 ,NVL(xba.beginning_balance_cr, 0) + la_contribution_cr (i)
2051 ,xba.beginning_balance_cr
2052 )
2053 )
2054 ,xba.period_balance_dr =
2055 DECODE( xba.period_name
2056 ,la_contribution_period_name (i)
2057 ,NVL2( la_contribution_dr (i)
2058 ,NVL(xba.period_balance_dr, 0) + la_contribution_dr (i)
2059 ,xba.period_balance_dr
2060 )
2061 ,xba.period_balance_dr
2062 )
2063 ,xba.period_balance_cr =
2064 DECODE( xba.period_name
2065 ,la_contribution_period_name (i)
2066 ,NVL2( la_contribution_cr (i)
2067 ,NVL(xba.period_balance_cr, 0) + la_contribution_cr (i)
2068 ,xba.period_balance_cr
2069 )
2070 ,xba.period_balance_cr
2071 )
2072 ,xba.draft_beginning_balance_dr =
2073 DECODE( xba.period_name
2074 ,la_contribution_period_name (i)
2075 ,xba.draft_beginning_balance_dr
2076 ,NVL2( la_contribution_draft_dr (i)
2077 ,NVL(xba.draft_beginning_balance_dr, 0) + la_contribution_draft_dr (i)
2078 ,xba.draft_beginning_balance_dr
2079 )
2080 )
2081 ,xba.draft_beginning_balance_cr =
2082 DECODE( xba.period_name
2083 ,la_contribution_period_name (i)
2084 ,xba.draft_beginning_balance_cr
2085 ,NVL2( la_contribution_draft_cr (i)
2086 ,NVL(xba.draft_beginning_balance_cr, 0) + la_contribution_draft_cr (i)
2087 ,xba.draft_beginning_balance_cr
2091 DECODE( xba.period_name
2088 )
2089 )
2090 ,xba.period_draft_balance_dr =
2092 ,la_contribution_period_name (i)
2093 ,NVL2( la_contribution_draft_dr (i)
2094 ,NVL(xba.period_draft_balance_dr, 0) + la_contribution_draft_dr (i)
2095 ,xba.period_draft_balance_dr
2096 )
2097 ,xba.period_draft_balance_dr
2098 )
2099 ,xba.period_draft_balance_cr =
2100 DECODE( xba.period_name
2101 ,la_contribution_period_name (i)
2102 ,NVL2( la_contribution_draft_cr (i)
2103 ,NVL(xba.period_draft_balance_cr, 0) + la_contribution_draft_cr (i)
2104 ,xba.period_draft_balance_cr
2105 )
2106 ,xba.period_draft_balance_cr
2107 )
2108 ,first_period_flag =
2109 DECODE( xba.first_period_flag
2110 ,'Y'
2111 ,DECODE( xba.period_name
2112 ,la_contribution_period_name (i)
2113 ,'Y'
2114 ,'N'
2115 )
2116 ,'N'
2117 )
2118 ,creation_date = g_date
2119 ,created_by = g_user_id
2120 ,last_update_date = g_date
2121 ,last_updated_by = g_user_id
2122 ,last_update_login = g_login_id
2123 ,program_update_date = g_date
2124 ,program_application_id = g_prog_appl_id
2125 ,program_id = g_prog_id
2126 ,request_id = g_req_id
2127 WHERE xba.application_id = la_application_id(i)
2128 AND xba.ledger_id = la_ledger_id(i)
2129 AND xba.code_combination_id = la_code_combination_id(i)
2130 AND xba.party_type_code = la_party_type_code(i)
2131 AND xba.party_id = la_party_id(i)
2132 AND xba.party_site_id = la_party_site_id(i)
2133 AND xba.initial_balance_flag = 'N'
2134 AND xba.period_name IN
2135 ( SELECT gps.period_name
2136 FROM xla_bal_period_stats_gt gps
2137 WHERE gps.ledger_id = la_ledger_id(i)
2138 AND gps.period_year = la_contribution_period_year(i)
2139 AND gps.effective_period_num >= la_contribution_eff_per_num(i)
2140 )
2141 AND la_contributed_period_year(i) = la_contribution_period_year(i);
2142
2143 l_row_count := SQL%ROWCOUNT;
2144
2145 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2146 trace
2147 (p_module => l_log_module
2148 ,p_msg => l_row_count || 'Same year balances updated '
2149 ,p_level => C_LEVEL_STATEMENT
2150 );
2151 END IF;
2152
2153 g_date := SYSDATE;
2154
2155 --UPDATE balances following years
2156 FORALL i IN 1..la_code_combination_id.LAST
2157 UPDATE xla_control_balances xba
2158 SET xba.beginning_balance_dr =
2159 DECODE( la_change_balance_dr(i)
2160 ,0
2161 ,xba.beginning_balance_dr
2162 ,NVL(xba.beginning_balance_dr, 0)
2163 + la_change_balance_dr(i)
2164 )
2165 ,xba.beginning_balance_cr =
2166 DECODE( la_change_balance_cr(i)
2167 ,0
2168 ,xba.beginning_balance_cr
2169 ,NVL(xba.beginning_balance_cr, 0)
2170 + la_change_balance_cr(i)
2171 )
2172 ,xba.draft_beginning_balance_dr =
2173 DECODE( la_change_draft_balance_dr(i)
2174 ,0
2175 ,xba.draft_beginning_balance_dr
2176 ,NVL(xba.draft_beginning_balance_dr, 0)
2177 + la_change_draft_balance_dr(i)
2178 )
2179 ,xba.draft_beginning_balance_cr =
2180 DECODE( la_change_draft_balance_cr(i)
2181 ,0
2182 ,xba.draft_beginning_balance_cr
2183 ,NVL(xba.draft_beginning_balance_cr, 0)
2184 + la_change_draft_balance_cr(i)
2185 )
2186 ,xba.first_period_flag =
2187 (SELECT gps2.first_period_in_year_flag
2188 FROM xla_bal_period_stats_gt gps2
2189 WHERE gps2.ledger_id = la_ledger_id(i)
2190 AND gps2.period_name = xba.period_name
2191 )
2192 ,creation_date = g_date
2196 ,last_update_login = g_login_id
2193 ,created_by = g_user_id
2194 ,last_update_date = g_date
2195 ,last_updated_by = g_user_id
2197 ,program_update_date = g_date
2198 ,program_application_id = g_prog_appl_id
2199 ,program_id = g_prog_id
2200 ,request_id = g_req_id
2201 WHERE xba.application_id = la_application_id(i)
2202 AND xba.ledger_id = la_ledger_id(i)
2203 AND xba.code_combination_id = la_code_combination_id(i)
2204 AND xba.party_type_code = la_party_type_code(i)
2205 AND xba.party_id = la_party_id(i)
2206 AND xba.party_site_id = la_party_site_id(i)
2207 AND xba.initial_balance_flag = 'N'
2208 AND xba.period_name IN
2209 ( SELECT gps.period_name
2210 FROM xla_bal_period_stats_gt gps
2211 WHERE gps.ledger_id = la_ledger_id(i)
2212 AND gps.period_year = la_contributed_period_year(i)
2213 )
2214 AND la_contributed_period_year(i) > la_contribution_period_year(i);
2215
2216 l_row_count := SQL%ROWCOUNT;
2217
2218 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2219 trace
2220 (p_module => l_log_module
2221 ,p_msg => l_row_count
2222 || ' following years balances updated '
2223 ,p_level => C_LEVEL_STATEMENT
2224 );
2225 END IF;
2226
2227 --Create new balances
2228 IF p_operation_code <> 'R'
2229 THEN
2230 g_date := SYSDATE;
2231
2232 FOR i IN 1..la_code_combination_id.LAST LOOP
2233 l_begin_bal_dr := null; -- Bug 7608545 - Reset begin_bal_dr to null
2234 l_begin_bal_cr := null; --7608545 - Reset begin_bal_cr to null
2235 FOR j IN (select nvl(beginning_balance_dr,0) + nvl(period_balance_dr,0) begin_dr
2236 ,nvl(beginning_balance_cr,0) + nvl(period_balance_cr,0) begin_cr
2237 from(select xcb.*
2238 from xla_control_balances xcb, gl_period_statuses gps
2239 where xcb.application_id = la_application_id(i)
2240 and xcb.application_id = gps.application_id
2241 and xcb.ledger_id = gps.ledger_id
2242 and xcb.ledger_id = la_ledger_id(i)
2243 and xcb.period_name = gps.period_name
2244 and xcb.code_combination_id = la_code_combination_id(i)
2245 and xcb.party_type_code = la_party_type_code(i)
2246 and xcb.party_id = la_party_id(i)
2247 and xcb.party_site_id = la_party_site_id(i)
2248 and gps.effective_period_num < la_contribution_eff_per_num(i)
2249 order by gps.effective_period_num desc)
2250 where rownum = 1) LOOP
2251 l_begin_bal_dr := j.begin_dr;
2252 l_begin_bal_cr := j.begin_cr;
2253
2254 END LOOP;
2255
2256 INSERT INTO xla_control_balances xba
2257 ( application_id
2258 ,ledger_id
2259 ,code_combination_id
2260 ,party_type_code
2261 ,party_id
2262 ,party_site_id
2263 ,period_name
2264 ,period_year
2265 ,first_period_flag
2266 ,beginning_balance_dr
2267 ,beginning_balance_cr
2268 ,period_balance_dr
2269 ,period_balance_cr
2270 ,draft_beginning_balance_dr
2271 ,draft_beginning_balance_cr
2272 ,period_draft_balance_dr
2273 ,period_draft_balance_cr
2274 ,initial_balance_flag
2275 ,creation_date
2276 ,created_by
2277 ,last_update_date
2278 ,last_updated_by
2279 ,last_update_login
2280 ,program_update_date
2281 ,program_application_id
2282 ,program_id
2283 ,request_id
2284 )
2285 (
2286 SELECT la_application_id(i)
2287 ,la_ledger_id(i)
2288 ,la_code_combination_id(i)
2289 ,la_party_type_code(i)
2290 ,la_party_id(i)
2291 ,la_party_site_id(i)
2292 ,gps.period_name
2293 ,gps.period_year
2294 ,DECODE( gps.first_period_in_year_flag
2295 ,'Y'
2296 ,'Y'
2297 ,CASE WHEN l_begin_bal_dr IS NULL AND l_begin_bal_cr IS NULL THEN
2298 DECODE( gps.period_name
2299
2300 ,la_contribution_period_name(i)
2301 ,'Y'
2302 ,'N'
2306 ,NULLIF(NVL(DECODE( gps.period_year
2303 )
2304 ELSE 'N' END
2305 )
2307 ,la_contribution_period_year(i)
2308 ,DECODE( gps.period_name
2309 ,la_contribution_period_name(i)
2310 ,NULL
2311 ,la_contribution_dr(i)
2312 )
2313 ,la_net_contribution_dr(i)
2314 ),0) + nvl(l_begin_bal_dr,0)
2315 ,0) --beginning_balance_dr
2316 ,NULLIF(NVL(DECODE( gps.period_year
2317 ,la_contribution_period_year(i)
2318 ,DECODE( gps.period_name
2319 ,la_contribution_period_name(i)
2320 ,NULL
2321 ,la_contribution_cr(i)
2322 )
2323 ,la_net_contribution_cr(i)
2324 ),0) + nvl(l_begin_bal_cr,0)
2325 ,0) --beginning_balance_cr
2326 ,DECODE( gps.period_year
2327 ,la_contribution_period_year(i)
2328 ,DECODE( gps.period_name
2329 ,la_contribution_period_name(i)
2330 ,la_contribution_dr(i)
2331 ,NULL
2332 )
2333 ,NULL
2334 ) --period_balance_dr
2335 ,DECODE( gps.period_year
2336 ,la_contribution_period_year(i)
2337 ,DECODE( gps.period_name
2338 ,la_contribution_period_name(i)
2339 ,la_contribution_cr(i)
2340 ,NULL
2341 )
2342 ,NULL
2343 ) --period_balance_cr
2344 ,DECODE( gps.period_year
2345 ,la_contribution_period_year(i)
2346 ,DECODE( gps.period_name
2347 ,la_contribution_period_name(i)
2348 ,NULL
2349 ,la_contribution_draft_dr(i)
2350 )
2351 ,la_net_contribution_draft_dr(i)
2352 ) --draft_beginning_balance_dr
2353 ,DECODE( gps.period_year
2354 ,la_contribution_period_year(i)
2355 ,DECODE( gps.period_name
2356 ,la_contribution_period_name(i)
2357 ,NULL
2358 ,la_contribution_draft_cr(i)
2359 )
2360 ,la_net_contribution_draft_cr(i)
2361 ) --draft_beginning_balance_cr
2362 ,DECODE( gps.period_year
2363 ,la_contribution_period_year(i)
2364 ,DECODE( gps.period_name
2365 ,la_contribution_period_name(i)
2366 ,la_contribution_draft_dr(i)
2367 ,NULL
2368 )
2369 ,NULL
2370 ) --period_draft_balance_dr
2371 ,DECODE( gps.period_year
2372 ,la_contribution_period_year(i)
2373 ,DECODE( gps.period_name
2374 ,la_contribution_period_name(i)
2375 ,la_contribution_draft_cr(i)
2376 ,NULL
2377 )
2378 ,NULL
2379 ) --period_draft_balance_cr
2380 ,'N'
2381 ,g_date
2382 ,g_user_id
2383 ,g_date
2384 ,g_user_id
2385 ,g_login_id
2386 ,g_date
2387 ,g_prog_appl_id
2388 ,g_prog_id
2389 ,g_req_id
2390 FROM xla_bal_period_stats_gt gps
2391 ,xla_control_balances xba
2392 WHERE gps.ledger_id = la_ledger_id (i)
2393 AND gps.effective_period_num >= la_contribution_eff_per_num(i)
2394 AND gps.effective_period_num <= la_balance_stat_eff_per_num(i)
2395 AND xba.application_id (+)= la_application_id(i)
2396 AND xba.ledger_id (+)= la_ledger_id(i)
2400 AND xba.party_site_id (+)= la_party_site_id(i)
2397 AND xba.code_combination_id (+)= la_code_combination_id(i)
2398 AND xba.party_type_code (+)= la_party_type_code(i)
2399 AND xba.party_id (+)= la_party_id(i)
2401 AND xba.period_name (+)= gps.period_name
2402 AND xba.ledger_id IS NULL
2403 );
2404
2405 l_row_count := SQL%ROWCOUNT;
2406
2407 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2408 trace
2409 ( p_module => l_log_module
2410 ,p_msg => l_row_count || 'New balances inserted '
2411 ,p_level => C_LEVEL_STATEMENT
2412 );
2413 END IF;
2414 END LOOP;
2415 END IF; --p_operation_code
2416
2417 END LOOP; --process the next chunk of contributions
2418
2419 CLOSE lc_control_contributions;
2420
2421 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2422 trace
2423 (p_module => l_log_module
2424 ,p_msg => 'END ' || l_log_module
2425 ,p_level => C_LEVEL_PROCEDURE);
2426 END IF;
2427
2428 RETURN TRUE;
2429
2430 EXCEPTION
2431 WHEN xla_exceptions_pkg.application_exception THEN
2432 RAISE;
2433 WHEN OTHERS THEN
2434 xla_exceptions_pkg.raise_message
2435 (p_location => 'xla_balances_pkg.calculate_control_balances');
2436 END calculate_control_balances;
2437
2438 FUNCTION calculate_analytical_balances
2439 ( p_application_id IN INTEGER
2440 ,p_ledger_id IN INTEGER
2441 ,p_effective_period_num IN INTEGER
2442 ,p_operation_code IN VARCHAR2 --'F' Finalize
2443 --'A' Add
2444 --'R' Remove
2445 ) RETURN BOOLEAN
2446 IS
2447 /*======================================================================+
2448 | |
2449 | Public Function |
2450 | |
2451 | Description |
2452 | ----------- |
2453 | |
2454 | |
2455 +======================================================================*/
2456
2457 C_DUMMY CONSTANT VARCHAR2(30) := '#$&';
2458
2459 CURSOR lc_analytical_contributions
2460 IS
2461 SELECT ctr.application_id
2462 ,ctr.ledger_id
2463 ,NVL(xba.period_year, ctr.period_year) contributed_period_year
2464 ,ctr.period_name
2465 ,ctr.period_year
2466 ,ctr.effective_period_num
2467 ,ctr.code_combination_id
2468 ,ctr.analytical_criterion_code
2469 ,ctr.analytical_criterion_type_code
2470 ,ctr.amb_context_code
2471 ,ctr.ac1
2472 ,ctr.ac2
2473 ,ctr.ac3
2474 ,ctr.ac4
2475 ,ctr.ac5
2476 ,ctr.contribution_dr
2477 ,ctr.contribution_cr
2478 ,NVL2( contribution_dr
2479 ,NVL2( contribution_cr
2480 ,DECODE( SIGN(contribution_dr - contribution_cr)
2481 ,1
2482 ,contribution_dr - contribution_cr
2483 ,0
2484 )
2485 ,DECODE( SIGN(contribution_dr)
2486 ,1
2487 ,contribution_dr
2488 ,0
2489 )
2490 )
2491 ,NVL2( contribution_cr
2492 ,DECODE( SIGN(contribution_cr)
2493 ,-1
2494 ,-contribution_cr
2495 ,NULL
2496 )
2497 ,NULL
2498 )
2499 ) net_contribution_dr
2500 ,NVL2( contribution_cr
2501 ,NVL2( contribution_dr
2502 ,DECODE( SIGN(contribution_cr - contribution_dr)
2503 ,1
2504 ,contribution_cr - contribution_dr
2505 ,0
2506 )
2507 ,DECODE( SIGN(contribution_cr)
2508 ,1
2509 ,contribution_cr
2510 ,0
2511 )
2512 )
2513 ,NVL2( contribution_dr
2514 ,DECODE( SIGN(contribution_dr)
2515 ,-1
2516 ,-contribution_dr
2517 ,NULL
2518 )
2519 ,NULL
2520 )
2521 ) net_contribution_cr
2522 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(ctr.contribution_dr, 0)
2523 -NVL(xba.beginning_balance_cr,0) - NVL(ctr.contribution_cr, 0)
2524 )
2525 ,1
2529 ) change_balance_dr
2526 , NVL(ctr.contribution_dr, 0) - NVL(ctr.contribution_cr, 0)
2527 - NVL(xba.beginning_balance_cr, 0)
2528 ,- NVL(xba.beginning_balance_dr, 0)
2530 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(ctr.contribution_cr , 0)
2531 -NVL(xba.beginning_balance_dr, 0) - NVL(ctr.contribution_dr, 0)
2532 )
2533 ,1
2534 , NVL(ctr.contribution_cr, 0) - NVL(ctr.contribution_dr, 0)
2535 - NVL(xba.beginning_balance_dr, 0)
2536 ,- NVL(xba.beginning_balance_cr, 0)
2537 ) change_balance_cr
2538 ,ctr.balance_status_eff_per_num
2539 ,xbh.year_end_carry_forward_code
2540 ,ctr.account_type
2541 FROM xla_bal_ac_ctrbs_gt ctr
2542 ,xla_analytical_hdrs_b xbh
2543 ,xla_ac_balances xba
2544 WHERE ctr.application_id = p_application_id
2545 AND ctr.ledger_id = p_ledger_id
2546 AND ctr.effective_period_num = p_effective_period_num
2547 AND xbh.analytical_criterion_code = ctr.analytical_criterion_code
2548 AND xbh.analytical_criterion_type_code = ctr.analytical_criterion_type_code
2549 AND xbh.amb_context_code = ctr.amb_context_code
2550 AND xba.application_id (+) = ctr.application_id
2551 AND xba.ledger_id (+) = ctr.ledger_id
2552 AND xba.code_combination_id (+) = ctr.code_combination_id
2553 AND xba.analytical_criterion_code (+) = ctr.analytical_criterion_code
2554 AND xba.analytical_criterion_type_code (+) = ctr.analytical_criterion_type_code
2555 AND xba.amb_context_code (+) = ctr.amb_context_code
2556 AND NVL(xba.ac1 (+) ,'A') = NVL(ctr.ac1,'A')
2557 AND NVL(xba.ac5 (+) ,'A') = NVL(ctr.ac5,'A')
2558 AND NVL(xba.ac2 (+) ,'A') = NVL(ctr.ac2,'A')
2559 AND NVL(xba.ac3 (+) ,'A') = NVL(ctr.ac3,'A')
2560 AND NVL(xba.ac4 (+) ,'A') = NVL(ctr.ac4,'A')
2561 AND xba.first_period_flag (+) = 'Y'
2562 AND xba.period_year (+) >= ctr.period_year;
2563
2564 TYPE lt_table_varchar2_1 IS TABLE OF VARCHAR2(1);
2565 TYPE lt_table_varchar2_15 IS TABLE OF VARCHAR2(15);
2566 TYPE lt_table_varchar2_25 IS TABLE OF VARCHAR2(25);
2567 TYPE lt_table_varchar2_30 IS TABLE OF VARCHAR2(30);
2568 TYPE lt_table_integer IS TABLE OF INTEGER;
2569 TYPE lt_table_number IS TABLE OF NUMBER;
2570 TYPE lt_table_number_15 IS TABLE OF NUMBER(15);
2571
2572 la_application_id lt_table_number;
2573 la_ledger_id lt_table_number_15;
2574 la_contributed_period_year lt_table_varchar2_15;
2575 la_contribution_period_name lt_table_varchar2_15;
2576 la_contribution_period_year lt_table_number_15;
2577 la_contribution_eff_per_num lt_table_number_15;
2578 la_code_combination_id lt_table_integer;
2579
2580 la_analytical_criterion_code lt_table_varchar2_30;
2581 la_anacri_type_code lt_table_varchar2_1;
2582 la_amb_context_code lt_table_varchar2_30;
2583 la_ac1 lt_table_varchar2_30;
2584 la_ac2 lt_table_varchar2_30;
2585 la_ac3 lt_table_varchar2_30;
2586 la_ac4 lt_table_varchar2_30;
2587 la_ac5 lt_table_varchar2_30;
2588 la_balance_stat_eff_per_num lt_table_integer;
2589 la_contribution_dr lt_table_number;
2590 la_contribution_cr lt_table_number;
2591 la_contribution_draft_dr lt_table_number;
2592 la_contribution_draft_cr lt_table_number;
2593 la_net_contribution_dr lt_table_number;
2594 la_net_contribution_cr lt_table_number;
2595 la_net_contribution_draft_dr lt_table_number;
2596 la_net_contribution_draft_cr lt_table_number;
2597 la_change_balance_dr lt_table_number;
2598 la_change_balance_cr lt_table_number;
2599 la_change_draft_balance_dr lt_table_number;
2600 la_change_draft_balance_cr lt_table_number;
2601 la_year_end_carry_forward_code lt_table_varchar2_1;
2602 la_account_type lt_table_varchar2_1;
2603
2604
2605 l_row_count NUMBER;
2606
2607 l_log_module VARCHAR2 (2000);
2608
2609 BEGIN
2610 IF g_log_enabled THEN
2611 l_log_module := C_DEFAULT_MODULE||'.calculate_analytical_balances';
2612 END IF;
2613 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
2614 trace
2615 (p_module => l_log_module
2616 ,p_msg => 'BEGIN ' || l_log_module
2617 ,p_level => C_LEVEL_PROCEDURE);
2618 END IF;
2619
2620 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2621 trace
2622 (p_module => l_log_module
2623 ,p_msg => 'p_application_id :' || p_application_id
2624 ,p_level => C_LEVEL_STATEMENT
2625 );
2626 trace
2627 (p_module => l_log_module
2628 ,p_msg => 'p_ledger_id :' || p_ledger_id
2629 ,p_level => C_LEVEL_STATEMENT
2630 );
2631 trace
2632 (p_module => l_log_module
2633 ,p_msg => 'p_effective_period_num :' || p_effective_period_num
2634 ,p_level => C_LEVEL_STATEMENT
2635 );
2636 trace
2637 (p_module => l_log_module
2641 END IF;
2638 ,p_msg => 'p_operation_code :' || p_operation_code
2639 ,p_level => C_LEVEL_STATEMENT
2640 );
2642
2643
2644 la_application_id :=lt_table_number();
2645 la_ledger_id :=lt_table_number_15();
2646 la_contributed_period_year :=lt_table_varchar2_15();
2647 la_contribution_period_name :=lt_table_varchar2_15();
2648 la_contribution_period_year :=lt_table_number_15();
2649 la_contribution_eff_per_num :=lt_table_number_15();
2650 la_code_combination_id :=lt_table_integer();
2651 la_analytical_criterion_code :=lt_table_varchar2_30();
2652 la_anacri_type_code :=lt_table_varchar2_1();
2653 la_amb_context_code :=lt_table_varchar2_30();
2654 la_ac1 :=lt_table_varchar2_30();
2655 la_ac2 :=lt_table_varchar2_30();
2656 la_ac3 :=lt_table_varchar2_30();
2657 la_ac4 :=lt_table_varchar2_30();
2658 la_ac5 :=lt_table_varchar2_30();
2659 la_balance_stat_eff_per_num :=lt_table_integer();
2660 la_contribution_dr :=lt_table_number();
2661 la_contribution_cr :=lt_table_number();
2662 la_contribution_draft_dr :=lt_table_number();
2663 la_contribution_draft_cr :=lt_table_number();
2664 la_net_contribution_dr :=lt_table_number();
2665 la_net_contribution_cr :=lt_table_number();
2666 la_net_contribution_draft_dr :=lt_table_number();
2667 la_net_contribution_draft_cr :=lt_table_number();
2668 la_change_balance_dr :=lt_table_number();
2669 la_change_balance_cr :=lt_table_number();
2670 la_change_draft_balance_dr :=lt_table_number();
2671 la_change_draft_balance_cr :=lt_table_number();
2672 la_year_end_carry_forward_code :=lt_table_varchar2_1();
2673 la_account_type :=lt_table_varchar2_1();
2674
2675
2676 OPEN lc_analytical_contributions;
2677
2678 LOOP --contributions are collected in chunks
2679 FETCH lc_analytical_contributions
2680 BULK COLLECT
2681 INTO la_application_id
2682 ,la_ledger_id
2683 ,la_contributed_period_year
2684 ,la_contribution_period_name
2685 ,la_contribution_period_year
2686 ,la_contribution_eff_per_num
2687 ,la_code_combination_id
2688 ,la_analytical_criterion_code
2689 ,la_anacri_type_code
2690 ,la_amb_context_code
2691 ,la_ac1
2692 ,la_ac2
2693 ,la_ac3
2694 ,la_ac4
2695 ,la_ac5
2696 ,la_contribution_dr
2697 ,la_contribution_cr
2698 ,la_net_contribution_dr
2699 ,la_net_contribution_cr
2700 ,la_change_balance_dr
2701 ,la_change_balance_cr
2702 ,la_balance_stat_eff_per_num
2703 ,la_year_end_carry_forward_code
2704 ,la_account_type
2705 LIMIT C_BULK_LIMIT;
2706
2707 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2708 trace
2709 (p_module => l_log_module
2710 ,p_msg => 'Processing ' || la_code_combination_id.COUNT
2711 || ' contributions'
2712 ,p_level => C_LEVEL_STATEMENT
2713 );
2714 END IF;
2715
2716 IF la_code_combination_id.COUNT = 0
2717 THEN
2718 --increment the case counter, if the limit is reached exit.
2719 EXIT;
2720 END IF;
2721
2722 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2723 FOR i IN 1..la_code_combination_id.LAST
2724 LOOP
2725 trace
2726 ( p_module => l_log_module
2727 ,p_msg => 'CONTRIBUTION :' || i
2728 ,p_level => C_LEVEL_STATEMENT
2729 );
2730 trace
2731 ( p_module => l_log_module
2732 ,p_msg => 'contributed year :'
2733 || la_contributed_period_year(i)
2734 ,p_level => C_LEVEL_STATEMENT
2735 );
2736 trace
2737 ( p_module => l_log_module
2738 ,p_msg => 'ccid :'
2739 || la_code_combination_id(i)
2740 ,p_level => C_LEVEL_STATEMENT
2741 );
2742 trace
2743 ( p_module => l_log_module
2744 ,p_msg => 'Analytical Criterion Code :'
2745 || la_analytical_criterion_code (i)
2746 ,p_level => C_LEVEL_STATEMENT
2747 );
2748 trace
2749 ( p_module => l_log_module
2750 ,p_msg => 'Analytical Criterion Type Code :'
2751 || la_anacri_type_code (i)
2752 ,p_level => C_LEVEL_STATEMENT
2753 );
2754 trace
2755 ( p_module => l_log_module
2756 ,p_msg => 'Amb Context Code :'
2757 || la_amb_context_code (i)
2758 ,p_level => C_LEVEL_STATEMENT
2762 ,p_msg => 'ac1 :'
2759 );
2760 trace
2761 ( p_module => l_log_module
2763 || la_ac1 (i)
2764 ,p_level => C_LEVEL_STATEMENT
2765 );
2766 trace
2767 ( p_module => l_log_module
2768 ,p_msg => 'ac2 :'
2769 || la_ac2 (i)
2770 ,p_level => C_LEVEL_STATEMENT
2771 );
2772 trace
2773 ( p_module => l_log_module
2774 ,p_msg => 'ac3 :'
2775 || la_ac3 (i)
2776 ,p_level => C_LEVEL_STATEMENT
2777 );
2778 trace
2779 ( p_module => l_log_module
2780 ,p_msg => 'ac4 :'
2781 || la_ac4 (i)
2782 ,p_level => C_LEVEL_STATEMENT
2783 );
2784 trace
2785 ( p_module => l_log_module
2786 ,p_msg => 'ac5 :'
2787 || la_ac5 (i)
2788 ,p_level => C_LEVEL_STATEMENT
2789 );
2790 trace
2791 ( p_module => l_log_module
2792 ,p_msg => 'Contribution :'
2793 || la_contribution_dr(i) || ','
2794 || la_contribution_cr(i)
2795 ,p_level => C_LEVEL_STATEMENT
2796 );
2797 trace
2798 ( p_module => l_log_module
2799 ,p_msg => 'Net Contribution :'
2800 || la_net_contribution_dr(i) || ','
2801 || la_net_contribution_cr(i)
2802 ,p_level => C_LEVEL_STATEMENT
2803 );
2804 trace
2805 ( p_module => l_log_module
2806 ,p_msg => 'Begin balance variation :'
2807 || la_change_balance_dr(i) || ','
2808 || la_change_balance_cr(i)
2809 ,p_level => C_LEVEL_STATEMENT
2810 );
2811 trace
2812 ( p_module => l_log_module
2813 ,p_msg => 'Balance stat eff per num :'
2814 || la_balance_stat_eff_per_num(i)
2815 ,p_level => C_LEVEL_STATEMENT
2816 );
2817 trace
2818 ( p_module => l_log_module
2819 ,p_msg => 'la_year_end_carry_forward_code :'
2820 || la_year_end_carry_forward_code(i)
2821 ,p_level => C_LEVEL_STATEMENT
2822 );
2823 trace
2824 ( p_module => l_log_module
2825 ,p_msg => 'la_account_type :'
2826 || la_account_type(i)
2827 ,p_level => C_LEVEL_STATEMENT
2828 );
2829
2830 END LOOP;
2831 END IF;
2832
2833 g_date := SYSDATE;
2834
2835 --Update balances same year
2836 FORALL i IN 1..la_code_combination_id.LAST
2837 UPDATE xla_ac_balances xba
2838 SET xba.beginning_balance_dr =
2839 DECODE( xba.period_name
2840 ,la_contribution_period_name (i)
2841 ,xba.beginning_balance_dr
2842 ,NVL2( la_contribution_dr (i)
2843 ,NVL(xba.beginning_balance_dr, 0) + la_contribution_dr (i)
2844 ,xba.beginning_balance_dr
2845 )
2846 )
2847 ,xba.beginning_balance_cr =
2848 DECODE( xba.period_name
2849 ,la_contribution_period_name (i)
2850 ,xba.beginning_balance_cr
2851 ,NVL2( la_contribution_cr (i)
2852 ,NVL(xba.beginning_balance_cr, 0) + la_contribution_cr (i)
2853 ,xba.beginning_balance_cr
2854 )
2855 )
2856 ,xba.period_balance_dr =
2857 DECODE( xba.period_name
2858 ,la_contribution_period_name (i)
2859 ,NVL2( la_contribution_dr (i)
2860 ,NVL(xba.period_balance_dr, 0) + la_contribution_dr (i)
2861 ,xba.period_balance_dr
2862 )
2863 ,xba.period_balance_dr
2864 )
2865 ,xba.period_balance_cr =
2866 DECODE( xba.period_name
2867 ,la_contribution_period_name (i)
2868 ,NVL2( la_contribution_cr (i)
2869 ,NVL(xba.period_balance_cr, 0) + la_contribution_cr (i)
2870 ,xba.period_balance_cr
2871 )
2872 ,xba.period_balance_cr
2873 )
2874 ,first_period_flag =
2875 DECODE( xba.first_period_flag
2876 ,'Y'
2880 ,'N'
2877 ,DECODE( xba.period_name
2878 ,la_contribution_period_name (i)
2879 ,'Y'
2881 )
2882 ,'N'
2883 )
2884 ,creation_date = g_date
2885 ,created_by = g_user_id
2886 ,last_update_date = g_date
2887 ,last_updated_by = g_user_id
2888 ,last_update_login = g_login_id
2889 ,program_update_date = g_date
2890 ,program_application_id = g_prog_appl_id
2891 ,program_id = g_prog_id
2892 ,request_id = g_req_id
2893 WHERE xba.application_id = la_application_id(i)
2894 AND xba.ledger_id = la_ledger_id(i)
2895 AND xba.code_combination_id = la_code_combination_id(i)
2896 AND xba.analytical_criterion_code = la_analytical_criterion_code(i)
2897 AND xba.analytical_criterion_type_code
2898 = la_anacri_type_code(i)
2899 AND xba.amb_context_code = la_amb_context_code(i)
2900 AND (xba.ac1 IS NULL or xba.ac1 = la_ac1(i))
2901 AND (xba.ac2 IS NULL or xba.ac2 = la_ac2(i))
2902 AND (xba.ac3 IS NULL or xba.ac3 = la_ac3(i))
2903 AND (xba.ac4 IS NULL or xba.ac4 = la_ac4(i))
2904 AND (xba.ac5 IS NULL or xba.ac5 = la_ac5(i))
2905 AND xba.initial_balance_flag = 'N'
2906 AND xba.period_name IN
2907 ( SELECT gps.period_name
2908 FROM xla_bal_period_stats_gt gps
2909 WHERE gps.ledger_id = la_ledger_id(i)
2910 AND gps.period_year = la_contribution_period_year(i)
2911 AND gps.effective_period_num >= la_contribution_eff_per_num(i)
2912 )
2913 AND la_contributed_period_year(i) = la_contribution_period_year(i);
2914
2915 l_row_count := SQL%ROWCOUNT;
2916
2917 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2918 trace
2919 (p_module => l_log_module
2920 ,p_msg => l_row_count || 'Same year balances updated '
2921 ,p_level => C_LEVEL_STATEMENT
2922 );
2923 END IF;
2924
2925 g_date := SYSDATE;
2926
2927 --UPDATE balances following years
2928 FORALL i IN 1..la_code_combination_id.LAST
2929 UPDATE xla_ac_balances xba
2930 SET xba.beginning_balance_dr =
2931 DECODE( la_change_balance_dr(i)
2932 ,0
2933 ,xba.beginning_balance_dr
2934 ,NVL(xba.beginning_balance_dr, 0)
2935 + la_change_balance_dr(i)
2936 )
2937 ,xba.beginning_balance_cr =
2938 DECODE( la_change_balance_cr(i)
2939 ,0
2940 ,xba.beginning_balance_cr
2941 ,NVL(xba.beginning_balance_cr, 0)
2942 + la_change_balance_cr(i)
2943 )
2944 ,xba.first_period_flag =
2945 (SELECT gps2.first_period_in_year_flag
2946 FROM xla_bal_period_stats_gt gps2
2947 WHERE gps2.ledger_id = la_ledger_id(i)
2948 AND gps2.period_name = xba.period_name
2949 )
2950 ,creation_date = g_date
2951 ,created_by = g_user_id
2952 ,last_update_date = g_date
2953 ,last_updated_by = g_user_id
2954 ,last_update_login = g_login_id
2955 ,program_update_date = g_date
2956 ,program_application_id = g_prog_appl_id
2957 ,program_id = g_prog_id
2958 ,request_id = g_req_id
2959 WHERE xba.ledger_id = la_ledger_id(i)
2960 AND xba.application_id = la_application_id(i)
2961 AND xba.code_combination_id = la_code_combination_id(i)
2962 AND xba.analytical_criterion_code = la_analytical_criterion_code(i)
2963 AND xba.analytical_criterion_type_code
2964 = la_anacri_type_code(i)
2965 AND xba.amb_context_code = la_amb_context_code(i)
2966 AND (xba.ac1 IS NULL or xba.ac1 = la_ac1(i))
2967 AND (xba.ac2 IS NULL or xba.ac2 = la_ac2(i))
2968 AND (xba.ac3 IS NULL or xba.ac3 = la_ac3(i))
2969 AND (xba.ac4 IS NULL or xba.ac4 = la_ac4(i))
2970 AND (xba.ac5 IS NULL or xba.ac5 = la_ac5(i))
2971 AND xba.initial_balance_flag = 'N'
2972 AND ( la_year_end_carry_forward_code(i) = 'A'
2973 OR ( la_year_end_carry_forward_code(i) = 'B'
2974 AND la_account_type(i) IN ('A', 'L', 'O')
2975 )
2976 )
2977 AND xba.period_name IN
2978 ( SELECT gps.period_name
2979 FROM xla_bal_period_stats_gt gps
2980 WHERE gps.ledger_id = la_ledger_id(i)
2984
2981 AND gps.period_year = la_contributed_period_year(i)
2982 )
2983 AND la_contributed_period_year(i) > la_contribution_period_year(i);
2985 l_row_count := SQL%ROWCOUNT;
2986
2987 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
2988 trace
2989 (p_module => l_log_module
2990 ,p_msg => l_row_count
2991 || ' following years balances updated '
2992 ,p_level => C_LEVEL_STATEMENT
2993 );
2994 END IF;
2995
2996 --Create new balances
2997 IF p_operation_code <> 'R'
2998 THEN
2999 g_date := SYSDATE;
3000
3001 FORALL i IN 1..la_code_combination_id.LAST
3002 INSERT INTO xla_ac_balances xba
3003 ( application_id
3004 ,ledger_id
3005 ,code_combination_id
3006 ,analytical_criterion_code
3007 ,analytical_criterion_type_code
3008 ,amb_context_code
3009 ,ac1
3010 ,ac2
3011 ,ac3
3012 ,ac4
3013 ,ac5
3014 ,period_name
3015 ,period_year
3016 ,first_period_flag
3017 ,beginning_balance_dr
3018 ,beginning_balance_cr
3019 ,period_balance_dr
3020 ,period_balance_cr
3021 ,initial_balance_flag
3022 ,creation_date
3023 ,created_by
3024 ,last_update_date
3025 ,last_updated_by
3026 ,last_update_login
3027 ,program_update_date
3028 ,program_application_id
3029 ,program_id
3030 ,request_id
3031 )
3032 (
3033 SELECT la_application_id(i)
3034 ,la_ledger_id(i)
3035 ,la_code_combination_id(i)
3036 ,la_analytical_criterion_code(i)
3037 ,la_anacri_type_code(i)
3038 ,la_amb_context_code(i)
3039 ,la_ac1(i)
3040 ,la_ac2(i)
3041 ,la_ac3(i)
3042 ,la_ac4(i)
3043 ,la_ac5(i)
3044 ,gps.period_name
3045 ,gps.period_year
3046 ,DECODE( gps.first_period_in_year_flag
3047 ,'Y'
3048 ,'Y'
3049 ,DECODE( gps.period_name
3050 ,la_contribution_period_name(i)
3051 ,'Y'
3052 ,'N'
3053 )
3054 )
3055 ,DECODE( gps.period_year
3056 ,la_contribution_period_year(i)
3057 ,DECODE( gps.period_name
3058 ,la_contribution_period_name(i)
3059 ,NULL
3060 ,la_contribution_dr(i)
3061 )
3062 ,la_net_contribution_dr(i)
3063 ) --beginning_balance_dr
3064 ,DECODE( gps.period_year
3065 ,la_contribution_period_year(i)
3066 ,DECODE( gps.period_name
3067 ,la_contribution_period_name(i)
3068 ,NULL
3069 ,la_contribution_cr(i)
3070 )
3071 ,la_net_contribution_cr(i)
3072 ) --beginning_balance_cr
3073 ,DECODE( gps.period_year
3074 ,la_contribution_period_year(i)
3075 ,DECODE( gps.period_name
3076 ,la_contribution_period_name(i)
3077 ,la_contribution_dr(i)
3078 ,NULL
3079 )
3080 ,NULL
3081 ) --period_balance_dr
3082 ,DECODE( gps.period_year
3083 ,la_contribution_period_year(i)
3084 ,DECODE( gps.period_name
3085 ,la_contribution_period_name(i)
3086 ,la_contribution_cr(i)
3087 ,NULL
3088 )
3089 ,NULL
3090 ) --period_balance_cr
3091 ,'N'
3092 ,g_date
3093 ,g_user_id
3097 ,g_date
3094 ,g_date
3095 ,g_user_id
3096 ,g_login_id
3098 ,g_prog_appl_id
3099 ,g_prog_id
3100 ,g_req_id
3101 FROM xla_bal_period_stats_gt gps
3102 ,xla_analytical_hdrs_b xbh
3103 WHERE gps.ledger_id = la_ledger_id (i)
3104 AND gps.effective_period_num >= la_contribution_eff_per_num(i)
3105 AND gps.effective_period_num <= la_balance_stat_eff_per_num(i)
3106 -- bug 6117987
3107 AND NOT EXISTS
3108 (
3109 -- bug 7113937 Removed outer join in where clause
3110 SELECT 1
3111 FROM xla_ac_balances xba
3112 WHERE xba.application_id = la_application_id(i)
3113 AND xba.ledger_id = la_ledger_id (i)
3114 AND xba.code_combination_id = la_code_combination_id(i)
3115 AND xba.analytical_criterion_code = la_analytical_criterion_code(i)
3116 AND xba.analytical_criterion_type_code
3117 = la_anacri_type_code(i)
3118 AND xba.amb_context_code = la_amb_context_code(i)
3119 AND NVL(xba.ac1,C_DUMMY) = NVL(la_ac1(i),C_DUMMY)
3120 AND NVL(xba.ac2,C_DUMMY) = NVL(la_ac2(i),C_DUMMY)
3121 AND NVL(xba.ac3,C_DUMMY) = NVL(la_ac3(i),C_DUMMY)
3122 AND NVL(xba.ac4,C_DUMMY) = NVL(la_ac4(i),C_DUMMY)
3123 AND NVL(xba.ac5,C_DUMMY) = NVL(la_ac5(i),C_DUMMY)
3124 AND xba.period_name = gps.period_name
3125 )
3126 AND xbh.analytical_criterion_code = la_analytical_criterion_code(i)
3127 AND xbh.analytical_criterion_type_code = la_anacri_type_code(i)
3128 AND xbh.amb_context_code = la_amb_context_code(i)
3129 AND ( gps.period_year = la_contribution_period_year(i)
3130 OR xbh.year_end_carry_forward_code = 'A'
3131 OR ( xbh.year_end_carry_forward_code = 'B'
3132 AND la_account_type(i) IN ('A', 'L', 'O')
3133 )
3134 )
3135 );
3136
3137 l_row_count := SQL%ROWCOUNT;
3138
3139 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3140 trace
3141 ( p_module => l_log_module
3142 ,p_msg => l_row_count || 'New balances inserted '
3143 ,p_level => C_LEVEL_STATEMENT
3144 );
3145 END IF;
3146 END IF; --p_operation_code
3147
3148 END LOOP; --proceed to the next chunk of contributions
3149
3150 CLOSE lc_analytical_contributions;
3151
3152 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3153 trace
3154 (p_module => l_log_module
3155 ,p_msg => 'END ' || l_log_module
3156 ,p_level => C_LEVEL_PROCEDURE);
3157 END IF;
3158
3159 RETURN TRUE;
3160
3161 EXCEPTION
3162 WHEN xla_exceptions_pkg.application_exception THEN
3163 RAISE;
3164 WHEN OTHERS THEN
3165 xla_exceptions_pkg.raise_message
3166 (p_location => 'xla_balances_pkg.calculate_analytical_balances');
3167 END calculate_analytical_balances;
3168
3169
3170
3171 FUNCTION move_identified_bals_forward
3172 ( p_application_id IN INTEGER
3173 ,p_ledger_id IN INTEGER
3174 ,p_code_combination_id IN INTEGER
3175 ,p_dest_effective_period_num IN INTEGER
3176 ,p_balance_source_code IN VARCHAR2
3177 ,p_party_type_code IN VARCHAR2
3178 ,p_party_id IN INTEGER
3179 ,p_analytical_criterion_code IN INTEGER
3180 ,p_anacri_type_code IN VARCHAR2
3181 ,p_amb_context_code IN VARCHAR2
3182 ,p_ac1 IN VARCHAR2
3183 ,p_ac2 IN VARCHAR2
3184 ,p_ac3 IN VARCHAR2
3185 ,p_ac4 IN VARCHAR2
3186 ,p_ac5 IN VARCHAR2
3187 )
3188 RETURN BOOLEAN
3189 IS
3190 /*======================================================================+
3191 | |
3192 | Private Function |
3193 | |
3194 | Description |
3195 | ----------- |
3196 | |
3197 | Pseudo-code |
3198 | ----------- |
3202 | |
3199 | |
3200 | Open issues |
3201 | ----------- |
3203 | |
3204 +======================================================================*/
3205
3206 l_user_id INTEGER;
3207 l_login_id INTEGER;
3208 l_date DATE;
3209 l_prog_appl_id INTEGER;
3210 l_prog_id INTEGER;
3211 l_req_id INTEGER;
3212
3213 l_row_count NUMBER;
3214
3215 l_return_value INTEGER;
3216
3217 l_log_module VARCHAR2 (2000);
3218
3219 BEGIN
3220
3221 l_user_id := xla_environment_pkg.g_usr_id;
3222 l_login_id := xla_environment_pkg.g_login_id;
3223 l_date := SYSDATE;
3224 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
3225 l_prog_id := xla_environment_pkg.g_prog_id;
3226 l_req_id := xla_environment_pkg.g_req_id;
3227
3228 IF g_log_enabled THEN
3229 l_log_module := C_DEFAULT_MODULE||'.move_identified_bals_forward';
3230 END IF;
3231 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3232 trace
3233 (p_module => l_log_module
3234 ,p_msg => 'BEGIN ' || l_log_module
3235 ,p_level => C_LEVEL_PROCEDURE);
3236 END IF;
3237
3238 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3239 trace
3240 (p_module => l_log_module
3241 , p_msg => 'p_application_id :'
3242 || p_application_id
3243 ,p_level => C_LEVEL_STATEMENT
3244 );
3245 trace
3246 ( p_module => l_log_module
3247 ,p_msg => 'p_ledger_id :'
3248 || p_ledger_id
3249 ,p_level => C_LEVEL_STATEMENT
3250 );
3251 trace
3252 ( p_module => l_log_module
3253 ,p_msg => 'p_code_combination_id :'
3254 || p_code_combination_id
3255 ,p_level => C_LEVEL_STATEMENT
3256 );
3257 trace
3258 (p_module => l_log_module
3259 ,p_msg => 'p_dest_effective_period_num :'
3260 || p_dest_effective_period_num
3261 ,p_level => C_LEVEL_STATEMENT
3262 );
3263 trace
3264 (p_module => l_log_module
3265 ,p_msg => 'p_balance_source_code :'
3266 || p_balance_source_code
3267 ,p_level => C_LEVEL_STATEMENT
3268 );
3269 trace
3270 (p_module => l_log_module
3271 ,p_msg => 'p_party_type_code :'
3272 || p_party_type_code
3273 ,p_level => C_LEVEL_STATEMENT
3274 );
3275 trace
3276 (p_module => l_log_module
3277 ,p_msg => 'p_party_id :'
3278 || p_party_id
3279 ,p_level => C_LEVEL_STATEMENT
3280 );
3281 END IF;
3282
3283 IF p_application_id IS NULL
3284 OR p_ledger_id IS NULL
3285 OR p_code_combination_id IS NULL
3286 OR p_dest_effective_period_num IS NULL
3287 THEN
3288 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
3289 trace
3290 (p_module => l_log_module
3291 ,p_msg => 'EXCEPTION: ' ||
3292 'parameters cannot be NULL'
3293 ,p_level => C_LEVEL_EXCEPTION
3294 );
3295 END IF;
3296 xla_exceptions_pkg.raise_message
3297 (p_appli_s_name => 'XLA'
3298 ,p_msg_name => 'XLA_COMMON_ERROR'
3299 ,p_token_1 => 'LOCATION'
3300 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
3301 ,p_token_2 => 'ERROR'
3302 ,p_value_2 => 'EXCEPTION: ' ||
3303 'parameters cannot be NULL');
3304 END IF;
3305
3306 IF NVL(p_balance_source_code, 'C') = 'C'
3307 THEN
3308 IF p_party_type_code IS NULL
3309 OR p_party_id IS NULL
3310 THEN
3311 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
3312 trace
3313 (p_module => l_log_module
3314 ,p_msg => 'EXCEPTION: ' ||
3315 'If p_balance_source_code is not ''A'' party parameters cannot be NULL'
3316 ,p_level => C_LEVEL_EXCEPTION
3317 );
3318 END IF;
3319 xla_exceptions_pkg.raise_message
3320 (p_appli_s_name => 'XLA'
3321 ,p_msg_name => 'XLA_COMMON_ERROR'
3322 ,p_token_1 => 'LOCATION'
3323 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
3324 ,p_token_2 => 'ERROR'
3325 ,p_value_2 => 'EXCEPTION: ' ||
3326 'If p_balance_source_code is not ''A'' party parameters cannot be NULL');
3327 END IF;
3328 END IF;
3329
3330 IF NVL(p_balance_source_code, 'A') = 'A'
3331 THEN
3332 IF p_analytical_criterion_code IS NULL
3333 OR p_anacri_type_code IS NULL
3334 OR p_amb_context_code IS NULL
3335 OR (p_ac1 IS NULL AND p_ac2 IS NULL AND
3339 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
3336 p_ac3 IS NULL AND p_ac4 IS NULL AND
3337 p_ac5 IS NULL)
3338 THEN
3340 trace
3341 (p_module => l_log_module
3342 ,p_msg => 'EXCEPTION: ' ||
3343 'If p_balance_source_code is not ''C'' analytical detail parameter cannot be NULL'
3344 ,p_level => C_LEVEL_EXCEPTION
3345 );
3346 END IF;
3347 xla_exceptions_pkg.raise_message
3348 (p_appli_s_name => 'XLA'
3349 ,p_msg_name => 'XLA_COMMON_ERROR'
3350 ,p_token_1 => 'LOCATION'
3351 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
3352 ,p_token_2 => 'ERROR'
3353 ,p_value_2 => 'EXCEPTION: ' ||
3354 'If p_balance_source_code is not ''C'' analytical detail parameter cannot be NULL');
3355 END IF;
3356 END IF;
3357
3358
3359 l_return_value := 0;
3360
3361 IF NVL(p_balance_source_code, 'C') = 'C'
3362 THEN
3363 INSERT INTO xla_control_balances xba
3364 ( application_id
3365 ,ledger_id
3366 ,code_combination_id
3367 ,party_type_code
3368 ,party_id
3369 ,party_site_id
3370 ,period_name
3371 ,period_year
3372 ,beginning_balance_dr
3373 ,beginning_balance_cr
3374 ,period_balance_dr
3375 ,period_balance_cr
3376 ,draft_beginning_balance_dr
3377 ,draft_beginning_balance_cr
3378 ,period_draft_balance_dr
3379 ,period_draft_balance_cr
3380 ,initial_balance_flag
3381 ,first_period_flag
3382 ,creation_date
3383 ,created_by
3384 ,last_update_date
3385 ,last_updated_by
3386 ,last_update_login
3387 ,program_update_date
3388 ,program_application_id
3389 ,program_id
3390 ,request_id
3391 )
3392 (
3393 SELECT xba.application_id
3394 ,xba.ledger_id
3395 ,xba.code_combination_id
3396 ,xba.party_type_code
3397 ,xba.party_id
3398 ,xba.party_site_id
3399 ,gpsnew.period_name
3400 ,gpsnew.period_year
3401 --disregarding indentation for readability
3402 ,DECODE( gpsnew.period_year
3403 ,gpsbs.period_year
3404 ,NVL2( xba.period_balance_dr
3405 ,NVL2( xba.beginning_balance_dr
3406 ,xba.beginning_balance_dr + xba.period_balance_dr
3407 ,xba.period_balance_dr
3408 )
3409 ,xba.beginning_balance_dr
3410 )
3411 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
3412 -( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0) )
3413 )
3414 ,1
3415 ,NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
3416 - ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0) )
3417 )
3418 ) --beginning_balance_dr
3419 ,DECODE( gpsnew.period_year
3420 ,gpsbs.period_year
3421 ,NVL2( xba.period_balance_cr
3422 ,NVL2( xba.beginning_balance_cr
3423 ,xba.beginning_balance_cr + xba.period_balance_cr
3424 ,xba.period_balance_cr
3425 )
3426 ,xba.beginning_balance_cr
3427 )
3428 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
3429 -( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0) )
3430 )
3431 ,1
3432 ,NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
3433 - ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0) )
3434 )
3435 ) --beginning_balance_cr
3436 ,NULL --period_balance_dr
3437 ,NULL --period_balance_cr
3438 ,DECODE( gpsnew.period_year
3439 ,gpsbs.period_year
3440 ,NVL2( xba.period_draft_balance_dr
3441 ,NVL2( xba.draft_beginning_balance_dr
3442 ,xba.draft_beginning_balance_dr + xba.period_draft_balance_dr
3443 ,xba.period_draft_balance_dr
3444 )
3445 ,xba.draft_beginning_balance_dr
3446 )
3447 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0)
3448 -( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0) )
3449 )
3453 )
3450 ,1
3451 ,NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0)
3452 - ( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0))
3454 ) --draft_beginning_balance_dr
3455 ,DECODE( gpsnew.period_year
3456 ,gpsbs.period_year
3457 ,NVL2( xba.period_draft_balance_cr
3458 ,NVL2( xba.draft_beginning_balance_cr
3459 ,xba.draft_beginning_balance_cr + xba.period_draft_balance_cr
3460 ,xba.period_draft_balance_cr
3461 )
3462 ,xba.draft_beginning_balance_cr
3463 )
3464 ,DECODE( SIGN ( NVL(xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0)
3465 -( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0) )
3466 )
3467 ,1
3468 ,NVL (xba.draft_beginning_balance_cr, 0) + NVL(xba.period_draft_balance_cr, 0)
3469 - ( NVL(xba.draft_beginning_balance_dr, 0) + NVL(xba.period_draft_balance_dr, 0) )
3470 )
3471 ) --draft_beginning_balance_cr
3472 ,NULL --period_draft_balance_dr
3473 ,NULL --period_draft_balance_cr
3474
3475 ,'N'
3476 ,(SELECT DECODE( MAX(gps2.effective_period_num)
3477 ,NULL
3478 ,'Y'
3479 ,'N'
3480 )
3481 FROM gl_period_statuses gps2
3482 WHERE gps2.ledger_id = ledger_id
3483 AND gps2.application_id = 101
3484 AND gps2.closing_status IN ('O','C','P')
3485 AND gps2.adjustment_period_flag = 'N'
3486 AND gps2.period_year = gpsnew.period_year
3487 AND gps2.effective_period_num < gpsnew.effective_period_num
3488 )
3489 ,l_date
3490 ,l_user_id
3491 ,l_date
3492 ,l_user_id
3493 ,l_login_id
3494 ,l_date
3495 ,l_prog_appl_id
3496 ,l_prog_id
3497 ,NVL(l_req_id, -1)
3498 FROM xla_balance_statuses xbs
3499 ,gl_period_statuses gpsbs
3500 ,xla_control_balances xba
3501 ,gl_period_statuses gpsnew
3502 WHERE xbs.application_id = p_application_id
3503 AND xbs.ledger_id = p_ledger_id
3504 AND xbs.balance_source_code = 'C'
3505 AND xbs.effective_period_num < p_dest_effective_period_num
3506 AND xbs.code_combination_id = p_code_combination_id
3507 AND gpsbs.ledger_id = p_ledger_id
3508 AND gpsbs.application_id = 101
3509 AND gpsbs.effective_period_num = xbs.effective_period_num
3510 AND xba.ledger_id = p_ledger_id
3511 AND xba.application_id = p_application_id
3512 AND xba.code_combination_id = p_code_combination_id
3513 AND xba.party_type_code = p_party_type_code
3514 AND xba.party_id = p_party_id
3515 AND xba.period_name = gpsbs.period_name
3516 AND gpsnew.ledger_id = p_ledger_id
3517 AND gpsnew.application_id = 101
3518 AND gpsnew.closing_status IN ('O', 'C', 'P')
3519 AND gpsnew.adjustment_period_flag = 'N'
3520 AND gpsnew.effective_period_num <= p_dest_effective_period_num
3521 AND gpsnew.effective_period_num >
3522 (
3523 SELECT MAX(effective_period_num)
3524 FROM xla_control_balances xbanew
3525 ,gl_period_statuses gpsint
3526 WHERE xbanew.ledger_id = p_ledger_id
3527 AND xbanew.application_id = p_application_id
3528 AND xbanew.code_combination_id = p_code_combination_id
3529 AND xbanew.party_type_code = p_party_type_code
3530 AND xbanew.party_id = p_party_id
3531 AND xbanew.party_site_id = xba.party_site_id
3532 AND gpsint.ledger_id = p_ledger_id
3533 AND gpsint.application_id = 101
3537
3534 AND gpsint.period_name = xbanew.period_name
3535 )
3536 );
3538 l_row_count := SQL%ROWCOUNT;
3539 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3540 trace
3541 ( p_module => l_log_module
3542 ,p_msg => l_row_count ||
3543 ' xla_control_balances created'
3544 ,p_level => C_LEVEL_STATEMENT
3545 );
3546 END IF;
3547 END IF;
3548
3549 IF NVL(p_balance_source_code, 'A') = 'A'
3550 THEN
3551 INSERT INTO xla_ac_balances xba
3552 ( application_id
3553 ,ledger_id
3554 ,code_combination_id
3555 ,analytical_criterion_code
3556 ,analytical_criterion_type_code
3557 ,amb_context_code
3558 ,ac1
3559 ,ac2
3560 ,ac3
3561 ,ac4
3562 ,ac5
3563 ,period_name
3564 ,period_year
3565 ,beginning_balance_dr
3566 ,beginning_balance_cr
3567 ,period_balance_dr
3568 ,period_balance_cr
3569 ,initial_balance_flag
3570 ,first_period_flag
3571 ,creation_date
3572 ,created_by
3573 ,last_update_date
3574 ,last_updated_by
3575 ,last_update_login
3576 ,program_update_date
3577 ,program_application_id
3578 ,program_id
3579 ,request_id
3580 )
3581 (
3582 SELECT xba.application_id
3583 ,xba.ledger_id
3584 ,xba.code_combination_id
3585 ,xba.analytical_criterion_code
3586 ,xba.analytical_criterion_type_code
3587 ,xba.amb_context_code
3588 ,xba.ac1
3589 ,xba.ac2
3590 ,xba.ac3
3591 ,xba.ac4
3592 ,xba.ac5
3593 ,gpsnew.period_name
3594 ,gpsnew.period_year
3595 --disregarding indentation for readability
3596 ,DECODE( gpsnew.period_year
3597 ,gpsbs.period_year
3598 ,NVL2( xba.period_balance_dr
3599 ,NVL2( xba.beginning_balance_dr
3600 ,xba.beginning_balance_dr + xba.period_balance_dr
3601 ,xba.period_balance_dr
3602 )
3603 ,xba.beginning_balance_dr
3604 )
3605 ,DECODE( SIGN ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
3606 -( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0) )
3607 )
3608 ,1
3609 ,NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0)
3610 - ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0) )
3611 )
3612 ) --beginning_balance_dr
3613 ,DECODE( gpsnew.period_year
3614 ,gpsbs.period_year
3615 ,NVL2( xba.period_balance_cr
3616 ,NVL2( xba.beginning_balance_cr
3617 ,xba.beginning_balance_cr + xba.period_balance_cr
3618 ,xba.period_balance_cr
3619 )
3620 ,xba.beginning_balance_cr
3621 )
3622 ,DECODE( SIGN ( NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
3623 -( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0) )
3624 )
3625 ,1
3626 ,NVL(xba.beginning_balance_cr, 0) + NVL(xba.period_balance_cr, 0)
3627 - ( NVL(xba.beginning_balance_dr, 0) + NVL(xba.period_balance_dr, 0) )
3628 )
3629 ) --beginning_balance_cr
3630 ,NULL --period_balance_dr
3631 ,NULL --period_balance_cr
3632 ,'N'
3633 ,(SELECT DECODE( MAX(gps2.effective_period_num)
3634 ,NULL
3635 ,'Y'
3636 ,'N'
3637 )
3638 FROM gl_period_statuses gps2
3639 WHERE gps2.ledger_id = ledger_id
3640 AND gps2.application_id = 101
3641 AND gps2.closing_status IN ('O','C','P')
3642 AND gps2.adjustment_period_flag = 'N'
3643 AND gps2.period_year = gpsnew.period_year
3644 AND gps2.effective_period_num < gpsnew.effective_period_num
3645 )
3646 ,l_date
3647 ,l_user_id
3648 ,l_date
3649 ,l_user_id
3653 ,l_prog_id
3650 ,l_login_id
3651 ,l_date
3652 ,l_prog_appl_id
3654 ,NVL(l_req_id, -1)
3655 FROM xla_balance_statuses xbs
3656 ,gl_period_statuses gpsbs
3657 ,xla_ac_balances xba
3658 ,gl_period_statuses gpsnew
3659 ,xla_analytical_hdrs_b xbh
3660 WHERE xbs.application_id = p_application_id
3661 AND xbs.ledger_id = p_ledger_id
3662 AND xbs.balance_source_code = 'A'
3663 AND xbs.effective_period_num < p_dest_effective_period_num
3664 AND xbs.code_combination_id = p_code_combination_id
3665 AND gpsbs.ledger_id = p_ledger_id
3666 AND gpsbs.application_id = 101
3667 AND gpsbs.effective_period_num = xbs.effective_period_num
3668 AND xba.ledger_id = p_ledger_id
3669 AND xba.application_id = p_application_id
3670 AND xba.code_combination_id = p_code_combination_id
3671 AND xba.analytical_criterion_code = p_analytical_criterion_code
3672 AND xba.analytical_criterion_type_code = p_anacri_type_code
3673 AND xba.amb_context_code = p_amb_context_code
3674 AND xba.ac1 = p_ac1
3675 AND xba.ac2 (+)= p_ac2
3676 AND xba.ac3 (+)= p_ac3
3677 AND xba.ac4 (+)= p_ac4
3678 AND xba.ac5 (+)= p_ac5
3679 AND xba.period_name = gpsbs.period_name
3680 AND xbh.analytical_criterion_code = xba.analytical_criterion_code
3681 AND xbh.analytical_criterion_type_code = xba.analytical_criterion_type_code
3682 AND xbh.amb_context_code = xba.amb_context_code
3683 AND ( xba.period_year = gpsnew.period_year
3684 OR xbh.year_end_carry_forward_code = 'A'
3685 OR ( xbh.year_end_carry_forward_code = 'B'
3686 AND xbs.account_type IN ('A', 'L', 'O')
3687 )
3688 )
3689 AND gpsnew.ledger_id = p_ledger_id
3690 AND gpsnew.application_id = 101
3691 AND gpsnew.closing_status IN ('O', 'C', 'P')
3692 AND gpsnew.adjustment_period_flag = 'N'
3693 AND gpsnew.effective_period_num <= p_dest_effective_period_num
3694 AND gpsnew.effective_period_num >
3695 (
3696 SELECT MAX(effective_period_num)
3697 FROM xla_ac_balances xbanew
3698 ,gl_period_statuses gpsint
3699 WHERE xbanew.ledger_id = p_ledger_id
3700 AND xbanew.application_id = p_application_id
3701 AND xbanew.code_combination_id = p_code_combination_id
3702 AND gpsint.ledger_id = p_ledger_id
3703 AND gpsint.application_id = 101
3704 AND gpsint.period_name = xbanew.period_name
3705 )
3706 );
3707
3708 l_row_count := SQL%ROWCOUNT;
3709 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3710 trace
3711 ( p_module => l_log_module
3712 ,p_msg => l_row_count ||
3713 ' xla_ac_balances created'
3714 ,p_level => C_LEVEL_STATEMENT
3715 );
3716 END IF;
3717 END IF;
3718
3719 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3720 trace
3721 (p_module => l_log_module
3722 ,p_msg => 'END ' || l_log_module
3723 ,p_level => C_LEVEL_PROCEDURE);
3724 END IF;
3725
3726 RETURN TRUE;
3727
3728 EXCEPTION
3729 WHEN xla_exceptions_pkg.application_exception
3730 THEN
3731 RAISE;
3732 WHEN OTHERS
3733 THEN
3734 xla_exceptions_pkg.raise_message
3735 (p_location => 'xla_balances_pkg.move_identified_bals_forward');
3736 END move_identified_bals_forward;
3737
3738 PROCEDURE build_line_selection_dyn_stmts
3739 ( p_application_id IN INTEGER
3740 ,p_ledger_id IN INTEGER
3741 ,p_event_id IN INTEGER
3742 ,p_accounting_batch_id IN INTEGER
3743 ,p_ae_header_id IN INTEGER
3744 ,p_ae_line_num IN INTEGER
3745 ,p_code_combination_id IN INTEGER
3746 ,p_period_name IN VARCHAR2
3747 ,p_balance_source_code IN VARCHAR2
3748 ,p_balance_flag_pre_update IN VARCHAR2
3749 ,p_balance_flag_post_update IN VARCHAR2
3750 ,p_commit_flag IN VARCHAR2
3751 ,p_entry_locking_dyn_stmt OUT NOCOPY VARCHAR2
3752 ,p_line_selection_dyn_stmt OUT NOCOPY VARCHAR2
3753 ,p_locking_arg_array OUT NOCOPY t_array_varchar -- bug 7551435
3757 )
3754 ,p_lck_bind_var_count OUT NOCOPY INTEGER -- bug 7551435
3755 ,p_selection_arg_array OUT NOCOPY t_array_varchar -- bug 7551435
3756 ,p_ins_bind_var_num OUT NOCOPY INTEGER -- bug 7551435
3758 IS
3759 l_log_module VARCHAR2 (2000); -- bug 7551435
3760 i number; -- bug 7551435
3761
3762 BEGIN
3763
3764 IF g_log_enabled THEN
3765 l_log_module := C_DEFAULT_MODULE||'.build_line_selection_dyn_stmts';
3766 END IF;
3767 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
3768 trace
3769 (p_module => l_log_module
3770 ,p_msg => 'BEGIN ' || l_log_module
3771 ,p_level => C_LEVEL_PROCEDURE);
3772 END IF;
3773
3774 p_lck_bind_var_count:=1;
3775 p_ins_bind_var_num:=1;
3776
3777 p_entry_locking_dyn_stmt :=
3778 ' SELECT 1
3779 FROM xla_ae_headers aeh
3780 ,xla_ae_lines ael
3781 WHERE ael.ae_header_id = aeh.ae_header_id
3782 AND ael.application_id = aeh.application_id
3783 AND aeh.accounting_entry_status_code IN (''D'', ''F'')
3784 ';
3785
3786 -- bug 7551435 begin add bind variables
3787
3788 IF p_balance_source_code IS NULL
3789 THEN
3790 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3791 ' AND (ael.control_balance_flag = :' || p_lck_bind_var_count;
3792 p_locking_arg_array(p_lck_bind_var_count):=p_balance_flag_pre_update;
3793 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3794 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3795 '
3796 OR ael.analytical_balance_flag = :' || p_lck_bind_var_count || ')';
3797 p_locking_arg_array(p_lck_bind_var_count):=p_balance_flag_pre_update;
3798 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3799
3800 ELSIF p_balance_source_code = 'C'
3801 THEN
3802 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3803 '
3804 AND ael.control_balance_flag = :' || p_lck_bind_var_count;
3805 p_locking_arg_array(p_lck_bind_var_count):=p_balance_flag_pre_update;
3806 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3807
3808 ELSIF p_balance_source_code = 'A'
3809 THEN
3810 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3811 '
3812 AND ael.analytical_balance_flag = :' || p_lck_bind_var_count;
3813 p_locking_arg_array(p_lck_bind_var_count):=p_balance_flag_pre_update;
3814 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3815
3816 END IF;
3817
3818 IF p_ledger_id IS NOT NULL
3819 THEN
3820 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3821 ' AND aeh.ledger_id = :'|| p_lck_bind_var_count;
3822
3823 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_ledger_id);
3824
3825 p_lck_bind_var_count:= p_lck_bind_var_count + 1;
3826
3827 IF p_period_name IS NOT NULL
3828 THEN
3829 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3830 ' AND aeh.period_name = :' || p_lck_bind_var_count ;
3831 p_locking_arg_array(p_lck_bind_var_count):=p_period_name;
3832 p_lck_bind_var_count:= p_lck_bind_var_count + 1;
3833
3834
3835 END IF;
3836
3837 IF p_code_combination_id IS NOT NULL
3838 THEN
3839 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3840 ' AND ael.code_combination_id = :'|| p_lck_bind_var_count;
3841
3842 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_code_combination_id);
3843 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3844
3845 END IF;
3846
3847
3848 END IF;
3849
3850 IF p_accounting_batch_id IS NOT NULL
3851 THEN
3852 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3853 ' AND aeh.accounting_batch_id = :'||p_lck_bind_var_count;
3854 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_accounting_batch_id);
3855 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3856
3857 END IF;
3858
3859 IF p_application_id IS NOT NULL
3860 THEN
3861 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3862 '
3863 AND ael.application_id =
3864 :'|| p_lck_bind_var_count;
3865 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_application_id);
3866 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3867
3868 END IF;
3869
3870 IF p_ae_header_id IS NOT NULL
3871 THEN
3872 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3873 ' AND aeh.ae_header_id = :'||p_lck_bind_var_count;
3874 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_ae_header_id);
3875 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3876
3877 END IF;
3878 IF p_event_id IS NOT NULL
3879 THEN
3880 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3881 ' AND aeh.event_id = :'||p_lck_bind_var_count;
3882 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_event_id);
3886
3883 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3884
3885 END IF;
3887 IF p_ae_line_num IS NOT NULL
3888 THEN
3889 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3890 ' AND ael.ae_line_num = :' || p_lck_bind_var_count;
3891 p_locking_arg_array(p_lck_bind_var_count):=to_char(p_ae_line_num);
3892 p_lck_bind_var_count:=p_lck_bind_var_count+1;
3893
3894 END IF;
3895
3896 p_entry_locking_dyn_stmt := p_entry_locking_dyn_stmt ||
3897 ' FOR UPDATE NOWAIT';
3898
3899 p_lck_bind_var_count:=p_lck_bind_var_count-1;
3900
3901 -- bug 7551435 end add bind variables
3902
3903 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
3904 trace
3905 ( p_module => l_log_module
3906 ,p_msg => 'START of Entry locking statement'
3907 ,p_level => C_LEVEL_STATEMENT
3908 );
3909 trace
3910 ( p_module => l_log_module
3911 ,p_msg => SUBSTR(p_entry_locking_dyn_stmt, 1, 1000)
3912 ,p_level => C_LEVEL_STATEMENT
3913 );
3914 trace
3915 ( p_module => l_log_module
3916 ,p_msg => SUBSTR(p_entry_locking_dyn_stmt, 1001, 1000)
3917 ,p_level => C_LEVEL_STATEMENT
3918 );
3919 trace
3920 ( p_module => l_log_module
3921 ,p_msg => SUBSTR(p_entry_locking_dyn_stmt, 2001, 1000)
3922 ,p_level => C_LEVEL_STATEMENT
3923 );
3924 trace
3925 ( p_module => l_log_module
3926 ,p_msg => 'END of Entry locking statement'
3927 ,p_level => C_LEVEL_STATEMENT
3928 );
3929 trace
3930 ( p_module => l_log_module
3931 ,p_msg => 'p_lck_bind_var_count='||p_lck_bind_var_count
3932 ,p_level => C_LEVEL_STATEMENT
3933 );
3934
3935 for i in 1 .. p_lck_bind_var_count
3936 loop
3937 trace
3938 ( p_module => l_log_module
3939 ,p_msg => 'p_locking_arg_array['||i||']='||p_locking_arg_array(i)
3940 ,p_level => C_LEVEL_STATEMENT
3941 );
3942 end loop;
3943
3944
3945
3946
3947 END IF;
3948
3949 p_line_selection_dyn_stmt :=
3950 '
3951 INSERT ALL
3952 WHEN control_balance_flag = ''' || p_balance_flag_pre_update || '''
3953 AND NVL( ''' || p_balance_source_code || ''', ''C'') = ''C''
3954 THEN
3955 INTO xla_bal_ctrl_lines_gt
3956 ( line_rowid
3957 ,ae_header_id
3958 ,ae_line_num
3959 ,application_id
3960 ,ledger_id
3961 ,period_name
3962 ,period_year
3963 ,effective_period_num
3964 ,accounting_entry_status_code
3965 ,code_combination_id
3966 ,party_type_code
3967 ,party_id
3968 ,party_site_id
3969 ,accounted_dr
3970 ,accounted_cr
3971 )
3972 VALUES
3973 ( line_rowid
3974 ,ae_header_id
3975 ,ae_line_num
3976 ,application_id
3977 ,ledger_id
3978 ,period_name
3979 ,period_year
3980 ,effective_period_num
3981 ,accounting_entry_status_code
3982 ,code_combination_id
3983 ,party_type_code
3984 ,party_id
3985 ,NVL(party_site_id, -999)
3986 ,accounted_dr
3987 ,accounted_cr
3988 )
3989
3990 WHEN analytical_balance_flag = ''' || p_balance_flag_pre_update || '''
3991 AND NVL( ''' || p_balance_source_code || ''', ''A'') = ''A''
3992 THEN
3993 INTO xla_bal_anacri_lines_gt
3994 ( line_rowid
3995 ,ae_header_id
3996 ,ae_line_num
3997 ,application_id
3998 ,ledger_id
3999 ,period_name
4000 ,period_year
4001 ,effective_period_num
4002 ,accounting_entry_status_code
4003 ,code_combination_id
4004 ,accounted_dr
4005 ,accounted_cr
4006 )
4007 VALUES
4008 ( line_rowid
4009 ,ae_header_id
4010 ,ae_line_num
4011 ,application_id
4012 ,ledger_id
4013 ,period_name
4014 ,period_year
4015 ,effective_period_num
4016 ,accounting_entry_status_code
4017 ,code_combination_id
4018 ,accounted_dr
4019 ,accounted_cr
4020 )
4021 SELECT ael.ROWID line_rowid
4022 ,aeh.ae_header_id
4023 ,ael.ae_line_num
4024 ,aeh.application_id
4025 ,aeh.ledger_id
4026 ,aeh.period_name
4027 ,gps.period_year
4028 ,gps.effective_period_num
4029 ,aeh.accounting_entry_status_code
4030 ,ael.control_balance_flag
4031 ,ael.analytical_balance_flag
4032 ,ael.code_combination_id
4033 ,ael.party_type_code
4034 ,ael.party_id
4035 ,NVL(ael.party_site_id,-999) party_site_id
4039 ,xla_ae_lines ael
4036 ,ael.accounted_dr
4037 ,ael.accounted_cr
4038 FROM xla_ae_headers aeh
4040 ,gl_period_statuses gps
4041 WHERE ael.ae_header_id = aeh.ae_header_id
4042 AND ael.application_id = aeh.application_id
4043 AND gps.ledger_id = aeh.ledger_id
4044 AND gps.application_id = 101
4045 AND gps.period_name = aeh.period_name
4046 AND aeh.accounting_entry_status_code IN (''D'', ''F'')
4047 -- AND ael.control_balance_flag = ''' || p_balance_flag_pre_update || '''
4048 -- AND NVL( ''' || p_balance_source_code || ''', ''C'') = ''C''
4049 ';
4050
4051
4052 -- bug 7441310 begin add bind variables
4053
4054 IF p_balance_source_code IS NULL
4055 THEN
4056 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4057 ' AND ( ael.control_balance_flag = :' || p_ins_bind_var_num ;
4058 p_selection_arg_array(p_ins_bind_var_num):=p_balance_flag_pre_update;
4059 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4060 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4061
4062 ' OR ael.analytical_balance_flag = :' || p_ins_bind_var_num||') ';
4063 p_selection_arg_array(p_ins_bind_var_num):=p_balance_flag_pre_update;
4064 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4065
4066
4067
4068 ELSIF p_balance_source_code = 'C'
4069 THEN
4070 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4071 '
4072 AND ael.control_balance_flag = :' || p_ins_bind_var_num ;
4073 p_selection_arg_array(p_ins_bind_var_num):=p_balance_flag_pre_update;
4074 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4075
4076
4077 ELSIF p_balance_source_code = 'A'
4078 THEN
4079 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4080 '
4081 AND ael.analytical_balance_flag = :' || p_ins_bind_var_num ;
4082 p_selection_arg_array(p_ins_bind_var_num):=p_balance_flag_pre_update;
4083 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4084
4085
4086 END IF;
4087
4088 IF p_ledger_id IS NOT NULL
4089 THEN
4090 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4091 '
4092 AND aeh.ledger_id = :' || p_ins_bind_var_num;
4093 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_ledger_id);
4094 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4095
4096
4097 IF p_period_name IS NOT NULL
4098 THEN
4099 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4100 ' AND aeh.period_name = :' || p_ins_bind_var_num ;
4101 p_selection_arg_array(p_ins_bind_var_num):=p_period_name;
4102 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4103
4104
4105 END IF;
4106 IF p_code_combination_id IS NOT NULL
4107 THEN
4108 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4109 ' AND ael.code_combination_id = :' || p_ins_bind_var_num;
4110 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_code_combination_id);
4111 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4112
4113
4114 END IF;
4115 END IF;
4116
4117 IF p_application_id IS NOT NULL
4118 THEN
4119 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4120 '
4121 AND ael.application_id = :' || p_ins_bind_var_num;
4122 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_application_id);
4123 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4124
4125
4126 END IF;
4127
4128 IF p_ae_header_id IS NOT NULL
4129 THEN
4130 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4131 ' AND aeh.ae_header_id = :' || p_ins_bind_var_num;
4132 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_ae_header_id);
4133 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4134
4135
4136 END IF;
4137
4138 IF p_event_id IS NOT NULL
4139 THEN
4140 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4141 ' AND aeh.event_id = :' || p_ins_bind_var_num;
4142 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_event_id);
4143 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4144
4145
4146 END IF;
4147
4148 IF p_accounting_batch_id IS NOT NULL
4149 THEN
4150 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4151 ' AND aeh.accounting_batch_id = :' || p_ins_bind_var_num;
4152 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_accounting_batch_id);
4153 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4154
4155
4156 END IF;
4157
4158 IF p_ae_line_num IS NOT NULL
4159 THEN
4160 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4161 ' AND ael.ae_line_num = :' || p_ins_bind_var_num;
4162 p_selection_arg_array(p_ins_bind_var_num):=to_char(p_ae_line_num);
4163 p_ins_bind_var_num:=p_ins_bind_var_num+1;
4164
4165
4166 END IF;
4167 IF p_commit_flag = 'Y'
4168 THEN
4169 p_line_selection_dyn_stmt := p_line_selection_dyn_stmt ||
4173 NULL;
4170 ' AND ROWNUM <= ' || C_BATCH_COMMIT_SIZE;
4171 ELSIF p_commit_flag = 'N'
4172 THEN
4174 ELSE
4175 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
4176 trace
4177 (p_module => l_log_module
4178 ,p_msg => 'EXCEPTION: ' ||
4179 'Invalid value for p_commit_flag: ' || p_commit_flag
4180 ,p_level => C_LEVEL_EXCEPTION
4181 );
4182 END IF;
4183 xla_exceptions_pkg.raise_message
4184 (p_appli_s_name => 'XLA'
4185 ,p_msg_name => 'XLA_COMMON_ERROR'
4186 ,p_token_1 => 'LOCATION'
4187 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
4188 ,p_token_2 => 'ERROR'
4189 ,p_value_2 => 'EXCEPTION: ' ||
4190 'Invalid value for p_commit_flag: ' || p_commit_flag);
4191 END IF;
4192
4193 p_ins_bind_var_num:=p_ins_bind_var_num-1;
4194
4195 -- bug 7441310 end add bind variables
4196
4197 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4198 trace
4199 ( p_module => l_log_module
4200 ,p_msg => 'START of Line Selection statement'
4201 ,p_level => C_LEVEL_STATEMENT
4202 );
4203 trace
4204 ( p_module => l_log_module
4205 ,p_msg => SUBSTR(p_line_selection_dyn_stmt, 1, 1000)
4206 ,p_level => C_LEVEL_STATEMENT
4207 );
4208 trace
4209 ( p_module => l_log_module
4210 ,p_msg => SUBSTR(p_line_selection_dyn_stmt, 1001, 1000)
4211 ,p_level => C_LEVEL_STATEMENT
4212 );
4213 trace
4214 ( p_module => l_log_module
4215 ,p_msg => SUBSTR(p_line_selection_dyn_stmt, 2001, 1000)
4216 ,p_level => C_LEVEL_STATEMENT
4217 );
4218 trace
4219 ( p_module => l_log_module
4220 ,p_msg => 'END of Line Selection statement'
4221 ,p_level => C_LEVEL_STATEMENT
4222 );
4223 trace
4224 ( p_module => l_log_module
4225 ,p_msg => 'p_ins_bind_var_num='||p_ins_bind_var_num
4226 ,p_level => C_LEVEL_STATEMENT
4227 );
4228
4229
4230 for i in 1 .. p_lck_bind_var_count
4231 loop
4232 trace
4233 ( p_module => l_log_module
4234 ,p_msg => 'p_selection_arg_array['||i||']='||p_selection_arg_array(i)
4235 ,p_level => C_LEVEL_STATEMENT
4236 );
4237 end loop;
4238
4239
4240
4241 END IF;
4242
4243 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4244 trace
4245 (p_module => l_log_module
4246 ,p_msg => 'END ' || l_log_module
4247 ,p_level => C_LEVEL_PROCEDURE);
4248 END IF;
4249
4250 RETURN;
4251
4252 EXCEPTION
4253 WHEN le_resource_busy
4254 THEN
4255 IF (C_LEVEL_ERROR >= g_log_level) THEN
4256 trace
4257 ( p_module => l_log_module
4258 ,p_msg => 'cannot lock accounting entry records'
4259 ,p_level => C_LEVEL_ERROR
4260 );
4261 END IF;
4262 RAISE;
4263 WHEN xla_exceptions_pkg.application_exception
4264 THEN
4265 RAISE;
4266 WHEN OTHERS
4267 THEN
4268 xla_exceptions_pkg.raise_message
4269 (p_location => 'xla_balances_pkg.build_line_selection_dyn_stmts');
4270 END build_line_selection_dyn_stmts;
4271
4272
4273 FUNCTION load_balance_temp_tables
4274 ( p_application_id IN INTEGER
4275 ,p_request_id IN INTEGER
4276 ,p_entity_id IN INTEGER
4277 ,p_called_by_flag IN VARCHAR2
4278 ,p_balance_flag_pre_update IN VARCHAR2
4279 ,p_entry_locking_dyn_stmt IN VARCHAR2
4280 ,p_line_selection_dyn_stmt IN VARCHAR2
4281 ,p_locking_arg_array IN t_array_varchar
4282 ,p_lck_bind_var_count IN INTEGER
4283 ,p_selection_arg_array IN t_array_varchar
4284 ,p_ins_bind_var_num IN INTEGER
4285 )
4286 RETURN INTEGER
4287 IS
4288
4289 CURSOR lc_lock_entries_for_event_API
4290 ( p_application_id INTEGER
4291 ,p_balance_flag_pre_update VARCHAR2
4292 )
4293 IS
4294 SELECT ael.ROWID line_rowid
4295 ,aeh.ae_header_id
4296 ,ael.ae_line_num
4297 ,aeh.application_id
4298 ,aeh.ledger_id
4299 ,aeh.period_name
4300 ,gps.period_year
4301 ,gps.effective_period_num
4302 ,aeh.accounting_entry_status_code
4303 ,ael.control_balance_flag
4304 ,ael.analytical_balance_flag
4305 ,ael.code_combination_id
4306 ,ael.party_type_code
4307 ,ael.party_id
4308 ,ael.party_site_id
4309 ,ael.accounted_dr
4310 ,ael.accounted_cr
4311 FROM xla_events xev
4312 ,xla_events_gt xeg
4313 ,xla_ae_headers aeh
4314 ,xla_ae_lines ael
4315 ,gl_period_statuses gps
4316 WHERE xev.application_id = p_application_id
4320 AND aeh.event_id = xev.event_id
4317 AND xeg.event_id = xev.event_id
4318 AND xeg.application_id = xev.application_id
4319 AND xev.process_status_code in ('D', 'I')
4321 AND aeh.application_id = xev.application_id
4322 AND ael.ae_header_id = aeh.ae_header_id
4323 AND ael.application_id = aeh.application_id
4324 AND gps.ledger_id = aeh.ledger_id
4325 AND gps.application_id = 101
4326 AND gps.period_name = aeh.period_name
4327 AND aeh.accounting_entry_status_code IN ('D', 'F')
4328 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4329 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4330 )
4331 FOR UPDATE OF ael.ae_line_num NOWAIT;
4332
4333 CURSOR lc_lock_entries_for_request_id
4334 ( p_application_id INTEGER
4335 ,p_request_id INTEGER
4336 ,p_balance_flag_pre_update VARCHAR2
4337 )
4338 IS
4339 SELECT ael.ROWID line_rowid
4340 ,aeh.ae_header_id
4341 ,ael.ae_line_num
4342 ,aeh.application_id
4343 ,aeh.ledger_id
4344 ,aeh.period_name
4345 ,gps.period_year
4346 ,gps.effective_period_num
4347 ,aeh.accounting_entry_status_code
4348 ,ael.control_balance_flag
4349 ,ael.analytical_balance_flag
4350 ,ael.code_combination_id
4351 ,ael.party_type_code
4352 ,ael.party_id
4353 ,ael.party_site_id
4354 ,ael.accounted_dr
4355 ,ael.accounted_cr
4356 FROM xla_events xev
4357 ,xla_ae_headers aeh
4358 ,xla_ae_lines ael
4359 ,gl_period_statuses gps
4360 WHERE xev.request_id = p_request_id
4361 AND xev.application_id = p_application_id
4362 AND xev.process_status_code IN ('D', 'P')
4363 AND aeh.event_id = xev.event_id
4364 AND aeh.application_id = xev.application_id
4365 AND ael.ae_header_id = aeh.ae_header_id
4366 AND ael.application_id = aeh.application_id
4367 AND gps.ledger_id = aeh.ledger_id
4368 AND gps.application_id = 101
4369 AND gps.period_name = aeh.period_name
4370 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4371 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4372 )
4373 FOR UPDATE OF ael.ae_line_num NOWAIT;
4374
4375
4376 CURSOR lc_lock_entries_for_entity_id
4377 ( p_application_id INTEGER
4378 ,p_entity_id INTEGER
4379 ,p_balance_flag_pre_update VARCHAR2
4380 )
4381 IS
4382 SELECT ael.ROWID line_rowid
4383 ,aeh.ae_header_id
4384 ,ael.ae_line_num
4385 ,aeh.application_id
4386 ,aeh.ledger_id
4387 ,aeh.period_name
4388 ,gps.period_year
4389 ,gps.effective_period_num
4390 ,aeh.accounting_entry_status_code
4391 ,ael.control_balance_flag
4392 ,ael.analytical_balance_flag
4393 ,ael.code_combination_id
4394 ,ael.party_type_code
4395 ,ael.party_id
4396 ,ael.party_site_id
4397 ,ael.accounted_dr
4398 ,ael.accounted_cr
4399 FROM xla_ae_headers aeh
4400 ,xla_ae_lines ael
4401 ,gl_period_statuses gps
4402 WHERE aeh.application_id = p_application_id
4403 AND aeh.entity_id = p_entity_id
4404 AND ael.ae_header_id = aeh.ae_header_id
4405 AND ael.application_id = aeh.application_id
4406 AND gps.ledger_id = aeh.ledger_id
4407 AND gps.application_id = 101
4408 AND gps.period_name = aeh.period_name
4409 AND aeh.accounting_entry_status_code IN ('D', 'F')
4410 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4411 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4412 )
4413 FOR UPDATE OF ael.ae_line_num NOWAIT;
4414
4415 l_row_count NUMBER;
4416 l_log_module VARCHAR2 (2000);
4417
4418 BEGIN
4419
4420 IF g_log_enabled THEN
4421 l_log_module := C_DEFAULT_MODULE||'.load_balance_temp_tables';
4422 END IF;
4423 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4424 trace
4425 (p_module => l_log_module
4426 ,p_msg => 'BEGIN ' || l_log_module
4427 ,p_level => C_LEVEL_PROCEDURE);
4428 END IF;
4429
4430 --if temp tabs are empty this will not take long
4431 DELETE
4432 FROM xla_bal_ctrl_lines_gt;
4433
4434 DELETE
4435 FROM xla_bal_anacri_lines_gt;
4436
4437 -- if it is called by bulk event API
4438 IF p_called_by_flag = 'E' THEN
4439 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4440 trace
4441 (p_module => l_log_module
4442 ,p_msg => 'p_called_by_flag = E '
4443 ,p_level => C_LEVEL_PROCEDURE);
4444 END IF;
4445
4446 OPEN lc_lock_entries_for_event_API
4450 --close the cursor
4447 ( p_application_id => p_application_id
4448 ,p_balance_flag_pre_update => p_balance_flag_pre_update
4449 );
4451 CLOSE lc_lock_entries_for_event_API;
4452
4453 --insert into xla_bal_ctrl_lines_gt and xla_bal_anacri_lines_gt
4454 INSERT ALL
4455 WHEN control_balance_flag = p_balance_flag_pre_update
4456 THEN
4457 INTO xla_bal_ctrl_lines_gt
4458 ( line_rowid
4459 ,ae_header_id
4460 ,ae_line_num
4461 ,application_id
4462 ,ledger_id
4463 ,period_name
4464 ,period_year
4465 ,effective_period_num
4466 ,accounting_entry_status_code
4467 ,code_combination_id
4468 ,party_type_code
4469 ,party_id
4470 ,party_site_id
4471 ,accounted_dr
4472 ,accounted_cr
4473 )
4474 VALUES
4475 ( line_rowid
4476 ,ae_header_id
4477 ,ae_line_num
4478 ,application_id
4479 ,ledger_id
4480 ,period_name
4481 ,period_year
4482 ,effective_period_num
4483 ,accounting_entry_status_code
4484 ,code_combination_id
4485 ,party_type_code
4486 ,party_id
4487 ,party_site_id
4488 ,accounted_dr
4489 ,accounted_cr
4490 )
4491 WHEN analytical_balance_flag = p_balance_flag_pre_update
4492 THEN
4493 INTO xla_bal_anacri_lines_gt
4494 ( line_rowid
4495 ,ae_header_id
4496 ,ae_line_num
4497 ,application_id
4498 ,ledger_id
4499 ,period_name
4500 ,period_year
4501 ,effective_period_num
4502 ,accounting_entry_status_code
4503 ,code_combination_id
4504 ,accounted_dr
4505 ,accounted_cr
4506 )
4507 VALUES
4508 ( line_rowid
4509 ,ae_header_id
4510 ,ae_line_num
4511 ,application_id
4512 ,ledger_id
4513 ,period_name
4514 ,period_year
4515 ,effective_period_num
4516 ,accounting_entry_status_code
4517 ,code_combination_id
4518 ,accounted_dr
4519 ,accounted_cr
4520 )
4521 SELECT ael.ROWID line_rowid
4522 ,aeh.ae_header_id
4523 ,ael.ae_line_num
4524 ,aeh.application_id
4525 ,aeh.ledger_id
4526 ,aeh.period_name
4527 ,gps.period_year
4528 ,gps.effective_period_num
4529 ,aeh.accounting_entry_status_code
4530 ,ael.control_balance_flag
4531 ,ael.analytical_balance_flag
4532 ,ael.code_combination_id
4533 ,ael.party_type_code
4534 ,ael.party_id
4535 ,NVL(ael.party_site_id,-999) party_site_id
4536 ,ael.accounted_dr
4537 ,ael.accounted_cr
4538 FROM xla_events_gt xeg
4539 ,xla_events xe
4540 ,xla_ae_headers aeh
4541 ,xla_ae_lines ael
4542 ,gl_period_statuses gps
4543 WHERE xeg.application_id = p_application_id
4544 AND aeh.application_id = xeg.application_id
4545 AND aeh.event_id = xeg.event_id
4546 AND xe.event_id = xeg.event_id
4547 AND xe.application_id = xeg.application_id
4548 AND xe.process_status_code in ('D', 'I')
4549 AND ael.ae_header_id = aeh.ae_header_id
4550 AND ael.application_id = aeh.application_id
4551 AND gps.ledger_id = aeh.ledger_id
4552 AND gps.application_id = 101
4553 AND gps.period_name = aeh.period_name
4554 AND aeh.accounting_entry_status_code IN ('D', 'F')
4555 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4556 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4557 );
4558
4559 --If p_request_id is not null
4560 ELSIF p_request_id IS NOT NULL
4561 THEN
4562 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4563 trace
4564 (p_module => l_log_module
4565 ,p_msg => 'p_request_id IS NOT NULL'
4566 ,p_level => C_LEVEL_PROCEDURE);
4567 END IF;
4568
4569 --Open the corresponding cursor for locking the lines
4570 OPEN lc_lock_entries_for_request_id
4571 ( p_application_id => p_application_id
4572 ,p_request_id => p_request_id
4573 ,p_balance_flag_pre_update => p_balance_flag_pre_update
4574 );
4575 --close the cursor
4576 CLOSE lc_lock_entries_for_request_id;
4577
4578 --insert into xla_bal_ctrl_lines_gt
4579 INSERT ALL
4580 WHEN control_balance_flag = p_balance_flag_pre_update
4581 THEN
4582 INTO xla_bal_ctrl_lines_gt
4583 ( line_rowid
4584 ,ae_header_id
4585 ,ae_line_num
4586 ,application_id
4587 ,ledger_id
4588 ,period_name
4589 ,period_year
4590 ,effective_period_num
4594 ,party_id
4591 ,accounting_entry_status_code
4592 ,code_combination_id
4593 ,party_type_code
4595 ,party_site_id
4596 ,accounted_dr
4597 ,accounted_cr
4598 )
4599 VALUES
4600 ( line_rowid
4601 ,ae_header_id
4602 ,ae_line_num
4603 ,application_id
4604 ,ledger_id
4605 ,period_name
4606 ,period_year
4607 ,effective_period_num
4608 ,accounting_entry_status_code
4609 ,code_combination_id
4610 ,party_type_code
4611 ,party_id
4612 ,party_site_id
4613 ,accounted_dr
4614 ,accounted_cr
4615 )
4616 WHEN analytical_balance_flag = p_balance_flag_pre_update
4617 THEN
4618 INTO xla_bal_anacri_lines_gt
4619 ( line_rowid
4620 ,ae_header_id
4621 ,ae_line_num
4622 ,application_id
4623 ,ledger_id
4624 ,period_name
4625 ,period_year
4626 ,effective_period_num
4627 ,accounting_entry_status_code
4628 ,code_combination_id
4629 ,accounted_dr
4630 ,accounted_cr
4631 )
4632 VALUES
4633 ( line_rowid
4634 ,ae_header_id
4635 ,ae_line_num
4636 ,application_id
4637 ,ledger_id
4638 ,period_name
4639 ,period_year
4640 ,effective_period_num
4641 ,accounting_entry_status_code
4642 ,code_combination_id
4643 ,accounted_dr
4644 ,accounted_cr
4645 )
4646
4647 SELECT ael.ROWID line_rowid
4648 ,aeh.ae_header_id
4649 ,ael.ae_line_num
4650 ,aeh.application_id
4651 ,aeh.ledger_id
4652 ,aeh.period_name
4653 ,gps.period_year
4654 ,gps.effective_period_num
4655 ,aeh.accounting_entry_status_code
4656 ,ael.control_balance_flag
4657 ,ael.analytical_balance_flag
4658 ,ael.code_combination_id
4659 ,ael.party_type_code
4660 ,ael.party_id
4661 ,NVL(ael.party_site_id,-999) party_site_id
4662 ,ael.accounted_dr
4663 ,ael.accounted_cr
4664 FROM xla_events xev
4665 ,xla_ae_headers aeh
4666 ,xla_ae_lines ael
4667 ,gl_period_statuses gps
4668 WHERE xev.request_id = p_request_id
4669 AND xev.application_id = p_application_id
4670 AND xev.process_status_code IN ('D', 'P')
4671 AND aeh.application_id = xev.application_id
4672 AND aeh.event_id = xev.event_id
4673 AND ael.ae_header_id = aeh.ae_header_id
4674 AND ael.application_id = aeh.application_id
4675 AND gps.ledger_id = aeh.ledger_id
4676 AND gps.application_id = 101
4677 AND gps.period_name = aeh.period_name
4678 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4679 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4680 );
4681 --If p_entity_id is not null
4682 ELSIF p_entity_id IS NOT NULL
4683 THEN
4684 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4685 trace
4686 (p_module => l_log_module
4687 ,p_msg => 'p_entity_id IS NOT NULL'
4688 ,p_level => C_LEVEL_PROCEDURE);
4689 END IF;
4690
4691 --Open the corresponding cursor for locking the lines
4692 OPEN lc_lock_entries_for_entity_id
4693 ( p_application_id => p_application_id
4694 ,p_entity_id => p_entity_id
4695 ,p_balance_flag_pre_update => p_balance_flag_pre_update
4696 );
4697 --close the cursor
4698 CLOSE lc_lock_entries_for_entity_id;
4699
4700 --insert into xla_bal_ctrl_lines_gt and xla_bal_anacri_lines_gt
4701 INSERT ALL
4702 WHEN control_balance_flag = p_balance_flag_pre_update
4703 THEN
4704 INTO xla_bal_ctrl_lines_gt
4705 ( line_rowid
4706 ,ae_header_id
4707 ,ae_line_num
4708 ,application_id
4709 ,ledger_id
4710 ,period_name
4711 ,period_year
4712 ,effective_period_num
4713 ,accounting_entry_status_code
4714 ,code_combination_id
4715 ,party_type_code
4716 ,party_id
4717 ,party_site_id
4718 ,accounted_dr
4719 ,accounted_cr
4720 )
4721 VALUES
4722 ( line_rowid
4723 ,ae_header_id
4724 ,ae_line_num
4725 ,application_id
4726 ,ledger_id
4727 ,period_name
4728 ,period_year
4729 ,effective_period_num
4730 ,accounting_entry_status_code
4731 ,code_combination_id
4732 ,party_type_code
4733 ,party_id
4734 ,party_site_id
4735 ,accounted_dr
4736 ,accounted_cr
4737 )
4738 WHEN analytical_balance_flag = p_balance_flag_pre_update
4742 ,ae_header_id
4739 THEN
4740 INTO xla_bal_anacri_lines_gt
4741 ( line_rowid
4743 ,ae_line_num
4744 ,application_id
4745 ,ledger_id
4746 ,period_name
4747 ,period_year
4748 ,effective_period_num
4749 ,accounting_entry_status_code
4750 ,code_combination_id
4751 ,accounted_dr
4752 ,accounted_cr
4753 )
4754 VALUES
4755 ( line_rowid
4756 ,ae_header_id
4757 ,ae_line_num
4758 ,application_id
4759 ,ledger_id
4760 ,period_name
4761 ,period_year
4762 ,effective_period_num
4763 ,accounting_entry_status_code
4764 ,code_combination_id
4765 ,accounted_dr
4766 ,accounted_cr
4767 )
4768
4769 SELECT ael.ROWID line_rowid
4770 ,aeh.ae_header_id
4771 ,ael.ae_line_num
4772 ,aeh.application_id
4773 ,aeh.ledger_id
4774 ,aeh.period_name
4775 ,gps.period_year
4776 ,gps.effective_period_num
4777 ,aeh.accounting_entry_status_code
4778 ,ael.control_balance_flag
4779 ,ael.analytical_balance_flag
4780 ,ael.code_combination_id
4781 ,ael.party_type_code
4782 ,ael.party_id
4783 ,NVL(ael.party_site_id,-999) party_site_id
4784 ,ael.accounted_dr
4785 ,ael.accounted_cr
4786 FROM xla_ae_headers aeh
4787 ,xla_ae_lines ael
4788 ,gl_period_statuses gps
4789 WHERE aeh.application_id = p_application_id
4790 AND aeh.entity_id = p_entity_id
4791 AND ael.ae_header_id = aeh.ae_header_id
4792 AND ael.application_id = aeh.application_id
4793 AND gps.ledger_id = aeh.ledger_id
4794 AND gps.application_id = 101
4795 AND gps.period_name = aeh.period_name
4796 AND aeh.accounting_entry_status_code IN ('D', 'F')
4797 AND ( ael.control_balance_flag = p_balance_flag_pre_update
4798 OR ael.analytical_balance_flag = p_balance_flag_pre_update
4799 );
4800 -- bug 7441310 begin add bind variables
4801
4802 --DO NOT MOVE THIS AFTER THE TRACE CODE WHICH AFFECTS SQL%ROWCOUNT
4803 l_row_count := SQL%ROWCOUNT;
4804 --else (all other cases where we need a dynamic statement)
4805 ELSE
4806 --execute immediate the entry locking statement
4807 if p_lck_bind_var_count = 1 then
4808 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1);
4809 else
4810 if p_lck_bind_var_count = 2 then
4811 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2);
4812 else
4813 if p_lck_bind_var_count = 3 then
4814 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3);
4815 else
4816 if p_lck_bind_var_count = 4 then
4817 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3),
4818 p_locking_arg_array(4);
4819 else
4820 if p_lck_bind_var_count = 5 then
4821 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3),
4822 p_locking_arg_array(4),p_locking_arg_array(5);
4823 else
4824 if p_lck_bind_var_count = 6 then
4825 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3),
4826 p_locking_arg_array(4),p_locking_arg_array(5),p_locking_arg_array(6);
4827 else
4828 if p_lck_bind_var_count = 7 then
4829 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3),
4830 p_locking_arg_array(4),p_locking_arg_array(5),p_locking_arg_array(6),p_locking_arg_array(7);
4831 else
4832 if p_lck_bind_var_count = 8 then
4833 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),p_locking_arg_array(2),p_locking_arg_array(3),
4834 p_locking_arg_array(4),p_locking_arg_array(5),p_locking_arg_array(6),p_locking_arg_array(7),
4835 p_locking_arg_array(8);
4836 else
4837 if p_lck_bind_var_count = 9 then
4838 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),
4839 p_locking_arg_array(2),p_locking_arg_array(3),
4840 p_locking_arg_array(4),p_locking_arg_array(5),p_locking_arg_array(6),
4841 p_locking_arg_array(7),p_locking_arg_array(8),p_locking_arg_array(9);
4842 else
4843 if p_lck_bind_var_count = 9 then
4844 EXECUTE IMMEDIATE p_entry_locking_dyn_stmt using p_locking_arg_array(1),
4845 p_locking_arg_array(2),p_locking_arg_array(3),
4849 end if;
4846 p_locking_arg_array(4),p_locking_arg_array(5),p_locking_arg_array(6),
4847 p_locking_arg_array(7),p_locking_arg_array(8),p_locking_arg_array(9),
4848 p_locking_arg_array(10);
4850 end if;
4851 end if;
4852 end if;
4853 end if;
4854 end if;
4855 end if;
4856 end if;
4857 end if;
4858 end if;
4859
4860 -- bug 7441310 end add bind variables
4861
4862 IF (C_LEVEL_EVENT >= g_log_level) THEN
4863 trace
4864 (p_module => l_log_module
4865 ,p_msg => 'Entries locked'
4866 ,p_level => C_LEVEL_EVENT
4867 );
4868 END IF;
4869
4870 -- bug 7441310 begin add bind variables
4871
4872 --execute immediate the statement for filling the temp tabs
4873
4874 if p_ins_bind_var_num = 1 then
4875 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1);
4876 else
4877 if p_ins_bind_var_num = 2 then
4878 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2);
4879 else
4880 if p_ins_bind_var_num = 3 then
4881 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3);
4882 else
4883 if p_ins_bind_var_num = 4 then
4884 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4885 p_selection_arg_array(4);
4886 else
4887 if p_ins_bind_var_num = 5 then
4888 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4889 p_selection_arg_array(4),p_selection_arg_array(5);
4890 else
4891 if p_ins_bind_var_num = 6 then
4892 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4893 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6);
4894 else
4895 if p_ins_bind_var_num = 7 then
4896 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4897 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),p_selection_arg_array(7);
4898 else
4899 if p_ins_bind_var_num = 8 then
4900 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4901 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),p_selection_arg_array(7),p_selection_arg_array(8);
4902 else
4903 if p_ins_bind_var_num = 9 then
4904 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),
4905 p_selection_arg_array(2),p_selection_arg_array(3),
4906 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),
4907 p_selection_arg_array(7),p_selection_arg_array(8),p_selection_arg_array(9);
4908 else
4909 if p_ins_bind_var_num = 10 then
4910 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),p_selection_arg_array(2),p_selection_arg_array(3),
4911 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),p_selection_arg_array(7),p_selection_arg_array(8),
4912 p_selection_arg_array(9);
4913 else
4914 if p_ins_bind_var_num = 11 then
4915 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),
4916 p_selection_arg_array(2),p_selection_arg_array(3),
4917 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),
4918 p_selection_arg_array(7),p_selection_arg_array(8),p_selection_arg_array(9),
4919 p_selection_arg_array(10),p_selection_arg_array(11);
4920 else
4921 if p_ins_bind_var_num = 11 then
4922 EXECUTE IMMEDIATE p_line_selection_dyn_stmt using p_selection_arg_array(1),
4923 p_selection_arg_array(2),p_selection_arg_array(3),
4924 p_selection_arg_array(4),p_selection_arg_array(5),p_selection_arg_array(6),
4925 p_selection_arg_array(7),p_selection_arg_array(8),p_selection_arg_array(9),
4926 p_selection_arg_array(10),p_selection_arg_array(11),
4927 p_selection_arg_array(12);
4928 end if;
4929 end if;
4930 end if;
4934 end if;
4931 end if;
4932 end if;
4933 end if;
4935 end if;
4936 end if;
4937 end if;
4938 end if;
4939 end if;
4940 -- bug 7441310 end add bind variables
4941
4942 --DO NOT MOVE THIS AFTER THE TRACE CODE WHICH AFFECTS SQL%ROWCOUNT
4943 l_row_count := SQL%ROWCOUNT;
4944
4945 IF (C_LEVEL_EVENT >= g_log_level) THEN
4946 trace
4947 (p_module => l_log_module
4948 ,p_msg => 'Entries selected'
4949 ,p_level => C_LEVEL_EVENT
4950 );
4951 END IF;
4952 END IF;
4953
4954 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
4955 trace
4956 ( p_module => l_log_module
4957 ,p_msg => l_row_count
4958 || ' lines inserted in temp tables. '
4959 ,p_level => C_LEVEL_STATEMENT
4960 );
4961 END IF;
4962
4963 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
4964 trace
4965 (p_module => l_log_module
4966 ,p_msg => 'END ' || l_log_module
4967 ,p_level => C_LEVEL_PROCEDURE);
4968 END IF;
4969
4970 RETURN l_row_count;
4971
4972 EXCEPTION
4973 WHEN le_resource_busy
4974 THEN
4975 IF (C_LEVEL_ERROR >= g_log_level) THEN
4976 trace
4977 (p_module => l_log_module
4978 ,p_msg => 'cannot lock accounting entry records'
4979 ,p_level => C_LEVEL_ERROR
4980 );
4981 END IF;
4982 RAISE;
4983 WHEN xla_exceptions_pkg.application_exception
4984 THEN
4985 RAISE;
4986 WHEN OTHERS
4987 THEN
4988 xla_exceptions_pkg.raise_message
4989 (p_location => 'xla_balances_pkg.load_balance_temp_tables');
4990 END load_balance_temp_tables;
4991
4992
4993
4994 FUNCTION load_alyt_secondary_temp_tabs
4995 ( p_operation_code IN VARCHAR2 --'F' Finalize
4996 --'A' Add
4997 --'R' Remove
4998 )
4999 RETURN INTEGER
5000 IS
5001 l_row_count NUMBER;
5002
5003 l_log_module VARCHAR2 (2000);
5004
5005 BEGIN
5006 IF g_log_enabled THEN
5007 l_log_module := C_DEFAULT_MODULE||'.load_alyt_secondary_temp_tabs';
5008 END IF;
5009 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5010 trace
5011 (p_module => l_log_module
5012 ,p_msg => 'BEGIN ' || l_log_module
5013 ,p_level => C_LEVEL_PROCEDURE);
5014 END IF;
5015
5016 --if temp tabs are empty this will not take long
5017 DELETE
5018 FROM xla_bal_ac_ctrbs_gt;
5019
5020 IF p_operation_code = 'F'
5021 THEN
5022 INSERT
5023 INTO xla_bal_ac_ctrbs_gt
5024 ( application_id
5025 ,ledger_id
5026 ,period_name
5027 ,period_year
5028 ,effective_period_num
5029 ,code_combination_id
5030 ,analytical_criterion_code
5031 ,analytical_criterion_type_code
5032 ,amb_context_code
5033 ,ac1
5034 ,ac2
5035 ,ac3
5036 ,ac4
5037 ,ac5
5038 ,contribution_dr
5039 ,contribution_cr
5040 ,balance_status_eff_per_num
5041 ,account_type
5042 )
5043 (
5044 SELECT xbct.application_id
5045 ,xbct.ledger_id
5046 ,xbct.period_name
5047 ,xbct.period_year
5048 ,xbct.effective_period_num
5049 ,xbct.code_combination_id
5050 ,xad.analytical_criterion_code
5051 ,xad.analytical_criterion_type_code
5052 ,xad.amb_context_code
5053 ,xad.ac1
5054 ,xad.ac2
5055 ,xad.ac3
5056 ,xad.ac4
5057 ,xad.ac5
5058 ,SUM(xbct.accounted_dr) contribution_dr
5059 ,SUM(xbct.accounted_cr) contribution_cr
5060 ,xbct.balance_status_eff_per_num
5061 ,xbct.account_type
5062 FROM xla_bal_anacri_lines_gt xbct
5063 ,xla_ae_line_acs xad
5064 WHERE xad.ae_header_id = xbct.ae_header_id
5065 AND xad.ae_line_num = xbct.ae_line_num
5066 GROUP BY xbct.application_id
5067 ,xbct.ledger_id
5068 ,xbct.effective_period_num
5069 ,xbct.period_name
5070 ,xbct.period_year
5071 ,xbct.balance_status_eff_per_num
5072 ,xbct.code_combination_id
5073 ,xad.analytical_criterion_code
5074 ,xad.analytical_criterion_type_code
5075 ,xad.amb_context_code
5076 ,xad.ac1
5077 ,xad.ac2
5078 ,xad.ac3
5079 ,xad.ac4
5080 ,xad.ac5
5081 ,xbct.balance_status_eff_per_num
5082 ,xbct.balance_status_code
5083 ,xbct.account_type
5084 );
5088 trace
5085 l_row_count := SQL%ROWCOUNT;
5086
5087 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5089 (p_module => l_log_module
5090 ,p_msg => l_row_count
5091 || ' inserted into xla_bal_ac_ctrbs_gt'
5092 ,p_level => C_LEVEL_STATEMENT
5093 );
5094 END IF;
5095
5096 ELSIF p_operation_code ='A'
5097 THEN
5098 INSERT
5099 INTO xla_bal_ac_ctrbs_gt
5100 ( application_id
5101 ,ledger_id
5102 ,period_name
5103 ,period_year
5104 ,effective_period_num
5105 ,code_combination_id
5106 ,analytical_criterion_code
5107 ,analytical_criterion_type_code
5108 ,amb_context_code
5109 ,ac1
5110 ,ac2
5111 ,ac3
5112 ,ac4
5113 ,ac5
5114 ,contribution_dr
5115 ,contribution_cr
5116 ,balance_status_eff_per_num
5117 ,account_type
5118 )
5119 (
5120 SELECT xbct.application_id
5121 ,xbct.ledger_id
5122 ,xbct.period_name
5123 ,xbct.period_year
5124 ,xbct.effective_period_num
5125 ,xbct.code_combination_id
5126 ,xad.analytical_criterion_code
5127 ,xad.analytical_criterion_type_code
5128 ,xad.amb_context_code
5129 ,xad.ac1
5130 ,xad.ac2
5131 ,xad.ac3
5132 ,xad.ac4
5133 ,xad.ac5
5134 ,SUM(DECODE( xbct.accounting_entry_status_code
5135 ,'F'
5136 ,xbct.accounted_dr
5137 ,NULL
5138 )
5139 ) contribution_dr
5140 ,SUM(DECODE( xbct.accounting_entry_status_code
5141 ,'F'
5142 ,xbct.accounted_cr
5143 ,NULL
5144 )
5145 ) contribution_cr
5146 ,xbct.balance_status_eff_per_num
5147 ,xbct.account_type
5148 FROM xla_bal_anacri_lines_gt xbct
5149 ,xla_ae_line_acs xad
5150 WHERE xad.ae_header_id = xbct.ae_header_id
5151 AND xad.ae_line_num = xbct.ae_line_num
5152 GROUP BY xbct.application_id
5153 ,xbct.ledger_id
5154 ,xbct.effective_period_num
5155 ,xbct.period_name
5156 ,xbct.period_year
5157 ,xbct.balance_status_eff_per_num
5158 ,xbct.code_combination_id
5159 ,xad.analytical_criterion_code
5160 ,xad.analytical_criterion_type_code
5161 ,xad.amb_context_code
5162 ,xad.ac1
5163 ,xad.ac2
5164 ,xad.ac3
5165 ,xad.ac4
5166 ,xad.ac5
5167 ,xbct.balance_status_eff_per_num
5168 ,xbct.balance_status_code
5169 ,xbct.account_type
5170 );
5171 l_row_count := SQL%ROWCOUNT;
5172 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5173 trace
5174 (p_module => l_log_module
5175 ,p_msg => l_row_count
5176 || ' inserted into xla_bal_ac_ctrbs_gt'
5177 ,p_level => C_LEVEL_STATEMENT
5178 );
5179 END IF;
5180 ELSIF p_operation_code ='R'
5181 THEN
5182 INSERT
5183 INTO xla_bal_ac_ctrbs_gt
5184 ( application_id
5185 ,ledger_id
5186 ,period_name
5187 ,period_year
5188 ,effective_period_num
5189 ,code_combination_id
5190 ,analytical_criterion_code
5191 ,analytical_criterion_type_code
5192 ,amb_context_code
5193 ,ac1
5194 ,ac2
5195 ,ac3
5196 ,ac4
5197 ,ac5
5198 ,contribution_dr
5199 ,contribution_cr
5200 ,balance_status_eff_per_num
5201 ,account_type
5202 )
5203 (
5204 SELECT xbct.application_id
5205 ,xbct.ledger_id
5206 ,xbct.period_name
5207 ,xbct.period_year
5208 ,xbct.effective_period_num
5209 ,xbct.code_combination_id
5210 ,xad.analytical_criterion_code
5211 ,xad.analytical_criterion_type_code
5212 ,xad.amb_context_code
5213 ,xad.ac1
5214 ,xad.ac2
5215 ,xad.ac3
5216 ,xad.ac4
5217 ,xad.ac5
5218 ,SUM(DECODE( xbct.accounting_entry_status_code
5219 ,'F'
5220 ,xbct.accounted_dr
5224 ,SUM(DECODE( xbct.accounting_entry_status_code
5221 ,NULL
5222 )
5223 ) * -1 contribution_dr
5225 ,'F'
5226 ,xbct.accounted_cr
5227 ,NULL
5228 )
5229 ) * -1 contribution_cr
5230 ,xbct.balance_status_eff_per_num
5231 ,xbct.account_type
5232 FROM xla_bal_anacri_lines_gt xbct
5233 ,xla_ae_line_acs xad
5234 WHERE xad.ae_header_id = xbct.ae_header_id
5235 AND xad.ae_line_num = xbct.ae_line_num
5236 GROUP BY xbct.application_id
5237 ,xbct.ledger_id
5238 ,xbct.effective_period_num
5239 ,xbct.period_name
5240 ,xbct.period_year
5241 ,xbct.balance_status_eff_per_num
5242 ,xbct.code_combination_id
5243 ,xad.analytical_criterion_code
5244 ,xad.analytical_criterion_type_code
5245 ,xad.amb_context_code
5246 ,xad.ac1
5247 ,xad.ac2
5248 ,xad.ac3
5249 ,xad.ac4
5250 ,xad.ac5
5251 ,xbct.balance_status_eff_per_num
5252 ,xbct.balance_status_code
5253 ,xbct.account_type
5254 );
5255 l_row_count := SQL%ROWCOUNT;
5256 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5257 trace
5258 (p_module => l_log_module
5259 ,p_msg => l_row_count
5260 || ' inserted into xla_bal_ac_ctrbs_gt'
5261 ,p_level => C_LEVEL_STATEMENT
5262 );
5263 END IF;
5264
5265 ELSE --p_operation_code
5266 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
5267 trace
5268 ( p_module => l_log_module
5269 ,p_msg => 'EXCEPTION: ' || 'Invalid value for p_operation_code: '
5270 || p_operation_code
5271 ,p_level => C_LEVEL_EXCEPTION
5272 );
5273 END IF;
5274 xla_exceptions_pkg.raise_message
5275 (p_appli_s_name => 'XLA'
5276 ,p_msg_name => 'XLA_COMMON_ERROR'
5277 ,p_token_1 => 'LOCATION'
5278 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
5279 ,p_token_2 => 'ERROR'
5280 ,p_value_2 => 'EXCEPTION: ' ||'Invalid value for p_operation_code: '
5281 || p_operation_code);
5282 END IF; --p_operation_code
5283
5284 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5285 trace
5286 (p_module => l_log_module
5287 ,p_msg => l_row_count
5288 || ' inserted into xla_bal_ac_ctrbs_gt'
5289 ,p_level => C_LEVEL_STATEMENT
5290 );
5291 END IF;
5292
5293 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5294 trace
5295 (p_module => l_log_module
5296 ,p_msg => 'END ' || l_log_module
5297 ,p_level => C_LEVEL_PROCEDURE);
5298 END IF;
5299
5300
5301 RETURN l_row_count;
5302
5303 EXCEPTION
5304 WHEN xla_exceptions_pkg.application_exception
5305 THEN
5306 RAISE;
5307 WHEN OTHERS
5308 THEN
5309 xla_exceptions_pkg.raise_message
5310 (p_location => 'xla_balances_pkg.load_alyt_secondary_temp_tabs');
5311 END load_alyt_secondary_temp_tabs;
5312
5313
5314
5315 FUNCTION load_ctrl_secondary_temp_tabs
5316 ( p_operation_code IN VARCHAR2 --'F' Finalize
5317 --'A' Add
5318 --'R' Remove
5319 )
5320 RETURN INTEGER
5321 IS
5322 l_row_count NUMBER;
5323
5324 l_log_module VARCHAR2 (2000);
5325
5326 BEGIN
5327 IF g_log_enabled THEN
5328 l_log_module := C_DEFAULT_MODULE||'.load_ctrl_secondary_temp_tabs';
5329 END IF;
5330 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5331 trace
5332 (p_module => l_log_module
5333 ,p_msg => 'BEGIN ' || l_log_module
5334 ,p_level => C_LEVEL_PROCEDURE);
5335 END IF;
5336
5337 --if temp tabs are empty this will not take long
5338 DELETE
5339 FROM xla_bal_ctrl_ctrbs_gt;
5340
5341 IF p_operation_code = 'F'
5342 THEN
5343 INSERT
5344 INTO xla_bal_ctrl_ctrbs_gt
5345 ( application_id
5346 ,ledger_id
5347 ,period_name
5348 ,period_year
5349 ,effective_period_num
5350 ,code_combination_id
5351 ,party_type_code
5352 ,party_id
5353 ,party_site_id
5354 ,contribution_dr
5355 ,contribution_cr
5356 ,contribution_draft_dr
5357 ,contribution_draft_cr
5358 ,balance_status_eff_per_num
5359 )
5360 (
5361 SELECT xbct.application_id
5362 ,xbct.ledger_id
5363 ,xbct.period_name
5367 ,xbct.party_type_code
5364 ,xbct.period_year
5365 ,xbct.effective_period_num
5366 ,xbct.code_combination_id
5368 ,xbct.party_id
5369 ,xbct.party_site_id
5370 ,SUM(xbct.accounted_dr) contribution_dr
5371 ,SUM(xbct.accounted_cr) contribution_cr
5372 ,SUM(xbct.accounted_dr) * -1 contribution_draft_dr
5373 ,SUM(xbct.accounted_cr) * -1 contribution_draft_cr
5374 ,xbct.balance_status_eff_per_num
5375 FROM xla_bal_ctrl_lines_gt xbct
5376 GROUP BY xbct.application_id
5377 ,xbct.ledger_id
5378 ,xbct.effective_period_num
5379 ,xbct.period_name
5380 ,xbct.period_year
5381 ,xbct.balance_status_eff_per_num
5382 ,xbct.code_combination_id
5383 ,xbct.party_type_code
5384 ,xbct.party_id
5385 ,xbct.party_site_id
5386 ,xbct.balance_status_eff_per_num
5387 ,xbct.balance_status_code
5388 );
5389 l_row_count := SQL%ROWCOUNT;
5390 ELSIF p_operation_code ='A'
5391 THEN
5392 INSERT
5393 INTO xla_bal_ctrl_ctrbs_gt
5394 ( application_id
5395 ,ledger_id
5396 ,period_name
5397 ,period_year
5398 ,effective_period_num
5399 ,code_combination_id
5400 ,party_type_code
5401 ,party_id
5402 ,party_site_id
5403 ,contribution_dr
5404 ,contribution_cr
5405 ,contribution_draft_dr
5406 ,contribution_draft_cr
5407 ,balance_status_eff_per_num
5408 )
5409 (
5410 SELECT xbct.application_id
5411 ,xbct.ledger_id
5412 ,xbct.period_name
5413 ,xbct.period_year
5414 ,xbct.effective_period_num
5415 ,xbct.code_combination_id
5416 ,xbct.party_type_code
5417 ,xbct.party_id
5418 ,xbct.party_site_id
5419 ,SUM(DECODE( xbct.accounting_entry_status_code
5420 ,'F'
5421 ,xbct.accounted_dr
5422 ,NULL
5423 )
5424 ) contribution_dr
5425 ,SUM(DECODE( xbct.accounting_entry_status_code
5426 ,'F'
5427 ,xbct.accounted_cr
5428 ,NULL
5429 )
5430 ) contribution_cr
5431 ,SUM(DECODE( xbct.accounting_entry_status_code
5432 ,'D'
5433 ,xbct.accounted_dr
5434 ,NULL
5435 )
5436 ) contribution_draft_dr
5437 ,SUM(DECODE( xbct.accounting_entry_status_code
5438 ,'D'
5439 ,xbct.accounted_cr
5440 ,NULL
5441 )
5442 ) contribution_draft_cr
5443 ,xbct.balance_status_eff_per_num
5444 FROM xla_bal_ctrl_lines_gt xbct
5445 GROUP BY xbct.application_id
5446 ,xbct.ledger_id
5447 ,xbct.effective_period_num
5448 ,xbct.period_name
5449 ,xbct.period_year
5450 ,xbct.balance_status_eff_per_num
5451 ,xbct.code_combination_id
5452 ,xbct.party_type_code
5453 ,xbct.party_id
5454 ,xbct.party_site_id
5455 ,xbct.balance_status_eff_per_num
5456 ,xbct.balance_status_code
5457 );
5458 l_row_count := SQL%ROWCOUNT;
5459 ELSIF p_operation_code ='R'
5460 THEN
5461 INSERT
5462 INTO xla_bal_ctrl_ctrbs_gt
5463 ( application_id
5464 ,ledger_id
5465 ,period_name
5466 ,period_year
5467 ,effective_period_num
5468 ,code_combination_id
5469 ,party_type_code
5470 ,party_id
5471 ,party_site_id
5472 ,contribution_dr
5473 ,contribution_cr
5474 ,contribution_draft_dr
5475 ,contribution_draft_cr
5476 ,balance_status_eff_per_num
5477 )
5478 (
5479 SELECT xbct.application_id
5480 ,xbct.ledger_id
5481 ,xbct.period_name
5482 ,xbct.period_year
5483 ,xbct.effective_period_num
5484 ,xbct.code_combination_id
5485 ,xbct.party_type_code
5486 ,xbct.party_id
5487 ,xbct.party_site_id
5488 ,SUM(DECODE( xbct.accounting_entry_status_code
5489 ,'F'
5490 ,xbct.accounted_dr
5491 ,NULL
5492 )
5493 ) * -1 contribution_dr
5497 ,NULL
5494 ,SUM(DECODE( xbct.accounting_entry_status_code
5495 ,'F'
5496 ,xbct.accounted_cr
5498 )
5499 ) * -1 contribution_cr
5500 ,SUM(DECODE( xbct.accounting_entry_status_code
5501 ,'D'
5502 ,xbct.accounted_dr
5503 ,NULL
5504 )
5505 ) * -1 contribution_draft_dr
5506 ,SUM(DECODE( xbct.accounting_entry_status_code
5507 ,'D'
5508 ,xbct.accounted_cr
5509 ,NULL
5510 )
5511 ) * -1 contribution_draft_cr
5512 ,xbct.balance_status_eff_per_num
5513 FROM xla_bal_ctrl_lines_gt xbct
5514 GROUP BY xbct.application_id
5515 ,xbct.ledger_id
5516 ,xbct.effective_period_num
5517 ,xbct.period_name
5518 ,xbct.period_year
5519 ,xbct.balance_status_eff_per_num
5520 ,xbct.code_combination_id
5521 ,xbct.party_type_code
5522 ,xbct.party_id
5523 ,xbct.party_site_id
5524 ,xbct.balance_status_eff_per_num
5525 ,xbct.balance_status_code
5526 );
5527
5528 l_row_count := SQL%ROWCOUNT;
5529
5530 ELSE --p_operation_code
5531 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
5532 trace
5533 (p_module => l_log_module
5534 ,p_msg => 'EXCEPTION: ' ||
5535 'Invalid value for p_operation_code: ' || p_operation_code
5536 ,p_level => C_LEVEL_EXCEPTION
5537 );
5538 END IF;
5539 xla_exceptions_pkg.raise_message
5540 (p_appli_s_name => 'XLA'
5541 ,p_msg_name => 'XLA_COMMON_ERROR'
5542 ,p_token_1 => 'LOCATION'
5543 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
5544 ,p_token_2 => 'ERROR'
5545 ,p_value_2 => 'EXCEPTION: ' ||
5546 'Invalid value for p_operation_code: ' || p_operation_code);
5547
5548 END IF; --p_operation_code
5549
5550 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5551 trace
5552 (p_module => l_log_module
5553 ,p_msg => l_row_count ||
5554 ' inserted into xla_bal_ctrl_ctrbs_gt'
5555 ,p_level => C_LEVEL_STATEMENT
5556 );
5557 END IF;
5558
5559 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5560 trace
5561 (p_module => l_log_module
5562 ,p_msg => 'END ' || l_log_module
5563 ,p_level => C_LEVEL_PROCEDURE);
5564 END IF;
5565
5566 RETURN l_row_count;
5567
5568 EXCEPTION
5569 WHEN xla_exceptions_pkg.application_exception
5570 THEN
5571 RAISE;
5572 WHEN OTHERS
5573 THEN
5574 xla_exceptions_pkg.raise_message
5575 (p_location => 'xla_balances_pkg.load_ctrl_secondary_temp_tabs');
5576 END load_ctrl_secondary_temp_tabs;
5577
5578
5579 PROCEDURE insert_ledger_period_statuses
5580 ( p_ledger_id IN INTEGER
5581 ,p_equal_to_eff_per_num IN INTEGER
5582 ,p_grt_or_equal_to_eff_per_num IN INTEGER
5583 ,p_grteq_1_diff_2_arg1 IN INTEGER
5584 ,p_grteq_1_diff_2_arg2 IN INTEGER
5585 ,p_grteq_1_less_2_arg1 IN INTEGER
5586 ,p_grteq_1_less_2_arg2 IN INTEGER
5587 )
5588 IS
5589 l_row_count NUMBER;
5590
5591 l_log_module VARCHAR2 (2000);
5592
5593 BEGIN
5594 IF g_log_enabled THEN
5595 l_log_module := C_DEFAULT_MODULE||'.insert_ledger_period_statuses';
5596 END IF;
5597 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5598 trace
5599 (p_module => l_log_module
5600 ,p_msg => 'BEGIN ' || l_log_module
5601 ,p_level => C_LEVEL_PROCEDURE);
5602 END IF;
5603
5604 IF p_equal_to_eff_per_num IS NOT NULL
5605 AND p_grt_or_equal_to_eff_per_num IS NULL
5606 AND p_grteq_1_diff_2_arg1 IS NULL
5607 AND p_grteq_1_diff_2_arg2 IS NULL
5608 AND p_grteq_1_less_2_arg1 IS NULL
5609 AND p_grteq_1_less_2_arg2 IS NULL
5610 THEN
5611 --**Insert a record = p_equal_to_eff_per_num
5612 --Disregarded indentation for readability
5613 INSERT
5614 INTO xla_bal_period_stats_gt
5615 ( ledger_id
5616 ,period_name
5617 ,effective_period_num
5618 ,period_year
5619 ,first_period_in_year_flag
5620 )
5621 (
5622 SELECT gps.ledger_id
5623 ,gps.period_name
5624 ,gps.effective_period_num
5625 ,gps.period_year
5626 ,( SELECT NVL2( MAX(gps2.effective_period_num)
5627 ,'N'
5628 ,'Y'
5629 )
5630 FROM gl_period_statuses gps2
5631 WHERE gps2.application_id = 101
5635 AND gps2.period_year = gps.period_year
5632 AND gps2.ledger_id = gps.ledger_id
5633 AND gps2.closing_status IN ('O','C','P')
5634 AND gps2.adjustment_period_flag = 'N'
5636 AND gps2.effective_period_num < gps.effective_period_num
5637 ) first_period_in_year_flag
5638 FROM gl_period_statuses gps
5639 WHERE gps.application_id = 101
5640 AND gps.ledger_id = p_ledger_id
5641 AND gps.closing_status IN ('O','C','P')
5642 AND gps.adjustment_period_flag = 'N'
5643 AND gps.effective_period_num = p_equal_to_eff_per_num
5644 AND (gps.ledger_id, gps.period_name)
5645 NOT IN (SELECT xbp.ledger_id, xbp.period_name
5646 FROM xla_bal_period_stats_gt xbp
5647 )
5648 );
5649
5650 l_row_count := SQL%ROWCOUNT;
5651
5652
5653 ELSIF p_grt_or_equal_to_eff_per_num IS NOT NULL
5654 AND p_equal_to_eff_per_num IS NULL
5655 AND p_grteq_1_diff_2_arg1 IS NULL
5656 AND p_grteq_1_diff_2_arg2 IS NULL
5657 AND p_grteq_1_less_2_arg1 IS NULL
5658 AND p_grteq_1_less_2_arg2 IS NULL
5659
5660 THEN
5661 --**insert records >= p_grt_or_equal_to_eff_per_num
5662 --Disregarded indentation for readability
5663 INSERT
5664 INTO xla_bal_period_stats_gt
5665 ( ledger_id
5666 ,period_name
5667 ,effective_period_num
5668 ,period_year
5669 ,first_period_in_year_flag
5670 )
5671 (
5672 SELECT gps.ledger_id
5673 ,gps.period_name
5674 ,gps.effective_period_num
5675 ,gps.period_year
5676 ,( SELECT NVL2( MAX(gps2.effective_period_num)
5677 ,'N'
5678 ,'Y'
5679 )
5680 FROM gl_period_statuses gps2
5681 WHERE gps2.application_id = 101
5682 AND gps2.ledger_id = gps.ledger_id
5683 AND gps2.closing_status IN ('O','C','P')
5684 AND gps2.adjustment_period_flag = 'N'
5685 AND gps2.period_year = gps.period_year
5686 AND gps2.effective_period_num < gps.effective_period_num
5687 ) first_period_in_year_flag
5688 FROM gl_period_statuses gps
5689 WHERE gps.application_id = 101
5690 AND gps.ledger_id = p_ledger_id
5691 AND gps.closing_status IN ('O','C','P')
5692 AND gps.adjustment_period_flag = 'N'
5693 AND gps.effective_period_num >= p_grt_or_equal_to_eff_per_num
5694 AND (gps.ledger_id, gps.period_name)
5695 NOT IN (SELECT xbp.ledger_id, xbp.period_name
5696 FROM xla_bal_period_stats_gt xbp
5697 )
5698 );
5699
5700 l_row_count := SQL%ROWCOUNT;
5701
5702 ELSIF p_grteq_1_diff_2_arg1 IS NOT NULL
5703 AND p_grteq_1_diff_2_arg2 IS NOT NULL
5704 AND p_equal_to_eff_per_num IS NULL
5705 AND p_grt_or_equal_to_eff_per_num IS NULL
5706 AND p_grteq_1_less_2_arg1 IS NULL
5707 AND p_grteq_1_less_2_arg2 IS NULL
5708 THEN
5709 --**insert records > p_grt_1_diff_2_arg1 but <> p_grt_1_diff_2_arg2
5710 --Disregarded indentation for readability
5711 INSERT
5712 INTO xla_bal_period_stats_gt
5713 ( ledger_id
5714 ,period_name
5715 ,effective_period_num
5716 ,period_year
5717 ,first_period_in_year_flag
5718 )
5719 (
5720 SELECT gps.ledger_id
5721 ,gps.period_name
5722 ,gps.effective_period_num
5723 ,gps.period_year
5724 ,( SELECT NVL2( MAX(gps2.effective_period_num)
5725 ,'N'
5726 ,'Y'
5727 )
5728 FROM gl_period_statuses gps2
5729 WHERE gps2.application_id = 101
5730 AND gps2.ledger_id = gps.ledger_id
5731 AND gps2.closing_status IN ('O','C','P')
5732 AND gps2.adjustment_period_flag = 'N'
5733 AND gps2.period_year = gps.period_year
5734 AND gps2.effective_period_num < gps.effective_period_num
5735 ) first_period_in_year_flag
5736 FROM gl_period_statuses gps
5737 WHERE gps.application_id = 101
5738 AND gps.ledger_id = p_ledger_id
5739 AND gps.closing_status IN ('O','C','P')
5740 AND gps.adjustment_period_flag = 'N'
5741 AND gps.effective_period_num >= p_grteq_1_diff_2_arg1
5742 AND gps.effective_period_num <> p_grteq_1_diff_2_arg2
5743 AND (gps.ledger_id, gps.period_name)
5744 NOT IN (SELECT xbp.ledger_id, xbp.period_name
5745 FROM xla_bal_period_stats_gt xbp
5746 )
5747 );
5748
5749 l_row_count := SQL%ROWCOUNT;
5750
5751 ELSIF p_grteq_1_less_2_arg1 IS NOT NULL
5752 AND p_grteq_1_less_2_arg2 IS NOT NULL
5756 AND p_grteq_1_diff_2_arg2 IS NULL
5753 AND p_equal_to_eff_per_num IS NULL
5754 AND p_grt_or_equal_to_eff_per_num IS NULL
5755 AND p_grteq_1_diff_2_arg1 IS NULL
5757 THEN
5758 --**insert records >= p_grteq_1_less_2_arg1 but < p_grteq_1_less_2_arg2
5759 --Disregarded indentation for readability
5760 INSERT
5761 INTO xla_bal_period_stats_gt
5762 ( ledger_id
5763 ,period_name
5764 ,effective_period_num
5765 ,period_year
5766 ,first_period_in_year_flag
5767 )
5768 (
5769 SELECT gps.ledger_id
5770 ,gps.period_name
5771 ,gps.effective_period_num
5772 ,gps.period_year
5773 ,( SELECT NVL2( MAX(gps2.effective_period_num)
5774 ,'N'
5775 ,'Y'
5776 )
5777 FROM gl_period_statuses gps2
5778 WHERE gps2.application_id = 101
5779 AND gps2.ledger_id = gps.ledger_id
5780 AND gps2.closing_status IN ('O','C','P')
5781 AND gps2.adjustment_period_flag = 'N'
5782 AND gps2.period_year = gps.period_year
5783 AND gps2.effective_period_num < gps.effective_period_num
5784 ) first_period_in_year_flag
5785 FROM gl_period_statuses gps
5786 WHERE gps.application_id = 101
5787 AND gps.ledger_id = p_ledger_id
5788 AND gps.closing_status IN ('O','C','P')
5789 AND gps.adjustment_period_flag = 'N'
5790 AND gps.effective_period_num >= p_grteq_1_less_2_arg1
5791 AND gps.effective_period_num < p_grteq_1_less_2_arg2
5792 AND (gps.ledger_id, gps.period_name)
5793 NOT IN (SELECT xbp.ledger_id, xbp.period_name
5794 FROM xla_bal_period_stats_gt xbp
5795 )
5796 );
5797
5798 l_row_count := SQL%ROWCOUNT;
5799
5800 ELSE
5801 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
5802 trace
5803 (p_module => l_log_module
5804 ,p_msg => 'EXCEPTION:' ||
5805 'Unsupported combinations of parameters'
5806 ,p_level => C_LEVEL_EXCEPTION
5807 );
5808 END IF;
5809 xla_exceptions_pkg.raise_message
5810 (p_appli_s_name => 'XLA'
5811 ,p_msg_name => 'XLA_COMMON_ERROR'
5812 ,p_token_1 => 'LOCATION'
5813 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
5814 ,p_token_2 => 'ERROR'
5815 ,p_value_2 => 'EXCEPTION:' ||
5816 'Unsupported combinations of parameters');
5817 END IF;
5818
5819 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5820 trace
5821 (p_module => l_log_module
5822 ,p_msg => l_row_count
5823 || ' inserted into xla_bal_period_stats_gt'
5824 ,p_level => C_LEVEL_STATEMENT
5825 );
5826 END IF;
5827
5828 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5829 trace
5830 (p_module => l_log_module
5831 ,p_msg => 'END ' || l_log_module
5832 ,p_level => C_LEVEL_PROCEDURE);
5833 END IF;
5834
5835 EXCEPTION
5836 WHEN xla_exceptions_pkg.application_exception
5837 THEN
5838 RAISE;
5839 WHEN OTHERS
5840 THEN
5841 xla_exceptions_pkg.raise_message
5842 (p_location => 'xla_balances_pkg.insert_ledger_period_statuses');
5843 END insert_ledger_period_statuses;
5844
5845
5846 PROCEDURE cache_ledger_period_statuses
5847 ( p_ledger_id IN INTEGER
5848 ,p_first_eff_per_num IN INTEGER
5849 ,p_load_single_period IN BOOLEAN
5850 )
5851 IS
5852 l_row_count NUMBER;
5853
5854 l_log_module VARCHAR2 (2000);
5855
5856 BEGIN
5857 IF g_log_enabled THEN
5858 l_log_module := C_DEFAULT_MODULE||'.cache_ledger_period_statuses';
5859 END IF;
5860 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
5861 trace
5862 (p_module => l_log_module
5863 ,p_msg => 'BEGIN ' || l_log_module
5864 ,p_level => C_LEVEL_PROCEDURE);
5865 END IF;
5866
5867 IF g_cached_ledgers.EXISTS(p_ledger_id)
5868 THEN
5869 IF p_load_single_period
5870 THEN
5871 IF g_cached_single_period
5872 THEN
5873 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5874 trace
5875 (p_module => l_log_module
5876 ,p_msg => '1 g_cached_single_period IS TRUE'
5877 ,p_level => C_LEVEL_STATEMENT
5878 );
5879 END IF;
5880
5881 IF g_cached_ledgers(p_ledger_id) <> p_first_eff_per_num
5882 THEN
5883 DELETE
5884 FROM xla_bal_period_stats_gt xbst
5885 WHERE xbst.ledger_id = p_ledger_id;
5886
5887 l_row_count := SQL%ROWCOUNT;
5888
5889 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5890 trace
5891 (p_module => l_log_module
5895 );
5892 ,p_msg => l_row_count ||
5893 ' deleted from xla_bal_period_stats_gt'
5894 ,p_level => C_LEVEL_STATEMENT
5896 END IF;
5897
5898 --**Insert a record = p_first_eff_per_num
5899 insert_ledger_period_statuses
5900 ( p_ledger_id => p_ledger_id
5901 ,p_equal_to_eff_per_num => p_first_eff_per_num
5902 ,p_grt_or_equal_to_eff_per_num => NULL
5903 ,p_grteq_1_diff_2_arg1 => NULL
5904 ,p_grteq_1_diff_2_arg2 => NULL
5905 ,p_grteq_1_less_2_arg1 => NULL
5906 ,p_grteq_1_less_2_arg2 => NULL
5907 );
5908 ELSE --g_cached_ledgers(p_ledger_id) = p_first_eff_per_num
5909 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5910 trace
5911 (p_module => l_log_module
5912 ,p_msg => 'Already cached, no action performed'
5913 ,p_level => C_LEVEL_STATEMENT
5914 );
5915 END IF;
5916 END IF; --g_cached_ledgers(p_ledger_id) <> p_first_eff_per_num
5917 ELSE --g_cached_single_period IS NOT TRUE
5918 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5919 trace
5920 (p_module => l_log_module
5921 ,p_msg => '2 g_cached_single_period IS FALSE'
5922 ,p_level => C_LEVEL_STATEMENT
5923 );
5924 END IF;
5925
5926 IF g_cached_ledgers(p_ledger_id) < p_first_eff_per_num
5927 THEN
5928 DELETE
5929 FROM xla_bal_period_stats_gt xbst
5930 WHERE xbst.ledger_id = p_ledger_id
5931 AND ( xbst.effective_period_num < p_first_eff_per_num
5932 OR xbst.effective_period_num > p_first_eff_per_num
5933 );
5934
5935 l_row_count := SQL%ROWCOUNT;
5936
5937 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5938 trace
5939 (p_module => l_log_module
5940 ,p_msg => l_row_count ||
5941 ' deleted from xla_bal_period_stats_gt'
5942 ,p_level => C_LEVEL_STATEMENT
5943 );
5944 END IF;
5945 ELSIF g_cached_ledgers(p_ledger_id) = p_first_eff_per_num
5946 THEN
5947 DELETE
5948 FROM xla_bal_period_stats_gt xbst
5949 WHERE xbst.ledger_id = p_ledger_id
5950 AND xbst.effective_period_num > p_first_eff_per_num;
5951
5952 l_row_count := SQL%ROWCOUNT;
5953
5954 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5955 trace
5956 (p_module => l_log_module
5957 ,p_msg => l_row_count ||
5958 ' deleted from xla_bal_period_stats_gt'
5959 ,p_level => C_LEVEL_STATEMENT
5960 );
5961 END IF;
5962 ELSE --g_cached_ledgers(p_ledger_id) > p_first_eff_per_num
5963 DELETE
5964 FROM xla_bal_period_stats_gt xbst
5965 WHERE xbst.ledger_id = p_ledger_id;
5966
5967 l_row_count := SQL%ROWCOUNT;
5968
5969 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5970 trace
5971 (p_module => l_log_module
5972 ,p_msg => l_row_count ||
5973 ' deleted from xla_bal_period_stats_gt'
5974 ,p_level => C_LEVEL_STATEMENT
5975 );
5976 END IF;
5977 --***Insert a record = p_first_eff_per_num
5978 insert_ledger_period_statuses
5979 ( p_ledger_id => p_ledger_id
5980 ,p_equal_to_eff_per_num => p_first_eff_per_num
5981 ,p_grt_or_equal_to_eff_per_num => NULL
5982 ,p_grteq_1_diff_2_arg1 => NULL
5983 ,p_grteq_1_diff_2_arg2 => NULL
5984 ,p_grteq_1_less_2_arg1 => NULL
5985 ,p_grteq_1_less_2_arg2 => NULL
5986 );
5987 END IF; --g_cached_ledgers(p_ledger_id) < p_first_eff_per_num
5988
5989 END IF; --g_cached_single_period
5990
5991 g_cached_ledgers(p_ledger_id) := p_first_eff_per_num;
5992 g_cached_single_period := TRUE;
5993
5994 ELSE --NOT p_load_single_period
5995 IF g_cached_single_period
5996 THEN
5997 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
5998 trace
5999 (p_module => l_log_module
6000 ,p_msg => '3 g_cached_single_period IS TRUE'
6001 ,p_level => C_LEVEL_STATEMENT
6002 );
6003 END IF;
6004 IF g_cached_ledgers(p_ledger_id) < p_first_eff_per_num
6005 THEN
6006 DELETE
6007 FROM xla_bal_period_stats_gt xbst
6008 WHERE xbst.ledger_id = p_ledger_id
6009 AND xbst.effective_period_num < p_first_eff_per_num;
6010
6014 trace
6011 l_row_count := SQL%ROWCOUNT;
6012
6013 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6015 (p_module => l_log_module
6016 ,p_msg => l_row_count ||
6017 ' deleted from xla_bal_period_stats_gt'
6018 ,p_level => C_LEVEL_STATEMENT
6019 );
6020 END IF;
6021
6022 --**insert records >= p_first_eff_per_num
6023 insert_ledger_period_statuses
6024 ( p_ledger_id => p_ledger_id
6025 ,p_equal_to_eff_per_num => NULL
6026 ,p_grt_or_equal_to_eff_per_num => p_first_eff_per_num
6027 ,p_grteq_1_diff_2_arg1 => NULL
6028 ,p_grteq_1_diff_2_arg2 => NULL
6029 ,p_grteq_1_less_2_arg1 => NULL
6030 ,p_grteq_1_less_2_arg2 => NULL
6031 );
6032 ELSE --g_cached_ledgers(p_ledger_id) >= p_first_eff_per_num
6033 --**insert records > p_first_eff_per_num but <> g_cached_ledgers(p_ledger_id)
6034 insert_ledger_period_statuses
6035 ( p_ledger_id => p_ledger_id
6036 ,p_equal_to_eff_per_num => NULL
6037 ,p_grt_or_equal_to_eff_per_num => NULL
6038 ,p_grteq_1_diff_2_arg1 => p_first_eff_per_num
6039 ,p_grteq_1_diff_2_arg2 => g_cached_ledgers(p_ledger_id)
6040 ,p_grteq_1_less_2_arg1 => NULL
6041 ,p_grteq_1_less_2_arg2 => NULL
6042 );
6043 END IF; --g_cached_ledgers(p_ledger_id) < p_first_eff_per_num
6044 ELSE --g_cached_single_period IS NOT TRUE
6045 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6046 trace
6047 (p_module => l_log_module
6048 ,p_msg => '4 g_cached_single_period IS FALSE'
6049 ,p_level => C_LEVEL_STATEMENT
6050 );
6051 END IF;
6052 IF g_cached_ledgers(p_ledger_id) = p_first_eff_per_num
6053 THEN
6054 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6055 trace
6056 (p_module => l_log_module
6057 ,p_msg => 'Already cached, no action performed'
6058 ,p_level => C_LEVEL_STATEMENT
6059 );
6060 END IF;
6061 ELSIF g_cached_ledgers(p_ledger_id) < p_first_eff_per_num
6062 THEN
6063 DELETE
6064 FROM xla_bal_period_stats_gt xbst
6065 WHERE xbst.ledger_id = p_ledger_id
6066 AND xbst.effective_period_num < p_first_eff_per_num;
6067
6068 l_row_count := SQL%ROWCOUNT;
6069
6070 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6071 trace
6072 (p_module => l_log_module
6073 ,p_msg => l_row_count ||
6074 ' deleted from xla_bal_period_stats_gt'
6075 ,p_level => C_LEVEL_STATEMENT
6076 );
6077 END IF;
6078 ELSE --g_cached_ledgers(p_ledger_id) > p_first_eff_per_num
6079 --**insert records >= p_first_eff_per_num but < g_cached_ledgers(p_ledger_id)
6080 insert_ledger_period_statuses
6081 ( p_ledger_id => p_ledger_id
6082 ,p_equal_to_eff_per_num => NULL
6083 ,p_grt_or_equal_to_eff_per_num => NULL
6084 ,p_grteq_1_diff_2_arg1 => NULL
6085 ,p_grteq_1_diff_2_arg2 => NULL
6086 ,p_grteq_1_less_2_arg1 => p_first_eff_per_num
6087 ,p_grteq_1_less_2_arg2 => g_cached_ledgers(p_ledger_id)
6088 );
6089 END IF; --g_cached_ledgers(p_ledger_id) = p_first_eff_per_num
6090 END IF; --g_cached_single_period
6091
6092 g_cached_ledgers(p_ledger_id) := p_first_eff_per_num;
6093 g_cached_single_period := FALSE;
6094 END IF; --p_load_single_period
6095
6096 ELSE --ledger_id is not yet cached
6097 IF p_load_single_period
6098 THEN
6099 g_cached_single_period := TRUE;
6100 g_cached_ledgers(p_ledger_id) := p_first_eff_per_num;
6101 --*** insert record = p_first_eff_per_num
6102 insert_ledger_period_statuses
6103 ( p_ledger_id => p_ledger_id
6104 ,p_equal_to_eff_per_num => p_first_eff_per_num
6105 ,p_grt_or_equal_to_eff_per_num => NULL
6106 ,p_grteq_1_diff_2_arg1 => NULL
6107 ,p_grteq_1_diff_2_arg2 => NULL
6108 ,p_grteq_1_less_2_arg1 => NULL
6109 ,p_grteq_1_less_2_arg2 => NULL
6110 );
6111 ELSE --NOT p_load_single_period
6112 g_cached_single_period := FALSE;
6113 g_cached_ledgers(p_ledger_id) := p_first_eff_per_num;
6114 --**insert record >= p_first_eff_per_num
6115 insert_ledger_period_statuses
6116 ( p_ledger_id => p_ledger_id
6117 ,p_equal_to_eff_per_num => NULL
6118 ,p_grt_or_equal_to_eff_per_num => p_first_eff_per_num
6122 ,p_grteq_1_less_2_arg2 => NULL
6119 ,p_grteq_1_diff_2_arg1 => NULL
6120 ,p_grteq_1_diff_2_arg2 => NULL
6121 ,p_grteq_1_less_2_arg1 => NULL
6123 );
6124 END IF; --p_load_single_period
6125 END IF; --g_cached_ledgers.EXISTS(p_ledger_id)
6126
6127 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6128 trace
6129 (p_module => l_log_module
6130 ,p_msg => 'END ' || l_log_module
6131 ,p_level => C_LEVEL_PROCEDURE);
6132 END IF;
6133
6134 EXCEPTION
6135 WHEN xla_exceptions_pkg.application_exception
6136 THEN
6137 RAISE;
6138 WHEN OTHERS
6139 THEN
6140 xla_exceptions_pkg.raise_message
6141 (p_location => 'xla_balances_pkg.cache_ledger_period_statuses');
6142 END cache_ledger_period_statuses;
6143
6144
6145
6146 FUNCTION calculate_balances
6147 ( p_application_id IN INTEGER
6148 ,p_ledger_id IN INTEGER
6149 ,p_entity_id IN INTEGER
6150 ,p_event_id IN INTEGER
6151 ,p_request_id IN INTEGER
6152 ,p_accounting_batch_id IN INTEGER
6153 ,p_ae_header_id IN INTEGER
6154 ,p_ae_line_num IN INTEGER
6155 ,p_code_combination_id IN INTEGER
6156 ,p_period_name IN VARCHAR2
6157 ,p_update_mode IN VARCHAR2
6158 ,p_balance_source_code IN VARCHAR2
6159 ,p_called_by_flag IN VARCHAR2
6160 ,p_commit_flag IN VARCHAR2
6161 )
6162 RETURN BOOLEAN
6163 IS
6164
6165 /*======================================================================+
6166 | |
6167 | Private Procedure |
6168 | |
6169 | Description |
6170 | ----------- |
6171 | |
6172 | |
6173 | Pseudo-code |
6174 | ----------- |
6175 | |
6176 | |
6177 | Open issues |
6178 | ----------- |
6179 | |
6180 | |
6181 +======================================================================*/
6182
6183 l_temp_rows_inserted INTEGER;
6184
6185 l_balance_flag_pre_update VARCHAR2(1);
6186 l_balance_flag_post_update VARCHAR2(1);
6187
6188 l_operation_code VARCHAR2(1);
6189 l_entry_locking_dyn_stmt VARCHAR2(4000);
6190 l_line_selection_dyn_stmt VARCHAR2(4000);
6191
6192 l_entry_locking_required BOOLEAN;
6193 l_result BOOLEAN;
6194 l_exit_after_calculation BOOLEAN;
6195
6196 l_locking_arg_array t_array_varchar;
6197 l_lck_bind_var_count INTEGER;
6198
6199
6200 l_selection_arg_array t_array_varchar;
6201 l_ins_bind_var_num INTEGER;
6202
6203
6204
6205
6206
6207 l_row_count NUMBER;
6208
6209
6210 l_log_module VARCHAR2 (2000);
6211
6212 BEGIN
6213 IF g_log_enabled THEN
6214 l_log_module := C_DEFAULT_MODULE||'.calculate_balances';
6215 END IF;
6216 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6217 trace
6218 (p_module => l_log_module
6219 ,p_msg => 'BEGIN ' || l_log_module
6220 ,p_level => C_LEVEL_PROCEDURE);
6221 END IF;
6222
6223 --WARNING:
6224 --This procedure contains intermediate exit points for performance reasons!
6225
6226 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6227 trace
6228 (p_module => l_log_module
6229 ,p_msg => 'p_application_id :' || p_application_id
6230 ,p_level => C_LEVEL_STATEMENT
6231 );
6232 trace
6233 (p_module => l_log_module
6234 ,p_msg => 'p_ledger_id :' || p_ledger_id
6235 ,p_level => C_LEVEL_STATEMENT
6236 );
6237 trace
6238 (p_module => l_log_module
6239 ,p_msg => 'p_entity_id :' || p_event_id
6240 ,p_level => C_LEVEL_STATEMENT
6241 );
6242 trace
6243 (p_module => l_log_module
6244 ,p_msg => 'p_event_id :' || p_entity_id
6245 ,p_level => C_LEVEL_STATEMENT
6246 );
6247 trace
6248 (p_module => l_log_module
6249 ,p_msg => 'p_request_id :' || p_request_id
6250 ,p_level => C_LEVEL_STATEMENT
6251 );
6252 trace
6253 (p_module => l_log_module
6254 ,p_msg => 'p_accounting_batch_id :' || p_accounting_batch_id
6255 ,p_level => C_LEVEL_STATEMENT
6256 );
6257 trace
6261 );
6258 (p_module => l_log_module
6259 ,p_msg => 'p_ae_header_id :' || p_ae_header_id
6260 ,p_level => C_LEVEL_STATEMENT
6262 trace
6263 (p_module => l_log_module
6264 ,p_msg => 'p_ae_line_num :' || p_ae_line_num
6265 ,p_level => C_LEVEL_STATEMENT
6266 );
6267 trace
6268 (p_module => l_log_module
6269 ,p_msg => 'p_code_combination_id :' || p_code_combination_id
6270 ,p_level => C_LEVEL_STATEMENT
6271 );
6272 trace
6273 (p_module => l_log_module
6274 ,p_msg => 'p_period_name :' || p_period_name
6275 ,p_level => C_LEVEL_STATEMENT
6276 );
6277 trace
6278 (p_module => l_log_module
6279 ,p_msg => 'p_update_mode :' || p_update_mode
6280 ,p_level => C_LEVEL_STATEMENT
6281 );
6282 trace
6283 (p_module => l_log_module
6284 ,p_msg => 'p_balance_source_code :' || p_balance_source_code
6285 ,p_level => C_LEVEL_STATEMENT
6286 );
6287 trace
6288 (p_module => l_log_module
6289 ,p_msg => 'p_commit_flag :' || p_commit_flag
6290 ,p_level => C_LEVEL_STATEMENT
6291 );
6292 trace
6293 (p_module => l_log_module
6294 ,p_msg => 'p_called_by_flag :' || p_called_by_flag
6295 ,p_level => C_LEVEL_STATEMENT
6296 );
6297 END IF;
6298
6299 IF p_update_mode = 'A'
6300 THEN
6301 l_balance_flag_pre_update := 'P';
6302 l_balance_flag_post_update := 'Y';
6303
6304 ELSIF p_update_mode = 'D'
6305 THEN
6306 l_balance_flag_pre_update := 'Y';
6307 l_balance_flag_post_update := 'P';
6308
6309 ELSIF p_update_mode = 'F'
6310 THEN
6311 IF p_commit_flag = 'Y'
6312 THEN
6313 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
6314 trace
6315 (p_module => l_log_module
6316 ,p_msg => 'EXCEPTION:' ||
6317 'Unsupported p_update_mode: ' || p_update_mode || ' with p_commit_flag: ' ||
6318 p_commit_flag
6319 ,p_level => C_LEVEL_EXCEPTION
6320 );
6321 END IF;
6322 xla_exceptions_pkg.raise_message
6323 (p_appli_s_name => 'XLA'
6324 ,p_msg_name => 'XLA_COMMON_ERROR'
6325 ,p_token_1 => 'LOCATION'
6326 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
6327 ,p_token_2 => 'ERROR'
6328 ,p_value_2 => 'EXCEPTION:' ||
6329 'Unsupported p_update_mode: ' || p_update_mode || ' with p_commit_flag: ' ||
6330 p_commit_flag);
6331 END IF;
6332 l_balance_flag_pre_update := 'Y';
6333 l_balance_flag_post_update := 'Y';
6334
6335 ELSIF p_update_mode = 'M'
6336 THEN
6337 l_balance_flag_pre_update := 'P';
6338 l_balance_flag_post_update := 'Y';
6339
6340 trace
6341 ( p_module => l_log_module
6342 ,p_msg => 'Balance calculation will be performed ' ||
6343 'in maintenance mode'
6344 ,p_level => C_LEVEL_ERROR
6345 );
6346
6347 ELSE
6348 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
6349 trace
6350 ( p_module => l_log_module
6351 ,p_msg => 'EXCEPTION:' ||
6352 'Unkown p_update_mode value: ' || p_update_mode
6353 ,p_level => C_LEVEL_EXCEPTION
6354 );
6355 END IF;
6356 xla_exceptions_pkg.raise_message
6357 (p_appli_s_name => 'XLA'
6358 ,p_msg_name => 'XLA_COMMON_ERROR'
6359 ,p_token_1 => 'LOCATION'
6360 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
6361 ,p_token_2 => 'ERROR'
6362 ,p_value_2 => 'EXCEPTION:' ||
6363 'Unkown p_update_mode value: ' || p_update_mode);
6364 END IF;
6365
6366 IF p_balance_source_code IS NOT NULL
6367 AND p_balance_source_code NOT IN ('C', 'A')
6368 THEN
6369 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
6370 trace
6371 ( p_module => l_log_module
6372 ,p_msg => 'EXCEPTION:' ||
6373 'Unsupported p_balance_source_code value: ' || p_balance_source_code
6374 ,p_level => C_LEVEL_EXCEPTION
6375 );
6376 END IF;
6377 xla_exceptions_pkg.raise_message
6378 (p_appli_s_name => 'XLA'
6379 ,p_msg_name => 'XLA_COMMON_ERROR'
6380 ,p_token_1 => 'LOCATION'
6381 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
6382 ,p_token_2 => 'ERROR'
6383 ,p_value_2 => 'EXCEPTION:' ||
6384 'Unsupported p_balance_source_code value: ' || p_balance_source_code);
6385 END IF;
6386
6387 -- modify to skip the call if p_called_by_flag is not null
6388 IF p_request_id IS NULL
6389 AND p_entity_id IS NULL
6390 AND p_called_by_flag is NULL
6391 THEN
6392 build_line_selection_dyn_stmts
6393 ( p_application_id => p_application_id
6394 ,p_ledger_id => p_ledger_id
6395 ,p_event_id => p_event_id
6396 ,p_accounting_batch_id => p_accounting_batch_id
6397 ,p_ae_header_id => p_ae_header_id
6401 ,p_balance_source_code => p_balance_source_code
6398 ,p_ae_line_num => p_ae_line_num
6399 ,p_code_combination_id => p_code_combination_id
6400 ,p_period_name => p_period_name
6402 ,p_balance_flag_pre_update => l_balance_flag_pre_update
6403 ,p_balance_flag_post_update => l_balance_flag_post_update
6404 ,p_commit_flag => p_commit_flag
6405 ,p_entry_locking_dyn_stmt => l_entry_locking_dyn_stmt
6406 ,p_line_selection_dyn_stmt => l_line_selection_dyn_stmt
6407 ,p_locking_arg_array => l_locking_arg_array
6408 ,p_lck_bind_var_count => l_lck_bind_var_count
6409 ,p_selection_arg_array => l_selection_arg_array
6410 ,p_ins_bind_var_num => l_ins_bind_var_num
6411 );
6412 END IF;
6413
6414 LOOP
6415
6416 SAVEPOINT SAVEPOINT_INCREMENTAL;
6417
6418 l_temp_rows_inserted := load_balance_temp_tables
6419 ( p_application_id => p_application_id
6420 ,p_request_id => p_request_id
6421 ,p_entity_id => p_entity_id
6422 ,p_called_by_flag => p_called_by_flag
6423 ,p_balance_flag_pre_update => l_balance_flag_pre_update
6424 ,p_entry_locking_dyn_stmt => l_entry_locking_dyn_stmt
6425 ,p_line_selection_dyn_stmt => l_line_selection_dyn_stmt
6426 ,p_locking_arg_array => l_locking_arg_array
6427 ,p_lck_bind_var_count => l_lck_bind_var_count
6428 ,p_selection_arg_array => l_selection_arg_array
6429 ,p_ins_bind_var_num => l_ins_bind_var_num
6430 ) ;
6431
6432 IF p_commit_flag = 'Y' THEN
6433 IF l_temp_rows_inserted = 0
6434 THEN
6435 l_result := TRUE;
6436 EXIT;
6437 ELSIF l_temp_rows_inserted < C_BATCH_COMMIT_SIZE
6438 -- not accurate because of the multi-insert
6439 -- but it works for small calculations
6440 -- which is when the check is more useful
6441 THEN
6442 l_exit_after_calculation := TRUE;
6443 ELSE
6444 l_exit_after_calculation := FALSE;
6445 END IF;
6446 ELSE
6447 IF l_temp_rows_inserted = 0
6448 THEN
6449 l_result := TRUE;
6450 EXIT;
6451 ELSE
6452 l_exit_after_calculation := TRUE;
6453 END IF;
6454 END IF;
6455
6456 IF p_update_mode <> 'M'
6457 THEN
6458 IF p_commit_flag = 'Y'
6459 THEN
6460 --If commit flag is set then the balance calculation was not called in
6461 --online mode. Hence we have time to call the open period routine.
6462 FOR l_apps_ldgr IN
6463 (
6464 SELECT DISTINCT
6465 xbct.application_id
6466 ,xbct.ledger_id
6467 FROM xla_bal_ctrl_lines_gt xbct
6468 UNION
6469 SELECT DISTINCT
6470 xbat.application_id
6471 ,xbat.ledger_id
6472 FROM xla_bal_anacri_lines_gt xbat
6473 )
6474 LOOP
6475 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6476 trace
6477 ( p_module => l_log_module
6478 ,p_msg => 'Moving bals forward for ledger id: '
6479 || l_apps_ldgr.ledger_id
6480 ,p_level => C_LEVEL_STATEMENT
6481 );
6482 END IF;
6483
6484 IF NVL(p_balance_source_code, 'C') = 'C'
6485 THEN
6486 IF NOT AUT_check_create_period_bals
6487 ( p_application_id => l_apps_ldgr.application_id
6488 ,p_ledger_id => l_apps_ldgr.ledger_id
6489 ,p_balance_source_code => 'C'
6490 )
6491 THEN
6492 ROLLBACK TO SAVEPOINT_INCREMENTAL;
6493 IF (C_LEVEL_EVENT >= g_log_level) THEN
6494 trace
6495 ( p_module => l_log_module
6496 ,p_msg => 'Rolled back to SAVE POINT'
6497 || l_apps_ldgr.ledger_id
6498 ,p_level => C_LEVEL_EVENT
6499 );
6500 END IF;
6501 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6502 trace
6503 ( p_module => l_log_module
6504 ,p_msg => 'END ' || l_log_module
6505 ,p_level => C_LEVEL_PROCEDURE);
6506 END IF;
6507 RETURN FALSE;
6508 END IF;
6509 END IF;
6510
6511 IF NVL(p_balance_source_code, 'A') = 'A'
6512 THEN
6513 IF NOT AUT_check_create_period_bals
6514 ( p_application_id => l_apps_ldgr.application_id
6515 ,p_ledger_id => l_apps_ldgr.ledger_id
6516 ,p_balance_source_code => 'A'
6517 )
6518 THEN
6522 ( p_module => l_log_module
6519 ROLLBACK TO SAVEPOINT_INCREMENTAL;
6520 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6521 trace
6523 ,p_msg => 'END ' || l_log_module
6524 ,p_level => C_LEVEL_PROCEDURE);
6525 END IF;
6526 RETURN FALSE;
6527 END IF;
6528 END IF;
6529 END LOOP;
6530 END IF; --p_commit_flag
6531 END IF; --p_update_mode
6532
6533 IF NOT lock_create_balance_statuses
6534 THEN
6535 IF (C_LEVEL_ERROR >= g_log_level) THEN
6536 trace
6537 ( p_module => l_log_module
6538 ,p_msg => 'lock_create_balance_status failed'
6539 ,p_level => C_LEVEL_ERROR
6540 );
6541 END IF;
6542 ROLLBACK TO SAVEPOINT_INCREMENTAL;
6543 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6544 trace
6545 ( p_module => l_log_module
6546 ,p_msg => 'END ' || l_log_module
6547 ,p_level => C_LEVEL_PROCEDURE);
6548 END IF;
6549 RETURN FALSE;
6550 END IF;
6551
6552 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6553 trace
6554 ( p_module => l_log_module
6555 ,p_msg => 'lookup of balance statuses'
6556 ,p_level => C_LEVEL_STATEMENT
6557 );
6558 END IF;
6559
6560 UPDATE xla_bal_ctrl_lines_gt xbct
6561 SET (
6562 balance_status_code
6563 ,balance_status_eff_per_num
6564 )
6565 =
6566 (
6567 SELECT xbs.balance_status_code
6568 ,xbs.effective_period_num
6569 FROM xla_balance_statuses xbs
6570 WHERE xbs.application_id = xbct.application_id
6571 AND xbs.ledger_id = xbct.ledger_id
6572 AND xbs.code_combination_id = xbct.code_combination_id
6573 AND xbs.balance_source_code = 'C'
6574 );
6575 l_row_count := SQL%ROWCOUNT;
6576
6577 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6578 trace
6579 (p_module => l_log_module
6580 ,p_msg => l_row_count ||
6581 ' updated in xla_bal_ctrl_lines_gt'
6582 ,p_level => C_LEVEL_STATEMENT
6583 );
6584 END IF;
6585
6586 UPDATE xla_bal_anacri_lines_gt xbat
6587 SET (
6588 balance_status_code
6589 ,balance_status_eff_per_num
6590 ,account_type
6591 )
6592 =
6593 (
6594 SELECT xbs.balance_status_code
6595 ,xbs.effective_period_num
6596 ,xbs.account_type
6597 FROM xla_balance_statuses xbs
6598 WHERE xbs.application_id = xbat.application_id
6599 AND xbs.ledger_id = xbat.ledger_id
6600 AND xbs.code_combination_id = xbat.code_combination_id
6601 AND xbs.balance_source_code = 'A'
6602 );
6603
6604 l_row_count := SQL%ROWCOUNT;
6605
6606 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6607 trace
6608 (p_module => l_log_module
6609 ,p_msg => l_row_count ||
6610 ' updated in xla_bal_anacri_lines_gt'
6611 ,p_level => C_LEVEL_STATEMENT
6612 );
6613 END IF;
6614
6615 l_result := TRUE;
6616
6617 IF p_update_mode <> 'M'
6618 THEN
6619 --Remove the lines for which the balance status is in maintenance mode.
6620 DELETE
6621 FROM xla_bal_ctrl_lines_gt xbct
6622 WHERE xbct.balance_status_code = 'M';
6623
6624 l_row_count := SQL%ROWCOUNT;
6625
6626 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6627 trace
6628 ( p_module => l_log_module
6629 ,p_msg => l_row_count ||
6630 ' lines deleted from xla_bal_ctrl_lines_gt'
6631 ,p_level => C_LEVEL_STATEMENT
6632 );
6633 END IF;
6634
6635 IF l_row_count > 0
6636 THEN
6637 l_result := FALSE;
6638 END IF;
6639
6640 DELETE
6641 FROM xla_bal_anacri_lines_gt xbat
6642 WHERE xbat.balance_status_code = 'M';
6643 l_row_count := SQL%ROWCOUNT;
6644
6645 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6646 trace
6647 (p_module => l_log_module
6648 ,p_msg => l_row_count ||
6649 ' lines deleted from xla_bal_anacri_lines_gt'
6650 ,p_level => C_LEVEL_STATEMENT
6651 );
6652 END IF;
6653
6654 IF l_row_count > 0
6655 THEN
6656 l_result := FALSE;
6657 END IF;
6658
6659 END IF;
6660
6661 IF p_update_mode = 'A'
6662 OR p_update_mode = 'M'
6663 THEN
6664 l_operation_code := 'A';
6665 ELSIF p_update_mode = 'D'
6666 THEN
6670 l_operation_code := 'F';
6667 l_operation_code := 'R';
6668 ELSIF p_update_mode = 'F'
6669 THEN
6671 ELSE
6672 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
6673 trace
6674 (p_module => l_log_module
6675 ,p_msg => 'EXCEPTION:' ||
6676 'Unsupported p_update_mode value: ' || p_update_mode
6677 ,p_level => C_LEVEL_EXCEPTION
6678 );
6679 END IF;
6680 xla_exceptions_pkg.raise_message
6681 (p_appli_s_name => 'XLA'
6682 ,p_msg_name => 'XLA_COMMON_ERROR'
6683 ,p_token_1 => 'LOCATION'
6684 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
6685 ,p_token_2 => 'ERROR'
6686 ,p_value_2 => 'EXCEPTION:' ||
6687 'Unsupported p_update_mode value: ' || p_update_mode);
6688 END IF;
6689
6690 --Control balances
6691 IF NVL(p_balance_source_code, 'C') = 'C'
6692 THEN
6693 l_temp_rows_inserted := load_ctrl_secondary_temp_tabs
6694 ( p_operation_code => l_operation_code
6695 );
6696 IF l_temp_rows_inserted > 0
6697 THEN
6698 FOR i IN
6699 (
6700 SELECT DISTINCT
6701 bclt.application_id
6702 ,bclt.ledger_id
6703 ,bclt.effective_period_num
6704 FROM xla_bal_ctrl_lines_gt bclt
6705 ORDER BY bclt.application_id
6706 ,bclt.ledger_id
6707 ,bclt.effective_period_num
6708
6709 )
6710 LOOP
6711
6712 IF p_update_mode = 'M'
6713 THEN
6714 cache_ledger_period_statuses
6715 ( p_ledger_id => i.ledger_id
6716 ,p_first_eff_per_num => i.effective_period_num
6717 ,p_load_single_period => TRUE
6718 );
6719 ELSE
6720 cache_ledger_period_statuses
6721 ( p_ledger_id => i.ledger_id
6722 ,p_first_eff_per_num => i.effective_period_num
6723 ,p_load_single_period => FALSE
6724 );
6725 END IF;
6726
6727 --If p_commit_flag is 'N' we assume the data are limited
6728 --therefore we perform a localized moving forward of the balances
6729 IF p_update_mode <> 'M'
6730 AND p_commit_flag = 'N'
6731 THEN
6732 --control balances
6733 FOR m IN
6734 (
6735 SELECT DISTINCT
6736 bcct.code_combination_id
6737 ,bcct.party_type_code
6738 ,bcct.party_id
6739 FROM xla_bal_ctrl_ctrbs_gt bcct
6740 WHERE bcct.application_id = i.application_id
6741 AND bcct.ledger_id = i.ledger_id
6742 AND bcct.effective_period_num = i.effective_period_num
6743 AND bcct.balance_status_eff_per_num < bcct.effective_period_num
6744 )
6745 LOOP
6746 IF NOT move_identified_bals_forward
6747 ( p_application_id => i.application_id
6748 ,p_ledger_id => i.ledger_id
6749 ,p_code_combination_id => m.code_combination_id
6750 ,p_dest_effective_period_num => i.effective_period_num
6751 ,p_balance_source_code => 'C'
6752 ,p_party_type_code => m.party_type_code
6753 ,p_party_id => m.party_id
6754 ,p_analytical_criterion_code => NULL
6755 ,p_anacri_type_code => NULL
6756 ,p_amb_context_code => NULL
6757 ,p_ac1 => NULL
6758 ,p_ac2 => NULL
6759 ,p_ac3 => NULL
6760 ,p_ac4 => NULL
6761 ,p_ac5 => NULL
6762 )
6763 THEN
6764 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6765 trace
6766 (p_module => l_log_module
6767 ,p_msg => 'move_identified_bals_forward failed'
6768 ,p_level => C_LEVEL_STATEMENT
6769 );
6770 END IF;
6771 ROLLBACK TO SAVEPOINT_INCREMENTAL;
6772 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6773 trace
6774 (p_module => l_log_module
6775 ,p_msg => 'END ' || l_log_module
6776 ,p_level => C_LEVEL_PROCEDURE);
6777 END IF;
6778 RETURN FALSE;
6779 END IF;
6780 END LOOP;
6781 END IF;
6782
6783 l_result := l_result AND
6784 calculate_control_balances
6785 ( p_application_id => i.application_id
6789 );
6786 ,p_ledger_id => i.ledger_id
6787 ,p_effective_period_num => i.effective_period_num
6788 ,p_operation_code => l_operation_code
6790 END LOOP;
6791
6792 IF p_update_mode <> 'F'
6793 THEN
6794 g_date := SYSDATE;
6795
6796 UPDATE xla_ae_lines ael
6797 SET ael.control_balance_flag = l_balance_flag_post_update
6798 ,ael.last_update_date = g_date
6799 ,ael.last_updated_by = g_user_id
6800 ,ael.last_update_login = g_login_id
6801 ,ael.program_update_date = g_date
6802 ,ael.program_application_id = g_prog_appl_id
6803 ,ael.program_id = g_prog_id
6804 ,ael.request_id = g_req_id
6805 WHERE
6806 ( ael.ROWID
6807 )
6808 IN
6809 ( SELECT xbct.line_rowid
6810 FROM xla_bal_ctrl_lines_gt xbct
6811 )
6812 AND EXISTS (SELECT 1
6813 FROM xla_ae_headers aeh
6814 ,gl_period_statuses gps
6815 WHERE ael.ae_header_id = aeh.ae_header_id
6816 AND aeh.application_id = ael.application_id
6817 AND gps.application_id = 101
6818 AND gps.period_name = aeh.period_name
6819 AND gps.ledger_id = aeh.ledger_id
6820 AND gps.closing_status IN ('O','C','P'));
6821 l_row_count := SQL%ROWCOUNT;
6822
6823 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6824 trace
6825 (p_module => l_log_module
6826 ,p_msg => l_row_count
6827 || ' control flags marked as : '
6828 || l_balance_flag_post_update
6829 ,p_level => C_LEVEL_STATEMENT
6830 );
6831 END IF;
6832
6833 END IF; --p_update_mode
6834
6835 END IF; --l_temp_rows_inserted
6836
6837 END IF; --p_balance_source_code
6838
6839 IF NVL(p_balance_source_code, 'A') = 'A'
6840 THEN
6841 l_temp_rows_inserted := load_alyt_secondary_temp_tabs
6842 ( p_operation_code => l_operation_code
6843 );
6844
6845 IF l_temp_rows_inserted > 0
6846 THEN
6847 FOR i IN
6848 (
6849 SELECT DISTINCT
6850 bclt.application_id
6851 ,bclt.ledger_id
6852 ,bclt.effective_period_num
6853 FROM xla_bal_anacri_lines_gt bclt
6854 )
6855 LOOP
6856
6857 IF p_update_mode = 'M'
6858 THEN
6859 cache_ledger_period_statuses
6860 ( p_ledger_id => i.ledger_id
6861 ,p_first_eff_per_num => i.effective_period_num
6862 ,p_load_single_period => TRUE
6863 );
6864 ELSE
6865 cache_ledger_period_statuses
6866 ( p_ledger_id => i.ledger_id
6867 ,p_first_eff_per_num => i.effective_period_num
6868 ,p_load_single_period => FALSE
6869 );
6870 END IF;
6871 --If p_commit_flag is 'N' we assume the data are limited
6872 --therefore we perform a localized moving forward of the balances
6873 IF p_update_mode <> 'M'
6874 AND p_commit_flag = 'N'
6875 THEN
6876 --analytical balances
6877 FOR m IN
6878 (
6879 SELECT DISTINCT
6880 bact.code_combination_id
6881 ,bact.analytical_criterion_code
6882 ,bact.analytical_criterion_type_code
6883 ,bact.amb_context_code
6884 ,bact.ac1
6885 ,bact.ac2
6886 ,bact.ac3
6887 ,bact.ac4
6888 ,bact.ac5
6889 FROM xla_bal_ac_ctrbs_gt bact
6890 WHERE bact.application_id = i.application_id
6891 AND bact.ledger_id = i.ledger_id
6892 AND bact.effective_period_num = i.effective_period_num
6893 AND bact.balance_status_eff_per_num < bact.effective_period_num
6894 )
6895 LOOP
6896 IF NOT move_identified_bals_forward
6897 ( p_application_id => i.application_id
6898 ,p_ledger_id => i.ledger_id
6899 ,p_code_combination_id => m.code_combination_id
6900 ,p_dest_effective_period_num => i.effective_period_num
6901 ,p_balance_source_code => 'A'
6902 ,p_party_type_code => NULL
6903 ,p_party_id => NULL
6904 ,p_analytical_criterion_code => m.analytical_criterion_code
6908 ,p_ac2 => m.ac2
6905 ,p_anacri_type_code => m.analytical_criterion_type_code
6906 ,p_amb_context_code => m.amb_context_code
6907 ,p_ac1 => m.ac1
6909 ,p_ac3 => m.ac3
6910 ,p_ac4 => m.ac4
6911 ,p_ac5 => m.ac5
6912 )
6913 THEN
6914 IF (C_LEVEL_ERROR >= g_log_level) THEN
6915 trace
6916 (p_module => l_log_module
6917 ,p_msg => 'move_identified_bals_forward failed'
6918 ,p_level => C_LEVEL_ERROR
6919 );
6920 END IF;
6921 ROLLBACK TO SAVEPOINT_INCREMENTAL;
6922 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
6923 trace
6924 (p_module => l_log_module
6925 ,p_msg => 'END ' || l_log_module
6926 ,p_level => C_LEVEL_PROCEDURE);
6927 END IF;
6928 RETURN FALSE;
6929 END IF;
6930
6931 END LOOP;
6932 END IF;
6933
6934 l_result := l_result AND
6935 calculate_analytical_balances
6936 ( p_application_id => i.application_id
6937 ,p_ledger_id => i.ledger_id
6938 ,p_effective_period_num => i.effective_period_num
6939 ,p_operation_code => l_operation_code
6940 );
6941
6942 END LOOP;
6943
6944 IF p_update_mode <> 'F'
6945 THEN
6946 g_date := SYSDATE;
6947
6948 UPDATE xla_ae_lines ael
6949 SET ael.analytical_balance_flag = l_balance_flag_post_update
6950 ,ael.last_update_date = g_date
6951 ,ael.last_updated_by = g_user_id
6952 ,ael.last_update_login = g_login_id
6953 ,ael.program_update_date = g_date
6954 ,ael.program_application_id = g_prog_appl_id
6955 ,ael.program_id = g_prog_id
6956 ,ael.request_id = g_req_id
6957 WHERE ( ael.application_id
6958 ,ael.ae_header_id
6959 ,ael.ae_line_num
6960 )
6961 IN
6962 ( SELECT xbct.application_id
6963 ,xbct.ae_header_id
6964 ,xbct.ae_line_num
6965 FROM xla_bal_anacri_lines_gt xbct
6966 )
6967 AND EXISTS (SELECT 1
6968 FROM xla_ae_headers aeh
6969 ,gl_period_statuses gps
6970 WHERE ael.ae_header_id = aeh.ae_header_id
6971 AND aeh.application_id = ael.application_id
6972 AND gps.application_id = 101
6973 AND gps.period_name = aeh.period_name
6974 AND gps.ledger_id = aeh.ledger_id
6975 AND gps.closing_status IN ('O','C','P')); --Bug 7493686
6976
6977 l_row_count := SQL%ROWCOUNT;
6978
6979 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
6980 trace
6981 (p_module => l_log_module
6982 ,p_msg => l_row_count || ' analytical flags as : '
6983 || l_balance_flag_post_update
6984 ,p_level => C_LEVEL_STATEMENT
6985 );
6986 END IF;
6987 END IF; --p_update_mode
6988
6989 END IF; --l_temp_rows_inserted
6990
6991 END IF; --p_balance_source_code
6992
6993 IF p_commit_flag = 'Y'
6994 THEN
6995 COMMIT;
6996 ELSIF p_commit_flag = 'N'
6997 THEN
6998 NULL;
6999 ELSE
7000 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7001 trace
7002 (p_module => l_log_module
7003 ,p_msg => 'EXCEPTION:' ||
7004 'Unkown p_commit_flag value: ' || p_commit_flag
7005 ,p_level => C_LEVEL_EXCEPTION
7006 );
7007 END IF;
7008 xla_exceptions_pkg.raise_message
7009 (p_appli_s_name => 'XLA'
7010 ,p_msg_name => 'XLA_COMMON_ERROR'
7011 ,p_token_1 => 'LOCATION'
7012 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7013 ,p_token_2 => 'ERROR'
7014 ,p_value_2 => 'EXCEPTION:' ||
7015 'Unkown p_commit_flag value: ' || p_commit_flag);
7016 END IF;
7017
7018 IF l_exit_after_calculation
7019 THEN
7020 EXIT;
7021 END IF;
7022 END LOOP;
7023
7024 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7025 trace
7026 (p_module => l_log_module
7027 ,p_msg => 'END ' || l_log_module
7028 ,p_level => C_LEVEL_PROCEDURE);
7029 END IF;
7030
7031 RETURN l_result;
7032
7033 EXCEPTION
7034 WHEN le_resource_busy
7035 THEN
7039 ,p_msg => 'cannot lock accounting entry records'
7036 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7037 trace
7038 (p_module => l_log_module
7040 ,p_level => C_LEVEL_STATEMENT
7041 );
7042 END IF;
7043 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7044 trace
7045 (p_module => l_log_module
7046 ,p_msg => 'END ' || l_log_module
7047 ,p_level => C_LEVEL_PROCEDURE);
7048 END IF;
7049 ROLLBACK TO SAVEPOINT_INCREMENTAL;
7050 RETURN FALSE;
7051 WHEN xla_exceptions_pkg.application_exception THEN
7052 RAISE;
7053 WHEN OTHERS THEN
7054 xla_exceptions_pkg.raise_message
7055 (p_location => 'xla_balances_pkg.calculate_balances');
7056
7057 END calculate_balances;
7058
7059 FUNCTION event_set_update
7060 (
7061 p_update_mode IN VARCHAR2
7062 ) RETURN BOOLEAN
7063 IS
7064 l_return_value BOOLEAN;
7065
7066 l_log_module VARCHAR2 (2000);
7067
7068 BEGIN
7069 IF g_log_enabled THEN
7070 l_log_module := C_DEFAULT_MODULE||'.event_set_update';
7071 END IF;
7072 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7073 trace
7074 (p_module => l_log_module
7075 ,p_msg => 'BEGIN ' || l_log_module
7076 ,p_level => C_LEVEL_PROCEDURE);
7077 END IF;
7078
7079 --parameter validation
7080 IF p_update_mode IS NULL
7081 OR p_update_mode NOT IN ('A', 'D')
7082 THEN
7083 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7084 trace
7085 (p_module => l_log_module
7086 ,p_msg => 'EXCEPTION:' ||
7087 'Unsupported value for p_update_mode: ' || p_update_mode
7088 ,p_level => C_LEVEL_EXCEPTION
7089 );
7090 END IF;
7091 xla_exceptions_pkg.raise_message
7092 (p_appli_s_name => 'XLA'
7093 ,p_msg_name => 'XLA_COMMON_ERROR'
7094 ,p_token_1 => 'LOCATION'
7095 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7096 ,p_token_2 => 'ERROR'
7097 ,p_value_2 => 'EXCEPTION:' ||
7098 'Unsupported value for p_update_mode: ' || p_update_mode);
7099 END IF;
7100
7101 l_return_value := calculate_balances
7102 ( p_application_id => NULL
7103 ,p_ledger_id => NULL
7104 ,p_entity_id => NULL
7105 ,p_event_id => NULL
7106 ,p_request_id => NULL
7107 ,p_accounting_batch_id => NULL
7108 ,p_ae_header_id => NULL
7109 ,p_ae_line_num => NULL
7110 ,p_code_combination_id => NULL
7111 ,p_period_name => NULL
7112 ,p_update_mode => p_update_mode
7113 ,p_balance_source_code => NULL
7114 ,p_called_by_flag => NULL
7115 ,p_commit_flag => 'N'
7116 );
7117
7118 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7119 trace
7120 (p_module => l_log_module
7121 ,p_msg => 'END ' || l_log_module
7122 ,p_level => C_LEVEL_PROCEDURE);
7123 END IF;
7124
7125 RETURN l_return_value;
7126
7127 EXCEPTION
7128 WHEN xla_exceptions_pkg.application_exception THEN
7129 RAISE;
7130 WHEN OTHERS THEN
7131 xla_exceptions_pkg.raise_message
7132 (p_location => 'xla_balances_pkg.event_set_update');
7133 END event_set_update;
7134
7135
7136
7137 FUNCTION single_update
7138 (
7139 p_application_id IN INTEGER
7140 ,p_ae_header_id IN INTEGER
7141 ,p_ae_line_num IN INTEGER
7142 ,p_update_mode IN VARCHAR2
7143 ) RETURN BOOLEAN
7144 IS
7145 l_return_value BOOLEAN ;
7146
7147 l_log_module VARCHAR2 (2000);
7148
7149 BEGIN
7150 IF g_log_enabled THEN
7151 l_log_module := C_DEFAULT_MODULE||'.single_update';
7152 END IF;
7153 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7154 trace
7155 (p_module => l_log_module
7156 ,p_msg => 'BEGIN ' || l_log_module
7157 ,p_level => C_LEVEL_PROCEDURE);
7158 END IF;
7159
7160 --parameter validation
7161 IF p_application_id IS NULL
7162 THEN
7163 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7164 trace
7165 (p_module => l_log_module
7166 ,p_msg => 'EXCEPTION:' ||
7167 'p_application_id cannot be NULL'
7168 ,p_level => C_LEVEL_EXCEPTION
7169 );
7170 END IF;
7171 xla_exceptions_pkg.raise_message
7172 (p_appli_s_name => 'XLA'
7173 ,p_msg_name => 'XLA_COMMON_ERROR'
7174 ,p_token_1 => 'LOCATION'
7175 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7176 ,p_token_2 => 'ERROR'
7177 ,p_value_2 => 'EXCEPTION:' ||
7178 'p_application_id cannot be NULL');
7179 END IF;
7180
7181 IF p_ae_header_id IS NULL
7182 THEN
7186 ,p_msg => 'EXCEPTION:' ||
7183 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7184 trace
7185 (p_module => l_log_module
7187 'p_ae_header_id cannot be NULL'
7188 ,p_level => C_LEVEL_EXCEPTION
7189 );
7190 END IF;
7191 xla_exceptions_pkg.raise_message
7192 (p_appli_s_name => 'XLA'
7193 ,p_msg_name => 'XLA_COMMON_ERROR'
7194 ,p_token_1 => 'LOCATION'
7195 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7196 ,p_token_2 => 'ERROR'
7197 ,p_value_2 => 'EXCEPTION:' ||
7198 'p_ae_header_id cannot be NULL');
7199 END IF;
7200
7201 IF p_update_mode IS NULL
7202 THEN
7203 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7204 trace
7205 (p_module => l_log_module
7206 ,p_msg => 'EXCEPTION:' ||
7207 'p_update_mode cannot be NULL'
7208 ,p_level => C_LEVEL_EXCEPTION
7209 );
7210 END IF;
7211 xla_exceptions_pkg.raise_message
7212 (p_appli_s_name => 'XLA'
7213 ,p_msg_name => 'XLA_COMMON_ERROR'
7214 ,p_token_1 => 'LOCATION'
7215 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7216 ,p_token_2 => 'ERROR'
7217 ,p_value_2 => 'EXCEPTION:' ||
7218 'p_update_mode cannot be NULL');
7219 ELSIF p_update_mode NOT IN ('A', 'D', 'F')
7220 THEN
7221 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7222 trace
7223 (p_module => l_log_module
7224 ,p_msg => 'EXCEPTION:' ||
7225 'Unsupported value for p_update_mode: ' || p_update_mode
7226 ,p_level => C_LEVEL_EXCEPTION
7227 );
7228 END IF;
7229 xla_exceptions_pkg.raise_message
7230 (p_appli_s_name => 'XLA'
7231 ,p_msg_name => 'XLA_COMMON_ERROR'
7232 ,p_token_1 => 'LOCATION'
7233 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7234 ,p_token_2 => 'ERROR'
7235 ,p_value_2 => 'EXCEPTION:' ||
7236 'Unsupported value for p_update_mode: ' || p_update_mode);
7237 END IF;
7238
7239 l_return_value := calculate_balances
7240 ( p_application_id => p_application_id
7241 ,p_ledger_id => NULL
7242 ,p_entity_id => NULL
7243 ,p_event_id => NULL
7244 ,p_request_id => NULL
7245 ,p_accounting_batch_id => NULL
7246 ,p_ae_header_id => p_ae_header_id
7247 ,p_ae_line_num => p_ae_line_num
7248 ,p_code_combination_id => NULL
7249 ,p_period_name => NULL
7250 ,p_update_mode => p_update_mode
7251 ,p_balance_source_code => NULL
7252 ,p_called_by_flag => NULL
7253 ,p_commit_flag => 'N'
7254 );
7255
7256 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7257 trace
7258 (p_module => l_log_module
7259 ,p_msg => 'END ' || l_log_module
7260 ,p_level => C_LEVEL_PROCEDURE);
7261 END IF;
7262 RETURN l_return_value;
7263
7264 EXCEPTION
7265 WHEN xla_exceptions_pkg.application_exception THEN
7266 RAISE;
7267 WHEN OTHERS THEN
7268 xla_exceptions_pkg.raise_message
7269 (p_location => 'xla_balances_pkg.single_update');
7270 END single_update;
7271
7272
7273 PROCEDURE massive_update_srs
7274 ( p_errbuf OUT NOCOPY VARCHAR2
7275 ,p_retcode OUT NOCOPY NUMBER
7276 ,p_application_id IN NUMBER
7277 ,p_dummy IN VARCHAR2
7278 ,p_ledger_id IN NUMBER
7279 ,p_accounting_batch_id IN NUMBER
7280 ,p_update_mode IN VARCHAR2)
7281 IS
7282 /*======================================================================+
7283 | |
7284 | Public Function |
7285 | |
7286 | Description |
7287 | ----------- |
7288 | Just the SRS wrapper for massive_update in batch mode |
7289 | |
7290 | Pseudo-code |
7291 | ----------- |
7292 | Call massive_update and assign its return code to |
7293 | p_retcode |
7294 | RETURN p_retcode (0=success, 1=warning, 2=error) |
7295 | |
7296 | Open issues |
7297 | ----------- |
7298 | |
7299 | 1) Need to review the value assigned to p_errbuf |
7303 +======================================================================*/
7300 | |
7301 | |
7302 | |
7304
7305 l_commit_flag VARCHAR2(1);
7306
7307 l_log_module VARCHAR2 (2000);
7308
7309 BEGIN
7310
7311 IF g_log_enabled THEN
7312 l_log_module := C_DEFAULT_MODULE||'.massive_update_srs';
7313 END IF;
7314 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7315 trace
7316 (p_module => l_log_module
7317 ,p_msg => 'BEGIN ' || l_log_module
7318 ,p_level => C_LEVEL_PROCEDURE);
7319 END IF;
7320
7321 fnd_file.put_line(fnd_file.log,'p_application_id: ' || p_application_id);
7322 fnd_file.put_line(fnd_file.log,'p_ledger_id: ' || p_ledger_id);
7323 fnd_file.put_line(fnd_file.log,'p_accounting_batch_id: ' || p_accounting_batch_id);
7324 fnd_file.put_line(fnd_file.log,'p_update_mode: ' || p_update_mode);
7325
7326 IF p_update_mode = 'F'
7327 THEN
7328 l_commit_flag := 'N';
7329 ELSE
7330 l_commit_flag := 'Y';
7331 END IF;
7332
7333 IF calculate_balances
7334 ( p_application_id => p_application_id
7335 ,p_ledger_id => p_ledger_id
7336 ,p_entity_id => NULL
7337 ,p_event_id => NULL
7338 ,p_request_id => NULL
7339 ,p_accounting_batch_id => p_accounting_batch_id
7340 ,p_ae_header_id => NULL
7341 ,p_ae_line_num => NULL
7342 ,p_code_combination_id => NULL
7343 ,p_period_name => NULL
7344 ,p_update_mode => p_update_mode
7345 ,p_balance_source_code => NULL
7346 ,p_called_by_flag => NULL
7347 ,p_commit_flag => l_commit_flag
7348 )
7349 THEN
7350 p_retcode := 0;
7351 ELSE
7352 p_retcode := 1;
7353 END IF;
7354
7355 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7356 trace
7357 (p_module => l_log_module
7358 ,p_msg => 'END ' || l_log_module
7359 ,p_level => C_LEVEL_PROCEDURE);
7360 END IF;
7361
7362 EXCEPTION
7363 WHEN xla_exceptions_pkg.application_exception THEN
7364 p_retcode := 2;
7365 p_errbuf := sqlerrm;
7366 WHEN OTHERS THEN
7367 p_retcode := 2;
7368 p_errbuf := sqlerrm;
7369 END massive_update_srs;
7370
7371 FUNCTION massive_update_for_events(p_application_id IN INTEGER)
7372 RETURN boolean
7373 IS
7374 l_log_module VARCHAR2 (2000);
7375
7376 BEGIN
7377 IF g_log_enabled THEN
7378 l_log_module := C_DEFAULT_MODULE||'.massive_update_for_events';
7379 END IF;
7380
7381 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7382 trace
7383 (p_module => l_log_module
7384 ,p_msg => 'BEGIN ' || l_log_module
7385 ,p_level => C_LEVEL_PROCEDURE);
7386 END IF;
7387
7388 --parameter validation
7389 --p_application_id must have a value, always
7390 IF p_application_id IS NULL
7391 THEN
7392 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7393 trace
7394 (p_module => l_log_module
7395 ,p_msg => 'EXCEPTION:' ||
7396 'p_application_id cannot be NULL'
7397 ,p_level => C_LEVEL_EXCEPTION
7398 );
7399 END IF;
7400 xla_exceptions_pkg.raise_message
7401 (p_appli_s_name => 'XLA'
7402 ,p_msg_name => 'XLA_COMMON_ERROR'
7403 ,p_token_1 => 'LOCATION'
7404 ,p_value_1 => 'xla_balances_pkg.pre_accounting'
7405 ,p_token_2 => 'ERROR'
7406 ,p_value_2 => 'EXCEPTION:' ||
7407 'p_application_id cannot be NULL'
7408 );
7409 END IF;
7410
7411 RETURN calculate_balances
7412 ( p_application_id => p_application_id
7413 ,p_ledger_id => NULL
7414 ,p_entity_id => NULL
7415 ,p_event_id => NULL
7416 ,p_request_id => NULL
7417 ,p_accounting_batch_id => NULL
7418 ,p_ae_header_id => NULL
7419 ,p_ae_line_num => NULL
7420 ,p_code_combination_id => NULL
7421 ,p_period_name => NULL
7422 ,p_update_mode => 'D'
7423 ,p_balance_source_code => NULL
7424 ,p_called_by_flag => 'E'
7425 ,p_commit_flag => 'N'
7426 );
7427
7428 EXCEPTION
7429 WHEN xla_exceptions_pkg.application_exception THEN
7430 RAISE;
7431 WHEN OTHERS THEN
7432 xla_exceptions_pkg.raise_message
7433 (p_location => 'xla_balances_pkg.massive_update_for_events');
7434 END massive_update_for_events;
7435
7436 FUNCTION massive_update
7437 (
7438 p_application_id IN INTEGER
7439 ,p_ledger_id IN INTEGER
7443 ,p_accounting_batch_id IN INTEGER
7440 ,p_entity_id IN INTEGER
7441 ,p_event_id IN INTEGER
7442 ,p_request_id IN INTEGER
7444 ,p_update_mode IN VARCHAR2
7445 ,p_execution_mode IN VARCHAR2
7446 ) RETURN BOOLEAN
7447 IS
7448 l_req_id NUMBER;
7449 l_result BOOLEAN;
7450
7451 l_return_value BOOLEAN;
7452
7453 l_log_module VARCHAR2 (2000);
7454
7455 BEGIN
7456 IF g_log_enabled THEN
7457 l_log_module := C_DEFAULT_MODULE||'.massive_update';
7458 END IF;
7459
7460 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7461 trace
7462 (p_module => l_log_module
7463 ,p_msg => 'BEGIN ' || l_log_module
7464 ,p_level => C_LEVEL_PROCEDURE);
7465 END IF;
7466
7467 --parameter validation
7468 --p_application_id must have a value, always
7469 IF p_application_id IS NULL
7470 THEN
7471 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7472 trace
7473 (p_module => l_log_module
7474 ,p_msg => 'EXCEPTION:' ||
7475 'p_application_id cannot be NULL'
7476 ,p_level => C_LEVEL_EXCEPTION
7477 );
7478 END IF;
7479
7480 xla_exceptions_pkg.raise_message
7481 (p_appli_s_name => 'XLA'
7482 ,p_msg_name => 'XLA_COMMON_ERROR'
7483 ,p_token_1 => 'LOCATION'
7484 ,p_value_1 => 'xla_balances_pkg.massive_update'
7485 ,p_token_2 => 'ERROR'
7486 ,p_value_2 => 'EXCEPTION: p_application_id cannot be NULL');
7487
7488 END IF;
7489
7490 --if p_entity_id has a value, p_ledger_id, p_event_id,
7491 --p_request_id and p_accounting_batch_id must be NULL
7492 IF p_entity_id IS NOT NULL
7493 THEN
7494 IF p_ledger_id IS NOT NULL
7495 THEN
7496 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7497 trace
7498 (p_module => l_log_module
7499 ,p_msg => 'EXCEPTION:' ||
7500 'IF p_entity_id is not NULL, p_ledger_id must be NULL '
7501 ,p_level => C_LEVEL_EXCEPTION
7502 );
7503 END IF;
7504 xla_exceptions_pkg.raise_message
7505 (p_appli_s_name => 'XLA'
7506 ,p_msg_name => 'XLA_COMMON_ERROR'
7507 ,p_token_1 => 'LOCATION'
7508 ,p_value_1 => 'xla_balances_pkg.massive_update'
7509 ,p_token_2 => 'ERROR'
7510 ,p_value_2 => 'EXCEPTION: IF p_entity_id is not NULL, p_ledger_id must be NULL');
7511
7512 ELSIF p_event_id IS NOT NULL
7513 THEN
7514 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7515 trace
7516 (p_module => l_log_module
7517 ,p_msg => 'EXCEPTION:' ||
7518 'IF p_entity_id is not NULL, p_event_id must be NULL '
7519 ,p_level => C_LEVEL_EXCEPTION
7520 );
7521 END IF;
7522 xla_exceptions_pkg.raise_message
7523 (p_appli_s_name => 'XLA'
7524 ,p_msg_name => 'XLA_COMMON_ERROR'
7525 ,p_token_1 => 'LOCATION'
7526 ,p_value_1 => 'xla_balances_pkg.massive_update'
7527 ,p_token_2 => 'ERROR'
7528 ,p_value_2 => 'EXCEPTION: IF p_entity_id is not NULL, p_event_id must be NULL');
7529 ELSIF p_request_id IS NOT NULL
7530 THEN
7531 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7532 trace
7533 (p_module => l_log_module
7534 ,p_msg => 'EXCEPTION:' ||
7535 'IF p_entity_id is not NULL, p_request_id must be NULL '
7536 ,p_level => C_LEVEL_EXCEPTION
7537 );
7538 END IF;
7539 xla_exceptions_pkg.raise_message
7540 (p_appli_s_name => 'XLA'
7541 ,p_msg_name => 'XLA_COMMON_ERROR'
7542 ,p_token_1 => 'LOCATION'
7543 ,p_value_1 => 'xla_balances_pkg.massive_update'
7544 ,p_token_2 => 'ERROR'
7545 ,p_value_2 => 'EXCEPTION: IF p_entity_id is not NULL, p_request_id must be NULL');
7546
7547 ELSIF p_accounting_batch_id IS NOT NULL
7548 THEN
7549 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7550 trace
7551 (p_module => l_log_module
7552 ,p_msg => 'EXCEPTION:' ||
7553 'IF p_entity_id is not NULL, p_accounting_batch_id must be NULL '
7554 ,p_level => C_LEVEL_EXCEPTION
7555 );
7556 END IF;
7557 xla_exceptions_pkg.raise_message
7558 (p_appli_s_name => 'XLA'
7559 ,p_msg_name => 'XLA_COMMON_ERROR'
7560 ,p_token_1 => 'LOCATION'
7561 ,p_value_1 => 'xla_balances_pkg.massive_update'
7562 ,p_token_2 => 'ERROR'
7563 ,p_value_2 => 'EXCEPTION: IF p_entity_id is not NULL, p_accounting_batch_id must be NULL');
7564
7565 END IF;
7566 END IF;
7567
7568 --if p_request_id has a value, p_ledger_id, p_entity_id,
7569 --p_event_id and p_accounting_batch_id must be NULL
7570 IF p_request_id IS NOT NULL
7571 THEN
7572 IF p_ledger_id IS NOT NULL
7573 THEN
7574 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7575 trace
7576 (p_module => l_log_module
7580 );
7577 ,p_msg => 'EXCEPTION:' ||
7578 'IF p_request_id is not NULL, p_ledger_id must be NULL '
7579 ,p_level => C_LEVEL_EXCEPTION
7581 END IF;
7582 xla_exceptions_pkg.raise_message
7583 (p_appli_s_name => 'XLA'
7584 ,p_msg_name => 'XLA_COMMON_ERROR'
7585 ,p_token_1 => 'LOCATION'
7586 ,p_value_1 => 'xla_balances_pkg.massive_update'
7587 ,p_token_2 => 'ERROR'
7588 ,p_value_2 => 'EXCEPTION: IF p_request_id is not NULL, p_ledger_id must be NULL');
7589
7590 ELSIF p_entity_id IS NOT NULL
7591 THEN
7592 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7593 trace
7594 (p_module => l_log_module
7595 ,p_msg => 'EXCEPTION:' ||
7596 'IF p_request_id is not NULL, p_entity_id must be NULL '
7597 ,p_level => C_LEVEL_EXCEPTION
7598 );
7599 END IF;
7600 xla_exceptions_pkg.raise_message
7601 (p_appli_s_name => 'XLA'
7602 ,p_msg_name => 'XLA_COMMON_ERROR'
7603 ,p_token_1 => 'LOCATION'
7604 ,p_value_1 => 'xla_balances_pkg.massive_update'
7605 ,p_token_2 => 'ERROR'
7606 ,p_value_2 => 'EXCEPTION: IF p_request_id is not NULL, p_entity_id must be NULL');
7607
7608 ELSIF p_event_id IS NOT NULL
7609 THEN
7610 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7611 trace
7612 (p_module => l_log_module
7613 ,p_msg => 'EXCEPTION:' ||
7614 'IF p_request_id is not NULL, p_event_id must be NULL '
7615 ,p_level => C_LEVEL_EXCEPTION
7616 );
7617 END IF;
7618 xla_exceptions_pkg.raise_message
7619 (p_appli_s_name => 'XLA'
7620 ,p_msg_name => 'XLA_COMMON_ERROR'
7621 ,p_token_1 => 'LOCATION'
7622 ,p_value_1 => 'xla_balances_pkg.massive_update'
7623 ,p_token_2 => 'ERROR'
7624 ,p_value_2 => 'EXCEPTION: IF p_request_id is not NULL, p_event_id must be NULL');
7625
7626 ELSIF p_accounting_batch_id IS NOT NULL
7627 THEN
7628 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7629 trace
7630 (p_module => l_log_module
7631 ,p_msg => 'EXCEPTION:' ||
7632 'IF p_request_id is not NULL, p_accounting_batch_id must be NULL '
7633 ,p_level => C_LEVEL_EXCEPTION
7634 );
7635 END IF;
7636 xla_exceptions_pkg.raise_message
7637 (p_appli_s_name => 'XLA'
7638 ,p_msg_name => 'XLA_COMMON_ERROR'
7639 ,p_token_1 => 'LOCATION'
7640 ,p_value_1 => 'xla_balances_pkg.massive_update'
7641 ,p_token_2 => 'ERROR'
7642 ,p_value_2 => 'EXCEPTION: IF p_request_id is not NULL, p_accounting_batch_id must be NULL');
7643 END IF;
7644 END IF;
7645
7646 IF p_update_mode IS NULL
7647 OR p_update_mode NOT IN ('A', 'D', 'F')
7648 THEN
7649 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7650 trace
7651 (p_module => l_log_module
7652 ,p_msg => 'EXCEPTION:' ||
7653 'Invalid p_update_mode parameter: '|| p_update_mode
7654 ,p_level => C_LEVEL_EXCEPTION
7655 );
7656 END IF;
7657 xla_exceptions_pkg.raise_message
7658 (p_appli_s_name => 'XLA'
7659 ,p_msg_name => 'XLA_COMMON_ERROR'
7660 ,p_token_1 => 'LOCATION'
7661 ,p_value_1 => 'xla_balances_pkg.massive_update'
7662 ,p_token_2 => 'ERROR'
7663 ,p_value_2 => 'EXCEPTION: Invalid p_update_mode parameter: '|| p_update_mode);
7664 END IF;
7665
7666 IF p_execution_mode IS NULL
7667 OR p_execution_mode NOT IN ('O', 'C')
7668 THEN
7669 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7670 trace
7671 (p_module => l_log_module
7672 ,p_msg => 'EXCEPTION:' ||
7673 'Invalid p_execution_mode parameter: '|| p_execution_mode
7674 ,p_level => C_LEVEL_EXCEPTION
7675 );
7676 END IF;
7677 xla_exceptions_pkg.raise_message
7678 (p_appli_s_name => 'XLA'
7679 ,p_msg_name => 'XLA_COMMON_ERROR'
7680 ,p_token_1 => 'LOCATION'
7681 ,p_value_1 => 'xla_balances_pkg.massive_update'
7682 ,p_token_2 => 'ERROR'
7683 ,p_value_2 => 'EXCEPTION: Invalid p_execution_mode parameter: '|| p_execution_mode);
7684
7685 END IF;
7686
7687 -- If p_execution_mode is Concurrent,
7688 -- p_event_id, p_request_id must be NULL
7689 IF p_execution_mode = 'C'
7690 THEN
7691 IF p_event_id IS NOT NULL
7692 THEN
7693 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7694 trace
7695 (p_module => l_log_module
7696 ,p_msg => 'EXCEPTION:' ||
7697 'When p_execution_mode is C, p_event_id, must be NULL.'
7698 ,p_level => C_LEVEL_EXCEPTION
7699 );
7700 END IF;
7701 xla_exceptions_pkg.raise_message
7702 (p_appli_s_name => 'XLA'
7703 ,p_msg_name => 'XLA_COMMON_ERROR'
7704 ,p_token_1 => 'LOCATION'
7705 ,p_value_1 => 'xla_balances_pkg.massive_update'
7706 ,p_token_2 => 'ERROR'
7710 THEN
7707 ,p_value_2 => 'EXCEPTION: When p_execution_mode is C, p_event_id, must be NULL');
7708
7709 ELSIF p_request_id IS NOT NULL
7711 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7712 trace
7713 (p_module => l_log_module
7714 ,p_msg => 'EXCEPTION:' ||
7715 'When p_execution_mode is C, p_request_id, must be NULL.'
7716 ,p_level => C_LEVEL_EXCEPTION
7717 );
7718 END IF;
7719 xla_exceptions_pkg.raise_message
7720 (p_appli_s_name => 'XLA'
7721 ,p_msg_name => 'XLA_COMMON_ERROR'
7722 ,p_token_1 => 'LOCATION'
7723 ,p_value_1 => 'xla_balances_pkg.massive_update'
7724 ,p_token_2 => 'ERROR'
7725 ,p_value_2 => 'EXCEPTION: When p_execution_mode is C, p_request_id, must be NULL');
7726
7727 ELSIF p_entity_id IS NOT NULL
7728 THEN
7729 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7730 trace
7731 (p_module => l_log_module
7732 ,p_msg => 'EXCEPTION:' ||
7733 'When p_execution_mode is C, p_entity_id, must be NULL.'
7734 ,p_level => C_LEVEL_EXCEPTION
7735 );
7736 END IF;
7737 xla_exceptions_pkg.raise_message
7738 (p_appli_s_name => 'XLA'
7739 ,p_msg_name => 'XLA_COMMON_ERROR'
7740 ,p_token_1 => 'LOCATION'
7741 ,p_value_1 => 'xla_balances_pkg.massive_update'
7742 ,p_token_2 => 'ERROR'
7743 ,p_value_2 => 'EXCEPTION: When p_execution_mode is C, p_entity_id, must be NULL');
7744
7745 END IF;
7746
7747 --batch execution
7748 l_result := fnd_request.set_mode(TRUE);
7749 l_req_id := fnd_request.submit_request
7750 ( application => 'XLA'
7751 ,program => 'XLABABUP'
7752 ,description => NULL
7753 ,argument1 => TO_CHAR(p_application_id)
7754 ,argument2 => NULL --dummy parameter in conc prog. definition
7755 ,argument3 => TO_CHAR(p_ledger_id)
7756 ,argument4 => TO_CHAR(p_accounting_batch_id)
7757 ,argument5 => p_update_mode
7758 );
7759
7760 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7761 trace
7762 (p_module => l_log_module
7763 ,p_msg => 'Request ID: ' || l_req_id
7764 ,p_level => C_LEVEL_STATEMENT
7765 );
7766 END IF;
7767
7768 IF l_req_id = 0 THEN
7769 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7770 trace
7771 (p_module => l_log_module
7772 ,p_msg => 'Unable to submit request'
7773 ,p_level => C_LEVEL_STATEMENT
7774 );
7775 END IF;
7776 l_return_value := FALSE;
7777 ELSE
7778 l_return_value := TRUE;
7779 END IF;
7780
7781 ELSIF p_execution_mode = 'O'
7782 THEN
7783 RETURN calculate_balances
7784 ( p_application_id => p_application_id
7785 ,p_ledger_id => p_ledger_id
7786 ,p_entity_id => p_entity_id
7787 ,p_event_id => p_event_id
7788 ,p_request_id => p_request_id
7789 ,p_accounting_batch_id => p_accounting_batch_id
7790 ,p_ae_header_id => NULL
7791 ,p_ae_line_num => NULL
7792 ,p_code_combination_id => NULL
7793 ,p_period_name => NULL
7794 ,p_update_mode => p_update_mode
7795 ,p_balance_source_code => NULL
7796 ,p_called_by_flag => NULL
7797 ,p_commit_flag => 'N'
7798 );
7799
7800 ELSE
7801 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
7802 trace
7803 (p_module => l_log_module
7804 ,p_msg => 'EXCEPTION:' ||
7805 'Invalid value for parameter p_execution_mode: ' || p_execution_mode
7806 ,p_level => C_LEVEL_EXCEPTION
7807 );
7808 END IF;
7809 xla_exceptions_pkg.raise_message
7810 (p_appli_s_name => 'XLA'
7811 ,p_msg_name => 'XLA_COMMON_ERROR'
7812 ,p_token_1 => 'LOCATION'
7813 ,p_value_1 => 'xla_balances_pkg.massive_update'
7814 ,p_token_2 => 'ERROR'
7815 ,p_value_2 => 'EXCEPTION: Invalid value for parameter p_execution_mode: ' || p_execution_mode);
7816
7817 END IF;
7818
7819 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7820 trace
7821 (p_module => l_log_module
7822 ,p_msg => 'END ' || l_log_module
7823 ,p_level => C_LEVEL_PROCEDURE);
7824 END IF;
7825
7826 RETURN l_return_value;
7827
7828 EXCEPTION
7829 WHEN xla_exceptions_pkg.application_exception THEN
7830 RAISE;
7831 WHEN OTHERS THEN
7832 xla_exceptions_pkg.raise_message
7833 (p_location => 'xla_balances_pkg.massive_update');
7834 END massive_update;
7835
7836
7837 FUNCTION recreation_common
7838 RETURN BOOLEAN
7839 IS
7840 l_starting_eff_period_num INTEGER;
7841 l_chart_of_accounts_id INTEGER;
7845 l_current_ledger_id INTEGER;
7842 l_account_segment_column VARCHAR2( 30);
7843 l_balance_source_code VARCHAR2( 1);
7844 l_count_unavailable INTEGER;
7846 l_current_effective_period_num INTEGER;
7847 l_massive_recreation BOOLEAN;
7848 l_user_id INTEGER;
7849 l_login_id INTEGER;
7850 l_date DATE;
7851 l_prog_appl_id INTEGER;
7852 l_prog_id INTEGER;
7853 l_req_id INTEGER;
7854 l_result BOOLEAN;
7855 l_return_value BOOLEAN;
7856 l_num_of_records_updated INTEGER;
7857 l_warning_count INTEGER;
7858
7859 l_row_count NUMBER;
7860
7861 l_log_module VARCHAR2 (2000);
7862
7863 BEGIN
7864
7865 l_user_id := xla_environment_pkg.g_usr_id;
7866 l_login_id := xla_environment_pkg.g_login_id;
7867 l_date := SYSDATE;
7868 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
7869 l_prog_id := xla_environment_pkg.g_prog_id;
7870 l_req_id := xla_environment_pkg.g_req_id;
7871 IF g_log_enabled THEN
7872 l_log_module := C_DEFAULT_MODULE||'.recreation_common';
7873 END IF;
7874 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
7875 trace
7876 (p_module => l_log_module
7877 ,p_msg => 'BEGIN ' || l_log_module
7878 ,p_level => C_LEVEL_PROCEDURE);
7879 END IF;
7880
7881 --Phase 1: Deletion of balances and update of balance flags on ae_lines
7882
7883 --delete control balances
7884 LOOP
7885 DELETE
7886 FROM xla_control_balances xcbext
7887 WHERE xcbext.ROWID IN
7888 ( SELECT xcb.ROWID
7889 FROM xla_balance_statuses xbs
7890 ,xla_control_balances xcb
7891 ,gl_period_statuses gps
7892 WHERE xbs.balance_source_code = 'C'
7893 AND xbs.balance_status_code = 'R'
7894 AND xbs.request_id = NVL(l_req_id, -1)
7895 AND xcb.initial_balance_flag = 'N'
7896 AND xcb.application_id = xbs.application_id
7897 AND xcb.ledger_id = xbs.ledger_id
7898 AND xcb.code_combination_id = xbs.code_combination_id
7899 AND ( ( xbs.recreate_party_type_code IS NULL
7900 )
7901 OR ( xbs.recreate_party_type_code IS NOT NULL
7902 AND xcb.party_type_code = xbs.recreate_party_type_code
7903 )
7904 )
7905 AND ( ( xbs.recreate_party_type_code IS NULL
7906 )
7907 OR ( xbs.recreate_party_type_code IS NOT NULL
7908 AND xcb.party_id = xbs.recreate_party_id
7909 )
7910 )
7911 AND ( ( xbs.recreate_party_site_id IS NULL
7912 )
7913 OR ( xbs.recreate_party_site_id IS NOT NULL
7914 AND xcb.party_site_id = xbs.recreate_party_site_id
7915 )
7916 )
7917 AND gps.ledger_id = xcb.ledger_id
7918 AND gps.application_id = 101
7919 AND gps.period_name = xcb.period_name
7920 AND gps.effective_period_num >= xbs.recreate_effective_period_num
7921 )
7922 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
7923
7924 l_row_count := SQL%ROWCOUNT;
7925
7926 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7927 trace
7928 (p_module => l_log_module
7929 ,p_msg => l_row_count || ' xla_control_balances deleted'
7930 ,p_level => C_LEVEL_STATEMENT
7931 );
7932 END IF;
7933
7934 IF l_row_count < C_BATCH_COMMIT_SIZE
7935 THEN
7936 COMMIT;
7937 EXIT;
7938 ELSE
7939 COMMIT;
7940 END IF;
7941 END LOOP;
7942
7943 --delete xla_ac_balances
7944 LOOP
7945 DELETE
7946 FROM xla_ac_balances xabext
7947 WHERE xabext.ROWID IN
7948 ( SELECT xab.ROWID
7949 FROM xla_balance_statuses xbs
7950 ,xla_ac_balances xab
7951 ,gl_period_statuses gps
7952 WHERE xbs.balance_source_code = 'A'
7953 AND xbs.balance_status_code = 'R'
7954 AND xbs.request_id = NVL(l_req_id, -1)
7955 AND xab.initial_balance_flag = 'N'
7956 AND xab.application_id = xbs.application_id
7957 AND xab.ledger_id = xbs.ledger_id
7958 AND xab.code_combination_id = xbs.code_combination_id
7959 AND gps.ledger_id = xab.ledger_id
7960 AND gps.period_name = xab.period_name
7964 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
7961 AND gps.application_id = 101
7962 AND gps.effective_period_num >= xbs.recreate_effective_period_num
7963 )
7965
7966 l_row_count := SQL%ROWCOUNT;
7967
7968 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
7969 trace
7970 ( p_module => l_log_module
7971 ,p_msg => l_row_count || ' xla_ac_balances deleted'
7972 ,p_level => C_LEVEL_STATEMENT
7973 );
7974 END IF;
7975
7976 IF l_row_count < C_BATCH_COMMIT_SIZE
7977 THEN
7978 COMMIT;
7979 EXIT;
7980 ELSE
7981 COMMIT;
7982 END IF;
7983 END LOOP;
7984
7985
7986 --update xla_ae_lines
7987 LOOP
7988 l_num_of_records_updated := 0;
7989 UPDATE xla_ae_lines ael
7990 SET ael.control_balance_flag =
7991 DECODE( ael.control_balance_flag
7992 ,'Y'
7993 ,'P'
7994 ,ael.control_balance_flag
7995 )
7996 WHERE ael.ROWID IN
7997 (SELECT xal.ROWID
7998 FROM xla_balance_statuses xbs
7999 ,xla_ae_headers xah
8000 ,xla_ae_lines xal
8001 ,gl_period_statuses gps
8002 WHERE xbs.balance_status_code = 'R'
8003 AND xbs.balance_source_code = 'C'
8004 AND xbs.request_id = NVL(l_req_id, -1)
8005 AND xah.ledger_id = xbs.ledger_id
8006 AND xah.application_id = xbs.application_id
8007 AND xal.ae_header_id = xah.ae_header_id
8008 AND xal.application_id = xah.application_id
8009 AND xal.code_combination_id = xbs.code_combination_id
8010 AND ( ( xbs.recreate_party_type_code IS NULL
8011 )
8012 OR ( xbs.recreate_party_type_code IS NOT NULL
8013 AND xal.party_type_code = xbs.recreate_party_type_code
8014 )
8015 )
8016 AND ( ( xbs.recreate_party_id IS NULL
8017 )
8018 OR ( xbs.recreate_party_id IS NOT NULL
8019 AND ( xal.party_id = xbs.recreate_party_id
8020 )
8021 )
8022 )
8023 AND ( ( xbs.recreate_party_site_id IS NULL
8024 )
8025 OR ( xbs.recreate_party_site_id IS NOT NULL
8026 AND ( xal.party_site_id = xbs.recreate_party_site_id
8027 )
8028 )
8029 )
8030 AND xal.control_balance_flag <> 'P'
8031 AND gps.ledger_id = xah.ledger_id
8032 AND gps.period_name = xah.period_name
8033 AND gps.application_id = 101
8034 AND gps.effective_period_num >= xbs.recreate_effective_period_num
8035 )
8036 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8037
8038 l_num_of_records_updated := SQL%ROWCOUNT;
8039
8040 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8041 trace
8042 ( p_module => l_log_module
8043 ,p_msg => l_num_of_records_updated || ' xla_ae_lines (ctrl bal) updated to P'
8044 ,p_level => C_LEVEL_STATEMENT
8045 );
8046 END IF;
8047
8048 UPDATE xla_ae_lines ael
8049 SET ael.analytical_balance_flag =
8050 DECODE( ael.analytical_balance_flag
8051 ,'Y'
8052 ,'P'
8053 ,ael.analytical_balance_flag
8054 )
8055 WHERE ael.ROWID IN
8056 (SELECT xal.ROWID
8057 FROM xla_balance_statuses xbs
8058 ,xla_ae_headers xah
8059 ,xla_ae_lines xal
8060 ,gl_period_statuses gps
8061 WHERE xbs.balance_status_code = 'R'
8062 AND xbs.balance_source_code = 'A'
8063 AND xbs.request_id = NVL(l_req_id, -1)
8064 AND xah.ledger_id = xbs.ledger_id
8065 AND xah.application_id = xbs.application_id
8066 AND xal.ae_header_id = xah.ae_header_id
8067 AND xal.application_id = xah.application_id
8068 AND xal.code_combination_id = xbs.code_combination_id
8072 AND gps.application_id = 101
8069 AND xal.analytical_balance_flag <> 'P'
8070 AND gps.ledger_id = xah.ledger_id
8071 AND gps.period_name = xah.period_name
8073 AND gps.effective_period_num >= xbs.recreate_effective_period_num
8074 )
8075 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8076
8077 l_num_of_records_updated := l_num_of_records_updated + SQL%ROWCOUNT;
8078
8079 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8080 trace
8081 ( p_module => l_log_module
8082 ,p_msg => l_num_of_records_updated || ' xla_ae_lines (ac bal) updated to P'
8083 ,p_level => C_LEVEL_STATEMENT
8084 );
8085 END IF;
8086
8087 IF l_num_of_records_updated = 0
8088 THEN
8089 COMMIT;
8090 EXIT;
8091 ELSE
8092 COMMIT;
8093 END IF;
8094 END LOOP;
8095
8096
8097 --Phase 2: Balance calculation
8098 LOOP
8099 l_date := SYSDATE;
8100 UPDATE xla_balance_statuses xbs
8101 SET xbs.balance_status_code = 'B'
8102 ,xbs.effective_period_num = (SELECT LEAST( NVL( xbs.recreate_effective_period_num
8103 ,MAX(gps.effective_period_num)
8104 )
8105 ,xbs.effective_period_num
8106 )
8107 FROM gl_period_statuses gps
8108 WHERE gps.ledger_id = xbs.ledger_id
8109 AND gps.application_id = 101
8110 AND gps.closing_status IN ('O', 'C', 'P')
8111 AND gps.adjustment_period_flag = 'N'
8112 AND gps.effective_period_num < xbs.recreate_effective_period_num
8113 )
8114 ,last_update_date = l_date
8115 ,last_updated_by = l_user_id
8116 ,last_update_login = l_login_id
8117 ,program_update_date = l_date
8118 ,program_application_id = l_prog_appl_id
8119 ,program_id = l_prog_id
8120 ,request_id = NVL(l_req_id, -1)
8121 WHERE xbs.balance_status_code = 'R'
8122 AND xbs.request_id = NVL(l_req_id, -1)
8123 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8124
8125 l_row_count := SQL%ROWCOUNT;
8126
8127 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8128 trace
8129 ( p_module => l_log_module
8130 ,p_msg => l_row_count || ' xla_balance_statuses updated to B'
8131 ,p_level => C_LEVEL_STATEMENT
8132 );
8133 END IF;
8134
8135 IF l_row_count < C_BATCH_COMMIT_SIZE
8136 THEN
8137 COMMIT;
8138 EXIT;
8139 ELSE
8140 COMMIT;
8141 END IF;
8142 END LOOP;
8143
8144 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8145 trace
8146 (p_module => l_log_module
8147 , p_msg => 'Starting Phase 2: balance calculation'
8148 ,p_level => C_LEVEL_STATEMENT
8149 );
8150 END IF;
8151
8152 --Start rebuilding the balances
8153 LOOP
8154 BEGIN
8155 SELECT xbs.ledger_id
8156 ,MIN(xbs.recreate_effective_period_num)
8157 INTO l_current_ledger_id
8158 ,l_current_effective_period_num
8159 FROM xla_balance_statuses xbs
8160 WHERE xbs.balance_status_code = 'B'
8161 AND xbs.request_id = NVL(l_req_id, -1)
8162 AND ROWNUM = 1
8163 GROUP BY xbs.ledger_id;
8164 EXCEPTION
8165 WHEN NO_DATA_FOUND
8166 THEN
8167 EXIT;
8168 WHEN OTHERS
8169 THEN
8170 RAISE;
8171 END;
8172
8173 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8174 trace
8175 ( p_module => l_log_module
8176 ,p_msg => 'l_current_ledger_id: ' || l_current_ledger_id
8177 ,p_level => C_LEVEL_STATEMENT
8178 );
8179 trace
8180 ( p_module => l_log_module
8181 ,p_msg => 'l_current_effective_period_num: ' || l_current_effective_period_num
8182 ,p_level => C_LEVEL_STATEMENT
8183 );
8184 END IF;
8185
8186 FOR i IN ( SELECT gps.period_name
8187 ,gps.effective_period_num
8188 ,( SELECT MAX(gps2.effective_period_num)
8189 FROM gl_period_statuses gps2
8190 WHERE gps2.ledger_id = l_current_ledger_id
8191 AND gps2.application_id = 101
8192 AND gps2.effective_period_num < gps.effective_period_num
8196 FROM gl_period_statuses gps
8193 AND gps2.closing_status IN ('O', 'C', 'P')
8194 AND gps2.adjustment_period_flag = 'N'
8195 ) previous_effective_period_num
8197 WHERE gps.ledger_id = l_current_ledger_id
8198 AND gps.application_id = 101
8199 AND gps.closing_status IN ('O', 'C', 'P')
8200 AND gps.adjustment_period_flag = 'N'
8201 AND gps.effective_period_num >= l_current_effective_period_num
8202 ORDER BY gps.effective_period_num
8203 )
8204 LOOP
8205
8206 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8207 trace
8208 ( p_module => l_log_module
8209 ,p_msg => 'i.previous_effective_period_num: '
8210 || i.previous_effective_period_num
8211 ,p_level => C_LEVEL_STATEMENT
8212 );
8213 trace
8214 ( p_module => l_log_module
8215 ,p_msg => 'i.effective_period_num: ' || i.effective_period_num
8216 ,p_level => C_LEVEL_STATEMENT
8217 );
8218 END IF;
8219
8220 IF i.previous_effective_period_num IS NOT NULL
8221 THEN
8222 l_result := move_balances_forward_COMMIT
8223 ( p_application_id => NULL
8224 ,p_ledger_id => l_current_ledger_id
8225 ,p_balance_source_code => NULL
8226 ,p_source_effective_period_num => i.previous_effective_period_num
8227 ,p_balance_status_code_selected => 'Q'
8228 ,p_balance_status_code_not_sel => 'B'
8229 );
8230 IF NOT l_result
8231 THEN
8232 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8233 trace
8234 ( p_module => l_log_module
8235 ,p_msg => 'Unable to open balances in period:'
8236 || i.effective_period_num
8237 ,p_level => C_LEVEL_STATEMENT
8238 );
8239 END IF;
8240 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8241 trace
8242 (p_module => l_log_module
8243 ,p_msg => 'END ' || l_log_module
8244 ,p_level => C_LEVEL_PROCEDURE);
8245 END IF;
8246 RETURN FALSE;
8247 END IF;
8248 END IF;
8249
8250 l_result := calculate_balances
8251 ( p_application_id => NULL
8252 ,p_ledger_id => l_current_ledger_id
8253 ,p_entity_id => NULL
8254 ,p_event_id => NULL
8255 ,p_request_id => NULL
8256 ,p_accounting_batch_id => NULL
8257 ,p_ae_header_id => NULL
8258 ,p_ae_line_num => NULL
8259 ,p_code_combination_id => NULL
8260 ,p_period_name => i.period_name
8261 ,p_update_mode => 'M'
8262 ,p_balance_source_code => NULL
8263 ,p_called_by_flag => NULL
8264 ,p_commit_flag => 'Y'
8265 );
8266
8267 IF NOT l_result
8268 THEN
8269 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8270 trace
8271 ( p_module => l_log_module
8272 ,p_msg => 'Unable to calculate balances in period:'
8273 || i.effective_period_num
8274 ,p_level => C_LEVEL_STATEMENT
8275 );
8276 END IF;
8277 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8278 trace
8279 (p_module => l_log_module
8280 , p_msg => 'END ' || l_log_module
8281 ,p_level => C_LEVEL_PROCEDURE);
8282 END IF;
8283 RETURN FALSE;
8284 END IF;
8285
8286 END LOOP;
8287
8288 l_date := SYSDATE;
8289 UPDATE xla_balance_statuses xbs
8290 SET xbs.balance_status_code = 'C'
8291 ,last_update_date = l_date
8292 ,last_updated_by = l_user_id
8293 ,last_update_login = l_login_id
8294 ,program_update_date = l_date
8295 ,program_application_id = l_prog_appl_id
8296 ,program_id = l_prog_id
8297 ,request_id = NVL(l_req_id, -1)
8298 WHERE xbs.balance_status_code = 'B'
8299 AND xbs.request_id = NVL(l_req_id, -1)
8300 AND xbs.ledger_id = l_current_ledger_id;
8301
8302 l_row_count := SQL%ROWCOUNT;
8303
8304 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8305 trace
8306 (p_module => l_log_module
8307 ,p_msg => l_row_count
8308 || ' xla_balance_statuses updated to C'
8309 ,p_level => C_LEVEL_STATEMENT
8310 );
8311 END IF;
8312
8313 COMMIT;
8314
8315 END LOOP;
8316
8317 --Phase 3: check for warnings
8318
8319 SELECT count(*)
8320 INTO l_warning_count
8321 FROM xla_balance_statuses xbs
8322 WHERE xbs.request_id = NVL(l_req_id, -1)
8323 AND NVL(xbs.warning_flag, 'N') = 'Y';
8324
8325 IF l_warning_count > 0
8326 THEN
8327 IF (C_LEVEL_ERROR >= g_log_level) THEN
8328 trace
8329 (p_module => l_log_module
8330 ,p_msg =>
8331 'This request was unable to process all the requested balances'
8332 ,p_level => C_LEVEL_ERROR
8333 );
8334 trace
8335 (p_module => l_log_module
8336 , p_msg =>
8337 'Please resubmit again this request to complete the task.'
8338 ,p_level => C_LEVEL_ERROR
8339 );
8340 END IF;
8341
8342 LOOP
8343 l_date := SYSDATE;
8344
8345 UPDATE xla_balance_statuses xbs
8346 SET xbs.balance_status_code = 'A'
8347 ,last_update_date = l_date
8348 ,last_updated_by = l_user_id
8349 ,last_update_login = l_login_id
8350 ,program_update_date = l_date
8351 ,program_application_id = l_prog_appl_id
8352 ,program_id = l_prog_id
8353 ,request_id = NVL(l_req_id, -1)
8354 WHERE xbs.request_id = NVL(l_req_id, -1)
8355 AND NVL(xbs.warning_flag, 'N') = 'Y'
8356 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8357
8358 l_row_count := SQL%ROWCOUNT;
8359
8360 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8361 trace
8362 (p_module => l_log_module
8363 , p_msg => l_row_count || ' xla_balance_statuses updated to A'
8364 ,p_level => C_LEVEL_STATEMENT
8365 );
8366 END IF;
8367
8368 IF l_row_count < C_BATCH_COMMIT_SIZE
8369 THEN
8370 COMMIT;
8371 EXIT;
8372 ELSE
8373 COMMIT;
8374 END IF;
8375 END LOOP;
8376
8377 l_return_value := FALSE;
8378 ELSE
8379 l_return_value := TRUE;
8380 END IF;
8381
8382 --Phase 4: set status back to available
8383 IF l_return_value
8384 THEN
8385 LOOP
8386 l_date := SYSDATE;
8387 UPDATE xla_balance_statuses xbs
8388 SET xbs.balance_status_code = 'A'
8389 ,last_update_date = l_date
8390 ,last_updated_by = l_user_id
8391 ,last_update_login = l_login_id
8392 ,program_update_date = l_date
8393 ,program_application_id = l_prog_appl_id
8394 ,program_id = l_prog_id
8395 ,request_id = NVL(l_req_id, -1)
8396 WHERE xbs.balance_status_code = 'C'
8397 AND xbs.request_id = NVL(l_req_id, -1)
8398 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8399
8400 l_row_count := SQL%ROWCOUNT;
8401
8405 ,p_msg => l_row_count || ' xla_balance_statuses updated to A'
8402 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8403 trace
8404 ( p_module => l_log_module
8406 ,p_level => C_LEVEL_STATEMENT
8407 );
8408 END IF;
8409
8410 IF l_row_count < C_BATCH_COMMIT_SIZE
8411 THEN
8412 COMMIT;
8413 EXIT;
8414 ELSE
8415 COMMIT;
8416 END IF;
8417 END LOOP;
8418 END IF;
8419
8420 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8421 trace
8422 (p_module => l_log_module
8423 ,p_msg => 'END ' || l_log_module
8424 ,p_level => C_LEVEL_PROCEDURE);
8425 END IF;
8426
8427 RETURN l_return_value;
8428
8429 EXCEPTION
8430 WHEN xla_exceptions_pkg.application_exception THEN
8431 RAISE;
8432 WHEN OTHERS THEN
8433 xla_exceptions_pkg.raise_message
8434 (p_location => 'xla_balances_pkg.recreation_common');
8435
8436 END recreation_common;
8437
8438
8439 FUNCTION recreation_detailed
8440 ( p_application_id IN INTEGER
8441 ,p_ledger_id IN INTEGER
8442 ,p_party_type_code IN VARCHAR2
8443 ,p_party_id IN INTEGER
8444 ,p_party_site_id IN INTEGER
8445 ,p_account_segment_value_low IN VARCHAR2
8446 ,p_account_segment_value_high IN VARCHAR2
8447 ,p_starting_period_name IN VARCHAR2
8448 ) RETURN BOOLEAN
8449 IS
8450
8451 l_starting_eff_period_num INTEGER;
8452 l_chart_of_accounts_id INTEGER;
8453 l_temp_population_dyn_stmt VARCHAR2(4000);
8454 l_application_clause VARCHAR2( 500);
8455 l_ledger_clause VARCHAR2( 500);
8456 l_party_clause VARCHAR2(1000);
8457 l_account_clause VARCHAR2( 500);
8458 l_account_segment_column VARCHAR2( 30);
8459 l_balance_source_code VARCHAR2( 1);
8460 l_count_unavailable INTEGER;
8461 l_current_application_id INTEGER;
8462 l_current_ledger_id INTEGER;
8463 l_current_effective_period_num INTEGER;
8464 l_massive_recreation BOOLEAN;
8465 l_user_id INTEGER;
8466 l_login_id INTEGER;
8467 l_date DATE;
8468 l_prog_appl_id INTEGER;
8469 l_prog_id INTEGER;
8470 l_req_id INTEGER;
8471 l_return_value BOOLEAN;
8472
8473 l_row_count NUMBER;
8474
8475 l_log_module VARCHAR2 (2000);
8476
8477 BEGIN
8478
8479 l_user_id := xla_environment_pkg.g_usr_id;
8480 l_login_id := xla_environment_pkg.g_login_id;
8481 l_date := SYSDATE;
8482 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
8483 l_prog_id := xla_environment_pkg.g_prog_id;
8484 l_req_id := xla_environment_pkg.g_req_id;
8485
8486 IF g_log_enabled THEN
8487 l_log_module := C_DEFAULT_MODULE||'.recreation_detailed';
8488 END IF;
8489 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8490 trace
8491 (p_module => l_log_module
8492 ,p_msg => 'BEGIN ' || l_log_module
8493 ,p_level => C_LEVEL_PROCEDURE);
8494 END IF;
8495
8496 IF p_application_id IS NOT NULL
8497 THEN
8498 l_application_clause :=
8499 'AND xbs.application_id = ' || p_application_id || '
8500 ';
8501 END IF;
8502
8503
8504 IF p_ledger_id IS NOT NULL
8505 THEN
8506 SELECT chart_of_accounts_id
8507 INTO l_chart_of_accounts_id
8508 FROM gl_ledgers xgl
8509 WHERE xgl.ledger_id = p_ledger_id;
8510
8511 l_ledger_clause :=
8512 'AND xbs.ledger_id = ' || p_ledger_id || '
8513 ';
8514 IF p_starting_period_name IS NOT NULL
8515 THEN
8516 SELECT gps.effective_period_num
8517 INTO l_starting_eff_period_num
8518 FROM gl_period_statuses gps
8519 WHERE gps.ledger_id = p_ledger_id
8520 AND gps.application_id = 101
8521 AND gps.period_name = p_starting_period_name;
8522 END IF;
8523 IF p_account_segment_value_low IS NOT NULL
8524 THEN
8525 IF p_account_segment_value_high IS NOT NULL
8526 THEN
8527 l_account_segment_column := get_account_segment_column
8528 (p_chart_of_accounts_id => l_chart_of_accounts_id);
8529
8530 l_account_clause :=
8531 'AND gcc.' || l_account_segment_column || '
8532 BETWEEN '' || p_account_segment_value_low || ''
8533 AND '' || p_account_segment_value_high || ''
8534 ';
8535
8536 END IF;
8537 END IF;
8538 END IF; --p_ledger_id IS NOT NULL
8539
8540 IF p_party_type_code IS NOT NULL
8541 THEN
8542 l_party_clause :=
8543 'AND EXISTS (SELECT 1
8544 FROM xla_ae_headers xah
8548 AND xal.code_combination_id = xbs.code_combination_id
8545 ,xla_ae_lines xal
8546 WHERE xah.application_id = xbs.application_id
8547 AND xah.ledger_id = xbs.ledger_id
8549 AND xal.ae_header_id = xah.ae_header_id
8550 AND xal.party_type_code = ''' || p_party_type_code ||'''
8551 ';
8552
8553 IF p_party_id IS NOT NULL
8554 THEN
8555 l_party_clause := l_party_clause ||
8556 'AND xal.party_id = '|| p_party_id ||' ';
8557 IF p_party_site_id IS NOT NULL
8558 THEN
8559 l_party_clause := l_party_clause ||
8560 'AND NVL(xal.party_site_id,-999) = '|| p_party_site_id || ' ';
8561 END IF;
8562
8563 END IF;
8564 l_party_clause := l_party_clause || ') ';
8565
8566 END IF;
8567
8568 l_temp_population_dyn_stmt :=
8569 ' INSERT
8570 INTO xla_bal_recreate_gt
8571 ( application_id
8572 ,ledger_id
8573 ,code_combination_id
8574 ,balance_source_code
8575 )
8576 SELECT xbs.application_id
8577 ,xbs.ledger_id
8578 ,xbs.code_combination_id
8579 ,xbs.balance_source_code
8580 FROM xla_balance_statuses xbs
8581 ,gl_code_combinations gcc
8582 ,xla_bal_recreate_gt xbt
8583 WHERE gcc.code_combination_id = xbs.code_combination_id
8584 AND xbt.application_id (+)= xbs.application_id
8585 AND xbt.ledger_id (+)= xbs.ledger_id
8586 AND xbt.code_combination_id (+)= xbs.code_combination_id
8587 AND xbt.balance_source_code (+)= xbs.balance_source_code
8588 AND xbt.application_id IS NULL
8589 AND ROWNUM <= ' || C_BATCH_COMMIT_SIZE || '
8590 ';
8591
8592 l_temp_population_dyn_stmt := l_temp_population_dyn_stmt ||
8593 l_application_clause ||
8594 l_ledger_clause ||
8595 l_party_clause ||
8596 l_account_clause;
8597
8598 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8599 trace
8600 ( p_module => l_log_module
8601 ,p_msg => 'l_temp_population_dyn_stmt: '
8602 ,p_level => C_LEVEL_STATEMENT
8603 );
8604 trace
8605 ( p_module => l_log_module
8606 ,p_msg => l_temp_population_dyn_stmt
8607 ,p_level => C_LEVEL_STATEMENT
8608 );
8609 END IF;
8610
8611
8612 LOOP
8613 EXECUTE IMMEDIATE
8614 l_temp_population_dyn_stmt;
8615
8616 l_row_count := SQL%ROWCOUNT;
8617
8618 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8619 trace
8620 (p_module => l_log_module
8621 ,p_msg => l_row_count
8622 || ' records inserted in xla_bal_recreate_gt'
8623 ,p_level => C_LEVEL_STATEMENT
8624 );
8625 END IF;
8626
8627 IF l_row_count < C_BATCH_COMMIT_SIZE
8628 THEN
8629 COMMIT;
8630 EXIT;
8631 ELSE
8632 COMMIT;
8633 END IF;
8634 END LOOP;
8635
8636 --try to bring the balances off line for recreation
8637 LOOP
8638 l_date := SYSDATE;
8639 UPDATE xla_balance_statuses xbsext
8640 SET xbsext.balance_status_code = DECODE( xbsext.balance_status_code
8641 ,'A'
8642 ,'R'
8643 ,xbsext.balance_status_code
8644 )
8645 ,xbsext.recreate_party_type_code = DECODE( xbsext.balance_status_code
8646 ,'A'
8647 ,p_party_type_code
8648 ,xbsext.recreate_party_type_code
8649 )
8650 ,xbsext.recreate_party_id = DECODE( xbsext.balance_status_code
8651 ,'A'
8652 ,p_party_id
8653 ,xbsext.recreate_party_id
8654 )
8655 ,xbsext.recreate_party_site_id = DECODE( xbsext.balance_status_code
8656 ,'A'
8657 ,p_party_site_id
8658 ,xbsext.recreate_party_site_id
8659 )
8660 ,xbsext.recreate_effective_period_num = DECODE( xbsext.balance_status_code
8661 ,'A'
8662 ,NVL( l_starting_eff_period_num
8666 AND gps.application_id = 101
8663 ,(SELECT MIN(effective_period_num)
8664 FROM gl_period_statuses gps
8665 WHERE gps.ledger_id = xbsext.ledger_id
8667 AND gps.closing_status IN ('O', 'C', 'P')
8668 AND gps.adjustment_period_flag = 'N'
8669 )
8670 )
8671 ,xbsext.recreate_effective_period_num
8672 )
8673 ,xbsext.warning_flag = DECODE( xbsext.balance_status_code
8674 ,'A'
8675 ,'N'
8676 ,'C'
8677 ,'N'
8678 ,'Y'
8679 )
8680 ,xbsext.last_update_date = l_date
8681 ,xbsext.last_updated_by = l_user_id
8682 ,xbsext.last_update_login = l_login_id
8683 ,xbsext.program_update_date = l_date
8684 ,xbsext.program_application_id = l_prog_appl_id
8685 ,xbsext.program_id = l_prog_id
8686 ,xbsext.request_id = NVL(l_req_id, -1)
8687 WHERE xbsext.ROWID IN
8688 (SELECT xbs.ROWID
8689 FROM xla_bal_recreate_gt xbt
8690 ,xla_balance_statuses xbs
8691 ,fnd_concurrent_requests fnd
8692 WHERE xbs.application_id = xbt.application_id
8693 AND xbs.ledger_id = xbt.ledger_id
8694 AND xbs.code_combination_id = xbt.code_combination_id
8695 AND xbs.balance_source_code = xbt.balance_source_code
8696 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8697 ,xbs.effective_period_num
8698 )
8699 AND fnd.request_id(+) = xbs.request_id
8700 AND ( xbs.balance_status_code = 'A'
8701 OR ( xbs.balance_status_code IN ('R', 'B', 'Q', 'C')
8702 AND nvl(fnd.status_code,'N') <> 'R'
8703 )
8704 )
8705 UNION
8706 SELECT xbs.ROWID
8707 FROM xla_balance_statuses xbs
8708 WHERE xbs.application_id = NVL( p_application_id
8709 ,xbs.application_id
8710 )
8711 AND xbs.ledger_id = NVL( p_ledger_id
8712 ,xbs.ledger_id
8713 )
8714 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8715 ,xbs.effective_period_num
8716 )
8717 AND NVL(xbs.request_id, -1) = -1
8718 AND xbs.balance_status_code IN ('A', 'R', 'B', 'Q', 'C')
8719 )
8720 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8721
8722 l_row_count := SQL%ROWCOUNT;
8723
8724 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8725 trace
8726 ( p_module => l_log_module
8727 ,p_msg => l_row_count || ' xla_balance_statuses updated to R'
8728 ,p_level => C_LEVEL_STATEMENT
8729 );
8730 END IF;
8731
8732 IF l_row_count < C_BATCH_COMMIT_SIZE
8733 THEN
8734 COMMIT;
8735 EXIT;
8736 ELSE
8737 COMMIT;
8738 END IF;
8739 END LOOP;
8740
8741 SELECT count(*)
8742 INTO l_count_unavailable
8743 FROM xla_bal_recreate_gt xbt
8744 ,xla_balance_statuses xbs
8745 WHERE xbs.application_id = xbt.application_id
8746 AND xbs.ledger_id = xbt.ledger_id
8747 AND xbs.code_combination_id = xbt.code_combination_id
8748 AND xbs.balance_source_code = xbt.balance_source_code
8749 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8750 ,xbs.effective_period_num
8751 )
8752 AND ( NVL(xbs.request_id, -1) <> NVL(l_req_id, -1)
8753 OR xbs.balance_status_code NOT IN ('R', 'B', 'Q', 'C')
8754 );
8755
8756 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8757 trace
8758 (p_module => l_log_module
8759 ,p_msg => 'END ' || l_log_module
8760 ,p_level => C_LEVEL_PROCEDURE);
8761 END IF;
8762
8766 trace
8763 IF l_count_unavailable > 0
8764 THEN
8765 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8767 ( p_module => l_log_module
8768 ,p_msg => 'Some balance status records are unavailable'
8769 ,p_level => C_LEVEL_STATEMENT
8770 );
8771 END IF;
8772 RETURN FALSE;
8773 ELSE
8774 RETURN TRUE;
8775 END IF;
8776
8777
8778 EXCEPTION
8779 WHEN xla_exceptions_pkg.application_exception THEN
8780 RAISE;
8781 WHEN OTHERS THEN
8782 xla_exceptions_pkg.raise_message
8783 (p_location => 'xla_balances_pkg.recreation_detailed');
8784
8785 END recreation_detailed;
8786
8787
8788 FUNCTION recreation_massive
8789 ( p_application_id IN INTEGER
8790 ,p_ledger_id IN INTEGER
8791 ,p_starting_period_name IN VARCHAR2
8792 ) RETURN BOOLEAN
8793 IS
8794
8795 l_starting_eff_period_num INTEGER;
8796 l_chart_of_accounts_id INTEGER;
8797 l_account_segment_column VARCHAR2( 30);
8798 l_balance_source_code VARCHAR2( 1);
8799 l_count_unavailable INTEGER;
8800 l_massive_recreation BOOLEAN;
8801 l_user_id INTEGER;
8802 l_login_id INTEGER;
8803 l_date DATE;
8804 l_prog_appl_id INTEGER;
8805 l_prog_id INTEGER;
8806 l_req_id INTEGER;
8807
8808 l_row_count NUMBER;
8809
8810 l_log_module VARCHAR2 (2000);
8811
8812 BEGIN
8813
8814 l_user_id := xla_environment_pkg.g_usr_id;
8815 l_login_id := xla_environment_pkg.g_login_id;
8816 l_date := SYSDATE;
8817 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
8818 l_prog_id := xla_environment_pkg.g_prog_id;
8819 l_req_id := xla_environment_pkg.g_req_id;
8820
8821 IF g_log_enabled THEN
8822 l_log_module := C_DEFAULT_MODULE||'.recreation_massive';
8823 END IF;
8824 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8825 trace
8826 (p_module => l_log_module
8827 ,p_msg => 'BEGIN ' || l_log_module
8828 ,p_level => C_LEVEL_PROCEDURE);
8829 END IF;
8830
8831 IF p_ledger_id IS NOT NULL
8832 AND p_starting_period_name IS NOT NULL
8833 THEN
8834 SELECT gps.effective_period_num
8835 INTO l_starting_eff_period_num
8836 FROM gl_period_statuses gps
8837 WHERE gps.ledger_id = p_ledger_id
8838 AND gps.application_id = 101
8839 AND gps.period_name = p_starting_period_name;
8840 END IF;
8841
8842 --try to bring the balances off line
8843 LOOP
8844 l_date := SYSDATE;
8845
8846 UPDATE xla_balance_statuses xbsext
8847 SET xbsext.balance_status_code = DECODE( xbsext.balance_status_code
8848 ,'A'
8849 ,'R'
8850 ,xbsext.balance_status_code
8851 )
8852 ,xbsext.recreate_party_type_code = DECODE( xbsext.balance_status_code
8853 ,'A'
8854 ,NULL
8855 ,xbsext.recreate_party_type_code
8856 )
8857 ,xbsext.recreate_party_id = DECODE( xbsext.balance_status_code
8858 ,'A'
8859 ,NULL
8860 ,xbsext.recreate_party_id
8861 )
8862 ,xbsext.recreate_party_site_id = DECODE( xbsext.balance_status_code
8863 ,'A'
8864 ,NULL
8865 ,xbsext.recreate_party_site_id
8866 )
8867 ,xbsext.recreate_effective_period_num = DECODE( xbsext.balance_status_code
8868 ,'A'
8869 ,NVL( l_starting_eff_period_num
8870 ,(SELECT MIN(effective_period_num)
8871 FROM gl_period_statuses gps
8872 WHERE gps.ledger_id = xbsext.ledger_id
8873 AND gps.application_id = 101
8874 AND gps.closing_status IN ('O', 'C', 'P')
8875 AND gps.adjustment_period_flag = 'N'
8876 )
8877 )
8881 ,'A'
8878 ,xbsext.recreate_effective_period_num
8879 )
8880 ,xbsext.warning_flag = DECODE( xbsext.balance_status_code
8882 ,'N'
8883 ,'C'
8884 ,'N'
8885 ,'Y'
8886 )
8887 ,xbsext.last_update_date = l_date
8888 ,xbsext.last_updated_by = l_user_id
8889 ,xbsext.last_update_login = l_login_id
8890 ,xbsext.program_update_date = l_date
8891 ,xbsext.program_application_id = l_prog_appl_id
8892 ,xbsext.program_id = l_prog_id
8893 ,xbsext.request_id = l_req_id
8894 WHERE xbsext.ROWID IN
8895 (SELECT xbs.ROWID
8896 FROM xla_balance_statuses xbs
8897 ,fnd_concurrent_requests fnd
8898 WHERE xbs.application_id = NVL( p_application_id
8899 ,xbs.application_id
8900 )
8901 AND xbs.ledger_id = NVL( p_ledger_id
8902 ,xbs.ledger_id
8903 )
8904 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8905 ,xbs.effective_period_num
8906 )
8907 AND fnd.request_id(+) = xbs.request_id
8908 AND ( xbs.balance_status_code = 'A'
8909 OR ( xbs.balance_status_code IN ('R', 'B', 'Q', 'C')
8910 AND NVL(fnd.status_code,'N') <> 'R'
8911 )
8912 )
8913 UNION
8914 SELECT xbs.ROWID
8915 FROM xla_balance_statuses xbs
8916 WHERE xbs.application_id = NVL( p_application_id
8917 ,xbs.application_id
8918 )
8919 AND xbs.ledger_id = NVL( p_ledger_id
8920 ,xbs.ledger_id
8921 )
8922 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8923 ,xbs.effective_period_num
8924 )
8925 AND NVL(xbs.request_id, -1) = -1
8926 AND xbs.balance_status_code IN ('A', 'R', 'B', 'Q', 'C')
8927 )
8928 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
8929
8930 l_row_count := SQL%ROWCOUNT;
8931
8932 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
8933 trace
8934 ( p_module => l_log_module
8935 ,p_msg => l_row_count || ' xla_balance_statuses updated to R'
8936 ,p_level => C_LEVEL_STATEMENT
8937 );
8938
8939 END IF;
8940
8941 IF l_row_count < C_BATCH_COMMIT_SIZE
8942 THEN
8943 COMMIT;
8944 EXIT;
8945 ELSE
8946 COMMIT;
8947 END IF;
8948 END LOOP;
8949
8950
8951 SELECT count(*)
8952 INTO l_count_unavailable
8953 FROM xla_balance_statuses xbs
8954 WHERE xbs.application_id = NVL( p_application_id
8955 ,xbs.application_id
8956 )
8957 AND xbs.ledger_id = NVL( p_ledger_id
8958 ,xbs.ledger_id
8959 )
8960 AND xbs.effective_period_num >= NVL( l_starting_eff_period_num
8961 ,xbs.effective_period_num
8962 )
8963 AND ( NVL(xbs.request_id, -1) <> NVL(l_req_id, -1)
8964 OR xbs.balance_status_code NOT IN ('R', 'B', 'Q', 'C')
8965 );
8966
8967
8968
8969 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
8970 trace
8971 (p_module => l_log_module
8972 ,p_msg => 'END ' || l_log_module
8973 ,p_level => C_LEVEL_PROCEDURE);
8974 END IF;
8975
8976 IF l_count_unavailable > 0
8977 THEN
8978 IF (C_LEVEL_ERROR >= g_log_level) THEN
8979 trace
8980 ( p_module => l_log_module
8981 ,p_msg => 'This request was unable to select all the requested balances'
8982 ,p_level => C_LEVEL_ERROR
8983 );
8984 trace
8985 ( p_module => l_log_module
8986 ,p_msg => 'Please resubmit again this request later.'
8987 ,p_level => C_LEVEL_ERROR
8988 );
8989 END IF;
8990 RETURN FALSE;
8991 ELSE
8995 RETURN TRUE;
8992 RETURN TRUE;
8993 END IF;
8994
8996
8997 EXCEPTION
8998 WHEN xla_exceptions_pkg.application_exception THEN
8999 RAISE;
9000 WHEN OTHERS THEN
9001 xla_exceptions_pkg.raise_message
9002 (p_location => 'xla_balances_pkg.recreation_massive');
9003
9004 END recreation_massive;
9005
9006
9007 PROCEDURE recreate_srs
9008 ( p_errbuf OUT NOCOPY VARCHAR2
9009 ,p_retcode OUT NOCOPY NUMBER
9010 ,p_application_id IN INTEGER
9011 ,p_ledger_id IN INTEGER
9012 ,p_party_type_code IN VARCHAR2
9013 ,p_party_id IN INTEGER
9014 ,p_party_site_id IN INTEGER
9015 ,p_starting_period_name IN VARCHAR2
9016 ,p_account_segment_value_low IN VARCHAR2
9017 ,p_account_segment_value_high IN VARCHAR2
9018 )
9019 IS
9020 /*======================================================================+
9021 | |
9022 | Public Function |
9023 | |
9024 | Description |
9025 | ----------- |
9026 | |
9027 | Pseudo-code |
9028 | ----------- |
9029 | |
9030 | Open issues |
9031 | ----------- |
9032 | |
9033 | |
9034 | |
9035 | |
9036 +======================================================================*/
9037 l_result BOOLEAN;
9038
9039 l_row_count NUMBER;
9040
9041 l_log_module VARCHAR2 (2000);
9042
9043 BEGIN
9044
9045 IF g_log_enabled THEN
9046 l_log_module := C_DEFAULT_MODULE||'.recreate_srs';
9047 END IF;
9048 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9049 trace
9050 (p_module => l_log_module
9051 ,p_msg => 'BEGIN ' || l_log_module
9052 ,p_level => C_LEVEL_PROCEDURE);
9053 END IF;
9054
9055 fnd_file.put_line(fnd_file.log,'p_application_id : ' || p_application_id);
9056 fnd_file.put_line(fnd_file.log,'p_ledger_id : ' || p_ledger_id);
9057 fnd_file.put_line(fnd_file.log,'p_party_type_code : ' || p_party_type_code);
9058 fnd_file.put_line(fnd_file.log,'p_party_id : ' || p_party_id);
9059 fnd_file.put_line(fnd_file.log,'p_party_site_id : ' || p_party_site_id);
9060 fnd_file.put_line(fnd_file.log,'p_starting_period_name : ' || p_starting_period_name);
9061 fnd_file.put_line(fnd_file.log,'p_account_segment_value_low : ' || p_account_segment_value_low);
9062 fnd_file.put_line(fnd_file.log,'p_account_segment_value_high: ' || p_account_segment_value_high);
9063
9064 LOOP
9065
9066 DELETE
9067 FROM xla_bal_recreate_gt;
9068
9069 l_row_count := SQL%ROWCOUNT;
9070
9071 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9072 trace
9073 (p_module => l_log_module
9074 ,p_msg => l_row_count || ' xla_bal_recreate_gt deleted.'
9075 ,p_level => C_LEVEL_STATEMENT
9076 );
9077 END IF;
9078
9079 IF l_row_count < C_BATCH_COMMIT_SIZE
9080 THEN
9081 COMMIT;
9082 EXIT;
9083 ELSE
9084 COMMIT;
9085 END IF;
9086 END LOOP;
9087
9088 IF p_party_type_code IS NULL
9089 AND p_party_id IS NULL
9090 AND p_party_site_id IS NULL
9091 AND p_account_segment_value_low IS NULL
9092 AND p_account_segment_value_high IS NULL
9093 THEN
9094 l_result :=
9095 recreation_massive
9096 ( p_application_id => p_application_id
9097 ,p_ledger_id => p_ledger_id
9098 ,p_starting_period_name => p_starting_period_name
9099 );
9100 ELSE
9101 l_result :=
9102 recreation_detailed
9103 ( p_application_id => p_application_id
9104 ,p_ledger_id => p_ledger_id
9105 ,p_party_type_code => p_party_type_code
9106 ,p_party_id => p_party_id
9107 ,p_party_site_id => p_party_site_id
9108 ,p_starting_period_name => p_starting_period_name
9109 ,p_account_segment_value_low => p_account_segment_value_low
9110 ,p_account_segment_value_high => p_account_segment_value_high
9114 IF NOT l_result
9111 );
9112 END IF;
9113
9115 THEN
9116 IF (C_LEVEL_ERROR >= g_log_level) THEN
9117 trace
9118 (p_module => l_log_module
9119 ,p_msg => 'recreation selection failed'
9120 ,p_level => C_LEVEL_ERROR
9121 );
9122 END IF;
9123 p_retcode := 2;
9124 RETURN;
9125 END IF;
9126
9127 l_result := recreation_common;
9128
9129 IF l_result
9130 THEN
9131 p_retcode := 0;
9132 ELSE
9133 p_retcode := 1;
9134 END IF;
9135
9136 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9137 trace
9138 (p_module => l_log_module
9139 ,p_msg => 'END ' || l_log_module
9140 ,p_level => C_LEVEL_PROCEDURE);
9141 END IF;
9142
9143 EXCEPTION
9144 WHEN xla_exceptions_pkg.application_exception THEN
9145 p_retcode := 2;
9146 p_errbuf := sqlerrm;
9147 WHEN OTHERS THEN
9148 p_retcode := 2;
9149 p_errbuf := sqlerrm;
9150 END recreate_srs;
9151
9152
9153 FUNCTION recreate
9154 ( p_application_id IN INTEGER
9155 ,p_ledger_id IN INTEGER
9156 ,p_party_type_code IN VARCHAR2
9157 ,p_party_id IN INTEGER
9158 ,p_party_site_id IN INTEGER
9159 ,p_starting_period_name IN VARCHAR2
9160 ,p_account_segment_value_low IN VARCHAR2
9161 ,p_account_segment_value_high IN VARCHAR2
9162 ) RETURN BOOLEAN
9163 IS
9164
9165 l_return_value BOOLEAN;
9166 l_req_id NUMBER;
9167 l_log_module VARCHAR2 (2000);
9168
9169 BEGIN
9170 IF g_log_enabled THEN
9171 l_log_module := C_DEFAULT_MODULE||'.recreate';
9172 END IF;
9173 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9174 trace
9175 (p_module => l_log_module
9176 ,p_msg => 'BEGIN ' || l_log_module
9177 ,p_level => C_LEVEL_PROCEDURE);
9178 END IF;
9179
9180 l_req_id := fnd_request.submit_request
9181 ( application => 'XLA'
9182 ,program => 'XLABAREC'
9183 ,description => 'Balance Recreation'
9184 ,argument1 => p_application_id
9185 ,argument2 => p_ledger_id
9186 ,argument3 => p_party_type_code
9187 ,argument4 => p_party_id
9188 ,argument5 => p_party_site_id
9189 ,argument6 => p_starting_period_name
9190 ,argument7 => p_account_segment_value_low
9191 ,argument8 => p_account_segment_value_high
9192 );
9193
9194 IF (C_LEVEL_EVENT >= g_log_level) THEN
9195 trace
9196 (p_module => l_log_module
9197 ,p_msg => 'Submitted request ID: ' || l_req_id
9198 ,p_level => C_LEVEL_EVENT );
9199 END IF;
9200
9201 IF l_req_id = 0 THEN
9202 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
9203 trace
9204 ( p_module => l_log_module
9205 ,p_msg => 'EXCEPTION:' ||
9206 'Unable to submit request'
9207 ,p_level => C_LEVEL_EXCEPTION
9208 );
9209 END IF;
9210 xla_exceptions_pkg.raise_message
9211 (p_location => 'xla_balances_pkg.recreate');
9212 END IF;
9213
9214 l_return_value := TRUE;
9215
9216 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9217 trace
9218 (p_module => l_log_module
9219 ,p_msg => 'END ' || l_log_module
9220 ,p_level => C_LEVEL_PROCEDURE);
9221 END IF;
9222
9223 RETURN l_return_value;
9224
9225 EXCEPTION
9226 WHEN xla_exceptions_pkg.application_exception THEN
9227 RAISE;
9228 WHEN OTHERS THEN
9229 xla_exceptions_pkg.raise_message
9230 (p_location => 'xla_balances_pkg.recreate');
9231
9232 END recreate;
9233
9234
9235
9236 FUNCTION synchronize
9237 ( p_chart_of_accounts_id IN INTEGER
9238 ,p_account_segment_value IN VARCHAR2
9239 ) RETURN BOOLEAN
9240 IS
9241 l_user_id INTEGER;
9242 l_login_id INTEGER;
9243 l_date DATE;
9244 l_prog_appl_id INTEGER;
9245 l_prog_id INTEGER;
9246 l_req_id INTEGER;
9247
9248 l_id_flex_code VARCHAR2 ( 4);
9249 l_account_segment_column VARCHAR2 (30);
9250 l_min_reference3 VARCHAR2 (30) ;
9251 l_max_reference3 VARCHAR2 (30) ;
9252 l_count_unavailable INTEGER;
9253 l_control_account_source_code VARCHAR2(30);
9254 l_code_combination_id INTEGER;
9255 l_result BOOLEAN;
9256
9257 l_row_count NUMBER;
9258
9259 l_log_module VARCHAR2 (2000);
9260
9261 BEGIN
9262
9263 l_user_id := xla_environment_pkg.g_usr_id;
9264 l_login_id := xla_environment_pkg.g_login_id;
9265 l_date := SYSDATE;
9266 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
9267 l_prog_id := xla_environment_pkg.g_prog_id;
9268 l_req_id := xla_environment_pkg.g_req_id;
9272 IF g_log_enabled THEN
9269
9270 l_id_flex_code := 'GL#';
9271
9273 l_log_module := C_DEFAULT_MODULE||'.synchronize';
9274 END IF;
9275 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9276 trace
9277 (p_module => l_log_module
9278 ,p_msg => 'BEGIN ' || l_log_module
9279 ,p_level => C_LEVEL_PROCEDURE);
9280 END IF;
9281
9282 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9283 trace
9284 (p_module => l_log_module
9285 ,p_msg => 'p_chart_of_accounts_id :' || p_chart_of_accounts_id
9286 ,p_level => C_LEVEL_STATEMENT
9287 );
9288 trace
9289 (p_module => l_log_module
9290 ,p_msg => 'p_account_segment_value :' || p_account_segment_value
9291 ,p_level => C_LEVEL_STATEMENT
9292 );
9293 END IF;
9294
9295 IF FND_FLEX_APIS.get_segment_column( 101
9296 ,l_id_flex_code
9297 ,p_chart_of_accounts_id
9298 ,'GL_ACCOUNT'
9299 ,l_account_segment_column
9300 )
9301
9302 THEN
9303 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9304 trace
9305 (p_module => l_log_module
9306 ,p_msg => 'l_account_segment_column:' ||
9307 l_account_segment_column
9308 ,p_level => C_LEVEL_STATEMENT
9309 );
9310 END IF;
9311 ELSE
9312 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
9313 trace
9314 ( p_module => l_log_module
9315 ,p_msg => 'EXCEPTION:' ||
9316 'Unable to retrieve segment information for chart of accounts ' ||
9317 p_chart_of_accounts_id
9318 ,p_level => C_LEVEL_EXCEPTION
9319 );
9320 END IF;
9321 xla_exceptions_pkg.raise_message
9322 (p_location => 'xla_balances_pkg.synchronize');
9323 END IF;
9324
9325 LOOP
9326 EXECUTE IMMEDIATE
9327 '
9328 INSERT
9329 INTO xla_bal_synchronize_gt
9330 ( chart_of_accounts_id
9331 ,code_combination_id
9332 ,reference3
9333 )
9334 SELECT gcc.chart_of_accounts_id
9335 ,gcc.code_combination_id
9336 ,gcc.reference3
9337 FROM gl_code_combinations gcc
9338 ,xla_bal_synchronize_gt xbt
9339 WHERE gcc.chart_of_accounts_id = :1
9340 AND gcc.' || l_account_segment_column || ' = :2
9341 AND xbt.chart_of_accounts_id (+)= :3
9342 AND xbt.code_combination_id (+)= gcc.code_combination_id
9343 AND xbt.chart_of_accounts_id IS NULL
9344 AND ROWNUM <= :4
9345 '
9346 USING p_chart_of_accounts_id
9347 ,p_account_segment_value
9348 ,p_chart_of_accounts_id
9349 ,C_BATCH_COMMIT_SIZE;
9350
9351 l_row_count := SQL%ROWCOUNT;
9352
9353 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9354 trace
9355 (p_module => l_log_module
9356 ,p_msg => l_row_count
9357 || ' records inserted in xla_bal_synchronize_gt'
9358 ,p_level => C_LEVEL_STATEMENT
9359 );
9360 END IF;
9361
9362 IF l_row_count < C_BATCH_COMMIT_SIZE
9363 THEN
9364 COMMIT;
9365 EXIT;
9366 ELSE
9367 COMMIT;
9368 END IF;
9369 END LOOP;
9370
9371 SELECT MIN(reference3)
9372 ,MAX(reference3)
9373 INTO l_min_reference3
9374 ,l_max_reference3
9375 FROM xla_bal_synchronize_gt xbt
9376 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id;
9377
9378 IF NVL(l_min_reference3,'N') = NVL(l_max_reference3, 'N')
9379 THEN
9380 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9381 trace
9382 (p_module => l_log_module
9383 ,p_msg => 'Current reference3: ' || l_min_reference3
9384 ,p_level => C_LEVEL_STATEMENT
9385 );
9386 END IF;
9387 ELSE
9388 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
9389 trace
9390 ( p_module => l_log_module
9391 ,p_msg => 'EXCEPTION:' ||
9392 'REFERENCE3 is not consistent across ccids'
9393 ,p_level => C_LEVEL_EXCEPTION
9394 );
9395 END IF;
9396 xla_exceptions_pkg.raise_message
9397 (p_location => 'xla_balances_pkg.synchronize');
9398 END IF;
9399
9400 IF NVL(l_min_reference3,'N') = 'N'
9401 THEN
9402 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9403 trace
9404 (p_module => l_log_module
9405 ,p_msg => 'account is no more control'
9406 ,p_level => C_LEVEL_STATEMENT
9407 );
9408 END IF;
9409 END IF;
9410 --Since the control account may have changed application
9411 --all the existing balances must be deleted and recomputed
9412
9413 --try to bring the balances off line
9414 LOOP
9415
9416 UPDATE xla_balance_statuses xbsext
9420 ,xbsext.last_update_login = l_login_id
9417 SET xbsext.balance_status_code = 'S'
9418 ,xbsext.last_update_date = l_date
9419 ,xbsext.last_updated_by = l_user_id
9421 ,xbsext.program_update_date = l_date
9422 ,xbsext.program_application_id = l_prog_appl_id
9423 ,xbsext.program_id = l_prog_id
9424 ,xbsext.request_id = NVL(l_req_id, -1)
9425 WHERE xbsext.ROWID IN
9426 (SELECT xbs.ROWID
9427 FROM xla_balance_statuses xbs
9428 ,fnd_concurrent_requests fnd
9429 WHERE xbs.ledger_id IN
9430 (
9431 SELECT xgl.ledger_id
9432 FROM gl_ledgers xgl
9433 WHERE xgl.chart_of_accounts_id = p_chart_of_accounts_id
9434 )
9435 AND xbs.code_combination_id IN
9436 (
9437 SELECT xbt.code_combination_id
9438 FROM xla_bal_synchronize_gt xbt
9439 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9440 )
9441 AND xbs.balance_source_code = 'C'
9442 AND xbs.balance_status_code IN ('A', 'S')
9443 AND fnd.request_id(+) = xbs.request_id
9444 AND NVL(fnd.status_code,'N') <> 'R'
9445 UNION
9446 SELECT xbs.ROWID
9447 FROM xla_balance_statuses xbs
9448 WHERE xbs.ledger_id IN
9449 (
9450 SELECT xgl.ledger_id
9451 FROM gl_ledgers xgl
9452 WHERE xgl.chart_of_accounts_id = p_chart_of_accounts_id
9453 )
9454 AND xbs.code_combination_id IN
9455 (
9456 SELECT xbt.code_combination_id
9457 FROM xla_bal_synchronize_gt xbt
9458 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9459 )
9460 AND xbs.balance_source_code = 'C'
9461 AND xbs.balance_status_code IN ('A', 'S')
9462 AND NVL(xbs.request_id, -1) = NVL(l_req_id, -1)
9463 )
9464 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9465
9466 l_row_count := SQL%ROWCOUNT;
9467
9468 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9469 trace
9470 (p_module => l_log_module
9471 ,p_msg => l_row_count
9472 || ' xla_balance_statuses updated to S'
9473 ,p_level => C_LEVEL_STATEMENT
9474 );
9475 END IF;
9476
9477 IF l_row_count < C_BATCH_COMMIT_SIZE
9478 THEN
9479 COMMIT;
9480 EXIT;
9481 ELSE
9482 COMMIT;
9483 END IF;
9484 END LOOP;
9485
9486 /*
9487 --lock xla_balance_statuses and wait if necessary
9488 EXECUTE IMMEDIATE
9489 '
9490 SELECT xbs.code_combination_id
9491 FROM xla_balance_statuses xbs
9492 WHERE xbs.ledger_id IN
9493 (
9494 SELECT xgl.ledger_id
9495 FROM gl_ledgers xgl
9496 ,xla_setup_ledgers xsl
9497 WHERE xgl.chart_of_accounts_id = :1
9498 AND xsl.ledger_id = xgl.ledger_id
9499 )
9500 AND xbs.balance_source_code = ''C''
9501 AND xbs.code_combination_id IN
9502 (
9503 SELECT xbt.code_combination_id
9504 FROM xla_bal_synchronize_gt xbt
9505 WHERE xbt.chart_of_accounts_id = :1
9506 )
9507 FOR UPDATE OF xbs.ledger_id
9508 '
9509 USING p_chart_of_accounts_id
9510 ,p_chart_of_accounts_id;
9511 */
9512
9513 SELECT COUNT(*)
9514 INTO l_count_unavailable
9515 FROM xla_balance_statuses xbs
9516 WHERE xbs.balance_status_code <> 'S'
9517 AND ( xbs.application_id
9518 ,xbs.ledger_id
9519 ,xbs.code_combination_id
9520 )
9521 IN
9522 (
9523 SELECT xbt.application_id
9524 ,xbt.ledger_id
9525 ,xbt.code_combination_id
9526 FROM xla_bal_recreate_gt xbt
9527 );
9528
9529 IF l_count_unavailable > 0
9530 THEN
9531 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9532 trace
9533 (p_module => l_log_module
9534 ,p_msg => 'Check for previous balance requests in error'
9535 ,p_level => C_LEVEL_STATEMENT
9536 );
9537 trace
9538 (p_module => l_log_module
9539 ,p_msg => 'Please resubmit'
9540 ,p_level => C_LEVEL_STATEMENT
9541 );
9542 END IF;
9543 RETURN FALSE;
9544 END IF;
9545
9546 --must ensure accounting lines have control_balance_flag NULL
9547 LOOP
9548 UPDATE xla_ae_lines xal
9549 SET xal.control_balance_flag = NULL
9553 FROM xla_bal_synchronize_gt xbt
9550 WHERE xal.code_combination_id IN
9551 (
9552 SELECT xbt.code_combination_id
9554 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9555 )
9556 AND xal.control_balance_flag IS NOT NULL
9557 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9558
9559 l_row_count := SQL%ROWCOUNT;
9560
9561 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9562 trace
9563 (p_module => l_log_module
9564 ,p_msg => l_row_count || ' xla_ae_lines updated to N'
9565 ,p_level => C_LEVEL_STATEMENT
9566 );
9567 END IF;
9568
9569 IF l_row_count < C_BATCH_COMMIT_SIZE
9570 THEN
9571 COMMIT;
9572 EXIT;
9573 ELSE
9574 COMMIT;
9575 END IF;
9576 END LOOP;
9577
9578 --delete xla_control_balances
9579 LOOP
9580 DELETE
9581 FROM xla_control_balances xcb
9582 WHERE xcb.code_combination_id IN
9583 (
9584 SELECT xbt.code_combination_id
9585 FROM xla_bal_synchronize_gt xbt
9586 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9587 )
9588 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9589
9590 l_row_count := SQL%ROWCOUNT;
9591
9592 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9593 trace
9594 (p_module => l_log_module
9595 ,p_msg => l_row_count || ' xla_balance_statuses deleted'
9596 ,p_level => C_LEVEL_STATEMENT
9597 );
9598 END IF;
9599 IF l_row_count < C_BATCH_COMMIT_SIZE
9600 THEN
9601 COMMIT;
9602 EXIT;
9603 ELSE
9604 COMMIT;
9605 END IF;
9606 END LOOP;
9607
9608 --delete xla_balance_statuses
9609 LOOP
9610 DELETE
9611 FROM xla_balance_statuses xbs
9612 WHERE xbs.code_combination_id IN
9613 (
9614 SELECT xbt.code_combination_id
9615 FROM xla_bal_synchronize_gt xbt
9616 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9617 )
9618 AND xbs.balance_status_code = 'S'
9619 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9620
9621 l_row_count := SQL%ROWCOUNT;
9622
9623 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9624 trace
9625 (p_module => l_log_module
9626 ,p_msg => l_row_count || ' xla_balance_statuses deleted'
9627 ,p_level => C_LEVEL_STATEMENT
9628 );
9629 END IF;
9630 IF l_row_count < C_BATCH_COMMIT_SIZE
9631 THEN
9632 COMMIT;
9633 EXIT;
9634 ELSE
9635 COMMIT;
9636 END IF;
9637 END LOOP;
9638
9639 SELECT COUNT(*)
9640 INTO l_count_unavailable
9641 FROM xla_balance_statuses xbs
9642 WHERE xbs.balance_source_code = 'C'
9643 AND xbs.code_combination_id IN
9644 (
9645 SELECT xbt.code_combination_id
9646 FROM xla_bal_synchronize_gt xbt
9647 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9648 );
9649
9650 IF l_count_unavailable > 0
9651 THEN
9652 IF (C_LEVEL_ERROR >= g_log_level) THEN
9653 trace
9654 (p_module => l_log_module
9655 ,p_msg => 'Not all xla_balance_statuses records available'
9656 ,p_level => C_LEVEL_ERROR
9657 );
9658 trace
9659 (p_module => l_log_module
9660 ,p_msg => 'Please resubmit'
9661 ,p_level => C_LEVEL_ERROR
9662 );
9663 END IF;
9664 RETURN FALSE;
9665 END IF;
9666
9667 IF NVL(l_min_reference3,'N') <> 'N'
9668 THEN
9669 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9670 trace
9671 (p_module => l_log_module
9672 ,p_msg => 'account is now control'
9673 ,p_level => C_LEVEL_STATEMENT
9674 );
9675 END IF;
9676
9677 LOOP
9678 UPDATE xla_ae_lines xal
9679 SET xal.control_balance_flag = 'P'
9680 WHERE xal.ROWID IN
9681 ( SELECT xal.ROWID
9682 FROM xla_bal_synchronize_gt xbt
9683 ,xla_ae_lines xal
9684 ,xla_ae_headers xah
9685 ,xla_subledgers xsl
9686 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9687 AND xal.code_combination_id = xbt.code_combination_id
9688 AND xah.ae_header_id = xal.ae_header_id
9689 AND xah.application_id = xal.application_id
9690 AND xal.party_type_code IS NOT NULL
9691 AND xal.party_id IS NOT NULL
9692 AND xal.control_balance_flag IS NULL
9693 AND xsl.application_id = xah.application_id
9697
9694 AND xbt.reference3 = xsl.control_account_type_code
9695 )
9696 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9698 l_row_count := SQL%ROWCOUNT;
9699
9700 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9701 trace
9702 (p_module => l_log_module
9703 ,p_msg => l_row_count || ' xla_ae_lines updated to P'
9704 ,p_level => C_LEVEL_STATEMENT
9705 );
9706 END IF;
9707
9708 IF l_row_count < C_BATCH_COMMIT_SIZE
9709 THEN
9710 COMMIT;
9711 EXIT;
9712 ELSE
9713 COMMIT;
9714 END IF;
9715 END LOOP;
9716
9717 l_result := FALSE;
9718 WHILE NOT l_result
9719 LOOP
9720 l_result := calculate_balances
9721 ( p_application_id => NULL
9722 ,p_ledger_id => NULL
9723 ,p_entity_id => NULL
9724 ,p_event_id => NULL
9725 ,p_request_id => NULL
9726 ,p_accounting_batch_id => NULL
9727 ,p_ae_header_id => NULL
9728 ,p_ae_line_num => NULL
9729 ,p_code_combination_id => l_code_combination_id
9730 ,p_period_name => NULL
9731 ,p_update_mode => 'M'
9732 ,p_balance_source_code => NULL
9733 ,p_called_by_flag => NULL
9734 ,p_commit_flag => 'Y'
9735 );
9736 END LOOP;
9737
9738 END IF;
9739
9740 LOOP
9741 DELETE
9742 FROM xla_bal_synchronize_gt xbt
9743 WHERE xbt.chart_of_accounts_id = p_chart_of_accounts_id
9744 AND ROWNUM <= C_BATCH_COMMIT_SIZE;
9745
9746 l_row_count := SQL%ROWCOUNT;
9747
9748 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
9749 trace
9750 (p_module => l_log_module
9751 ,p_msg => l_row_count || ' xla_bal_synchronize_gt deleted'
9752 ,p_level => C_LEVEL_STATEMENT
9753 );
9754 END IF;
9755
9756 IF l_row_count < C_BATCH_COMMIT_SIZE
9757 THEN
9758 COMMIT;
9759 EXIT;
9760 ELSE
9761 COMMIT;
9762 END IF;
9763 END LOOP;
9764
9765 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9766 trace
9767 (p_module => l_log_module
9768 ,p_msg => 'END ' || l_log_module
9769 ,p_level => C_LEVEL_PROCEDURE);
9770 END IF;
9771
9772 RETURN TRUE;
9773
9774 EXCEPTION
9775 WHEN xla_exceptions_pkg.application_exception THEN
9776 RAISE;
9777 WHEN OTHERS THEN
9778 xla_exceptions_pkg.raise_message
9779 (p_location => 'xla_balances_pkg.synchronize');
9780 END synchronize;
9781
9782 PROCEDURE open_period_srs
9783 ( p_errbuf OUT NOCOPY VARCHAR2
9784 ,p_retcode OUT NOCOPY NUMBER
9785 ,p_ledger_id IN NUMBER
9786 )
9787 IS
9788 /*======================================================================+
9789 | |
9790 | Public Function |
9791 | |
9792 | Description |
9793 | ----------- |
9794 | Just the SRS wrapper for check_create_period_balances |
9795 | |
9796 | Pseudo-code |
9797 | ----------- |
9798 | Call create_new_period_balances and assign its return code to |
9799 | p_retcode |
9800 | RETURN p_retcode (0=success, 1=warning, 2=error) |
9801 | |
9802 | Open issues |
9803 | ----------- |
9804 | |
9805 | 1) Need to review the value assigned to p_errbuf |
9806 | |
9807 | |
9808 | |
9809 +======================================================================*/
9810
9811 l_sobname VARCHAR2(30);
9812
9813 l_log_module VARCHAR2 (2000);
9814
9815 BEGIN
9816 IF g_log_enabled THEN
9817 l_log_module := C_DEFAULT_MODULE||'.open_period_srs';
9818 END IF;
9819
9820 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9821 trace
9825 END IF;
9822 (p_module => l_log_module
9823 ,p_msg => 'BEGIN ' || l_log_module
9824 ,p_level => C_LEVEL_PROCEDURE);
9826
9827 fnd_file.put_line(fnd_file.log,'p_ledger_id: ' || p_ledger_id);
9828
9829 p_retcode := 0;
9830
9831 fnd_file.put_line(fnd_file.log,'Opening control account balances' );
9832 IF check_create_period_balances
9833 ( p_application_id => NULL
9834 ,p_ledger_id => p_ledger_id
9835 ,p_balance_source_code => 'C'
9836 )
9837 THEN
9838 fnd_file.put_line(fnd_file.log,'Successful' );
9839 ELSE
9840 p_retcode := p_retcode + 1;
9841 fnd_file.put_line(fnd_file.log,'Unsuccessful' );
9842 END IF;
9843
9844 fnd_file.put_line(fnd_file.log,'Opening analytical criteria balances' );
9845 IF check_create_period_balances
9846 ( p_application_id => NULL
9847 ,p_ledger_id => p_ledger_id
9848 ,p_balance_source_code => 'A'
9849 )
9850 THEN
9851 fnd_file.put_line(fnd_file.log,'Successful' );
9852 ELSE
9853 p_retcode := p_retcode + 1;
9854 fnd_file.put_line(fnd_file.log,'Unsuccessful' );
9855 END IF;
9856
9857 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9858 trace
9859 (p_module => l_log_module
9860 ,p_msg => 'END ' || l_log_module
9861 ,p_level => C_LEVEL_PROCEDURE);
9862 END IF;
9863
9864 EXCEPTION
9865 WHEN xla_exceptions_pkg.application_exception THEN
9866 p_retcode := 2;
9867 p_errbuf := sqlerrm;
9868 WHEN OTHERS THEN
9869 p_retcode := 2;
9870 p_errbuf := sqlerrm;
9871 END open_period_srs;
9872
9873
9874 FUNCTION open_period
9875 ( p_ledger_id IN INTEGER
9876 ) RETURN BOOLEAN
9877 IS
9878 l_return_value BOOLEAN;
9879 l_req_id NUMBER;
9880 l_log_module VARCHAR2 (2000);
9881
9882 BEGIN
9883 IF g_log_enabled THEN
9884 l_log_module := C_DEFAULT_MODULE||'.open_period';
9885 END IF;
9886 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9887 trace
9888 (p_module => l_log_module
9889 ,p_msg => 'BEGIN ' || l_log_module
9890 ,p_level => C_LEVEL_PROCEDURE);
9891 END IF;
9892
9893 --batch execution
9894 l_return_value := fnd_request.set_mode(TRUE);
9895 l_req_id := fnd_request.submit_request
9896 ( application => 'XLA'
9897 ,program => 'XLABAOPE'
9898 ,description => 'Balance Period Opening'
9899 ,argument1 => p_ledger_id
9900 );
9901 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9902 trace
9903 (p_module => l_log_module
9904 ,p_msg => 'Submitted request ID: ' || l_req_id
9905 ,p_level => C_LEVEL_PROCEDURE);
9906 END IF;
9907
9908 IF l_req_id = 0 THEN
9909 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
9910 trace
9911 ( p_module => l_log_module
9912 ,p_msg => 'EXCEPTION:' ||
9913 'Unable to submit request'
9914 ,p_level => C_LEVEL_EXCEPTION
9915 );
9916 END IF;
9917 xla_exceptions_pkg.raise_message
9918 (p_location => 'xla_balances_pkg.open_period');
9919 END IF;
9920
9921 l_return_value := TRUE;
9922
9923 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9924 trace
9925 (p_module => l_log_module
9926 ,p_msg => 'END ' || l_log_module
9927 ,p_level => C_LEVEL_PROCEDURE);
9928 END IF;
9929
9930 RETURN l_return_value;
9931 EXCEPTION
9932 WHEN xla_exceptions_pkg.application_exception THEN
9933 RAISE;
9934 WHEN OTHERS THEN
9935 xla_exceptions_pkg.raise_message
9936 (p_location => 'xla_balances_pkg.open_period');
9937 END open_period;
9938
9939
9940 PROCEDURE handle_fake_journal_entry
9941 ( p_mode VARCHAR2 --'A' or 'D'
9942 ,p_ae_header_id INTEGER
9943 ,p_application_id INTEGER DEFAULT NULL
9944 ,p_ledger_id INTEGER DEFAULT NULL
9945 ,p_entity_id INTEGER DEFAULT NULL
9946 ,p_event_id INTEGER DEFAULT NULL
9947 ,p_event_type_code VARCHAR2 DEFAULT NULL
9948 ,p_accounting_date DATE DEFAULT NULL
9949 ,p_gl_transfer_status_code VARCHAR2 DEFAULT NULL
9950 ,p_je_category_name VARCHAR2 DEFAULT NULL
9951 ,p_accounting_entry_status_code VARCHAR2 DEFAULT NULL
9952 ,p_accounting_entry_type_code VARCHAR2 DEFAULT NULL
9953 ,p_balance_type_code VARCHAR2 DEFAULT NULL
9954 ,p_period_name VARCHAR2 DEFAULT NULL
9955 ,p_ae_line_num INTEGER DEFAULT NULL
9956 ,p_code_combination_id INTEGER DEFAULT NULL
9957 ,p_accounted_dr NUMBER DEFAULT NULL
9958 ,p_accounted_cr NUMBER DEFAULT NULL
9959 ,p_currency_code VARCHAR2 DEFAULT NULL
9963 ,p_party_site_id NUMBER DEFAULT NULL
9960 ,p_entered_dr NUMBER DEFAULT NULL
9961 ,p_entered_cr NUMBER DEFAULT NULL
9962 ,p_party_id NUMBER DEFAULT NULL
9964 ,p_party_type_code VARCHAR2 DEFAULT NULL
9965 ,p_control_balance_flag VARCHAR2 DEFAULT NULL
9966 ,p_analytical_balance_flag VARCHAR2 DEFAULT NULL
9967 )
9968 IS
9969
9970 l_user_id INTEGER;
9971 l_login_id INTEGER;
9972 l_date DATE;
9973 l_prog_appl_id INTEGER;
9974 l_prog_id INTEGER;
9975 l_req_id INTEGER;
9976
9977 l_log_module VARCHAR2 (2000);
9978
9979 BEGIN
9980
9981 l_user_id := xla_environment_pkg.g_usr_id;
9982 l_login_id := xla_environment_pkg.g_login_id;
9983 l_date := SYSDATE;
9984 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
9985 l_prog_id := xla_environment_pkg.g_prog_id;
9986 l_req_id := xla_environment_pkg.g_req_id;
9987
9988 IF g_log_enabled THEN
9989 l_log_module := C_DEFAULT_MODULE||'.handle_fake_journal_entry';
9990 END IF;
9991 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
9992 trace
9993 (p_module => l_log_module
9994 ,p_msg => 'BEGIN ' || l_log_module
9995 ,p_level => C_LEVEL_PROCEDURE);
9996 END IF;
9997
9998 IF p_mode = 'A' THEN
9999 INSERT INTO xla_ae_headers
10000 (
10001 AE_HEADER_ID
10002 ,APPLICATION_ID
10003 ,LEDGER_ID
10004 ,ENTITY_ID
10005 ,EVENT_ID
10006 ,EVENT_TYPE_CODE
10007 ,ACCOUNTING_DATE
10008 ,GL_TRANSFER_STATUS_CODE
10009 ,JE_CATEGORY_NAME
10010 ,ACCOUNTING_ENTRY_STATUS_CODE
10011 ,ACCOUNTING_ENTRY_TYPE_CODE
10012 ,CREATION_DATE
10013 ,CREATED_BY
10014 ,LAST_UPDATE_DATE
10015 ,LAST_UPDATED_BY
10016 ,BALANCE_TYPE_CODE
10017 ,PERIOD_NAME
10018 )
10019 VALUES
10020 (
10021 p_ae_header_id
10022 ,p_application_id
10023 ,p_ledger_id
10024 ,p_entity_id
10025 ,p_event_id
10026 ,p_event_type_code
10027 ,p_accounting_date
10028 ,p_gl_transfer_status_code
10029 ,p_je_category_name
10030 ,p_accounting_entry_status_code
10031 ,p_accounting_entry_type_code
10032 ,l_date
10033 ,l_user_id
10034 ,l_date
10035 ,l_user_id
10036 ,p_balance_type_code
10037 ,p_period_name
10038 );
10039
10040 INSERT INTO xla_ae_lines
10041 (
10042 AE_HEADER_ID
10043 ,AE_LINE_NUM
10044 ,CODE_COMBINATION_ID
10045 ,CREATION_DATE
10046 ,ACCOUNTED_DR
10047 ,ACCOUNTED_CR
10048 ,CURRENCY_CODE
10049 ,ENTERED_DR
10050 ,ENTERED_CR
10051 ,LAST_UPDATE_DATE
10052 ,PARTY_ID
10053 ,PARTY_SITE_ID
10054 ,PARTY_TYPE_CODE
10055 ,CREATED_BY
10056 ,LAST_UPDATED_BY
10057 ,CONTROL_BALANCE_FLAG
10058 ,ANALYTICAL_BALANCE_FLAG
10059 ,APPLICATION_ID
10060 ,LEDGER_ID --5067260
10061 ,ACCOUNTING_DATE --5067260
10062 ,GL_SL_LINK_ID --5041325
10063 )
10064 VALUES
10065 (
10066 p_ae_header_id
10067 ,p_ae_line_num
10068 ,p_code_combination_id
10069 ,l_date
10070 ,p_accounted_dr
10071 ,p_accounted_cr
10072 ,p_currency_code
10073 ,p_entered_dr
10074 ,p_entered_cr
10075 ,l_date
10076 ,p_party_id
10077 ,p_party_site_id
10078 ,p_party_type_code
10079 ,l_user_id
10080 ,l_user_id
10081 ,p_control_balance_flag
10082 ,p_analytical_balance_flag
10083 ,p_application_id
10084 ,p_ledger_id
10085 ,p_accounting_date
10086 ,DECODE(p_accounting_entry_status_code,'F'
10087 ,xla_gl_sl_link_id_s.nextval,NULL) --5041325
10088 );
10089
10090 ELSIF p_mode = 'D'
10091 THEN
10092 DELETE
10093 FROM xla_ae_lines xal
10094 WHERE xal.ae_header_id = p_ae_header_id;
10095
10096 DELETE
10097 FROM xla_ae_headers xah
10098 WHERE xah.ae_header_id = p_ae_header_id;
10099
10100 ELSE
10101 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10102 trace
10103 ( p_module => l_log_module
10104 ,p_msg => 'EXCEPTION:' ||
10105 'Invalid p_mode: ' || p_mode
10106 ,p_level => C_LEVEL_EXCEPTION
10107 );
10108 END IF;
10109 xla_exceptions_pkg.raise_message
10110 (p_location => 'xla_balances_pkg.handle_fake_journal_entry');
10111 END IF;
10112
10113 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10114 trace
10115 (p_module => l_log_module
10116 ,p_msg => 'END ' || l_log_module
10117 ,p_level => C_LEVEL_PROCEDURE);
10118 END IF;
10119
10120 EXCEPTION
10121 WHEN xla_exceptions_pkg.application_exception THEN
10122 RAISE;
10123 WHEN OTHERS THEN
10124 xla_exceptions_pkg.raise_message
10125 (p_location => 'xla_balances_pkg.handle_fake_journal_entry');
10126 END handle_fake_journal_entry;
10127
10128
10129 FUNCTION initialize
10130 ( p_application_id IN INTEGER
10131 ,p_ledger_id IN INTEGER
10132 ,p_code_combination_id IN INTEGER
10133 ,p_party_type_code IN VARCHAR2
10134 ,p_party_id IN INTEGER
10138 ,p_new_beginning_balance_cr IN NUMBER
10135 ,p_party_site_id IN INTEGER
10136 ,p_period_name IN VARCHAR2
10137 ,p_new_beginning_balance_dr IN NUMBER
10139 ) RETURN BOOLEAN
10140 IS
10141 l_effective_period_num INTEGER;
10142 l_first_entry_eff_period_num INTEGER;
10143 l_ledger_id INTEGER;
10144 l_ledger_currency_code VARCHAR2(15);
10145 l_application_id INTEGER;
10146 l_period_start_date DATE;
10147 l_ae_header_id INTEGER;
10148
10149 l_existing_balance_rowid UROWID;
10150 l_existing_balance_period_name VARCHAR2(15);
10151 l_existing_begin_balance_dr NUMBER;
10152 l_existing_begin_balance_cr NUMBER;
10153 l_new_balance_debit_dr NUMBER;
10154 l_new_balance_debit_cr NUMBER;
10155
10156 l_user_id INTEGER;
10157 l_login_id INTEGER;
10158 l_date DATE;
10159 l_prog_appl_id INTEGER;
10160 l_prog_id INTEGER;
10161 l_req_id INTEGER;
10162
10163 l_row_count NUMBER;
10164
10165 l_log_module VARCHAR2 (2000);
10166
10167 BEGIN
10168
10169 l_user_id := xla_environment_pkg.g_usr_id;
10170 l_login_id := xla_environment_pkg.g_login_id;
10171 l_date := SYSDATE;
10172 l_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
10173 l_prog_id := xla_environment_pkg.g_prog_id;
10174 l_req_id := xla_environment_pkg.g_req_id;
10175
10176 IF g_log_enabled THEN
10177 l_log_module := C_DEFAULT_MODULE||'.initialize';
10178 END IF;
10179
10180 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10181 trace
10182 (p_module => l_log_module
10183 ,p_msg => 'BEGIN ' || l_log_module
10184 ,p_level => C_LEVEL_PROCEDURE);
10185 END IF;
10186
10187 SELECT gll.currency_code
10188 INTO l_ledger_currency_code
10189 FROM gl_ledgers gll
10190 WHERE gll.ledger_id = p_ledger_id;
10191
10192 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10193 trace
10194 (p_module => l_log_module
10195 ,p_msg => 'Currency code : ' || l_ledger_currency_code
10196 ,p_level => C_LEVEL_STATEMENT
10197 );
10198 END IF;
10199
10200 SELECT gps.effective_period_num
10201 ,gps.start_date
10202 INTO l_effective_period_num
10203 ,l_period_start_date
10204 FROM gl_period_statuses gps
10205 WHERE gps.ledger_id = p_ledger_id
10206 AND gps.period_name = p_period_name
10207 AND gps.application_id = 101;
10208
10209 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10210 trace
10211 (p_module => l_log_module
10212 ,p_msg => 'Effective period num: ' || l_effective_period_num
10213 ,p_level => C_LEVEL_STATEMENT
10214 );
10215 trace
10216 (p_module => l_log_module
10217 ,p_msg => 'Period start date: ' || l_period_start_date
10218 ,p_level => C_LEVEL_STATEMENT
10219 );
10220 END IF;
10221
10222 SELECT xls.application_id
10223 INTO l_application_id
10224 FROM xla_subledgers xls
10225 WHERE xls.application_id = p_application_id;
10226
10227 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10228 trace
10229 (p_module => l_log_module
10230 ,p_msg => 'Application id: ' || l_application_id
10231 ,p_level => C_LEVEL_STATEMENT
10232 );
10233 END IF;
10234
10235 SELECT xll.ledger_id
10236 INTO l_ledger_id
10237 FROM xla_gl_ledgers_v xll
10238 WHERE xll.ledger_id = p_ledger_id;
10239
10240 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10241 trace
10242 (p_module => l_log_module
10243 ,p_msg => 'Ledger id: ' || l_ledger_id
10244 ,p_level => C_LEVEL_STATEMENT
10245 );
10246 END IF;
10247
10248
10249 IF p_party_type_code IS NULL
10250 OR p_party_id IS NULL
10251 OR p_party_site_id IS NULL
10252 THEN
10253 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10254 trace
10255 ( p_module => l_log_module
10256 ,p_msg => 'EXCEPTION:' ||
10257 'Party information cannot be NULL.'
10258 ,p_level => C_LEVEL_EXCEPTION
10259 );
10260 END IF;
10261 xla_exceptions_pkg.raise_message
10262 (p_location => 'xla_balances_pkg.initialize');
10263 END IF;
10264
10265 IF p_new_beginning_balance_dr IS NULL
10266 AND p_new_beginning_balance_cr IS NULL
10267 THEN
10268 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10269 trace
10270 ( p_module => l_log_module
10271 ,p_msg => 'EXCEPTION:' ||
10272 'p_beginning_balance_dr and p_beginning_balance_cr cannot be both NULL'
10273 ,p_level => C_LEVEL_EXCEPTION
10274 );
10275 END IF;
10276 xla_exceptions_pkg.raise_message
10277 (p_location => 'xla_balances_pkg.initialize');
10278 END IF;
10279
10280 IF xla_control_accounts_pkg.C_IS_CONTROL_ACCOUNT
10281 = xla_control_accounts_pkg.is_control_account
10282 ( p_code_combination_id => p_code_combination_id
10283 ,p_natural_account => NULL
10284 ,p_ledger_id => p_ledger_id
10285 ,p_application_id => p_application_id
10286 )
10287 THEN
10288 RETURN FALSE;
10289 END IF;
10290
10294 ,xla_ae_headers xah
10291 SELECT MIN(gps.effective_period_num)
10292 INTO l_first_entry_eff_period_num
10293 FROM gl_period_statuses gps
10295 ,xla_ae_lines xal
10296 WHERE gps.ledger_id = p_ledger_id
10297 AND gps.application_id = 101
10298 AND gps.period_name = xah.period_name
10299 AND xah.ledger_id = p_ledger_id
10300 AND xah.application_id = p_application_id
10301 AND xal.ae_header_id = xah.ae_header_id
10302 AND xal.code_combination_id = p_code_combination_id
10303 AND xal.party_type_code = p_party_type_code
10304 AND xal.party_id = p_party_id
10305 AND NVL(xal.party_site_id,-999)= p_party_site_id;
10306
10307 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10308 trace
10309 (p_module => l_log_module
10310 ,p_msg => 'First entry in period: '
10311 || l_first_entry_eff_period_num
10312 ,p_level => C_LEVEL_STATEMENT);
10313 END IF;
10314
10315 IF l_first_entry_eff_period_num IS NOT NULL
10316 AND l_first_entry_eff_period_num <= l_effective_period_num
10317 THEN
10318 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10319 trace
10320 ( p_module => l_log_module
10321 ,p_msg => 'EXCEPTION:' ||
10322 'Entry exist before or on the initialization period'
10323 ,p_level => C_LEVEL_EXCEPTION
10324 );
10325 END IF;
10326 xla_exceptions_pkg.raise_message
10327 (p_location => 'xla_balances_pkg.initialize');
10328 END IF;
10329
10330 BEGIN
10331 SELECT xba.period_name
10332 ,xba.beginning_balance_dr
10333 ,xba.beginning_balance_cr
10334 ,xba.rowid
10335 INTO l_existing_balance_period_name
10336 ,l_existing_begin_balance_dr
10337 ,l_existing_begin_balance_cr
10338 ,l_existing_balance_rowid
10339 FROM xla_control_balances xba
10340 WHERE xba.ledger_id = p_ledger_id
10341 AND xba.application_id = p_application_id
10342 AND xba.code_combination_id = p_code_combination_id
10343 AND xba.initial_balance_flag = 'Y'
10344 AND xba.party_type_code = p_party_type_code
10345 AND xba.party_id = p_party_id
10346 AND xba.party_site_id = p_party_site_id;
10347 EXCEPTION
10348 WHEN NO_DATA_FOUND
10349 THEN
10350 NULL;
10351 WHEN OTHERS
10352 THEN
10353 RAISE;
10354 END;
10355
10356 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10357 trace
10358 (p_module => l_log_module
10359 ,p_msg => 'Balance rowid: ' || l_existing_balance_rowid
10360 ,p_level => C_LEVEL_STATEMENT);
10361 END IF;
10362
10363 IF l_existing_balance_rowid IS NOT NULL
10364 THEN
10365 IF l_existing_balance_period_name <> p_period_name
10366 THEN
10367 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10368 trace
10369 ( p_module => l_log_module
10370 ,p_msg => 'EXCEPTION:' ||
10371 'A initialization balance already exists for these key for period ' ||
10372 l_existing_balance_period_name
10373 ,p_level => C_LEVEL_EXCEPTION
10374 );
10375 END IF;
10376 xla_exceptions_pkg.raise_message
10377 (p_location => 'xla_balances_pkg.initialize');
10378 END IF;
10379
10380 UPDATE xla_control_balances xba
10381 SET xba.initial_balance_flag = 'N'
10382 WHERE xba.rowid = l_existing_balance_rowid;
10383
10384 l_row_count := SQL%ROWCOUNT;
10385
10386 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10387 trace
10388 (p_module => l_log_module
10389 ,p_msg => l_row_count || ' balances updated '
10390 ,p_level => C_LEVEL_STATEMENT);
10391 END IF;
10392
10393 END IF;
10394
10395 SELECT xla_ae_headers_s.nextval
10396 INTO l_ae_header_id
10397 FROM DUAL;
10398
10399 --Create fake entries
10400 handle_fake_journal_entry
10401 ( p_mode => 'A'
10402 ,p_ae_header_id => l_ae_header_id
10403 ,p_application_id => p_application_id
10404 ,p_ledger_id => p_ledger_id
10405 ,p_entity_id => -1
10406 ,p_event_id => -1
10407 ,p_event_type_code => 'EVENT_TYPE_CODE'
10408 ,p_accounting_date => l_period_start_date
10409 ,p_gl_transfer_status_code => 'T'
10410 ,p_je_category_name => 'JE_CATEGORY'
10411 ,p_accounting_entry_status_code => 'F'
10412 ,p_accounting_entry_type_code => 'A'
10413 ,p_balance_type_code => 'A'
10414 ,p_period_name => p_period_name
10415 ,p_ae_line_num => 1
10416 ,p_code_combination_id => p_code_combination_id
10417 ,p_accounted_dr => NVL(p_new_beginning_balance_dr , 0)
10418 - NVL(l_existing_begin_balance_dr, 0)
10419 ,p_accounted_cr => NVL(p_new_beginning_balance_cr, 0)
10420 - NVL(l_existing_begin_balance_cr, 0)
10421 ,p_currency_code => l_ledger_currency_code
10422 ,p_entered_dr => NULL
10423 ,p_entered_cr => NULL
10424 ,p_party_id => p_party_id
10428 ,p_analytical_balance_flag => NULL
10425 ,p_party_site_id => p_party_site_id
10426 ,p_party_type_code => p_party_type_code
10427 ,p_control_balance_flag => 'P'
10429 );
10430
10431
10432 --Update the balances
10433 IF NOT calculate_balances
10434 ( p_application_id => p_application_id
10435 ,p_ledger_id => p_ledger_id
10436 ,p_entity_id => NULL
10437 ,p_event_id => NULL
10438 ,p_request_id => NULL
10439 ,p_accounting_batch_id => NULL
10440 ,p_ae_header_id => -1
10441 ,p_ae_line_num => 1
10442 ,p_code_combination_id => NULL
10443 ,p_period_name => NULL
10444 ,p_update_mode => 'A'
10445 ,p_balance_source_code => 'C'
10446 ,p_called_by_flag => NULL
10447 ,p_commit_flag => 'N'
10448 )
10449 THEN
10450 IF (C_LEVEL_EXCEPTION >= g_log_level) THEN
10451 trace
10452 ( p_module => l_log_module
10453 ,p_msg => 'EXCEPTION:' ||
10454 'Failure propagating the initial balance'
10455 ,p_level => C_LEVEL_EXCEPTION
10456 );
10457 END IF;
10458 xla_exceptions_pkg.raise_message
10459 (p_location => 'xla_balances_pkg.initialize');
10460 END IF;
10461
10462 --Delete fake entries
10463 handle_fake_journal_entry
10464 ( p_mode => 'D'
10465 ,p_ae_header_id => l_ae_header_id
10466 );
10467
10468 UPDATE xla_control_balances xba
10469 SET xba.beginning_balance_dr = xba.beginning_balance_dr + xba.period_balance_dr
10470 ,xba.beginning_balance_cr = xba.beginning_balance_cr + xba.period_balance_cr
10471 ,xba.period_balance_dr = 0
10472 ,xba.period_balance_cr = 0
10473 ,xba.initial_balance_flag = 'Y'
10474 ,xba.first_period_flag = 'Y'
10475 WHERE xba.ledger_id = p_ledger_id
10476 AND xba.application_id = p_application_id
10477 AND xba.code_combination_id = p_code_combination_id
10478 AND xba.initial_balance_flag = 'N'
10479 AND xba.party_type_code = p_party_type_code
10480 AND xba.party_id = p_party_id
10481 AND xba.party_site_id = p_party_site_id
10482 AND xba.period_name = p_period_name;
10483
10484 l_row_count := SQL%ROWCOUNT;
10485
10486 IF (C_LEVEL_STATEMENT >= g_log_level) THEN
10487 trace
10488 (p_module => l_log_module
10489 ,p_msg => l_row_count || ' balances udpated '
10490 ,p_level => C_LEVEL_STATEMENT);
10491 END IF;
10492
10493 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10494 trace
10495 (p_module => l_log_module
10496 ,p_msg => 'END ' || l_log_module
10497 ,p_level => C_LEVEL_PROCEDURE);
10498 END IF;
10499
10500 RETURN TRUE;
10501
10502 EXCEPTION
10503 WHEN xla_exceptions_pkg.application_exception THEN
10504 RAISE;
10505 WHEN OTHERS THEN
10506 xla_exceptions_pkg.raise_message
10507 (p_location => 'xla_balances_pkg.initialize');
10508 END initialize;
10509
10510 FUNCTION open_period_event ( p_subscription_guid IN raw
10511 ,p_event IN OUT NOCOPY WF_EVENT_T)
10512 RETURN VARCHAR2 IS
10513 l_parameter_list wf_parameter_list_t;
10514 l_ledger_id number;
10515 l_period_name varchar2(100);
10516 l_log_module VARCHAR2(240);
10517 l_request_id number;
10518 BEGIN
10519
10520 IF g_log_enabled THEN
10521 l_log_module := C_DEFAULT_MODULE||'.open_period_event';
10522 END IF;
10523 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10524 trace
10525 (p_msg => 'BEGIN of procedure open_period_event'
10526 ,p_level => C_LEVEL_PROCEDURE
10527 ,p_module => l_log_module);
10528 END IF;
10529
10530 -- get the parameter of the event
10531 l_parameter_list := p_event.getParameterList;
10532 l_period_name:=wf_event.getValueForParameter('PERIOD_NAME', l_parameter_list);
10533 l_ledger_id:=to_number(wf_event.getValueForParameter('LEDGER_ID', l_parameter_list));
10534
10535 IF (C_LEVEL_STATEMENT>= g_log_level) THEN
10536 trace
10537 (p_msg => 'period_name:'|| l_period_name
10538 || ' ledger_id:'||to_char(l_ledger_id)
10539 ,p_level => C_LEVEL_STATEMENT
10540 ,p_module => l_log_module);
10541 END IF;
10542
10543 l_request_id := fnd_request.submit_request
10544 ( application => 'XLA'
10545 ,program => 'XLABAOPE'
10546 ,description => 'Open Period Balances'
10547 ,argument1 => l_ledger_id
10548 );
10549
10550 IF (C_LEVEL_STATEMENT>= g_log_level) THEN
10551 trace
10552 (p_msg => 'l_request_id = '||l_request_id
10553 ,p_level => C_LEVEL_STATEMENT
10554 ,p_module => l_log_module);
10555 END IF;
10556
10557 IF l_request_id = 0 THEN
10558 xla_exceptions_pkg.raise_message
10559 (p_appli_s_name => 'XLA'
10560 ,p_msg_name => 'XLA_REP_TECHNICAL_ERROR'
10561 ,p_token_1 => 'APPLICATION_NAME'
10562 ,p_value_1 => 'SLA');
10563
10564 END IF;
10565
10566 IF (C_LEVEL_PROCEDURE >= g_log_level) THEN
10567 trace
10568 (p_msg => 'END of procedure open_period_event'
10569 ,p_level => C_LEVEL_PROCEDURE
10570 ,p_module => l_log_module);
10571 END IF;
10572
10573 RETURN 'SUCCESS';
10574
10575 EXCEPTION
10576 WHEN OTHERS THEN
10577 RETURN 'ERROR';
10578 END;
10579
10580 BEGIN
10581 g_log_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
10582 g_log_enabled := fnd_log.test
10583 (log_level => g_log_level
10584 ,module => C_DEFAULT_MODULE);
10585
10586 IF NOT g_log_enabled THEN
10587 g_log_level := C_LEVEL_LOG_DISABLED;
10588 END IF;
10589
10590 g_user_id := xla_environment_pkg.g_usr_id;
10591 g_login_id := xla_environment_pkg.g_login_id;
10592 g_date := SYSDATE;
10593 g_prog_appl_id := xla_environment_pkg.g_prog_appl_id;
10594 g_prog_id := xla_environment_pkg.g_prog_id;
10595 g_req_id := NVL(xla_environment_pkg.g_req_id, -1);
10596
10597 g_cached_single_period := FALSE;
10598 END xla_balances_pkg;