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