1 PACKAGE BODY fii_gl_cumul_rev_trend_pkg AS
2 /* $Header: FIIGLCGB.pls 120.3 2006/03/15 15:11:42 hpoddar noship $ */
3
4 PROCEDURE get_cumul_rev (p_page_parameter_tbl in BIS_PMV_PAGE_PARAMETER_TBL,
5 cumul_rev_sql OUT NOCOPY VARCHAR2,
6 cumul_rev_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
7 IS
8
9 sqlstmt VARCHAR2(32000);
10 sqlstmt2 VARCHAR2(32000);
11 sqlstmt3 VARCHAR2(32000);
12 l_adjust1 VARCHAR2(100);
13 l_adjust2 VARCHAR2(100);
14 l_forecast VARCHAR(32000); -- its the cumulated forecast value for a particular period, for value of profile option FII_FB_STEP equal to 'N'
15 l_budget VARCHAR(32000) := 1; -- similarly, its the cumulated budget value for a particular period
16 l_time_id VARCHAR2(100);
17 l_time_id2 VARCHAR2(100);
18 l_period_id VARCHAR2(100);
19 l_period_id2 VARCHAR2(100);
20 l_table_name VARCHAR2(100);
21 l_budget_time_id VARCHAR2(100);
22 l_budget_period_id VARCHAR2(100);
23 l_budget_table_name VARCHAR2(100);
24 l_if_budget VARCHAR2(1) := 'N'; -- used to specify that comparison type is budget
25 l_if_budget_zero VARCHAR2(1) := 'N'; -- used to return 0 budget for period type week
26 l_cond VARCHAR2(240); -- it is a part of where clause,
27 -- through which we get the start date for each month present in the quarter or year chosen
28 l_budget_forecast_profile VARCHAR2(1); -- flag used to indicate the value of profile option FII_FB_STEP
29 l_dummy_mgr_id VARCHAR2(100);
30
31 BEGIN
32
33 fii_gl_util_pkg.reset_globals;
34 fii_gl_util_pkg.get_parameters(p_page_parameter_tbl);
35 fii_gl_util_pkg.get_bitmasks;
36 fii_gl_util_pkg.g_fin_type := 'R'; -- since it is a revenue report, we always put category as 'revenue'
37 fii_gl_util_pkg.get_mgr_pmv_sql;
38 fii_gl_util_pkg.get_cat_pmv_sql;
39
40 l_budget_forecast_profile := NVL(FND_PROFILE.Value( 'FII_FB_STEP'),'N');
41
42 IF fii_gl_util_pkg.g_time_comp = 'BUDGET' THEN
43 l_if_budget := 'Y';
44 END IF;
45
46 CASE fii_gl_util_pkg.g_page_period_type
47
48 WHEN 'FII_TIME_WEEK' THEN l_cond := 'NULL';
49
50 ELSE
51 l_cond := '(SELECT start_date FROM fii_time_ent_period WHERE ent_period_id BETWEEN :CURR_START_PERIOD_ID AND :CURR_END_PERIOD_ID)';
52 END CASE;
53
54 -- since the sql for getting forecast is generated dynamically, the following CASE statement assigns
55 -- values to different variables used to store the table-names, time-ids etc for each period.
56 -- The assignment depends upon the level at which forecast has been loaded.
57
58 CASE fii_gl_util_pkg.g_forecast_period_type
59
60 WHEN 0 THEN l_time_id := 'g.week_id';
61 l_time_id2 := 'g.week_id';
62 l_period_id := 0;
63 l_period_id2 := 0;
64 l_table_name := 'fii_time_week';
65 WHEN 256 THEN l_time_id := 'g.ent_period_id' ;
66 l_time_id2 := 'g.ent_period_id';
67 l_period_id := 32;
68 l_period_id2:= 32;
69 l_table_name := 'fii_time_ent_period';
70 WHEN 512 THEN l_time_id := 'g.ent_qtr_id';
71 l_time_id2 := 'g.ent_period_id';
72 l_period_id := 64;
73 l_period_id2:= 32;
74 l_table_name := 'fii_time_ent_qtr';
75 WHEN 128 THEN l_time_id := 'g.ent_year_id';
76 l_time_id2 := 'g.ent_qtr_id';
77 l_period_id := 128;
78 l_period_id2:= 64;
79 l_table_name := 'fii_time_ent_year';
80 END CASE;
81
82 /* sqlstmt2 gives us a constant value for forecast column, which is same for all the rows, when the profile option is set to display forecast as a single horizontal line */
83
84 sqlstmt2 := '
85 (SELECT SUM(DECODE(f.forecast_g,0,NULL,f.forecast_g))
86 FROM '||l_table_name||' g
87 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
88 WHERE f.time_id = '||l_time_id||'
89 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||'
90 and to_date(:ASOF_DATE,''DD-MM-YYYY'') between g.start_date and g.end_date
91 and f.period_type_id = '||l_period_id||'
92 )';
93
94
95
96
97 CASE fii_gl_util_pkg.g_page_period_type
98
99 WHEN 'FII_TIME_WEEK' THEN l_adjust1 := '1';
100 l_adjust2 := '1';
101 l_forecast := 'NULL';
102 l_if_budget_zero := 'Y';
103 fii_gl_util_pkg.g_viewby_type := 'TIME+FII_TIME_DAY'; /* Done for bug 3449775 */
104 WHEN 'FII_TIME_ENT_PERIOD' THEN l_adjust1 := '1';
105 l_adjust2 := '1';
106 l_forecast := sqlstmt2;
107 fii_gl_util_pkg.g_viewby_type := 'TIME+FII_TIME_DAY';
108 WHEN 'FII_TIME_ENT_QTR' THEN l_adjust1 := 'to_date(:P_CURR_START,''DD-MM-YYYY'')-to_date(:P_CURR_END,''DD-MM-YYYY'')';
109 l_adjust2 := 'to_date(:P_PRIOR_START,''DD-MM-YYYY'')-to_date(:P_PRIOR_END,''DD-MM-YYYY'')';
110 l_forecast := sqlstmt2;
111 fii_gl_util_pkg.g_viewby_type := 'TIME+FII_TIME_DAY';
112 WHEN 'FII_TIME_ENT_YEAR' THEN l_adjust1 := NULL;
113 l_adjust2 := NULL;
114 l_forecast := sqlstmt2;
115 fii_gl_util_pkg.g_viewby_type := 'TIME+FII_TIME_ENT_PERIOD';
116 END CASE;
117
118 -- similar to forecast, since the sql for budget is also generated dynamically,
119 -- the folowing CASE statement assigns values to different variables used to compute the budget value.
120 -- The assignment depends upon the level at which budget has been loaded.
121
122 CASE fii_gl_util_pkg.g_time_comp
123
124 WHEN 'BUDGET' THEN
125
126 CASE fii_gl_util_pkg.g_budget_period_type
127
128 WHEN 0 THEN l_budget_time_id := 'g.week_id';
129 l_budget_period_id := 0;
130 l_budget_table_name := 'fii_time_week';
131 WHEN 256 THEN l_budget_time_id := 'g.ent_period_id' ;
132 l_budget_period_id := 32;
133 l_budget_table_name := 'fii_time_ent_period';
134 WHEN 512 THEN l_budget_time_id := 'g.ent_qtr_id';
135 l_budget_period_id := 64;
136 l_budget_table_name := 'fii_time_ent_qtr';
137 WHEN 128 THEN l_budget_time_id := 'g.ent_year_id';
138 l_budget_period_id := 128;
139 l_budget_table_name := 'fii_time_ent_year';
140 END CASE;
141
142 /* sqlstmt3 gives us a constant value for budget column, when the comparison type is budget and the profile option is set to display budget as a single horizontal line*/
143
144 sqlstmt3 := '
145 (SELECT SUM(DECODE(f.budget_g,0,to_number(NULL),f.budget_g))
146 FROM '||l_budget_table_name||' g
147 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
148 WHERE f.time_id = '||l_budget_time_id||'
149 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
150 to_date(:ASOF_DATE,''DD-MM-YYYY'') between g.start_date and g.end_date and
151 f.period_type_id = '||l_budget_period_id||'
152 )';
153
154 CASE fii_gl_util_pkg.g_page_period_type
155
156 WHEN 'FII_TIME_ENT_PERIOD' THEN l_budget := sqlstmt3;
157 WHEN 'FII_TIME_ENT_QTR' THEN l_budget := sqlstmt3;
158 WHEN 'FII_TIME_ENT_YEAR' THEN l_budget := sqlstmt3;
159 ELSE l_budget := 'NULL';
160
161 END CASE;
162 ELSE NULL;
163
164 END CASE;
165
166 IF fii_gl_util_pkg.g_mgr_id = -99999 THEN l_dummy_mgr_id := '-99999';
167 ELSE l_dummy_mgr_id := ' &HRI_PERSON+HRI_PER_USRDR_H';
168 END IF;
169
170 /*-------------------------------------------------
171 FII_PRIOR_TD_G = Graph column for FII_PRIOR_TD |
172 FII_CURRENT_TD = Curent Period Revenue |
173 FII_PRIOR_TD = Prior Period Revenue |
174 FII_FORECAST = Forecast |
175 ------------------------------------------------*/
176
177
178 /*
179 For period types week, month and quarter, when profile option is set to display budget as a single horizontal line, then, first inner sql gives current period revenue, next inner sql gives the prior period revenue or budget
180 else, if forecast and budget are to be displayed in the cumulative format, then, first inner sql gives current period revenue, next inner sql gives the prior period revenue or budget while the last inner sql gives the forecast
181
182 For period type year, when profile option is set to display budget as a single horizontal line, first inner sql gives the prior year revenue, second inner sql gives the revenue or budget of all
183 completed months in the current year while the third inner sql gives NULL revenue for the months ranging
184 from current month to the end of current year
185 else, if forecast and budget are to be displayed in the cumulative format, then, first inner sql gives the prior year revenue, second inner sql gives the revenue or budget of all
186 completed months in the current year, third inner sql gives NULL revenue for the months ranging
187 from current month to the end of current year while fourth inner sql gives forecast
188
189 for more detailed functionality, please refer DLD
190 At any point of time, only 1 out of 6 SQLs is executed. The flow of the code is as follows :
191
192 IF profile option = 'Y' THEN
193 IF comparison type ='BUDGET' THEN
194 IF period type = 'YEAR' THEN 1st SQL
195 ELSE 2nd SQL
196 END IF;
197 ELSIF period type = 'YEAR' THEN 3rd sql
198 ELSE 4th SQL
199 END IF;
200 ELSIF period type = 'YEAR THEN 5th sql
201 ELSE 6th sql
202 END IF;
203
204 */
205
206 CASE l_budget_forecast_profile
207
208 WHEN 'Y' THEN CASE fii_gl_util_pkg.g_time_comp
209
210 WHEN 'BUDGET' THEN
211
212 CASE fii_gl_util_pkg.g_page_period_type
213
214 WHEN 'FII_TIME_ENT_YEAR' THEN
215
216 sqlstmt := '
217 SELECT month_name VIEWBY,
218 SUM(FII_CURRENT_TD) FII_CURRENT_TD,
219 SUM(SUM(DECODE(FII_PRIOR_TD,-99999,NULL,FII_PRIOR_TD))) OVER (ORDER BY FII_EFFECTIVE_NUM ROWS UNBOUNDED PRECEDING) FII_PRIOR_TD,
220 SUM(SUM(DECODE(FII_FORECAST,-99999,NULL,FII_FORECAST))) OVER (ORDER BY FII_EFFECTIVE_NUM ROWS UNBOUNDED PRECEDING) FII_FORECAST
221 FROM (
222 SELECT FII_EFFECTIVE_NUM,
223 MAX(month_name) month_name ,
224 SUM(CURR) FII_CURRENT_TD,
225 DECODE(PREVIOUS,-99999,NULL,PREVIOUS ) FII_PRIOR_TD,
226 DECODE(CY_FOR,-99999,NULL,CY_FOR ) FII_FORECAST
227 FROM (
228
229 SELECT per.sequence FII_EFFECTIVE_NUM,
230 per.name month_name,
231 per.ent_period_id id,
232 NULL CURR,
233
234 (CASE WHEN per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') THEN
235 CASE f.budget_g
236 WHEN 0 THEN -99999 /* -99999 used to show NULL when budget
237 value in the DB is equal to 0 */
238 ELSE f.budget_g
239 END
240 ELSE NULL
241 END) PREVIOUS,
242
243 NULL CY_FOR
244 FROM fii_time_ent_period per
245 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
246
247 WHERE per.ent_period_id = f.time_id
248 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
249 per.start_date >= to_date(:P_PRIOR_START,''DD-MM-YYYY'') and
250 per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') and
251 f.period_type_id = 32
252
253 UNION ALL
254
255 (
256 SELECT per.sequence FII_EFFECTIVE_NUM,
257 per.name month_name,
258 per.ent_period_id id,
259
260 CASE WHEN per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
261 per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'')
262 THEN SUM(f.actual_g) OVER (ORDER BY per.ent_period_id ROWS UNBOUNDED PRECEDING)
263 ELSE to_number(NULL)
264 END CURR,
265 NULL PREVIOUS,
266 NULL CY_FOR
267 FROM fii_time_ent_period per
268 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
269
270 WHERE per.ent_period_id = f.time_id
271 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
272 per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
273 per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'') and
274 f.period_type_id = 32
275
276 UNION ALL
277
278 /* the SELECT statement below makes sure that we always return revenue for all 12 months
279 regardless of whether all the months have data or not */
280
281 SELECT per.sequence FII_EFFECTIVE_NUM,
282 per.name month_name,
283 per.ent_period_id id,
284 CASE WHEN per.start_date >= to_date(:P_TEMP,''DD-MM-YYYY'') THEN to_number(NULL)
285 ELSE 0
286 END CURR,
287 NULL PREVIOUS,
288 NULL CY_FOR
289 FROM fii_time_ent_period per
290 WHERE per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
291 per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'')
292
293 UNION ALL
294
295 SELECT per.sequence FII_EFFECTIVE_NUM,
296 per.name month_name,
297 per.ent_period_id id,
298 NULL CURR,
299 NULL PREVIOUS,
300 (CASE WHEN per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'') THEN
301 CASE f.forecast_g
302 WHEN 0 THEN -99999 /* -99999 used to show NULL when forecast
303 value in the DB is equal to 0 */
304 ELSE f.forecast_g
305 END
306 ELSE NULL
307 END) CY_FOR
308
309 FROM fii_time_ent_period per
310 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
311
312 WHERE per.ent_period_id = f.time_id
313 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
314 per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
315 per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'') and
316 f.period_type_id = 32
317
318
319 )
320 )
321 GROUP BY FII_EFFECTIVE_NUM, PREVIOUS, CY_FOR
322 )
323 GROUP BY FII_EFFECTIVE_NUM, month_name
324 ORDER BY FII_EFFECTIVE_NUM';
325
326 ELSE
327
328 sqlstmt := '
329
330 SELECT VIEWBY,
331 SUM(FII_CURRENT_TD) FII_CURRENT_TD,
332 SUM(FII_PRIOR_TD) FII_PRIOR_TD,
333 SUM(FII_FORECAST) FII_FORECAST
334 FROM (
335 SELECT days VIEWBY,
336 SUM(DECODE(SIGN(report_date - to_date(:ASOF_DATE,''DD-MM-YYYY'')),1,NULL,CY_REV)) FII_CURRENT_TD ,
337 NULL FII_PRIOR_TD,
338 NULL CY_BUD,
339 NULL CY_FOR,
340 NULL FII_FORECAST
341 FROM(
342 SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
343 report_date,
344 NVL(SUM(SUM(f.actual_g)) OVER (ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+ to_number('||l_adjust1||') ROWS UNBOUNDED PRECEDING),0) CY_REV,
345 0 PY_REV
346 FROM fii_time_day g,
347 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
348 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
349 f.manager_id(+) = :MGR_MGR_ID and
350 f.gid (+) = 4 and
351 f.period_type_id (+) = 1
352 '||fii_gl_util_pkg.g_cat_join||')
353 ) f
357 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'),report_date
354 WHERE g.report_date_julian = f.time_id (+) and
355 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
356
358
359 )
360 GROUP BY days
361
362 UNION ALL
363
364 SELECT days VIEWBY,
365 NULL FII_CURRENT_TD,
366 SUM(SUM(DECODE(inline_view.CY_BUD,-99999,NULL,inline_view.CY_BUD))) OVER (ORDER BY days
367 rows unbounded preceding) FII_PRIOR_TD,
368 CY_BUD,
369 NULL CY_FOR,
370 NULL FII_FORECAST
371 FROM
372 ( SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
373 report_date test,
374 CASE WHEN (g.report_date IN '||l_cond||' ) THEN
375 CASE SUM(f.budget_g)
376 WHEN 0 THEN -99999
377 ELSE SUM(f.budget_g)
378 END
379 ELSE NULL
380 END CY_BUD
381
382
383 FROM fii_time_day g,
384 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
385 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
386 f.manager_id(+) =:MGR_MGR_ID and
387 f.gid (+) = 4 and
388 f.period_type_id (+) = '||l_period_id2||'
389 '||fii_gl_util_pkg.g_cat_join||')
390 ) f
391 WHERE '||l_time_id2||' = f.time_id (+) and
392 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
393
394 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'), report_date
395
396 ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||')
397 ) inline_view
398
399 GROUP BY days,CY_BUD
400
401 UNION ALL
402
403 SELECT days VIEWBY,
404 NULL FII_CURRENT_TD,
405 NULL FII_PRIOR_TD,
406 NULL CY_BUD,
407 CY_FOR,
408 SUM(SUM(DECODE(inline_view.CY_FOR,-99999,NULL,inline_view.CY_FOR))) OVER (ORDER BY days
409 ROWS UNBOUNDED PRECEDING) FII_FORECAST
410 FROM
411 ( SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
412 report_date test,
413 CASE WHEN (g.report_date IN '||l_cond||' ) THEN
414 CASE SUM(f.forecast_g)
415 WHEN 0 THEN -99999
416 ELSE SUM(f.forecast_g)
417 END
418 ELSE NULL
419 END CY_FOR
420
421 FROM fii_time_day g,
422 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
423 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
424 f.manager_id(+) =:MGR_MGR_ID and
425 f.gid (+) = 4 and
426 f.period_type_id (+) = '||l_period_id2||'
427 '||fii_gl_util_pkg.g_cat_join||')
428 ) f
429
430 WHERE '||l_time_id2||' = f.time_id (+) and
431 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
432
433 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'), report_date
434
435 ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||')
436 ) inline_view
437
438 GROUP BY days, CY_FOR
439 )
440
441 GROUP BY VIEWBY
442 ORDER BY VIEWBY';
443
444 END CASE;
445
446 ELSE
447
448 CASE fii_gl_util_pkg.g_page_period_type
449
450 WHEN 'FII_TIME_ENT_YEAR' THEN
451
452 sqlstmt := '
453 SELECT VIEWBY,
454 FII_CURRENT_TD,
455 SUM(FII_PRIOR_TD) OVER (ORDER BY FII_EFFECTIVE_NUM ROWS UNBOUNDED PRECEDING) FII_PRIOR_TD,
456 FII_FORECAST
457 FROM (
458 SELECT FII_EFFECTIVE_NUM,
459 month_name VIEWBY,
460 SUM(FII_CURRENT_TD) FII_CURRENT_TD,
461 SUM(FII_PRIOR_TD) FII_PRIOR_TD,
462 SUM(SUM(DECODE(FII_FORECAST,-99999,NULL,FII_FORECAST))) OVER (ORDER BY FII_EFFECTIVE_NUM
463 ROWS UNBOUNDED PRECEDING) FII_FORECAST
464 FROM (
465 SELECT FII_EFFECTIVE_NUM,
466 MAX(month_name) month_name ,
467 SUM(CURR) FII_CURRENT_TD,
468 SUM(PREVIOUS) FII_PRIOR_TD,
469 DECODE(CY_FOR,-99999,NULL,CY_FOR ) FII_FORECAST
470 FROM (
471
472 SELECT per.sequence FII_EFFECTIVE_NUM,
473 per.name month_name,
474 per.ent_period_id id,
475 NULL CURR,
476 (CASE WHEN per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') THEN f.actual_g
477 ELSE to_number(NULL)
478 END) PREVIOUS,
479 NULL CY_FOR
480 FROM fii_time_ent_period per
481 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
482
483 WHERE per.ent_period_id = f.time_id
484 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
485 per.start_date >= to_date(:P_PRIOR_START,''DD-MM-YYYY'') and
486 per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') and
487 f.period_type_id = 32
488
489 UNION ALL
490
491 (
492 SELECT per.sequence FII_EFFECTIVE_NUM,
493 per.name month_name,
494 per.ent_period_id id,
495
496 CASE WHEN per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
497 per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'')
498 THEN SUM(f.actual_g) OVER (ORDER BY per.ent_period_id ROWS UNBOUNDED PRECEDING)
499 ELSE to_number(NULL)
500 END CURR,
504 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
501 NULL PREVIOUS,
502 NULL CY_FOR
503 FROM fii_time_ent_period per
505
506 WHERE per.ent_period_id = f.time_id
507 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
508 per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
509 per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'') and
510 f.period_type_id = 32
511
512 UNION ALL
513
514
515 SELECT per.sequence FII_EFFECTIVE_NUM,
516 per.name month_name,
517 per.ent_period_id id,
518 CASE WHEN per.start_date >= to_date(:P_TEMP,''DD-MM-YYYY'') THEN to_number(NULL)
519 ELSE 0
520 END CURR,
521 NULL PREVIOUS,
522 NULL CY_FOR
523 FROM fii_time_ent_period per
524 WHERE per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
525 per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'')
526
527 UNION ALL
528
529 SELECT per.sequence FII_EFFECTIVE_NUM,
530 per.name month_name,
531 per.ent_period_id id,
532 NULL CURR,
533 NULL PREVIOUS,
534 (CASE WHEN per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'') THEN
535 CASE f.forecast_g
536 WHEN 0 THEN -99999
537 ELSE f.forecast_g
538 END
539 ELSE NULL
540 END) CY_FOR
541
542 FROM fii_time_ent_period per
543 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
544
545 WHERE per.ent_period_id = f.time_id
546 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
547 per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
548 per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'') and
549 f.period_type_id = 32
550
551
552 )
553 )
554 GROUP BY FII_EFFECTIVE_NUM, CY_FOR
555 )
556 GROUP BY FII_EFFECTIVE_NUM, month_name
557 ORDER BY FII_EFFECTIVE_NUM)';
558
559 ELSE
560
561 sqlstmt := '
562
563 SELECT VIEWBY,
564 SUM(FII_CURRENT_TD) FII_CURRENT_TD,
565 SUM(FII_PRIOR_TD) FII_PRIOR_TD,
566 SUM(FII_FORECAST) FII_FORECAST
567 FROM (
568
569 SELECT VIEWBY,
570 SUM(FII_CURRENT_TD) FII_CURRENT_TD,
571 SUM(FII_PRIOR_TD) FII_PRIOR_TD,
572 ( CASE WHEN (CY_FOR = -99999 or CY_FOR = NULL) THEN NULL
573 ELSE SUM(FII_FORECAST)
574 END
575 ) FII_FORECAST
576 FROM (
577 SELECT days VIEWBY,
578 SUM(DECODE(SIGN(report_date - to_date(:ASOF_DATE,''DD-MM-YYYY'')),1,NULL,CY_REV)) FII_CURRENT_TD ,
579 SUM(DECODE(SIGN(report_date - to_date(:P_PRIOR_END,''DD-MM-YYYY'')),1,NULL,PY_REV)) FII_PRIOR_TD,
580 NULL CY_FOR,
581 NULL FII_FORECAST
582 FROM (
583 SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
584 report_date,
585 NVL(SUM(SUM(f.actual_g)) OVER (ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+
586 to_number('||l_adjust1||') ROWS UNBOUNDED PRECEDING),0) CY_REV,
587 0 PY_REV
588 FROM fii_time_day g,
589 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
590 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
591 f.manager_id(+) = :MGR_MGR_ID and
592 f.gid (+) = 4 and
593 f.period_type_id (+) = 1
594 '||fii_gl_util_pkg.g_cat_join||')
595 ) f
596 WHERE g.report_date_julian = f.time_id (+) and
597 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
598
599 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'),report_date
600
601 UNION ALL
602
603 SELECT g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+to_number('||l_adjust2||') days,
604 report_date,
605 to_number(NULL) CY_REV,
606 NVL(SUM(SUM(f.actual_g)) OVER (ORDER BY g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+
607 to_number('||l_adjust2||') ROWS UNBOUNDED PRECEDING),0) PY_REV
608 FROM fii_time_day g,
609 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
610 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
611 f.manager_id(+) = :MGR_MGR_ID and
612 f.gid (+) = 4 and
613 f.period_type_id (+) = 1
614 '||fii_gl_util_pkg.g_cat_join||')
615 ) f
616 WHERE f.time_id (+) = g.report_date_julian and
617 g.report_date_julian between :PRIOR_START_DAY_ID and :PRIOR_END_DAY_ID
618
619 GROUP BY g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+to_number('||l_adjust2||'),report_date
620 )
621 GROUP BY days
622
623 UNION ALL
624
625 SELECT days VIEWBY,
626 NULL FII_CURRENT_TD,
627 NULL FII_PRIOR_TD,
628 CY_FOR,
629 SUM(SUM(DECODE(inline_view.CY_FOR,-99999,NULL,inline_view.CY_FOR))) OVER (ORDER BY days
630 ROWS UNBOUNDED PRECEDING) FII_FORECAST
631 FROM
632 (SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
633 report_date test,
634 CASE WHEN (g.report_date IN '||l_cond||' ) THEN
635 CASE SUM(f.forecast_g)
636 WHEN 0 THEN -99999
637 ELSE SUM(f.forecast_g)
638 END
639 ELSE NULL
640 END CY_FOR
644 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
641
642 FROM fii_time_day g,
643 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
645 f.manager_id(+) =:MGR_MGR_ID and
646 f.gid (+) = 4 and
647 f.period_type_id (+) = '||l_period_id2||'
648 '||fii_gl_util_pkg.g_cat_join||')
649 ) f
650 WHERE
651 '||l_time_id2||' = f.time_id (+) and
652 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
653
654 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'), report_date
655
656 ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||')
657 ) inline_view
658
659 GROUP BY days, CY_FOR
660
661
662 )
663
664 GROUP BY VIEWBY, CY_FOR
665 )
666
667 GROUP BY VIEWBY
668 ORDER BY VIEWBY';
669
670 END CASE;
671
672 END CASE;
673
674
675 ELSE
676 CASE fii_gl_util_pkg.g_page_period_type
677
678 WHEN 'FII_TIME_ENT_YEAR' THEN
679
680 sqlstmt := '
681 SELECT MONTH_NAME VIEWBY ,
682 FII_CURRENT_TD,
683 CASE WHEN '''||l_if_budget||''' = ''Y'' THEN '||l_budget||'
684 ELSE SUM(FII_PRIOR_TD) OVER (ORDER BY FII_EFFECTIVE_NUM ROWS UNBOUNDED PRECEDING)
685 END FII_PRIOR_TD,
686 FII_FORECAST
687 FROM
688
689 (SELECT MAX(month_name) month_name,
690 FII_EFFECTIVE_NUM FII_EFFECTIVE_NUM,
691 SUM(CURR) FII_CURRENT_TD,
692 SUM(PREVIOUS) FII_PRIOR_TD,
693 '||l_forecast||' FII_FORECAST
694 FROM (
695
696 SELECT per.sequence FII_EFFECTIVE_NUM,
697 per.name month_name,
698 per.ent_period_id id,
699 NULL CURR,
700 CASE WHEN '''||fii_gl_util_pkg.g_time_comp||'''=''BUDGET'' THEN '||l_budget||'
701 ELSE
702 (CASE WHEN per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') THEN f.actual_g
703 ELSE to_number(NULL)
704 END)
705 END PREVIOUS
706 FROM fii_time_ent_period per
707 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
708
709 WHERE per.ent_period_id = f.time_id
710 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
711 per.start_date >= to_date(:P_PRIOR_START,''DD-MM-YYYY'') and
712 per.end_date <= to_date(:P_PRIOR_END,''DD-MM-YYYY'') and
713 f.period_type_id = 32
714
715 UNION ALL
716
717 (
718 SELECT per.sequence FII_EFFECTIVE_NUM,
719 per.name month_name,
720 per.ent_period_id id,
721
722 CASE WHEN per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'')
723 THEN SUM(f.actual_g) OVER (ORDER BY per.ent_period_id ROWS UNBOUNDED PRECEDING)
724 ELSE to_number(NULL)
725 END CURR,
726 0 PREVIOUS
727 FROM fii_time_ent_period per
728 '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||fii_gl_util_pkg.g_cat_from_clause||'
729
730 WHERE per.ent_period_id = f.time_id
731 '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||''||fii_gl_util_pkg.g_gid||' and
732 per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
733 per.end_date <= to_date(:ASOF_DATE,''DD-MM-YYYY'') and
734 f.period_type_id = 32
735
736 UNION ALL
737
738
739 SELECT per.sequence FII_EFFECTIVE_NUM,
740 per.name month_name,
741 per.ent_period_id id,
742 CASE WHEN per.start_date >= to_date(:P_TEMP,''DD-MM-YYYY'') THEN to_number(NULL)
743 ELSE 0
744 END CURR,
745 0 PREVIOUS
746 FROM fii_time_ent_period per
747 WHERE per.start_date >= to_date(:P_CURR_START,''DD-MM-YYYY'') and
748 per.end_date <= to_date(:P_CURR_END,''DD-MM-YYYY'')
749
750 )
751 )
752 GROUP BY FII_EFFECTIVE_NUM
753 ORDER BY FII_EFFECTIVE_NUM
754 )';
755
756 ELSE
757
758 sqlstmt := '
759 SELECT days VIEWBY,
760 SUM(DECODE(SIGN(report_date - to_date(:ASOF_DATE,''DD-MM-YYYY'')),1,NULL,CY_REV)) FII_CURRENT_TD ,
761 CASE WHEN '''||fii_gl_util_pkg.g_time_comp||'''=''BUDGET'' THEN '||l_budget||'
762 ELSE SUM(DECODE(SIGN(report_date - to_date(:P_PRIOR_END,''DD-MM-YYYY'')),1,NULL,PY_REV))
763 END FII_PRIOR_TD,
764 '||l_forecast||' FII_FORECAST
765 FROM(
766 SELECT g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') days,
767 report_date,
768 NVL(SUM(SUM(f.actual_g)) OVER (ORDER BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||') ROWS UNBOUNDED PRECEDING),0) CY_REV,
769 0 PY_REV
770 FROM fii_time_day g,
771 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
772 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
773 f.manager_id(+) = :MGR_MGR_ID and
774 f.gid (+) = 4 and
775 f.period_type_id (+) = 1
776 '||fii_gl_util_pkg.g_cat_join||')
777 ) f
778 WHERE g.report_date_julian = f.time_id (+) and
779 g.report_date_julian between :CURR_START_DAY_ID and :CURR_END_DAY_ID
780
781 GROUP BY g.report_date-to_date(:P_CURR_START,''DD-MM-YYYY'')+to_number('||l_adjust1||'),report_date
782
783 UNION ALL
784
785 SELECT g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+to_number('||l_adjust2||') days,
786 report_date,
787 to_number(NULL) CY_REV,
788 NVL(SUM(SUM(f.actual_g)) OVER (ORDER BY g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+to_number('||l_adjust2||') ROWS UNBOUNDED PRECEDING),0) PY_REV
789 FROM fii_time_day g,
790 ( SELECT * FROM FII_GL_MGMT_SUM_V'||fii_gl_util_pkg.g_global_curr_view||' f
791 WHERE ( 1=1 and f.person_id(+) = '||l_dummy_mgr_id||' and
792 f.manager_id(+) = :MGR_MGR_ID and
793 f.gid (+) = 4 and
794 f.period_type_id (+) = 1
795 '||fii_gl_util_pkg.g_cat_join||')
796 ) f
797 WHERE g.report_date_julian = f.time_id (+) and
798 g.report_date_julian between :PRIOR_START_DAY_ID and :PRIOR_END_DAY_ID
799
800 GROUP BY g.report_date-to_date(:P_PRIOR_START,''DD-MM-YYYY'')+to_number('||l_adjust2||'),report_date
801 )
802 GROUP BY days
803 ORDER BY days';
804
805 END CASE;
806
807 END CASE;
808
809 fii_gl_util_pkg.bind_variable(p_sqlstmt=>sqlstmt,
810 p_page_parameter_tbl=>p_page_parameter_tbl,
811 p_sql_output=>cumul_rev_sql,
812 p_bind_output_table=>cumul_rev_output);
813 END get_cumul_rev;
814
815 END fii_gl_cumul_rev_trend_pkg;
816