DBA Data[Home] [Help]

PACKAGE BODY: APPS.GCS_AGGREGATION_PKG

Source


1 PACKAGE BODY GCS_AGGREGATION_PKG AS
2 /* $Header: gcsaggrb.pls 120.3 2006/02/06 19:34:28 yingliu noship $ */
3 
4   --
5   -- PRIVATE GLOBAL VARIABLES
6   --
7   g_api     VARCHAR2(40) := 'gcs.plsql.GCS_AGGREGATION_PKG';
8 
9   --
10   -- PRIVATE EXCEPTIONS
11   --
12   GCS_AGGR_ENTRY_FAILURE         EXCEPTION;
13 
14   --
15   -- PRIVATE FUNCTIONS
16   --
17 
18   --
19   -- Procedure
20   --   insert_prop_entry_lines
21   -- Purpose
22   --   Given the entry id with the "full" (100%) amount lines, create the
23   --   lines for the proportional calculation entry by multiplying the amounts
24   --   by the ownership percent.
25   -- Notes
26   --
27   PROCEDURE insert_prop_entry_lines(
28     p_prop_entry_id      NUMBER,
29     p_full_entry_id      NUMBER,
30     p_ownership_percent  NUMBER,
31     p_curr_round_factor  NUMBER)
32   IS
33     fn_name               VARCHAR2(30) := 'INSERT_PROP_ENTRY_LINES';
34   BEGIN
35     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
36       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
37                      g_api || '.' || fn_name,
38                      GCS_UTILITY_PKG.g_module_enter || fn_name ||
39                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
40     END IF;
41     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_enter ||
42     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
43 
44     INSERT INTO GCS_ENTRY_LINES gel1
45 	(entry_id, line_type_code,
46 	 company_cost_center_org_id, financial_elem_id, product_id,
47 	 natural_account_id, channel_id, line_item_id, project_id,
48 	 customer_id, intercompany_id, task_id,
49 	 user_dim1_id, user_dim2_id, user_dim3_id, user_dim4_id,
50 	 user_dim5_id, user_dim6_id, user_dim7_id, user_dim8_id,
51 	 user_dim9_id, user_dim10_id,
52 	 xtd_balance_e, ytd_balance_e,
53 	 ptd_debit_balance_e, ptd_credit_balance_e,
54 	 ytd_debit_balance_e, ytd_credit_balance_e,
55 	 creation_date, created_by,
56 	 last_update_date, last_updated_by, last_update_login)
57     SELECT
58 	p_prop_entry_id, line_type_code,
59 	company_cost_center_org_id, financial_elem_id, product_id,
60 	natural_account_id, channel_id, line_item_id, project_id,
61 	customer_id, intercompany_id, task_id,
62 	user_dim1_id, user_dim2_id, user_dim3_id, user_dim4_id,
63 	user_dim5_id, user_dim6_id, user_dim7_id, user_dim8_id,
64 	user_dim9_id, user_dim10_id,
65 	round((xtd_balance_e * p_ownership_percent / 100) /
66 	      p_curr_round_factor) * p_curr_round_factor,
67 	round((ytd_balance_e * p_ownership_percent / 100) /
68 	      p_curr_round_factor) * p_curr_round_factor,
69 	round((ptd_debit_balance_e * p_ownership_percent / 100) /
70 	      p_curr_round_factor) * p_curr_round_factor,
71 	round((ptd_credit_balance_e * p_ownership_percent / 100) /
72 	      p_curr_round_factor) * p_curr_round_factor,
73 	round((ytd_debit_balance_e * p_ownership_percent / 100) /
74 	      p_curr_round_factor) * p_curr_round_factor,
75 	round((ytd_credit_balance_e * p_ownership_percent / 100) /
76 	      p_curr_round_factor) * p_curr_round_factor,
77 	sysdate, created_by,
78 	sysdate, last_updated_by, last_update_login
79     FROM   GCS_ENTRY_LINES gel2
80     WHERE  gel2.entry_id = p_full_entry_id;
81 
82     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_STATEMENT) THEN
83       FND_LOG.STRING(FND_LOG.LEVEL_STATEMENT,
84                      g_api || '.' || fn_name,
85                      'Inserted ' || to_char(SQL%ROWCOUNT) || ' row(s)');
86     END IF;
87 
88     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
89       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
90                      g_api || '.' || fn_name,
91                      GCS_UTILITY_PKG.g_module_success || fn_name ||
92                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
93     END IF;
94     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_success ||
95     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
96 
97   EXCEPTION
98     WHEN OTHERS THEN
99       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_UNEXPECTED) THEN
100         FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,
101                        g_api || '.' || fn_name,
102                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
103                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
104       END IF;
105       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
106       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
107       RAISE;
108   END insert_prop_entry_lines;
109 
110   --
111   -- Procedure
112   --   maintain_entries
113   -- Purpose
114   --   Create the aggregation entries and lines.
115   -- Notes
116   --
117   PROCEDURE maintain_entries(
118     p_errbuf             OUT NOCOPY VARCHAR2,
119     p_retcode            OUT NOCOPY VARCHAR2,
120     p_entry_id           OUT NOCOPY NUMBER,
121     p_stat_entry_id      OUT NOCOPY NUMBER,
122     p_prop_entry_id      OUT NOCOPY NUMBER,
123     p_stat_prop_entry_id OUT NOCOPY NUMBER,
124     p_consolidation_type VARCHAR2,
125     p_ownership_percent  NUMBER,
126     p_curr_round_factor  NUMBER,
127     p_stat_round_factor  NUMBER,
128     p_stat_required      VARCHAR2,
129     p_hierarchy_id       NUMBER,
130     p_relationship_id    NUMBER,
131     p_cons_entity_id     NUMBER,
132     p_cons_entity_curr   VARCHAR2,
133     p_cal_period_id      NUMBER,
134     p_period_end_date    DATE,
135     p_balance_type_code  VARCHAR2,
136     p_dataset_code       VARCHAR2)
137   IS
138     fn_name               VARCHAR2(30) := 'MAINTAIN_ENTRIES';
139 
140     l_category_code       VARCHAR2(30);
141   BEGIN
142     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
143       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
144                      g_api || '.' || fn_name,
145                      GCS_UTILITY_PKG.g_module_enter || fn_name ||
146                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
147     END IF;
148     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_enter ||
149     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
150 
151     -- Prepare all entry headers needed
152 
153     -- Decide the category for the full entries
154     IF (p_consolidation_type = 'PARTIAL') THEN
155       l_category_code := 'PROPORTIONAL';
156     ELSE
157       l_category_code := 'AGGREGATION';
158     END IF;
159 
160     GCS_ENTRY_PKG.create_entry_header(
161       p_errbuf, p_retcode,
162       p_entry_id,
163       p_hierarchy_id,
164       p_cons_entity_id,
165       p_cal_period_id,
166       p_cal_period_id,
167       'AUTOMATIC',
168       p_balance_type_code,
169       p_cons_entity_curr,
170       'SINGLE_RUN_FOR_PERIOD',
171       l_category_code);
172 
173     IF (p_retcode = fnd_api.g_ret_sts_unexp_error) THEN
174       RAISE GCS_AGGR_ENTRY_FAILURE;
175     END IF;
176 
177     IF (p_stat_required = 'Y') THEN
178       GCS_ENTRY_PKG.create_entry_header(
179         p_errbuf, p_retcode,
180         p_stat_entry_id,
181         p_hierarchy_id,
182         p_cons_entity_id,
183         p_cal_period_id,
184         p_cal_period_id,
185         'AUTOMATIC',
186         p_balance_type_code,
187         'STAT',
188         'SINGLE_RUN_FOR_PERIOD',
189         l_category_code);
190 
191       IF (p_retcode = fnd_api.g_ret_sts_unexp_error) THEN
192         RAISE GCS_AGGR_ENTRY_FAILURE;
193       END IF;
194     END IF;
195 
196     IF (p_consolidation_type = 'PARTIAL') THEN
197       GCS_ENTRY_PKG.create_entry_header(
198         p_errbuf, p_retcode,
199         p_prop_entry_id,
200         p_hierarchy_id,
201         p_cons_entity_id,
202         p_cal_period_id,
203         p_cal_period_id,
204         'AUTOMATIC',
205         p_balance_type_code,
206         p_cons_entity_curr,
207         'SINGLE_RUN_FOR_PERIOD',
208         'AGGREGATION');
209 
210       IF (p_retcode = fnd_api.g_ret_sts_unexp_error) THEN
211         RAISE GCS_AGGR_ENTRY_FAILURE;
212       END IF;
213 
214       IF (p_stat_required = 'Y') THEN
215         GCS_ENTRY_PKG.create_entry_header(
216           p_errbuf, p_retcode,
217           p_stat_prop_entry_id,
218           p_hierarchy_id,
219           p_cons_entity_id,
220           p_cal_period_id,
221           p_cal_period_id,
222           'AUTOMATIC',
223           p_balance_type_code,
224           'STAT',
225           'SINGLE_RUN_FOR_PERIOD',
226           'AGGREGATION');
227 
228         IF (p_retcode = fnd_api.g_ret_sts_unexp_error) THEN
229           RAISE GCS_AGGR_ENTRY_FAILURE;
230         END IF;
231       END IF;
232     END IF;
233 
234     -- Create the FULL amount lines for both entity's currency and STAT
235     GCS_AGGREGATION_DYNAMIC_PKG.insert_full_entry_lines(
236       p_entry_id,
237       p_stat_entry_id,
238       p_cons_entity_id,
239       p_hierarchy_id,
240       p_relationship_id,
241       p_cal_period_id,
242       p_period_end_date,
243       p_cons_entity_curr,
244       p_balance_type_code,
245       p_dataset_code);
246 
247     -- Create proportional lines if necessary
248     IF (p_consolidation_type = 'PARTIAL') THEN
249       insert_prop_entry_lines(p_prop_entry_id,
250                               p_entry_id,
251                               p_ownership_percent,
252                               p_curr_round_factor);
253 
254       IF (p_stat_entry_id IS NOT NULL) THEN
255         insert_prop_entry_lines(p_stat_prop_entry_id,
256                                 p_stat_entry_id,
257                                 p_ownership_percent,
258                                 p_stat_round_factor);
259       END IF;
260     END IF;
261 
262     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
263       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
264                      g_api || '.' || fn_name,
265                      GCS_UTILITY_PKG.g_module_success || fn_name ||
266                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
267     END IF;
268     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_success ||
269     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
270 
271   EXCEPTION
272     WHEN GCS_AGGR_ENTRY_FAILURE THEN
273       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_EXCEPTION) THEN
274         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
275                        g_api || '.' || fn_name,
276                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
277                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
278       END IF;
279       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
280       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
281       RAISE GCS_AGGR_ENTRY_FAILURE;
282     WHEN OTHERS THEN
283       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_UNEXPECTED) THEN
284         FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,
285                        g_api || '.' || fn_name,
286                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
287                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
288       END IF;
289       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
290       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
291       RAISE;
292   END maintain_entries;
293 
294 
295   --
296   -- PUBLIC FUNCTIONS
297   --
298 
299   PROCEDURE Aggregate(
300     p_errbuf            OUT NOCOPY VARCHAR2,
301     p_retcode           OUT NOCOPY VARCHAR2,
302     p_run_detail_id     NUMBER,
303     p_hierarchy_id      NUMBER,
304     p_relationship_id   NUMBER,
305     p_cons_entity_id    NUMBER,
306     p_cal_period_id     NUMBER,
307     p_period_end_date   DATE,
308     p_balance_type_code VARCHAR2,
309     p_stat_required     VARCHAR2,
310     p_hier_dataset_code   NUMBER)
311   IS
312     fn_name               VARCHAR2(30) := 'AGGREGATE';
313 
314     l_cons_entity_curr    VARCHAR2(30);
315     l_consolidation_type  VARCHAR2(30);
316     l_ownership_percent   NUMBER;
317 
318     l_entry_id            NUMBER;
319     l_prop_entry_id       NUMBER;
320     l_stat_entry_id       NUMBER;
321     l_stat_prop_entry_id  NUMBER;
322 
323     l_curr_round_factor   NUMBER;
324     l_stat_round_factor   NUMBER;
325   BEGIN
326     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
327       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
328                      g_api || '.' || fn_name,
329                      GCS_UTILITY_PKG.g_module_enter || fn_name ||
330                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
331 
332       -- parameters passed in
333       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
334                      g_api || '.' || fn_name,
335                      'p_run_detail_id = ' || to_char(p_run_detail_id));
336       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
337                      g_api || '.' || fn_name,
338                      'p_hierarchy_id = ' || to_char(p_hierarchy_id));
339       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
340                      g_api || '.' || fn_name,
341                      'p_relationship_id = ' || to_char(p_relationship_id));
342       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
343                      g_api || '.' || fn_name,
344                      'p_cons_entity_id = ' || to_char(p_cons_entity_id));
345       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
346                      g_api || '.' || fn_name,
347                      'p_cal_period_id = ' || to_char(p_cal_period_id));
348       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
349                      g_api || '.' || fn_name,
350                      'p_period_end_date = ' || to_char(p_period_end_date,
351                                                        'DD-MON-YYYY'));
352       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
353                      g_api || '.' || fn_name,
354                      'p_balance_type_code = ' || p_balance_type_code);
355       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
356                      g_api || '.' || fn_name,
357                      'p_stat_required = ' || p_stat_required);
358     END IF;
359     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_enter ||
360     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
361 
362     -- In case of an error, roll back to this point
363     SAVEPOINT gcs_aggregation_start;
364 
365     -- ***** Setup *****
366     g_fnd_user_id := fnd_global.user_id;
367     g_fnd_login_id := fnd_global.login_id;
368 
369     -- get the consolidation entity's currency
370     SELECT currency_code
371     INTO   l_cons_entity_curr
372     FROM   GCS_ENTITY_CONS_ATTRS
373     WHERE  hierarchy_id = p_hierarchy_id
374     AND    entity_id = p_cons_entity_id;
375 
376     -- get the consolidation type and ownership percent
377     SELECT nvl(min(gt.consolidation_type_code), 'FULL'),
378            min(gcr.ownership_percent)
379     INTO   l_consolidation_type, l_ownership_percent
380     FROM   GCS_CONS_RELATIONSHIPS gcr,
381            GCS_TREATMENTS_B gt
382     WHERE  gcr.cons_relationship_id = p_relationship_id
383     AND    gcr.actual_ownership_flag = 'Y'
384     AND    gt.treatment_id = gcr.treatment_id;
385 
386     IF (l_consolidation_type = 'PARTIAL') THEN
387       -- get minimum accountable unit for the currency
388       SELECT nvl(minimum_accountable_unit, power(10, -precision))
389       INTO   l_curr_round_factor
390       FROM   FND_CURRENCIES
391       WHERE  currency_code = l_cons_entity_curr;
392 
393       IF (p_stat_required = 'Y') THEN
394         -- get minimum accountable unit for STAT
395         SELECT nvl(minimum_accountable_unit, power(10, -precision))
396         INTO   l_stat_round_factor
397         FROM   FND_CURRENCIES
398         WHERE  currency_code = 'STAT';
399       END IF;
400     END IF;
401 
402     -- ***** Main Process *****
403     maintain_entries(
404       p_errbuf,
405       p_retcode,
406       l_entry_id ,
407       l_stat_entry_id,
408       l_prop_entry_id,
409       l_stat_prop_entry_id,
410       l_consolidation_type,
411       l_ownership_percent,
412       l_curr_round_factor,
413       l_stat_round_factor,
414       p_stat_required,
415       p_hierarchy_id,
416       p_relationship_id,
417       p_cons_entity_id,
418       l_cons_entity_curr,
419       p_cal_period_id,
420       p_period_end_date,
421       p_balance_type_code,
422       p_hier_dataset_code);
423 
424     -- Update run details with the new entry id's
425     IF (l_consolidation_type = 'PARTIAL') THEN
426       GCS_CONS_ENG_RUN_DTLS_PKG.update_entry_headers(p_run_detail_id,
427                                                      l_prop_entry_id,
428                                                      l_stat_prop_entry_id,
429                                                      l_entry_id,
430                                                      l_stat_entry_id);
431 
432     ELSE
433       GCS_CONS_ENG_RUN_DTLS_PKG.update_entry_headers(p_run_detail_id,
434                                                      l_entry_id,
435                                                      l_stat_entry_id);
436     END IF;
437 
438     IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_PROCEDURE) THEN
439       FND_LOG.STRING(FND_LOG.LEVEL_PROCEDURE,
440                      g_api || '.' || fn_name,
441                      GCS_UTILITY_PKG.g_module_success || fn_name ||
442                      to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
443     END IF;
444     --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_success ||
445     --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
446 
447   EXCEPTION
448     WHEN GCS_AGGR_ENTRY_FAILURE THEN
449       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_EXCEPTION) THEN
450         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
451                        g_api || '.' || fn_name,
452                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
453                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
454       END IF;
455       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
456       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
457 
458       ROLLBACK TO gcs_aggregation_start;
459       -- p_errbuf and p_retcode are set by GCS_ENTRY_PKG.create_entry_header()
460     WHEN NO_DATA_FOUND THEN
461       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_EXCEPTION) THEN
462         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
463                        g_api || '.' || fn_name,
464                        'Consolidation Entity Curr = ' || l_cons_entity_curr);
465         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
466                        g_api || '.' || fn_name,
467                        'Dataset Code = ' || to_char(p_hier_dataset_code));
468         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
469                        g_api || '.' || fn_name,
470                        'Consolidation Type = ' || l_consolidation_type);
471         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
472                        g_api || '.' || fn_name,
473                        'Ownership Percent = ' || to_char(l_ownership_percent));
474         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
475                        g_api || '.' || fn_name,
476                        'Currency MAU = ' || to_char(l_curr_round_factor));
477         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
478                        g_api || '.' || fn_name,
479                        'STAT MAU = ' || to_char(l_stat_round_factor));
480 
481         FND_LOG.STRING(FND_LOG.LEVEL_EXCEPTION,
482                        g_api || '.' || fn_name,
483                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
484                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
485       END IF;
486       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
487       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
488 
489       ROLLBACK TO gcs_aggregation_start;
490       p_errbuf := 'GCS_AGGR_NO_DATA_FOUND';
491       p_retcode := '2';
492     WHEN OTHERS THEN
493       IF (FND_LOG.G_CURRENT_RUNTIME_LEVEL <= FND_LOG.LEVEL_UNEXPECTED) THEN
494         FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,
495                        g_api || '.' || fn_name,
496                        SUBSTR(SQLERRM, 1, 4000));
497         FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,
498                        g_api || '.' || fn_name,
499                        GCS_UTILITY_PKG.g_module_failure || fn_name ||
500                        to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
501       END IF;
502       --FND_FILE.PUT_LINE(FND_FILE.LOG, GCS_UTILITY_PKG.g_module_failure ||
503       --                  fn_name || to_char(sysdate, ' DD-MON-YYYY HH:MI:SS'));
504 
505       ROLLBACK TO gcs_aggregation_start;
506       p_errbuf := 'GCS_AGGR_UNHANDLED_EXCEPTION';
507       p_retcode := '2';
508   END Aggregate;
509 
510 END GCS_AGGREGATION_PKG;