DBA Data[Home] [Help]

PACKAGE BODY: APPS.PO_XML_FPDSNG_PKG

Source


1 PACKAGE BODY PO_XML_FPDSNG_PKG AS
2 /* $Header: PODTFPDB.pls 120.2.12020000.2 2013/02/10 19:01:46 vegajula ship $ */
3 
4   FUNCTION get_location_id(t_orgid NUMBER) RETURN NUMBER IS
5    l_legal_entity_id NUMBER;
6    x_return_status VARCHAR2(500);
7    x_msg_count NUMBER;
8    x_msg_data VARCHAR2(500);
9    x_legalentity_info xle_utilities_grp.LegalEntity_Rec;
10    l_location_id NUMBER;
11   Begin
12    l_legal_entity_id := XLE_UTILITIES_GRP.GET_DefaultLegalContext_OU(t_orgid);
13    XLE_UTILITIES_GRP.Get_LegalEntity_Info(x_return_status, x_msg_count, x_msg_data, null, l_legal_entity_id, x_legalentity_info);
14    l_location_id := x_legalentity_info.location_id;
15 
16   RETURN (l_location_id);
17   END get_location_id;
18 
19   FUNCTION get_location_name(t_orgid NUMBER) RETURN VARCHAR2 IS
20    l_legal_entity_id NUMBER;
21    x_return_status VARCHAR2(500);
22    x_msg_count NUMBER;
23    x_msg_data VARCHAR2(500);
24    x_legalentity_info xle_utilities_grp.LegalEntity_Rec;
25    l_location_name VARCHAR2(500);
26   Begin
27    l_legal_entity_id := XLE_UTILITIES_GRP.GET_DefaultLegalContext_OU(t_orgid);
28    XLE_UTILITIES_GRP.Get_LegalEntity_Info(x_return_status, x_msg_count, x_msg_data, null, l_legal_entity_id, x_legalentity_info);
29    l_location_name := x_legalentity_info.name;
30 
31   RETURN (l_location_name);
32   END get_location_name;
33 
34   FUNCTION get_header_amount_ordered(p_header_id NUMBER, p_draft_id NUMBER) RETURN NUMBER IS
35    order_amount NUMBER;
36   Begin
37    order_amount := PO_DOCUMENT_TOTALS_PVT.getAmountOrdered(PO_CORE_S.g_doc_level_HEADER, p_header_id,PO_DOCUMENT_TOTALS_PVT.g_data_source_TRANSACTION , NULL, p_draft_id);
38 
39   RETURN (order_amount);
40   END get_header_amount_ordered;
41 
42   FUNCTION get_line_amount_ordered(p_line_id NUMBER, p_draft_id NUMBER) RETURN NUMBER IS
43    order_amount NUMBER;
44   Begin
45    order_amount := PO_DOCUMENT_TOTALS_PVT.getAmountOrdered(PO_CORE_S.g_doc_level_LINE, p_line_id,PO_DOCUMENT_TOTALS_PVT.g_data_source_TRANSACTION , NULL, p_draft_id);
46 
47   RETURN (order_amount);
48   END get_line_amount_ordered;
49 
50   FUNCTION get_without_opt_amount_ordered(p_header_id NUMBER, p_draft_id NUMBER) RETURN NUMBER IS
51    order_amount NUMBER;
52   Begin
53    order_amount := PO_DOCUMENT_TOTALS_PVT.getAmountOrderedExclOptions(PO_CORE_S.g_doc_level_HEADER, p_header_id, PO_DOCUMENT_TOTALS_PVT.g_data_source_TRANSACTION , NULL, p_draft_id);
54 
55   RETURN (order_amount);
56   END get_without_opt_amount_ordered;
57 
58   function get_uda_attr_desc_sql(p_doc_type varchar2, p_pk1_value number,
59                                 p_pk2_value number,
60                                 p_data_type varchar2,
61                                 p_appl_col_name varchar2,
62                                 p_end_user_col_name varchar2,
63                                 p_attr_group varchar2, p_attr_id number)
64                                 return varchar2 is
65 
66   p_application_id  number := 201;
67   p_attr_group_type varchar2(200);
68   p_object_name varchar2(200);
69   p_pk1_column_name   varchar2(200);
70   p_pk2_column_name  varchar2(200) :=   'DRAFT_ID';
71   l_sql varchar2(1000);
72   begin
73   if p_doc_type = 'SHIPMENT' then
74     p_attr_group_type :=  'PO_SHIPMENTS_EXT_ATTRS';
75     p_object_name := 'PO_LINE_LOCATIONS_ALL_EXT_B';
76     p_pk1_column_name := 'LINE_LOCATION_ID';
77   elsif p_doc_type = 'LINES' then
78     p_attr_group_type :=  'PO_LINE_EXT_ATTRS';
79     p_object_name := 'PO_LINES_ALL_EXT_B';
80     p_pk1_column_name := 'PO_LINE_ID';
81   elsif p_doc_type = 'HEADER' then
82     p_attr_group_type :=   'PO_HEADER_EXT_ATTRS';
83     p_object_name := 'PO_HEADERS_ALL_EXT_B';
84     p_pk1_column_name := 'PO_HEADER_ID';
85   end if;
86 
87   if (p_data_type = 'C' or p_data_type = 'A' ) then
88     l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
89                  p_application_id || ',' || ' null,  ' ||
90                  p_appl_col_name|| ', null , ''' ||
91                  p_end_user_col_name|| ''',''' ||
92                  p_attr_group_type || ''',''' ||
93                  P_ATTR_GROUP|| ''',' ||
94                  p_attr_id || ',''' ||
95                  p_object_name || ''',''' ||
96                  p_pk1_column_name || ''',' ||
97                  p_pk1_value || ',''' ||
98                  p_pk2_column_name || ''',' ||
99                  p_pk2_value || ') as ' || p_end_user_col_name || '_DESC' ;
100   elsif  p_data_type = 'N' then
101     l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
102                  p_application_id || ',' || ' null, null, ' ||
103                  p_appl_col_name|| ', ''' ||
104                  p_end_user_col_name|| ''',''' ||
105                  p_attr_group_type || ''',''' ||
106                  p_attr_group || ''',' ||
107                  p_attr_id || ',''' ||
108                  p_object_name || ''',''' ||
109                  p_pk1_column_name || ''',' ||
110                  p_pk1_value || ',''' ||
111                  p_pk2_column_name || ''',' ||
112                  p_pk2_value || ') as ' || p_end_user_col_name || '_DESC' ;
113   elsif (p_data_type = 'X' or p_data_type = 'Y') then
114      l_sql := ' EGO_USER_ATTRS_DATA_PVT.Get_Attr_Disp_Val_From_VSet ( ' ||
115                  p_application_id || ',' || p_appl_col_name ||
116                  ' , null, null, ''' ||
117                  p_end_user_col_name|| ''',''' ||
118                  p_attr_group_type || ''',''' ||
119                  p_attr_group || ''',' ||
120                  p_attr_id || ',''' ||
121                  p_object_name || ''',''' ||
122                  p_pk1_column_name || ''',' ||
123                  p_pk1_value || ',''' ||
124                  p_pk2_column_name || ''',' ||
125                  p_pk2_value || ') as ' || p_end_user_col_name || '_DESC ' ;
126   end if;
127   return(l_sql);
128   end get_uda_attr_desc_sql;
129 
130   FUNCTION GET_UDA_HEADER_XML_PVT(p_headerId number, p_draft_id number)
131   RETURN XMLType IS
132   CURSOR C_ATTR_GRP IS
133     SELECT AG.DESCRIPTIVE_FLEX_CONTEXT_CODE ATTR_GROUP,
134           AG.ATTR_GROUP_ID ATTR_GROUP_ID,
135           AG.DESCRIPTIVE_FLEXFIELD_NAME DESC_FLEXFLD_NAME,
136           AG.MULTI_ROW MULTI_ROW
137     FROM EGO_FND_DSC_FLX_CTX_EXT AG, po_headers_all h,
138          PO_UDA_AG_TEMPLATES POT, PO_UDA_AG_TEMPLATE_USAGES POTU
139     WHERE h.po_header_id = p_headerId
140     AND H.UDA_TEMPLATE_ID = POT.TEMPLATE_ID
141     AND POT.TEMPLATE_ID = POTU.TEMPLATE_ID
142     AND AG.DESCRIPTIVE_FLEXFIELD_NAME = POT.ENTITY_CODE
143     AND AG.ATTR_GROUP_ID  = POTU.ATTRIBUTE_GROUP_ID
144     AND potu.attribute_group_id in (select distinct attr_group_id
145                                     from po_headers_all_ext_b
146                                     where po_header_id = p_headerId
147                                     and draft_id = p_draft_id
148                                     and attr_group_id = potu.attribute_group_id)
149     ORDER BY POTU.ATTRIBUTE_GROUP_SEQUENCE;
150 
151   CURSOR C_ATTR_MD(P_ATTR_GROUP VARCHAR2, P_DESC_FLEXFLD_NAME VARCHAR2)  IS
152     SELECT   EFDFCE.ATTR_ID                ,
153     EFDFCE.APPLICATION_COLUMN_NAME      ,
154     FCU.END_USER_COLUMN_NAME,
155     fcu.flex_value_set_id,
156     EFDFCE.data_type
157     FROM
158       EGO_FND_DF_COL_USGS_EXT EFDFCE,
159       FND_DESCR_FLEX_COLUMN_USAGES FCU
160     WHERE EFDFCE.DESCRIPTIVE_FLEXFIELD_NAME = P_DESC_FLEXFLD_NAME
161     AND EFDFCE.DESCRIPTIVE_FLEX_CONTEXT_CODE  = P_ATTR_GROUP
162     AND FCU.DESCRIPTIVE_FLEX_CONTEXT_CODE = EFDFCE.DESCRIPTIVE_FLEX_CONTEXT_CODE
163     AND FCU.DESCRIPTIVE_FLEXFIELD_NAME = EFDFCE.DESCRIPTIVE_FLEXFIELD_NAME
164     AND FCU.APPLICATION_COLUMN_NAME = EFDFCE.APPLICATION_COLUMN_NAME
165     AND FCU.DISPLAY_FLAG <> 'H';
166 
167   L_SQL VARCHAR2(32767);
168   L_OP VARCHAR2(32767);
169   L_ATTR_GRP NUMBER;
170   L_CTR NUMBER;
171   L_O_CTR NUMBER;
172   l_uda_xml XMLTYPE;
173   BEGIN
174 
175   L_O_CTR := 0;
176   FOR REC IN C_ATTR_GRP LOOP
177     IF REC.MULTI_ROW = 'Y' THEN
178       IF L_O_CTR > 0 THEN
179         L_SQL := L_SQL || ',' || '(select XMLElement("' || REC.ATTR_GROUP
180                  || '", XMLAgg(XMLForest(' ;
181       ELSE
182         L_SQL := '(select XMLElement("' || REC.ATTR_GROUP || '", XMLAgg(XMLForest(';
183       END IF;
184     ELSE
185       IF L_O_CTR > 0 THEN
186         L_SQL := L_SQL || ',' || '(select XMLElement("' || REC.ATTR_GROUP
187                   || '", XMLForest(' ;
188       ELSE
189         L_SQL := '(select XMLElement("' || REC.ATTR_GROUP || '", XMLForest(';
190       END IF;
191     END IF;
192     L_CTR := 0 ;
193     FOR R IN C_ATTR_MD(REC.ATTR_GROUP, REC.DESC_FLEXFLD_NAME) LOOP
194         IF L_CTR = 0 THEN
195           L_SQL := L_SQL || R.APPLICATION_COLUMN_NAME || ' as ' || R.END_USER_COLUMN_NAME;
196         ELSE
197           L_SQL := L_SQL || ',' || R.APPLICATION_COLUMN_NAME || ' as ' || R.END_USER_COLUMN_NAME;
198         END IF;
199         if r.flex_value_set_id is not null then
200           if (r.data_type = 'C' or r.data_type = 'A' ) then
201               l_sql := l_sql || ',' || get_uda_attr_desc_sql('HEADER',
202                                      p_headerId,
203                                      p_draft_Id,
204                                      r.data_type,
205                                      r.application_column_name,
206                                      r.end_user_column_name,
207                                      rec.attr_group,
208                                      r.ATTR_ID );
209           end if;
210         end if;
211         L_CTR := L_CTR + 1;
212     END LOOP;
213     IF REC.MULTI_ROW = 'Y' THEN
214       L_SQL := L_SQL || ')))';
215     ELSE
216       L_SQL := L_SQL || ' ))';
217     END IF;
218     L_SQL := L_SQL || ' from po_headers_all_ext_vl where po_header_id = ' ||
219              p_headerId || ' AND draft_id = ' || p_draft_id ||
220              ' and attr_group_id = ' || REC.ATTR_GROUP_ID || ')' ;
221     L_O_CTR := L_O_CTR + 1;
222   END LOOP;
223 
224   l_op := ' select XMLConcat(' || l_sql || ') from dual';
225   execute immediate l_op into l_uda_xml;
226   RETURN (l_uda_xml);
227   END GET_UDA_HEADER_XML_PVT;
228 
229 
230   FUNCTION GET_UDA_HEADER_XML RETURN XMLType IS
231   begin
232     return(get_uda_header_xml_pvt(headerId, -1));
233   END GET_UDA_HEADER_XML;
234 
235   FUNCTION GET_UDA_HEADER_DRAFTS_XML(p_headerid NUMBER) RETURN XMLType IS
236   begin
237     return(get_uda_header_xml_pvt(p_headerid, p_draft_id));
238   END GET_UDA_HEADER_DRAFTS_XML;
239 
240 
241   function get_addressxml_pvt(p_header_id number, p_draft_id number) return CLOB as
242     l_where_sql varchar2(1000);
243     l_addr_sql varchar2(1000);
244     l_sql varchar2(4000);
245     l_col_name varchar2(50);
246     l_attr_grp_id number;
247     clob_addr CLOB;
248     c_addr SYS_REFCURSOR;
249     l_address varchar2(4000);
250   begin
251     l_where_sql := ' from po_headers_all_ext_vl where po_header_id = :1 and draft_id = :2';
252 
253     begin
254       SELECT 	ag.attr_group_id,
255               efdfce.application_column_name
256       into   l_attr_grp_id, l_col_name
257       FROM ego_fnd_dsc_flx_ctx_ext ag,
258            ego_fnd_df_col_usgs_ext efdfce,
259            fnd_descr_flex_column_usages fcu
260       WHERE efdfce.descriptive_flexfield_name = ag.descriptive_flexfield_name
261       and efdfce.descriptive_flex_context_code  = ag.descriptive_flex_context_code
262       and fcu.descriptive_flex_context_code = efdfce.descriptive_flex_context_code
263       and fcu.descriptive_flexfield_name = efdfce.descriptive_flexfield_name
264       and fcu.application_column_name = efdfce.application_column_name
265       and  ag.DESCRIPTIVE_FLEXFIELD_NAME = 'PO_HEADER_EXT_ATTRS'
266       and upper(ag.descriptive_flex_context_code) = upper('addresses')
267       and upper(fcu.end_user_column_name) = upper('addressdtlsxml');
268 
269       l_where_sql := l_where_sql || ' and attr_group_id = :3 ' ;
270 
271       l_addr_sql := 'select ' || l_col_name || ' as address ' ;
272 
273     exception
274     when no_data_found then
275       l_addr_sql := '';
276     end;
277 
278     if l_addr_sql is not null then
279       l_sql := l_addr_sql || l_where_sql;
280 
281       dbms_lob.createtemporary(clob_addr, true);
282       dbms_lob.open(clob_addr, dbms_lob.lob_readwrite);
283       open c_addr for l_sql using p_header_id, p_draft_id, l_attr_grp_id;
284       loop
285         fetch c_addr into l_address;
286         exit when c_addr%notfound;
287         if l_address is not null then
288         dbms_lob.writeappend(clob_addr, length(l_address), l_address);
289         end if;
290       end loop;
291       dbms_lob.close(clob_addr);
292     end if;
293     return(clob_addr);
294   end get_addressxml_pvt;
295 
296 
297   function get_contactsxml_pvt(p_header_id number , p_draft_id number) return CLOB as
298     l_cnt_sql varchar2(1000);
299     l_where_sql varchar2(1000);
300     l_sql varchar2(4000);
301     l_cnt varchar2(4000);
302     l_col_name varchar2(50);
303     l_attr_grp_id number;
304     c_cnt SYS_REFCURSOR;
305     clob_cnt CLOB;
306 
307   begin
308     l_where_sql := ' from po_headers_all_ext_vl where po_header_id = :1 and draft_id = :2';
309 
310     begin
311       SELECT 	ag.attr_group_id,
312               efdfce.application_column_name
313       into   l_attr_grp_id, l_col_name
314       FROM ego_fnd_dsc_flx_ctx_ext ag,
315            ego_fnd_df_col_usgs_ext efdfce,
316            fnd_descr_flex_column_usages fcu
317       WHERE efdfce.descriptive_flexfield_name = ag.descriptive_flexfield_name
318       and efdfce.descriptive_flex_context_code  = ag.descriptive_flex_context_code
319       and fcu.descriptive_flex_context_code = efdfce.descriptive_flex_context_code
320       and fcu.descriptive_flexfield_name = efdfce.descriptive_flexfield_name
321       and fcu.application_column_name = efdfce.application_column_name
322       and  ag.DESCRIPTIVE_FLEXFIELD_NAME = 'PO_HEADER_EXT_ATTRS'
323       and upper(ag.descriptive_flex_context_code) = upper('addresses')
324       and upper(fcu.end_user_column_name) = upper('contactdtlsxml');
325 
326       l_where_sql := l_where_sql || ' and attr_group_id = :3 ' ;
327 
328       l_cnt_sql := 'select ' || l_col_name || ' as contacts ' ;
329 
330     exception
331     when no_data_found then
332       l_cnt_sql := '';
333     end;
334 
335     if l_cnt_sql is not null then
336       l_sql := l_cnt_sql || l_where_sql;
337 
338       dbms_lob.createtemporary(clob_cnt, true);
339       dbms_lob.open(clob_cnt , dbms_lob.lob_readwrite);
340       open c_cnt for l_sql using p_header_id, p_draft_id, l_attr_grp_id;
341       loop
342         fetch c_cnt into l_cnt;
343         exit when c_cnt%notfound;
344         if l_cnt is not null then
345         dbms_lob.writeappend(clob_cnt, length(l_cnt), l_cnt);
346         end if;
347       end loop;
348       dbms_lob.close(clob_cnt);
349     end if;
350     return(clob_cnt);
351   end get_contactsxml_pvt;
352 
353   FUNCTION get_addressxml RETURN CLOB AS
354   BEGIN
355     return(get_addressxml_pvt(headerId, -1));
356   END get_addressxml;
357 
358   FUNCTION get_contactsxml RETURN CLOB AS
359   begin
360     return(get_contactsxml_pvt(headerId, -1));
361   END get_contactsxml;
362 
363   FUNCTION get_drafts_addressxml(p_headerId NUMBER) RETURN CLOB AS
364   begin
365     return(get_addressxml_pvt(p_headerId, p_draft_id));
366   END get_drafts_addressxml;
367 
368   FUNCTION get_drafts_contactsxml(p_headerId NUMBER) RETURN CLOB AS
369   begin
370     return(get_contactsxml_pvt(p_headerId, p_draft_id));
371   END get_drafts_contactsxml;
372 
373     FUNCTION get_vendor_address_details(uda_template_id NUMBER, p_header_id NUMBER, p_draft_id NUMBER) RETURN CLOB AS
374   v_clob_addr CLOB;
375   BEGIN
376   SELECT PO_UDA_PUB.GET_SINGLE_ATTR_VALUE(uda_template_id, NULL, p_header_id, p_draft_id, NULL, NULL, NULL, NULL,
377          'SUPPLIER_DTLS', NULL, 'HIDD_ADDRS_XML', 'INTERNAL_VALUE') INTO v_clob_addr FROM dual;
378 
379   RETURN v_clob_addr;
380   END get_vendor_address_details;
381 
382   FUNCTION get_vendor_contact_details(uda_template_id NUMBER, p_header_id NUMBER, p_draft_id NUMBER) RETURN CLOB AS
383   v_clob_addr CLOB;
384   BEGIN
385   SELECT PO_UDA_PUB.GET_SINGLE_ATTR_VALUE(uda_template_id, NULL, p_header_id, p_draft_id, NULL, NULL, NULL, NULL,
386          'SUPPLIER_DTLS', NULL, 'HIDD_CNTCT_XML', 'INTERNAL_VALUE') INTO v_clob_addr FROM dual;
387 
388   RETURN v_clob_addr;
389   END get_vendor_contact_details;
390 
391   FUNCTION get_issuing_off_loc_code(p_header_id number, p_draft_id number) RETURN VARCHAR2 AS
392   l_addr_dodac VARCHAR2 (1000);
393 
394   BEGIN
395       IF (p_draft_id = -1) then
396         l_addr_dodac := PO_UDA_PUB.GET_ADDRESS_ATTR_VALUE(NULL, 'PO_HEADER_EXT_ATTRS', p_header_id, -1, NULL, NULL, NULL, NULL,
397         'addresses', NULL, 'addresscode', 'ISSUING_OFFICE', 'DISPLAY_VALUE');
398         ELSE
399           l_addr_dodac := PO_UDA_PUB.GET_ADDRESS_ATTR_VALUE(NULL, 'PO_HEADER_EXT_ATTRS', p_header_id, p_draft_id, NULL, NULL, NULL, NULL,
400           'addresses', NULL, 'addresscode', 'MOD_ISSUING_OFFICE', 'DISPLAY_VALUE');
401       END IF;
402 
403     return(l_addr_dodac);
404 
405   EXCEPTION
406     WHEN Others THEN
407           l_addr_dodac := NULL;
408   end get_issuing_off_loc_code;
409 END;
410