[Home] [Help]
PACKAGE BODY: APPS.OKC_SBCR_DT_PKG
Source
1 PACKAGE BODY OKC_SBCR_DT_PKG AS
2 /* $Header: OKCSBCRDTB.pls 120.0.12020000.3 2013/03/01 08:06:03 nbingi noship $ */
3
4 FUNCTION get_uda_attr_desc_sql(p_pk1_value NUMBER,
5 p_data_type VARCHAR2,
6 p_appl_col_name VARCHAR2,
7 p_end_user_col_name VARCHAR2,
8 p_attr_group VARCHAR2,
9 p_attr_id NUMBER) RETURN VARCHAR2 IS
10
11 p_application_id number := 510;
12 p_attr_group_type varchar2(200);
13 p_object_name varchar2(200);
14 p_pk1_column_name varchar2(200);
15 l_sql varchar2(1000);
16
17 BEGIN
18 p_attr_group_type := 'OKC_REP_CONTRACT_HDR_EXT_ATTRS';
19 p_object_name := 'OKC_REP_CONTRACTS_ALL_EXT_B';
20 p_pk1_column_name := 'CONTRACT_ID';
21
22 IF (p_data_type = 'C' or p_data_type = 'A' ) then
23 l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
24 p_application_id || ',' || ' null, ' ||
25 p_appl_col_name|| ', null , ''' ||
26 p_end_user_col_name|| ''',''' ||
27 p_attr_group_type || ''',''' ||
28 p_attr_group|| ''',' ||
29 p_attr_id || ',''' ||
30 p_object_name || ''',''' ||
31 p_pk1_column_name || ''',' ||
32 p_pk1_value || ') as ' || p_end_user_col_name || '_DESC' ;
33 ELSIF p_data_type = 'N' then
34 l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
35 p_application_id || ',' || ' null, null, ' ||
36 p_appl_col_name|| ', ''' ||
37 p_end_user_col_name|| ''',''' ||
38 p_attr_group_type || ''',''' ||
39 p_attr_group || ''',' ||
40 p_attr_id || ',''' ||
41 p_object_name || ''',''' ||
42 p_pk1_column_name || ''',' ||
43 p_pk1_value || ') as ' || p_end_user_col_name || '_DESC' ;
44 ELSIF (p_data_type = 'X' or p_data_type = 'Y') then
45 l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
46 p_application_id || ',' || p_appl_col_name ||
47 ' , null, null, ''' ||
48 p_end_user_col_name|| ''',''' ||
49 p_attr_group_type || ''',''' ||
50 p_attr_group || ''',' ||
51 p_attr_id || ',''' ||
52 p_object_name || ''',''' ||
53 p_pk1_column_name || ''',' ||
54 p_pk1_value || ') as ' || p_end_user_col_name || '_DESC ' ;
55 END IF;
56
57 RETURN(l_sql);
58 END get_uda_attr_desc_sql;
59
60 FUNCTION get_uda_single_attr_xml(p_contract_id NUMBER) RETURN XMLType IS
61
62 CURSOR C_ATTR_GRP IS
63 SELECT ag.descriptive_flex_context_code attr_group,
64 ag.attr_group_id attr_group_id,
65 ag.descriptive_flexfield_name desc_flexfld_name
66 FROM ego_fnd_dsc_flx_ctx_ext ag
67 WHERE ag.attr_group_id IN (SELECT DISTINCT ext.attr_group_id FROM okc_rep_contracts_all_ext_b ext WHERE ext.contract_id = p_contract_id)
68 AND ag.multi_row = 'N';
69
70 CURSOR C_ATTR(p_attr_group VARCHAR2, p_desc_flexfld_name VARCHAR2) IS
71 SELECT efdfce.attr_id,
72 efdfce.application_column_name,
73 fcu.end_user_column_name,
74 fcu.flex_value_set_id,
75 efdfce.data_type
76 FROM ego_fnd_df_col_usgs_ext efdfce ,
77 fnd_descr_flex_column_usages fcu
78 WHERE efdfce.descriptive_flexfield_name = p_desc_flexfld_name
79 AND efdfce.descriptive_flex_context_code = p_attr_group
80 AND fcu.descriptive_flex_context_code = efdfce.descriptive_flex_context_code
81 AND fcu.descriptive_flexfield_name = efdfce.descriptive_flexfield_name
82 AND fcu.application_column_name = efdfce.application_column_name
83 AND fcu.display_flag <> 'H';
84
85 l_sql VARCHAR2(32767);
86 l_op VARCHAR2(32767);
87 l_ctr NUMBER;
88 l_uda_xml XMLTYPE;
89
90 BEGIN
91
92 FOR rec IN C_ATTR_GRP LOOP
93 IF l_sql IS NOT NULL THEN
94 l_sql := l_sql || ',' || '(SELECT XMLELEMENT("' || rec.attr_group || '", XMLFOREST(' ;
95 ELSE
96 l_sql := '(SELECT XMLELEMENT("' || rec.attr_group || '", XMLFOREST(';
97 END if;
98
99 l_ctr := 0 ;
100 FOR attr IN C_ATTR(rec.attr_group, rec.desc_flexfld_name) LOOP
101 IF l_ctr = 0 then
102 l_sql := l_sql || attr.application_column_name || ' as ' || attr.end_user_column_name;
103 ELSE
104 l_sql := l_sql || ',' || attr.application_column_name || ' as ' || attr.end_user_column_name;
105 END if;
106
107 IF attr.flex_value_set_id IS NOT NULL THEN
108 l_sql := l_sql || ',' || get_uda_attr_desc_sql(p_contract_id,
109 attr.data_type,
110 attr.application_column_name,
111 attr.end_user_column_name,
112 rec.attr_group,
113 attr.attr_id );
114 END if;
115 l_ctr := l_ctr + 1;
116 END LOOP;
117
118 l_sql := l_sql || ' ))';
119 l_sql := l_sql || ' FROM okc_rep_contracts_all_ext_vl WHERE contract_id = ' || p_contract_id || ' and attr_group_id = ' || rec.attr_group_id || ')' ;
120 END LOOP;
121
122 l_op := 'SELECT XMLCONCAT(' || l_sql || ') FROM dual';
123
124 EXECUTE IMMEDIATE l_op INTO l_uda_xml;
125 RETURN (l_uda_xml);
126
127 END get_uda_single_attr_xml;
128
129 FUNCTION get_setaside_recommendations(p_contract_id NUMBER) RETURN XMLTYPE IS
130
131 l_rc SYS_REFCURSOR;
132 l_rec_type_col_name VARCHAR2(30);
133 l_rec_percent_col_name VARCHAR2(30);
134 l_rec_type VARCHAR2(150);
135 l_is_rec VARCHAR2(1);
136 l_rec_percent NUMBER;
137 l_attr_group_id NUMBER;
138 l_sql VARCHAR2(32567);
139 l_xml_sql VARCHAR2(32567);
140 l_final_sql VARCHAR2(32567);
141 l_xml XMLTYPE;
142
143 BEGIN
144
145 SELECT fcu.application_column_name INTO l_rec_type_col_name
146 FROM fnd_descr_flex_column_usages fcu
147 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
148 AND fcu.descriptive_flex_context_code = 'SBCR_REC_AG'
149 AND fcu.end_user_column_name = 'RECOMMENDATION_TYPE';
150
151 SELECT fcu.application_column_name INTO l_rec_percent_col_name
152 FROM fnd_descr_flex_column_usages fcu
153 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
154 AND fcu.descriptive_flex_context_code = 'SBCR_REC_AG'
155 AND fcu.end_user_column_name = 'RECOMMEND_PERCENT';
156
157 SELECT attr_group_id INTO l_attr_group_id
158 FROM ego_fnd_dsc_flx_ctx_ext
159 WHERE descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
160 AND descriptive_flex_context_code = 'SBCR_REC_AG';
161
162 l_sql := 'SELECT lkup.lookup_code, nvl2(ext.' || l_rec_type_col_name || ', ''Y'', ''N''), ext.' || l_rec_percent_col_name || ' FROM okc_rep_contracts_all_ext_b ext, fnd_lookups lkup' ||
163 ' WHERE ext.contract_id(+) = ' || p_contract_id || ' AND ext.attr_group_id (+) = ' || l_attr_group_id ||
164 ' AND lkup.lookup_type = ''OKC_REP_SBCR_REC_SET_ASIDE'' AND lkup.enabled_flag = ''Y''' ||
165 ' AND TRUNC(SYSDATE) BETWEEN lkup.start_date_active AND nvl(lkup.end_date_active, SYSDATE)' ||
166 ' AND lkup.lookup_code = ext.' || l_rec_type_col_name || '(+)';
167
168 OPEN l_rc FOR l_sql;
169 LOOP
170 FETCH l_rc INTO l_rec_type, l_is_rec, l_rec_percent ;
171 EXIT WHEN l_rc%NOTFOUND;
172 IF l_xml_sql IS NULL THEN
173 l_xml_sql := 'XMLForest(''' || l_is_rec || ''' as ' || l_rec_type || '_TYPE, ''' || l_rec_percent || ''' as ' || l_rec_type || '_PER)';
174 ELSE
175 l_xml_sql := l_xml_sql || ', XMLForest(''' || l_is_rec || ''' as ' || l_rec_type || '_TYPE, ''' || l_rec_percent || ''' as ' || l_rec_type || '_PER)';
176 END IF;
177 END LOOP;
178
179 l_final_sql := ' SELECT XMLConcat(' || l_xml_sql || ') FROM dual';
180 EXECUTE IMMEDIATE l_final_sql INTO l_xml;
181 RETURN (l_xml);
182
183 EXCEPTION
184 WHEN No_Data_Found THEN
185 RETURN l_xml;
186 WHEN OTHERS THEN
187 RAISE;
188 END get_setaside_recommendations;
189
190 FUNCTION get_prev_acqs_history(p_contract_id NUMBER) RETURN XMLTYPE IS
191
192 l_rc SYS_REFCURSOR;
193 l_prev_acq_type_col_name VARCHAR2(30);
194 l_prev_acq_cmt_col_name VARCHAR2(30);
195 l_prev_acq_type VARCHAR2(150);
196 l_prev_acq_cmt VARCHAR2(150);
197 l_attr_group_id NUMBER;
198 l_sql VARCHAR2(32567);
199 l_xml_sql VARCHAR2(32567);
200 l_final_sql VARCHAR2(32567);
201 l_xml XMLTYPE;
202
203 BEGIN
204
205 SELECT fcu.application_column_name INTO l_prev_acq_type_col_name
206 FROM fnd_descr_flex_column_usages fcu
207 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
208 AND fcu.descriptive_flex_context_code = 'SBCR_PRE_ACQ'
209 AND fcu.end_user_column_name = 'ACQ_PREV';
210
211 SELECT fcu.application_column_name INTO l_prev_acq_cmt_col_name
212 FROM fnd_descr_flex_column_usages fcu
213 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
214 AND fcu.descriptive_flex_context_code = 'SBCR_PRE_ACQ'
215 AND fcu.end_user_column_name = 'ACQ_COMMENTS';
216
217 SELECT attr_group_id INTO l_attr_group_id
218 FROM ego_fnd_dsc_flx_ctx_ext
219 WHERE descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
220 AND descriptive_flex_context_code = 'SBCR_PRE_ACQ';
221
222 l_sql := 'SELECT ' || l_prev_acq_type_col_name || ', ' || l_prev_acq_cmt_col_name ||
223 ' FROM okc_rep_contracts_all_ext_b' ||
224 ' WHERE contract_id = ' || p_contract_id ||
225 ' AND attr_group_id = ' || l_attr_group_id ||
226 ' AND ' || l_prev_acq_type_col_name || ' IS NOT NULL';
227
228 OPEN l_rc FOR l_sql;
229 LOOP
230 FETCH l_rc INTO l_prev_acq_type, l_prev_acq_cmt ;
231 EXIT WHEN l_rc%NOTFOUND;
232 IF l_xml_sql IS NULL THEN
233 l_xml_sql := 'XMLForest(''Y'' as ' || l_prev_acq_type || '_TYPE, ''' || l_prev_acq_cmt || ''' as ' || l_prev_acq_type || '_CMT)';
234 ELSE
235 l_xml_sql := l_xml_sql || ', XMLForest(''Y'' as ' || l_prev_acq_type || '_TYPE, ''' || l_prev_acq_cmt || ''' as ' || l_prev_acq_type || '_CMT)';
236 END IF;
237 END LOOP;
238
239 l_final_sql := ' SELECT XMLConcat(' || l_xml_sql || ') FROM dual';
240 EXECUTE IMMEDIATE l_final_sql INTO l_xml;
241 RETURN (l_xml);
242 EXCEPTION
243 WHEN No_Data_Found THEN
244 RETURN l_xml;
245 WHEN OTHERS THEN
246 RAISE;
247 END get_prev_acqs_history;
248
249 FUNCTION get_sbss_employees_size(p_contract_id NUMBER) RETURN VARCHAR2 IS
250
251 l_sbcr_size_standard_col_name VARCHAR2(30);
252 l_sbcr_size_standard VARCHAR2(150);
253 l_sbcr_size_standard_desc VARCHAR2(32567) := NULL;
254 l_attr_group_id NUMBER;
255 l_attr_id NUMBER;
256 l_attr_data_type VARCHAR2(30);
257 l_sql VARCHAR2(1000);
258 l_sql_desc VARCHAR2(1000);
259
260 BEGIN
261
262 SELECT fcu.application_column_name, efdfce.attr_id, efdfce.data_type
263 INTO l_sbcr_size_standard_col_name, l_attr_id, l_attr_data_type
264 FROM fnd_descr_flex_column_usages fcu,
265 ego_fnd_df_col_usgs_ext efdfce
266 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
267 AND fcu.descriptive_flex_context_code = 'SBCR_PROC_INFO_AG'
268 AND fcu.end_user_column_name = 'SBCR_SBSS_SIZE_STANDARD'
269 AND efdfce.descriptive_flexfield_name = fcu.descriptive_flexfield_name
270 AND efdfce.descriptive_flex_context_code = fcu.descriptive_flex_context_code
271 AND efdfce.application_column_name = fcu.application_column_name;
272
273 SELECT attr_group_id INTO l_attr_group_id
274 FROM ego_fnd_dsc_flx_ctx_ext
275 WHERE descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
276 AND descriptive_flex_context_code = 'SBCR_PROC_INFO_AG';
277
278 l_sql := 'SELECT ' || l_sbcr_size_standard_col_name ||
279 ' FROM okc_rep_contracts_all_ext_b' ||
280 ' WHERE contract_id = ' || p_contract_id ||
281 ' AND attr_group_id = ' || l_attr_group_id ||
282 ' AND ' || l_sbcr_size_standard_col_name || ' like ''%EMP%''';
283
284 EXECUTE IMMEDIATE l_sql INTO l_sbcr_size_standard;
285
286 l_sql_desc := get_uda_attr_desc_sql(p_contract_id,
287 l_attr_data_type,
288 l_sbcr_size_standard_col_name, --application_column_name
289 'SBCR_SBSS_SIZE_STANDARD', --end_user_column_name
290 'SBCR_PROC_INFO_AG', --attr_group_name
291 l_attr_id );
292
293 l_sql_desc := 'SELECT ' || l_sql_desc ||
294 ' FROM okc_rep_contracts_all_ext_b' ||
295 ' WHERE contract_id = ' || p_contract_id ||
296 ' AND attr_group_id = ' || l_attr_group_id;
297
298 EXECUTE IMMEDIATE l_sql_desc INTO l_sbcr_size_standard_desc;
299
300 RETURN (l_sbcr_size_standard_desc);
301 EXCEPTION
302 WHEN No_Data_Found THEN
303 RETURN l_sbcr_size_standard_desc;
304 WHEN OTHERS THEN
305 RAISE;
306 END get_sbss_employees_size;
307
308 FUNCTION get_sbss_dollars_size(p_contract_id NUMBER) RETURN VARCHAR2 IS
309
310 l_sbcr_size_standard_col_name VARCHAR2(30);
311 l_sbcr_size_standard VARCHAR2(150);
312 l_sbcr_size_standard_desc VARCHAR2(32567) := NULL;
313 l_attr_group_id NUMBER;
314 l_attr_id NUMBER;
315 l_attr_data_type VARCHAR2(30);
316 l_sql VARCHAR2(1000);
317 l_sql_desc VARCHAR2(1000);
318
319 BEGIN
320
321 SELECT fcu.application_column_name, efdfce.attr_id, efdfce.data_type
322 INTO l_sbcr_size_standard_col_name, l_attr_id, l_attr_data_type
323 FROM fnd_descr_flex_column_usages fcu,
324 ego_fnd_df_col_usgs_ext efdfce
325 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
326 AND fcu.descriptive_flex_context_code = 'SBCR_PROC_INFO_AG'
327 AND fcu.end_user_column_name = 'SBCR_SBSS_SIZE_STANDARD'
328 AND efdfce.descriptive_flexfield_name = fcu.descriptive_flexfield_name
329 AND efdfce.descriptive_flex_context_code = fcu.descriptive_flex_context_code
330 AND efdfce.application_column_name = fcu.application_column_name;
331
332 SELECT attr_group_id INTO l_attr_group_id
333 FROM ego_fnd_dsc_flx_ctx_ext
334 WHERE descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
335 AND descriptive_flex_context_code = 'SBCR_PROC_INFO_AG';
336
337 l_sql := 'SELECT ' || l_sbcr_size_standard_col_name ||
338 ' FROM okc_rep_contracts_all_ext_b' ||
339 ' WHERE contract_id = ' || p_contract_id ||
340 ' AND attr_group_id = ' || l_attr_group_id ||
341 ' AND ' || l_sbcr_size_standard_col_name || ' like ''%$%''';
342
343 EXECUTE IMMEDIATE l_sql INTO l_sbcr_size_standard;
344
345 l_sql_desc := get_uda_attr_desc_sql(p_contract_id,
346 l_attr_data_type,
347 l_sbcr_size_standard_col_name, --application_column_name
348 'SBCR_SBSS_SIZE_STANDARD', --end_user_column_name
349 'SBCR_PROC_INFO_AG', --attr_group_name
350 l_attr_id );
351
352 l_sql_desc := 'SELECT ' || l_sql_desc ||
353 ' FROM okc_rep_contracts_all_ext_b' ||
354 ' WHERE contract_id = ' || p_contract_id ||
355 ' AND attr_group_id = ' || l_attr_group_id;
356
357 EXECUTE IMMEDIATE l_sql_desc INTO l_sbcr_size_standard_desc;
358
359 RETURN (l_sbcr_size_standard_desc);
360 EXCEPTION
361 WHEN No_Data_Found THEN
362 RETURN l_sbcr_size_standard_desc;
363 WHEN OTHERS THEN
364 RAISE;
365 END get_sbss_dollars_size;
366
367 FUNCTION is_sec8A_setaside_recommended(p_contract_id NUMBER) RETURN VARCHAR2 IS
368
369 l_rec_type_col_name VARCHAR2(30);
370 l_attr_group_id NUMBER;
371 l_sql VARCHAR2(1000);
372 sec8A_recommended VARCHAR2(1) := 'N';
373
374 BEGIN
375
376 SELECT fcu.application_column_name INTO l_rec_type_col_name
377 FROM fnd_descr_flex_column_usages fcu
378 WHERE fcu.descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
379 AND fcu.descriptive_flex_context_code = 'SBCR_REC_AG'
380 AND fcu.end_user_column_name = 'RECOMMENDATION_TYPE';
381
382 SELECT attr_group_id INTO l_attr_group_id
383 FROM ego_fnd_dsc_flx_ctx_ext
384 WHERE descriptive_flexfield_name = 'OKC_REP_CONTRACT_HDR_EXT_ATTRS'
385 AND descriptive_flex_context_code = 'SBCR_REC_AG';
386
387 l_sql := 'SELECT ''Y''' ||
388 ' FROM okc_rep_contracts_all_ext_b' ||
389 ' WHERE contract_id = ' || p_contract_id ||
390 ' AND attr_group_id = ' || l_attr_group_id ||
391 ' AND ' || l_rec_type_col_name || ' like ''SEC8A%''';
392
393 EXECUTE IMMEDIATE l_sql INTO sec8A_recommended;
394
395 RETURN (sec8A_recommended);
396 EXCEPTION
397 WHEN No_Data_Found THEN
398 RETURN sec8A_recommended;
399 WHEN OTHERS THEN
400 RAISE;
401 END is_sec8A_setaside_recommended;
402
403 END OKC_SBCR_DT_PKG;