DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_TRIP_STOPS_VALIDATIONS

Source


1 PACKAGE BODY WSH_TRIP_STOPS_VALIDATIONS as
2 /* $Header: WSHSTVLB.pls 120.5.12000000.4 2007/06/29 21:45:07 dramamoo ship $ */
3 
4 --
5 G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_TRIP_STOPS_VALIDATIONS';
6 
7 --3509004 :public api changes
8 PROCEDURE   user_non_updatable_columns
9      (p_user_in_rec     IN WSH_TRIP_STOPS_PVT.trip_stop_rec_type,
10       p_out_rec         IN WSH_TRIP_STOPS_PVT.trip_stop_rec_type,
11       p_in_rec          IN WSH_TRIP_STOPS_GRP.stopInRecType,
12       x_return_status   OUT NOCOPY    VARCHAR2);
13 
14 
15 /*
16  For every New stop entered or Updated
17 1. Check if stop sequence number is positive integer
18 2. Check if stop status is OPEN for update,OPEN for insert as well
19 3. Check if the new planned arrival date is greater than the planned arrival date of
20    arrived or closed stop
21 FP Bug 425334,per bug 4245339, validation of uniqueness is deferred to handle_internal_stops in WSHTRACB.pls.
22 */
23 -- Stop id is there as of now,but no validation,in case required later
24 PROCEDURE validate_sequence_number
25   (p_stop_id IN NUMBER,
26    p_stop_sequence_number IN NUMBER,
27    p_trip_id IN NUMBER,
28    p_status_code IN VARCHAR2,
29    x_return_status OUT NOCOPY  VARCHAR2
30    )
31   IS
32 
33 CURSOR c_lock_trip IS
34   SELECT trip_id
35     FROM wsh_trips
36    WHERE trip_id = p_trip_id
37   FOR UPDATE NOWAIT;
38 
39 
40  l_return_status VARCHAR2(30);
41  l_trip_id NUMBER;
42  l_del_to_unassign WSH_UTIL_CORE.id_tab_type;
43 
44   RECORD_LOCKED          EXCEPTION;
45   PRAGMA EXCEPTION_INIT(RECORD_LOCKED, -54);
46 
47 
48 --
49 l_debug_on BOOLEAN;
50 --
51 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_SEQUENCE_NUMBER';
52 --
53 BEGIN
54   --
55   -- Debug Statements
56   --
57   --
58   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
59   --
60   IF l_debug_on IS NULL
61   THEN
62       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
63   END IF;
64   --
65   IF l_debug_on THEN
66       WSH_DEBUG_SV.push(l_module_name);
67       --
68       WSH_DEBUG_SV.log(l_module_name,'P_STOP_ID',P_STOP_ID);
69       WSH_DEBUG_SV.log(l_module_name,'P_STOP_SEQUENCE_NUMBER',P_STOP_SEQUENCE_NUMBER);
70       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
71       WSH_DEBUG_SV.log(l_module_name,'P_STATUS_CODE',P_STATUS_CODE);
72   END IF;
73   --
74   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
75 
76   OPEN c_lock_trip;
77   FETCH c_lock_trip
78    INTO l_trip_id;
79   CLOSE c_lock_trip;
80 
81   IF p_stop_sequence_number IS NULL THEN
82     -- Harmonization Project I heali
83     --
84     -- Debug Statements
85     --
86     IF l_debug_on THEN
87         WSH_DEBUG_SV.pop(l_module_name);
88     END IF;
89     --
90     RETURN;
91   END IF;
92 
93 -- Check if sequence number is positive
94   check_for_negative_number(
95     p_stop_sequence_number => p_stop_sequence_number,
96     x_return_status => l_return_status);
97   IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
98     x_return_status := l_return_status;
99     FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_STOP_SEQUENCE');
100     wsh_util_core.add_message(x_return_status);
101     --
102     -- Debug Statements
103     --
104     IF l_debug_on THEN
105         WSH_DEBUG_SV.pop(l_module_name);
106     END IF;
107     --
108     RETURN;
109   END IF;
110 
111 -- Check if stop status is Open
112 -- For new records pass this as OP as well
113   validate_stop_status(
114     p_stop_status => p_status_code,
115     x_return_status => l_return_status);
116   IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
117     FND_MESSAGE.SET_NAME('WSH','WSH_STOP_INVALID_STATUS');
118     x_return_status := l_return_status;
119     wsh_util_core.add_message(x_return_status);
120     --
121     -- Debug Statements
122     --
123     IF l_debug_on THEN
124         WSH_DEBUG_SV.pop(l_module_name);
125     END IF;
126     --
127     RETURN;
128   END IF;
129 
130 -- validate for sequence number of closed stop,the new sequencenumber should
131 -- be greater than stop sequence number of closed stop
132   validate_closed_stop_seq
133     (p_trip_id => p_trip_id,
134      p_stop_sequence_number => p_stop_sequence_number,
135      x_return_status => l_return_status);
136   IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
137     FND_MESSAGE.SET_NAME('WSH','WSH_STOP_SEQUENCE_LOWER');
138     x_return_status := l_return_status;
139     wsh_util_core.add_message(x_return_status);
140     --
141     -- Debug Statements
142     --
143     IF l_debug_on THEN
144         WSH_DEBUG_SV.pop(l_module_name);
145     END IF;
146     --
147     RETURN;
148   END IF;
149 --
150 -- Check if update of Sequence Number is going to unassign a delivery from
151 -- the trip
152 -- Delivery D1 - Stop S1(10 as pickup) and Stop S2(25 as dropoff) on Trip T1
153 -- Example, updating of stop sequence from 10 to 50 would invalidate this
154 -- delivery on the trip.
155 
156 -- This check is only for update
157   IF p_stop_id IS NOT NULL THEN
158     valid_delivery_on_trip
159      (p_stop_id => p_stop_id,
160       p_trip_id => p_trip_id,
161       p_stop_sequence_number => p_stop_sequence_number,
162       x_del_to_unassign => l_del_to_unassign,
163       x_return_status => l_return_status);
164     IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
165       IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
166         x_return_status := l_return_status;
167       ELSE
168         x_return_status := l_return_status;
169         --
170         -- Debug Statements
171         --
172         IF l_debug_on THEN
173             WSH_DEBUG_SV.pop(l_module_name);
174         END IF;
175         --
176         RETURN;
177       END IF;
178     END IF; --If return status is not success from API
179   END IF; -- if p_stop_id is not null
180 
181 --
182 -- Debug Statements
183 --
184 IF l_debug_on THEN
185     WSH_DEBUG_SV.pop(l_module_name);
186 END IF;
187 --
188 EXCEPTION
189   WHEN RECORD_LOCKED THEN
190     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
191     FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
192     WSH_UTIL_CORE.add_message (x_return_status);
193     --
194     -- Debug Statements
195     --
196     IF l_debug_on THEN
197         WSH_DEBUG_SV.pop(l_module_name);
198     END IF;
199     --
200     RETURN;
201 
202 --
203 -- Debug Statements
204 --
205 IF l_debug_on THEN
206     WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
207     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
208 END IF;
209 --
210   WHEN OTHERS THEN
211     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.validate_sequence_number');
212     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
213     --
214     -- Debug Statements
215     --
216     IF l_debug_on THEN
217         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
218         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
219     END IF;
220     --
221 END validate_sequence_number;
222 
223 
224 PROCEDURE validate_closed_stop_seq
225     (p_trip_id IN NUMBER,
226      p_stop_sequence_number IN NUMBER,
227      x_return_status OUT NOCOPY  VARCHAR2) IS
228 
229 -- nvl is if no records exist
230   CURSOR c_check_max IS
231     SELECT nvl(max(stop_sequence_number),0) stop_sequence_number
232       FROM wsh_trip_stops
233      WHERE trip_id = p_trip_id
234        AND status_code IN ('AR','CL');
235 
236   l_max_sequence NUMBER;
237 
238 --
239 l_debug_on BOOLEAN;
240 --
241 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_CLOSED_STOP_SEQ';
242 --
243 BEGIN
244 
245   --
246   -- Debug Statements
247   --
248   --
249   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
250   --
251   IF l_debug_on IS NULL
252   THEN
253       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
254   END IF;
255   --
256   IF l_debug_on THEN
257       WSH_DEBUG_SV.push(l_module_name);
258       --
259       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
260       WSH_DEBUG_SV.log(l_module_name,'P_STOP_SEQUENCE_NUMBER',P_STOP_SEQUENCE_NUMBER);
261   END IF;
262   --
263   OPEN c_check_max;
264   FETCH c_check_max
265    INTO l_max_sequence;
266 
267   IF (c_check_max%NOTFOUND or l_max_sequence = 0) THEN
268     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
269   ELSIF (l_max_sequence > p_stop_sequence_number) THEN
270     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
271   END IF;
272 
273   CLOSE c_check_max;
274   --
275   -- Debug Statements
276   --
277   IF l_debug_on THEN
278       WSH_DEBUG_SV.pop(l_module_name);
279   END IF;
280   --
281 EXCEPTION
282   WHEN OTHERS THEN
283     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.validate_closed_stop_seq');
284     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
285     --
286     -- Debug Statements
287     --
288     IF l_debug_on THEN
289         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
290         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
291     END IF;
292     --
293 END;
294 /* p_stop id will be null for new records
295    for update it will be populated
296 */
297 PROCEDURE validate_unique_sequence
298     (p_trip_id IN NUMBER,
299      p_stop_id IN NUMBER,
300      p_stop_sequence_number IN NUMBER,
301      x_return_status OUT NOCOPY  VARCHAR2) IS
302 
303   CURSOR c_check_unique IS
304     SELECT stop_id
305       FROM wsh_trip_stops
306      WHERE trip_id = p_trip_id
307        AND stop_sequence_number = p_stop_sequence_number
308        AND rownum = 1 ;
309 
310   l_check_flag VARCHAR2(1) := 'N';
311   l_stop_id NUMBER;
312 
313 --
314 l_debug_on BOOLEAN;
315 --
316 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_UNIQUE_SEQUENCE';
317 --
318 BEGIN
319 
320   --
321   -- Debug Statements
322   --
323   --
324   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
325   --
326   IF l_debug_on IS NULL
327   THEN
328       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
329   END IF;
330   --
331   IF l_debug_on THEN
332       WSH_DEBUG_SV.push(l_module_name);
333       --
334       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
335       WSH_DEBUG_SV.log(l_module_name,'P_STOP_ID',P_STOP_ID);
336       WSH_DEBUG_SV.log(l_module_name,'P_STOP_SEQUENCE_NUMBER',P_STOP_SEQUENCE_NUMBER);
337   END IF;
338   --
339   OPEN c_check_unique;
340   FETCH c_check_unique
341    INTO l_stop_id;
342 
343 /* for update check if the new sequence number is same as existing value
344    then success */
345   IF (
346       (p_stop_id IS NOT NULL
347        AND l_stop_id = p_stop_id
348        )  OR
349       (c_check_unique%NOTFOUND) OR
350       (l_stop_id IS NULL)
351     )THEN
352     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
353   ELSE
354 -- l_stop_id is not null and <> p_stop_id
355     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
356   END IF;
357 /*
358 -- no records exist
359   IF (l_check_flag = 'N' OR c_check_unique%NOTFOUND) THEN
360     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
361   ELSIF l_check_flag = 'Y' THEN
362     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
363   END IF;
364 */
365 
366   CLOSE c_check_unique;
367 
368 --
369 -- Debug Statements
370 --
371 IF l_debug_on THEN
372     WSH_DEBUG_SV.pop(l_module_name);
373 END IF;
374 --
375 EXCEPTION
376   WHEN OTHERS THEN
377     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.validate_unique_sequence');
378     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
379     --
380     -- Debug Statements
381     --
382     IF l_debug_on THEN
383         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
384         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
385     END IF;
386     --
387 END;
388 
389 PROCEDURE check_for_negative_number
390   (p_stop_sequence_number IN NUMBER,
391    x_return_status OUT NOCOPY  VARCHAR2) IS
392    --
393 l_debug_on BOOLEAN;
394    --
395    l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_FOR_NEGATIVE_NUMBER';
396    --
397 BEGIN
398   --
399   -- Debug Statements
400   --
401   --
402   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
403   --
404   IF l_debug_on IS NULL
405   THEN
406       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
407   END IF;
408   --
409   IF l_debug_on THEN
410       WSH_DEBUG_SV.push(l_module_name);
411       --
412       WSH_DEBUG_SV.log(l_module_name,'P_STOP_SEQUENCE_NUMBER',P_STOP_SEQUENCE_NUMBER);
413   END IF;
414   --
415   IF p_stop_sequence_number > 0 THEN
416     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
417   ELSE
418     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
419   END IF;
420 
421 --
422 -- Debug Statements
423 --
424 IF l_debug_on THEN
425     WSH_DEBUG_SV.pop(l_module_name);
426 END IF;
427 --
428 EXCEPTION
429   WHEN OTHERS THEN
430     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.check_for_negative_number');
431     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
432     --
433     -- Debug Statements
434     --
435     IF l_debug_on THEN
436         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
437         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
438     END IF;
439     --
440 END ;
441 
442 PROCEDURE validate_stop_status
443   (p_stop_status IN VARCHAR2,
444    x_return_status OUT NOCOPY  VARCHAR2) IS
445    --
446 l_debug_on BOOLEAN;
447    --
448    l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_STOP_STATUS';
449    --
450 BEGIN
451 
452   --
453   -- Debug Statements
454   --
455   --
456   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
457   --
458   IF l_debug_on IS NULL
459   THEN
460       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
461   END IF;
462   --
463   IF l_debug_on THEN
464       WSH_DEBUG_SV.push(l_module_name);
465       --
466       WSH_DEBUG_SV.log(l_module_name,'P_STOP_STATUS',P_STOP_STATUS);
467   END IF;
468   --
469   IF p_stop_status = 'OP' THEN
470     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
471   ELSE
472     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
473   END IF;
474 
475 --
476 -- Debug Statements
477 --
478 IF l_debug_on THEN
479     WSH_DEBUG_SV.pop(l_module_name);
480 END IF;
481 --
482 EXCEPTION
483   WHEN OTHERS THEN
484     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.validate_stop_status');
485     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
486     --
487     -- Debug Statements
488     --
489     IF l_debug_on THEN
490         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
491         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
492     END IF;
493     --
494 END;
495 /** Logic used here
496   For this trip_id and stop_id, find all the deliveries associated
497    which means find deliveries which will be OPEN and have this stop location
498    as either their pickup location or drop off location.
499 
500   If yes then
501     evaluate with the new stop sequence to see if the original pickup or dropoff
502     plans for delivery is not altered by updating this stop sequence.
503   End if;
504 
505   x_del_to_unassign returns the list of deliveries which have to be unassigned
506 
507 **/
508 PROCEDURE valid_delivery_on_trip
509      (p_stop_id IN NUMBER,
510       p_trip_id IN NUMBER,
511       p_stop_sequence_number IN NUMBER,
512       x_del_to_unassign OUT NOCOPY  WSH_UTIL_CORE.ID_TAB_TYPE,
513       x_return_status OUT NOCOPY  VARCHAR2) IS
514 
515 CURSOR c_stop_details IS
516   SELECT stop_sequence_number,
517          stop_id
518     FROM wsh_trip_stops
519    WHERE trip_id = p_trip_id
520      AND status_code = 'OP'  -- this is a case only for Open stops
521      AND stop_id <> p_stop_id ;
522 
523 l_rec_stop WSH_TRIP_STOPS_VALIDATIONS.stop_details_tab;
524 
525 -- Question , Can there be multiple record with same stop id as pickup
526 CURSOR c_wdl_details1 IS
527   SELECT pick_up_stop_id,
528          drop_off_stop_id,
529          wdl.delivery_id
530     FROM wsh_delivery_legs wdl
531    WHERE (pick_up_stop_id = p_stop_id
532           OR drop_off_stop_id = p_stop_id);
533 
534 CURSOR c_wdl_details2 IS
535   SELECT pick_up_stop_id,
536          drop_off_stop_id,
537          delivery_id
538     FROM wsh_delivery_legs
539    WHERE drop_off_stop_id = p_stop_id;
540 
541 l_rec_wdl1 WSH_TRIP_STOPS_VALIDATIONS.dleg_details_tab;
542 --l_rec_wdl2 c_wdl_details%TYPE;
543 
544 stop_count NUMBER := 0;
545 dleg_count NUMBER := 0;
546 l_num_warn NUMBER := 0;
547 
548 --this will be used to unassign deliveries from trip
549 l_del_to_unassign WSH_UTIL_CORE.id_tab_type;
550 l_return_status VARCHAR2(30) := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
551 
552 
553 --
554 l_debug_on BOOLEAN;
555 --
556 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALID_DELIVERY_ON_TRIP';
557 --
558 BEGIN
559 
560   --
561   -- Debug Statements
562   --
563   --
564   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
565   --
566   IF l_debug_on IS NULL
567   THEN
568       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
569   END IF;
570   --
571   IF l_debug_on THEN
572       WSH_DEBUG_SV.push(l_module_name);
573       --
574       WSH_DEBUG_SV.log(l_module_name,'P_STOP_ID',P_STOP_ID);
575       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
576       WSH_DEBUG_SV.log(l_module_name,'P_STOP_SEQUENCE_NUMBER',P_STOP_SEQUENCE_NUMBER);
577   END IF;
578   --
579   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
580 
581   FOR rec in c_stop_details
582   LOOP
583     stop_count := stop_count + 1;
584     l_rec_stop(stop_count).stop_sequence_number := rec.stop_sequence_number;
585     l_rec_stop(stop_count).stop_id := rec.stop_id;
586 
587   END LOOP;
588 
589 
590 -- If no records are found means,there is no delivery associated
591 -- with the stops and the sequence numbers can be updated
592 
593 -- for the stop ,find delivery legs where this stop is pickup or dropoff
594 
595   FOR rec IN c_wdl_details1
596   LOOP
597     dleg_count := dleg_count + 1;
598     l_rec_wdl1(dleg_count).pick_up_stop_id := rec.pick_up_stop_id;
599     l_rec_wdl1(dleg_count).drop_off_stop_id := rec.drop_off_stop_id;
600     l_rec_wdl1(dleg_count).delivery_id := rec.delivery_id;
601 
602   END LOOP;
603 
604 
605 /*
606 -- for the stop ,find delivery legs where this stop is drop off
607 
608   OPEN   c_wdl_details2;
609   FETCH  c_wdl_details2
610    INTO  l_rec_wdl2;
611   CLOSE  c_wdl_details2;
612 */
613 
614 -- Warning will be that some of the deliveries will be unassigned
615 -- from the trip
616 
617   FOR i in 1..l_rec_stop.count
618   LOOP
619     FOR j in 1..l_rec_wdl1.count
620     LOOP
621       IF l_rec_wdl1(j).pick_up_stop_id = l_rec_stop(i).stop_id THEN
622          --compare with new stop sequence number
623          -- If new stop is earlier than the pick up - then message
624         IF p_stop_sequence_number < l_rec_stop(i).stop_sequence_number THEN
625           l_del_to_unassign(l_del_to_unassign.count + 1) :=
626              l_rec_wdl1(j).delivery_id;
627           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_TRIP');
628           --
629           -- Debug Statements
630           --
631           IF l_debug_on THEN
632               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
633           END IF;
634           --
635           FND_MESSAGE.SET_TOKEN('DELIVERY_NAME',
636                             WSH_NEW_DELIVERIES_PVT.get_name(l_rec_wdl1(j).delivery_id));
637           --
638           -- Debug Statements
639           --
640           IF l_debug_on THEN
641               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
642           END IF;
643           --
644           FND_MESSAGE.SET_TOKEN('TRIP_NAME',
645                             WSH_TRIPS_PVT.get_name(p_trip_id));
646           l_num_warn := l_num_warn + 1;
647           l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
648           WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_WARNING);
649 
650         END IF;
651 
652 -- Both cases for pickup and drop off cannot be true separately at the same time
653 -- It can be either pickup or drop off ,as we match with the stop id when
654 -- creating l_rec_wdl1 and there is no existing record in l_rec_stop for p_stop_id
655 
656       ELSIF l_rec_wdl1(j).drop_off_stop_id = l_rec_stop(i).stop_id THEN
657          --compare with new stop sequence number
658          -- If new stop is later than the dropoff - then message
659         IF p_stop_sequence_number > l_rec_stop(i).stop_sequence_number THEN
660           l_del_to_unassign(l_del_to_unassign.count + 1) :=
661              l_rec_wdl1(j).delivery_id;
662           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_TRIP');
663           --
664           -- Debug Statements
665           --
666           IF l_debug_on THEN
667               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
668           END IF;
669           --
670           FND_MESSAGE.SET_TOKEN('DELIVERY_NAME',
671                             WSH_NEW_DELIVERIES_PVT.get_name(l_rec_wdl1(j).delivery_id));
672           --
673           -- Debug Statements
674           --
675           IF l_debug_on THEN
676               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
677           END IF;
678           --
679           FND_MESSAGE.SET_TOKEN('TRIP_NAME',
680                             WSH_TRIPS_PVT.get_name(p_trip_id));
681           l_num_warn := l_num_warn + 1;
682           l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
683           WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_WARNING);
684 
685         END IF;
686 
687       END IF;
688     END LOOP;
689   END LOOP;
690 -- as of now ,keep error
691   IF (l_num_warn > 0 AND l_del_to_unassign.count > 0) THEN
692         --
693         -- Debug Statements
694         --
695         IF l_debug_on THEN
696             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.UNASSIGN_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
697         END IF;
698         --
699         WSH_TRIPS_ACTIONS.unassign_trip
700           (p_del_rows => l_del_to_unassign,
701            p_trip_id  => p_trip_id,
702            x_return_status => l_return_status);
703   END IF;
704 
705 
706   IF l_num_warn > 0 THEN
707     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
708   ELSIF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
709     x_return_status := l_return_status;
710   END IF;
711 
712 
713 --
714 -- Debug Statements
715 --
716 IF l_debug_on THEN
717     WSH_DEBUG_SV.pop(l_module_name);
718 END IF;
719 --
720 EXCEPTION
721   WHEN OTHERS THEN
722     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.valid_delivery_on_trip');
723     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
724     --
725     -- Debug Statements
726     --
727     IF l_debug_on THEN
728         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
729         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
730     END IF;
731     --
732 END;
733 /*
734 This is called from Assign to Trip
735 Case1 - Use pickup and dropoff locations on delivery to create new stops.
736         In this case, stop sequence number has to be generated and then
737         validated
738 Case2 - Use new pickup and dropoff locations specified.In this case just
739         validate the new pickup and stop sequence number.
740 Case3 - Use new pickup and the drop off on the delivery.In this case, validate
741         the new pickup stop sequence and generate and validate for
742         dropoff (as per delivery).
743         Test the case, where there are multiple deliveries.
744         In that case,since new Pickup or Dropoff takes precedence, so
745         in this case the dropoff locations on all the deliveries will have
746         new stops created but only 1 pickup will be created.
747 
748 Case4 - Use pickup on the delivery and new drop off location.In this case,
749         validate the new dropoff stop sequence number and generate
750         and validate for the pickup exisitng on the delivery.
751 
752 */
753 PROCEDURE get_new_sequence_number
754   (x_stop_sequence_number IN OUT NOCOPY  NUMBER,
755    p_trip_id              IN NUMBER,
756    p_status_code          IN VARCHAR2,
757    p_stop_id              IN NUMBER,
758    p_new_flag             IN VARCHAR2,
759    x_return_status        OUT NOCOPY  VARCHAR2
760    ) IS
761 
762 CURSOR c_get_max_sequence IS
763   SELECT nvl(max(stop_sequence_number),0) stop_sequence_number
764     FROM wsh_trip_stops
765    WHERE trip_id = p_trip_id;
766 
767   l_stop_sequence_number NUMBER;
768 
769 --
770 l_debug_on BOOLEAN;
771 --
772 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_NEW_SEQUENCE_NUMBER';
773 --
774 BEGIN
775 -- The processing is for each stop and not the combination
776 -- It can be a new Pickup
777 -- or New Dropoff
778 -- or as per Delivery
779 
780   --
781   -- Debug Statements
782   --
783   --
784   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
785   --
786   IF l_debug_on IS NULL
787   THEN
788       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
789   END IF;
790   --
791   IF l_debug_on THEN
792       WSH_DEBUG_SV.push(l_module_name);
793       --
794       WSH_DEBUG_SV.log(l_module_name,'X_STOP_SEQUENCE_NUMBER',X_STOP_SEQUENCE_NUMBER);
795       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
796       WSH_DEBUG_SV.log(l_module_name,'P_STATUS_CODE',P_STATUS_CODE);
797       WSH_DEBUG_SV.log(l_module_name,'P_STOP_ID',P_STOP_ID);
798       WSH_DEBUG_SV.log(l_module_name,'P_NEW_FLAG',P_NEW_FLAG);
799   END IF;
800   --
801   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
802   l_stop_sequence_number := 0;
803 
804 -- new pickup or dropoff
805   IF (p_new_flag IN ('PICKUP','DROPOFF')) THEN /* pickup or dropoff */
806 
807     validate_sequence_number
808       (p_stop_id => p_stop_id,
809        p_stop_sequence_number => x_stop_sequence_number,
810        p_trip_id => p_trip_id,
811        p_status_code => p_status_code,
812        x_return_status => x_return_status);
813 
814     IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
815       --
816       -- Debug Statements
817       --
818       IF l_debug_on THEN
819           WSH_DEBUG_SV.pop(l_module_name);
820       END IF;
821       --
822       RETURN;
823     END IF;
824 
825 -- no new pickup or dropoff
826 -- use delivery level information
827   ELSIF p_new_flag = 'DELIVERY' THEN /* delivery */
828 /* For an existing delivery and matching stops ,if any ,will have a stop sequence
829    number - in that case the flow will not come to this place.
830    For this code ,So p_stop_sequence_number cannot be populated for an existing delivery.
831 */
832     IF (nvl(x_stop_sequence_number,0) = 0 )THEN
833       OPEN c_get_max_sequence;
834       FETCH c_get_max_sequence
835        INTO l_stop_sequence_number;
836       CLOSE c_get_max_sequence;
837     END IF;
838 -- First time x_stop_sequence will be null then use l_stop_sequence
839 -- Else use x_stop_sequence when this API is called by itself
840 -- SSN change
841 -- Add 10 to derive next SSN
842     l_stop_sequence_number := nvl(x_stop_sequence_number,l_stop_sequence_number) + 10;
843 
844 -- Generate Logic here
845     validate_sequence_number
846       (p_stop_id => p_stop_id,
847        p_stop_sequence_number => l_stop_sequence_number,
848        p_trip_id => p_trip_id,
849        p_status_code => p_status_code,
850        x_return_status => x_return_status);
851 
852     IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
853       -- try another number,append by 10 more
854       get_new_sequence_number
855         (x_stop_sequence_number => l_stop_sequence_number,
856          p_trip_id              => p_trip_id,
857          p_status_code          => p_status_code,
858          p_stop_id              => p_stop_id,
859          p_new_flag             => p_new_flag,
860          x_return_status        => x_return_status);
861 
862     END IF; /* not success */
863 
864     x_stop_sequence_number := l_stop_sequence_number;
865 
866   END IF; /* End of flag */
867   --
868   -- Debug Statements
869   --
870   IF l_debug_on THEN
871       WSH_DEBUG_SV.pop(l_module_name);
872   END IF;
873   --
874 EXCEPTION
875   WHEN OTHERS THEN
876     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_TRIP_STOP_VALIDATIONS.get_new_sequence_number');
877     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
878     --
879     -- Debug Statements
880     --
881     IF l_debug_on THEN
882         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
883         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
884     END IF;
885     --
886 END;
887 
888 
889 PROCEDURE Is_Action_Enabled(
890                 p_stop_rec_tab          IN      stop_rec_tab_type,
891                 p_action                IN      VARCHAR2,
892                 p_caller                IN      VARCHAR2,
893                 x_return_status         OUT NOCOPY      VARCHAR2,
894                 x_valid_ids             OUT NOCOPY      wsh_util_core.id_tab_type,
895                 x_error_ids             OUT NOCOPY      wsh_util_core.id_tab_type,
896                 x_valid_index_tab       OUT NOCOPY      wsh_util_core.id_tab_type
897           ) IS
898 
899 cursor  stop_to_del_cur( p_stop_id IN NUMBER ) is
900 select  wnd.delivery_id,
901         wnd.organization_id,
902         wnd.status_code,
903         wnd.planned_flag,
904 /*J inbound logistics new column jckwok*/
905         NVL(wnd.shipment_direction, 'O') shipment_direction,
906         wnd.delivery_type, --MDC
907         NVL(wnd.ignore_for_planning, 'N') ignore_for_planning,  --OTM R12, glog proj
908         NVL(wnd.tms_interface_flag,WSH_TRIP_STOPS_PVT.C_TMS_NOT_TO_BE_SENT) tms_interface_flag, -- OTM R12, glog proj
909         wsp.otm_enabled
910 from    wsh_new_deliveries wnd,
911         wsh_delivery_legs wdl,
912         wsh_shipping_parameters wsp
913 where   wnd.delivery_id = wdl.delivery_id
914 and     (wdl.pick_up_stop_id = p_stop_id
915          OR wdl.drop_off_stop_id = p_stop_id )
916 and     wnd.organization_id = wsp.organization_id;
917 
918 cursor  stop_to_det_cur( p_stop_id IN NUMBER ) is
919 select  distinct 'X'
920 from    wsh_delivery_details wdd,
921         wsh_new_deliveries wnd,
922         wsh_delivery_assignments_v wda,
923         wsh_delivery_legs wdl
924 where   (wdl.pick_up_stop_id = p_stop_id OR  wdl.drop_off_stop_id = p_stop_id)
925 and     wnd.delivery_id = wdl.delivery_id
926 and     wda.delivery_id = wnd.delivery_id
927 and     wdd.delivery_detail_id = wda.delivery_detail_id
928 and     wdd.source_code = 'WSH'
929 and     wdd.container_flag = 'N';
930 
931 --/== Workflow Changes
932 cursor  stop_del_cur_wf( p_stop_id IN NUMBER ) is
933 select  wnd.delivery_id,
934 	wnd.delivery_scpod_wf_process,
935         wnd.del_wf_intransit_attr,
936 	wnd.del_wf_close_attr,
937 	decode(p_stop_id,wdl.drop_off_stop_id,'D',wdl.pick_up_stop_id,'P','X') stop_type
938 from    wsh_new_deliveries wnd,
939         wsh_delivery_legs wdl
940 where   wnd.delivery_id = wdl.delivery_id
941 and    (wdl.pick_up_stop_id = p_stop_id  OR
942         wdl.drop_off_stop_id = p_stop_id );
943 
944 l_override_wf    VARCHAR2(1);
945 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
946 l_purged_count   NUMBER;
947 l_wf_rs          VARCHAR2(1);
948 e_scpod_wf_inprogress EXCEPTION;
949 --==/
950 
951 l_stop_actions_tab 	StopActionsTabType;
952 l_valid_ids             wsh_util_core.id_tab_type;
953 l_error_ids             wsh_util_core.id_tab_type;
954 l_valid_index_tab       wsh_util_core.id_tab_type;
955 l_dlvy_rec_tab          WSH_DELIVERY_VALIDATIONS.dlvy_rec_tab_type;
956 
957 l_tpw_temp 		VARCHAR2(1);
958 l_return_status 	VARCHAR2(1);
959 error_in_init_actions   EXCEPTION;
960 e_set_messages          EXCEPTION;
961 
962 l_debug_on BOOLEAN;
963 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_ACTION_ENABLED';
964 --
965 l_caller                VARCHAR2(100);
966 
967 BEGIN
968  --
969  l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
970  --
971  IF l_debug_on IS NULL
972  THEN
973      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
974  END IF;
975  --
976  IF l_debug_on THEN
977      WSH_DEBUG_SV.push(l_module_name);
978      --
979      WSH_DEBUG_SV.log(l_module_name,'p_caller',p_caller);
980      WSH_DEBUG_SV.log(l_module_name,'p_action',p_action);
981  END IF;
982 
983  Init_Stop_Actions_Tbl(
984 	p_action => p_action,
985 	x_stop_actions_tab => l_stop_actions_tab,
986 	x_return_status => x_return_status);
987 
988  IF l_debug_on THEN
989     WSH_DEBUG_SV.log(l_module_name,'Init_Detail_Actions_Tbl x_return_status',x_return_status);
990  END IF;
991 
992  IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
993     raise error_in_init_actions;
994  END IF;
995 
996  FOR j IN p_stop_rec_tab.FIRST..p_stop_rec_tab.LAST LOOP
997  BEGIN
998 
999      -- J-IB-NPARIKH-{
1000      --
1001      l_caller           := p_caller;
1002      --
1003      --
1004      IF l_debug_on THEN
1005         wsh_debug_sv.log(l_module_name, 'l_caller', l_caller);
1006      END IF;
1007         --
1008         --
1009         -- Actions on inbound trip-stops are allowed only if caller
1010         -- starts with  one of the following:
1011         --     - FTE
1012         --     - WSH_IB
1013         --     - WSH_PUB
1014         --     - WSH_TP_RELEASE
1015         -- For any other callers, set l_caller to WSH_FSTRX
1016         -- Since for caller, WSH_FSTRX, all actions are disabled
1017         -- on inbound trip stops
1018         --
1019         --
1020         --
1021         IF  nvl(p_stop_rec_tab(j).shipments_type_flag,'O') = 'I'
1022         THEN
1023         --{
1024             IF l_caller LIKE 'FTE%'
1025             OR l_caller LIKE 'WSH_PUB%'
1026             OR l_caller LIKE 'WSH_IB%'
1027             OR l_caller LIKE 'WSH_TP_RELEASE%'
1028             THEN
1029                 NULL;
1030             ELSE
1031                 l_caller := 'WSH_FSTRX';
1032             END IF;
1033         --}
1034         END IF;
1035      --
1036      --
1037      IF l_debug_on THEN
1038         wsh_debug_sv.log(l_module_name, 'l_caller-modified', l_caller);
1039      END IF;
1040      -- J-IB-NPARIKH-}
1041      --
1042 
1043     IF (l_stop_actions_tab.COUNT > 0) THEN
1044        For k in l_stop_actions_tab.FIRST..l_stop_actions_tab.LAST LOOP
1045           IF(nvl(l_stop_actions_tab(k).status_code,p_stop_rec_tab(j).status_code) = p_stop_rec_tab(j).status_code
1046              AND nvl(l_stop_actions_tab(k).caller,p_caller) = p_caller
1047 	     AND l_stop_actions_tab(k).action_not_allowed = p_action
1048 -- add check to compare shipments_type_flag jckwok
1049              AND nvl(l_stop_actions_tab(k).shipments_type_flag, nvl(p_stop_rec_tab(j).shipments_type_flag,'O')) = nvl(p_stop_rec_tab(j).shipments_type_flag,'O')) THEN
1050              RAISE e_set_messages;
1051           END IF;
1052        END LOOP;
1053     END IF;
1054 
1055     IF ( p_action ='PICK-RELEASE') THEN
1056        FOR cur_rec IN stop_to_del_cur(p_stop_rec_tab(j).stop_id) LOOP
1057           l_dlvy_rec_tab(l_dlvy_rec_tab.count+1) := cur_rec;
1058        END LOOP;
1059 
1060        WSH_DELIVERY_VALIDATIONS.Is_Action_Enabled(
1061                 p_dlvy_rec_tab          => l_dlvy_rec_tab,
1062                 p_action                => p_action,
1063                 p_caller                => p_caller,
1064                 x_return_status         => l_return_status,
1065                 x_valid_ids             => l_valid_ids,
1066                 x_error_ids             => l_error_ids,
1067                 x_valid_index_tab       => l_valid_index_tab);
1068 
1069        IF l_debug_on THEN
1070          WSH_DEBUG_SV.log(l_module_name,'WSH_DELIVERY_VALIDATIONS.Is_Action_Enabled l_return_status',l_return_status);
1071        END IF;
1072 
1073        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
1074          AND l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1075           RAISE e_set_messages;
1076        ELSE
1077           x_valid_ids(x_valid_ids.COUNT + 1) := p_stop_rec_tab(j).stop_id;
1078           x_valid_index_tab(j) := j;
1079        END IF;
1080 
1081     ELSIF ( p_action IN ('PLAN', 'UNPLAN' )) THEN
1082 	  open stop_to_det_cur( p_stop_rec_tab(j).stop_id);
1083 	  Fetch stop_to_det_cur into l_tpw_temp;
1084 	  close stop_to_det_cur;
1085 
1086 	  IF ( l_tpw_temp is not null ) THEN
1087              x_valid_ids(x_valid_ids.COUNT + 1) := p_stop_rec_tab(j).stop_id;
1088              x_valid_index_tab(j) := j;
1089 	  ELSE
1090              FOR cur_rec IN stop_to_del_cur(p_stop_rec_tab(j).stop_id) LOOP
1091                 l_dlvy_rec_tab(l_dlvy_rec_tab.count+1) := cur_rec;
1092              END LOOP;
1093 
1094              WSH_DELIVERY_VALIDATIONS.Is_Action_Enabled(
1095                 p_dlvy_rec_tab          => l_dlvy_rec_tab,
1096                 p_action                => p_action,
1097                 p_caller                => p_caller,
1098                 x_return_status         => l_return_status,
1099                 x_valid_ids             => l_valid_ids,
1100                 x_error_ids             => l_error_ids,
1101                 x_valid_index_tab       => l_valid_index_tab);
1102 
1103              IF l_debug_on THEN
1104                 WSH_DEBUG_SV.log(l_module_name,'WSH_DELIVERY_VALIDATIONS.Is_Action_Enabled l_return_status',
1105                                                 l_return_status);
1106              END IF;
1107 
1108              IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
1109                AND l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1110                 RAISE e_set_messages;
1111              ELSE
1112                 x_valid_ids(x_valid_ids.COUNT + 1) := p_stop_rec_tab(j).stop_id;
1113                 x_valid_index_tab(j) := j;
1114              END IF;
1115           END IF;
1116     --/== Workflow Changes
1117     ELSIF (p_action IN('UPDATE-STATUS')) THEN
1118     	l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
1119 	IF (nvl(l_override_wf,'N') = 'N') THEN
1120   	    FOR cur_rec IN stop_del_cur_wf(p_stop_rec_tab(j).stop_id) LOOP
1121 		IF (cur_rec.delivery_scpod_wf_process is not null and
1122 		      ( ( cur_rec.stop_type='P' and cur_rec.del_wf_intransit_attr = 'I')
1123                          or ( cur_rec.stop_type='D' and cur_rec.del_wf_close_attr = 'I') ) )THEN
1124 		    RAISE e_scpod_wf_inprogress;
1125 		END IF;
1126 	    END LOOP;
1127 	END IF;
1128         x_valid_ids(x_valid_ids.COUNT + 1) := p_stop_rec_tab(j).stop_id;
1129         x_valid_index_tab(j) := j;     -- Workflow Changes ==/
1130     ELSE
1131 	  x_valid_ids(x_valid_ids.COUNT + 1) := p_stop_rec_tab(j).stop_id;
1132           x_valid_index_tab(j) := j;
1133     END IF;
1134  EXCEPTION
1135     WHEN e_scpod_wf_inprogress THEN     --/== Workflow Changes
1136        x_error_ids(x_error_ids.count +1) := p_stop_rec_tab(j).stop_id;
1137        FND_MESSAGE.SET_NAME('WSH','WSH_WF_STOP_ACTION_INELIGIBLE');
1138        FND_MESSAGE.Set_Token('STOP_ID',x_error_ids(x_error_ids.count));
1139        FND_MESSAGE.Set_Token('ACTION',wsh_util_core.get_action_meaning('STOP', p_action));
1140        wsh_util_core.add_message('E',l_module_name);         --==/
1141     WHEN e_set_messages THEN
1142        x_error_ids(x_error_ids.count +1) := p_stop_rec_tab(j).stop_id;
1143        IF p_caller = 'WSH_PUB'
1144           OR p_caller like 'FTE%' THEN
1145           FND_MESSAGE.SET_NAME('WSH','WSH_STOP_ACTION_INELIGIBLE');
1146           FND_MESSAGE.Set_Token('STOP_ID',x_error_ids(x_error_ids.count));
1147           FND_MESSAGE.Set_Token('ACTION',wsh_util_core.get_action_meaning('STOP', p_action));
1148           wsh_util_core.add_message('E',l_module_name);
1149        END IF;
1150  END;
1151  END LOOP;
1152 
1153  IF (x_valid_ids.COUNT = 0 ) THEN
1154     --{
1155     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1156     --
1157     IF NOT (l_caller = 'WSH_PUB' OR l_caller LIKE 'FTE%') THEN
1158       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED');
1159       wsh_util_core.add_message(x_return_status,l_module_name);
1160     END IF;
1161     --}
1162  ELSIF (x_valid_ids.COUNT = p_stop_rec_tab.COUNT) THEN
1163     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1164  ELSIF (x_valid_ids.COUNT < p_stop_rec_tab.COUNT ) THEN
1165     --{
1166     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1167     --
1168     IF NOT (l_caller = 'WSH_PUB' OR l_caller LIKE 'FTE%') THEN
1169       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED_WARN');
1170       wsh_util_core.add_message(x_return_status,l_module_name);
1171     END IF;
1172     --}
1173  ELSE
1174     --{
1175     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1176     --
1177     IF NOT (l_caller = 'WSH_PUB' OR l_caller LIKE 'FTE%') THEN
1178       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED');
1179       wsh_util_core.add_message(x_return_status,l_module_name);
1180     END IF;
1181     --}
1182  END IF;
1183 
1184  IF l_debug_on THEN
1185      WSH_DEBUG_SV.pop(l_module_name);
1186  END IF;
1187 
1188 EXCEPTION
1189   WHEN error_in_init_actions THEN
1190    -- OTM R12, glog proj, other cursors are not using OPEN/FETCH
1191    IF stop_to_det_cur%ISOPEN THEN
1192      CLOSE stop_to_det_cur;
1193    END IF;
1194    IF l_debug_on THEN
1195       WSH_DEBUG_SV.logmsg(l_module_name,'error_in_init_actions exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1196       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:error_in_init_actions');
1197    END IF;
1198 
1199   WHEN OTHERS THEN
1200    -- OTM R12, glog proj, other cursors are not using OPEN/FETCH
1201    IF stop_to_det_cur%ISOPEN THEN
1202      CLOSE stop_to_det_cur;
1203    END IF;
1204    x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1205    IF l_debug_on THEN
1206       WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1207                           SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1208       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1209    END IF;
1210 END Is_Action_Enabled;
1211 
1212 
1213 /*
1214    Procedure populate_external_edf is called from
1215    eliminate_displayonly_fields to populate the external value
1216    for a given internal field
1217 */
1218 
1219 PROCEDURE populate_external_edf(
1220   p_internal        IN   NUMBER
1221 , p_external        IN   VARCHAR2
1222 , x_internal        IN OUT  NOCOPY NUMBER
1223 , x_external        IN OUT  NOCOPY VARCHAR2
1224 )
1225 IS
1226 BEGIN
1227 
1228    IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
1229       x_internal := p_internal;
1230       IF p_internal IS NULL THEN
1231          x_external := NULL;
1232       ELSE
1233          x_external := p_external;
1234       END IF;
1235    ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1236       x_external := p_external;
1237       IF x_external IS NULL THEN
1238          x_internal := NULL;
1239       ELSE
1240          x_internal := p_internal;
1241       END IF;
1242    END IF;
1243 
1244 END populate_external_edf;
1245 
1246 
1247 /*
1248    Procedure populate_external_edf is called from
1249    eliminate_displayonly_fields to populate the external value
1250    for a given internal field
1251 */
1252 
1253 PROCEDURE populate_external_edf(
1254   p_internal        IN   VARCHAR2
1255 , p_external        IN   VARCHAR2
1256 , x_internal        IN OUT  NOCOPY VARCHAR2
1257 , x_external        IN OUT  NOCOPY VARCHAR2
1258 )
1259 IS
1260 BEGIN
1261 
1262    IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
1263       x_internal := p_internal;
1264       IF p_internal IS NULL THEN
1265          x_external := NULL;
1266       ELSE
1267          x_external := p_external;
1268       END IF;
1269    ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1270       x_external := p_external;
1271       IF x_external IS NULL THEN
1272          x_internal := NULL;
1273       ELSE
1274          x_internal := p_internal;
1275       END IF;
1276    END IF;
1277 
1278 END populate_external_edf;
1279 
1280 
1281 
1282 PROCEDURE eliminate_displayonly_fields (
1283   p_stop_rec   IN WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1284 , p_in_rec		  IN  WSH_TRIP_STOPS_GRP.stopInRecType
1285 , x_stop_rec   IN OUT NOCOPY WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1286 )
1287 IS
1288 BEGIN
1289 
1290     /*
1291        Enable the x_delivery_detail_rec, with the columns that are not
1292        permanently  disabled.
1293     */
1294     populate_external_edf(p_stop_rec.STOP_LOCATION_ID,
1295                           p_stop_rec.stop_location_code,
1296                           x_stop_rec.STOP_LOCATION_ID,
1297                           x_stop_rec.stop_location_code);
1298 
1299 /*
1300     populate_external_edf(p_stop_rec.trip_id,
1301                           p_stop_rec.trip_name,
1302                           x_stop_rec.trip_id,
1303                           x_stop_rec.trip_name);
1304 
1305 */
1306     IF p_stop_rec.DEPARTURE_SEAL_CODE <> FND_API.G_MISS_CHAR
1307       OR p_stop_rec.DEPARTURE_SEAL_CODE IS NULL THEN
1308       x_stop_rec.DEPARTURE_SEAL_CODE :=
1309                           p_stop_rec.DEPARTURE_SEAL_CODE;
1310     END IF;
1311 
1312 -- SSN change
1313 -- For mode=PAD, Stop_sequence_number would be null when user tries to create a stop
1314     IF ((p_in_rec.action_code =  'CREATE')
1315        AND
1316        (WSH_TRIPS_ACTIONS.GET_STOP_SEQ_MODE = WSH_INTERFACE_GRP.G_STOP_SEQ_MODE_PAD))
1317     THEN
1318        -- csun stop sequence enhancement for 11.5.10, the stop sequence number for a
1319        -- trip stop is set to -99 initially since it is a required filed in the table,
1320        -- it will be re-sequenced  in WSH_TRIP_STOPS_GRP.CREATE_UPDATE_STOP right after
1321        -- it is created.
1322        x_stop_rec.STOP_SEQUENCE_NUMBER := -99;
1323 -- but for mode = SSN, stop_sequence_number field would always have to be specified
1324 -- when creating a stop
1325     ELSIF p_stop_rec.STOP_SEQUENCE_NUMBER <> FND_API.G_MISS_NUM
1326       OR p_stop_rec.STOP_SEQUENCE_NUMBER IS NULL THEN
1327       x_stop_rec.STOP_SEQUENCE_NUMBER :=
1328                           p_stop_rec.STOP_SEQUENCE_NUMBER;
1329     END IF;
1330 -- end of SSN change
1331 
1332     IF p_stop_rec.PLANNED_ARRIVAL_DATE <> FND_API.G_MISS_DATE
1333       OR p_stop_rec.PLANNED_ARRIVAL_DATE IS NULL THEN
1334       x_stop_rec.PLANNED_ARRIVAL_DATE :=
1335                           p_stop_rec.PLANNED_ARRIVAL_DATE;
1336     END IF;
1337     IF p_stop_rec.PLANNED_DEPARTURE_DATE <> FND_API.G_MISS_DATE
1338       OR p_stop_rec.PLANNED_DEPARTURE_DATE IS NULL THEN
1339       x_stop_rec.PLANNED_DEPARTURE_DATE :=
1340                           p_stop_rec.PLANNED_DEPARTURE_DATE;
1341     END IF;
1342     IF p_stop_rec.DEPARTURE_GROSS_WEIGHT <> FND_API.G_MISS_NUM
1343       OR p_stop_rec.DEPARTURE_GROSS_WEIGHT IS NULL THEN
1344       x_stop_rec.DEPARTURE_GROSS_WEIGHT :=
1345                           p_stop_rec.DEPARTURE_GROSS_WEIGHT;
1346     END IF;
1347     IF p_stop_rec.DEPARTURE_NET_WEIGHT <> FND_API.G_MISS_NUM
1348       OR p_stop_rec.DEPARTURE_NET_WEIGHT IS NULL THEN
1349       x_stop_rec.DEPARTURE_NET_WEIGHT :=
1350                           p_stop_rec.DEPARTURE_NET_WEIGHT;
1351     END IF;
1352 
1353     populate_external_edf(p_stop_rec.WEIGHT_UOM_CODE,
1354                           p_stop_rec.WEIGHT_UOM_DESC,
1355                           x_stop_rec.WEIGHT_UOM_CODE,
1356                           x_stop_rec.WEIGHT_UOM_DESC);
1357 
1358     IF p_stop_rec.DEPARTURE_VOLUME <> FND_API.G_MISS_NUM
1359       OR p_stop_rec.DEPARTURE_VOLUME IS NULL THEN
1360       x_stop_rec.DEPARTURE_VOLUME :=
1361                           p_stop_rec.DEPARTURE_VOLUME;
1362     END IF;
1363 
1364     populate_external_edf(p_stop_rec.VOLUME_UOM_CODE,
1365                           p_stop_rec.VOLUME_UOM_DESC,
1366                           x_stop_rec.VOLUME_UOM_CODE,
1367                           x_stop_rec.VOLUME_UOM_DESC);
1368 
1369     -- bug 3666967 - need wv_frozen_flag when creating new stop through public api.
1370     IF p_stop_rec.wv_frozen_flag <> FND_API.G_MISS_CHAR THEN
1371       x_stop_rec.wv_frozen_flag :=
1372                           p_stop_rec.wv_frozen_flag;
1373     END IF;
1374     -- end bug 3666967
1375 
1376     IF p_stop_rec.DEPARTURE_FILL_PERCENT <> FND_API.G_MISS_NUM
1377       OR p_stop_rec.DEPARTURE_FILL_PERCENT IS NULL THEN
1378       x_stop_rec.DEPARTURE_FILL_PERCENT :=
1379                           p_stop_rec.DEPARTURE_FILL_PERCENT;
1380     END IF;
1381     IF p_stop_rec.attribute1 <> FND_API.G_MISS_CHAR
1382       OR p_stop_rec.attribute1 IS NULL THEN
1383       x_stop_rec.attribute1 :=
1384                           p_stop_rec.attribute1;
1385     END IF;
1386     IF p_stop_rec.attribute2 <> FND_API.G_MISS_CHAR
1387       OR p_stop_rec.attribute2 IS NULL THEN
1388       x_stop_rec.attribute2 :=
1389                           p_stop_rec.attribute2;
1390     END IF;
1391     IF p_stop_rec.attribute3 <> FND_API.G_MISS_CHAR
1392       OR p_stop_rec.attribute3 IS NULL THEN
1393       x_stop_rec.attribute3 :=
1394                           p_stop_rec.attribute3;
1395     END IF;
1396     IF p_stop_rec.attribute4 <> FND_API.G_MISS_CHAR
1397       OR p_stop_rec.attribute4 IS NULL THEN
1398       x_stop_rec.attribute4 :=
1399                           p_stop_rec.attribute4;
1400     END IF;
1401     IF p_stop_rec.attribute5 <> FND_API.G_MISS_CHAR
1402       OR p_stop_rec.attribute5 IS NULL THEN
1403       x_stop_rec.attribute5 :=
1404                           p_stop_rec.attribute5;
1405     END IF;
1406     IF p_stop_rec.attribute6 <> FND_API.G_MISS_CHAR
1407       OR p_stop_rec.attribute6 IS NULL THEN
1408       x_stop_rec.attribute6 :=
1409                           p_stop_rec.attribute6;
1410     END IF;
1411     IF p_stop_rec.attribute7 <> FND_API.G_MISS_CHAR
1412       OR p_stop_rec.attribute7 IS NULL THEN
1413       x_stop_rec.attribute7 :=
1414                           p_stop_rec.attribute7;
1415     END IF;
1416     IF p_stop_rec.attribute8 <> FND_API.G_MISS_CHAR
1417       OR p_stop_rec.attribute8 IS NULL THEN
1418       x_stop_rec.attribute8 :=
1419                           p_stop_rec.attribute8;
1420     END IF;
1421     IF p_stop_rec.attribute9 <> FND_API.G_MISS_CHAR
1422       OR p_stop_rec.attribute9 IS NULL THEN
1423       x_stop_rec.attribute9 :=
1424                           p_stop_rec.attribute9;
1425     END IF;
1426     IF p_stop_rec.attribute10 <> FND_API.G_MISS_CHAR
1427       OR p_stop_rec.attribute10 IS NULL THEN
1428       x_stop_rec.attribute10 :=
1429                           p_stop_rec.attribute10;
1430     END IF;
1431     IF p_stop_rec.attribute11 <> FND_API.G_MISS_CHAR
1432       OR p_stop_rec.attribute11 IS NULL THEN
1433       x_stop_rec.attribute11 :=
1434                           p_stop_rec.attribute11;
1435     END IF;
1436     IF p_stop_rec.attribute12 <> FND_API.G_MISS_CHAR
1437       OR p_stop_rec.attribute12 IS NULL THEN
1438       x_stop_rec.attribute12 :=
1439                           p_stop_rec.attribute12;
1440     END IF;
1441     IF p_stop_rec.attribute13 <> FND_API.G_MISS_CHAR
1442       OR p_stop_rec.attribute13 IS NULL THEN
1443       x_stop_rec.attribute13 :=
1444                           p_stop_rec.attribute13;
1445     END IF;
1446     IF p_stop_rec.attribute14 <> FND_API.G_MISS_CHAR
1447       OR p_stop_rec.attribute14 IS NULL THEN
1448       x_stop_rec.attribute14 :=
1449                           p_stop_rec.attribute14;
1450     END IF;
1451     IF p_stop_rec.attribute15 <> FND_API.G_MISS_CHAR
1452       OR p_stop_rec.attribute15 IS NULL THEN
1453       x_stop_rec.attribute15 :=
1454                           p_stop_rec.attribute15;
1455     END IF;
1456     IF p_stop_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
1457       OR p_stop_rec.ATTRIBUTE_CATEGORY IS NULL THEN
1458       x_stop_rec.ATTRIBUTE_CATEGORY :=
1459                           p_stop_rec.ATTRIBUTE_CATEGORY;
1460     END IF;
1461     IF p_stop_rec.tp_attribute1 <> FND_API.G_MISS_CHAR
1462       OR p_stop_rec.tp_attribute1 IS NULL THEN
1463       x_stop_rec.tp_attribute1 :=
1464                           p_stop_rec.tp_attribute1;
1465     END IF;
1466     IF p_stop_rec.tp_attribute2 <> FND_API.G_MISS_CHAR
1467       OR p_stop_rec.tp_attribute2 IS NULL THEN
1468       x_stop_rec.tp_attribute2 :=
1469                           p_stop_rec.tp_attribute2;
1470     END IF;
1471     IF p_stop_rec.tp_attribute3 <> FND_API.G_MISS_CHAR
1472       OR p_stop_rec.tp_attribute3 IS NULL THEN
1473       x_stop_rec.tp_attribute3 :=
1474                           p_stop_rec.tp_attribute3;
1475     END IF;
1476     IF p_stop_rec.tp_attribute4 <> FND_API.G_MISS_CHAR
1477       OR p_stop_rec.tp_attribute4 IS NULL THEN
1478       x_stop_rec.tp_attribute4 :=
1479                           p_stop_rec.tp_attribute4;
1480     END IF;
1481     IF p_stop_rec.tp_attribute5 <> FND_API.G_MISS_CHAR
1482       OR p_stop_rec.tp_attribute5 IS NULL THEN
1483       x_stop_rec.tp_attribute5 :=
1484                           p_stop_rec.tp_attribute5;
1485     END IF;
1486     IF p_stop_rec.tp_attribute6 <> FND_API.G_MISS_CHAR
1487       OR p_stop_rec.tp_attribute6 IS NULL THEN
1488       x_stop_rec.tp_attribute6 :=
1489                           p_stop_rec.tp_attribute6;
1490     END IF;
1491     IF p_stop_rec.tp_attribute7 <> FND_API.G_MISS_CHAR
1492       OR p_stop_rec.tp_attribute7 IS NULL THEN
1493       x_stop_rec.tp_attribute7 :=
1494                           p_stop_rec.tp_attribute7;
1495     END IF;
1496     IF p_stop_rec.tp_attribute8 <> FND_API.G_MISS_CHAR
1497       OR p_stop_rec.tp_attribute8 IS NULL THEN
1498       x_stop_rec.tp_attribute8 :=
1499                           p_stop_rec.tp_attribute8;
1500     END IF;
1501     IF p_stop_rec.tp_attribute9 <> FND_API.G_MISS_CHAR
1502       OR p_stop_rec.tp_attribute9 IS NULL THEN
1503       x_stop_rec.tp_attribute9 :=
1504                           p_stop_rec.tp_attribute9;
1505     END IF;
1506     IF p_stop_rec.tp_attribute10 <> FND_API.G_MISS_CHAR
1507       OR p_stop_rec.tp_attribute10 IS NULL THEN
1508       x_stop_rec.tp_attribute10 :=
1509                           p_stop_rec.tp_attribute10;
1510     END IF;
1511     IF p_stop_rec.tp_attribute11 <> FND_API.G_MISS_CHAR
1512       OR p_stop_rec.tp_attribute11 IS NULL THEN
1513       x_stop_rec.tp_attribute11 :=
1514                           p_stop_rec.tp_attribute11;
1515     END IF;
1516     IF p_stop_rec.tp_attribute12 <> FND_API.G_MISS_CHAR
1517       OR p_stop_rec.tp_attribute12 IS NULL THEN
1518       x_stop_rec.tp_attribute12 :=
1519                           p_stop_rec.tp_attribute12;
1520     END IF;
1521     IF p_stop_rec.tp_attribute13 <> FND_API.G_MISS_CHAR
1522       OR p_stop_rec.tp_attribute13 IS NULL THEN
1523       x_stop_rec.tp_attribute13 :=
1524                           p_stop_rec.tp_attribute13;
1525     END IF;
1526     IF p_stop_rec.tp_attribute14 <> FND_API.G_MISS_CHAR
1527       OR p_stop_rec.tp_attribute14 IS NULL THEN
1528       x_stop_rec.tp_attribute14 :=
1529                           p_stop_rec.tp_attribute14;
1530     END IF;
1531     IF p_stop_rec.tp_attribute15 <> FND_API.G_MISS_CHAR
1532       OR p_stop_rec.tp_attribute15 IS NULL THEN
1533       x_stop_rec.tp_attribute15 :=
1534                           p_stop_rec.tp_attribute15;
1535     END IF;
1536     IF p_stop_rec.TP_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
1537       OR p_stop_rec.TP_ATTRIBUTE_CATEGORY IS NULL THEN
1538       x_stop_rec.TP_ATTRIBUTE_CATEGORY :=
1539                           p_stop_rec.TP_ATTRIBUTE_CATEGORY;
1540     END IF;
1541 
1542     IF p_in_rec.caller IN ('FTEMLWRB','WSH_TP_RELEASE') THEN
1543       IF p_stop_rec.wkday_layover_stops <> FND_API.G_MISS_NUM
1544          OR p_stop_rec.wkday_layover_stops IS NULL THEN
1545           x_stop_rec.wkday_layover_stops :=
1546                           p_stop_rec.wkday_layover_stops;
1547       END IF;
1548       IF p_stop_rec.wkend_layover_stops <> FND_API.G_MISS_NUM
1549          OR p_stop_rec.wkend_layover_stops IS NULL THEN
1550           x_stop_rec.wkend_layover_stops :=
1551                           p_stop_rec.wkend_layover_stops;
1552       END IF;
1553     END IF;
1554     IF p_in_rec.caller='WSH_TP_RELEASE' THEN
1555       IF p_stop_rec.tp_stop_id <> FND_API.G_MISS_NUM
1556          OR p_stop_rec.tp_stop_id IS NULL THEN
1557           x_stop_rec.tp_stop_id :=
1558                           p_stop_rec.tp_stop_id;
1559       END IF;
1560     END IF;
1561     --Bug 3282166
1562     --
1563     IF p_in_rec.caller like 'FTE%'  THEN
1564       IF p_stop_rec.CARRIER_EST_DEPARTURE_DATE <> FND_API.G_MISS_DATE
1565          OR p_stop_rec.CARRIER_EST_DEPARTURE_DATE IS NULL  THEN
1566           x_stop_rec.CARRIER_EST_DEPARTURE_DATE := p_stop_rec.CARRIER_EST_DEPARTURE_DATE;
1567 
1568       END IF;
1569       IF p_stop_rec.CARRIER_EST_ARRIVAL_DATE <> FND_API.G_MISS_DATE
1570          OR p_stop_rec.CARRIER_EST_ARRIVAL_DATE IS NULL THEN
1571           x_stop_rec.CARRIER_EST_ARRIVAL_DATE := p_stop_rec.CARRIER_EST_ARRIVAL_DATE;
1572 
1573       END IF;
1574     END IF;
1575     --
1576 
1577 
1578 END eliminate_displayonly_fields;
1579 
1580 /*----------------------------------------------------------
1581 -- Procedure disable_from_list will update the record x_out_rec
1582 -- and disables the field contained in p_disabled_list.
1583 -----------------------------------------------------------*/
1584 
1585 PROCEDURE disable_from_list(
1586   p_disabled_list IN         WSH_UTIL_CORE.column_tab_type
1587 , p_in_rec        IN         WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1588 , x_out_rec       IN OUT NOCOPY WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1589 , x_return_status OUT NOCOPY        VARCHAR2
1590 , x_field_name    OUT NOCOPY        VARCHAR2
1591 
1592 ) IS
1593 BEGIN
1594   FOR i IN 1..p_disabled_list.COUNT
1595   LOOP
1596     IF p_disabled_list(i)  = 'STOP_LOCATION_CODE' THEN
1597       x_out_rec.STOP_LOCATION_ID := p_in_rec.STOP_LOCATION_ID ;
1598       x_out_rec.STOP_LOCATION_CODE := FND_API.G_MISS_CHAR ;
1599     ELSIF p_disabled_list(i)  = 'STOP_SEQUENCE_NUMBER' THEN
1600       x_out_rec.STOP_SEQUENCE_NUMBER := p_in_rec.STOP_SEQUENCE_NUMBER;
1601     ELSIF p_disabled_list(i)  = 'PLANNED_ARRIVAL_DATE' THEN
1602       x_out_rec.PLANNED_ARRIVAL_DATE := p_in_rec.PLANNED_ARRIVAL_DATE ;
1603     ELSIF p_disabled_list(i)  = 'PLANNED_DEPARTURE_DATE' THEN
1604       x_out_rec.PLANNED_DEPARTURE_DATE := p_in_rec.PLANNED_DEPARTURE_DATE ;
1605 
1606     --Bug 3282166
1607     --
1608     ELSIF p_disabled_list(i)  = 'CARRIER_EST_DEPARTURE_DATE' THEN
1609       x_out_rec.CARRIER_EST_DEPARTURE_DATE := p_in_rec.CARRIER_EST_DEPARTURE_DATE ;
1610     ELSIF p_disabled_list(i)  = 'CARRIER_EST_ARRIVAL_DATE' THEN
1611       x_out_rec.CARRIER_EST_ARRIVAL_DATE := p_in_rec.CARRIER_EST_ARRIVAL_DATE ;
1612     --
1613     ELSIF p_disabled_list(i)  = 'DESC_FLEX' THEN
1614       x_out_rec.attribute1 := p_in_rec.attribute1 ;
1615       x_out_rec.attribute2 := p_in_rec.attribute2 ;
1616       x_out_rec.attribute3 := p_in_rec.attribute3 ;
1617       x_out_rec.attribute4 := p_in_rec.attribute4 ;
1618       x_out_rec.attribute5 := p_in_rec.attribute5 ;
1619       x_out_rec.attribute6 := p_in_rec.attribute6 ;
1620       x_out_rec.attribute7 := p_in_rec.attribute7 ;
1621       x_out_rec.attribute8 := p_in_rec.attribute8 ;
1622       x_out_rec.attribute9 := p_in_rec.attribute9 ;
1623       x_out_rec.attribute10 := p_in_rec.attribute10 ;
1624       x_out_rec.attribute11 := p_in_rec.attribute11 ;
1625       x_out_rec.attribute12 := p_in_rec.attribute12 ;
1626       x_out_rec.attribute13 := p_in_rec.attribute13 ;
1627       x_out_rec.attribute14 := p_in_rec.attribute14 ;
1628       x_out_rec.attribute15 := p_in_rec.attribute15 ;
1629       x_out_rec.attribute_category := p_in_rec.attribute_category ;
1630     ELSIF p_disabled_list(i)  = 'TP_FLEXFIELD' THEN
1631       x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
1632       x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
1633       x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
1634       x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
1635       x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
1636       x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
1637       x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
1638       x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
1639       x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
1640       x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
1641       x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
1642       x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
1643       x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
1644       x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
1645       x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
1646       x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
1647     ELSIF  p_disabled_list(i)  = 'FULL' THEN
1648       NULL;
1649     ELSE
1650       -- invalid name
1651       x_field_name := p_disabled_list(i);
1652       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1653       RETURN;
1654       --
1655     END IF;
1656   END LOOP;
1657 END disable_from_list;
1658 
1659 
1660 /*
1661    Procedure populate_external_efl is called from
1662    enable_from_list to populate the external value
1663    for a given internal field
1664 */
1665 
1666 PROCEDURE populate_external_efl(
1667   p_internal        IN   NUMBER
1668 , p_external        IN   VARCHAR2
1669 , x_internal        IN OUT  NOCOPY NUMBER
1670 , x_external        IN OUT  NOCOPY VARCHAR2
1671 )
1672 IS
1673 BEGIN
1674 
1675    IF x_internal IS NULL THEN
1676       IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
1677          x_internal := p_internal ;
1678          IF p_internal IS NULL THEN
1679             x_external := NULL;
1680          ELSE
1681             x_external := p_external;
1682          END IF;
1683       ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1684          x_external := p_external;
1685          IF p_external IS NULL THEN
1686             x_internal := NULL;
1687          ELSE
1688             x_internal := p_internal;
1689          END IF;
1690       END IF;
1691    END IF;
1692    IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
1693       x_internal := p_internal ;
1694       IF p_internal IS NULL THEN
1695          x_external := NULL;
1696       ELSE
1697          x_external := p_external;
1698       END IF;
1699    ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1700       x_external := p_external;
1701       IF p_external IS NULL THEN
1702          x_internal := NULL;
1703       ELSE
1704          x_internal := p_internal;
1705       END IF;
1706    END IF;
1707 
1708 END populate_external_efl;
1709 
1710 /*
1711    Procedure populate_external_efl is called from
1712    enable_from_list to populate the external value
1713    for a given internal field
1714 */
1715 
1716 PROCEDURE populate_external_efl(
1717   p_internal        IN   VARCHAR2
1718 , p_external        IN   VARCHAR2
1719 , p_mode            IN   VARCHAR2
1720 , x_internal        IN OUT  NOCOPY VARCHAR2
1721 , x_external        IN OUT  NOCOPY VARCHAR2
1722 )
1723 IS
1724 BEGIN
1725 
1726    IF p_mode = '+' THEN
1727       IF x_internal IS NULL THEN
1728          IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
1729             x_internal := p_internal ;
1730             IF p_internal IS NULL THEN
1731                x_external := NULL;
1732             ELSE
1733                x_external := p_external;
1734             END IF;
1735          ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1736             x_external := p_external;
1737             IF p_external IS NULL THEN
1738                x_internal := NULL;
1739             ELSE
1740                x_internal := p_internal;
1741             END IF;
1742          END IF;
1743       END IF;
1744    ELSE --p_mode <> +
1745       IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
1746          x_internal := p_internal ;
1747          IF p_internal IS NULL THEN
1748             x_external := NULL;
1749          ELSE
1750             x_external := p_external;
1751          END IF;
1752       ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
1753          x_external := p_external;
1754          IF p_external IS NULL THEN
1755             x_internal := NULL;
1756          ELSE
1757             x_internal := p_internal;
1758          END IF;
1759       END IF;
1760    END IF;
1761 
1762 END populate_external_efl;
1763 
1764 
1765 
1766 /*----------------------------------------------------------
1767 -- Procedure enable_from_list will update the record x_out_rec for the fields
1768 --   included in p_disabled_list and will enable them
1769 -----------------------------------------------------------*/
1770 
1771 PROCEDURE enable_from_list(
1772   p_disabled_list IN         WSH_UTIL_CORE.column_tab_type
1773 , p_in_rec        IN         WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1774 , x_out_rec       IN OUT NOCOPY WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1775 , x_return_status OUT NOCOPY        VARCHAR2
1776 , x_field_name    OUT NOCOPY        VARCHAR2
1777 
1778 ) IS
1779 BEGIN
1780   FOR i IN 2..p_disabled_list.COUNT
1781   LOOP
1782     IF p_disabled_list(i)  = 'STOP_LOCATION_CODE' THEN
1783 
1784       populate_external_efl(p_in_rec.STOP_LOCATION_ID,
1785                             p_in_rec.stop_location_code,
1786                             x_out_rec.STOP_LOCATION_ID,
1787                             x_out_rec.stop_location_code);
1788 
1789     ELSIF p_disabled_list(i)  = 'STOP_SEQUENCE_NUMBER' THEN
1790      IF p_in_rec.STOP_SEQUENCE_NUMBER <> FND_API.G_MISS_NUM
1791       OR p_in_rec.STOP_SEQUENCE_NUMBER IS NULL THEN
1792       x_out_rec.STOP_SEQUENCE_NUMBER := p_in_rec.STOP_SEQUENCE_NUMBER;
1793      END IF;
1794     ELSIF p_disabled_list(i)  = 'PLANNED_ARRIVAL_DATE' THEN
1795      IF p_in_rec.PLANNED_ARRIVAL_DATE <> FND_API.G_MISS_DATE
1796       OR p_in_rec.PLANNED_ARRIVAL_DATE IS NULL THEN
1797       x_out_rec.PLANNED_ARRIVAL_DATE := p_in_rec.PLANNED_ARRIVAL_DATE ;
1798      END IF;
1799     ELSIF p_disabled_list(i)  = 'PLANNED_DEPARTURE_DATE' THEN
1800      IF p_in_rec.PLANNED_DEPARTURE_DATE <> FND_API.G_MISS_DATE
1801       OR p_in_rec.PLANNED_DEPARTURE_DATE IS NULL THEN
1802        x_out_rec.PLANNED_DEPARTURE_DATE := p_in_rec.PLANNED_DEPARTURE_DATE ;
1803      END IF;
1804     -- J-IB-NPARIKH-{
1805     ELSIF p_disabled_list(i)  = 'DEPARTURE_GROSS_WEIGHT' THEN
1806      IF p_in_rec.DEPARTURE_GROSS_WEIGHT <> FND_API.G_MISS_NUM
1807       OR p_in_rec.DEPARTURE_GROSS_WEIGHT IS NULL THEN
1808          x_out_rec.DEPARTURE_GROSS_WEIGHT := p_in_rec.DEPARTURE_GROSS_WEIGHT ;
1809      END IF;
1810     ELSIF p_disabled_list(i)  = 'DEPARTURE_NET_WEIGHT' THEN
1811      IF p_in_rec.DEPARTURE_NET_WEIGHT <> FND_API.G_MISS_NUM
1812       OR p_in_rec.DEPARTURE_NET_WEIGHT IS NULL THEN
1813          x_out_rec.DEPARTURE_NET_WEIGHT := p_in_rec.DEPARTURE_NET_WEIGHT ;
1814      END IF;
1815     ELSIF p_disabled_list(i)  = 'WEIGHT_UOM_CODE' THEN
1816      populate_external_efl(p_in_rec.WEIGHT_UOM_CODE,
1817                            p_in_rec.WEIGHT_UOM_DESC,
1818                            NULL,
1819                            x_out_rec.WEIGHT_UOM_CODE,
1820                            x_out_rec.WEIGHT_UOM_DESC);
1821     ELSIF p_disabled_list(i)  = 'DEPARTURE_VOLUME' THEN
1822      IF p_in_rec.DEPARTURE_VOLUME <> FND_API.G_MISS_NUM
1823       OR p_in_rec.DEPARTURE_VOLUME IS NULL THEN
1824          x_out_rec.DEPARTURE_VOLUME := p_in_rec.DEPARTURE_VOLUME ;
1825      END IF;
1826     ELSIF p_disabled_list(i)  = 'VOLUME_UOM_CODE' THEN
1827      populate_external_efl(p_in_rec.VOLUME_UOM_CODE,
1828                            p_in_rec.VOLUME_UOM_DESC,
1829                            NULL,
1830                            x_out_rec.VOLUME_UOM_CODE,
1831                            x_out_rec.VOLUME_UOM_DESC);
1832     -- J-IB-NPARIKH-}
1833 
1834     ELSIF p_disabled_list(i)  = 'DESC_FLEX' THEN
1835      IF p_in_rec.attribute1 <> FND_API.G_MISS_CHAR
1836       OR p_in_rec.attribute1 IS NULL THEN
1837       x_out_rec.attribute1 := p_in_rec.attribute1 ;
1838      END IF;
1839      IF p_in_rec.attribute2 <> FND_API.G_MISS_CHAR
1840       OR p_in_rec.attribute2 IS NULL THEN
1841       x_out_rec.attribute2 := p_in_rec.attribute2 ;
1842      END IF;
1843      IF p_in_rec.attribute3 <> FND_API.G_MISS_CHAR
1844       OR p_in_rec.attribute3 IS NULL THEN
1845       x_out_rec.attribute3 := p_in_rec.attribute3 ;
1846      END IF;
1847      IF p_in_rec.attribute4 <> FND_API.G_MISS_CHAR
1848       OR p_in_rec.attribute4 IS NULL THEN
1849       x_out_rec.attribute4 := p_in_rec.attribute4 ;
1850      END IF;
1851      IF p_in_rec.attribute5 <> FND_API.G_MISS_CHAR
1852       OR p_in_rec.attribute5 IS NULL THEN
1853       x_out_rec.attribute5 := p_in_rec.attribute5 ;
1854      END IF;
1855      IF p_in_rec.attribute6 <> FND_API.G_MISS_CHAR
1856       OR p_in_rec.attribute6 IS NULL THEN
1857       x_out_rec.attribute6 := p_in_rec.attribute6 ;
1858      END IF;
1859      IF p_in_rec.attribute7 <> FND_API.G_MISS_CHAR
1860       OR p_in_rec.attribute7 IS NULL THEN
1861       x_out_rec.attribute7 := p_in_rec.attribute7 ;
1862      END IF;
1863      IF p_in_rec.attribute8 <> FND_API.G_MISS_CHAR
1864       OR p_in_rec.attribute8 IS NULL THEN
1865       x_out_rec.attribute8 := p_in_rec.attribute8 ;
1866      END IF;
1867      IF p_in_rec.attribute9 <> FND_API.G_MISS_CHAR
1868       OR p_in_rec.attribute9 IS NULL THEN
1869       x_out_rec.attribute9 := p_in_rec.attribute9 ;
1870      END IF;
1871      IF p_in_rec.attribute10 <> FND_API.G_MISS_CHAR
1872       OR p_in_rec.attribute10 IS NULL THEN
1873       x_out_rec.attribute10 := p_in_rec.attribute10 ;
1874      END IF;
1875      IF p_in_rec.attribute11 <> FND_API.G_MISS_CHAR
1876       OR p_in_rec.attribute11 IS NULL THEN
1877       x_out_rec.attribute11 := p_in_rec.attribute11 ;
1878      END IF;
1879      IF p_in_rec.attribute12 <> FND_API.G_MISS_CHAR
1880       OR p_in_rec.attribute12 IS NULL THEN
1881       x_out_rec.attribute12 := p_in_rec.attribute12 ;
1882      END IF;
1883      IF p_in_rec.attribute13 <> FND_API.G_MISS_CHAR
1884       OR p_in_rec.attribute13 IS NULL THEN
1885       x_out_rec.attribute13 := p_in_rec.attribute13 ;
1886      END IF;
1887      IF p_in_rec.attribute14 <> FND_API.G_MISS_CHAR
1888       OR p_in_rec.attribute14 IS NULL THEN
1889       x_out_rec.attribute14 := p_in_rec.attribute14 ;
1890      END IF;
1891      IF p_in_rec.attribute15 <> FND_API.G_MISS_CHAR
1892       OR p_in_rec.attribute15 IS NULL THEN
1893       x_out_rec.attribute15 := p_in_rec.attribute15 ;
1894      END IF;
1895      IF p_in_rec.attribute_category <> FND_API.G_MISS_CHAR
1896       OR p_in_rec.attribute_category IS NULL THEN
1897       x_out_rec.attribute_category := p_in_rec.attribute_category ;
1898      END IF;
1899     ELSIF p_disabled_list(i)  = 'TP_FLEXFIELD' THEN
1900      IF p_in_rec.tp_attribute1 <> FND_API.G_MISS_CHAR
1901       OR p_in_rec.tp_attribute1 IS NULL THEN
1902       x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
1903      END IF;
1904      IF p_in_rec.tp_attribute2 <> FND_API.G_MISS_CHAR
1905       OR p_in_rec.tp_attribute2 IS NULL THEN
1906       x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
1907      END IF;
1908      IF p_in_rec.tp_attribute3 <> FND_API.G_MISS_CHAR
1909       OR p_in_rec.tp_attribute3 IS NULL THEN
1910       x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
1911      END IF;
1912      IF p_in_rec.tp_attribute4 <> FND_API.G_MISS_CHAR
1913       OR p_in_rec.tp_attribute4 IS NULL THEN
1914       x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
1915      END IF;
1916      IF p_in_rec.tp_attribute5 <> FND_API.G_MISS_CHAR
1917       OR p_in_rec.tp_attribute5 IS NULL THEN
1918       x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
1919      END IF;
1920      IF p_in_rec.tp_attribute6 <> FND_API.G_MISS_CHAR
1921       OR p_in_rec.tp_attribute6 IS NULL THEN
1922       x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
1923      END IF;
1924      IF p_in_rec.tp_attribute7 <> FND_API.G_MISS_CHAR
1925       OR p_in_rec.tp_attribute7 IS NULL THEN
1926       x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
1927      END IF;
1928      IF p_in_rec.tp_attribute8 <> FND_API.G_MISS_CHAR
1929       OR p_in_rec.tp_attribute8 IS NULL THEN
1930       x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
1931      END IF;
1932      IF p_in_rec.tp_attribute9 <> FND_API.G_MISS_CHAR
1933       OR p_in_rec.tp_attribute9 IS NULL THEN
1934       x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
1935      END IF;
1936      IF p_in_rec.tp_attribute10 <> FND_API.G_MISS_CHAR
1937       OR p_in_rec.tp_attribute10 IS NULL THEN
1938       x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
1939      END IF;
1940      IF p_in_rec.tp_attribute11 <> FND_API.G_MISS_CHAR
1941       OR p_in_rec.tp_attribute11 IS NULL THEN
1942       x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
1943      END IF;
1944      IF p_in_rec.tp_attribute12 <> FND_API.G_MISS_CHAR
1945       OR p_in_rec.tp_attribute12 IS NULL THEN
1946       x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
1947      END IF;
1948      IF p_in_rec.tp_attribute13 <> FND_API.G_MISS_CHAR
1949       OR p_in_rec.tp_attribute13 IS NULL THEN
1950       x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
1951      END IF;
1952      IF p_in_rec.tp_attribute14 <> FND_API.G_MISS_CHAR
1953       OR p_in_rec.tp_attribute14 IS NULL THEN
1954       x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
1955      END IF;
1956      IF p_in_rec.tp_attribute15 <> FND_API.G_MISS_CHAR
1957       OR p_in_rec.tp_attribute15 IS NULL THEN
1958       x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
1959      END IF;
1960      IF p_in_rec.tp_attribute_category <> FND_API.G_MISS_CHAR
1961       OR p_in_rec.tp_attribute_category IS NULL THEN
1962       x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
1963      END IF;
1964     --ELSIF  p_disabled_list(i)  = 'FULL'  THEN
1965       --NULL;
1966     ELSE
1967       -- invalid name
1968       x_field_name := p_disabled_list(i);
1969       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1970       RETURN;
1971       --
1972     END IF;
1973   END LOOP;
1974 END enable_from_list;
1975 
1976 --
1977 -- Bug 2678363 - Added p_in_rec as a parameter instead of p_action
1978 --
1979 PROCEDURE Get_Disabled_List  (
1980   p_stop_rec              IN  WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1981 , p_parent_entity_id      IN  NUMBER
1982 , p_in_rec		  IN  WSH_TRIP_STOPS_GRP.stopInRecType
1983 , x_return_status         OUT NOCOPY VARCHAR2
1984 , x_msg_count             OUT NOCOPY NUMBER
1985 , x_msg_data              OUT NOCOPY VARCHAR2
1986 , x_stop_rec              OUT NOCOPY WSH_TRIP_STOPS_PVT.trip_stop_rec_type
1987 )
1988 IS
1989   l_disabled_list               WSH_UTIL_CORE.column_tab_type;
1990   l_db_col_rec                  WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
1991   l_return_status               VARCHAR2(30);
1992   l_field_name                  VARCHAR2(100);
1993   l_parent_entity_id            NUMBER;
1994   l_debug_on BOOLEAN;
1995   l_module_name CONSTANT VARCHAR2(100) :=
1996              'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DISABLED_LIST';
1997 
1998   CURSOR get_trip_id(p_stop_id NUMBER) IS
1999   SELECT trip_id
2000   FROM   wsh_trip_stops
2001   WHERE  stop_id = p_stop_rec.STOP_ID;
2002 
2003   CURSOR c_tbl_rec IS
2004   SELECT STOP_ID
2005         ,TRIP_ID
2006         ,STOP_LOCATION_ID
2007         ,STATUS_CODE
2008         ,STOP_SEQUENCE_NUMBER
2009         ,PLANNED_ARRIVAL_DATE
2010         ,PLANNED_DEPARTURE_DATE
2011         ,ACTUAL_ARRIVAL_DATE
2012         ,ACTUAL_DEPARTURE_DATE
2013         ,DEPARTURE_GROSS_WEIGHT
2014         ,DEPARTURE_NET_WEIGHT
2015         ,WEIGHT_UOM_CODE
2016         ,DEPARTURE_VOLUME
2017         ,VOLUME_UOM_CODE
2018         ,DEPARTURE_SEAL_CODE
2019         ,DEPARTURE_FILL_PERCENT
2020         ,TP_ATTRIBUTE_CATEGORY
2021         ,TP_ATTRIBUTE1
2022         ,TP_ATTRIBUTE2
2023         ,TP_ATTRIBUTE3
2024         ,TP_ATTRIBUTE4
2025         ,TP_ATTRIBUTE5
2026         ,TP_ATTRIBUTE6
2027         ,TP_ATTRIBUTE7
2028         ,TP_ATTRIBUTE8
2029         ,TP_ATTRIBUTE9
2030         ,TP_ATTRIBUTE10
2031         ,TP_ATTRIBUTE11
2032         ,TP_ATTRIBUTE12
2033         ,TP_ATTRIBUTE13
2034         ,TP_ATTRIBUTE14
2035         ,TP_ATTRIBUTE15
2036         ,ATTRIBUTE_CATEGORY
2037         ,ATTRIBUTE1
2038         ,ATTRIBUTE2
2039         ,ATTRIBUTE3
2040         ,ATTRIBUTE4
2041         ,ATTRIBUTE5
2042         ,ATTRIBUTE6
2043         ,ATTRIBUTE7
2044         ,ATTRIBUTE8
2045         ,ATTRIBUTE9
2046         ,ATTRIBUTE10
2047         ,ATTRIBUTE11
2048         ,ATTRIBUTE12
2049         ,ATTRIBUTE13
2050         ,ATTRIBUTE14
2051         ,ATTRIBUTE15
2052         ,CREATION_DATE
2053         ,CREATED_BY
2054         ,sysdate
2055         ,FND_GLOBAL.USER_ID
2056         ,FND_GLOBAL.LOGIN_ID
2057         ,PROGRAM_APPLICATION_ID
2058         ,PROGRAM_ID
2059         ,PROGRAM_UPDATE_DATE
2060         ,REQUEST_ID
2061         ,WSH_LOCATION_ID
2062         ,TRACKING_DRILLDOWN_FLAG
2063         ,TRACKING_REMARKS
2064         ,CARRIER_EST_DEPARTURE_DATE
2065         ,CARRIER_EST_ARRIVAL_DATE
2066         ,LOADING_START_DATETIME
2067         ,LOADING_END_DATETIME
2068         ,UNLOADING_START_DATETIME
2069         ,UNLOADING_END_DATETIME
2070         ,p_stop_rec.ROWID
2071         ,p_stop_rec.TRIP_NAME
2072         ,p_stop_rec.STOP_LOCATION_CODE
2073         ,p_stop_rec.WEIGHT_UOM_DESC
2074         ,p_stop_rec.VOLUME_UOM_DESC
2075         ,p_stop_rec.LOCK_STOP_ID
2076         ,p_stop_rec.PENDING_INTERFACE_FLAG
2077         ,p_stop_rec.TRANSACTION_HEADER_ID
2078 /*J inbound logistics jckwok */
2079         ,nvl(SHIPMENTS_TYPE_FLAG, 'O') SHIPMENTS_TYPE_FLAG
2080 -- J: W/V Changes
2081         ,WV_FROZEN_FLAG
2082 /* J TL/TP ttrichy */
2083         , wkend_layover_stops
2084         , wkday_layover_stops
2085         , tp_stop_id
2086         , physical_stop_id
2087         , physical_location_id
2088         , TMS_INTERFACE_FLAG -- OTM R12, glog proj
2089   FROM wsh_trip_stops
2090   WHERE stop_id = p_stop_rec.STOP_ID;
2091 
2092   e_dp_no_entity EXCEPTION;
2093   e_bad_field    EXCEPTION;
2094   e_all_disabled EXCEPTION ;
2095   --
2096   l_caller       VARCHAR2(32767);
2097   --
2098   i              NUMBER;
2099 
2100 BEGIN
2101   --
2102   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2103   --
2104   IF l_debug_on IS NULL
2105   THEN
2106       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2107   END IF;
2108   --
2109   IF l_debug_on THEN
2110       --
2111       WSH_DEBUG_SV.push(l_module_name);
2112       WSH_DEBUG_SV.log(l_module_name,'stop_id', p_stop_rec.stop_id);
2113       WSH_DEBUG_SV.log(l_module_name,'p_parent_entity_id', p_parent_entity_id);
2114       WSH_DEBUG_SV.log(l_module_name, 'Action', p_in_rec.action_code);
2115       WSH_DEBUG_SV.log(l_module_name, 'Caller', p_in_rec.caller);
2116       --
2117   END IF;
2118   --
2119   x_return_status := FND_API.G_RET_STS_SUCCESS;
2120   --
2121   IF p_in_rec.action_code = 'CREATE' THEN
2122      --
2123      IF l_debug_on THEN
2124          WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
2125      END IF;
2126      --
2127      -- nothing else need to be disabled
2128      --
2129      eliminate_displayonly_fields (p_stop_rec,p_in_rec, x_stop_rec);
2130      --
2131      IF (p_stop_rec.trip_name <>  FND_API.G_MISS_CHAR) THEN
2132         x_stop_rec.trip_name := p_stop_rec.trip_name;
2133      END IF;
2134      --
2135      IF (p_parent_entity_id <>  FND_API.G_MISS_NUM) THEN
2136         x_stop_rec.trip_id := p_parent_entity_id;
2137      END IF;
2138      --
2139      --3509004: public api changes, commented the following code.
2140     /* IF l_debug_on THEN
2141        WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
2142        WSH_DEBUG_SV.pop(l_module_name);
2143      END IF;
2144      --
2145      RETURN;
2146      -- */
2147   ELSIF p_in_rec.action_code = 'UPDATE' THEN
2148     --
2149     l_parent_entity_id := p_parent_entity_id;
2150     --
2151     IF (l_parent_entity_id IS NULL ) OR l_parent_entity_id = FND_API.G_MISS_NUM THEN
2152      --
2153      OPEN get_trip_id(p_stop_rec.stop_id);
2154      FETCH get_trip_id INTO l_parent_entity_id;
2155      --
2156      IF l_debug_on THEN
2157          WSH_DEBUG_SV.log(l_module_name,'trip_id',l_parent_entity_id);
2158      END IF;
2159      --
2160      IF (get_trip_id%NOTFOUND OR l_parent_entity_id IS NULL) THEN
2161          CLOSE get_trip_id;
2162          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2163      END IF;
2164      --
2165      CLOSE get_trip_id;
2166       --
2167     END IF;
2168     --
2169     l_caller := p_in_rec.caller;
2170     IF (l_caller like 'FTE%' AND l_caller <> 'FTE_TMS_INTEGRATION') THEN
2171       l_caller := 'WSH_PUB';
2172     END IF;
2173     WSH_TRIP_STOPS_PVT.Get_Disabled_List( p_stop_rec.stop_id
2174                      ,l_parent_entity_id
2175                      , 'FORM'
2176                      , x_return_status
2177                      , l_disabled_list
2178                      , x_msg_count
2179                      , x_msg_data
2180 		     , l_caller --3509004:public api changes
2181                      );
2182     --
2183     IF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR OR
2184        x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR
2185     THEN
2186       --
2187       IF l_debug_on THEN
2188         WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
2189         WSH_DEBUG_SV.pop(l_module_name);
2190       END IF;
2191       --
2192       RETURN;
2193       --
2194     END IF;
2195     --
2196     IF l_disabled_list.COUNT = 1 THEN
2197       IF l_disabled_list(1) = 'FULL' THEN
2198         RAISE e_all_disabled;
2199         --Everything  is disabled
2200       END IF;
2201     END IF;
2202     --
2203     OPEN c_tbl_rec;
2204     FETCH c_tbl_rec INTO x_stop_rec;
2205     IF c_tbl_rec%NOTFOUND THEN
2206        --
2207        CLOSE c_tbl_rec;
2208        RAISE e_dp_no_entity;
2209        --
2210     END IF;
2211     CLOSE c_tbl_rec;
2212 
2213     --
2214     IF l_debug_on THEN
2215       WSH_DEBUG_SV.log(l_module_name,'list.COUNT',l_disabled_list.COUNT);
2216     END IF;
2217     --
2218     IF l_disabled_list.COUNT = 0 THEN
2219      IF l_debug_on THEN
2220          WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
2221      END IF;
2222      --
2223      -- nothing else need to be disabled
2224      --
2225      eliminate_displayonly_fields (p_stop_rec,p_in_rec,x_stop_rec);
2226 
2227     ELSIF l_disabled_list(1) = 'FULL' THEN
2228       --
2229       IF l_disabled_list.COUNT > 1 THEN
2230        --
2231        IF l_debug_on THEN
2232           FOR i in 1..l_disabled_list.COUNT
2233           LOOP
2234             WSH_DEBUG_SV.log(l_module_name,'list values',l_disabled_list(i));
2235           END LOOP;
2236           WSH_DEBUG_SV.log(l_module_name,'calling enable_from_list');
2237        END IF;
2238        --enable the columns matching the l_disabled_list
2239        enable_from_list(l_disabled_list,
2240                       p_stop_rec,
2241                       x_stop_rec,
2242                       l_return_status,
2243                       l_field_name);
2244        --
2245        IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
2246          RAISE e_bad_field;
2247        END IF;
2248        --
2249       END IF;
2250       --
2251     ELSE -- list.count > 1 and list(1) <> 'FULL'
2252       --
2253       l_db_col_rec := x_stop_rec ;
2254       --
2255       IF l_debug_on THEN
2256         FOR i in 1..l_disabled_list.COUNT
2257         LOOP
2258           WSH_DEBUG_SV.log(l_module_name,'list values',l_disabled_list(i));
2259         END LOOP;
2260         WSH_DEBUG_SV.log(l_module_name,'First element is not FULL');
2261         WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
2262       END IF;
2263       --
2264       eliminate_displayonly_fields (p_stop_rec,p_in_rec,x_stop_rec);
2265       --
2266       IF l_debug_on THEN
2267         WSH_DEBUG_SV.log(l_module_name,'calling disable_from_list');
2268       END IF;
2269       -- The fileds in the list are getting disabled
2270       disable_from_list(l_disabled_list,
2271                       l_db_col_rec,
2272                       x_stop_rec,
2273                       l_return_status,
2274                       l_field_name
2275                       );
2276       --
2277       IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
2278        RAISE e_bad_field;
2279       END IF;
2280       --
2281     END IF;
2282     --
2283   END IF; /* if action = 'UPDATE' */
2284   --
2285   --3509004:public api changes
2286   --bug 3613650
2287   IF (nvl(p_in_rec.caller,'''') <> 'WSH_FSTRX' AND
2288       nvl(p_in_rec.caller,'''') NOT LIKE 'FTE%') THEN
2289     --
2290     user_non_updatable_columns
2291        (p_user_in_rec   => p_stop_rec,
2292         p_out_rec       => x_stop_rec,
2293         p_in_rec        => p_in_rec,
2294         x_return_status => l_return_status);
2295     --
2296     IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
2297        x_return_status := l_return_status;
2298     END IF;
2299     --
2300   END IF;
2301 
2302   IF l_debug_on THEN
2303     WSH_DEBUG_SV.pop(l_module_name);
2304   END IF;
2305 
2306   EXCEPTION
2307     WHEN e_all_disabled THEN
2308       -- OTM R12, glog proj, close open cursors
2309       IF get_trip_id%ISOPEN THEN
2310         CLOSE get_trip_id;
2311       END IF;
2312       IF c_tbl_rec%ISOPEN THEN
2313         CLOSE c_tbl_rec;
2314       END IF;
2315       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2316       FND_MESSAGE.SET_NAME('WSH','WSH_ALL_COLS_DISABLED');
2317       FND_MESSAGE.Set_Token('ENTITY_ID',p_stop_rec.stop_id);
2318       wsh_util_core.add_message(x_return_status,l_module_name);
2319       IF l_debug_on THEN
2320         -- Nothing is updateable
2321         WSH_DEBUG_SV.pop(l_module_name,'e_all_disabled');
2322       END IF;
2323     WHEN e_dp_no_entity THEN
2324       -- OTM R12, glog proj, close open cursors
2325       IF get_trip_id%ISOPEN THEN
2326         CLOSE get_trip_id;
2327       END IF;
2328       IF c_tbl_rec%ISOPEN THEN
2329         CLOSE c_tbl_rec;
2330       END IF;
2331       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2332       -- the message for this is set in original get_disabled_list
2333       IF l_debug_on THEN
2334         WSH_DEBUG_SV.pop(l_module_name,'e_dp_no_entity');
2335       END IF;
2336     WHEN e_bad_field THEN
2337       -- OTM R12, glog proj, close open cursors
2338       IF get_trip_id%ISOPEN THEN
2339         CLOSE get_trip_id;
2340       END IF;
2341       IF c_tbl_rec%ISOPEN THEN
2342         CLOSE c_tbl_rec;
2343       END IF;
2344       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2345       FND_MESSAGE.SET_NAME('WSH','WSH_BAD_FIELD_NAME');
2346       FND_MESSAGE.Set_Token('FIELD_NAME',l_field_name);
2347       wsh_util_core.add_message(x_return_status,l_module_name);
2348       IF l_debug_on THEN
2349         WSH_DEBUG_SV.log(l_module_name,'Bad field name passed to the list:'
2350                                                         ,l_field_name);
2351         WSH_DEBUG_SV.pop(l_module_name,'e_bad_field');
2352       END IF;
2353 
2354     WHEN OTHERS THEN
2355       -- OTM R12, glog proj, close open cursors
2356       IF get_trip_id%ISOPEN THEN
2357         CLOSE get_trip_id;
2358       END IF;
2359       IF c_tbl_rec%ISOPEN THEN
2360         CLOSE c_tbl_rec;
2361       END IF;
2362       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2363       wsh_util_core.default_handler('WSH_TRIP_STOPS_VALIDATIONS.get_disabled_list', l_module_name);
2364       IF l_debug_on THEN
2365         WSH_DEBUG_SV.log(l_module_name,'Error:',SUBSTR(SQLERRM,1,200));
2366         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2367       END IF;
2368 END Get_Disabled_List;
2369 
2370 
2371 
2372 
2373 PROCEDURE Init_Stop_Actions_Tbl (
2374   p_action                   IN                VARCHAR2
2375 , x_stop_actions_tab         OUT    NOCOPY           StopActionsTabType
2376 , x_return_status            OUT    NOCOPY           VARCHAR2
2377 )
2378 
2379 IS
2380 l_debug_on BOOLEAN;
2381   l_module_name CONSTANT VARCHAR2(100) :=
2382          'wsh.plsql.' || G_PKG_NAME || '.' || 'Init_Stop_Actions_Tbl';
2383   i     number := 0;
2384 BEGIN
2385   --
2386   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2387   --
2388   IF l_debug_on IS NULL
2389   THEN
2390       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2391   END IF;
2392   --
2393   IF l_debug_on THEN
2394       WSH_DEBUG_SV.push(l_module_name);
2395       --
2396       WSH_DEBUG_SV.log(l_module_name,'p_action', p_action);
2397   END IF;
2398   --
2399   x_return_status :=  WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2400 
2401   --
2402   -- J-IB-NPARIKH-{
2403   --
2404   -- Disable all actions on inbound stops when called from transactions form
2405   --
2406     i := i+1;
2407     x_stop_actions_tab(i).shipments_type_flag    := 'I';
2408     x_stop_actions_tab(i).caller             := 'WSH_FSTRX';
2409     x_stop_actions_tab(i).action_not_allowed := p_action;
2410   -- J-IB-NPARIKH-}
2411   --
2412 
2413   --Replaced 'ARRIVE' and 'CLOSED' with 'UPDATE-STATUS' for bug 2748983
2414 
2415   IF p_action IN ('PLAN','UNPLAN','UPDATE-STATUS','PICK-RELEASE',
2416                   'PICK-RELEASE-UI','DELETE')
2417   THEN
2418     i := i+1;
2419      x_stop_actions_tab(i).status_code := 'CL';
2420      x_stop_actions_tab(i).action_not_allowed := p_action;
2421 /* J inbound logistics jckwok */
2422      IF p_action IN ('PICK-RELEASE',
2423                   'PICK-RELEASE-UI')
2424                   --removed 'UPDATE-STATUS' for    -- J-IB-NPARIKH
2425      THEN
2426          i := i + 1;
2427          x_stop_actions_tab(i).shipments_type_flag := 'I';
2428          x_stop_actions_tab(i).action_not_allowed := p_action;
2429      END IF;
2430 
2431      --HVOP heali
2432      IF p_action IN ('PICK-RELEASE','PICK-RELEASE-UI') THEN
2433          i := i + 1;
2434          x_stop_actions_tab(i).status_code := 'AR';
2435          x_stop_actions_tab(i).action_not_allowed := p_action;
2436      END IF;
2437      --HVOP heali
2438   --J-IB-JCKWOK
2439   ELSIF p_action IN ('ASSIGN-FREIGHT-COSTS','PRINT-DOC-SETS','RESOLVE-EXCEPTIONS-UI') THEN
2440          i := i + 1;
2441          x_stop_actions_tab(i).action_not_allowed := p_action;
2442          x_stop_actions_tab(i).shipments_type_flag := 'I';
2443   --J-IB-JCKWOK
2444   -- J-IB-NPARIKH-{
2445   ELSIF p_action = 'WT-VOL'
2446   THEN
2447     --
2448     -- Calculate weight/volume action is
2449     --  - always allowed for inbound stop
2450     --  - not allowed for outbound stop, once closed.
2451     --  - not allowed for mixed closed stop, if called from transactions form
2452     --
2453     i := i + 1;
2454     x_stop_actions_tab(i).action_not_allowed := p_action;
2455     x_stop_actions_tab(i).shipments_type_flag := 'O';   -- J-IB-NPARIKH
2456     x_stop_actions_tab(i).status_code := 'CL';
2457     i := i + 1;
2458     x_stop_actions_tab(i).action_not_allowed := p_action;
2459     x_stop_actions_tab(i).shipments_type_flag := 'M';
2460     x_stop_actions_tab(i).caller := 'WSH_FSTRX';
2461     x_stop_actions_tab(i).status_code := 'CL';
2462   END IF;
2463   -- J-IB-NPARIKH-}
2464 
2465   IF l_debug_on THEN
2466       WSH_DEBUG_SV.pop(l_module_name);
2467   END IF;
2468   EXCEPTION
2469   WHEN OTHERS THEN
2470     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2471     wsh_util_core.default_handler('WSH_TRIP_STOPS_VALIDATIONS.get_disabled_list', l_module_name);
2472     IF l_debug_on THEN
2473         WSH_DEBUG_SV.log(l_module_name,'Error:',SUBSTR(SQLERRM,1,200));
2474         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2475     END IF;
2476 
2477 END Init_Stop_Actions_Tbl;
2478 
2479 -- J-IB-NPARIKH-{
2480 --
2481 --========================================================================
2482 -- PROCEDURE : refreshShipmentsTypeFlag
2483 --
2484 -- PARAMETERS: p_trip_id               Trip ID (Required)
2485 --             p_stop_id               Stop ID (Required)
2486 --             p_action                ASSIGN/UNASSIGN
2487 --             p_shipment_direction    Direction of delivery being assigned/unassigned
2488 --             x_shipments_type_flag   Shipments type flag for stop
2489 --             x_return_status         Return status of API
2490 --
2491 -- ASSUMPTION: Caller passes x_shipments_type_flag with database(current) value
2492 --             of the flag for trip stop.
2493 --
2494 -- PRE-REQ   : This procedure should be called BEFORE performing the ASSIGNment operation.
2495 --             This procedure should be called AFTER performing the UNASSIGNment operation.
2496 --
2497 -- COMMENT   : This function re-calculates value of shipments type flag for the
2498 --             trip stop as a result of a delivery being assigned/unassigned.
2499 --
2500 --             For action ASSIGN
2501 --               - If current value of shipments type flag is I
2502 --                   - If delivery being assigned is outbound (O/IO)
2503 --                       - Check if stop has any inbound delivery
2504 --                           - If yes, set x_shipments_type_flag to M
2505 --                           - If no, set x_shipments_type_flag to O
2506 --                   - If delivery being assigned is inbound (not O/IO)
2507 --                       - re-calculation is not required. Return
2508 --
2509 --               - If current value of shipments type flag is O
2510 --                   - If delivery being assigned is inbound (not O/IO)
2511 --                       - Check if stop has any outbound delivery
2512 --                           - If yes, set x_shipments_type_flag to M
2513 --                           - If no, set x_shipments_type_flag to I
2514 --                   - If delivery being assigned is outbound (O/IO)
2515 --                       - re-calculation is not required. Return
2516 --
2517 --               - If current value of shipments type flag is M
2518 --                       - re-calculation is not required. Return
2519 --
2520 --             For action UNASSIGN
2521 --               - If current value of shipments type flag is M
2522 --                   - If delivery being unassigned is outbound (O/IO)
2523 --                       - Check if stop has any outbound delivery
2524 --                           - If no, set x_shipments_type_flag to I
2525 --                           - If yes, re-calculation is not required. Return
2526 --                   - If delivery being assigned is inbound (not O/IO)
2527 --                       - Check if stop has any inbound delivery
2528 --                           - If no, set x_shipments_type_flag to O
2529 --                           - If yes, re-calculation is not required. Return
2530 --
2531 --               - If current value of shipments type flag is O/I
2532 --                       - re-calculation is not required. Return
2533 --
2534 --========================================================================
2535 --
2536 PROCEDURE refreshShipmentsTypeFlag
2537     (
2538       p_trip_id              IN            NUMBER,
2539       p_stop_id              IN            NUMBER,
2540       p_action               IN            VARCHAR2 DEFAULT 'ASSIGN',
2541       p_shipment_direction   IN            VARCHAR2 DEFAULT 'O' ,
2542       x_shipments_type_flag  IN OUT NOCOPY VARCHAR2,
2543       x_return_status           OUT NOCOPY VARCHAR2
2544     )
2545 IS
2546 --{
2547     --
2548     l_debug_on BOOLEAN;
2549     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'refreshShipmentsTypeFlag';
2550 --}
2551 BEGIN
2552 --{
2553     --
2554     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2555     --
2556     IF l_debug_on IS NULL
2557     THEN
2558         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2559     END IF;
2560     --
2561     IF l_debug_on THEN
2562         WSH_DEBUG_SV.push(l_module_name);
2563         WSH_DEBUG_SV.log(l_module_name,'p_trip_id',p_trip_id);
2564         WSH_DEBUG_SV.log(l_module_name,'p_stop_id',p_stop_id);
2565         WSH_DEBUG_SV.log(l_module_name,'p_action',p_action);
2566         WSH_DEBUG_SV.log(l_module_name,'p_shipment_direction',p_shipment_direction);
2567         WSH_DEBUG_SV.log(l_module_name,'x_shipments_type_flag',x_shipments_type_flag);
2568     END IF;
2569     --
2570     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2571     --
2572     IF p_trip_id IS NULL
2573     THEN
2574     --{
2575           --
2576           -- Trip ID is a required parameter. Raise error.
2577           --
2578           FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
2579           FND_MESSAGE.SET_TOKEN('FIELD_NAME','p_trip_id');
2580           wsh_util_core.add_message(wsh_util_core.g_ret_sts_error,l_module_name);
2581           RAISE FND_API.G_EXC_ERROR;
2582     --}
2583     END IF;
2584     --
2585     IF p_stop_id IS NULL
2586     THEN
2587     --{
2588           --
2589           -- Stop ID is a required parameter. Raise error.
2590           --
2591           FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
2592           FND_MESSAGE.SET_TOKEN('FIELD_NAME','p_stop_id');
2593           wsh_util_core.add_message(wsh_util_core.g_ret_sts_error,l_module_name);
2594           RAISE FND_API.G_EXC_ERROR;
2595     --}
2596     END IF;
2597     --
2598     --
2599     IF p_action = 'ASSIGN'
2600     THEN
2601     --{
2602         IF NVL(x_shipments_type_flag,'O') = 'I'
2603         THEN
2604         --{
2605             IF NVL(p_shipment_direction,'O') IN ('O','IO')
2606             THEN
2607             --{
2608                 IF l_debug_on THEN
2609                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.has_inbound_deliveries',WSH_DEBUG_SV.C_PROC_LEVEL);
2610                 END IF;
2611                 --
2612                 IF
2613                     WSH_TRIP_VALIDATIONS.has_inbound_deliveries
2614                         (
2615                           p_trip_id => p_trip_id,
2616                           p_stop_id => p_stop_id
2617                         )
2618                     = 'Y'
2619                 THEN
2620                     x_shipments_type_flag := 'M';
2621                 ELSE
2622                     x_shipments_type_flag := 'O';
2623                 END IF;
2624             --}
2625             END IF;
2626         --}
2627         ELSIF NVL(x_shipments_type_flag,'O') = 'O'
2628         THEN
2629         --{
2630             IF NVL(p_shipment_direction,'O') NOT IN ('O','IO')
2631             THEN
2632             --{
2633                 IF l_debug_on THEN
2634                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.has_outbound_deliveries',WSH_DEBUG_SV.C_PROC_LEVEL);
2635                 END IF;
2636                 --
2637                 IF
2638                     WSH_TRIP_VALIDATIONS.has_outbound_deliveries
2639                         (
2640                           p_trip_id => p_trip_id,
2641                           p_stop_id => p_stop_id
2642                         )
2643                     = 'Y'
2644                 THEN
2645                     x_shipments_type_flag := 'M';
2646                 ELSE
2647                     x_shipments_type_flag := 'I';
2648                 END IF;
2649             --}
2650             END IF;
2651         --}
2652         END IF;
2653     --}
2654     ELSIF p_action = 'UNASSIGN'
2655     THEN
2656     --{
2657         IF NVL(x_shipments_type_flag,'O') = 'M'
2658         THEN
2659         --{
2660             IF NVL(p_shipment_direction,'O') IN ('O','IO')
2661             THEN
2662             --{
2663                 IF l_debug_on THEN
2664                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.has_outbound_deliveries',WSH_DEBUG_SV.C_PROC_LEVEL);
2665                 END IF;
2666                 --
2667                 IF
2668                     WSH_TRIP_VALIDATIONS.has_outbound_deliveries
2669                         (
2670                           p_trip_id => p_trip_id,
2671                           p_stop_id => p_stop_id
2672                         )
2673                     = 'Y'
2674                 THEN
2675                     x_shipments_type_flag := 'M';
2676                 ELSE
2677                     x_shipments_type_flag := 'I';
2678                 END IF;
2679             --}
2680             ELSE
2681             --{
2682                 IF l_debug_on THEN
2683                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.has_inbound_deliveries',WSH_DEBUG_SV.C_PROC_LEVEL);
2684                 END IF;
2685                 --
2686                 IF
2687                     WSH_TRIP_VALIDATIONS.has_inbound_deliveries
2688                         (
2689                           p_trip_id => p_trip_id,
2690                           p_stop_id => p_stop_id
2691                         )
2692                     = 'Y'
2693                 THEN
2694                     x_shipments_type_flag := 'M';
2695                 ELSE
2696                     x_shipments_type_flag := 'O';
2697                 END IF;
2698             --}
2699             END IF;
2700         --}
2701         END IF;
2702     --}
2703     END IF;
2704     --
2705     --
2706     IF l_debug_on THEN
2707         WSH_DEBUG_SV.log(l_module_name,'x_shipments_type_flag',x_shipments_type_flag);
2708         WSH_DEBUG_SV.pop(l_module_name);
2709     END IF;
2710 --}
2711 EXCEPTION
2712 --{
2713       --
2714     WHEN FND_API.G_EXC_ERROR THEN
2715 
2716       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2717       --
2718       IF l_debug_on THEN
2719         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2720         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2721       END IF;
2722       --
2723     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2724 
2725       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2726       --
2727       IF l_debug_on THEN
2728         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2729         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
2730       END IF;
2731       --
2732     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
2733       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2734       --
2735       IF l_debug_on THEN
2736         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2737         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
2738       END IF;
2739     WHEN OTHERS THEN
2740         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2741         wsh_util_core.default_handler('WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag', l_module_name);
2742         IF l_debug_on THEN
2743            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2744         END IF;
2745 --}
2746 END refreshShipmentsTypeFlag;
2747 --
2748 --
2749 --
2750 --========================================================================
2751 -- PROCEDURE : Check_Stop_Close
2752 --
2753 -- PARAMETERS: p_in_rec                Input Record  (Refer to WSHSTVLS.pls for description)
2754 --             p_out_rec               Output record (Refer to WSHSTVLS.pls for description)
2755 --             x_return_status         Return status of API
2756 --
2757 --
2758 -- COMMENT   : This function checks if stop can be closed or not.
2759 --             Result is indicated via out parameter p_out_rec.close_allowed
2760 --
2761 --             When FTE or Inbound caller wants to close the physical stop, we will
2762 --             perform validation on both linked dummy and physical stops, in which
2763 --             case, both stops are treated as one virtual stop.
2764 --
2765 --             In below steps, linked internal stops are included(+).
2766 --
2767 --             It performs following steps:
2768 --             01. To determine, if stop can be closed,
2769 --                 01.01. It checks status of all prior stops on same trip.(+)
2770 --                 01.02. It checks status of deliveries being picked up/droppped of at the stop.(+)
2771 --                 01.03. It checks status of all prior legs for the deliveries.(+)
2772 --             02. Validate stop close date as per shipping parameter "Allow future date"
2773 --             03. Validate stop close date against inventory open periods
2774 --             04. Check if deliveries (Starting from this stop) can be set to in-transit.
2775 --                    (Internal stops cannot be used as pick up.)
2776 --             05. Check if deliveries (Ending at this stop) can be closed.(+)
2777 --             06. Check if trip can be set to in-transit or closed.
2778 --
2779 --========================================================================
2780 --
2781 PROCEDURE Check_Stop_Close -----trvlb
2782             (
2783               p_in_rec                   IN          chkClose_in_rec_type,
2784               x_out_rec                  OUT NOCOPY  chkClose_out_rec_type,
2785               x_return_status            OUT NOCOPY  VARCHAR2
2786             )
2787 IS
2788 --{
2789 
2790     l_dummy NUMBER;
2791     --
2792     -- Get trip and stop information
2793     --
2794     CURSOR stop_info_csr (p_stop_id IN NUMBER) IS
2795     SELECT stop_sequence_number,
2796            wts.status_code,
2797            wts.trip_id,
2798            nvl(wts.shipments_type_flag,'O') shipments_Type_flag,
2799            stop_location_id,
2800            wt.ship_method_code,
2801            wt.carrier_id,
2802            wt.mode_of_transport,
2803            wt.service_level,
2804            wt.status_code trip_status_code,
2805            wt.seal_code trip_seal_Code,
2806            wt.name trip_name,
2807            -- J: W/V Changes
2808            wts.departure_gross_weight,
2809            wts.departure_volume,
2810            wts.physical_location_id
2811     FROM   wsh_trip_stops wts,
2812            wsh_trips wt
2813     WHERE  stop_id     = p_stop_id
2814     AND    wts.trip_id = wt.trip_id;
2815     --
2816     --
2817     l_stop_info_rec stop_info_csr%ROWTYPE;
2818     --
2819     --
2820     -- Get linked internal stop information
2821     -- If the linked stop is already closed,
2822     -- we do not need to validate it anymore.
2823     -- If the caller passes the dummy stop, we will not use the physical
2824     -- stop.
2825     --    Linked internal stop can be closed separately;
2826     --    if it is already closed, we do not need to validate it.
2827     --
2828     -- FTE is expected to pass only the physical stop,
2829     -- and Inbound can pass either dummy stop (corner-case) or physical stop (typical).
2830     --
2831     CURSOR linked_stop_info_csr (p_stop_id IN NUMBER,
2832                                  p_trip_id IN NUMBER) IS
2833     SELECT wts.stop_id,
2834            wts.stop_sequence_number,
2835            wts.status_code,
2836            nvl(wts.shipments_type_flag,'O') shipments_Type_flag,
2837            wts.stop_location_id,
2838            wts.departure_gross_weight,
2839            wts.departure_volume
2840     FROM   wsh_trip_stops wts
2841     WHERE  wts.physical_stop_id     = p_stop_id
2842     AND    wts.trip_id              = p_trip_id
2843     AND    wts.status_code IN ('OP', 'AR');
2844     --
2845     --
2846     -- Get linked internal inbound stop for normal WSH callers
2847     -- because the linked dummy stop is not shown in
2848     -- FTE workbenches and the inbound stop is not visible
2849     -- to WSH.
2850     --  This resolves an issue with the case of
2851     --  drop-ship to internal location, along with
2852     --  inbound and outbound deliveries to the same physical
2853     --  location.
2854     --  We need to ensure that if the physical stop
2855     --  gets closed from WSH side, the linked inbound stop
2856     --  will get Closed.
2857     CURSOR wsh_linked_stop_csr (p_stop_id IN NUMBER,
2858                                 p_trip_id IN NUMBER) IS
2859     SELECT wts.stop_id,
2860            wts.stop_sequence_number,
2861            wts.status_code,
2862            wts.shipments_type_flag shipments_Type_flag,
2863            wts.stop_location_id,
2864            wts.departure_gross_weight,
2865            wts.departure_volume
2866     FROM   wsh_trip_stops wts
2867     WHERE  wts.physical_stop_id     = p_stop_id
2868     AND    wts.trip_id              = p_trip_id
2869     AND    wts.status_code IN ('OP', 'AR')
2870     AND    wts.shipments_type_flag = 'I';
2871     --
2872     --
2873     l_linked_stop_info_rec linked_stop_info_csr%ROWTYPE;
2874     --
2875     -- in case of -99 it will be equal
2876     --
2877     --
2878     -- Get all previous stop on the same trip which are not closed.
2879     -- Ignore the linked internal stop if specified.
2880     --   If not specified, its value will be -1 which should not be matched.
2881     --
2882     CURSOR prev_stop_csr
2883             (
2884               p_trip_id IN NUMBER,
2885               p_linked_stop_id IN NUMBER,
2886               p_stop_sequence IN NUMBER
2887             )
2888      IS
2889      SELECT nvl(shipments_type_flag,'O') shipments_Type_flag,
2890             stop_location_id
2891        FROM wsh_trip_stops
2892       WHERE trip_id              = p_trip_id
2893         AND status_code         IN ('OP','AR')
2894         AND stop_sequence_number < p_stop_sequence
2895         AND stop_id <> NVL(p_linked_stop_id, -1)
2896         order by stop_sequence_number;
2897         --AND rownum = 1;
2898     --
2899     --
2900     -- Get all open deliveries being picked up at the current stop,
2901     -- sorted by outbound first then inbound.
2902     --    linked internal stop is not included because it cannot be
2903     --    used as pick up.
2904     --
2905     CURSOR open_pickup_dlvy_csr (p_stop_id NUMBER) IS
2906     SELECT nvl(shipment_direction,'O') shipment_direction
2907     FROM   wsh_new_deliveries wnd,
2908            wsh_delivery_legs  wdl
2909     WHERE  wdl.pick_up_stop_id = p_stop_id
2910     AND    wnd.delivery_id     = wdl.delivery_id
2911     AND    wnd.status_code    IN ('OP', 'PA')
2912     ORDER BY DECODE( NVL(wnd.shipment_direction,'O'), 'O', 1, 'IO', 1, 'I', 2, 'D', 2, 2 );
2913     --AND    rownum              = 1;
2914     --
2915     --
2916     --
2917     -- Get deliveries being dropped off at the current stop
2918     --    and its linked dummy stop,
2919     -- sorted by outbound first then inbound.
2920     -- based on shipment direction, their status must be:
2921     --       * outbound/internal outbound: open or confirmed.
2922     --       * inbound, etc.: open or in-transit
2923     --
2924     CURSOR open_dropoff_dlvy_csr (p_stop_id NUMBER, p_stop_location_id NUMBER,
2925                                   p_dummy_stop_id NUMBER, p_dummy_location_id NUMBER) IS
2926     SELECT NVL(wnd.shipment_direction,'O') shipment_direction,
2927            wnd.ultimate_dropoff_location_id,
2928            wnd.status_code,
2929            DECODE(wnd.ultimate_dropoff_location_id,p_stop_location_id,1,
2930                   (DECODE(wnd.ultimate_dropoff_location_id,p_dummy_location_id,1, 2))
2931                  ) last_stop,
2932            wdl.drop_off_stop_id   drop_off_stop_id
2933     FROM   wsh_new_deliveries wnd,
2934            wsh_delivery_legs  wdl
2935     WHERE  wdl.drop_off_stop_id IN (p_stop_id, p_dummy_stop_id)
2936     AND    wnd.delivery_id      = wdl.delivery_id
2937     AND    (
2938               (
2939                     NVL(wnd.shipment_direction,'O') IN ('O','IO')
2940                 AND wnd.status_code    IN ('OP', 'PA', 'CO' )
2941               )
2942               OR
2943               (
2944                     NVL(wnd.shipment_direction,'O') NOT IN ('O','IO')
2945                 AND wnd.status_code    IN ('OP', 'IT' )
2946               )
2947            )
2948     ORDER BY DECODE( NVL(wnd.shipment_direction,'O'), 'O', 1, 'IO', 1, 'I', 2, 'D', 2, 2 ) ASC, wnd.status_code DESC, last_stop ASC;
2949     --AND    rownum              = 1;
2950     --
2951     --
2952     -- Get previous leg for delivery (or all deliveries if p_delivery_id is null)
2953     -- being picked up at the current stop (indicated by p_stop_id)
2954     --
2955     --   Linked internal stop is not included because it cannot have pick-ups.
2956     --
2957     -- results sorted by outbound first then inbound.
2958     --
2959     CURSOR prev_leg_csr (p_stop_id IN NUMBER, p_delivery_id IN NUMBER) IS
2960     SELECT prev_leg_do_stop.status_code                  do_stop_status_code,
2961            NVL(prev_leg_do_stop.shipments_type_flag,'O') do_stop_shipments_type_flag,
2962            prev_leg_do_stop.stop_location_id             do_stop_locationId,
2963            prev_leg_do_stop.stop_id                      do_stop_id,
2964            prev_leg_do_stop.stop_sequence_number         do_stop_sequence_number,
2965            prev_leg_pu_stop.status_code                  pu_stop_status_code,
2966            NVL(prev_leg_pu_stop.shipments_type_flag,'O') pu_stop_shipments_type_flag,
2967            prev_leg_pu_stop.stop_location_id             pu_stop_locationId,
2968            prev_leg_pu_stop.stop_id                      pu_stop_id,
2969            NVL(wnd.shipment_direction,'O')               shipment_direction,
2970            wnd.status_code                               dlvy_status_code,
2971            wnd.delivery_id                               delivery_id,
2972            wnd.initial_pickup_location_id                dlvy_initialPULocationId,
2973            wnd.name                                      dlvy_name,
2974            DECODE(prev_leg_do_stop.status_code,'OP','OP','XX') do_stop_status_code_ord,
2975            DECODE(prev_leg_pu_stop.status_code,'OP','OP','XX') pu_stop_status_code_ord,
2976            prev_leg_do_stop.trip_id                       prev_leg_trip_id,
2977            wt.name                                        prev_leg_trip_name
2978     FROM   wsh_trip_stops prev_leg_do_stop,
2979            wsh_trip_stops prev_leg_pu_stop,
2980            wsh_trip_stops curr_leg_pu_stop,
2981            wsh_delivery_legs prev_leg,
2982            wsh_delivery_legs curr_leg,
2983            wsh_new_deliveries wnd,
2984            wsh_trips wt
2985     WHERE  prev_leg.drop_off_stop_id         = prev_leg_do_stop.stop_id
2986     --AND    st1.status_code = 'OP'
2987     AND    prev_leg.pick_up_stop_id          = prev_leg_pu_stop.stop_id
2988     AND    prev_leg_do_stop.stop_location_id = curr_leg_pu_stop.stop_location_id
2989     AND    prev_leg_do_stop.trip_id          = wt.trip_id
2990     AND    prev_leg.delivery_id              = curr_leg.delivery_id
2991     AND    curr_leg_pu_stop.stop_id          = p_stop_id
2992     AND    curr_leg.pick_up_stop_id          = p_stop_id
2993     AND    wnd.delivery_id                   = curr_leg.delivery_id
2994     AND    (
2995              p_delivery_id IS NULL
2996              OR
2997              wnd.delivery_id = p_delivery_id
2998            )
2999     ORDER BY DECODE( NVL(wnd.shipment_direction,'O'), 'O', 1, 'IO', 1, 'I', 2, 'D', 2, 2 ), do_stop_status_code_ord, pu_stop_status_code_ord, wnd.delivery_id;
3000     --AND    rownum = 1;
3001     --
3002     --
3003     --
3004     -- Get previous leg for delivery (or all deliveries if p_delivery_id is null)
3005     -- being picked up at the current stop (indicated by p_stop_id)
3006     --
3007     --   Linked internal stop is not included because it cannot have pick-ups.
3008     --
3009     -- results sorted by outbound first then inbound.
3010     --
3011     -- This is same as prev_leg_csr but copied once again
3012         -- as we need to open this cursor in nested fashion.
3013         -- (I know this is not very good coding practice
3014         -- but it is a compromise considering the time constraints
3015         -- need to fix this in next release)
3016     --
3017     CURSOR prev_leg_csr1 (p_stop_id IN NUMBER, p_delivery_id IN NUMBER) IS
3018     SELECT prev_leg_do_stop.status_code                  do_stop_status_code,
3019            NVL(prev_leg_do_stop.shipments_type_flag,'O') do_stop_shipments_type_flag,
3020            prev_leg_do_stop.stop_location_id             do_stop_locationId,
3021            prev_leg_do_stop.stop_id                      do_stop_id,
3022            prev_leg_do_stop.stop_sequence_number         do_stop_sequence_number,
3023            prev_leg_pu_stop.status_code                  pu_stop_status_code,
3024            NVL(prev_leg_pu_stop.shipments_type_flag,'O') pu_stop_shipments_type_flag,
3025            prev_leg_pu_stop.stop_location_id             pu_stop_locationId,
3026            prev_leg_pu_stop.stop_id                      pu_stop_id,
3027            NVL(wnd.shipment_direction,'O')               shipment_direction,
3028            wnd.status_code                               dlvy_status_code,
3029            wnd.delivery_id                               delivery_id,
3030            wnd.initial_pickup_location_id                dlvy_initialPULocationId,
3031            wnd.name                                      dlvy_name,
3032            DECODE(prev_leg_do_stop.status_code,'OP','OP','XX') do_stop_status_code_ord,
3033            DECODE(prev_leg_pu_stop.status_code,'OP','OP','XX') pu_stop_status_code_ord,
3034            prev_leg_do_stop.trip_id                       prev_leg_trip_id,
3035            wt.name                                        prev_leg_trip_name
3036     FROM   wsh_trip_stops prev_leg_do_stop,
3037            wsh_trip_stops prev_leg_pu_stop,
3038            wsh_trip_stops curr_leg_pu_stop,
3039            wsh_delivery_legs prev_leg,
3040            wsh_delivery_legs curr_leg,
3041            wsh_new_deliveries wnd,
3042            wsh_trips wt
3043     WHERE  prev_leg.drop_off_stop_id         = prev_leg_do_stop.stop_id
3044     --AND    st1.status_code = 'OP'
3045     AND    prev_leg.pick_up_stop_id          = prev_leg_pu_stop.stop_id
3046     AND    prev_leg_do_stop.stop_location_id = curr_leg_pu_stop.stop_location_id
3047     AND    prev_leg_do_stop.trip_id          = wt.trip_id
3048     AND    prev_leg.delivery_id              = curr_leg.delivery_id
3049     AND    curr_leg_pu_stop.stop_id          = p_stop_id
3050     AND    curr_leg.pick_up_stop_id          = p_stop_id
3051     AND    wnd.delivery_id                   = curr_leg.delivery_id
3052     AND    (
3053              p_delivery_id IS NULL
3054              OR
3055              wnd.delivery_id = p_delivery_id
3056            )
3057     ORDER BY DECODE( NVL(wnd.shipment_direction,'O'), 'O', 1, 'IO', 1, 'I', 2, 'D', 2, 2 ), do_stop_status_code_ord, pu_stop_status_code_ord, wnd.delivery_id;
3058     --AND    rownum = 1;
3059     --
3060     --
3061     --
3062     -- Get pickup stop information for an inbound  delivery, given its drop-off stop.
3063     --    drop-off stop can be physical or linked internal.
3064     -- Pick up stops must be closed.
3065     --
3066     CURSOR ib_pickup_csr (p_stop_id IN NUMBER,
3067                           p_linked_stop_id IN NUMBER) IS
3068     SELECT NVL(st1.shipments_type_flag,'O') pu_shipments_type_flag,
3069            st1.status_code pu_stop_statusCode,
3070            st1.stop_location_id pu_stop_locationId,
3071            st1.stop_id          pu_stop_id,
3072            wnd.delivery_id      delivery_id,
3073            wnd.status_code delivery_statusCode,
3074            wnd.initial_pickup_location_id dlvy_initialPULocationId
3075     FROM   wsh_trip_stops st1,
3076            wsh_delivery_legs dl2,
3077            wsh_new_deliveries wnd
3078     WHERE  dl2.pick_up_stop_id                  = st1.stop_id
3079     AND    st1.status_code                      = 'CL'
3080     AND    dl2.drop_off_stop_id   IN (p_stop_id, p_linked_stop_id)
3081     AND    wnd.delivery_id                      = dl2.delivery_id
3082     AND    nvl(wnd.shipment_direction,'O') NOT IN ('O','IO');
3083     --
3084     --
3085     -- Get all deliveries which start(initial pickup location) at current stop,
3086     -- sorted by organization id
3087     --     linked internal stop is not included because it cannot have pick-ups.
3088     --
3089     CURSOR initial_pu_dlvy_csr (p_stop_id NUMBER) IS
3090     SELECT dl.delivery_id,
3091            dl.organization_id,
3092 	   DECODE(NVL(dl.shipment_direction,'O'), 'IO', dl.ultimate_dropoff_location_id, NULL) io_location_id,
3093            dl.name,
3094            dl.status_code
3095     FROM   wsh_new_deliveries dl,
3096            wsh_delivery_legs dg,
3097            wsh_trip_stops st
3098     WHERE  dg.delivery_id      = dl.delivery_id
3099     AND    st.stop_location_id = dl.initial_pickup_location_id
3100     AND    st.stop_id          = dg.pick_up_stop_id
3101     AND    st.stop_id          = p_stop_id
3102     AND    NVL(dl.shipment_direction,'O')  IN ('O','IO')
3103     ORDER BY organization_id;
3104     --AND    rownum              = 1;
3105     --
3106     --
3107     -- Get all deliveries which end(ultimate dropoff location) at current stop
3108     -- or its linked internal stop,
3109     -- sorted by organization id
3110     --
3111     CURSOR ultimate_do_dlvy_csr (p_stop_id NUMBER,
3112                                  p_dummy_stop_id NUMBER) IS
3113     SELECT dl.delivery_id,
3114            dl.organization_id,
3115            dl.name,
3116            dl.status_code,
3117            dg.drop_off_stop_id
3118     FROM   wsh_new_deliveries dl,
3119            wsh_delivery_legs dg,
3120            wsh_trip_stops st
3121     WHERE  dg.delivery_id      = dl.delivery_id
3122     AND    st.stop_location_id = dl.ultimate_dropoff_location_id
3123     AND    st.stop_id          = dg.drop_off_stop_id
3124     AND    st.stop_id          IN (p_stop_id, p_dummy_stop_id)
3125     AND    NVL(dl.shipment_direction,'O')  IN ('O','IO')
3126     AND    dl.status_code      = 'IT'
3127     ORDER BY organization_id;
3128     --AND    rownum              = 1;
3129     --
3130     --
3131        -- Need to get receiving organization_id and destination type code for location
3132     CURSOR get_org_id (c_delivery_id NUMBER) IS
3133     SELECT pl.destination_organization_id, pl.destination_type_code
3134     FROM   wsh_delivery_assignments wda, wsh_delivery_details wdd,
3135            oe_order_lines_all oel, po_requisition_lines_all pl
3136     WHERE  wda.delivery_id = c_delivery_id
3137     AND    wda.delivery_detail_id = wdd.delivery_detail_id
3138     AND    wdd.source_document_type_id = 10
3139     AND    wdd.source_line_id = oel.line_id
3140     AND    wdd.source_code = 'OE'
3141     AND    pl.requisition_line_id = oel.source_document_line_id
3142     AND    pl.destination_organization_id <> pl.source_organization_id;
3143 
3144     -- Need to get intransit type from Shipping Networks
3145     CURSOR c_mtl_interorg_parameters (c_from_organization_id NUMBER, c_to_organization_id NUMBER) IS
3146     SELECT intransit_type
3147     FROM   mtl_interorg_parameters
3148     WHERE  from_organization_id = c_from_organization_id
3149     AND    to_organization_id = c_to_organization_id;
3150 
3151     l_prev_dropoff_location_id  NUMBER;
3152     l_rec_organization_id       NUMBER;
3153     l_dest_type_code            VARCHAR2(30);
3154     l_intransit_type            NUMBER;
3155     l_validate_rec_org          BOOLEAN;
3156     l_org_name                  VARCHAR2(240);
3157     l_err_dlvy_cnt          NUMBER;
3158     l_dlvy_cnt              NUMBER;
3159     l_prev_org_dlvy_cnt     NUMBER;
3160     l_prev_org_id           NUMBER;
3161     l_stop_warnings         NUMBER;
3162     l_num_warnings          NUMBER;
3163     l_num_errors            NUMBER;
3164     l_return_status         VARCHAR2(30);
3165     l_stop_name             VARCHAR2(60);
3166     l_prev_stop_name        VARCHAR2(60);
3167     l_message_name          VARCHAR2(100);
3168     l_allowed               VARCHAR2(10);
3169     --
3170 
3171     l_param_info            WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
3172     -- Bug 3346237 : Parameters Enforce Ship Method and Allow future ship date
3173     --               should use values present in Global Parameters table.
3174     l_global_info      WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
3175 
3176     l_itm_mark_dels         wsh_util_core.id_tab_type;
3177     l_exceptions_tab        wsh_delivery_validations.exception_rec_tab_type;
3178     l_exceptions_exist      VARCHAR2(1);
3179     l_period_id             NUMBER;
3180     l_open_past_period      BOOLEAN;
3181     l_stop_Id               NUMBER;
3182     l_stop_locationId       NUMBER;
3183     l_dlvy_initialPULocationId NUMBER;
3184     --
3185     l_in_rec                WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type;
3186     l_trip_in_rec           WSH_TRIP_VALIDATIONS.ChgStatus_in_rec_type;
3187     l_wv_check_done         BOOLEAN;
3188 
3189     -- Exception variables
3190     l_exceptions_tbl  wsh_xc_util.XC_TAB_TYPE;
3191     l_exp_logged      BOOLEAN := FALSE;
3192     l_msg_count       NUMBER;
3193     l_msg_data        VARCHAR2(4000);
3194     --
3195     l_location_id NUMBER;
3196 
3197     --
3198     l_virtual_shipments_type_flag  WSH_TRIP_STOPS.SHIPMENTS_TYPE_FLAG%TYPE;
3199 
3200 -- Following three variables are added for BufFix #3947506
3201     l_out_entity_id     VARCHAR2(100);
3202     l_out_entity_name   VARCHAR2(100);
3203     l_out_status        VARCHAR2(1);
3204 
3205     --
3206     l_debug_on BOOLEAN;
3207     --
3208     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_STOP_CLOSE';
3209 
3210 --}
3211 BEGIN
3212 --{
3213     --
3214     -- Debug Statements
3215     --
3216     --
3217     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3218     --
3219     IF l_debug_on IS NULL
3220     THEN
3221        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3222     END IF;
3223     --
3224     IF l_debug_on THEN
3225        WSH_DEBUG_SV.push(l_module_name);
3226        --
3227        WSH_DEBUG_SV.log(l_module_name,'P_in_rec.STOP_ID',P_in_rec.STOP_ID);
3228        WSH_DEBUG_SV.log(l_module_name,'P_in_rec.put_messages',P_in_rec.put_messages);
3229        WSH_DEBUG_SV.log(l_module_name,'P_in_rec.caller',P_in_rec.caller);
3230        WSH_DEBUG_SV.log(l_module_name,'P_in_rec.actual_date',P_in_rec.actual_date);
3231     END IF;
3232     --
3233     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3234     l_stop_warnings := 0;
3235     l_num_warnings  := 0;
3236     l_num_errors    := 0;
3237     --
3238     x_out_rec.initial_pu_dlvy_recTbl.id_tbl.DELETE;
3239     x_out_rec.initial_pu_dlvy_recTbl.name_tbl.DELETE;
3240     x_out_rec.initial_pu_dlvy_recTbl.statusCode_tbl.DELETE;
3241     x_out_rec.initial_pu_dlvy_recTbl.orgId_tbl.DELETE;
3242     --
3243     x_out_rec.ultimate_do_dlvy_recTbl.id_tbl.DELETE;
3244     x_out_rec.ultimate_do_dlvy_recTbl.name_tbl.DELETE;
3245     x_out_rec.ultimate_do_dlvy_recTbl.statusCode_tbl.DELETE;
3246     x_out_rec.ultimate_do_dlvy_recTbl.orgId_tbl.DELETE;
3247     --
3248     x_out_rec.initial_pu_err_dlvy_id_tbl.DELETE;
3249     --
3250     --
3251     -- Get Stop  Info
3252     --
3253     OPEN stop_info_csr (p_in_rec.stop_id);
3254     FETCH stop_info_csr INTO l_stop_info_rec;
3255     --
3256     IF stop_info_csr%NOTFOUND
3257     THEN
3258     --{
3259       --CLOSE stop_info_csr;
3260       FND_MESSAGE.SET_NAME('WSH','WSH_STOP_NOT_EXIST');
3261       FND_MESSAGE.SET_TOKEN('STOP_ID',p_in_rec.stop_id);
3262       wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3263       RAISE FND_API.G_EXC_ERROR;
3264     --}
3265     END IF;
3266     --
3267     CLOSE stop_info_csr;
3268     --
3269     --
3270     l_virtual_shipments_type_flag := l_stop_info_rec.shipments_type_flag;
3271     --
3272     --
3273     -- we check for FTE because only FTE user can close both linked stops.
3274     -- we check for INBOUND because only Inbound user can close both linked stops.
3275     -- WSH users must close one stop at a time in the proper sequence
3276     -- on the same trip.
3277     --
3278     -- If caller passes the dummy stop, we will not look up the physical stop.
3279     --
3280     IF (p_in_rec.caller LIKE 'FTE%'
3281         OR p_in_rec.caller LIKE 'WSH_IB%' -- Inbound Changes 10+ Internal Locations
3282         )  THEN
3283       OPEN linked_stop_info_csr(p_in_rec.stop_id,
3284                                 l_stop_info_rec.trip_id);
3285       FETCH linked_stop_info_csr INTO l_linked_stop_info_rec;
3286       IF linked_stop_info_csr%NOTFOUND THEN
3287          -- use -1 or 'x' instead of NULL to avoid need for NVL in SQLs and conditions.
3288          l_linked_stop_info_rec.stop_id          := -1;
3289          l_linked_stop_info_rec.stop_location_id := -1;
3290          l_linked_stop_info_rec.shipments_type_flag := 'x';
3291          x_out_rec.linked_stop_id := NULL;
3292       ELSE
3293          x_out_rec.linked_stop_id := l_linked_stop_info_rec.stop_id;
3294 
3295          --
3296          -- In this API, if the stops are linked and both are not closed, they
3297          -- represent a virtual stop and we need to determine its shipments type.
3298          --
3299          --       linked dummy stop (OP, AR)    physical stop         virtual stop
3300          --       shipments type flag           shipments type flag   shipments type flag
3301          --       -------------------------     --------------------  -------------------
3302          --             O                               O                     O
3303          --             I                               I                     I
3304          --             O                               I                     M
3305          --             I                               O                     M
3306          --             M                               *                     M
3307          --             *                               M                     M
3308          --
3309          -- If there is no non-closed linked dummy stop, the virtual flag will have the
3310          -- main stop's flag value.
3311 
3312 	 IF     l_virtual_shipments_type_flag <> 'M'
3313             AND l_stop_info_rec.shipments_type_flag <> l_linked_stop_info_rec.shipments_type_flag THEN
3314            l_virtual_shipments_type_flag := 'M';
3315          END IF;
3316 
3317       END IF;
3318       CLOSE linked_stop_info_csr;
3319     ELSE
3320       -- normal WSH cases need to close linked inbound internal stop;
3321       -- if the linked stop is outbound or mixed, it is visible to WSH
3322       -- and should normally be closed first.
3323       OPEN wsh_linked_stop_csr(p_in_rec.stop_id,
3324                                l_stop_info_rec.trip_id);
3325       FETCH wsh_linked_stop_csr INTO l_linked_stop_info_rec;
3326       IF wsh_linked_stop_csr%NOTFOUND THEN
3327         -- use -1 or 'x' instead of NULL to avoid need for NVL in SQLs and conditions.
3328         l_linked_stop_info_rec.stop_id          := -1;
3329         l_linked_stop_info_rec.stop_location_id := -1;
3330         x_out_rec.linked_stop_id := NULL;
3331       ELSE
3332         -- this case is always Mixed.
3333         x_out_rec.linked_stop_id := l_linked_stop_info_rec.stop_id;
3334         l_virtual_shipments_type_flag := 'M';
3335       END IF;
3336       CLOSE wsh_linked_stop_csr;
3337     END IF;
3338     --
3339     --
3340     IF l_debug_on THEN
3341        WSH_DEBUG_SV.log(l_module_name,'l_linked_stop_info_rec.stop_id',l_linked_stop_info_rec.stop_id);
3342        WSH_DEBUG_SV.log(l_module_name,'l_linked_stop_info_rec.stop_location_id',l_linked_stop_info_rec.stop_location_id);
3343     END IF;
3344 
3345     IF (p_in_rec.caller LIKE 'FTE%'
3346         OR p_in_rec.caller LIKE 'WSH_IB%')
3347        AND l_stop_info_rec.physical_location_id IS NOT NULL THEN
3348       l_location_id := l_stop_info_rec.physical_location_id;
3349     ELSE
3350       l_location_id := l_stop_info_rec.stop_location_id;
3351     END IF;
3352 
3353         l_stop_name := SUBSTRB(
3354                                 WSH_UTIL_CORE.get_location_description
3355                                   (
3356                                     l_location_id,
3357                                     'NEW UI CODE'
3358                                   ),
3359                                 1,
3360                                 60
3361                               );
3362     --
3363     x_out_rec.stop_name              := l_stop_name;
3364     x_out_rec.stop_Sequence_number   := l_stop_info_rec.stop_Sequence_number;
3365     x_out_rec.trip_id                := l_stop_info_rec.trip_id;
3366     x_out_rec.ship_method_code       := l_stop_info_rec.ship_method_code;
3367     x_out_rec.carrier_id             := l_stop_info_rec.carrier_id;
3368     x_out_rec.mode_of_transport      := l_stop_info_rec.mode_of_transport;
3369     x_out_rec.service_level          := l_stop_info_rec.service_level;
3370     x_out_rec.trip_Status_code       := l_stop_info_Rec.trip_Status_Code;
3371     x_out_rec.trip_new_Status_code   := l_stop_info_Rec.trip_Status_Code;
3372     x_out_rec.trip_seal_code         := l_stop_info_rec.trip_seal_code;
3373     x_out_rec.trip_name              := l_stop_info_rec.trip_name;
3374     --
3375     IF l_debug_on THEN
3376        WSH_DEBUG_SV.log(l_module_name,'l_stop_info_rec.stop_Sequence_number',l_stop_info_rec.stop_Sequence_number);
3377        WSH_DEBUG_SV.log(l_module_name,'l_stop_info_rec.trip_id',l_stop_info_rec.trip_id);
3378        WSH_DEBUG_SV.log(l_module_name,'l_stop_info_Rec.trip_Status_Code',l_stop_info_Rec.trip_Status_Code);
3379        WSH_DEBUG_SV.log(l_module_name,'l_stop_info_Rec.shipments_Type_flag',l_stop_info_Rec.shipments_Type_flag);
3380        WSH_DEBUG_SV.log(l_module_name,'l_linked_stop_info_Rec.shipments_Type_flag',l_linked_stop_info_Rec.shipments_Type_flag);
3381        WSH_DEBUG_SV.log(l_module_name,'l_virtual_shipments_Type_flag',l_virtual_shipments_Type_flag);
3382     END IF;
3383     --
3384 
3385     -- Check for Exceptions against Trip Stop and its Contents
3386     IF l_debug_on THEN
3387        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
3388  END IF;
3389     l_exceptions_tbl.delete;
3390     l_exp_logged      := FALSE;
3391     WSH_XC_UTIL.Check_Exceptions (
3392                                      p_api_version           => 1.0,
3393                                      x_return_status         => l_return_status,
3394                                      x_msg_count             => l_msg_count,
3395                                      x_msg_data              => l_msg_data,
3396                                      p_logging_entity_id     => p_in_rec.stop_id,
3397                                      p_logging_entity_name   => 'STOP',
3398                                      p_consider_content      => 'Y',
3399                                      x_exceptions_tab        => l_exceptions_tbl,
3400 --tkt
3401                                      p_caller                => p_in_rec.caller
3402                                    );
3403     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3404          x_return_status := l_return_status;
3405          wsh_util_core.add_message(x_return_status);
3406          RAISE FND_API.G_EXC_ERROR;
3407     END IF;
3408     FOR exp_cnt in 1..l_exceptions_tbl.COUNT LOOP
3409          IF l_exceptions_tbl(exp_cnt).exception_behavior = 'ERROR' THEN
3410             IF l_exceptions_tbl(exp_cnt).entity_name = 'STOP' THEN
3411                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3412             ELSE
3413                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3414             END IF;
3415 
3416             -- BugFix #3947506
3417             WSH_UTIL_CORE.Get_Entity_Name
3418                 ( l_exceptions_tbl(exp_cnt).entity_id,
3419                   l_exceptions_tbl(exp_cnt).entity_name,
3420                   l_out_entity_id,
3421                   l_out_entity_name,
3422                   l_out_status);
3423 
3424             IF ( l_out_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3425                  wsh_util_core.add_message(l_out_status);
3426                  RAISE FND_API.G_EXC_ERROR;
3427             END IF;
3428 
3429             -- End of code BugFix #3947506
3430 
3431             FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_out_entity_name); -- BugFix #3947506
3432             FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_out_entity_id); -- BugFix #3947506
3433             FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Error');
3434             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3435             wsh_util_core.add_message(x_return_status);
3436             l_stop_warnings := l_stop_warnings + 1;
3437             RAISE wsh_util_core.e_not_allowed;
3438          ELSIF l_exceptions_tbl(exp_cnt).exception_behavior = 'WARNING' THEN
3439             IF l_exceptions_tbl(exp_cnt).entity_name = 'STOP' THEN
3440                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3441                FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Stop');
3442                FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_trip_stops_pvt.get_name(l_exceptions_tbl(exp_cnt).entity_id)); --BugFix #3925590
3443                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
3444                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3445                wsh_util_core.add_message(x_return_status);
3446                l_stop_warnings := l_stop_warnings + 1;
3447             ELSIF NOT (l_exp_logged) THEN
3448                -- BugFix #3947506
3449                WSH_UTIL_CORE.Get_Entity_Name
3450                 ( l_exceptions_tbl(exp_cnt).entity_id,
3451                   l_exceptions_tbl(exp_cnt).entity_name,
3452                   l_out_entity_id,
3453                   l_out_entity_name,
3454                   l_out_status);
3455 
3456                IF ( l_out_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3457                  wsh_util_core.add_message(l_out_status);
3458                  RAISE FND_API.G_EXC_ERROR;
3459                END IF;
3460                -- End of code BugFix #3947506
3461                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3462                FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_out_entity_name); -- BugFix #3947506
3463                FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_out_entity_id); -- BugFix #3947506
3464                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
3465                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3466                l_exp_logged := TRUE;
3467                wsh_util_core.add_message(x_return_status);
3468                l_stop_warnings := l_stop_warnings + 1;
3469             END IF;
3470          END IF;
3471     END LOOP;
3472 
3473     --
3474     --
3475     -- Get all previous stop on the same trip which are not closed.
3476     -- All prior outbound/mixed stops must be closed.
3477     --
3478     -- If current stop is inbound, then all prior inbound stops must be closed as well.
3479     --
3480     -- If current stop is not inbound, then give a warning if any prior inbound stop is open.
3481     --
3482     -- Following loop for cursor prev_stop_csr validates the above.
3483     --
3484     FOR prev_stop_rec IN prev_stop_csr
3485                           (
3486                             p_trip_id        => l_stop_info_rec.trip_id,
3487                             p_linked_stop_id => l_linked_stop_info_rec.stop_id,
3488                             p_stop_sequence  => l_stop_info_rec.stop_sequence_number
3489                           )
3490     LOOP
3491     --{
3492         IF p_in_rec.put_messages
3493         THEN
3494         --{
3495             FND_MESSAGE.SET_NAME('WSH','WSH_PREV_STOP_NOT_CLOSED');
3496             FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3497             --
3498             l_prev_stop_name := SUBSTRB(
3499                                         WSH_UTIL_CORE.get_location_description
3500                                           (
3501                                             prev_stop_rec.stop_location_id,
3502                                             'NEW UI CODE'
3503                                           ),
3504                                         1,
3505                                         60
3506                                      );
3507             --
3508             FND_MESSAGE.SET_TOKEN('PREV_STOP_NAME',l_prev_stop_name);
3509             FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_stop_info_rec.trip_name);
3510             FND_MESSAGE.SET_TOKEN('PREV_TRIP_NAME',l_stop_info_rec.trip_name);
3511         --}
3512         END IF;
3513         --
3514         IF l_debug_on THEN
3515            WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.shipments_type_flag',prev_stop_rec.shipments_type_flag);
3516            WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.stop_location_id',prev_stop_rec.stop_location_id);
3517         END IF;
3518         --
3519         --
3520         IF l_virtual_shipments_type_flag IN ( 'M' , 'O' )
3521         AND prev_stop_rec.shipments_type_flag = 'I'
3522         THEN
3523         --{
3524             IF p_in_rec.put_messages
3525             THEN
3526             --{
3527                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3528             --}
3529             END IF;
3530             --
3531             l_stop_warnings := l_stop_warnings + 1;
3532         --}
3533         ELSE
3534         --{
3535             IF p_in_rec.put_messages
3536             THEN
3537             --{
3538                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3539             --}
3540             END IF;
3541             --
3542             --CLOSE prev_stop_csr;
3543             --
3544             RAISE wsh_util_core.e_not_allowed;
3545         --}
3546         END IF;
3547     --}
3548     END LOOP;
3549     --
3550     --
3551     -- bug 1550824: check for deliveries not ready to pick up
3552     --
3553     --
3554     -- Check if there are any open deliveries to be picked up at the stop.
3555     -- All outbound (O/IO) deliveries must be at least ship-confirmed.
3556     --
3557     -- If current stop is inbound, then all inbound deliveries (not O/IO) must be in-transit.
3558     --
3559     -- If current stop is mixed one, then give a warning if any open inbound delivery (not O/IO)
3560     --
3561     -- Following loop for cursor open_pickup_dlvy_csr validates the above.
3562     --
3563     FOR open_pickup_dlvy_rec IN open_pickup_dlvy_csr (p_in_rec.stop_id)
3564     LOOP
3565     --{
3566         IF p_in_rec.put_messages
3567         THEN
3568         --{
3569             IF open_pickup_dlvy_rec.shipment_direction IN ( 'O', 'IO' )
3570             THEN
3571                 l_message_name := 'WSH_STOP_CLOSE_OP_PA_ERROR';
3572             ELSE
3573                 l_message_name := 'WSH_STOP_CLOSE_OP_IT_ERROR';
3574             END IF;
3575             --
3576             FND_MESSAGE.SET_NAME('WSH', l_message_name);
3577             FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3578         --}
3579         END IF;
3580         --
3581         IF l_debug_on THEN
3582            WSH_DEBUG_SV.log(l_module_name,'open_pickup_dlvy_rec.shipment_direction',open_pickup_dlvy_rec.shipment_direction);
3583         END IF;
3584         --
3585         --
3586         IF open_pickup_dlvy_rec.shipment_direction IN ( 'O', 'IO' )
3587         OR l_virtual_shipments_Type_flag      = 'I'
3588         THEN
3589         --{
3590             IF p_in_rec.put_messages
3591             THEN
3592             --{
3593                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3594             --}
3595             END IF;
3596             --
3597             --CLOSE open_pickup_dlvy_csr;
3598             --
3599             RAISE wsh_util_core.e_not_allowed;
3600         --}
3601         ELSE
3602         --{
3603             IF p_in_rec.put_messages
3604             THEN
3605             --{
3606                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3607             --}
3608             END IF;
3609             --
3610             --CLOSE open_pickup_dlvy_csr;
3611             --
3612             l_stop_warnings := l_stop_warnings + 1;
3613             --
3614             EXIT;
3615         --}
3616         END IF;
3617         --CLOSE open_pickup_dlvy_csr;
3618     --}
3619     END LOOP;
3620     --
3621     --
3622     -- Check if there are any OP/CO/IT deliveries being dropped off at the stop.
3623     -- All outbound (O/IO) deliveries must be at least set to in-transit.
3624     -- All inbound (not O/IO) deliveries must be at least set to in-transit.
3625     --
3626     -- If current stop is inbound and it is the last stop for delivery, then delivery
3627         -- must be closed.
3628     --
3629     -- If current stop is mixed one, then give a warning
3630     --    - if any inbound delivery (not O/IO) which is not in-transit
3631     --    - if any inbound delivery (not O/IO) which is not closed and this is the
3632     --      last stop for the delivery
3633     --
3634     -- Following loop for cursor open_dropoff_dlvy_csr validates the above.
3635     --
3636     FOR open_dropoff_dlvy_rec IN open_dropoff_dlvy_csr (p_in_rec.stop_id,l_stop_info_rec.stop_location_id,
3637                                                         l_linked_stop_info_rec.stop_id, l_linked_stop_info_rec.stop_location_id)
3638     LOOP
3639     --{
3640         IF p_in_rec.put_messages
3641         THEN
3642         --{
3643             IF open_dropoff_dlvy_rec.shipment_direction IN ( 'O', 'IO' )
3644             OR open_dropoff_dlvy_rec.status_Code IN ( 'OP', 'PA','CO' )
3645             THEN
3646                 l_message_name := 'WSH_DO_STOP_CLOSE_ERROR';
3647             ELSE
3648                 l_message_name := 'WSH_DO_IB_STOP_CLOSE_ERROR';
3649             END IF;
3650             --
3651             FND_MESSAGE.SET_NAME('WSH', l_message_name);
3652             FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3653         --}
3654         END IF;
3655         --
3656         IF l_debug_on THEN
3657            WSH_DEBUG_SV.log(l_module_name,'open_dropoff_dlvy_rec.shipment_direction',open_dropoff_dlvy_rec.shipment_direction);
3658            WSH_DEBUG_SV.log(l_module_name,'open_dropoff_dlvy_rec.status_Code',open_dropoff_dlvy_rec.status_Code);
3659            WSH_DEBUG_SV.log(l_module_name,'open_dropoff_dlvy_rec.ultimate_Dropoff_location_id',open_dropoff_dlvy_rec.ultimate_Dropoff_location_id);
3660         END IF;
3661         --
3662         --
3663         -- note that open_dropoff_dlvy_csr filters the deliveries by status,
3664         -- so that this code will see
3665         --       *  outbound and outbound internal deliveries
3666         --              in status Open or Confirmed
3667         --       *  inbound deliveries in status Open or In-Transit.
3668         --
3669         -- validate that the outbound or internal outbound deliveries being dropped off
3670         -- are not open or confirmed.
3671         --
3672         -- validate that the inbound deliveries are:
3673         --              * neither open
3674         --              * nor in-transit if its main/internal stop is inbound only
3675         --                and at its ultimate drop off location.
3676         --
3677         -- give warning in the event that the drop-off stop has mixed shipments
3678         -- if either condition is met:
3679         --              * the inbound delivery is open
3680         --              * the inbound delivery is in transit
3681         --
3682         -- In other words:
3683         --
3684         -- 1. Outbound deliveries must be in transit or closed
3685         --    for both cases of outbound and mixed stops
3686         --    (i.e., neither open nor confirmed).
3687         --
3688         -- 2. If the stop is Inbound only, inbound deliveries must be:
3689         --       * in-transit if not ultimate drop-off
3690         --       * or closed if ultimate drop-off.
3691         --
3692         -- 3. If the stop is mixed, give warning when inbound deliveries
3693         --    are open or in-transit.
3694         --
3695         IF
3696             -- outbound [open/confirmed] delivery is dropped off at either main or linked stop
3697            open_dropoff_dlvy_rec.shipment_direction IN ( 'O', 'IO' )
3698         OR (     -- inbound delivery at either main or linked stop
3699                  l_virtual_shipments_Type_flag       = 'I'
3700              AND (
3701                       open_dropoff_dlvy_rec.status_Code =  'OP'
3702                    OR (
3703                             open_dropoff_dlvy_rec.status_Code =  'IT'
3704                         AND open_dropoff_dlvy_rec.last_stop   = 1
3705                       )
3706                  )
3707            )
3708         THEN
3709         --{
3710             IF p_in_rec.put_messages
3711             THEN
3712             --{
3713                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3714             --}
3715             END IF;
3716             --
3717             --CLOSE open_dropoff_dlvy_csr;
3718             --
3719             RAISE wsh_util_core.e_not_allowed;
3720         --}
3721         --ELSE
3722         ELSIF
3723              -- stop's shipments type flag is mixed; checking status of inbound deliveries
3724              (
3725                       open_dropoff_dlvy_rec.status_Code =  'OP'
3726                    OR (     -- at the main stop
3727                             open_dropoff_dlvy_rec.status_Code =  'IT'
3728                         AND open_dropoff_dlvy_rec.last_stop   = 1
3729                       )
3730              )
3731                 THEN
3732         --{
3733             IF p_in_rec.put_messages
3734             THEN
3735             --{
3736                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3737             --}
3738             END IF;
3739             --
3740             --CLOSE open_dropoff_dlvy_csr;
3741             --
3742             l_stop_warnings := l_stop_warnings + 1;
3743             --
3744             EXIT;
3745         --}
3746         END IF;
3747     --}
3748     END LOOP;
3749     --
3750     --
3751     -- If any delivery is being picked up at current stop, then check previous leg
3752     -- for each such delivery.
3753     --
3754     -- (Linked internal stop is not checked because it cannot be used as pick up.)
3755     --
3756     -- If drop-off stop of previous leg is open and delivery involved is outbound (O/IO),
3757     -- it is an error.
3758     --
3759     -- If drop-off stop of previous leg is open and delivery involved is inbound (not O/IO),
3760     -- it is an error if current stop is also inbound else it is warning.
3761     --
3762     -- If drop-off stop of previous leg is not open and delivery involved is inbound (not O/IO),
3763     -- it is an error, if delivery is not closed.
3764     --
3765     -- Following loop for cursor prev_leg_csr validates the above.
3766     --
3767     FOR prev_leg_rec IN prev_leg_csr
3768                             (
3769                                 p_stop_id     => p_in_rec.stop_id,
3770                                 p_delivery_id => NULL
3771                             )
3772     LOOP
3773     --{
3774         IF l_debug_on THEN
3775            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_shipments_type_flag',prev_leg_rec.do_stop_shipments_type_flag);
3776            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_status_code',prev_leg_rec.do_stop_status_code);
3777            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_locationId',prev_leg_rec.do_stop_locationId);
3778            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_id',prev_leg_rec.do_stop_id);
3779            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_shipments_type_flag',prev_leg_rec.pu_stop_shipments_type_flag);
3780            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_status_code',prev_leg_rec.pu_stop_status_code);
3781            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_locationId',prev_leg_rec.pu_stop_locationId);
3782            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_id',prev_leg_rec.pu_stop_id);
3783            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.shipment_direction',prev_leg_rec.shipment_direction);
3784            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.dlvy_status_code',prev_leg_rec.dlvy_status_code);
3785            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.delivery_id',prev_leg_rec.delivery_id);
3786            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.dlvy_initialPULocationId',prev_leg_rec.dlvy_initialPULocationId);
3787         END IF;
3788         --
3789         IF prev_leg_rec.do_stop_status_code = 'OP'
3790         THEN
3791         --{
3792             IF p_in_rec.put_messages
3793             THEN
3794             --{
3795               FND_MESSAGE.SET_NAME('WSH','WSH_STOP_CLOSE_DLEG_ERROR');
3796               FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3797             --}
3798             END IF;
3799             --
3800             IF l_virtual_shipments_Type_flag     <> 'M'
3801             OR prev_leg_rec.do_stop_shipments_type_flag = 'O'
3802             OR prev_leg_rec.shipment_direction         IN ( 'O', 'IO' )
3803             THEN
3804             --{
3805                 IF p_in_rec.put_messages
3806                 THEN
3807                 --{
3808                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3809                 --}
3810                 END IF;
3811                 --
3812                 --CLOSE prev_leg_csr;
3813                 --
3814                 RAISE wsh_util_core.e_not_allowed;
3815             --}
3816             ELSE
3817             --{
3818                 IF p_in_rec.put_messages
3819                 THEN
3820                 --{
3821                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3822                 --}
3823                 END IF;
3824                 --
3825                 --CLOSE prev_leg_csr;
3826                 --
3827                 l_stop_warnings := l_stop_warnings + 1;
3828                 --
3829                 EXIT;
3830             --}
3831             END IF;
3832         --}
3833         ELSIF prev_leg_rec.do_stop_status_code     IN ('AR','CL')
3834         AND   prev_leg_rec.shipment_direction  NOT IN ( 'O', 'IO' )
3835         AND   prev_leg_rec.dlvy_status_code        <> 'OP'
3836         --AND   prev_leg_rec.dlvy_status_code        <> 'CL'
3837         THEN
3838         --{
3839             FOR prev_stop_rec IN prev_stop_csr
3840                                   (
3841                                     p_trip_id       => prev_leg_rec.prev_leg_trip_id,
3842                                     p_linked_stop_id => l_linked_stop_info_rec.stop_id,
3843                                     p_stop_sequence => prev_leg_rec.do_stop_sequence_number
3844                                   )
3845             LOOP
3846             --{
3847                 IF p_in_rec.put_messages
3848                 THEN
3849                 --{
3850                     FND_MESSAGE.SET_NAME('WSH','WSH_PREV_STOP_NOT_CLOSED');
3851                     FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3852                     --
3853                     l_prev_stop_name := SUBSTRB(
3854                                                 WSH_UTIL_CORE.get_location_description
3855                                                   (
3856                                                     prev_stop_rec.stop_location_id,
3857                                                     'NEW UI CODE'
3858                                                   ),
3859                                                 1,
3860                                                 60
3861                                              );
3862                     --
3863                     FND_MESSAGE.SET_TOKEN('PREV_STOP_NAME',l_prev_stop_name);
3864                     FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_stop_info_rec.trip_name);
3865                     FND_MESSAGE.SET_TOKEN('PREV_TRIP_NAME',prev_leg_rec.prev_leg_trip_name);
3866                 --}
3867                 END IF;
3868                 --
3869                 IF l_debug_on THEN
3870                    WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.shipments_type_flag',prev_stop_rec.shipments_type_flag);
3871                    WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.stop_location_id',prev_stop_rec.stop_location_id);
3872                 END IF;
3873                 --
3874                 --
3875                 IF l_virtual_shipments_Type_flag      = 'I'
3876                 THEN
3877                 --{
3878                     IF p_in_rec.put_messages
3879                     THEN
3880                     --{
3881                         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3882                     --}
3883                     END IF;
3884                     --
3885                     --CLOSE prev_leg_csr;
3886                     --
3887                     RAISE wsh_util_core.e_not_allowed;
3888                 --}
3889                 ELSE
3890                 --{
3891                     IF p_in_rec.put_messages
3892                     THEN
3893                     --{
3894                         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3895                     --}
3896                     END IF;
3897                     --
3898                     --CLOSE prev_leg_csr;
3899                     --
3900                     l_stop_warnings := l_stop_warnings + 1;
3901                     --
3902                     EXIT;
3903                 --}
3904                 END IF;
3905             --}
3906             END LOOP;
3907             --
3908             IF prev_leg_rec.pu_stop_status_code = 'OP'
3909             THEN
3910             --{
3911                 null;
3912             --}
3913             ELSE
3914             --{
3915                 l_stop_locationId := prev_leg_rec.pu_stop_locationId;
3916                 l_stop_Id         := prev_leg_rec.pu_stop_Id;
3917                 l_dlvy_initialPULocationId := prev_leg_rec.dlvy_initialPULocationId;
3918                 --
3919                 IF l_debug_on THEN
3920                   WSH_DEBUG_SV.logmsg(l_module_name,'Checking all prior legs-1');
3921                 END IF;
3922                 --
3923                 WHILE l_stop_locationId <> l_dlvy_initialPULocationId
3924                 LOOP
3925                 --{
3926                     FOR prev_leg_rec1 IN prev_leg_csr1
3927                                             (
3928                                                 p_stop_id     => l_stop_id,
3929                                                 p_delivery_id => prev_leg_Rec.delivery_id
3930                                             )
3931                     LOOP
3932                     --{
3933 
3934                         IF l_debug_on THEN
3935                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.do_stop_shipments_type_flag',prev_leg_rec1.do_stop_shipments_type_flag);
3936                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.do_stop_status_code',prev_leg_rec1.do_stop_status_code);
3937                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.do_stop_locationId',prev_leg_rec1.do_stop_locationId);
3938                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.do_stop_id',prev_leg_rec1.do_stop_id);
3939                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.pu_stop_shipments_type_flag',prev_leg_rec1.pu_stop_shipments_type_flag);
3940                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.pu_stop_status_code',prev_leg_rec1.pu_stop_status_code);
3941                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.pu_stop_locationId',prev_leg_rec1.pu_stop_locationId);
3942                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.pu_stop_id',prev_leg_rec1.pu_stop_id);
3943                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.shipment_direction',prev_leg_rec1.shipment_direction);
3944                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec1.dlvy_status_code',prev_leg_rec1.dlvy_status_code);
3945                         END IF;
3946                         --
3947                         IF prev_leg_rec1.do_stop_status_code = 'OP'
3948                         THEN
3949                         --{
3950                             IF p_in_rec.put_messages
3951                             THEN
3952                             --{
3953                               FND_MESSAGE.SET_NAME('WSH','WSH_STOP_CLOSE_DLEG_ERROR');
3954                               FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
3955                               --wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3956                             --}
3957                             END IF;
3958                             --
3959                             IF l_virtual_shipments_Type_flag  = 'I'
3960                             THEN
3961                             --{
3962                                 IF p_in_rec.put_messages
3963                                 THEN
3964                                 --{
3965                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
3966                                 --}
3967                                 END IF;
3968                                 --
3969                                 --CLOSE prev_leg_csr;
3970                                 --
3971                                 RAISE wsh_util_core.e_not_allowed;
3972                             --}
3973                             ELSE
3974                             --{
3975                                 IF p_in_rec.put_messages
3976                                 THEN
3977                                 --{
3978                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
3979                                 --}
3980                                 END IF;
3981                                 --
3982                                 --CLOSE prev_leg_csr;
3983                                 --
3984                                 l_stop_warnings := l_stop_warnings + 1;
3985                                 --
3986                                 --EXIT;
3987                             --}
3988                             END IF;
3989                         --}
3990                         END IF;
3991                         --
3992                         --
3993                         FOR prev_stop_rec IN prev_stop_csr
3994                                               (
3995                                                 p_trip_id       => prev_leg_rec1.prev_leg_trip_id,
3996                                                 p_linked_stop_id => l_linked_stop_info_rec.stop_id,
3997 
3998                                                 p_stop_sequence => prev_leg_rec1.do_stop_sequence_number
3999                                               )
4000                         LOOP
4001                         --{
4002                             IF p_in_rec.put_messages
4003                             THEN
4004                             --{
4005                                 FND_MESSAGE.SET_NAME('WSH','WSH_PREV_STOP_NOT_CLOSED');
4006                                 FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
4007                                 --
4008                                 l_prev_stop_name := SUBSTRB(
4009                                                             WSH_UTIL_CORE.get_location_description
4010                                                               (
4011                                                                 prev_stop_rec.stop_location_id,
4012                                                                 'NEW UI CODE'
4013                                                               ),
4014                                                             1,
4015                                                             60
4016                                                          );
4017                                 --
4018                                 FND_MESSAGE.SET_TOKEN('PREV_STOP_NAME',l_prev_stop_name);
4019                                 FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_stop_info_rec.trip_name);
4020                                 FND_MESSAGE.SET_TOKEN('PREV_TRIP_NAME',prev_leg_rec1.prev_leg_trip_name);
4021                             --}
4022                             END IF;
4023                             --
4024                             IF l_debug_on THEN
4025                                WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.shipments_type_flag',prev_stop_rec.shipments_type_flag);
4026                                WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.stop_location_id',prev_stop_rec.stop_location_id);
4027                             END IF;
4028                             --
4029                             --
4030                             IF l_virtual_shipments_Type_flag      = 'I'
4031                             THEN
4032                             --{
4033                                 IF p_in_rec.put_messages
4034                                 THEN
4035                                 --{
4036                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4037                                 --}
4038                                 END IF;
4039                                 --
4040                                 --CLOSE prev_leg_csr;
4041                                 --
4042                                 RAISE wsh_util_core.e_not_allowed;
4043                             --}
4044                             ELSE
4045                             --{
4046                                 IF p_in_rec.put_messages
4047                                 THEN
4048                                 --{
4049                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
4050                                 --}
4051                                 END IF;
4052                                 --
4053                                 --CLOSE prev_leg_csr;
4054                                 --
4055                                 l_stop_warnings := l_stop_warnings + 1;
4056                                 --
4057                                 EXIT;
4058                             --}
4059                             END IF;
4060                         --}
4061                         END LOOP;
4062                         --
4063                         --
4064                         --
4065                         l_stop_locationId := prev_leg_rec1.pu_stop_locationId;
4066                         l_stop_Id         := prev_leg_rec1.pu_stop_Id;
4067                     --}
4068                     END LOOP;
4069                 --}
4070                 END LOOP;
4071             --}
4072             END IF;
4073         --}
4074         END IF;
4075     --}
4076     END LOOP;
4077     --
4078     --
4079     -- If current stop is drop-off for any inbound (not O/IO) delivery,
4080     -- check all its prior stops.
4081     --
4082     -- If any prior stop is open then
4083     --   if current stop is inbound or prior stop is mixed
4084     --   then error
4085     --   else warning.
4086     --
4087     -- Following loop for cursor ib_pickup_csr validates the above.
4088     -- It first finds pickup stop for the delivery on current trip.
4089     -- Then it recursively traverses prior legs for the delivery (By passing pickup stop found above
4090     -- to prev_leg_csr), until it reaches starting(initial)
4091     -- pickup stop for the delivery.
4092     --
4093     FOR ib_pickup_rec IN ib_pickup_csr (p_in_rec.stop_id,
4094                                         l_linked_stop_info_rec.stop_id)
4095     LOOP
4096     --{
4097         IF l_debug_on THEN
4098            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.pu_stop_statusCode',ib_pickup_rec.pu_stop_statusCode);
4099            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.pu_shipments_type_flag',ib_pickup_rec.pu_shipments_type_flag);
4100            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.delivery_statusCode',ib_pickup_rec.delivery_statusCode);
4101            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.pu_stop_locationId',ib_pickup_rec.pu_stop_locationId);
4102            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.pu_stop_id',ib_pickup_rec.pu_stop_id);
4103            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.delivery_id',ib_pickup_rec.delivery_id);
4104            WSH_DEBUG_SV.log(l_module_name,'ib_pickup_rec.dlvy_initialPULocationId',ib_pickup_rec.dlvy_initialPULocationId);
4105         END IF;
4106         --
4107         IF ib_pickup_rec.pu_stop_statusCode in ('OP','AR')
4108         THEN
4109         --{
4110 	  null;
4111         --}
4112         ELSE --- stop is closed, check all prev. legs
4113         --{
4114             --IF ib_pickup_rec.delivery_statusCode = 'CL'
4115             IF ib_pickup_rec.delivery_statusCode in ('IT', 'CL')
4116             THEN
4117             --{
4118                 l_stop_locationId := ib_pickup_rec.pu_stop_locationId;
4119                 l_stop_Id         := ib_pickup_rec.pu_stop_Id;
4120                 --
4121                 IF l_debug_on THEN
4122                   WSH_DEBUG_SV.logmsg(l_module_name,'Checking all prior legs');
4123                 END IF;
4124                 --
4125                 WHILE l_stop_locationId <> ib_pickup_rec.dlvy_initialPULocationId
4126                 LOOP
4127                 --{
4128                     FOR prev_leg_rec IN prev_leg_csr
4129                                             (
4130                                                 p_stop_id     => l_stop_id,
4131                                                 p_delivery_id => ib_pickup_rec.delivery_id
4132                                             )
4133                     LOOP
4134                     --{
4135 
4136                         IF l_debug_on THEN
4137                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_shipments_type_flag',prev_leg_rec.do_stop_shipments_type_flag);
4138                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_status_code',prev_leg_rec.do_stop_status_code);
4139                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_locationId',prev_leg_rec.do_stop_locationId);
4140                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.do_stop_id',prev_leg_rec.do_stop_id);
4141                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_shipments_type_flag',prev_leg_rec.pu_stop_shipments_type_flag);
4142                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_status_code',prev_leg_rec.pu_stop_status_code);
4143                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_locationId',prev_leg_rec.pu_stop_locationId);
4144                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.pu_stop_id',prev_leg_rec.pu_stop_id);
4145                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.shipment_direction',prev_leg_rec.shipment_direction);
4146                            WSH_DEBUG_SV.log(l_module_name,'prev_leg_rec.dlvy_status_code',prev_leg_rec.dlvy_status_code);
4147                         END IF;
4148                         --
4149                         --IF prev_leg_rec.do_stop_status_code in ('OP','AR')
4150                         IF prev_leg_rec.do_stop_status_code in ('OP')
4151                         THEN
4152                         --{
4153                             IF p_in_rec.put_messages
4154                             THEN
4155                             --{
4156                               FND_MESSAGE.SET_NAME('WSH','WSH_STOP_CLOSE_DO_DO_ERROR');
4157                               FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
4158                               --wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4159                             --}
4160                             END IF;
4161                             --
4162                             IF l_virtual_shipments_Type_flag  = 'I'
4163                             THEN
4164                             --{
4165                                 IF p_in_rec.put_messages
4166                                 THEN
4167                                 --{
4168                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4169                                 --}
4170                                 END IF;
4171                                 --
4172                                 --CLOSE prev_leg_csr;
4173                                 --
4174                                 RAISE wsh_util_core.e_not_allowed;
4175                             --}
4176                             ELSE
4177                             --{
4178                                 IF p_in_rec.put_messages
4179                                 THEN
4180                                 --{
4181                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
4182                                 --}
4183                                 END IF;
4184                                 --
4185                                 --CLOSE prev_leg_csr;
4186                                 --
4187                                 l_stop_warnings := l_stop_warnings + 1;
4188                                 --
4189                                 --EXIT;
4190                             --}
4191                             END IF;
4192                         --}
4193                         END IF;
4194                         --
4195                         --
4196                         FOR prev_stop_rec IN prev_stop_csr
4197                                               (
4198                                                 p_trip_id       => prev_leg_rec.prev_leg_trip_id,
4199                                                 p_linked_stop_id => l_linked_stop_info_rec.stop_id,
4200 
4201                                                 p_stop_sequence => prev_leg_rec.do_stop_sequence_number
4202                                               )
4203                         LOOP
4204                         --{
4205                             IF p_in_rec.put_messages
4206                             THEN
4207                             --{
4208                                 FND_MESSAGE.SET_NAME('WSH','WSH_PREV_STOP_NOT_CLOSED');
4209                                 FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
4210                                 --
4211                                 l_prev_stop_name := SUBSTRB(
4212                                                             WSH_UTIL_CORE.get_location_description
4213                                                               (
4214                                                                 prev_stop_rec.stop_location_id,
4215                                                                 'NEW UI CODE'
4216                                                               ),
4217                                                             1,
4218                                                             60
4219                                                          );
4220                                 --
4221                                 FND_MESSAGE.SET_TOKEN('PREV_STOP_NAME',l_prev_stop_name);
4222                                 FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_stop_info_rec.trip_name);
4223                                 FND_MESSAGE.SET_TOKEN('PREV_TRIP_NAME',prev_leg_rec.prev_leg_trip_name);
4224                             --}
4225                             END IF;
4226                             --
4227                             IF l_debug_on THEN
4228                                WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.shipments_type_flag',prev_stop_rec.shipments_type_flag);
4229                                WSH_DEBUG_SV.log(l_module_name,'prev_stop_rec.stop_location_id',prev_stop_rec.stop_location_id);
4230                             END IF;
4231                             --
4232                             --
4233                             IF l_virtual_shipments_Type_flag      = 'I'
4234                             THEN
4235                             --{
4236                                 IF p_in_rec.put_messages
4237                                 THEN
4238                                 --{
4239                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4240                                 --}
4241                                 END IF;
4242                                 --
4243                                 --CLOSE prev_leg_csr;
4244                                 --
4245                                 RAISE wsh_util_core.e_not_allowed;
4246                             --}
4247                             ELSE
4248                             --{
4249                                 IF p_in_rec.put_messages
4250                                 THEN
4251                                 --{
4252                                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
4253                                 --}
4254                                 END IF;
4255                                 --
4256                                 --CLOSE prev_leg_csr;
4257                                 --
4258                                 l_stop_warnings := l_stop_warnings + 1;
4259                                 --
4260                                 EXIT;
4261                             --}
4262                             END IF;
4263                         --}
4264                         END LOOP;
4265                         --
4266                         --
4267                         l_stop_locationId := prev_leg_rec.pu_stop_locationId;
4268                         l_stop_Id         := prev_leg_rec.pu_stop_Id;
4269                     --}
4270                     END LOOP;
4271                 --}
4272                 END LOOP;
4273             --}
4274             END IF;
4275         --}
4276         END IF;
4277         --
4278         --CLOSE ib_pickup_csr;
4279     --}
4280     END LOOP;
4281     --
4282     --
4283     -- Initialize loop variables
4284     --
4285     l_prev_org_id  := -999;
4286     l_err_dlvy_cnt := 0;
4287     l_dlvy_cnt     := 0;
4288     -- J: W/V Changes
4289     l_wv_check_done := FALSE;
4290     --
4291     -- Get all deliveries which start(initial pickup location) at current stop,
4292     -- sorted by organization id
4293     --
4294     FOR l_initial_pu_dlvy_rec IN initial_pu_dlvy_csr(p_in_rec.stop_id)
4295     LOOP
4296     --{
4297         IF l_debug_on THEN
4298            WSH_DEBUG_SV.log(l_module_name,'l_initial_pu_dlvy_rec.organization_id',l_initial_pu_dlvy_rec.organization_id);
4299            WSH_DEBUG_SV.log(l_module_name,'l_prev_org_id',l_prev_org_id);
4300         END IF;
4301         --
4302         -- Since deliveries are sorted by organization_id,
4303         -- peform organization specific checks only when organization id changes
4304         --
4305         IF l_initial_pu_dlvy_rec.organization_id <> l_prev_org_id
4306         THEN
4307         --{
4308                l_prev_org_dlvy_cnt := l_dlvy_cnt;
4309                --
4310                IF l_debug_on THEN
4311                    WSH_DEBUG_SV.log(l_module_name,'l_prev_org_dlvy_cnt',l_prev_org_dlvy_cnt);
4312                    WSH_DEBUG_SV.log(l_module_name,'l_dlvy_cnt',l_dlvy_cnt);
4313                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.Get',WSH_DEBUG_SV.C_PROC_LEVEL);
4314                END IF;
4315                --
4316                WSH_SHIPPING_PARAMS_PVT.Get
4317                 (
4318                   p_organization_id => l_initial_pu_dlvy_rec.organization_id,
4319                   x_param_info      => l_param_info,
4320                   x_return_status   => l_return_status
4321                 );
4322                --
4323                IF l_debug_on THEN
4324                    WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4325                END IF;
4326                --
4327                WSH_UTIL_CORE.api_post_call
4328                     (
4329                         p_return_status => l_return_status,
4330                         x_num_warnings  => l_num_warnings,
4331                         x_num_errors    => l_num_errors
4332                     );
4333 
4334           IF l_debug_on THEN
4335                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters',WSH_DEBUG_SV.C_PROC_LEVEL);
4336                END IF;
4337 
4338          --Bug 3346237: Allow future date and enforce ship method should take values from
4339          --             Global parameters table.
4340 
4341          WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters
4342                 (
4343                   x_param_info      => l_global_info,
4344                   x_return_status   => l_return_status
4345                 );
4346                --
4347 
4348          IF l_debug_on THEN
4349                    WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4350                END IF;
4351                --
4352 
4353          WSH_UTIL_CORE.api_post_call
4354                     (
4355                         p_return_status => l_return_status,
4356                         x_num_warnings  => l_num_warnings,
4357                         x_num_errors    => l_num_errors
4358                     );
4359 
4360          --
4361                --
4362                -- J: W/V Changes
4363                IF NOT l_wv_check_done THEN
4364                  l_wv_check_done := TRUE;
4365 
4366                  IF (l_param_info.percent_fill_basis_flag = 'W' and l_stop_info_rec.departure_gross_weight is NULL) THEN
4367                    FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
4368                    IF l_debug_on THEN
4369                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4370                    END IF;
4371                    --
4372                    FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Stop');
4373                    FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_trip_stops_pvt.get_name(p_in_rec.stop_id,p_in_rec.caller));
4374                    FND_MESSAGE.SET_TOKEN('WV','Weight');
4375                    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4376                    wsh_util_core.add_message(x_return_status);
4377                    l_stop_warnings := l_stop_warnings + 1;
4378                  END IF;
4379 
4380                  IF (l_param_info.percent_fill_basis_flag = 'V' and l_stop_info_rec.departure_volume is NULL) THEN
4381                    FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
4382                    IF l_debug_on THEN
4383                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4384                    END IF;
4385                    --
4386                    FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Stop');
4387                    FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_trip_stops_pvt.get_name(p_in_rec.stop_id,p_in_rec.caller));
4388                    FND_MESSAGE.SET_TOKEN('WV','Volume');
4389                    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4390                    wsh_util_core.add_message(x_return_status);
4391                    l_stop_warnings := l_stop_warnings + 1;
4392                  END IF;
4393                END IF;
4394                --
4395                --
4396                -- Validate stop close date against today's date.
4397                -- Generate error/warning depending on shipping parameter "Allow future date"
4398                --
4399                IF p_in_rec.actual_date > sysdate THEN
4400                --{
4401                    IF p_in_rec.put_messages
4402                    THEN
4403                       FND_MESSAGE.SET_NAME('WSH','WSH_ADEP_DATE_FUTURE');
4404                    END IF;
4405                    --
4406                    IF (NVL(l_global_info.allow_future_ship_date, 'N') = 'Y')
4407                    THEN
4408                    --{
4409                         IF p_in_rec.put_messages
4410                         THEN
4411                         --{
4412                             WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
4413                         --}
4414                         END IF;
4415                         --
4416                         l_stop_warnings := l_stop_warnings + 1;
4417                    --}
4418                    ELSE
4419                    --{
4420                         IF p_in_rec.put_messages
4421                         THEN
4422                         --{
4423                             WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4424                         --}
4425                         END IF;
4426                         --
4427                         --CLOSE initial_pu_dlvy_csr;
4428                         RAISE wsh_util_core.e_not_allowed;
4429                    --}
4430                    END IF;
4431                --}
4432                END IF;
4433                --
4434                --
4435                -- Check for open inventory period
4436                -- Error, if inventory period (corresponding to stop close date) is not open
4437                --
4438                -- Debug Statements
4439                --
4440                IF l_debug_on THEN
4441                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INVTTMTX.TDATECHK',WSH_DEBUG_SV.C_PROC_LEVEL);
4442                END IF;
4443                --
4444                invttmtx.tdatechk(l_initial_pu_dlvy_rec.organization_id, p_in_rec.actual_date, l_period_id, l_open_past_period);
4445 
4446                IF (l_period_id <= 0)
4447                THEN
4448                --{
4449                       IF p_in_rec.put_messages
4450                       THEN
4451                       --{
4452                             FND_MESSAGE.SET_NAME('WSH','WSH_STOP_DATE_UNOPEN_PERIOD');
4453                             FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
4454 			    l_org_name := WSH_UTIL_CORE.Get_Org_Name(l_initial_pu_dlvy_rec.organization_id);
4455                             FND_MESSAGE.SET_TOKEN('ORG_NAME', l_org_name );
4456                             WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4457                       --}
4458                       END IF;
4459                       --
4460                       --CLOSE initial_pu_dlvy_csr;
4461                       RAISE wsh_util_core.e_not_allowed;
4462                --}
4463                END IF;
4464         --}
4465         END IF;
4466 
4467 	 -- Added check for ultimate dropoff location for internal orders, if it changes
4468         IF NVL(l_initial_pu_dlvy_rec.io_location_id, NVL(l_prev_dropoff_location_id, -99))
4469         <> NVL(l_prev_dropoff_location_id, -99) THEN --{
4470            l_prev_dropoff_location_id := l_initial_pu_dlvy_rec.io_location_id;
4471 
4472            OPEN get_org_id(l_initial_pu_dlvy_rec.delivery_id);
4473            FETCH get_org_id INTO l_rec_organization_id, l_dest_type_code;
4474            IF get_org_id%NOTFOUND THEN
4475               l_rec_organization_id := NULL;
4476               l_dest_type_code      := NULL;
4477            END IF;
4478            CLOSE get_org_id;
4479 
4480            IF l_rec_organization_id IS NOT NULL THEN --{
4481               IF l_debug_on THEN
4482                  WSH_DEBUG_SV.logmsg(l_module_name,'Receiving Organization_id : '|| l_rec_organization_id ||
4483                                                    ' , Destination Source Code : '|| l_dest_type_code);
4484               END IF;
4485               -- Validate Accounting Period Open only if its a Direct Transfer or InTransit Shipment to Expense Destination
4486               l_intransit_type   := NULL;
4487               IF l_dest_type_code = 'EXPENSE' THEN
4488                  l_validate_rec_org := TRUE;
4489               ELSE --{
4490                  l_validate_rec_org := FALSE;
4491                  -- Check Shipping Networks to find the Transit Type
4492                  OPEN c_mtl_interorg_parameters( l_initial_pu_dlvy_rec.organization_id, l_rec_organization_id);
4493                  FETCH c_mtl_interorg_parameters INTO l_intransit_type;
4494                  IF c_mtl_interorg_parameters%FOUND THEN
4495                     IF l_debug_on THEN
4496                        WSH_DEBUG_SV.log(l_module_name,'Intransit Type', l_intransit_type);
4497                     END IF;
4498                     IF l_intransit_type = 1 THEN
4499                        l_validate_rec_org := TRUE;
4500                     END IF;
4501                  END IF;
4502                  CLOSE c_mtl_interorg_parameters; --}
4503               END IF;
4504 
4505               IF l_validate_rec_org THEN --{
4506                  -- Check for open inventory period
4507                  IF l_debug_on THEN
4508                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INVTTMTX.TDATECHK',WSH_DEBUG_SV.C_PROC_LEVEL);
4509                  END IF;
4510 
4511                  invttmtx.tdatechk(l_rec_organization_id, p_in_rec.actual_date, l_period_id, l_open_past_period);
4512 
4513                  IF (l_period_id <= 0) THEN
4514                     IF p_in_rec.put_messages THEN
4515                        FND_MESSAGE.SET_NAME('WSH','WSH_STOP_DATE_UNOPEN_PERIOD');
4516                        FND_MESSAGE.SET_TOKEN('STOP_NAME', l_stop_name );
4517                        l_org_name := WSH_UTIL_CORE.Get_Org_Name(l_rec_organization_id);
4518                        FND_MESSAGE.SET_TOKEN('ORG_NAME', l_org_name );
4519                        WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4520                     END IF;
4521                     RAISE wsh_util_core.e_not_allowed;
4522                  END IF;
4523               END IF; --}
4524            END IF; --}
4525         END IF; --}
4526         --
4527         --
4528         -- Check if export compliance check is reqd. for this delivery org.
4529         --
4530         IF l_param_info.export_screening_flag in ('C', 'S', 'A')
4531         THEN
4532         --{
4533              l_itm_mark_dels(1) :=  l_initial_pu_dlvy_rec.delivery_id;
4534              --
4535              IF l_debug_on THEN
4536                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_delivery_validations.check_exception',WSH_DEBUG_SV.C_PROC_LEVEL);
4537              END IF;
4538              --
4539              wsh_delivery_validations.check_exception(
4540                   p_deliveries_tab => l_itm_mark_dels,
4541                   x_exceptions_exist => l_exceptions_exist,
4542                   x_exceptions_tab => l_exceptions_tab,
4543                   x_return_status => l_return_status);
4544              --
4545                IF l_debug_on THEN
4546                    WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4547                END IF;
4548                --
4549              WSH_UTIL_CORE.api_post_call
4550                     (
4551                         p_return_status => l_return_status,
4552                         x_num_warnings  => l_num_warnings,
4553                         x_num_errors    => l_num_errors
4554                     );
4555              --
4556              IF  l_exceptions_exist = 'Y'
4557              AND l_exceptions_tab(1).severity in ('HIGH', 'MEDIUM')
4558              THEN
4559              --{
4560                     IF p_in_rec.caller = 'SHIP_CONFIRM'
4561                     THEN
4562                     --{
4563                         IF p_in_rec.put_messages
4564                         THEN
4565                         --{
4566                              FND_MESSAGE.SET_NAME('WSH','WSH_ITM_COMPLIANCE_WARN');
4567                              FND_MESSAGE.SET_TOKEN('DEL_NAME', l_initial_pu_dlvy_rec.name);
4568                              WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
4569                         --}
4570                         END IF;
4571                         --
4572                         --CLOSE initial_pu_dlvy_csr;
4573                         RAISE wsh_util_core.e_not_allowed_warning;
4574                     --}
4575                     ELSE
4576                     --{
4577                         IF p_in_rec.put_messages
4578                         THEN
4579                         --{
4580                              FND_MESSAGE.SET_NAME('WSH','WSH_ITM_ERROR_STOP');
4581                              FND_MESSAGE.SET_TOKEN('DEL_NAME', l_initial_pu_dlvy_rec.name);
4582                              WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4583                         --}
4584                         END IF;
4585                         --
4586                         --CLOSE initial_pu_dlvy_csr;
4587                         RAISE wsh_util_core.e_not_allowed;
4588                     --}
4589                     END IF;
4590              --}
4591              END IF;
4592         --}
4593         END IF;
4594         --
4595         --
4596         l_in_rec.delivery_id    := l_initial_pu_dlvy_rec.delivery_id;
4597         l_in_rec.name           := l_initial_pu_dlvy_rec.name;
4598         l_in_rec.status_code    := l_initial_pu_dlvy_rec.status_code;
4599         l_in_rec.put_messages   := p_in_rec.put_messages;
4600         l_in_rec.actual_date    := p_in_rec.actual_date;
4601         l_in_rec.manual_flag    := 'N';
4602         l_in_rec.caller         := p_in_rec.caller;
4603         l_in_rec.stop_id        := p_in_Rec.stop_id;
4604         --
4605         --
4606         -- Debug Statements
4607         --
4608         IF l_debug_on THEN
4609             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
4610         END IF;
4611         --
4612         --
4613         -- Check if deliveries can be set to in-transit.
4614         -- If allowed, add delivery to output parameter x_out_rec.initial_pu_dlvy_recTbl
4615         -- If not allowed, add delivery to output parameter x_out_rec.initial_pu_err_dlvy_id_tbl
4616         --
4617         WSH_DELIVERY_VALIDATIONS.check_inTransit
4618             (
4619                p_in_rec         => l_in_rec,
4620                x_return_status  => l_return_status,
4621                x_allowed        => l_Allowed
4622             );
4623         --
4624         IF l_debug_on THEN
4625             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4626             WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
4627         END IF;
4628         --
4629         --
4630         WSH_UTIL_CORE.api_post_call
4631             (
4632                 p_return_status => l_return_status,
4633                 x_num_warnings  => l_num_warnings,
4634                 x_num_errors    => l_num_errors
4635             );
4636         --
4637         IF l_Allowed IN ( 'YW', 'NW' )
4638         THEN
4639             l_num_warnings := l_num_warnings + 1;
4640         END IF;
4641         --
4642         IF l_allowed      NOT IN ('Y', 'YW')
4643         THEN
4644         --{
4645             -- If not allowed, add delivery to output parameter x_out_rec.initial_pu_err_dlvy_id_tbl
4646             --
4647             l_err_dlvy_cnt := l_err_dlvy_cnt + 1;
4648             x_out_rec.initial_pu_err_dlvy_id_tbl(l_err_dlvy_cnt) := l_initial_pu_dlvy_rec.delivery_id;
4649         --}
4650         ELSE
4651         --{
4652             -- If allowed, add delivery to output parameter x_out_rec.initial_pu_dlvy_recTbl
4653             --
4654             l_dlvy_cnt := l_dlvy_cnt + 1;
4655             --
4656             x_out_rec.initial_pu_dlvy_recTbl.id_tbl(l_dlvy_cnt)            := l_initial_pu_dlvy_rec.delivery_id;
4657             x_out_rec.initial_pu_dlvy_recTbl.name_tbl(l_dlvy_cnt)       := l_initial_pu_dlvy_rec.name;
4658             x_out_rec.initial_pu_dlvy_recTbl.orgId_tbl(l_dlvy_cnt)      := l_initial_pu_dlvy_rec.organization_id;
4659             x_out_rec.initial_pu_dlvy_recTbl.statusCode_tbl(l_dlvy_cnt) := l_initial_pu_dlvy_rec.status_code;
4660         --}
4661         END IF;
4662         --
4663         --
4664         --IF l_dlvy_cnt > l_prev_org_dlvy_cnt
4665         --
4666         -- Condition below indicates first delivery being processed for an organization
4667         --
4668         IF l_dlvy_cnt = l_prev_org_dlvy_cnt+1
4669         THEN
4670         --{
4671                --
4672                -- If shipping parameter "Enforce ship method" is true
4673                -- and ship method is null on the trip,  stop close cannot be allowed.
4674                --
4675                IF  l_global_info.enforce_ship_method = 'Y'
4676                AND l_stop_info_rec.ship_method_code IS NULL
4677                THEN
4678                --{
4679                     IF p_in_rec.put_messages
4680                     THEN
4681                     --{
4682                         FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_SM_NOT_FOUND');
4683                         WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
4684                     --}
4685                     END IF;
4686                     --
4687                     --CLOSE initial_pu_dlvy_csr;
4688                     RAISE wsh_util_core.e_not_allowed;
4689                --}
4690                END IF;
4691         --}
4692         END IF;
4693         --
4694         --
4695         l_prev_org_id := l_initial_pu_dlvy_rec.organization_id;
4696     --}
4697     END LOOP;
4698     --
4699     IF l_debug_on THEN
4700            WSH_DEBUG_SV.log(l_module_name,'l_dlvy_cnt',l_dlvy_cnt);
4701            WSH_DEBUG_SV.log(l_module_name,'l_err_dlvy_cnt',l_err_dlvy_cnt);
4702     END IF;
4703     --
4704     -- IF all deliveries errored out, stop close cannot be allowed.
4705     --
4706     IF l_dlvy_cnt = 0 AND l_err_dlvy_cnt > 0
4707     THEN
4708     --{
4709           RAISE wsh_util_core.e_not_allowed;
4710     --}
4711     END IF;
4712     --
4713     --
4714     l_dlvy_cnt := 0;
4715     --
4716     -- Get all deliveries which end(ultimate dropoff location) at current stop,
4717     -- sorted by organization id
4718     --
4719     FOR l_ultimate_do_dlvy_rec IN ultimate_do_dlvy_csr(p_in_rec.stop_id,
4720                                                        l_linked_stop_info_rec.stop_id)
4721     LOOP
4722     --{
4723         --
4724         l_in_rec.delivery_id    := l_ultimate_do_dlvy_rec.delivery_id;
4725         l_in_rec.name           := l_ultimate_do_dlvy_rec.name;
4726         l_in_rec.status_code    := l_ultimate_do_dlvy_rec.status_code;
4727         l_in_rec.put_messages   := p_in_rec.put_messages;
4728         l_in_rec.actual_date    := p_in_rec.actual_date;
4729         l_in_rec.manual_flag    := 'N';
4730         l_in_rec.caller         := p_in_rec.caller;
4731         l_in_rec.stop_id        := l_ultimate_do_dlvy_rec.drop_off_stop_id;
4732         --
4733         --
4734         -- Debug Statements
4735         --
4736         IF l_debug_on THEN
4737             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_close',WSH_DEBUG_SV.C_PROC_LEVEL);
4738         END IF;
4739         --
4740         -- Check if delivery can be closed.
4741         -- If so, add it to out parameter x_out_rec.ultimate_do_dlvy_recTbl
4742         --
4743         WSH_DELIVERY_VALIDATIONS.check_close
4744             (
4745                p_in_rec         => l_in_rec,
4746                x_return_status  => l_return_status,
4747                x_allowed        => l_Allowed
4748             );
4749         --
4750         IF l_debug_on THEN
4751             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4752             WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
4753         END IF;
4754         --
4755         --
4756         WSH_UTIL_CORE.api_post_call
4757             (
4758                 p_return_status => l_return_status,
4759                 x_num_warnings  => l_num_warnings,
4760                 x_num_errors    => l_num_errors
4761             );
4762         --
4763         IF l_Allowed IN ( 'YW', 'NW' )
4764         THEN
4765             l_num_warnings := l_num_warnings + 1;
4766         END IF;
4767         --
4768         IF l_allowed      NOT IN ('Y', 'YW')
4769         THEN
4770         --{
4771             NULL;
4772         --}
4773         ELSE
4774         --{
4775             l_dlvy_cnt := l_dlvy_cnt + 1;
4776             --
4777             x_out_rec.ultimate_do_dlvy_recTbl.id_tbl(l_dlvy_cnt)            := l_ultimate_do_dlvy_rec.delivery_id;
4778             x_out_rec.ultimate_do_dlvy_recTbl.name_tbl(l_dlvy_cnt)       := l_ultimate_do_dlvy_rec.name;
4779             x_out_rec.ultimate_do_dlvy_recTbl.orgId_tbl(l_dlvy_cnt)      := l_ultimate_do_dlvy_rec.organization_id;
4780             x_out_rec.ultimate_do_dlvy_recTbl.statusCode_tbl(l_dlvy_cnt) := l_ultimate_do_dlvy_rec.status_code;
4781         --}
4782         END IF;
4783     --}
4784     END LOOP;
4785     --
4786     --
4787     l_trip_in_rec.trip_id        := l_stop_info_rec.trip_id;
4788     l_trip_in_rec.put_messages   := p_in_rec.put_messages;
4789     l_trip_in_rec.actual_date    := p_in_rec.actual_date;
4790     l_trip_in_rec.manual_flag    := 'N';
4791     l_trip_in_rec.caller         := p_in_rec.caller;
4792     l_trip_in_rec.stop_id        := p_in_Rec.stop_id;
4793     l_trip_in_rec.name           := l_stop_info_rec.trip_name;
4794     l_trip_in_rec.linked_stop_id := l_linked_stop_info_rec.stop_id;
4795     --
4796     IF l_stop_info_rec.trip_status_code = 'OP'
4797     THEN
4798     --{
4799         -- Trip is set to in-transit, whenever any stop closes.
4800         --
4801         -- Debug Statements
4802         --
4803         IF l_debug_on THEN
4804             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
4805         END IF;
4806         --
4807         -- Check if trip can be set to In-Transit.
4808         --
4809         WSH_TRIP_VALIDATIONS.check_inTransit
4810             (
4811                p_in_rec         => l_trip_in_rec,
4812                x_return_status  => l_return_status,
4813                x_allowed        => l_Allowed
4814             );
4815         --
4816         IF l_debug_on THEN
4817             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4818             WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
4819         END IF;
4820         --
4821         --
4822         WSH_UTIL_CORE.api_post_call
4823             (
4824                 p_return_status => l_return_status,
4825                 x_num_warnings  => l_num_warnings,
4826                 x_num_errors    => l_num_errors
4827             );
4828         --
4829         IF l_Allowed = 'N'
4830         THEN
4831             -- If trip cannot be set to In-transit, the stop cannot be closed
4832             l_num_warnings := l_num_warnings + 1;
4833             RAISE wsh_util_core.e_not_allowed;
4834         END IF;
4835         --
4836         IF l_Allowed IN ( 'YW', 'NW' )
4837         THEN
4838             l_num_warnings := l_num_warnings + 1;
4839         END IF;
4840         --
4841         IF l_allowed IN ('Y', 'YW')
4842         THEN
4843         --{
4844             -- If trip can be set to In-transit, set out parameter x_out_rec.trip_new_status_code to 'IT'
4845             x_out_rec.trip_new_status_code := 'IT';
4846         --}
4847         END IF;
4848     --}
4849     ELSIF l_stop_info_rec.trip_status_code = 'IT'
4850     THEN
4851     --{
4852         l_trip_in_rec.new_Status_code := 'CL';
4853         --
4854         -- Debug Statements
4855         --
4856         IF l_debug_on THEN
4857             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.check_close',WSH_DEBUG_SV.C_PROC_LEVEL);
4858         END IF;
4859         --
4860         -- Check if trip can be closed.
4861         --
4862         WSH_TRIP_VALIDATIONS.check_close
4863             (
4864                p_in_rec         => l_trip_in_rec,
4865                x_return_status  => l_return_status,
4866                x_allowed        => l_Allowed
4867             );
4868         --
4869         IF l_debug_on THEN
4870             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4871             WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
4872         END IF;
4873         --
4874         --
4875         WSH_UTIL_CORE.api_post_call
4876             (
4877                 p_return_status => l_return_status,
4878                 x_num_warnings  => l_num_warnings,
4879                 x_num_errors    => l_num_errors
4880             );
4881         --
4882         IF l_Allowed = 'N'
4883         THEN
4884             -- If trip cannot be closed, the stop cannot be closed
4885             l_num_warnings := l_num_warnings + 1;
4886             RAISE wsh_util_core.e_not_allowed;
4887         END IF;
4888         --
4889         IF l_Allowed IN ( 'YW', 'NW' )
4890         THEN
4891             l_num_warnings := l_num_warnings + 1;
4892         END IF;
4893         --
4894         IF l_allowed IN ('Y', 'YW')
4895         THEN
4896         --{
4897             -- If trip can be closed, set out parameter x_out_rec.trip_new_status_code to 'CL'
4898             --
4899             x_out_rec.trip_new_status_code := l_trip_in_rec.new_Status_code;
4900         --}
4901         END IF;
4902     --}
4903     END IF;
4904     --
4905     --
4906     IF l_num_errors > 0
4907     THEN
4908         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
4909         x_out_rec.close_allowed := 'N';
4910     ELSIF l_num_warnings > 0
4911     THEN
4912         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4913     ELSE
4914         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4915     END IF;
4916     --
4917     --
4918     IF l_stop_warnings > 0
4919     THEN
4920         x_out_rec.close_allowed := 'YW';
4921     ELSE
4922         x_out_rec.close_allowed := 'Y';
4923     END IF;
4924     --
4925     -- Debug Statements
4926     --
4927     IF l_debug_on THEN
4928         WSH_DEBUG_SV.pop(l_module_name);
4929     END IF;
4930     --
4931 --}
4932 EXCEPTION
4933 --{
4934     WHEN wsh_util_core.e_not_allowed THEN
4935       IF l_num_warnings > 0
4936       THEN
4937           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4938       ELSE
4939           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4940       END IF;
4941       --
4942       x_out_rec.close_allowed       := 'N';
4943       --
4944       --
4945       IF l_debug_on THEN
4946         WSH_DEBUG_SV.logmsg(l_module_name,'wsh_util_core.e_not_allowed exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4947         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:wsh_util_core.e_not_allowed');
4948       END IF;
4949       --
4950     WHEN wsh_util_core.e_not_allowed_warning THEN
4951       IF l_num_warnings > 0
4952       THEN
4953           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4954       ELSE
4955           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4956       END IF;
4957       --
4958       x_out_Rec.close_allowed := 'NW';
4959       --
4960       --
4961       IF l_debug_on THEN
4962         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4963         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4964       END IF;
4965       --
4966     WHEN FND_API.G_EXC_ERROR THEN
4967 
4968       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4969       --
4970       IF l_debug_on THEN
4971         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4972         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4973       END IF;
4974       --
4975     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4976 
4977       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4978       --
4979       IF l_debug_on THEN
4980         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4981         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4982       END IF;
4983       --
4984     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4985       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4986       --
4987       IF l_debug_on THEN
4988         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4989         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
4990       END IF;
4991       --
4992     WHEN OTHERS THEN
4993       IF linked_stop_info_csr%ISOPEN THEN
4994          CLOSE linked_stop_info_csr;
4995       END IF;
4996       IF wsh_linked_stop_csr%ISOPEN THEN
4997          CLOSE wsh_linked_stop_csr;
4998       END IF;
4999       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5000       wsh_util_core.default_handler('WSH_TRIP_VALIDATIONS.CHECK_STOP_CLOSE',l_module_name);
5001       --
5002       IF l_debug_on THEN
5003         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5004       END IF;
5005       --
5006 --}
5007 END Check_Stop_Close;
5008 --
5009 --
5010 --
5011 --========================================================================
5012 -- PROCEDURE : get_stop_close_date
5013 --
5014 -- PARAMETERS: p_in_rec                Input Record  (Refer to WSHSTVLS.pls for description)
5015 --             p_out_rec               Output record (Refer to WSHSTVLS.pls for description)
5016 --             x_return_status         Return status of API
5017 --
5018 --
5019 -- COMMENT   : This procedure calculate stop close date.
5020 --             This is to be used only for inbound logistics project.
5021 --             This is called when automatically closing stops while processing ASN/Receipt.
5022 --
5023 --             The calculation is as follows:
5024 --             01. Find all deliveries associated with the input stop.
5025 --                 - Deliveries are sorted and grouped as per following order
5026 --                   1. Deliveries starting from this stop. (consider initial pickup date)
5027 --                   2. Deliveries ending at this stop. (consider ultimate dropoff date)
5028 --                   3. Deliveries being picked up at this stop. (consider initial pickup date)
5029 --                   4. Deliveries being dropped of at this stop. (consider ultimate dropoff date)
5030 --             02. API tries to find maximum date within a group.
5031 --             03. Once a date is found, it skips remaining groups.
5032 --             04. If calculated date is less than close date of previous stop,
5033 --                 set it to  close date of previous stop.
5034 --             05. If calculated date is greater than close date of next stop,
5035 --                 set it to  close date of next stop.
5036 --========================================================================
5037 --
5038 PROCEDURE get_stop_close_date
5039     (
5040         p_trip_id               IN          NUMBER,
5041         p_stop_id               IN          NUMBER,
5042         p_stop_sequence_number  IN          NUMBER,
5043         x_stop_close_date       OUT NOCOPY  DATE,
5044         x_return_status         OUT NOCOPY  VARCHAR2
5045     )
5046 IS
5047 --{
5048     --  Find all deliveries associated with the input stop.
5049     --  - Deliveries are sorted and grouped as per following order
5050     --    1. Deliveries starting from this stop. (consider initial pickup date)
5051     --    2. Deliveries ending at this stop. (consider ultimate dropoff date)
5052     --    3. Deliveries being picked up at this stop. (consider initial pickup date)
5053     --    4. Deliveries being dropped of at this stop. (consider ultimate dropoff date)
5054     --
5055     CURSOR ib_dlvy_cur (p_stop_id IN NUMBER)
5056     IS
5057         SELECT  wnd.initial_pickup_date delivery_Date,
5058                 DECODE(wts.stop_location_id,wnd.initial_pickup_location_id,1,3) order_seq
5059         FROM    wsh_new_deliveries  wnd,
5060                 wsh_delivery_legs   wdl,
5061                 wsh_trip_stops      wts
5062         WHERE   wts.stop_id             = p_stop_id
5063         AND     wdl.pick_up_stop_id     = wts.stop_id
5064         AND     wdl.delivery_id         = wnd.delivery_id
5065         UNION
5066         SELECT  wnd.ultimate_dropoff_date   delivery_Date,
5067                 DECODE(wts.stop_location_id,wnd.ultimate_dropoff_location_id,2,4) order_seq
5068         FROM    wsh_new_deliveries  wnd,
5069                 wsh_delivery_legs   wdl,
5070                 wsh_trip_stops      wts
5071         WHERE   wts.stop_id             = p_stop_id
5072         AND     wdl.drop_off_stop_id    = wts.stop_id
5073         AND     wdl.delivery_id         = wnd.delivery_id
5074         ORDER BY order_seq ASC;
5075     --
5076     CURSOR prev_stop_cur (p_trip_id IN NUMBER, p_stop_sequence_number IN NUMBER)
5077     IS
5078         SELECT actual_departure_date
5079         FROM   wsh_trip_stops
5080         WHERE  trip_id                      = p_trip_id
5081         AND    stop_sequence_number         < p_stop_sequence_number
5082         ORDER BY stop_sequence_number DESC;
5083     --
5084     CURSOR next_stop_cur (p_trip_id IN NUMBER, p_stop_sequence_number IN NUMBER)
5085     IS
5086         SELECT actual_departure_date
5087         FROM   wsh_trip_stops
5088         WHERE  trip_id                      = p_trip_id
5089         AND    stop_sequence_number         > p_stop_sequence_number
5090         ORDER BY stop_sequence_number ASC;
5091     --
5092     l_return_status         VARCHAR2(1);
5093     l_num_warnings          NUMBER;
5094     l_num_errors            NUMBER;
5095     --
5096     l_actual_date           DATE    := NULL;
5097     l_prev_order_seq        NUMBER  := 0;
5098     --
5099     l_prevStop_departure_date   DATE;
5100     l_nextStop_departure_date   DATE;
5101     --
5102     l_debug_on              BOOLEAN;
5103     --
5104     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'get_stop_close_date';
5105     --
5106 --}
5107 BEGIN
5108 --{
5109     --
5110     -- Debug Statements
5111     --
5112     --
5113     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5114     --
5115     IF l_debug_on IS NULL
5116     THEN
5117        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5118     END IF;
5119     --
5120     IF l_debug_on THEN
5121        WSH_DEBUG_SV.push(l_module_name);
5122        --
5123        WSH_DEBUG_SV.log(l_module_name,'p_trip_id',p_trip_id);
5124        WSH_DEBUG_SV.log(l_module_name,'p_stop_id',p_stop_id);
5125        WSH_DEBUG_SV.log(l_module_name,'p_stop_sequence_number',p_stop_sequence_number);
5126     END IF;
5127     --
5128     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5129     --
5130     FOR ib_dlvy_rec IN ib_dlvy_cur(p_stop_id)
5131     LOOP
5132     --{
5133         IF l_prev_order_seq <> ib_dlvy_rec.order_seq
5134         AND l_actual_date   IS NOT NULL
5135         THEN
5136             EXIT;
5137         END IF;
5138         --
5139         IF l_actual_date IS NULL
5140         OR l_actual_date < ib_dlvy_rec.delivery_date
5141         THEN
5142             l_actual_date   := ib_dlvy_rec.delivery_date;
5143         END IF ;
5144         --
5145         l_prev_order_seq    := ib_dlvy_rec.order_seq;
5146     --}
5147     END LOOP;
5148     --
5149     --
5150     l_actual_date := NVL(l_actual_date,SYSDATE);
5151     --
5152     l_prevStop_departure_date   := NULL;
5153     l_nextStop_departure_date   := NULL;
5154     --
5155     OPEN prev_stop_cur
5156          (
5157             p_trip_id               => p_trip_id,
5158             p_stop_sequence_number  => p_stop_sequence_number
5159          );
5160     --
5161     FETCH prev_stop_cur INTO l_prevStop_departure_date;
5162     CLOSE prev_stop_cur;
5163     --
5164     IF l_actual_date < l_prevStop_departure_date
5165     THEN
5166         l_actual_date := l_prevStop_departure_date;
5167     END IF;
5168     --
5169     OPEN next_stop_cur
5170          (
5171             p_trip_id               => p_trip_id,
5172             p_stop_sequence_number  => p_stop_sequence_number
5173          );
5174     --
5175     FETCH next_stop_cur INTO l_nextStop_departure_date;
5176     CLOSE next_stop_cur;
5177     --
5178     IF l_actual_date > l_nextStop_departure_date
5179     THEN
5180         l_actual_date := l_nextStop_departure_date;
5181     END IF;
5182     --
5183     x_stop_close_date   := l_actual_date;
5184     --
5185     -- Debug Statements
5186     --
5187     IF l_debug_on THEN
5188         WSH_DEBUG_SV.log(l_module_name,'l_actual_date',l_actual_date);
5189         WSH_DEBUG_SV.pop(l_module_name);
5190     END IF;
5191 --}
5192 EXCEPTION
5193       --
5194     WHEN FND_API.G_EXC_ERROR THEN
5195 
5196       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5197       --
5198       IF l_debug_on THEN
5199         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5200         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
5201       END IF;
5202       --
5203     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5204 
5205       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5206       --
5207       IF l_debug_on THEN
5208         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5209         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
5210       END IF;
5211       --
5212     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
5213       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5214       --
5215       IF l_debug_on THEN
5216         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5217         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
5218       END IF;
5219       --
5220     WHEN OTHERS THEN
5221 
5222         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5223         wsh_util_core.default_handler('WSH_TRIP_STOPS_VALIDATIONS.get_stop_close_date', l_module_name);
5224         IF l_debug_on THEN
5225            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5226         END IF;
5227         --
5228 END get_stop_close_date;
5229 
5230 
5231 
5232 -- J-IB-NPARIKH-}
5233 
5234 
5235 --3509004:public api change
5236 PROCEDURE   user_non_updatable_columns
5237      (p_user_in_rec     IN WSH_TRIP_STOPS_PVT.trip_stop_rec_type,
5238       p_out_rec         IN WSH_TRIP_STOPS_PVT.trip_stop_rec_type,
5239       p_in_rec          IN WSH_TRIP_STOPS_GRP.stopInRecType,
5240       x_return_status   OUT NOCOPY    VARCHAR2)
5241 
5242 IS
5243 l_attributes VARCHAR2(2500) ;
5244 k         number;
5245 l_return_status VARCHAR2(1);
5246 l_debug_on BOOLEAN;
5247 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'user_non_updatable_columns';
5248 
5249 BEGIN
5250 
5251   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5252   --
5253   IF l_debug_on IS NULL
5254   THEN
5255       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5256   END IF;
5257   --
5258   IF l_debug_on THEN
5259     --
5260     WSH_DEBUG_SV.push(l_module_name);
5261     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.caller',p_in_rec.caller);
5262     --
5263   END IF;
5264   --
5265   x_return_status := FND_API.G_RET_STS_SUCCESS;
5266   --
5267   IF     p_user_in_rec.STOP_ID <> FND_API.G_MISS_NUM
5268       AND NVL(p_user_in_rec.STOP_ID,-99) <> NVL(p_out_rec.STOP_ID,-99)
5269   THEN
5270        l_attributes := l_attributes || 'STOP_ID, ';
5271   END IF;
5272 
5273   IF     p_user_in_rec.TRIP_ID <> FND_API.G_MISS_NUM
5274       AND NVL(p_user_in_rec.TRIP_ID,-99) <> NVL(p_out_rec.TRIP_ID,-99)
5275   THEN
5276        l_attributes := l_attributes || 'TRIP_ID, ';
5277   END IF;
5278 
5279   IF     p_user_in_rec.STOP_LOCATION_ID <> FND_API.G_MISS_NUM
5280       AND NVL(p_user_in_rec.STOP_LOCATION_ID,-99) <> NVL(p_out_rec.STOP_LOCATION_ID,-99)
5281   THEN
5282        l_attributes := l_attributes || 'STOP_LOCATION_ID, ';
5283   END IF;
5284 
5285   IF     p_user_in_rec.STATUS_CODE <> FND_API.G_MISS_CHAR
5286       AND NVL(p_user_in_rec.STATUS_CODE,'!!!') <> NVL(p_out_rec.STATUS_CODE,'!!!')
5287   THEN
5288        l_attributes := l_attributes || 'STATUS_CODE, ';
5289   END IF;
5290 
5291   IF     p_user_in_rec.STOP_SEQUENCE_NUMBER <> FND_API.G_MISS_NUM
5292       AND NVL(p_user_in_rec.STOP_SEQUENCE_NUMBER,-99) <> NVL(p_out_rec.STOP_SEQUENCE_NUMBER,-99)
5293   THEN
5294        l_attributes := l_attributes || 'STOP_SEQUENCE_NUMBER, ';
5295   END IF;
5296 
5297   IF     p_user_in_rec.PLANNED_ARRIVAL_DATE <> FND_API.G_MISS_DATE
5298       AND NVL(p_user_in_rec.PLANNED_ARRIVAL_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.PLANNED_ARRIVAL_DATE,TO_DATE('2','j'))
5299   THEN
5300        l_attributes := l_attributes || 'PLANNED_ARRIVAL_DATE, ';
5301   END IF;
5302 
5303   IF     p_user_in_rec.PLANNED_DEPARTURE_DATE <> FND_API.G_MISS_DATE
5304       AND NVL(p_user_in_rec.PLANNED_DEPARTURE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.PLANNED_DEPARTURE_DATE,TO_DATE('2','j'))
5305   THEN
5306        l_attributes := l_attributes || 'PLANNED_DEPARTURE_DATE, ';
5307   END IF;
5308 
5309   IF     p_user_in_rec.ACTUAL_ARRIVAL_DATE <> FND_API.G_MISS_DATE
5310       AND NVL(p_user_in_rec.ACTUAL_ARRIVAL_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.ACTUAL_ARRIVAL_DATE,TO_DATE('2','j'))
5311   THEN
5312        l_attributes := l_attributes || 'ACTUAL_ARRIVAL_DATE, ';
5313   END IF;
5314 
5315   IF     p_user_in_rec.ACTUAL_DEPARTURE_DATE <> FND_API.G_MISS_DATE
5316       AND NVL(p_user_in_rec.ACTUAL_DEPARTURE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.ACTUAL_DEPARTURE_DATE,TO_DATE('2','j'))
5317   THEN
5318        l_attributes := l_attributes || 'ACTUAL_DEPARTURE_DATE, ';
5319   END IF;
5320 
5321   IF     p_user_in_rec.DEPARTURE_GROSS_WEIGHT <> FND_API.G_MISS_NUM
5322       AND NVL(p_user_in_rec.DEPARTURE_GROSS_WEIGHT,-99) <> NVL(p_out_rec.DEPARTURE_GROSS_WEIGHT,-99)
5323   THEN
5324        l_attributes := l_attributes || 'DEPARTURE_GROSS_WEIGHT, ';
5325   END IF;
5326 
5327   IF     p_user_in_rec.DEPARTURE_NET_WEIGHT <> FND_API.G_MISS_NUM
5328       AND NVL(p_user_in_rec.DEPARTURE_NET_WEIGHT,-99) <> NVL(p_out_rec.DEPARTURE_NET_WEIGHT,-99)
5329   THEN
5330        l_attributes := l_attributes || 'DEPARTURE_NET_WEIGHT, ';
5331   END IF;
5332 
5333   IF     p_user_in_rec.WEIGHT_UOM_CODE <> FND_API.G_MISS_CHAR
5334       AND NVL(p_user_in_rec.WEIGHT_UOM_CODE,'!!!') <> NVL(p_out_rec.WEIGHT_UOM_CODE,'!!!')
5335   THEN
5336        l_attributes := l_attributes || 'WEIGHT_UOM_CODE, ';
5337   END IF;
5338 
5339   IF     p_user_in_rec.DEPARTURE_VOLUME <> FND_API.G_MISS_NUM
5340       AND NVL(p_user_in_rec.DEPARTURE_VOLUME,-99) <> NVL(p_out_rec.DEPARTURE_VOLUME,-99)
5341   THEN
5342        l_attributes := l_attributes || 'DEPARTURE_VOLUME, ';
5343   END IF;
5344 
5345   IF     p_user_in_rec.VOLUME_UOM_CODE <> FND_API.G_MISS_CHAR
5346       AND NVL(p_user_in_rec.VOLUME_UOM_CODE,'!!!') <> NVL(p_out_rec.VOLUME_UOM_CODE,'!!!')
5347   THEN
5348        l_attributes := l_attributes || 'VOLUME_UOM_CODE, ';
5349   END IF;
5350 
5351   IF     p_user_in_rec.DEPARTURE_SEAL_CODE <> FND_API.G_MISS_CHAR
5352       AND NVL(p_user_in_rec.DEPARTURE_SEAL_CODE,'!!!') <> NVL(p_out_rec.DEPARTURE_SEAL_CODE,'!!!')
5353   THEN
5354        l_attributes := l_attributes || 'DEPARTURE_SEAL_CODE, ';
5355   END IF;
5356 
5357   IF     p_user_in_rec.DEPARTURE_FILL_PERCENT <> FND_API.G_MISS_NUM
5358       AND NVL(p_user_in_rec.DEPARTURE_FILL_PERCENT,-99) <> NVL(p_out_rec.DEPARTURE_FILL_PERCENT,-99)
5359   THEN
5360        l_attributes := l_attributes || 'DEPARTURE_FILL_PERCENT, ';
5361   END IF;
5362 
5363   IF     p_user_in_rec.TP_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
5364       AND NVL(p_user_in_rec.TP_ATTRIBUTE_CATEGORY,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE_CATEGORY,'!!!')
5365   THEN
5366        l_attributes := l_attributes || 'TP_ATTRIBUTE_CATEGORY, ';
5367   END IF;
5368 
5369   IF     p_user_in_rec.TP_ATTRIBUTE1 <> FND_API.G_MISS_CHAR
5370       AND NVL(p_user_in_rec.TP_ATTRIBUTE1,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE1,'!!!')
5371   THEN
5372        l_attributes := l_attributes || 'TP_ATTRIBUTE1, ';
5373   END IF;
5374 
5375   IF     p_user_in_rec.TP_ATTRIBUTE2 <> FND_API.G_MISS_CHAR
5376       AND NVL(p_user_in_rec.TP_ATTRIBUTE2,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE2,'!!!')
5377   THEN
5378        l_attributes := l_attributes || 'TP_ATTRIBUTE2, ';
5379   END IF;
5380 
5381   IF     p_user_in_rec.TP_ATTRIBUTE3 <> FND_API.G_MISS_CHAR
5382       AND NVL(p_user_in_rec.TP_ATTRIBUTE3,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE3,'!!!')
5383   THEN
5384        l_attributes := l_attributes || 'TP_ATTRIBUTE3, ';
5385   END IF;
5386 
5387   IF     p_user_in_rec.TP_ATTRIBUTE4 <> FND_API.G_MISS_CHAR
5388       AND NVL(p_user_in_rec.TP_ATTRIBUTE4,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE4,'!!!')
5389   THEN
5390        l_attributes := l_attributes || 'TP_ATTRIBUTE4, ';
5391   END IF;
5392 
5393   IF     p_user_in_rec.TP_ATTRIBUTE5 <> FND_API.G_MISS_CHAR
5394       AND NVL(p_user_in_rec.TP_ATTRIBUTE5,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE5,'!!!')
5395   THEN
5396        l_attributes := l_attributes || 'TP_ATTRIBUTE5, ';
5397   END IF;
5398 
5399   IF     p_user_in_rec.TP_ATTRIBUTE6 <> FND_API.G_MISS_CHAR
5400       AND NVL(p_user_in_rec.TP_ATTRIBUTE6,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE6,'!!!')
5401   THEN
5402        l_attributes := l_attributes || 'TP_ATTRIBUTE6, ';
5403   END IF;
5404 
5405   IF     p_user_in_rec.TP_ATTRIBUTE7 <> FND_API.G_MISS_CHAR
5406       AND NVL(p_user_in_rec.TP_ATTRIBUTE7,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE7,'!!!')
5407   THEN
5408        l_attributes := l_attributes || 'TP_ATTRIBUTE7, ';
5409   END IF;
5410 
5411   IF     p_user_in_rec.TP_ATTRIBUTE8 <> FND_API.G_MISS_CHAR
5412       AND NVL(p_user_in_rec.TP_ATTRIBUTE8,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE8,'!!!')
5413   THEN
5414        l_attributes := l_attributes || 'TP_ATTRIBUTE8, ';
5415   END IF;
5416 
5417   IF     p_user_in_rec.TP_ATTRIBUTE9 <> FND_API.G_MISS_CHAR
5418       AND NVL(p_user_in_rec.TP_ATTRIBUTE9,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE9,'!!!')
5419   THEN
5420        l_attributes := l_attributes || 'TP_ATTRIBUTE9, ';
5421   END IF;
5422 
5423   IF     p_user_in_rec.TP_ATTRIBUTE10 <> FND_API.G_MISS_CHAR
5424       AND NVL(p_user_in_rec.TP_ATTRIBUTE10,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE10,'!!!')
5425   THEN
5426        l_attributes := l_attributes || 'TP_ATTRIBUTE10, ';
5427   END IF;
5428 
5429   IF     p_user_in_rec.TP_ATTRIBUTE11 <> FND_API.G_MISS_CHAR
5430       AND NVL(p_user_in_rec.TP_ATTRIBUTE11,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE11,'!!!')
5431   THEN
5432        l_attributes := l_attributes || 'TP_ATTRIBUTE11, ';
5433   END IF;
5434 
5435   IF     p_user_in_rec.TP_ATTRIBUTE12 <> FND_API.G_MISS_CHAR
5436       AND NVL(p_user_in_rec.TP_ATTRIBUTE12,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE12,'!!!')
5437   THEN
5438        l_attributes := l_attributes || 'TP_ATTRIBUTE12, ';
5439   END IF;
5440 
5441   IF     p_user_in_rec.TP_ATTRIBUTE13 <> FND_API.G_MISS_CHAR
5442       AND NVL(p_user_in_rec.TP_ATTRIBUTE13,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE13,'!!!')
5443   THEN
5444        l_attributes := l_attributes || 'TP_ATTRIBUTE13, ';
5445   END IF;
5446 
5447   IF     p_user_in_rec.TP_ATTRIBUTE14 <> FND_API.G_MISS_CHAR
5448       AND NVL(p_user_in_rec.TP_ATTRIBUTE14,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE14,'!!!')
5449   THEN
5450        l_attributes := l_attributes || 'TP_ATTRIBUTE14, ';
5451   END IF;
5452 
5453   IF     p_user_in_rec.TP_ATTRIBUTE15 <> FND_API.G_MISS_CHAR
5454       AND NVL(p_user_in_rec.TP_ATTRIBUTE15,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE15,'!!!')
5455   THEN
5456        l_attributes := l_attributes || 'TP_ATTRIBUTE15, ';
5457   END IF;
5458 
5459   IF     p_user_in_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
5460       AND NVL(p_user_in_rec.ATTRIBUTE_CATEGORY,'!!!') <> NVL(p_out_rec.ATTRIBUTE_CATEGORY,'!!!')
5461   THEN
5462        l_attributes := l_attributes || 'ATTRIBUTE_CATEGORY, ';
5463   END IF;
5464 
5465   IF     p_user_in_rec.ATTRIBUTE1 <> FND_API.G_MISS_CHAR
5466       AND NVL(p_user_in_rec.ATTRIBUTE1,'!!!') <> NVL(p_out_rec.ATTRIBUTE1,'!!!')
5467   THEN
5468        l_attributes := l_attributes || 'ATTRIBUTE1, ';
5469   END IF;
5470 
5471   IF     p_user_in_rec.ATTRIBUTE2 <> FND_API.G_MISS_CHAR
5472       AND NVL(p_user_in_rec.ATTRIBUTE2,'!!!') <> NVL(p_out_rec.ATTRIBUTE2,'!!!')
5473   THEN
5474        l_attributes := l_attributes || 'ATTRIBUTE2, ';
5475   END IF;
5476 
5477   IF     p_user_in_rec.ATTRIBUTE3 <> FND_API.G_MISS_CHAR
5478       AND NVL(p_user_in_rec.ATTRIBUTE3,'!!!') <> NVL(p_out_rec.ATTRIBUTE3,'!!!')
5479   THEN
5480        l_attributes := l_attributes || 'ATTRIBUTE3, ';
5481   END IF;
5482 
5483   IF     p_user_in_rec.ATTRIBUTE4 <> FND_API.G_MISS_CHAR
5484       AND NVL(p_user_in_rec.ATTRIBUTE4,'!!!') <> NVL(p_out_rec.ATTRIBUTE4,'!!!')
5485   THEN
5486        l_attributes := l_attributes || 'ATTRIBUTE4, ';
5487   END IF;
5488 
5489   IF     p_user_in_rec.ATTRIBUTE5 <> FND_API.G_MISS_CHAR
5490       AND NVL(p_user_in_rec.ATTRIBUTE5,'!!!') <> NVL(p_out_rec.ATTRIBUTE5,'!!!')
5491   THEN
5492        l_attributes := l_attributes || 'ATTRIBUTE5, ';
5493   END IF;
5494 
5495   IF     p_user_in_rec.ATTRIBUTE6 <> FND_API.G_MISS_CHAR
5496       AND NVL(p_user_in_rec.ATTRIBUTE6,'!!!') <> NVL(p_out_rec.ATTRIBUTE6,'!!!')
5497   THEN
5498        l_attributes := l_attributes || 'ATTRIBUTE6, ';
5499   END IF;
5500 
5501   IF     p_user_in_rec.ATTRIBUTE7 <> FND_API.G_MISS_CHAR
5502       AND NVL(p_user_in_rec.ATTRIBUTE7,'!!!') <> NVL(p_out_rec.ATTRIBUTE7,'!!!')
5503   THEN
5504        l_attributes := l_attributes || 'ATTRIBUTE7, ';
5505   END IF;
5506 
5507   IF     p_user_in_rec.ATTRIBUTE8 <> FND_API.G_MISS_CHAR
5508       AND NVL(p_user_in_rec.ATTRIBUTE8,'!!!') <> NVL(p_out_rec.ATTRIBUTE8,'!!!')
5509   THEN
5510        l_attributes := l_attributes || 'ATTRIBUTE8, ';
5511   END IF;
5512 
5513   IF     p_user_in_rec.ATTRIBUTE9 <> FND_API.G_MISS_CHAR
5514       AND NVL(p_user_in_rec.ATTRIBUTE9,'!!!') <> NVL(p_out_rec.ATTRIBUTE9,'!!!')
5515   THEN
5516        l_attributes := l_attributes || 'ATTRIBUTE9, ';
5517   END IF;
5518 
5519   IF     p_user_in_rec.ATTRIBUTE10 <> FND_API.G_MISS_CHAR
5520       AND NVL(p_user_in_rec.ATTRIBUTE10,'!!!') <> NVL(p_out_rec.ATTRIBUTE10,'!!!')
5521   THEN
5522        l_attributes := l_attributes || 'ATTRIBUTE10, ';
5523   END IF;
5524 
5525   IF     p_user_in_rec.ATTRIBUTE11 <> FND_API.G_MISS_CHAR
5526       AND NVL(p_user_in_rec.ATTRIBUTE11,'!!!') <> NVL(p_out_rec.ATTRIBUTE11,'!!!')
5527   THEN
5528        l_attributes := l_attributes || 'ATTRIBUTE11, ';
5529   END IF;
5530 
5531   IF     p_user_in_rec.ATTRIBUTE12 <> FND_API.G_MISS_CHAR
5532       AND NVL(p_user_in_rec.ATTRIBUTE12,'!!!') <> NVL(p_out_rec.ATTRIBUTE12,'!!!')
5533   THEN
5534        l_attributes := l_attributes || 'ATTRIBUTE12, ';
5535   END IF;
5536 
5537   IF     p_user_in_rec.ATTRIBUTE13 <> FND_API.G_MISS_CHAR
5538       AND NVL(p_user_in_rec.ATTRIBUTE13,'!!!') <> NVL(p_out_rec.ATTRIBUTE13,'!!!')
5539   THEN
5540        l_attributes := l_attributes || 'ATTRIBUTE13, ';
5541   END IF;
5542 
5543   IF     p_user_in_rec.ATTRIBUTE14 <> FND_API.G_MISS_CHAR
5544       AND NVL(p_user_in_rec.ATTRIBUTE14,'!!!') <> NVL(p_out_rec.ATTRIBUTE14,'!!!')
5545   THEN
5546        l_attributes := l_attributes || 'ATTRIBUTE14, ';
5547   END IF;
5548 
5549   IF     p_user_in_rec.ATTRIBUTE15 <> FND_API.G_MISS_CHAR
5550       AND NVL(p_user_in_rec.ATTRIBUTE15,'!!!') <> NVL(p_out_rec.ATTRIBUTE15,'!!!')
5551   THEN
5552        l_attributes := l_attributes || 'ATTRIBUTE15, ';
5553   END IF;
5554 
5555   /**
5556   -- Bug 3613650
5557   -- Need not compare against WHO columns
5558   IF     p_user_in_rec.CREATION_DATE <> FND_API.G_MISS_DATE
5559       AND NVL(p_user_in_rec.CREATION_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.CREATION_DATE,TO_DATE('2','j'))
5560   THEN
5561        l_attributes := l_attributes || 'CREATION_DATE, ';
5562   END IF;
5563 
5564   IF     p_user_in_rec.CREATED_BY <> FND_API.G_MISS_NUM
5565       AND NVL(p_user_in_rec.CREATED_BY,-99) <> NVL(p_out_rec.CREATED_BY,-99)
5566   THEN
5567        l_attributes := l_attributes || 'CREATED_BY, ';
5568   END IF;
5569 
5570   IF     p_user_in_rec.LAST_UPDATE_DATE <> FND_API.G_MISS_DATE
5571       AND NVL(p_user_in_rec.LAST_UPDATE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.LAST_UPDATE_DATE,TO_DATE('2','j'))
5572   THEN
5573        l_attributes := l_attributes || 'LAST_UPDATE_DATE, ';
5574   END IF;
5575 
5576   IF     p_user_in_rec.LAST_UPDATED_BY <> FND_API.G_MISS_NUM
5577       AND NVL(p_user_in_rec.LAST_UPDATED_BY,-99) <> NVL(p_out_rec.LAST_UPDATED_BY,-99)
5578   THEN
5579        l_attributes := l_attributes || 'LAST_UPDATED_BY, ';
5580   END IF;
5581 
5582   IF     p_user_in_rec.LAST_UPDATE_LOGIN <> FND_API.G_MISS_NUM
5583       AND NVL(p_user_in_rec.LAST_UPDATE_LOGIN,-99) <> NVL(p_out_rec.LAST_UPDATE_LOGIN,-99)
5584   THEN
5585        l_attributes := l_attributes || 'LAST_UPDATE_LOGIN, ';
5586   END IF;
5587 
5588   IF     p_user_in_rec.PROGRAM_APPLICATION_ID <> FND_API.G_MISS_NUM
5589       AND NVL(p_user_in_rec.PROGRAM_APPLICATION_ID,-99) <> NVL(p_out_rec.PROGRAM_APPLICATION_ID,-99)
5590   THEN
5591        l_attributes := l_attributes || 'PROGRAM_APPLICATION_ID, ';
5592   END IF;
5593 
5594   IF     p_user_in_rec.PROGRAM_ID <> FND_API.G_MISS_NUM
5595       AND NVL(p_user_in_rec.PROGRAM_ID,-99) <> NVL(p_out_rec.PROGRAM_ID,-99)
5596   THEN
5597        l_attributes := l_attributes || 'PROGRAM_ID, ';
5598   END IF;
5599 
5600   IF     p_user_in_rec.PROGRAM_UPDATE_DATE <> FND_API.G_MISS_DATE
5601       AND NVL(p_user_in_rec.PROGRAM_UPDATE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.PROGRAM_UPDATE_DATE,TO_DATE('2','j'))
5602   THEN
5603        l_attributes := l_attributes || 'PROGRAM_UPDATE_DATE, ';
5604   END IF;
5605 
5606   IF     p_user_in_rec.REQUEST_ID <> FND_API.G_MISS_NUM
5607       AND NVL(p_user_in_rec.REQUEST_ID,-99) <> NVL(p_out_rec.REQUEST_ID,-99)
5608   THEN
5609        l_attributes := l_attributes || 'REQUEST_ID, ';
5610   END IF;
5611 
5612 bug 3613650 */
5613 
5614   IF     p_user_in_rec.WSH_LOCATION_ID <> FND_API.G_MISS_NUM
5615       AND NVL(p_user_in_rec.WSH_LOCATION_ID,-99) <> NVL(p_out_rec.WSH_LOCATION_ID,-99)
5616   THEN
5617        l_attributes := l_attributes || 'WSH_LOCATION_ID, ';
5618   END IF;
5619 
5620   IF     p_user_in_rec.TRACKING_DRILLDOWN_FLAG <> FND_API.G_MISS_CHAR
5621       AND NVL(p_user_in_rec.TRACKING_DRILLDOWN_FLAG,'!!!') <> NVL(p_out_rec.TRACKING_DRILLDOWN_FLAG,'!!!')
5622   THEN
5623        l_attributes := l_attributes || 'TRACKING_DRILLDOWN_FLAG, ';
5624   END IF;
5625 
5626   IF     p_user_in_rec.TRACKING_REMARKS <> FND_API.G_MISS_CHAR
5627       AND NVL(p_user_in_rec.TRACKING_REMARKS,'!!!') <> NVL(p_out_rec.TRACKING_REMARKS,'!!!')
5628   THEN
5629        l_attributes := l_attributes || 'TRACKING_REMARKS, ';
5630   END IF;
5631 
5632   IF     p_user_in_rec.CARRIER_EST_DEPARTURE_DATE <> FND_API.G_MISS_DATE
5633       AND NVL(p_user_in_rec.CARRIER_EST_DEPARTURE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.CARRIER_EST_DEPARTURE_DATE,TO_DATE('2','j'))
5634   THEN
5635        l_attributes := l_attributes || 'CARRIER_EST_DEPARTURE_DATE, ';
5636   END IF;
5637 
5638   IF     p_user_in_rec.CARRIER_EST_ARRIVAL_DATE <> FND_API.G_MISS_DATE
5639       AND NVL(p_user_in_rec.CARRIER_EST_ARRIVAL_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.CARRIER_EST_ARRIVAL_DATE,TO_DATE('2','j'))
5640   THEN
5641        l_attributes := l_attributes || 'CARRIER_EST_ARRIVAL_DATE, ';
5642   END IF;
5643 
5644   IF     p_user_in_rec.LOADING_START_DATETIME <> FND_API.G_MISS_DATE
5645       AND NVL(p_user_in_rec.LOADING_START_DATETIME,TO_DATE('2','j')) <> NVL(p_out_rec.LOADING_START_DATETIME,TO_DATE('2','j'))
5646   THEN
5647        l_attributes := l_attributes || 'LOADING_START_DATETIME, ';
5648   END IF;
5649 
5650   IF     p_user_in_rec.LOADING_END_DATETIME <> FND_API.G_MISS_DATE
5651       AND NVL(p_user_in_rec.LOADING_END_DATETIME,TO_DATE('2','j')) <> NVL(p_out_rec.LOADING_END_DATETIME,TO_DATE('2','j'))
5652   THEN
5653        l_attributes := l_attributes || 'LOADING_END_DATETIME, ';
5654   END IF;
5655 
5656   IF     p_user_in_rec.UNLOADING_START_DATETIME <> FND_API.G_MISS_DATE
5657       AND NVL(p_user_in_rec.UNLOADING_START_DATETIME,TO_DATE('2','j')) <> NVL(p_out_rec.UNLOADING_START_DATETIME,TO_DATE('2','j'))
5658   THEN
5659        l_attributes := l_attributes || 'UNLOADING_START_DATETIME, ';
5660   END IF;
5661 
5662   IF     p_user_in_rec.UNLOADING_END_DATETIME <> FND_API.G_MISS_DATE
5663       AND NVL(p_user_in_rec.UNLOADING_END_DATETIME,TO_DATE('2','j')) <> NVL(p_out_rec.UNLOADING_END_DATETIME,TO_DATE('2','j'))
5664   THEN
5665        l_attributes := l_attributes || 'UNLOADING_END_DATETIME, ';
5666   END IF;
5667 
5668   IF     p_user_in_rec.ROWID <> FND_API.G_MISS_CHAR
5669       AND NVL(p_user_in_rec.ROWID,'!!!') <> NVL(p_out_rec.ROWID,'!!!')
5670   THEN
5671        l_attributes := l_attributes || 'ROWID, ';
5672   END IF;
5673 
5674   IF     p_user_in_rec.TRIP_NAME <> FND_API.G_MISS_CHAR
5675       AND NVL(p_user_in_rec.TRIP_NAME,'!!!') <> NVL(p_out_rec.TRIP_NAME,'!!!')
5676   THEN
5677        l_attributes := l_attributes || 'TRIP_NAME, ';
5678   END IF;
5679 
5680   IF     p_user_in_rec.STOP_LOCATION_CODE <> FND_API.G_MISS_CHAR
5681       AND NVL(p_user_in_rec.STOP_LOCATION_CODE,'!!!') <> NVL(p_out_rec.STOP_LOCATION_CODE,'!!!')
5682   THEN
5683        l_attributes := l_attributes || 'STOP_LOCATION_CODE, ';
5684   END IF;
5685 
5686   IF     p_user_in_rec.WEIGHT_UOM_DESC <> FND_API.G_MISS_CHAR
5687       AND NVL(p_user_in_rec.WEIGHT_UOM_DESC,'!!!') <> NVL(p_out_rec.WEIGHT_UOM_DESC,'!!!')
5688   THEN
5689        l_attributes := l_attributes || 'WEIGHT_UOM_DESC, ';
5690   END IF;
5691 
5692   IF     p_user_in_rec.VOLUME_UOM_DESC <> FND_API.G_MISS_CHAR
5693       AND NVL(p_user_in_rec.VOLUME_UOM_DESC,'!!!') <> NVL(p_out_rec.VOLUME_UOM_DESC,'!!!')
5694   THEN
5695        l_attributes := l_attributes || 'VOLUME_UOM_DESC, ';
5696   END IF;
5697 
5698   IF     p_user_in_rec.LOCK_STOP_ID <> FND_API.G_MISS_NUM
5699       AND NVL(p_user_in_rec.LOCK_STOP_ID,-99) <> NVL(p_out_rec.LOCK_STOP_ID,-99)
5700   THEN
5701        l_attributes := l_attributes || 'LOCK_STOP_ID, ';
5702   END IF;
5703 
5704   IF     p_user_in_rec.PENDING_INTERFACE_FLAG <> FND_API.G_MISS_CHAR
5705       AND NVL(p_user_in_rec.PENDING_INTERFACE_FLAG,'!!!') <> NVL(p_out_rec.PENDING_INTERFACE_FLAG,'!!!')
5706   THEN
5707        l_attributes := l_attributes || 'PENDING_INTERFACE_FLAG, ';
5708   END IF;
5709 
5710   IF     p_user_in_rec.TRANSACTION_HEADER_ID <> FND_API.G_MISS_NUM
5711       AND NVL(p_user_in_rec.TRANSACTION_HEADER_ID,-99) <> NVL(p_out_rec.TRANSACTION_HEADER_ID,-99)
5712   THEN
5713        l_attributes := l_attributes || 'TRANSACTION_HEADER_ID, ';
5714   END IF;
5715 
5716   IF     p_user_in_rec.SHIPMENTS_TYPE_FLAG <> FND_API.G_MISS_CHAR
5717       AND NVL(p_user_in_rec.SHIPMENTS_TYPE_FLAG,'!!!') <> NVL(p_out_rec.SHIPMENTS_TYPE_FLAG,'!!!')
5718   THEN
5719        l_attributes := l_attributes || 'SHIPMENTS_TYPE_FLAG, ';
5720   END IF;
5721 
5722   IF     p_user_in_rec.WV_FROZEN_FLAG <> FND_API.G_MISS_CHAR
5723       AND NVL(p_user_in_rec.WV_FROZEN_FLAG,'!!!') <> NVL(p_out_rec.WV_FROZEN_FLAG,'!!!')
5724   THEN
5725        l_attributes := l_attributes || 'WV_FROZEN_FLAG, ';
5726   END IF;
5727 
5728   IF     p_user_in_rec.WKEND_LAYOVER_STOPS <> FND_API.G_MISS_NUM
5729       AND NVL(p_user_in_rec.WKEND_LAYOVER_STOPS,-99) <> NVL(p_out_rec.WKEND_LAYOVER_STOPS,-99)
5730   THEN
5731        l_attributes := l_attributes || 'WKEND_LAYOVER_STOPS, ';
5732   END IF;
5733 
5734   IF     p_user_in_rec.WKDAY_LAYOVER_STOPS <> FND_API.G_MISS_NUM
5735       AND NVL(p_user_in_rec.WKDAY_LAYOVER_STOPS,-99) <> NVL(p_out_rec.WKDAY_LAYOVER_STOPS,-99)
5736   THEN
5737        l_attributes := l_attributes || 'WKDAY_LAYOVER_STOPS, ';
5738   END IF;
5739 
5740   IF     p_user_in_rec.TP_STOP_ID <> FND_API.G_MISS_NUM
5741       AND NVL(p_user_in_rec.TP_STOP_ID,-99) <> NVL(p_out_rec.TP_STOP_ID,-99)
5742   THEN
5743        l_attributes := l_attributes || 'TP_STOP_ID, ';
5744   END IF;
5745 
5746   IF l_debug_on THEN
5747        WSH_DEBUG_SV.log(l_module_name,'l_attributes',l_attributes);
5748        WSH_DEBUG_SV.log(l_module_name,'length(l_attributes)',length(l_attributes));
5749   END IF;
5750 
5751 
5752   IF l_attributes IS NULL    THEN
5753      --no message to be shown to the user
5754      IF l_debug_on THEN
5755        WSH_DEBUG_SV.pop(l_module_name);
5756      END IF;
5757      RETURN;
5758   ELSE
5759      Wsh_Utilities.process_message(
5760                                     p_entity => 'STOP',
5761                                     p_entity_name => p_out_rec.STOP_ID,
5762                                     p_attributes => l_attributes,
5763                                     x_return_status => l_return_status
5764 				  );
5765 
5766      IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
5767      THEN
5768        x_return_status := l_return_status;
5769        IF l_debug_on THEN
5770          wsh_debug_sv.logmsg(l_module_name,'Error returned by wsh_utilities.process_message',WSH_DEBUG_SV.C_PROC_LEVEL);
5771          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5772          wsh_debug_sv.pop(l_module_name);
5773        END IF;
5774        return;
5775      ELSE
5776        x_return_status := wsh_util_core.G_RET_STS_WARNING;
5777      END IF;
5778   END IF;
5779 
5780   IF l_debug_on THEN
5781     WSH_DEBUG_SV.pop(l_module_name);
5782   END IF;
5783   --
5784 
5785 
5786 EXCEPTION
5787     WHEN OTHERS THEN
5788         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5789         --
5790         IF l_debug_on THEN
5791            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5792         END IF;
5793         --
5794 END user_non_updatable_columns;
5795 
5796 
5797 END WSH_TRIP_STOPS_VALIDATIONS;