[Home] [Help]
PACKAGE BODY: APPS.ISC_DBI_PDUE_SCH_DETAIL_PKG
Source
1 PACKAGE BODY ISC_DBI_PDUE_SCH_DETAIL_PKG AS
2 /* $Header: ISCRGA5B.pls 120.1 2005/10/18 12:49:04 hprathur 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_measures VARCHAR2(10000);
11 l_period_type VARCHAR2(10000);
12 l_inv_org VARCHAR2(10000);
13 l_inv_org_where VARCHAR2(10000);
14 l_prod VARCHAR2(10000);
15 l_prod_where VARCHAR2(10000);
16 l_prod_cat VARCHAR2(10000);
17 l_prod_cat_from VARCHAR2(10000);
18 l_prod_cat_where VARCHAR2(10000);
19 l_cust VARCHAR2(10000);
20 l_cust_where VARCHAR2(10000);
21 l_curr VARCHAR2(10000);
22 l_curr_g VARCHAR2(15) := '''FII_GLOBAL1''';
23 l_curr_g1 VARCHAR2(15) := '''FII_GLOBAL2''';
24 l_curr_suffix VARCHAR2(120);
25 l_bucket VARCHAR2(120);
26 l_low NUMBER;
27 l_high NUMBER;
28 l_bucket_low_where VARCHAR2(10000);
29 l_bucket_high_where VARCHAR2(10000);
30 l_snapshot_taken BOOLEAN := TRUE;
31 l_as_of_date DATE;
32 l_effective_start_date DATE;
33 l_cursor_id NUMBER;
34 l_dummy NUMBER;
35 l_lang VARCHAR2(10);
36 l_bucket_rec bis_bucket_pub.BIS_BUCKET_REC_TYPE;
37 l_error_tbl bis_utilities_pub.ERROR_TBL_TYPE;
38 l_status VARCHAR2(10000);
39 l_custom_rec BIS_QUERY_ATTRIBUTES;
40
41 BEGIN
42
43 l_lang := userenv('LANG');
44
45 FOR i IN 1..p_param.COUNT
46 LOOP
47 IF (p_param(i).parameter_name = 'AS_OF_DATE')
48 THEN l_as_of_date := to_date(p_param(i).parameter_value, 'DD-MM-YYYY');
49 END IF;
50
51 IF (p_param(i).parameter_name = 'PERIOD_TYPE')
52 THEN l_period_type := p_param(i).parameter_value;
53 END IF;
54
55 IF (p_param(i).parameter_name = 'CURRENCY+FII_CURRENCIES')
56 THEN l_curr := p_param(i).parameter_id;
57 END IF;
58
59 IF (p_param(i).parameter_name = 'ORGANIZATION+ORGANIZATION')
60 THEN l_inv_org := p_param(i).parameter_value;
61 END IF;
62
63 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_VBH_CAT')
64 THEN l_prod_cat := p_param(i).parameter_value;
65 END IF;
66
67 IF (p_param(i).parameter_name = 'ITEM+ENI_ITEM_ORG')
68 THEN l_prod := p_param(i).parameter_value;
69 END IF;
70
71 IF (p_param(i).parameter_name = 'CUSTOMER+FII_CUSTOMERS')
72 THEN l_cust := p_param(i).parameter_value;
73 END IF;
74
75 IF (p_param(i).parameter_name = 'ISC_ATTRIBUTE_6')
76 THEN l_bucket := p_param(i).parameter_id;
77 END IF;
78 END LOOP;
79
80 IF (l_curr = l_curr_g)
81 THEN l_curr_suffix := 'g';
82 ELSIF (l_curr = l_curr_g1)
83 THEN l_curr_suffix :='g1';
84 ELSE l_curr_suffix := 'f';
85 END IF;
86
87 IF (l_inv_org IS NULL OR l_inv_org = '' OR l_inv_org = 'All')
88 THEN l_inv_org_where := '
89 AND (EXISTS
90 (SELECT 1
91 FROM org_access o
92 WHERE o.responsibility_id = fnd_global.resp_id
93 AND o.resp_application_id = fnd_global.resp_appl_id
94 AND o.organization_id = fact.inv_org_id)
95 OR EXISTS
96 (SELECT 1
97 FROM mtl_parameters org
98 WHERE org.organization_id = fact.inv_org_id
99 AND NOT EXISTS
100 (SELECT 1
101 FROM org_access ora
102 WHERE org.organization_id = ora.organization_id)))';
103 ELSE l_inv_org_where := '
104 AND fact.inv_org_id = &ORGANIZATION+ORGANIZATION';
105 END IF;
106
107 IF (l_prod_cat IS NULL OR l_prod_cat = '' OR l_prod_cat = 'All')
108 THEN
109 l_prod_cat_from := '';
110 l_prod_cat_where := '';
111 ELSE
112 l_prod_cat_from := ',
113 ENI_DENORM_HIERARCHIES eni_cat,
114 MTL_DEFAULT_CATEGORY_SETS mdcs';
115 l_prod_cat_where := '
116 AND fact.item_category_id = eni_cat.child_id
117 AND eni_cat.parent_id IN (&ITEM+ENI_ITEM_VBH_CAT)
118 AND eni_cat.dbi_flag = ''Y''
119 AND eni_cat.object_type = ''CATEGORY_SET''
120 AND eni_cat.object_id = mdcs.category_set_id
121 AND mdcs.functional_area_id = 11';
122 END IF;
123
124 IF (l_prod IS NULL OR l_prod = '' OR l_prod = 'All')
125 THEN l_prod_where := '';
126 ELSE l_prod_where := '
127 AND fact.item_id IN (&ITEM+ENI_ITEM_ORG)';
128 END IF;
129
130 IF (l_cust IS NULL OR l_cust = '' OR l_cust = 'All')
131 THEN l_cust_where := '';
132 ELSE l_cust_where := '
133 AND fact.customer_id in (&CUSTOMER+FII_CUSTOMERS)';
134 END IF;
135
136 -- Retrieve record to get bucket ranges
137 bis_bucket_pub.RETRIEVE_BIS_BUCKET('ISC_DBI_PDUE_AGING', l_bucket_rec, l_status, l_error_tbl);
138
139 IF (l_bucket IS NULL OR l_bucket = '')
140 THEN l_low := NULL; l_high := NULL;
141 ELSIF (l_bucket = 1)
142 THEN l_low := l_bucket_rec.range1_low; l_high := l_bucket_rec.range1_high;
143 ELSIF (l_bucket = 2)
144 THEN l_low := l_bucket_rec.range2_low; l_high := l_bucket_rec.range2_high;
145 ELSIF (l_bucket = 3)
146 THEN l_low := l_bucket_rec.range3_low; l_high := l_bucket_rec.range3_high;
147 ELSIF (l_bucket = 4)
148 THEN l_low := l_bucket_rec.range4_low; l_high := l_bucket_rec.range4_high;
149 ELSIF (l_bucket = 5)
150 THEN l_low := l_bucket_rec.range5_low; l_high := l_bucket_rec.range5_high;
151 ELSIF (l_bucket = 6)
152 THEN l_low := l_bucket_rec.range6_low; l_high := l_bucket_rec.range6_high;
153 ELSIF (l_bucket = 7)
154 THEN l_low := l_bucket_rec.range7_low; l_high := l_bucket_rec.range7_high;
155 ELSIF (l_bucket = 8)
156 THEN l_low := l_bucket_rec.range8_low; l_high := l_bucket_rec.range8_high;
157 ELSIF (l_bucket = 9)
158 THEN l_low := l_bucket_rec.range9_low; l_high := l_bucket_rec.range9_high;
159 ELSE
160 l_low := l_bucket_rec.range10_low; l_high := l_bucket_rec.range10_high;
161 END IF;
162
163 IF (l_low IS NULL)
164 THEN l_bucket_low_where := '';
165 ELSE l_bucket_low_where := '
166 AND fact.days_late >= :ISC_LOW';
167 END IF;
168
169 IF (l_high IS NULL)
170 THEN l_bucket_high_where := '';
171 ELSE l_bucket_high_where := '
172 AND fact.days_late < :ISC_HIGH';
173 END IF;
174
175 BEGIN
176
177 IF l_period_type = 'FII_TIME_ENT_YEAR'
178 THEN l_effective_start_date := FII_TIME_API.Ent_Cyr_Start(l_as_of_date);
179 ELSIF l_period_type = 'FII_TIME_ENT_QTR'
180 THEN l_effective_start_date := FII_TIME_API.Ent_Cqtr_Start(l_as_of_date);
181 ELSIF l_period_type = 'FII_TIME_ENT_PERIOD'
182 THEN l_effective_start_date := FII_TIME_API.Ent_Cper_Start(l_as_of_date);
183 ELSE -- l_period_type = 'FII_TIME_WEEK'
184 l_effective_start_date := FII_TIME_API.Cwk_Start(l_as_of_date);
185 END IF;
186
187 l_cursor_id := DBMS_SQL.Open_Cursor;
188 l_stmt := '
189 SELECT 1
190 FROM ISC_DBI_CFM_013_MV fact
191 WHERE fact.time_snapshot_date_id BETWEEN :l_effective_start_date
192 AND :l_as_of_date
193 AND rownum = 1 ';
194
195 DBMS_SQL.Parse(l_cursor_id,l_stmt,DBMS_SQL.V7);
196 DBMS_SQL.Bind_Variable(l_cursor_id,':l_effective_start_date',l_effective_start_date);
197 DBMS_SQL.Bind_Variable(l_cursor_id,':l_as_of_date',l_as_of_date);
198
199 l_dummy := DBMS_SQL.Execute(l_cursor_id);
200
201 IF DBMS_SQL.Fetch_Rows(l_cursor_id) = 0 -- no snapshot taken
202 THEN l_snapshot_taken := FALSE;
203 ELSE l_snapshot_taken := TRUE;
204 END IF;
205
206 DBMS_SQL.Close_Cursor(l_cursor_id);
207
208 EXCEPTION WHEN OTHERS
209 THEN
210 DBMS_SQL.Close_Cursor(l_cursor_id);
211 l_snapshot_taken := TRUE;
212
213 END;
214
215 l_custom_rec := BIS_PMV_PARAMETERS_PUB.Initialize_Query_Type;
216 x_custom_output := BIS_QUERY_ATTRIBUTES_TBL();
217
218 l_measures := 'ISC_ATTRIBUTE_2, ISC_ATTRIBUTE_3, ISC_ATTRIBUTE_5, ISC_ATTRIBUTE_7,
219 ISC_MEASURE_1, ISC_MEASURE_2, ISC_MEASURE_3';
220
221 IF NOT (l_snapshot_taken)
222 THEN l_stmt := '
223 SELECT 0 ISC_ATTRIBUTE_2,
224 0 ISC_ATTRIBUTE_3,
225 0 ISC_ATTRIBUTE_8,
226 0 ISC_ATTRIBUTE_4,
227 null ISC_ATTRIBUTE_5,
228 0 ISC_ATTRIBUTE_7,
229 0 ISC_MEASURE_1,
230 0 ISC_MEASURE_2,
231 0 ISC_MEASURE_3
232 FROM dual
233 WHERE 1 = 2 -- no snapshot taken in the current period';
234 ELSE
235 l_stmt := '
236 SELECT
237 ISC_ATTRIBUTE_2,
238 ISC_ATTRIBUTE_3,
239 org.name ISC_ATTRIBUTE_8,
240 cust.value ISC_ATTRIBUTE_4,
241 ISC_ATTRIBUTE_5,
242 ISC_ATTRIBUTE_7,
243 ISC_MEASURE_1, ISC_MEASURE_2, ISC_MEASURE_3
244 FROM
245 (SELECT (rank() over (&ORDER_BY_CLAUSE, isc_attribute_7, isc_attribute_3)) - 1 rnk,
246 customer_id,
247 inv_org_id,
248 '||l_measures||'
249 FROM
250 (SELECT fact.customer_id CUSTOMER_ID,
251 fact.inv_org_id INV_ORG_ID,
252 fact.order_number ISC_ATTRIBUTE_2, -- order number
253 fact.line_number ISC_ATTRIBUTE_3, -- line number
254 fact.time_booked_date_id ISC_ATTRIBUTE_5, -- booked date
255 fact.header_id ISC_ATTRIBUTE_7, -- header_id
256 fact.pdue_amt_'||l_curr_suffix||' ISC_MEASURE_1, -- pdue
257 fact.days_late ISC_MEASURE_2, -- days late
258 sum(fact.pdue_amt_'||l_curr_suffix||') over () ISC_MEASURE_3 -- gd total pdue
259 FROM ISC_DBI_CFM_013_MV fact,
260 (SELECT max(fact.time_snapshot_date_id) day
261 FROM ISC_DBI_CFM_013_MV fact
262 WHERE fact.time_snapshot_date_id BETWEEN &BIS_CURRENT_EFFECTIVE_START_DATE
263 AND &BIS_CURRENT_ASOF_DATE) snap'||l_prod_cat_from||'
264 WHERE fact.time_snapshot_date_id = snap.day
265 AND fact.late_schedule_flag = 1'
266 ||l_inv_org_where
267 ||l_prod_cat_where
268 ||l_prod_where
269 ||l_cust_where
270 ||l_bucket_low_where
271 ||l_bucket_high_where||')) a,
272 FII_CUSTOMERS_V cust,
273 HR_ALL_ORGANIZATION_UNITS_TL org
274 WHERE a.customer_id = cust.id
275 AND a.inv_org_id = org.organization_id
276 AND org.language = :ISC_LANG
277 AND ((a.rnk between &START_INDEX and &END_INDEX) OR (&END_INDEX = -1))
278 ORDER BY rnk';
279 END IF;
280
281 x_custom_sql := l_stmt;
282
283 l_custom_rec.attribute_name := ':ISC_LOW';
284 l_custom_rec.attribute_value := to_char(l_low);
285 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
286 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.integer_bind;
287 x_custom_output.extend;
288 x_custom_output(1) := l_custom_rec;
289
290 l_custom_rec.attribute_name := ':ISC_HIGH';
291 l_custom_rec.attribute_value := to_char(l_high);
292 l_custom_Rec.attribute_type := bis_pmv_parameters_pub.bind_type;
293 l_custom_rec.attribute_data_type := bis_pmv_parameters_pub.integer_bind;
294 x_custom_output.extend;
295 x_custom_output(2) := l_custom_rec;
296
297 l_custom_rec.attribute_name := ':ISC_LANG';
298 l_custom_rec.attribute_value := l_lang;
299 l_custom_Rec.attribute_type := BIS_PMV_PARAMETERS_PUB.BIND_TYPE;
300 l_custom_Rec.attribute_data_type := BIS_PMV_PARAMETERS_PUB.VARCHAR2_BIND;
301 x_custom_output.EXTEND;
302 x_custom_output(3) := l_custom_rec;
303
304 END Get_Sql;
305
306 END ISC_DBI_PDUE_SCH_DETAIL_PKG;