[Home] [Help]
PACKAGE BODY: APPS.ISC_DBI_PLAN_RM_PKG
Source
1 PACKAGE BODY ISC_DBI_PLAN_RM_PKG AS
2 /* $Header: ISCRGAIB.pls 120.0 2005/05/25 17:26:52 appldev noship $ */
3
4
5 PROCEDURE Get_Sql ( p_param IN BIS_PMV_PAGE_PARAMETER_TBL,
6 x_custom_sql OUT NOCOPY VARCHAR2,
7 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
8
9 l_stmt VARCHAR2(10000);
10 l_plan VARCHAR2(10000);
11 l_plan2 VARCHAR2(10000);
12 l_outer_sql VARCHAR2(10000);
13 l_formula_sql VARCHAR2(10000);
14 l_inner_sql VARCHAR2(10000);
15 l_inner_select_stmt VARCHAR2(10000);
16 l_inner_group_by_stmt VARCHAR2(10000);
17 l_flags_where VARCHAR2(1000);
18 l_mv VARCHAR2(100);
19 l_qty_select VARCHAR2(10000);
20 l_view_by VARCHAR2(10000);
21 l_org VARCHAR2(10000);
22 l_org_where VARCHAR2(10000);
23 l_prod VARCHAR2(10000);
24 l_prod_where VARCHAR2(10000);
25 l_prod_cat VARCHAR2(10000);
26 l_prod_cat_from VARCHAR2(10000);
27 l_prod_cat_where VARCHAR2(10000);
28 l_period_type VARCHAR2(10000);
29 l_period_type_id NUMBER;
30 l_time_from DATE;
31 l_item_cat_flag NUMBER;
32 l_lang VARCHAR2(10);
33 l_union1_flag NUMBER := 0;
34 l_row_filter VARCHAR2(10000);
35 l_custom_rec BIS_QUERY_ATTRIBUTES;
36 l_curr VARCHAR2(10000);
37 l_curr_g VARCHAR2(15) := '''FII_GLOBAL1''';
38 l_curr_g1 VARCHAR2(15) := '''FII_GLOBAL2''';
39 l_curr_suffix VARCHAR2(15);
40
41 BEGIN
42
43 FOR i IN 1..p_param.COUNT
44 LOOP
45 IF (p_param(i).parameter_name = 'PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT')
46 THEN l_plan := p_param(i).parameter_value;
47 END IF;
48
49 IF (p_param(i).parameter_name = 'PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2')
50 THEN l_plan2 := p_param(i).parameter_value;
51 END IF;
52
53 IF (p_param(i).parameter_name = 'VIEW_BY')
54 THEN l_view_by := p_param(i).parameter_value;
55 END IF;
56
57 IF(p_param(i).parameter_name = 'PERIOD_TYPE')
58 THEN l_period_type := p_param(i).parameter_value;
59 END IF;
60
61 IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_PERIOD_FROM')
62 THEN l_time_from := p_param(i).period_date;
63 END IF;
64
65 IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_QTR_FROM')
66 THEN l_time_from := p_param(i).period_date;
67 END IF;
68
69 IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_YEAR_FROM')
70 THEN l_time_from := p_param(i).period_date;
71 END IF;
72
73 IF (p_param(i).parameter_name = 'ORGANIZATION+ORGANIZATION')
74 THEN l_org := p_param(i).parameter_value;
75 END IF;
76
77 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_VBH_CAT')
78 THEN l_prod_cat := p_param(i).parameter_value;
79 END IF;
80
81 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_ORG')
82 THEN l_prod := p_param(i).parameter_value;
83 END IF;
84
85 IF (p_param(i).parameter_name = 'CURRENCY+FII_CURRENCIES')
86 THEN l_curr := p_param(i).parameter_id;
87 END IF;
88
89 END LOOP;
90
91 IF (l_curr = l_curr_g)
92 THEN
93 l_curr_suffix := '_g';
94 ELSIF (l_curr = l_curr_g1)
95 THEN
96 l_curr_suffix := '_g1';
97 ELSE
98 l_curr_suffix := '';
99 END IF;
100
101 IF (l_org IS NULL OR l_org = 'All')
102 THEN l_org_where := '
103 AND (EXISTS
104 (SELECT 1
105 FROM org_access o
106 WHERE o.responsibility_id = fnd_global.resp_id
107 AND o.resp_application_id = fnd_global.resp_appl_id
108 AND o.organization_id = f.organization_id)
109 OR EXISTS
110 (SELECT 1
111 FROM mtl_parameters org
112 WHERE org.organization_id = f.organization_id
113 AND NOT EXISTS
114 (SELECT 1
115 FROM org_access ora
116 WHERE org.organization_id = ora.organization_id)))';
117 ELSE l_org_where := '
118 AND f.organization_id = &ORGANIZATION+ORGANIZATION';
119 END IF;
120
121 IF (l_prod_cat IS NULL OR l_prod_cat = 'All')
122 THEN
123 IF (l_view_by = 'ITEM+ENI_ITEM_VBH_CAT')
124 THEN
125 l_prod_cat_from := ',
126 ENI_DENORM_HIERARCHIES eni_cat,
127 MTL_DEFAULT_CATEGORY_SETS mdcs';
128 l_prod_cat_where := '
129 AND f.vbh_category_id = eni_cat.child_id
130 AND eni_cat.top_node_flag = ''Y''
131 AND eni_cat.dbi_flag = ''Y''
132 AND eni_cat.object_type = ''CATEGORY_SET''
133 AND eni_cat.object_id = mdcs.category_set_id
134 AND mdcs.functional_area_id = 11';
135 ELSE
136 l_prod_cat_from := '';
137 l_prod_cat_where := '';
138 END IF;
139 ELSE
140 l_prod_cat_from := ',
141 ENI_DENORM_HIERARCHIES eni_cat,
142 MTL_DEFAULT_CATEGORY_SETS mdcs';
143 l_prod_cat_where := '
144 AND f.vbh_category_id = eni_cat.child_id
145 AND eni_cat.parent_id IN (&ITEM+ENI_ITEM_VBH_CAT)
146 AND eni_cat.dbi_flag = ''Y''
147 AND eni_cat.object_type = ''CATEGORY_SET''
148 AND eni_cat.object_id = mdcs.category_set_id
149 AND mdcs.functional_area_id = 11';
150 END IF;
151
152 IF (l_prod IS NULL OR l_prod = 'All')
153 THEN l_prod_where := '';
154 ELSE l_prod_where := '
155 AND f.item_id IN (&ITEM+ENI_ITEM_ORG)';
156 END IF;
157
158 IF (l_prod IS NULL OR l_prod = 'All')
159 THEN
160 IF (l_view_by = 'ITEM+ENI_ITEM_ORG')
161 THEN l_item_cat_flag := 0; -- product
162 ELSIF (l_view_by = 'ITEM+ENI_ITEM_VBH_CAT')
163 THEN l_item_cat_flag := 2; -- category
164 ELSE
165 IF (l_prod_cat IS NULL OR l_prod_cat = 'All')
166 THEN l_item_cat_flag := 3; -- all
167 ELSE l_item_cat_flag := 2; -- category
168 END IF;
169 END IF;
170 ELSE
171 l_item_cat_flag := 0; -- product
172 END IF;
173
174 IF (l_period_type = 'FII_TIME_ENT_PERIOD') THEN
175 l_period_type_id := 32;
176 ELSIF (l_period_type = 'FII_TIME_ENT_QTR') THEN
177 l_period_type_id := 64;
178 ELSE -- l_period_type = 'FII_TIME_ENT_YEAR'
179 l_period_type_id := 128;
180 END IF;
181
182 l_lang := USERENV('LANG');
183
184 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
185 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
186
187 IF (l_plan IS NULL OR l_plan2 IS NULL)
188 THEN l_stmt := '
189 SELECT 0 VIEWBY,
190 0 VIEWBYID,
191 0 ISC_ATTRIBUTE_1,
192 0 ISC_ATTRIBUTE_2,
193 0 ISC_ATTRIBUTE_3,
194 0 ISC_MEASURE_1,
195 0 ISC_MEASURE_2,
196 0 ISC_MEASURE_3,
197 0 ISC_MEASURE_4,
198 0 ISC_MEASURE_5,
199 0 ISC_MEASURE_6,
200 0 ISC_MEASURE_7,
201 0 ISC_MEASURE_8,
202 0 ISC_MEASURE_9,
203 0 ISC_MEASURE_10,
204 0 ISC_MEASURE_11,
205 0 ISC_MEASURE_12,
206 0 ISC_MEASURE_13,
207 0 ISC_MEASURE_14,
208 0 ISC_MEASURE_15,
209 0 ISC_MEASURE_16,
210 0 ISC_MEASURE_17,
211 0 ISC_MEASURE_18,
212 0 ISC_MEASURE_19,
213 0 ISC_MEASURE_20,
214 0 ISC_MEASURE_21,
215 0 ISC_MEASURE_22,
216 0 ISC_MEASURE_23,
217 0 ISC_MEASURE_24
218 FROM dual
219 WHERE 1 = 2 /* PLAN_SNAPSHOT dimension has not been populated */';
220 ELSE
221
222 IF ((l_view_by = 'ITEM+ENI_ITEM_VBH_CAT') AND
223 (l_prod_cat IS NULL OR l_prod_cat = 'All'))
224 THEN
225 l_inner_select_stmt := 'SELECT eni_cat.parent_id VBH_CATEGORY_ID,';
226 l_inner_group_by_stmt := '
227 GROUP BY eni_cat.parent_id';
228 ELSE
229 l_inner_select_stmt := 'SELECT eni_cat.imm_child_id VBH_CATEGORY_ID,';
230 l_inner_group_by_stmt := '
231 GROUP BY eni_cat.imm_child_id';
232 END IF;
233
234 IF ((l_view_by = 'ITEM+ENI_ITEM_VBH_CAT') AND
235 (l_prod_cat IS NULL OR l_prod_cat = 'All') AND
236 (l_prod IS NULL OR l_prod = 'All'))
237 THEN
238 l_inner_select_stmt := 'SELECT f.parent_id VBH_CATEGORY_ID,';
239 l_inner_group_by_stmt := '
240 GROUP BY f.parent_id';
241 l_prod_cat_from := '';
242 l_prod_cat_where := '';
243 l_mv := 'ISC_DBI_PM_0003_MV';
244 l_flags_where := '';
245 ELSE
246 l_mv := 'ISC_DBI_PM_0001_MV';
247 l_flags_where := '
248 AND f.item_cat_flag = :ISC_ITEM_CAT_FLAG
249 AND f.union1_flag <> :ISC_UNION1_FLAG';
250 END IF;
251
252 IF l_view_by = 'ITEM+ENI_ITEM_ORG'
253 THEN l_qty_select := '
254 sum(decode(f.snapshot_id, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
255 f.mds_quantity, 0)) QTY,';
256 ELSE l_qty_select := '
257 null QTY,';
258 END IF;
259
260 -- Filter out rows with only 0 or N/A
261 l_row_filter := '
262 WHERE (ISC_MEASURE_2 IS NOT NULL AND ISC_MEASURE_2 <> 0)
263 OR (ISC_MEASURE_3 IS NOT NULL AND ISC_MEASURE_3 <> 0)
264 OR (ISC_MEASURE_5 IS NOT NULL AND ISC_MEASURE_5 <> 0)
265 OR (ISC_MEASURE_6 IS NOT NULL AND ISC_MEASURE_6 <> 0)';
266
267 l_outer_sql:= 'ISC_MEASURE_1, ISC_MEASURE_2, ISC_MEASURE_3, ISC_MEASURE_4, ISC_MEASURE_5, ISC_MEASURE_6,
268 ISC_MEASURE_7, ISC_MEASURE_8, ISC_MEASURE_9, ISC_MEASURE_10, ISC_MEASURE_11, ISC_MEASURE_12,
269 ISC_MEASURE_13, ISC_MEASURE_14, ISC_MEASURE_15, ISC_MEASURE_16, ISC_MEASURE_17, ISC_MEASURE_18,
270 ISC_MEASURE_19, ISC_MEASURE_20, ISC_MEASURE_21, ISC_MEASURE_22, ISC_MEASURE_23, ISC_MEASURE_24';
271
272 l_formula_sql := '
273 c.qty ISC_MEASURE_1, -- Shipment Quantity
274 c.rev ISC_MEASURE_2, -- Revenue
275 c.comp_rev ISC_MEASURE_3, -- Compare Plan (Revenue)
276 (c.rev - c.comp_rev) ISC_MEASURE_4, -- Variance (Revenue)
277 c.cost ISC_MEASURE_5, -- Cost
278 c.comp_cost ISC_MEASURE_6, -- Compare Plan (Cost)
279 (c.cost - c.comp_cost) ISC_MEASURE_7, -- Variance (Cost)
280 (c.rev - c.cost) ISC_MEASURE_8, -- Margin
281 (c.comp_rev - c.comp_cost) ISC_MEASURE_9, -- Compare Plan (Margin)
282 (c.rev - c.cost)
283 - (c.comp_rev - c.comp_cost) ISC_MEASURE_10, -- Variance (Margin)
284 (c.rev - c.cost)
285 / decode(c.rev,0,NULL,c.rev) * 100 ISC_MEASURE_11, -- Margin Percent
286 (c.comp_rev - c.comp_cost) / decode(c.comp_rev,0,NULL,c.comp_rev) * 100
287 ISC_MEASURE_12, -- Compare Plan (Margin Percent)
288 ((c.rev - c.cost) / decode(c.rev,0,NULL,c.rev) * 100)
289 - ((c.comp_rev - c.comp_cost) / decode(c.comp_rev,0,NULL,c.comp_rev) * 100)
290 ISC_MEASURE_13, -- Variance (Margin Percent)
291 sum(c.rev) over () ISC_MEASURE_14, -- Grand Total - Revenue
292 sum((c.rev - c.comp_rev)) over () ISC_MEASURE_15, -- Grand Total - Variance (Revenue)
293 sum(c.cost) over () ISC_MEASURE_16, -- Grand Total - Cost
294 sum(c.cost - c.comp_cost) over () ISC_MEASURE_17, -- Grand Total - Variance (Cost)
295 sum((c.rev - c.cost)) over () ISC_MEASURE_18, -- Grand Total - Margin
296 sum((c.rev - c.cost) - (c.comp_rev - c.comp_cost)) over ()
297 ISC_MEASURE_19, -- Grand Total - Variance (Margin)
298 sum(c.rev - c.cost) over ()
299 / decode(sum(c.rev) over (),0,NULL,sum(c.rev) over ()) * 100
300 ISC_MEASURE_20, -- Grand Total - Margin Percent
301 (sum(c.rev - c.cost) over ()
302 / decode(sum(c.rev) over (),0,NULL,sum(c.rev) over ()) * 100)
303 - (sum(c.comp_rev - c.comp_cost) over ()
304 / decode(sum(c.comp_rev) over (),0,NULL,sum(c.comp_rev) over ()) * 100)
305 ISC_MEASURE_21, -- Grand Total - Variance (Margin Percent)
306 sum(c.comp_rev) over () ISC_MEASURE_22, -- Grand Total - Compare Revenue
307 sum(c.comp_rev - c.comp_cost) over () ISC_MEASURE_23, -- Grand Total - Compare Margin
308 sum(c.comp_rev - c.comp_cost) over ()
309 / decode(sum(c.comp_rev) over (),0,NULL,sum(c.comp_rev) over ()) * 100
310 ISC_MEASURE_24 -- Grand Total - Compare Margin Percent';
311
312 l_inner_sql := l_qty_select||'
313 sum(decode(f.snapshot_id, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
314 f.mds_price'||l_curr_suffix||', 0)) REV,
315 decode(&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2, -1, null,
316 sum(decode(f.snapshot_id, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2,
317 f.mds_price'||l_curr_suffix||', 0))) COMP_REV,
318 sum(decode(f.snapshot_id, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
319 f.mds_cost'||l_curr_suffix||', 0)) COST,
320 decode(&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2, -1, null,
321 sum(decode(f.snapshot_id, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2,
322 f.mds_cost'||l_curr_suffix||', 0))) COMP_COST
323 FROM '||l_mv||' f'
324 ||l_prod_cat_from||'
325 WHERE f.start_date = :ISC_TIME_FROM
326 AND f.period_type_id =:ISC_PERIOD_TYPE_ID
327 AND f.snapshot_id IN (&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT, &PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2)'
328 ||l_flags_where
329 ||l_org_where
330 ||l_prod_cat_where
331 ||l_prod_where;
332
333 IF l_view_by = 'ITEM+ENI_ITEM_ORG'
334 THEN l_stmt := '
335 SELECT items.value VIEWBY,
336 items.id VIEWBYID,
337 null ISC_ATTRIBUTE_1, -- drill across URL
338 items.description ISC_ATTRIBUTE_2, -- Description
339 mtl.unit_of_measure ISC_ATTRIBUTE_3, -- UOM
340 '||l_outer_sql||'
341 FROM (SELECT (rank() over (&ORDER_BY_CLAUSE NULLS LAST,item_id))-1 RNK,
342 item_id, uom,
343 '||l_outer_sql||'
344 FROM (SELECT c.item_id, c.uom,'
345 ||l_formula_sql||'
346 FROM (SELECT f.item_id ITEM_ID,
347 f.uom_code UOM,'
348 ||l_inner_sql||'
349 GROUP BY f.item_id, f.uom_code) c)'
350 ||l_row_filter||'
351 OR (ISC_MEASURE_1 IS NOT NULL AND ISC_MEASURE_1 <> 0)
352 ) a,
353 ENI_ITEM_ORG_V items,
354 MTL_UNITS_OF_MEASURE_TL mtl
355 WHERE a.item_id = items.id
356 AND a.uom = mtl.uom_code
357 AND mtl.language = :ISC_LANG
358 AND ((a.rnk between &START_INDEX and &END_INDEX) OR (&END_INDEX = -1))
359 ORDER BY rnk';
360
361 ELSIF l_view_by = 'ORGANIZATION+ORGANIZATION'
362 THEN l_stmt := '
363 SELECT org.name VIEWBY,
364 org.organization_id VIEWBYID,
365 null ISC_ATTRIBUTE_1, -- drill across URL
366 null ISC_ATTRIBUTE_2, -- Description
367 null ISC_ATTRIBUTE_3, -- UOM
368 '||l_outer_sql||'
369 FROM (SELECT (rank() over (&ORDER_BY_CLAUSE NULLS LAST,organization_id))-1 RNK,
370 organization_id,
371 '||l_outer_sql||'
372 FROM (SELECT c.organization_id,'
373 ||l_formula_sql||'
374 FROM (SELECT f.organization_id ORGANIZATION_ID,'
375 ||l_inner_sql||'
376 GROUP BY f.organization_id) c)'
377 ||l_row_filter||'
378 ) a,
379 HR_ALL_ORGANIZATION_UNITS_TL org
380 WHERE org.organization_id = a.organization_id
381 AND org.language = :ISC_LANG
382 AND ((a.rnk between &START_INDEX and &END_INDEX) OR (&END_INDEX = -1))
383 ORDER BY rnk';
384
385 ELSE -- l_view_by = 'ITEM+ENI_ITEM_VBH_CAT'
386 l_stmt := '
387 SELECT eni.value VIEWBY,
388 eni.id VIEWBYID,
389 decode(eni.leaf_node_flag, ''Y'',
390 ''pFunctionName=ISC_DBI_PLAN_RM&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ITEM+ENI_ITEM_ORG&pParamIds=Y'',
391 ''pFunctionName=ISC_DBI_PLAN_RM&VIEW_BY_NAME=VIEW_BY_ID&VIEW_BY=ITEM+ENI_ITEM_VBH_CAT&pParamIds=Y'')
392 ISC_ATTRIBUTE_1, -- drill across URL
393 null ISC_ATTRIBUTE_2, -- Description
394 null ISC_ATTRIBUTE_3, -- UOM
395 '||l_outer_sql||'
396 FROM (SELECT (rank() over (&ORDER_BY_CLAUSE NULLS LAST,vbh_category_id))-1 RNK,
397 vbh_category_id,
398 '||l_outer_sql||'
399 FROM (SELECT c.vbh_category_id,'
400 ||l_formula_sql||'
401 FROM ('||l_inner_select_stmt
402 ||l_inner_sql
403 ||l_inner_group_by_stmt||') c)'
404 ||l_row_filter||'
405 ) a,
406 ENI_ITEM_VBH_NODES_V eni
407 WHERE a.vbh_category_id = eni.id
408 AND eni.parent_id = eni.child_id
409 AND ((a.rnk between &START_INDEX and &END_INDEX) OR (&END_INDEX = -1))
410 ORDER BY rnk';
411
412 END IF;
413 END IF;
414
415 x_custom_sql := l_stmt;
416
417 l_custom_rec.attribute_name := ':ISC_LANG';
418 l_custom_rec.attribute_value := l_lang;
419 l_custom_rec.attribute_type := bis_pmv_parameters_pub.bind_type;
420 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.varchar2_bind;
421 x_custom_output.extend;
422 x_custom_output(1) := l_custom_rec;
423
424 l_custom_rec.attribute_name := ':ISC_PERIOD_TYPE_ID';
425 l_custom_rec.attribute_value := to_char(l_period_type_id);
426 l_custom_rec.attribute_type := bis_pmv_parameters_pub.bind_type;
427 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.integer_bind;
428 x_custom_output.extend;
429 x_custom_output(2) := l_custom_rec;
430
431 l_custom_rec.attribute_name := ':ISC_TIME_FROM';
432 l_custom_rec.attribute_value := to_char(l_time_from,'DD/MM/YYYY');
433 l_custom_rec.attribute_type := bis_pmv_parameters_pub.bind_type;
434 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.date_bind;
435 x_custom_output.extend;
436 x_custom_output(3) := l_custom_rec;
437
438 l_custom_rec.attribute_name := ':ISC_ITEM_CAT_FLAG';
439 l_custom_rec.attribute_value := to_char(l_item_cat_flag);
440 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.Bind_Type;
441 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.Integer_Bind;
442 x_custom_output.extend;
443 x_custom_output(4) := l_custom_rec;
444
445 l_custom_rec.attribute_name := ':ISC_UNION1_FLAG';
446 l_custom_rec.attribute_value := to_char(l_union1_flag);
447 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.Bind_Type;
448 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.Integer_Bind;
449 x_custom_output.extend;
450 x_custom_output(5) := l_custom_rec;
451
452 END Get_Sql;
453
454 END ISC_DBI_PLAN_RM_PKG ;
455