DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_XC_UTIL

Source


1 PACKAGE BODY WSH_XC_UTIL as
2 /* $Header: WSHXCUTB.pls 120.12.12010000.2 2008/08/04 12:34:27 suppal ship $ */
3 
4 	-- standard global constants
5 	G_PKG_NAME CONSTANT VARCHAR2(30) := 'WSH_XC_UTIL';
6 	p_message_type	CONSTANT VARCHAR2(1) := 'E';
7 
8 
9 	C_ACTION_SEMICLOSED    CONSTANT VARCHAR2(11) := 'SEMI-CLOSED';  -- FP bug 4370532
10 	C_STATUS_CLOSED        CONSTANT VARCHAR2(6) := 'CLOSED';
11 	C_SEVERITY_INFO        CONSTANT VARCHAR2(4) := 'INFO';
12 
13         C_OTM_EXC_NAME         CONSTANT VARCHAR2(22) := 'WSH_OTM_SHIPMENT_ERROR';
14 
15 	-- exception shared between validate_location_id() and
16 	-- log_exception()
17 
18 	WSH_XC_INVALID_LOCATION			EXCEPTION;
19 
20   -- bug 5183769 : BEGIN
21   -- following types/variable are added to cache Exception Definitions
22 
23   TYPE Exception_Def_Rec_Typ IS RECORD(
24         DEFAULT_SEVERITY   WSH_EXCEPTION_DEFINITIONS_VL.DEFAULT_SEVERITY%TYPE,
25         EXCEPTION_HANDLING WSH_EXCEPTION_DEFINITIONS_VL.EXCEPTION_HANDLING%TYPE,
26         INITIATE_WORKFLOW  WSH_EXCEPTION_DEFINITIONS_VL.INITIATE_WORKFLOW%TYPE,
27         ENABLED            WSH_EXCEPTION_DEFINITIONS_VL.ENABLED%TYPE
28   );
29 
30   TYPE Exception_Def_Tab_Typ IS TABLE OF Exception_Def_Rec_Typ INDEX BY VARCHAR2(30);
31 
32   g_exception_defs Exception_Def_Tab_Typ;
33 
34   -- bug 5183769 : END
35 
36 -- -------------------------------------------------------------------
37 -- Start of comments
38 -- API name        : Get_Exception_Def
39 --     Type        : private
40 -- Function        : return the attributes for the given exception name
41 --                   added to fix bug 5183769(Caching of Exception Definitions)
42 --
43 -- IN  Parameters  : p_exception_name      Exception Name
44 -- OUT Parameters  : x_exception_def_info  Record of Exception Attributes
45 --                   x_return_status       Return Status
46 -- End of comments
47 -- ---------------------------------------------------------------------
48 PROCEDURE Get_Exception_Def(
49                 p_exception_name     IN         VARCHAR2,
50                 x_exception_def_info OUT NOCOPY Exception_Def_Rec_Typ,
51                 x_return_status      OUT NOCOPY VARCHAR2) IS
52 
53   -- cursor to get exception attributes
54   CURSOR C_EXC_DEF(c_exception_name VARCHAR2) IS
55      SELECT UPPER(default_severity),
56             UPPER(exception_handling),
57             UPPER(initiate_workflow),
58             enabled
59        FROM wsh_exception_definitions_vl
60       WHERE exception_name = c_exception_name;
61 
62   l_debug_on BOOLEAN;
63   l_msg_data VARCHAR(2000);
64   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_EXCEPTION_DEF';
65 
66 BEGIN
67 
68   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
69   --
70   IF l_debug_on IS NULL
71   THEN
72       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
73   END IF;
74   --
75   IF l_debug_on THEN
76       WSH_DEBUG_SV.push(l_module_name);
77       WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME', p_exception_name);
78   END IF;
79   --
80   x_return_status := FND_API.G_RET_STS_SUCCESS;
81 
82   -- Check if exception definition is already cached
83   IF (g_exception_defs.count <> 0 AND
84       g_exception_defs.EXISTS(p_exception_name)) THEN
85 
86     x_exception_def_info := g_exception_defs(p_exception_name);
87 
88     IF l_debug_on THEN
89       WSH_DEBUG_SV.log(l_module_name,'CACHED:EXCEPTION_NAME ',p_exception_name);
90       WSH_DEBUG_SV.pop(l_module_name);
91     END IF;
92 
93     RETURN;
94 
95   END IF;
96 
97   -- Need to fetch and cache exception definition info
98 
99   OPEN c_exc_def(p_exception_name);
100   FETCH c_exc_def INTO x_exception_def_info;
101 
102   IF c_exc_def%NOTFOUND THEN
103     RAISE NO_DATA_FOUND;
104   END IF;
105 
106   CLOSE c_exc_def;
107   g_exception_defs(p_exception_name) := x_exception_def_info;
108 
109   -- Debug Statements
110   IF l_debug_on THEN
111     WSH_DEBUG_SV.log(l_module_name,'CACHING:EXCEPTION_NAME ',p_exception_name);
112     WSH_DEBUG_SV.log(l_module_name,'CACHING:EXCEPTION_HANDLING ',g_exception_defs(p_exception_name).exception_handling);
113     WSH_DEBUG_SV.log(l_module_name,'CACHING:INITIATE_WORKFLOW ',g_exception_defs(p_exception_name).initiate_workflow);
114     WSH_DEBUG_SV.log(l_module_name,'CACHING:DEFAULT_SEVERITY ',g_exception_defs(p_exception_name).default_severity);
115     WSH_DEBUG_SV.log(l_module_name,'CACHING:ENABLED ',g_exception_defs(p_exception_name).enabled);
116     WSH_DEBUG_SV.pop(l_module_name);
117   END IF;
118 
119   EXCEPTION
120     WHEN NO_DATA_FOUND THEN
121       FND_MESSAGE.Set_Name('WSH', 'WSH_XC_DEF_NOT_FOUND');
122       IF c_exc_def%ISOPEN THEN
123         CLOSE c_exc_def;
124       END IF;
125       x_return_status := FND_API.G_RET_STS_ERROR;
126       IF l_debug_on THEN
127         WSH_DEBUG_SV.log(l_module_name,'ERROR: ','Exception Not Defined:'||p_exception_name);
128         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
129       END IF;
130       -- end of NO_DATA_FOUND exception handling
131     WHEN OTHERS THEN
132       FND_MESSAGE.Set_Name('WSH','WSH_UNEXP_ERROR');
133       FND_MESSAGE.Set_Token('PACKAGE','WSH_XC_UTIL.GET_EXCEPTION_DEF');
134       FND_MESSAGE.Set_Token('ORA_ERROR',to_char(sqlcode));
135       FND_MESSAGE.Set_Token('ORA_TEXT','');
136       IF c_exc_def%ISOPEN THEN
137         CLOSE c_exc_def;
138       END IF;
139       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
140       --
141       -- Debug Statements
142       --
143       IF l_debug_on THEN
144         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
145         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
146       END IF;
147       -- end of OTHERS exception handling
148 END Get_Exception_Def;
149 
150 -- -----------------------------------------------------------------
151 -- Start of comments
152 -- API name	: log_exception
153 --	Type			: Public
154 --	Function		: This function is to log a new exception or to restrictly
155 --						update an existing exception. Update is allowed only
156 --						for the fields which are NULL due to the nature of
157 --						exceptions. The update function is mostly useful to
158 --						add exception name to an open exception
159 -- Pre-reqs		: None
160 --	Version		: Initial version 1.0
161 -- Notes			: please use :set tabstop=3 to view this file in vi to get
162 --						proper alignment
163 --
164 -- BUG#: 1549665 hwahdani :   added p_request_id parameter
165 -- BUG#: 1900149 hwahdani :   added opm attributes to the parameter list
166 -- BUG#: 1729516 rvarghes :   added batch_id (Picking Batch id)
167 -- End of comments
168 -- ------------------------------------------------------------------
169 PROCEDURE log_exception(
170 
171 		-- Standard parameters
172 		p_api_version					IN NUMBER,
173 		p_init_msg_list				IN VARCHAR2,
174 		p_commit							IN VARCHAR2,
175 		p_validation_level			IN NUMBER,
176 		x_return_status				OUT NOCOPY  VARCHAR2,
177 		x_msg_count						OUT NOCOPY  NUMBER,
178 		x_msg_data						OUT NOCOPY  VARCHAR2,
179 
180 		-- Program Specific parameters
181 		x_exception_id					IN OUT NOCOPY  NUMBER,
182 		p_exception_location_id 	IN	NUMBER,
183 		p_logged_at_location_id		IN	NUMBER,
184 		p_logging_entity				IN	VARCHAR2,
185 		p_logging_entity_id			IN	NUMBER,
186 		p_exception_name				IN	VARCHAR2,
187 		p_message						IN	VARCHAR2,
188 		p_severity						IN	VARCHAR2,
189 		p_manually_logged				IN VARCHAR2,
190 		p_exception_handling		   IN VARCHAR2,
191 		p_trip_id						IN	NUMBER,
192 		p_trip_name						IN	VARCHAR2,
193 		p_trip_stop_id					IN	NUMBER,
194 		p_delivery_id					IN	NUMBER,
195 		p_delivery_name				IN	VARCHAR2,
196 		p_delivery_detail_id			IN NUMBER,
197 		p_delivery_assignment_id	IN NUMBER,
198 		p_container_name         	IN	VARCHAR2,
199 		p_inventory_item_id			IN	NUMBER,
200 		p_lot_number					IN	VARCHAR2,
201 -- HW OPMCONV - No need for sublot_number
202 --              p_sublot_number            IN VARCHAR2,
203 		p_revision						IN	VARCHAR2,
204 		p_serial_number				IN	VARCHAR2,
205 		p_unit_of_measure		      IN	VARCHAR2,
206                 p_quantity						IN	NUMBER,
207                 p_unit_of_measure2			IN	VARCHAR2,
208 		p_quantity2						IN	NUMBER,
209 		p_subinventory					IN	VARCHAR2,
210 		p_locator_id					IN	NUMBER,
211 		p_arrival_date					IN	DATE,
212 		p_departure_date				IN	DATE,
213 		p_error_message				IN	VARCHAR2,
214 		p_attribute_category			IN	VARCHAR2,
215 		p_attribute1					IN	VARCHAR2,
216 		p_attribute2					IN	VARCHAR2,
217 		p_attribute3					IN	VARCHAR2,
218 		p_attribute4					IN	VARCHAR2,
219 		p_attribute5					IN	VARCHAR2,
220 		p_attribute6					IN	VARCHAR2,
221 		p_attribute7					IN	VARCHAR2,
222 		p_attribute8					IN	VARCHAR2,
223 		p_attribute9					IN	VARCHAR2,
224 		p_attribute10					IN	VARCHAR2,
225 		p_attribute11					IN	VARCHAR2,
226 		p_attribute12					IN	VARCHAR2,
227 		p_attribute13					IN	VARCHAR2,
228 		p_attribute14					IN	VARCHAR2,
229 		p_attribute15					IN	VARCHAR2,
230       p_request_id               IN NUMBER,
231       p_batch_id                 IN NUMBER,
232 --bug 3362060
233       p_creation_date          IN     DATE     DEFAULT NULL,
234       p_created_by             IN     NUMBER   DEFAULT NULL,
235       p_last_update_date       IN     DATE     DEFAULT NULL,
236       p_last_updated_by        IN     NUMBER   DEFAULT NULL,
237       p_last_update_login      IN     NUMBER   DEFAULT NULL,
238       p_program_application_id IN     NUMBER   DEFAULT NULL,
239       p_program_id             IN     NUMBER   DEFAULT NULL,
240       p_program_update_date    IN     DATE     DEFAULT NULL,
241       p_status                 IN     VARCHAR2 DEFAULT NULL,
242       p_action                 IN     VARCHAR2 DEFAULT NULL
243 )  IS
244 
245 	-- standard version infermation
246    l_api_version	CONSTANT	NUMBER		:= 1.0;
247    l_api_name		CONSTANT	VARCHAR2(30):= 'log_exception';
248 
249 	-- cursor to validate logging_entity
250 	CURSOR C2 (c_logging_entity VARCHAR2) IS
251 		SELECT	lookup_code
252 		FROM		fnd_lookup_values_vl
253 		WHERE		lookup_type = 'LOGGING_ENTITY' AND
254 					lookup_code = c_logging_entity AND
255 					enabled_flag = 'Y' AND
256 					(sysdate BETWEEN NVL(start_date_active,sysdate) AND
257 										NVL(end_date_active, sysdate));
258 
259 	-- cursor for update
260 	CURSOR C3 (c_exception_id NUMBER) IS
261 	--Changed for BUG#3330869
262 	--	SELECT *
263 		SELECT
264 			exception_id,
265                       	message,
266 		      	exception_name,
267 		      	status,
268 		      	severity,
269 			trip_id,
270 			trip_name,
271 			trip_stop_id,
272 			delivery_id,
273 			delivery_name,
274 			delivery_detail_id,
275 			delivery_assignment_id,
276 			container_name,
277 			inventory_item_id,
278 			lot_number,
279 -- HW OPMCONV - No need for sublot_number
280 --                      sublot_number,
281 			revision,
282 			serial_number,
283 			unit_of_measure,
284 			quantity,
285 			unit_of_measure2,
286 			quantity2,
287 			subinventory,
288 			locator_id,
289 			arrival_date,
290 			departure_date,
291 			error_message,
292 			attribute_category,
293 			attribute1,
294 			attribute2,
295 			attribute3,
296 			attribute4,
297 			attribute5,
298 			attribute6,
299 			attribute7,
300 			attribute8,
301 			attribute9,
302 			attribute10,
303 			attribute11,
304 			attribute12,
305 			attribute13,
306 			attribute14,
307 			attribute15,
308 			request_id,
309 			logged_at_location_id,
310 			logging_entity,
311 			logging_entity_id,
312 			exception_location_id,
313 			manually_logged
314 		FROM	wsh_exceptions
315 		WHERE	exception_id = c_exception_id FOR UPDATE;
316 
317 
318 	-- local variables
319 	l_exception_id					NUMBER 			:= NULL;
320 	l_severity						VARCHAR2(10)	:= NULL;
321         l_exc_def_info                                  Exception_Def_Rec_Typ;
322 	l_manually_logged				VARCHAR2(1) 	:= FND_API.G_FALSE;
323    -- Shipping exception enhancement : changed default to 'NO_ACTION_REQUIRED'
324 	l_status						   VARCHAR2(30) 	:='NO_ACTION_REQUIRED';
325 	l_exception_name				VARCHAR2(30) 	:= NULL;
326 	l_applicatoin_id				NUMBER;
327 	l_xcp_record					C3%ROWTYPE;
328 	l_logging_entity				VARCHAR2(30)	:= NULL;
329 -- Bug# 1924574 , added l_return_status, l_location_id
330         l_return_status                         VARCHAR2(30);
331         l_location_id                           NUMBER;
332 	-- local variable to hold token for exception WSH_XC_INVALID_OPERATION
333 	l_msg_name                                      VARCHAR2(30)    := NULL;
334 	l_field_name                                    VARCHAR2(30)    := NULL;
335 	l_msg_summary					VARCHAR2(2000) := NULL;
336 	l_msg_details					VARCHAR2(4000) := NULL;
337 
338 	WSH_XC_INVALID_LOGGING_ENTITY	EXCEPTION;
339 	WSH_XC_INVALID_SEVERITY			EXCEPTION;
340 	WSH_XC_INVALID_OPERATION		EXCEPTION;
341 	WSH_XC_NOT_FOUND					EXCEPTION;
342 	WSH_XC_DEF_NOT_FOUND				EXCEPTION;
343 	WSH_XC_DATA_ERROR					EXCEPTION;
344 
345    -- Raising Event for Workflow Enabled exception
346    l_msg_parameter_list     WF_PARAMETER_LIST_T;
347    l_event_name             VARCHAR2(120) := 'oracle.apps.wsh.excp.log';
348    l_event_key              VARCHAR2(30);
349    l_p_entity_name          VARCHAR2(30);
350    l_p_entity_id            VARCHAR2(30);
351    l_exception_name_exists  BOOLEAN := TRUE;
352 -- Bug 3711661 , added l_request_id, l_batch_id
353         l_request_id            number;
354         l_batch_id              number;
355 --
356 l_debug_on BOOLEAN;
357 --
358 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'LOG_EXCEPTION';
359 --
360 
361 --
362 BEGIN
363 
364   	-- Standard begin of API savepoint
365 	--
366 	-- Debug Statements
367 	--
368 	--
369 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
370 	--
371 	IF l_debug_on IS NULL
372 	THEN
373 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
374 	END IF;
375 	--
376 	IF l_debug_on THEN
377 	    WSH_DEBUG_SV.push(l_module_name);
378 	    --
379 	    WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION',P_API_VERSION);
380 	    WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
381 	    WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
382 	    WSH_DEBUG_SV.log(l_module_name,'P_VALIDATION_LEVEL',P_VALIDATION_LEVEL);
383 	    WSH_DEBUG_SV.log(l_module_name,'X_EXCEPTION_ID',X_EXCEPTION_ID);
384 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_LOCATION_ID',P_EXCEPTION_LOCATION_ID);
385 	    WSH_DEBUG_SV.log(l_module_name,'P_LOGGED_AT_LOCATION_ID',P_LOGGED_AT_LOCATION_ID);
386 	    WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY',P_LOGGING_ENTITY);
387 	    WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY_ID',P_LOGGING_ENTITY_ID);
388 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
389 	    WSH_DEBUG_SV.log(l_module_name,'P_MESSAGE',P_MESSAGE);
390 	    WSH_DEBUG_SV.log(l_module_name,'P_MANUALLY_LOGGED',P_MANUALLY_LOGGED);
391 	    WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
392 	    WSH_DEBUG_SV.log(l_module_name,'P_TRIP_NAME',P_TRIP_NAME);
393 	    WSH_DEBUG_SV.log(l_module_name,'P_TRIP_STOP_ID',P_TRIP_STOP_ID);
394 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
395 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_NAME',P_DELIVERY_NAME);
396 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID',P_DELIVERY_DETAIL_ID);
397 	    WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ASSIGNMENT_ID',P_DELIVERY_ASSIGNMENT_ID);
398 	    WSH_DEBUG_SV.log(l_module_name,'P_CONTAINER_NAME',P_CONTAINER_NAME);
399 	    WSH_DEBUG_SV.log(l_module_name,'P_INVENTORY_ITEM_ID',P_INVENTORY_ITEM_ID);
400 	    WSH_DEBUG_SV.log(l_module_name,'P_LOT_NUMBER',P_LOT_NUMBER);
401 -- HW OPMCONV - No need for sublot_number
402 --          WSH_DEBUG_SV.log(l_module_name,'P_SUBLOT_NUMBER',P_SUBLOT_NUMBER);
403 	    WSH_DEBUG_SV.log(l_module_name,'P_REVISION',P_REVISION);
404 	    WSH_DEBUG_SV.log(l_module_name,'P_SERIAL_NUMBER',P_SERIAL_NUMBER);
405 	    WSH_DEBUG_SV.log(l_module_name,'P_UNIT_OF_MEASURE',P_UNIT_OF_MEASURE);
406 	    WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY',P_QUANTITY);
407 	    WSH_DEBUG_SV.log(l_module_name,'P_UNIT_OF_MEASURE2',P_UNIT_OF_MEASURE2);
408 	    WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY2',P_QUANTITY2);
409 	    WSH_DEBUG_SV.log(l_module_name,'P_SUBINVENTORY',P_SUBINVENTORY);
410 	    WSH_DEBUG_SV.log(l_module_name,'P_LOCATOR_ID',P_LOCATOR_ID);
411 	    WSH_DEBUG_SV.log(l_module_name,'P_ARRIVAL_DATE',P_ARRIVAL_DATE);
412 	    WSH_DEBUG_SV.log(l_module_name,'P_DEPARTURE_DATE',P_DEPARTURE_DATE);
413 	    WSH_DEBUG_SV.log(l_module_name,'P_ERROR_MESSAGE',P_ERROR_MESSAGE);
414 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE_CATEGORY',P_ATTRIBUTE_CATEGORY);
415 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE1',P_ATTRIBUTE1);
416 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE2',P_ATTRIBUTE2);
417 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE3',P_ATTRIBUTE3);
418 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE4',P_ATTRIBUTE4);
419 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE5',P_ATTRIBUTE5);
420 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE6',P_ATTRIBUTE6);
421 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE7',P_ATTRIBUTE7);
422 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE8',P_ATTRIBUTE8);
423 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE9',P_ATTRIBUTE9);
424 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE10',P_ATTRIBUTE10);
425 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE11',P_ATTRIBUTE11);
426 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE12',P_ATTRIBUTE12);
427 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE13',P_ATTRIBUTE13);
428 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE14',P_ATTRIBUTE14);
429 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE15',P_ATTRIBUTE15);
430 	    WSH_DEBUG_SV.log(l_module_name,'P_REQUEST_ID',P_REQUEST_ID);
431 	    WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
432 	    WSH_DEBUG_SV.log(l_module_name,'P_STATUS',P_STATUS);
433 	    WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
434 	END IF;
435 	--
436 	SAVEPOINT	Log_Exception_PUB;
437 	-- Standard call to check for call compatibility.
438 	IF NOT FND_API.compatible_api_call(	l_api_version,
439  														p_api_version,
440 														l_api_name,
441 														G_PKG_NAME) THEN
442 	 	RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
443  	END IF;
444 
445 	-- Check p_init_msg_list
446 	IF FND_API.to_boolean(p_init_msg_list)	THEN
447 		FND_MSG_PUB.initialize;
448 	END IF;
449 
450 	-- initialize API return status to success
451 	x_return_status := FND_API.G_RET_STS_SUCCESS;
452 
453 	IF x_exception_id IS NULL THEN
454 		-- insert record
455 
456   		-- validate required parameters
457 		IF p_logged_at_location_id IS NULL OR
458 			p_logging_entity IS NULL OR
459 			p_logging_entity_id IS NULL OR
460 			p_message IS NULL
461 		THEN
462 		        l_msg_name := 'WSH_XC_MIS_REQ_PARAM';
463 			RAISE WSH_XC_INVALID_OPERATION;
464 		END IF;
465 
466 		-- validate logging entity
467 		OPEN C2(p_logging_entity);
468 		FETCH C2 INTO	l_logging_entity;
469 		IF C2%NOTFOUND THEN
470 			CLOSE C2;
471 			RAISE WSH_XC_INVALID_LOGGING_ENTITY;
472 		END IF;
473 		CLOSE C2;
474 
475 		-- validate p_exception_location_id
476       -- 1924574 Changes, Calling API and removing earlier Cursors
477       l_location_id := p_exception_location_id;
478       --
479       -- Debug Statements
480       --
481       IF l_debug_on THEN
482          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.VALIDATE_LOCATION',WSH_DEBUG_SV.C_PROC_LEVEL);
483       END IF;
484       --
485       WSH_UTIL_VALIDATE.Validate_Location (
486                       p_location_id      => l_location_id,
487                       p_location_code    => NULL ,
488                       x_return_status    => l_return_status);
489       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
490 			RAISE WSH_XC_INVALID_LOCATION;
491       END IF;
492 
493 		-- validate p_logged_at_location_id
494       l_location_id := p_logged_at_location_id;
495       -- 1924574 Changes, Calling Procedure and removing earlier Cursors
496       --
497       -- Debug Statements
498       --
499       IF l_debug_on THEN
500          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.VALIDATE_LOCATION',WSH_DEBUG_SV.C_PROC_LEVEL);
501       END IF;
502       --
503       WSH_UTIL_VALIDATE.Validate_Location (
504                       p_location_id      => l_location_id,
505                       p_location_code    => null,
506                       x_return_status    => l_return_status);
507       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
508 			RAISE WSH_XC_INVALID_LOCATION;
509       END IF;
510 
511 		-- set default value for p_manually_logged is 'F'
512 		IF p_manually_logged=FND_API.G_TRUE
513 		THEN
514 			l_manually_logged := p_manually_logged;
515                 ELSE                                                    -- Bugfix 3711661
516                         IF (p_request_id is null) THEN
517                                 l_request_id := fnd_global.conc_request_id;
518                         ELSE
519                                 l_request_id := p_request_id;
520                         END IF;
521 
522                         IF (p_batch_id is null)
523                         THEN
524                                 l_batch_id := WSH_PICK_LIST.G_BATCH_ID;
525                         ELSE
526                                 l_batch_id := p_batch_id;
527                         END IF;
528                 END IF;
529 
530 		-- check if exception name is null
531 		IF p_exception_name IS NULL THEN
532          -- Shipping exception enhancement :
533          -- changed default status from OPEN to NO_ACTION_REQUIRED
534          -- added default severity as INFO
535 			l_status   := 'NO_ACTION_REQUIRED';  -- default status
536          l_severity := 'INFO';
537 		ELSE -- exception name is not null
538 
539 			-- validate exception_name and get default attr
540                         -- bug 5183769, call get_exception for caching
541 
542                         Get_Exception_Def(
543                            p_exception_name     => p_exception_name,
544                            x_exception_def_info => l_exc_def_info,
545                            x_return_status      => l_return_status);
546 
547                         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
548 				RAISE WSH_XC_DEF_NOT_FOUND;
549                         ELSIF l_exc_def_info.enabled = 'N' THEN
550                           IF l_debug_on THEN
551                             WSH_DEBUG_SV.logmsg(l_module_name,'Not logging exception since the exception is not enabled',WSH_DEBUG_SV.C_PROC_LEVEL);
552                           END IF;
553                           GOTO end_proc;
554 			END IF;
555 
556 			-- set default severity	if it is not passed
557                         -- Shipping exception enhancement : assign default severity, exception_handling
558 			l_severity := l_exc_def_info.default_severity;
559 
560 			-- set default status
561                         -- Shipping Exception enhancement
562 
563                         If p_action = 'SPLIT-LINE' and p_status is not null and p_exception_name is not null then
564                           l_status := p_status;
565                         else
566                           IF l_severity IN ( 'ERROR' , 'WARNING' ) THEN
567                             l_status := 'OPEN';
568                           ELSE
569                             l_status := 'NO_ACTION_REQUIRED';
570                           End if;
571                         END IF;
572 
573 			l_exception_name := UPPER(p_exception_name);
574                         l_exception_name_exists := FALSE; -- since exception_name was NULL
575 		END IF; -- check if exception name is NULL
576 
577       IF l_debug_on THEN
578          WSH_DEBUG_SV.logmsg(l_module_name,'Logging exception with severity '||l_severity||' , status '||l_status ,WSH_DEBUG_SV.C_PROC_LEVEL);
579       END IF;
580 
581 		-- populate l_exception_id
582 		-- Bug 6615016 using the wsh_exceptions_s.nextval directly in the insert statement.
583 		-- SELECT wsh_exceptions_s.nextval INTO l_exception_id FROM SYS.DUAL;
584 
585 		IF l_debug_on THEN
586 		  wsh_debug_sv.logmsg(l_module_name, '**** Actual values ****');
587 		  -- Bug 6615016
588 		  --wsh_debug_Sv.log(l_module_name, 'Exception ID', l_exception_id);
589 		  wsh_debug_sv.log(l_module_name, 'Exception Loc ID', p_exception_location_id);
590 		  wsh_debug_sv.log(l_module_name, 'Logged at loc Id', p_logged_at_location_id);
591 		  wsh_debug_Sv.log(l_module_name, 'Logging Entity', p_logging_entity);
592 		  wsh_debug_Sv.log(l_module_name, 'Logging Entity ID', p_logging_entity_id);
593 		  wsh_debug_sv.log(l_module_name, 'Exception Name', l_exception_name);
594 		  wsh_debug_sv.log(l_module_name, 'Message', p_message);
595 		  wsh_debug_sv.log(l_module_name, 'Severity', l_severity);
596 		  wsh_debug_Sv.log(l_module_name, 'Manually Logged?', l_manually_logged);
597 		  wsh_debug_sv.log(l_module_name, 'Status', l_status);
598 		  wsh_debug_sv.log(l_module_name, 'Trip ID', p_trip_id);
599 		  wsh_debug_sv.log(l_module_name, 'Trip Name', p_trip_name);
600 		  wsh_debug_sv.log(l_module_name, 'Trip Stop Id', p_trip_stop_id);
601 		  wsh_debug_sv.log(l_module_name, 'Delivery Id', p_delivery_id);
602 		  wsh_debug_sv.log(l_module_name, 'Delivery name', p_delivery_name);
603 		  wsh_debug_sv.log(l_module_name, 'Delivery Detail ID', p_delivery_detail_id);
604 		  wsh_debug_Sv.log(l_module_name, 'Assignment Id', p_delivery_assignment_id);
605 		  wsh_debug_sv.log(l_module_name, 'Request Id', l_request_id);  -- Bugfix 3711661, previously p_request_id was passed.
606 		  wsh_debug_sv.log(l_module_name, 'Batch Id', l_batch_id);  -- Bugfix 3711661, previously p_batch_id was passed.
607 		END IF;
608 		--
609 		IF (p_container_name is not null) and (p_delivery_detail_id is null) then --LPN Synch Up..samanna
610 		    l_msg_name := 'WSH_MISSING_DETAILS';
611 		    raise WSH_XC_INVALID_OPERATION;
612 	        END IF;
613 		--
614 		INSERT INTO wsh_exceptions(
615 			exception_id,
616 			exception_location_id,
617 			logged_at_location_id,
618 			logging_entity,
619 			logging_entity_id,
620 			exception_name,
621 			message,
622 			severity,
623 			manually_logged,
624 			status,
625 			trip_id,
626 			trip_name,
627 			trip_stop_id,
628 			delivery_id,
629 			delivery_name,
630 			delivery_detail_id,
631 			delivery_assignment_id,
632 			container_name,
633 			inventory_item_id,
634 			lot_number,
635 			revision,
636 			serial_number,
637 			unit_of_measure,
638 			quantity,
639 			subinventory,
640 			locator_id,
641 			arrival_date,
642 			departure_date,
643 			error_message,
644 			attribute_category,
645 			attribute1,
646 			attribute2,
647 			attribute3,
648 			attribute4,
649 			attribute5,
650 			attribute6,
651 			attribute7,
652 			attribute8,
653 			attribute9,
654 			attribute10,
655 			attribute11,
656 			attribute12,
657 			attribute13,
658 			attribute14,
659 			attribute15,
660 			creation_date,
661 			created_by,
662 			last_update_date,
663 			last_updated_by,
664 			last_update_login,
665 -- BUG#:1549665 hwahdani added request_id
666                request_id ,
667 -- HW BUG#:1900149
668 -- HW OPMCONV - No need for sublot_number
669 --                      sublot_number,
670 			unit_of_measure2,
671 			quantity2,
672 -- HW end of 1900149
673                         batch_id,
674                         program_application_id,
675                         program_id,
676                         program_update_date
677     )
678     VALUES (
679 		-- Bug 6615016 using the wsh_exceptions_s.nextval directly in the insert statement.
680     		--l_exception_id,
681     		wsh_exceptions_s.nextval,
682 		p_exception_location_id,
683 		p_logged_at_location_id,
684 		UPPER(p_logging_entity),
685 		p_logging_entity_id,
686 		DECODE(l_exception_name, NULL, NULL, UPPER(l_exception_name)),
687 		p_message,
688       -- Shipping Exception enhancement
689       l_severity,
690 		l_manually_logged,
691 		l_status,
692 		p_trip_id,
693 		p_trip_name,
694 		p_trip_stop_id,
695 		p_delivery_id,
696 		p_delivery_name,
697 		p_delivery_detail_id,
698 		p_delivery_assignment_id,
699 		null,			--LPN_conv Synch Up..samanna
700 		p_inventory_item_id,
701 		p_lot_number,
702 		p_revision,
703 		p_serial_number,
704 		p_unit_of_measure,
705 		p_quantity,
706 		p_subinventory,
707 		p_locator_id,
708 		p_arrival_date,
709 		p_departure_date,
710 		p_error_message,
711 		p_attribute_category,
712 		p_attribute1,
713 		p_attribute2,
714 		p_attribute3,
715 		p_attribute4,
716 		p_attribute5,
717 		p_attribute6,
718 		p_attribute7,
719 		p_attribute8,
720 		p_attribute9,
721 		p_attribute10,
722 		p_attribute11,
723 		p_attribute12,
724 		p_attribute13,
725 		p_attribute14,
726 		p_attribute15,
727                 NVL(p_creation_date,SYSDATE),
728                 NVL(p_created_by,FND_GLOBAL.USER_ID),
729                 NVL(p_last_update_date,SYSDATE),
730                 NVL(p_last_updated_by,FND_GLOBAL.USER_ID),
731                 NVL(p_last_update_login,FND_GLOBAL.LOGIN_ID),
732 -- BUG#:1549665 hwahdani added request_id
733 		l_request_id,	-- Bugfix 3711661, previously p_request_id was passed.
734 -- HW BUG#:1900149 added opm columns
735 -- HW OPMCONV - No need for sublot_number
736 --              p_sublot_number,
737 		p_unit_of_measure2,
738 		p_quantity2,
739 -- HW end of 1900149
740                 l_batch_id,	-- Bugfix 3711661, previously p_batch_id was passed.
741                 p_program_application_id,
742                 p_program_id,
743                 p_program_update_date
744     );
745 
746 	IF FND_API.TO_BOOLEAN(p_commit) THEN
747 		COMMIT WORK;
748 	END IF;
749 
750 	x_exception_id := l_exception_id;
751 
752 
753 
754 
755  ELSE -- update
756 
757 		-- validate x_exception_id
758 		OPEN C3(x_exception_id);
759 		FETCH C3 INTO l_xcp_record;
760 		IF C3%NOTFOUND THEN
761 			CLOSE C3;
762 			RAISE WSH_XC_NOT_FOUND;
763 		END IF;
764 
765 		l_exception_id := l_xcp_record.exception_id;
766 
767 		-- update an existing exception,the required fields can't be changed.
768 		IF  ( p_logged_at_location_id IS NOT NULL) OR
769 	   	    (p_exception_location_id IS NOT NULL)  OR
770                     (p_logging_entity IS NOT NULL) OR
771                     (p_logging_entity_id IS NOT NULL)
772 		THEN
773 		        l_msg_name := 'WSH_XC_CHANGE_REQ_FIELD';
774 			RAISE WSH_XC_INVALID_OPERATION;
775 		END IF;
776 
777 
778 		-- append p_message to the current message text if p_message is
779 		-- not NULL
780 		IF p_message is NOT NULL then
781 			-- l_xcp_record.message := l_xcp_record.message || p_message;
782 			 l_xcp_record.message :=  p_message;
783 		END IF;
784 
785 		-- Only update on a NULL field is allowed.
786 		-- If the current value is already the same with the parameter,
787 		-- the current value is not changed and the procedure won't fail.
788 
789 		IF p_exception_name IS NOT NULL THEN
790 		  IF l_xcp_record.exception_name IS NOT NULL  and
791 		     l_xcp_record.exception_name <> p_exception_name THEN
792 		    l_msg_name := 'WSH_XC_EXP_NAME_EXIST';
793 		    RAISE WSH_XC_INVALID_OPERATION;
794                   ELSIF l_xcp_record.exception_name IS NULL THEN
795                     l_exception_name_exists := FALSE; -- since exception_name was NULL
796 		  END IF;
797 
798 		  -- validate exception_name
799                   -- bug 5183769, call get_exception for caching
800 
801                   Get_Exception_Def(
802                            p_exception_name     => p_exception_name,
803                            x_exception_def_info => l_exc_def_info,
804                            x_return_status      => l_return_status);
805 
806                   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
807 		    RAISE WSH_XC_DEF_NOT_FOUND;
808                   ELSIF l_exc_def_info.enabled = 'N' THEN
809                     IF l_debug_on THEN
810                       WSH_DEBUG_SV.logmsg(l_module_name,'Not logging exception since the exception is not enabled',WSH_DEBUG_SV.C_PROC_LEVEL);
811                     END IF;
812                     GOTO end_proc;
813 		  END IF;
814 
815 		  -- get default status
816                   -- Shipping Exception enhancement
817                   IF l_exc_def_info.default_severity IN ( 'ERROR' , 'WARNING' ) THEN
818                      l_xcp_record.status := 'OPEN';
819                      l_status            := 'OPEN';
820                   ELSE
821                      l_xcp_record.status := 'NO_ACTION_REQUIRED';
822                      l_status            := 'NO_ACTION_REQUIRED';
823                   END IF;
824 
825 		  l_xcp_record.exception_name := UPPER(p_exception_name);
826 
827 		  -- set default severity
828 		  l_xcp_record.severity := UPPER(l_exc_def_info.default_severity);
829                   l_severity := l_xcp_record.severity;
830 
831 		END IF; -- end of IF p_exception_name IS NOT NULL THEN
832 
833 		IF p_trip_id IS NOT NULL THEN
834 			IF l_xcp_record.trip_id IS NULL THEN
835 				l_xcp_record.trip_id:= p_trip_id;
836 			ELSE
837 				IF l_xcp_record.trip_id <> p_trip_id THEN
838 				        l_msg_name := 'WSH_XC_TRIP_NUM_EXIST';
839 					RAISE WSH_XC_INVALID_OPERATION;
840 				END IF;
841 			END IF;
842 		END IF;
843 
844 		IF p_trip_name IS NOT NULL THEN
845 			IF l_xcp_record.trip_name IS NULL THEN
846 				l_xcp_record.trip_name:= p_trip_name;
847 			ELSE
848 				IF l_xcp_record.trip_name <> p_trip_name THEN
849 				        l_msg_name := 'WSH_XC_TRIP_NAME_EXIST';
850 					RAISE WSH_XC_INVALID_OPERATION;
851 				END IF;
852 			END IF;
853 		END IF;
854 
855 		IF p_trip_stop_id IS NOT NULL THEN
856 			IF l_xcp_record.trip_stop_id IS NULL THEN
857 				l_xcp_record.trip_stop_id:= p_trip_stop_id;
858 			ELSE
859 				IF l_xcp_record.trip_stop_id <> p_trip_stop_id THEN
860 				        l_msg_name := 'WSH_XC_STOP_NUM_EXIST';
861 					RAISE WSH_XC_INVALID_OPERATION;
862 				END IF;
863 			END IF;
864 		END IF;
865 
866 		IF p_delivery_id IS NOT NULL THEN
867 			IF l_xcp_record.delivery_id IS NULL THEN
868 				l_xcp_record.delivery_id:= p_delivery_id;
869 			ELSE
870 				IF l_xcp_record.delivery_id <> p_delivery_id THEN
871 				        l_msg_name := 'WSH_XC_DEL_NUM_EXIST';
872 					RAISE WSH_XC_INVALID_OPERATION;
873 				END IF;
874 			END IF;
875 		END IF;
876 
877 		IF p_delivery_name IS NOT NULL THEN
878 			IF l_xcp_record.delivery_name IS NULL THEN
879 				l_xcp_record.delivery_name:= p_delivery_name;
880 			ELSE
881 				IF l_xcp_record.delivery_name <> p_delivery_name THEN
882 				        l_msg_name := 'WSH_XC_DEL_NAME_EXIST';
883 					RAISE WSH_XC_INVALID_OPERATION;
884 				END IF;
885 			END IF;
886     END IF;
887 
888 		IF p_delivery_detail_id IS NOT NULL THEN
889 	  	 	IF l_xcp_record.delivery_detail_id IS NULL THEN
890 				l_xcp_record.delivery_detail_id:= p_delivery_detail_id;
891 	   	ELSE
892 				IF l_xcp_record.delivery_detail_id <> p_delivery_detail_id THEN
893 				        l_msg_name := 'WSH_XC_DET_NUM_EXIST';
894 					RAISE WSH_XC_INVALID_OPERATION;
895 	   		END IF;
896 	   	END IF;
897 		END IF;
898 
899 		IF p_delivery_assignment_id IS NOT NULL THEN
900 	   	IF l_xcp_record.delivery_assignment_id IS NULL THEN
901 				l_xcp_record.delivery_assignment_id:= p_delivery_assignment_id;
902 	   	ELSE
903 				IF l_xcp_record.delivery_assignment_id <> p_delivery_assignment_id THEN
904 				        l_msg_name := 'WSH_XC_ASSIGN_NUM_EXIST';
905 					RAISE WSH_XC_INVALID_OPERATION;
906 	   		END IF;
907 	   	END IF;
908 		END IF;
909 
910 
911 		/*IF p_container_name IS NOT NULL THEN
912 			IF l_xcp_record.container_name IS NULL THEN
913 				l_xcp_record.container_name:= p_container_name;
914 			ELSE
915 				IF l_xcp_record.container_name <> p_container_name THEN
916 				        l_msg_name := 'WSH_XC_CON_NAME_EXIST';
917 					RAISE WSH_XC_INVALID_OPERATION;
918 				END IF;
919 			END IF;
920 		END IF;*/--LPN Synch Up ..samanna
921 
922 		IF p_inventory_item_id IS NOT NULL THEN
923 			IF l_xcp_record.inventory_item_id IS NULL THEN
924 				l_xcp_record.inventory_item_id :=  p_inventory_item_id;
925 			ELSE
926 				IF l_xcp_record.inventory_item_id <> p_inventory_item_id THEN
927 				        l_msg_name := 'WSH_XC_INV_ITEM_ID_EXIST';
928 					RAISE WSH_XC_INVALID_OPERATION;
929 				END IF;
930 			END IF;
931 		END IF;
932 
933 
934 		IF p_lot_number IS NOT NULL THEN
935 			IF l_xcp_record.lot_number IS NULL THEN
936 				l_xcp_record.lot_number:=p_lot_number ;
937 			ELSE
938 				IF l_xcp_record.lot_number <> p_lot_number THEN
939 				        l_msg_name := 'WSH_XC_LOT_NUM_EXIST';
940 					RAISE WSH_XC_INVALID_OPERATION;
941 				END IF;
942 			END IF;
943 		END IF;
944 -- HW BUG#:1900149
945 -- HW OPMCONV - Removed sublot code
946 
947 -- HW end of 1900149
948 
949 		IF p_revision IS NOT NULL THEN
950 			IF l_xcp_record.revision IS NULL THEN
951 				l_xcp_record.revision:=p_revision ;
952 			ELSE
953 				IF l_xcp_record.revision <> p_revision THEN
954 				        l_msg_name := 'WSH_XC_REVSION_EXIST';
955 					RAISE WSH_XC_INVALID_OPERATION;
956 				END IF;
957 			END IF;
958 		END IF;
959 
960 		IF p_serial_number IS NOT NULL THEN
961 			IF l_xcp_record.serial_number IS NULL THEN
962 				l_xcp_record.serial_number := p_serial_number ;
963 			ELSE
964 				IF l_xcp_record.serial_number <> p_serial_number THEN
965 				        l_msg_name := 'WSH_XC_SER_NUM_EXIST';
966 					RAISE WSH_XC_INVALID_OPERATION;
967 				END IF;
968 			END IF;
969 		END IF;
970 
971 	IF p_unit_of_measure IS NOT NULL THEN
972 		IF l_xcp_record.unit_of_measure IS NULL THEN
973 			l_xcp_record.unit_of_measure :=p_unit_of_measure  ;
974 		ELSE
975 			IF l_xcp_record.unit_of_measure <> p_unit_of_measure THEN
976 			        l_msg_name := 'WSH_XC_UOM_EXIST';
977 				RAISE WSH_XC_INVALID_OPERATION;
978 			END IF;
979 		END IF;
980 	END IF;
981 
982 	IF p_quantity IS NOT NULL THEN
983 		IF l_xcp_record.quantity IS NULL THEN
984 			l_xcp_record.quantity := p_quantity ;
985 		ELSE
986 			IF l_xcp_record.quantity <> p_quantity THEN
987 			        l_msg_name := 'WSH_XC_QUANTITY_EXIST';
988 				RAISE WSH_XC_INVALID_OPERATION;
989 			END IF;
990 		END IF;
991 	END IF;
992 
993 -- HW BUG#:1900149
994 	IF p_unit_of_measure2 IS NOT NULL THEN
995 		IF l_xcp_record.unit_of_measure2 IS NULL THEN
996 			l_xcp_record.unit_of_measure2 :=p_unit_of_measure2  ;
997 		ELSE
998 			IF l_xcp_record.unit_of_measure2 <> p_unit_of_measure2 THEN
999 			        l_msg_name := 'WSH_XC_SEC_UOM_EXIST';
1000 				RAISE WSH_XC_INVALID_OPERATION;
1001 			END IF;
1002 		END IF;
1003 	END IF;
1004 
1005 	IF p_quantity2 IS NOT NULL THEN
1006 		IF l_xcp_record.quantity2 IS NULL THEN
1007 			l_xcp_record.quantity2 := p_quantity2 ;
1008 		ELSE
1009 			IF l_xcp_record.quantity2 <> p_quantity2 THEN
1010 			        l_msg_name := 'WSH_XC_SEC_QUANTITY_EXIST';
1011 				RAISE WSH_XC_INVALID_OPERATION;
1012 			END IF;
1013 		END IF;
1014 	END IF;
1015 -- HW end of 1900149
1016 
1017 
1018 	IF p_subinventory IS NOT NULL THEN
1019 		IF l_xcp_record.subinventory IS NULL THEN
1020 			l_xcp_record.subinventory := p_subinventory ;
1021 		ELSE
1022 			IF l_xcp_record.subinventory <> p_subinventory THEN
1023 			        l_msg_name := 'WSH_XC_SUBINVENTORY_EXIST';
1024 				RAISE WSH_XC_INVALID_OPERATION;
1025 			END IF;
1026 		END IF;
1027 	END IF;
1028 
1029 	IF p_locator_id IS NOT NULL THEN
1030 		IF l_xcp_record.locator_id IS NULL THEN
1031 			l_xcp_record.locator_id := p_locator_id  ;
1032 		ELSE
1033 			IF l_xcp_record.locator_id <> p_locator_id THEN
1034 			        l_msg_name := 'WSH_XC_LOCATOR_NUM_EXIST';
1035 				RAISE WSH_XC_INVALID_OPERATION;
1036 			END IF;
1037 		END IF;
1038 	END IF;
1039 
1040 	IF p_arrival_date IS NOT NULL THEN
1041 		IF l_xcp_record.arrival_date IS NULL THEN
1042 			l_xcp_record.arrival_date := p_arrival_date   ;
1043 		ELSE
1044 			IF l_xcp_record.arrival_date <> p_arrival_date THEN
1045 			        l_msg_name := 'WSH_XC_ARR_DATE_EXIST';
1046 				RAISE WSH_XC_INVALID_OPERATION;
1047 			END IF;
1048 		END IF;
1049 	END IF;
1050 
1051 	IF p_departure_date IS NOT NULL THEN
1052 		IF l_xcp_record.departure_date IS NULL THEN
1053 			l_xcp_record.departure_date := p_departure_date  ;
1054 		ELSE
1055 			IF l_xcp_record.departure_date <> p_departure_date THEN
1056 			        l_msg_name := 'WSH_XC_DEP_DATE_EXIST';
1057 				RAISE WSH_XC_INVALID_OPERATION;
1058 			END IF;
1059 		END IF;
1060 	END IF;
1061 
1062 
1063 
1064 		-- update p_error_message to the current message text if p_error_message is
1065 		-- not NULL
1066 		IF p_error_message is NOT NULL then
1067 			 l_xcp_record.error_message :=  p_error_message;
1068 		END IF;
1069 
1070 /*-- Bug No:2363908 ---> Fix : Update is allowed for all the DFF attributes appearing in SHipping Exception Form
1071 Fix is done by commenting all the checks
1072 
1073 	IF p_attribute_category IS NOT NULL THEN
1074 		IF l_xcp_record.attribute_category IS NULL THEN
1075 			l_xcp_record.attribute_category := p_attribute_category  ;
1076 		ELSE
1077 			IF l_xcp_record.attribute_category <> p_attribute_category THEN
1078 			        l_msg_name := 'WSH_XC_ATTR_CATEGORY_EXIST';
1079 				RAISE WSH_XC_INVALID_OPERATION;
1080 			END IF;
1081 		END IF;
1082 	END IF;
1083 
1084 	IF p_attribute1 IS NOT NULL THEN
1085 		IF l_xcp_record.attribute1 IS NULL THEN
1086 			l_xcp_record.attribute1 := p_attribute1;
1087 		ELSE
1088 			IF l_xcp_record.attribute1 <> p_attribute1 THEN
1089 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1090 			        l_field_name := 'ATTRIBUTE1';
1091 				RAISE WSH_XC_INVALID_OPERATION;
1092 			END IF;
1093 		END IF;
1094 	END IF;
1095 
1096 	IF p_attribute2 IS NOT NULL THEN
1097 		IF l_xcp_record.attribute2 IS NULL THEN
1098 			l_xcp_record.attribute2 := p_attribute2;
1099 		ELSE
1100 			IF l_xcp_record.attribute2 <> p_attribute2 THEN
1101 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1102 			        l_field_name := 'ATTRIBUTE2';
1103 				RAISE WSH_XC_INVALID_OPERATION;
1104 			END IF;
1105 		END IF;
1106 	END IF;
1107 
1108 	IF p_attribute3 IS NOT NULL THEN
1109 		IF l_xcp_record.attribute3 IS NULL THEN
1110 			l_xcp_record.attribute3 := p_attribute3;
1111 		ELSE
1112 			IF l_xcp_record.attribute3 <> p_attribute3 THEN
1113 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1114 			        l_field_name := 'ATTRIBUTE3';
1115 				RAISE WSH_XC_INVALID_OPERATION;
1116 			END IF;
1117 		END IF;
1118 	END IF;
1119 
1120 	IF p_attribute4 IS NOT NULL THEN
1121 		IF l_xcp_record.attribute4 IS NULL THEN
1122 			l_xcp_record.attribute4 := p_attribute4;
1123 		ELSE
1124 			IF l_xcp_record.attribute4 <> p_attribute4 THEN
1125 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1126 			        l_field_name := 'ATTRIBUTE4';
1127 				RAISE WSH_XC_INVALID_OPERATION;
1128 			END IF;
1129 		END IF;
1130 	END IF;
1131 
1132 	IF p_attribute5 IS NOT NULL THEN
1133 		IF l_xcp_record.attribute5 IS NULL THEN
1134 			l_xcp_record.attribute5 := p_attribute5;
1135 		ELSE
1136 			IF l_xcp_record.attribute5 <> p_attribute5 THEN
1137 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1138 			        l_field_name := 'ATTRIBUTE5';
1139 				RAISE WSH_XC_INVALID_OPERATION;
1140 			END IF;
1141 		END IF;
1142 	END IF;
1143 
1144 	IF p_attribute6 IS NOT NULL THEN
1145 		IF l_xcp_record.attribute6 IS NULL THEN
1146 			l_xcp_record.attribute6 := p_attribute6;
1147 		ELSE
1148 			IF l_xcp_record.attribute6 <> p_attribute6 THEN
1149 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1150 			        l_field_name := 'ATTRIBUTE6';
1151 				RAISE WSH_XC_INVALID_OPERATION;
1152 			END IF;
1153 		END IF;
1154 	END IF;
1155 
1156 	IF p_attribute7 IS NOT NULL THEN
1157 		IF l_xcp_record.attribute7 IS NULL THEN
1158 			l_xcp_record.attribute7 := p_attribute7;
1159 		ELSE
1160 			IF l_xcp_record.attribute7 <> p_attribute7 THEN
1161 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1162 			        l_field_name := 'ATTRIBUTE7';
1163 				RAISE WSH_XC_INVALID_OPERATION;
1164 			END IF;
1165 		END IF;
1166 	END IF;
1167 
1168 	IF p_attribute8 IS NOT NULL THEN
1169 		IF l_xcp_record.attribute8 IS NULL THEN
1170 			l_xcp_record.attribute8 := p_attribute8;
1171 		ELSE
1172 			IF l_xcp_record.attribute8 <> p_attribute8 THEN
1173 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1174 			        l_field_name := 'ATTRIBUTE8';
1175 				RAISE WSH_XC_INVALID_OPERATION;
1176 			END IF;
1177 		END IF;
1178 	END IF;
1179 
1180 	IF p_attribute9 IS NOT NULL THEN
1181 		IF l_xcp_record.attribute9 IS NULL THEN
1182 			l_xcp_record.attribute9 := p_attribute9;
1183 		ELSE
1184 			IF l_xcp_record.attribute9 <> p_attribute9 THEN
1185 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1186 			        l_field_name := 'ATTRIBUTE9';
1187 				RAISE WSH_XC_INVALID_OPERATION;
1188 			END IF;
1189 		END IF;
1190 	END IF;
1191 
1192 	IF p_attribute10 IS NOT NULL THEN
1193 		IF l_xcp_record.attribute10 IS NULL THEN
1194 			l_xcp_record.attribute10 := p_attribute10;
1195 		ELSE
1196 			IF l_xcp_record.attribute10 <> p_attribute10 THEN
1197 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1198 			        l_field_name := 'ATTRIBUTE10';
1199 				RAISE WSH_XC_INVALID_OPERATION;
1200 			END IF;
1201 		END IF;
1202 	END IF;
1203 
1204 	IF p_attribute11 IS NOT NULL THEN
1205 		IF l_xcp_record.attribute11 IS NULL THEN
1206 			l_xcp_record.attribute11 := p_attribute11;
1207 		ELSE
1208 			IF l_xcp_record.attribute11 <> p_attribute11 THEN
1209 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1210 			        l_field_name := 'ATTRIBUTE11';
1211 				RAISE WSH_XC_INVALID_OPERATION;
1212 			END IF;
1213 		END IF;
1214 	END IF;
1215 
1216 	IF p_attribute12 IS NOT NULL THEN
1217 		IF l_xcp_record.attribute12 IS NULL THEN
1218 			l_xcp_record.attribute12 := p_attribute12;
1219 		ELSE
1220 			IF l_xcp_record.attribute12 <> p_attribute12 THEN
1221 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1222 			        l_field_name := 'ATTRIBUTE12';
1223 				RAISE WSH_XC_INVALID_OPERATION;
1224 			END IF;
1225 		END IF;
1226 	END IF;
1227 
1228 	IF p_attribute13 IS NOT NULL THEN
1229 		IF l_xcp_record.attribute13 IS NULL THEN
1230 			l_xcp_record.attribute13 := p_attribute13;
1231 		ELSE
1232 			IF l_xcp_record.attribute13 <> p_attribute13 THEN
1233 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1234 			        l_field_name := 'ATTRIBUTE13';
1235 				RAISE WSH_XC_INVALID_OPERATION;
1236 			END IF;
1237 		END IF;
1238 	END IF;
1239 
1240 	IF p_attribute14 IS NOT NULL THEN
1241 		IF l_xcp_record.attribute14 IS NULL THEN
1242 			l_xcp_record.attribute14 := p_attribute14;
1243 		ELSE
1244 			IF l_xcp_record.attribute14 <> p_attribute14 THEN
1245 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1246 			        l_field_name := 'ATTRIBUTE14';
1247 				RAISE WSH_XC_INVALID_OPERATION;
1248 			END IF;
1249 		END IF;
1250 	END IF;
1251 
1252 	IF l_debug_on THEN
1253 
1254 	    WSH_DEBUG_SV.log(l_module_name,'p_attribute15',p_attribute15);
1255 	    WSH_DEBUG_SV.log(l_module_name,'l_xcp_record.attribute15',l_xcp_record.attribute15);
1256 	END IF;
1257 	IF p_attribute15 IS NOT NULL THEN
1258 
1259 		IF l_xcp_record.attribute15 IS NULL THEN
1260 			l_xcp_record.attribute15 := p_attribute15;
1261 		ELSE
1262 			IF l_xcp_record.attribute15 <> p_attribute15 THEN
1263 			        l_msg_name := 'WSH_XC_ATTR_EXIST';
1264 			        l_field_name := 'ATTRIBUTE15';
1265 				RAISE WSH_XC_INVALID_OPERATION;
1266 			END IF;
1267 		END IF;
1268 	END IF;
1269 
1270 -- End of fix for Bug:2363908  */
1271 
1272 
1273 -- BUG#:1549665 hwahdani added p_request_id
1274 	IF p_request_id IS NOT NULL THEN
1275 		IF l_xcp_record.request_id IS NULL THEN
1276 			l_xcp_record.request_id := p_request_id ;
1277 		ELSE
1278 			IF l_xcp_record.request_id <> p_request_id THEN
1279 			        l_msg_name := 'WSH_XC_REQ_ID_EXIST';
1280 				RAISE WSH_XC_INVALID_OPERATION;
1281 			END IF;
1282 		END IF;
1283 	END IF;
1284 
1285 
1286 	UPDATE wsh_exceptions
1287 	SET
1288 		logged_at_location_id = l_xcp_record.logged_at_location_id,
1289 		logging_entity = l_xcp_record.logging_entity,
1290 		logging_entity_id = l_xcp_record.logging_entity_id,
1291 		exception_name = l_xcp_record.exception_name,
1292 		exception_location_id = l_xcp_record.exception_location_id,
1293 		message = l_xcp_record.message,
1294 		severity = l_xcp_record.severity,
1295 		manually_logged = l_xcp_record.manually_logged,
1296 		status = l_xcp_record.status,
1297 		trip_id = l_xcp_record.trip_id,
1298 		trip_name = l_xcp_record.trip_name,
1299 		trip_stop_id = l_xcp_record.trip_stop_id,
1300 		delivery_id = l_xcp_record.delivery_id,
1301 		delivery_name = l_xcp_record.delivery_name,
1302 		delivery_detail_id = l_xcp_record.delivery_detail_id,
1303 		delivery_assignment_id = l_xcp_record.delivery_assignment_id,
1304 		container_name =l_xcp_record.container_name,
1305 		inventory_item_id = l_xcp_record.inventory_item_id,
1306 		lot_number = l_xcp_record.lot_number,
1307 -- HW BUG#:1900149 added sublot
1308 -- HW OPMCONV - No need for sublot_number
1309 --              sublot_number = l_xcp_record.sublot_number,
1310 		revision = l_xcp_record.revision,
1311 		serial_number = l_xcp_record.serial_number,
1312 		unit_of_measure = l_xcp_record.unit_of_measure,
1313 		quantity = l_xcp_record.quantity,
1314 -- HW BUG#:1900149 added uom2 and qty2
1315 		unit_of_measure2 = l_xcp_record.unit_of_measure2,
1316 		quantity2 = l_xcp_record.quantity2,
1317 -- HW end of 1900149
1318 		subinventory = l_xcp_record.subinventory,
1319 		locator_id = l_xcp_record.locator_id,
1320 		arrival_date = l_xcp_record.arrival_date,
1321 		departure_date = l_xcp_record.departure_date,
1322 		error_message = l_xcp_record.error_message,
1323 		attribute_category = p_attribute_category,
1324 		attribute1 = p_attribute1,
1325 		attribute2 = p_attribute2,
1326 		attribute3 = p_attribute3,
1327 		attribute4 = p_attribute4,
1328 		attribute5 = p_attribute5,
1329 		attribute6 = p_attribute6,
1330 		attribute7 = p_attribute7,
1331 		attribute8 = p_attribute8,
1332 		attribute9 = p_attribute9,
1333 		attribute10 = p_attribute10,
1334 		attribute11 = p_attribute11,
1335 		attribute12 = p_attribute12,
1336 		attribute13 = p_attribute13,
1337 		attribute14 = p_attribute14,
1338 		attribute15 = p_attribute15,
1339 		last_update_date = NVL(p_last_update_date,SYSDATE),
1340    	last_updated_by = NVL(p_last_updated_by,FND_GLOBAL.USER_ID),
1341 		last_update_login = NVL(p_last_update_login,FND_GLOBAL.LOGIN_ID),
1342 --BUG#:1549665 hwahdani added request_id
1343 		request_id = l_xcp_record.request_id
1344 	WHERE CURRENT OF C3;
1345 
1346 	IF FND_API.TO_BOOLEAN(p_commit) THEN
1347 		COMMIT WORK;
1348 		x_exception_id := l_exception_id;
1349 	END IF;
1350 	CLOSE C3;
1351 
1352 
1353 END IF;
1354 
1355   -- Raise Business Event , if exception is workflow enabled and Exception name is being passed first time
1356   IF p_exception_name IS NOT NULL AND NOT (l_exception_name_exists)
1357   AND nvl(l_exc_def_info.initiate_workflow,'N') = 'Y' THEN
1358      IF l_debug_on THEN
1359         WSH_DEBUG_SV.logmsg(l_module_name,'Raising Business event for exception : '||l_exception_id,WSH_DEBUG_SV.C_PROC_LEVEL);
1360      END IF;
1361      l_event_key := x_exception_id;
1362      IF p_delivery_detail_id IS NOT NULL THEN
1363         l_p_entity_name := 'LINE';
1364         l_p_entity_id   := p_delivery_detail_id;
1365      ELSIF p_trip_stop_id IS NOT NULL THEN
1366         l_p_entity_name := 'STOP';
1367         l_p_entity_id   := p_trip_stop_id;
1368      ELSIF p_delivery_id IS NOT NULL THEN
1369         l_p_entity_name := 'DELIVERY';
1370         l_p_entity_id   := p_delivery_id;
1371      ELSIF p_trip_id IS NOT NULL THEN
1372         l_p_entity_name := 'TRIP';
1373         l_p_entity_id   := p_trip_id;
1374      ELSE
1375         l_p_entity_name := NULL;
1376         l_p_entity_id   := NULL;
1377      END IF;
1378      IF l_debug_on THEN
1379         WSH_DEBUG_SV.logmsg(l_module_name,'Entity Name : '||l_p_entity_name||' Entity Id : '||l_p_entity_id ,WSH_DEBUG_SV.C_PROC_LEVEL);
1380      END IF;
1381      WF_EVENT.AddParameterToList ( p_name  => 'EXCEPTION_NAME',
1382                                    p_value => p_exception_name,
1383                                    p_parameterlist => l_msg_parameter_list);
1384      WF_EVENT.AddParameterToList ( p_name  => 'EXCEPTION_ID',
1385                                    p_value => x_exception_id,
1386                                    p_parameterlist => l_msg_parameter_list);
1387      WF_EVENT.AddParameterToList ( p_name  => 'ENTITY_NAME',
1388                                    p_value => l_p_entity_name,
1389                                    p_parameterlist => l_msg_parameter_list);
1390      WF_EVENT.AddParameterToList ( p_name  => 'ENTITY_ID',
1391                                    p_value => l_p_entity_id,
1392                                    p_parameterlist => l_msg_parameter_list);
1393      WF_EVENT.AddParameterToList ( p_name  => 'EXCEPTION_BEHAVIOR',
1394                                    p_value => l_severity,
1395                                    p_parameterlist => l_msg_parameter_list);
1396      IF l_debug_on THEN
1397         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WF_EVENT.RAISE' ,WSH_DEBUG_SV.C_PROC_LEVEL);
1398      END IF;
1399      WF_EVENT.Raise ( p_event_name => l_event_name,
1400                       p_event_key  => 'EXCP'||l_event_key,
1401                       p_parameters => l_msg_parameter_list );
1402   END IF;
1403 
1404 <<end_proc>>
1405 
1406     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1407     if x_msg_count > 1 then
1408       IF l_debug_on THEN
1409         wsh_debug_sv.logmsg(l_module_name, 'x_msg_count > 1');
1410       END IF;
1411       x_msg_data := SUBSTRB((l_msg_summary || l_msg_details),1, 2000);
1412     else
1413       IF l_debug_on THEN
1414        wsh_debug_sv.logmsg(l_module_name, 'x_msg_count < 1');
1415       END IF;
1416       x_msg_data := SUBSTRB(l_msg_summary, 1, 2000);
1417     end if;
1418 
1419 --
1420 -- Debug Statements
1421 --
1422 IF l_debug_on THEN
1423     WSH_DEBUG_SV.pop(l_module_name);
1424 END IF;
1425 --
1426     EXCEPTION
1427 
1428 
1429 		WHEN WSH_XC_INVALID_OPERATION THEN
1430 			IF C3%ISOPEN THEN
1431 				CLOSE C3;
1432 			END IF;
1433 
1434 			FND_MESSAGE.SET_NAME('WSH', l_msg_name);
1435 			IF l_msg_name = 'WSH_XC_ATTR_EXIST' THEN
1436 			   FND_MESSAGE.SET_TOKEN('FIELD', l_field_name , TRUE);
1437 			END IF;
1438 
1439 			IF l_msg_name = 'WSH_MISSING_DETAILS' THEN   --LPN Synch Up..samanna
1440 			   FND_MESSAGE.SET_TOKEN('Cont_name',p_container_name);
1441 			END IF;
1442 
1443 --l_msg_summary := fnd_message.get;
1444 
1445 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1446 			x_return_status := FND_API.G_RET_STS_ERROR;
1447 
1448 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1449                         --
1450                         -- Debug Statements
1451                         --
1452                         IF l_debug_on THEN
1453                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1454                         END IF;
1455                         --
1456 			if x_msg_count > 1 then
1457 				x_msg_data := l_msg_summary || l_msg_details;
1458 			else
1459 				x_msg_data := l_msg_summary;
1460 			end if;
1461 
1462 --
1463 -- Debug Statements
1464 --
1465 IF l_debug_on THEN
1466     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_OPERATION exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1467     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_OPERATION');
1468 END IF;
1469 --
1470 		WHEN WSH_XC_INVALID_LOGGING_ENTITY THEN
1471 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_INVALID_LOGGING_ENTITY');
1472 
1473 --l_msg_summary := fnd_message.get;
1474 
1475 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1476 			x_return_status := FND_API.G_RET_STS_ERROR;
1477 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1478                         --
1479                         -- Debug Statements
1480                         --
1481                         IF l_debug_on THEN
1482                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1483                         END IF;
1484                         --
1485 			if x_msg_count > 1 then
1486 				x_msg_data := l_msg_summary || l_msg_details;
1487 			else
1488 				x_msg_data := l_msg_summary;
1489 		   end if;
1490 
1491 --
1492 -- Debug Statements
1493 --
1494 IF l_debug_on THEN
1495     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_LOGGING_ENTITY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1496     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_LOGGING_ENTITY');
1497 END IF;
1498 --
1499 		WHEN WSH_XC_INVALID_SEVERITY THEN
1500 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_INVALID_SEVERITY');
1501 
1502 --l_msg_summary := fnd_message.get;
1503 
1504 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1505 			x_return_status := FND_API.G_RET_STS_ERROR;
1506 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1507                         --
1508                         -- Debug Statements
1509                         --
1510                         IF l_debug_on THEN
1511                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1512                         END IF;
1513                         --
1514 			if x_msg_count > 1 then
1515 				x_msg_data := l_msg_summary || l_msg_details;
1516 			else
1517 				x_msg_data := l_msg_summary;
1518 		   end if;
1519 
1520 
1521 --
1522 -- Debug Statements
1523 --
1524 IF l_debug_on THEN
1525     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_SEVERITY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1526     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_SEVERITY');
1527 END IF;
1528 --
1529 		WHEN WSH_XC_INVALID_LOCATION THEN
1530 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_INVALID_LOCATION');
1531 
1532 --l_msg_summary := fnd_message.get;
1533 
1534 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1535 			x_return_status := FND_API.G_RET_STS_ERROR;
1536 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1537                         --
1538                         -- Debug Statements
1539                         --
1540                         IF l_debug_on THEN
1541                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1542                         END IF;
1543                         --
1544 			if x_msg_count > 1 then
1545 				x_msg_data := l_msg_summary || l_msg_details;
1546 			else
1547 				x_msg_data := l_msg_summary;
1548 		   end if;
1549 
1550 
1551 --
1552 -- Debug Statements
1553 --
1554 IF l_debug_on THEN
1555     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_LOCATION exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1556     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_LOCATION');
1557 END IF;
1558 --
1559 		WHEN WSH_XC_NOT_FOUND THEN
1560 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_NOT_FOUND');
1561 
1562 --l_msg_summary := fnd_message.get;
1563 
1564 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1565 			x_return_status := FND_API.G_RET_STS_ERROR;
1566 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1567                         --
1568                         -- Debug Statements
1569                         --
1570                         IF l_debug_on THEN
1571                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1572                         END IF;
1573                         --
1574 			if x_msg_count > 1 then
1575 				x_msg_data := l_msg_summary || l_msg_details;
1576 			else
1577 				x_msg_data := l_msg_summary;
1578 		   end if;
1579 
1580 
1581 --
1582 -- Debug Statements
1583 --
1584 IF l_debug_on THEN
1585     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1586     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_NOT_FOUND');
1587 END IF;
1588 --
1589 		WHEN WSH_XC_DEF_NOT_FOUND THEN
1590 
1591 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1592 			x_return_status := FND_API.G_RET_STS_ERROR;
1593 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1594                         --
1595                         -- Debug Statements
1596                         --
1597                         IF l_debug_on THEN
1598                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1599                         END IF;
1600                         --
1601 			if x_msg_count > 1 then
1602 				x_msg_data := l_msg_summary || l_msg_details;
1603 			else
1604 				x_msg_data := l_msg_summary;
1605 		   end if;
1606 
1607 --
1608 -- Debug Statements
1609 --
1610 IF l_debug_on THEN
1611     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1612     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_NOT_FOUND');
1613 END IF;
1614 --
1615 		WHEN WSH_XC_DATA_ERROR THEN
1616 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DATA_ERROR');
1617 
1618 --l_msg_summary := fnd_message.get;
1619 
1620 			WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1621 			x_return_status := FND_API.G_RET_STS_ERROR;
1622 			WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1623                         --
1624                         -- Debug Statements
1625                         --
1626                         IF l_debug_on THEN
1627                             WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1628                         END IF;
1629                         --
1630 			if x_msg_count > 1 then
1631 				x_msg_data := l_msg_summary || l_msg_details;
1632 			else
1633 				x_msg_data := l_msg_summary;
1634 		   end if;
1635 
1636 
1637 --
1638 -- Debug Statements
1639 --
1640 IF l_debug_on THEN
1641     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DATA_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1642     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DATA_ERROR');
1643 END IF;
1644 --
1645 		WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1646 			ROLLBACK TO Log_Exception_PUB ;
1647 
1648 l_msg_summary := 'unexpected error';
1649 --
1650 -- Debug Statements
1651 --
1652 IF l_debug_on THEN
1653     WSH_DEBUG_SV.logmsg(l_module_name,  L_MSG_SUMMARY  );
1654 END IF;
1655 --
1656 
1657 			x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1658 			IF	FND_MSG_PUB.check_msg_level
1659 		        (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1660 			THEN
1661 					FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1662 			END IF;
1663 			FND_MSG_PUB.count_and_get ( p_count => x_msg_count, p_data => x_msg_data);
1664 
1665 
1666 --
1667 -- Debug Statements
1668 --
1669 IF l_debug_on THEN
1670     WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1671     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
1672 END IF;
1673 --
1674 		WHEN OTHERS THEN
1675 			ROLLBACK TO Log_Exception_PUB ;
1676 			x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1677 			IF	FND_MSG_PUB.check_msg_level
1678 		        (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1679 			THEN
1680 					FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
1681 			END IF;
1682 			FND_MSG_PUB.count_and_get ( p_count => x_msg_count, p_data => x_msg_data);
1683 
1684 --
1685 -- Debug Statements
1686 --
1687 IF l_debug_on THEN
1688     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1689     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1690 END IF;
1691 --
1692   END log_exception;
1693 
1694 -- ---------------------------------------------------------------------
1695 -- Start of comments
1696 -- API name		: change_status
1697 --	Type			: Public
1698 --	Function		: If the p_old_status matches the current exception status,
1699 --						this procedure will change the status in two ways:
1700 --						1) if p_set_default_status = FND_API.G_TRUE (i.e. 'T'),
1701 --							then it sets the exception to default status
1702 --						2) if p_set_default_status is missing, it sets the
1703 --							exception to x_new_status
1704 --
1705 -- Pre-reqs		: The existance of the exception
1706 --	Version		:  Initial version 1.0
1707 -- Notes			:
1708 --
1709 -- End of comments
1710 -- ---------------------------------------------------------------------
1711 
1712 
1713 PROCEDURE change_status(
1714 		-- standard parameters
1715 		p_api_version			IN			NUMBER,
1716 		p_init_msg_list		IN 		VARCHAR2,
1717 		p_commit					IN			VARCHAR2,
1718 		p_validation_level	IN 		NUMBER,
1719 		x_return_status		OUT NOCOPY  		VARCHAR2,
1720 		x_msg_count				OUT NOCOPY  		NUMBER,
1721 		x_msg_data				OUT NOCOPY  		VARCHAR2,
1722 
1723 		-- program specific parameters
1724 		p_exception_id			IN			NUMBER,
1725 		p_old_status			IN			VARCHAR2,
1726 		p_set_default_status	IN			VARCHAR2,
1727 		x_new_status			IN	OUT NOCOPY 	VARCHAR2
1728 ) IS
1729 
1730 	l_api_version	CONSTANT	NUMBER := 1.0;
1731 	l_api_name		CONSTANT	VARCHAR2(30) := 'Change_Status';
1732 
1733 
1734 	CURSOR C1(c_exception_id2 NUMBER) IS
1735 			SELECT UPPER(exception_name),
1736                 DECODE( UPPER(status), 'MANUAL','OPEN' ,
1737                                        'LOGGED','OPEN' ,
1738                                        'IN_PROCESS','OPEN' ,
1739                                        'ERROR','OPEN' ,
1740                                        'NOT_HANDLED','NO_ACTION_REQUIRED' ,
1741                                         NULL,'NO_ACTION_REQUIRED' ,
1742                                         UPPER(status)
1743                        )
1744 			FROM wsh_exceptions
1745 			WHERE exception_id = c_exception_id2;
1746 
1747 	CURSOR C2(c_exception_id NUMBER) IS
1748 			SELECT UPPER(default_severity), UPPER(exception_handling),
1749 					UPPER(initiate_workflow)
1750 			FROM wsh_exception_definitions_vl
1751 			WHERE exception_name = (
1752 				SELECT exception_name
1753 				FROM wsh_exceptions
1754 			   WHERE exception_id = c_exception_id);
1755 
1756 		l_exception_name				VARCHAR2(30);
1757 		l_new_status					VARCHAR2(30)	:= NULL;
1758 		l_old_status					VARCHAR2(30);
1759 		l_p_old_status					VARCHAR2(30);
1760 
1761 		l_lookups_status				VARCHAR2(30);
1762 		l_status_valid					VARCHAR2(1) 	:= FND_API.G_FALSE;
1763 		l_exception_handling			VARCHAR2(16);
1764 		l_initiate_workflow			VARCHAR2(1)		:= 'N';
1765 		l_severity			         VARCHAR2(10);
1766 
1767 		-- local variable to hold the token for WSH_XC_INVALID_OPERATION
1768 		l_msg_name                                      VARCHAR2(30)    := NULL;
1769 		l_msg_summary					VARCHAR2(2000) := NULL;
1770 		l_msg_details					VARCHAR2(4000) := NULL;
1771 
1772 
1773 		WSH_XC_STATUS_MISMATCH		EXCEPTION;
1774 
1775 		-- current status does not match p_old_status
1776 		WSH_XC_NOT_FOUND					EXCEPTION; -- exception not found
1777 		WSH_XC_INVALID_OPERATION		EXCEPTION; -- operation not allowed
1778 		WSH_XC_INVALID_STATUS			EXCEPTION; -- the new status is not valid
1779 		WSH_XC_DATA_ERROR             EXCEPTION;
1780 		WSH_XC_EXCEPTION_CLOSED			EXCEPTION;
1781                 WSH_XC_OTM_ERROR                        EXCEPTION; -- OTM R12 glog project
1782 
1783 --
1784 l_debug_on BOOLEAN;
1785 --
1786 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHANGE_STATUS';
1787 --
1788 BEGIN
1789     -- Standard begin of API savepoint
1790 		--
1791 		-- Debug Statements
1792 		--
1793 		--
1794 		l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1795 		--
1796 		IF l_debug_on IS NULL
1797 		THEN
1798 		    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1799 		END IF;
1800 		--
1801 		IF l_debug_on THEN
1802 		    WSH_DEBUG_SV.push(l_module_name);
1803 		    --
1804 		    WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION',P_API_VERSION);
1805 		    WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
1806 		    WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
1807 		    WSH_DEBUG_SV.log(l_module_name,'P_VALIDATION_LEVEL',P_VALIDATION_LEVEL);
1808 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_ID',P_EXCEPTION_ID);
1809 		    WSH_DEBUG_SV.log(l_module_name,'P_OLD_STATUS',P_OLD_STATUS);
1810 		    WSH_DEBUG_SV.log(l_module_name,'P_SET_DEFAULT_STATUS',P_SET_DEFAULT_STATUS);
1811 		    WSH_DEBUG_SV.log(l_module_name,'X_NEW_STATUS',X_NEW_STATUS);
1812 		END IF;
1813 		--
1814 		SAVEPOINT	Change_Status_PUB;
1815 		-- Standard call to check for call compatibility.
1816 		IF NOT FND_API.compatible_api_call(l_api_version,
1817 											p_api_version,
1818 											l_api_name,
1819 											G_PKG_NAME)	THEN
1820 			RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1821 		END IF;
1822 
1823 		-- Check p_init_msg_list
1824 		IF FND_API.to_boolean(p_init_msg_list)	THEN
1825 			FND_MSG_PUB.initialize;
1826 		END IF;
1827 
1828 		-- initialize API return status to success
1829 			x_return_status := FND_API.G_RET_STS_SUCCESS;
1830 
1831    -- Converting the p_old_status to applicable status (OPEN,CLOSED,NO_ACTION_REQUIRED) since we do not upgrade old exceptions status to new
1832    -- However new exceptions will be logged with new valid status
1833    -- If p_old_status is CLOSED, then raise error
1834    IF p_old_status IN ('MANUAL','LOGGED','IN_PROCESS','ERROR') THEN
1835       l_p_old_status := 'OPEN';
1836    ELSIF p_old_status IN ('NOT_HANDLED',NULL) THEN
1837       l_p_old_status := 'NO_ACTION_REQUIRED';
1838    ELSIF p_old_status IN ('CLOSED') THEN
1839 		RAISE WSH_XC_EXCEPTION_CLOSED;
1840    ELSE
1841       l_p_old_status := UPPER(p_old_status);
1842    END IF;
1843 
1844 	-- validate existence of this exception
1845 	OPEN C1(p_exception_id);
1846 	FETCH C1 INTO l_exception_name, l_old_status;
1847 	IF (C1%FOUND) THEN
1848       IF l_debug_on THEN
1849          WSH_DEBUG_SV.logmsg(l_module_name,'l_old_status:'||l_old_status||' l_p_old_status:'||l_p_old_status, WSH_DEBUG_SV.C_PROC_LEVEL);
1850        END IF;
1851 		IF l_old_status <> UPPER(l_p_old_status) THEN
1852 			CLOSE C1;
1853 			RAISE WSH_XC_STATUS_MISMATCH;
1854 		END IF;
1855 	ELSE
1856 		CLOSE C1;
1857 		RAISE WSH_XC_NOT_FOUND;
1858 	END IF;
1859 
1860 	-- validate parameters, p_set_default_status and x_new_status is mutually exclusive
1861 	--
1862 	IF p_set_default_status = FND_API.G_TRUE THEN
1863 		x_new_status := NULL;
1864 		OPEN C2(p_exception_id);
1865 		FETCH C2 INTO l_severity, l_exception_handling, l_initiate_workflow;
1866 
1867 		IF (C2%FOUND) THEN
1868          -- Shipping exception enhancement
1869          IF l_severity IN ('ERROR', 'WARNING') THEN
1870             l_new_status := 'OPEN';
1871          ELSE
1872             l_new_status := 'NO_ACTION_REQUIRED';
1873 			END IF;
1874 
1875 		ELSE
1876 			-- exception name not found in wsh_exception_definitions_vl
1877 			CLOSE C2;
1878 			RAISE WSH_XC_DATA_ERROR;
1879 		END IF;
1880 
1881 		CLOSE C2;
1882 
1883 	ELSE -- p_set_default_status is false
1884 
1885 		IF x_new_status IS NULL  THEN
1886 		        l_msg_name := 'WSH_XC_STATUS_REQUIRED';
1887 			RAISE WSH_XC_INVALID_OPERATION;
1888 		ELSIF l_p_old_status = 'CLOSED' THEN
1889 			RAISE WSH_XC_EXCEPTION_CLOSED;
1890 		ELSIF UPPER(x_new_status) = 'CLOSED' THEN
1891 		   l_new_status := UPPER(x_new_status);
1892 		ELSE
1893 			RAISE WSH_XC_INVALID_STATUS;
1894 		END IF;
1895 
1896 	END IF;
1897 
1898         -- OTM R12 glog project
1899         --IF l_exception_name = 'WSH_OTM_SHIPMENT_ERROR' AND
1900         IF l_exception_name = C_OTM_EXC_NAME AND
1901            l_new_status = 'CLOSED' THEN
1902            RAISE WSH_XC_OTM_ERROR;
1903          END IF;
1904         -- OTM R12 end of glog project
1905 
1906 	UPDATE wsh_exceptions
1907 		SET 	status = l_new_status,
1908 				last_update_date = SYSDATE,
1909 				last_updated_by = FND_GLOBAL.USER_ID,
1910 				last_update_login = FND_GLOBAL.LOGIN_ID
1911 		WHERE exception_id = p_exception_id
1912       AND   DECODE( UPPER(status),
1913                     'MANUAL','OPEN' ,
1914                     'LOGGED','OPEN' ,
1915                     'IN_PROCESS','OPEN' ,
1916                     'ERROR','OPEN' ,
1917                     'NOT_HANDLED','NO_ACTION_REQUIRED' ,
1918                      NULL,'NO_ACTION_REQUIRED' ,
1919                     UPPER(status)
1920                   ) = l_p_old_status ;
1921 
1922 	IF FND_API.TO_BOOLEAN(p_commit) THEN
1923 		COMMIT WORK;
1924 	END IF;
1925 
1926 	x_new_status := l_new_status;
1927 
1928 --
1929 -- Debug Statements
1930 --
1931 IF l_debug_on THEN
1932     WSH_DEBUG_SV.pop(l_module_name);
1933 END IF;
1934 --
1935 EXCEPTION
1936 
1937                 -- OTM R12 glog project
1938 WHEN  WSH_XC_OTM_ERROR THEN
1939     FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_OTM_EXCEPTION');
1940     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1941     x_return_status := FND_API.G_RET_STS_ERROR;
1942     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1943     if x_msg_count > 1 then
1944       x_msg_data := l_msg_summary || l_msg_details;
1945     else
1946       x_msg_data := l_msg_summary;
1947     end if;
1948     --
1949     -- Debug Statements
1950     --
1951     IF l_debug_on THEN
1952       WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_OTM_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1953       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_OTM_ERROR');
1954     END IF;
1955   -- OTM R12 end of glog project
1956 
1957 WHEN  WSH_XC_INVALID_STATUS THEN
1958     FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_INVALID_STATUS');
1959     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1960     x_return_status := FND_API.G_RET_STS_ERROR;
1961     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1962     if x_msg_count > 1 then
1963 	x_msg_data := l_msg_summary || l_msg_details;
1964     else
1965 	x_msg_data := l_msg_summary;
1966     end if;
1967 
1968 
1969     --
1970     -- Debug Statements
1971     --
1972     IF l_debug_on THEN
1973      WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_STATUS exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1974      WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_STATUS');
1975     END IF;
1976     --
1977 WHEN WSH_XC_INVALID_OPERATION THEN
1978     FND_MESSAGE.SET_NAME('WSH', l_msg_name);
1979     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1980     x_return_status := FND_API.G_RET_STS_ERROR;
1981     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
1982     if x_msg_count > 1 then
1983     	x_msg_data := l_msg_summary || l_msg_details;
1984     else
1985     	x_msg_data := l_msg_summary;
1986     end if;
1987 
1988    --
1989    -- Debug Statements
1990    --
1991    IF l_debug_on THEN
1992        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_OPERATION exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1993        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_OPERATION');
1994    END IF;
1995    --
1996 WHEN WSH_XC_STATUS_MISMATCH THEN
1997     FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_STATUS_MISMATCH');
1998     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
1999     x_return_status := FND_API.G_RET_STS_ERROR;
2000     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
2001     if x_msg_count > 1 then
2002     	x_msg_data := l_msg_summary || l_msg_details;
2003     else
2004     	x_msg_data := l_msg_summary;
2005     end if;
2006 
2007 
2008     --
2009     -- Debug Statements
2010     --
2011     IF l_debug_on THEN
2012         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_STATUS_MISMATCH exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2013         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_STATUS_MISMATCH');
2014     END IF;
2015     --
2016 WHEN WSH_XC_NOT_FOUND THEN
2017      IF C1%ISOPEN THEN
2018      CLOSE C1;
2019      END IF;
2020      FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_NOT_FOUND');
2021      WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
2022      x_return_status := FND_API.G_RET_STS_ERROR;
2023      WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
2024      if x_msg_count > 1 then
2025      	x_msg_data := l_msg_summary || l_msg_details;
2026      else
2027      	x_msg_data := l_msg_summary;
2028      end if;
2029 
2030 
2031      --
2032      -- Debug Statements
2033      --
2034      IF l_debug_on THEN
2035          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2036          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_NOT_FOUND');
2037      END IF;
2038      --
2039 WHEN WSH_XC_DATA_ERROR THEN
2040     FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DATA_ERROR');
2041     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
2042     x_return_status := FND_API.G_RET_STS_ERROR;
2043     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
2044     if x_msg_count > 1 then
2045     	x_msg_data := l_msg_summary || l_msg_details;
2046     else
2047     	x_msg_data := l_msg_summary;
2048     end if;
2049 
2050 
2051     --
2052     -- Debug Statements
2053     --
2054     IF l_debug_on THEN
2055         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DATA_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2056         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DATA_ERROR');
2057     END IF;
2058     --
2059 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2060     ROLLBACK TO Change_Status_PUB ;
2061     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2062     IF	FND_MSG_PUB.check_msg_level
2063            (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2064     THEN
2065     FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2066     END IF;
2067     FND_MSG_PUB.count_and_get ( p_count => x_msg_count, p_data => x_msg_data);
2068 
2069 
2070     --
2071     -- Debug Statements
2072     --
2073     IF l_debug_on THEN
2074         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2075         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
2076     END IF;
2077     --
2078 
2079 WHEN WSH_XC_EXCEPTION_CLOSED THEN
2080     FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_EXCEPTION_CLOSED');
2081     FND_MESSAGE.SET_TOKEN('EXCEPTION_ID', P_EXCEPTION_ID);
2082     WSH_UTIL_CORE.ADD_MESSAGE(p_message_type);
2083     x_return_status := FND_API.G_RET_STS_ERROR;
2084     WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
2085     if x_msg_count > 1 then
2086        x_msg_data := l_msg_summary || l_msg_details;
2087     else
2088        x_msg_data := l_msg_summary;
2089     end if;
2090 
2091 
2092     IF l_debug_on THEN
2093        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_EXCEPTION_CLOSED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2094        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_OPERATION');
2095     END IF;
2096 
2097 
2098 WHEN OTHERS THEN
2099     ROLLBACK TO Change_Status_PUB ;
2100     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2101     IF	FND_MSG_PUB.check_msg_level
2102             (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
2103     THEN
2104     	FND_MSG_PUB.Add_Exc_Msg(G_PKG_NAME, l_api_name);
2105     END IF;
2106     FND_MSG_PUB.count_and_get ( p_count => x_msg_count, p_data => x_msg_data);
2107 
2108     --
2109     -- Debug Statements
2110     --
2111     IF l_debug_on THEN
2112         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2113         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2114     END IF;
2115     --
2116 END change_status;
2117 
2118 
2119 -- -------------------------------------------------------------------
2120 -- Start of comments
2121 -- API name			: insert_xc_def_form
2122 --	Type				: public
2123 --	Function			: insert exception definitions, called by form
2124 --	Version			: Initial version 1.0
2125 --
2126 -- End of comments
2127 -- ---------------------------------------------------------------------
2128 
2129 procedure insert_xc_def_form (
2130 		x_exception_definition_id in out NOCOPY  NUMBER,
2131 		p_exception_name			in VARCHAR2,
2132 		p_description				in VARCHAR2,
2133 		p_exception_type			in VARCHAR2,
2134 		p_default_severity  		in VARCHAR2,
2135 		p_exception_handling		in VARCHAR2,
2136 	  	p_workflow_item_type		in VARCHAR2,
2137 	  	p_workflow_process  	 	in VARCHAR2,
2138 		p_initiate_workflow 		in VARCHAR2,
2139 		p_update_allowed 			in VARCHAR2,
2140 		p_enabled 			      in VARCHAR2,
2141 		p_attribute_category 	in VARCHAR2,
2142 		p_attribute1				in VARCHAR2,
2143 		p_attribute2				in VARCHAR2,
2144 		p_attribute3	         in VARCHAR2,
2145 		p_attribute4	   		in VARCHAR2,
2146 		p_attribute5	         in VARCHAR2,
2147 		p_attribute6	 			in VARCHAR2,
2148 		p_attribute7				in VARCHAR2,
2149 		p_attribute8				in VARCHAR2,
2150 		p_attribute9				in VARCHAR2,
2151 		p_attribute10				in VARCHAR2,
2152 		p_attribute11	  			in VARCHAR2,
2153 		p_attribute12	 			in VARCHAR2,
2154 		p_attribute13				in VARCHAR2,
2155 		p_attribute14				in VARCHAR2,
2156 		p_attribute15	   		in VARCHAR2,
2157 		p_creation_date  			in DATE,
2158   		p_created_by       		in NUMBER,
2159   		p_last_update_date 		in DATE,
2160   		p_last_updated_by  		in NUMBER,
2161   		p_last_update_login		in NUMBER
2162 )  is
2163 
2164 cursor C1 (c_exception_name VARCHAR2) is
2165 		select exception_name
2166 		from wsh_exception_definitions_vl
2167 		where exception_name = c_exception_name;
2168 
2169 cursor C2 (c_exception_definition_id NUMBER) is
2170  select ROWID from WSH_EXCEPTION_DEFINITIONS_B
2171     where EXCEPTION_DEFINITION_ID =
2172 			 c_exception_definition_id;
2173 
2174 l_exception_name VARCHAR2(30);
2175 l_exception_definition_id NUMBER;
2176 l_rowid				VARCHAR2(30) := NULL;
2177 
2178 WSH_XC_DEF_DUP				exception;
2179 WSH_XC_DEF_NOT_FOUND		exception;
2180 
2181 
2182 --
2183 l_debug_on BOOLEAN;
2184 --
2185 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'INSERT_XC_DEF_FORM';
2186 --
2187 begin
2188 
2189 --
2190 -- Debug Statements
2191 --
2192 --
2193 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2194 --
2195 IF l_debug_on IS NULL
2196 THEN
2197     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2198 END IF;
2199 --
2200 IF l_debug_on THEN
2201     WSH_DEBUG_SV.push(l_module_name);
2202     --
2203     WSH_DEBUG_SV.log(l_module_name,'X_EXCEPTION_DEFINITION_ID',X_EXCEPTION_DEFINITION_ID);
2204     WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
2205     WSH_DEBUG_SV.log(l_module_name,'P_DESCRIPTION',P_DESCRIPTION);
2206     WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_TYPE',P_EXCEPTION_TYPE);
2207     WSH_DEBUG_SV.log(l_module_name,'P_DEFAULT_SEVERITY',P_DEFAULT_SEVERITY);
2208     WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_HANDLING',P_EXCEPTION_HANDLING);
2209     WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_ITEM_TYPE',P_WORKFLOW_ITEM_TYPE);
2210     WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_PROCESS',P_WORKFLOW_PROCESS);
2211     WSH_DEBUG_SV.log(l_module_name,'P_INITIATE_WORKFLOW',P_INITIATE_WORKFLOW);
2212     WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_ALLOWED',P_UPDATE_ALLOWED);
2213     WSH_DEBUG_SV.log(l_module_name,'P_ENABLED',P_ENABLED);
2214     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE_CATEGORY',P_ATTRIBUTE_CATEGORY);
2215     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE1',P_ATTRIBUTE1);
2216     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE2',P_ATTRIBUTE2);
2217     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE3',P_ATTRIBUTE3);
2218     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE4',P_ATTRIBUTE4);
2219     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE5',P_ATTRIBUTE5);
2220     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE6',P_ATTRIBUTE6);
2221     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE7',P_ATTRIBUTE7);
2222     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE8',P_ATTRIBUTE8);
2223     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE9',P_ATTRIBUTE9);
2224     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE10',P_ATTRIBUTE10);
2225     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE11',P_ATTRIBUTE11);
2226     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE12',P_ATTRIBUTE12);
2227     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE13',P_ATTRIBUTE13);
2228     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE14',P_ATTRIBUTE14);
2229     WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE15',P_ATTRIBUTE15);
2230     WSH_DEBUG_SV.log(l_module_name,'P_CREATION_DATE',P_CREATION_DATE);
2231     WSH_DEBUG_SV.log(l_module_name,'P_CREATED_BY',P_CREATED_BY);
2232     WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_DATE',P_LAST_UPDATE_DATE);
2233     WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATED_BY',P_LAST_UPDATED_BY);
2234     WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_LOGIN',P_LAST_UPDATE_LOGIN);
2235 END IF;
2236 --
2237 open C1(p_exception_name);
2238 fetch C1 into l_exception_name;
2239 if (C1%NOTFOUND) then
2240 		if (x_exception_definition_id is not NULL)   then
2241 			open C2(x_exception_definition_id);
2242 			fetch C2 into l_rowid;
2243 			if l_rowid is not NULL then
2244 				raise WSH_XC_DEF_DUP;
2245 			else
2246 				l_exception_definition_id := x_exception_definition_id;
2247 			end if;
2248 			close C2;
2249 		else
2250 			-- populate l_exception_id
2251 			SELECT wsh_exception_definitions_s.nextval INTO l_exception_definition_id FROM SYS.DUAL;
2252 		end if;
2253 		insert into wsh_exception_definitions_b (
2254 				exception_definition_id,
2255 				exception_type,
2256 				default_severity,
2257 				exception_handling,
2258 	  			workflow_item_type,
2259 	  			workflow_process,
2260 				initiate_workflow,
2261 				update_allowed,
2262 				enabled,
2263 				attribute_category,
2264 				attribute1,
2265 				attribute2,
2266 				attribute3,
2267 				attribute4,
2268 				attribute5,
2269 				attribute6,
2270 				attribute7,
2271 				attribute8,
2272 				attribute9,
2273 				attribute10,
2274 				attribute11,
2275 				attribute12,
2276 				attribute13,
2277 				attribute14,
2278 				attribute15,
2279 				creation_date,
2280 				created_by,
2281 				last_update_date,
2282 				last_updated_by,
2283 				last_update_login
2284 			) values (
2285 				l_exception_definition_id,
2286 				UPPER(p_exception_type),
2287 				UPPER(p_default_severity),
2288 				UPPER(p_exception_handling),
2289 	  			UPPER(p_workflow_item_type),
2290 	 		 	UPPER(p_workflow_process),
2291 				UPPER(p_initiate_workflow),
2292 				UPPER(p_update_allowed),
2293 				UPPER(p_enabled),
2294 				p_attribute_category,
2295 				p_attribute1,
2296 				p_attribute2,
2297 				p_attribute3,
2298 				p_attribute4,
2299 				p_attribute5,
2300 				p_attribute6,
2301 				p_attribute7,
2302 				p_attribute8,
2303 				p_attribute9,
2304 				p_attribute10,
2305 				p_attribute11,
2306 				p_attribute12,
2307 				p_attribute13,
2308 				p_attribute14,
2309 				p_attribute15,
2310 				p_creation_date,
2311 				p_created_by,
2312 				p_last_update_date,
2313 				p_last_updated_by,
2314 				p_last_update_login
2315 			);
2316 
2317 
2318 			insert into WSH_EXCEPTION_DEFINITIONS_TL (
2319 				EXCEPTION_DEFINITION_ID,
2320 				EXCEPTION_NAME,
2321 				DESCRIPTION,
2322 				CREATION_DATE,
2323 				CREATED_BY,
2324 				LAST_UPDATE_DATE,
2325 				LAST_UPDATED_BY,
2326 				LAST_UPDATE_LOGIN,
2327 				LANGUAGE,
2328 				SOURCE_LANG
2329 			) select
2330 				l_exception_definition_id,
2331 				p_exception_name,
2332 				p_description,
2333 				p_creation_date,
2334 				p_created_by,
2335 				p_last_update_date,
2336 				p_last_updated_by,
2337 				p_last_update_login,
2338 				L.LANGUAGE_CODE,
2339 				userenv('LANG')
2340 			from FND_LANGUAGES L
2341 				where L.INSTALLED_FLAG in ('I', 'B')
2342 					and not exists
2343 				(select NULL
2344 				 from WSH_EXCEPTION_DEFINITIONS_TL T
2345 				 where T.EXCEPTION_DEFINITION_ID = l_exception_definition_id
2346 				 and T.LANGUAGE = L.LANGUAGE_CODE);
2347 
2348 
2349 
2350 				open C2 (l_exception_definition_id);
2351 				fetch C2 into l_rowid;
2352 				if (C2%notfound) then
2353 					close C2;
2354 					raise WSH_XC_DEF_NOT_FOUND;
2355 				end if;
2356 				close C2;
2357 				close C1;
2358 		else
2359 				close C1;
2360 				raise WSH_XC_DEF_DUP;
2361 		end if;
2362 		x_exception_definition_id := l_exception_definition_id;
2363 
2364 --
2365 -- Debug Statements
2366 --
2367 IF l_debug_on THEN
2368     WSH_DEBUG_SV.pop(l_module_name);
2369 END IF;
2370 --
2371 		exception
2372 
2373 		WHEN WSH_XC_DEF_DUP THEN
2374 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DEF_DUP');
2375 			APP_EXCEPTION.RAISE_EXCEPTION;
2376 
2377 --
2378 -- Debug Statements
2379 --
2380 IF l_debug_on THEN
2381     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_DUP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2382     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_DUP');
2383 END IF;
2384 --
2385 		WHEN WSH_XC_DEF_NOT_FOUND THEN
2386 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_NOT_FOUND');
2387 			APP_EXCEPTION.RAISE_EXCEPTION;
2388 
2389 --
2390 -- Debug Statements
2391 --
2392 IF l_debug_on THEN
2393     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2394     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_NOT_FOUND');
2395 END IF;
2396 --
2397 end insert_xc_def_form;
2398 
2399 
2400 
2401 
2402 
2403 -- -------------------------------------------------------------------
2404 -- Start of comments
2405 -- API name			: update_xc_def_form
2406 --	Type				: public
2407 --	Function			: update exception definitions, called by form
2408 --	Version			: Initial version 1.0
2409 --
2410 -- End of comments
2411 -- ---------------------------------------------------------------------
2412 procedure	update_xc_def_form (
2413 	   p_exception_definition_id  in NUMBER,
2414 		p_exception_name		in VARCHAR2,
2415 		p_description			in VARCHAR2,
2416 		p_exception_type		in VARCHAR2,
2417 		p_default_severity  	in VARCHAR2,
2418 		p_exception_handling	in VARCHAR2,
2419 	  	p_workflow_item_type	in VARCHAR2,
2420 	  	p_workflow_process   	in VARCHAR2,
2421 		p_initiate_workflow 	in VARCHAR2,
2422 		p_update_allowed 		in VARCHAR2,
2423 		p_enabled 		      in VARCHAR2,
2424 		p_attribute_category 	in VARCHAR2,
2425 		p_attribute1			in VARCHAR2,
2426 		p_attribute2			in VARCHAR2,
2427 		p_attribute3			in VARCHAR2,
2428 		p_attribute4	   		in VARCHAR2,
2429 		p_attribute5			in VARCHAR2,
2430 		p_attribute6	 		in VARCHAR2,
2431 		p_attribute7			in VARCHAR2,
2432 		p_attribute8			in VARCHAR2,
2433 		p_attribute9			in VARCHAR2,
2434 		p_attribute10			in VARCHAR2,
2435 		p_attribute11	  		in VARCHAR2,
2436 		p_attribute12	 		in VARCHAR2,
2437 		p_attribute13			in VARCHAR2,
2438 		p_attribute14			in VARCHAR2,
2439 		p_attribute15	   		in VARCHAR2,
2440 		p_creation_date  		in DATE,
2441  		p_created_by       		in NUMBER,
2442 		p_last_update_date 		in DATE,
2443 		p_last_updated_by  		in NUMBER,
2444 		p_last_update_login		in NUMBER,
2445 		p_caller                        in VARCHAR2    -- 5986504
2446 	)  is
2447 		l_exception_name VARCHAR2(30);
2448                 l_update_allowed VARCHAR2(1);
2449                 --5986504
2450 
2451                 cursor C2 (c_exception_definition_id NUMBER) is
2452                 select update_allowed from WSH_EXCEPTION_DEFINITIONS_B
2453                    where EXCEPTION_DEFINITION_ID =
2454 			 c_exception_definition_id;
2455                 --
2456 		WSH_XC_DEF_NOT_FOUND		exception;
2457 		--
2458 l_debug_on BOOLEAN;
2459 		--
2460 		l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_XC_DEF_FORM';
2461 		--
2462 begin
2463 		--
2464 		-- Debug Statements
2465 		--
2466 		--
2467 		l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2468 		--
2469 		IF l_debug_on IS NULL
2470 		THEN
2471 		    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2472 		END IF;
2473 		--
2474                 -- 5986504
2475 				open C2 (p_exception_definition_id);
2476 				fetch C2 into l_update_allowed;
2477 				close C2;
2478                 --
2479 		IF l_debug_on THEN
2480 		    WSH_DEBUG_SV.push(l_module_name);
2481 		    --
2482 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_DEFINITION_ID',P_EXCEPTION_DEFINITION_ID);
2483 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
2484 		    WSH_DEBUG_SV.log(l_module_name,'P_DESCRIPTION',P_DESCRIPTION);
2485 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_TYPE',P_EXCEPTION_TYPE);
2486 		    WSH_DEBUG_SV.log(l_module_name,'P_DEFAULT_SEVERITY',P_DEFAULT_SEVERITY);
2487 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_HANDLING',P_EXCEPTION_HANDLING);
2488 		    WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_ITEM_TYPE',P_WORKFLOW_ITEM_TYPE);
2489 		    WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_PROCESS',P_WORKFLOW_PROCESS);
2490 		    WSH_DEBUG_SV.log(l_module_name,'P_INITIATE_WORKFLOW',P_INITIATE_WORKFLOW);
2491 		    WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_ALLOWED',P_UPDATE_ALLOWED);
2492 		    WSH_DEBUG_SV.log(l_module_name,'P_ENABLED',P_ENABLED);
2493 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE_CATEGORY',P_ATTRIBUTE_CATEGORY);
2494 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE1',P_ATTRIBUTE1);
2495 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE2',P_ATTRIBUTE2);
2496 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE3',P_ATTRIBUTE3);
2497 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE4',P_ATTRIBUTE4);
2498 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE5',P_ATTRIBUTE5);
2499 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE6',P_ATTRIBUTE6);
2500 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE7',P_ATTRIBUTE7);
2501 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE8',P_ATTRIBUTE8);
2502 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE9',P_ATTRIBUTE9);
2503 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE10',P_ATTRIBUTE10);
2504 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE11',P_ATTRIBUTE11);
2505 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE12',P_ATTRIBUTE12);
2506 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE13',P_ATTRIBUTE13);
2507 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE14',P_ATTRIBUTE14);
2508 		    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE15',P_ATTRIBUTE15);
2509 		    WSH_DEBUG_SV.log(l_module_name,'P_CREATION_DATE',P_CREATION_DATE);
2510 		    WSH_DEBUG_SV.log(l_module_name,'P_CREATED_BY',P_CREATED_BY);
2511 		    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_DATE',P_LAST_UPDATE_DATE);
2512 		    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATED_BY',P_LAST_UPDATED_BY);
2513 		    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_LOGIN',P_LAST_UPDATE_LOGIN);
2514 		    WSH_DEBUG_SV.log(l_module_name,'L_UPDATE_ALLOWED -in Db ', L_UPDATE_ALLOWED); --5986504
2515 		    WSH_DEBUG_SV.log(l_module_name,'L_CALLER  -Loader / Form ', P_CALLER); --5986504
2516 		END IF;
2517 		-- 5986504{ If Caller is Loader then Either p_update_allowed should be N or a Flip (Y -> N or N-Y)
2518                 --           should have taken place to be Elligible for Update.
2519                 --          If Caller is Form , then Updates are Elligible
2520                 if ( nvl(p_caller, 'FORM') = 'LOADER'  and ( upper(p_update_allowed) = 'N'  or
2521                             (upper(p_update_allowed) = 'Y' and l_update_allowed = 'N')) ) OR
2522                    ( nvl(p_caller, 'FORM') = 'FORM' )   THEN
2523 		     update wsh_exception_definitions_b
2524 		     set
2525 				exception_type 	= p_exception_type,
2526 				default_severity 	= UPPER(p_default_severity),
2527 				exception_handling	= UPPER(p_exception_handling),
2528 	  			workflow_item_type	= UPPER(p_workflow_item_type),
2529 	  			workflow_process	= UPPER(p_workflow_process),
2530 				initiate_workflow	= UPPER(p_initiate_workflow),
2531 				update_allowed		= UPPER(p_update_allowed),
2532 				enabled		      = UPPER(p_enabled),
2533 				attribute_category	=  p_attribute_category,
2534 				attribute1		=  p_attribute1,
2535 				attribute2		=  p_attribute2,
2536 				attribute3		=  p_attribute3,
2537 				attribute4		=  p_attribute4,
2538 				attribute5		=  p_attribute5,
2539 				attribute6		=  p_attribute6,
2540 				attribute7		=  p_attribute7,
2541 				attribute8		=  p_attribute8,
2542 				attribute9		=  p_attribute9,
2543 				attribute10		=  p_attribute10,
2544 				attribute11		=  p_attribute11,
2545 				attribute12		=  p_attribute12,
2546 				attribute13		=  p_attribute13,
2547 				attribute14		=  p_attribute14,
2548 				attribute15		=  p_attribute15,
2549 				creation_date		=  p_creation_date,
2550 				created_by		=  p_created_by,
2551 				last_update_date	=  p_last_update_date,
2552 				last_updated_by	=  p_last_updated_by,
2553 				last_update_login   =  p_last_update_login
2554 			where EXCEPTION_DEFINITION_ID = p_exception_definition_id ;
2555 			if (sql%notfound) then
2556 				raise WSH_XC_DEF_NOT_FOUND;
2557 			end if;
2558 
2559                         -- 5986504
2560 		        IF l_debug_on THEN
2561 		           WSH_DEBUG_SV.log(l_module_name,'After Base Table Update ... ', P_CALLER);
2562                         END IF;
2563 
2564 			update WSH_EXCEPTION_DEFINITIONS_TL set
2565 				EXCEPTION_NAME = p_exception_name,
2566 				DESCRIPTION = p_description,
2567 				LAST_UPDATE_DATE = p_last_update_date,
2568 				LAST_UPDATED_BY = p_last_updated_by,
2569 				LAST_UPDATE_LOGIN = p_last_update_login,
2570 				SOURCE_LANG = userenv('LANG')
2571 			where EXCEPTION_DEFINITION_ID = p_exception_definition_id
2572 			and userenv('LANG') in (LANGUAGE, SOURCE_LANG);
2573 
2574 			if (sql%notfound) then
2575 				raise WSH_XC_DEF_NOT_FOUND;
2576 			end if;
2577 
2578                         -- 5986504
2579 		        IF l_debug_on THEN
2580 		           WSH_DEBUG_SV.log(l_module_name,'After TL Table Update ... ', P_CALLER);
2581                            WSH_DEBUG_SV.logmsg(l_module_name,'After Updates '||P_EXCEPTION_DEFINITION_ID,WSH_DEBUG_SV.C_EXCEP_LEVEL);
2582                            WSH_DEBUG_SV.logmsg(l_module_name,'After Updates '||P_CALLER,WSH_DEBUG_SV.C_EXCEP_LEVEL);
2583                         END IF;
2584 
2585                      end if;  -- 5986504	 }
2586 
2587 --
2588 -- Debug Statements
2589 --
2590 IF l_debug_on THEN
2591     WSH_DEBUG_SV.pop(l_module_name);
2592 END IF;
2593 --
2594 exception
2595 
2596 		WHEN WSH_XC_DEF_NOT_FOUND THEN
2597 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DEF_NOT_FOUND');
2598                         IF l_debug_on THEN
2599 		           WSH_DEBUG_SV.log(l_module_name,'- Failed in Update .. ', P_CALLER);
2600                         END IF;
2601 			APP_EXCEPTION.RAISE_EXCEPTION;
2602 
2603 --
2604 -- Debug Statements
2605 --
2606 IF l_debug_on THEN
2607     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2608     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_NOT_FOUND');
2609 END IF;
2610 --
2611 end update_xc_def_form;
2612 
2613 
2614 
2615 
2616 
2617 -- ---------------------------------------------------------------------
2618 -- procedure: Load_Row
2619 -- description: called by the generic loader to upload exception definition
2620 --              This procedure should be called only by generic loader
2621 --			 no one else should call this procedure.
2622 -- ---------------------------------------------------------------------
2623 procedure Load_Row (
2624 		p_language			in VARCHAR2,
2625 		p_source_lang			in VARCHAR2,
2626 		p_exception_definition_id	in NUMBER,
2627 		p_exception_name		in VARCHAR2,
2628 		p_description			in VARCHAR2,
2629 		p_exception_type		in VARCHAR2,
2630 		p_default_severity  	in VARCHAR2,
2631 		p_exception_handling	in VARCHAR2,
2632 	  	p_workflow_item_type	in VARCHAR2,
2633 	  	p_workflow_process   	in VARCHAR2,
2634 		p_initiate_workflow 	in VARCHAR2,
2635 		p_update_allowed 		in VARCHAR2,
2636 		p_enabled 		      in VARCHAR2,
2637 		p_attribute_category 	in VARCHAR2,
2638 		p_attribute1			in VARCHAR2,
2639 		p_attribute2			in VARCHAR2,
2640 		p_attribute3			in VARCHAR2,
2641 		p_attribute4	   		in VARCHAR2,
2642 		p_attribute5			in VARCHAR2,
2643 		p_attribute6	 		in VARCHAR2,
2644 		p_attribute7			in VARCHAR2,
2645 		p_attribute8			in VARCHAR2,
2646 		p_attribute9			in VARCHAR2,
2647 		p_attribute10			in VARCHAR2,
2648 		p_attribute11	  		in VARCHAR2,
2649 		p_attribute12	 		in VARCHAR2,
2650 		p_attribute13			in VARCHAR2,
2651 		p_attribute14			in VARCHAR2,
2652 		p_attribute15	   	in VARCHAR2,
2653 		p_creation_date 		in DATE,
2654  		p_created_by       	in NUMBER,
2655  		p_last_update_date 	in DATE,
2656  		p_last_updated_by  	in NUMBER,
2657  		p_last_update_login	in NUMBER
2658 
2659 ) is
2660 cursor C1 (c_exception_name VARCHAR2) is
2661 	select exception_definition_id from WSH_EXCEPTION_DEFINITIONS_TL
2662    where EXCEPTION_NAME = c_exception_name
2663 	and SOURCE_LANG = userenv('LANG');
2664 
2665 
2666 -- 5986504
2667 l_exception_definition_id NUMBER := NULL;
2668 l_caller     VARCHAR2(30) := 'LOADER';
2669 
2670 WSH_XC_DEF_DUP				exception;
2671 
2672 --
2673 l_debug_on BOOLEAN;
2674 --
2675 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'LOAD_ROW';
2676 --
2677 begin
2678 
2679 	--
2680 	-- Debug Statements
2681 	--
2682 	--
2683 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2684 	--
2685 	IF l_debug_on IS NULL
2686 	THEN
2687 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2688 	END IF;
2689 	--
2690 	IF l_debug_on THEN
2691 	    WSH_DEBUG_SV.push(l_module_name);
2692 	    --
2693 	    WSH_DEBUG_SV.log(l_module_name,'P_LANGUAGE',P_LANGUAGE);
2694 	    WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_LANG',P_SOURCE_LANG);
2695 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_DEFINITION_ID',P_EXCEPTION_DEFINITION_ID);
2696 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
2697 	    WSH_DEBUG_SV.log(l_module_name,'P_DESCRIPTION',P_DESCRIPTION);
2698 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_TYPE',P_EXCEPTION_TYPE);
2699 	    WSH_DEBUG_SV.log(l_module_name,'P_DEFAULT_SEVERITY',P_DEFAULT_SEVERITY);
2700 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_HANDLING',P_EXCEPTION_HANDLING);
2701 	    WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_ITEM_TYPE',P_WORKFLOW_ITEM_TYPE);
2702 	    WSH_DEBUG_SV.log(l_module_name,'P_WORKFLOW_PROCESS',P_WORKFLOW_PROCESS);
2703 	    WSH_DEBUG_SV.log(l_module_name,'P_INITIATE_WORKFLOW',P_INITIATE_WORKFLOW);
2704 	    WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_ALLOWED',P_UPDATE_ALLOWED);
2705 	    WSH_DEBUG_SV.log(l_module_name,'P_ENABLED',P_ENABLED);
2706 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE_CATEGORY',P_ATTRIBUTE_CATEGORY);
2707 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE1',P_ATTRIBUTE1);
2708 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE2',P_ATTRIBUTE2);
2709 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE3',P_ATTRIBUTE3);
2710 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE4',P_ATTRIBUTE4);
2711 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE5',P_ATTRIBUTE5);
2712 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE6',P_ATTRIBUTE6);
2713 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE7',P_ATTRIBUTE7);
2714 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE8',P_ATTRIBUTE8);
2715 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE9',P_ATTRIBUTE9);
2716 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE10',P_ATTRIBUTE10);
2717 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE11',P_ATTRIBUTE11);
2718 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE12',P_ATTRIBUTE12);
2719 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE13',P_ATTRIBUTE13);
2720 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE14',P_ATTRIBUTE14);
2721 	    WSH_DEBUG_SV.log(l_module_name,'P_ATTRIBUTE15',P_ATTRIBUTE15);
2722 	    WSH_DEBUG_SV.log(l_module_name,'P_CREATION_DATE',P_CREATION_DATE);
2723 	    WSH_DEBUG_SV.log(l_module_name,'P_CREATED_BY',P_CREATED_BY);
2724 	    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_DATE',P_LAST_UPDATE_DATE);
2725 	    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATED_BY',P_LAST_UPDATED_BY);
2726 	    WSH_DEBUG_SV.log(l_module_name,'P_LAST_UPDATE_LOGIN',P_LAST_UPDATE_LOGIN);
2727             WSH_DEBUG_SV.log(l_module_name,'L_CALLER', l_caller);  -- 5986504
2728 	END IF;
2729 	--
2730 	if (p_exception_name is not NULL ) then
2731 		if (p_source_lang = userenv('LANG')) then
2732 			open C1(p_exception_name);
2733 			fetch C1 into l_exception_definition_id ;
2734 			if (C1%NOTFOUND) then
2735 				l_exception_definition_id := p_exception_definition_id;
2736 				insert_xc_def_form(
2737                		x_exception_definition_id=>l_exception_definition_id,
2738 					p_exception_name=> p_exception_name,
2739 					p_description=> p_description,
2740 					p_exception_type=>p_exception_type,
2741 					p_default_severity=>p_default_severity,
2742 					p_exception_handling=>p_exception_handling,
2743 	  				p_workflow_item_type=>p_workflow_item_type,
2744 	  				p_workflow_process=>p_workflow_process,
2745 					p_initiate_workflow=>p_initiate_workflow,
2746 					p_update_allowed=>p_update_allowed,
2747 					p_enabled=>p_enabled,
2748 					p_attribute_category=>p_attribute_category,
2749 					p_attribute1=>p_attribute1,
2750 					p_attribute2=>p_attribute2,
2751 					p_attribute3=>p_attribute3,
2752 					p_attribute4=>p_attribute4,
2753 					p_attribute5=>p_attribute5,
2754 					p_attribute6=>p_attribute6,
2755 					p_attribute7=>p_attribute7,
2756 					p_attribute8=>p_attribute8,
2757 					p_attribute9=>p_attribute9,
2758 					p_attribute10=>p_attribute10,
2759 					p_attribute11=>p_attribute11,
2760 					p_attribute12=>p_attribute12,
2761 					p_attribute13=>p_attribute13,
2762 					p_attribute14=>p_attribute14,
2763 					p_attribute15=>p_attribute15,
2764 					p_creation_date=> p_creation_date,
2765  					p_created_by=> p_created_by,
2766 					p_last_update_date=>p_last_update_date,
2767 					p_last_updated_by=>p_last_updated_by,
2768 					p_last_update_login=>p_last_update_login
2769 				);
2770 
2771 			else
2772 			--	if l_exception_definition_id <> p_exception_definition_id then
2773 				     /* update all columns except exception_definition_id */
2774 		--			raise WSH_XC_DEF_DUP;
2775 		--		else
2776 					update_xc_def_form(
2777 						p_exception_definition_id=> l_exception_definition_id,
2778 						p_exception_name=> p_exception_name,
2779 						p_description=> p_description,
2780 						p_exception_type=>p_exception_type,
2781 						p_default_severity=>p_default_severity,
2782 						p_exception_handling=>p_exception_handling,
2783 	  					p_workflow_item_type=>p_workflow_item_type,
2784 	  					p_workflow_process=>p_workflow_process,
2785 						p_initiate_workflow=>p_initiate_workflow,
2786 						p_update_allowed=>p_update_allowed,
2787 						p_enabled=>p_enabled,
2788 						p_attribute_category=>p_attribute_category,
2789 						p_attribute1=>p_attribute1,
2790 						p_attribute2=>p_attribute2,
2791 						p_attribute3=>p_attribute3,
2792 						p_attribute4=>p_attribute4,
2793 						p_attribute5=>p_attribute5,
2794 						p_attribute6=>p_attribute6,
2795 						p_attribute7=>p_attribute7,
2796 						p_attribute8=>p_attribute8,
2797 						p_attribute9=>p_attribute9,
2798 						p_attribute10=>p_attribute10,
2799 						p_attribute11=>p_attribute11,
2800 						p_attribute12=>p_attribute12,
2801 						p_attribute13=>p_attribute13,
2802 						p_attribute14=>p_attribute14,
2803 						p_attribute15=>p_attribute15,
2804 						p_creation_date=>p_creation_date,
2805  						p_created_by=>p_created_by,
2806 						p_last_update_date=>p_last_update_date,
2807 						p_last_updated_by=>p_last_updated_by,
2808 						p_last_update_login=>p_last_update_login,
2809                                                 p_caller=>l_caller
2810 					);
2811 			--	end if;
2812 			end if;
2813 			close C1;
2814 		end if;
2815 	end if;
2816 
2817 
2818 --
2819 -- Debug Statements
2820 --
2821 IF l_debug_on THEN
2822     WSH_DEBUG_SV.pop(l_module_name);
2823 END IF;
2824 --
2825 exception
2826 
2827 			WHEN WSH_XC_DEF_DUP THEN
2828 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DEF_DUP');
2829 			APP_EXCEPTION.RAISE_EXCEPTION;
2830 
2831 --
2832 -- Debug Statements
2833 --
2834 IF l_debug_on THEN
2835     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_DUP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2836     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_DUP');
2837 END IF;
2838 --
2839 end Load_Row;
2840 
2841 
2842 
2843 
2844 
2845 -- ---------------------------------------------------------------------
2846 -- procedure: Translate_Row
2847 -- description: called by the generic loader to translate exception definition
2848 --              This procedure should be called only by generic loader
2849 --					 no one else should call this procedure.
2850 -- ---------------------------------------------------------------------
2851 procedure Translate_Row (
2852 		p_exception_definition_id		in number,
2853 		p_exception_name				in VARCHAR2,
2854 		p_description					in VARCHAR2,
2855 		p_owner							in VARCHAR2
2856 ) is
2857 --
2858 l_debug_on BOOLEAN;
2859 --
2860 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'TRANSLATE_ROW';
2861 --
2862 begin
2863 	--
2864 	-- Debug Statements
2865 	--
2866 	--
2867 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2868 	--
2869 	IF l_debug_on IS NULL
2870 	THEN
2871 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2872 	END IF;
2873 	--
2874 	IF l_debug_on THEN
2875 	    WSH_DEBUG_SV.push(l_module_name);
2876 	    --
2877 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_DEFINITION_ID',P_EXCEPTION_DEFINITION_ID);
2878 	    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
2879 	    WSH_DEBUG_SV.log(l_module_name,'P_DESCRIPTION',P_DESCRIPTION);
2880 	    WSH_DEBUG_SV.log(l_module_name,'P_OWNER',P_OWNER);
2881 	END IF;
2882 	--
2883 	if p_exception_name is not NULL then
2884 			update WSH_EXCEPTION_DEFINITIONS_TL
2885 			set
2886 				EXCEPTION_NAME = p_exception_name,
2887 				DESCRIPTION    = p_description,
2888 				LAST_UPDATE_DATE = sysdate,
2889 				LAST_UPDATED_BY   = decode(p_owner,'SEED',1,0),
2890 				LAST_UPDATE_LOGIN = 0,
2891 				SOURCE_LANG = userenv('LANG')
2892 			where userenv('LANG') in (LANGUAGE, SOURCE_LANG)
2893 			and EXCEPTION_DEFINITION_ID = p_exception_definition_id;
2894 	end if;
2895 	--
2896 	-- Debug Statements
2897 	--
2898 	IF l_debug_on THEN
2899 	    WSH_DEBUG_SV.pop(l_module_name);
2900 	END IF;
2901 	--
2902 end Translate_Row;
2903 
2904 
2905 -- -------------------------------------------------------------------
2906 -- Start of comments
2907 -- API name			: delete_xc_def_form
2908 --	Type				: public
2909 --	Function			: delete exception definitions, called by form
2910 --	Version			: Initial version 1.0
2911 --
2912 -- End of comments
2913 -- ---------------------------------------------------------------------
2914 
2915 procedure delete_xc_def_form (
2916 		p_exception_definition_id 		IN NUMBER)
2917 is
2918 		WSH_XC_DEF_NOT_FOUND		exception;
2919 		--
2920 l_debug_on BOOLEAN;
2921 		--
2922 		l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DELETE_XC_DEF_FORM';
2923 		--
2924 begin
2925 
2926 		--
2927 		-- Debug Statements
2928 		--
2929 		--
2930 		l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2931 		--
2932 		IF l_debug_on IS NULL
2933 		THEN
2934 		    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2935 		END IF;
2936 		--
2937 		IF l_debug_on THEN
2938 		    WSH_DEBUG_SV.push(l_module_name);
2939 		    --
2940 		    WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_DEFINITION_ID',P_EXCEPTION_DEFINITION_ID);
2941 		END IF;
2942 		--
2943 		delete from WSH_EXCEPTION_DEFINITIONS_TL
2944 		where EXCEPTION_DEFINITION_ID = p_exception_definition_id ;
2945 
2946 		if (sql%notfound) then
2947 			raise WSH_XC_DEF_NOT_FOUND;
2948 		end if;
2949 
2950 		delete from WSH_EXCEPTION_DEFINITIONS_B
2951 		where EXCEPTION_DEFINITION_ID = p_exception_definition_id;
2952 
2953 		if (sql%notfound) then
2954 			raise WSH_XC_DEF_NOT_FOUND;
2955 		end if;
2956 
2957 --
2958 -- Debug Statements
2959 --
2960 IF l_debug_on THEN
2961     WSH_DEBUG_SV.pop(l_module_name);
2962 END IF;
2963 --
2964 	exception
2965 
2966 		WHEN WSH_XC_DEF_NOT_FOUND THEN
2967 			FND_MESSAGE.SET_NAME('WSH', 'WSH_XC_DEF_NOT_FOUND');
2968 			APP_EXCEPTION.RAISE_EXCEPTION;
2969 
2970 
2971 --
2972 -- Debug Statements
2973 --
2974 IF l_debug_on THEN
2975     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_DEF_NOT_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2976     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_DEF_NOT_FOUND');
2977 END IF;
2978 --
2979 end delete_xc_def_form ;
2980 
2981 
2982 -- ---------------------------------------------------------------------
2983 -- procedure: Add_Language
2984 -- description: called by the loader script
2985 --
2986 --
2987 -- ---------------------------------------------------------------------
2988 procedure ADD_LANGUAGE
2989 is
2990 --
2991 l_debug_on BOOLEAN;
2992 --
2993 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ADD_LANGUAGE';
2994 --
2995 begin
2996   --
2997   -- Debug Statements
2998   --
2999   --
3000   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3001   --
3002   IF l_debug_on IS NULL
3003   THEN
3004       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3005   END IF;
3006   --
3007   IF l_debug_on THEN
3008       WSH_DEBUG_SV.push(l_module_name);
3009   END IF;
3010   --
3011   delete from WSH_EXCEPTION_DEFINITIONS_TL T
3012   where not exists
3013     (select to_char(NULL)
3014     from WSH_EXCEPTION_DEFINITIONS_B B
3015     where B.EXCEPTION_DEFINITION_ID = T.EXCEPTION_DEFINITION_ID
3016     );
3017 
3018   update WSH_EXCEPTION_DEFINITIONS_TL T set (
3019       EXCEPTION_NAME,
3020       DESCRIPTION
3021     ) = (select
3022       B.EXCEPTION_NAME,
3023       B.DESCRIPTION
3024     from WSH_EXCEPTION_DEFINITIONS_TL B
3025     where B.EXCEPTION_DEFINITION_ID = T.EXCEPTION_DEFINITION_ID
3026     and B.LANGUAGE = T.SOURCE_LANG)
3027   where (
3028       T.EXCEPTION_DEFINITION_ID,
3029       T.LANGUAGE
3030   ) in (select
3031       SUBT.EXCEPTION_DEFINITION_ID,
3032       SUBT.LANGUAGE
3033     from WSH_EXCEPTION_DEFINITIONS_TL SUBB, WSH_EXCEPTION_DEFINITIONS_TL SUBT
3034     where SUBB.EXCEPTION_DEFINITION_ID = SUBT.EXCEPTION_DEFINITION_ID
3035     and SUBB.LANGUAGE = SUBT.SOURCE_LANG
3036     and (SUBB.EXCEPTION_NAME <> SUBT.EXCEPTION_NAME
3037       or (SUBB.EXCEPTION_NAME is null and SUBT.EXCEPTION_NAME is not null)
3038       or (SUBB.EXCEPTION_NAME is not null and SUBT.EXCEPTION_NAME is null)
3039       or SUBB.DESCRIPTION <> SUBT.DESCRIPTION
3040       or (SUBB.DESCRIPTION is null and SUBT.DESCRIPTION is not null)
3041       or (SUBB.DESCRIPTION is not null and SUBT.DESCRIPTION is null)
3042   ));
3043 
3044   insert into WSH_EXCEPTION_DEFINITIONS_TL (
3045     EXCEPTION_DEFINITION_ID,
3046     EXCEPTION_NAME,
3047     DESCRIPTION,
3048     CREATION_DATE,
3049     CREATED_BY,
3050     LAST_UPDATE_DATE,
3051     LAST_UPDATED_BY,
3052     LAST_UPDATE_LOGIN,
3053     LANGUAGE,
3054     SOURCE_LANG
3055   ) select
3056     B.EXCEPTION_DEFINITION_ID,
3057     B.EXCEPTION_NAME,
3058     B.DESCRIPTION,
3059     B.CREATION_DATE,
3060     B.CREATED_BY,
3061     B.LAST_UPDATE_DATE,
3062     B.LAST_UPDATED_BY,
3063     B.LAST_UPDATE_LOGIN,
3064     L.LANGUAGE_CODE,
3065     B.SOURCE_LANG
3066   from WSH_EXCEPTION_DEFINITIONS_TL B, FND_LANGUAGES L
3067   where L.INSTALLED_FLAG in ('I', 'B')
3068   and B.LANGUAGE = userenv('LANG')
3069   and not exists
3070     (select to_char(NULL)
3071     from WSH_EXCEPTION_DEFINITIONS_TL T
3072     where T.EXCEPTION_DEFINITION_ID = B.EXCEPTION_DEFINITION_ID
3073     and T.LANGUAGE = L.LANGUAGE_CODE);
3074     --
3075     -- Debug Statements
3076     --
3077     IF l_debug_on THEN
3078         WSH_DEBUG_SV.pop(l_module_name);
3079     END IF;
3080     --
3081 end ADD_LANGUAGE;
3082 
3083 
3084 -- ---------------------------------------------------------------------
3085 -- function: Get_Lookup_Meaning
3086 -- description: called by the view WSH_EXCEPTIONS_V to get meaning
3087 -- for EXCEPTION_SEVERITY and LOGGING_ENTITY
3088 --
3089 -- return: meaning
3090 -- ---------------------------------------------------------------------
3091 function Get_Lookup_Meaning(
3092 	p_lookup_code IN VARCHAR2,
3093 	p_lookup_type IN VARCHAR2 ) return VARCHAR2
3094 is
3095 
3096 	CURSOR C1(c_lookup_code VARCHAR2, c_lookup_type VARCHAR2)  is
3097 		select meaning from fnd_lookup_values_vl
3098 		where lookup_code = c_lookup_code and
3099 		 	 lookup_type = c_lookup_type;
3100 
3101 	l_lookup_meaning VARCHAR2(80) := NULL;
3102 
3103 --
3104 l_debug_on BOOLEAN;
3105 --
3106 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_LOOKUP_MEANING';
3107 --
3108 begin
3109 	--
3110 	-- Debug Statements
3111 	--
3112 	--
3113 	l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3114 	--
3115 	IF l_debug_on IS NULL
3116 	THEN
3117 	    l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3118 	END IF;
3119 	--
3120 	IF l_debug_on THEN
3121 	    WSH_DEBUG_SV.push(l_module_name);
3122 	    --
3123 	    WSH_DEBUG_SV.log(l_module_name,'P_LOOKUP_CODE',P_LOOKUP_CODE);
3124 	    WSH_DEBUG_SV.log(l_module_name,'P_LOOKUP_TYPE',P_LOOKUP_TYPE);
3125 	END IF;
3126 	--
3127 	if p_lookup_code is NULL or p_lookup_type is NULL then
3128 		--
3129 		-- Debug Statements
3130 		--
3131 		IF l_debug_on THEN
3132 		    WSH_DEBUG_SV.pop(l_module_name);
3133 		END IF;
3134 		--
3135 		return NULL;
3136 	else
3137 	    	open C1(p_lookup_code, p_lookup_type);
3138 	    	fetch C1 into l_lookup_meaning;
3139 	    	if (C1%NOTFOUND) then
3140 		  		close C1;
3141 		  		--
3142 		  		-- Debug Statements
3143 		  		--
3144 		  		IF l_debug_on THEN
3145 		  		    WSH_DEBUG_SV.pop(l_module_name);
3146 		  		END IF;
3147 		  		--
3148 		  		return NULL;
3149 	    	else
3150 		  		close C1;
3151 	       	--
3152 	       	-- Debug Statements
3153 	       	--
3154 	       	IF l_debug_on THEN
3155 	       	    WSH_DEBUG_SV.pop(l_module_name);
3156 	       	END IF;
3157 	       	--
3158 	       	return l_lookup_meaning;
3159 	    	end if;
3160    end if;
3161 end Get_Lookup_Meaning;
3162 
3163 
3164 /*-- --------------------------------------------------------------------------
3165 -- Procedure:  Purge
3166 -- Description:  This procedure will purge the exception data based on the
3167 --               given input criteria
3168 -- --------------------------------------------------------------------------
3169     -- Purpose
3170    --  Purge the WSH_EXCEPIONS table based on input criteria
3171    --
3172    --   Input Parameters
3173    --   p_api_version
3174    --      API version number (current version is 1.0)
3175    --   p_init_msg_list (optional, default FND_API.G_FALSE)
3176    --          Valid values: FND_API.G_FALSE or FND_API.G_TRUE.
3177    --                           if set to FND_API.G_TRUE
3178    --                                   initialize error message list
3179    --                           if set to FND_API.G_FALSE - not initialize error
3180    --                                   message list
3181    --   p_commit (optional, default FND_API.G_FALSE)
3182    --           whether or not to commit the changes to database
3183    --
3184    -- Input parameters for purging the data
3185    --     See the API for more information
3186    -- Input parameters for purging the data
3187    --     See the API for more information
3188    --         p_action (optional):
3189    --            NULL:    do nothing
3190    --           'PURGE': delete closed exceptions
3191    --           'CLOSED': set all exceptions' status to Closed.
3192    --           C_ACTION_SEMICLOSED: internal use only -- close all but
3193    --                                Information Only exceptions.
3194    --                           When this action is used, only the entity ID
3195    --                           can be passed.
3196    --                           Added to resolve bug 4318747 for ITM exceptions
3197    --                           Frontported by bug 4370532
3198    --
3199    -- Output Parameters
3200    --   x_return_status
3201    --       if the process succeeds, the value is
3202    --           fnd_api.g_ret_sts_success;
3203    --       if there is an expected error, the value is
3204    --           fnd_api.g_ret_sts_error;
3205    --       if there is an unexpected error, the value is
3206    --           fnd_api.g_ret_sts_unexp_error;
3207    --   x_msg_count
3208    --       if there is one or more errors, the number of error messages
3209    --           in the buffer
3210    --   x_msg_data
3211    --       if there is one and only one error, the error message
3212    --   (See fnd_api package for more details about the above output parameters)
3213    --   x_no_of_records  - Number of Records Deleted
3214    --*/
3215 
3216 PROCEDURE Purge
3217           (p_api_version            IN     NUMBER,
3218            p_init_msg_list          IN     VARCHAR2  DEFAULT FND_API.G_FALSE,
3219            p_commit                 IN     VARCHAR2  DEFAULT FND_API.G_FALSE,
3220            p_validation_level       IN     NUMBER    DEFAULT FND_API.G_VALID_LEVEL_FULL,
3221            x_return_status          OUT NOCOPY     VARCHAR2,
3222            x_msg_count              OUT NOCOPY     NUMBER,
3223            x_msg_data               OUT NOCOPY     VARCHAR2,
3224            p_request_id             IN     NUMBER  DEFAULT NULL ,
3225            p_exception_name         IN     VARCHAR2 DEFAULT NULL,
3226            p_logging_entity         IN     VARCHAR2  DEFAULT NULL,
3227            p_exception_location_id  IN     NUMBER   DEFAULT NULL,
3228            p_logged_at_location_id  IN     NUMBER DEFAULT NULL ,
3229            p_inventory_org_id       IN     NUMBER DEFAULT NULL,
3230            p_exception_type         IN     VARCHAR2 DEFAULT NULL,
3231            p_severity               IN     VARCHAR2 DEFAULT NULL,
3232            p_status                 IN     VARCHAR2  DEFAULT NULL,
3233            p_arrival_date_from      IN     DATE     DEFAULT NULL,
3234            p_arrival_date_to        IN     DATE    DEFAULT NULL,
3235            p_departure_date_from    IN     DATE   DEFAULT NULL,
3236            p_departure_date_to      IN     DATE  DEFAULT NULL,
3237            p_creation_date_from     IN     DATE DEFAULT NULL,
3238            p_creation_date_to       IN     DATE   DEFAULT NULL,
3239 	   p_data_older_no_of_days  IN     NUMBER  DEFAULT NULL,
3240 	   x_no_of_recs_purged      OUT NOCOPY     NUMBER,
3241            p_delivery_id            IN     NUMBER DEFAULT NULL,
3242            p_trip_id                IN     NUMBER DEFAULT NULL,
3243            p_trip_stop_id           IN     NUMBER DEFAULT NULL,
3244            p_delivery_detail_id     IN     NUMBER DEFAULT NULL,
3245            p_delivery_contents      IN     VARCHAR2 DEFAULT 'Y',
3246            p_action                 IN     VARCHAR2  DEFAULT NULL
3247           )
3248 IS
3249    l_no_of_records   NUMBER ;
3250    l_api_name        CONSTANT VARCHAR2(30)      := 'Purge';
3251    l_api_version     number := 1.0;
3252    l_msg_summary     VARCHAR2(2000) := NULL;
3253    l_msg_details     VARCHAR2(4000) := NULL;
3254    WSH_PURGE_FAILED  EXCEPTION;
3255 
3256 
3257   /*CURSOR c_exceptions IS
3258   select we.rowid
3259   from wsh_exceptions we
3260   where
3261       nvl(we.request_id,-999) = nvl(p_request_id , nvl(we.request_id,-999))
3262   and nvl(we.exception_name,'XXX') = nvl(p_exception_name, nvl(we.exception_name,'XXX'))
3263   and we.logging_entity = nvl(p_logging_entity, we.logging_entity )
3264   and we.logged_at_location_id = nvl(p_logged_at_location_id , we.logged_at_location_id )
3265   and we.exception_location_id = nvl(p_exception_location_id , we.exception_location_id )
3266   and we.severity = nvl(p_severity, we.severity)
3267 -- If Action=PURGE  , Choose Recs. with Status=CLOSED
3268 -- If Action=CLOSED , if p_status is NULL, then Choose Recs. with Status<>CLOSED
3269 -- If Action=CLOSED , if p_status is NOT NULL, then Choose Recs. with p_status<>CLOSED and p_status = Status
3270   and ( ( p_action = 'PURGE' AND we.status = 'CLOSED' ) OR
3271         ( p_action = 'CLOSED' AND ( ( p_status IS NULL and we.status <> 'CLOSED' ) OR
3272                                     ( p_status IS NOT NULL and p_status <> 'CLOSED' and we.status = p_status )
3273                                   )
3274         )
3275       )
3276   and to_char(we.creation_date,'YYYY/MM/DD')  BETWEEN
3277          nvl(TO_CHAR(p_creation_date_from,'YYYY/MM/DD') ,  to_char(we.creation_date,'YYYY/MM/DD') )
3278          and  nvl(TO_CHAR(p_creation_date_to,'YYYY/MM/DD') ,  to_char(we.creation_date,'YYYY/MM/DD') )
3279   and to_char(nvl(we.arrival_date,sysdate),'YYYY/MM/DD')  BETWEEN
3280          nvl(TO_CHAR(nvl(p_arrival_date_from,nvl(we.arrival_date,sysdate)),'YYYY/MM/DD') ,
3281             to_char(nvl(we.arrival_date,sysdate),'YYYY/MM/DD') )
3282         and  nvl(TO_CHAR(nvl(p_arrival_date_to,nvl(we.arrival_date,sysdate)),'YYYY/MM/DD') ,
3283              to_char(nvl(we.arrival_date,sysdate),'YYYY/MM/DD') )
3284   and to_char(nvl(we.departure_date,sysdate),'YYYY/MM/DD')  BETWEEN
3285          nvl(TO_CHAR(nvl(p_departure_date_from,nvl(we.departure_date,sysdate)),'YYYY/MM/DD') ,
3286              to_char(nvl(we.departure_date,sysdate),'YYYY/MM/DD') )
3287         and  nvl(TO_CHAR(nvl(p_departure_date_to,nvl(we.departure_date,sysdate)),'YYYY/MM/DD') ,
3288              to_char(nvl(we.departure_date,sysdate),'YYYY/MM/DD') )
3289   and (sysdate - we.creation_date) > nvl(p_data_older_no_of_days,(sysdate - we.creation_date - 1))
3290   and (   (we.delivery_detail_id in (select distinct a.delivery_detail_id
3291                                   from wsh_delivery_assignments_v a, wsh_exceptions b
3292                                   where  a.delivery_detail_id=b.delivery_detail_id
3293                                   and    a.delivery_id=p_delivery_id)
3294            AND p_delivery_id is not null
3295            AND p_delivery_contents = 'Y')
3296        /*OR (we.container_name in (select distinct a.container_name --LPN Synch Up..samanna
3297                               from wsh_delivery_details a, wsh_delivery_assignments_v b
3298                               where  a.delivery_detail_id = b.delivery_detail_id
3299                               and    a.container_flag = 'Y'
3300                               and    b.delivery_id=p_delivery_id)
3301            AND p_delivery_id is not null
3302            AND p_delivery_contents = 'Y')
3303        OR nvl(we.delivery_id,-999) = nvl(p_delivery_id, nvl(we.delivery_id,-999))
3304       )
3305    and nvl(we.trip_id,-999) = nvl(p_trip_id, nvl(we.trip_id,-999))
3306    and nvl(we.trip_stop_id,-999) = nvl(p_trip_stop_id, nvl(we.trip_stop_id,-999))
3307    and nvl(we.delivery_detail_id,-999) = nvl(p_delivery_detail_id, nvl(we.delivery_detail_id,-999))
3308  ;*/
3309 
3310 
3311   TYPE TableOfROWID is TABLE of ROWID INDEX BY BINARY_INTEGER;
3312 
3313   RowIdList  TableOfROWID;
3314 
3315 
3316   Exceptions_SQL	VARCHAR2(32000) := NULL;
3317   Temp_SQL		VARCHAR2(300)  := NULL;
3318   c_exceptions		WSH_UTIL_CORE.RefCurType;
3319   bind_col_tab		WSH_UTIL_CORE.tbl_varchar;
3320 
3321   --Bug 5943326 Variables for bulk purge
3322   BulkBatchSize  Number := 1000;
3323 
3324   c_cfetch number;
3325   c_pfetch number;
3326   l_count number := 0;
3327   l_use_dynamic varchar2(1);  -- Bug 3582688
3328 --
3329 l_debug_on BOOLEAN;
3330 --
3331 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE';
3332 --
3333 begin
3334   -- Standard Start of API savepoint
3335   --
3336   -- Debug Statements
3337   --
3338   --
3339   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3340   --
3341   IF l_debug_on IS NULL
3342   THEN
3343       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3344   END IF;
3345   --
3346   IF l_debug_on THEN
3347       WSH_DEBUG_SV.push(l_module_name);
3348       --
3349       WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION',P_API_VERSION);
3350       WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
3351       WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
3352       WSH_DEBUG_SV.log(l_module_name,'P_VALIDATION_LEVEL',P_VALIDATION_LEVEL);
3353       WSH_DEBUG_SV.log(l_module_name,'P_REQUEST_ID',P_REQUEST_ID);
3354       WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_NAME',P_EXCEPTION_NAME);
3355       WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY',P_LOGGING_ENTITY);
3356       WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_LOCATION_ID',P_EXCEPTION_LOCATION_ID);
3357       WSH_DEBUG_SV.log(l_module_name,'P_LOGGED_AT_LOCATION_ID',P_LOGGED_AT_LOCATION_ID);
3358       WSH_DEBUG_SV.log(l_module_name,'P_INVENTORY_ORG_ID',P_INVENTORY_ORG_ID);
3359       WSH_DEBUG_SV.log(l_module_name,'P_EXCEPTION_TYPE',P_EXCEPTION_TYPE);
3360       WSH_DEBUG_SV.log(l_module_name,'P_SEVERITY',P_SEVERITY);
3361       WSH_DEBUG_SV.log(l_module_name,'P_STATUS',P_STATUS);
3362       WSH_DEBUG_SV.log(l_module_name,'P_ARRIVAL_DATE_FROM',P_ARRIVAL_DATE_FROM);
3363       WSH_DEBUG_SV.log(l_module_name,'P_ARRIVAL_DATE_TO',P_ARRIVAL_DATE_TO);
3364       WSH_DEBUG_SV.log(l_module_name,'P_DEPARTURE_DATE_FROM',P_DEPARTURE_DATE_FROM);
3365       WSH_DEBUG_SV.log(l_module_name,'P_DEPARTURE_DATE_TO',P_DEPARTURE_DATE_TO);
3366       WSH_DEBUG_SV.log(l_module_name,'P_CREATION_DATE_FROM',P_CREATION_DATE_FROM);
3367       WSH_DEBUG_SV.log(l_module_name,'P_CREATION_DATE_TO',P_CREATION_DATE_TO);
3368       WSH_DEBUG_SV.log(l_module_name,'P_DATA_OLDER_NO_OF_DAYS',P_DATA_OLDER_NO_OF_DAYS);
3369       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
3370       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
3371       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_STOP_ID',P_TRIP_STOP_ID);
3372       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID',P_DELIVERY_DETAIL_ID);
3373       WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
3374   END IF;
3375   --
3376   SAVEPOINT  WSH_XC_UTIL;
3377   -- Standard call to check for call compatibility.
3378   IF NOT FND_API.Compatible_API_Call ( l_api_version   ,
3379 								   p_api_version   ,
3380 							           l_api_name      ,
3381 							          G_PKG_NAME )
3382   THEN
3383      FND_MESSAGE.SET_NAME('WSH', 'WSH_INCOMPATIBLE_API_CALL');
3384      FND_MSG_PUB.ADD;
3385      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3386   END IF;
3387   -- Initialize message list if p_init_msg_list is set to TRUE.
3388   IF FND_API.to_Boolean( p_init_msg_list ) THEN
3389     FND_MSG_PUB.initialize;
3390   END IF;
3391    -- Initialize API return status to success
3392   x_return_status := FND_API.G_RET_STS_SUCCESS;
3393 
3394   --  Bug#3582688: Purge API is also called for closing exceptions (during ship confirm)
3395   --  for a trip or trip stop or delivery or delivery detail. We should be using static
3396   --  SQLs in this case since dynamic sql has performance issue if executed multiple
3397   --  times.
3398 
3399   l_use_dynamic := 'Y';
3400   IF p_action IN ('CLOSED', C_ACTION_SEMICLOSED) THEN --{ case where purge is called only with entity_id
3401       IF (p_request_id is NULL and
3402          p_exception_name is NULL and
3403          p_logging_entity  is NULL and
3404          p_exception_location_id  is NULL and
3405          p_logged_at_location_id  is NULL and
3406          p_inventory_org_id  is NULL and
3407          p_exception_type  is NULL and
3408          p_severity  is NULL and
3409          p_status is NULL and
3410          p_arrival_date_from is NULL and
3411          p_arrival_date_to is NULL and
3412          p_departure_date_from  is NULL and
3413          p_departure_date_to is NULL and
3414          p_creation_date_from   is NULL and
3415          p_creation_date_to is NULL and
3416          p_data_older_no_of_days is NULL)  THEN  --{ check for common NULL paramaters
3417 
3418 	   IF p_trip_id IS NOT NULL and
3419            (p_delivery_id is NULL and
3420             p_trip_stop_id  is NULL and
3421             p_delivery_detail_id is NULL)    THEN -- { Close for ONLY entity passed
3422 
3423                 l_use_dynamic := 'N';
3424                 -- FP bug 4370532: this is the only context where
3425                 -- action C_ACTION_SEMICLOSED can be used.
3426 	        IF (p_action = C_ACTION_SEMICLOSED)  THEN
3427   		  UPDATE  WSH_EXCEPTIONS
3428 	          SET    status= 'CLOSED',
3429 		         last_update_date = sysdate,
3430 	                 last_updated_by  = FND_GLOBAL.USER_ID,
3431 		         last_update_login = FND_GLOBAL.USER_ID
3432 		  WHERE   trip_id = p_trip_id
3433 		  AND	status <> 'CLOSED'
3434                   AND   severity <> 'INFO';
3435                 ELSE
3436    		  UPDATE  WSH_EXCEPTIONS
3437 	          SET    status= 'CLOSED',
3438 		         last_update_date = sysdate,
3439 	                 last_updated_by  = FND_GLOBAL.USER_ID,
3440 		         last_update_login = FND_GLOBAL.USER_ID
3441 		  WHERE   trip_id = p_trip_id
3442 		  AND	status <> 'CLOSED';
3443                 END IF;
3444                 l_count := SQL%rowcount;
3445 
3446 	   ELSIF p_trip_stop_id IS NOT NULL and
3447            (p_delivery_id is NULL and
3448            p_trip_id  is NULL and
3449            p_delivery_detail_id  is NULL) THEN
3450 
3451                 l_use_dynamic := 'N';
3452                 -- FP bug 4370532: this is the only context where
3453                 -- action C_ACTION_SEMICLOSED can be used.
3454 	        IF (p_action = C_ACTION_SEMICLOSED)  THEN
3455   		  UPDATE	WSH_EXCEPTIONS
3456 	          SET    status='CLOSED',
3457 		       last_update_date = sysdate,
3458 	               last_updated_by  = FND_GLOBAL.USER_ID,
3459 		       last_update_login = FND_GLOBAL.USER_ID
3460 		  WHERE   trip_stop_id = p_trip_stop_id
3461 		  AND	status <> 'CLOSED'
3462                   AND   severity <> 'INFO';
3463                 ELSE
3464   		  UPDATE	WSH_EXCEPTIONS
3465 	          SET    status='CLOSED',
3466 		       last_update_date = sysdate,
3467 	               last_updated_by  = FND_GLOBAL.USER_ID,
3468 		       last_update_login = FND_GLOBAL.USER_ID
3469 		  WHERE   trip_stop_id = p_trip_stop_id
3470 		  AND	status <> 'CLOSED';
3471 
3472                 END IF;
3473                 l_count := SQL%rowcount;
3474 
3475 	   ELSIF p_delivery_id IS NOT NULL  and
3476            (p_trip_id  is NULL and
3477            p_trip_stop_id  is NULL and
3478            p_delivery_detail_id is NULL)  THEN
3479 
3480               l_use_dynamic := 'N';
3481 	      IF p_delivery_contents = 'Y' THEN
3482                 -- FP bug 4370532: this is the only context where
3483                 -- action C_ACTION_SEMICLOSED can be used.
3484                 IF (p_action = C_ACTION_SEMICLOSED) THEN
3485                     -- performance bug 5257207: SC-11: split UPDATE to reduce
3486                     -- the total number of queries on WSH_EXCEPTIONS.
3487                     --
3488                     -- This code is part of the ship confirm flow.
3489 
3490   		    UPDATE	WSH_EXCEPTIONS
3491 	            SET    status            = C_STATUS_CLOSED,
3492 		           last_update_date  = sysdate,
3493 	                   last_updated_by   = FND_GLOBAL.USER_ID,
3494 		           last_update_login = FND_GLOBAL.USER_ID
3495 	            WHERE delivery_detail_id IN
3496                                 (SELECT wda.delivery_detail_id
3497 			         FROM   wsh_delivery_assignments wda
3498 			         WHERE  wda.delivery_id = p_delivery_id)
3499                     AND   status             <> C_STATUS_CLOSED
3500                     AND   severity           <> C_SEVERITY_INFO;
3501 
3502                     l_count := SQL%rowcount;
3503 
3504   		    UPDATE	WSH_EXCEPTIONS
3505 	            SET    status            = C_STATUS_CLOSED,
3506 		           last_update_date  = sysdate,
3507 	                   last_updated_by   = FND_GLOBAL.USER_ID,
3508 		           last_update_login = FND_GLOBAL.USER_ID
3509 	            WHERE delivery_id =  p_delivery_id
3510                     AND   status      <> C_STATUS_CLOSED
3511                     AND   severity    <> C_SEVERITY_INFO;
3512 
3513                     l_count := l_count + SQL%rowcount;
3514 
3515                 ELSE
3516                     -- UPDATES are tuned the same way as above.
3517   		    UPDATE	WSH_EXCEPTIONS
3518 	            SET    status            = p_action,
3519 		           last_update_date  = sysdate,
3520 	                   last_updated_by   = FND_GLOBAL.USER_ID,
3521 		           last_update_login = FND_GLOBAL.USER_ID
3522 	            WHERE delivery_detail_id IN
3523                                 (SELECT wda.delivery_detail_id
3524 			         FROM   wsh_delivery_assignments wda
3525 			         WHERE  wda.delivery_id = p_delivery_id)
3526                     AND   status             <> C_STATUS_CLOSED;
3527 
3528                     l_count := SQL%rowcount;
3529 
3530   		    UPDATE	WSH_EXCEPTIONS
3531 	            SET    status            = p_action,
3532 		           last_update_date  = sysdate,
3533 	                   last_updated_by   = FND_GLOBAL.USER_ID,
3534 		           last_update_login = FND_GLOBAL.USER_ID
3535 	            WHERE delivery_id =  p_delivery_id
3536                     AND   status      <> C_STATUS_CLOSED;
3537 
3538                     l_count := l_count + SQL%rowcount;
3539 
3540                 END IF;
3541 	      ELSE
3542                 -- p_delivery_contents is 'N' here.
3543 
3544                 -- bug 4318747: this is the only context where
3545                 -- action C_ACTION_SEMICLOSED can be used.
3546 	        IF (p_action = C_ACTION_SEMICLOSED)  THEN
3547 	          UPDATE	WSH_EXCEPTIONS
3548 	          SET    status='CLOSED',
3549 		       last_update_date = sysdate,
3550 	               last_updated_by  = FND_GLOBAL.USER_ID,
3551 		       last_update_login = FND_GLOBAL.USER_ID
3552 		  WHERE   delivery_id = p_delivery_id
3553 		  AND	status <> 'CLOSED'
3554                   AND   severity <> 'INFO'
3555                   --AND   exception_name <> 'WSH_OTM_SHIPMENT_ERROR'; -- OTM R12 glog project;
3556                   AND   exception_name <> C_OTM_EXC_NAME; -- OTM R12 glog project;
3557                 ELSE
3558 	          UPDATE	WSH_EXCEPTIONS
3559 	          SET    status='CLOSED',
3560 		       last_update_date = sysdate,
3561 	               last_updated_by  = FND_GLOBAL.USER_ID,
3562 		       last_update_login = FND_GLOBAL.USER_ID
3563 		  WHERE   delivery_id = p_delivery_id
3564 		  AND	status <> 'CLOSED'
3565                   --AND   exception_name <> 'WSH_OTM_SHIPMENT_ERROR'; -- OTM R12 glog project;
3566                   AND   exception_name <> C_OTM_EXC_NAME; -- OTM R12 glog project;
3567                 END IF;
3568                 l_count := SQL%rowcount;
3569 	      END IF;
3570 
3571 	  ELSIF p_delivery_detail_id IS NOT NULL  and
3572           (p_trip_id  is NULL and
3573            p_trip_stop_id  is NULL and
3574            p_delivery_id is NULL)  THEN
3575 
3576                 l_use_dynamic := 'N';
3577 		UPDATE	WSH_EXCEPTIONS
3578 	        SET    status=p_action ,
3579 		       last_update_date = sysdate,
3580 	               last_updated_by  = FND_GLOBAL.USER_ID,
3581 		       last_update_login = FND_GLOBAL.USER_ID
3582 		WHERE   delivery_detail_id = p_delivery_detail_id
3583 		AND	status <> 'CLOSED';
3584                 l_count := SQL%rowcount;
3585 
3586 	END IF; -- }  Close when ONLY the entity is passed
3587      END IF; ---}  check for common NULL parameters
3588   END IF; --} p_action = CLOSED, C_ACTION_SEMICLOSED
3589 
3590   IF l_use_dynamic = 'Y' THEN -- Dynamic cusrsor required
3591    --{
3592 	-- Bug#3200314: Constructing the Dynamic Cursor.
3593 	Exceptions_SQL := Exceptions_SQL || 'SELECT WE.ROWID';
3594 	Exceptions_SQL := Exceptions_SQL || ' FROM WSH_EXCEPTIONS WE';
3595 	Exceptions_SQL := Exceptions_SQL || ' WHERE';
3596 	IF p_request_id IS NOT NULL THEN
3597 		Exceptions_SQL := Exceptions_SQL || ' WE.REQUEST_ID = :p_request_id AND';
3598 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_request_id);
3599 	END IF;
3600         IF p_exception_name IS NOT NULL THEN
3601 		Exceptions_SQL := Exceptions_SQL || ' WE.EXCEPTION_NAME = :p_exception_name AND';
3602 		bind_col_tab(bind_col_tab.COUNT+1) := p_exception_name;
3603 	END IF;
3604 	IF p_logging_entity IS NOT NULL THEN
3605 		Exceptions_SQL := Exceptions_SQL || ' WE.LOGGING_ENTITY = :p_logging_entity AND';
3606 		bind_col_tab(bind_col_tab.COUNT+1) := p_logging_entity;
3607 	END IF;
3608 	IF p_logged_at_location_id IS NOT NULL THEN
3609 		Exceptions_SQL := Exceptions_SQL || ' WE.LOGGED_AT_LOCATION_ID = :p_logged_at_location_id AND';
3610 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_logged_at_location_id);
3611 	END IF;
3612 	IF p_exception_location_id IS NOT NULL THEN
3613 		Exceptions_SQL := Exceptions_SQL || ' WE.EXCEPTION_LOCATION_ID = :p_exception_location_id AND';
3614 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_exception_location_id);
3615 	END IF;
3616 	IF p_severity IS NOT NULL THEN
3617 		Exceptions_SQL := Exceptions_SQL || ' WE.SEVERITY = :p_severity AND';
3618 		bind_col_tab(bind_col_tab.COUNT+1) := p_severity;
3619 	END IF;
3620 
3621 	-- If Action=PURGE  , Choose Recs. with Status=CLOSED
3622 	-- If Action=CLOSED , if p_status is NULL, then Choose Recs. with Status<>CLOSED
3623 	-- If Action=CLOSED , if p_status is NOT NULL, then Choose Recs. with p_status<>CLOSED and p_status = Status
3624 
3625        IF p_action = 'PURGE' THEN
3626            Exceptions_SQL := Exceptions_SQL || ' we.status = ''CLOSED'' AND';
3627        ELSIF p_action = 'CLOSED' THEN
3628           IF p_status IS NULL THEN
3629                 Exceptions_SQL := Exceptions_SQL || ' we.status <> ''CLOSED'' AND';
3630           ELSIF p_status <> 'CLOSED' THEN
3631                 Exceptions_SQL := Exceptions_SQL || ' we.status = :p_status AND';
3632                 bind_col_tab(bind_col_tab.COUNT+1) := p_status;
3633           END IF;
3634       END IF;
3635         --Bug 7153170:Modified logic so that the index on the column creation_date is picked up
3636 	IF p_creation_date_from IS NOT NULL OR p_creation_date_to IS NOT NULL THEN
3637                 IF p_creation_date_from IS NOT NULL THEN
3638                    Exceptions_SQL := Exceptions_SQL || ' we.creation_date BETWEEN';
3639                    Exceptions_SQL := Exceptions_SQL || ' fnd_date.canonical_to_date(:p_creation_date_from) AND ';
3640 		   IF p_creation_date_to IS NOT NULL THEN
3641                       Exceptions_SQL := Exceptions_SQL || ' fnd_date.canonical_to_date(:p_creation_date_to) AND ';
3642                       bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_creation_date_from, 'YYYY/MM/DD');
3643                       bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_creation_date_to, 'YYYY/MM/DD');
3644                    ELSE
3645                       Exceptions_SQL := Exceptions_SQL || ' sysdate AND ';
3646                       bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_creation_date_from, 'YYYY/MM/DD');
3647                    END IF;
3648                 ELSE
3649                    Exceptions_SQL := Exceptions_SQL || '  we.creation_date < fnd_date.canonical_to_date(:p_creation_date_to) AND ';
3650                    bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_creation_date_to, 'YYYY/MM/DD');
3651                 END IF;
3652           --End of modifications for bug 7153170
3653 	END IF;
3654 
3655 	IF p_arrival_date_from IS NOT NULL OR p_arrival_date_to IS NOT NULL THEN
3656 		Exceptions_SQL := Exceptions_SQL || ' to_char(nvl(we.arrival_date,SYSDATE),''YYYY/MM/DD'') BETWEEN';
3657 		Exceptions_SQL := Exceptions_SQL || ' NVL(:p_arrival_date_from, to_char(nvl(we.arrival_date,SYSDATE),''YYYY/MM/DD'') )';
3658 		Exceptions_SQL := Exceptions_SQL || ' AND NVL(:p_arrival_date_to, to_char(nvl(we.arrival_date,SYSDATE),''YYYY/MM/DD'') ) AND';
3659 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_arrival_date_from,'YYYY/MM/DD');
3660 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_arrival_date_to,'YYYY/MM/DD');
3661 	END IF;
3662 
3663         IF p_departure_date_from IS NOT NULL OR p_departure_date_to IS NOT NULL THEN
3664 		Exceptions_SQL := Exceptions_SQL || ' to_char(nvl(we.departure_date,SYSDATE),''YYYY/MM/DD'') BETWEEN';
3665 		Exceptions_SQL := Exceptions_SQL || ' NVL(:p_departure_date_from, to_char(nvl(we.departure_date,SYSDATE),''YYYY/MM/DD'') )';
3666 		Exceptions_SQL := Exceptions_SQL || ' AND NVL(:p_departure_date_to, to_char(nvl(we.departure_date,SYSDATE),''YYYY/MM/DD'') ) AND';
3667 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_departure_date_from,'YYYY/MM/DD');
3668 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_departure_date_to,'YYYY/MM/DD');
3669 	END IF;
3670 
3671 	IF p_data_older_no_of_days IS NOT NULL THEN
3672 		Exceptions_SQL := Exceptions_SQL || ' (SYSDATE - :p_data_older_no_of_days ) > we.creation_date AND';
3673 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_data_older_no_of_days);
3674 	END IF;
3675 
3676 	IF p_delivery_id IS NOT NULL THEN
3677 	    IF p_delivery_contents = 'Y' THEN
3678     		  Temp_SQL       :=		' SELECT ROWID';
3679 		  Temp_SQL       := Temp_SQL || ' FROM WSH_EXCEPTIONS';
3680 		  Temp_SQL       := Temp_SQL || ' WHERE';
3681 	    	  Exceptions_SQL := Exceptions_SQL || ' WE.ROWID IN (';
3682     		  Exceptions_SQL := Exceptions_SQL || Temp_SQL;
3683 		  Exceptions_SQL := Exceptions_SQL ||     ' DELIVERY_DETAIL_ID IN';
3684 		  Exceptions_SQL := Exceptions_SQL ||        ' (SELECT DISTINCT a.delivery_detail_id';
3685 		  Exceptions_SQL := Exceptions_SQL ||         ' FROM wsh_delivery_assignments_v a, wsh_exceptions b';
3686 		  Exceptions_SQL := Exceptions_SQL || 	      ' WHERE  a.delivery_detail_id=b.delivery_detail_id';
3687 		  Exceptions_SQL := Exceptions_SQL || 	      ' AND    a.delivery_id= :p_delivery_id)';
3688 		  Exceptions_SQL := Exceptions_SQL ||     ' UNION ALL';
3689 		  bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_delivery_id);
3690 	  	  /*Exceptions_SQL := Exceptions_SQL || Temp_SQL;
3691 		  Exceptions_SQL := Exceptions_SQL ||     ' CONTAINER_NAME IN';
3692 		  Exceptions_SQL := Exceptions_SQL || 	     ' (SELECT DISTINCT a.container_name';
3693 		  Exceptions_SQL := Exceptions_SQL ||         ' FROM wsh_delivery_details a, wsh_delivery_assignments_v b';
3694 		  Exceptions_SQL := Exceptions_SQL || 	      ' WHERE  a.delivery_detail_id=b.delivery_detail_id';
3695 		  Exceptions_SQL := Exceptions_SQL || 	      ' AND    a.container_flag = ''Y''';
3696 		  Exceptions_SQL := Exceptions_SQL || 	      ' AND    b.delivery_id= :p_delivery_id)';
3697 		  Exceptions_SQL := Exceptions_SQL ||     ' UNION ALL';
3698 		  bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_delivery_id);*/
3699 	     	  Exceptions_SQL := Exceptions_SQL || Temp_SQL;
3700 	    	  Exceptions_SQL := Exceptions_SQL ||     ' delivery_id = :p_delivery_id ) AND';
3701 	  	  bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_delivery_id);
3702 	    ELSE
3703 		  Exceptions_SQL := Exceptions_SQL ||     ' WE.delivery_id = :p_delivery_id AND';
3704                   -- OTM R12 glog project
3705                   -- Purge only looks for closed exceptions
3706                   -- so only for close action, filter out this exception name
3707                   IF p_action = 'CLOSED' THEN
3708                     --Exceptions_SQL := Exceptions_SQL ||' WE.exception_name <> ''WSH_OTM_SHIPMENT_ERROR'' AND';
3709                     Exceptions_SQL := Exceptions_SQL ||' WE.exception_name <> '''|| C_OTM_EXC_NAME ||''' AND';
3710                   END IF;
3711                   -- OTM R12 end of glog project
3712 	      	  bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_delivery_id);
3713 	    END IF;
3714 	END IF;
3715 
3716 	IF p_trip_id IS NOT NULL THEN
3717 		Exceptions_SQL := Exceptions_SQL || ' WE.TRIP_ID = :p_trip_id AND';
3718 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_trip_id);
3719 	END IF;
3720 	IF p_trip_stop_id IS NOT NULL THEN
3721 		Exceptions_SQL := Exceptions_SQL || ' WE.TRIP_STOP_ID = :p_trip_stop_id AND';
3722 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_trip_stop_id);
3723 	END IF;
3724 	IF p_delivery_detail_id IS NOT NULL THEN
3725 		Exceptions_SQL := Exceptions_SQL || ' WE.DELIVERY_DETAIL_ID = :p_delivery_detail_id AND';
3726 		bind_col_tab(bind_col_tab.COUNT+1) := TO_CHAR(p_delivery_detail_id);
3727 	END IF;
3728 
3729 	-- Bug#3200314
3730 	-- Process the records based on  the input criteria.
3731 	Exceptions_SQL := Exceptions_SQL ||' 1=1';
3732 	WSH_UTIL_CORE.OpenDynamicCursor(c_exceptions, Exceptions_SQL, bind_col_tab);
3733 
3734 	-- Bug 3576661 : TST11510.10: ERROR IN SHIP CONFIRM DELIVERY CANNOT BE SHIP CONFIRMED
3735 	-- Dynamic SQL cannot be used with Bulk Features in pre 9i environments
3736 	-- Either of these can be used, so using Variable Cursor as of now but not
3737 	-- using Bulk Collect feature while fetching the record
3738 
3739         -- bug 5943326 added c_cpfetch and c_pfetch
3740         c_cfetch := 0;
3741         c_pfetch := 0;
3742 	l_count := 0;
3743         IF p_action IN ('PURGE','CLOSED') THEN --{ Closed and purge
3744         -- bug 5943326 using BULK PURGE
3745          LOOP
3746 	 /*  FETCH c_exceptions INTO RowIdList(l_count+1) ;
3747 	   EXIT  WHEN (c_exceptions%NOTFOUND);
3748  	   l_count := l_count+1;
3749          END LOOP;
3750          CLOSE c_exceptions;*/
3751          FETCH c_exceptions BULK COLLECT
3752            INTO RowIdList LIMIT  BulkBatchSize;
3753          c_cfetch := c_exceptions%rowcount - c_pfetch;
3754          EXIT WHEN (c_cfetch=0);
3755         IF p_action='PURGE' THEN
3756          FORALL l_counter IN 1..c_cfetch
3757          DELETE from WSH_EXCEPTIONS where rowid = RowIdList(l_counter);
3758         ELSE -- 'CLOSED'
3759          FORALL l_counter IN 1..c_cfetch
3760          UPDATE WSH_EXCEPTIONS
3761          SET    status=p_action ,
3762                 last_update_date = sysdate,
3763                 last_updated_by  = FND_GLOBAL.USER_ID,
3764                 last_update_login = FND_GLOBAL.USER_ID
3765          WHERE  rowid = RowIdList(l_counter);
3766        END IF;
3767 
3768        --IF (l_count > 0) THEN
3769          IF SQL%NOTFOUND THEN
3770            FND_MESSAGE.SET_NAME('WSH', 'WSH_PURGE_FAILED');
3771            FND_MSG_PUB.ADD;
3772            RAISE WSH_PURGE_FAILED;
3773          END IF;
3774 
3775         --END IF;
3776 
3777         IF FND_API.To_Boolean( p_commit ) THEN
3778            COMMIT WORK;
3779         END IF;
3780         c_pfetch := c_exceptions%rowcount;
3781         l_count := c_pfetch;
3782       END LOOP;
3783       CLOSE c_exceptions;
3784       END IF; --} End of Closed and Purge
3785   END IF;  --}  Dynamic cursor required
3786   IF l_count > 0 THEN
3787     IF FND_API.To_Boolean( p_commit ) THEN
3788       COMMIT WORK;
3789     END IF;
3790   END IF;
3791   x_no_of_recs_purged  := l_count;
3792 
3793   --
3794   -- Debug Statements
3795   --
3796      IF l_debug_on THEN
3797 	   WSH_DEBUG_SV.log(l_module_name,'Count',x_no_of_recs_purged);
3798 	   WSH_DEBUG_SV.pop(l_module_name);
3799      END IF;
3800   --
3801 EXCEPTION
3802    WHEN WSH_PURGE_FAILED  THEN
3803      ROLLBACK TO WSH_XC_UTIL;
3804      x_return_status := FND_API.G_RET_STS_ERROR;
3805      WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
3806      if x_msg_count > 1 then
3807          x_msg_data := l_msg_summary || l_msg_details;
3808      else
3809          x_msg_data := l_msg_summary;
3810      end if;
3811      x_msg_data := nvl(x_msg_data,sqlerrm);
3812      --
3813      -- Debug Statements
3814      --
3815      IF l_debug_on THEN
3816          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_PURGE_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3817          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_PURGE_FAILED');
3818      END IF;
3819      --
3820    WHEN FND_API.G_EXC_ERROR THEN
3821      ROLLBACK TO WSH_XC_UTIL;
3822      x_return_status := FND_API.G_RET_STS_ERROR;
3823      WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
3824      if x_msg_count > 1 then
3825          x_msg_data := l_msg_summary || l_msg_details;
3826      else
3827          x_msg_data := l_msg_summary;
3828      end if;
3829      x_msg_data := nvl(x_msg_data,sqlerrm);
3830      --
3831      -- Debug Statements
3832      --
3833      IF l_debug_on THEN
3834          WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3835          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3836      END IF;
3837      --
3838    WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3839      ROLLBACK TO WSH_XC_UTIL;
3840      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3841      WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
3842      if x_msg_count > 1 then
3843          x_msg_data := l_msg_summary || l_msg_details;
3844      else
3845          x_msg_data := l_msg_summary;
3846      end if;
3847      x_msg_data := nvl(x_msg_data,sqlerrm);
3848      --
3849      -- Debug Statements
3850      --
3851      IF l_debug_on THEN
3852          WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3853          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
3854      END IF;
3855      --
3856    WHEN OTHERS THEN
3857      ROLLBACK TO WSH_XC_UTIL;
3858      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3859      WSH_UTIL_CORE.get_messages('N', l_msg_summary, l_msg_details, x_msg_count);
3860      if x_msg_count > 1 then
3861          x_msg_data := l_msg_summary || l_msg_details;
3862      else
3863          x_msg_data := l_msg_summary;
3864      end if;
3865      x_msg_data := nvl(x_msg_data,sqlerrm);
3866      --
3867      -- Debug Statements
3868      --
3869      IF l_debug_on THEN
3870          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3871          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3872      END IF;
3873      --
3874 end;
3875 
3876 
3877 
3878 -- -------------------------------------------------------------------------------
3879 -- Start of comments
3880 -- API name  : Check_exceptions
3881 -- Type      : Public
3882 -- Function  : This procedure takes input as Entity Name and Entity Id
3883 --             and finds the maximum severity exception logged against it.
3884 --             Only Error and Warning Exceptions are considered, Information Only
3885 --             are not considered.
3886 --             If p_consider_content is set to 'Y', then the API also looks
3887 --             at the contents of the Entity and checks for the maximum severity
3888 --             against each child entity. This is drilled to lowest child entity.
3889 --             The API returns a PL/SQL table of records with Entity Name, Entity ID
3890 --             Exception Behavior. The table is populated with the Top Most entity
3891 --             followed by its child entities (if exceptions exist against them) in
3892 --             a hierarchial tree structure.
3893 --             Valid Values for p_logging_entity_name : LINE, CONTAINER, DELIVERY,
3894 --             TRIP, STOP
3895 -- End of comments
3896 -- --------------------------------------------------------------------------------
3897 
3898 PROCEDURE Check_Exceptions (
3899         -- Standard parameters
3900         p_api_version           IN      NUMBER,
3901         p_init_msg_list         IN      VARCHAR2  DEFAULT FND_API.G_FALSE,
3902         x_return_status         OUT  NOCOPY    VARCHAR2,
3903         x_msg_count             OUT  NOCOPY    NUMBER,
3904         x_msg_data              OUT  NOCOPY    VARCHAR2,
3905 
3906         -- program specific parameters
3907         p_logging_entity_id	  IN 	NUMBER,
3908         p_logging_entity_name	  IN	VARCHAR2,
3909         p_consider_content      IN  VARCHAR2,
3910 
3911          -- program specific out parameters
3912         x_exceptions_tab	IN OUT NOCOPY 	XC_TAB_TYPE,
3913         p_caller                IN      VARCHAR2
3914 	) IS
3915 
3916   CURSOR Get_Trip_Exceptions (v_trip_id NUMBER) IS
3917   SELECT DECODE(severity,'HIGH','ERROR','MEDIUM','WARNING',severity)
3918   FROM   wsh_exceptions
3919   WHERE  trip_id = v_trip_id
3920   AND    status in ('OPEN','ERROR','LOGGED','IN_PROCESS','MANUAL')
3921   AND    severity in ('HIGH','MEDIUM','ERROR','WARNING')
3922   ORDER BY decode(severity,'HIGH',1,'ERROR',1,'MEDIUM',2,'WARNING',2,3);
3923 
3924   CURSOR Get_Stop_Exceptions (v_stop_id NUMBER) IS
3925   SELECT DECODE(severity,'HIGH','ERROR','MEDIUM','WARNING',severity)
3926   FROM   wsh_exceptions
3927   WHERE  trip_stop_id = v_stop_id
3928   AND    status in ('OPEN','ERROR','LOGGED','IN_PROCESS','MANUAL')
3929   AND    severity in ('HIGH','MEDIUM','ERROR','WARNING')
3930   ORDER BY decode(severity,'HIGH',1,'ERROR',1,'MEDIUM',2,'WARNING',2,3);
3931 
3932   CURSOR Get_Delivery_Exceptions (v_delivery_id NUMBER) IS
3933   SELECT DECODE(severity,'HIGH','ERROR','MEDIUM','WARNING',severity)
3934   FROM   wsh_exceptions
3935   WHERE  delivery_id = v_delivery_id
3936   AND    status in ('OPEN','ERROR','LOGGED','IN_PROCESS','MANUAL')
3937   AND    severity in ('HIGH','MEDIUM','ERROR','WARNING')
3938   ORDER BY decode(severity,'HIGH',1,'ERROR',1,'MEDIUM',2,'WARNING',2,3);
3939 
3940   CURSOR Get_Detail_Exceptions (v_detail_id NUMBER) IS
3941   SELECT DECODE(severity,'HIGH','ERROR','MEDIUM','WARNING',severity)
3942   FROM   wsh_exceptions
3943   WHERE  delivery_detail_id = v_detail_id
3944   AND    status in ('OPEN','ERROR','LOGGED','IN_PROCESS','MANUAL')
3945   AND    severity in ('HIGH','MEDIUM','ERROR','WARNING')
3946   ORDER BY decode(severity,'HIGH',1,'ERROR',1,'MEDIUM',2,'WARNING',2,3);
3947 
3948   CURSOR Get_Details_Delivery(v_delivery_id NUMBER) IS
3949   SELECT wdd.delivery_detail_id, wdd.container_flag
3950   FROM   wsh_delivery_assignments_v wda, wsh_delivery_details wdd
3951   WHERE  wda.delivery_id = v_delivery_id
3952   AND    wdd.delivery_detail_id = wda.delivery_detail_id
3953   ORDER  BY wdd.container_flag;
3954 
3955   -- performance bug 5257207: SC-1: added ALL since the selections
3956   -- are mutually exclusive (a delivery cannot be both picked up
3957   -- and dropped off at the same stop).
3958   -- This is the same cursor as in close_exceptions.
3959   CURSOR Get_Deliveries_Stop(v_stop_id NUMBER) IS
3960   -- pick up deliveries
3961   SELECT dg.delivery_id
3962   FROM   wsh_new_deliveries dl, wsh_delivery_legs dg, wsh_trip_stops st
3963   WHERE  dg.delivery_id = dl.delivery_id
3964   AND    st.stop_location_id = dl.initial_pickup_location_id
3965   AND    st.stop_id = dg.pick_up_stop_id
3966   AND    st.stop_id = v_stop_id
3967   UNION ALL
3968   -- drop off deliveries
3969   SELECT dg.delivery_id
3970   FROM   wsh_new_deliveries dl, wsh_delivery_legs dg, wsh_trip_stops st
3971   WHERE  dg.delivery_id = dl.delivery_id
3972   AND    st.stop_location_id = dl.ultimate_dropoff_location_id
3973   AND    st.stop_id = dg.drop_off_stop_id
3974   AND    st.stop_id = v_stop_id;
3975 
3976   CURSOR Get_Stops_Trip(v_trip_id NUMBER) IS
3977   SELECT stop_id
3978   FROM   wsh_trip_stops
3979   WHERE  trip_id = v_trip_id
3980   ORDER  BY stop_sequence_number ASC ;
3981 
3982   CURSOR Get_Contents_Container (v_container_id NUMBER) IS
3983   SELECT delivery_detail_id
3984   FROM   wsh_delivery_assignments_v
3985   START WITH parent_delivery_detail_id = v_container_id
3986   CONNECT BY PRIOR delivery_detail_id = parent_delivery_detail_id;
3987 
3988   CURSOR Get_Container_Flag (v_delivery_detail_id NUMBER) IS
3989   SELECT container_flag
3990   FROM   wsh_delivery_details
3991   WHERE  delivery_detail_id = v_delivery_detail_id;
3992 
3993   CURSOR c_dummy_stop (v_stop_id NUMBER) IS
3994   SELECT stop_id
3995   FROM wsh_trip_stops wts
3996   WHERE wts.physical_stop_id IS NOT NULL
3997   AND wts.physical_location_id IS NOT NULL
3998   AND wts.physical_stop_id=v_stop_id
3999   AND wts.trip_id =(SELECT trip_id
4000                     FROM wsh_trip_stops wts1
4001                     WHERE wts1.stop_id=v_stop_id);
4002 
4003   l_severity VARCHAR2(30);
4004 
4005   -- Standard call to check for call compatibility
4006   l_api_version          CONSTANT        NUMBER  := 1.0;
4007   l_api_name             CONSTANT        VARCHAR2(30):= 'Check_Exceptions';
4008 
4009   l_count           NUMBER;
4010   l_delivery_exists BOOLEAN;
4011   l_container_flag  VARCHAR2(1);
4012 
4013   l_return_status  VARCHAR2(1);
4014   l_msg_count      NUMBER;
4015   l_msg_data       VARCHAR2(2000);
4016 
4017   c_trip             CONSTANT        VARCHAR2(30):= 'TRIP';
4018   l_exceptions_tab XC_TAB_TYPE;
4019 
4020   WSH_INVALID_LOGGING_ENTITY EXCEPTION;
4021 
4022   WSH_CHECK_EXCEPTIONS_FAILED EXCEPTION;
4023 
4024 --
4025 l_debug_on BOOLEAN;
4026 --
4027 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.'|| 'CHECK_EXCEPTIONS';
4028 --
4029 BEGIN
4030 
4031   --
4032   --
4033   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4034   --
4035   IF l_debug_on IS NULL
4036   THEN
4037       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4038   END IF;
4039   --
4040   --
4041   -- Debug Statements
4042   --
4043   IF l_debug_on THEN
4044       WSH_DEBUG_SV.push(l_module_name);
4045       WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION',P_API_VERSION);
4046       WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
4047       WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY_NAME',P_LOGGING_ENTITY_NAME);
4048       WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY_ID',P_LOGGING_ENTITY_ID);
4049       WSH_DEBUG_SV.log(l_module_name,'P_CONSIDER_CONTENT',P_CONSIDER_CONTENT);
4050   END IF;
4051 
4052   IF NOT FND_API.compatible_api_call (
4053                                        l_api_version,
4054                                        p_api_version,
4055                                        l_api_name,
4056                                        G_PKG_NAME) THEN
4057      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4058   END IF;
4059 
4060   -- Check p_init_msg_list
4061   IF FND_API.to_boolean(p_init_msg_list) THEN
4062     FND_MSG_PUB.initialize;
4063   END IF;
4064 
4065   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4066 
4067   l_count := 0;
4068 
4069   IF (p_logging_entity_name = 'TRIP') THEN
4070     OPEN Get_Trip_Exceptions(p_logging_entity_id);
4071     FETCH Get_Trip_Exceptions INTO l_severity;
4072     IF Get_Trip_Exceptions%NOTFOUND THEN
4073        l_severity := NULL;
4074     END IF;
4075     CLOSE Get_Trip_Exceptions;
4076     IF l_severity IS NOT NULL THEN
4077         l_count := x_exceptions_tab.COUNT + 1;
4078         x_exceptions_tab(l_count).entity_name := p_logging_entity_name;
4079         x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4080         x_exceptions_tab(l_count).exception_behavior := l_severity;
4081     END IF;
4082     IF p_consider_content = 'Y' THEN
4083        -- check for stop level exceptions
4084        FOR stop_rec IN Get_Stops_Trip(p_logging_entity_id) LOOP
4085            Check_Exceptions(
4086                              -- Standard parameters
4087                              p_api_version           => 1.0,
4088                              x_return_status         => l_return_status,
4089                              x_msg_count             => l_msg_count,
4090                              x_msg_data              => l_msg_data,
4091                              -- program specific parameters
4092                              p_logging_entity_id     => stop_rec.stop_id,
4093                              p_logging_entity_name   => 'STOP',
4094                              p_consider_content      => 'Y',
4095                              -- program specific out parameters
4096                              x_exceptions_tab        => x_exceptions_tab,
4097                              p_caller                => p_caller||c_trip
4098                           );
4099            IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4100               IF l_debug_on THEN
4101                   WSH_DEBUG_SV.logmsg('Check Exception failed for Stop :'||stop_rec.stop_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4102               END IF;
4103               RAISE WSH_CHECK_EXCEPTIONS_FAILED;
4104            END IF;
4105 
4106        END LOOP;
4107     END IF;
4108 
4109   ELSIF (p_logging_entity_name = 'STOP') THEN
4110     OPEN Get_Stop_Exceptions(p_logging_entity_id);
4111     FETCH Get_Stop_Exceptions INTO l_severity;
4112     IF Get_Stop_Exceptions%NOTFOUND THEN
4113        l_severity := NULL;
4114     END IF;
4115     CLOSE Get_Stop_Exceptions;
4116     IF l_severity IS NOT NULL THEN
4117         l_count := x_exceptions_tab.COUNT + 1;
4118         x_exceptions_tab(l_count).entity_name := p_logging_entity_name;
4119         x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4120         x_exceptions_tab(l_count).exception_behavior := l_severity;
4121     END IF;
4122     IF p_consider_content = 'Y' THEN
4123        -- check for the deliveries in the stop
4124        FOR del_rec IN Get_Deliveries_Stop(p_logging_entity_id) LOOP
4125            Check_Exceptions(
4126                              -- Standard parameters
4127                              p_api_version           => 1.0,
4128                              x_return_status         => l_return_status,
4129                              x_msg_count             => l_msg_count,
4130                              x_msg_data              => l_msg_data,
4131                              -- program specific parameters
4132                              p_logging_entity_id     => del_rec.delivery_id,
4133                              p_logging_entity_name   => 'DELIVERY',
4134                              p_consider_content      => 'Y',
4135                              -- program specific out parameters
4136                              x_exceptions_tab        => x_exceptions_tab
4137                           );
4138            IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4139               IF l_debug_on THEN
4140                   WSH_DEBUG_SV.logmsg('Check Exception failed for Delivery :'||del_rec.delivery_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4141               END IF;
4142               RAISE WSH_CHECK_EXCEPTIONS_FAILED;
4143            END IF;
4144 
4145        END LOOP;
4146     END IF;
4147     -- get dummy stop if caller is FTE or IB or TP Release.
4148     -- also caller shud not be TRIP (above), so that there is no dual count
4149     IF  (  nvl(p_caller,'@@@') like 'FTE%'
4150            OR nvl(p_caller,'@@@') like 'WSH_IB%'
4151            OR nvl(p_caller,'@@@') like 'WSH_TP_RELEASE%'
4152          ) AND NOT ( nvl(p_caller,'@@@') like '%TRIP%') THEN
4153        FOR stop_rec IN c_dummy_stop(p_logging_entity_id) LOOP
4154            Check_Exceptions(
4155                              -- Standard parameters
4156                              p_api_version           => 1.0,
4157                              x_return_status         => l_return_status,
4158                              x_msg_count             => l_msg_count,
4159                              x_msg_data              => l_msg_data,
4160                              -- program specific parameters
4161                              p_logging_entity_id     => stop_rec.stop_id,
4162                              p_logging_entity_name   => 'STOP',
4163                              p_consider_content      => p_consider_content,
4164                              -- program specific out parameters
4165                              x_exceptions_tab        => l_exceptions_tab,
4166                              p_caller                => p_caller
4167                           );
4168            IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4169               IF l_debug_on THEN
4170                   WSH_DEBUG_SV.logmsg('Check Exception failed for Stop :'||stop_rec.stop_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4171               END IF;
4172               RAISE WSH_CHECK_EXCEPTIONS_FAILED;
4173            END IF;
4174            IF l_exceptions_tab IS NOT NULL AND l_exceptions_tab.COUNT>0 THEN
4175               FOR i IN 1..l_exceptions_tab.COUNT LOOP
4176                   l_count := x_exceptions_tab.COUNT + 1;
4177                   --if exception is logged against dummy stop, make that to be against physical stop if caller is FTE/IB/TP
4178                   IF p_logging_entity_name='STOP' AND stop_rec.stop_id=l_exceptions_tab(i).entity_id THEN
4179                      x_exceptions_tab(l_count).entity_name := p_logging_entity_name;
4180                      x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4181                      x_exceptions_tab(l_count).exception_behavior := l_exceptions_tab(i).exception_behavior;
4182                   ELSE
4183                      x_exceptions_tab(l_count).entity_name := l_exceptions_tab(i).entity_name;
4184                      x_exceptions_tab(l_count).entity_id   := l_exceptions_tab(i).entity_id;
4185                      x_exceptions_tab(l_count).exception_behavior := l_exceptions_tab(i).exception_behavior;
4186                   END IF;
4187               END LOOP;
4188            END IF;
4189        END LOOP;
4190     END IF; --p_caller
4191 
4192   ELSIF (p_logging_entity_name = 'DELIVERY') THEN
4193     l_delivery_exists := FALSE;
4194     FOR j in 1..x_exceptions_tab.COUNT LOOP
4195         IF x_exceptions_tab(j).entity_name = 'DELIVERY' AND
4196            x_exceptions_tab(j).entity_id = p_logging_entity_id THEN
4197            l_delivery_exists := TRUE;
4198            EXIT;
4199         END IF;
4200     END LOOP;
4201     IF NOT (l_delivery_exists) THEN
4202        OPEN Get_Delivery_Exceptions(p_logging_entity_id);
4203        FETCH Get_Delivery_Exceptions INTO l_severity;
4204        IF Get_Delivery_Exceptions%NOTFOUND THEN
4205           l_severity := NULL;
4206        END IF;
4207        CLOSE Get_Delivery_Exceptions;
4208        IF l_severity IS NOT NULL THEN
4209            l_count := x_exceptions_tab.COUNT + 1;
4210            x_exceptions_tab(l_count).entity_name := p_logging_entity_name;
4211            x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4212            x_exceptions_tab(l_count).exception_behavior := l_severity;
4213        END IF;
4214 
4215        IF p_consider_content = 'Y' THEN
4216           -- go for the contents of the delivery
4217           FOR detail_rec IN Get_Details_Delivery(p_logging_entity_id) LOOP
4218               Check_Exceptions(
4219                                 -- Standard parameters
4220                                 p_api_version           => 1.0,
4221                                 x_return_status         => l_return_status,
4222                                 x_msg_count             => l_msg_count,
4223                                 x_msg_data              => l_msg_data,
4224                                 -- program specific parameters
4225                                 p_logging_entity_id     => detail_rec.delivery_detail_id,
4226                                 p_logging_entity_name   => 'LINE',
4227                                 p_consider_content      => 'Y',
4228                                 -- program specific out parameters
4229                                 x_exceptions_tab        => x_exceptions_tab
4230                              );
4231               IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4232                  IF l_debug_on THEN
4233                      WSH_DEBUG_SV.logmsg('Check Exception failed for Detail :'||detail_rec.delivery_detail_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4234                  END IF;
4235                  RAISE WSH_CHECK_EXCEPTIONS_FAILED;
4236               END IF;
4237 
4238           END LOOP;
4239        END IF;
4240     END IF;
4241 
4242   ELSIF (p_logging_entity_name = 'LINE') THEN
4243     OPEN Get_Detail_Exceptions(p_logging_entity_id);
4244     FETCH Get_Detail_Exceptions INTO l_severity;
4245     IF Get_Detail_Exceptions%NOTFOUND THEN
4246        l_severity := NULL;
4247     END IF;
4248     CLOSE Get_Detail_Exceptions;
4249     IF l_severity IS NOT NULL THEN
4250         l_count := x_exceptions_tab.COUNT + 1;
4251         OPEN Get_Container_Flag(p_logging_entity_id);
4252         FETCH Get_Container_Flag INTO l_container_flag;
4253         CLOSE Get_Container_Flag;
4254         IF l_container_flag = 'Y' THEN
4255             x_exceptions_tab(l_count).entity_name := 'CONTAINER';
4256         ELSE
4257             x_exceptions_tab(l_count).entity_name := 'LINE';
4258         END IF;
4259         x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4260         x_exceptions_tab(l_count).exception_behavior := l_severity;
4261     END IF;
4262 
4263   ELSIF (p_logging_entity_name = 'CONTAINER') THEN
4264     OPEN Get_Detail_Exceptions(p_logging_entity_id);
4265     FETCH Get_Detail_Exceptions INTO l_severity;
4266     IF Get_Detail_Exceptions%NOTFOUND THEN
4267        l_severity := NULL;
4268     END IF;
4269     CLOSE Get_Detail_Exceptions;
4270     IF l_severity IS NOT NULL THEN
4271         l_count := x_exceptions_tab.COUNT + 1;
4272         x_exceptions_tab(l_count).entity_name := p_logging_entity_name;
4273         x_exceptions_tab(l_count).entity_id   := p_logging_entity_id;
4274         x_exceptions_tab(l_count).exception_behavior := l_severity;
4275     END IF;
4276 
4277     IF p_consider_content = 'Y' THEN
4278           -- go for the contents of the container
4279           FOR detail_rec IN Get_Contents_Container(p_logging_entity_id) LOOP
4280               Check_Exceptions(
4281                                 -- Standard parameters
4282                                 p_api_version           => 1.0,
4283                                 x_return_status         => l_return_status,
4284                                 x_msg_count             => l_msg_count,
4285                                 x_msg_data              => l_msg_data,
4286                                 -- program specific parameters
4287                                 p_logging_entity_id     => detail_rec.delivery_detail_id,
4288                                 p_logging_entity_name   => 'LINE',
4289                                 p_consider_content      => 'Y',
4290                                 -- program specific out parameters
4291                                 x_exceptions_tab        => x_exceptions_tab
4292                              );
4293               IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4294                  IF l_debug_on THEN
4295                      WSH_DEBUG_SV.logmsg('Check Exception failed for Detail :'||detail_rec.delivery_detail_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4296                  END IF;
4297                  RAISE WSH_CHECK_EXCEPTIONS_FAILED;
4298               END IF;
4299 
4300           END LOOP;
4301     END IF;
4302 
4303 
4304   ELSE
4305     RAISE WSH_INVALID_LOGGING_ENTITY;
4306   END IF;
4307 
4308   --
4309   -- Debug Statements
4310   --
4311     IF l_debug_on THEN
4312        WSH_DEBUG_SV.pop(l_module_name);
4313     END IF;
4314   --
4315 
4316   EXCEPTION
4317     WHEN WSH_CHECK_EXCEPTIONS_FAILED THEN
4318       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4319       wsh_util_core.add_message(x_return_status);
4320       FND_MSG_PUB.Count_And_Get(
4321                                  p_count => x_msg_count,
4322                                  p_data  => x_msg_data,
4323                                  p_encoded => FND_API.G_FALSE
4324                                );
4325      --
4326      -- Debug Statements
4327      --
4328      IF l_debug_on THEN
4329          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CHECK_EXCEPTIONS_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4330          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CHECK_EXCEPTIONS_FAILED');
4331      END IF;
4332      --
4333 
4334     WHEN WSH_INVALID_LOGGING_ENTITY THEN
4335       FND_MESSAGE.Set_Name('FND', 'WSH_XC_INVALID_LOGGING_ENTITY');
4336       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4337       wsh_util_core.add_message(x_return_status);
4338       FND_MSG_PUB.Count_And_Get(
4339                                  p_count => x_msg_count,
4340                                  p_data  => x_msg_data,
4341                                  p_encoded => FND_API.G_FALSE
4342                                );
4343      --
4344      -- Debug Statements
4345      --
4346      IF l_debug_on THEN
4347          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_XC_INVALID_LOGGING_ENTITY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4348          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_XC_INVALID_LOGGING_ENTITY');
4349      END IF;
4350      --
4351 
4352     WHEN others THEN
4353       IF Get_Trip_Exceptions%ISOPEN THEN
4354 	      CLOSE Get_Trip_Exceptions;
4355       END IF;
4356       IF Get_Stop_Exceptions%ISOPEN THEN
4357     	   CLOSE Get_Stop_Exceptions;
4358       END IF;
4359       IF Get_Delivery_Exceptions%ISOPEN THEN
4360 	      CLOSE Get_Delivery_Exceptions;
4361       END IF;
4362       IF Get_Detail_Exceptions%ISOPEN THEN
4363     	   CLOSE Get_Detail_Exceptions;
4364       END IF;
4365       IF Get_Details_Delivery%ISOPEN THEN
4366 	      CLOSE Get_Details_Delivery;
4367       END IF;
4368       IF Get_Deliveries_Stop%ISOPEN THEN
4369 	      CLOSE Get_Deliveries_Stop;
4370       END IF;
4371       IF Get_Stops_Trip%ISOPEN THEN
4372 	      CLOSE Get_Stops_Trip;
4373       END IF;
4374 
4375       wsh_util_core.default_handler('WSH_XC_UTIL.CHECK_EXCEPTIONS');
4376       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4377 
4378   --
4379   -- Debug Statements
4380   --
4381   IF l_debug_on THEN
4382       WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4383       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4384   END IF;
4385   --
4386 
4387 END Check_Exceptions;
4388 
4389 
4390 -- -------------------------------------------------------------------------------
4391 -- Start of comments
4392 -- API name  : Close_Exceptions
4393 -- Type      : Public
4394 -- Function  : This procedure takes input as Entity Name and Entity Id
4395 --             and closes all exceptions logged against it.
4396 --             If p_consider_content is set to 'Y', then the API also looks
4397 --             at the contents of the Entity and closes all exceptions for the
4398 --             child entities. This is drilled to lowest child entity.
4399 --             This API should be called ONLY if Check_Exceptions is called before
4400 --             it. This is because this API assumes all Error Exceptions are Resolved
4401 --             prior to this API call and closes OPEN/NO_ACTION_REQUIRED exceptions
4402 --             unless they are Information Only (FP bug 4370532).
4403 --             Valid Values for p_logging_entity_name : LINE, CONTAINER, DELIVERY,
4404 --             TRIP, STOP
4405 -- End of comments
4406 -- --------------------------------------------------------------------------------
4407 
4408 PROCEDURE Close_Exceptions (
4409         -- Standard parameters
4410         p_api_version           IN      NUMBER,
4411         p_init_msg_list         IN      VARCHAR2  DEFAULT FND_API.G_FALSE,
4412         x_return_status         OUT  NOCOPY    VARCHAR2,
4413         x_msg_count             OUT  NOCOPY    NUMBER,
4414         x_msg_data              OUT  NOCOPY    VARCHAR2,
4415 
4416         -- program specific parameters
4417         p_logging_entity_id	IN 	NUMBER,
4418 	p_logging_entity_name	IN	VARCHAR2,
4419         p_consider_content      IN  VARCHAR2,
4420         p_caller                IN      VARCHAR2
4421 	) IS
4422 
4423   CURSOR Get_Details_Delivery(v_delivery_id NUMBER) IS
4424   SELECT wdd.delivery_detail_id, wdd.container_flag
4425   FROM   wsh_delivery_assignments_v wda, wsh_delivery_details wdd
4426   WHERE  wda.delivery_id = v_delivery_id
4427   AND    wdd.delivery_detail_id = wda.delivery_detail_id
4428   ORDER  BY wdd.container_flag;
4429 
4430   -- performance bug 5257207: SC-1: added ALL since the selections
4431   -- are mutually exclusive (a delivery cannot be both picked up
4432   -- and dropped off at the same stop).
4433   -- This is the same cursor as in check_exceptions.
4434   CURSOR Get_Deliveries_Stop(v_stop_id NUMBER) IS
4435   -- pick up deliveries
4436   SELECT dg.delivery_id
4437   FROM   wsh_new_deliveries dl, wsh_delivery_legs dg, wsh_trip_stops st
4438   WHERE  dg.delivery_id = dl.delivery_id
4439   AND    st.stop_location_id = dl.initial_pickup_location_id
4440   AND    st.stop_id = dg.pick_up_stop_id
4441   AND    st.stop_id = v_stop_id
4442   UNION ALL
4443   -- drop off deliveries
4444   SELECT dg.delivery_id
4445   FROM   wsh_new_deliveries dl, wsh_delivery_legs dg, wsh_trip_stops st
4446   WHERE  dg.delivery_id = dl.delivery_id
4447   AND    st.stop_location_id = dl.ultimate_dropoff_location_id
4448   AND    st.stop_id = dg.drop_off_stop_id
4449   AND    st.stop_id = v_stop_id;
4450 
4451   CURSOR Get_Stops_Trip(v_trip_id NUMBER) IS
4452   SELECT stop_id
4453   FROM   wsh_trip_stops
4454   WHERE  trip_id = v_trip_id
4455   ORDER  BY stop_sequence_number ASC ;
4456 
4457   CURSOR c_dummy_stop (v_stop_id NUMBER) IS
4458   SELECT stop_id
4459   FROM wsh_trip_stops wts
4460   WHERE wts.physical_stop_id IS NOT NULL
4461   AND wts.physical_location_id IS NOT NULL
4462   AND wts.physical_stop_id=v_stop_id
4463   AND wts.trip_id =(SELECT trip_id
4464                     FROM wsh_trip_stops wts1
4465                     WHERE wts1.stop_id=v_stop_id);
4466 
4467   -- Standard call to check for call compatibility
4468   l_api_version          CONSTANT        NUMBER  := 1.0;
4469   l_api_name             CONSTANT        VARCHAR2(30):= 'Close_Exceptions';
4470   c_trip                 CONSTANT        VARCHAR2(30):= 'TRIP';
4471 
4472   WSH_INVALID_LOGGING_ENTITY   EXCEPTION;
4473   WSH_PURGE_FAILED             EXCEPTION;
4474   WSH_CLOSE_EXCEPTIONS_FAILED  EXCEPTION;
4475 
4476   l_count          NUMBER;
4477   l_return_status  VARCHAR2(1);
4478   l_msg_count      NUMBER;
4479   l_msg_data       VARCHAR2(2000);
4480 
4481 --
4482 l_debug_on BOOLEAN;
4483 --
4484 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.'|| 'CLOSE_EXCEPTIONS';
4485 --
4486 BEGIN
4487 
4488   --
4489   --
4490   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4491   --
4492   IF l_debug_on IS NULL
4493   THEN
4494       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4495   END IF;
4496   --
4497   --
4498   -- Debug Statements
4499   --
4500   IF l_debug_on THEN
4501       WSH_DEBUG_SV.push(l_module_name);
4502       --
4503       WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION',P_API_VERSION);
4504       WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
4505       WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY_NAME',P_LOGGING_ENTITY_NAME);
4506       WSH_DEBUG_SV.log(l_module_name,'P_LOGGING_ENTITY_ID',P_LOGGING_ENTITY_ID);
4507   END IF;
4508 
4509   IF NOT FND_API.compatible_api_call (
4510                           l_api_version,
4511                           p_api_version,
4512                           l_api_name,
4513                           G_PKG_NAME) THEN
4514     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4515   END IF;
4516 
4517   -- Check p_init_msg_list
4518   IF FND_API.to_boolean(p_init_msg_list) THEN
4519     FND_MSG_PUB.initialize;
4520   END IF;
4521 
4522   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4523 
4524   IF (p_logging_entity_name = 'TRIP') THEN
4525      WSH_XC_UTIL.Purge (
4526                           p_api_version       => p_api_version,
4527                           x_return_status     => l_return_status,
4528                           x_msg_count         => l_msg_count,
4529                           x_msg_data          => l_msg_data,
4530                           x_no_of_recs_purged => l_count,
4531                           p_trip_id           => p_logging_entity_id,
4532                           p_action            => C_ACTION_SEMICLOSED
4533                        );
4534      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4535         IF l_debug_on THEN
4536             WSH_DEBUG_SV.logmsg('Purge failed for Trip :'||p_logging_entity_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4537         END IF;
4538         RAISE WSH_PURGE_FAILED;
4539      END IF;
4540 
4541      IF p_consider_content = 'Y' THEN
4542         -- Close all stop level exceptions
4543         FOR stop_rec IN Get_Stops_Trip(p_logging_entity_id) LOOP
4544             WSH_XC_UTIL.Close_Exceptions (
4545                                             p_api_version          => p_api_version,
4546                                             x_return_status        => l_return_status,
4547                                             x_msg_count            => l_msg_count,
4548                                             x_msg_data             => l_msg_data,
4549                                             p_logging_entity_id    => stop_rec.stop_id,
4550                                             p_logging_entity_name  => 'STOP',
4551                                             p_consider_content     => p_consider_content,
4552                                             p_caller               => p_caller||c_trip
4553                                          );
4554             IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4555                IF l_debug_on THEN
4556                    WSH_DEBUG_SV.logmsg('Close_Exception failed for Stop :'||stop_rec.stop_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4557                END IF;
4558                RAISE WSH_CLOSE_EXCEPTIONS_FAILED;
4559             END IF;
4560         END LOOP;
4561      END IF;
4562 
4563   ELSIF (p_logging_entity_name = 'STOP') THEN
4564 
4565      IF l_debug_on THEN
4566         WSH_DEBUG_SV.logmsg('Calling Purge for Stop '||p_logging_entity_id ,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4567      END IF;
4568      WSH_XC_UTIL.Purge (
4569                           p_api_version       => p_api_version,
4570                           x_return_status     => x_return_status,
4571                           x_msg_count         => x_msg_count,
4572                           x_msg_data          => x_msg_data,
4573                           x_no_of_recs_purged => l_count,
4574                           p_trip_stop_id      => p_logging_entity_id,
4575                           p_action            => C_ACTION_SEMICLOSED
4576                        );
4577      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4578         IF l_debug_on THEN
4579            WSH_DEBUG_SV.logmsg('Purge failed for Stop :'||p_logging_entity_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4580         END IF;
4581         RAISE WSH_PURGE_FAILED;
4582      END IF;
4583 
4584      IF p_consider_content = 'Y' THEN
4585         -- go for the deliveries, lines and containers
4586         FOR del_rec IN Get_Deliveries_Stop(p_logging_entity_id) LOOP
4587             WSH_XC_UTIL.Close_Exceptions (
4588                                             p_api_version          => p_api_version,
4589                                             x_return_status        => l_return_status,
4590                                             x_msg_count            => l_msg_count,
4591                                             x_msg_data             => l_msg_data,
4592                                             p_logging_entity_id    => del_rec.delivery_id,
4593                                             p_logging_entity_name  => 'DELIVERY',
4594                                             p_consider_content     => p_consider_content
4595                                          );
4596             IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4597                 IF l_debug_on THEN
4598                    WSH_DEBUG_SV.logmsg('Close_Exception failed for Delivery :'||del_rec.delivery_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4599                 END IF;
4600                 RAISE WSH_CLOSE_EXCEPTIONS_FAILED;
4601             END IF;
4602         END LOOP;
4603      END IF;
4604 
4605     -- get dummy stop if caller is FTE or IB or TP Release.
4606     -- also caller shud not be TRIP (above), so that there is no dual count
4607     IF  (  nvl(p_caller,'@@@') like 'FTE%'
4608            OR nvl(p_caller,'@@@') like 'WSH_IB%'
4609            OR nvl(p_caller,'@@@') like 'WSH_TP_RELEASE%'
4610          ) AND NOT ( nvl(p_caller,'@@@') like '%TRIP%') THEN
4611        FOR stop_rec IN c_dummy_stop(p_logging_entity_id) LOOP
4612             WSH_XC_UTIL.Close_Exceptions (
4613                                             p_api_version          => p_api_version,
4614                                             x_return_status        => l_return_status,
4615                                             x_msg_count            => l_msg_count,
4616                                             x_msg_data             => l_msg_data,
4617                                             p_logging_entity_id    => stop_rec.stop_id,
4618                                             p_logging_entity_name  => 'STOP',
4619                                             p_consider_content     => p_consider_content,
4620                                             p_caller               => p_caller
4621                                          );
4622             IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4623                IF l_debug_on THEN
4624                    WSH_DEBUG_SV.logmsg('Close_Exception failed for Stop :'||stop_rec.stop_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4625                END IF;
4626                RAISE WSH_CLOSE_EXCEPTIONS_FAILED;
4627             END IF;
4628        END LOOP;
4629     END IF;
4630   ELSIF (p_logging_entity_name = 'DELIVERY') THEN
4631         WSH_XC_UTIL.Purge (
4632                               p_api_version       => p_api_version,
4633                               x_return_status     => x_return_status,
4634                               x_msg_count         => x_msg_count,
4635                               x_msg_data          => x_msg_data,
4636                               x_no_of_recs_purged => l_count,
4637                               p_delivery_id       => p_logging_entity_id,
4638                               p_delivery_contents => p_consider_content,
4639                               p_action            => C_ACTION_SEMICLOSED
4640                           );
4641         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4642            IF l_debug_on THEN
4643               WSH_DEBUG_SV.logmsg('Purge failed for Delivery :'||p_logging_entity_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4644            END IF;
4645            RAISE WSH_PURGE_FAILED;
4646         END IF;
4647 
4648   ELSIF (p_logging_entity_name IN ('LINE','CONTAINER')) THEN
4649         WSH_XC_UTIL.Purge (
4650                               p_api_version        => p_api_version,
4651                               x_return_status      => x_return_status,
4652                               x_msg_count          => x_msg_count,
4653                               x_msg_data           => x_msg_data,
4654                               x_no_of_recs_purged  => l_count,
4655                               p_delivery_detail_id => p_logging_entity_id,
4656                               p_action             => C_ACTION_SEMICLOSED
4657                           );
4658         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4659            IF l_debug_on THEN
4660               WSH_DEBUG_SV.logmsg('Purge failed for Detail/Container :'||p_logging_entity_id,WSH_DEBUG_SV.C_EXCEP_LEVEL);
4661            END IF;
4662            RAISE WSH_PURGE_FAILED;
4663         END IF;
4664 
4665   ELSE
4666 
4667     RAISE WSH_INVALID_LOGGING_ENTITY;
4668 
4669   END IF;
4670 
4671   --
4672   -- Debug Statements
4673   --
4674   IF l_debug_on THEN
4675      WSH_DEBUG_SV.pop(l_module_name);
4676   END IF;
4677   --
4678 
4679   EXCEPTION
4680     WHEN WSH_CLOSE_EXCEPTIONS_FAILED THEN
4681       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4682       wsh_util_core.add_message(x_return_status);
4683       FND_MSG_PUB.Count_And_Get(
4684                p_count => x_msg_count,
4685                p_data  => x_msg_data,
4686                p_encoded => FND_API.G_FALSE
4687                );
4688 
4689       --
4690       -- Debug Statements
4691       --
4692       IF l_debug_on THEN
4693          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CLOSE_EXCEPTIONS_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4694          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CLOSE_EXCEPTIONS_FAILED');
4695       END IF;
4696       --
4697 
4698     WHEN WSH_PURGE_FAILED THEN
4699       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4700       wsh_util_core.add_message(x_return_status);
4701       FND_MSG_PUB.Count_And_Get(
4702                p_count => x_msg_count,
4703                p_data  => x_msg_data,
4704 	       p_encoded => FND_API.G_FALSE
4705                );
4706 
4707       --
4708       -- Debug Statements
4709       --
4710       IF l_debug_on THEN
4711          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_PURGE_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4712          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_PURGE_FAILED');
4713       END IF;
4714       --
4715 
4716     WHEN WSH_INVALID_LOGGING_ENTITY THEN
4717       FND_MESSAGE.Set_Name('FND', 'WSH_XC_INVALID_LOGGING_ENTITY');
4718       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4719       wsh_util_core.add_message(x_return_status);
4720       FND_MSG_PUB.Count_And_Get(
4721                p_count => x_msg_count,
4722                p_data  => x_msg_data,
4723 	       p_encoded => FND_API.G_FALSE
4724                );
4725 
4726       --
4727       -- Debug Statements
4728       --
4729       IF l_debug_on THEN
4730          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_LOGGING_ENTITY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4731          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_LOGGING_ENTITY');
4732       END IF;
4733       --
4734 
4735     WHEN others THEN
4736       wsh_util_core.default_handler('WSH_XC_UTIL.CLOSE_EXCEPTIONS');
4737       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4738 
4739 --
4740 -- Debug Statements
4741 --
4742 IF l_debug_on THEN
4743     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4744     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4745 END IF;
4746 --
4747 
4748 END Close_Exceptions;
4749 
4750   --OTM R12
4751   ----------------------------------------------------------
4752   -- PROCEDURE CLOSE_OTM_EXCEPTION
4753   --
4754   -- parameters:  p_delivery_id              - The ID of the delivery whose exception should be closed.
4755   --              p_exceptions_to_close_tab  - The Exceptions that are to be closed.
4756   --              x_return_status            - return status
4757   --
4758   -- description: Closes the OTM exceptions passed in 'p_exceptions_to_close_tab' for the delivery p_delivery_id
4759   --
4760   ----------------------------------------------------------
4761 
4762   PROCEDURE CLOSE_OTM_EXCEPTION(
4763     p_delivery_id              IN         WSH_NEW_DELIVERIES.DELIVERY_ID%TYPE,
4764     p_exceptions_to_close_tab  IN         WSH_UTIL_CORE.COLUMN_TAB_TYPE,
4765     x_return_status            OUT NOCOPY VARCHAR2) IS
4766 
4767   l_exception_name      WSH_EXCEPTION_DEFINITIONS_TL.EXCEPTION_NAME%TYPE;
4768   l_debug_on            BOOLEAN;
4769   l_count               NUMBER;
4770   l_msg_count           NUMBER;
4771   l_msg_data            VARCHAR2(32767);
4772   l_return_status       VARCHAR2(1);
4773   i			NUMBER;
4774   l_num_warn 		NUMBER;
4775   --
4776   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CLOSE_OTM_EXCEPTION';
4777   --
4778 
4779   BEGIN
4780     --
4781     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4782     --
4783     IF l_debug_on IS NULL THEN
4784       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4785     END IF;
4786     --
4787     IF l_debug_on THEN
4788       WSH_DEBUG_SV.push(l_module_name);
4789       WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
4790       WSH_DEBUG_SV.log(l_module_name, 'number of exceptions to close', p_exceptions_to_close_tab.COUNT);
4791     END IF;
4792     --
4793     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4794     l_exception_name := NULL;
4795     l_count := 0;
4796     l_msg_count := 0;
4797     l_msg_data := NULL;
4798     l_num_warn := 0;
4799     i := 0;
4800 
4801     IF (p_exceptions_to_close_tab.COUNT > 0 AND p_delivery_id IS NOT NULL) THEN
4802 
4803       i := p_exceptions_to_close_tab.FIRST;
4804       WHILE i IS NOT NULL LOOP
4805 
4806         l_exception_name := p_exceptions_to_close_tab(i);
4807 
4808         -- call purge with action 'CLOSED'
4809         IF l_debug_on THEN
4810           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.PURGE',WSH_DEBUG_SV.C_PROC_LEVEL);
4811         END IF;
4812 
4813         WSH_XC_UTIL.purge (
4814             p_api_version       => 1.0,
4815             x_return_status     => l_return_status,
4816             x_msg_count         => l_msg_count,
4817             x_msg_data          => l_msg_data,
4818             x_no_of_recs_purged => l_count,
4819             p_exception_name    => l_exception_name,
4820             p_delivery_id       => p_delivery_id,
4821             p_delivery_contents => 'N',
4822             p_action            => 'CLOSED'
4823           );
4824 
4825         IF l_debug_on THEN
4826           WSH_DEBUG_SV.logmsg(l_module_name, 'return status from WSH_XC_UTIL.purge: ' || l_return_status);
4827           WSH_DEBUG_SV.log(l_module_name, 'number of exceptions purged', l_count);
4828         END IF;
4829 
4830         IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4831           x_return_status         := l_return_status;
4832           EXIT;
4833         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
4834           l_num_warn := l_num_warn + 1;
4835         END IF;
4836 
4837         i := p_exceptions_to_close_tab.NEXT(i);
4838       END LOOP;
4839     END IF;
4840 
4841     IF l_num_warn > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4842       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4843     END IF;
4844 
4845     -- Debug Statements
4846     --
4847     IF l_debug_on THEN
4848       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
4849       WSH_DEBUG_SV.pop(l_module_name);
4850     END IF;
4851     --
4852 
4853   EXCEPTION
4854     --
4855     WHEN OTHERS THEN
4856       wsh_util_core.default_handler('WSH_XC_UTIL.CLOSE_OTM_EXCEPTION', l_module_name);
4857       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4858       IF l_debug_on THEN
4859         WSH_DEBUG_SV.logmsg(l_module_name, 'Unexpected error has occured. '|| SQLERRM,  WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4860         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4861       END IF;
4862 
4863   END CLOSE_OTM_EXCEPTION;
4864 
4865   ----------------------------------------------------------
4866   -- PROCEDURE LOG_OTM_EXCEPTION
4867   --
4868   -- parameters:  p_delivery_info_tab table of deliveries to check and log
4869   --                                  exceptions for
4870   --              p_new_interface_flag_tab    the table of new interface flag for
4871   --                                          the table of deliveries
4872   --              x_return_status     return status
4873   --
4874   -- description: This procedure checks each delivery's tms_interface_flag to
4875   --      see if it has changed. The new tms_interface_flag is either
4876   --      calculated or supplied in the parameters. The old
4877   --      tms_interface_flag is stored in the info table. The procedure
4878   --      log and close exceptions on the delivery based on the old
4879   --      and new tms_interface_flag.
4880   ----------------------------------------------------------
4881 
4882   PROCEDURE LOG_OTM_EXCEPTION(
4883     p_delivery_info_tab       IN         WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
4884     p_new_interface_flag_tab  IN         WSH_UTIL_CORE.COLUMN_TAB_TYPE,
4885     x_return_status           OUT NOCOPY VARCHAR2) IS
4886 
4887   l_msg_count                 	NUMBER;
4888   l_msg_data                  	VARCHAR2(32767);
4889   l_exception_id		WSH_EXCEPTIONS.EXCEPTION_ID%TYPE;
4890   l_exception_message		WSH_EXCEPTIONS.MESSAGE%TYPE;
4891   l_num_error                   NUMBER;
4892   l_num_warn                   	NUMBER;
4893   l_return_status               VARCHAR2(1);
4894 
4895   l_new_interface_flag		WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
4896   l_exception_name              WSH_EXCEPTION_DEFINITIONS_TL.EXCEPTION_NAME%TYPE;
4897   l_exceptions_to_close_tab     WSH_UTIL_CORE.COLUMN_TAB_TYPE;
4898   i                             NUMBER;
4899   --
4900   l_debug_on                    BOOLEAN;
4901   --
4902   l_module_name                 CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME ||
4903 					'.' || 'LOG_OTM_EXCEPTION';
4904   --
4905   BEGIN
4906     --
4907     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4908     --
4909     IF l_debug_on IS NULL THEN
4910       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4911     END IF;
4912     --
4913     IF l_debug_on THEN
4914       WSH_DEBUG_SV.push(l_module_name);
4915       WSH_DEBUG_SV.log(l_module_name, 'delivery record count', p_delivery_info_tab.COUNT);
4916       WSH_DEBUG_SV.log(l_module_name, 'interface flag count', p_new_interface_flag_tab.COUNT);
4917     END IF;
4918 
4919     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4920 
4921     --initialize
4922     l_num_warn           := 0;
4923     l_num_error          := 0;
4924     l_msg_count          := 0;
4925     l_msg_data           := NULL;
4926     l_new_interface_flag := NULL;
4927     i                    := 0;
4928 
4929     IF (p_delivery_info_tab.COUNT = 0) THEN
4930       IF l_debug_on THEN
4931         WSH_DEBUG_SV.logmsg(l_module_name, 'no delivery to log exceptions');
4932       END IF;
4933     END IF;
4934 
4935     i := p_delivery_info_tab.FIRST;
4936 
4937     WHILE i IS NOT NULL LOOP
4938 
4939       --this loop is used to figure out the new tms interface flag value depending on the old one
4940       --when the input tms interface flag was not specified
4941       IF (p_new_interface_flag_tab.COUNT = 0 OR p_new_interface_flag_tab(i) IS NULL) THEN
4942         --figure out the new status as if it's just an update on delivery
4943         IF (p_delivery_info_tab(i).tms_interface_flag IN (WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_IN_PROCESS,
4944                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED,
4945                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_IN_PROCESS,
4946                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_AWAITING_ANSWER,
4947                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_ANSWER_RECEIVED)) THEN
4948           l_new_interface_flag := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
4949         ELSE
4950           l_new_interface_flag := p_delivery_info_tab(i).tms_interface_flag;
4951         END IF;
4952       ELSE
4953         l_new_interface_flag := p_new_interface_flag_tab(i);
4954       END IF;
4955 
4956       IF l_debug_on THEN
4957         WSH_DEBUG_SV.log(l_module_name, 'p_delivery_id' , p_delivery_info_tab(i).delivery_id);
4958         WSH_DEBUG_SV.log(l_module_name, 'l_new_interface_flag', l_new_interface_flag);
4959         WSH_DEBUG_SV.log(l_module_name, 'p_delivery_info_tab(i).tms_interface_flag', p_delivery_info_tab(i).tms_interface_flag);
4960         IF p_new_interface_flag_tab.COUNT > 0 THEN
4961           WSH_DEBUG_SV.log(l_module_name, 'p_delivery_info_tab(i).tms_interface_flag', p_new_interface_flag_tab(i));
4962         END IF;
4963       END IF;
4964 
4965       --log and close exceptions only if new status is different and not IN Process status
4966       IF ((l_new_interface_flag <> p_delivery_info_tab(i).tms_interface_flag)
4967           AND (l_new_interface_flag NOT IN (WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_IN_PROCESS,
4968                                             WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_IN_PROCESS,
4969                                             WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS))) THEN
4970 
4971         l_exception_id := NULL;
4972         l_exception_message := NULL;
4973         l_exception_name := NULL;
4974 
4975         -- Start of Ship Confirm ECO
4976         -- Close the old exception(s) logged against this delivery, as we are going to
4977         -- log a new exception based on the l_new_interface_flag.
4978         --
4979         IF p_delivery_info_tab(i).tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_AWAITING_ANSWER THEN
4980           l_exceptions_to_close_tab(1) := 'WSH_OTM_DEL_AWAIT_TRIP';
4981         ELSIF p_delivery_info_tab(i).tms_interface_flag IN (WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED,
4982                                                             WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_IN_PROCESS) THEN
4983           l_exceptions_to_close_tab(1) := 'WSH_OTM_DEL_UPDATE_REQ';
4984         ELSIF p_delivery_info_tab(i).tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_ANSWER_RECEIVED THEN
4985           l_exceptions_to_close_tab(1) := 'WSH_OTM_SHIPMENT_REC';
4986         ELSIF  p_delivery_info_tab(i).tms_interface_flag IN (WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
4987                                                              WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_IN_PROCESS) THEN
4988           l_exceptions_to_close_tab(1) := 'WSH_OTM_DEL_CREATE_REQ';
4989         ELSIF  p_delivery_info_tab(i).tms_interface_flag IN (WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
4990                                                              WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS) THEN
4991           l_exceptions_to_close_tab(1) := 'WSH_OTM_DEL_DELETE_REQ';
4992         END IF;
4993 
4994         IF l_exceptions_to_close_tab.COUNT > 0 THEN
4995 
4996           IF l_debug_on THEN
4997             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.CLOSE_OTM_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
4998           END IF;
4999 
5000           WSH_XC_UTIL.close_otm_exception(
5001               p_delivery_id             => p_delivery_info_tab(i).delivery_id,
5002               p_exceptions_to_close_tab => l_exceptions_to_close_tab,
5003               x_return_status           => l_return_status
5004           );
5005 
5006           IF l_debug_on THEN
5007             WSH_DEBUG_SV.logmsg(l_module_name, 'return status from WSH_XC_UTIL.close_otm_exception: ' || l_return_status);
5008           END IF;
5009 
5010           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5011             l_num_error := l_num_error + 1;
5012             EXIT;
5013           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5014             l_num_warn := l_num_warn + 1;
5015           END IF;
5016         END IF;
5017 
5018         --log the deleted exception before the new CR exception is logged
5019 
5020         IF ((l_new_interface_flag IN (WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT,
5021                                       WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
5022                                       WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED))
5023             AND (p_delivery_info_tab(i).tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS)) THEN
5024 
5025           --log deleted, only when set from DP to NS or CR or CMP
5026 
5027           l_exception_name := 'WSH_OTM_DEL_DELETED';
5028           FND_MESSAGE.SET_NAME('WSH',l_exception_name); --message name is same as exception name
5029           FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', p_delivery_info_tab(i).name);
5030           l_exception_message := FND_MESSAGE.GET;
5031 
5032           IF l_debug_on THEN
5033             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.LOG_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
5034           END IF;
5035 
5036           WSH_XC_UTIL.log_exception(
5037               p_api_version           => 1.0,
5038               x_return_status         => l_return_status,
5039               x_msg_count             => l_msg_count,
5040               x_msg_data              => l_msg_data,
5041               x_exception_id          => l_exception_id,
5042               p_exception_location_id => p_delivery_info_tab(i).INITIAL_PICKUP_LOCATION_ID,
5043               p_logged_at_location_id => p_delivery_info_tab(i).INITIAL_PICKUP_LOCATION_ID,
5044               p_logging_entity        => 'SHIPPER',
5045               p_logging_entity_id     => FND_GLOBAL.USER_ID,
5046               p_exception_name        => l_exception_name,
5047               p_delivery_id           => p_delivery_info_tab(i).delivery_id,
5048 	      p_message		      => l_exception_message);
5049 
5050 
5051           IF l_debug_on THEN
5052             WSH_DEBUG_SV.logmsg(l_module_name, 'return status from WSH_XC_UTIL.log_exception: ' || l_return_status);
5053           END IF;
5054 
5055           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5056             l_num_error := l_num_error + 1;
5057             EXIT;
5058           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5059             l_num_warn := l_num_warn + 1;
5060           END IF;
5061 
5062         END IF;
5063 
5064         l_exception_name := NULL;
5065 
5066         --logging the new exception
5067         IF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED) THEN
5068 
5069           l_exception_name := 'WSH_OTM_DEL_CREATE_REQ';
5070 
5071         ELSIF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED) THEN
5072 
5073           l_exception_name := 'WSH_OTM_DEL_UPDATE_REQ';
5074 
5075         ELSIF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED) THEN
5076 
5077           l_exception_name := 'WSH_OTM_DEL_DELETE_REQ';
5078 
5079         ELSIF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_AWAITING_ANSWER) THEN
5080 
5081           l_exception_name := 'WSH_OTM_DEL_AWAIT_TRIP';
5082 
5083         ELSIF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_ANSWER_RECEIVED) THEN
5084 
5085           l_exception_name := 'WSH_OTM_SHIPMENT_REC';
5086 
5087         END IF;
5088 
5089         IF (l_exception_name IS NOT NULL) THEN
5090 
5091           --log the messages, message name is same as exception name
5092           IF (l_new_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_ANSWER_RECEIVED) THEN
5093 
5094             FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_DELIVERY_SUCCESS');
5095 
5096           ELSE
5097 
5098             FND_MESSAGE.SET_NAME('WSH',l_exception_name);
5099             FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', p_delivery_info_tab(i).name);
5100 
5101           END IF;
5102 
5103           l_exception_message := FND_MESSAGE.GET;
5104 
5105           IF l_debug_on THEN
5106             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.LOG_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
5107           END IF;
5108 
5109           WSH_XC_UTIL.log_exception(
5110               p_api_version           => 1.0,
5111               x_return_status         => l_return_status,
5112               x_msg_count             => l_msg_count,
5113               x_msg_data              => l_msg_data,
5114               x_exception_id          => l_exception_id,
5115               p_exception_location_id => p_delivery_info_tab(i).INITIAL_PICKUP_LOCATION_ID,
5116               p_logged_at_location_id => p_delivery_info_tab(i).INITIAL_PICKUP_LOCATION_ID,
5117               p_logging_entity        => 'SHIPPER',
5118               p_logging_entity_id     => FND_GLOBAL.USER_ID,
5119               p_exception_name        => l_exception_name,
5120               p_delivery_id           => p_delivery_info_tab(i).delivery_id,
5121 	      p_message	              => l_exception_message);
5122 
5123           IF l_debug_on THEN
5124             WSH_DEBUG_SV.logmsg(l_module_name, 'return status from WSH_XC_UTIL.log_exception: ' || l_return_status);
5125           END IF;
5126 
5127           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5128             l_num_error := l_num_error + 1;
5129             EXIT;
5130           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5131             l_num_warn := l_num_warn + 1;
5132           END IF;
5133 
5134         END IF;
5135       END IF;
5136 
5137       i := p_delivery_info_tab.NEXT(i);
5138 
5139     END LOOP;
5140 
5141     IF (l_num_error > 0)THEN
5142       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5143     ELSIF (l_num_warn > 0) THEN
5144       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5145     ELSE
5146       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5147     END IF;
5148 
5149     --
5150     -- Debug Statements
5151     --
5152     IF l_debug_on THEN
5153       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
5154       WSH_DEBUG_SV.pop(l_module_name);
5155     END IF;
5156     --
5157 
5158   EXCEPTION
5159     WHEN others THEN
5160       wsh_util_core.default_handler('WSH_XC_UTIL.LOG_OTM_EXCEPTION',  l_module_name);
5161       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5162 
5163       IF l_debug_on THEN
5164         WSH_DEBUG_SV.logmsg(l_module_name,
5165           'Unexpected error has occured. Oracle error message is '|| SQLERRM,
5166           WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5167         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5168       END IF;
5169 
5170   END LOG_OTM_EXCEPTION;
5171 
5172   ----------------------------------------------------------
5173   -- PROCEDURE GET_OTM_DELIVERY_EXCEPTION
5174   --
5175   -- Parameters
5176   --
5177   -- Input p_delivery_id     the delivery to get the OTM exceptions severity.
5178   --
5179   -- Output  x_exception_name,     The name of the OTM exception
5180   --         x_severity,           Severity of the Exception
5181   --         x_return_status       S when success U when exception is thrown.
5182   --
5183   -- description:	This procedure gets the delivery's OTM exception and severity
5184   ----------------------------------------------------------
5185   PROCEDURE GET_OTM_DELIVERY_EXCEPTION
5186   (p_delivery_id	IN         WSH_NEW_DELIVERIES.DELIVERY_ID%TYPE,
5187    x_exception_name	OUT NOCOPY WSH_EXCEPTIONS.EXCEPTION_NAME%TYPE,
5188    x_severity        	OUT NOCOPY WSH_EXCEPTIONS.SEVERITY%TYPE,
5189    x_return_status   	OUT NOCOPY VARCHAR2) IS
5190 
5191   --this cursor gets the delivery's otm exceptions ordered by severity
5192   --we used order by 1 to take advantage of the alphabetical order of ERROR and WARNING
5193   CURSOR c_get_delivery_otm_exceptions (p_delivery_id IN NUMBER) IS
5194     SELECT severity,
5195            DECODE(severity,'HIGH', 1, 'ERROR', 1, 'MEDIUM', 2, 'WARNING', 2, 3) rank,
5196            exception_name
5197     FROM  wsh_exceptions
5198     WHERE delivery_id = p_delivery_id
5199     AND status IN ('OPEN','ERROR','LOGGED','IN_PROCESS','MANUAL')
5200     AND severity IN ('HIGH','MEDIUM','ERROR','WARNING')
5201     AND exception_name IN
5202         ('WSH_OTM_DEL_CREATE_REQ','WSH_OTM_DEL_UPDATE_REQ',
5203          'WSH_OTM_DEL_AWAIT_TRIP')
5204     ORDER BY rank ASC;
5205 
5206   l_severity          WSH_EXCEPTIONS.SEVERITY%TYPE;
5207   l_exception_name    WSH_EXCEPTIONS.EXCEPTION_NAME%TYPE;
5208   l_rank              NUMBER;
5209 
5210   l_debug_on          BOOLEAN;
5211   l_module_name       CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'GET_OTM_DELIVERY_EXCEPTION';
5212 
5213   BEGIN
5214 
5215     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5216 
5217     IF l_debug_on IS NULL THEN
5218       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5219     END IF;
5220     --
5221     IF l_debug_on THEN
5222       WSH_DEBUG_SV.push(l_module_name);
5223       WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
5224     END IF;
5225 
5226     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5227 
5228     l_severity := NULL;
5229     l_rank := NULL;
5230     l_exception_name := NULL;
5231 
5232     IF (p_delivery_id IS NULL) THEN
5233       IF l_debug_on THEN
5234         WSH_DEBUG_SV.logmsg(l_module_name, 'delivery id is NULL');
5235         WSH_DEBUG_SV.pop(l_module_name);
5236       END IF;
5237       x_severity := l_severity;
5238       x_exception_name := l_exception_name;
5239       RETURN;
5240     END IF;
5241 
5242 
5243     -- Return the exception with the highest severity.
5244     OPEN c_get_delivery_otm_exceptions(p_delivery_id);
5245 
5246     FETCH c_get_delivery_otm_exceptions INTO l_severity, l_rank, l_exception_name;
5247 
5248     IF c_get_delivery_otm_exceptions%NOTFOUND THEN
5249       l_severity := NULL;
5250       l_exception_name := NULL;
5251     END IF;
5252 
5253     CLOSE c_get_delivery_otm_exceptions;
5254 
5255     -- Assign to the output variables.
5256     -- Reason for the coresponding local variables being extendability.
5257 
5258     x_severity := l_severity;
5259     x_exception_name := l_exception_name;
5260 
5261     IF l_debug_on THEN
5262       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_severity);
5263       WSH_DEBUG_SV.log(l_module_name, 'x_exception_name', x_exception_name);
5264       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
5265       WSH_DEBUG_SV.pop(l_module_name);
5266     END IF;
5267 
5268   EXCEPTION
5269     WHEN OTHERS THEN
5270       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5271       wsh_util_core.default_handler('WSH_XC_UTIL.GET_OTM_DELIVERY_EXCEPTION', l_module_name);
5272 
5273       IF c_get_delivery_otm_exceptions%ISOPEN THEN
5274         CLOSE c_get_delivery_otm_exceptions;
5275       END IF;
5276       IF l_debug_on THEN
5277         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5278         WSH_DEBUG_SV.pop(l_module_name);
5279       END IF;
5280 
5281   END GET_OTM_DELIVERY_EXCEPTION;
5282   --END OTM R12
5283 
5284 END WSH_XC_UTIL;