[Home] [Help]
PACKAGE BODY: APPS.ISC_DBI_BACKLOG_PDUE_TREND_PKG
Source
1 PACKAGE BODY ISC_DBI_BACKLOG_PDUE_TREND_PKG AS
2 /* $Header: ISCRGA3B.pls 120.0 2005/05/25 17:45:07 appldev noship $ */
3
4
5
6 PROCEDURE Get_Sql ( p_param IN BIS_PMV_PAGE_PARAMETER_TBL,
7 x_custom_sql OUT NOCOPY VARCHAR2,
8 x_custom_output OUT NOCOPY BIS_QUERY_ATTRIBUTES_TBL) IS
9
10 l_stmt VARCHAR2(32000);
11 l_mv1 VARCHAR2(100);
12 l_mv2 VARCHAR2(100);
13 l_mv_book VARCHAR2(100);
14 l_mv_fulf VARCHAR2(100);
15 l_flags_where VARCHAR2(1000);
16 l_flags_where2 VARCHAR2(1000);
17 l_period_type VARCHAR2(10000);
18 l_inv_org VARCHAR2(10000);
19 l_inv_org_where VARCHAR2(10000);
20 l_prod VARCHAR2(10000);
21 l_prod_where VARCHAR2(10000);
22 l_prod_cat VARCHAR2(10000);
23 l_prod_cat_from VARCHAR2(10000);
24 l_prod_cat_where VARCHAR2(10000);
25 l_cust VARCHAR2(10000);
26 l_cust_where VARCHAR2(10000);
27 l_curr VARCHAR2(10000);
28 l_curr_g VARCHAR2(15);
29 l_curr_g1 VARCHAR2(15);
30 l_curr_suffix VARCHAR2(120);
31 l_item_cat_flag NUMBER;
32 l_cust_flag NUMBER;
33
34 l_custom_rec BIS_QUERY_ATTRIBUTES;
35
36 BEGIN
37
38 l_curr_g := '''FII_GLOBAL1''';
39 l_curr_g1 := '''FII_GLOBAL2''';
40
41 FOR i IN 1..p_param.COUNT
42 LOOP
43 IF (p_param(i).parameter_name = 'PERIOD_TYPE')
44 THEN l_period_type := p_param(i).parameter_value;
45 END IF;
46
47 IF (p_param(i).parameter_name = 'CURRENCY+FII_CURRENCIES')
48 THEN l_curr := p_param(i).parameter_id;
49 END IF;
50
51 IF (p_param(i).parameter_name = 'ORGANIZATION+ORGANIZATION')
52 THEN l_inv_org := p_param(i).parameter_value;
53 END IF;
54
55 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_VBH_CAT')
56 THEN l_prod_cat := p_param(i).parameter_value;
57 END IF;
58
59 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_ORG')
60 THEN l_prod := p_param(i).parameter_value;
61 END IF;
62
63 IF (p_param(i).parameter_name = 'CUSTOMER+FII_CUSTOMERS')
64 THEN l_cust := p_param(i).parameter_value;
65 END IF;
66 END LOOP;
67
68 IF (l_curr = l_curr_g)
69 THEN l_curr_suffix := 'g';
70 ELSIF (l_curr = l_curr_g1)
71 THEN l_curr_suffix :='g1';
72 ELSE l_curr_suffix := 'f';
73 END IF;
74
75 IF (l_inv_org IS NULL OR l_inv_org = 'All')
76 THEN l_inv_org_where := '
77 WHERE (EXISTS
78 (SELECT 1
79 FROM org_access o
80 WHERE o.responsibility_id = fnd_global.resp_id
81 AND o.resp_application_id = fnd_global.resp_appl_id
82 AND o.organization_id = inv_org)
83 OR EXISTS
84 (SELECT 1
85 FROM mtl_parameters org
86 WHERE org.organization_id = inv_org
87 AND NOT EXISTS
88 (SELECT 1
89 FROM org_access ora
90 WHERE org.organization_id = ora.organization_id)))';
91 ELSE l_inv_org_where := '
92 WHERE inv_org = &ORGANIZATION+ORGANIZATION';
93 END IF;
94
95 IF (l_prod_cat IS NULL OR l_prod_cat = 'All')
96 THEN
97 l_prod_cat_from := '';
98 l_prod_cat_where := '';
99 ELSE
100 IF (l_prod IS NULL OR l_prod = 'All')
101 THEN
102 l_prod_cat_from := ',
103 ENI_DENORM_HIERARCHIES eni_cat,
104 MTL_DEFAULT_CATEGORY_SETS mdcs';
105 l_prod_cat_where := '
106 AND fact.item_category_id = eni_cat.child_id
107 AND eni_cat.parent_id IN (&ITEM+ENI_ITEM_VBH_CAT)
108 AND eni_cat.dbi_flag = ''Y''
109 AND eni_cat.object_type = ''CATEGORY_SET''
110 AND eni_cat.object_id = mdcs.category_set_id
111 AND mdcs.functional_area_id = 11';
112 ELSE
113 l_prod_cat_from := '';
114 l_prod_cat_where := '';
115 END IF;
116 END IF;
117
118 IF (l_prod IS NULL OR l_prod = 'All')
119 THEN l_prod_where := '';
120 ELSE l_prod_where := '
121 AND fact.item_id IN (&ITEM+ENI_ITEM_ORG)';
122 END IF;
123
124 IF (l_cust IS NULL OR l_cust = 'All')
125 THEN
126 l_cust_where := '';
127 l_cust_flag := 1;
128 ELSE
129 l_cust_where := '
130 AND fact.customer_id in (&CUSTOMER+FII_CUSTOMERS)';
131 l_cust_flag := 0;
132 END IF;
133
134 IF (l_prod IS NULL OR l_prod = 'All')
135 THEN
136 IF (l_prod_cat IS NULL OR l_prod_cat = 'All')
137 THEN l_item_cat_flag := 3; -- category
138 ELSE l_item_cat_flag := 1; -- all
139 END IF;
140 ELSE
141 l_item_cat_flag := 0; -- product
142 END IF;
143
144 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
145 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
146
147 IF ((l_prod IS NULL OR l_prod = 'All') AND
148 (l_cust IS NULL OR l_cust = 'All'))
149 THEN
150 IF (l_prod_cat IS NULL OR l_prod_cat = '' OR l_prod_cat = 'All')
151 THEN
152 l_prod_cat_from := '';
153 l_prod_cat_where := '
154 AND fact.top_node_flag = ''Y''';
155 ELSE
156 l_prod_cat_from := '';
157 l_prod_cat_where := '
158 AND fact.parent_id = &ITEM+ENI_ITEM_VBH_CAT';
159 END IF;
160 l_mv1 := 'ISC_DBI_CFM_001_MV';
161 l_mv_book := 'ISC_DBI_CFM_009_MV';
162 l_mv_fulf := 'ISC_DBI_CFM_011_MV';
163 l_mv2 := 'ISC_DBI_CFM_012_MV';
164 l_flags_where := '';
165 l_flags_where2 := '
166 AND fact.inv_org_flag = 0';
167 ELSE
168 l_mv1 := 'ISC_DBI_CFM_010_MV';
169 l_mv_book := 'ISC_DBI_CFM_000_MV';
170 l_mv_fulf := 'ISC_DBI_CFM_002_MV';
171 l_mv2 := 'ISC_DBI_CFM_008_MV';
172 l_flags_where := '
173 AND fact.item_cat_flag = :ISC_ITEM_CAT_FLAG
174 AND fact.customer_flag = :ISC_CUST_FLAG';
175 l_flags_where2 := '
176 AND fact.item_cat_flag = :ISC_ITEM_CAT_FLAG
177 AND fact.customer_flag = :ISC_CUST_FLAG';
178 END IF;
179
180 l_stmt := '
181 SELECT fii.name VIEWBY,
182 s.prev_bklg_value ISC_MEASURE_1, -- bklg prior
183 s.curr_bklg_value ISC_MEASURE_2, -- bklg
184 (s.curr_bklg_value - s.prev_bklg_value)
185 / decode(s.prev_bklg_value, 0, NULL,
186 abs(s.prev_bklg_value)) * 100 ISC_MEASURE_3, -- bklg change
187 s.prev_pdue_value ISC_MEASURE_4, -- pdue prior
188 s.curr_pdue_value ISC_MEASURE_5, -- pdue
189 (s.curr_pdue_value - s.prev_pdue_value)
190 / decode(s.prev_pdue_value, 0, NULL,
191 abs(s.prev_pdue_value)) * 100 ISC_MEASURE_6 -- pdue change
192 FROM (SELECT start_date START_DATE,
193 sum(c_y_bklg) + sum(c_book_ytd)
194 - sum(c_fulf_ytd) CURR_BKLG_VALUE,
195 sum(p_y_bklg) + sum(p_book_ytd)
196 - sum(p_fulf_ytd) PREV_BKLG_VALUE,
197 sum(curr_pdue_value) CURR_PDUE_VALUE,
198 sum(prev_pdue_value) PREV_PDUE_VALUE
199 FROM /* Compute year backlog balance */
200 (SELECT dates.start_date START_DATE,
201 fact.inv_org_id INV_ORG,
202 decode(dates.period, ''C'',
203 fact.bklg_amt_'||l_curr_suffix||', 0) C_Y_BKLG,
204 decode(dates.period, ''P'',
205 fact.bklg_amt_'||l_curr_suffix||', 0) P_Y_BKLG,
206 0 C_BOOK_YTD,
207 0 P_BOOK_YTD,
208 0 C_FULF_YTD,
209 0 P_FULF_YTD,
210 NULL CURR_PDUE_VALUE,
211 NULL PREV_PDUE_VALUE
212 FROM (SELECT fii.start_date START_DATE,
213 ''C'' PERIOD,
214 least(fii.end_date, &BIS_CURRENT_ASOF_DATE) REPORT_DATE
215 FROM '||l_period_type||' fii
216 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
217 AND &BIS_CURRENT_ASOF_DATE
218 UNION ALL
219 SELECT p2.start_date START_DATE,
220 ''P'' PERIOD,
221 p1.report_date REPORT_DATE
222 FROM (SELECT least(fii.end_date, &BIS_PREVIOUS_ASOF_DATE) REPORT_DATE,
223 rownum ID
224 FROM '||l_period_type||' fii
225 WHERE fii.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE
226 AND &BIS_PREVIOUS_ASOF_DATE
227 ORDER BY fii.start_date DESC) p1,
228 (SELECT fii.start_date START_DATE,
229 rownum ID
230 FROM '||l_period_type||' fii
231 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
232 AND &BIS_CURRENT_ASOF_DATE
233 ORDER BY fii.start_date DESC) p2
234 WHERE p1.id(+) = p2.id) dates,
235 '||l_mv1||' fact,
236 FII_TIME_DAY day'||l_prod_cat_from||'
237 WHERE day.report_date = dates.report_date
238 AND day.ent_year_start_date = fact.time_snapshot_date_id'
239 ||l_flags_where
240 ||l_prod_cat_where
241 ||l_prod_where
242 ||l_cust_where||'
243 UNION ALL /* Computer YTD net Booking */
244 SELECT dates.start_date START_DATE,
245 fact.inv_org_id INV_ORG,
246 0 C_Y_BKLG,
247 0 P_Y_BKLG,
248 decode(dates.period, ''C'',
249 fact.booked_amt2_'||l_curr_suffix||', 0) C_BOOK_YTD,
250 decode(dates.period, ''P'',
251 fact.booked_amt2_'||l_curr_suffix||', 0) P_BOOK_YTD,
252 0 C_FULF_YTD,
253 0 P_FULF_YTD,
254 NULL CURR_PDUE_VALUE,
255 NULL PREV_PDUE_VALUE
256 FROM (SELECT fii.start_date START_DATE,
257 ''C'' PERIOD,
258 least(fii.end_date, &BIS_CURRENT_ASOF_DATE) REPORT_DATE
259 FROM '||l_period_type||' fii
260 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
261 AND &BIS_CURRENT_ASOF_DATE
262 UNION ALL
263 SELECT p2.start_date START_DATE,
264 ''P'' PERIOD,
265 p1.report_date REPORT_DATE
266 FROM (SELECT least(fii.end_date, &BIS_PREVIOUS_ASOF_DATE) REPORT_DATE,
267 rownum ID
268 FROM '||l_period_type||' fii
269 WHERE fii.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE
270 AND &BIS_PREVIOUS_ASOF_DATE
271 ORDER BY fii.start_date DESC) p1,
272 (SELECT fii.start_date START_DATE,
273 rownum ID
274 FROM '||l_period_type||' fii
275 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
276 AND &BIS_CURRENT_ASOF_DATE
277 ORDER BY fii.start_date DESC) p2
278 WHERE p1.id(+) = p2.id) dates,
279 '||l_mv_book||' fact,
280 FII_TIME_RPT_STRUCT_V cal'||l_prod_cat_from||'
281 WHERE cal.report_date = dates.report_date
282 AND fact.time_id = cal.time_id
283 AND fact.period_type_id = cal.period_type_id
284 AND bitand(cal.record_type_id, 119) = cal.record_type_id'
285 ||l_flags_where2
286 ||l_prod_cat_where
287 ||l_prod_where
288 ||l_cust_where||'
289 UNION ALL /* Computer YTD net fulfillment */
290 SELECT dates.start_date START_DATE,
291 fact.inv_org_id INV_ORG,
292 0 C_Y_BKLG,
293 0 P_Y_BKLG,
294 0 C_BOOK_YTD,
295 0 P_BOOK_YTD,
296 decode(dates.period, ''C'',
297 fact.booked_amt_'||l_curr_suffix||', 0) C_FULF_YTD,
298 decode(dates.period, ''P'',
299 fact.booked_amt_'||l_curr_suffix||', 0) P_FULF_YTD,
300 NULL CURR_PDUE_VALUE,
301 NULL PREV_PDUE_VALUE
302 FROM (SELECT fii.start_date START_DATE,
303 ''C'' PERIOD,
304 least(fii.end_date, &BIS_CURRENT_ASOF_DATE) REPORT_DATE
305 FROM '||l_period_type||' fii
306 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
307 AND &BIS_CURRENT_ASOF_DATE
308 UNION ALL
309 SELECT p2.start_date START_DATE,
310 ''P'' PERIOD,
311 p1.report_date REPORT_DATE
312 FROM (SELECT least(fii.end_date, &BIS_PREVIOUS_ASOF_DATE) REPORT_DATE,
313 rownum ID
314 FROM '||l_period_type||' fii
315 WHERE fii.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE
316 AND &BIS_PREVIOUS_ASOF_DATE
317 ORDER BY fii.start_date DESC) p1,
318 (SELECT fii.start_date START_DATE,
319 rownum ID
320 FROM '||l_period_type||' fii
321 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
322 AND &BIS_CURRENT_ASOF_DATE
323 ORDER BY fii.start_date DESC) p2
324 WHERE p1.id(+) = p2.id) dates,
325 '||l_mv_fulf||' fact,
326 FII_TIME_RPT_STRUCT_V cal'||l_prod_cat_from||'
327 WHERE cal.report_date = dates.report_date
328 AND fact.time_id = cal.time_id
329 AND fact.period_type_id = cal.period_type_id
330 AND bitand(cal.record_type_id, 119) = cal.record_type_id'
331 ||l_flags_where2
332 ||l_prod_cat_where
333 ||l_prod_where
334 ||l_cust_where||'
335 UNION ALL
336 SELECT dates.start_date START_DATE,
337 fact.inv_org_id INV_ORG,
338 0 C_Y_BKLG,
339 0 P_Y_BKLG,
340 0 C_BOOK_YTD,
341 0 P_BOOK_YTD,
342 0 C_FULF_YTD,
343 0 P_FULF_YTD,
344 decode(fact.time_snapshot_date_id, dates.curr_day,
345 fact.pdue_amt_'||l_curr_suffix||', NULL) CURR_PDUE_VALUE,
346 decode(fact.time_snapshot_date_id, dates.prev_day,
347 fact.pdue_amt_'||l_curr_suffix||', NULL) PREV_PDUE_VALUE
348 FROM (SELECT curr.start_date START_DATE,
349 curr.day CURR_DAY,
350 prev.day PREV_DAY
351 FROM (SELECT start_date,
352 day,
353 rownum ID
354 FROM
355 (SELECT fii.start_date START_DATE,
356 max(fact.time_snapshot_date_id) DAY
357 FROM '||l_period_type||' fii,
358 '||l_mv2||' fact
359 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
360 AND &BIS_CURRENT_ASOF_DATE
361 AND fact.time_snapshot_date_id (+) >= fii.start_date
362 AND fact.time_snapshot_date_id (+) <= fii.end_date
363 AND fact.time_snapshot_date_id (+) <= &BIS_CURRENT_ASOF_DATE
364 GROUP BY fii.start_date)
365 ORDER BY start_date DESC) curr,
366 (SELECT start_date,
367 day,
368 rownum ID
369 FROM
370 (SELECT fii.start_date START_DATE,
371 max(fact.time_snapshot_date_id) DAY
372 FROM '||l_period_type||' fii,
373 '||l_mv2||' fact
374 WHERE fii.start_date BETWEEN &BIS_PREVIOUS_REPORT_START_DATE
375 AND &BIS_PREVIOUS_ASOF_DATE
376 AND fact.time_snapshot_date_id (+) >= fii.start_date
377 AND fact.time_snapshot_date_id (+) <= fii.end_date
378 AND fact.time_snapshot_date_id (+) <= &BIS_PREVIOUS_ASOF_DATE
379 GROUP BY fii.start_date)
385 ||l_flags_where
380 ORDER BY start_date DESC) prev
381 WHERE curr.id = prev.id(+)) dates,
382 '||l_mv2||' fact'||l_prod_cat_from||'
383 WHERE fact.time_snapshot_date_id IN (dates.curr_day, dates.prev_day)
384 AND fact.late_schedule_flag = 1'
386 ||l_prod_cat_where
387 ||l_prod_where
388 ||l_cust_where||')'
389 ||l_inv_org_where||'
390 GROUP BY start_date) s,
391 '||l_period_type||' fii
392 WHERE fii.start_date BETWEEN &BIS_CURRENT_REPORT_START_DATE
393 AND &BIS_CURRENT_ASOF_DATE
394 AND fii.start_date = s.start_date(+)
395 ORDER BY fii.start_date';
396
397 x_custom_sql := l_stmt;
398
399 l_custom_rec.attribute_name := BIS_PMV_PARAMETERS_PUB.View_By_Value;
400 l_custom_rec.attribute_value := 'TIME+'||l_period_type;
401 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.View_By_Type;
402 x_custom_output.extend;
403 x_custom_output(1) := l_custom_rec;
404
405 l_custom_rec.attribute_name := ':ISC_ITEM_CAT_FLAG';
406 l_custom_rec.attribute_value := to_char(l_item_cat_flag);
407 l_custom_rec.attribute_type := BIS_PMV_PARAMETERS_PUB.Bind_Type;
408 l_custom_rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.Integer_Bind;
409 x_custom_output.extend;
410 x_custom_output(2) := l_custom_rec;
411
412 l_custom_rec.attribute_name := ':ISC_CUST_FLAG';
413 l_custom_rec.attribute_value := to_char(l_cust_flag);
414 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
415 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.integer_bind;
416 x_custom_output.extend;
417 x_custom_output(3) := l_custom_rec;
418
419 END Get_Sql;
420
421 END ISC_DBI_BACKLOG_PDUE_TREND_PKG;