DBA Data[Home] [Help]

PACKAGE BODY: APPS.ISC_DBI_PLAN_INV_TURN_PKG

Source


1 PACKAGE BODY ISC_DBI_PLAN_INV_TURN_PKG AS
2 /* $Header: ISCRGAQB.pls 120.1 2006/06/26 06:34:16 abhdixi noship $ */
3 
4 
5 PROCEDURE GET_SQL(p_param IN BIS_PMV_PAGE_PARAMETER_TBL,x_custom_sql OUT NOCOPY VARCHAR2,
6 	x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
7 
8   l_stmt 		VARCHAR2(32000);
9   l_plan		VARCHAR2(10000);
10   l_plan2		VARCHAR2(10000);
11   l_inner_sql		VARCHAR2(32000);
12   l_view_by		VARCHAR2(32000);
13   l_org 		VARCHAR2(32000);
14   l_org_where     	VARCHAR2(32000);
15   l_period_type		VARCHAR2(1000);
16   l_inv_cat		VARCHAR2(32000);
17   l_item		VARCHAR2(32000);
18   l_inv_cat_where	VARCHAR2(32000);
19   l_item_where		VARCHAR2(32000);
20   l_item_cat_flag	NUMBER; -- 0 for item, 1 for inv.cat, 3 for all
21   l_time_from		DATE;
22   l_time_to		DATE;
23   l_cur_start		DATE;
24   l_cur_end		DATE;
25   l_pre_start		DATE;
26   l_pre_end		DATE;
27   l_lang		varchar2(10);
28   l_viewby_id		varchar2(100);
29   l_mon_num		NUMBER; -- number of months in the selected period
30   l_custom_rec 		BIS_QUERY_ATTRIBUTES ;
31   l_curr		VARCHAR2(10000);
32   l_curr_g		VARCHAR2(15) := '''FII_GLOBAL1''';
33   l_curr_g1		VARCHAR2(15) := '''FII_GLOBAL2''';
34   l_curr_suffix         VARCHAR2(15);
35 
36 BEGIN
37 
38   FOR i IN 1..p_param.COUNT
39   LOOP
40     IF (p_param(i).parameter_name = 'PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT')
41       THEN l_plan := p_param(i).parameter_value;
42     END IF;
43 
44     IF (p_param(i).parameter_name = 'PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2')
45       THEN l_plan2 := p_param(i).parameter_value;
46     END IF;
47 
48     IF( p_param(i).parameter_name= 'VIEW_BY')
49       THEN l_view_by := p_param(i).parameter_value;
50     END IF;
51 
52     IF(p_param(i).parameter_name = 'ORGANIZATION+ORGANIZATION')
53       THEN l_org :=  p_param(i).parameter_value;
54     END IF;
55 
56     IF(p_param(i).parameter_name = 'PERIOD_TYPE') THEN
57        l_period_type :=  p_param(i).parameter_value;
58     END IF;
59 
60     IF(p_param(i).parameter_name = 'ITEM+ENI_ITEM_INV_CAT') THEN
61        l_inv_cat :=  p_param(i).parameter_value;
62     END IF;
63 
64     IF(p_param(i).parameter_name = 'ITEM+ENI_ITEM_ORG') THEN
65        l_item :=  p_param(i).parameter_value;
66     END IF;
67 
68     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_PERIOD_FROM') THEN
69        l_time_from :=  p_param(i).period_date;
70     END IF;
71 
72     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_PERIOD_TO') THEN
73        l_time_to :=  p_param(i).period_date;
74     END IF;
75 
76     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_QTR_FROM') THEN
77        l_time_from :=  p_param(i).period_date;
78     END IF;
79 
80     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_QTR_TO') THEN
81        l_time_to :=  p_param(i).period_date;
82     END IF;
83 
84     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_YEAR_FROM') THEN
85        l_time_from :=  p_param(i).period_date;
86     END IF;
87 
88     IF(p_param(i).parameter_name = 'TIME+FII_TIME_ENT_YEAR_TO') THEN
89        l_time_to :=  p_param(i).period_date;
90     END IF;
91 
92     IF (p_param(i).parameter_name = 'CURRENCY+FII_CURRENCIES')
93       THEN l_curr := p_param(i).parameter_id;
94     END IF;
95 
96   END LOOP;
97 
98   IF (l_curr = l_curr_g)
99     THEN
100     	l_curr_suffix := '_g';
101     ELSIF (l_curr = l_curr_g1)
102 	THEN
103 		l_curr_suffix := '_g1';
104 	ELSE
105 		l_curr_suffix := '';
106   END IF;
107 
108   IF ( l_org IS NULL OR l_org = 'All' )
109     THEN l_org_where := '
110 	AND (EXISTS
111 		(SELECT 1
112 		FROM org_access o
113 		WHERE o.responsibility_id = fnd_global.resp_id
114 		AND o.resp_application_id = fnd_global.resp_appl_id
115 		AND o.organization_id = f.organization_id)
116 		OR EXISTS
117 		(SELECT 1
118 		FROM mtl_parameters org
119 		WHERE org.organization_id = f.organization_id
120 		AND NOT EXISTS
121 			(SELECT 1
122 			FROM org_access ora
123 			WHERE org.organization_id = ora.organization_id)))';
124 
125     ELSE l_org_where := '
126 		AND f.organization_id =(&ORGANIZATION+ORGANIZATION)';
127   END IF;
128 
129 
130   IF ( l_inv_cat IS NULL OR l_inv_cat = 'All' ) THEN
131     l_inv_cat_where :='';
132   ELSE
133     l_inv_cat_where := '
134 	AND f.inv_category_id in (&ITEM+ENI_ITEM_INV_CAT)';
135   END IF;
136 
137 
138   IF ( l_item IS NULL OR l_item = 'All' )
139   THEN l_item_where := '';
140   ELSE l_item_where := '
141 	AND f.item_id in (&ITEM+ENI_ITEM_ORG)';
142   END IF;
143 
144   IF (l_item IS NULL OR l_item = 'All')
145     THEN
146       IF (l_view_by = 'ITEM+ENI_ITEM_ORG')
147 	THEN l_item_cat_flag := 0; -- item
148       ELSIF (l_view_by = 'ITEM+ENI_ITEM_INV_CAT')
149         THEN l_item_cat_flag := 1; -- category
150       ELSE
151 	IF (l_inv_cat IS NULL OR l_inv_cat = 'All')
152 	  THEN l_item_cat_flag := 3; -- all
153 	ELSE l_item_cat_flag := 1; -- category
154 	END IF;
155       END IF;
156   ELSE
157     l_item_cat_flag := 0; -- item
158   END IF;
159 
160 
161   l_cur_start := l_time_from;
162   l_cur_end := l_time_to;
163   l_pre_start := FII_TIME_API.ent_pper_start(l_time_from); -- get the previous month
164   l_pre_end := FII_TIME_API.ent_pper_end(l_time_to); -- get the previous month
165 
166 
167   l_lang := USERENV('LANG');
168 
169 
170  IF l_period_type = 'FII_TIME_ENT_YEAR' THEN
171    l_mon_num :=12;
172 
173   ELSIF (l_period_type='FII_TIME_ENT_QTR') THEN
174    l_mon_num :=3;
175 
176   ELSE
177    l_mon_num :=1;
178 
179   END IF;
180 
181 
182   IF l_view_by = 'ORGANIZATION+ORGANIZATION' THEN
183     l_viewby_id :='organization_id';
184 
185   ELSIF l_view_by = 'ITEM+ENI_ITEM_ORG' THEN
186     l_viewby_id :='item_id';
187 
188   ELSIF l_view_by = 'ITEM+ENI_ITEM_INV_CAT' THEN
189     l_viewby_id :='inv_category_id';
190 
191   END if;
192 
193 
194   l_custom_rec := BIS_PMV_PARAMETERS_PUB.INITIALIZE_QUERY_TYPE;
195   x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
196 
197 
198   IF (l_plan IS NULL OR l_plan2 IS NULL)
199     THEN l_stmt := '
200 SELECT	0	VIEWBY,
201 	0	VIEWBYID,
202 	0	ISC_ATTRIBUTE_1,
203 	0 	ISC_MEASURE_7,
204 	0 	ISC_MEASURE_8,
205 	0 	ISC_MEASURE_1,
206 	0 	ISC_MEASURE_2,
207 	0 	ISC_MEASURE_3,
208 	0 	ISC_MEASURE_4,
209 	0 	ISC_MEASURE_5,
210 	0 	ISC_MEASURE_6,
211 	0 	ISC_MEASURE_9,
212 	0 	ISC_MEASURE_10
213   FROM	dual
214  WHERE	1 = 2 /* PLAN_SNAPSHOT dimension has not been populated */';
215     ELSE
216 
217   l_inner_sql:='ISC_MEASURE_7,ISC_MEASURE_8,ISC_MEASURE_1,ISC_MEASURE_2,ISC_MEASURE_3,
218 		ISC_MEASURE_4,ISC_MEASURE_5,
219 		ISC_MEASURE_4-ISC_MEASURE_5 ISC_MEASURE_6,
220 		ISC_MEASURE_9, ISC_MEASURE_10
221 	FROM(select (rank() over (&ORDER_BY_CLAUSE nulls last,viewby_id))-1 rnk,
222 		viewby_id,
223 		ISC_MEASURE_1,ISC_MEASURE_2,ISC_MEASURE_3,
224 		sum(ISC_MEASURE_7) over ()*365/(:ISC_CUR_END - :ISC_CUR_START+1)/
225 		decode(sign(sum(ISC_MEASURE_8) over()),0,null,-1,null,
226 		sum(ISC_MEASURE_8) over()) 				ISC_MEASURE_4,
227 		sum(comp_mds) over ()*365/(:ISC_CUR_END - :ISC_CUR_START+1)/
228 		decode(sign(sum(comp_avg_inv) over()),0,null,-1,null,
229 		sum(comp_avg_inv) over())				 ISC_MEASURE_5,
230 		ISC_MEASURE_7,ISC_MEASURE_8,
231 		sum(ISC_MEASURE_7) over ()				ISC_MEASURE_9,
232 		sum(ISC_MEASURE_8) over ()				ISC_MEASURE_10
233 	FROM (select viewby_id,
234 		sum(plan_inv_turns)					ISC_MEASURE_1,
235 		sum(comp_inv_turns)					ISC_MEASURE_2,
236 		sum(plan_inv_turns)-sum(comp_inv_turns)			ISC_MEASURE_3,
237 		sum(plan_mds_total)					ISC_MEASURE_7,
238 		sum(plan_avg_inv)					ISC_MEASURE_8,
239 		sum(comp_mds_total)					comp_mds,
240 		sum(comp_avg_inv)					comp_avg_inv
241 	FROM(	SELECT s.viewby_id,
242 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
243 		sum(s.mds)*365/(:ISC_CUR_END - :ISC_CUR_START+1)/
244 		decode(sign(sum(s.begin_inv+s.end_inv)),0,null,-1,null,
245 		sum(s.begin_inv+s.end_inv)/2/:ISC_MON_NUM),null) 		plan_inv_turns,
246 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
247 		sum(s.begin_inv+s.end_inv)/2/:ISC_MON_NUM,null) 		plan_avg_inv,
248 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2,
249 		sum(s.mds)*365/(:ISC_CUR_END - :ISC_CUR_START+1)/
250 		decode(sign(sum(s.begin_inv+s.end_inv)),0,null,-1,null,
251 		sum(s.begin_inv+s.end_inv)/2/:ISC_MON_NUM),null) 		comp_inv_turns,
252 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,
253 		sum(s.mds),null)						plan_mds_total,
254 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2,
255 		sum(s.mds),null)						comp_mds_total,
256 		decode(s.plan_id,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2,
257 		sum(s.begin_inv+s.end_inv)/2/:ISC_MON_NUM,null)			comp_avg_inv
258 		FROM
259 		(SELECT f.'||l_viewby_id||'	VIEWBY_ID,
260 		dates.start_date		PERIOD,
261 		f.snapshot_id			PLAN_ID,
262 		sum(decode(dates.period_type,''P'',f.inventory_cost'||l_curr_suffix||',0))	begin_inv,
263 		sum(decode(dates.period_type,''C'',f.inventory_cost'||l_curr_suffix||',0))	end_inv,
264 		sum(decode(dates.period_type,''C'',f.mds_cost'||l_curr_suffix||',0))	mds
265 		FROM
266 		(SELECT fii.start_date	START_DATE,
267 			fii.start_date  REPORT_DATE,
268 			''C''		PERIOD_TYPE
269 		 FROM FII_TIME_ENT_PERIOD fii
270 		 WHERE fii.start_date between :ISC_CUR_START and :ISC_CUR_END
271 		UNION ALL
272 		SELECT 	cur.start_date	start_date,
273 			pre.start_date  report_date,
274 			''P''		period_type
275 		FROM
276 		(SELECT fii.start_date	START_DATE,
277 		 rownum			ID
278 		 FROM FII_TIME_ENT_PERIOD fii
279 		 WHERE fii.start_date between :ISC_PRE_START and :ISC_PRE_END
280 		 ORDER by fii.start_date DESC)		pre,
281 		(SELECT fii.start_date	START_DATE,
282 		 rownum			ID
283 		 FROM FII_TIME_ENT_PERIOD fii
284 		 WHERE fii.start_date between :ISC_CUR_START and :ISC_CUR_END
285 		 ORDER by fii.start_date DESC)		cur
286 		WHERE cur.id = pre.id(+))	dates,
287 		ISC_DBI_PM_0001_MV f
288 		WHERE f.start_date = dates.report_date
289 		AND f.period_type_id = 32
290 		AND f.union1_flag <> 0
291 		AND item_cat_flag = :ISC_ITEM_CAT_FLAG
292 		AND f.snapshot_id in (&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT,&PLAN_SNAPSHOT+PLAN_SNAPSHOT+PLAN_SNAPSHOT_2)
293 		'||l_org_where||l_inv_cat_where||l_item_where||
294 		'GROUP BY f.'||l_viewby_id||',dates.start_date,f.snapshot_id) s
295 		GROUP BY s.viewby_id,s.plan_id) c
296 		GROUP BY c.viewby_id)
297 		WHERE (ISC_MEASURE_7 <>0 OR ISC_MEASURE_8 <>0)
298 		OR (comp_mds <> 0 OR comp_avg_inv <>0)) a,';
299 
300   IF l_view_by = 'ORGANIZATION+ORGANIZATION' THEN
301     l_stmt := 'SELECT org.name				VIEWBY,
302 		org.organization_id			VIEWBYID,
303 		null					ISC_ATTRIBUTE_1,
304 		'||l_inner_sql||'
305 		HR_ALL_ORGANIZATION_UNITS_TL org
306 		WHERE org.organization_id = a.viewby_id
307 		AND org.language = :ISC_LANG
308 		AND ((a.rnk between &START_INDEX and &END_INDEX) OR &END_INDEX=-1)
309 		ORDER BY rnk';
310 
311   ELSIF l_view_by = 'ITEM+ENI_ITEM_ORG' THEN
312     l_stmt :='SELECT items.value	VIEWBY,
313 		items.id		VIEWBYID,
314 		items.description	ISC_ATTRIBUTE_1,
315 		'||l_inner_sql||'
316 		ENI_ITEM_ORG_V items
317   		WHERE a.viewby_id = items.id
318 		AND((a.rnk between &START_INDEX and &END_INDEX) OR &END_INDEX=-1)
319 		ORDER BY rnk';
320 
321   ELSIF l_view_by = 'ITEM+ENI_ITEM_INV_CAT' THEN
322     l_stmt := 'SELECT 	ecat.value 	VIEWBY,
323 		ecat.id			VIEWBYID,
324 		null			ISC_ATTRIBUTE_1,
325 		'||l_inner_sql||'
326  		ENI_ITEM_INV_CAT_V 	ecat
327 		WHERE a.viewby_id = ecat.id
328 		AND ((a.rnk between &START_INDEX and &END_INDEX) OR &END_INDEX=-1)
329   		ORDER BY rnk';
330   END IF;
331   END IF;
332 
333   x_custom_sql := l_stmt;
334 
335   l_custom_rec.attribute_name := ':ISC_CUR_START';
336   l_custom_rec.attribute_value := to_char(l_cur_start,'DD/MM/YYYY');
337   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
338   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
339   x_custom_output.EXTEND;
340   x_custom_output(1) := l_custom_rec;
341 
342   l_custom_rec.attribute_name := ':ISC_CUR_END';
343   l_custom_rec.attribute_value := to_char(l_cur_end,'DD/MM/YYYY');
344   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
345   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
346   x_custom_output.EXTEND;
347   x_custom_output(2) := l_custom_rec;
348 
349   l_custom_rec.attribute_name := ':ISC_PRE_START';
350   l_custom_rec.attribute_value := to_char(l_pre_start,'DD/MM/YYYY');
351   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
352   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
353   x_custom_output.EXTEND;
354   x_custom_output(3) := l_custom_rec;
355 
356   l_custom_rec.attribute_name := ':ISC_PRE_END';
357   l_custom_rec.attribute_value := to_char(l_pre_end,'DD/MM/YYYY');
358   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
359   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.DATE_BIND;
360   x_custom_output.EXTEND;
361   x_custom_output(4) := l_custom_rec;
362 
363   l_custom_rec.attribute_name := ':ISC_LANG';
364   l_custom_rec.attribute_value := l_lang;
365   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
366   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
367   x_custom_output.EXTEND;
368   x_custom_output(5) := l_custom_rec;
369 
370   l_custom_rec.attribute_name := ':ISC_ITEM_CAT_FLAG';
371   l_custom_rec.attribute_value := to_char(l_item_cat_flag);
372   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
373   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.INTEGER_BIND;
374   x_custom_output.EXTEND;
375   x_custom_output(6) := l_custom_rec;
376 
377   l_custom_rec.attribute_name := ':ISC_MON_NUM';
378   l_custom_rec.attribute_value := to_char(l_mon_num);
379   l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
380   l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.INTEGER_BIND;
381   x_custom_output.EXTEND;
382   x_custom_output(7) := l_custom_rec;
383 
384 
385 END get_sql;
386 
387 END ISC_DBI_PLAN_INV_TURN_PKG ;
388