DBA Data[Home] [Help]

PACKAGE BODY: APPS.FII_GL_PROFIT_AND_LOSS

Source


1 PACKAGE BODY FII_GL_PROFIT_AND_LOSS  AS
2 /* $Header: FIIGLPLB.pls 120.43 2006/03/27 12:13:50 hpoddar noship $ */
3 
4 
5 
6 PROCEDURE GET_OPER_PROFIT1 (p_page_parameter_tbl in BIS_PMV_PAGE_PARAMETER_TBL,
7 oper_profit_sql out NOCOPY VARCHAR2,
8 oper_profit_output out NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
9  IS
10   oper_profit_rec BIS_QUERY_ATTRIBUTES;
11   sqlstmt                 VARCHAR2(32000);
12   comp_amt		  VARCHAR2(500);
13 
14 BEGIN
15     fii_gl_util_pkg.reset_globals;
16 	fii_gl_util_pkg.get_parameters(p_page_parameter_tbl);
17 	fii_gl_util_pkg.get_bitmasks;
18 	fii_gl_util_pkg.g_fin_type := 'OM';
19 	fii_gl_util_pkg.g_view_by := 'FINANCIAL ITEM+GL_FII_FIN_ITEM';
20 	fii_gl_util_pkg.get_viewby_sql;
21 	fii_gl_util_pkg.get_mgr_pmv_sql;
22 	fii_gl_util_pkg.get_cat_pmv_sql;
23 
24 
25       IF ('||fii_gl_util_pkg.g_time_comp||' = 'BUDGET') THEN
26 
27 		comp_amt := 'SUM(case when cal.report_date = &BIS_CURRENT_ASOF_DATE
28                                   and bitand(cal.record_type_id, :BUDGET_PERIOD_TYPE) = cal.record_type_id
29                                   then f.budget_g else 0 end) prior_amt';
30       ELSE
31 
32 		comp_amt := 'SUM(case when cal.report_date = &BIS_PREVIOUS_ASOF_DATE
33                                   and bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
34                                   then f.actual_g else 0 end) prior_amt';
35       END IF;
36 
37              sqlstmt := '
38              SELECT  decode(viewbytype, ''CGS'', :COG_MSG, ''OE'', :EXP_MSG, ''R'', :REV_MSG,viewby) VIEWBY,
39                      sum(decode(viewbytype, ''CGS'',grand_total, curr_amt)) FII_MEASURE1,
40                      sum(decode(viewbytype, ''CGS'',prior_grand_total, prior_amt)) FII_MEASURE2
41                      from
42                      (select oper.viewby, cat.fin_category_id viewby_id, cat.fin_cat_type_code viewbytype, oper.curr_amt, oper.prior_amt,
43                       sum(case when cat.fin_cat_type_code =''R'' then oper.curr_amt else oper.curr_amt*(-1) end) over () grand_total,
44                       sum(case when cat.fin_cat_type_code=''R'' then oper.prior_amt else oper.prior_amt*(-1) end) over () prior_grand_total
45                       from
46                              (SELECT  /*+ ordered (cal, f) */ '||fii_gl_util_pkg.g_viewby_value||' viewby,
47 			      tl.flex_value_id viewby_id,
48                               SUM(case when cal.report_date = &BIS_CURRENT_ASOF_DATE
49                                   and bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
50                                   then f.actual_g else 0 end) curr_amt,
51 
52                               '||comp_amt||'
53 
54                               FROM  FII_TIME_RPT_STRUCT      cal
55 				    '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||',' ||fii_gl_util_pkg.g_viewby_from_clause||'
56                               WHERE f.time_id = cal.time_id
57 			      '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||fii_gl_util_pkg.g_gid||'
58                               AND   f.period_type_id = cal.period_type_id
59 			      AND   (tl.flex_value_id = '||fii_gl_util_pkg.g_viewby_id||' OR
60 				     tl.flex_value_id = f.parent_fin_category_id)
61 			      AND   tl.language = '''||userenv('LANG')||'''
62                               AND   BITAND(cal.record_type_id, :WHERE_PERIOD_TYPE)= cal.record_type_id
63                               AND   cal.report_date in (&BIS_CURRENT_ASOF_DATE, &BIS_PREVIOUS_ASOF_DATE)
64                               GROUP BY '||fii_gl_util_pkg.g_viewby_value||', tl.flex_value_id
65                               order by '||fii_gl_util_pkg.g_viewby_value||' desc) oper,
66                                        (select fin_category_id, fin_cat_type_code from fii_fin_cat_type_assgns
67 					where top_node_flag = ''Y'' and fin_cat_type_code in (''R'', ''OE'', ''CGS'')) cat
68                      where oper.viewby_id (+)= cat.fin_category_id)
69 		     group by decode(viewbytype, ''CGS'', :COG_MSG, ''OE'', :EXP_MSG, ''R'', :REV_MSG,viewby)';
70 
71 	fii_gl_util_pkg.bind_variable(sqlstmt, p_page_parameter_tbl, oper_profit_sql, oper_profit_output);
72 
73 END get_oper_profit1;
74 
75 PROCEDURE GET_OPER_PROFIT (p_page_parameter_tbl in BIS_PMV_PAGE_PARAMETER_TBL,
76 oper_profit_sql out NOCOPY VARCHAR2,
77 oper_profit_output out NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
78  IS
79   oper_profit_rec BIS_QUERY_ATTRIBUTES;
80   sqlstmt                 VARCHAR2(32000);
81   l_prior_or_budget1      VARCHAR2(1000);
82   l_prior_or_budget2      VARCHAR2(1000);
83   l_prior_or_budget3      VARCHAR2(4000);
84 
85 BEGIN
86     fii_gl_util_pkg.reset_globals;
87 	fii_gl_util_pkg.get_parameters(p_page_parameter_tbl);
88 	fii_gl_util_pkg.get_bitmasks;
89 	fii_gl_util_pkg.g_fin_type := 'OM';
90 	fii_gl_util_pkg.g_view_by := 'HRI_PERSON+HRI_PER_USRDR_H';
91 	fii_gl_util_pkg.get_viewby_sql;
92 	fii_gl_util_pkg.get_mgr_pmv_sql;
93 	fii_gl_util_pkg.get_cat_pmv_sql;
94 
95   -- when budget comparison type is selected, budget amount is used to calculate the change column
96   -- in the KPI portlet; when year/year or sequential comparison type is selected, prior actual
97   -- amount is used to calculate the change column in the KPI portlet
98   IF (fii_gl_util_pkg.g_time_comp = 'BUDGET') THEN
99         l_prior_or_budget1 :='NVL(sum(CY_BUDGET_REV), 0) 		FII_MEASURE2,
100 			      SUM(NVL(sum(CY_BUDGET_REV), 0)) OVER () 		FII_GRAND_TOTAL2,';
101 
102         l_prior_or_budget2 :='NVL(sum(CY_BUDGET_EXP), 0)		FII_MEASURE4,
103 			      SUM(NVL(sum(CY_BUDGET_EXP), 0)) OVER ()		FII_GRAND_TOTAL4,';
104 
105         l_prior_or_budget3 :='NULL		FII_MEASURE13,
106 			      (sum(NVL(sum(CY_BUDGET_REV),0)) over() - (sum(NVL(sum(CY_BUDGET_EXP),0)) over() + sum(NVL(sum(CY_BUDGET_CGS),0)) over() )) /
107              		NULLIF(sum(sum(CY_BUDGET_REV)) over(),0)*100    FII_MEASURE10,
108 	NVL(sum(CY_BUDGET_REV), 0) - (NVL(sum(CY_BUDGET_EXP), 0) + NVL(sum(CY_BUDGET_CGS), 0))		FII_MEASURE6,
109 	SUM(NVL(sum(CY_BUDGET_REV), 0) - (NVL(sum(CY_BUDGET_EXP), 0) + NVL(sum(CY_BUDGET_CGS), 0))) OVER ()		FII_GRAND_TOTAL6';
110 
111   ELSE
112         l_prior_or_budget1 :='NVL(sum(PY_ACTUAL_REV),0)		FII_MEASURE2,
113 			      SUM(NVL(sum(PY_ACTUAL_REV),0)) OVER ()		FII_GRAND_TOTAL2,';
114 
115         l_prior_or_budget2 :='NVL(sum(PY_ACTUAL_EXP),0)		FII_MEASURE4,
116 			      SUM(NVL(sum(PY_ACTUAL_EXP),0)) OVER ()		FII_GRAND_TOTAL4,';
117 
118         l_prior_or_budget3 :='NULL		FII_MEASURE13,
119 			 (sum(NVL(sum(PY_ACTUAL_REV),0)) over() - (sum(NVL(sum(PY_ACTUAL_EXP),0)) over() + sum(NVL(sum(PY_ACTUAL_CGS),0)) over() )) /
120              		NULLIF(sum(sum(PY_ACTUAL_REV)) over(),0)*100    FII_MEASURE10,
121 			NVL(sum(PY_ACTUAL_REV),0) - (NVL(sum(PY_ACTUAL_EXP),0) + NVL(sum(PY_ACTUAL_CGS),0)) 		FII_MEASURE6,
122 			SUM(NVL(sum(PY_ACTUAL_REV),0) - (NVL(sum(PY_ACTUAL_EXP),0) + NVL(sum(PY_ACTUAL_CGS),0))) OVER () 		FII_GRAND_TOTAL6';
123 
124   END IF;
125 
126 /* --------------- Mapping ----------------
127  * manager                     VIEWBY
128  * revenue_amount              FII_MEASURE1,
129  * revenue_amount_previous     FII_MEASURE2,
130  * expenses_amount             FII_MEASURE3,
131  * expenses_amount_previous    FII_MEASURE4,
132  * operating_income            FII_MEASURE5,
133  * operating_income_previous   FII_MEASURE6
134  */
135 
136     sqlstmt := '
137              SELECT  '||fii_gl_util_pkg.g_viewby_value||'			  VIEWBY,
138                      f.viewby_id				                  VIEWBYID,
139 		     NVL(sum(CY_ACTUAL_REV),0)                                    FII_MEASURE1,
140 		     SUM(NVL(sum(CY_ACTUAL_REV),0)) OVER ()                       FII_GRAND_TOTAL1,
141 		     NVL(sum(CY_ACTUAL_EXP),0)                                    FII_MEASURE3,
142 		     SUM(NVL(sum(CY_ACTUAL_EXP),0)) OVER ()                       FII_GRAND_TOTAL3,
143         	     NULL							  FII_MEASURE14,
144 		     NVL(sum(CY_ACTUAL_REV),0) - (NVL(sum(CY_ACTUAL_EXP),0) + NVL(sum(CY_ACTUAL_CGS),0)) FII_MEASURE5,
145 		     SUM(NVL(sum(CY_ACTUAL_REV),0) - (NVL(sum(CY_ACTUAL_EXP),0) + NVL(sum(CY_ACTUAL_CGS),0))) OVER () FII_GRAND_TOTAL5,
146 		     (NVL(sum(sum(CY_ACTUAL_REV)) over(),0) - (NVL(sum(sum(CY_ACTUAL_EXP)) over(),0) + NVL(sum(sum(CY_ACTUAL_CGS)) over(),0) )) /
147              		NULLIF(sum(sum(CY_ACTUAL_REV)) over(),0)*100	  FII_MEASURE9,
148 		     to_number(NULL)						  FII_MEASURE15,
149 		     to_number(NULL)						  FII_MEASURE16,
150 		     '||l_prior_or_budget1||'
151                      '||l_prior_or_budget2||'
152                      '||l_prior_or_budget3||'
153              FROM
154 		   '||fii_gl_util_pkg.g_viewby_from_clause||',
155 		(select '||fii_gl_util_pkg.g_viewby_id||' viewby_id,
156     		 sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
157 			  and asgn.fin_cat_type_code = ''R''
158                           then f.actual_g
159                           else to_number(NULL) end)      CY_ACTUAL_REV,
160 		 sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
161 			  and asgn.fin_cat_type_code = ''OE''
162                           then f.actual_g
163                           else to_number(NULL) end)      CY_ACTUAL_EXP,
164 		 sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
165 			  and asgn.fin_cat_type_code = ''CGS''
166                           then f.actual_g
167                           else to_number(NULL) end)      CY_ACTUAL_CGS,
168                  sum(case when bitand(cal.record_type_id, :BUDGET_PERIOD_TYPE) = cal.record_type_id
169                           and asgn.fin_cat_type_code = ''R''
170 			  then f.budget_g
171                           else to_number(NULL) end)      CY_BUDGET_REV,
172 		  sum(case when bitand(cal.record_type_id, :BUDGET_PERIOD_TYPE) = cal.record_type_id
173                           and asgn.fin_cat_type_code = ''OE''
174 			  then f.budget_g
175                           else to_number(NULL) end)      CY_BUDGET_EXP,
176 		  sum(case when bitand(cal.record_type_id, :BUDGET_PERIOD_TYPE) = cal.record_type_id
177                           and asgn.fin_cat_type_code = ''CGS''
178 			  then f.budget_g
179                           else to_number(NULL) end)      CY_BUDGET_CGS,
180 		 to_number(NULL)                         PY_ACTUAL_REV,
181 		 to_number(NULL)			 PY_ACTUAL_EXP,
182 		 to_number(NULL)			 PY_ACTUAL_CGS
183                  FROM  FII_TIME_RPT_STRUCT                        cal,
184 		       FII_FIN_CAT_TYPE_ASSGNS                    asgn
185 		   '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||'
186 		 WHERE f.time_id = cal.time_id
187 	     '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||'
188              '||fii_gl_util_pkg.g_gid||'
189              AND   f.period_type_id = cal.period_type_id
190              AND   BITAND(cal.record_type_id, :WHERE_PERIOD_TYPE)= cal.record_type_id
191              AND   cal.report_date = &BIS_CURRENT_ASOF_DATE
192 	     AND   asgn.fin_category_id = f.fin_category_id
193              GROUP BY '||fii_gl_util_pkg.g_viewby_id||'
194 		union all
195 
196 		select '||fii_gl_util_pkg.g_viewby_id||' viewby_id,
197 		        to_number(NULL)				CY_ACTUAL_REV,
198                 to_number(NULL)				CY_ACTUAL_EXP,
199                 to_number(NULL)			    CY_ACTUAL_CGS,
200                 to_number(NULL)				CY_BUDGET_REV,
201                 to_number(NULL)				CY_BUDGET_EXP,
202 		        to_number(NULL)				CY_BUDGET_CGS,
203         	sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
204 			  and asgn.fin_cat_type_code = ''R''
205                           then f.actual_g
206                           else to_number(NULL) end)      PY_ACTUAL_REV,
207 		 sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
208 			  and asgn.fin_cat_type_code = ''OE''
209                           then f.actual_g
210                           else to_number(NULL) end)      PY_ACTUAL_EXP,
211 		 sum(case when bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE) = cal.record_type_id
212 			  and asgn.fin_cat_type_code = ''CGS''
213                           then f.actual_g
214                           else to_number(NULL) end)      PY_ACTUAL_CGS
215 		 FROM  FII_TIME_RPT_STRUCT                        cal,
216                 FII_FIN_CAT_TYPE_ASSGNS                    asgn
217 		   '||fii_gl_util_pkg.g_view||fii_gl_util_pkg.g_mgr_from_clause||'
218              WHERE f.time_id = cal.time_id
219 	     '||fii_gl_util_pkg.g_mgr_join||fii_gl_util_pkg.g_cat_join||'
220              '||fii_gl_util_pkg.g_gid||'
221              AND   f.period_type_id = cal.period_type_id
222              AND   BITAND(cal.record_type_id, :ACT_WHERE_PERIOD_TYPE)= cal.record_type_id
223              AND   cal.report_date = &BIS_PREVIOUS_ASOF_DATE
224 	     AND   asgn.fin_category_id = f.fin_category_id
225 		GROUP BY '||fii_gl_util_pkg.g_viewby_id||')  f
226 
227 	     WHERE '||fii_gl_util_pkg.g_viewby_join||'
228              GROUP BY '||fii_gl_util_pkg.g_viewby_value||', f.viewby_id';
229 
230 	fii_gl_util_pkg.bind_variable(sqlstmt, p_page_parameter_tbl, oper_profit_sql, oper_profit_output);
231 END get_oper_profit;
232 
233 PROCEDURE GET_REV_BY_CHANNEL (p_page_parameter_tbl in BIS_PMV_PAGE_PARAMETER_TBL,
234 rev_by_channel_sql out NOCOPY VARCHAR2, rev_by_channel_output out NOCOPY BIS_QUERY_ATTRIBUTES_TBL)
235  IS
236    rev_by_channel_rec     BIS_QUERY_ATTRIBUTES;
237    sqlstmt                VARCHAR2(32000);
238 
239 BEGIN
240     fii_gl_util_pkg.reset_globals;
241 	fii_gl_util_pkg.get_parameters(p_page_parameter_tbl);
242     fii_gl_util_pkg.get_bitmasks;
243 
244 
245 
246   /* --- Mapping -------
247    * channel                     FII_ATTRIBUTE1,
248    * revenue_amount              FII_MEASURE1,
249    * revenue_amount_previous     FII_MEASURE2,
250    * revenue_amount              FII_MEASURE4,
251    * revenue_amount_previous     FII_MEASURE5,
252    */
253 
254  IF fii_gl_util_pkg.g_mgr_id = -99999 THEN /* Done for bug 3875336 */
255 
256  sqlstmt := '
257 
258 	SELECT	NULL	FII_ATTRIBUTE1,
259 		NULL    FII_MEASURE9,
260 		NULL    FII_MEASURE1,
261 		NULL    FII_MEASURE2,
262 		NULL    FII_MEASURE4,
263 		NULL    FII_MEASURE5,
264 		NULL	FII_MEASURE7,
265 		NULL	FII_MEASURE8
266 	FROM	DUAL
267 	WHERE	1=2';
268 
269 ELSE
270 
271 sqlstmt := '
272       SELECT bsc.value                                        FII_ATTRIBUTE1,
273              bsc.id                                           FII_MEASURE9,
274 	     sum(case when cal.report_date = &BIS_CURRENT_ASOF_DATE
275                       then f.actual_g else 0 end)           FII_MEASURE1,
276              sum(case when cal.report_date = &BIS_PREVIOUS_ASOF_DATE
277                       then f.actual_g else 0 end)           FII_MEASURE2,
278              sum(case when cal.report_date = &BIS_CURRENT_ASOF_DATE
279                       then f.actual_g else 0 end)           FII_MEASURE4,
280              sum(case when cal.report_date = &BIS_PREVIOUS_ASOF_DATE
281                       then f.actual_g else 0 end)           FII_MEASURE5,
282              sum(sum(case when cal.report_date = &BIS_CURRENT_ASOF_DATE
283                       then f.actual_g else 0 end)) over() FII_MEASURE7,
284              sum(sum(case when cal.report_date = &BIS_PREVIOUS_ASOF_DATE
285                       then f.actual_g else 0 end)) over() FII_MEASURE8
286       FROM   bis_sales_channels_v     bsc,
287              fii_ar_rev_sum_v'|| fii_gl_util_pkg.g_global_curr_view ||'        f,
288 	     fii_cc_mgr_hierarchies   h,
289              FII_TIME_RPT_STRUCT      cal
290       where f.sales_channel_code = bsc.id
291       and   h.mgr_id 	 	 =  &HRI_PERSON+HRI_PER_USRDR_H
292       and   f.manager_id 	 =  h.emp_id
293       and   f.time_id            = cal.time_id
294       and   f.period_type_id     = cal.period_type_id
295       and   bitand(cal.record_type_id, :ACTUAL_PERIOD_TYPE)= cal.record_type_id
296       and   cal.report_date in (&BIS_CURRENT_ASOF_DATE, &BIS_PREVIOUS_ASOF_DATE)
297       group by bsc.value, bsc.id';
298 
299 END IF;
300 
301 	fii_gl_util_pkg.bind_variable(sqlstmt, p_page_parameter_tbl, rev_by_channel_sql, rev_by_channel_output);
302 
303 END GET_REV_BY_CHANNEL;
304 
305 END fii_gl_profit_and_loss;