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