DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_UTIL_CORE

Source


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