DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_UTIL_CORE

Source


1 PACKAGE BODY WSH_UTIL_CORE as
2 /* $Header: WSHUTCOB.pls 120.21.12010000.3 2008/08/22 08:06:08 mvudugul ship $ */
3 
4   /* H projects: pricing integration csun
5 	 add global variable to cache the value so in the same session
6 	 the call to fnd to check if fte is installed is called only once */
7 
8   G_OTM_PROFILE_VALUE VARCHAR2(1) := NULL; -- OTM R12
9   G_FTE_IS_INSTALLED  VARCHAR2(1) := NULL;
10   G_TP_IS_INSTALLED   VARCHAR2(1) := NULL;
11   G_WMS_IS_INSTALLED  VARCHAR2(1) := NULL;
12   c_wms_code_present  VARCHAR2(1) := 'Y';
13 
14   -- used by procedure Get_Currency_Conversion_Type
15   G_CURRENCY_CONVERSION_TYPE VARCHAR2(30) := NULL;
16   --
17   -- PACKAGE VARIABLES
18   --
19 
20   -- Description:	Variable to suppress printing of messages to
21   --			file. This should be set to 'Y' by concurrent
22   --			programs before they use the println and print
23   --			procedures
24   G_ALLOW_PRINT	VARCHAR2(1) := 'N';
25 
26   -- Description:	Variable to count the number of records in the
27   --			PL/SQL table-g_loc_desc_Tab.This helps in maintaining
28   --				the latest record in the table and deleting the
29   --					oldest record.
30   G_COUNT_RECORDS  NUMBER := 0;
31 
32   -- Description:	Variable to set the debug level.
33   --			This should be set greater than 0 by concurrent
34   --			programs before they can use the println and print
35   --			procedures
36 
37   G_LOG_LEVEL	NUMBER := 0;
38   --
39 
40   -- PACKAGE CONSTANTS
41   --
42 
43   -- Description:	Constant used to control maximum number of characters
44   --					that a debug string can take
45   G_MAX_LENGTH		CONSTANT	NUMBER := 239;
46 
47   G_STORE_MSG_IN_TABLE   BOOLEAN default FALSE ;
48 
49   g_cust_Id_Tab Id_Tab_Type;
50   g_org_Id_Tab Id_Tab_Type;
51   g_master_org_tab Id_Tab_Type;
52 
53 
54  --  Description:	  Generic tab of records for passing column information
55   g_loc_desc_Tab Loc_Info_Tab;
56   G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_UTIL_CORE';
57 
58     --Cache size constant
59     g_cache_max_size		NUMBER := power(2,31);
60     --
61 
62     --Cache for retriving Customer/Supplier/Carrier/Organization from locations.
63     g_customer_from_location            WSH_UTIL_CORE.tbl_varchar;
64     g_organization_from_location	WSH_UTIL_CORE.tbl_varchar;
65 
66     --
67 
68   --
69   -- FUNCTION:		Get_Location_Description
70   -- Purpose:		Function gives a description of the location
71   --			based on the location_id
72   -- Arguments:		p_location_id - Location identifier
73   --			p_format - Format for description
74   -- Return Values:	 Returns a description of the location in VARCHAR2
75   -- Notes:		p_format supports the following:
76   --			'CSZ' - City, State, Zip
77   --			'CSZC' - City, State, Zip, Country
78   --			'CODE' - Location Code (Should be called for DSNO
79   --                      ONLY
80   --			'NEW UI CODE' - Location Code generated for UI display
81   --			'NEW UI CODE INFO' - Detailed Loc for UI (bug 1516290)
82   --
83 
84   FUNCTION Get_Location_Description (
85 		p_location_id	IN	NUMBER,
86 		p_format	IN	VARCHAR2
87 		) RETURN VARCHAR2 IS
88 
89 
90   l_loc_string	VARCHAR2(1000);
91   l_exists_flag VARCHAR2(1):= 'N';
92   l_counter NUMBER := 0;
93 
94   CURSOR Loc_Info_Cur (v_location_id NUMBER) IS
95     SELECT                       wsh_location_id
96                                ,source_location_id
97                                ,location_source_code
98                                ,location_code
99                                ,address1
100                                ,city
101                                ,state
102                                ,country
103                                ,postal_code
104                                ,ui_location_code
105                                , NULL -- hr_location_code
106     FROM            wsh_locations
107     where           wsh_location_id = v_location_id;
108 
109     CURSOR c_hr_locs (v_location_id NUMBER) IS
110       SELECT b.location_code
111       FROM hr_locations_all a,
112            hr_locations_all_tl b
113       WHERE  a.location_id = v_location_id
114       AND   a.location_id = b.location_id
115       AND   b.language=USERENV('LANG');
116 
117 l_index		NUMBER;
118   --
119 l_debug_on BOOLEAN;
120   --
121   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_LOCATION_DESCRIPTION';
122 
123   --
124   BEGIN
125 	--
126 	--
127 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
128 	--
129 	IF l_debug_on IS NULL
130 	THEN
131 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
132 	END IF;
133 	--
134 	IF l_debug_on THEN
135 	    WSH_DEBUG_SV.push(l_module_name);
136 	    --
137 	    WSH_DEBUG_SV.log(l_module_name,'P_LOCATION_ID',P_LOCATION_ID);
138 	    WSH_DEBUG_SV.log(l_module_name,'P_FORMAT',P_FORMAT);
139 	END IF;
140 	--
141 	IF p_location_id IS NULL THEN
142 	  --
143 	  IF l_debug_on THEN
144 	      WSH_DEBUG_SV.pop(l_module_name);
145 	  END IF;
146 	  --
147 	  RETURN NULL;
148 	END IF;
149 
150 	IF g_loc_desc_Tab.count > 0 THEN
151           l_index := g_loc_desc_Tab.FIRST;
152           WHILE l_index IS NOT NULL LOOP
153 		IF g_loc_desc_Tab(l_index).wsh_location_id = p_location_id THEN
154 		  l_exists_flag := 'Y';
155 		  /* index of the current record */
156 		  l_counter := l_index;
157 		  EXIT;
158 		END IF;
159 
160                 l_index := g_loc_desc_Tab.NEXT(l_index);
161 	  END LOOP;
162 	END IF;
163 
164 	IF l_exists_flag = 'N' THEN
165 	  G_COUNT_RECORDS := MOD(G_COUNT_RECORDS + 1,10);
166 	  OPEN Loc_Info_Cur (p_location_id);
167 	  FETCH Loc_Info_Cur INTO g_loc_desc_Tab(G_COUNT_RECORDS);
168 	  IF Loc_Info_Cur%NOTFOUND THEN
169 		IF Loc_Info_Cur%ISOPEN THEN
170 			CLOSE Loc_Info_Cur;
171 		END IF;
172 		IF l_debug_on THEN
173 	            WSH_DEBUG_SV.log(l_module_name,'Loc_Info_Cur%NOTFOUND');
174 		    WSH_DEBUG_SV.pop(l_module_name);
175 		END IF;
176 		--
177                 RETURN NULL;
178 	  END IF;
179           CLOSE Loc_Info_Cur;
180 	  /* index of the current record, afterincrementing */
181 	  l_counter := G_COUNT_RECORDS;
182 
183 	END IF;
184 
185 	IF p_format = 'CODE' THEN
186           IF g_loc_desc_Tab(l_counter).location_source_code = 'HZ' THEN
187 	     l_loc_string
188                        := to_char(g_loc_desc_Tab(l_counter).source_location_id);
189           ELSE
190              IF g_loc_desc_Tab(l_counter).hr_location_code IS NULL THEN
191                 OPEN c_hr_locs(g_loc_desc_Tab(l_counter).source_location_id) ;
192                 FETCH c_hr_locs INTO g_loc_desc_Tab(l_counter).hr_location_code;
193                   IF c_hr_locs%NOTFOUND THEN
194                     CLOSE c_hr_locs;
195                     IF l_debug_on THEN
196                       WSH_DEBUG_SV.log(l_module_name,'c_hr_locs%NOTFOUND');
197                     END IF;
198                   END IF;
199                 CLOSE c_hr_locs;
200              END IF;
201              l_loc_string := g_loc_desc_Tab(l_counter).hr_location_code;
202              IF l_debug_on THEN
203                 WSH_DEBUG_SV.log(l_module_name,'hr_location_code',l_loc_string);
204              END IF;
205           END IF;
206 
207 	ELSIF p_format = 'NEW UI CODE' THEN
208 	   l_loc_string := g_loc_desc_Tab(l_counter).location_code ||
209            ':' || NVL(g_loc_desc_Tab(l_counter).city,
210                          substrb(g_loc_desc_Tab(l_counter).address1,1,60)) ;
211 
212 
213 
214 	ELSIF p_format = 'NEW UI CODE INFO' THEN
215 	   l_loc_string := g_loc_desc_Tab(l_counter).ui_location_code;
216 
217 	ELSIF	(p_format = 'CSZ' OR p_format = 'CSZC') THEN
218 
219 	  IF g_loc_desc_Tab(l_counter).city IS NOT NULL THEN
220 		l_loc_string := l_loc_string || g_loc_desc_Tab(l_counter).city;
221 	  END IF;
222 	  IF g_loc_desc_Tab(l_counter).state IS NOT NULL THEN
223 		l_loc_string := l_loc_string || ', ' || g_loc_desc_Tab(l_counter).state;
224 	  END IF;
225 	  IF g_loc_desc_Tab(l_counter).postal_code IS NOT NULL THEN
226 		l_loc_string := l_loc_string || ', ' || g_loc_desc_Tab(l_counter).postal_code;
227 	  END IF;
228 	  IF	 g_loc_desc_Tab(l_counter).country IS NOT NULL
229 		 AND p_format <> 'CSZ' THEN
230 		l_loc_string := l_loc_string || ', ' || g_loc_desc_Tab(l_counter).country;
231 	  END IF;
232         ELSE -- bad format_code
233            FND_MESSAGE.SET_NAME('WSH','WSH_PUB_INVALID_PARAMETER');
234            FND_MESSAGE.Set_Token('PARAMETER',p_format);
235            wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,
236                                                            l_module_name);
237            IF l_debug_on THEN
238             WSH_DEBUG_SV.pop(l_module_name);
239            END IF;
240            RAISE FND_API.G_EXC_ERROR;
241 /*
242 l_loc_string := 'WRONG'|| g_loc_desc_Tab(l_counter).location_code;
243 */
244 	END IF;
245 	IF Loc_Info_Cur%ISOPEN THEN
246 	  CLOSE Loc_Info_Cur;
247 	END IF;
248 
249 	--
250 	IF l_debug_on THEN
251 	    WSH_DEBUG_SV.pop(l_module_name);
252 	END IF;
253 	--
254 	RETURN l_loc_string;
255 
256   EXCEPTION
257    WHEN others THEN
258    IF l_debug_on THEN
259       WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
260       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
261       raise;
262    END IF;
263 
264   END Get_Location_Description;
265  --
266  -- PROCEDURE: Site_Code_to_Site_id
267  -- PURPOSE  : Maps site_code to site_id
268  -- ARGUMENTS : p_site_code - site code that needs to be mapped
269  --			 p_site_id - site id for the code
270  --			 x_return_status - WSH_UTIL_CORE.G_RET_STS_SUCCESS or NOT
271  --
272 
273   PROCEDURE Site_Code_to_Site_id(p_site_code		 IN	  VARCHAR2,
274 								 p_site_id		   OUT NOCOPY 	 NUMBER,
275 								 x_return_status	 OUT NOCOPY 	 VARCHAR2) IS
276 
277   CURSOR get_id (c_site_code VARCHAR2) IS
278   select SITE_USE_ID from HZ_CUST_SITE_USES_ALL
279   where SITE_USE_CODE = c_site_code;
280 
281 
282 --
283 l_debug_on BOOLEAN;
284 --
285 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SITE_CODE_TO_SITE_ID';
286 --
287   BEGIN
288 
289   --
290   -- Debug Statements
291   --
292   --
293   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
294   --
295   IF l_debug_on IS NULL
296   THEN
297       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
298   END IF;
299   --
300   IF l_debug_on THEN
301       WSH_DEBUG_SV.push(l_module_name);
302       --
303       WSH_DEBUG_SV.log(l_module_name,'P_SITE_CODE',P_SITE_CODE);
304   END IF;
305   --
306   p_site_id := NULL;
307   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
308 
309   OPEN get_id(p_site_code);
310   FETCH get_id INTO p_site_id;
311   CLOSE get_id;
312 
313   IF (p_site_id IS NULL) THEN
314 		  FND_MESSAGE.Set_Name('WSH','WSH_SITE_LOCATION_UNDEFINED');
315 		  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
316 		  IF get_id%ISOPEN THEN
317 			CLOSE get_id;
318 		  END IF;
319   END IF;
320 
321  --
322  -- Debug Statements
323  --
324  IF l_debug_on THEN
325      WSH_DEBUG_SV.pop(l_module_name);
326  END IF;
327  --
328   Exception
329   when others then
330    IF get_id%ISOPEN THEN
331 			CLOSE get_id;
332    END IF;
333    wsh_util_core.default_handler('WSH_UTIL_CORE.Site_Code_to_Site_id');
334    x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
335 
336 --
337 -- Debug Statements
338 --
339 IF l_debug_on THEN
340     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
341     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
342 END IF;
343 --
344   END Site_Code_to_Site_id;
345 
346 
347 
348 
349   --
350   -- PROCEDURE:		Get_Location_Id
351   -- Purpose:		Convert Organization_id or ship_to_site_id to
352   --			a location_id
353   -- Arguments:		p_mode - 'CUSTOMER SITE', 'VENDOR SITE' or 'ORG'
354   --			p_source_id - organization_id or site_id to convert
355   --					  based on p_mode
356   --			x_location_id - Converted to location_id
357   --			x_api_status -	WSH_UTIL_CORE.G_RET_STS_SUCCESS
358   --					WSH_UTIL_CORE.G_RET_STS_ERROR
359   --			If Error message can be retrieved using FND_MESSAGE.GET
360   -- Description:	Gets location information for a particular inventory
361   --			organization using hr_locations view
362   --
363 
364   PROCEDURE Get_Location_Id (
365 		p_mode		IN	VARCHAR2,
366 		p_source_id	IN	NUMBER,
367 		x_location_id	OUT NOCOPY 	NUMBER,
368 		x_api_status	OUT NOCOPY  VARCHAR2,
369                 p_transfer_location IN BOOLEAN DEFAULT TRUE
370 		) IS
371 
372   l_loc_rec    WSH_MAP_LOCATION_REGION_PKG.loc_rec_type;
373   l_return_status VARCHAR2(10);
374   l_location_id  NUMBER;
375   l_num_warnings  NUMBER default 0;
376   l_num_errors    NUMBER default 0;
377 
378   CURSOR org_to_loc (v_org_id NUMBER) IS
379   SELECT location_id
380   FROM	 wsh_ship_from_orgs_v
381   WHERE  organization_id = v_org_id;
382 
383 
384   CURSOR site_to_loc (v_site_id NUMBER) IS
385   SELECT ps.location_id
386   FROM   hz_party_sites ps,
387 	 hz_cust_acct_sites_all ca,
388 	 hz_cust_site_uses_all su
389   WHERE  su.site_use_id = v_site_id
390   AND	su.cust_acct_site_id = ca.cust_acct_site_id
391   AND	ca.party_site_id = ps.party_site_id;
392 
393   --
394 l_debug_on BOOLEAN;
395   --
396   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
397                                                             'GET_LOCATION_ID';
398    --
399    BEGIN
400 
401    --
402    --
403    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
404    --
405    IF l_debug_on IS NULL
406    THEN
407        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
408    END IF;
409    --
410    IF l_debug_on THEN
411       WSH_DEBUG_SV.push(l_module_name);
412       --
413       WSH_DEBUG_SV.log(l_module_name,'P_MODE',P_MODE);
414       WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_ID',P_SOURCE_ID);
415       WSH_DEBUG_SV.log(l_module_name,'p_transfer_location',p_transfer_location);
416    END IF;
417    --
418    x_api_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
419 
420    x_location_id := null;
421 
422    IF p_mode = 'ORG' THEN
423 
424       IF ( g_org_Id_Tab.EXISTS(p_source_id) ) THEN
425 
426          x_location_id := g_org_Id_Tab(p_source_id);
427 
428       ELSE
429 
430          OPEN org_to_loc (p_source_id);
431          FETCH org_to_loc
432             INTO  l_location_id;
433          CLOSE org_to_loc;
434 
435          IF l_debug_on	THEN
436             WSH_DEBUG_SV.log(l_module_name,'l_location_id',l_location_id);
437          END IF;
438 
439          IF (l_location_id IS NULL) THEN
440 	 --Bug 4891887 and 4891881 If call is made from Constraints then ignore the warning
441 	    IF WSH_FTE_CONSTRAINT_FRAMEWORK.G_CALLING_API IS NULL THEN
442             --The following message is modified as part of bug # 4256319
443             FND_MESSAGE.Set_Name('WSH','WSH_DET_NO_LOCATION_FOR_ORG');
444             x_api_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
445             wsh_util_core.add_message(x_api_status,l_module_name);
446 	    ELSE
447 		WSH_FTE_CONSTRAINT_FRAMEWORK.G_CALLING_API :=NULL;
448 		x_location_id :=l_location_id;
449 	    END IF;
450             --
451             IF l_debug_on THEN
452                WSH_DEBUG_SV.pop(l_module_name);
453             END IF;
454             --
455             RETURN;
456          ELSE
457 
458             IF l_debug_on THEN
459                 WSH_DEBUG_SV.log(l_module_name,'Calling Transfer_Location');
460             END IF;
461 
462             WSH_MAP_LOCATION_REGION_PKG.Transfer_Location(
463                      p_source_type            => 'HR',
464                      p_source_location_id     => l_location_id,
465                      p_transfer_location      => p_transfer_location,
466                      p_online_region_mapping  => FALSE,
467                      x_loc_rec                => l_loc_rec,
468                      x_return_status          => l_return_status
469             );
470             IF l_debug_on THEN
471                 WSH_DEBUG_SV.log(l_module_name,'Transfer_Location returns ',
472                                                            l_return_status);
473                 WSH_DEBUG_SV.log(l_module_name,'location_id returned ',
474                                                      l_loc_rec.wsh_location_id);
475             END IF;
476             wsh_util_core.api_post_call(
477                                    p_return_status => l_return_status,
478                                    x_num_warnings  => l_num_warnings,
479                                    x_num_errors    => l_num_errors);
480 
481             IF l_debug_on THEN
482               WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
483             END IF;
484 
485             IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS)
486              OR (l_loc_rec.WSH_LOCATION_ID IS NULL)  THEN
487                 RAISE WSH_UTIL_CORE.G_EXC_WARNING;
488             END IF;
489             g_org_Id_Tab(p_source_id) := l_loc_rec.WSH_LOCATION_ID;
490             x_location_id := l_loc_rec.WSH_LOCATION_ID;
491          END IF;
492       END IF;
493 
494    ELSIF p_mode in ('CUSTOMER SITE', 'SITE') THEN
495 
496       IF ( g_cust_Id_Tab.EXISTS(p_source_id) ) THEN
497 
498          x_location_id := g_cust_Id_Tab(p_source_id);
499 
500       ELSE
501 
502          OPEN site_to_loc (p_source_id);
503          FETCH site_to_loc
504             INTO l_location_id;
505          CLOSE site_to_loc;
506 
507          IF (l_location_id IS NULL) THEN
508             FND_MESSAGE.Set_Name('WSH','WSH_SITE_LOCATION_UNDEFINED');
509             x_api_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
510             wsh_util_core.add_message(x_api_status,l_module_name);
511             IF site_to_loc%ISOPEN THEN
512                CLOSE site_to_loc;
513             END IF;
514             --
515             IF l_debug_on THEN
516                WSH_DEBUG_SV.pop(l_module_name);
517             END IF;
518             --
519             RETURN;
520          ELSE
521             IF l_debug_on THEN
522                 WSH_DEBUG_SV.log(l_module_name,'Calling Transfer_Location');
523             END IF;
524 
525             WSH_MAP_LOCATION_REGION_PKG.Transfer_Location(
526                      p_source_type            => 'HZ',
527                      p_source_location_id     => l_location_id,
528                      p_transfer_location      => p_transfer_location,
529                      p_online_region_mapping  => FALSE,
530                      x_loc_rec                => l_loc_rec,
531                      x_return_status          => l_return_status
532             );
533             wsh_util_core.api_post_call(
534                                    p_return_status => l_return_status,
535                                    x_num_warnings  => l_num_warnings,
536                                    x_num_errors    => l_num_errors);
537 
538             IF l_debug_on THEN
539               WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
540             END IF;
541 
542             IF (l_return_status <>  FND_API.G_RET_STS_SUCCESS )
543              OR (l_loc_rec.WSH_LOCATION_ID IS NULL) THEN
544                 RAISE WSH_UTIL_CORE.G_EXC_WARNING;
545             END IF;
546             g_cust_Id_Tab(p_source_id) := l_loc_rec.WSH_LOCATION_ID;
547             x_location_id := l_loc_rec.WSH_LOCATION_ID;
548 
549          END IF;
550 
551       END IF;
552 
553    ELSIF p_mode = 'VENDOR SITE' THEN
554       x_location_id := p_source_id;
555       --
556       IF l_debug_on THEN
557          WSH_DEBUG_SV.pop(l_module_name);
558       END IF;
559       --
560       RETURN;
561    ELSE
562       FND_MESSAGE.Set_Name('WSH','WSH_API_INVALID_PARAM_VALUE');
563       x_api_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
564       --
565       IF l_debug_on THEN
566          WSH_DEBUG_SV.pop(l_module_name);
567       END IF;
568       --
569       RETURN;
570    END IF;
571 
572    IF l_debug_on THEN
573        WSH_DEBUG_SV.pop(l_module_name);
574    END IF;
575    --
576   EXCEPTION
577   WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
578 	x_api_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
579         fnd_message.set_name('WSH','WSH_XC_INVALID_LOCATION');
580         wsh_util_core.add_message(x_api_status,l_module_name);
581         --
582         IF l_debug_on THEN
583             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:G_RET_STS_WARNING');
584         END IF;
585         --
586   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
587 	x_api_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
588         --
589         IF l_debug_on THEN
590             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:G_EXC_UNEXPECTED_ERROR');
591         END IF;
592         --
593   WHEN FND_API.G_EXC_ERROR THEN
594         IF (NOT p_transfer_location)
595          AND (l_loc_rec.WSH_LOCATION_ID IS NULL) THEN
596            x_api_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
597         ELSE
598 	   x_api_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
599         END IF;
600         --
601         IF l_debug_on THEN
602             WSH_DEBUG_SV.log(l_module_name,'x_api_status ',x_api_status);
603             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:G_EXC_ERROR');
604         END IF;
605         --
606   WHEN OTHERS THEN
607         WSH_FTE_CONSTRAINT_FRAMEWORK.G_CALLING_API :=NULL;
608 	IF org_to_loc%ISOPEN THEN
609 	  CLOSE org_to_loc;
610 	END IF;
611 	IF site_to_loc%ISOPEN THEN
612 	  CLOSE site_to_loc;
613 	END IF;
614 	FND_MESSAGE.Set_Name('WSH','WSH_UNEXPECTED_ERROR');
615 	x_api_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
616 
617         --
618         IF l_debug_on THEN
619             WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
620             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
621         END IF;
622         --
623   END Get_Location_Id;
624 
625 
626   --
627   -- PROCEDURE:		get_master_from_org
628   -- PURPOSE:		Obtain master organization id for an organization_id
629   -- Arguments:		p_org_id - organization_id
630   --			x_master_org_id - Master organization id for input organization_id
631   --			x_return_status -
632   --                    WSH_UTIL_CORE.G_RET_STS_SUCCESS
633   --                    WSH_UTIL_CORE.G_RET_STS_ERROR
634   -- Notes:		Throws exception when fails
635   --
636 
637 PROCEDURE get_master_from_org(
638               p_org_id         IN  NUMBER,
639               x_master_org_id  OUT NOCOPY NUMBER,
640               x_return_status  OUT NOCOPY VARCHAR2)
641 IS
642 
643     CURSOR c_get_master_from_org(c_org_id IN NUMBER) IS
644     SELECT master_organization_id
645     FROM   mtl_parameters
646     WHERE  organization_id = c_org_id;
647 
648     org_not_found       EXCEPTION;
649 
650     l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
651     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_master_from_org';
652 
653 BEGIN
654 
655     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
656 
657     --
658     IF l_debug_on THEN
659       WSH_DEBUG_SV.push(l_module_name);
660     END IF;
661     --
662 
663     IF g_master_org_tab.EXISTS(p_org_id) THEN
664 
665          x_master_org_id := g_master_org_tab(p_org_id);
666 
667     ELSE
668 
669       OPEN c_get_master_from_org(p_org_id);
670       FETCH c_get_master_from_org INTO x_master_org_id;
671       IF c_get_master_from_org%NOTFOUND THEN
672          CLOSE c_get_master_from_org;
673          RAISE org_not_found;
674       END IF;
675       CLOSE c_get_master_from_org;
676 
677       g_master_org_tab(p_org_id) := x_master_org_id;
678 
679     END IF;
680 
681     --
682     IF l_debug_on THEN
683       WSH_DEBUG_SV.pop(l_module_name);
684     END IF;
685     --
686 
687 EXCEPTION
688     WHEN org_not_found THEN
689       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
690       --
691       IF l_debug_on THEN
692         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:org in mtl_parameters not found');
693       END IF;
694       --
695     WHEN others THEN
696       IF c_get_master_from_org%ISOPEN THEN
697          CLOSE c_get_master_from_org;
698       END IF;
699       WSH_UTIL_CORE.default_handler('WSH_UTIL_CORE.get_master_from_org');
700       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
701       --
702       IF l_debug_on THEN
703         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
704         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
705       END IF;
706       --
707 
708 END get_master_from_org;
709 
710 
711   --
712   -- FUNCTION:		Org_To_Location
713   -- PURPOSE:		Convert organization_id to location_id
714   -- Arguments:		p_org_id - organization_id
715   -- Return Values:	Location_id
716   -- Notes:		Throws exception when failing to convert
717   --
718 
719   FUNCTION Org_To_Location (
720 		p_org_id	IN	NUMBER,
721                 p_transfer_location IN BOOLEAN DEFAULT FALSE
722 		) RETURN NUMBER IS
723   l_api_status	VARCHAR2(1);
724   l_location_id NUMBER;
725   --
726 l_debug_on BOOLEAN;
727   --
728   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ORG_TO_LOCATION';
729   --
730   BEGIN
731 
732 	--
733 	--
734 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
735 	--
736 	IF l_debug_on IS NULL
737 	THEN
738 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
739 	END IF;
740 	--
741 	IF l_debug_on THEN
742 	    WSH_DEBUG_SV.push(l_module_name);
743 	    --
744 	    WSH_DEBUG_SV.log(l_module_name,'P_ORG_ID',P_ORG_ID);
745 	    WSH_DEBUG_SV.logmsg(l_module_name,'Call Get_Location_id');
746 	END IF;
747 	--
748 	l_location_id := -1;
749 
750 	Get_Location_Id (
751 	'ORG',
752 	p_org_id,
753 	l_location_id,
754 	l_api_status,
755         p_transfer_location);
756 
757 	IF l_api_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
758           IF l_api_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
759              l_location_id := NULL;
760           ELSE
761 	    RAISE NO_DATA_FOUND;
762           END IF;
763 	END IF;
764 
765 	--
766 	-- Debug Statements
767 	--
768 	IF l_debug_on THEN
769 	    WSH_DEBUG_SV.log(l_module_name,'LOCATION ID',l_location_id);
770 	    WSH_DEBUG_SV.pop(l_module_name);
771 	END IF;
772 	--
773 	RETURN l_location_id;
774 
775   END Org_To_Location;
776 
777 
778   --
779   -- FUNCTION:		Cust_Site_To_Location
780   -- PURPOSE:		Convert site_id to location_id
781   -- Arguments:		p_site_id - site_id
782   -- Return Values:	Location_id
783   -- Notes:		Throws exception when failing to convert
784   --
785 
786   FUNCTION Cust_Site_To_Location (
787 		p_site_id	IN	NUMBER,
788                 p_transfer_location IN BOOLEAN DEFAULT TRUE
789 		) RETURN NUMBER IS
790   l_api_status	VARCHAR2(1);
791   l_location_id NUMBER;
792   --
793 l_debug_on BOOLEAN;
794   --
795   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CUST_SITE_TO_LOCATION';
796   --
797   BEGIN
798 
799 	--
800 	-- Debug Statements
801 	--
802 	--
803 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
804 	--
805 	IF l_debug_on IS NULL
806 	THEN
807 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
808 	END IF;
809 	--
810 	IF l_debug_on THEN
811 	    WSH_DEBUG_SV.push(l_module_name);
812 	    --
813 	    WSH_DEBUG_SV.log(l_module_name,'P_SITE_ID',P_SITE_ID);
814 	    WSH_DEBUG_SV.logmsg(l_module_name,'Call Get_Location_id');
815 	END IF;
816 	--
817 	l_location_id := -1;
818 
819 	Get_Location_Id (
820 	'CUSTOMER SITE',
821 	p_site_id,
822 	l_location_id,
823 	l_api_status,
824         p_transfer_location);
825 
826 	IF l_api_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
827           IF l_api_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
828              l_location_id := NULL;
829           ELSE
830 	     RAISE NO_DATA_FOUND;
831           END IF;
832 	END IF;
833 
834 	--
835 	-- Debug Statements
836 	--
837 	IF l_debug_on THEN
838 	    WSH_DEBUG_SV.log(l_module_name,'LOCATION ID',l_location_id);
839 	    WSH_DEBUG_SV.pop(l_module_name);
840 	END IF;
841 	--
842 	RETURN l_location_id;
843 
844   END Cust_Site_To_Location;
845 
846   --
847   -- FUNCTION:		Vendor_Site_To_Location
848   -- PURPOSE:		Convert vendor site_id to location_id
849   -- Arguments:		p_site_id - site_id
850   -- Return Values:	Location_id
851   -- Notes:		Throws exception when failing to convert
852   --
853 
854   FUNCTION Vendor_Site_To_Location (
855 		p_site_id	IN	NUMBER,
856                 p_transfer_location IN BOOLEAN DEFAULT TRUE
857 		) RETURN NUMBER IS
858   l_api_status	VARCHAR2(1);
859   l_location_id NUMBER;
860   --
861 l_debug_on BOOLEAN;
862   --
863   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VENDOR_SITE_TO_LOCATION';
864   --
865   BEGIN
866 
867 	--
868 	-- Debug Statements
869 	--
870 	--
871 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
872 	--
873 	IF l_debug_on IS NULL
874 	THEN
875 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
876 	END IF;
877 	--
878 	IF l_debug_on THEN
879 	    WSH_DEBUG_SV.push(l_module_name);
880 	    --
881 	    WSH_DEBUG_SV.log(l_module_name,'P_SITE_ID',P_SITE_ID);
882 	    WSH_DEBUG_SV.logmsg(l_module_name,'Call Get_Location_id');
883 	END IF;
884 	--
885 	l_location_id := -1;
886 
887 	Get_Location_Id (
888 	'VENDOR SITE',
889 	p_site_id,
890 	l_location_id,
891 	l_api_status,
892         p_transfer_location);
893 
894 	IF l_api_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
895           IF l_api_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
896              l_location_id := NULL;
897           ELSE
898              RAISE NO_DATA_FOUND;
899           END IF;
900 	END IF;
901 
902 	--
903 	-- Debug Statements
904 	--
905 	IF l_debug_on THEN
906 	    WSH_DEBUG_SV.log(l_module_name,'LOCATION ID',l_location_id);
907 	    WSH_DEBUG_SV.pop(l_module_name);
908 	END IF;
909 	--
910 	RETURN l_location_id;
911 
912   END Vendor_Site_To_Location;
913 
914   --
915   -- FUNCTION:		Ship_Method_To_Freight
916   -- PURPOSE:		Convert Ship_Method_Code to Freight_Code
917   -- Arguments:	p_ship_method_code, p_organization_id
918   -- Return Values:	Freight_Code
919   -- Notes:		Throws exception when failing to convert
920   --
921 
922   FUNCTION Ship_Method_To_Freight (
923 		p_ship_method_code	IN	VARCHAR2,
924 		p_organization_id   IN   NUMBER
925 		) RETURN VARCHAR2 IS
926 
927   ---BUG No:4241880.Cursor changed
928   CURSOR get_freight IS
929   SELECT freight_code
930   FROM   wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
931   WHERE  wc.carrier_id=wcs.carrier_id AND
932 	 wcs.carrier_service_id=wocs.carrier_service_id AND
933 	 wcs.ship_method_code = p_ship_method_code AND
934 	 wocs.organization_id = p_organization_id;
935 ---BUG No:4241880.Cursor changed ends.
936 
937  /*
938  CURSOR get_freight IS
939   SELECT freight_code
940   FROM   wsh_carrier_ship_methods_v
941   WHERE  ship_method_code = p_ship_method_code AND
942 		organization_id = p_organization_id;
943 */
944 
945   l_freight_code VARCHAR2(30);
946 
947   --
948 l_debug_on BOOLEAN;
949   --
950   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SHIP_METHOD_TO_FREIGHT';
951   --
952   BEGIN
953 
954 	--
955 	-- Debug Statements
956 	--
957 	--
958 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
959 	--
960 	IF l_debug_on IS NULL
961 	THEN
962 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
963 	END IF;
964 	--
965 	IF l_debug_on THEN
966 	    WSH_DEBUG_SV.push(l_module_name);
967 	    --
968 	    WSH_DEBUG_SV.log(l_module_name,'P_SHIP_METHOD_CODE',P_SHIP_METHOD_CODE);
969 	    WSH_DEBUG_SV.log(l_module_name,'P_ORGANIZATION_ID',P_ORGANIZATION_ID);
970 	END IF;
971 	--
972 	IF (p_ship_method_code IS NULL) THEN
973 	  --
974 	  -- Debug Statements
975 	  --
976 	  IF l_debug_on THEN
977 	      WSH_DEBUG_SV.pop(l_module_name);
978 	  END IF;
979 	  --
980 	  RETURN NULL;
981 	END IF;
982 
983 	OPEN  get_freight;
984 	FETCH get_freight INTO l_freight_code;
985 
986 	IF (get_freight%NOTFOUND) THEN
987 	   CLOSE get_freight;
988 	  fnd_message.set_name('WSH','WSH_FREIGHT_CODE_NOT_FOUND');
989 	  wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
990 	  RAISE NO_DATA_FOUND;
991 	END IF;
992 
993 	CLOSE get_freight;
994 
995 	--
996 	-- Debug Statements
997 	--
998 	IF l_debug_on THEN
999 	    WSH_DEBUG_SV.pop(l_module_name);
1000 	END IF;
1001 	--
1002 	RETURN l_freight_code;
1003 
1004   END Ship_Method_To_Freight;
1005 
1006   --
1007   -- This set of functions and procedures can be used by the concurrent
1008   -- programs to print messages to the log file. The following are
1009   -- supported:
1010   --
1011 
1012   --
1013   -- Procedure:	Enable_Concurrent_Log_Print
1014   -- Purpose:		Enable printing of log messages to concurrent
1015   --				 program log files
1016   -- Arguments:	None
1017   --
1018 
1019   PROCEDURE Enable_Concurrent_Log_Print IS
1020   --
1021 --l_debug_on BOOLEAN;
1022   --
1023   --l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ENABLE_CONCURRENT_LOG_PRINT';
1024   --
1025   BEGIN
1026 
1027 	--
1028 	--l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1029 	--
1030 	--IF l_debug_on IS NULL
1031 	--THEN
1032 	    --l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1033 	--END IF;
1034 	--
1035 	G_ALLOW_PRINT := 'Y';
1036 
1037   END Enable_Concurrent_Log_Print;
1038 
1039   --
1040   -- Procedure:	Set_Log_Level
1041   -- Purpose:		Set Appropriate log level to print
1042   --			   debug messages to the concurrent program log file
1043   -- Arguments:	p_log_level  -- Log level to set
1044   --
1045 
1046   PROCEDURE Set_Log_Level(
1047 	p_log_level   IN  NUMBER
1048   )  IS
1049   --
1050   l_file_name VARCHAR2(32767);
1051   l_return_status VARCHAR2(32767);
1052   l_msg_data VARCHAR2(32767);
1053   l_msg_count NUMBER;
1054 --l_debug_on BOOLEAN;
1055   --
1056   --l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SET_LOG_LEVEL';
1057   --
1058   BEGIN
1059 	--
1060 	-- Debug Statements
1061 	--
1062 	--
1063 	--l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1064 	--
1065 	--IF l_debug_on IS NULL
1066 	--THEN
1067 	    --l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1068 	--END IF;
1069 	--
1070 	--IF l_debug_on THEN
1071 	    --WSH_DEBUG_SV.push(l_module_name);
1072 	    --
1073 	    --WSH_DEBUG_SV.log(l_module_name,'P_LOG_LEVEL',P_LOG_LEVEL);
1074 	--END IF;
1075 	--
1076 	--
1077 	-- Added to turn on/off the WSH debugger depending on log level
1078 	--
1079 	BEGIN
1080 	     IF p_log_level > 0
1081 	     THEN
1082                  --fnd_profile.put('WSH_DEBUG_MODE','T');
1083                  fnd_profile.put('WSH_DEBUG_MODULE','%');
1084                  fnd_profile.put('WSH_DEBUG_LEVEL',WSH_DEBUG_SV.C_STMT_LEVEL);
1085 		 wsh_debug_sv.start_debugger(l_file_name,l_return_status,l_msg_count,l_msg_data);
1086 		 --wsh_debug_sv.start_debugger(l_file_name,l_return_status,l_msg_data,l_msg_count);
1087 		 -- Ignore errors;
1088 	     ELSE
1089                  --fnd_profile.put('WSH_DEBUG_MODE','F');
1090 		 wsh_debug_sv.stop_debugger;
1091 	     END IF;
1092 	EXCEPTION
1093 	   WHEN OTHERS THEN
1094 	      NULL;
1095 	END;
1096 	--
1097 	G_LOG_LEVEL := p_log_level;
1098 	--
1099 	-- Debug Statements
1100 	--
1101 	--IF l_debug_on THEN
1102 	    --WSH_DEBUG_SV.pop(l_module_name);
1103 	--END IF;
1104 	--
1105   END Set_Log_Level;
1106 
1107   --
1108   -- Procedure:	Print
1109   -- Purpose:		Prints a line of message text to the log file
1110   --				 and does not insert a new line at the end
1111   --				 program log files
1112   -- Arguments:	p_msg - message text to print
1113   --
1114 
1115   PROCEDURE Print(
1116 	p_msg	IN	VARCHAR2
1117   ) IS
1118   l_insert_text		VARCHAR2(80);
1119   l_remainder_text	VARCHAR2(2000);
1120   i			NUMBER := 0;
1121   --
1122 l_debug_on BOOLEAN;
1123   --
1124   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINT';
1125   --
1126   BEGIN
1127 	--
1128 	--
1129 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1130 	--
1131 	IF l_debug_on IS NULL
1132 	THEN
1133 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1134 	END IF;
1135 	--
1136 	IF G_ALLOW_PRINT = 'Y' AND G_LOG_LEVEL > 0 THEN
1137 	  IF LENGTH(p_msg) > G_MAX_LENGTH THEN
1138 		l_remainder_text := SUBSTRB(p_msg,1,G_MAX_LENGTH);
1139 	  ELSE
1140 	l_remainder_text := p_msg;
1141 	  END IF;
1142 
1143 	  LOOP
1144 		l_insert_text := SUBSTRB(l_remainder_text,1,80);
1145 	l_remainder_text := SUBSTRB(l_remainder_text,81);
1146 		fnd_file.put(FND_FILE.LOG, l_insert_text);
1147 
1148 		IF l_remainder_text IS NOT NULL THEN
1149 	  fnd_file.new_line(FND_FILE.LOG);
1150 		END IF;
1151 
1152 		EXIT WHEN l_remainder_text IS NULL;
1153 		i := i + 1;
1154 	EXIT WHEN i = 25;
1155 	  END LOOP;
1156 	END IF;
1157   END Print;
1158 
1159   --
1160   -- Procedure:	Println
1161   -- Purpose:		Prints a line of message text to the log file
1162   --				 and inserts a new line at the end
1163   --				 program log files
1164   -- Arguments:	p_msg - message text to print
1165   --
1166 
1167   PROCEDURE Println(
1168 	p_msg	IN	VARCHAR2
1169   ) IS
1170   l_insert_text		VARCHAR2(80);
1171   l_remainder_text	VARCHAR2(2000);
1172   i			NUMBER := 0;
1173   --
1174 l_debug_on BOOLEAN;
1175   --
1176   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINTLN';
1177   --
1178   BEGIN
1179 	--
1180 	--
1181 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1182 	--
1183 	IF l_debug_on IS NULL
1184 	THEN
1185 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1186 	END IF;
1187 	--
1188 	IF G_ALLOW_PRINT = 'Y' AND G_LOG_LEVEL > 0 THEN
1189 	  IF LENGTH(p_msg) > G_MAX_LENGTH THEN
1190 		l_remainder_text := SUBSTRB(p_msg,1,G_MAX_LENGTH);
1191 	  ELSE
1192 	l_remainder_text := p_msg;
1193 	  END IF;
1194 
1195 	  LOOP
1196 		l_insert_text := SUBSTRB(l_remainder_text,1,80);
1197 	l_remainder_text := SUBSTRB(l_remainder_text,81);
1198 		fnd_file.put_line(FND_FILE.LOG, l_insert_text);
1199 
1200 		EXIT WHEN l_remainder_text IS NULL;
1201 		i := i + 1;
1202 	EXIT WHEN i = 25;
1203 	  END LOOP;
1204 	END IF;
1205 
1206   END Println;
1207 
1208   --
1209   -- Procedure:	Println
1210   -- Purpose:		Prints a new line character to the log file
1211   --				 program log files
1212   -- Arguments:	None
1213   --
1214 
1215   PROCEDURE Println IS
1216   --
1217 l_debug_on BOOLEAN;
1218   --
1219   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINTLN';
1220   --
1221   BEGIN
1222 	--
1223 	--
1224 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1225 	--
1226 	IF l_debug_on IS NULL
1227 	THEN
1228 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1229 	END IF;
1230 	--
1231 	IF G_ALLOW_PRINT = 'Y'  AND G_LOG_LEVEL > 0 THEN
1232 	  fnd_file.new_line(FND_FILE.LOG);
1233 	END IF;
1234 	--
1235   END Println;
1236 
1237 
1238   --
1239   -- Procedure:	PrintMsg
1240   -- Purpose:		Prints a line of message text to the log file
1241   --				 and inserts a new line at the end
1242   --				 program log files irrespective of the log level
1243   --				Should be used for the debug messages which need to
1244   --				printed always
1245   -- Arguments:	p_msg - message text to print
1246   --
1247 
1248   PROCEDURE PrintMsg(
1249 	p_msg	IN	VARCHAR2
1250   ) IS
1251   l_insert_text		VARCHAR2(80);
1252   l_remainder_text	VARCHAR2(2000);
1253   i			NUMBER := 0;
1254   --
1255 l_debug_on BOOLEAN;
1256   --
1257   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINTMSG';
1258   --
1259   BEGIN
1260 	--
1261 	--
1262 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1263 	--
1264 	IF l_debug_on IS NULL
1265 	THEN
1266 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1267 	END IF;
1268 	--
1269 	IF G_ALLOW_PRINT = 'Y'THEN
1270 	  IF LENGTH(p_msg) > G_MAX_LENGTH THEN
1271 		l_remainder_text := SUBSTRB(p_msg,1,G_MAX_LENGTH);
1272 	  ELSE
1273 	l_remainder_text := p_msg;
1274 	  END IF;
1275 
1276 	  LOOP
1277 		l_insert_text := SUBSTRB(l_remainder_text,1,80);
1278 	l_remainder_text := SUBSTRB(l_remainder_text,81);
1279 		fnd_file.put_line(FND_FILE.LOG, l_insert_text);
1280 
1281 		EXIT WHEN l_remainder_text IS NULL;
1282 		i := i + 1;
1283 	EXIT WHEN i = 25;
1284 	  END LOOP;
1285 	END IF;
1286 
1287   END PrintMsg;
1288 
1289   --
1290   -- Procedure:	PrintMsg
1291   -- Purpose:		Prints a new line character to the log file
1292   --				 program log files irrespective of the log Level
1293   -- Arguments:	 None
1294   --
1295 
1296   PROCEDURE PrintMsg IS
1297   --
1298 l_debug_on BOOLEAN;
1299   --
1300   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINTMSG';
1301   --
1302   BEGIN
1303 	--
1304 	--
1305 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1306 	--
1307 	IF l_debug_on IS NULL
1308 	THEN
1309 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1310 	END IF;
1311 	--
1312 	IF G_ALLOW_PRINT = 'Y' THEN
1313 	  fnd_file.new_line(FND_FILE.LOG);
1314 	END IF;
1315 	--
1316   END PrintMsg;
1317 
1318 
1319   --
1320   --
1321   -- Procedure:		PrintDateTime
1322   -- Purpose:		Prints system date and time to the log file
1323   -- Arguments:		None
1324   --
1325 
1326   PROCEDURE PrintDateTime IS
1327 	l_date_time	DATE;
1328 	--
1329 l_debug_on BOOLEAN;
1330 	--
1331 	l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINTDATETIME';
1332 	--
1333   BEGIN
1334 
1335 	--
1336 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1337 	--
1338 	IF l_debug_on IS NULL
1339 	THEN
1340 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1341 	END IF;
1342 	--
1343 	SELECT SYSDATE INTO l_date_time FROM dual;
1344 	Println('Current Time: ' || to_char(l_date_time, 'DD-MON-YYYY HH24:MI:SS'));
1345 
1346   END;
1347 
1348 
1349   FUNCTION Construct_Query(old_query VARCHAR2,
1350 			   pkey VARCHAR2,
1351 			   pkey_value VARCHAR2)
1352 			RETURN VARCHAR2 IS
1353     new_query VARCHAR2(500);
1354   BEGIN
1355     IF (pkey_value IS NULL) THEN
1356       new_query := old_query||pkey||' IS NULL';
1357     ELSE
1358       new_query := old_query||pkey||' = '||pkey_value;
1359     END IF;
1360     RETURN new_query;
1361   END Construct_Query;
1362 
1363 
1364 
1365 
1366   -- Name
1367   --   Gen_Check_Unique
1368   -- Purpose
1369   --   Checks for duplicates in database
1370   -- Arguments
1371   --   query_text			   query to execute to test for uniqueness
1372   --   prod_name		product name to send message for
1373   --   msg_name			message to print if duplicate found
1374   --
1375   -- Notes
1376   --   uses DBMS_SQL package to create and execute cursor for given query
1377 
1378 
1379   PROCEDURE Gen_Check_Unique(p_table_name IN VARCHAR2,
1380 			     p_pkey1 IN VARCHAR2 ,
1381 			     p_pkey1_value IN VARCHAR2 ,
1382                              p_is_1_char   IN VARCHAR2,
1383 			     p_pkey2 IN VARCHAR2 ,
1384 			     p_pkey2_value IN VARCHAR2 ,
1385                              p_is_2_char   IN VARCHAR2,
1386 			     p_pkey3 IN VARCHAR2 ,
1387 			     p_pkey3_value IN VARCHAR2 ,
1388                              p_is_3_char   IN VARCHAR2,
1389 			     p_pkey4 IN VARCHAR2 ,
1390 			     p_pkey4_value IN VARCHAR2 ,
1391                              p_is_4_char   IN VARCHAR2,
1392 			     p_pkey5 IN VARCHAR2 ,
1393 			     p_pkey5_value IN VARCHAR2 ,
1394                              p_is_5_char   IN VARCHAR2,
1395 			     p_pkey6 IN VARCHAR2 ,
1396 			     p_pkey6_value IN VARCHAR2 ,
1397                              p_is_6_char   IN VARCHAR2,
1398 			     p_pkey7 IN VARCHAR2 ,
1399 			     p_pkey7_value IN VARCHAR2 ,
1400                              p_is_7_char   IN VARCHAR2,
1401 			     p_pkey8 IN VARCHAR2 ,
1402 			     p_pkey8_value IN VARCHAR2 ,
1403                              p_is_8_char   IN VARCHAR2,
1404 			     p_row_id IN VARCHAR2 ,
1405 			     p_prod_name IN VARCHAR2,
1406 			     p_msg_name IN VARCHAR2) IS
1407 	rec_cursor INTEGER;
1408 	any_found INTEGER;
1409 
1410     query_string VARCHAR2(500);
1411     query_param VARCHAR2(500);
1412     new_value VARCHAR2(80);
1413     pkey_value VARCHAR2(80);
1414 
1415 	--
1416 l_debug_on BOOLEAN;
1417 	--
1418 	l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GEN_CHECK_UNIQUE';
1419 	--
1420 BEGIN
1421 	--
1422 	-- Debug Statements
1423 	--
1424 	--
1425 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1426 	--
1427 	IF l_debug_on IS NULL
1428 	THEN
1429 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1430 	END IF;
1431 	--
1432 	IF l_debug_on THEN
1433 	    WSH_DEBUG_SV.push(l_module_name);
1434 	    --
1435 	    WSH_DEBUG_SV.log(l_module_name,'PROD_NAME',P_PROD_NAME);
1436 	    WSH_DEBUG_SV.log(l_module_name,'MSG_NAME',P_MSG_NAME);
1437 	END IF;
1438 
1439      query_string := 'SELECT '||p_pkey1||' FROM '||p_table_name||' WHERE ';
1440      query_param := query_string;
1441 
1442      IF  p_pkey1_value IS NULL THEN
1443          pkey_value := NULL;
1444      ELSE
1445          pkey_value := ':x_pkey1_value';
1446      END IF;
1447      query_string := Construct_Query(query_param,p_pkey1,pkey_value);
1448      IF (p_pkey2 IS NOT NULL) THEN
1449        query_param :=  query_string||' AND ';
1450        IF  p_pkey2_value IS NULL THEN
1451          pkey_value := NULL;
1452        ELSE
1453          pkey_value := ':x_pkey2_value';
1454        END IF;
1455        query_string := Construct_Query(query_param,p_pkey2,pkey_value);
1456      END IF;
1457      IF (p_pkey3 IS NOT NULL) THEN
1458        query_param :=  query_string||' AND ';
1459        IF  p_pkey3_value IS NULL THEN
1460          pkey_value := NULL;
1461        ELSE
1462          pkey_value := ':x_pkey3_value';
1463        END IF;
1464        query_string := Construct_Query(query_param,p_pkey3,pkey_value);
1465      END IF;
1466      IF (p_pkey4 IS NOT NULL) THEN
1467        query_param :=  query_string||' AND ';
1468        IF  p_pkey4_value IS NULL THEN
1469          pkey_value := NULL;
1470        ELSE
1471          pkey_value := ':x_pkey4_value';
1472        END IF;
1473        query_string := Construct_Query(query_param,p_pkey4,pkey_value);
1474      END IF;
1475      IF (p_pkey5 IS NOT NULL) THEN
1476        query_param :=  query_string||' AND ';
1477        IF  p_pkey5_value IS NULL THEN
1478          pkey_value := NULL;
1479        ELSE
1480          pkey_value := ':x_pkey5_value';
1481        END IF;
1482        query_string := Construct_Query(query_param,p_pkey5,pkey_value);
1483      END IF;
1484      IF (p_pkey6 IS NOT NULL) THEN
1485        query_param :=  query_string||' AND ';
1486        IF  p_pkey6_value IS NULL THEN
1487          pkey_value := NULL;
1488        ELSE
1489          pkey_value := ':x_pkey6_value';
1490        END IF;
1491        query_string := Construct_Query(query_param,p_pkey6,pkey_value);
1492      END IF;
1493      IF (p_pkey7 IS NOT NULL) THEN
1494        query_param :=  query_string||' AND ';
1495        IF  p_pkey7_value IS NULL THEN
1496          pkey_value := NULL;
1497        ELSE
1498          pkey_value := ':x_pkey7_value';
1499        END IF;
1500        query_string := Construct_Query(query_param,p_pkey7,pkey_value);
1501      END IF;
1502      IF (p_pkey8 IS NOT NULL) THEN
1503        query_param :=  query_string||' AND ';
1504        IF  p_pkey8_value IS NULL THEN
1505          pkey_value := NULL;
1506        ELSE
1507          pkey_value := ':x_pkey8_value';
1508        END IF;
1509        query_string := Construct_Query(query_param,p_pkey8,pkey_value);
1510      END IF;
1511      IF (p_row_id IS NOT NULL) THEN
1512        query_string := query_string||' AND ROWID <> '||':x_row_id';
1513      END IF;
1514 
1515 	--
1516 	IF l_debug_on THEN
1517 	    WSH_DEBUG_SV.log(l_module_name,'query_string',query_string);
1518         END IF;
1519 
1520      rec_cursor := dbms_sql.open_cursor;
1521      dbms_sql.parse(rec_cursor,query_string,dbms_sql.v7);
1522 
1523      IF p_pkey1 IS NOT NULL AND p_pkey1_value IS NOT NULL THEN
1524         IF (p_is_1_char = 'Y') THEN
1525           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey1_value', p_pkey1_value);
1526         ELSE
1527           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey1_value', TO_NUMBER(p_pkey1_value));
1528         END IF;
1529      END IF;
1530      IF p_pkey2 IS NOT NULL AND p_pkey2_value IS NOT NULL THEN
1531         IF (p_is_2_char = 'Y') THEN
1532           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey2_value', p_pkey2_value);
1533         ELSE
1534           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey2_value', TO_NUMBER(p_pkey2_value));
1535         END IF;
1536      END IF;
1537      IF p_pkey3 IS NOT NULL AND p_pkey3_value IS NOT NULL THEN
1538         IF (p_is_3_char = 'Y') THEN
1539           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey3_value', p_pkey3_value);
1540         ELSE
1541           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey3_value', TO_NUMBER(p_pkey3_value));
1542         END IF;
1543      END IF;
1544      IF p_pkey4 IS NOT NULL AND p_pkey4_value IS NOT NULL THEN
1545         IF (p_is_4_char = 'Y') THEN
1546           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey4_value', p_pkey4_value);
1547         ELSE
1548           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey4_value', TO_NUMBER(p_pkey4_value));
1549         END IF;
1550      END IF;
1551      IF p_pkey5 IS NOT NULL AND p_pkey5_value IS NOT NULL THEN
1552         IF (p_is_5_char = 'Y') THEN
1553           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey5_value', p_pkey5_value);
1554         ELSE
1555           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey5_value', TO_NUMBER(p_pkey5_value));
1556         END IF;
1557      END IF;
1558      IF p_pkey6 IS NOT NULL AND p_pkey6_value IS NOT NULL THEN
1559         IF (p_is_6_char = 'Y') THEN
1560           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey6_value', p_pkey6_value);
1561         ELSE
1562           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey6_value', TO_NUMBER(p_pkey6_value));
1563         END IF;
1564      END IF;
1565      IF p_pkey7 IS NOT NULL AND p_pkey7_value IS NOT NULL THEN
1566         IF (p_is_7_char = 'Y') THEN
1567           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey7_value', p_pkey7_value);
1568         ELSE
1569           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey7_value', TO_NUMBER(p_pkey7_value));
1570         END IF;
1571      END IF;
1572      IF p_pkey8 IS NOT NULL AND p_pkey8_value IS NOT NULL THEN
1573         IF (p_is_8_char = 'Y') THEN
1574           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey8_value', p_pkey8_value);
1575         ELSE
1576           DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_pkey8_value', TO_NUMBER(p_pkey8_value));
1577         END IF;
1578      END IF;
1579      IF p_row_id IS NOT NULL THEN
1580         DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_row_id', CHARTOROWID(p_row_id));
1581      END IF;
1582 
1583 
1584      any_found := dbms_sql.execute_and_fetch(rec_cursor);
1585      IF (any_found > 0) THEN
1586        FND_MESSAGE.SET_NAME(p_prod_name,p_msg_name);
1587        APP_EXCEPTION.RAISE_EXCEPTION;
1588      END IF;
1589 --
1590 -- Debug Statements
1591 --
1592 	IF l_debug_on THEN
1593 	    WSH_DEBUG_SV.pop(l_module_name);
1594 	END IF;
1595 	--
1596 END;
1597 
1598 
1599 PROCEDURE GET_ACTIVE_DATE(P_TABLE_NAME  IN       varchar2,
1600                           P_COLUMN_NAME  IN        varchar2,
1601                           P_ROW_ID       IN       varchar2,
1602                           X_DATE_FETCHED OUT NOCOPY DATE)
1603 IS
1604 
1605   query_text VARCHAR2(500);
1606   rec_cursor			 INTEGER;
1607   row_processed		 INTEGER;
1608   error_out			EXCEPTION;
1609   date_in_table		DATE;
1610 	--
1611   l_debug_on BOOLEAN;
1612 	--
1613 	l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ACTIVE_DATE';
1614 	--
1615 BEGIN
1616 	--
1617 	-- Debug Statements
1618 	--
1619 	--
1620 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1621 	--
1622 	IF l_debug_on IS NULL
1623 	THEN
1624 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1625 	END IF;
1626 	--
1627         query_text := 'SELECT '|| P_COLUMN_NAME || ' FROM ' ||
1628                        P_TABLE_NAME || ' WHERE ROWID = :x_row_id';
1629 	IF l_debug_on THEN
1630 	    WSH_DEBUG_SV.push(l_module_name);
1631 	    --
1632 	    WSH_DEBUG_SV.log(l_module_name,'QUERY_TEXT',QUERY_TEXT);
1633 	END IF;
1634 
1635 	--
1636 	rec_cursor := dbms_sql.open_cursor;
1637 	dbms_sql.parse(rec_cursor,query_text,dbms_sql.v7);
1638 	dbms_sql.define_column(rec_cursor, 1, date_in_table);
1639 
1640         DBMS_SQL.BIND_VARIABLE(rec_cursor,':x_row_id', CHARTOROWID(p_row_id));
1641 	row_processed := dbms_sql.execute(rec_cursor);
1642 
1643 	IF ( dbms_sql.fetch_rows(rec_cursor) > 0) THEN
1644 	  dbms_sql.column_value( rec_cursor, 1, date_in_table);
1645 	ELSE
1646 	  RAISE error_out;
1647 	END IF;
1648 
1649 	dbms_sql.close_cursor(rec_cursor);
1650 
1651 	x_date_fetched := date_in_table;
1652 
1653 --
1654 -- Debug Statements
1655 --
1656 IF l_debug_on THEN
1657     WSH_DEBUG_SV.pop(l_module_name);
1658 END IF;
1659 --
1660   EXCEPTION
1661 	WHEN OTHERS THEN
1662 		dbms_sql.close_cursor(rec_cursor);
1663 		FND_MESSAGE.Set_Name('OE','OE_QUERY_ERROR');
1664 		FND_MESSAGE.Set_Token('PACKAGE','WSH_UTIL_CORE');
1665 		FND_MESSAGE.Set_Token('ORA_ERROR',to_char(sqlcode));
1666 		FND_MESSAGE.Set_Token('ORA_TEXT',query_text);
1667 		APP_EXCEPTION.Raise_Exception;
1668 		--
1669 		-- Debug Statements
1670 		--
1671 		IF l_debug_on THEN
1672 		    WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1673 		    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1674 		END IF;
1675 		--
1676 END Get_Active_Date;
1677 
1678 PROCEDURE Get_Active_Date(query_text		 IN	VARCHAR2,
1679 				   date_fetched	 OUT NOCOPY 	DATE) IS
1680 	rec_cursor			 INTEGER;
1681 	row_processed		 INTEGER;
1682 	error_out			EXCEPTION;
1683 	date_in_table		DATE;
1684 	--
1685 l_debug_on BOOLEAN;
1686 	--
1687 	l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ACTIVE_DATE';
1688 	--
1689 BEGIN
1690 	--
1691 	-- Debug Statements
1692 	--
1693 	--
1694 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1695 	--
1696 	IF l_debug_on IS NULL
1697 	THEN
1698 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1699 	END IF;
1700 	--
1701 	IF l_debug_on THEN
1702 	    WSH_DEBUG_SV.push(l_module_name);
1703 	    --
1704 	    WSH_DEBUG_SV.log(l_module_name,'QUERY_TEXT',QUERY_TEXT);
1705 	END IF;
1706 	--
1707 	rec_cursor := dbms_sql.open_cursor;
1708 	dbms_sql.parse(rec_cursor,query_text,dbms_sql.v7);
1709 	dbms_sql.define_column(rec_cursor, 1, date_in_table);
1710 	row_processed := dbms_sql.execute(rec_cursor);
1711 
1712 	IF ( dbms_sql.fetch_rows(rec_cursor) > 0) THEN
1713 	  dbms_sql.column_value( rec_cursor, 1, date_in_table);
1714 	ELSE
1715 	  RAISE error_out;
1716 	END IF;
1717 
1718 	dbms_sql.close_cursor(rec_cursor);
1719 
1720 	date_fetched := date_in_table;
1721 
1722 --
1723 -- Debug Statements
1724 --
1725 IF l_debug_on THEN
1726     WSH_DEBUG_SV.pop(l_module_name);
1727 END IF;
1728 --
1729   EXCEPTION
1730 	WHEN OTHERS THEN
1731 		dbms_sql.close_cursor(rec_cursor);
1732 		FND_MESSAGE.Set_Name('OE','OE_QUERY_ERROR');
1733 		FND_MESSAGE.Set_Token('PACKAGE','WSH_UTIL_CORE');
1734 		FND_MESSAGE.Set_Token('ORA_ERROR',to_char(sqlcode));
1735 		FND_MESSAGE.Set_Token('ORA_TEXT',query_text);
1736 		APP_EXCEPTION.Raise_Exception;
1737 		--
1738 		-- Debug Statements
1739 		--
1740 		IF l_debug_on THEN
1741 		    WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1742 		    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1743 		END IF;
1744 		--
1745 END Get_Active_Date;
1746 
1747 
1748 
1749 -- Overloaded the procedure to log messages to debug file as well.
1750 PROCEDURE Add_Message ( p_message_type IN VARCHAR2,
1751 		        p_module_name IN VARCHAR2
1752 		       )
1753 IS
1754 
1755 msg_buffer varchar2(2000);
1756 l_encoded_msg varchar2(2000);
1757 l_message_type    VARCHAR2(1) := NULL;
1758 l_app_short_name  VARCHAR2(10) := NULL;
1759 l_message_name    VARCHAR2(30) := NULL;
1760 
1761 --
1762 l_debug_on BOOLEAN;
1763 --
1764 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ADD_MESSAGE';
1765 l_exception_level NUMBER;
1766 --
1767 BEGIN
1768 
1769    --
1770    -- Debug Statements
1771    --
1772    --
1773    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1774    --
1775    IF l_debug_on IS NULL
1776    THEN
1777        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1778    END IF;
1779    --
1780    IF l_debug_on THEN
1781        WSH_DEBUG_SV.push(l_module_name);
1782        --
1783        WSH_DEBUG_SV.log(l_module_name,'P_MESSAGE_TYPE',P_MESSAGE_TYPE);
1784        WSH_DEBUG_SV.log(l_module_name,'P_MODULE_NAME',P_MODULE_NAME);
1785    END IF;
1786    --
1787    IF (p_message_type = 'E') THEN
1788 	 l_message_type := 'E';
1789 	 l_exception_level := WSH_DEBUG_SV.C_ERR_LEVEL;
1790    ELSIF (p_message_type = 'U') THEN
1791 	 l_message_type := 'U';
1792 	 l_exception_level := WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL;
1793    ELSIF (p_message_type = 'W') THEN
1794 	 l_message_type := 'W';
1795 	 l_exception_level := WSH_DEBUG_SV.C_ERR_LEVEL;
1796    END IF;
1797 
1798    --IF WSH_UTIL_CORE.G_STORE_MSG_IN_TABLE = FALSE THEN
1799    IF G_STORE_MSG_IN_TABLE = FALSE THEN
1800       IF (l_message_type IS NOT NULL) THEN
1801         msg_buffer := fnd_message.get;
1802         IF msg_buffer is not null THEN
1803           IF l_debug_on THEN
1804             WSH_DEBUG_SV.log(l_module_name,'msg_buffer',msg_buffer);
1805           END IF;
1806            fnd_message.set_name('WSH','WSH_UTIL_MESSAGE_'||l_message_type);
1807            fnd_message.set_token('MSG_TEXT',msg_buffer);
1808         END IF;
1809          --
1810          -- Log the message in debug file as well.
1811          --
1812          IF p_module_name IS NOT NULL
1813          AND l_debug_on
1814          THEN
1815             wsh_debug_sv.logmsg
1816 	       (
1817 		 p_module_name,
1818 		 l_message_type || ':' || msg_buffer,
1819 		 l_exception_level
1820 	        );
1821          END IF;
1822       END IF;
1823 
1824      IF msg_buffer is not null
1825      OR p_message_type = 'S' THEN
1826        fnd_msg_pub.add;
1827      END IF;
1828    ELSE
1829       l_encoded_msg := fnd_message.get_encoded  ;
1830       fnd_message.parse_encoded(l_encoded_msg, l_app_short_name , l_message_name );
1831       fnd_message.set_encoded(l_encoded_msg);
1832       msg_buffer := fnd_message.get;
1833       WSH_INTEGRATION.G_MSG_TABLE(WSH_INTEGRATION.G_MSG_TABLE.COUNT + 1 ).message_name := l_message_name ;
1834       WSH_INTEGRATION.G_MSG_TABLE(WSH_INTEGRATION.G_MSG_TABLE.COUNT ).message_text := msg_buffer ;
1835       WSH_INTEGRATION.G_MSG_TABLE(WSH_INTEGRATION.G_MSG_TABLE.COUNT ).message_type := p_message_type ;
1836       --
1837       -- Log the message in debug file as well.
1838       --
1839       IF p_module_name IS NOT NULL
1840       AND l_debug_on
1841       THEN
1842           wsh_debug_sv.logmsg
1843            (
1844              p_module_name,
1845              l_message_type || ':' || msg_buffer,
1846              l_exception_level
1847             );
1848       END IF;
1849    END IF ;
1850 
1851 --
1852 -- Debug Statements
1853 --
1854 IF l_debug_on THEN
1855     WSH_DEBUG_SV.pop(l_module_name);
1856 END IF;
1857 --
1858 END Add_Message;
1859 
1860 PROCEDURE Add_Message ( p_message_type IN VARCHAR2 := NULL
1861 		       )
1862 IS
1863 BEGIN
1864     --
1865     --
1866     add_message(p_message_type, NULL);
1867 END Add_Message;
1868 
1869 -- Overloaded the procedure to log messages to debug file as well.
1870 
1871 -- Overloaded the procedure to set message and tokens
1872 -- Harmonization Project I **heali
1873 PROCEDURE Add_Message (
1874         p_message_type IN     VARCHAR2,
1875         p_module_name IN      VARCHAR2,
1876         p_error_name  IN      VARCHAR2,
1877         p_token1      IN      VARCHAR2 DEFAULT NULL,
1878         p_value1      IN      VARCHAR2 DEFAULT NULL,
1879         p_token2      IN      VARCHAR2 DEFAULT NULL,
1880         p_value2      IN      VARCHAR2 DEFAULT NULL,
1881         p_token3      IN      VARCHAR2 DEFAULT NULL,
1882         p_value3      IN      VARCHAR2 DEFAULT NULL,
1883         p_token4      IN      VARCHAR2 DEFAULT NULL,
1884         p_value4      IN      VARCHAR2 DEFAULT NULL,
1885         p_token5      IN      VARCHAR2 DEFAULT NULL,
1886         p_value5      IN      VARCHAR2 DEFAULT NULL,
1887         p_token6      IN      VARCHAR2 DEFAULT NULL,
1888         p_value6      IN      VARCHAR2 DEFAULT NULL,
1889         p_token7      IN      VARCHAR2 DEFAULT NULL,
1890         p_value7      IN      VARCHAR2 DEFAULT NULL,
1891         p_token8      IN      VARCHAR2 DEFAULT NULL,
1892         p_value8      IN      VARCHAR2 DEFAULT NULL) IS
1893 
1894 l_debug_on BOOLEAN;
1895 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ADD_MESSAGE';
1896 BEGIN
1897  --
1898  l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1899  --
1900  IF l_debug_on IS NULL
1901  THEN
1902      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1903  END IF;
1904  --
1905  IF l_debug_on THEN
1906     WSH_DEBUG_SV.push(l_module_name);
1907     WSH_DEBUG_SV.log(l_module_name,'P_MESSAGE_TYPE',P_MESSAGE_TYPE);
1908     WSH_DEBUG_SV.log(l_module_name,'P_MODULE_NAME',P_MODULE_NAME);
1909     WSH_DEBUG_SV.log(l_module_name,'p_error_name',p_error_name);
1910     WSH_DEBUG_SV.log(l_module_name,'p_token1',p_token1);
1911     WSH_DEBUG_SV.log(l_module_name,'p_value1',p_value1);
1912  END IF;
1913 
1914  IF p_error_name IS NOT NULL THEN
1915     FND_MESSAGE.SET_NAME('WSH',p_error_name);
1916 
1917     IF  p_token1 IS NOT NULL AND p_value1 IS NOT NULL THEN
1918        FND_MESSAGE.SET_TOKEN(p_token1, p_value1);
1919     END IF;
1920 
1921 --Bugfix 6816437 Start
1922     IF  p_token2 IS NOT NULL AND p_value2 IS NOT NULL THEN
1923       IF l_debug_on THEN
1924         WSH_DEBUG_SV.log(l_module_name,'p_token2',p_token2);
1925         WSH_DEBUG_SV.log(l_module_name,'p_value2',p_value2);
1926       END IF;
1927        FND_MESSAGE.SET_TOKEN(p_token2, p_value2);
1928     END IF;
1929 
1930     IF  p_token3 IS NOT NULL AND p_value3 IS NOT NULL THEN
1931       IF l_debug_on THEN
1932         WSH_DEBUG_SV.log(l_module_name,'p_token3',p_token3);
1933         WSH_DEBUG_SV.log(l_module_name,'p_value3',p_value3);
1934       END IF;
1935        FND_MESSAGE.SET_TOKEN(p_token3, p_value3);
1936     END IF;
1937 
1938     IF  p_token4 IS NOT NULL AND p_value4 IS NOT NULL THEN
1939       IF l_debug_on THEN
1940         WSH_DEBUG_SV.log(l_module_name,'p_token4',p_token4);
1941         WSH_DEBUG_SV.log(l_module_name,'p_value4',p_value4);
1942       END IF;
1943        FND_MESSAGE.SET_TOKEN(p_token4, p_value4);
1944     END IF;
1945 
1946     IF  p_token5 IS NOT NULL AND p_value5 IS NOT NULL THEN
1947       IF l_debug_on THEN
1948         WSH_DEBUG_SV.log(l_module_name,'p_token5',p_token5);
1949         WSH_DEBUG_SV.log(l_module_name,'p_value5',p_value5);
1950       END IF;
1951        FND_MESSAGE.SET_TOKEN(p_token5, p_value5);
1952     END IF;
1953 
1954     IF  p_token6 IS NOT NULL AND p_value6 IS NOT NULL THEN
1955       IF l_debug_on THEN
1956         WSH_DEBUG_SV.log(l_module_name,'p_token6',p_token6);
1957         WSH_DEBUG_SV.log(l_module_name,'p_value6',p_value6);
1958       END IF;
1959        FND_MESSAGE.SET_TOKEN(p_token6, p_value6);
1960     END IF;
1961 
1962     IF  p_token7 IS NOT NULL AND p_value7 IS NOT NULL THEN
1963       IF l_debug_on THEN
1964         WSH_DEBUG_SV.log(l_module_name,'p_token7',p_token7);
1965         WSH_DEBUG_SV.log(l_module_name,'p_value7',p_value7);
1966       END IF;
1967        FND_MESSAGE.SET_TOKEN(p_token7, p_value7);
1968     END IF;
1969 
1970     IF  p_token8 IS NOT NULL AND p_value8 IS NOT NULL THEN
1971       IF l_debug_on THEN
1972         WSH_DEBUG_SV.log(l_module_name,'p_token8',p_token8);
1973         WSH_DEBUG_SV.log(l_module_name,'p_value8',p_value8);
1974       END IF;
1975        FND_MESSAGE.SET_TOKEN(p_token8, p_value8);
1976     END IF;
1977 --Bugfix 6816437 End
1978  END IF;
1979 
1980  add_message(p_message_type, p_module_name);
1981 
1982  IF l_debug_on THEN
1983     WSH_DEBUG_SV.pop(l_module_name);
1984  END IF;
1985 
1986 EXCEPTION
1987  WHEN OTHERS THEN
1988      IF l_debug_on THEN
1989          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1990                                              SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1991          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1992      END IF;
1993 
1994 END Add_Message;
1995 -- Harmonization Project I **heali
1996 
1997 PROCEDURE Add_Summary_Message(
1998 	p_message		  fnd_new_messages.message_name%type,
1999 	p_total			  number,
2000 	p_warnings		  number,
2001 	p_errors		  number,
2002 	p_return_status		  out NOCOPY  varchar2,
2003 	p_module_name       in varchar2 )
2004 is
2005 	l_total		  number;
2006 	l_warnings		  number;
2007 	l_errors		  number;
2008 
2009 --
2010 l_debug_on BOOLEAN;
2011 --
2012 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ADD_SUMMARY_MESSAGE';
2013 --
2014 begin
2015 
2016 	--
2017 	-- Debug Statements
2018 	--
2019 	--
2020 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2021 	--
2022 	IF l_debug_on IS NULL
2023 	THEN
2024 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2025 	END IF;
2026 	--
2027 	IF l_debug_on THEN
2028 	    WSH_DEBUG_SV.push(l_module_name);
2029 	    --
2030 	    WSH_DEBUG_SV.log(l_module_name,'P_TOTAL',P_TOTAL);
2031 	    WSH_DEBUG_SV.log(l_module_name,'P_WARNINGS',P_WARNINGS);
2032 	    WSH_DEBUG_SV.log(l_module_name,'P_ERRORS',P_ERRORS);
2033             WSH_DEBUG_SV.log(l_module_name,'P_MODULE_NAME',P_MODULE_NAME);
2034 	END IF;
2035 	--
2036 	l_total		  := nvl(p_total, 0);
2037 	l_warnings		  := nvl(p_warnings, 0);
2038 	l_errors		  := nvl(p_errors, 0);
2039 
2040 	IF (l_errors > 0) OR (l_warnings > 0) THEN
2041 	IF (l_total > 1) THEN
2042 		FND_MESSAGE.SET_NAME('WSH', p_message);
2043 		FND_MESSAGE.SET_TOKEN('NUM_ERROR', l_errors);
2044 		FND_MESSAGE.SET_TOKEN('NUM_WARN', l_warnings);
2045 		FND_MESSAGE.SET_TOKEN('NUM_SUCCESS', l_total - l_errors - l_warnings);
2046 
2047 		wsh_util_core.add_message(p_return_status, p_module_name);
2048 	END IF;
2049 
2050 	IF (l_total = l_errors) THEN
2051 	   p_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2052 	ELSE
2053 	   p_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2054 	END IF;
2055 	ELSE
2056 	p_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2057 	END IF;
2058 
2059 --
2060 -- Debug Statements
2061 --
2062 IF l_debug_on THEN
2063     WSH_DEBUG_SV.log(l_module_name,'P_RETURN_STATUS',p_return_status);
2064     WSH_DEBUG_SV.pop(l_module_name);
2065 END IF;
2066 --
2067 END Add_Summary_Message;
2068 
2069 PROCEDURE Add_Summary_Message(
2070 	p_message		  fnd_new_messages.message_name%type,
2071 	p_total			  number,
2072 	p_warnings		  number,
2073 	p_errors		  number,
2074 	p_return_status		  out NOCOPY  varchar2)
2075 is
2076 begin
2077 
2078     --
2079     add_summary_message
2080       (
2081 	p_message,
2082 	p_total,
2083 	p_warnings,
2084 	p_errors,
2085 	p_return_status,
2086 	NULL
2087       );
2088 END Add_Summary_Message;
2089 
2090 
2091 PROCEDURE Get_Messages ( p_init_msg_list IN VARCHAR2,
2092 					x_summary OUT NOCOPY  VARCHAR2,
2093 					x_details OUT NOCOPY  VARCHAR2,
2094 					x_count   OUT NOCOPY  NUMBER) IS
2095 
2096 l_tmp_out NUMBER;
2097 l_tmp_buffer VARCHAR2(4000);
2098 details_len   NUMBER;
2099 str_len	   NUMBER;
2100 
2101 --
2102 l_debug_on BOOLEAN;
2103 --
2104 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_MESSAGES';
2105 --
2106 BEGIN
2107   --
2108   -- Debug Statements
2109   --
2110   --
2111   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2112   --
2113   IF l_debug_on IS NULL
2114   THEN
2115       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2116   END IF;
2117   --
2118   IF l_debug_on THEN
2119       WSH_DEBUG_SV.push(l_module_name);
2120       --
2121       WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
2122   END IF;
2123   --
2124   x_count := FND_MSG_PUB.count_msg;
2125 
2126   FND_MSG_PUB.get( p_encoded => FND_API.G_FALSE,
2127 			p_msg_index => x_count,
2128 			p_data => x_summary,
2129 			p_msg_index_out => l_tmp_out);
2130 
2131   FND_MSG_PUB.get( p_encoded => FND_API.G_FALSE,
2132 				p_msg_index => 1,
2133 				p_data => l_tmp_buffer,
2134 				p_msg_index_out => l_tmp_out);
2135 
2136   x_details := l_tmp_buffer;
2137 
2138   FOR i IN 2..x_count-1 LOOP
2139 
2140 	 FND_MSG_PUB.get( p_encoded => FND_API.G_FALSE,
2141 				p_msg_index => i,
2142 				p_data => l_tmp_buffer,
2143 				p_msg_index_out => l_tmp_out);
2144 
2145 	 str_len := lengthb(x_details);
2146 
2147 	IF (str_len > 3900) THEN
2148 	   EXIT;
2149 	 END IF;
2150 
2151 	 IF (str_len+lengthb(l_tmp_buffer)> 3900) THEN
2152 	   x_details := x_details||'
2153 ------------------------------------
2154 '||substrb(l_tmp_buffer,1,3900-str_len);
2155 		EXIT;
2156 	 ELSE
2157 	   x_details := x_details||'
2158 ------------------------------------
2159 '||l_tmp_buffer;
2160 	 END IF;
2161 
2162   END LOOP;
2163 
2164   IF (p_init_msg_list = 'Y') THEN
2165 	FND_MSG_PUB.initialize;
2166   END IF;
2167 
2168 --
2169 -- Debug Statements
2170 --
2171 IF l_debug_on THEN
2172     WSH_DEBUG_SV.pop(l_module_name);
2173 END IF;
2174 --
2175 END;
2176 
2177 
2178 -- Overloaded the procedure to log messages to debug file as well.
2179 PROCEDURE default_handler ( p_routine_name IN VARCHAR2 ,
2180 		            p_module_name IN VARCHAR2
2181                           )
2182 IS
2183 
2184 --
2185 l_debug_on BOOLEAN;
2186 --
2187 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DEFAULT_HANDLER';
2188 --
2189 BEGIN
2190 
2191    --
2192    -- Debug Statements
2193    --
2194    --
2195    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2196    --
2197    IF l_debug_on IS NULL
2198    THEN
2199        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2200    END IF;
2201    --
2202    IF l_debug_on THEN
2203        WSH_DEBUG_SV.push(l_module_name);
2204        --
2205        WSH_DEBUG_SV.log(l_module_name,'P_ROUTINE_NAME',P_ROUTINE_NAME);
2206        WSH_DEBUG_SV.log(l_module_name,'P_MODULE_NAME',P_MODULE_NAME);
2207    END IF;
2208    --
2209    FND_MESSAGE.SET_NAME('WSH','WSH_UNEXP_ERROR');
2210    FND_MESSAGE.Set_Token('PACKAGE',p_routine_name);
2211    FND_MESSAGE.Set_Token('ORA_ERROR',sqlcode);
2212    FND_MESSAGE.Set_Token('ORA_TEXT',sqlerrm);
2213    WSH_UTIL_CORE.ADD_MESSAGE(FND_API.G_RET_STS_UNEXP_ERROR, p_module_name);
2214 
2215 --
2216 -- Debug Statements
2217 --
2218 IF l_debug_on THEN
2219     WSH_DEBUG_SV.pop(l_module_name);
2220 END IF;
2221 --
2222 END default_handler;
2223 
2224 PROCEDURE default_handler ( p_routine_name IN VARCHAR2
2225                           )
2226 IS
2227 
2228 BEGIN
2229 
2230     --
2231     default_handler( p_routine_name, NULL );
2232 END default_handler;
2233 
2234 PROCEDURE Clear_FND_Messages IS
2235 
2236 --
2237 l_debug_on BOOLEAN;
2238 --
2239 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CLEAR_FND_MESSAGES';
2240 --
2241 BEGIN
2242 
2243    --
2244    -- Debug Statements
2245    --
2246    --
2247    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2248    --
2249    IF l_debug_on IS NULL
2250    THEN
2251        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2252    END IF;
2253    --
2254    IF l_debug_on THEN
2255        WSH_DEBUG_SV.push(l_module_name);
2256    END IF;
2257    --
2258    fnd_message.clear;
2259 
2260 --
2261 -- Debug Statements
2262 --
2263 IF l_debug_on THEN
2264     WSH_DEBUG_SV.pop(l_module_name);
2265 END IF;
2266 --
2267 END Clear_FND_Messages;
2268 
2269 FUNCTION Get_Org_Name
2270 		(p_organization_id		IN	NUMBER
2271 		 ) RETURN VARCHAR2 IS
2272 
2273   CURSOR	org_info IS
2274    SELECT  HOU.NAME organization_name
2275    FROM  HR_ORGANIZATION_UNITS HOU
2276    WHERE  HOU.ORGANIZATION_ID = p_organization_id;
2277 
2278   org_name  VARCHAR2(240);
2279 
2280   others EXCEPTION;
2281 
2282 --
2283 l_debug_on BOOLEAN;
2284 --
2285 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ORG_NAME';
2286 --
2287   BEGIN
2288 
2289 	 --
2290 	 -- Debug Statements
2291 	 --
2292 	 --
2293 	 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2294 	 --
2295 	 IF l_debug_on IS NULL
2296 	 THEN
2297 	     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2298 	 END IF;
2299 	 --
2300 	 IF l_debug_on THEN
2301 	     WSH_DEBUG_SV.push(l_module_name);
2302 	     --
2303 	     WSH_DEBUG_SV.log(l_module_name,'P_ORGANIZATION_ID',P_ORGANIZATION_ID);
2304 	 END IF;
2305 	 --
2306 	 IF (p_organization_id IS NULL) THEN
2307 		raise others;
2308 	 END IF;
2309 
2310 	 OPEN  org_info;
2311 	 FETCH org_info INTO org_name;
2312 	 CLOSE org_info;
2313 
2314 	--
2315 	-- Debug Statements
2316 	--
2317 	IF l_debug_on THEN
2318 	    WSH_DEBUG_SV.log(l_module_name,'ORGANIZATION_NAME',org_name);
2319 	    WSH_DEBUG_SV.pop(l_module_name);
2320 	END IF;
2321 	--
2322 	RETURN org_name;
2323 
2324 	 EXCEPTION
2325 		WHEN others THEN
2326 --
2327 -- Debug Statements
2328 --
2329 IF l_debug_on THEN
2330     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2331     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2332 END IF;
2333 --
2334 		 RETURN null;
2335 
2336 END Get_Org_Name;
2337 
2338 FUNCTION Get_Item_Name
2339 		(p_item_id		IN	NUMBER,
2340 		 p_organization_id	  IN	  NUMBER,
2341 		 p_flex_code		IN   VARCHAR2 := 'MSTK',
2342 		 p_struct_num	   IN   NUMBER := 101
2343 		 ) RETURN VARCHAR2 IS
2344 
2345   item_name  VARCHAR2(2000);
2346   result	 BOOLEAN	   := TRUE;
2347 
2348   others EXCEPTION;
2349 
2350 --
2351 l_debug_on BOOLEAN;
2352 --
2353 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ITEM_NAME';
2354 --
2355   BEGIN
2356 
2357 	--
2358 	-- Debug Statements
2359 	--
2360 	--
2361 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2362 	--
2363 	IF l_debug_on IS NULL
2364 	THEN
2365 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2366 	END IF;
2367 	--
2368 	IF l_debug_on THEN
2369 	    WSH_DEBUG_SV.push(l_module_name);
2370 	    --
2371 	    WSH_DEBUG_SV.log(l_module_name,'P_ITEM_ID',P_ITEM_ID);
2372 	    WSH_DEBUG_SV.log(l_module_name,'P_ORGANIZATION_ID',P_ORGANIZATION_ID);
2373 	    WSH_DEBUG_SV.log(l_module_name,'P_FLEX_CODE',P_FLEX_CODE);
2374 	    WSH_DEBUG_SV.log(l_module_name,'P_STRUCT_NUM',P_STRUCT_NUM);
2375 	END IF;
2376 	--
2377 	IF (p_item_id IS NULL) THEN
2378 		raise others;
2379 	END IF;
2380 
2381 	result := FND_FLEX_KEYVAL.validate_ccid(
2382 			appl_short_name=>'INV',
2383 			key_flex_code=>p_flex_code,
2384 			structure_number=>p_struct_num,
2385 			combination_id=>p_item_id,
2386 			data_set=>p_organization_id);
2387 
2388 	IF result THEN
2389 	   item_name := FND_FLEX_KEYVAL.concatenated_values;
2390 	END IF;
2391 
2392 	--
2393 	-- Debug Statements
2394 	--
2395 	IF l_debug_on THEN
2396 	    WSH_DEBUG_SV.pop(l_module_name);
2397 	END IF;
2398 	--
2399 	RETURN item_name;
2400 
2401 	 EXCEPTION
2402 		WHEN others THEN
2403 
2404 --
2405 -- Debug Statements
2406 --
2407 IF l_debug_on THEN
2408     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2409     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2410 END IF;
2411 --
2412 		 RETURN null;
2413 
2414 END Get_Item_Name;
2415 
2416 
2417 -- Name  generic_flex_name
2418 -- Purpose	converts entity_id into its name
2419 -- Arguments
2420 --	  entity_id
2421 --	  warehouse_id
2422 --	  app_name  (short app name; e.g. 'INV')
2423 --	  k_flex_code	(key flexfield code; e.g., 'MSTK')
2424 --	  struct_num	 (structure number; e.g., 101)
2425 -- Assumption  The parameters are valid.
2426 --	   RETURN VARCHAR2	if name not found, NULL will be returned.
2427 
2428 FUNCTION generic_flex_name
2429   (entity_id	IN NUMBER,
2430    warehouse_id IN NUMBER,
2431    app_name	 IN VARCHAR2,
2432    k_flex_code  IN VARCHAR2,
2433    struct_num   IN NUMBER)
2434   RETURN VARCHAR2
2435   IS
2436 	 name   VARCHAR(2000) := NULL;
2437 	 result BOOLEAN	   := TRUE;
2438 	 --
2439 l_debug_on BOOLEAN;
2440 	 --
2441 	 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERIC_FLEX_NAME';
2442 	 --
2443 BEGIN
2444    --
2445    -- Debug Statements
2446    --
2447    --
2448    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2449    --
2450    IF l_debug_on IS NULL
2451    THEN
2452        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2453    END IF;
2454    --
2455    IF l_debug_on THEN
2456        WSH_DEBUG_SV.push(l_module_name);
2457        --
2458        WSH_DEBUG_SV.log(l_module_name,'ENTITY_ID',ENTITY_ID);
2459        WSH_DEBUG_SV.log(l_module_name,'WAREHOUSE_ID',WAREHOUSE_ID);
2460        WSH_DEBUG_SV.log(l_module_name,'APP_NAME',APP_NAME);
2461        WSH_DEBUG_SV.log(l_module_name,'K_FLEX_CODE',K_FLEX_CODE);
2462        WSH_DEBUG_SV.log(l_module_name,'STRUCT_NUM',STRUCT_NUM);
2463    END IF;
2464    --
2465    result := fnd_flex_keyval.validate_ccid
2466 	 (appl_short_name  => 'INV',
2467 	  key_flex_code	=> k_flex_code,
2468 	  structure_number => struct_num,
2469 	  combination_id   => entity_id,
2470 	  data_set		 => warehouse_id);
2471    IF result THEN
2472 	  name := fnd_flex_keyval.concatenated_values;
2473    END IF;
2474    --
2475    -- Debug Statements
2476    --
2477    IF l_debug_on THEN
2478        WSH_DEBUG_SV.pop(l_module_name);
2479    END IF;
2480    --
2481    RETURN name;
2482 END generic_flex_name;
2483 
2484 
2485 --
2486 -- Procedure:	Delete
2487 --
2488 -- Parameters:  p_type - type of entities to delete
2489 --		p_del_rows   - ids to be deleted
2490 --		  When returned, id is negated if the delete failed
2491 --		x_return_status - status of procedure call
2492 --
2493 -- Description: Deletes multiple entities
2494 --
2495 --tkt
2496 PROCEDURE Delete(
2497 	p_type				wsh_saved_queries_vl.entity_type%type,
2498 	p_rows		  IN OUT NOCOPY 	wsh_util_core.id_tab_type,
2499         p_caller          IN VARCHAR2,
2500 	x_return_status	  OUT NOCOPY 		VARCHAR2)
2501 is
2502 
2503   cur_return_status		varchar2(1);
2504   num_errors			number;
2505   num_warnings			number;
2506   l_message			fnd_new_messages.message_name%type;
2507 --new variable
2508   l_fte_flag					VARCHAR2(1) := 'N';
2509   l_return_status			   VARCHAR2(30);
2510   l_stop_rec					WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
2511   l_trip_rec					WSH_TRIPS_PVT.trip_rec_type;
2512 -- bmso
2513   l_lpn_ids                  WMS_Data_Type_Definitions_PUB.LPNPurgeRecordType;
2514   l_lpn_id_tab               wsh_util_core.id_tab_type;
2515 
2516   l_purged_lpns              WMS_Data_Type_Definitions_PUB.LPNPurgeRecordType;
2517 
2518   l_validate_mode   VARCHAR2(100) := wms_container_grp.G_LPN_PURGE_ACTION_VALIDATE;
2519   l_delete_mode   VARCHAR2(100) := wms_container_grp.G_LPN_PURGE_ACTION_DELETE;
2520   l_rows_lpns                        wsh_util_core.id_tab_type;
2521   l_cached_lpns              WSH_UTIL_CORE.Id_Tab_Type;
2522   l_msg_data			VARCHAR2(32000);
2523   l_msg_count		   NUMBER;
2524   l_index                  NUMBER;
2525   l_count                  NUMBER;
2526   l_lpn_id                 NUMBER;
2527   l_delivery_detail_id     NUMBER;
2528 
2529   CURSOR c_get_lpns (v_delivery_detail_id number) IS
2530   SELECT lpn_id
2531   FROM wsh_delivery_details
2532   WHERE delivery_detail_id = v_delivery_detail_id;
2533 
2534   CURSOR c_get_valid_lpns (v_delivery_detail_id NUMBER) IS
2535   select lpn_id, delivery_detail_id FROM
2536   wsh_lpn_purge_tmp
2537   WHERE delivery_detail_id = v_delivery_detail_id
2538   AND eligible_flag = 'Y';
2539 
2540   CURSOR c_get_valid_lpns_for_wms  IS
2541   select lpn_id  FROM
2542   wsh_lpn_purge_tmp
2543   WHERE lpn_id IS NOT NULL
2544   AND eligible_flag = 'Y';
2545 
2546   -- K LPN CONV. rv
2547   l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
2548   l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
2549   e_return_excp EXCEPTION;
2550   -- K LPN CONV. rv
2551 --
2552 l_debug_on BOOLEAN;
2553 --
2554 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DELETE';
2555 --
2556 begin
2557 
2558 	--
2559 	-- Debug Statements
2560 	--
2561 	--
2562         --lpn conc
2563         SAVEPOINT s_delete_savepoint;
2564 
2565 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2566 	--
2567 	IF l_debug_on IS NULL
2568 	THEN
2569 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2570 	END IF;
2571 	--
2572 	IF l_debug_on THEN
2573 	    WSH_DEBUG_SV.push(l_module_name);
2574 	END IF;
2575 	--
2576 	num_errors := 0;
2577 	num_warnings := 0;
2578 /* added this check for FTE */
2579 /* so we will not do this for each record */
2580 x_return_status:=WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2581 
2582 IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y'
2583 	AND p_type IN ('TRIP','STOP'))THEN
2584   l_fte_flag := 'Y';
2585 
2586 END IF;
2587 
2588   --lpn conv
2589     IF p_type = 'DLVB' THEN
2590        IF c_wms_code_present = 'Y' THEN --{
2591        BEGIN
2592           SELECT 1
2593           INTO l_count
2594           FROM  wsh_lpn_purge_tmp;
2595        EXCEPTION
2596           WHEN NO_DATA_FOUND THEN
2597              l_count := 0;
2598        END;
2599 
2600        IF l_count > 0 THEN
2601           DELETE FROM wsh_lpn_purge_tmp;
2602        END IF;
2603 
2604        FOR i IN 1..p_rows.count LOOP
2605           OPEN c_get_lpns(p_rows(i));
2606           FETCH c_get_lpns INTO l_rows_lpns(i);
2607           CLOSE c_get_lpns;
2608 
2609           IF l_rows_lpns(i) IS NOT NULL THEN
2610              l_lpn_ids.lpn_ids(l_lpn_ids.lpn_ids.COUNT + 1) := l_rows_lpns(i);
2611           END IF;
2612        END LOOP;
2613 
2614        FORALL i IN 1..p_rows.count
2615        INSERT INTO wsh_lpn_purge_tmp(
2616           lpn_id,
2617           delivery_detail_id,
2618           eligible_flag
2619        ) VALUES (
2620           l_rows_lpns(i),
2621           p_rows(i),
2622           decode(l_rows_lpns(i), NULL,'Y','N')
2623        );
2624 
2625        wms_container_grp.LPN_Purge_Actions (
2626                   p_api_version           => 1.0
2627                 , p_init_msg_list         => fnd_api.g_false
2628                 , p_commit                => fnd_api.g_false
2629                 , x_return_status         => l_return_status
2630                 , x_msg_count             => l_msg_count
2631                 , x_msg_data              => l_msg_data
2632                 , p_caller                => 'WSH_DELETE'
2633                 , p_action                => l_validate_mode
2634                 , p_lpn_purge_rec         => l_lpn_ids
2635 
2636        );
2637        IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2638           RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2639        END IF;
2640        IF l_lpn_ids.lpn_ids.COUNT > 0 THEN
2641 
2642           FORALL i IN l_lpn_ids.lpn_ids.FIRST..l_lpn_ids.lpn_ids.LAST
2643           UPDATE wsh_lpn_purge_tmp
2644           SET eligible_flag = 'Y'
2645           WHERE lpn_id = l_lpn_ids.lpn_ids(i);
2646 
2647        END IF;
2648        END IF; --}
2649     END IF;
2650 	for i in 1..p_rows.count loop
2651 
2652   IF l_fte_flag = 'Y' THEN
2653 
2654 	IF p_type = 'TRIP' THEN
2655  -- Get pvt type record structure for trip
2656 	  --
2657 	  -- Debug Statements
2658 	  --
2659 	  IF l_debug_on THEN
2660 	      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.GET_TRIP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
2661 	  END IF;
2662 	  --
2663 	  wsh_trips_grp.get_trip_details_pvt
2664 		 (p_trip_id => p_rows(i),
2665 		  x_trip_rec => l_trip_rec,
2666 		  x_return_status => l_return_status);
2667 	  IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2668             IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2669               num_warnings := num_warnings + 1;
2670             ELSE
2671 	      x_return_status := l_return_status;
2672 	      --
2673 	      -- Debug Statements
2674 	      --
2675 	      --IF l_debug_on THEN
2676 	          --WSH_DEBUG_SV.pop(l_module_name);
2677 	      --END IF;
2678 	      --
2679 	      --RETURN;
2680               raise e_return_excp; -- LPN CONV. rv
2681             END IF;
2682 	  END IF;
2683 
2684 	  --
2685 	  -- Debug Statements
2686 	  --
2687 	  IF l_debug_on THEN
2688 	      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
2689 	  END IF;
2690 	  --
2691 	  wsh_fte_integration.trip_stop_validations
2692 		(p_stop_rec => l_stop_rec,
2693 		 p_trip_rec => l_trip_rec,
2694 		 p_action => 'DELETE',
2695 		 x_return_status => l_return_status);
2696 
2697 	  IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2698             IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2699               num_warnings := num_warnings + 1;
2700             ELSE
2701 	      x_return_status := l_return_status;
2702 	      --
2703 	      -- Debug Statements
2704 	      --
2705 	      --IF l_debug_on THEN
2706 	          --WSH_DEBUG_SV.pop(l_module_name);
2707 	      --END IF;
2708 	      --
2709 	      --RETURN;
2710               raise e_return_excp; -- LPN CONV. rv
2711             END IF;
2712 	  END IF;
2713 	ELSIF p_type = 'STOP' THEN
2714 
2715 		--
2716 		-- Debug Statements
2717 		--
2718 		IF l_debug_on THEN
2719 		    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
2720 		END IF;
2721 		--
2722 		wsh_trip_stops_grp.get_stop_details_pvt
2723 			(p_stop_id => p_rows(i),
2724 			 x_stop_rec => l_stop_rec,
2725 			 x_return_status => l_return_status);
2726 	  IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2727             IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2728               num_warnings := num_warnings + 1;
2729             ELSE
2730 	      x_return_status := l_return_status;
2731 	      --
2732 	      -- Debug Statements
2733 	      --
2734 	      --IF l_debug_on THEN
2735 	          --WSH_DEBUG_SV.pop(l_module_name);
2736 	      --END IF;
2737 	      --
2738 	      --RETURN;
2739               raise e_return_excp; -- LPN CONV. rv
2740             END IF;
2741 	  END IF;
2742 
2743 	  --
2744 	  -- Debug Statements
2745 	  --
2746 	  IF l_debug_on THEN
2747 	      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
2748 	  END IF;
2749 	  --
2750 	  wsh_fte_integration.trip_stop_validations
2751 		(p_stop_rec => l_stop_rec,
2752 		 p_trip_rec => l_trip_rec,
2753 		 p_action => 'DELETE',
2754 		 x_return_status => l_return_status);
2755 	  IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2756             IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2757               num_warnings := num_warnings + 1;
2758             ELSE
2759 	      x_return_status := l_return_status;
2760 	      --
2761 	      -- Debug Statements
2762 	      --
2763 	      --IF l_debug_on THEN
2764 	          --WSH_DEBUG_SV.pop(l_module_name);
2765 	      --END IF;
2766 	      --
2767 	      --RETURN;
2768               raise e_return_excp; -- LPN CONV. rv
2769             END IF;
2770 	  END IF;
2771 
2772   END IF;
2773 END IF;
2774 
2775 
2776 	  if (p_type = 'TRIP') then
2777 	--
2778 	-- Debug Statements
2779 	--
2780 	IF l_debug_on THEN
2781 	    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.DELETE_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
2782 	END IF;
2783 	--
2784 	wsh_trips_pvt.delete_trip(p_rowid        => null,
2785                                   p_trip_id       => p_rows(i),
2786                                   x_return_status => cur_return_status,
2787                                   p_validate_flag => 'Y',
2788                                   p_caller        => p_caller);
2789 	  elsif (p_type = 'STOP') then
2790 	--
2791 	-- Debug Statements
2792 	--
2793 	IF l_debug_on THEN
2794 	    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_PVT.DELETE_TRIP_STOP',WSH_DEBUG_SV.C_PROC_LEVEL);
2795 	END IF;
2796 	--
2797 --tkt
2798 	wsh_trip_stops_pvt.delete_trip_stop(p_rowid        => null,
2799                                             p_stop_id       => p_rows(i),
2800                                             x_return_status => cur_return_status,
2801                                             p_validate_flag => 'Y',
2802                                             p_caller        => p_caller);
2803 	  elsif (p_type = 'DLVY') then
2804 	--
2805 	-- Debug Statements
2806 	--
2807 	IF l_debug_on THEN
2808 	    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.DELETE_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
2809 	END IF;
2810 	--
2811 	wsh_new_deliveries_pvt.delete_delivery(null, p_rows(i), cur_return_status);
2812 	  elsif (p_type = 'DLEG') then
2813 
2814 --	wsh_delivery_legs_pvt.delete_delivery_leg(null, p_rows(i), cur_return_status);
2815 
2816 	fnd_message.set_name('WSH','DEL_DLEG_NOT_IMPLEMENTED_YET');
2817 	cur_return_status := wsh_util_core.g_ret_sts_error;
2818 	wsh_util_core.add_message(cur_return_status);
2819 
2820 	  elsif (p_type = 'DLVB') then
2821 		--
2822 		-- Debug Statements
2823 		--
2824 		IF l_debug_on THEN
2825 		    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.DELETE_CONTAINERS',WSH_DEBUG_SV.C_PROC_LEVEL);
2826 		END IF;
2827 		--
2828                 --lpn conv
2829                 IF c_wms_code_present = 'Y' THEN --{bmso
2830                    OPEN c_get_valid_lpns(p_rows(i));
2831                    FETCH c_get_valid_lpns INTO l_lpn_id, l_delivery_detail_id;
2832                    CLOSE c_get_valid_lpns;
2833                 ELSE --}{
2834                    l_delivery_detail_id := 1;
2835                 END IF; --}
2836 
2837                 IF l_delivery_detail_id IS NOT NULL THEN
2838 		   WSH_CONTAINER_ACTIONS.delete_containers(p_rows(i), cur_return_status);
2839                    IF cur_return_status NOT IN (wsh_util_core.g_ret_sts_success,
2840                                             wsh_util_core.g_ret_sts_warning)
2841                    THEN
2842                          update wsh_lpn_purge_tmp
2843                          SET eligible_flag = 'N'
2844                          WHERE delivery_detail_id = p_rows(i);
2845                    END IF;
2846                 ELSE
2847                    cur_return_status :=  wsh_util_core.g_ret_sts_error;
2848                 END IF;
2849 
2850 	  end if;
2851 
2852 	  if (cur_return_status <> wsh_util_core.g_ret_sts_success) then
2853 
2854 		if (cur_return_status = wsh_util_core.g_ret_sts_error) OR (cur_return_status = wsh_util_core.g_ret_sts_unexp_error) then
2855 			p_rows(i) := -p_rows(i);
2856 		end if;
2857 
2858 
2859 		if (cur_return_status = wsh_util_core.g_ret_sts_warning) then
2860 		  num_warnings := num_warnings + 1;
2861 		else
2862 	  	  num_errors := num_errors + 1;
2863 		end if;
2864 
2865 	  end if;
2866 	end loop;
2867 
2868         IF  p_type = 'DLVB' THEN
2869            IF c_wms_code_present = 'Y' THEN --{ bmso
2870 
2871            OPEN c_get_valid_lpns_for_wms;
2872            FETCH c_get_valid_lpns_for_wms
2873            BULK COLLECT INTO l_purged_lpns.lpn_ids;
2874            CLOSE c_get_valid_lpns_for_wms;
2875 
2876            IF l_purged_lpns.lpn_ids.COUNT > 0 THEN
2877               wms_container_grp.LPN_Purge_Actions (
2878                      p_api_version           => 1.0
2879                    , p_init_msg_list         => fnd_api.g_false
2880                    , p_commit                => fnd_api.g_false
2881                    , x_return_status         => l_return_status
2882                    , x_msg_count             => l_msg_count
2883                    , x_msg_data              => l_msg_data
2884                    , p_caller                => 'WSH_DELETE'
2885                    , p_action                => l_delete_mode
2886                    , p_lpn_purge_rec         => l_purged_lpns
2887 
2888               );
2889               IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2890                  RAISE  FND_API.G_EXC_UNEXPECTED_ERROR;
2891               END IF;
2892            END IF;
2893            END IF; --}
2894         END IF;
2895         --
2896         -- K LPN CONV. rv
2897         --
2898         IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2899         THEN
2900         --{
2901             IF l_debug_on THEN
2902           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2903             END IF;
2904 
2905             WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2906               (
2907                 p_in_rec             => l_lpn_in_sync_comm_rec,
2908                 x_return_status      => l_return_status,
2909                 x_out_rec            => l_lpn_out_sync_comm_rec
2910               );
2911             --
2912             --
2913             IF l_debug_on THEN
2914               WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2915             END IF;
2916             --
2917             --
2918             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2919               IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2920                   num_warnings := num_warnings + 1;
2921               ELSE
2922                 x_return_status := l_return_status;
2923                 --
2924                 -- Debug Statements
2925                 --
2926                 ROLLBACK TO s_delete_savepoint;
2927                 --
2928 	  	num_errors := num_errors + 1;
2929               END IF;
2930             END IF;
2931         --}
2932         END IF;
2933         --
2934         -- K LPN CONV. rv
2935         --
2936 
2937 	if (num_errors > 0) then
2938 		x_return_status := wsh_util_core.g_ret_sts_error;
2939 	elsif (num_warnings >0) then
2940 		x_return_status := wsh_util_core.g_ret_sts_warning;
2941 	end if;
2942 
2943 	if (p_type = 'TRIP') then
2944 	  l_message := 'WSH_TRIP_DELETE_SUMMARY';
2945 	elsif (p_type = 'STOP') then
2946 	  l_message := 'WSH_STOP_DELETE_SUMMARY';
2947 	elsif (p_type = 'DLVY') then
2948 	  l_message := 'WSH_DLVY_DELETE_SUMMARY';
2949 	elsif (p_type = 'DLEG') then
2950 	  l_message := 'WSH_DLEG_DELETE_SUMMARY';
2951 	elsif (p_type = 'DLVB') then
2952 	  l_message := 'WSH_DLVB_DELETE_SUMMARY';
2953 	end if;
2954 
2955 	wsh_util_core.add_summary_message(
2956 	  l_message,
2957 	  p_rows.count,
2958 	  num_warnings,
2959 	  num_errors,
2960 	  x_return_status);
2961 
2962 /* H integration - added exception block */
2963 --
2964 -- Debug Statements
2965 --
2966 IF l_debug_on THEN
2967     WSH_DEBUG_SV.pop(l_module_name);
2968 END IF;
2969 --
2970 exception
2971       --
2972       -- LPN CONV. rv
2973       WHEN e_return_excp THEN
2974         --
2975         IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2976         THEN
2977         --{
2978             --
2979             IF l_debug_on THEN
2980               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2981             END IF;
2982             --
2983             WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2984               (
2985                 p_in_rec             => l_lpn_in_sync_comm_rec,
2986                 x_return_status      => l_return_status,
2987                 x_out_rec            => l_lpn_out_sync_comm_rec
2988               );
2989             --
2990             IF l_debug_on THEN
2991               WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
2992             END IF;
2993             IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR) AND x_return_status <> WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2994               x_return_status := l_return_status;
2995             END IF;
2996         --}
2997         END IF;
2998         --
2999         IF l_debug_on THEN
3000             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:E_RETURN_EXCP');
3001         END IF;
3002         -- LPN CONV. rv
3003         --
3004     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3005       ROLLBACK TO s_delete_savepoint;
3006       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
3007 
3008       IF l_debug_on THEN
3009         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle
3010 error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3011         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
3012       END IF;
3013   WHEN OTHERS THEN
3014         ROLLBACK TO s_delete_savepoint;
3015 	wsh_util_core.default_handler('WSH_UTIL_CORE.DELETE');
3016 	x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3017 
3018 --
3019 -- Debug Statements
3020 --
3021 IF l_debug_on THEN
3022     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3023     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3024 END IF;
3025 --
3026 end delete;
3027 
3028 
3029   -- Name	 city_region_postal
3030   -- Purpose	 concatenates the three fields for the reports
3031   -- Input Arguments
3032   --			 p_city
3033   --			 p_region (state)
3034   --			 p_postal_code (zip)
3035   -- RETURN VARCHAR2
3036   --
3037 
3038   FUNCTION  city_region_postal(
3039 			   p_city		in varchar2,
3040 			   p_region	  in varchar2,
3041 			   p_postal_code in varchar2)
3042   RETURN VARCHAR2
3043   IS
3044    c_r_p VARCHAR2(190); --Bug 4622054 (Increased width from 100 to 190)
3045    --
3046 l_debug_on BOOLEAN;
3047    --
3048    l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CITY_REGION_POSTAL';
3049    --
3050   BEGIN
3051 
3052 	--
3053 	-- Debug Statements
3054 	--
3055 	--
3056 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3057 	--
3058 	IF l_debug_on IS NULL
3059 	THEN
3060 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3061 	END IF;
3062 	--
3063 	IF l_debug_on THEN
3064 	    WSH_DEBUG_SV.push(l_module_name);
3065 	    --
3066 	    WSH_DEBUG_SV.log(l_module_name,'P_CITY',P_CITY);
3067 	    WSH_DEBUG_SV.log(l_module_name,'P_REGION',P_REGION);
3068 	    WSH_DEBUG_SV.log(l_module_name,'P_POSTAL_CODE',P_POSTAL_CODE);
3069 	END IF;
3070 	--
3071 	IF p_city IS NOT NULL AND p_region IS NOT NULL THEN
3072 	  c_r_p := p_city || ', ' || p_region || ' ' || p_postal_code;
3073 	ELSIF p_city IS NOT NULL AND p_region IS NULL THEN
3074 	  c_r_p := p_city || ' ' || p_postal_code;
3075 	  -- we should concatnate p_city instead of c_r_p.
3076 	ELSIF p_city IS NULL AND p_region IS NOT NULL THEN
3077 	  c_r_p :=				 p_region || ' ' || p_postal_code;
3078 	ELSIF p_city IS NULL AND p_region IS NULL THEN
3079 	  c_r_p := p_postal_code;
3080 	END IF;
3081 
3082 	--
3083 	-- Debug Statements
3084 	--
3085 	IF l_debug_on THEN
3086 	    WSH_DEBUG_SV.pop(l_module_name);
3087 	END IF;
3088 	--
3089 	RETURN c_r_p;
3090 
3091   END;
3092 
3093 
3094 /* ==================================================================
3095    Function: Evaluate shipment priority code.
3096    ================================================================== */
3097 
3098   FUNCTION  derive_shipment_priority(p_delivery_id IN NUMBER)
3099   RETURN VARCHAR2 IS
3100 
3101   v_first_code	   wsh_delivery_details.shipment_priority_code%TYPE;
3102   v_ship_code		wsh_delivery_details.shipment_priority_code%TYPE;
3103 
3104   CURSOR get_ship_codes IS
3105   SELECT wdd.shipment_priority_code ship_priority_code
3106 	FROM wsh_delivery_details wdd,
3107 		 wsh_delivery_assignments_v wda
3108    WHERE wda.delivery_detail_id = wdd.delivery_detail_id
3109          AND nvl(wdd.LINE_DIRECTION , 'O') IN ('O', 'IO')   -- J Inbound Logistics jckwok
3110 	 AND wda.delivery_id = p_delivery_id
3111 	 AND wda.delivery_id is not null
3112          AND wdd.container_flag = 'N'
3113 	 AND rownum = 1;
3114 
3115   CURSOR get_ship_codes1(p_ship_code IN VARCHAR2) IS
3116   SELECT wdd.shipment_priority_code ship_priority_code
3117 	FROM wsh_delivery_details wdd,
3118 		 wsh_delivery_assignments_v wda
3119    WHERE wda.delivery_detail_id = wdd.delivery_detail_id
3120          AND nvl(wdd.LINE_DIRECTION , 'O') IN ('O', 'IO')   -- J Inbound Logistics jckwok
3121 	 AND wda.delivery_id = p_delivery_id
3122 	 AND wda.delivery_id is not null
3123          AND wdd.container_flag = 'N'
3124 	 AND (wdd.shipment_priority_code <> p_ship_code
3125 		 OR wdd.shipment_priority_code IS NULL)
3126 	 AND rownum = 1;
3127 
3128   CURSOR get_ship_codes2 IS
3129   SELECT wdd.shipment_priority_code ship_priority_code
3130 	FROM wsh_delivery_details wdd,
3131 		 wsh_delivery_assignments_v wda
3132    WHERE wda.delivery_detail_id = wdd.delivery_detail_id
3133          AND nvl(wdd.LINE_DIRECTION , 'O') IN ('O', 'IO')   -- J Inbound Logistics jckwok
3134 	 AND wda.delivery_id = p_delivery_id
3135          AND wdd.container_flag = 'N'
3136 	 AND wda.delivery_id is not null
3137 	 AND wdd.shipment_priority_code IS NOT NULL
3138 	 AND rownum = 1;
3139 
3140 --
3141 l_debug_on BOOLEAN;
3142 --
3143 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DERIVE_SHIPMENT_PRIORITY';
3144 --
3145   BEGIN
3146 
3147 	--
3148 	-- Debug Statements
3149 	--
3150 	--
3151 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3152 	--
3153 	IF l_debug_on IS NULL
3154 	THEN
3155 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3156 	END IF;
3157 	--
3158 	IF l_debug_on THEN
3159 	    WSH_DEBUG_SV.push(l_module_name);
3160 	    --
3161 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
3162 	END IF;
3163 	--
3164 	OPEN get_ship_codes;
3165 	FETCH get_ship_codes
3166 	 INTO v_first_code;
3167 	IF get_ship_codes%NOTFOUND THEN
3168 	  CLOSE get_ship_codes;
3169 	  --
3170 	  -- Debug Statements
3171 	  --
3172 	  IF l_debug_on THEN
3173 	      WSH_DEBUG_SV.pop(l_module_name);
3174 	  END IF;
3175 	  --
3176 	  RETURN null;
3177 	END IF;
3178 	CLOSE get_ship_codes;
3179 
3180 	IF v_first_code IS NULL THEN
3181 	  OPEN get_ship_codes2;
3182 	  FETCH get_ship_codes2
3183 	   INTO v_ship_code;
3184 	  IF get_ship_codes2%NOTFOUND THEN
3185 		CLOSE get_ship_codes2;
3186 		--
3187 		-- Debug Statements
3188 		--
3189 		IF l_debug_on THEN
3190 		    WSH_DEBUG_SV.pop(l_module_name);
3191 		END IF;
3192 		--
3193 		RETURN null;
3194 	  END IF;
3195 	  CLOSE get_ship_codes2;
3196 	  --
3197 	  -- Debug Statements
3198 	  --
3199 	  IF l_debug_on THEN
3200 	      WSH_DEBUG_SV.pop(l_module_name);
3201 	  END IF;
3202 	  --
3203 	  RETURN 'Mixed';
3204 	ELSE
3205 	  OPEN get_ship_codes1(v_first_code);
3206 	  FETCH get_ship_codes1
3207 	   INTO v_ship_code;
3208 	  IF get_ship_codes1%NOTFOUND THEN
3209 		CLOSE get_ship_codes1;
3210 		--
3211 		-- Debug Statements
3212 		--
3213 		IF l_debug_on THEN
3214 		    WSH_DEBUG_SV.pop(l_module_name);
3215 		END IF;
3216 		--
3217 		RETURN v_first_code;
3218 	  END IF;
3219 	  CLOSE get_ship_codes1;
3220 	  --
3221 	  -- Debug Statements
3222 	  --
3223 	  IF l_debug_on THEN
3224 	      WSH_DEBUG_SV.pop(l_module_name);
3225 	  END IF;
3226 	  --
3227 	  RETURN 'Mixed';
3228 	END IF;
3229 
3230   EXCEPTION
3231 	WHEN OTHERS THEN
3232 	  IF get_ship_codes%ISOPEN THEN
3233 		CLOSE get_ship_codes;
3234 	  END IF;
3235 	  IF get_ship_codes1%ISOPEN THEN
3236 		CLOSE get_ship_codes1;
3237 	  END IF;
3238 	  IF get_ship_codes2%ISOPEN THEN
3239 		CLOSE get_ship_codes2;
3240 	  END IF;
3241 
3242 --
3243 -- Debug Statements
3244 --
3245 IF l_debug_on THEN
3246     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3247     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3248 END IF;
3249 --
3250 	  RETURN null;
3251 
3252   END DERIVE_SHIPMENT_PRIORITY;
3253 
3254 --
3255 -- Procedure:	Get_Ledger_id_Func_Currency
3256 --
3257 -- Parameters:  p_org_id - operating unit org id, this parameter is now
3258 --                         mandatory.
3259 --		x_ledger_id - ledger id
3260 --		x_func_currency - currency code for the Ledger
3261 --		x_return_status - status of procedure call
3262 --
3263 -- Description: Deletes multiple entities
3264 --
3265 
3266 
3267   PROCEDURE Get_Ledger_id_Func_Currency(
3268 			   p_org_id		  IN	  NUMBER ,
3269 			   x_ledger_id		  OUT NOCOPY 	 NUMBER ,
3270 			   x_func_currency   OUT NOCOPY 	 VARCHAR2 ,
3271 			   x_return_status   OUT NOCOPY 	 VARCHAR2)
3272   IS
3273   l_ledger_id				NUMBER;
3274   l_functional_currency   GL_LEDGERS_PUBLIC_V.currency_code%type;
3275   l_org_id                 NUMBER;
3276 --
3277 
3278 -- this cursor is copied from OEXVSPMB.pls, function Get_AR_Sys_Params
3279 -- to get ledger id from org_id
3280 -- LE Uptake
3281 CURSOR	c_ledger_and_func_curr (v_org_id NUMBER) IS
3282   SELECT	ar.org_id, ar.set_of_books_id, glpv.currency_code
3283   FROM	  ar_system_parameters_all ar, gl_ledgers_public_v  glpv
3284   WHERE  ar.ORG_ID      = p_org_id
3285   AND	 glpv.ledger_id = ar.set_of_books_id;
3286 
3287 --
3288 --
3289 l_debug_on BOOLEAN;
3290 --
3291 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_LEDGER_ID_FUNC_CURRENCY';
3292 
3293 WSH_GET_LEDGER_ERROR exception; -- LE Uptake
3294 --
3295   BEGIN
3296  /* In LE Uptake, changed all occurances of set_of_books to ledger in this API.*/
3297   --
3298   -- Debug Statements
3299   --
3300   --
3301   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3302   --
3303   IF l_debug_on IS NULL
3304   THEN
3305       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3306   END IF;
3307   --
3308   IF l_debug_on THEN
3309     WSH_DEBUG_SV.push(l_module_name);
3310     WSH_DEBUG_SV.log(l_module_name,'P_ORG_ID',P_ORG_ID);
3311     WSH_DEBUG_SV.log(l_module_name,'G_OPERATING_UNIT_INFO.org_id',
3312                                     G_OPERATING_UNIT_INFO.org_id);
3313   END IF;
3314   --
3315   x_ledger_id		:=  NULL;
3316   x_func_currency	:=  NULL;
3317   x_return_status	:=  WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3318   --
3319   IF p_org_id = G_OPERATING_UNIT_INFO.org_id THEN
3320     x_ledger_id	    := G_OPERATING_UNIT_INFO.ledger_id;
3321     x_func_currency := G_OPERATING_UNIT_INFO.currency_code;
3322     IF l_debug_on THEN
3323       WSH_DEBUG_SV.logmsg(l_module_name,'Return cached value for p_org = G_OPERATING_UNIT_INFO.org_id');
3324     END IF;
3325   ELSE
3326     IF l_debug_on THEN
3327       WSH_DEBUG_SV.logmsg(l_module_name,'Get Ledger id from p_org_id');
3328     END IF;
3329     OPEN  c_ledger_and_func_curr( p_org_id);
3330     FETCH c_ledger_and_func_curr
3331     INTO  l_org_id, x_ledger_id, x_func_currency;
3332     IF (c_ledger_and_func_curr%NOTFOUND) THEN
3333       raise WSH_GET_LEDGER_ERROR;
3334     END IF;
3335     -- populate the cache
3336     G_OPERATING_UNIT_INFO.org_id        := p_org_id;
3337     G_OPERATING_UNIT_INFO.ledger_id     := x_ledger_id;
3338     G_OPERATING_UNIT_INFO.currency_code := x_func_currency;
3339     CLOSE c_ledger_and_func_curr;
3340   END IF;
3341   --
3342   -- Debug Statements
3343   --
3344   IF l_debug_on THEN
3345     WSH_DEBUG_SV.log(l_module_name,'LEDGER ID',x_ledger_id);
3346     WSH_DEBUG_SV.log(l_module_name,'FUNC CURRENCY',x_func_currency);
3347     WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
3348     WSH_DEBUG_SV.pop(l_module_name);
3349   END IF;
3350 --
3351 EXCEPTION
3352    WHEN WSH_GET_LEDGER_ERROR THEN
3353      IF c_ledger_and_func_curr%ISOPEN THEN
3354        CLOSE c_ledger_and_func_curr;
3355      END IF;
3356      x_ledger_id       :=  NULL;
3357      x_func_currency   :=  NULL;
3358      x_return_status   :=  WSH_UTIL_CORE.G_RET_STS_ERROR;
3359      fnd_message.set_name('WSH', 'WSH_LEDGER_ID_NOT_FOUND');
3360      WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
3361 
3362      IF l_debug_on THEN
3363        WSH_DEBUG_SV.pop(l_module_name);
3364      END IF;
3365 
3366    WHEN others THEN
3367      x_ledger_id     :=  NULL;
3368      x_func_currency :=  NULL;
3369      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3370      IF c_ledger_and_func_curr%ISOPEN THEN
3371  	CLOSE c_ledger_and_func_curr;
3372      END IF;
3373      wsh_util_core.default_handler('WSH_UTIL_CORE.Get_Ledger_id_Func_Currency');
3374      -- Debug Statements
3375      --
3376      IF l_debug_on THEN
3377        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3378        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3379      END IF;
3380 --
3381 --
3382   END Get_Ledger_id_Func_Currency;
3383 
3384 
3385 
3386   --
3387   -- Name	 Print_Label
3388   -- Purpose
3389   --
3390   -- Input Arguments
3391   --
3392   --
3393   PROCEDURE Print_Label(
3394 			   p_delivery_ids	IN	 WSH_UTIL_CORE.Id_Tab_Type,
3395 			   p_stop_ids		IN	 WSH_UTIL_CORE.Id_Tab_Type,
3396 			   x_return_status   OUT NOCOPY 	VARCHAR2)
3397   IS
3398 
3399   CURSOR get_delivery_wms(x_delivery_id NUMBER) IS
3400   SELECT mp.wms_enabled_flag,
3401 		 wnd.delivery_id
3402   FROM   wsh_new_deliveries wnd,
3403 		 mtl_parameters	 mp
3404   WHERE  wnd.delivery_id = x_delivery_id AND
3405 		 mp.organization_id = wnd.organization_id AND
3406 		 mp.wms_enabled_flag = 'Y';
3407 
3408 
3409   CURSOR pickup_deliveries_wms (l_stop_id NUMBER) IS
3410   SELECT dg.delivery_id,
3411 		 st.trip_id,
3412 		 dl.organization_id,
3413 		 mp.wms_enabled_flag
3414   FROM   wsh_new_deliveries dl,
3415 		  wsh_delivery_legs dg,
3416 		  wsh_trip_stops st,
3417 		  mtl_parameters mp
3418   WHERE  dg.delivery_id = dl.delivery_id AND
3419                   nvl(dl.SHIPMENT_DIRECTION, 'O') IN ('O', 'IO') AND  -- J Inbound Logistics jckwok
3420 		  st.stop_location_id = dl.initial_pickup_location_id AND
3421 		  st.stop_id = dg.pick_up_stop_id AND
3422 		  st.stop_id = l_stop_id AND
3423 		  dl.organization_id = mp.organization_id AND
3424 		  mp.wms_enabled_flag = 'Y';
3425 
3426 
3427   j				NUMBER;
3428   l_label_return_status VARCHAR2(1);
3429   l_label_status		VARCHAR2(1);
3430   l_msg_data			VARCHAR2(2000);
3431   l_msg_count		   NUMBER;
3432   l_del_tab INV_LABEL_PUB.transaction_id_rec_type;
3433 
3434 --
3435 l_debug_on BOOLEAN;
3436 --
3437 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PRINT_LABEL';
3438 --
3439   BEGIN
3440 	--
3441 	-- Debug Statements
3442 	--
3443 	--
3444 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3445 	--
3446 	IF l_debug_on IS NULL
3447 	THEN
3448 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3449 	END IF;
3450 	--
3451 	IF l_debug_on THEN
3452 	    WSH_DEBUG_SV.push(l_module_name);
3453 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID.COUNT',p_delivery_ids.count);
3454 	    WSH_DEBUG_SV.log(l_module_name,'P_STOP_ID.COUNT',p_stop_ids.count);
3455 	END IF;
3456 	--
3457 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3458 	l_del_tab.delete;
3459 	j := 0;
3460 	IF p_delivery_ids.count > 0 THEN
3461 				 FOR i in 1..p_delivery_ids.count LOOP
3462 					  FOR del IN get_delivery_wms(p_delivery_ids(i)) LOOP
3463 						 j := j+1;
3464 						 l_del_tab(j) := del.delivery_id;
3465 					  END LOOP;
3466 				 END LOOP;
3467 	ELSIF p_stop_ids.count > 0 THEN
3468 				 FOR i in 1..p_stop_ids.count LOOP
3469 				  FOR del IN pickup_deliveries_wms (p_stop_ids(i)) LOOP
3470 						 j := j+1;
3471 						 l_del_tab(j) := del.delivery_id;
3472 					  END LOOP;
3473 				 END LOOP;
3474 	END IF;
3475 
3476 	IF get_delivery_wms%ISOPEN THEN
3477 		CLOSE get_delivery_wms;
3478 	END IF;
3479 	IF pickup_deliveries_wms%ISOPEN THEN
3480 		CLOSE pickup_deliveries_wms;
3481 	END IF;
3482 	IF l_del_tab.count > 0 THEN
3483 						 /* call print_label API */
3484 						 --
3485 						 -- Debug Statements
3486 						 --
3487 						 IF l_debug_on THEN
3488 						     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_LABEL_PUB.PRINT_LABEL',WSH_DEBUG_SV.C_PROC_LEVEL);
3489 						 END IF;
3490 						 --
3491 						 INV_LABEL_PUB.print_label (
3492 							x_return_status	  => l_label_return_status,
3493 							x_msg_count		  => l_msg_count,
3494 							x_msg_data		   => l_msg_data,
3495 							x_label_status	   => l_label_status,
3496 							p_api_version		=> 1.0,
3497 							p_init_msg_list	  => 'F',
3498 							p_commit			 => 'F',
3499 							p_business_flow_code => 21,
3500 							p_transaction_id	 => l_del_tab);
3501 
3502 						 IF (l_label_return_status <> 'S') THEN
3503 								FND_MESSAGE.SET_NAME('WSH','WSH_PRINT_LABEL_ERROR');
3504 							x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3505 								wsh_util_core.add_message(x_return_status);
3506 						 END IF;
3507 	  END IF;
3508 
3509 --
3510 -- Debug Statements
3511 --
3512 IF l_debug_on THEN
3513     WSH_DEBUG_SV.pop(l_module_name);
3514 END IF;
3515 --
3516 	 EXCEPTION
3517 		WHEN others THEN
3518 		   x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3519 		   IF get_delivery_wms%ISOPEN THEN
3520 			  CLOSE get_delivery_wms;
3521 		   END IF;
3522 
3523 	           IF pickup_deliveries_wms%ISOPEN THEN
3524 			  CLOSE pickup_deliveries_wms;
3525 		   END IF;
3526 		   wsh_util_core.default_handler('WSH_UTIL_CORE.Print_Label');
3527 
3528 --
3529 -- Debug Statements
3530 --
3531 IF l_debug_on THEN
3532     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3533     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3534 END IF;
3535 --
3536   END  Print_Label;
3537 
3538   /*  H integration: Pricing integration csun
3539    */
3540   --
3541   -- Name	FTE_Is_Installed
3542   -- Purpose	To check if FTE is installed, it return 'Y' if
3543   --			FTE is installed, 'N' otherwise.
3544   -- History:
3545   --    Added by Suresh on Jun-14-2002
3546   --    Added validation to check FTE is enabled or not by calling
3547   --    wsh_fte_enabled.check_status function
3548   --    Initially FTE is always disabled for ONT.H
3549   --
3550   -- Input Arguments: No input arguments
3551   --
3552   --
3553   FUNCTION FTE_Is_Installed RETURN VARCHAR2 IS
3554 
3555   l_fte_install_status  VARCHAR2(30);
3556   l_industry			VARCHAR2(30);
3557 
3558 --
3559 l_debug_on BOOLEAN;
3560 --
3561 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FTE_IS_INSTALLED';
3562 --
3563   BEGIN
3564         --
3565         -- Debug Statements
3566         --
3567         --
3568         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3569         --
3570         IF l_debug_on IS NULL
3571         THEN
3572             l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3573         END IF;
3574         --
3575         IF l_debug_on THEN
3576             WSH_DEBUG_SV.push(l_module_name);
3577         END IF;
3578         --
3579         IF (wsh_fte_enabled.check_status = 'Y' AND
3580             Get_Otm_Install_Profile_Value = 'N') THEN -- OTM R12
3581             IF G_FTE_IS_INSTALLED is NULL THEN
3582 		IF (fnd_installation.get(716, 716,l_fte_install_status,l_industry)) THEN
3583 			IF (l_fte_install_status = 'I') THEN
3584 			   G_FTE_IS_INSTALLED := 'Y';
3585 
3586                            -- User customization starts (FP bug 4688529--bug 4602901)
3587                            IF  (fnd_profile.value('WSH_FTE_INSTALLATION_STATUS') = 'N') THEN
3588                              G_FTE_IS_INSTALLED := 'N';
3589                            END IF;
3590                            -- User customization ends
3591 			ELSE
3592 			   G_FTE_IS_INSTALLED := 'N';
3593 			END IF;
3594 		ELSE
3595 		   /* this happens only when invalid application id is passed */
3596 		   G_FTE_IS_INSTALLED := 'N';
3597 		END IF;
3598 
3599 	    END IF;
3600         ELSE
3601             G_FTE_IS_INSTALLED := 'N';
3602         END IF;
3603 
3604 	--
3605 	-- Debug Statements
3606 	--
3607 	IF l_debug_on THEN
3608 	    WSH_DEBUG_SV.log(l_module_name,'G_FTE_IS_INSTALLED',G_FTE_IS_INSTALLED);
3609 	    WSH_DEBUG_SV.pop(l_module_name);
3610 	END IF;
3611 	--
3612 	return G_FTE_IS_INSTALLED;
3613   END FTE_Is_Installed;
3614 
3615   --
3616   -- Name	TP_Is_Installed
3617   -- Purpose	To check if TP is installed, it return 'Y' if
3618   --		TP is installed, 'N' otherwise.
3619   -- History:
3620   --            Added by Arindam on May-13-2003
3621   --
3622   -- Input Arguments: No input arguments
3623   --
3624   --
3625   FUNCTION TP_Is_Installed RETURN VARCHAR2 IS
3626 
3627   l_tp_install_status  VARCHAR2(30);
3628   l_industry			VARCHAR2(30);
3629 
3630 --
3631 l_debug_on BOOLEAN;
3632 --
3633 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'TP_IS_INSTALLED';
3634 --
3635   BEGIN
3636         --
3637         -- Debug Statements
3638         --
3639         --
3640         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3641         --
3642         IF l_debug_on IS NULL
3643         THEN
3644             l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3645         END IF;
3646         --
3647         IF l_debug_on THEN
3648             WSH_DEBUG_SV.push(l_module_name);
3649         END IF;
3650         --
3651 
3652  	--
3653         IF G_TP_IS_INSTALLED is NULL THEN
3654               -- OTM R12
3655               IF Get_Otm_Install_Profile_Value = 'N' THEN
3656 		IF fnd_installation.get(390, 390,l_tp_install_status,l_industry) THEN
3657 			IF (l_tp_install_status = 'I') THEN
3658 			   G_TP_IS_INSTALLED := 'Y';
3659 			ELSE
3660 			   G_TP_IS_INSTALLED := 'N';
3661 			END IF;
3662 
3663 	                --User customization starts
3664 	                IF fnd_profile.value('WSH_TP_INSTALLATION_STATUS') IN ('Y','N') THEN
3665 		            G_TP_IS_INSTALLED := fnd_profile.value('WSH_TP_INSTALLATION_STATUS');
3666 	                END IF;
3667 	                -- User customization ends
3668 		ELSE
3669 		   /* this happens only when invalid application id is passed */
3670 		   G_TP_IS_INSTALLED := 'N';
3671 		END IF;
3672               ELSE
3673                 G_TP_IS_INSTALLED := 'N';
3674               END IF;
3675 	END IF;
3676 
3677 	--
3678 	-- Debug Statements
3679 	--
3680 	IF l_debug_on THEN
3681 	    WSH_DEBUG_SV.log(l_module_name,'G_TP_IS_INSTALLED',G_TP_IS_INSTALLED);
3682 	    WSH_DEBUG_SV.pop(l_module_name);
3683 	END IF;
3684 	--
3685 	return G_TP_IS_INSTALLED;
3686   EXCEPTION
3687 	WHEN OTHERS THEN
3688 
3689         --
3690         -- Debug Statements
3691         --
3692         IF l_debug_on THEN
3693            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3694            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3695         END IF;
3696         --
3697         RETURN 'N';
3698   END TP_Is_Installed;
3699 -- ------------------------------------------------------------------------
3700 -- Name		Get_Trip_Name
3701 -- Purpose	 This procedure gets the trip name from a delivery leg id
3702 -- Input Arguments
3703 --	   delivery_leg_id
3704 -- ------------------------------------------------------------------------
3705 
3706   PROCEDURE Get_Trip_Name_by_Leg(
3707                p_delivery_leg_id    IN     NUMBER,
3708                x_trip_name          OUT NOCOPY     VARCHAR2,
3709                x_reprice_required   OUT NOCOPY     VARCHAR2,
3710                x_return_status      OUT NOCOPY     VARCHAR2) IS
3711 
3712    CURSOR c_get_trip_name IS
3713       SELECT TP.Name, DLG.reprice_required
3714       FROM WSH_DELIVERY_LEGS DLG,
3715            WSH_TRIP_STOPS    TS,
3716            WSH_TRIPS         TP
3717       WHERE DLG.delivery_leg_id = p_delivery_leg_id AND
3718             DLG.pick_up_stop_id = TS.stop_id AND
3719             TS.trip_id = TP.trip_id;
3720 
3721   l_trip_name VARCHAR2(30) := NULL;
3722   l_reprice_required  VARCHAR2(1) := NULL;
3723 
3724   --
3725 l_debug_on BOOLEAN;
3726   --
3727   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_TRIP_NAME_BY_LEG';
3728   --
3729   BEGIN
3730 
3731      --
3732      -- Debug Statements
3733      --
3734      --
3735      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3736      --
3737      IF l_debug_on IS NULL
3738      THEN
3739          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3740      END IF;
3741      --
3742      IF l_debug_on THEN
3743          WSH_DEBUG_SV.push(l_module_name);
3744          --
3745          WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_LEG_ID',P_DELIVERY_LEG_ID);
3746      END IF;
3747      --
3748      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3749      OPEN c_get_trip_name;
3750      FETCH c_get_trip_name INTO l_trip_name, l_reprice_required;
3751      IF c_get_trip_name%NOTFOUND THEN
3752         x_trip_name := NULL;
3753         x_reprice_required := NULL;
3754      ELSE
3755         x_trip_name := l_trip_name;
3756         x_reprice_required := l_reprice_required;
3757      END IF;
3758      CLOSE c_get_trip_name;
3759 
3760      --
3761      -- Debug Statements
3762      --
3763      IF l_debug_on THEN
3764          WSH_DEBUG_SV.log(l_module_name,'TRIP NAME',x_trip_name);
3765          WSH_DEBUG_SV.log(l_module_name,'Reprice Required',x_reprice_required);
3766          WSH_DEBUG_SV.pop(l_module_name);
3767      END IF;
3768      --
3769   EXCEPTION
3770      WHEN others THEN
3771         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3772         wsh_util_core.default_handler('WSH_UTIL_CORE.Print_Label');
3773 
3774    --
3775    -- Debug Statements
3776    --
3777    IF l_debug_on THEN
3778        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3779        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3780    END IF;
3781    --
3782   END Get_Trip_Name_by_Leg;
3783 
3784 
3785 --Harmonization Project I **heali
3786   PROCEDURE api_post_call(
3787               p_return_status IN VARCHAR2,
3788               x_num_warnings  IN OUT NOCOPY NUMBER,
3789               x_num_errors    IN OUT NOCOPY NUMBER,
3790               p_msg_data      IN  VARCHAR2,
3791               p_raise_error_flag IN BOOLEAN
3792               )
3793               -- p_msg_data is defaulted to NULL.
3794               -- p_raise_error_flag is defaulted to TRUE
3795   IS
3796   --
3797   --
3798   --l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
3799   --
3800   --l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'API_POST_CALL';
3801   --
3802   --
3803   BEGIN
3804     --
3805     --
3806     /*
3807     IF l_debug_on THEN
3808       WSH_DEBUG_SV.push(l_module_name);
3809       --
3810       WSH_DEBUG_SV.log(l_module_name,'p_msg_data',p_msg_data);
3811       WSH_DEBUG_SV.log(l_module_name,'p_return_status',p_return_status);
3812       WSH_DEBUG_SV.log(l_module_name,'x_num_warnings',x_num_warnings);
3813       WSH_DEBUG_SV.log(l_module_name,'x_num_errors',x_num_errors);
3814     END IF;
3815     */
3816 
3817     --
3818     IF p_msg_data IS NOT NULL THEN
3819       fnd_message.set_name('WSH','WSH_MESSAGE_DATA');
3820       fnd_message.set_token('MESSAGE_DATA',p_msg_data);
3821     END IF;
3822     --
3823     --
3824     IF p_return_status IS NULL THEN
3825        raise FND_API.G_EXC_UNEXPECTED_ERROR;
3826     ELSIF p_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
3827        x_num_errors := nvl(x_num_errors,0) + 1;
3828        IF p_raise_error_flag THEN
3829          raise FND_API.G_EXC_ERROR;
3830        END IF;
3831     ELSIF p_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
3832        x_num_errors := nvl(x_num_errors,0) + 1;
3833        IF p_raise_error_flag THEN
3834          raise FND_API.G_EXC_UNEXPECTED_ERROR;
3835        END IF;
3836     ELSIF p_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3837        x_num_warnings := nvl(x_num_warnings,0) + 1;
3838     END IF;
3839     --
3840     --
3841     --
3842     /*
3843     IF l_debug_on THEN
3844        WSH_DEBUG_SV.log(l_module_name,'x_num_warnings',x_num_warnings);
3845        WSH_DEBUG_SV.log(l_module_name,'x_num_errors',x_num_errors);
3846        WSH_DEBUG_SV.pop(l_module_name);
3847     END IF;
3848     */
3849     --
3850     --
3851   EXCEPTION
3852     --
3853     --
3854     WHEN FND_API.G_EXC_ERROR THEN
3855       --
3856       raise FND_API.G_EXC_ERROR;
3857       --
3858     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3859       --
3860       raise FND_API.G_EXC_UNEXPECTED_ERROR;
3861       --
3862     WHEN OTHERS THEN
3863       --
3864       raise FND_API.G_EXC_UNEXPECTED_ERROR;
3865       --
3866       /*
3867       IF l_debug_on THEN
3868         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3869         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3870       END IF;
3871       */
3872     --
3873     --
3874   END api_post_call;
3875 
3876 --Harmonization Project I **heali
3877 PROCEDURE api_post_call(
3878         p_return_status IN VARCHAR2,
3879         x_num_warnings  IN OUT NOCOPY NUMBER,
3880         x_num_errors    IN OUT NOCOPY NUMBER,
3881         p_module_name   IN VARCHAR2,
3882         p_msg_data      IN VARCHAR2,
3883 	p_token1        IN VARCHAR2 DEFAULT NULL,
3884 	p_value1        IN VARCHAR2 DEFAULT NULL,
3885 	p_token2        IN VARCHAR2 DEFAULT NULL,
3886 	p_value2        IN VARCHAR2 DEFAULT NULL,
3887 	p_token3        IN VARCHAR2 DEFAULT NULL,
3888 	p_value3        IN VARCHAR2 DEFAULT NULL,
3889 	p_token4        IN VARCHAR2 DEFAULT NULL,
3890 	p_value4        IN VARCHAR2 DEFAULT NULL,
3891 	p_token5        IN VARCHAR2 DEFAULT NULL,
3892 	p_value5        IN VARCHAR2 DEFAULT NULL,
3893 	p_token6        IN VARCHAR2 DEFAULT NULL,
3894 	p_value6        IN VARCHAR2 DEFAULT NULL,
3895 	p_token7        IN VARCHAR2 DEFAULT NULL,
3896 	p_value7        IN VARCHAR2 DEFAULT NULL,
3897 	p_token8        IN VARCHAR2 DEFAULT NULL,
3898 	p_value8        IN VARCHAR2 DEFAULT NULL,
3899         p_raise_error_flag IN BOOLEAN DEFAULT TRUE )
3900 IS
3901   --l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
3902   --
3903   --l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'API_POST_CALL';
3904   --
3905   --
3906 BEGIN
3907     /*
3908     IF l_debug_on THEN
3909       WSH_DEBUG_SV.push(l_module_name);
3910       --
3911       WSH_DEBUG_SV.log(l_module_name,'p_msg_data',p_msg_data);
3912       WSH_DEBUG_SV.log(l_module_name,'p_return_status',p_return_status);
3913       WSH_DEBUG_SV.log(l_module_name,'x_num_warnings',x_num_warnings);
3914       WSH_DEBUG_SV.log(l_module_name,'x_num_errors',x_num_errors);
3915     END IF;
3916     */
3917 
3918     --
3919     IF (p_msg_data IS NOT NULL AND p_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)THEN
3920       add_message(
3921         p_message_type => p_return_status,
3922         p_module_name  => p_module_name,
3923         p_error_name   => p_msg_data,
3924         p_token1       => p_token1,
3925         p_value1       => p_value1,
3926         p_token2       => p_token2,
3927         p_value2       => p_value2,
3928         p_token3       => p_token3,
3929         p_value3       => p_value3,
3930         p_token4       => p_token4,
3931         p_value4       => p_value4,
3932         p_token5       => p_token5,
3933         p_value5       => p_value5,
3934         p_token6       => p_token6,
3935         p_value6       => p_value6,
3936         p_value7       => p_value7,
3937         p_token7       => p_token7,
3938         p_value8       => p_value8,
3939         p_token8       => p_token8);
3940     END IF;
3941 
3942     api_post_call(
3943     	p_return_status 	=> p_return_status,
3944         x_num_warnings 		=> x_num_warnings,
3945         x_num_errors   		=> x_num_errors,
3946         p_msg_data     		=> NULL,
3947         p_raise_error_flag	=> p_raise_error_flag);
3948 
3949 EXCEPTION
3950     WHEN FND_API.G_EXC_ERROR THEN
3951       raise FND_API.G_EXC_ERROR;
3952 
3953     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3954       raise FND_API.G_EXC_UNEXPECTED_ERROR;
3955 
3956     WHEN OTHERS THEN
3957       raise FND_API.G_EXC_UNEXPECTED_ERROR;
3958 END api_post_call;
3959 --Harmonization Project I **heali
3960 
3961   FUNCTION get_operatingUnit_id ( p_delivery_id      IN   NUMBER )
3962   RETURN  NUMBER
3963   IS
3964   l_cnt      NUMBER;
3965   l_org_id   NUMBER DEFAULT 0;
3966 l_debug_on BOOLEAN;
3967   --
3968   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
3969                                                         'get_operatingUnit_id';
3970   CURSOR c_orgs (v_delivery_id NUMBER) IS
3971     SELECT wdd.org_id org_id , count(*) cnt
3972     FROM wsh_delivery_assignments_v wda,
3973         wsh_delivery_details wdd
3974     WHERE wdd.delivery_detail_id = wda.delivery_detail_id
3975     AND   wda.delivery_id        =  v_delivery_id
3976     AND   wdd.container_flag     = 'N'
3977     GROUP BY org_id
3978     ORDER BY cnt DESC;
3979 
3980   BEGIN
3981      --
3982      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3983      --
3984      IF l_debug_on IS NULL
3985      THEN
3986          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3987      END IF;
3988      --
3989      IF l_debug_on THEN
3990          WSH_DEBUG_SV.push(l_module_name);
3991          --
3992          WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
3993      END IF;
3994 
3995      OPEN c_orgs(p_delivery_id) ;
3996         FETCH c_orgs INTO l_org_id, l_cnt;
3997         IF c_orgs%NOTFOUND THEN
3998            l_org_id := -1;
3999         END IF;
4000      CLOSE c_orgs;
4001 
4002      IF l_debug_on THEN
4003         WSH_DEBUG_SV.log(l_module_name,'l_org_id',l_org_id);
4004         WSH_DEBUG_SV.log(l_module_name,'l_cnt',l_cnt);
4005         WSH_DEBUG_SV.pop(l_module_name);
4006      END IF;
4007 
4008      RETURN l_org_id;
4009   EXCEPTION
4010     WHEN OTHERS THEN
4011      wsh_util_core.default_handler('WSH_UTIL_CORE.GET_OPERATINGUNIT_ID',
4012                                                                l_module_name);
4013      IF l_debug_on THEN
4014         WSH_DEBUG_SV.pop(l_module_name);
4015      END IF;
4016      raise FND_API.G_EXC_UNEXPECTED_ERROR;
4017   END get_operatingUnit_id;
4018 
4019   --
4020   -- Name        Store_Msg_In_Table
4021   -- Purpose     This procedure takes a table of messages and push
4022   --             them to the FND stack and also returns number of errors,
4023   --             warns, unexpected errors, and successes.
4024   --
4025   -- Input Arguments
4026   --   p_store_flag
4027   --
4028   PROCEDURE Store_Msg_In_Table (
4029                p_store_flag     IN     Boolean,
4030                x_msg_rec_count   OUT NOCOPY     WSH_UTIL_CORE.MsgCountType,
4031                x_return_status   OUT NOCOPY     VARCHAR2) IS
4032   --
4033 l_debug_on BOOLEAN;
4034   --
4035   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'STORE_MSG_IN_TABLE';
4036   --
4037 
4038   BEGIN
4039 
4040      --
4041      -- Debug Statements
4042      --
4043      --
4044      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4045      --
4046      IF l_debug_on IS NULL
4047      THEN
4048          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4049      END IF;
4050      --
4051      IF l_debug_on THEN
4052          WSH_DEBUG_SV.push(l_module_name);
4053          --
4054          WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_LEG_ID',P_STORE_FLAG);
4055      END IF;
4056      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
4057      IF (p_store_flag = FALSE) THEN
4058         x_msg_rec_count.e_count := 0;
4059         x_msg_rec_count.w_count := 0;
4060         x_msg_rec_count.u_count := 0;
4061         x_msg_rec_count.s_count := 0;
4062         FOR i IN 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT  LOOP
4063            fnd_message.set_name('WSH','WSH_UTIL_MESSAGE_'||WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE);
4064            fnd_message.set_token('MSG_TEXT',WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TEXT);
4065            fnd_msg_pub.add;
4066            IF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'E' ) THEN
4067               x_msg_rec_count.e_count  := x_msg_rec_count.e_count  + 1 ;
4068            ELSIF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'W' ) THEN
4069               x_msg_rec_count.w_count   := x_msg_rec_count.w_count + 1 ;
4070            ELSIF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'U' ) THEN
4071               x_msg_rec_count.u_count   := x_msg_rec_count.u_count + 1 ;
4072            ELSIF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'S' ) THEN
4073               x_msg_rec_count.s_count   := x_msg_rec_count.s_count + 1 ;
4074            END IF ;
4075         END LOOP ;
4076         G_STORE_MSG_IN_TABLE := FALSE ;
4077         WSH_INTEGRATION.G_MSG_TABLE.delete ;
4078      ELSE
4079         G_STORE_MSG_IN_TABLE := TRUE;
4080      END IF;
4081 
4082      --
4083      -- Debug Statements
4084      --
4085      IF l_debug_on THEN
4086          WSH_DEBUG_SV.log(l_module_name,'Error Count', x_msg_rec_count.e_count);
4087          WSH_DEBUG_SV.log(l_module_name,'Warning Count', x_msg_rec_count.w_count);
4088          WSH_DEBUG_SV.log(l_module_name,'Unexpected Error Count', x_msg_rec_count.u_count);
4089          WSH_DEBUG_SV.log(l_module_name,'Success Count', x_msg_rec_count.s_count);
4090          WSH_DEBUG_SV.pop(l_module_name);
4091      END IF;
4092      --
4093   EXCEPTION
4094      WHEN others THEN
4095         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4096         WSH_UTIL_CORE.Println('Unexpected Error in WSH_UTIL_CORE.Store_Msg_In_Table');
4097    --
4098    -- Debug Statements
4099    --
4100    IF l_debug_on THEN
4101        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4102        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4103    END IF;
4104    --
4105 
4106   END Store_Msg_In_Table;
4107 
4108 
4109 
4110 --========================================================================
4111 -- PROCEDURE : get_cached_value
4112 --
4113 -- PARAMETERS: p_cache_tbl             this table is used to  hold the cache
4114 --                                     values, which key is less than 2^31
4115 --             p_cache_ext_tbl         This  table is used to  hold the cache
4116 --                                     values, which key is more then 2^31
4117 --             p_value                 This the value to be either inserted
4118 --                                     or reterived from the cache.
4119 --             p_key                   This is the key that we use to access
4120 --                                     the cache table.
4121 --             p_action                if 'PUT' is passed, then the p_value
4122 --                                     is put into the cache.  If 'GET'is passed
4123 --                                     then the value will be retrieved from
4124 --                                     cache.
4125 --             x_return_status         return status
4126 --
4127 -- COMMENT   : This table will manage a cache (storing integer values)
4128 --             IF value 'PUT' is passed to p_action, then p_value will be set
4129 --             into the cache, where p_key is used to access the cache table.
4130 --             IF value 'GET' is passed to p_action, then the information
4131 --             on the cache is retrieved.  The p_key is used to access the
4132 --             cache table.
4133 --             If the get operation is a miss, then a warning will be
4134 --             returned.
4135 --========================================================================
4136 
4137 
4138 
4139   PROCEDURE get_cached_value(
4140                              p_cache_tbl IN OUT NOCOPY key_value_tab_type,
4141                              p_cache_ext_tbl IN OUT NOCOPY key_value_tab_type,
4142                              p_value IN OUT NOCOPY NUMBER,
4143                              p_key IN NUMBER,
4144                              p_action IN VARCHAR2,
4145                              x_return_status OUT NOCOPY VARCHAR2
4146                            )
4147   IS
4148     l_debug_on BOOLEAN;
4149     --
4150     l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||
4151                '.' || 'GET_CACHED_VALUE';
4152     l_index      NUMBER;
4153     l_found      BOOLEAN := FALSE;
4154     l_exist      BOOLEAN := FALSE;
4155     j            NUMBER;
4156 
4157   BEGIN
4158      --
4159      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4160      IF l_debug_on IS NULL
4161      THEN
4162          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4163      END IF;
4164      --
4165      IF l_debug_on THEN
4166        wsh_debug_sv.push (l_module_name);
4167        WSH_DEBUG_SV.log(l_module_name, 'p_value', p_value);
4168        WSH_DEBUG_SV.log(l_module_name, 'p_key', p_key);
4169        WSH_DEBUG_SV.log(l_module_name, 'p_action', p_action);
4170      END IF;
4171      --
4172      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4173 
4174      IF p_action = 'PUT' THEN --{
4175         IF p_key IS NULL THEN
4176            IF l_debug_on THEN
4177                WSH_DEBUG_SV.log(l_module_name, 'p_key cannot be null', p_key);
4178            END IF;
4179            RAISE FND_API.G_EXC_ERROR ;
4180         END IF;
4181         IF p_key < C_INDEX_LIMIT THEN
4182            p_cache_tbl(p_key).value := p_value;
4183            p_cache_tbl(p_key).key := p_key;
4184         ELSE
4185            j:= p_cache_ext_tbl.FIRST;
4186            WHILE j IS NOT NULL LOOP
4187               IF p_cache_ext_tbl(j).key = p_key THEN
4188                  p_cache_ext_tbl(j).value := p_value;
4189                  l_exist := TRUE;
4190                  EXIT;
4191               END IF;
4192               j := p_cache_ext_tbl.NEXT(j);
4193            END LOOP;
4194            IF NOT l_exist THEN
4195               p_cache_ext_tbl(p_cache_ext_tbl.COUNT + 1).key := p_key;
4196               p_cache_ext_tbl(p_cache_ext_tbl.COUNT).value := p_value;
4197            END IF;
4198         END IF;
4199      ELSE --}{
4200         IF p_key < C_INDEX_LIMIT THEN --{
4201            IF p_cache_tbl.EXISTS(p_key) THEN
4202               p_value := p_cache_tbl(p_key).value;
4203            ELSE
4204               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4205            END IF;
4206         ELSE --}{
4207            l_index := p_cache_ext_tbl.FIRST;
4208            WHILE l_index IS NOT NULL LOOP
4209               IF p_cache_ext_tbl(l_index).key = p_key THEN
4210                  p_value := p_cache_ext_tbl(l_index).value;
4211                  l_found := TRUE;
4212                  EXIT;
4213               END IF;
4214               l_index := p_cache_ext_tbl.NEXT(l_index);
4215            END LOOP;
4216            IF NOT l_found THEN
4217               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4218            END IF;
4219         END IF; --}
4220      END IF;--}
4221      IF l_debug_on THEN
4222         WSH_DEBUG_SV.pop(l_module_name);
4223      END IF;
4224   EXCEPTION
4225     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4226       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4227       --
4228       IF l_debug_on THEN
4229         WSH_DEBUG_SV.logmsg(l_module_name,'Cache is missed',
4230                                                     WSH_DEBUG_SV.C_EXCEP_LEVEL);
4231         WSH_DEBUG_SV.pop(l_module_name);
4232       END IF;
4233       --
4234 
4235     WHEN FND_API.G_EXC_ERROR THEN
4236       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4237       --
4238       IF l_debug_on THEN
4239         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has '
4240           || 'occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4241         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4242       END IF;
4243       --
4244     WHEN OTHERS THEN
4245       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4246       wsh_util_core.default_handler('WSH_UTIL_CORE.GET_CACHED_VALUE');
4247       --
4248       IF l_debug_on THEN
4249         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. '||
4250           'Oracle error message is '||
4251            SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4252         WSH_DEBUG_SV.pop(l_module_name,
4253                                  'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4254       END IF;
4255 
4256   END get_cached_value;
4257 
4258 
4259 
4260 --========================================================================
4261 -- PROCEDURE : get_cached_value
4262 --
4263 -- PARAMETERS: p_cache_tbl             this table is used to  hold the cache
4264 --                                     values, which key is less than 2^31
4265 --             p_cache_ext_tbl         This  table is used to  hold the cache
4266 --                                     values, which key is more then 2^31
4267 --             p_value                 This the value to be either inserted
4268 --                                     or reterived from the cache.
4269 --             p_key                   This is the key that we use to access
4270 --                                     the cache table.
4271 --             p_action                if 'PUT' is passed, then the p_value
4272 --                                     is put into the cache.  If 'GET'is passed
4273 --                                     then the value will be retrieved from
4274 --                                     cache.
4275 --             x_return_status         return status
4276 --
4277 -- COMMENT   : This table will manage a cache (storing varchar2(500) values)
4278 --             IF value 'PUT' is passed to p_action, then p_value will be set
4279 --             into the cache, where p_key is used to access the cache table.
4280 --             IF value 'GET' is passed to p_action, then the information
4281 --             on the cache is retrieved.  The p_key is used to access the
4282 --             cache table.
4283 --             If the get operation is a miss, then a warning will be
4284 --             returned.
4285 --========================================================================
4286 
4287 
4288 
4289   PROCEDURE get_cached_value(
4290                              p_cache_tbl IN OUT NOCOPY char500_tab_type,
4291                              p_cache_ext_tbl IN OUT NOCOPY char500_tab_type,
4292                              p_value IN OUT NOCOPY VARCHAR2,
4293                              p_key IN NUMBER,
4294                              p_action IN VARCHAR2,
4295                              x_return_status OUT NOCOPY VARCHAR2
4296                            )
4297   IS
4298     l_debug_on BOOLEAN;
4299     --
4300     l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||
4301                '.' || 'GET_CACHED_VALUE';
4302 
4303     l_index      NUMBER;
4304     l_found      BOOLEAN := FALSE;
4305     l_exist      BOOLEAN := FALSE;
4306     j            NUMBER;
4307 
4308   BEGIN
4309      --
4310      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4311      IF l_debug_on IS NULL
4312      THEN
4313          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4314      END IF;
4315      --
4316      IF l_debug_on THEN
4317        wsh_debug_sv.push (l_module_name);
4318        WSH_DEBUG_SV.log(l_module_name, 'p_value', p_value);
4319        WSH_DEBUG_SV.log(l_module_name, 'p_key', p_key);
4320        WSH_DEBUG_SV.log(l_module_name, 'p_action', p_action);
4321      END IF;
4322      --
4323      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4324 
4325      IF p_action = 'PUT' THEN --{
4326         IF p_key IS NULL THEN
4327            IF l_debug_on THEN
4328                WSH_DEBUG_SV.log(l_module_name, 'p_key cannot be null', p_key);
4329            END IF;
4330            RAISE FND_API.G_EXC_ERROR ;
4331         END IF;
4332         IF p_key < C_INDEX_LIMIT THEN
4333            p_cache_tbl(p_key).value := p_value;
4334            p_cache_tbl(p_key).key := p_key;
4335         ELSE
4336            j:= p_cache_ext_tbl.FIRST;
4337            WHILE j IS NOT NULL LOOP
4338               IF p_cache_ext_tbl(j).key = p_key THEN
4339                  p_cache_ext_tbl(j).value := p_value;
4340                  l_exist := TRUE;
4341                  EXIT;
4342               END IF;
4343               j := p_cache_ext_tbl.NEXT(j);
4344            END LOOP;
4345            IF NOT l_exist THEN
4346               p_cache_ext_tbl(p_cache_ext_tbl.COUNT + 1).key := p_key;
4347               p_cache_ext_tbl(p_cache_ext_tbl.COUNT).value := p_value;
4348            END IF;
4349         END IF;
4350      ELSE --}{
4351         IF p_key < C_INDEX_LIMIT THEN --{
4352            IF p_cache_tbl.EXISTS(p_key) THEN
4353               p_value := p_cache_tbl(p_key).value;
4354            ELSE
4355               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4356            END IF;
4357         ELSE --}{
4358            l_index := p_cache_ext_tbl.FIRST;
4359            WHILE l_index IS NOT NULL LOOP
4360               IF p_cache_ext_tbl(l_index).key = p_key THEN
4361                  p_value := p_cache_ext_tbl(l_index).value;
4362                  l_found := TRUE;
4363                  EXIT;
4364               END IF;
4365               l_index := p_cache_ext_tbl.NEXT(l_index);
4366            END LOOP;
4367            IF NOT l_found THEN
4368               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4369            END IF;
4370         END IF; --}
4371      END IF;--}
4372      IF l_debug_on THEN
4373         WSH_DEBUG_SV.pop(l_module_name);
4374      END IF;
4375 
4376   EXCEPTION
4377     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4378       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4379       --
4380       IF l_debug_on THEN
4381         WSH_DEBUG_SV.logmsg(l_module_name,'Cache is missed',
4382                                                     WSH_DEBUG_SV.C_EXCEP_LEVEL);
4383         WSH_DEBUG_SV.pop(l_module_name);
4384       END IF;
4385       --
4386 
4387     WHEN FND_API.G_EXC_ERROR THEN
4388       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4389       --
4390       IF l_debug_on THEN
4391         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has '
4392           || 'occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4393         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4394       END IF;
4395       --
4396     WHEN OTHERS THEN
4397       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4398       wsh_util_core.default_handler('WSH_UTIL_CORE.GET_CACHED_VALUE');
4399       --
4400       IF l_debug_on THEN
4401         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. '||
4402           'Oracle error message is '||
4403            SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4404         WSH_DEBUG_SV.pop(l_module_name,
4405                                  'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4406       END IF;
4407 
4408   END get_cached_value;
4409 
4410 --========================================================================
4411 -- PROCEDURE : get_cached_value
4412 --
4413 -- PARAMETERS: p_cache_tbl             this table is used to  hold the cache
4414 --                                     values, which key is less than 2^31
4415 --             p_cache_ext_tbl         This  table is used to  hold the cache
4416 --                                     values, which key is more then 2^31
4417 --             p_value                 This the value to be either inserted
4418 --                                     or reterived from the cache.
4419 --             p_key                   This is the key that we use to access
4420 --                                     the cache table.
4421 --             p_action                if 'PUT' is passed, then the p_value
4422 --                                     is put into the cache.  If 'GET'is passed
4423 --                                     then the value will be retrieved from
4424 --                                     cache.
4425 --             x_return_status         return status
4426 --
4427 -- COMMENT   : This table will manage a cache (storing BOOLEAN) values)
4428 --             IF value 'PUT' is passed to p_action, then p_value will be set
4429 --             into the cache, where p_key is used to access the cache table.
4430 --             IF value 'GET' is passed to p_action, then the information
4431 --             on the cache is retrieved.  The p_key is used to access the
4432 --             cache table.
4433 --             If the get operation is a miss, then a warning will be
4434 --             returned.
4435 --========================================================================
4436 
4437 
4438 
4439   PROCEDURE get_cached_value(
4440                              p_cache_tbl IN OUT NOCOPY boolean_tab_type,
4441                              p_cache_ext_tbl IN OUT NOCOPY boolean_tab_type,
4442                              p_value IN OUT NOCOPY BOOLEAN,
4443                              p_key IN NUMBER,
4444                              p_action IN VARCHAR2,
4445                              x_return_status OUT NOCOPY VARCHAR2
4446                            )
4447   IS
4448     l_debug_on BOOLEAN;
4449     --
4450     l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||
4451                '.' || 'GET_CACHED_VALUE';
4452 
4453     l_index      NUMBER;
4454     l_found      BOOLEAN := FALSE;
4455     l_exist      BOOLEAN := FALSE;
4456     j            NUMBER;
4457 
4458   BEGIN
4459      --
4460      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4461      IF l_debug_on IS NULL
4462      THEN
4463          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4464      END IF;
4465      --
4466      IF l_debug_on THEN
4467        wsh_debug_sv.push (l_module_name);
4468        WSH_DEBUG_SV.log(l_module_name, 'p_value', p_value);
4469        WSH_DEBUG_SV.log(l_module_name, 'p_key', p_key);
4470        WSH_DEBUG_SV.log(l_module_name, 'p_action', p_action);
4471      END IF;
4472      --
4473      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4474 
4475      IF p_action = 'PUT' THEN --{
4476         IF p_key IS NULL THEN
4477            IF l_debug_on THEN
4478                WSH_DEBUG_SV.log(l_module_name, 'p_key cannot be null', p_key);
4479            END IF;
4480            RAISE FND_API.G_EXC_ERROR ;
4481         END IF;
4482         IF p_key < C_INDEX_LIMIT THEN
4483            p_cache_tbl(p_key).value := p_value;
4484            p_cache_tbl(p_key).key := p_key;
4485         ELSE
4486            j:= p_cache_ext_tbl.FIRST;
4487            WHILE j IS NOT NULL LOOP
4488               IF p_cache_ext_tbl(j).key = p_key THEN
4489                  p_cache_ext_tbl(j).value := p_value;
4490                  l_exist := TRUE;
4491                  EXIT;
4492               END IF;
4493               j := p_cache_ext_tbl.NEXT(j);
4494            END LOOP;
4495            IF NOT l_exist THEN
4496               p_cache_ext_tbl(p_cache_ext_tbl.COUNT + 1).key := p_key;
4497               p_cache_ext_tbl(p_cache_ext_tbl.COUNT).value := p_value;
4498            END IF;
4499         END IF;
4500      ELSE --}{
4501         IF p_key < C_INDEX_LIMIT THEN --{
4502            IF p_cache_tbl.EXISTS(p_key) THEN
4503               p_value := p_cache_tbl(p_key).value;
4504            ELSE
4505               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4506            END IF;
4507         ELSE --}{
4508            l_index := p_cache_ext_tbl.FIRST;
4509            WHILE l_index IS NOT NULL LOOP
4510               IF p_cache_ext_tbl(l_index).key = p_key THEN
4511                  p_value := p_cache_ext_tbl(l_index).value;
4512                  l_found := TRUE;
4513                  EXIT;
4514               END IF;
4515               l_index := p_cache_ext_tbl.NEXT(l_index);
4516            END LOOP;
4517            IF NOT l_found THEN
4518               RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4519            END IF;
4520         END IF; --}
4521      END IF;--}
4522      IF l_debug_on THEN
4523         WSH_DEBUG_SV.pop(l_module_name);
4524      END IF;
4525 
4526   EXCEPTION
4527     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4528       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4529       --
4530       IF l_debug_on THEN
4531         WSH_DEBUG_SV.logmsg(l_module_name,'Cache is missed',
4532                                                     WSH_DEBUG_SV.C_EXCEP_LEVEL);
4533         WSH_DEBUG_SV.pop(l_module_name);
4534       END IF;
4535       --
4536 
4537     WHEN FND_API.G_EXC_ERROR THEN
4538       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4539       --
4540       IF l_debug_on THEN
4541         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has '
4542           || 'occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4543         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4544       END IF;
4545       --
4546     WHEN OTHERS THEN
4547       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4548       wsh_util_core.default_handler('WSH_UTIL_CORE.GET_CACHED_VALUE');
4549       --
4550       IF l_debug_on THEN
4551         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. '||
4552           'Oracle error message is '||
4553            SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4554         WSH_DEBUG_SV.pop(l_module_name,
4555                                  'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4556       END IF;
4557 
4558   END get_cached_value;
4559 
4560 --HVOP heali
4561 PROCEDURE OpenDynamicCursor(
4562        p_cursor         IN OUT NOCOPY RefCurType,
4563        p_statement      IN VARCHAR2,
4564        p_dynamic_tab    IN tbl_varchar) IS
4565   --
4566   l_debug_on BOOLEAN;
4567   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'OpenDynamicCursor';
4568   --
4569 BEGIN
4570   --
4571   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4572   --
4573   IF l_debug_on IS NULL THEN
4574      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4575   END IF;
4576   --
4577   IF l_debug_on THEN
4578    wsh_debug_sv.push(l_module_name);
4579    wsh_debug_sv.log(l_module_name, 'p_dynamic_tab.COUNT', p_dynamic_tab.COUNT);
4580   END IF;
4581   --
4582 
4583   IF (p_dynamic_tab.COUNT > 50 ) THEN
4584     IF l_debug_on THEN
4585       wsh_debug_sv.logmsg(l_module_name, 'p_dynamic_tab.COUNT should not be grater than 50');
4586       wsh_debug_sv.pop(l_module_name);
4587       RETURN;
4588     END IF;
4589   END IF;
4590 
4591 
4592   IF (p_dynamic_tab.COUNT =  0) THEN
4593      OPEN p_cursor FOR p_statement;
4594   END IF;
4595 
4596   IF (p_dynamic_tab.COUNT =  1) THEN
4597      OPEN p_cursor FOR p_statement USING
4598          p_dynamic_tab(1);
4599   END IF;
4600 
4601   IF (p_dynamic_tab.COUNT =  2) THEN
4602      OPEN p_cursor FOR p_statement USING
4603          p_dynamic_tab(1),
4604          p_dynamic_tab(2);
4605   END IF;
4606 
4607   IF (p_dynamic_tab.COUNT =  3) THEN
4608      OPEN p_cursor FOR p_statement USING
4609          p_dynamic_tab(1),
4610          p_dynamic_tab(2),
4611          p_dynamic_tab(3);
4612   END IF;
4613 
4614   IF (p_dynamic_tab.COUNT =  4) THEN
4615      OPEN p_cursor FOR p_statement USING
4616          p_dynamic_tab(1),
4617          p_dynamic_tab(2),
4618          p_dynamic_tab(3),
4619          p_dynamic_tab(4);
4620   END IF;
4621 
4622   IF (p_dynamic_tab.COUNT =  5) THEN
4623      OPEN p_cursor FOR p_statement USING
4624          p_dynamic_tab(1),
4625          p_dynamic_tab(2),
4626          p_dynamic_tab(3),
4627          p_dynamic_tab(4),
4628          p_dynamic_tab(5);
4629   END IF;
4630 
4631   IF (p_dynamic_tab.COUNT =  6) THEN
4632      OPEN p_cursor FOR p_statement USING
4633          p_dynamic_tab(1),
4634          p_dynamic_tab(2),
4635          p_dynamic_tab(3),
4636          p_dynamic_tab(4),
4637          p_dynamic_tab(5),
4638          p_dynamic_tab(6);
4639   END IF;
4640 
4641   IF (p_dynamic_tab.COUNT =  7) THEN
4642      OPEN p_cursor FOR p_statement USING
4643          p_dynamic_tab(1),
4644          p_dynamic_tab(2),
4645          p_dynamic_tab(3),
4646          p_dynamic_tab(4),
4647          p_dynamic_tab(5),
4648          p_dynamic_tab(6),
4649          p_dynamic_tab(7);
4650   END IF;
4651 
4652   IF (p_dynamic_tab.COUNT =  8) THEN
4653      OPEN p_cursor FOR p_statement USING
4654          p_dynamic_tab(1),
4655          p_dynamic_tab(2),
4656          p_dynamic_tab(3),
4657          p_dynamic_tab(4),
4658          p_dynamic_tab(5),
4659          p_dynamic_tab(6),
4660          p_dynamic_tab(7),
4661          p_dynamic_tab(8);
4662   END IF;
4663 
4664   IF (p_dynamic_tab.COUNT =  9) THEN
4665      OPEN p_cursor FOR p_statement USING
4666          p_dynamic_tab(1),
4667          p_dynamic_tab(2),
4668          p_dynamic_tab(3),
4669          p_dynamic_tab(4),
4670          p_dynamic_tab(5),
4671          p_dynamic_tab(6),
4672          p_dynamic_tab(7),
4673          p_dynamic_tab(8),
4674          p_dynamic_tab(9);
4675   END IF;
4676 
4677   IF (p_dynamic_tab.COUNT =  10) THEN
4678      OPEN p_cursor FOR p_statement USING
4679          p_dynamic_tab(1),
4680          p_dynamic_tab(2),
4681          p_dynamic_tab(3),
4682          p_dynamic_tab(4),
4683          p_dynamic_tab(5),
4684          p_dynamic_tab(6),
4685          p_dynamic_tab(7),
4686          p_dynamic_tab(8),
4687          p_dynamic_tab(9),
4688          p_dynamic_tab(10);
4689   END IF;
4690 
4691   IF (p_dynamic_tab.COUNT =  11) THEN
4692      OPEN p_cursor FOR p_statement USING
4693          p_dynamic_tab(1),
4694          p_dynamic_tab(2),
4695          p_dynamic_tab(3),
4696          p_dynamic_tab(4),
4697          p_dynamic_tab(5),
4698          p_dynamic_tab(6),
4699          p_dynamic_tab(7),
4700          p_dynamic_tab(8),
4701          p_dynamic_tab(9),
4702          p_dynamic_tab(10),
4703          p_dynamic_tab(11);
4704   END IF;
4705 
4706   IF (p_dynamic_tab.COUNT =  12) THEN
4707      OPEN p_cursor FOR p_statement USING
4708          p_dynamic_tab(1),
4709          p_dynamic_tab(2),
4710          p_dynamic_tab(3),
4711          p_dynamic_tab(4),
4712          p_dynamic_tab(5),
4713          p_dynamic_tab(6),
4714          p_dynamic_tab(7),
4715          p_dynamic_tab(8),
4716          p_dynamic_tab(9),
4717          p_dynamic_tab(10),
4718          p_dynamic_tab(11),
4719          p_dynamic_tab(12);
4720   END IF;
4721 
4722   IF (p_dynamic_tab.COUNT =  13) THEN
4723      OPEN p_cursor FOR p_statement USING
4724          p_dynamic_tab(1),
4725          p_dynamic_tab(2),
4726          p_dynamic_tab(3),
4727          p_dynamic_tab(4),
4728          p_dynamic_tab(5),
4729          p_dynamic_tab(6),
4730          p_dynamic_tab(7),
4731          p_dynamic_tab(8),
4732          p_dynamic_tab(9),
4733          p_dynamic_tab(10),
4734          p_dynamic_tab(11),
4735          p_dynamic_tab(12),
4736          p_dynamic_tab(13);
4737   END IF;
4738 
4739   IF (p_dynamic_tab.COUNT =  14) THEN
4740      OPEN p_cursor FOR p_statement USING
4741          p_dynamic_tab(1),
4742          p_dynamic_tab(2),
4743          p_dynamic_tab(3),
4744          p_dynamic_tab(4),
4745          p_dynamic_tab(5),
4746          p_dynamic_tab(6),
4747          p_dynamic_tab(7),
4748          p_dynamic_tab(8),
4749          p_dynamic_tab(9),
4750          p_dynamic_tab(10),
4751          p_dynamic_tab(11),
4752          p_dynamic_tab(12),
4753          p_dynamic_tab(13),
4754          p_dynamic_tab(14);
4755   END IF;
4756 
4757   IF (p_dynamic_tab.COUNT =  15) THEN
4758      OPEN p_cursor FOR p_statement USING
4759          p_dynamic_tab(1),
4760          p_dynamic_tab(2),
4761          p_dynamic_tab(3),
4762          p_dynamic_tab(4),
4763          p_dynamic_tab(5),
4764          p_dynamic_tab(6),
4765          p_dynamic_tab(7),
4766          p_dynamic_tab(8),
4767          p_dynamic_tab(9),
4768          p_dynamic_tab(10),
4769          p_dynamic_tab(11),
4770          p_dynamic_tab(12),
4771          p_dynamic_tab(13),
4772          p_dynamic_tab(14),
4773          p_dynamic_tab(15);
4774   END IF;
4775 
4776   IF (p_dynamic_tab.COUNT =  16) THEN
4777      OPEN p_cursor FOR p_statement USING
4778          p_dynamic_tab(1),
4779          p_dynamic_tab(2),
4780          p_dynamic_tab(3),
4781          p_dynamic_tab(4),
4782          p_dynamic_tab(5),
4783          p_dynamic_tab(6),
4784          p_dynamic_tab(7),
4785          p_dynamic_tab(8),
4786          p_dynamic_tab(9),
4787          p_dynamic_tab(10),
4788          p_dynamic_tab(11),
4789          p_dynamic_tab(12),
4790          p_dynamic_tab(13),
4791          p_dynamic_tab(14),
4792          p_dynamic_tab(15),
4793          p_dynamic_tab(16);
4794   END IF;
4795 
4796   IF (p_dynamic_tab.COUNT =  17) THEN
4797      OPEN p_cursor FOR p_statement USING
4798          p_dynamic_tab(1),
4799          p_dynamic_tab(2),
4800          p_dynamic_tab(3),
4801          p_dynamic_tab(4),
4802          p_dynamic_tab(5),
4803          p_dynamic_tab(6),
4804          p_dynamic_tab(7),
4805          p_dynamic_tab(8),
4806          p_dynamic_tab(9),
4807          p_dynamic_tab(10),
4808          p_dynamic_tab(11),
4809          p_dynamic_tab(12),
4810          p_dynamic_tab(13),
4811          p_dynamic_tab(14),
4812          p_dynamic_tab(15),
4813          p_dynamic_tab(16),
4814          p_dynamic_tab(17);
4815   END IF;
4816 
4817   IF (p_dynamic_tab.COUNT =  18) THEN
4818      OPEN p_cursor FOR p_statement USING
4819          p_dynamic_tab(1),
4820          p_dynamic_tab(2),
4821          p_dynamic_tab(3),
4822          p_dynamic_tab(4),
4823          p_dynamic_tab(5),
4824          p_dynamic_tab(6),
4825          p_dynamic_tab(7),
4826          p_dynamic_tab(8),
4827          p_dynamic_tab(9),
4828          p_dynamic_tab(10),
4829          p_dynamic_tab(11),
4830          p_dynamic_tab(12),
4831          p_dynamic_tab(13),
4832          p_dynamic_tab(14),
4833          p_dynamic_tab(15),
4834          p_dynamic_tab(16),
4835          p_dynamic_tab(17),
4836          p_dynamic_tab(18);
4837   END IF;
4838 
4839   IF (p_dynamic_tab.COUNT =  19) THEN
4840      OPEN p_cursor FOR p_statement USING
4841          p_dynamic_tab(1),
4842          p_dynamic_tab(2),
4843          p_dynamic_tab(3),
4844          p_dynamic_tab(4),
4845          p_dynamic_tab(5),
4846          p_dynamic_tab(6),
4847          p_dynamic_tab(7),
4848          p_dynamic_tab(8),
4849          p_dynamic_tab(9),
4850          p_dynamic_tab(10),
4851          p_dynamic_tab(11),
4852          p_dynamic_tab(12),
4853          p_dynamic_tab(13),
4854          p_dynamic_tab(14),
4855          p_dynamic_tab(15),
4856          p_dynamic_tab(16),
4857          p_dynamic_tab(17),
4858          p_dynamic_tab(18),
4859          p_dynamic_tab(19);
4860   END IF;
4861 
4862   IF (p_dynamic_tab.COUNT =  20) THEN
4863      OPEN p_cursor FOR p_statement USING
4864          p_dynamic_tab(1),
4865          p_dynamic_tab(2),
4866          p_dynamic_tab(3),
4867          p_dynamic_tab(4),
4868          p_dynamic_tab(5),
4869          p_dynamic_tab(6),
4870          p_dynamic_tab(7),
4871          p_dynamic_tab(8),
4872          p_dynamic_tab(9),
4873          p_dynamic_tab(10),
4874          p_dynamic_tab(11),
4875          p_dynamic_tab(12),
4876          p_dynamic_tab(13),
4877          p_dynamic_tab(14),
4878          p_dynamic_tab(15),
4879          p_dynamic_tab(16),
4880          p_dynamic_tab(17),
4881          p_dynamic_tab(18),
4882          p_dynamic_tab(19),
4883          p_dynamic_tab(20);
4884   END IF;
4885 
4886   IF (p_dynamic_tab.COUNT =  21) THEN
4887      OPEN p_cursor FOR p_statement USING
4888          p_dynamic_tab(1),
4889          p_dynamic_tab(2),
4890          p_dynamic_tab(3),
4891          p_dynamic_tab(4),
4892          p_dynamic_tab(5),
4893          p_dynamic_tab(6),
4894          p_dynamic_tab(7),
4895          p_dynamic_tab(8),
4896          p_dynamic_tab(9),
4897          p_dynamic_tab(10),
4898          p_dynamic_tab(11),
4899          p_dynamic_tab(12),
4900          p_dynamic_tab(13),
4901          p_dynamic_tab(14),
4902          p_dynamic_tab(15),
4903          p_dynamic_tab(16),
4904          p_dynamic_tab(17),
4905          p_dynamic_tab(18),
4906          p_dynamic_tab(19),
4907          p_dynamic_tab(20),
4908          p_dynamic_tab(21);
4909   END IF;
4910 
4911   IF (p_dynamic_tab.COUNT =  22) THEN
4912      OPEN p_cursor FOR p_statement USING
4913          p_dynamic_tab(1),
4914          p_dynamic_tab(2),
4915          p_dynamic_tab(3),
4916          p_dynamic_tab(4),
4917          p_dynamic_tab(5),
4918          p_dynamic_tab(6),
4919          p_dynamic_tab(7),
4920          p_dynamic_tab(8),
4921          p_dynamic_tab(9),
4922          p_dynamic_tab(10),
4923          p_dynamic_tab(11),
4924          p_dynamic_tab(12),
4925          p_dynamic_tab(13),
4926          p_dynamic_tab(14),
4927          p_dynamic_tab(15),
4928          p_dynamic_tab(16),
4929          p_dynamic_tab(17),
4930          p_dynamic_tab(18),
4931          p_dynamic_tab(19),
4932          p_dynamic_tab(20),
4933          p_dynamic_tab(21),
4934          p_dynamic_tab(22);
4935   END IF;
4936 
4937   IF (p_dynamic_tab.COUNT =  23) THEN
4938      OPEN p_cursor FOR p_statement USING
4939          p_dynamic_tab(1),
4940          p_dynamic_tab(2),
4941          p_dynamic_tab(3),
4942          p_dynamic_tab(4),
4943          p_dynamic_tab(5),
4944          p_dynamic_tab(6),
4945          p_dynamic_tab(7),
4946          p_dynamic_tab(8),
4947          p_dynamic_tab(9),
4948          p_dynamic_tab(10),
4949          p_dynamic_tab(11),
4950          p_dynamic_tab(12),
4951          p_dynamic_tab(13),
4952          p_dynamic_tab(14),
4953          p_dynamic_tab(15),
4954          p_dynamic_tab(16),
4955          p_dynamic_tab(17),
4956          p_dynamic_tab(18),
4957          p_dynamic_tab(19),
4958          p_dynamic_tab(20),
4959          p_dynamic_tab(21),
4960          p_dynamic_tab(22),
4961          p_dynamic_tab(23);
4962   END IF;
4963 
4964   IF (p_dynamic_tab.COUNT =  24) THEN
4965      OPEN p_cursor FOR p_statement USING
4966          p_dynamic_tab(1),
4967          p_dynamic_tab(2),
4968          p_dynamic_tab(3),
4969          p_dynamic_tab(4),
4970          p_dynamic_tab(5),
4971          p_dynamic_tab(6),
4972          p_dynamic_tab(7),
4973          p_dynamic_tab(8),
4974          p_dynamic_tab(9),
4975          p_dynamic_tab(10),
4976          p_dynamic_tab(11),
4977          p_dynamic_tab(12),
4978          p_dynamic_tab(13),
4979          p_dynamic_tab(14),
4980          p_dynamic_tab(15),
4981          p_dynamic_tab(16),
4982          p_dynamic_tab(17),
4983          p_dynamic_tab(18),
4984          p_dynamic_tab(19),
4985          p_dynamic_tab(20),
4986          p_dynamic_tab(21),
4987          p_dynamic_tab(22),
4988          p_dynamic_tab(23),
4989          p_dynamic_tab(24);
4990   END IF;
4991 
4992   IF (p_dynamic_tab.COUNT =  25) THEN
4993      OPEN p_cursor FOR p_statement USING
4994          p_dynamic_tab(1),
4995          p_dynamic_tab(2),
4996          p_dynamic_tab(3),
4997          p_dynamic_tab(4),
4998          p_dynamic_tab(5),
4999          p_dynamic_tab(6),
5000          p_dynamic_tab(7),
5001          p_dynamic_tab(8),
5002          p_dynamic_tab(9),
5003          p_dynamic_tab(10),
5004          p_dynamic_tab(11),
5005          p_dynamic_tab(12),
5006          p_dynamic_tab(13),
5007          p_dynamic_tab(14),
5008          p_dynamic_tab(15),
5009          p_dynamic_tab(16),
5010          p_dynamic_tab(17),
5011          p_dynamic_tab(18),
5012          p_dynamic_tab(19),
5013          p_dynamic_tab(20),
5014          p_dynamic_tab(21),
5015          p_dynamic_tab(22),
5016          p_dynamic_tab(23),
5017          p_dynamic_tab(24),
5018          p_dynamic_tab(25);
5019   END IF;
5020 
5021   IF (p_dynamic_tab.COUNT =  26) THEN
5022      OPEN p_cursor FOR p_statement USING
5023          p_dynamic_tab(1),
5024          p_dynamic_tab(2),
5025          p_dynamic_tab(3),
5026          p_dynamic_tab(4),
5027          p_dynamic_tab(5),
5028          p_dynamic_tab(6),
5029          p_dynamic_tab(7),
5030          p_dynamic_tab(8),
5031          p_dynamic_tab(9),
5032          p_dynamic_tab(10),
5033          p_dynamic_tab(11),
5034          p_dynamic_tab(12),
5035          p_dynamic_tab(13),
5036          p_dynamic_tab(14),
5037          p_dynamic_tab(15),
5038          p_dynamic_tab(16),
5039          p_dynamic_tab(17),
5040          p_dynamic_tab(18),
5041          p_dynamic_tab(19),
5042          p_dynamic_tab(20),
5043          p_dynamic_tab(21),
5044          p_dynamic_tab(22),
5045          p_dynamic_tab(23),
5046          p_dynamic_tab(24),
5047          p_dynamic_tab(25),
5048          p_dynamic_tab(26);
5049   END IF;
5050 
5051   IF (p_dynamic_tab.COUNT =  27) THEN
5052      OPEN p_cursor FOR p_statement USING
5053          p_dynamic_tab(1),
5054          p_dynamic_tab(2),
5055          p_dynamic_tab(3),
5056          p_dynamic_tab(4),
5057          p_dynamic_tab(5),
5058          p_dynamic_tab(6),
5059          p_dynamic_tab(7),
5060          p_dynamic_tab(8),
5061          p_dynamic_tab(9),
5062          p_dynamic_tab(10),
5063          p_dynamic_tab(11),
5064          p_dynamic_tab(12),
5065          p_dynamic_tab(13),
5066          p_dynamic_tab(14),
5067          p_dynamic_tab(15),
5068          p_dynamic_tab(16),
5069          p_dynamic_tab(17),
5070          p_dynamic_tab(18),
5071          p_dynamic_tab(19),
5072          p_dynamic_tab(20),
5073          p_dynamic_tab(21),
5074          p_dynamic_tab(22),
5075          p_dynamic_tab(23),
5076          p_dynamic_tab(24),
5077          p_dynamic_tab(25),
5078          p_dynamic_tab(26),
5079          p_dynamic_tab(27);
5080   END IF;
5081 
5082   IF (p_dynamic_tab.COUNT =  28) THEN
5083      OPEN p_cursor FOR p_statement USING
5084          p_dynamic_tab(1),
5085          p_dynamic_tab(2),
5086          p_dynamic_tab(3),
5087          p_dynamic_tab(4),
5088          p_dynamic_tab(5),
5089          p_dynamic_tab(6),
5090          p_dynamic_tab(7),
5091          p_dynamic_tab(8),
5092          p_dynamic_tab(9),
5093          p_dynamic_tab(10),
5094          p_dynamic_tab(11),
5095          p_dynamic_tab(12),
5096          p_dynamic_tab(13),
5097          p_dynamic_tab(14),
5098          p_dynamic_tab(15),
5099          p_dynamic_tab(16),
5100          p_dynamic_tab(17),
5101          p_dynamic_tab(18),
5102          p_dynamic_tab(19),
5103          p_dynamic_tab(20),
5104          p_dynamic_tab(21),
5105          p_dynamic_tab(22),
5106          p_dynamic_tab(23),
5107          p_dynamic_tab(24),
5108          p_dynamic_tab(25),
5109          p_dynamic_tab(26),
5110          p_dynamic_tab(27),
5111          p_dynamic_tab(28);
5112   END IF;
5113 
5114   IF (p_dynamic_tab.COUNT =  29) THEN
5115      OPEN p_cursor FOR p_statement USING
5116          p_dynamic_tab(1),
5117          p_dynamic_tab(2),
5118          p_dynamic_tab(3),
5119          p_dynamic_tab(4),
5120          p_dynamic_tab(5),
5121          p_dynamic_tab(6),
5122          p_dynamic_tab(7),
5123          p_dynamic_tab(8),
5124          p_dynamic_tab(9),
5125          p_dynamic_tab(10),
5126          p_dynamic_tab(11),
5127          p_dynamic_tab(12),
5128          p_dynamic_tab(13),
5129          p_dynamic_tab(14),
5130          p_dynamic_tab(15),
5131          p_dynamic_tab(16),
5132          p_dynamic_tab(17),
5133          p_dynamic_tab(18),
5134          p_dynamic_tab(19),
5135          p_dynamic_tab(20),
5136          p_dynamic_tab(21),
5137          p_dynamic_tab(22),
5138          p_dynamic_tab(23),
5139          p_dynamic_tab(24),
5140          p_dynamic_tab(25),
5141          p_dynamic_tab(26),
5142          p_dynamic_tab(27),
5143          p_dynamic_tab(28),
5144          p_dynamic_tab(29);
5145   END IF;
5146 
5147   IF (p_dynamic_tab.COUNT =  30) THEN
5148      OPEN p_cursor FOR p_statement USING
5149          p_dynamic_tab(1),
5150          p_dynamic_tab(2),
5151          p_dynamic_tab(3),
5152          p_dynamic_tab(4),
5153          p_dynamic_tab(5),
5154          p_dynamic_tab(6),
5155          p_dynamic_tab(7),
5156          p_dynamic_tab(8),
5157          p_dynamic_tab(9),
5158          p_dynamic_tab(10),
5159          p_dynamic_tab(11),
5160          p_dynamic_tab(12),
5161          p_dynamic_tab(13),
5162          p_dynamic_tab(14),
5163          p_dynamic_tab(15),
5164          p_dynamic_tab(16),
5165          p_dynamic_tab(17),
5166          p_dynamic_tab(18),
5167          p_dynamic_tab(19),
5168          p_dynamic_tab(20),
5169          p_dynamic_tab(21),
5170          p_dynamic_tab(22),
5171          p_dynamic_tab(23),
5172          p_dynamic_tab(24),
5173          p_dynamic_tab(25),
5174          p_dynamic_tab(26),
5175          p_dynamic_tab(27),
5176          p_dynamic_tab(28),
5177          p_dynamic_tab(29),
5178          p_dynamic_tab(30);
5179   END IF;
5180 
5181   IF (p_dynamic_tab.COUNT =  31) THEN
5182      OPEN p_cursor FOR p_statement USING
5183          p_dynamic_tab(1),
5184          p_dynamic_tab(2),
5185          p_dynamic_tab(3),
5186          p_dynamic_tab(4),
5187          p_dynamic_tab(5),
5188          p_dynamic_tab(6),
5189          p_dynamic_tab(7),
5190          p_dynamic_tab(8),
5191          p_dynamic_tab(9),
5192          p_dynamic_tab(10),
5193          p_dynamic_tab(11),
5194          p_dynamic_tab(12),
5195          p_dynamic_tab(13),
5196          p_dynamic_tab(14),
5197          p_dynamic_tab(15),
5198          p_dynamic_tab(16),
5199          p_dynamic_tab(17),
5200          p_dynamic_tab(18),
5201          p_dynamic_tab(19),
5202          p_dynamic_tab(20),
5203          p_dynamic_tab(21),
5204          p_dynamic_tab(22),
5205          p_dynamic_tab(23),
5206          p_dynamic_tab(24),
5207          p_dynamic_tab(25),
5208          p_dynamic_tab(26),
5209          p_dynamic_tab(27),
5210          p_dynamic_tab(28),
5211          p_dynamic_tab(29),
5212          p_dynamic_tab(30),
5213          p_dynamic_tab(31);
5214   END IF;
5215 
5216   IF (p_dynamic_tab.COUNT =  32) THEN
5217      OPEN p_cursor FOR p_statement USING
5218          p_dynamic_tab(1),
5219          p_dynamic_tab(2),
5220          p_dynamic_tab(3),
5221          p_dynamic_tab(4),
5222          p_dynamic_tab(5),
5223          p_dynamic_tab(6),
5224          p_dynamic_tab(7),
5225          p_dynamic_tab(8),
5226          p_dynamic_tab(9),
5227          p_dynamic_tab(10),
5228          p_dynamic_tab(11),
5229          p_dynamic_tab(12),
5230          p_dynamic_tab(13),
5231          p_dynamic_tab(14),
5232          p_dynamic_tab(15),
5233          p_dynamic_tab(16),
5234          p_dynamic_tab(17),
5235          p_dynamic_tab(18),
5236          p_dynamic_tab(19),
5237          p_dynamic_tab(20),
5238          p_dynamic_tab(21),
5239          p_dynamic_tab(22),
5240          p_dynamic_tab(23),
5241          p_dynamic_tab(24),
5242          p_dynamic_tab(25),
5243          p_dynamic_tab(26),
5244          p_dynamic_tab(27),
5245          p_dynamic_tab(28),
5246          p_dynamic_tab(29),
5247          p_dynamic_tab(30),
5248          p_dynamic_tab(31),
5249          p_dynamic_tab(32);
5250   END IF;
5251 
5252   IF (p_dynamic_tab.COUNT =  33) THEN
5253      OPEN p_cursor FOR p_statement USING
5254          p_dynamic_tab(1),
5255          p_dynamic_tab(2),
5256          p_dynamic_tab(3),
5257          p_dynamic_tab(4),
5258          p_dynamic_tab(5),
5259          p_dynamic_tab(6),
5260          p_dynamic_tab(7),
5261          p_dynamic_tab(8),
5262          p_dynamic_tab(9),
5263          p_dynamic_tab(10),
5264          p_dynamic_tab(11),
5265          p_dynamic_tab(12),
5266          p_dynamic_tab(13),
5267          p_dynamic_tab(14),
5268          p_dynamic_tab(15),
5269          p_dynamic_tab(16),
5270          p_dynamic_tab(17),
5271          p_dynamic_tab(18),
5272          p_dynamic_tab(19),
5273          p_dynamic_tab(20),
5274          p_dynamic_tab(21),
5275          p_dynamic_tab(22),
5276          p_dynamic_tab(23),
5277          p_dynamic_tab(24),
5278          p_dynamic_tab(25),
5279          p_dynamic_tab(26),
5280          p_dynamic_tab(27),
5281          p_dynamic_tab(28),
5282          p_dynamic_tab(29),
5283          p_dynamic_tab(30),
5284          p_dynamic_tab(31),
5285          p_dynamic_tab(32),
5286          p_dynamic_tab(33);
5287   END IF;
5288 
5289   IF (p_dynamic_tab.COUNT =  34) THEN
5290      OPEN p_cursor FOR p_statement USING
5291          p_dynamic_tab(1),
5292          p_dynamic_tab(2),
5293          p_dynamic_tab(3),
5294          p_dynamic_tab(4),
5295          p_dynamic_tab(5),
5296          p_dynamic_tab(6),
5297          p_dynamic_tab(7),
5298          p_dynamic_tab(8),
5299          p_dynamic_tab(9),
5300          p_dynamic_tab(10),
5301          p_dynamic_tab(11),
5302          p_dynamic_tab(12),
5303          p_dynamic_tab(13),
5304          p_dynamic_tab(14),
5305          p_dynamic_tab(15),
5306          p_dynamic_tab(16),
5307          p_dynamic_tab(17),
5308          p_dynamic_tab(18),
5309          p_dynamic_tab(19),
5310          p_dynamic_tab(20),
5311          p_dynamic_tab(21),
5312          p_dynamic_tab(22),
5313          p_dynamic_tab(23),
5314          p_dynamic_tab(24),
5315          p_dynamic_tab(25),
5316          p_dynamic_tab(26),
5317          p_dynamic_tab(27),
5318          p_dynamic_tab(28),
5319          p_dynamic_tab(29),
5320          p_dynamic_tab(30),
5321          p_dynamic_tab(31),
5322          p_dynamic_tab(32),
5323          p_dynamic_tab(33),
5324          p_dynamic_tab(34);
5325   END IF;
5326 
5327   IF (p_dynamic_tab.COUNT =  35) THEN
5328      OPEN p_cursor FOR p_statement USING
5329          p_dynamic_tab(1),
5330          p_dynamic_tab(2),
5331          p_dynamic_tab(3),
5332          p_dynamic_tab(4),
5333          p_dynamic_tab(5),
5334          p_dynamic_tab(6),
5335          p_dynamic_tab(7),
5336          p_dynamic_tab(8),
5337          p_dynamic_tab(9),
5338          p_dynamic_tab(10),
5339          p_dynamic_tab(11),
5340          p_dynamic_tab(12),
5341          p_dynamic_tab(13),
5342          p_dynamic_tab(14),
5343          p_dynamic_tab(15),
5344          p_dynamic_tab(16),
5345          p_dynamic_tab(17),
5346          p_dynamic_tab(18),
5347          p_dynamic_tab(19),
5348          p_dynamic_tab(20),
5349          p_dynamic_tab(21),
5350          p_dynamic_tab(22),
5351          p_dynamic_tab(23),
5352          p_dynamic_tab(24),
5353          p_dynamic_tab(25),
5354          p_dynamic_tab(26),
5355          p_dynamic_tab(27),
5356          p_dynamic_tab(28),
5357          p_dynamic_tab(29),
5358          p_dynamic_tab(30),
5359          p_dynamic_tab(31),
5360          p_dynamic_tab(32),
5361          p_dynamic_tab(33),
5362          p_dynamic_tab(34),
5363          p_dynamic_tab(35);
5364   END IF;
5365 
5366   IF (p_dynamic_tab.COUNT =  36) THEN
5367      OPEN p_cursor FOR p_statement USING
5368          p_dynamic_tab(1),
5369          p_dynamic_tab(2),
5370          p_dynamic_tab(3),
5371          p_dynamic_tab(4),
5372          p_dynamic_tab(5),
5373          p_dynamic_tab(6),
5374          p_dynamic_tab(7),
5375          p_dynamic_tab(8),
5376          p_dynamic_tab(9),
5377          p_dynamic_tab(10),
5378          p_dynamic_tab(11),
5379          p_dynamic_tab(12),
5380          p_dynamic_tab(13),
5381          p_dynamic_tab(14),
5382          p_dynamic_tab(15),
5383          p_dynamic_tab(16),
5384          p_dynamic_tab(17),
5385          p_dynamic_tab(18),
5386          p_dynamic_tab(19),
5387          p_dynamic_tab(20),
5388          p_dynamic_tab(21),
5389          p_dynamic_tab(22),
5390          p_dynamic_tab(23),
5391          p_dynamic_tab(24),
5392          p_dynamic_tab(25),
5393          p_dynamic_tab(26),
5394          p_dynamic_tab(27),
5395          p_dynamic_tab(28),
5396          p_dynamic_tab(29),
5397          p_dynamic_tab(30),
5398          p_dynamic_tab(31),
5399          p_dynamic_tab(32),
5400          p_dynamic_tab(33),
5401          p_dynamic_tab(34),
5402          p_dynamic_tab(35),
5403          p_dynamic_tab(36);
5404   END IF;
5405 
5406   IF (p_dynamic_tab.COUNT =  37) THEN
5407      OPEN p_cursor FOR p_statement USING
5408          p_dynamic_tab(1),
5409          p_dynamic_tab(2),
5410          p_dynamic_tab(3),
5411          p_dynamic_tab(4),
5412          p_dynamic_tab(5),
5413          p_dynamic_tab(6),
5414          p_dynamic_tab(7),
5415          p_dynamic_tab(8),
5416          p_dynamic_tab(9),
5417          p_dynamic_tab(10),
5418          p_dynamic_tab(11),
5419          p_dynamic_tab(12),
5420          p_dynamic_tab(13),
5421          p_dynamic_tab(14),
5422          p_dynamic_tab(15),
5423          p_dynamic_tab(16),
5424          p_dynamic_tab(17),
5425          p_dynamic_tab(18),
5426          p_dynamic_tab(19),
5427          p_dynamic_tab(20),
5428          p_dynamic_tab(21),
5429          p_dynamic_tab(22),
5430          p_dynamic_tab(23),
5431          p_dynamic_tab(24),
5432          p_dynamic_tab(25),
5433          p_dynamic_tab(26),
5434          p_dynamic_tab(27),
5435          p_dynamic_tab(28),
5436          p_dynamic_tab(29),
5437          p_dynamic_tab(30),
5438          p_dynamic_tab(31),
5439          p_dynamic_tab(32),
5440          p_dynamic_tab(33),
5441          p_dynamic_tab(34),
5442          p_dynamic_tab(35),
5443          p_dynamic_tab(36),
5444          p_dynamic_tab(37);
5445   END IF;
5446 
5447   IF (p_dynamic_tab.COUNT =  38) THEN
5448      OPEN p_cursor FOR p_statement USING
5449          p_dynamic_tab(1),
5450          p_dynamic_tab(2),
5451          p_dynamic_tab(3),
5452          p_dynamic_tab(4),
5453          p_dynamic_tab(5),
5454          p_dynamic_tab(6),
5455          p_dynamic_tab(7),
5456          p_dynamic_tab(8),
5457          p_dynamic_tab(9),
5458          p_dynamic_tab(10),
5459          p_dynamic_tab(11),
5460          p_dynamic_tab(12),
5461          p_dynamic_tab(13),
5462          p_dynamic_tab(14),
5463          p_dynamic_tab(15),
5464          p_dynamic_tab(16),
5465          p_dynamic_tab(17),
5466          p_dynamic_tab(18),
5467          p_dynamic_tab(19),
5468          p_dynamic_tab(20),
5469          p_dynamic_tab(21),
5470          p_dynamic_tab(22),
5471          p_dynamic_tab(23),
5472          p_dynamic_tab(24),
5473          p_dynamic_tab(25),
5474          p_dynamic_tab(26),
5475          p_dynamic_tab(27),
5476          p_dynamic_tab(28),
5477          p_dynamic_tab(29),
5478          p_dynamic_tab(30),
5479          p_dynamic_tab(31),
5480          p_dynamic_tab(32),
5481          p_dynamic_tab(33),
5482          p_dynamic_tab(34),
5483          p_dynamic_tab(35),
5484          p_dynamic_tab(36),
5485          p_dynamic_tab(37),
5486          p_dynamic_tab(38);
5487   END IF;
5488 
5489   IF (p_dynamic_tab.COUNT =  39) THEN
5490      OPEN p_cursor FOR p_statement USING
5491          p_dynamic_tab(1),
5492          p_dynamic_tab(2),
5493          p_dynamic_tab(3),
5494          p_dynamic_tab(4),
5495          p_dynamic_tab(5),
5496          p_dynamic_tab(6),
5497          p_dynamic_tab(7),
5498          p_dynamic_tab(8),
5499          p_dynamic_tab(9),
5500          p_dynamic_tab(10),
5501          p_dynamic_tab(11),
5502          p_dynamic_tab(12),
5503          p_dynamic_tab(13),
5504          p_dynamic_tab(14),
5505          p_dynamic_tab(15),
5506          p_dynamic_tab(16),
5507          p_dynamic_tab(17),
5508          p_dynamic_tab(18),
5509          p_dynamic_tab(19),
5510          p_dynamic_tab(20),
5511          p_dynamic_tab(21),
5512          p_dynamic_tab(22),
5513          p_dynamic_tab(23),
5514          p_dynamic_tab(24),
5515          p_dynamic_tab(25),
5516          p_dynamic_tab(26),
5517          p_dynamic_tab(27),
5518          p_dynamic_tab(28),
5519          p_dynamic_tab(29),
5520          p_dynamic_tab(30),
5521          p_dynamic_tab(31),
5522          p_dynamic_tab(32),
5523          p_dynamic_tab(33),
5524          p_dynamic_tab(34),
5525          p_dynamic_tab(35),
5526          p_dynamic_tab(36),
5527          p_dynamic_tab(37),
5528          p_dynamic_tab(38),
5529          p_dynamic_tab(39);
5530   END IF;
5531 
5532   IF (p_dynamic_tab.COUNT =  40) THEN
5533      OPEN p_cursor FOR p_statement USING
5534          p_dynamic_tab(1),
5535          p_dynamic_tab(2),
5536          p_dynamic_tab(3),
5537          p_dynamic_tab(4),
5538          p_dynamic_tab(5),
5539          p_dynamic_tab(6),
5540          p_dynamic_tab(7),
5541          p_dynamic_tab(8),
5542          p_dynamic_tab(9),
5543          p_dynamic_tab(10),
5544          p_dynamic_tab(11),
5545          p_dynamic_tab(12),
5546          p_dynamic_tab(13),
5547          p_dynamic_tab(14),
5548          p_dynamic_tab(15),
5549          p_dynamic_tab(16),
5550          p_dynamic_tab(17),
5551          p_dynamic_tab(18),
5552          p_dynamic_tab(19),
5553          p_dynamic_tab(20),
5554          p_dynamic_tab(21),
5555          p_dynamic_tab(22),
5556          p_dynamic_tab(23),
5557          p_dynamic_tab(24),
5558          p_dynamic_tab(25),
5559          p_dynamic_tab(26),
5560          p_dynamic_tab(27),
5561          p_dynamic_tab(28),
5562          p_dynamic_tab(29),
5563          p_dynamic_tab(30),
5564          p_dynamic_tab(31),
5565          p_dynamic_tab(32),
5566          p_dynamic_tab(33),
5567          p_dynamic_tab(34),
5568          p_dynamic_tab(35),
5569          p_dynamic_tab(36),
5570          p_dynamic_tab(37),
5571          p_dynamic_tab(38),
5572          p_dynamic_tab(39),
5573          p_dynamic_tab(40);
5574   END IF;
5575 
5576   IF (p_dynamic_tab.COUNT =  41) THEN
5577      OPEN p_cursor FOR p_statement USING
5578          p_dynamic_tab(1),
5579          p_dynamic_tab(2),
5580          p_dynamic_tab(3),
5581          p_dynamic_tab(4),
5582          p_dynamic_tab(5),
5583          p_dynamic_tab(6),
5584          p_dynamic_tab(7),
5585          p_dynamic_tab(8),
5586          p_dynamic_tab(9),
5587          p_dynamic_tab(10),
5588          p_dynamic_tab(11),
5589          p_dynamic_tab(12),
5590          p_dynamic_tab(13),
5591          p_dynamic_tab(14),
5592          p_dynamic_tab(15),
5593          p_dynamic_tab(16),
5594          p_dynamic_tab(17),
5595          p_dynamic_tab(18),
5596          p_dynamic_tab(19),
5597          p_dynamic_tab(20),
5598          p_dynamic_tab(21),
5599          p_dynamic_tab(22),
5600          p_dynamic_tab(23),
5601          p_dynamic_tab(24),
5602          p_dynamic_tab(25),
5603          p_dynamic_tab(26),
5604          p_dynamic_tab(27),
5605          p_dynamic_tab(28),
5606          p_dynamic_tab(29),
5607          p_dynamic_tab(30),
5608          p_dynamic_tab(31),
5609          p_dynamic_tab(32),
5610          p_dynamic_tab(33),
5611          p_dynamic_tab(34),
5612          p_dynamic_tab(35),
5613          p_dynamic_tab(36),
5614          p_dynamic_tab(37),
5615          p_dynamic_tab(38),
5616          p_dynamic_tab(39),
5617          p_dynamic_tab(40),
5618          p_dynamic_tab(41);
5619   END IF;
5620 
5621   IF (p_dynamic_tab.COUNT =  42) THEN
5622      OPEN p_cursor FOR p_statement USING
5623          p_dynamic_tab(1),
5624          p_dynamic_tab(2),
5625          p_dynamic_tab(3),
5626          p_dynamic_tab(4),
5627          p_dynamic_tab(5),
5628          p_dynamic_tab(6),
5629          p_dynamic_tab(7),
5630          p_dynamic_tab(8),
5631          p_dynamic_tab(9),
5632          p_dynamic_tab(10),
5633          p_dynamic_tab(11),
5634          p_dynamic_tab(12),
5635          p_dynamic_tab(13),
5636          p_dynamic_tab(14),
5637          p_dynamic_tab(15),
5638          p_dynamic_tab(16),
5639          p_dynamic_tab(17),
5640          p_dynamic_tab(18),
5641          p_dynamic_tab(19),
5642          p_dynamic_tab(20),
5643          p_dynamic_tab(21),
5644          p_dynamic_tab(22),
5645          p_dynamic_tab(23),
5646          p_dynamic_tab(24),
5647          p_dynamic_tab(25),
5648          p_dynamic_tab(26),
5649          p_dynamic_tab(27),
5650          p_dynamic_tab(28),
5651          p_dynamic_tab(29),
5652          p_dynamic_tab(30),
5653          p_dynamic_tab(31),
5654          p_dynamic_tab(32),
5655          p_dynamic_tab(33),
5656          p_dynamic_tab(34),
5657          p_dynamic_tab(35),
5658          p_dynamic_tab(36),
5659          p_dynamic_tab(37),
5660          p_dynamic_tab(38),
5661          p_dynamic_tab(39),
5662          p_dynamic_tab(40),
5663          p_dynamic_tab(41),
5664          p_dynamic_tab(42);
5665   END IF;
5666 
5667   IF (p_dynamic_tab.COUNT =  43) THEN
5668      OPEN p_cursor FOR p_statement USING
5669          p_dynamic_tab(1),
5670          p_dynamic_tab(2),
5671          p_dynamic_tab(3),
5672          p_dynamic_tab(4),
5673          p_dynamic_tab(5),
5674          p_dynamic_tab(6),
5675          p_dynamic_tab(7),
5676          p_dynamic_tab(8),
5677          p_dynamic_tab(9),
5678          p_dynamic_tab(10),
5679          p_dynamic_tab(11),
5680          p_dynamic_tab(12),
5681          p_dynamic_tab(13),
5682          p_dynamic_tab(14),
5683          p_dynamic_tab(15),
5684          p_dynamic_tab(16),
5685          p_dynamic_tab(17),
5686          p_dynamic_tab(18),
5687          p_dynamic_tab(19),
5688          p_dynamic_tab(20),
5689          p_dynamic_tab(21),
5690          p_dynamic_tab(22),
5691          p_dynamic_tab(23),
5692          p_dynamic_tab(24),
5693          p_dynamic_tab(25),
5694          p_dynamic_tab(26),
5695          p_dynamic_tab(27),
5696          p_dynamic_tab(28),
5697          p_dynamic_tab(29),
5698          p_dynamic_tab(30),
5699          p_dynamic_tab(31),
5700          p_dynamic_tab(32),
5701          p_dynamic_tab(33),
5702          p_dynamic_tab(34),
5703          p_dynamic_tab(35),
5704          p_dynamic_tab(36),
5705          p_dynamic_tab(37),
5706          p_dynamic_tab(38),
5707          p_dynamic_tab(39),
5708          p_dynamic_tab(40),
5709          p_dynamic_tab(41),
5710          p_dynamic_tab(42),
5711          p_dynamic_tab(43);
5712   END IF;
5713 
5714   IF (p_dynamic_tab.COUNT =  44) THEN
5715      OPEN p_cursor FOR p_statement USING
5716          p_dynamic_tab(1),
5717          p_dynamic_tab(2),
5718          p_dynamic_tab(3),
5719          p_dynamic_tab(4),
5720          p_dynamic_tab(5),
5721          p_dynamic_tab(6),
5722          p_dynamic_tab(7),
5723          p_dynamic_tab(8),
5724          p_dynamic_tab(9),
5725          p_dynamic_tab(10),
5726          p_dynamic_tab(11),
5727          p_dynamic_tab(12),
5728          p_dynamic_tab(13),
5729          p_dynamic_tab(14),
5730          p_dynamic_tab(15),
5731          p_dynamic_tab(16),
5732          p_dynamic_tab(17),
5733          p_dynamic_tab(18),
5734          p_dynamic_tab(19),
5735          p_dynamic_tab(20),
5736          p_dynamic_tab(21),
5737          p_dynamic_tab(22),
5738          p_dynamic_tab(23),
5739          p_dynamic_tab(24),
5740          p_dynamic_tab(25),
5741          p_dynamic_tab(26),
5742          p_dynamic_tab(27),
5743          p_dynamic_tab(28),
5744          p_dynamic_tab(29),
5745          p_dynamic_tab(30),
5746          p_dynamic_tab(31),
5747          p_dynamic_tab(32),
5748          p_dynamic_tab(33),
5749          p_dynamic_tab(34),
5750          p_dynamic_tab(35),
5751          p_dynamic_tab(36),
5752          p_dynamic_tab(37),
5753          p_dynamic_tab(38),
5754          p_dynamic_tab(39),
5755          p_dynamic_tab(40),
5756          p_dynamic_tab(41),
5757          p_dynamic_tab(42),
5758          p_dynamic_tab(43),
5759          p_dynamic_tab(44);
5760   END IF;
5761 
5762   IF (p_dynamic_tab.COUNT =  45) THEN
5763      OPEN p_cursor FOR p_statement USING
5764          p_dynamic_tab(1),
5765          p_dynamic_tab(2),
5766          p_dynamic_tab(3),
5767          p_dynamic_tab(4),
5768          p_dynamic_tab(5),
5769          p_dynamic_tab(6),
5770          p_dynamic_tab(7),
5771          p_dynamic_tab(8),
5772          p_dynamic_tab(9),
5773          p_dynamic_tab(10),
5774          p_dynamic_tab(11),
5775          p_dynamic_tab(12),
5776          p_dynamic_tab(13),
5777          p_dynamic_tab(14),
5778          p_dynamic_tab(15),
5779          p_dynamic_tab(16),
5780          p_dynamic_tab(17),
5781          p_dynamic_tab(18),
5782          p_dynamic_tab(19),
5783          p_dynamic_tab(20),
5784          p_dynamic_tab(21),
5785          p_dynamic_tab(22),
5786          p_dynamic_tab(23),
5787          p_dynamic_tab(24),
5788          p_dynamic_tab(25),
5789          p_dynamic_tab(26),
5790          p_dynamic_tab(27),
5791          p_dynamic_tab(28),
5792          p_dynamic_tab(29),
5793          p_dynamic_tab(30),
5794          p_dynamic_tab(31),
5795          p_dynamic_tab(32),
5796          p_dynamic_tab(33),
5797          p_dynamic_tab(34),
5798          p_dynamic_tab(35),
5799          p_dynamic_tab(36),
5800          p_dynamic_tab(37),
5801          p_dynamic_tab(38),
5802          p_dynamic_tab(39),
5803          p_dynamic_tab(40),
5804          p_dynamic_tab(41),
5805          p_dynamic_tab(42),
5806          p_dynamic_tab(43),
5807          p_dynamic_tab(44),
5808          p_dynamic_tab(45);
5809   END IF;
5810 
5811   IF (p_dynamic_tab.COUNT =  46) THEN
5812      OPEN p_cursor FOR p_statement USING
5813          p_dynamic_tab(1),
5814          p_dynamic_tab(2),
5815          p_dynamic_tab(3),
5816          p_dynamic_tab(4),
5817          p_dynamic_tab(5),
5818          p_dynamic_tab(6),
5819          p_dynamic_tab(7),
5820          p_dynamic_tab(8),
5821          p_dynamic_tab(9),
5822          p_dynamic_tab(10),
5823          p_dynamic_tab(11),
5824          p_dynamic_tab(12),
5825          p_dynamic_tab(13),
5826          p_dynamic_tab(14),
5827          p_dynamic_tab(15),
5828          p_dynamic_tab(16),
5829          p_dynamic_tab(17),
5830          p_dynamic_tab(18),
5831          p_dynamic_tab(19),
5832          p_dynamic_tab(20),
5833          p_dynamic_tab(21),
5834          p_dynamic_tab(22),
5835          p_dynamic_tab(23),
5836          p_dynamic_tab(24),
5837          p_dynamic_tab(25),
5838          p_dynamic_tab(26),
5839          p_dynamic_tab(27),
5840          p_dynamic_tab(28),
5841          p_dynamic_tab(29),
5842          p_dynamic_tab(30),
5843          p_dynamic_tab(31),
5844          p_dynamic_tab(32),
5845          p_dynamic_tab(33),
5846          p_dynamic_tab(34),
5847          p_dynamic_tab(35),
5848          p_dynamic_tab(36),
5849          p_dynamic_tab(37),
5850          p_dynamic_tab(38),
5851          p_dynamic_tab(39),
5852          p_dynamic_tab(40),
5853          p_dynamic_tab(41),
5854          p_dynamic_tab(42),
5855          p_dynamic_tab(43),
5856          p_dynamic_tab(44),
5857          p_dynamic_tab(45),
5858          p_dynamic_tab(46);
5859   END IF;
5860 
5861   IF (p_dynamic_tab.COUNT =  47) THEN
5862      OPEN p_cursor FOR p_statement USING
5863          p_dynamic_tab(1),
5864          p_dynamic_tab(2),
5865          p_dynamic_tab(3),
5866          p_dynamic_tab(4),
5867          p_dynamic_tab(5),
5868          p_dynamic_tab(6),
5869          p_dynamic_tab(7),
5870          p_dynamic_tab(8),
5871          p_dynamic_tab(9),
5872          p_dynamic_tab(10),
5873          p_dynamic_tab(11),
5874          p_dynamic_tab(12),
5875          p_dynamic_tab(13),
5876          p_dynamic_tab(14),
5877          p_dynamic_tab(15),
5878          p_dynamic_tab(16),
5879          p_dynamic_tab(17),
5880          p_dynamic_tab(18),
5881          p_dynamic_tab(19),
5882          p_dynamic_tab(20),
5883          p_dynamic_tab(21),
5884          p_dynamic_tab(22),
5885          p_dynamic_tab(23),
5886          p_dynamic_tab(24),
5887          p_dynamic_tab(25),
5888          p_dynamic_tab(26),
5889          p_dynamic_tab(27),
5890          p_dynamic_tab(28),
5891          p_dynamic_tab(29),
5892          p_dynamic_tab(30),
5893          p_dynamic_tab(31),
5894          p_dynamic_tab(32),
5895          p_dynamic_tab(33),
5896          p_dynamic_tab(34),
5897          p_dynamic_tab(35),
5898          p_dynamic_tab(36),
5899          p_dynamic_tab(37),
5900          p_dynamic_tab(38),
5901          p_dynamic_tab(39),
5902          p_dynamic_tab(40),
5903          p_dynamic_tab(41),
5904          p_dynamic_tab(42),
5905          p_dynamic_tab(43),
5906          p_dynamic_tab(44),
5907          p_dynamic_tab(45),
5908          p_dynamic_tab(46),
5909          p_dynamic_tab(47);
5910   END IF;
5911 
5912   IF (p_dynamic_tab.COUNT =  48) THEN
5913      OPEN p_cursor FOR p_statement USING
5914          p_dynamic_tab(1),
5915          p_dynamic_tab(2),
5916          p_dynamic_tab(3),
5917          p_dynamic_tab(4),
5918          p_dynamic_tab(5),
5919          p_dynamic_tab(6),
5920          p_dynamic_tab(7),
5921          p_dynamic_tab(8),
5922          p_dynamic_tab(9),
5923          p_dynamic_tab(10),
5924          p_dynamic_tab(11),
5925          p_dynamic_tab(12),
5926          p_dynamic_tab(13),
5927          p_dynamic_tab(14),
5928          p_dynamic_tab(15),
5929          p_dynamic_tab(16),
5930          p_dynamic_tab(17),
5931          p_dynamic_tab(18),
5932          p_dynamic_tab(19),
5933          p_dynamic_tab(20),
5934          p_dynamic_tab(21),
5935          p_dynamic_tab(22),
5936          p_dynamic_tab(23),
5937          p_dynamic_tab(24),
5938          p_dynamic_tab(25),
5939          p_dynamic_tab(26),
5940          p_dynamic_tab(27),
5941          p_dynamic_tab(28),
5942          p_dynamic_tab(29),
5943          p_dynamic_tab(30),
5944          p_dynamic_tab(31),
5945          p_dynamic_tab(32),
5946          p_dynamic_tab(33),
5947          p_dynamic_tab(34),
5948          p_dynamic_tab(35),
5949          p_dynamic_tab(36),
5950          p_dynamic_tab(37),
5951          p_dynamic_tab(38),
5952          p_dynamic_tab(39),
5953          p_dynamic_tab(40),
5954          p_dynamic_tab(41),
5955          p_dynamic_tab(42),
5956          p_dynamic_tab(43),
5957          p_dynamic_tab(44),
5958          p_dynamic_tab(45),
5959          p_dynamic_tab(46),
5960          p_dynamic_tab(47),
5961          p_dynamic_tab(48);
5962   END IF;
5963 
5964   IF (p_dynamic_tab.COUNT =  49) THEN
5965      OPEN p_cursor FOR p_statement USING
5966          p_dynamic_tab(1),
5967          p_dynamic_tab(2),
5968          p_dynamic_tab(3),
5969          p_dynamic_tab(4),
5970          p_dynamic_tab(5),
5971          p_dynamic_tab(6),
5972          p_dynamic_tab(7),
5973          p_dynamic_tab(8),
5974          p_dynamic_tab(9),
5975          p_dynamic_tab(10),
5976          p_dynamic_tab(11),
5977          p_dynamic_tab(12),
5978          p_dynamic_tab(13),
5979          p_dynamic_tab(14),
5980          p_dynamic_tab(15),
5981          p_dynamic_tab(16),
5982          p_dynamic_tab(17),
5983          p_dynamic_tab(18),
5984          p_dynamic_tab(19),
5985          p_dynamic_tab(20),
5986          p_dynamic_tab(21),
5987          p_dynamic_tab(22),
5988          p_dynamic_tab(23),
5989          p_dynamic_tab(24),
5990          p_dynamic_tab(25),
5991          p_dynamic_tab(26),
5992          p_dynamic_tab(27),
5993          p_dynamic_tab(28),
5994          p_dynamic_tab(29),
5995          p_dynamic_tab(30),
5996          p_dynamic_tab(31),
5997          p_dynamic_tab(32),
5998          p_dynamic_tab(33),
5999          p_dynamic_tab(34),
6000          p_dynamic_tab(35),
6001          p_dynamic_tab(36),
6002          p_dynamic_tab(37),
6003          p_dynamic_tab(38),
6004          p_dynamic_tab(39),
6005          p_dynamic_tab(40),
6006          p_dynamic_tab(41),
6007          p_dynamic_tab(42),
6008          p_dynamic_tab(43),
6009          p_dynamic_tab(44),
6010          p_dynamic_tab(45),
6011          p_dynamic_tab(46),
6012          p_dynamic_tab(47),
6013          p_dynamic_tab(48),
6014          p_dynamic_tab(49);
6015   END IF;
6016 
6017   IF (p_dynamic_tab.COUNT =  50) THEN
6018      OPEN p_cursor FOR p_statement USING
6019          p_dynamic_tab(1),
6020          p_dynamic_tab(2),
6021          p_dynamic_tab(3),
6022          p_dynamic_tab(4),
6023          p_dynamic_tab(5),
6024          p_dynamic_tab(6),
6025          p_dynamic_tab(7),
6026          p_dynamic_tab(8),
6027          p_dynamic_tab(9),
6028          p_dynamic_tab(10),
6029          p_dynamic_tab(11),
6030          p_dynamic_tab(12),
6031          p_dynamic_tab(13),
6032          p_dynamic_tab(14),
6033          p_dynamic_tab(15),
6034          p_dynamic_tab(16),
6035          p_dynamic_tab(17),
6036          p_dynamic_tab(18),
6037          p_dynamic_tab(19),
6038          p_dynamic_tab(20),
6039          p_dynamic_tab(21),
6040          p_dynamic_tab(22),
6041          p_dynamic_tab(23),
6042          p_dynamic_tab(24),
6043          p_dynamic_tab(25),
6044          p_dynamic_tab(26),
6045          p_dynamic_tab(27),
6046          p_dynamic_tab(28),
6047          p_dynamic_tab(29),
6048          p_dynamic_tab(30),
6049          p_dynamic_tab(31),
6050          p_dynamic_tab(32),
6051          p_dynamic_tab(33),
6052          p_dynamic_tab(34),
6053          p_dynamic_tab(35),
6054          p_dynamic_tab(36),
6055          p_dynamic_tab(37),
6056          p_dynamic_tab(38),
6057          p_dynamic_tab(39),
6058          p_dynamic_tab(40),
6059          p_dynamic_tab(41),
6060          p_dynamic_tab(42),
6061          p_dynamic_tab(43),
6062          p_dynamic_tab(44),
6063          p_dynamic_tab(45),
6064          p_dynamic_tab(46),
6065          p_dynamic_tab(47),
6066          p_dynamic_tab(48),
6067          p_dynamic_tab(49),
6068          p_dynamic_tab(50);
6069   END IF;
6070   --
6071   IF l_debug_on THEN
6072     WSH_DEBUG_SV.pop(l_module_name);
6073   END IF;
6074   --
6075 EXCEPTION
6076   --
6077   WHEN OTHERS THEN
6078    --
6079    IF l_debug_on THEN
6080     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6081     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6082    END IF;
6083    --
6084 END OpenDynamicCursor;
6085 --HVOP heali
6086 
6087 
6088 -- Start of comments
6089 -- API name : Get_Lookup_Meaning
6090 -- Type     : Public
6091 -- Pre-reqs : None.
6092 -- Function : API to get meaning for lookup code and type.
6093 -- Parameters :
6094 -- IN:
6095 --        p_lookup_type               IN      Lookup Type.
6096 --        P_lookup_code               IN      Lookup Code.
6097 -- OUT:
6098 --        Api return meaning for lookup code and type.
6099 -- End of comments
6100 FUNCTION Get_Lookup_Meaning(p_lookup_type       IN      VARCHAR2,
6101                             P_lookup_code       IN      VARCHAR2)
6102 return VARCHAR2 IS
6103 
6104 CURSOR get_meaning IS
6105   SELECT meaning
6106   FROM WSH_LOOKUPS
6107   WHERE LOOKUP_TYPE = p_lookup_type
6108   AND LOOKUP_CODE = P_lookup_code;
6109 
6110 l_meaning			VARCHAR2(80);
6111 
6112 l_debug_on BOOLEAN;
6113 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_LOOKUP_MEANING';
6114 --
6115 BEGIN
6116    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6117 
6118    IF l_debug_on IS NULL THEN
6119       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6120    END IF;
6121 
6122    IF l_debug_on THEN
6123       WSH_DEBUG_SV.push(l_module_name);
6124       WSH_DEBUG_SV.log(l_module_name,'p_lookup_type',p_lookup_type);
6125       WSH_DEBUG_SV.log(l_module_name,'P_lookup_code',P_lookup_code);
6126    END IF;
6127 
6128    OPEN get_meaning;
6129    FETCH get_meaning INTO l_meaning;
6130    CLOSE get_meaning;
6131 
6132 
6133    IF l_debug_on THEN
6134       WSH_DEBUG_SV.log(l_module_name,'l_meaning',l_meaning);
6135       WSH_DEBUG_SV.pop(l_module_name);
6136    END IF;
6137 
6138    IF (l_meaning IS NULL) THEN
6139       return P_lookup_code;
6140    ELSE
6141       return l_meaning;
6142    END IF;
6143 
6144 EXCEPTION
6145   WHEN others THEN
6146    IF l_debug_on THEN
6147       WSH_DEBUG_SV.pop(l_module_name);
6148    END IF;
6149    return P_lookup_code;
6150 END Get_Lookup_Meaning;
6151 
6152 
6153 -- Start of comments
6154 -- API name : Get_Action_Meaning
6155 -- Type     : Public
6156 -- Pre-reqs : None.
6157 -- Function : API to get meaning for Action code and type.
6158 -- Parameters :
6159 -- IN:
6160 --        p_entity                    IN      Entity DLVB/DLVY/STOP/TRIP.
6161 --        P_action_code               IN      Action Code.
6162 -- OUT:
6163 --        Api return meaning for lookup code and type.
6164 -- End of comments
6165 FUNCTION Get_Action_Meaning(p_entity       	IN      VARCHAR2,
6166                             p_action_code       IN      VARCHAR2)
6167 return VARCHAR2 IS
6168 
6169 l_meaning                       VARCHAR2(80);
6170 l_lookup_type                   VARCHAR2(30);
6171 l_lookup_code                   VARCHAR2(30);
6172 
6173 l_debug_on BOOLEAN;
6174 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ACTION_MEANING';
6175 --
6176 BEGIN
6177    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6178 
6179    IF l_debug_on IS NULL THEN
6180       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6181    END IF;
6182 
6183    IF l_debug_on THEN
6184       WSH_DEBUG_SV.push(l_module_name);
6185       WSH_DEBUG_SV.log(l_module_name,'p_entity',p_entity);
6186       WSH_DEBUG_SV.log(l_module_name,'p_action_code',p_action_code);
6187    END IF;
6188 
6189    IF (p_entity ='DLVB') THEN
6190       l_lookup_type :='DLVB_PRIVILEGE';
6191 
6192       IF l_debug_on THEN
6193          WSH_DEBUG_SV.log(l_module_name,'Inside DLVB l_lookup_type',l_lookup_type);
6194       END IF;
6195 
6196       IF (p_action_code = 'PICK-RELEASE' ) THEN
6197          l_lookup_code:= 'DLVB_LAUNCH_PR';
6198 
6199       ELSIF (p_action_code = 'SPLIT_DELIVERY') THEN
6200          l_lookup_code:= 'DLVB_SPLIT_DELIVERY'; --??
6201 
6202       ELSIF (p_action_code = 'UNASSIGN') THEN
6203          l_lookup_code:= 'DLVB_UNASSIGN_DLVY';
6204 
6205       ELSIF (p_action_code = 'ASSIGN') THEN
6206          l_lookup_code:= 'DLVB_ASSIGN_DLVY';
6207 
6208       ELSIF (p_action_code = 'AUTOCREATE-DEL') THEN
6209          l_lookup_code:= 'DLVB_AUTOCREATE_DLVY';
6210 
6211       ELSIF (p_action_code = 'PACK') THEN
6212          l_lookup_code:= 'DLVB_PACK';
6213 
6214       ELSIF (p_action_code = 'SPLIT-LINE') THEN
6215          l_lookup_code:= 'DLVB_SPLIT_LINE';
6216 
6217       ELSIF (p_action_code = 'CYCLE-COUNT') THEN
6218          l_lookup_code:= 'DLVB_CYCLE_COUNT';
6219 
6220       ELSIF (p_action_code = 'PICK-RELEASE-UI') THEN
6221          l_lookup_code:= 'DLVB_PR_FORM';
6222 
6223       ELSIF (p_action_code = 'RESOLVE-EXCEPTIONS-UI') THEN
6224          l_lookup_code:= 'DLVB_RESOLVE_EXC';
6225 
6226       ELSIF (p_action_code = 'AUTOCREATE-TRIP') THEN
6227          l_lookup_code:= 'DLVB_AUTOCREATE_TRIP';
6228 
6229       ELSIF (p_action_code = 'IGNORE_PLAN') THEN
6230          l_lookup_code:= 'DLVB_IGNORE_PLAN';
6231 
6232       ELSIF (p_action_code = 'INCLUDE_PLAN') THEN
6233          l_lookup_code:= 'DLVB_INCLUDE_PLAN';
6234 
6235       ELSIF (p_action_code = 'PICK-PACK-SHIP') THEN
6236          l_lookup_code:= 'DLVB_PICK_PACK_SHIP';
6237 
6238       ELSIF (p_action_code = 'PICK-SHIP') THEN
6239          l_lookup_code:= 'DLVB_PICK_SHIP';
6240 
6241       ELSIF (p_action_code = 'WT-VOL') THEN
6242          l_lookup_code:= 'DLVB_CALC_WV';
6243 
6244       ELSIF (p_action_code = 'AUTO-PACK') THEN
6245          l_lookup_code:= 'DLVB_AUTOPACK';
6246 
6247       ELSIF (p_action_code = 'AUTO-PACK-MASTER') THEN
6248          l_lookup_code:= 'DLVB_AUTOPACK_M';
6249 
6250       ELSIF (p_action_code = 'PACKING-WORKBENCH') THEN
6251          l_lookup_code:= 'DLVB_PACKING_WB';
6252 
6253       ELSIF (p_action_code = 'FREIGHT-COSTS-UI') THEN
6254          l_lookup_code:= 'DLVB_FREIGHT_COSTS';
6255 
6256       ELSIF (p_action_code = 'RATE_WITH_UPS') THEN
6257          l_lookup_code:= 'DLVB_UPS_RS';
6258 
6259       ELSIF (p_action_code = 'UPS_TRACKING') THEN
6260          l_lookup_code:= 'DLVB_UPS_TR';
6261 
6262       ELSIF (p_action_code = 'UPS_TIME_IN_TRANSIT') THEN
6263          l_lookup_code:= 'DLVB_UPS_TT';
6264 
6265       ELSIF (p_action_code = 'UPS_ADDRESS_VALIDATION') THEN
6266          l_lookup_code:= 'DLVB_UPS_AV';
6267 
6268       ELSIF (p_action_code = 'CREATE') THEN
6269          l_lookup_code:= 'DLVB_CREATE';
6270 
6271       ELSIF (p_action_code = 'DELETE') THEN
6272          l_lookup_code:= 'DLVB_DELETE';
6273 
6274       ELSIF (p_action_code = 'UPDATE') THEN
6275          l_lookup_code:= 'DLVB_UPDATE';
6276 
6277       ELSIF (p_action_code = 'CANCEL') THEN
6278          l_lookup_code:= 'DLVB_CANCEL';
6279       END IF;
6280 
6281    ELSIF (p_entity ='DLVY') THEN
6282 
6283       l_lookup_type :='DLVY_PRIVILEGE';
6284 
6285       IF l_debug_on THEN
6286          WSH_DEBUG_SV.log(l_module_name,'Inside DLVY l_lookup_type',l_lookup_type);
6287       END IF;
6288 
6289       IF (p_action_code = 'CONFIRM') THEN
6290          l_lookup_code:= 'DLVY_SHIP_CONFIRM';
6291 
6292       ELSIF (p_action_code = 'PICK-SHIP') THEN
6293          l_lookup_code:= 'DLVY_PICK_SHIP';
6294 
6295       ELSIF (p_action_code = 'PICK-RELEASE') THEN
6296          l_lookup_code:= 'DLVY_LAUNCH_PR';
6297 
6298       ELSIF (p_action_code = 'PICK-PACK-SHIP') THEN
6299          l_lookup_code:= 'DLVY_PICK_PACK_SHIP';
6300 
6301       ELSIF (p_action_code = 'UNASSIGN-TRIP') THEN
6302          l_lookup_code:= 'DLVY_UNASSIGN_TRIP';
6303 
6304       ELSIF (p_action_code = 'ASSIGN-TRIP') THEN
6305          l_lookup_code:= 'DLVY_ASSIGN_TRIP';
6306 
6307       ELSIF (p_action_code = 'AUTOCREATE-TRIP') THEN
6308          l_lookup_code:= 'DLVY_AUTOCREATE_TRIP';
6309 
6310       ELSIF (p_action_code = 'OUTBOUND-DOCUMENT') THEN
6311          l_lookup_code:= 'DLVY_OUTBOUND_DOCUMENT';
6312 
6313       ELSIF (p_action_code = 'PRINT-DOC-SETS') THEN
6314          l_lookup_code:= 'DLVY_PRINT_DS';
6315 
6316       ELSIF (p_action_code = 'GENERATE-ROUTING-RESPONSE') THEN
6317          l_lookup_code:= 'DLVY_GENERATE_ROUTING_RESPONSE'; --??
6318 
6319       ELSIF (p_action_code = 'PLAN') THEN
6320          l_lookup_code:= 'DLVY_PLAN';
6321 
6322       ELSIF (p_action_code = 'UNPLAN') THEN
6323          l_lookup_code:= 'DLVY_UNPLAN';
6324 
6325       ELSIF (p_action_code = 'FIRM') THEN
6326          l_lookup_code:= 'DLVY_FIRM';
6327 
6328       ELSIF (p_action_code = 'IGNORE_PLAN') THEN
6329          l_lookup_code:= 'DLVY_IGNORE_PLAN';
6330 
6331       ELSIF (p_action_code = 'INCLUDE_PLAN') THEN
6332          l_lookup_code:= 'DLVY_INCLUDE_PLAN';
6333 
6334       ELSIF (p_action_code = 'WT-VOL') THEN
6335          l_lookup_code:= 'DLVY_CALC_WV';
6336 
6337       ELSIF (p_action_code = 'AUTO-PACK') THEN
6338          l_lookup_code:= 'DLVY_AUTOPACK';
6339 
6340       ELSIF (p_action_code = 'AUTO-PACK-MASTER') THEN
6341          l_lookup_code:= 'DLVY_AUTOPACK_M';
6342 
6343       ELSIF (p_action_code = 'GEN-LOAD-SEQ') THEN
6344          l_lookup_code:= 'DLVY_GENERATE_LS';
6345 
6346       ELSIF (p_action_code = 'RE-OPEN') THEN
6347          l_lookup_code:= 'DLVY_REOPEN';
6348 
6349       ELSIF (p_action_code = 'CLOSE') THEN
6350          l_lookup_code:= 'DLVY_CLOSE';
6351 
6352       ELSIF (p_action_code = 'TRIP-CONSOLIDATION') THEN
6353          l_lookup_code:= 'DLVY_TRIP_CONSOLIDATION'; --??
6354 
6355       ELSIF (p_action_code = 'SELECT-CARRIER') THEN
6356          l_lookup_code:= 'DLVY_SELECT_CARRIER';
6357 
6358       ELSIF (p_action_code = 'GENERATE-PACK-SLIP') THEN
6359          l_lookup_code:= 'DLVY_GENERATE_PS';
6360 
6361       ELSIF (p_action_code = 'PICK-RELEASE-UI') THEN
6362          l_lookup_code:= 'DLVY_PR_FORM';
6363 
6364       ELSIF (p_action_code = 'RESOLVE-EXCEPTIONS-UI') THEN
6365          l_lookup_code:= 'DLVY_RESOLVE_EXC';
6366 
6367       ELSIF (p_action_code = 'TRANSACTION-HISTORY-UI') THEN
6368          l_lookup_code:= 'DLVY_VW_TRANS_HISTORY';
6369 
6370       ELSIF (p_action_code = 'FREIGHT-COSTS-UI') THEN
6371          l_lookup_code:= 'DLVY_FREIGHT_COSTS';
6372 
6373       ELSIF (p_action_code = 'CANCEL-SHIP-METHOD') THEN
6374          l_lookup_code:= 'DLVY_CANCEL_SHIP_METHOD';
6375 
6376       ELSIF (p_action_code = 'ADJUST-PLANNED-FLAG') THEN
6377          l_lookup_code:= 'DLVY_ADJUST_PLANNED_FLAG'; --??
6378 
6379       ELSIF (p_action_code = 'PRINT-PACK-SLIP') THEN
6380          l_lookup_code:= 'DLVY_GENERATE_PS';
6381 
6382       ELSIF (p_action_code = 'PRINT-BOL') THEN
6383          l_lookup_code:= 'DLVY_GENERATE_BOL';
6384 
6385       ELSIF (p_action_code = 'DLVY_LOG_EXCEP') THEN
6386          l_lookup_code:= 'DLVY-LOG-EXCEP';
6387 
6388       ELSIF (p_action_code = 'RATE_WITH_UPS') THEN
6389          l_lookup_code:= 'DLVY_UPS_RS';
6390 
6391       ELSIF (p_action_code = 'UPS_ADDRESS_VALIDATION') THEN
6392          l_lookup_code:= 'DLVY_UPS_AV';
6393 
6394       ELSIF (p_action_code = 'UPS_TIME_IN_TRANSIT') THEN
6395          l_lookup_code:= 'DLVY_UPS_TT';
6396 
6397       ELSIF (p_action_code = 'CREATE') THEN
6398          l_lookup_code:= 'DLVY_CREATE';
6399 
6400       ELSIF (p_action_code = 'DELETE') THEN
6401          l_lookup_code:= 'DLVY_DELETE';
6402 
6403       ELSIF (p_action_code = 'UPDATE') THEN
6404          l_lookup_code:= 'DLVY_UPDATE';
6405 
6406       ELSIF (p_action_code = 'CANCEL') THEN
6407          l_lookup_code:= 'DLVY_CANCEL';
6408       END IF;
6409 
6410    ELSIF (p_entity ='STOP') THEN
6411 
6412       l_lookup_type :='STOP_PRIVILEGE';
6413 
6414       IF l_debug_on THEN
6415          WSH_DEBUG_SV.log(l_module_name,'Inside STOP l_lookup_type',l_lookup_type);
6416       END IF;
6417 
6418       IF (p_action_code = 'UPDATE-STATUS') THEN
6419          l_lookup_code:= 'STOP_UPDATE_STATUS';
6420 
6421       ELSIF (p_action_code = 'PLAN') THEN
6422          l_lookup_code:= 'STOP_PLAN';
6423 
6424       ELSIF (p_action_code = 'UNPLAN') THEN
6425          l_lookup_code:= 'STOP_UNPLAN';
6426 
6427       ELSIF (p_action_code = 'PICK-RELEASE') THEN
6428          l_lookup_code:= 'STOP_LAUNCH_PR';
6429 
6430       ELSIF (p_action_code = 'PRINT-DOC-SETS') THEN
6431          l_lookup_code:= 'STOP_PRINT_DS';
6432 
6433       ELSIF (p_action_code = 'WT-VOL') THEN
6434          l_lookup_code:= 'STOP_CALC_WV';
6435 
6436       ELSIF (p_action_code = 'PICK-RELEASE-UI') THEN
6437          l_lookup_code:= 'STOP_PR_FORM';
6438 
6439       ELSIF (p_action_code = 'RESOLVE-EXCEPTIONS-UI') THEN
6440          l_lookup_code:= 'STOP_RESOLVE_EXC';
6441 
6442       ELSIF (p_action_code = 'FREIGHT-COSTS-UI') THEN
6443          l_lookup_code:= 'STOP_FREIGHT_COSTS';
6444 
6445       ELSIF (p_action_code = 'STOP_LOG_EXCEP') THEN
6446          l_lookup_code:= 'STOP-LOG-EXCEP';
6447 
6448       ELSIF (p_action_code = 'CREATE') THEN
6449          l_lookup_code:= 'STOP_CREATE';
6450 
6451       ELSIF (p_action_code = 'DELETE') THEN
6452          l_lookup_code:= 'STOP_DELETE';
6453 
6454       ELSIF (p_action_code = 'UPDATE') THEN
6455          l_lookup_code:= 'STOP_UPDATE';
6456 
6457       ELSIF (p_action_code = 'CANCEL') THEN
6458          l_lookup_code:= 'STOP_CANCEL';
6459       END IF;
6460 
6461    ELSIF (p_entity ='TRIP') THEN
6462 
6463       l_lookup_type :='TRIP_PRIVILEGE';
6464 
6465       IF l_debug_on THEN
6466          WSH_DEBUG_SV.log(l_module_name,'Inside TRIP l_lookup_type',l_lookup_type);
6467       END IF;
6468 
6469       IF (p_action_code = 'GENERATE-ROUTING-RESPONSE') THEN
6470          l_lookup_code:= 'TRIP_GENERATE_ROUTING_RESPONSE'; --??
6471 
6472       ELSIF (p_action_code = 'PRINT-DOC-SETS') THEN
6473          l_lookup_code:= 'TRIP_PRINT_DS';
6474 
6475       ELSIF (p_action_code = 'TRIP-CONFIRM') THEN
6476          l_lookup_code:= 'TRIP_SHIP_CONFIRM';
6477 
6478       ELSIF (p_action_code = 'FIRM') THEN
6479          l_lookup_code:= 'TRIP_FIRM';
6480 
6481       ELSIF (p_action_code = 'PLAN') THEN
6482          l_lookup_code:= 'TRIP_PLAN';
6483 
6484       ELSIF (p_action_code = 'UNPLAN') THEN
6485          l_lookup_code:= 'UNPLAN';
6486 
6487       ELSIF (p_action_code = 'PICK-RELEASE') THEN
6488          l_lookup_code:= 'TRIP_LAUNCH_PR';
6489 
6490       ELSIF (p_action_code = 'WT-VOL') THEN
6491          l_lookup_code:= 'TRIP_CALC_WV';
6492 
6493       ELSIF (p_action_code = 'PICK-RELEASE-UI') THEN
6494          l_lookup_code:= 'TRIP_PR_FORM';
6495 
6496       ELSIF (p_action_code = 'RESOLVE-EXCEPTIONS-UI') THEN
6497          l_lookup_code:= 'TRIP_RESOLVE_EXC';
6498 
6499       ELSIF (p_action_code = 'FREIGHT-COSTS-UI') THEN
6500          l_lookup_code:= 'TRIP_FREIGHT_COSTS';
6501 
6502       ELSIF (p_action_code = 'PRINT-PACK-SLIP') THEN
6503          l_lookup_code:= 'DLVY_GENERATE_PS';
6504 
6505       ELSIF (p_action_code = 'PRINT-BOL') THEN
6506          l_lookup_code:= 'DLVY_GENERATE_BOL';
6507 
6508       ELSIF (p_action_code = 'PRINT-MBOL') THEN
6509          l_lookup_code:= 'TRIP_PRINT_MBOL';
6510 
6511       ELSIF (p_action_code = 'TRIP_LOG_EXCEP') THEN
6512          l_lookup_code:= 'TRIP-LOG-EXCEP';
6513 
6514       ELSIF (p_action_code = 'FTE_LOAD_TENDER') THEN
6515          l_lookup_code:= 'TRIP_LOAD_TENDER'; --??
6516 
6517       ELSIF (p_action_code = 'CREATE') THEN
6518          l_lookup_code:= 'TRIP_CREATE';
6519 
6520       ELSIF (p_action_code = 'DELETE') THEN
6521          l_lookup_code:= 'TRIP_DELETE';
6522 
6523       ELSIF (p_action_code = 'UPDATE') THEN
6524          l_lookup_code:= 'TRIP_UPDATE';
6525 
6526       ELSIF (p_action_code = 'CANCEL') THEN
6527          l_lookup_code:= 'TRIP_CANCEL';
6528       END IF;
6529 
6530    END IF;
6531 
6532 
6533    l_meaning:= Get_Lookup_Meaning(l_lookup_type,l_lookup_code);
6534 
6535    IF l_debug_on THEN
6536       WSH_DEBUG_SV.log(l_module_name,'l_meaning',l_meaning);
6537       WSH_DEBUG_SV.pop(l_module_name);
6538    END IF;
6539 
6540    IF (l_meaning IS NULL) THEN
6541       return p_action_code;
6542    ELSE
6543       return l_meaning;
6544    END IF;
6545 
6546 EXCEPTION
6547   WHEN others THEN
6548    IF l_debug_on THEN
6549       WSH_DEBUG_SV.pop(l_module_name);
6550    END IF;
6551    return p_action_code;
6552 END Get_action_Meaning;
6553 
6554 
6555 --
6556 --Procedure    : Get_idtab_from_string
6557 --Purpose      : Is used to Convert a comma-separated list of Ids of form '1,2,3,4'to
6558 --		 a PL/SQL table numbers;
6559 --
6560 PROCEDURE get_idtab_from_string(
6561 	p_string	 IN	VARCHAR2,
6562 	x_id_tab	 OUT	NOCOPY  WSH_UTIL_CORE.Id_Tab_Type,
6563 	x_return_status  OUT	NOCOPY  VARCHAR2) IS
6564 
6565 	l_new_pos	NUMBER;
6566 	l_old_pos	NUMBER;
6567 	l_id_len	NUMBER;
6568 	l_idx		NUMBER:=0;
6569 
6570 	l_debug_on          CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
6571         l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_idtab_from_string';
6572 BEGIN
6573 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6574 	--
6575 	IF l_debug_on THEN
6576 	      wsh_debug_sv.push (l_module_name);
6577 	END IF;
6578 	--
6579 
6580 	IF (p_string IS NOT NULL) THEN
6581 	   l_old_pos:= 1;
6582 	   LOOP
6583 		l_idx	  := l_idx +1;
6584 		l_new_pos :=INSTR(p_string,',',l_old_pos,1);
6585 		EXIT WHEN (l_new_pos=0);
6586 		l_id_len  := l_new_pos-l_old_pos;
6587 		x_id_tab(l_idx):=TO_NUMBER(SUBSTR(p_string,l_old_pos,l_id_len));
6588 		l_old_pos := l_new_pos +1;
6589 	    END LOOP;
6590 	    x_id_tab(l_idx):= TO_NUMBER(SUBSTR(p_string,l_old_pos,(LENGTH(p_string)-l_old_pos+1)));
6591 	END IF;
6592 
6593 	--
6594 	IF l_debug_on THEN
6595 	      wsh_debug_sv.pop (l_module_name);
6596 	END IF;
6597 	--
6598 
6599 EXCEPTION
6600     WHEN others THEN
6601       WSH_UTIL_CORE.default_handler('WSH_UTIL_CORE.GET_IDTAB_FROM_STRING');
6602       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6603       --
6604       IF l_debug_on THEN
6605         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6606         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6607       END IF;
6608       --
6609 END get_idtab_from_string;
6610 
6611 
6612 --
6613 -- Procedure : Get_string_from_idtab
6614 -- Purpose   : Used to convert a PL/SQL table of numbers to comma-separated list of form '1,2,3,4'
6615 --
6616 
6617 PROCEDURE get_string_from_idtab(
6618 	p_id_tab	 IN 	WSH_UTIL_CORE.Id_Tab_Type,
6619 	x_string	 OUT 	NOCOPY  VARCHAR2,
6620 	x_return_status  OUT	NOCOPY  VARCHAR2) IS
6621 
6622 	l_string	    VARCHAR2(32767);
6623 	l_itr		    NUMBER;
6624 	l_debug_on          CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
6625         l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_string_from_idtab';
6626 BEGIN
6627 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6628 	--
6629 	IF l_debug_on THEN
6630 	      wsh_debug_sv.push (l_module_name);
6631 	END IF;
6632 	--
6633 
6634 	l_itr := p_id_tab.FIRST;
6635 
6636 	IF (l_itr IS NOT NULL) THEN
6637 
6638 	     l_string := p_id_tab(l_itr);
6639 
6640 	     LOOP
6641 
6642 		  EXIT WHEN l_itr = p_id_tab.LAST;
6643 		  l_itr := p_id_tab.NEXT(l_itr);
6644 		  l_string := l_string||','||p_id_tab(l_itr);
6645 
6646 	     END LOOP;
6647 
6648 	END IF;
6649 	x_string := l_string;
6650 
6651 	--
6652 	IF l_debug_on THEN
6653 	      wsh_debug_sv.pop (l_module_name);
6654 	END IF;
6655 	--
6656 
6657 EXCEPTION
6658     WHEN others THEN
6659       WSH_UTIL_CORE.default_handler('WSH_UTIL_CORE.GET_STRING_FROM_IDTAB');
6660       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6661       --
6662       IF l_debug_on THEN
6663         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6664         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6665       END IF;
6666       --
6667 END get_string_from_idtab;
6668 
6669 -- Bug#3947506: Adding a new procedure Get_Entity_name
6670 --========================================================================
6671 -- PROCEDURE : Get_entity_name
6672 --
6673 -- COMMENT   : This procedure will return the entity name for Trip, Stop,
6674 --             Delivery. For Line, Line_id will be returned.
6675 --========================================================================
6676 
6677 PROCEDURE Get_Entity_Name
6678         (p_in_entity_id         in  NUMBER,
6679          p_in_entity_name       in  VARCHAR2,
6680          p_out_entity_id        out NOCOPY VARCHAR2,
6681          p_out_entity_name      out NOCOPY VARCHAR2,
6682          p_return_status        out NOCOPY VARCHAR2
6683         ) IS
6684   l_debug_on BOOLEAN;
6685   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_ACTION_MEANING';
6686 --
6687 BEGIN
6688         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6689 
6690         p_return_status := null;
6691 
6692         IF l_debug_on IS NULL THEN
6693                 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6694         END IF;
6695 
6696         IF l_debug_on THEN
6697                 WSH_DEBUG_SV.push(l_module_name);
6698         END IF;
6699 
6700         IF p_in_entity_name = 'TRIP'
6701         THEN
6702                  p_out_entity_name := 'Trip';
6703                  p_out_entity_id   := nvl(wsh_trips_pvt.get_name(p_in_entity_id), p_in_entity_id);
6704         ELSIF p_in_entity_name = 'STOP'
6705         THEN
6706                  p_out_entity_name := 'Stop';
6707                  p_out_entity_id   := nvl(wsh_trip_stops_pvt.get_name(p_in_entity_id), p_in_entity_id);
6708         ELSIF p_in_entity_name = 'DELIVERY'
6709         THEN
6710                  p_out_entity_name := 'Delivery';
6711                  p_out_entity_id   := nvl(wsh_new_deliveries_pvt.get_name(p_in_entity_id), p_in_entity_id);
6712         ELSIF p_in_entity_name = 'LINE'
6713         THEN
6714                  p_out_entity_name := 'Line';
6715                  p_out_entity_id   := p_in_entity_id;
6716         END IF;
6717 
6718         p_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6719 
6720         IF l_debug_on THEN
6721                 WSH_DEBUG_SV.push(l_module_name);
6722         END IF;
6723 EXCEPTION
6724         WHEN    OTHERS
6725         THEN
6726                 p_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6727                 --
6728                 IF l_debug_on THEN
6729                         WSH_DEBUG_SV.logmsg(l_module_name,'Error has occured. Oracle error message is '|| SQLERRM);
6730                 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6731                 END IF;
6732                 --
6733 END Get_Entity_Name;
6734 
6735 
6736 --Bug 4070732 : The following two prcoedures added for this Bugfix
6737 
6738 --========================================================================
6739 -- PROCEDURE : Process_stops_for_load_tender
6740 --
6741 -- COMMENT   : This procedure will call the WSH_TRIPS_ACTIONS.Fte_Load_Tender
6742 --             for the Stop ID's present in the global cache table
6743 --             G_STOP_IDS_STOP_IDS_CACHE and G_STOP_IDS_STOP_IDS_EXT_CACHE.
6744 --             Once processed, this will call the API Reset_stops_for_load_tender
6745 --             to reset the global variables.
6746 --========================================================================
6747 
6748   PROCEDURE Process_stops_for_load_tender (p_reset_flags IN BOOLEAN,x_return_status OUT NOCOPY VARCHAR2)
6749   IS
6750  -- added stop id for bug 5923014.
6751       cursor c_get_stop_info (c_stop_id NUMBER ) IS
6752       select stop_id,
6753              departure_gross_weight,
6754              departure_net_weight,
6755 	     departure_volume,
6756 	     departure_fill_percent
6757       from   wsh_trip_stops
6758       where  stop_id = c_stop_id;
6759 
6760       l_debug_on           BOOLEAN;
6761       l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||'.' || 'PROCESS_STOPS_FOR_LOAD_TENDER';
6762 
6763       l_stop_id            NUMBER;
6764       l_gross_weight       NUMBER;
6765       l_net_weight         NUMBER;
6766       l_volume             NUMBER;
6767       l_fill_percent       NUMBER;
6768 
6769       j                    NUMBER;
6770       l_ind                NUMBER;
6771       l_return_status      VARCHAR2(30);
6772       l_num_warnings       NUMBER;
6773       l_num_errors         NUMBER;
6774       l_db_stop_id         NUMBER;
6775 
6776 
6777   BEGIN
6778      --
6779      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6780      IF l_debug_on IS NULL
6781      THEN
6782          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6783      END IF;
6784      --
6785      IF l_debug_on THEN
6786        wsh_debug_sv.push (l_module_name);
6787        wsh_debug_sv.log(l_module_name,'p_reset_flags',p_reset_flags);
6788        wsh_debug_sv.log(l_module_name,'count of stops  : ',G_STOP_IDS_STOP_IDS_CACHE.count);
6789        wsh_debug_sv.log(l_module_name,'count of stops2 : ',G_STOP_IDS_STOP_IDS_EXT_CACHE.count);
6790      END IF;
6791      --
6792      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6793      l_num_warnings := 0;
6794      l_num_errors   := 0;
6795      --l_stop_ids_tab.delete;
6796 
6797      --unbundling into a contiguous table
6798      j := 1;
6799      l_ind := G_STOP_IDS_STOP_IDS_CACHE.FIRST;
6800      WHILE l_ind IS NOT NULL
6801      LOOP
6802        l_db_stop_id:= NULL; -- bug 5923014: reset stop id
6803        l_stop_id := G_STOP_IDS_STOP_IDS_CACHE(l_ind).value;
6804        --
6805        IF l_debug_on THEN
6806 	      WSH_DEBUG_SV.log(l_module_name,'Stop ID for FTE_LOAD_TENDER:',l_stop_id);
6807        END IF;
6808        --
6809        --
6810 
6811        open  c_get_stop_info(l_stop_id);
6812 	   fetch c_get_stop_info into l_db_stop_id,l_gross_weight,l_net_weight,l_volume,l_fill_percent;
6813        close c_get_stop_info;
6814 
6815        /* bug 5923014: Do actions only when stop exists in the database so that stop id's maintained in cache are not
6816           validated in Fte_Load_Tender to prevent error message that 'stop has been deleted'. */
6817        IF (l_db_stop_id is not NULL) THEN
6818        --{
6819 
6820           IF l_debug_on THEN
6821               WSH_DEBUG_SV.log(l_module_name,'Stop ID',l_stop_id);
6822               WSH_DEBUG_SV.log(l_module_name,'l_gross_weight',l_gross_weight);
6823               WSH_DEBUG_SV.log(l_module_name,'l_net_weight',l_net_weight);
6824               WSH_DEBUG_SV.log(l_module_name,'l_volume',l_volume);
6825               WSH_DEBUG_SV.log(l_module_name,'l_fill_percent',l_fill_percent);
6826               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Fte_Load_Tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6827           END IF;
6828 
6829 	      WSH_TRIPS_ACTIONS.Fte_Load_Tender(
6830                        p_stop_id       => l_stop_id ,
6831                        p_gross_weight  => l_gross_weight ,
6832                        p_net_weight    => l_net_weight ,
6833                        p_volume        => l_volume ,
6834                        p_fill_percent  => l_fill_percent ,
6835                        x_return_status => l_return_status);
6836 
6837 	      IF l_debug_on THEN
6838                WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6839                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
6840               END IF;
6841 
6842 	       wsh_util_core.api_post_call
6843             (
6844               p_return_status => l_return_status,
6845               x_num_warnings  => l_num_warnings,
6846               x_num_errors    => l_num_errors
6847             );
6848        --}
6849        END IF; -- End of If for bug 5923014;
6850        --
6851        --
6852        l_ind := G_STOP_IDS_STOP_IDS_CACHE.NEXT(l_ind);
6853      END LOOP;
6854      --
6855      --
6856      l_ind := G_STOP_IDS_STOP_IDS_EXT_CACHE.FIRST;
6857      WHILE l_ind IS NOT NULL
6858      LOOP
6859        l_db_stop_id:= NULL; -- bug 5923014: reset stop id
6860        l_stop_id := G_STOP_IDS_STOP_IDS_EXT_CACHE(l_ind).value;
6861        --
6862        IF l_debug_on THEN
6863 	      WSH_DEBUG_SV.log(l_module_name,'Stop ID for FTE_LOAD_TENDER:',l_stop_id);
6864        END IF;
6865        --
6866        --
6867        open  c_get_stop_info(l_stop_id);
6868 	   fetch c_get_stop_info into l_db_stop_id,l_gross_weight,l_net_weight,l_volume,l_fill_percent;
6869 	   close c_get_stop_info;
6870 
6871       /* bug 5923014: Do actions only when stop exists in the database so that stop id's maintained in cache are not
6872           validated in Fte_Load_Tender to prevent error message that 'stop has been deleted'. */
6873       IF (l_db_stop_id is not NULL) THEN
6874        --{
6875 
6876          IF l_debug_on THEN
6877               WSH_DEBUG_SV.log(l_module_name,'Stop ID',l_stop_id);
6878               WSH_DEBUG_SV.log(l_module_name,'l_gross_weight',l_gross_weight);
6879               WSH_DEBUG_SV.log(l_module_name,'l_net_weight',l_net_weight);
6880               WSH_DEBUG_SV.log(l_module_name,'l_volume',l_volume);
6881               WSH_DEBUG_SV.log(l_module_name,'l_fill_percent',l_fill_percent);
6882               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Fte_Load_Tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6883           END IF;
6884 
6885 	      WSH_TRIPS_ACTIONS.Fte_Load_Tender(
6886                        p_stop_id       => l_stop_id ,
6887                        p_gross_weight  => l_gross_weight ,
6888                        p_net_weight    => l_net_weight ,
6889                        p_volume        => l_volume ,
6890                        p_fill_percent  => l_fill_percent ,
6891                        x_return_status => l_return_status);
6892 
6893 	      IF l_debug_on THEN
6894                WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6895                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
6896           END IF;
6897 
6898 	      wsh_util_core.api_post_call
6899             (
6900               p_return_status => l_return_status,
6901               x_num_warnings  => l_num_warnings,
6902               x_num_errors    => l_num_errors
6903             );
6904           --
6905           --
6906        --}
6907        END IF; -- End If for bug 5923014
6908        l_ind := G_STOP_IDS_STOP_IDS_EXT_CACHE.NEXT(l_ind);
6909      END LOOP;
6910 
6911      IF l_debug_on THEN
6912           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6913      END IF;
6914 
6915 
6916      --call to reset the global cache tables
6917      WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags,x_return_status => l_return_status);
6918 
6919      IF l_debug_on THEN
6920          WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6921          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
6922      END IF;
6923 
6924      wsh_util_core.api_post_call
6925        (
6926         p_return_status => l_return_status,
6927         x_num_warnings  => l_num_warnings,
6928         x_num_errors    => l_num_errors
6929        );
6930 
6931 
6932      IF l_num_warnings > 0
6933      THEN
6934         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6935      ELSE
6936         x_return_status  := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6937      END IF;
6938 
6939      IF l_debug_on THEN
6940         WSH_DEBUG_SV.pop(l_module_name);
6941      END IF;
6942 
6943 
6944   EXCEPTION
6945     WHEN FND_API.G_EXC_ERROR THEN
6946        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6947        --
6948        -- Debug Statements
6949        --
6950        IF l_debug_on THEN
6951           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6952           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6953        END IF;
6954        --
6955         --call to reset the global cache tables
6956         WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags,x_return_status => l_return_status);
6957 
6958         IF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
6959 	THEN
6960             x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6961 	END IF;
6962        --
6963        IF l_debug_on THEN
6964           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
6965        END IF;
6966 
6967 
6968      WHEN others THEN
6969         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6970 
6971        IF l_debug_on THEN
6972            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6973           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6974        END IF;
6975        --
6976         --call to reset the global cache tables
6977         WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags,x_return_status => l_return_status);
6978 
6979         IF l_debug_on THEN
6980            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6981         END IF;
6982         --
6983 
6984   END Process_stops_for_load_tender;
6985 
6986 
6987 --========================================================================
6988 -- PROCEDURE : Reset_stops_for_load_tender
6989 --
6990 -- COMMENT   : This procedure will delete the contents of the gloabal cache
6991 --             tables  G_STOP_IDS_STOP_IDS_CACHE and G_STOP_IDS_STOP_IDS_EXT_CACHE
6992 --             and also set the Boolean Global Variable G_CALL_FTE_LOAD_TENDER_API
6993 --             to TRUE.
6994 --========================================================================
6995 
6996   PROCEDURE Reset_stops_for_load_tender (p_reset_flags IN BOOLEAN,x_return_status OUT NOCOPY VARCHAR2)
6997   IS
6998 
6999 
7000       l_debug_on BOOLEAN;
7001       l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||'.' || 'RESET_STOPS_FOR_LOAD_TENDER';
7002 
7003 
7004   BEGIN
7005      --
7006      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7007      IF l_debug_on IS NULL
7008      THEN
7009          l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7010      END IF;
7011      --
7012      IF l_debug_on THEN
7013        wsh_debug_sv.push (l_module_name);
7014        wsh_debug_sv.log(l_module_name,'p_reset_flags',p_reset_flags);
7015      END IF;
7016      --
7017      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7018      --
7019      G_STOP_IDS_STOP_IDS_CACHE.delete;
7020      G_STOP_IDS_STOP_IDS_EXT_CACHE.delete;
7021      --
7022      IF p_reset_flags THEN
7023        G_CALL_FTE_LOAD_TENDER_API := TRUE;
7024        G_START_OF_SESSION_API := null;
7025      END IF;
7026 
7027      IF l_debug_on THEN
7028         WSH_DEBUG_SV.pop(l_module_name);
7029      END IF;
7030 
7031 
7032   EXCEPTION
7033 
7034 
7035      WHEN others THEN
7036         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7037         --WSH_UTIL_CORE.Println('Unexpected Error in WSH_UTIL_CORE.Reset_stops_for_load_tender');
7038         --
7039         -- Debug Statements
7040         --
7041         IF l_debug_on THEN
7042            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7043            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7044         END IF;
7045         --
7046 
7047   END Reset_stops_for_load_tender;
7048 
7049 
7050 
7051 /*======================================================================
7052 FUNCTION : ValidateActualDepartureDate
7053 
7054 COMMENT : This function is called from the following places
7055           - WSHASCSRS concurrent program
7056           - WSHPSRS concurrent program
7057           - WSHPRREL library
7058 
7059           This function checks whether users can enter a future date for
7060           the Actual Departure Date parameter/field.
7061           This function returns
7062           - FALSE : if Global parameter Allow Future Ship Date = 'N'
7063                 and Ship Confirm Rule indicates Set Delivery Intransit
7064                 and Actual Departure Date is > SYSDATE
7065           - TRUE : under all other conditions
7066 
7067 HISTORY : rlanka    03/01/2005    Created
7068 =======================================================================*/
7069 FUNCTION ValidateActualDepartureDate(p_ship_confirm_rule_id IN NUMBER,
7070                                      p_actual_departure_date IN DATE)
7071 RETURN BOOLEAN IS
7072   --
7073   l_global_params   WSH_SHIPPING_PARAMS_GRP.Global_Params_Rec;
7074   l_return_status   VARCHAR2(1);
7075   v_ACIntransitFlag VARCHAR2(1);
7076   --
7077   l_debug_on BOOLEAN;
7078   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ValidateActualDepartureDate';
7079   --
7080 BEGIN
7081   --
7082   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7083   --
7084   IF l_debug_on IS NULL THEN
7085    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7086   END IF;
7087   --
7088   IF l_debug_on THEN
7089    WSH_DEBUG_SV.push(l_module_name);
7090    WSH_DEBUG_SV.log(l_module_name,'Ship Confirm Rule', p_ship_confirm_rule_id);
7091    WSH_DEBUG_SV.log(l_module_name,'Actual Departure Date',  to_char(p_actual_departure_date,'DD/MM/YYYY HH24:MI:SS'));
7092   END IF;
7093   --
7094 
7095   -- Bug 4712256
7096 
7097   IF p_ship_confirm_rule_id IS NULL THEN
7098 
7099     IF l_debug_on THEN
7100      WSH_DEBUG_SV.pop(l_module_name, 'Returning TRUE');
7101     END IF;
7102 
7103      return TRUE;
7104 
7105   END IF;
7106 
7107   SELECT ac_intransit_flag
7108   INTO v_ACIntransitFlag
7109   FROM WSH_SHIP_CONFIRM_RULES
7110   WHERE ship_confirm_rule_id = p_ship_confirm_rule_id;
7111   --
7112   IF l_debug_on THEN
7113    WSH_DEBUG_SV.log(l_module_name, 'AC Intransit Flag', v_ACIntransitFlag);
7114   END IF;
7115   --
7116   IF v_ACIntransitFlag = 'Y' THEN
7117    --{
7118    WSH_SHIPPING_PARAMS_GRP.get_global_parameters(l_global_params,
7119                                                 l_return_status);
7120    --
7121    IF l_global_params.allow_future_ship_date = 'N' AND p_actual_departure_date > SYSDATE
7122    THEN
7123     --
7124     IF l_debug_on THEN
7125      WSH_DEBUG_SV.pop(l_module_name, 'Returning FALSE');
7126     END IF;
7127     --
7128     RETURN FALSE;
7129     --
7130    ELSE
7131     --
7132     IF l_debug_on THEN
7133      WSH_DEBUG_SV.pop(l_module_name, 'Returning TRUE');
7134     END IF;
7135     --
7136     RETURN TRUE;
7137     --
7138    END IF;
7139    --}
7140   ELSE
7141     --
7142     IF l_debug_on THEN
7143      WSH_DEBUG_SV.pop(l_module_name, 'Returning TRUE');
7144     END IF;
7145     --
7146     RETURN TRUE;
7147     --
7148   END IF;
7149   --
7150   EXCEPTION
7151    --
7152    WHEN OTHERS THEN
7153     --
7154     WSH_UTIL_CORE.default_handler('ValidateActualDepartureDate');
7155     --
7156     IF l_debug_on THEN
7157      WSH_DEBUG_SV.pop(l_module_name, 'Exception: WHEN OTHERS');
7158     END IF;
7159     --
7160     RETURN FALSE;
7161     --
7162 END ValidateActualDepartureDate;
7163 
7164 
7165 
7166 
7167 /*=====================================================================
7168 FUNCTION : GetShipConfirmRule
7169 
7170 COMMENT : This function is called from
7171           - WSHPSRS concurrent program
7172 
7173           This function is used to obtain the Ship Confirm Rule tied
7174           to a particular picking rule.  This function is used to
7175           populate a hidden parameter "Ship Confirm Rule ID" in WSHPSRS
7176           concurrent program.
7177 
7178 HISTORY : rlanka    03/01/2005    Created
7179 =======================================================================*/
7180 FUNCTION GetShipConfirmRule(p_picking_rule_id IN NUMBER) RETURN NUMBER IS
7181   --
7182   v_SCRuleID wsh_picking_rules.ship_confirm_rule_id%TYPE;
7183   l_debug_on BOOLEAN;
7184   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GetShipConfirmRule';
7185   --
7186 BEGIN
7187   --
7188   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7189   --
7190   IF l_debug_on IS NULL THEN
7191    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7192   END IF;
7193   --
7194   IF l_debug_on THEN
7195    WSH_DEBUG_SV.push(l_module_name);
7196    WSH_DEBUG_SV.log(l_module_name,'p_picking_rule_id', p_picking_rule_id);
7197   END IF;
7198   --
7199   SELECT ship_confirm_rule_id
7200   INTO v_SCRuleID
7201   FROM wsh_picking_rules
7202   WHERE picking_rule_id = p_picking_rule_id;
7203   --
7204   IF l_debug_on THEN
7205    WSH_DEBUG_SV.log(l_module_name, 'Ship Confirm Rule', v_SCRuleID);
7206   END IF;
7207   --
7208   IF v_SCRuleID is NOT NULL THEN
7209    --
7210    IF l_debug_on THEN
7211      WSH_DEBUG_SV.pop(l_module_name);
7212    END IF;
7213    --
7214    RETURN v_SCRuleID;
7215    --
7216   ELSE
7217    --
7218    IF l_debug_on THEN
7219      WSH_DEBUG_SV.pop(l_module_name);
7220    END IF;
7221    --
7222    RETURN NULL;
7223    --
7224   END IF;
7225   --
7226   IF l_debug_on THEN
7227    WSH_DEBUG_SV.pop(l_module_name);
7228   END IF;
7229   --
7230   EXCEPTION
7231    --
7232    WHEN OTHERS THEN
7233     --
7234     WSH_UTIL_CORE.default_handler('GetShipConfirmRule');
7235     --
7236     IF l_debug_on THEN
7237      WSH_DEBUG_SV.pop(l_module_name, 'Exception: WHEN OTHERS');
7238     END IF;
7239     --
7240     RETURN NULL;
7241     --
7242 END GetShipConfirmRule;
7243 
7244 FUNCTION WMS_Is_Installed
7245   RETURN VARCHAR2
7246 IS
7247   l_wms_application_id constant number := 385;
7248   l_wms_install_status  VARCHAR2(30);
7249   l_industry            VARCHAR2(30);
7250   --
7251   l_debug_on BOOLEAN;
7252   --
7253   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'WMS_IS_INSTALLED';
7254   --
7255 BEGIN
7256 
7257         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7258         --
7259         IF l_debug_on IS NULL
7260         THEN
7261             l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7262         END IF;
7263         --
7264         IF l_debug_on THEN
7265             WSH_DEBUG_SV.push(l_module_name);
7266         END IF;
7267         --
7268         IF G_WMS_IS_INSTALLED is NULL THEN
7269            IF (fnd_installation.get(l_wms_application_id, l_wms_application_id,l_wms_install_status,l_industry)) THEN
7270                IF (l_wms_install_status = 'I') THEN
7271                    G_WMS_IS_INSTALLED := 'Y';
7272                ELSE
7273                    G_WMS_IS_INSTALLED := 'N';
7274                END IF;
7275             ELSE
7276 		   /* this happens only when invalid application id is passed */
7277                G_WMS_IS_INSTALLED := 'N';
7278 	    END IF;
7279         END IF;
7280 
7281 	--
7282 	-- Debug Statements
7283 	--
7284 	IF l_debug_on THEN
7285 	    WSH_DEBUG_SV.log(l_module_name,'G_WMS_IS_INSTALLED',G_WMS_IS_INSTALLED);
7286 	    WSH_DEBUG_SV.pop(l_module_name);
7287 	END IF;
7288 	--
7289 	return G_WMS_IS_INSTALLED;
7290 
7291   EXCEPTION
7292     WHEN OTHERS THEN
7293         IF l_debug_on THEN
7294            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7295            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7296         END IF;
7297         --
7298         RETURN 'N';
7299 
7300 END WMS_Is_Installed;
7301 
7302 --***************************************************************************--
7303 --========================================================================
7304 -- PROCEDURE : get_customer_from_loc      PRIVATE
7305 --
7306 -- PARAMETERS: p_location_id              Input Location id
7307 --             x_customer_id              Carrier at the input location
7308 --             x_return_status            Return status
7309 -- COMMENT   :
7310 -- Returns the customer id of the customer
7311 -- having a location at input wsh location id
7312 --========================================================================
7313 
7314 PROCEDURE get_customer_from_loc(
7315               p_location_id    IN  NUMBER,
7316               --x_customer_id     OUT NOCOPY  NUMBER,
7317               x_customer_id_tab     OUT NOCOPY  WSH_UTIL_CORE.id_tab_type,
7318               x_return_status  OUT NOCOPY  VARCHAR2)
7319 IS
7320 
7321     CURSOR c_get_customer(c_location_id IN NUMBER) IS
7322     SELECT hcas.cust_account_id
7323     FROM   wsh_locations wl,
7324            hz_party_sites hps,
7325            hz_cust_acct_sites_all hcas
7326     WHERE  wl.wsh_location_id = c_location_id
7327     AND    wl.location_source_code = 'HZ'
7328     AND    wl.source_location_id = hps.location_id
7329     AND    hps.party_site_id = hcas.party_site_id;
7330 
7331     l_customer_id_tab   WSH_UTIL_CORE.id_tab_type;
7332     itr                    NUMBER := 0;
7333     i                      NUMBER := 0;
7334     l_return_status        VARCHAR2(1);
7335     l_cust_string          VARCHAR2(2000);
7336 
7337     l_debug_on    CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
7338     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_customer_from_loc';
7339 
7340 BEGIN
7341 
7342     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7343 
7344     IF l_debug_on THEN
7345        wsh_debug_sv.push(l_module_name);
7346     END IF;
7347 
7348     IF ( p_location_id < g_cache_max_size  and g_customer_from_location.EXISTS(p_location_id)) THEN
7349 
7350 	wsh_util_core.get_idtab_from_string(
7351         	p_string	 => g_customer_from_location(p_location_id),
7352 		x_id_tab	 => l_customer_id_tab,
7353 		x_return_status  => l_return_status);
7354 
7355 	IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7356   	    raise FND_API.G_EXC_UNEXPECTED_ERROR;
7357 	END IF;
7358 
7359 	itr := l_customer_id_tab.FIRST;
7360 
7361 	IF (l_customer_id_tab(itr) <> -1) THEN
7362 
7363 	   x_customer_id_tab:=l_customer_id_tab;
7364 
7365 	END IF;
7366 
7367 	/*IF l_debug_on THEN
7368 	   wsh_debug_sv.push(l_module_name);
7369 	END IF;*/
7370 
7371 /*
7372 	x_customer_id := g_customer_from_location(p_location_id);
7373 
7374 	IF (x_customer_id = -1) THEN
7375 		x_customer_id := NULL;
7376 	END IF;
7377 */
7378     ELSE
7379 
7380 	--Does not exist in the cache.
7381 	OPEN c_get_customer(p_location_id);
7382 	FETCH c_get_customer BULK COLLECT INTO l_customer_id_tab;
7383 /*
7384 	IF c_get_customer%NOTFOUND THEN
7385 		 x_customer_id := NULL;
7386 	END IF;
7387 */
7388 	CLOSE c_get_customer;
7389 
7390 	x_customer_id_tab := l_customer_id_tab;
7391 
7392 	IF (p_location_id < g_cache_max_size ) THEN
7393 
7394 	  itr:=l_customer_id_tab.FIRST;
7395 
7396 	  IF (itr) IS NULL THEN
7397 	        l_cust_string := '-1';
7398 	  ELSE
7399 
7400 	     wsh_util_core.get_string_from_idtab(
7401 	    	p_id_tab	 => l_customer_id_tab,
7402 		x_string	 => l_cust_string,
7403 		x_return_status  => l_return_status);
7404 
7405 	     IF l_debug_on THEN
7406 		 WSH_DEBUG_SV.logmsg(l_module_name,'Org String '||l_cust_string);
7407 	     END IF;
7408 
7409 	     IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7410   		 raise FND_API.G_EXC_UNEXPECTED_ERROR;
7411   	     END IF;
7412 
7413 	  END IF;
7414 
7415 	  g_customer_from_location(p_location_id) := l_cust_string;
7416 
7417 	END IF;
7418 
7419 /*
7420 	IF (p_location_id < g_cache_max_size ) THEN
7421 	   g_customer_from_location(p_location_id) := nvl(x_customer_id,-1);
7422 	END IF;
7423 */
7424 
7425     END IF;
7426 
7427     --
7428     IF l_debug_on THEN
7429 	i := x_customer_id_tab.FIRST;
7430 	IF (i IS NOT NULL) THEN
7431 
7432 	    WSH_DEBUG_SV.logmsg(l_module_name,'Number of Customers for the location '||p_location_id||'is :'|| x_customer_id_tab.COUNT);
7433 	    LOOP
7434 	       WSH_DEBUG_SV.logmsg(l_module_name,'Customer_id :'||x_customer_id_tab(i));
7435                EXIT WHEN i = x_customer_id_tab.LAST;
7436 	       i  := x_customer_id_tab.NEXT(i);
7437 	    END LOOP;
7438 
7439 	ELSE
7440 	    WSH_DEBUG_SV.logmsg(l_module_name,'No Organization assocaited with location '||p_location_id);
7441 
7442 	END IF;
7443 
7444       WSH_DEBUG_SV.pop(l_module_name);
7445     END IF;
7446     --
7447 
7448 EXCEPTION
7449     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7450 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7451         --
7452         IF l_debug_on THEN
7453             WSH_DEBUG_SV.pop(l_module_name,'FND_API.EXCEPTION:G_EXC_UNEXPECTED_ERROR');
7454         END IF;
7455     WHEN others THEN
7456       IF c_get_customer%ISOPEN THEN
7457          CLOSE c_get_customer;
7458       END IF;
7459       WSH_UTIL_CORE.default_handler('WSH_UTIL_CORE.get_customer_from_loc');
7460       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7461       --
7462       IF l_debug_on THEN
7463         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7464         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7465       END IF;
7466       --
7467 END get_customer_from_loc;
7468 
7469 --***************************************************************************--
7470 --========================================================================
7471 -- PROCEDURE : get_org_from_location      PRIVATE
7472 --
7473 -- PARAMETERS: p_location_id              Input Location id
7474 --             x_organization_tab         Organizations for the input location
7475 --             x_return_status            Return status
7476 -- COMMENT   :
7477 --	       Returns table of organizations for location.
7478 --========================================================================
7479 PROCEDURE get_org_from_location(
7480          p_location_id	       IN  NUMBER,
7481          x_organization_tab    OUT NOCOPY  WSH_UTIL_CORE.id_tab_type,
7482          x_return_status       OUT NOCOPY  VARCHAR2)
7483 IS
7484 /*
7485 	CURSOR c_get_org_from_loc(c_location_id IN NUMBER) IS
7486 	SELECT owner_party_id
7487 	FROM   wsh_location_owners
7488 	WHERE  owner_type = 1
7489         AND    wsh_location_id = c_location_id
7490 	AND    owner_party_id <> -1 ;
7491 */
7492 	CURSOR c_get_org_from_loc(c_location_id IN NUMBER) IS
7493         SELECT organization_id
7494         FROM   wsh_ship_from_orgs_v
7495         WHERE  location_id = c_location_id;
7496 
7497 	l_organization_tab	WSH_UTIL_CORE.id_tab_type;
7498 
7499 	itr			NUMBER;
7500 	i			NUMBER;
7501 	l_return_status		VARCHAR2(1);
7502 	l_org_string		VARCHAR2(32767);
7503 
7504 	l_debug_on		CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
7505         l_module_name		CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_org_from_location';
7506 
7507 BEGIN
7508    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7509 
7510    IF l_debug_on THEN
7511        wsh_debug_sv.push(l_module_name);
7512    END IF;
7513 
7514    IF (p_location_id < g_cache_max_size and g_organization_from_location.EXISTS(p_location_id)) THEN
7515 
7516 	wsh_util_core.get_idtab_from_string(
7517         	p_string	 => g_organization_from_location(p_location_id),
7518 		x_id_tab	 => l_organization_tab,
7519 		x_return_status  => l_return_status);
7520 
7521 	IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7522   	    raise FND_API.G_EXC_UNEXPECTED_ERROR;
7523 	END IF;
7524 
7525 	itr := l_organization_tab.FIRST;
7526 
7527 	IF (l_organization_tab(itr) <> -1) THEN
7528 
7529 	   x_organization_tab:=l_organization_tab;
7530 
7531 	END IF;
7532 
7533 	/*IF l_debug_on THEN
7534 	   wsh_debug_sv.push(l_module_name);
7535 	END IF;*/
7536 
7537     ELSE
7538 
7539 	--Does not exist in the cache.
7540 	OPEN  c_get_org_from_loc(p_location_id);
7541 	FETCH c_get_org_from_loc BULK COLLECT INTO l_organization_tab;
7542 	CLOSE c_get_org_from_loc;
7543 
7544 	x_organization_tab := l_organization_tab;
7545 
7546 	IF (p_location_id < g_cache_max_size ) THEN
7547 
7548 	  itr:=l_organization_tab.FIRST;
7549 
7550 	  IF (itr) IS NULL THEN
7551 	        l_org_string := '-1';
7552 	  ELSE
7553 
7554 	     wsh_util_core.get_string_from_idtab(
7555 	    	p_id_tab	 => l_organization_tab,
7556 		x_string	 => l_org_string,
7557 		x_return_status  => l_return_status);
7558 
7559 	     IF l_debug_on THEN
7560 		 WSH_DEBUG_SV.logmsg(l_module_name,'Org String '||l_org_string);
7561 	     END IF;
7562 
7563 	     IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7564   		 raise FND_API.G_EXC_UNEXPECTED_ERROR;
7565   	     END IF;
7566 
7567 	  END IF;
7568 
7569 	  g_organization_from_location(p_location_id) := l_org_string;
7570 
7571 	END IF;
7572 
7573       END IF;
7574 
7575       -- BUG 4120043 : Replaced FOR loop by iteration using NEXT.
7576       IF l_debug_on THEN
7577 
7578 	i := x_organization_tab.FIRST;
7579 	IF (i IS NOT NULL) THEN
7580 
7581 	    WSH_DEBUG_SV.logmsg(l_module_name,'Number of Organizations for the location '||p_location_id||'is :'|| x_organization_tab.COUNT);
7582 	    LOOP
7583 	       WSH_DEBUG_SV.logmsg(l_module_name,'Organization_id :'||x_organization_tab(i));
7584                EXIT WHEN i = x_organization_tab.LAST;
7585 	       i  := x_organization_tab.NEXT(i);
7586 	    END LOOP;
7587 
7588 	ELSE
7589 	    WSH_DEBUG_SV.logmsg(l_module_name,'No Organization assocaited with location '||p_location_id);
7590 
7591 	END IF;
7592 
7593 	WSH_DEBUG_SV.pop(l_module_name);
7594 
7595       END IF;
7596       --
7597 
7598 EXCEPTION
7599     WHEN others THEN
7600       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7601 
7602       IF c_get_org_from_loc%ISOPEN THEN
7603          CLOSE c_get_org_from_loc;
7604       END IF;
7605 
7606       WSH_UTIL_CORE.default_handler('WSH_UTIL_CORE.get_org_from_loc');
7607 
7608       --
7609       IF l_debug_on THEN
7610         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7611         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7612       END IF;
7613       --
7614 END get_org_from_location;
7615 
7616 --========================================================================
7617 -- PROCEDURE : Get_Delivery_Status    PRIVATE
7618 --
7619 -- PARAMETERS:
7620 --     p_entity_type         either DELIVERY/DELIVERY DETAIL/LPN
7621 --     p_entity_id           either delivery_id/delivery_detail_id/lpn_id
7622 --     x_status_code         Status of delivery for the entity_type and
7623 --                           entity id passed
7624 --     x_return_status       return status
7625 --========================================================================
7626 PROCEDURE Get_Delivery_Status (
7627           p_entity_type    IN   VARCHAR2,
7628           p_entity_id      IN   NUMBER,
7629           x_status_code    OUT NOCOPY VARCHAR2,
7630           x_return_status  OUT NOCOPY VARCHAR2 )
7631 IS
7632     --
7633     -- Entity Type => Delivery
7634     cursor c_get_delivery_status( c_delivery_id NUMBER) is
7635     select status_code
7636     from   wsh_new_deliveries
7637     where  delivery_id = c_delivery_id;
7638 
7639     -- Entity Type => Delivery Detail
7640     cursor c_get_detail_status( c_delivery_detail_id NUMBER) is
7641     select status_code
7642     from   wsh_new_deliveries       wnd,
7643            wsh_delivery_assignments_v wda
7644     where  wnd.delivery_id (+) = wda.delivery_id
7645     and    wda.delivery_detail_id = c_delivery_detail_id;
7646 
7647     -- Entity Type => LPN
7648     -- Modified query for bug 4990527 as per WMS requirement
7649     cursor c_get_lpn_delivery_status( c_lpn_id NUMBER) is
7650     select distinct wnd.delivery_id, wnd.status_code
7651     from   wsh_new_deliveries       wnd,
7652            wsh_delivery_assignments_v wda,
7653            wsh_delivery_details     wdd
7654     where  wnd.delivery_id (+) = wda.delivery_id
7655     and    wda.delivery_detail_id = wdd.delivery_detail_id
7656     --LPN Reuse project
7657     and    wdd.released_status = 'X'
7658     and    wdd.lpn_id in
7659            ( select wlpn.lpn_id
7660                from wms_license_plate_numbers wlpn
7661               where wlpn.outermost_lpn_id = c_lpn_id );
7662     --
7663 
7664     l_delivery_id  WSH_NEW_DELIVERIES.Delivery_Id%TYPE;
7665     l_status_code  WSH_NEW_DELIVERIES.Status_Code%TYPE;
7666     l_error_flag   BOOLEAN := FALSE;
7667 
7668     --
7669     l_debug_on BOOLEAN;
7670     --
7671     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_STATUS';
7672     --
7673 BEGIN
7674     --
7675     --
7676     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7677     --
7678     IF l_debug_on IS NULL
7679     THEN
7680         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7681     END IF;
7682     --
7683     IF l_debug_on THEN
7684         --
7685         WSH_DEBUG_SV.push(l_module_name);
7686         WSH_DEBUG_SV.log(l_module_name, 'p_entity_type', p_entity_type);
7687         WSH_DEBUG_SV.log(l_module_name, 'p_entity_id', p_entity_id);
7688         --
7689     END IF;
7690     --
7691     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7692     --
7693 
7694     IF ( p_entity_type = 'DELIVERY' ) THEN
7695         --
7696         open c_get_delivery_status(p_entity_id);
7697         fetch c_get_delivery_status into l_status_code;
7698 
7699         IF ( c_get_delivery_status%NOTFOUND ) THEN
7700             --
7701             l_error_flag := TRUE;
7702             --
7703         END IF;
7704 
7705         close c_get_delivery_status;
7706         --
7707     ELSIF ( p_entity_type = 'DELIVERY DETAIL' ) then
7708         --
7709         open c_get_detail_status(p_entity_id);
7710         fetch c_get_detail_status into l_status_code;
7711 
7712         IF ( c_get_detail_status%NOTFOUND ) then
7713             --
7714             l_error_flag := TRUE;
7715             --
7716         END IF;
7717         close c_get_detail_status;
7718         --
7719     ELSIF ( p_entity_type = 'LPN' ) then
7720         --
7721         open c_get_lpn_delivery_status(p_entity_id);
7722         fetch c_get_lpn_delivery_status into l_delivery_id, l_status_code;
7723 
7724         IF ( c_get_lpn_delivery_status%NOTFOUND ) then
7725             --
7726             l_error_flag := TRUE;
7727             --
7728             IF l_debug_on THEN
7729                 WSH_DEBUG_SV.log(l_module_name, 'Error: Delivery line not found for LPN_ID', p_entity_id);
7730             END IF;
7731             --
7732         END IF;
7733 
7734         IF ( NOT l_error_flag ) THEN
7735             fetch c_get_lpn_delivery_status into l_delivery_id, l_status_code;
7736             IF ( c_get_lpn_delivery_status%FOUND ) THEN
7737                 --
7738                 l_error_flag := TRUE;
7739                 --
7740                 IF l_debug_on THEN
7741                     WSH_DEBUG_SV.log(l_module_name, 'Error: There exists more than one delivery for LPN_ID', p_entity_id);
7742                 END IF;
7743                 --
7744              END IF;
7745         END IF;
7746 
7747         close c_get_lpn_delivery_status;
7748         --
7749     ELSE
7750         --
7751         -- Debug Statements
7752         --
7753         IF l_debug_on THEN
7754             WSH_DEBUG_SV.logmsg(l_module_name,'Invalid Entity Type Passed');
7755         END IF;
7756         --
7757         FND_MESSAGE.SET_NAME ( 'WSH', 'WSH_INVALID_ENTITY_TYPE' );
7758         FND_MESSAGE.SET_TOKEN ('ENT_TYPE', p_entity_type );
7759         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7760         WSH_UTIL_CORE.add_message(x_return_status);
7761         --
7762     END IF;
7763 
7764     --
7765     x_status_code := l_status_code;
7766     --
7767 
7768     IF ( l_error_flag ) THEN
7769         --
7770         FND_MESSAGE.SET_NAME ( 'WSH', 'WSH_DET_INVALID_DEL' );
7771         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7772         WSH_UTIL_CORE.add_message(x_return_status);
7773         --
7774     END IF;
7775 
7776     --
7777     IF l_debug_on THEN
7778         --
7779         WSH_DEBUG_SV.pop(l_module_name);
7780         --
7781     END IF;
7782     --
7783 
7784 EXCEPTION
7785     WHEN OTHERS THEN
7786         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7787         wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.Get_Delivery_Status');
7788         --
7789         IF l_debug_on THEN
7790             WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM, WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7791             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:OTHERS');
7792         END IF;
7793         --
7794         IF ( c_get_delivery_status%ISOPEN ) THEN
7795             close c_get_delivery_status;
7796         END IF;
7797         --
7798         IF ( c_get_detail_status%ISOPEN ) THEN
7799             close c_get_detail_status;
7800         END IF;
7801         --
7802         IF ( c_get_lpn_delivery_status%ISOPEN ) THEN
7803             close c_get_lpn_delivery_status;
7804         END IF;
7805         --
7806 END Get_Delivery_Status;
7807 
7808 -- OTM R12
7809 
7810 --***************************************************************************--
7811 --
7812 -- Name         Get_Otm_Install_Profile_Value
7813 -- Purpose      This function returns the value of
7814 --                            profile WSH_OTM_INSTALLED
7815 --              It returns 'P' if OTM is integrated for Inbound Purchasing
7816 --                         'O' if OTM is integrated for Outbound Sales Order
7817 --                         'Y' if OTM is integrated for both of the above
7818 --                         'N' if OTM is integrated for non of the above
7819 --                             or if the profile value is NULL
7820 --
7821 -- Input Arguments
7822 --              No input argument
7823 --
7824 --***************************************************************************--
7825 
7826 FUNCTION Get_Otm_Install_Profile_Value RETURN VARCHAR2 IS
7827 
7828   l_debug_on      BOOLEAN;
7829   l_module_name   CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Get_Otm_Install_Profile_Value';
7830   --
7831 BEGIN
7832   --
7833   -- Debug Statements
7834   --
7835   --
7836   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7837   --
7838   IF l_debug_on IS NULL
7839   THEN
7840     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7841   END IF;
7842   --
7843   IF l_debug_on THEN
7844     WSH_DEBUG_SV.push(l_module_name);
7845   END IF;
7846   --
7847 
7848   IF G_OTM_PROFILE_VALUE IS NULL THEN
7849     -- profile value can be 'Y','N','O','P' or NULL
7850     G_OTM_PROFILE_VALUE := NVL(fnd_profile.value('WSH_OTM_INSTALLED'), 'N');
7851   END IF;
7852 
7853   IF l_debug_on THEN
7854     WSH_DEBUG_SV.log(l_module_name,'G_OTM_PROFILE_VALUE',G_OTM_PROFILE_VALUE);
7855     WSH_DEBUG_SV.pop(l_module_name);
7856   END IF;
7857 
7858   return G_OTM_PROFILE_VALUE;
7859 END Get_Otm_Install_Profile_Value;
7860 
7861 --***************************************************************************--
7862 --
7863 -- Name         GC3_Is_Installed
7864 -- Purpose      This function returns whether OTM is integrated for
7865 --                            Outbound Sales Order flow by looking at the
7866 --                            value of profile WSH_OTM_INSTALLED
7867 --              It returns 'Y' if OTM is integrated for Outbound Sales Order
7868 --                         'N' otherwise
7869 --
7870 -- Input Arguments
7871 --              No input argument
7872 --
7873 --***************************************************************************--
7874 
7875 FUNCTION GC3_Is_Installed RETURN VARCHAR2 IS
7876 
7877   l_debug_on      BOOLEAN;
7878   l_module_name   CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GC3_IS_INSTALLED';
7879   --
7880 BEGIN
7881   --
7882   -- Debug Statements
7883   --
7884   --
7885   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7886   --
7887   IF l_debug_on IS NULL THEN
7888     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7889   END IF;
7890   --
7891   IF l_debug_on THEN
7892     WSH_DEBUG_SV.push(l_module_name);
7893   END IF;
7894   --
7895 
7896   IF G_GC3_IS_INSTALLED IS NULL THEN
7897     -- G_OTM_PROFILE_VALUE might be set in Get_Otm_Install_Profile_Value
7898     IF G_OTM_PROFILE_VALUE IS NULL THEN
7899       G_OTM_PROFILE_VALUE := NVL(fnd_profile.value('WSH_OTM_INSTALLED'), 'N');
7900     END IF;
7901 
7902     IF G_OTM_PROFILE_VALUE in ('Y','O') THEN
7903       G_GC3_IS_INSTALLED := 'Y';
7904     ELSE -- G_OTM_PROFILE_VALUE can be 'P' or 'N'
7905       G_GC3_IS_INSTALLED := 'N';
7906     END IF;
7907   END IF;
7908   --
7909   -- Debug Statements
7910   --
7911   IF l_debug_on THEN
7912     WSH_DEBUG_SV.log(l_module_name,'G_GC3_IS_INSTALLED',G_GC3_IS_INSTALLED);
7913     WSH_DEBUG_SV.pop(l_module_name);
7914   END IF;
7915   --
7916   return G_GC3_IS_INSTALLED;
7917 END GC3_Is_Installed;
7918 
7919 --=======================================================================
7920 
7921 --***************************************************************************--
7922 --
7923   --========================================================================
7924   -- PROCEDURE : GET_CURRENCY_CONVERSION_TYPE
7925   --
7926   --             API added for R12 Glog Integration Currency Conversion ECO
7927   --
7928   -- PURPOSE :   To get the value for profile option WSH_OTM_CURR_CONV_TYPE
7929   --             (WSH: Currency Conversion Type for OTM)
7930   --             It returns the cached value if it is avaiable, otherwise
7931   --             fnd_profile.value api is called to get the profile value
7932   -- PARAMETERS:
7933   --     x_curr_conv_type      currency conversion type
7934   --     x_return_status       return status
7935   --========================================================================
7936 
7937   PROCEDURE Get_Currency_Conversion_Type (
7938             x_curr_conv_type OUT NOCOPY VARCHAR2,
7939             x_return_status  OUT NOCOPY VARCHAR2 ) IS
7940 
7941     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Get_Currency_Conversion_Type';
7942     l_debug_on    BOOLEAN;
7943 
7944     CURR_CONV_TYPE_UNDEFINED_EXP  EXCEPTION;
7945 
7946   BEGIN
7947 
7948     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7949 
7950     IF l_debug_on IS NULL THEN
7951       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7952     END IF;
7953 
7954     IF l_debug_on THEN
7955       WSH_DEBUG_SV.push(l_module_name);
7956     END IF;
7957 
7958     x_curr_conv_type := NULL;
7959     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7960 
7961     -- no cached value, call fnd_profile.value
7962     IF G_CURRENCY_CONVERSION_TYPE IS NULL then
7963       IF l_debug_on THEN
7964         WSH_DEBUG_SV.logmsg(l_module_name, 'calling fnd_profile.value');
7965       END IF;
7966       G_CURRENCY_CONVERSION_TYPE := fnd_profile.value
7967                                         (name => 'WSH_OTM_CURR_CONV_TYPE');
7968       -- no value is defined for the profile option
7969       IF G_CURRENCY_CONVERSION_TYPE IS NULL then
7970         Raise CURR_CONV_TYPE_UNDEFINED_EXP;
7971       END IF;
7972     END IF;
7973     x_curr_conv_type := G_CURRENCY_CONVERSION_TYPE;
7974 
7975     IF l_debug_on THEN
7976       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
7977       WSH_DEBUG_SV.log(l_module_name, 'currency_conversion_type', x_curr_conv_type);
7978       WSH_DEBUG_SV.pop(l_module_name);
7979     END IF;
7980 
7981   EXCEPTION
7982     when CURR_CONV_TYPE_UNDEFINED_EXP then
7983       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7984       fnd_message.set_name('WSH', 'WSH_CURR_CONV_TYPE_UNDEFINED');
7985       wsh_util_core.add_message(x_return_status);
7986       IF l_debug_on THEN
7987         WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
7988         WSH_DEBUG_SV.logmsg(l_module_name, 'WSH: Currency Conversion Type for OTM profile value is not defined.');
7989         WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION');
7990       END IF;
7991 
7992     when OTHERS then
7993       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7994       WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_UTIL_CORE.get_currency_conversion_type', l_module_name);
7995 
7996       IF l_debug_on THEN
7997         WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
7998         WSH_DEBUG_SV.logmsg(l_module_name, 'Unexpected error has occured. Oracle error message is '||     SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7999         WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:OTHERS');
8000       END IF;
8001   END Get_Currency_Conversion_Type;
8002 
8003 /* OTM - R12 - o/b BPEL */
8004 
8005 --========================================================================
8006 -- PROCEDURE : GET_TRIP_ORGANIZATION_ID
8007 --
8008 -- COMMENT   : Return back organization id that is associated with the trip..
8009 -- MODIFIED :
8010 -- DESC:       This procedure returns back organiation id that is associated with the trip.
8011 --              Steps
8012 --              For Outbound and Mixed trip's see if there is a organization at the location of first stop
8013 --              For inbound see if there is a organization at the location of the last stop.
8014 --              If there are no organizations associated then get the organization id of the delivery with
8015 --              least delivery id
8016 --========================================================================
8017 
8018 FUNCTION GET_TRIP_ORGANIZATION_ID (p_trip_id    NUMBER)
8019 RETURN NUMBER
8020 IS
8021 
8022 --{
8023 
8024 l_api_name              CONSTANT VARCHAR2(30)   := 'GET_TRIP_ORGANIZATION_ID';
8025 l_api_version           CONSTANT NUMBER         := 1.0;
8026 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
8027 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || l_api_name;
8028 
8029 
8030 l_first_stop_loc_id     NUMBER;
8031 l_last_stop_loc_id      NUMBER;
8032 l_first_stop_id         NUMBER;
8033 l_last_stop_id          NUMBER;
8034 l_arrival_date          DATE;
8035 l_dept_date             DATE;
8036 
8037 l_typeflag              VARCHAR2(1);
8038 l_organization_id       NUMBER;
8039 
8040 l_return_status         VARCHAR2(1);
8041 
8042 l_msg_count     NUMBER;
8043 l_msg_data      VARCHAR2(30000);
8044 l_number_of_warnings    NUMBER;
8045 l_number_of_errors      NUMBER;
8046 
8047 BEGIN
8048 
8049 
8050         IF l_debug_on THEN
8051               WSH_DEBUG_SV.push(l_module_name);
8052         END IF;
8053 
8054         l_return_status         := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8055         l_number_of_warnings    := 0;
8056         l_number_of_errors      := 0;
8057 
8058 
8059         l_organization_id := null;
8060 
8061 
8062         -- First get the type of trip. Depending on this we can get the
8063         -- location, Org Id and the there by carrier site.
8064 
8065         IF l_debug_on
8066         THEN
8067               WSH_DEBUG_SV.logmsg(l_module_name,' Getting trip stop information ',
8068                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8069         END IF;
8070 
8071         GET_FIRST_LAST_STOP_INFO(x_return_status          => l_return_status,
8072                             x_arrival_date           => l_arrival_date,
8073                             x_departure_date         => l_dept_date,
8074                             x_first_stop_id          => l_first_stop_id,
8075                             x_last_stop_id           => l_last_stop_id,
8076                             x_first_stop_loc_id      => l_first_stop_loc_id,
8077                             x_last_stop_loc_id       => l_last_stop_loc_id,
8078                             p_trip_id                => p_trip_id);
8079 
8080         wsh_util_core.api_post_call(
8081               p_return_status    =>l_return_status,
8082               x_num_warnings     =>l_number_of_warnings,
8083               x_num_errors       =>l_number_of_errors,
8084               p_msg_data         =>l_msg_data);
8085 
8086         IF ( (l_return_status = 'E')
8087         OR   (l_return_status = 'U') )
8088         THEN
8089                 RAISE FND_API.G_EXC_ERROR;
8090         END IF;
8091 
8092         SELECT shipments_type_flag  INTO l_typeflag
8093         FROM WSH_TRIPS
8094         WHERE TRIP_ID = p_trip_id;
8095 
8096 	-- Bug 6633529: Handling OTHERS EXCEPTION
8097 	BEGIN
8098         IF (l_typeflag = 'O' OR l_typeflag = 'M')
8099         THEN
8100                 -- outbound or mixed use first stop location id
8101                 SELECT mp. organization_id
8102                 INTO l_organization_id
8103                 FROM   hr_organization_units hou,mtl_parameters mp
8104                 WHERE  hou.organization_id = mp.organization_id
8105                 AND  hou.location_id  = l_first_stop_loc_id
8106                 AND  trunc(sysdate) <= nvl( hou.date_to, trunc(sysdate));
8107         ELSE
8108                  -- inbound so use last stop
8109                 SELECT mp. organization_id
8110                 INTO l_organization_id
8111                 FROM   hr_organization_units hou,mtl_parameters mp
8112                 WHERE  hou.organization_id = mp.organization_id
8113                 AND  hou.location_id  = l_last_stop_loc_id
8114                 AND  trunc(sysdate) <= nvl( hou.date_to, trunc(sysdate));
8115         END IF;
8116         EXCEPTION
8117 	         WHEN OTHERS THEN
8118 	           IF l_debug_on THEN
8119 	             WSH_DEBUG_SV.logmsg(l_module_name,'In WHEN OTHERS',WSH_DEBUG_SV.C_PROC_LEVEL);
8120 	             WSH_DEBUG_SV.logmsg(l_module_name,'Getting organization from the corresponding delivery',WSH_DEBUG_SV.C_PROC_LEVEL);
8121 	           END IF;
8122 	        -- Bug 6633529: Adding Rownum = 1 for Trips having more than 1 delivery for the same organization
8123 	               SELECT 	dlvy.ORGANIZATION_ID
8124 	               INTO 	l_organization_id
8125 	               FROM 	WSH_TRIP_STOPS 		stops,
8126 	               		WSH_DELIVERY_LEGS 	leg,
8127 	                       	WSH_NEW_DELIVERIES 	dlvy
8128 	               WHERE 	stops.stop_id 		= leg.pick_up_stop_id
8129 	               AND 	leg.delivery_id 	= dlvy.delivery_id
8130 	               AND 	stops.stop_id 		= l_first_stop_id
8131 		       AND ROWNUM = 1;
8132 	END;
8133         -- Bug 6633529: End of fix
8134 
8135         --
8136         --
8137 
8138         -- if organiaztion id is null then we should get org id from the
8139         -- delivery that is getting picked up at the first stop
8140 
8141         IF (l_organization_id IS NULL
8142             AND l_first_stop_id IS NOT NULL)
8143         THEN
8144                 -- Bug 6633529: Adding Rownum = 1 for Trips having more than 1 delivery for the same organization
8145                 SELECT dlvy.ORGANIZATION_ID
8146                 INTO l_organization_id
8147                 FROM WSH_TRIP_STOPS stops, WSH_DELIVERY_LEGS leg,
8148                         WSH_NEW_DELIVERIES dlvy
8149                 WHERE stops.stop_id = leg.pick_up_stop_id
8150                 AND leg.delivery_id = dlvy.delivery_id
8151                 AND stops.stop_id = l_first_stop_id
8152                 AND ROWNUM = 1;
8153         END IF;
8154 
8155 
8156         IF l_debug_on THEN
8157               WSH_DEBUG_SV.pop(l_module_name);
8158         END IF;
8159 
8160         return l_organization_id;
8161 
8162 --}
8163 EXCEPTION
8164 --{
8165 WHEN FND_API.G_EXC_ERROR THEN
8166         IF l_debug_on THEN
8167               WSH_DEBUG_SV.pop(l_module_name);
8168         END IF;
8169         return null;
8170 
8171 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8172         IF l_debug_on THEN
8173               WSH_DEBUG_SV.pop(l_module_name);
8174         END IF;
8175         return null;
8176 
8177 WHEN OTHERS THEN
8178         IF l_debug_on THEN
8179               WSH_DEBUG_SV.pop(l_module_name);
8180         END IF;
8181         return null;
8182 
8183 END GET_TRIP_ORGANIZATION_ID;
8184 
8185 --{
8186 --========================================================================
8187 -- PROCEDURE : GET_FIRST_LAST_STOP_INFO
8188 --
8189 -- COMMENT   : Return back first stop and last stop information..
8190 -- MODIFIED :  OTM specific API use to get the pickup and drop off by Seq. No.
8191 
8192 --========================================================================
8193 
8194 PROCEDURE GET_FIRST_LAST_STOP_INFO(x_return_status          OUT NOCOPY  VARCHAR2,
8195                             x_arrival_date           OUT NOCOPY         DATE,
8196                             x_departure_date         OUT NOCOPY         DATE,
8197                             x_first_stop_id          OUT NOCOPY         NUMBER,
8198                             x_last_stop_id           OUT NOCOPY         NUMBER,
8199                             x_first_stop_loc_id      OUT NOCOPY         NUMBER,
8200                             x_last_stop_loc_id       OUT NOCOPY         NUMBER,
8201                             p_trip_id                NUMBER)
8202 IS
8203 --{
8204 /* Replaced this query to get pickup and drop off
8205 CURSOR GET_TRIP_STOPS IS
8206 SELECT stop_location_id, planned_arrival_date, planned_departure_date ,
8207         stops.stop_id
8208 FROM wsh_trip_stops stops, wsh_trips trips
8209 WHERE trips.trip_id = p_trip_id
8210         and trips.trip_id = stops.trip_id
8211 ORDER BY PLANNED_ARRIVAL_DATE,
8212          STOP_SEQUENCE_NUMBER;
8213 */
8214 --}
8215   CURSOR GET_TRIP_STOPS_PICKUP
8216   IS
8217   SELECT stop_location_id, planned_arrival_date, planned_departure_date,
8218   stops.stop_id,stops.tms_interface_flag
8219   FROM wsh_trip_stops stops,
8220        wsh_trips trips,
8221        wsh_delivery_legs wdg
8222   WHERE trips.trip_id = p_trip_id
8223   and trips.trip_id = stops.trip_id
8224   and wdg.pick_up_stop_id = stops.stop_id
8225   ORDER BY STOP_SEQUENCE_NUMBER;
8226 
8227 
8228   CURSOR GET_TRIP_STOPS_DROP
8229   IS
8230   SELECT stop_location_id, planned_arrival_date, planned_departure_date,
8231   stops.stop_id,stops.tms_interface_flag
8232   FROM wsh_trip_stops stops,
8233        wsh_trips trips,
8234        wsh_delivery_legs wdg
8235   WHERE trips.trip_id = p_trip_id
8236   and trips.trip_id = stops.trip_id
8237   and wdg.drop_off_stop_id = stops.stop_id
8238   ORDER BY STOP_SEQUENCE_NUMBER DESC;
8239 
8240 --{
8241 
8242 l_api_name              CONSTANT VARCHAR2(30)   := 'GET_FIRST_LAST_STOP_INFO';
8243 l_api_version           CONSTANT NUMBER         := 1.0;
8244 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
8245 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || l_api_name;
8246 
8247 --l_stop_loc_id_tbl       FTE_ID_TAB_TYPE;     -- removed since is not used
8248 --l_stop_id_tbl           FTE_ID_TAB_TYPE;     -- removed since is not used
8249 
8250 l_typeflag              VARCHAR2(1);
8251 l_first_stop            NUMBER;
8252 l_idx                   NUMBER;
8253 
8254 BEGIN
8255 
8256         IF l_debug_on THEN
8257               WSH_DEBUG_SV.push(l_module_name);
8258         END IF;
8259 
8260         x_return_status         := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8261 
8262         IF l_debug_on
8263         THEN
8264               WSH_DEBUG_SV.logmsg(l_module_name,' Getting trip stop information ',
8265                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8266         END IF;
8267 
8268         l_idx := 0;
8269 
8270         /*
8271         FOR GET_TRIP_STOPS_REC IN GET_TRIP_STOPS
8272         LOOP
8273                 IF (l_idx = 0)
8274                 THEN
8275                         -- This is first stop
8276                         x_first_stop_id := GET_TRIP_STOPS_REC.STOP_ID;
8277                         x_first_stop_loc_id := GET_TRIP_STOPS_REC.STOP_LOCATION_ID;
8278                         x_departure_date := GET_TRIP_STOPS_REC.PLANNED_DEPARTURE_DATE;
8279                 ELSE
8280                         -- Need to find out if there is a way to go to last stop directly
8281                         x_last_stop_id := GET_TRIP_STOPS_REC.STOP_ID;
8282                         x_last_stop_loc_id := GET_TRIP_STOPS_REC.STOP_LOCATION_ID;
8283                         x_arrival_date := GET_TRIP_STOPS_REC.PLANNED_ARRIVAL_DATE;
8284                 END IF;
8285                 l_idx := l_idx+1;
8286 
8287         END LOOP;
8288         */
8289         -- Get 1st pickup Stop
8290         FOR GET_TRIP_STOPS_REC1 IN GET_TRIP_STOPS_PICKUP
8291         LOOP
8292             -- This is first stop
8293             x_first_stop_id := GET_TRIP_STOPS_REC1.STOP_ID;
8294             x_first_stop_loc_id := GET_TRIP_STOPS_REC1.STOP_LOCATION_ID;
8295             x_departure_date := GET_TRIP_STOPS_REC1.PLANNED_DEPARTURE_DATE;
8296             EXIT;
8297         END LOOP;
8298         -- Get Drop off Stop
8299         FOR GET_TRIP_STOPS_REC2 IN GET_TRIP_STOPS_DROP
8300         LOOP
8301             x_last_stop_id := GET_TRIP_STOPS_REC2.STOP_ID;
8302             x_last_stop_loc_id := GET_TRIP_STOPS_REC2.STOP_LOCATION_ID;
8303             x_arrival_date := GET_TRIP_STOPS_REC2.PLANNED_ARRIVAL_DATE;
8304             EXIT;
8305         END LOOP;
8306         --
8307         IF l_debug_on
8308         THEN
8309               WSH_DEBUG_SV.logmsg(l_module_name,' First stop STOP_ID ' || x_first_stop_id,
8310                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8311               WSH_DEBUG_SV.logmsg(l_module_name,' First stop Stop Loc Id ' || x_first_stop_loc_id,
8312                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8313               WSH_DEBUG_SV.logmsg(l_module_name,' First stop departure date ' || x_departure_date,
8314                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8315               WSH_DEBUG_SV.logmsg(l_module_name,' Last stop STOP_ID ' || x_last_stop_id,
8316                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8317               WSH_DEBUG_SV.logmsg(l_module_name,' Last stop Stop loc id ' || x_last_stop_loc_id,
8318                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8319               WSH_DEBUG_SV.logmsg(l_module_name,' Last stop arrival date ' || x_arrival_date,
8320                                 WSH_DEBUG_SV.C_PROC_LEVEL);
8321         END IF;
8322 
8323 
8324 
8325         IF GET_TRIP_STOPS_PICKUP%ISOPEN THEN
8326           CLOSE GET_TRIP_STOPS_PICKUP;
8327         END IF;
8328 
8329 
8330         IF GET_TRIP_STOPS_DROP%ISOPEN THEN
8331           CLOSE GET_TRIP_STOPS_DROP;
8332         END IF;
8333 
8334         IF l_debug_on THEN
8335               WSH_DEBUG_SV.pop(l_module_name);
8336         END IF;
8337 
8338 --}
8339 EXCEPTION
8340 --{
8341 WHEN FND_API.G_EXC_ERROR THEN
8342         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
8343         IF l_debug_on THEN
8344               WSH_DEBUG_SV.pop(l_module_name);
8345         END IF;
8346 
8347 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8348         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8349         IF l_debug_on THEN
8350               WSH_DEBUG_SV.pop(l_module_name);
8351         END IF;
8352 WHEN OTHERS THEN
8353         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
8354 
8355         IF GET_TRIP_STOPS_PICKUP%ISOPEN THEN
8356           CLOSE GET_TRIP_STOPS_PICKUP;
8357         END IF;
8358 
8359 
8360         IF GET_TRIP_STOPS_DROP%ISOPEN THEN
8361           CLOSE GET_TRIP_STOPS_DROP;
8362         END IF;
8363 
8364         IF l_debug_on THEN
8365               WSH_DEBUG_SV.pop(l_module_name);
8366         END IF;
8367 
8368 END GET_FIRST_LAST_STOP_INFO;
8369 
8370 /* End of OTM R12 - O/B BPEL */
8371 
8372 END WSH_UTIL_CORE;