DBA Data[Home] [Help]

PACKAGE BODY: APPS.FTE_FREIGHT_PRICING_UTIL

Source


1 PACKAGE BODY FTE_FREIGHT_PRICING_UTIL AS
2 /* $Header: FTEFRUTB.pls 120.2 2005/10/25 14:52:41 susurend noship $ */
3 
4    -- package global variables
5    g_utl_file_name    VARCHAR2(255);
6    g_utl_file_dir     VARCHAR2(255);
7    g_file_ptr         utl_file.file_type;
8    g_log_level        NUMBER := G_LOG;
9    g_msg_count        NUMBER := 0; -- this variable keeps track of how many messages we added to the
10                                    -- fnd message stack
11 
12 
13    PROCEDURE reset_dbg_vars IS
14    BEGIN
15       g_method   := NULL;
16       g_location := NULL;
17       g_exception := NULL;
18    END;
19 
20    PROCEDURE set_debug_on IS
21    BEGIN
22       g_debug := true;
23    END;
24 
25    PROCEDURE set_debug_off IS
26    BEGIN
27       g_debug := false;
28    END;
29 
30    PROCEDURE set_method(p_log_level IN NUMBER DEFAULT G_LOG,
31                         p_met IN VARCHAR2,
32                         p_loc IN VARCHAR2 DEFAULT NULL)
33    IS
34    BEGIN
35 
36      IF (g_log_level >= p_log_level) THEN
37       g_method      := p_met;
38       g_location    := p_loc;
39       --print_msg('<Method '||p_met||' >');
40       --print_tag(p_msg => '<Method '||p_met||' >');
41       print_tag(p_msg => '<'||p_met||' >');
42       print_msg(G_DBG,'Method = '||p_met||' loc = '||'Start');
43     END IF;
44    END;
45 
46    PROCEDURE unset_method(p_log_level IN NUMBER DEFAULT G_LOG,
47                           p_met IN VARCHAR2)
48    IS
49    BEGIN
50      IF (g_log_level >= p_log_level) THEN
51       g_method      := p_met;
52       print_msg(G_DBG,'Method = '||p_met||' loc = '||'End');
53       --print_tag(p_msg => '</Method '||p_met||' >');
54       print_tag(p_msg => '</'||p_met||' >');
55       --print_msg('</Method '||p_met||' >');
56      END IF;
57    END;
58 
59    PROCEDURE set_location(p_log_level IN NUMBER DEFAULT G_DBG, p_loc IN VARCHAR2)
60    IS
61    BEGIN
62     IF (g_log_level >= p_log_level) THEN
63       g_location   := p_loc;
64       print_msg(p_log_level,p_loc);
65     END IF;
66    END;
67 
68    PROCEDURE set_exit_exception(p_met IN VARCHAR2, p_exc IN VARCHAR2)
69    IS
70       l_message_name      VARCHAR2(1000);
71    BEGIN
72       set_exception(p_met=>p_met,p_exc=>p_exc);
73       l_message_name := get_log_file_name;
74       FND_MESSAGE.SET_NAME('FTE','FTE_PRC_LOG_FILE_NAME');
75       FND_MESSAGE.SET_TOKEN('LOGFILE',l_message_name);
76       FND_MSG_PUB.ADD;
77       g_msg_count := g_msg_count + 1;
78    END set_exit_exception;
79 
80    -- TODO  handle token runtime
81    PROCEDURE set_exception(p_met IN VARCHAR2,
82                            p_log_level IN NUMBER DEFAULT G_LOG,
83                            p_exc IN VARCHAR2)
84    IS
85       l_message_name      VARCHAR2(255);
86    BEGIN
87     IF (g_log_level >= p_log_level) THEN
88       print_tag(G_ERR,'<EXCEPTION>');
89       print_tag(G_ERR,'<METHOD>'||p_met||'</METHOD>');
90       print_msg(G_ERR,p_exc);
91       print_tag(G_ERR,'</EXCEPTION>');
92     END IF;
93 /* not put message on fnd error stack, outer wrapper decide what to put on message stack
94       g_exception   := p_exc;
95       l_message_name := 'FTE'||UPPER(SUBSTR(p_exc,2,LENGTH(p_exc)));
96       IF p_exc <> 'g_others' THEN
97          IF p_exc IN ('g_no_currency_found','g_no_price_list_on_lane','g_qp_price_request_failed',
98                       'g_category_not_found','g_no_segment_service_type','g_empty_delivery',
99                       'g_pricing_not_required','g_not_on_pricelist',
100                       'g_invalid_basis','g_loose_item_wrong_basis','g_invalid_fc_type',
101                       'g_invalid_line_quantity','g_def_wt_break_not_found',
102                       'g_invalid_uom_conversion',
103                       -- new exceptions for pack I
104                       'g_freight_costs_int_fail', 'g_freight_costs_int_fail', 'g_ln_no_lane_found',
105                       'g_ln_too_many_found', 'g_lane_search_failed', 'g_no_ship_method',
106                       'g_invalid_ship_method', 'g_get_cost_type_failed',
107                       -- new exceptions for pack J
108                       --SUSUREND 2-Oct-2003 only exceptions with no tokens listed here
109                       'g_invalid_parameters','g_unsupported_action',
110                       'g_tl_no_pallet_item_type','g_tl_fetch_alloc_param_fail'
111 
112            )  THEN
113             FND_MESSAGE.SET_NAME('FTE',l_message_name);
114             FND_MSG_PUB.ADD;
115             g_msg_count := g_msg_count + 1;
116          END IF;
117       ELSE
118          FND_MESSAGE.SET_NAME('FTE','FTE_UNEXPECTED_ERROR');
119          FND_MSG_PUB.ADD;
120          g_msg_count := g_msg_count + 1;
121       END IF;
122 */
123    END;
124 
125    PROCEDURE printf(p_msg IN VARCHAR2) IS
126    BEGIN
127       IF (utl_file.is_open(g_file_ptr)) THEN
128           utl_file.put_line(g_file_ptr,p_msg);
129           --utl_file.put_line(g_file_ptr,'<L>'||p_msg||'</L>');
130           utl_file.fflush(g_file_ptr);
131       END IF;
132    END printf;
133 
134    PROCEDURE print_msg( p_log_level IN NUMBER DEFAULT G_LOG, p_msg IN VARCHAR2 )
135    IS
136    BEGIN
137      IF (g_debug) THEN
138        IF (g_log_level >= p_log_level) THEN
139         IF (g_debug_mode = 'CONC') THEN
140           FND_FILE.put_line(FND_FILE.LOG,p_msg);
141         ELSIF (g_debug_mode = 'FILE') THEN
142           --printf(p_msg);
143           printf('<L>'||p_msg||'</L>');
144         ELSE
145           --dbms_output.put_line(p_msg);
146           null;
147         END IF;
148        END IF;
149      END IF;
150    END;
151 
152    PROCEDURE print_tag( p_log_level IN NUMBER DEFAULT G_LOG, p_msg IN VARCHAR2 )
153    IS
154    BEGIN
155      IF (g_debug) THEN
156        IF (g_log_level >= p_log_level) THEN
157         IF (g_debug_mode = 'CONC') THEN
158           FND_FILE.put_line(FND_FILE.LOG,p_msg);
159         ELSIF (g_debug_mode = 'FILE') THEN
160           printf(p_msg);
161         ELSE
162           --dbms_output.put_line(p_msg);
163           null;
164         END IF;
165        END IF;
166      END IF;
167    END;
168 
169    -- flushes the log buffers
170    PROCEDURE flush_logs IS
171    BEGIN
172         IF (g_debug_mode = 'FILE') THEN
173           utl_file.fflush(g_file_ptr);
174         END IF;
175    END flush_logs;
176 
177 
178    -- flushes the log files. Should be called at all exit points
179    PROCEDURE close_logs  IS
180    BEGIN
181         -- IF NOT G_OE_DEBUG THEN
182         --    OE_DEBUG_PUB.Debug_off;
183         -- END IF;
184         printf('<L>PROGRAM END TIME '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS')||'</L>');
185         print_tag(p_msg => '</PROGRAM_FTE_FREIGHT_PRICING>');
186         IF (g_debug_mode = 'FILE') THEN
187             IF (utl_file.is_open(g_file_ptr)) THEN
188                utl_file.fclose(g_file_ptr);
189             END IF;
190             g_utl_file_name := NULL;
191         ELSIF (g_debug_mode = 'CONC') THEN
192           -- FND_FILE.close;
193              null;
194         ELSE
195             null;
196         END IF;
197    EXCEPTION
198     WHEN OTHERS THEN
199        null;
200    END close_logs;
201 
202 
203    -- This procedure checks the profile options to:
204       --  check if debuging is turned on for the user
205       --  get the location of the debug trace directory
206    -- It initializes the debug trace file if debug is on
207    -- It should be called at the beginning of each entry point
208 
209    PROCEDURE initialize_logging (p_debug_mode IN VARCHAR2 DEFAULT NULL,
210                                  p_init_msg_list IN VARCHAR2 DEFAULT fnd_api.g_false,
211                                  x_return_status OUT NOCOPY  VARCHAR2)
212    IS
213         l_debug_prof_val        VARCHAR2(1);
214         l_qp_debug_prof_val     VARCHAR2(1);
215         l_log_level_prof_val    VARCHAR2(10);
216    BEGIN
217 
218       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
219        -- Initialize message list if p_init_msg_list is set to TRUE.
220       g_msg_count := 0;
221       IF FND_API.to_Boolean( p_init_msg_list ) THEN
222          FND_MSG_PUB.initialize;
223       END IF;
224 
225       IF (p_debug_mode IS NOT NULL) THEN
226          g_debug_mode := p_debug_mode;
227       END IF;
228 
229       l_debug_prof_val  := nvl(FND_PROFILE.value('FTE_PRC_DEBUG_FLAG'),'N');
230       IF (l_debug_prof_val = 'Y') THEN
231           g_debug := true;
232       END IF;
233 
234       l_log_level_prof_val  := nvl(FND_PROFILE.value('FTE_PRC_LOG_LEVEL'),'1');
235       g_log_level := TO_NUMBER(l_log_level_prof_val);
236 
237       IF (g_debug_mode = 'FILE' AND g_debug = true AND g_utl_file_name IS NULL) THEN
238 
239 
240             --g_utl_file_dir      := nvl(FND_PROFILE.value('FTE_PRC_DEBUG_LOG_DIR'),'/sqlcom/log/ftewshg');
241             g_utl_file_dir      := FND_PROFILE.value('FTE_PRC_DEBUG_LOG_DIR');
242             IF g_utl_file_dir IS NULL THEN
243 
244                --set_exception(p_met=>p_met,p_exc=>p_exc);
245                FND_MESSAGE.SET_NAME('FTE','FTE_PRC_MISSING_LOG_DIR');
246                FND_MSG_PUB.ADD;
247                g_msg_count := g_msg_count + 1;
248                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
249                RETURN;
250 
251             END IF;
252             SELECT 'prc_'||to_char(sysdate,'MMDDYYHH24MISS')||'-'||fte_prc_debug_s.nextval|| '.dbg'
253             INTO   g_utl_file_name
254             FROM   dual;
255             g_file_ptr := utl_file.fopen(g_utl_file_dir, g_utl_file_name, 'w');
256 
257             print_tag(p_msg => '<PROGRAM_FTE_FREIGHT_PRICING>');
258             printf('<L>PROGRAM START TIME '||to_char(sysdate,'DD-MON-YYYY HH24:MI:SS')||'</L>');
259 
260             -- IF nvl(FND_PROFILE.value('QP_DEBUG'),'N') = 'Y' THEN
261             --    IF NOT OE_DEBUG_PUB.ISDebugOn THEN
262             --       G_OE_DEBUG := FALSE;
263             --       OE_DEBUG_PUB.Debug_On;
264             --       OE_DEBUG_PUB.Initialize;
265             --    ELSE
266             --       G_OE_DEBUG := TRUE;
267             --    END IF;
268             --    printf('<L>The QP Debug File is '|| OE_DEBUG_PUB.Set_Debug_Mode('FILE')||'</L>');
269             -- ELSE
270             --    printf('<L>QP Debug is Off</L>');
271             -- END IF;
272 
273       END IF;
274 
275    EXCEPTION
276       WHEN others THEN
277            -- x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
278            g_debug := false;
279            -- dbms_output.put_line ('Unexpected error '||SQLCODE||'-'||SQLERRM);
280    END initialize_logging;
281 
282    FUNCTION get_log_file_name RETURN VARCHAR2
283    IS
284       l_ret_val   VARCHAR2(255);
285    BEGIN
286        IF (g_utl_file_name is NOT NULL) THEN
287              l_ret_val := g_utl_file_dir||'/'||g_utl_file_name;
288        END IF;
289        RETURN l_ret_val;
290    END get_log_file_name;
291 
292    FUNCTION get_lookup_meaning (p_lookup_type IN VARCHAR2,
293                                 p_lookup_code IN VARCHAR2)
294    RETURN VARCHAR2
295    IS
296 
297       CURSOR  c_meaning IS
298       SELECT flv.meaning
299       FROM   fnd_lookup_values flv, fnd_lookup_types flt
300       WHERE  flv.lookup_type = flt.lookup_type
301       AND    flv.lookup_code = p_lookup_code
302       AND    flt.lookup_type = p_lookup_type
303       AND    flv.language   = USERENV('LANG')
304       AND    nvl(flv.start_date_active,sysdate)<=sysdate
305       AND    nvl(flv.end_date_active,sysdate)>=sysdate
306       AND    flv.enabled_flag = 'Y';
307 
308     l_meaning    VARCHAR2(240) := NULL;
309 
310    BEGIN
311 
312      IF (p_lookup_code  IS NULL) THEN
313         RETURN NULL;
314      END IF;
315 
316      OPEN c_meaning;
317      LOOP
318          FETCH c_meaning  INTO l_meaning;
319          EXIT WHEN c_meaning%NOTFOUND;
320      END LOOP;
321     RETURN l_meaning;
322 
323     EXCEPTION
324     WHEN others THEN
325        RETURN null;
326 
327   END get_lookup_meaning;
328 
329 PROCEDURE comma_to_table (
330      p_list       IN     VARCHAR2,
331      x_tab        OUT NOCOPY     dbms_utility.uncl_array )
332 IS
333 
334       l_temp VARCHAR2(4000);
335       idx   NUMBER :=0;
336 
337 BEGIN
338    print_msg(G_DBG,'Input String : '||p_list);
339    l_temp := p_list;
340    LOOP
341       idx := idx +1;
342       IF (instr(l_temp,',',1,1) <> 0) THEN
343               x_tab(idx) := substr(l_temp,0,instr(l_temp,',',1,1)-1);
344               l_temp  := substr(l_temp,instr(l_temp,',',1,1)+1,length(l_temp));
345               print_msg(G_DBG,'Resulting element at index : '||idx||' is : '||x_tab(idx));
346               print_msg(G_DBG,'Now the string looks like : '||l_temp);
347       ELSE
348               x_tab(idx) := l_temp;
349               print_msg(G_DBG,'Resulting element at index : '||idx||' is : '||x_tab(idx));
350               EXIT;
351       END IF;
352 
353    END LOOP;
354     EXCEPTION
355     WHEN others THEN
356        RETURN;
357 END comma_to_table;
358 
359 PROCEDURE comma_to_number_table (
360      p_list       IN     VARCHAR2,
361      x_num_tab    OUT NOCOPY  WSH_UTIL_CORE.id_tab_type )
362 IS
363      l_arr  dbms_utility.uncl_array;
364      i      NUMBER :=0;
365 BEGIN
366 
367      comma_to_table (
368        p_list       => p_list,
369        x_tab        => l_arr );
370 
371      IF (l_arr.COUNT >0) THEN
372       i := l_arr.FIRST;
373       LOOP
374         x_num_tab(i) := to_number(NVL(l_arr(i),'0'));
375       EXIT WHEN i = l_arr.LAST;
376         i := l_arr.NEXT(i);
377       END LOOP;
378      END IF;
379 
380     EXCEPTION
381     WHEN others THEN
382        RETURN;
383 END comma_to_number_table;
384 
385 PROCEDURE table_to_comma (
386      p_tab        IN     dbms_utility.uncl_array,
387      x_list       OUT NOCOPY     VARCHAR2 )
388 IS
389 
390       idx   NUMBER :=0;
391       l_str VARCHAR2(4000):=NULL;
392 
393 BEGIN
394    idx := p_tab.FIRST;
395    IF idx IS NOT NULL THEN
396    LOOP
397       IF (idx = p_tab.FIRST) THEN
398           l_str := p_tab(idx);
399       ELSE
400           l_str := l_str||','||p_tab(idx);
401       END IF;
402       EXIT WHEN idx = p_tab.LAST;
403       idx := p_tab.NEXT(idx);
404    END LOOP;
405    END IF;
406    print_msg(G_DBG,'Converted String : '||l_str);
407    x_list := l_str;
408     EXCEPTION
409     WHEN others THEN
410        RETURN;
411 END table_to_comma;
412 
413 PROCEDURE number_table_to_comma (
414      p_num_tab        IN     wsh_util_core.id_tab_type,
415      x_list           OUT NOCOPY     VARCHAR2 )
416 IS
417      l_tab        dbms_utility.uncl_array;
418      i            NUMBER :=0;
419 
420 BEGIN
421 
422    IF (p_num_tab.COUNT > 0) THEN
423       i := p_num_tab.FIRST;
424       LOOP
425          l_tab(i) := to_char(p_num_tab(i));
426       EXIT WHEN i = p_num_tab.LAST;
427          i := p_num_tab.NEXT(i);
428       END LOOP;
429 
430       table_to_comma (
431        p_tab        => l_tab,
432        x_list       => x_list);
433 
434    END IF;
435 
436     EXCEPTION
437     WHEN others THEN
438        RETURN;
439 
440 END number_table_to_comma;
441 
442 FUNCTION get_msg_count RETURN NUMBER
443 IS
444 BEGIN
445   RETURN g_msg_count;
446 END get_msg_count;
447 
448 -- bug 2762257
449 PROCEDURE set_price_comp_exit_warn
450 IS
451     l_message_name      VARCHAR2(1000);
452 BEGIN
453       set_exception(p_met=>'shipment_price_compare',p_exc=>'g_dummy');
454       l_message_name := get_log_file_name;
455       FND_MESSAGE.SET_NAME('FTE','FTE_PRC_EST_WRN');
456       FND_MESSAGE.SET_TOKEN('LOGFILE',l_message_name);
457       FND_MSG_PUB.ADD;
458       g_msg_count := g_msg_count + 1;
459 END set_price_comp_exit_warn;
460 
461 PROCEDURE set_trip_prc_comp_exit_warn
462 IS
463     l_message_name      VARCHAR2(1000);
464 BEGIN
465       set_exception(p_met=>'Compare_Trip_Rates',p_exc=>'g_dummy');
466       l_message_name := get_log_file_name;
467       FND_MESSAGE.SET_NAME('FTE','FTE_TRP_PRC_EST_WRN');
468       FND_MESSAGE.SET_TOKEN('LOGFILE',l_message_name);
469       FND_MSG_PUB.ADD;
470       g_msg_count := g_msg_count + 1;
471 END set_trip_prc_comp_exit_warn;
472 
473 
474 PROCEDURE get_trip_name(
475 	p_trip_id	IN NUMBER,
476 	x_trip_name 	IN OUT NOCOPY VARCHAR2)
477 
478 IS
479 
480 CURSOR get_name(c_trip_id IN NUMBER) IS
481 	SELECT name
482 	FROM wsh_trips
483 	WHERE trip_id = c_trip_id;
484 
485 BEGIN
486 
487 	OPEN get_name(p_trip_id);
488 	FETCH get_name INTO x_trip_name;
489 	CLOSE get_name;
490 
491 END get_trip_name;
492 
493 
494 PROCEDURE get_lane_number(
495 	p_lane_id	IN NUMBER,
496 	x_lane_number 	IN OUT NOCOPY VARCHAR2)
497 
498 IS
499 
500 CURSOR get_name(c_lane_id IN NUMBER) IS
501 
502 	SELECT lane_number
503 	FROM fte_lanes
504 	WHERE lane_id = c_lane_id;
505 
506 BEGIN
507 
508 	OPEN get_name(p_lane_id);
509 	FETCH get_name INTO x_lane_number;
510 	CLOSE get_name;
511 
512 END get_lane_number;
513 
514 
515 
516 PROCEDURE get_carrier_name(
517 	p_carrier_id	IN NUMBER,
518 	x_carrier_name 	IN OUT NOCOPY VARCHAR2)
519 
520 IS
521 
522 CURSOR get_name(c_carrier_id IN NUMBER) IS
523 
524 	SELECT hz.party_name
525 	FROM 	hz_parties hz,
526 		wsh_carriers wc
527 	WHERE hz.party_id = wc.carrier_id
528 	 AND	wc.carrier_id = c_carrier_id;
529 
530 BEGIN
531 
532 	OPEN get_name(p_carrier_id);
533 	FETCH get_name INTO x_carrier_name;
534 	CLOSE get_name;
535 
536 END get_carrier_name;
537 
538 
539 PROCEDURE get_list_header_name(
540 	p_list_id	IN NUMBER,
541 	x_list_name 	IN OUT NOCOPY VARCHAR2)
542 
543 IS
544 
545 CURSOR get_name(c_list_id IN NUMBER) IS
546 
547 	SELECT name
548 	FROM qp_list_headers
549 	WHERE list_header_id = c_list_id;
550 
551 BEGIN
552 
553 	OPEN get_name(p_list_id);
554 	FETCH get_name INTO x_list_name;
555 	CLOSE get_name;
556 
557 END get_list_header_name;
558 
559 PROCEDURE get_delivery_name(
560 	p_id	IN NUMBER,
561 	x_name 	IN OUT NOCOPY VARCHAR2)
562 
563 IS
564 
565 CURSOR get_name(c_id IN NUMBER) IS
566 
567 	SELECT name
568 	FROM wsh_new_deliveries
569 	WHERE delivery_id = c_id;
570 
571 BEGIN
572 
573 	OPEN get_name(p_id);
574 	FETCH get_name INTO x_name;
575 	CLOSE get_name;
576 
577 END get_delivery_name;
578 
579 
580 
581 --
582 -- Procedure setmsg
583 --  Used to add a message to the message stack
584 --     p_api -> calling program name
585 --     p_exc -> exception name (form g_... )
586 --     p_msg_type -> 'E' - Error (default), 'W'-Warning, 'U'- unexpected error
587 --     p_trip_id, ... -> tokens
588 --
589 
590    PROCEDURE setmsg (p_api                IN VARCHAR2,
591                      p_exc                IN VARCHAR2,
592                      p_msg_name           IN VARCHAR2 DEFAULT NULL,
593                      p_msg_type           IN VARCHAR2 DEFAULT 'E',
594                      p_trip_id            IN NUMBER DEFAULT NULL,
595                      p_stop_id            IN NUMBER DEFAULT NULL,
596                      p_delivery_id        IN NUMBER DEFAULT NULL,
597                      p_delivery_leg_id    IN NUMBER DEFAULT NULL,
598                      p_delivery_detail_id IN NUMBER DEFAULT NULL,
599                      p_carrier_id         IN NUMBER DEFAULT NULL,
600                      p_location_id        IN NUMBER DEFAULT NULL,
601                      p_list_header_id     IN NUMBER DEFAULT NULL,
602                      p_lane_id		  IN NUMBER DEFAULT NULL,
603                      p_schedule_id	  IN NUMBER DEFAULT NULL,
604                      p_move_id 		  IN NUMBER DEFAULT NULL)
605    IS
606       l_message_name      VARCHAR2(255);
607       l_name 	VARCHAR2(30);
608    BEGIN
609       IF p_msg_name is NULL THEN
610         l_message_name := 'FTE'||UPPER(SUBSTR(p_exc,2,LENGTH(p_exc)));
611       ELSE
612  	l_message_name := p_msg_name;
613       END IF;
614 
615       FND_MESSAGE.SET_NAME('FTE',l_message_name);
616       --SUJITH 2-Oct-2003 not showing PROGRAM_UNIT
617       --IF (p_api IS NOT NULL) THEN
618       --  FND_MESSAGE.SET_TOKEN('PROGRAM_UNIT_NAME', p_api);
619       --END IF;
620       -- FND_MSG_PUB.ADD;
621       g_msg_count := g_msg_count + 1;
622 
623       l_name:=NULL;
624 
625       IF p_trip_id IS NOT NULL
626       THEN
627 	    get_trip_name(p_trip_id=>p_trip_id,
628 	    		  x_trip_name=> l_name);
629 	    IF (l_name IS NULL)
630 	    THEN
631             	FND_MESSAGE.SET_TOKEN('TRIP_ID', p_trip_id);
632             ELSE
633             	FND_MESSAGE.SET_TOKEN('TRIP_ID', l_name);
634             END IF;
635       END IF;
636       IF p_stop_id IS NOT NULL
637       THEN
638             FND_MESSAGE.SET_TOKEN('STOP_ID', p_stop_id);
639       END IF;
640       IF p_delivery_id IS NOT NULL
641       THEN
642 	    get_delivery_name(p_id=>p_delivery_id,
643 	    		  x_name=> l_name);
644 	    IF (l_name IS NULL)
645 	    THEN
646             	FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_delivery_id);
647             ELSE
648             	FND_MESSAGE.SET_TOKEN('DELIVERY_ID', l_name);
649             END IF;
650       END IF;
651       IF p_delivery_detail_id IS NOT NULL
652       THEN
653             FND_MESSAGE.SET_TOKEN('DELIVERY_DETAIL_ID', p_delivery_detail_id);
654       END IF;
655       IF p_delivery_leg_id IS NOT NULL
656       THEN
657             FND_MESSAGE.SET_TOKEN('DELIVERY_LEG_ID', p_delivery_leg_id);
658       END IF;
659       IF p_carrier_id IS NOT NULL
660       THEN
661 
662 	    get_carrier_name(p_carrier_id=>p_carrier_id,
663 	    		  x_carrier_name=> l_name);
664 	    IF (l_name IS NULL)
665 	    THEN
666             	FND_MESSAGE.SET_TOKEN('CARRIER_ID', p_carrier_id);
667             ELSE
668             	FND_MESSAGE.SET_TOKEN('CARRIER_ID', l_name);
669             END IF;
670 
671 
672 
673       END IF;
674       IF p_location_id IS NOT NULL
675       THEN
676             FND_MESSAGE.SET_TOKEN('LOCATION_ID', p_location_id);
677       END IF;
678 
679 
680       IF p_list_header_id IS NOT NULL
681       THEN
682 
683 	    get_list_header_name(p_list_id=>p_list_header_id,
684 	    		  x_list_name=> l_name);
685 	    IF (l_name IS NULL)
686 	    THEN
687             	FND_MESSAGE.SET_TOKEN('LIST_HEADER_ID', p_list_header_id);
688             ELSE
689             	FND_MESSAGE.SET_TOKEN('LIST_HEADER_ID', l_name);
690             END IF;
691 
692 
693       END IF;
694 
695 
696       IF p_lane_id IS NOT NULL
697       THEN
698 
699 	    get_lane_number(p_lane_id=>p_lane_id,
700 	    		  x_lane_number=> l_name);
701 	    IF (l_name IS NULL)
702 	    THEN
703             	FND_MESSAGE.SET_TOKEN('LANE_ID', p_lane_id);
704             ELSE
705             	FND_MESSAGE.SET_TOKEN('LANE_ID', l_name);
706             END IF;
707 
708 
709       END IF;
710       IF p_schedule_id IS NOT NULL
711       THEN
712             FND_MESSAGE.SET_TOKEN('SCHEDULE_ID', p_schedule_id);
713       END IF;
714 
715       IF p_move_id IS NOT NULL
716       THEN
717             FND_MESSAGE.SET_TOKEN('MOVE_ID', p_move_id);
718       END IF;
719 
720       FND_MSG_PUB.ADD;
721 
722       --IF (p_msg_type = 'E') THEN
723         --WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_ERROR);
724       --ELSIF (p_msg_type = 'W') THEN
725 	--WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_WARNING);
726       --ELSIF (p_msg_type = 'U') THEN
727         --WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
728       --END IF;
729 
730 
731    EXCEPTION
732      WHEN others THEN
733        null;
734    END setmsg;
735 
736 
737 
738    /*Given a combination of input parameters, this API can be called from
739   anywhere in rating engine. For example some of the combinations are:
740   P_delivery_id+ p_carrier_id 	- In case of Delivery Rating
741   P_trip_id                     - In case of Trip rating , carrier_id can be ontained from trip
742   P_location_id + p_carrier_id	- In case of OM.
743 */
744 
745 PROCEDURE get_currency_code(
746             p_delivery_id   IN NUMBER DEFAULT NULL,
747             p_trip_id       IN NUMBER DEFAULT NULL,
748             p_location_id   IN NUMBER DEFAULT NULL,
749             p_carrier_id    IN NUMBER DEFAULT NULL,
750             x_currency_code OUT NOCOPY VARCHAR2 ,
751             x_return_status OUT NOCOPY VARCHAR2 )
752 
753 IS
754     l_init_msg_list     VARCHAR2(1);
755     l_msg_count         NUMBER;
756     l_msg_data          VARCHAR2(32767);
757     l_log_level NUMBER := G_DBG;
758     l_method_name VARCHAR2(50) := 'fte_freight_pricing_util.get_currency_code';
759     l_entity_type       VARCHAR2(20);
760     l_entity_id         NUMBER;
761 
762 BEGIN
763 
764     l_init_msg_list := fnd_api.g_true;
765     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
766 
767     reset_dbg_vars;
768     set_method(l_log_level,l_method_name);
769 
770     --R12 Hiding Project
771     FTE_FREIGHT_PRICING.get_currency_code (
772           p_carrier_id=>p_carrier_id,
773           x_currency_code=>x_currency_code,
774           x_return_status=>x_return_status);
775     IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS and
776         x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
777     THEN
778 
779         print_msg(l_log_level,'get currency code failed');
780         print_msg(l_log_level,'x_return_status '|| x_return_status);
781         raise FND_API.G_EXC_ERROR;
782     END IF;
783 
784 
785     --R12 Hiding Project
786     /*
787     IF p_delivery_id IS NOT NULL THEN
788         l_entity_type := 'Delivery';
789         l_entity_id   := p_delivery_id;
790     ELSIF p_trip_id IS NOT NULL THEN
791         l_entity_type := 'Trip';
792         l_entity_id   := p_trip_id;
793     ELSIF p_location_id IS NOT NULL THEN
794         l_entity_type := 'Location';
795         l_entity_id   := p_location_id;
796     END IF;
797 
798    FTE_MLS_UTIL.GET_CURRENCY_CODE( p_init_msg_list  => l_init_msg_list,
799                                    x_return_status  => x_return_status,
800                                    x_msg_count      => l_msg_count,
801                                    x_msg_data       => l_msg_data,
802                                    x_currency_code  => x_currency_code,
803                                    p_entity_type    => l_entity_type,
804                                    p_entity_id      => l_entity_id,
805                                    p_carrier_id     => p_carrier_id
806                                  );
807 
808 
809   IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS and
810         x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING
811   THEN
812 
813         print_msg(l_log_level,'get currency code failed');
814         print_msg(l_log_level,'l_msg_data '|| l_msg_data);
815         print_msg(l_log_level,'l_msg_count '|| l_msg_count);
816         raise FND_API.G_EXC_ERROR;
817   END IF;
818 */
819   print_msg(l_log_level,' l_currency_code '|| x_currency_code);
820 
821   unset_method(l_log_level,l_method_name);
822 
823 EXCEPTION
824    WHEN FND_API.G_EXC_ERROR THEN
825         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
826         set_exception(l_method_name,l_log_level,'FND_API.G_EXC_ERROR');
827         unset_method(l_log_level,l_method_name);
828    WHEN OTHERS THEN
829         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
830         set_exception(l_method_name,G_ERR,'g_others');
831         print_msg(G_ERR,'Unexpected Error : '||SQLCODE||' : '||SQLERRM);
832         unset_method(l_log_level,l_method_name);
833 
834 END get_currency_code;
835 
836 
837 
838    FUNCTION convert_uom(from_uom IN VARCHAR2,
839                           to_uom IN VARCHAR2,
840                         quantity IN NUMBER,
841                          item_id IN NUMBER DEFAULT NULL)
842 
843    RETURN NUMBER
844 IS
845 
846   result        NUMBER;
847 
848 BEGIN
849 
850   IF from_uom = to_uom THEN
851      result := quantity;
852   ELSIF ( (from_uom IS NULL)
853         OR (to_uom   IS NULL))
854   THEN
855 
856      result := NULL;
857 
858   ELSIF (quantity = 0)
859   THEN
860 --This will not be valid for all UOMs (Farenheit to Centigrade)
861 --but should work for UOMs in the context of freight rating
862   	result:=0;
863   ELSE
864 
865      result := WSH_WV_UTILS.convert_uom(
866 					from_uom,
867 					to_uom,
868 					quantity,
869 					0);
870 
871      IF result = 0 THEN
872         result := NULL;
873 
874      END IF;
875    END IF;
876 
877   RETURN result;
878 
879 END convert_uom;
880 
881 
882 END FTE_FREIGHT_PRICING_UTIL;