DBA Data[Home] [Help]

PACKAGE BODY: APPS.OKC_CDRL_DT_PKG

Source


1 PACKAGE BODY OKC_CDRL_DT_PKG AS
2 /* $Header: OKCCDRLDTB.pls 120.0.12020000.2 2013/04/12 06:41:53 nbingi noship $ */
3 
4     function get_uda_attr_desc_sql(p_delId number,
5                                 p_data_type varchar2,
6                                 p_appl_col_name varchar2,
7                                 p_end_user_col_name varchar2,
8                                 p_attr_group_type varchar2,
9                                 p_attr_group varchar2,
10                                 p_attr_id number)
11                                 return varchar2 is
12 
13   p_application_id  number := 510;
14   p_object_name varchar2(200) := 'OKC_DELIVERABLE';
15   p_pk1_column_name   varchar2(200) := 'DELIVERABLE_ID';
16   l_sql varchar2(1000);
17   begin
18 
19   if (p_data_type = 'C' or p_data_type = 'A' ) then
20     l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
21                  p_application_id || ',' || ' null,  ' ||
22                  p_appl_col_name|| ', null , ''' ||
23                  p_end_user_col_name|| ''',''' ||
24                  p_attr_group_type || ''',''' ||
25                  P_ATTR_GROUP|| ''',' ||
26                  p_attr_id || ',''' ||
27                  p_object_name || ''',''' ||
28                  p_pk1_column_name || ''',' ||
29                  p_delID || ') as ' || p_end_user_col_name || '_DESC' ;
30   elsif  p_data_type = 'N' then
31     l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
32                  p_application_id || ',' || ' null, null, ' ||
33                  p_appl_col_name|| ', ''' ||
34                  p_end_user_col_name|| ''',''' ||
35                  p_attr_group_type || ''',''' ||
36                  p_attr_group || ''',' ||
37                  p_attr_id || ',''' ||
38                  p_object_name || ''',''' ||
39                  p_pk1_column_name || ''',' ||
40                  p_delID || ') as ' || p_end_user_col_name || '_DESC' ;
41   elsif (p_data_type = 'X' or p_data_type = 'Y') then
42      l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
43                  p_application_id || ',' || p_appl_col_name ||
44                  ' , null, null, ''' ||
45                  p_end_user_col_name|| ''',''' ||
46                  p_attr_group_type || ''',''' ||
47                  p_attr_group || ''',' ||
48                  p_attr_id || ',''' ||
49                  p_object_name || ''',''' ||
50                  p_pk1_column_name || ''',' ||
51                  p_delID || ') as ' || p_end_user_col_name || '_DESC ' ;
52   end if;
53   return(l_sql);
54   end get_uda_attr_desc_sql;
55 
56   FUNCTION GET_UDA_XML(p_delId number, p_uda_template_id number)
57   RETURN XMLType IS
58   CURSOR C_ATTR_GRP IS
59     SELECT AG.DESCRIPTIVE_FLEX_CONTEXT_CODE ATTR_GROUP,
60           AG.ATTR_GROUP_ID ATTR_GROUP_ID,
61           AG.DESCRIPTIVE_FLEXFIELD_NAME DESC_FLEXFLD_NAME,
62           AG.MULTI_ROW MULTI_ROW
63     FROM EGO_FND_DSC_FLX_CTX_EXT AG,
64          okc_uda_deliverable_usages usg
65     WHERE usg.uda_template_id = p_uda_template_id
66     and usg.attr_group_id = ag.attr_group_id;
67 
68   CURSOR C_ATTR_MD(P_ATTR_GROUP VARCHAR2, P_DESC_FLEXFLD_NAME VARCHAR2)  IS
69     SELECT   EFDFCE.ATTR_ID                ,
70     EFDFCE.APPLICATION_COLUMN_NAME      ,
71     FCU.END_USER_COLUMN_NAME,
72     fcu.flex_value_set_id,
73     EFDFCE.data_type,
74     EFDFCE.descriptive_flexfield_name attr_group_type
75     FROM
76       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_ATTR_GRP NUMBER;
88   L_CTR NUMBER;
89   L_O_CTR NUMBER;
90   l_uda_xml XMLTYPE;
91   BEGIN
92 
93   L_O_CTR := 0;
94   FOR REC IN C_ATTR_GRP LOOP
95     IF REC.MULTI_ROW = 'Y' THEN
96       IF L_O_CTR > 0 THEN
97         L_SQL := L_SQL || ',' || '(select XMLElement("' || REC.ATTR_GROUP
98                  || '", XMLAgg(XMLForest(' ;
99       ELSE
100         L_SQL := '(select XMLElement("' || REC.ATTR_GROUP || '", XMLAgg(XMLForest(';
101       END IF;
102     ELSE
103       IF L_O_CTR > 0 THEN
104         L_SQL := L_SQL || ',' || '(select XMLElement("' || REC.ATTR_GROUP
105                   || '", XMLForest(' ;
106       ELSE
107         L_SQL := '(select XMLElement("' || REC.ATTR_GROUP || '", XMLForest(';
108       END IF;
109     END IF;
110     L_CTR := 0 ;
111 
112     FOR R IN C_ATTR_MD(REC.ATTR_GROUP, REC.DESC_FLEXFLD_NAME) LOOP
113         IF L_CTR = 0 THEN
114           L_SQL := L_SQL || R.APPLICATION_COLUMN_NAME || ' as ' || R.END_USER_COLUMN_NAME;
115         ELSE
116           L_SQL := L_SQL || ',' || R.APPLICATION_COLUMN_NAME || ' as ' || R.END_USER_COLUMN_NAME;
117         END IF;
118         if r.flex_value_set_id is not null then
119           if (r.data_type = 'C' or r.data_type = 'A' ) then
120               l_sql := l_sql || ',' || get_uda_attr_desc_sql(
121                                      p_delId,
122                                      r.data_type,
123                                      r.application_column_name,
124                                      r.end_user_column_name,
125                                      r.attr_group_type,
126                                      rec.attr_group,
127                                      r.ATTR_ID );
128           end if;
129         end if;
130         L_CTR := L_CTR + 1;
131     END LOOP;
132     IF REC.MULTI_ROW = 'Y' THEN
133       L_SQL := L_SQL || ')))';
134     ELSE
135       L_SQL := L_SQL || ' ))';
136     END IF;
137     L_SQL := L_SQL || ' from okc_deliverables_ext_b where deliverable_id = ' ||
138              p_delId || ' and attr_group_id = ' || REC.ATTR_GROUP_ID || ')' ;
139     L_O_CTR := L_O_CTR + 1;
140   END LOOP;
141 
142   l_op := ' select XMLConcat(' || l_sql || ') from dual';
143   execute immediate l_op into l_uda_xml;
144 
145   RETURN (l_uda_xml);
146   END GET_UDA_XML;
147 
148   FUNCTION GET_ADDR_UDA_XML(p_delId number, p_uda_template_id number)
149   RETURN XMLType is
150   cursor c_attr is
151 	select attr_name, database_column
152 	from ego_attrs_v
153 	where attr_group_name = 'CDRL_DIST_ADDR';
154 
155   cursor c_del is
156 	select extension_id , rownum num
157 	from okc_deliverables_ext_b where attr_group_id in (
158 	select  attr_group_id from EGO_FND_DSC_FLX_CTX_EXT
159 	where descriptive_flexfield_name = 'OKC_DELIVERABLES_EXT_ATTRS'
160 	and descriptive_flex_context_code = 'CDRL_DIST_ADDR')
161 	and deliverable_id = p_delId
162 	and rownum < 39;
163 
164   type tbl_var is table of varchar2(50) index by pls_integer;
165   t_attr tbl_var;
166   t_dbcol tbl_var;
167   l_ctr number := 0;
168   l_delctr number :=0;
169   l_sql CLOB;
170   l_addr_xml XMLType;
171 
172   begin
173 	open c_attr;
174 	 fetch c_attr bulk collect into t_attr, t_dbcol;
175 	close c_attr;
176 
177 	if t_attr.count > 0 then
178   	   l_sql := 'select XMLconcat( ' ;
179 
180 	   for rec in c_del loop
181 	  	l_ctr := 0;
182 	  	if l_delctr = 0 then
183 	    		l_sql := l_sql || '(select XMLConcat(';
184 	  	else
185 	    		l_sql := l_sql || ', (select XMLConcat(';
186 	  	end if;
187 
188 	  	for i in t_attr.first..t_attr.last loop
189 	    		l_sql := l_sql || 'XMLElement("' || t_attr(i) || '_'
190 	    				|| rec.num || '",' || t_dbcol(i) || ')' ;
191 	    		if l_ctr < t_attr.count-1 then
192 		 		l_sql := l_sql || ', ';
193 	    		end if;
194 	    		l_ctr := l_ctr + 1;
195 	  	end loop;
196 
197 	  	l_sql := l_sql || ') from okc_deliverables_ext_b where extension_id = '
198 					|| rec.extension_id || ')' ;
199 	  	l_delctr := l_delctr + 1;
200 	    end loop;
201 
202 		l_sql := l_sql || ') from dual' ;
203 		execute immediate l_sql into l_addr_xml;
204 	end if;
205 
206 	return(l_addr_xml);
207   end GET_ADDR_UDA_XML;
208 
209 FUNCTION GET_SINGLE_ATTR_VALUE(p_attr_group VARCHAR2, p_attr_name VARCHAR2,
210                               p_delID NUMBER) RETURN VARCHAR2 IS
211 
212 l_result VARCHAR2(4000) := '';
213 l_res_code VARCHAR2(2000);
214 l_sql         VARCHAR2(4000);
215 l_db_col        VARCHAR2(40);
216 l_attr_group_id NUMBER;
217 l_application_id  number := 510;
218 l_object_name varchar2(200) := 'OKC_DELIVERABLE';
219 l_pk1_column_name   varchar2(200) := 'DELIVERABLE_ID';
220 l_data_type varchar2(40);
221 l_attr_id number;
222 BEGIN
223 	SELECT attr.database_column , grp.attr_group_id, attr.data_type_code, attr.attr_id
224 	INTO l_db_col, l_attr_group_id, l_data_type, l_attr_id
225 	FROM ego_attrs_v attr, ego_attr_groups_v grp
226 	WHERE attr.attr_group_name = p_attr_group
227 	AND attr.attr_group_type     = 'OKC_DELIVERABLES_EXT_ATTRS'
228 	AND attr.attr_name           = p_attr_name
229 	AND attr.attr_group_type     = grp.attr_group_type
230 	AND attr.attr_group_name     = grp.attr_group_name;
231 
232 	l_sql := 'select ' || l_db_col
233 		|| ' from okc_deliverables_ext_b where deliverable_id = :1 and attr_group_id = :2';
234 
235 	EXECUTE immediate l_sql INTO l_res_code USING p_delId, l_attr_group_id ;
236 
237 
238 	if (l_data_type = 'C' or l_data_type = 'A') then
239 		l_result := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
240 					p_application_id => l_application_id,
241 					p_attr_internal_date_value => null,
242 					p_attr_internal_str_value => l_res_code,
243 					p_attr_internal_num_value => null,
244 					p_attr_internal_name => p_attr_name,
245 					p_attr_group_type => 'OKC_DELIVERABLES_EXT_ATTRS',
246 					p_attr_group_int_name => p_attr_group,
247 					p_attr_id => l_attr_id,
248 					p_object_name => l_object_name,
249 					p_pk1_column_name => l_pk1_column_name,
250 					p_pk1_value => p_delId
251 					);
252 	elsif (l_data_type = 'N') then
253 		l_result := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
254 					p_application_id => l_application_id,
255 					p_attr_internal_date_value => null,
256 					p_attr_internal_str_value => null,
257 					p_attr_internal_num_value => l_res_code,
258 					p_attr_internal_name => p_attr_name,
259 					p_attr_group_type => 'OKC_DELIVERABLES_EXT_ATTRS',
260 					p_attr_group_int_name => p_attr_group,
261 					p_attr_id => l_attr_id,
262 					p_object_name => l_object_name,
263 					p_pk1_column_name => l_pk1_column_name,
264 					p_pk1_value => p_delId
265 					);
266 	elsif (l_data_type = 'X' or l_data_type ='Y') then
267 		l_result := EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet (
268 					p_application_id => l_application_id,
269 					p_attr_internal_date_value => l_res_code,
270 					p_attr_internal_str_value => null,
271 					p_attr_internal_num_value => null,
272 					p_attr_internal_name => p_attr_name,
273 					p_attr_group_type => 'OKC_DELIVERABLES_EXT_ATTRS',
274 					p_attr_group_int_name => p_attr_group,
275 					p_attr_id => l_attr_id,
276 					p_object_name => l_object_name,
277 					p_pk1_column_name => l_pk1_column_name,
278 					p_pk1_value => p_delId
279 					);
280 	end if;
281 
282 	RETURN(l_result);
283 
284 END GET_SINGLE_ATTR_VALUE;
285 
286 FUNCTION GET_CDRL_CAT_OTH(p_delID number) return varchar2
287 IS
288 l_cdrl_cat varchar2(200);
289 BEGIN
290 
291 	l_cdrl_cat := GET_SINGLE_ATTR_VALUE('CDRL_DETAILS', 'CDRL_CATEGORY',
292 				p_delID);
293 
294 	if ((l_cdrl_cat = 'TDP') or (l_cdrl_cat = 'TM')) then
295 		return null;
296 	else
297 		return l_cdrl_cat;
298 	end if;
299 END GET_CDRL_CAT_OTH;
300 END;