DBA Data[Home] [Help]

PACKAGE BODY: APPS.EDW_UTIL

Source


1 PACKAGE BODY EDW_UTIL AS
2 /* $Header: EDWSRGTB.pls 115.15 2003/02/28 02:01:37 rjin ship $  */
3 VERSION                 CONSTANT CHAR(80) := '$Header: EDWSRGTB.pls 115.15 2003/02/28 02:01:37 rjin ship $';
4 
5 FUNCTION get_base_currency( p_organization_id  IN NUMBER)
6 		RETURN VARCHAR2  IS
7 
8 l_currency_code  VARCHAR2(15);
9 
10 BEGIN
11 		SELECT	gsob.currency_code
12 		INTO	l_currency_code
13 		FROM	hr_all_organization_units hou,
14 			hr_organization_information hoi,
15 			gl_sets_of_books gsob
16 		WHERE   hou.organization_id                             = hoi.organization_id
17 		        AND ( hoi.org_information_context || '')        ='Accounting Information'
18         		AND hoi.org_information1                        = to_char(gsob.set_of_books_id)
19         		AND hou.organization_id                         = p_organization_id;
20 
21  		return  l_currency_code;
22 
23 EXCEPTION when others then
24         return( 'Invalid - ' || p_organization_id);
25 
26 END get_base_currency;
27 
28 FUNCTION get_item_cost(p_item_id in number,
29                        p_org_id  in number)
30 		return NUMBER IS
31 
32 l_cost        NUMBER;
33 
34 BEGIN
35 
36   SELECT NVL(cst.item_cost,0)
37   INTO l_cost
38   FROM cst_cost_types cct,
39        mtl_parameters mtl,
40        cst_item_costs cst
41   WHERE (cst.cost_type_id = cct.cost_type_id
42         OR (cst.cost_type_id = cct.default_cost_type_id
43         AND (NOT EXISTS (SELECT 'Primary Cost Type Row'
44                         FROM cst_item_costs cst1
45                         WHERE cst1.inventory_item_id = cst.inventory_item_id
46                           AND cst1.organization_id = cst.organization_id
47                           AND cst1.cost_type_id = cct.cost_type_id))))
48     AND cct.costing_method_type = mtl.primary_cost_method
49     AND cct.cost_type_id = DECODE(mtl.primary_cost_method,1,1,2,2,1)
50     AND mtl.organization_id = p_org_id
51     AND cst.inventory_item_id = p_item_id
52     AND cst.organization_id = mtl.cost_organization_id;
53 
54 	return(l_cost);
55 
56 EXCEPTION
57         WHEN NO_DATA_FOUND THEN
58            return 0;
59 
60 END get_item_cost;
61 
62 /*
63 FUNCTION get_item_price(p_item_id in number,
64                         p_org_id  in number,
65                         p_price_list_id in number default null,
66                         p_currency in varchar2 default null)
67 		 return NUMBER  IS
68 
69 l_price number;
70 
71 BEGIN
72    SELECT round(list_price *
73 --          (1 - (NVL(FND_PROFILE.Value_Specific('MRP_BIS_AV_DISCOUNT'),0)/100)),
74           (1 - (NVL( fval1.profile_option_value, 0)/100)),
75                 NVL(spl.rounding_factor,2))
76    INTO l_price
77    FROM so_price_list_lines sopl,
78         fnd_profile_option_values fval1,
79         fnd_profile_options fpo1,
80         fnd_profile_option_values fval2,
81         fnd_profile_options fpo2,
82         mtl_system_items msi,
83         so_price_lists spl
84    WHERE spl.price_list_id  		= fval2.profile_option_value
85 --   WHERE spl.price_list_id  		= FND_PROFILE.Value_Specific('MRP_BIS_PRICE_LIST')
86    AND   sopl.price_list_id  		= spl.price_list_id
87    AND   sopl.inventory_item_id 	= p_item_id
88    AND   msi.inventory_item_id 		= p_item_id
89    AND   msi.organization_id 		= p_org_id
90    AND   nvl(sopl.unit_code,' ') 	= nvl(msi.primary_uom_code,' ')
91    AND   sysdate between nvl(sopl.start_date_active, sysdate-1)
92                   and nvl(sopl.end_date_active, sysdate+1)
93   AND   fval1.profile_option_id = fpo1.profile_option_id
94   AND   fval1.application_id = fpo1.application_id
95   AND   fval1.level_id = 10001  -- Site level
96   AND   fval1.level_value = 0
97   AND   nvl(fpo1.end_date_active,sysdate) >= sysdate
98   AND   fpo1.start_date_active <= sysdate
99   AND   fpo1.profile_option_name = 'MRP:MRP_BIS_AV_DISCOUNT'
100   AND   fval2.profile_option_id = fpo2.profile_option_id
101   AND   fval2.application_id = fpo2.application_id
102   AND   fval2.level_id = 10001  -- Site level
103   AND   fval2.level_value = 0
104   AND   nvl(fpo2.end_date_active,sysdate) >= sysdate
105   AND   fpo2.start_date_active <= sysdate
106   AND   fpo2.profile_option_name = 'MRP:MRP_BISPRICE_LIST'
107   AND   rownum 			= 1;
108 
109     return l_price;
110 
111 EXCEPTION
112         WHEN NO_DATA_FOUND THEN
113            return EDW_UTIL.get_item_cost(p_item_id, p_org_id);
114 
115 END get_item_price;
116 */
117 
118 FUNCTION get_est_ship_date (p_disposition_id IN NUMBER,
119                                 p_organization_id IN NUMBER,
120                                 p_compile_designator IN VARCHAR2)
121 			RETURN DATE IS
122 
123   l_days        NUMBER;
124 
125 BEGIN
126 
127   SELECT max(rec.new_schedule_date - peg2.demand_date)
128   INTO l_days
129   FROM mrp_gross_requirements greq,
130        mrp_recommendations rec,
131        mrp_full_pegging peg1,
132        mrp_full_pegging peg2
133   WHERE greq.disposition_id = p_disposition_id
134     AND peg1.demand_id = greq.demand_id
135     AND peg1.transaction_id = rec.transaction_id
136     AND peg1.pegging_id = peg2.end_pegging_id
137     AND peg2.organization_id = p_organization_id
138     AND peg2.compile_designator = p_compile_designator;
139 
140 
141   RETURN sysdate;
142 
143 EXCEPTION
144 
145   WHEN OTHERS THEN
146 
147     RETURN sysdate;
148 
149 END get_est_ship_date;
150 
151 FUNCTION get_party_id(p_sold_to_org_id IN NUMBER)
152                 RETURN NUMBER IS
153         l_party_id NUMBER;
154 BEGIN
155 
156 SELECT hca.party_id
157 INTO    l_party_id
158 FROM
159         hz_cust_accounts                hca
160 WHERE
161            hca.cust_account_id = p_sold_to_org_id;
162 
163 RETURN l_party_id;
164 
165 EXCEPTION
166         WHEN NO_DATA_FOUND THEN
167            return to_number(NULL);
168 END get_party_id;
169 
170 FUNCTION get_line_detail_count(p_line_id IN NUMBER)
171                 RETURN NUMBER IS
172         l_count NUMBER;
173 BEGIN
174 
175 SELECT  count(*)
176 INTO    l_count
177 FROM
178 wsh_delivery_details wdd
179 WHERE
180   wdd.SOURCE_LINE_ID = p_line_id
181   AND wdd.inv_interfaced_flag = 'Y'
182   and wdd.SOURCE_CODE = 'OE';
183 
184   /* just in case, there is bad data */
185   IF l_count = 0 THEN
186      l_count := 1;
187   END IF;
188 
189 RETURN l_count;
190 
191 EXCEPTION
192         WHEN NO_DATA_FOUND THEN
193            return 1;
194 END get_line_detail_count;
195 
196 FUNCTION get_pto_mmt_count(p_line_id IN NUMBER)
197                 RETURN NUMBER IS
198 	l_count NUMBER;
199 
200 BEGIN
201 
202    select count(*) INTO l_count
203 from wsh_delivery_details wdd,
204 oe_order_lines_all l
205 where l.top_model_line_id = p_line_id
206 and wdd.source_line_id = l.line_id
207 AND wdd.inv_interfaced_flag = 'Y'
208 and wdd.SOURCE_CODE = 'OE';
209 
210    /*
211 SELECT  count(*)
212 INTO    l_count
213 FROM
214         mtl_material_transactions
215 WHERE
216         trx_source_line_id = p_line_id;
217   */
218 
219   /* just in case, there is bad data */
220   IF l_count = 0 THEN
221      l_count := 1;
222   END IF;
223 
224 RETURN l_count;
225 
226 EXCEPTION
227         WHEN NO_DATA_FOUND THEN
228            return 1;
229 END get_pto_mmt_count;
230 
231 
232 FUNCTION get_wh_global_currency RETURN VARCHAR2 IS
233     v_currency_code	VARCHAR2(20);
234 BEGIN
235 
236 SELECT warehouse_currency_code
237 INTO v_currency_code
238 FROM edw_local_system_parameters;
239 
240 RETURN (v_currency_code);
241 
242 EXCEPTION
243         WHEN NO_DATA_FOUND THEN
244            RETURN('UNKNOWN');
245 
246 END get_wh_global_currency;
247 
248 FUNCTION get_rep_sched_scrapped_qty(rep_sched_id number,
249 				organization_id number) RETURN NUMBER IS
250 l_scrapped number:=0;
251 BEGIN
252 	begin
253 	select sum(wo.quantity_scrapped) into
254 		l_scrapped
255 	from wip_operations wo
256 	where
257 		wo.repetitive_schedule_id=rep_sched_id
258 	and	wo.organization_id=organization_id;
259 	exception when others then
260 		l_scrapped:=0;
261 	end;
262 
263 	return l_scrapped;
264 END get_rep_sched_scrapped_qty;
265 
266 FUNCTION get_app_info return VARCHAR2 is
267 l_dummy1 Varchar2(32);
268 l_dummy2 Varchar2(32);
269 l_retval Boolean;
270 l_bis_owner Varchar2(32):='BIS';
271 
272 begin
273 l_retval := FND_INSTALLATION.GET_APP_INFO('BIS',
274 				l_dummy1, l_dummy2,
275 				l_bis_owner);
276 return l_bis_owner;
277 exception when others then
278 	return l_bis_owner;
279 
280 end get_app_info ;
281 
282 function get_base_transaction_value(p_transaction_id number,
283 				p_transfer_transaction_id number,
284 				p_action_id number,
285 				p_quantity number) RETURN NUMBER IS
286 l_value number;
287 begin
288 
289 	select sum(BASE_TRANSACTION_VALUE) into l_value
290 	 from
291 		MTL_TRANSACTION_ACCOUNTS
292 	where
293 		ACCOUNTING_LINE_TYPE=1
294 	and     sign(primary_quantity) 	= decode(p_action_id,2,
295                                             sign(p_quantity),
296                                             sign(primary_quantity))
297 	and	TRANSACTION_ID 		= decode(p_action_id,
298 						2, decode(sign(p_quantity),
299 								-1,p_transaction_id,
300 								p_transfer_transaction_id),
301 						3, decode(sign(p_quantity),
302 								-1,p_transaction_id,
303 								p_transfer_transaction_id),
304 								p_transaction_id);
305 
306 	return nvl(l_value,0);
307 
308 exception when others then
309 	return 0;
310 end get_base_transaction_value;
311 
312 /******************************************************************************
313  * Convert transactional UOM to EDW Base UOM
314  ******************************************************************************/
315 FUNCTION get_edw_base_uom(p_uom_code IN VARCHAR2,
316                      p_inventory_id IN NUMBER)
317                 RETURN VARCHAR2 IS
318 l_inventory_id          NUMBER;
319 l_edw_uom_code          VARCHAR2(20);
320 CURSOR global_uom_c IS
321   SELECT UOM_EDW_BASE_UOM
322     FROM EDW_MTL_LOCAL_UOM_M
323    WHERE
324         UOM_EDW_UOM_PK = p_uom_code
325         AND UOM_global_flag = 'Y';
326 CURSOR uom_c IS
327   SELECT edw_base_uom_fk
328     FROM OPI_EDW_LOCAL_UOM_CONV_F, edw_local_instance
329    WHERE ((l_inventory_id IS NULL OR l_inventory_id = 0)
330         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'|| instance_code)
331       OR (l_inventory_id <> 0
332         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||instance_code);
333 BEGIN
334         l_inventory_id := p_inventory_id;
335         OPEN global_uom_c;
336         FETCH global_uom_c INTO l_edw_uom_code;
337         IF global_uom_c%NOTFOUND THEN
338            CLOSE global_uom_c;
339            OPEN uom_c;
340            FETCH uom_c INTO l_edw_uom_code;
341            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
342              l_inventory_id := 0;
343              CLOSE uom_c;
344 -- no item specific uom - getting STANDARD uom
345              OPEN uom_c;
346              FETCH uom_c INTO l_edw_uom_code;
347            END IF;
348            IF uom_c%NOTFOUND THEN
349 	     -- Fix for Bug# 1844559
350              -- RETURN 'NA_EDW';
351 		RETURN 'Invalid - '||p_uom_code ;
352            ELSE
353              RETURN l_edw_uom_code;
354            END IF;
355         ELSE
356            RETURN l_edw_uom_code;
357         END IF;
358 EXCEPTION WHEN OTHERS THEN
359         RETURN('Invalid - '||p_uom_code);
360 END get_edw_base_uom;
361 
362 /********************************************************************************************************
363  * Convert transactional UOM to EDW Base UOM (overloaded version that accepts Instance_Code as Parameter)
364  *******************************************************************************************************/
365 
366 
367 FUNCTION get_edw_base_uom(p_uom_code IN VARCHAR2,
368                      p_inventory_id IN NUMBER, p_instance_code IN VARCHAR2)
369                 RETURN VARCHAR2 IS
370 l_inventory_id          NUMBER;
371 l_edw_uom_code          VARCHAR2(20);
372 CURSOR global_uom_c IS
373   SELECT UOM_EDW_BASE_UOM
374     FROM EDW_MTL_LOCAL_UOM_M
375    WHERE
376         UOM_EDW_UOM_PK = p_uom_code
377         AND UOM_global_flag = 'Y';
378 CURSOR uom_c IS
379   SELECT edw_base_uom_fk
380     FROM OPI_EDW_LOCAL_UOM_CONV_F
381    WHERE ((l_inventory_id IS NULL OR l_inventory_id = 0)
382         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'||p_instance_code)
383       OR (l_inventory_id <> 0
384         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||p_instance_code);
385 BEGIN
386         l_inventory_id := p_inventory_id;
387         OPEN global_uom_c;
388         FETCH global_uom_c INTO l_edw_uom_code;
389         IF global_uom_c%NOTFOUND THEN
390            CLOSE global_uom_c;
391            OPEN uom_c;
392            FETCH uom_c INTO l_edw_uom_code;
393            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
394              l_inventory_id := 0;
395              CLOSE uom_c;
396 -- no item specific uom - getting STANDARD uom
397              OPEN uom_c;
398              FETCH uom_c INTO l_edw_uom_code;
399            END IF;
400            IF uom_c%NOTFOUND THEN
401 	     -- Fix for Bug# 1844559
402              -- RETURN 'NA_EDW';
403 		RETURN 'Invalid - '||p_uom_code ;
404            ELSE
405              RETURN l_edw_uom_code;
406            END IF;
407         ELSE
408            RETURN l_edw_uom_code;
409         END IF;
410 EXCEPTION WHEN OTHERS THEN
411         RETURN('Invalid - '||p_uom_code);
412 END get_edw_base_uom;
413 
414 
415 /******************************************************************************
416  * Get conversion_rate for conversion from transactional UOM to EDW Base UOM
417  ******************************************************************************/
418 FUNCTION get_uom_conv_rate(p_uom_code IN VARCHAR2,
419                            p_inventory_id IN NUMBER)
420                 RETURN NUMBER IS
421 l_inventory_id          NUMBER;
422 l_edw_conv_rate         NUMBER;
423 
424 CURSOR global_uom_c IS
425   SELECT UOM_conversion_rate
426     FROM EDW_MTL_LOCAL_UOM_M
427    WHERE
428         UOM_EDW_UOM_PK = p_uom_code
429         AND UOM_global_flag = 'Y';
430 CURSOR uom_c IS
431   SELECT EDW_CONVERSION_RATE
432     FROM OPI_EDW_LOCAL_UOM_CONV_F, edw_local_instance
433    WHERE
434     CLASS_CONVERSION_FLAG = 'N' AND (
435 ((l_inventory_id IS NULL OR l_inventory_id = 0)
436         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'|| instance_code)
437       OR (l_inventory_id <> 0
438         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||instance_code) );
439 BEGIN
440         l_inventory_id := p_inventory_id;
441         OPEN global_uom_c;
442         FETCH global_uom_c INTO l_edw_conv_rate;
443         IF global_uom_c%NOTFOUND THEN
444            CLOSE global_uom_c;
445            OPEN uom_c;
446            FETCH uom_c INTO l_edw_conv_rate;
447            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
448              l_inventory_id := 0;
449              CLOSE uom_c;
450 -- no item specific uom. Getting STANDARD uom
451              OPEN uom_c;
452              FETCH uom_c INTO l_edw_conv_rate;
453            END IF;
454            IF uom_c%NOTFOUND THEN
455              RETURN 'NA_EDW';
456            ELSE
460            RETURN l_edw_conv_rate;
457              RETURN l_edw_conv_rate;
458            END IF;
459         ELSE
461         END IF;
462 EXCEPTION WHEN OTHERS THEN
463         RETURN(NULL);
464 
465 END get_uom_conv_rate;
466 
467 
468 /****************************************************************************************************************************************
469  * Get conversion_rate for conversion from transactional UOM to EDW Base UOM (overloaded version that accepts Instance_Code as Parameter)
470  ***************************************************************************************************************************************/
471 
472 FUNCTION get_uom_conv_rate(p_uom_code IN VARCHAR2,
473                            p_inventory_id IN NUMBER, p_instance_code IN VARCHAR2)
474                 RETURN NUMBER IS
475 l_inventory_id          NUMBER;
476 l_edw_conv_rate         NUMBER;
477 
478 CURSOR global_uom_c IS
479   SELECT UOM_conversion_rate
480     FROM EDW_MTL_LOCAL_UOM_M
481    WHERE
482         UOM_EDW_UOM_PK = p_uom_code
483         AND UOM_global_flag = 'Y';
484 CURSOR uom_c IS
485   SELECT EDW_CONVERSION_RATE
486     FROM OPI_EDW_LOCAL_UOM_CONV_F
487    WHERE
488     CLASS_CONVERSION_FLAG = 'N' AND (
489 ((l_inventory_id IS NULL OR l_inventory_id = 0)
490         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'|| p_instance_code )
491       OR (l_inventory_id <> 0
492         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||p_instance_code) );
493 BEGIN
494         l_inventory_id := p_inventory_id;
495         OPEN global_uom_c;
496         FETCH global_uom_c INTO l_edw_conv_rate;
497         IF global_uom_c%NOTFOUND THEN
498            CLOSE global_uom_c;
499            OPEN uom_c;
500            FETCH uom_c INTO l_edw_conv_rate;
501            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
502              l_inventory_id := 0;
503              CLOSE uom_c;
504 -- no item specific uom. Getting STANDARD uom
505              OPEN uom_c;
506              FETCH uom_c INTO l_edw_conv_rate;
507            END IF;
508            IF uom_c%NOTFOUND THEN
509              RETURN 'NA_EDW';
510            ELSE
511              RETURN l_edw_conv_rate;
512            END IF;
513         ELSE
514            RETURN l_edw_conv_rate;
515         END IF;
516 EXCEPTION WHEN OTHERS THEN
517         RETURN(NULL);
518 
519 END get_uom_conv_rate;
520 
521 /************************************************************************************
522  * Get conversion_rate for conversion from one EDW Base UOM to another EDW Base UOM
523  ************************************************************************************/
524 
525 FUNCTION get_uom_conv_rate(p_inventory_id IN NUMBER,
526                            p_from_edw_base_uom_code IN VARCHAR2,
527                            p_to_edw_base_uom_code IN VARCHAR2)
528                            RETURN NUMBER IS
529 l_inventory_id          NUMBER;
530 l_edw_conv_rate         NUMBER;
531 
532 CURSOR uom_c IS
533   SELECT EDW_CONVERSION_RATE
534     FROM OPI_EDW_LOCAL_UOM_CONV_F, edw_local_instance
535    WHERE
536     CLASS_CONVERSION_FLAG = 'Y' AND (
537 ((l_inventory_id IS NULL OR l_inventory_id = 0)
538         AND uom_conv_pk = 'STANDARD'||'-'|| p_from_edw_base_uom_code||'-'||
539          p_to_edw_base_uom_code||'-'||instance_code)
540       OR (l_inventory_id <> 0
541         AND uom_conv_pk = l_inventory_id||'-'|| p_from_edw_base_uom_code||'-'||
542   p_to_edw_base_uom_code||'-'||instance_code) );
543 
544 BEGIN
545         l_inventory_id := p_inventory_id;
546         OPEN uom_c;
547         FETCH uom_c INTO l_edw_conv_rate;
548         IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
549            l_inventory_id := 0;
550            CLOSE uom_c;
551 -- no item specific uom. Getting STANDARD uom
552            OPEN uom_c;
553            FETCH uom_c INTO l_edw_conv_rate;
554         END IF;
555         IF uom_c%NOTFOUND THEN
556               CLOSE uom_c;
557               RETURN 'NA_EDW';
558         ELSE
559               CLOSE uom_c;
560               RETURN l_edw_conv_rate;
561         END IF;
562 EXCEPTION WHEN OTHERS THEN
563         RETURN(NULL);
564 
565 END get_uom_conv_rate;
566 
567 
568 /***********************************************************************************************************************************************
569  * Get conversion_rate for conversion from one EDW Base UOM to another EDW Base UOM (overloaded version that accepts Instance_Code as Parameter)
570  **********************************************************************************************************************************************/
571 
572 FUNCTION get_uom_conv_rate(p_inventory_id IN NUMBER,
573                            p_from_edw_base_uom_code IN VARCHAR2,
574                            p_to_edw_base_uom_code IN VARCHAR2, p_instance_code IN VARCHAR2)
575                            RETURN NUMBER IS
576 l_inventory_id          NUMBER;
577 l_edw_conv_rate         NUMBER;
578 
579 CURSOR uom_c IS
580   SELECT EDW_CONVERSION_RATE
581     FROM OPI_EDW_LOCAL_UOM_CONV_F
582    WHERE
583     CLASS_CONVERSION_FLAG = 'Y' AND (
587       OR (l_inventory_id <> 0
584 ((l_inventory_id IS NULL OR l_inventory_id = 0)
585         AND uom_conv_pk = 'STANDARD'||'-'|| p_from_edw_base_uom_code||'-'||
586          p_to_edw_base_uom_code||'-'||p_instance_code)
588         AND uom_conv_pk = l_inventory_id||'-'|| p_from_edw_base_uom_code||'-'||
589   p_to_edw_base_uom_code||'-'||p_instance_code) );
590 
591 BEGIN
592         l_inventory_id := p_inventory_id;
593         OPEN uom_c;
594         FETCH uom_c INTO l_edw_conv_rate;
595         IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
596            l_inventory_id := 0;
597            CLOSE uom_c;
598 -- no item specific uom. Getting STANDARD uom
599            OPEN uom_c;
600            FETCH uom_c INTO l_edw_conv_rate;
601         END IF;
602         IF uom_c%NOTFOUND THEN
603               CLOSE uom_c;
604               RETURN 'NA_EDW';
605         ELSE
606               CLOSE uom_c;
607               RETURN l_edw_conv_rate;
608         END IF;
609 EXCEPTION WHEN OTHERS THEN
610         RETURN(NULL);
611 
612 END get_uom_conv_rate;
613 
614 /******************************************************************************
615  * Get EDW UOM corresponding to a transactional UOM
616  ******************************************************************************/
617 FUNCTION get_edw_uom(p_uom_code IN VARCHAR2,
618                      p_inventory_id IN NUMBER)
619                 RETURN VARCHAR2 IS
620 l_inventory_id          NUMBER;
621 l_edw_uom_code          VARCHAR2(20);
622 CURSOR global_uom_c IS
623   SELECT uom_edw_uom_pk
624     FROM EDW_MTL_LOCAL_UOM_M
625    WHERE
626         UOM_EDW_UOM_PK = p_uom_code
627         AND UOM_global_flag = 'Y';
628 CURSOR uom_c IS
629   SELECT edw_uom_fk
630     FROM OPI_EDW_LOCAL_UOM_CONV_F, edw_local_instance
631    WHERE ((l_inventory_id IS NULL OR l_inventory_id = 0)
632         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'|| instance_code)
633       OR (l_inventory_id <> 0
634         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||instance_code);
635 BEGIN
636         l_inventory_id := p_inventory_id;
637         OPEN global_uom_c;
638         FETCH global_uom_c INTO l_edw_uom_code;
639         IF global_uom_c%NOTFOUND THEN
640            CLOSE global_uom_c;
641            OPEN uom_c;
642            FETCH uom_c INTO l_edw_uom_code;
643            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
644              l_inventory_id := 0;
645              CLOSE uom_c;
646 -- no item specific uom - getting STANDARD uom
647              OPEN uom_c;
648              FETCH uom_c INTO l_edw_uom_code;
649            END IF;
650            IF uom_c%NOTFOUND THEN
651 	     -- Fix for Bug# 1844559
652              -- RETURN 'NA_EDW';
653 		RETURN 'Invalid - '||p_uom_code ;
654            ELSE
655              RETURN l_edw_uom_code;
656            END IF;
657         ELSE
658            RETURN l_edw_uom_code;
659         END IF;
660 EXCEPTION WHEN OTHERS THEN
661         RETURN('Invalid - '||p_uom_code);
662 END get_edw_uom;
663 
664 
665 /***************************************************************************************************************
666  * Get EDW UOM corresponding to a transactional UOM (overloaded version that accepts Instance_Code as Parameter)
667  **************************************************************************************************************/
668 FUNCTION get_edw_uom(p_uom_code IN VARCHAR2,
669                      p_inventory_id IN NUMBER, p_instance_code IN VARCHAR2)
670                 RETURN VARCHAR2 IS
671 l_inventory_id          NUMBER;
672 l_edw_uom_code          VARCHAR2(20);
673 CURSOR global_uom_c IS
674   SELECT uom_edw_uom_pk
675     FROM EDW_MTL_LOCAL_UOM_M
676    WHERE
677         UOM_EDW_UOM_PK = p_uom_code
678         AND UOM_global_flag = 'Y';
679 CURSOR uom_c IS
680   SELECT edw_uom_fk
681     FROM OPI_EDW_LOCAL_UOM_CONV_F
682    WHERE ((l_inventory_id IS NULL OR l_inventory_id = 0)
683         AND uom_conv_pk = 'STANDARD'||'-'|| p_uom_code||'-'|| p_instance_code)
684       OR (l_inventory_id <> 0
685         AND uom_conv_pk = l_inventory_id||'-'||p_uom_code||'-'||p_instance_code);
686 BEGIN
687         l_inventory_id := p_inventory_id;
688         OPEN global_uom_c;
689         FETCH global_uom_c INTO l_edw_uom_code;
690         IF global_uom_c%NOTFOUND THEN
691            CLOSE global_uom_c;
692            OPEN uom_c;
693            FETCH uom_c INTO l_edw_uom_code;
694            IF uom_c%NOTFOUND AND l_inventory_id <> 0 THEN
695              l_inventory_id := 0;
696              CLOSE uom_c;
697 -- no item specific uom - getting STANDARD uom
698              OPEN uom_c;
699              FETCH uom_c INTO l_edw_uom_code;
700            END IF;
701            IF uom_c%NOTFOUND THEN
702 	     -- Fix for Bug# 1844559
703              -- RETURN 'NA_EDW';
704 		RETURN 'Invalid - '||p_uom_code ;
705            ELSE
706              RETURN l_edw_uom_code;
707            END IF;
708         ELSE
709            RETURN l_edw_uom_code;
710         END IF;
711 EXCEPTION WHEN OTHERS THEN
712         RETURN('Invalid - '||p_uom_code);
713 END get_edw_uom;
714 
715 /******************************************************************************
716  * Get the required Id. based on p_type being 1 - 5
717  ******************************************************************************/
718 -- --------------------------------------------------------------
719 -- For Operating Unit p_type = 1,
720 -- For Business Unit  p_type = 2,
721 -- For Legal Entity   p_type = 3,
722 -- For Set of Books   p_type = 4
723 -- For Chart of Acct. p_type = 5
724 -- --------------------------------------------------------------
725 
726 FUNCTION bus_unit_id (p_type IN NUMBER,
727                       p_organization_id IN NUMBER) return NUMBER IS
728 
729 l_bus_unit_id		NUMBER;
730 
731 cursor c is
732 	SELECT decode(p_type,
733 		1,DECODE(FPG.MULTI_ORG_FLAG,'Y',TO_NUMBER(HOI.ORG_INFORMATION3), NULL),
734 		2,HOU.BUSINESS_GROUP_ID,
735 		3,TO_NUMBER(HOI.ORG_INFORMATION2),
736 		4,GSOB.SET_OF_BOOKS_ID,
737 		5,GSOB.CHART_OF_ACCOUNTS_ID)
738 	FROM
739 		HR_all_ORGANIZATION_UNITS HOU,
740 		HR_ORGANIZATION_INFORMATION HOI,
741 		GL_SETS_OF_BOOKS GSOB,
742 		FND_PRODUCT_GROUPS FPG
743 	WHERE
744 		HOU.ORGANIZATION_ID 			= HOI.ORGANIZATION_ID
745 	AND 	(HOI.ORG_INFORMATION_CONTEXT || '') 	='Accounting Information'
746 	AND 	HOI.ORG_INFORMATION1 			= TO_CHAR(GSOB.SET_OF_BOOKS_ID)
747 	AND 	HOU.organization_id			= p_organization_id;
748 BEGIN
749 	l_bus_unit_id := -1;
750 
751 	OPEN c;
752 	FETCH c INTO l_bus_unit_id;
753 	CLOSE c;
754 
755 	return l_bus_unit_id;
756 
757 
758 EXCEPTION when others then
759 	close c;
760 	return -1;
761 
762 END bus_unit_id;
763 
764 END EDW_UTIL;
765