DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_DELIVERY_LEGS_ACTIONS

Source


1 PACKAGE BODY WSH_DELIVERY_LEGS_ACTIONS as
2 /* $Header: WSHDGACB.pls 120.13 2008/03/18 11:53:24 jnpinto noship $ */
3 
4 --
5 G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_DELIVERY_LEGS_ACTIONS';
6 --
7 g_wms_installed WSH_UTIL_CORE.Column_Tab_Type;
8 
9 CURSOR C_IS_FIRST_LEG(p_trip_id in number, p_delivery_id in number, p_pickup_loc_id in number) is
10 select delivery_leg_id
11 from wsh_delivery_legs l, wsh_trip_stops s
12 where s.trip_id = p_trip_id
13 and   l.delivery_id = p_delivery_id
14 and   s.stop_id = l.pick_up_stop_id
15 and   s.stop_location_id = p_pickup_loc_id;
16 
17 -- Forward Declaration
18 FUNCTION Check_Rate_Trip_Contents(p_trip_id IN NUMBER,
19                                   x_return_status OUT nocopy VARCHAR2)
20 RETURN VARCHAR2;
21 
22 
23 PROCEDURE Assign_Deliveries
24       (p_del_rows      IN   wsh_util_core.id_tab_type,
25        p_trip_id      IN  NUMBER := NULL,
26        p_pickup_stop_id     IN   NUMBER := NULL,
27        p_pickup_stop_seq      IN   NUMBER := NULL,
28        p_dropoff_stop_id    IN  NUMBER := NULL,
29        p_dropoff_stop_seq   IN  NUMBER := NULL,
30        p_pickup_location_id IN   NUMBER := NULL,
31        p_dropoff_location_id   IN   NUMBER := NULL,
32        p_create_flag      IN  VARCHAR2 := NULL,
33        x_leg_rows       OUT NOCOPY wsh_util_core.id_tab_type,
34        x_return_status    OUT NOCOPY  VARCHAR2,
35        p_caller           IN VARCHAR2,
36        p_pickup_arr_date   	IN   	DATE := to_date(NULL),
37        p_pickup_dep_date   	IN   	DATE := to_date(NULL),
38        p_dropoff_arr_date  	IN   	DATE := to_date(NULL),
39        p_dropoff_dep_date  	IN   	DATE := to_date(NULL),
40        p_sc_pickup_date         IN      DATE   DEFAULT NULL,
41        p_sc_dropoff_date        IN      DATE   DEFAULT NULL
42 ) IS
43 
44 CURSOR stop_exists (l_trip_stop_id IN NUMBER) IS
45 SELECT   status_code ,
46          NVL(SHIPMENTS_TYPE_FLAG,'O') SHIPMENTS_TYPE_FLAG,   -- J-IB-NPARIKH
47          stop_location_id
48 FROM   wsh_trip_stops
49 WHERE stop_id = l_trip_stop_id;
50 
51 CURSOR delivery_info (del_id IN NUMBER) IS
52 SELECT  initial_pickup_location_id,
53 initial_pickup_date,
54 ultimate_dropoff_location_id,
55 ultimate_dropoff_date,
56 organization_id,
57 status_code,
58 nvl(shipment_direction,'O') shipment_direction,    -- J-IB-NPARIKH
59 -- J: W/V Changes
60 gross_weight,
61 net_weight,
62 volume,
63 mode_of_transport,
64 freight_terms_code,
65 name,
66 customer_id
67 FROM    wsh_new_deliveries
68 WHERE delivery_id = del_id;
69 
70 /* J TP Release : dels can be assigned to planned trips as long as they don't create new stops */
71 cursor get_trip_status(c_trip_id in NUMBER) is
72 select status_code, planned_flag,
73        NVL(SHIPMENTS_TYPE_FLAG,'O') SHIPMENTS_TYPE_FLAG,   -- J-IB-NPARIKH
74        mode_of_transport
75 from wsh_trips
76 where trip_id = c_trip_id
77 FOR UPDATE NOWAIT;
78 
79 l_plannedflag VARCHAR2(1);
80 
81 CURSOR leg_exists ( del_id IN NUMBER) IS
82 SELECT   dg.delivery_leg_id,
83 st1.stop_location_id,
84 st2.stop_location_id
85 FROM    wsh_trip_stops st1,
86 wsh_trip_stops st2,
87 wsh_delivery_legs dg
88 WHERE st1.stop_id = dg.pick_up_stop_id AND
89 st2.stop_id = dg.drop_off_stop_id AND
90 st1.trip_id = p_trip_id AND
91 st2.trip_id = p_trip_id AND
92 dg.delivery_id = del_id
93 FOR UPDATE NOWAIT;
94 /* H integration added sequence number logic */
95 
96 
97 e_lock_error         EXCEPTION;
98 pragma EXCEPTION_INIT(e_lock_error,-54);
99 
100 --bug 4266758
101 --This cursor is opened (instead of get_stop cursor)
102 --When the following conditions are met
103 --a) The caller is form.
104 --b) The action is assign to trip
105 --c) The mod is PAD
106 --d) In Assign delivery to trip window, the "New" check box is checked.
107 
108 CURSOR get_stop_new (l_location_id IN NUMBER,
109                  l_PLANNED_ARRIVAL_DATE DATE,
110                  l_PLANNED_DEPARTURE_DATE DATE
111                 ) IS
112 SELECT   stop_id, stop_sequence_number,
113          NVL(SHIPMENTS_TYPE_FLAG,'O') SHIPMENTS_TYPE_FLAG   -- J-IB-NPARIKH
114 FROM    wsh_trip_stops
115 WHERE stop_location_id = l_location_id AND
116 trip_id = p_trip_id AND
117 status_code <> 'CL'
118 AND PLANNED_ARRIVAL_DATE = NVL(l_PLANNED_ARRIVAL_DATE,PLANNED_ARRIVAL_DATE)
119 AND PLANNED_DEPARTURE_DATE = NVL(l_PLANNED_DEPARTURE_DATE,PLANNED_DEPARTURE_DATE)
120 FOR UPDATE NOWAIT;
121 
122 CURSOR get_stop (l_location_id IN NUMBER, l_stop_sequence IN NUMBER
123                 ) IS
124 SELECT   stop_id, stop_sequence_number,
125          NVL(SHIPMENTS_TYPE_FLAG,'O') SHIPMENTS_TYPE_FLAG   -- J-IB-NPARIKH
126 FROM    wsh_trip_stops
127 WHERE stop_location_id = l_location_id AND
128 trip_id = p_trip_id AND
129 stop_sequence_number = nvl(l_stop_sequence,stop_sequence_number) AND
130 status_code <> 'CL'
131 FOR UPDATE NOWAIT;
132 
133 CURSOR max_leg_seq_number ( del_id IN NUMBER) IS
134 SELECT   max(dg.sequence_number)
135 FROM    wsh_delivery_legs dg
136 WHERE dg.delivery_id = del_id;
137 
138 CURSOR get_sequence (l_stop_id NUMBER) IS
139 SELECT stop_sequence_number
140 FROM wsh_trip_stops
141 WHERE stop_id = l_stop_id;
142 
143 CURSOR c_check_dummystops(p_stop_id IN NUMBER, p_trip_id IN NUMBER) IS
144 SELECT 'Y'
145 FROM wsh_trip_stops wts1, wsh_trip_stops wts2
146 WHERE wts1.trip_id=p_trip_id
147 AND wts2.trip_id=p_trip_id
148 AND wts1.stop_id<>wts2.stop_id
149 AND wts1.stop_id=p_stop_id
150 AND ((wts2.physical_location_id=wts1.stop_location_id AND wts2.physical_stop_id IS NULL)
151      OR (wts1.physical_location_id=wts2.stop_location_id AND  wts1.physical_stop_id IS NULL)
152     );
153 
154 -- c_get_seq_numbers will derive the sequence numbers
155 -- for all stop locations populated in wsh_tmp
156 CURSOR c_get_seq_numbers is
157   select id,rownum*10
158   from(
159     select id
160     from   wsh_tmp
161     order  by to_date(column1,'DD-MM-RRRR HH24:MI:SS'),flag desc
162   );
163 
164 -- Get Previous stops W/V converted to c_wt_uom/c_vol_uom
165 CURSOR c_get_prev_seq_wv(p_trip_id NUMBER, p_stop_seq NUMBER, p_wt_uom VARCHAR2, p_vol_uom VARCHAR2) IS
166 select wsh_wv_utils.convert_uom( WEIGHT_UOM_CODE, p_wt_uom, DEPARTURE_GROSS_WEIGHT, null) gross_weight,
167        wsh_wv_utils.convert_uom( WEIGHT_UOM_CODE, p_wt_uom, DEPARTURE_NET_WEIGHT, null) net_weight,
168        wsh_wv_utils.convert_uom( VOLUME_UOM_CODE, p_vol_uom, DEPARTURE_VOLUME, null) volume
169 from   wsh_trip_stops
170 where  trip_id = p_trip_id
171 and    stop_sequence_number < p_stop_seq
172 order  by stop_sequence_number desc;
173 
174 CURSOR c_next_seq_exists (p_trip_id NUMBER, p_stop_seq NUMBER) IS
175 select 'x'
176 from   wsh_trip_stops
177 where  trip_id = p_trip_id
178 and    stop_sequence_number > p_stop_seq;
179 
180 l_customer_id NUMBER;
181 l_del_rows                wsh_util_core.id_tab_type;
182 l_pickup_location_id_tbl  wsh_util_core.id_tab_type;
183 l_pickup_date_tbl         wsh_util_core.date_Tab_Type;
184 l_dropoff_location_id_tbl wsh_util_core.id_tab_type;
185 l_dropoff_date_tbl        wsh_util_core.date_Tab_Type;
186 l_organization_id_tbl     wsh_util_core.id_tab_type;
187 l_status_code_tbl         wsh_util_core.column_Tab_Type;
188 l_shipment_direction_tbl  wsh_util_core.column_Tab_Type;
189 l_gross_weight_tbl        wsh_util_core.id_tab_type;
190 l_net_weight_tbl          wsh_util_core.id_tab_type;
191 l_volume_tbl              wsh_util_core.id_tab_type;
192 l_mode_of_transport_tbl   wsh_util_core.column_tab_type;
193 l_freight_terms_code_tbl  wsh_util_core.column_tab_type;
194 l_name_tbl                wsh_util_core.column_tab_type;
195 
196 l_id         wsh_util_core.id_tab_type;
197 l_seq        wsh_util_core.id_tab_type;
198 l_pregen_seq VARCHAR2(1);
199 l_sysdate    DATE;
200 l_tmp_date   DATE := NULL;
201 l_gross_weight NUMBER;
202 l_net_weight   NUMBER;
203 l_volume       NUMBER;
204 l_dummy        VARCHAR2(1);
205 l_next_seq_exists BOOLEAN;
206 
207 l_check_dummystops VARCHAR2(1);
208 
209 l_count NUMBER := 0;
210 
211 
212 --2709662
213 l_trip_stop_info    wsh_trip_stops_pvt.trip_stop_rec_type;
214 l_delivery_leg_info   wsh_delivery_legs_pvt.delivery_leg_rec_type;
215 l_rowid        VARCHAR2(30);
216 l_pickup_stop_id    NUMBER;
217 l_dropoff_stop_id   NUMBER;
218 l_pickup_location_id  NUMBER;
219 l_del_pu_location_id  NUMBER;
220 l_old_pickup_loc_id   NUMBER;
221 l_pickup_date     DATE;
222 l_dropoff_location_id NUMBER;
223 l_old_dropoff_loc_id   NUMBER;
224 l_dropoff_date      DATE;
225 l_org_id        NUMBER;
226 l_leg_id        NUMBER;
227 l_leg_seq_number    NUMBER;
228 i          BINARY_INTEGER;
229 l_flag        VARCHAR2(2);
230 l_default_wt_uom    VARCHAR2(3);
231 l_default_vol_uom   VARCHAR2(3);
232 l_num_error     NUMBER := 0;
233 l_num_warn      NUMBER := 0;
234 l_trip_status     VARCHAR2(2);
235 l_delivery_status        VARCHAR2(2);
236 -- J: W/V Changes
237 l_org_gross_wt  NUMBER;
238 l_org_net_wt  NUMBER;
239 l_org_vol  NUMBER;
240 l_trip_mode_of_transport VARCHAR2(30);
241 l_delivery_mode_of_transport VARCHAR2(30);
242 l_dummy_leg_id NUMBER;
243 l_dlvy_trip_tbl WMS_SHIPPING_INTERFACE_GRP.g_dlvy_trip_tbl;
244 l_msg_count NUMBER;
245 l_msg_data VARCHAR2(2000);
246 
247 bad_trip_stop     EXCEPTION;
248 invalid_trip          EXCEPTION;
249 mark_reprice_error              EXCEPTION;
250 rate_trip_contents_fail EXCEPTION;
251 
252 /* new variables for stop sequence number */
253 l_stop_sequence_number      NUMBER;
254 l_pickup_stop_seq        NUMBER;
255 l_dropoff_stop_seq        NUMBER;
256 l_new_flag            VARCHAR2(30);
257 
258 /* H integration  for Multi Leg */
259 l_stop_rec  WSH_TRIP_STOPS_PVT.TRIP_STOP_REC_TYPE;
260 l_pub_stop_rec  WSH_TRIP_STOPS_PUB.TRIP_STOP_PUB_REC_TYPE;
261 l_trip_rec  WSH_TRIPS_PVT.TRIP_REC_TYPE;
262 l_pub_trip_rec  WSH_TRIPS_PUB.TRIP_PUB_REC_TYPE;
263 l_return_status VARCHAR2(30);
264 
265 l_pickup_seq    NUMBER;
266 l_dropoff_seq   NUMBER;
267 l_stop_tab WSH_UTIL_CORE.id_tab_type;  -- DBI Project
268 l_dbi_rs       VARCHAR2(1);            -- DBI Project
269 --
270 l_debug_on BOOLEAN;
271 --
272 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ASSIGN_DELIVERIES';
273 --
274 l_shipment_direction        VARCHAR2(30);
275 l_trip_shipments_type_flag  VARCHAR2(30);
276 l_trip_shipments_type_flag_new  VARCHAR2(30);
277 l_stop_shipments_type_flag  VARCHAR2(30);
278 l_pu_stop_shipments_type_flag  VARCHAR2(30);
279 l_do_stop_shipments_type_flag  VARCHAR2(30);
280 l_pu_stop_shipType_flag_orig   VARCHAR2(30);
281 l_do_stop_shipType_flag_orig   VARCHAR2(30);
282 l_mixed_stops               BOOLEAN := FALSE;
283 l_ob_to_ib_stop             BOOLEAN := FALSE;
284 --
285 l_shipping_control     VARCHAR2(30);
286 l_routing_response_id  NUMBER;
287 l_routing_request_flag VARCHAR2(30);
288 l_chkStop_status_code  VARCHAR2(30);
289 l_has_mixed_deliveries  VARCHAR2(10);
290 l_stop_opened           VARCHAR2(10);
291 l_stop_in_rec           WSH_TRIP_STOPS_VALIDATIONS.chkClose_in_rec_type;
292 l_leg_complete		boolean;
293 
294 l_exception_name varchar2(30);
295 l_msg   varchar2(2000);
296 l_exception_msg_count NUMBER;
297 l_exception_msg_data varchar2(2000);
298 l_dummy_exception_id NUMBER;
299 l_rate_trip_dels     VARCHAR2(1);
300 l_rate_del           VARCHAR2(1);
301 l_dummy_del          NUMBER;
302 l_freight_terms_code VARCHAR2(30);
303 
304 -- 3516052
305 l_pickup_arr_date   DATE;
306 l_pickup_dep_date   DATE;
307 l_dropoff_arr_date   DATE;
308 l_dropoff_dep_date   DATE;
309 l_trip_ids           wsh_util_core.id_tab_type;
310 l_dummy_trip_ids     wsh_util_core.id_tab_type;
311 l_phys_trip_dropoff_loc_id NUMBER;
312 l_trip_pickup_loc_id      NUMBER;
313 l_trip_dropoff_loc_id     NUMBER;
314 l_delivery_name           wsh_new_deliveries.name%TYPE;
315 
316 l_stop_seq_mode NUMBER; --SSN Frontport
317 
318 -- K LPN CONV. rv
319 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
320 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
321 e_return_excp EXCEPTION;
322 -- K LPN CONV. rv
323 
324 --
325 -- Bug 5336308
326 -- Added these two exceptions and cleaned up code to not use GOTO statements
327 -- Also removed savepoint before_Create_stop and corresponding rollbacks
328 -- since they were redundant.
329 --
330 e_InvalidDelExcep	EXCEPTION;
331 e_CommonExcep           EXCEPTION;
332 --
333 BEGIN
334    -- check if trip is not closed
335    --
336    -- Debug Statements
337    --
338    --
339    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
340    --
341    IF l_debug_on IS NULL
342    THEN
343       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
344    END IF;
345 
346    IF l_debug_on THEN
347       WSH_DEBUG_SV.push(l_module_name);
348       --
349       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
350       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_STOP_ID',P_PICKUP_STOP_ID);
351       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_STOP_SEQ',P_PICKUP_STOP_SEQ);
352       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_STOP_ID',P_DROPOFF_STOP_ID);
353       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_STOP_SEQ',P_DROPOFF_STOP_SEQ);
354       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_LOCATION_ID',P_PICKUP_LOCATION_ID);
355       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_LOCATION_ID',P_DROPOFF_LOCATION_ID);
356       WSH_DEBUG_SV.log(l_module_name,'P_CREATE_FLAG',P_CREATE_FLAG);
357       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_ARR_DATE',P_PICKUP_ARR_DATE);
358       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_DEP_DATE',P_PICKUP_DEP_DATE);
359       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_ARR_DATE',P_DROPOFF_ARR_DATE);
360       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_DEP_DATE',P_DROPOFF_DEP_DATE);
361       WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
362       WSH_DEBUG_SV.log(l_module_name,'p_sc_pickup_date',p_sc_pickup_date);
363       WSH_DEBUG_SV.log(l_module_name,'p_sc_dropoff_date',p_sc_dropoff_date);
364    END IF;
365    --
366    l_stop_seq_mode := WSH_TRIPS_ACTIONS.GET_STOP_SEQ_MODE;
367    --
368    open get_trip_status(p_trip_id);
369    fetch get_trip_status into l_trip_status, l_plannedflag, l_trip_shipments_type_flag, l_trip_mode_of_transport;
370    close get_trip_status;
371    --
372     --
373     IF l_debug_on THEN
374         WSH_DEBUG_SV.log(l_module_name,'l_trip_shipments_type_flag',l_trip_shipments_type_flag);
375     END IF;
376     --
377    IF  l_trip_status = 'CL'
378    THEN
379       RAISE Invalid_Trip;
380    END IF;
381    --
382 /* J TP Release : dels can be assigned to planned trips as long as they don't create new stops */
383    -- Check if the pickup and dropoff stops exist and are not closed
384 
385    IF (p_pickup_stop_id IS NOT NULL) THEN
386 
387       OPEN stop_exists (p_pickup_stop_id);
388       FETCH stop_exists INTO l_flag, l_pu_stop_shipments_type_flag, l_trip_pickup_loc_id;
389 
390       IF (stop_exists%NOTFOUND) THEN
391          l_flag := 'XX';
392          RAISE bad_trip_stop;   -- J-IB-NPARIKH
393       END IF;
394 
395       CLOSE stop_exists;
396 
397       IF (l_flag NOT IN ('OP', 'AR'))
398       THEN
399          RAISE bad_trip_stop;
400       END IF;
401 
402       l_pickup_stop_id := p_pickup_stop_id;
403       l_pu_stop_shipType_flag_orig := l_pu_stop_shipments_type_flag;
404    END IF;
405 
406    IF (p_dropoff_stop_id IS NOT NULL) THEN
407 
408       OPEN stop_exists (p_dropoff_stop_id);
409       FETCH stop_exists INTO l_flag, l_do_stop_shipments_type_flag, l_trip_dropoff_loc_id;
410 
411       IF (stop_exists%NOTFOUND) THEN
412          l_flag := 'XX';
413          RAISE bad_trip_stop;   -- J-IB-NPARIKH
414       END IF;
415 
416       CLOSE stop_exists;
417 
418       IF  (l_flag NOT IN ('OP', 'AR'))
419       THEN
420          RAISE bad_trip_stop;
421       END IF;
422 
423       l_dropoff_stop_id := p_dropoff_stop_id;
424       l_do_stop_shipType_flag_orig := l_do_stop_shipments_type_flag;
425    END IF;
426 
427    --a) Check if pickup is being passed as same as dropoff - if yes, error
428    IF p_pickup_location_id IS NOT NULL THEN
429       l_trip_pickup_loc_id := p_pickup_location_id;
430    END IF;
431    IF p_dropoff_location_id IS NOT NULL THEN
432       l_trip_dropoff_loc_id := p_dropoff_location_id;
433    END IF;
434 
435    --get the physical locations
436    IF (p_dropoff_stop_id IS NOT NULL OR p_dropoff_location_id IS NOT NULL) THEN
437              WSH_LOCATIONS_PKG.Convert_internal_cust_location(
438                p_internal_cust_location_id   => l_trip_dropoff_loc_id,
439                x_internal_org_location_id    => l_phys_trip_dropoff_loc_id,
440                x_return_status               => l_return_status);
441          IF l_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
442             x_return_status:=l_return_status;
443             --RETURN;
444             raise e_return_excp; -- LPN CONV. rv
445          END IF;
446          IF l_debug_on THEN
447                WSH_DEBUG_SV.log(l_module_name,'l_phys_trip_dropoff_loc_id',l_phys_trip_dropoff_loc_id);
448          END IF;
449    END IF;
450 
451    IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
452 
453       l_rate_trip_dels :=  Check_Rate_Trip_Contents(p_trip_id => p_trip_id,
454                                                     x_return_status => l_return_status);
455 
456       IF l_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
457 
458          RAISE rate_trip_contents_fail;
459 
460       END IF;
461 
462    END IF;
463 
464    -- Delivery Validations
465    FOR i IN 1..p_del_rows.count LOOP --{
466 
467      OPEN delivery_info (p_del_rows(i));
468      FETCH delivery_info INTO l_pickup_location_id, l_pickup_date, l_dropoff_location_id,
469                               l_dropoff_date, l_org_id, l_delivery_status, l_shipment_direction,
470                               l_org_gross_wt, l_org_net_wt, l_org_vol, l_delivery_mode_of_transport,
471                               l_freight_terms_code, l_delivery_name, l_customer_id;
472      CLOSE delivery_info;
473 
474      IF l_debug_on THEN
475         wsh_debug_sv.log(l_module_name, 'Del '||p_del_rows(i)||' Status '||l_delivery_status);
476      END IF;
477 
478      -- Check if the delivery is in a valid status.
479      IF l_delivery_status in ('CA', 'CL') THEN
480         goto skip_delivery;
481      END IF;
482 
483      --if trip's dropoff is specified as internal, cannot have deliveries with ultimate dropoffs
484      --which are not the same internal loc being assigned to the trip
485      IF l_trip_dropoff_loc_id IS NOT NULL AND
486         l_phys_trip_dropoff_loc_id IS NOT NULL AND
487         l_dropoff_location_id <> l_trip_dropoff_loc_id THEN
488           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DROP_NOTINT');
489           FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
490           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
491           goto skip_delivery;
492      END IF;
493 
494      l_del_rows(l_del_rows.COUNT+1)               := p_del_rows(i);
495      l_pickup_location_id_tbl(l_del_rows.COUNT)   := l_pickup_location_id;
496      l_pickup_date_tbl(l_del_rows.COUNT)          := l_pickup_date;
497      l_dropoff_location_id_tbl (l_del_rows.COUNT) := l_dropoff_location_id;
498      l_dropoff_date_tbl(l_del_rows.COUNT)         := l_dropoff_date;
499      l_organization_id_tbl(l_del_rows.COUNT)      := l_org_id;
500      l_status_code_tbl(l_del_rows.COUNT)          := l_delivery_status;
501      l_shipment_direction_tbl(l_del_rows.COUNT)   := l_shipment_direction;
502      l_gross_weight_tbl(l_del_rows.COUNT)         := l_org_gross_wt;
503      l_net_weight_tbl(l_del_rows.COUNT)           := l_org_net_wt;
504      l_volume_tbl(l_del_rows.COUNT)               := l_org_vol;
505      l_mode_of_transport_tbl(l_del_rows.COUNT)    := l_delivery_mode_of_transport;
506      l_freight_terms_code_tbl(l_del_rows.COUNT)   := l_freight_terms_code;
507      l_name_tbl(l_del_rows.COUNT)                 := l_delivery_name;
508 
509      goto loop_end1;
510 
511       <<skip_delivery>>
512 
513         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_ERROR');
514         FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
515         FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
516         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
517         l_num_error := l_num_error + 1;
518 
519       <<loop_end1>>
520         null;
521 
522    END LOOP; --}
523 
524    l_pregen_seq := 'N';
525    IF (p_caller = 'AUTOCREATE_TRIP' ) THEN --{
526 
527      -- The following logic pre-determines the PAD and sequence numbers for each distinct location(pickup/dropoff)
528      IF l_del_rows.COUNT > 1 THEN --{
529 
530 
531        IF l_debug_on THEN
532          wsh_debug_sv.log(l_module_name, 'Pre determining the sequence numbers/PAD');
533        END IF;
534 
535        l_pregen_seq := 'Y';
536        l_sysdate := sysdate;
537 
538        DELETE FROM WSH_TMP;
539 
540        IF (p_sc_pickup_date IS NOT NULL) OR (p_sc_dropoff_date IS NOT NULL) THEN --{
541          FORALL i in l_del_rows.FIRST..l_del_rows.LAST
542            INSERT INTO wsh_tmp(
543             ID,
544             FLAG,
545             COLUMN1)
546            SELECT l_pickup_location_id_tbl(i), 'P', to_char(nvl(p_sc_pickup_date,l_sysdate), 'DD-MM-RRRR HH24:MI:SS')
547            FROM   dual
548            WHERE  NOT EXISTS (
549                     select 'x'
550                     from  wsh_tmp wt1
551                     where wt1.id = l_pickup_location_id_tbl(i)
552                     and   wt1.flag='P'
553                     and   wt1.column1 = to_char(nvl(p_sc_pickup_date,l_sysdate), 'DD-MM-RRRR HH24:MI:SS'))
554            UNION
555            SELECT l_dropoff_location_id_tbl(i), 'D', to_char(nvl(p_sc_dropoff_date,l_sysdate), 'DD-MM-RRRR HH24:MI:SS')
556            FROM   dual
557            WHERE  NOT EXISTS (
558                     select 'x'
559                     from  wsh_tmp wt1
560                     where wt1.id = l_dropoff_location_id_tbl(i)
561                     and   wt1.flag='D'
562                     and   wt1.column1 = to_char(nvl(p_sc_dropoff_date,l_sysdate), 'DD-MM-RRRR HH24:MI:SS'));
563        ELSE
564          FORALL i in l_del_rows.FIRST..l_del_rows.LAST
565            INSERT INTO wsh_tmp(
566             ID,
567             FLAG,
568             COLUMN1)
569            SELECT l_pickup_location_id_tbl(i), 'P', to_char(nvl(l_pickup_date_tbl(i),l_sysdate), 'DD-MM-RRRR HH24:MI:SS')
570            FROM   dual
571            WHERE  NOT EXISTS (
572                     select 'x'
573                     from  wsh_tmp wt1
574                     where wt1.id = l_pickup_location_id_tbl(i)
575                     and   wt1.flag='P'
576                     and   wt1.column1 = to_char(nvl(l_pickup_date_tbl(i),l_sysdate), 'DD-MM-RRRR HH24:MI:SS'))
577            UNION
578            SELECT l_dropoff_location_id_tbl(i), 'D', to_char(nvl(l_dropoff_date_tbl(i),l_sysdate), 'DD-MM-RRRR HH24:MI:SS')
579            FROM   dual
580            WHERE  NOT EXISTS (
581                     select 'x'
582                     from  wsh_tmp wt1
583                     where wt1.id = l_dropoff_location_id_tbl(i)
584                     and   wt1.flag='D'
585                     and   wt1.column1 = to_char(nvl(l_dropoff_date_tbl(i),l_sysdate), 'DD-MM-RRRR HH24:MI:SS'));
586        END IF; --}
587 
588        -- For pickups the PAD is min of all initial_pickup_date
589        DELETE FROM wsh_tmp wt1
590        WHERE  wt1.flag = 'P'
591        AND    exists (
592                select 'x'
593                from   wsh_tmp wt2
594                where  wt1.id = wt2.id
595                and    wt2.flag = 'P'
596                and    to_date(wt2.column1,'DD-MM-RRRR HH24:MI:SS') < to_date(wt1.column1,'DD-MM-RRRR HH24:MI:SS'));
597 
598        -- For dropoffs the PAD is max of all ultimate_dropoff_date
599        DELETE FROM wsh_tmp wt1
600        WHERE  wt1.flag = 'D'
601        AND    exists (
602                select 'x'
603                from   wsh_tmp wt2
604                where  wt1.id = wt2.id
605                and    wt2.flag = 'D'
606                and    to_date(wt2.column1,'DD-MM-RRRR HH24:MI:SS') > to_date(wt1.column1,'DD-MM-RRRR HH24:MI:SS'));
607 
608        OPEN c_get_seq_numbers;
609        LOOP
610          FETCH c_get_seq_numbers BULK COLLECT INTO l_id,l_seq LIMIT 1000;
611 
612          IF l_id.COUNT > 0 THEN
613            FORALL i in l_id.FIRST..l_id.LAST
614              UPDATE wsh_tmp
615              set    column2 = l_seq(i)
616              WHERE  id = l_id(i);
617          END IF;
618 
619          IF l_debug_on THEN
620            FOR i in l_id.FIRST..l_id.LAST LOOP
621              wsh_debug_sv.log(l_module_name, 'l_id '||l_id(i)||' l_seq '||l_seq(i));
622            END LOOP;
623          END IF;
624 
625          EXIT WHEN c_get_seq_numbers%NOTFOUND;
626        END LOOP;
627        CLOSE c_get_seq_numbers;
628 
629      END IF; --}
630 
631    END IF; --}
632 
633    FOR i IN 1..l_del_rows.count LOOP
634     --(
635     -- Bug 5336308
636     -- Added BEGIN-END block within this loop, added exception handlers to replace use of GOTO logic
637     --
638     BEGIN
639      --(
640       -- Initialize cursor return variables for each loop count
641       SAVEPOINT ASSIGN_DEL_TO_TRIP;
642 
643       l_leg_id := NULL;
644       l_leg_seq_number := NULL;
645       l_pickup_location_id := NULL;
646       l_dropoff_location_id := NULL;
647       l_tmp_date := NULL;
648 
649       -- Fetch delivery information including initial_pickup_location,
650       -- ultimate_dropoff_location, dates and organization_id
651 
652       l_pickup_location_id  := l_pickup_location_id_tbl(i);
653       l_pickup_date         := l_pickup_date_tbl(i);
654       l_dropoff_location_id := l_dropoff_location_id_tbl(i);
655       l_dropoff_date        := l_dropoff_date_tbl(i);
656       l_org_id              := l_organization_id_tbl(i);
657       l_delivery_status     := l_status_code_tbl(i);
658       l_shipment_direction  := l_shipment_direction_tbl(i);
659       l_org_gross_wt        := l_gross_weight_tbl(i);
660       l_org_net_wt          := l_net_weight_tbl(i);
661       l_org_vol             := l_volume_tbl(i);
662       l_delivery_mode_of_transport   := l_mode_of_transport_tbl(i);
663       l_freight_terms_code  := l_freight_terms_code_tbl(i);
664       l_delivery_name       := l_name_tbl(i);
665 
666       l_del_pu_location_id := l_pickup_location_id;
667 
668       -- If the pick up date and drop off date are defaulted from the
669       -- ship confirm API then use these dates.  Bug 3913206
670       --
671       IF (p_sc_pickup_date IS NOT NULL) OR (p_sc_dropoff_date IS NOT NULL)
672       THEN --{
673          l_pickup_date := p_sc_pickup_date;
674          l_dropoff_date := p_sc_dropoff_date;
675       END IF; --}
676      --
677 
678      IF l_debug_on THEN
679         wsh_debug_sv.log(l_module_name, 'Processing Del '||l_del_rows(i)||' Shipment direction '|| l_shipment_direction);
680      END IF;
681      --
682 
683      IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
684         IF (NVL(l_rate_trip_dels, 'X') <> 'M')   THEN
685         -- IF l_rate_trip_dels = 'M', then trip is already mixed, exceptions have been logged.
686 
687            l_rate_del := Check_Rate_Delivery(p_delivery_id => NULL,
688                                              p_freight_terms_code => l_freight_terms_code,
689                                              p_shipment_direction => l_shipment_direction,
690                                              x_return_status => l_return_status);
691 
692            IF l_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
693               RAISE e_InvalidDelExcep; -- Bug 5336308
694            END IF;
695 
696            IF (l_rate_del <> l_rate_trip_dels) AND (l_rate_trip_dels <> 'M') THEN
697            -- We need to check for l_rate_trip_dels = 'M' again because it could have been populated in
698            -- the above call.
699 
700 
701               -- Raise Warning
702               FND_MESSAGE.Set_Name('WSH', 'WSH_RATE_MIXED_TRIP_WARN');
703               wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING, l_module_name);
704               l_num_warn := l_num_warn + 1;
705 
706               -- Log Exception
707 
708               l_exception_name := 'WSH_RATE_MIXED_TRIP';
709               l_msg := FND_MESSAGE.Get_String('WSH', 'WSH_RATE_MIXED_TRIP_EXC');
710 
711 
712               wsh_xc_util.log_exception(
713                      p_api_version             => 1.0,
714                      x_return_status           => l_return_status,
715                      x_msg_count               => l_exception_msg_count,
716                      x_msg_data                => l_exception_msg_data,
717                      x_exception_id            => l_dummy_exception_id ,
718                      p_logged_at_location_id   => l_pickup_location_id,
719                      p_exception_location_id   => l_pickup_location_id,
720                      p_logging_entity          => 'SHIPPER',
721                      p_logging_entity_id       => FND_GLOBAL.USER_ID,
722                      p_exception_name          => l_exception_name,
723                      p_message                 => l_msg,
724                      p_trip_id                 => p_trip_id
725                      );
726 
727               IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS  THEN
728                  l_num_warn := l_num_warn + 1;
729                  RAISE e_InvalidDelExcep; -- Bug 5336308
730               END IF;
731 
732            END IF;
733         END IF;
734 
735      END IF;
736      --
737       -- Get default UOMs for the shipping organization. Do not check
738       -- return status as these are not mandatory parameters.
739 
740       --
741       -- Debug Statements
742       --
743       IF l_debug_on THEN
744          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.GET_DEFAULT_UOMS',WSH_DEBUG_SV.C_PROC_LEVEL);
745       END IF;
746       --
747       wsh_wv_utils.get_default_uoms(l_org_id, l_default_wt_uom, l_default_vol_uom, x_return_status);
748 
749       -- Check if delivery leg exists for the delivery/trip combination
750       -- Skip this delivery if leg exists
751 
752       OPEN leg_exists (l_del_rows(i));
753       FETCH leg_exists INTO l_leg_id, l_old_pickup_loc_id, l_old_dropoff_loc_id;
754       CLOSE leg_exists;
755 
756       IF (l_old_pickup_loc_id = nvl(p_pickup_location_id, l_pickup_location_id)) AND
757       (l_old_dropoff_loc_id = nvl(p_dropoff_location_id, l_dropoff_location_id)) THEN
758          RAISE e_CommonExcep; -- Bug 5336308
759       END IF;
760 
761       --TD: Check if trip stop can be created for this trip (trip should not be planned)
762       -- If create flag is set and no stops exist then check if stops
763       -- need to be created
764 
765       IF p_pickup_location_id IS NOT NULL THEN
766          l_pickup_location_id := p_pickup_location_id;
767       END IF;
768       IF p_dropoff_location_id IS NOT NULL THEN
769          l_dropoff_location_id := p_dropoff_location_id;
770       END IF;
771 
772       IF (p_create_flag = 'Y')AND(p_pickup_stop_id IS NULL) THEN
773 
774          l_pickup_stop_id := NULL;
775          /* the new Pickup takes precedence over delivery pickup location */
776          IF (p_pickup_location_id IS NOT NULL) THEN
777             l_pickup_location_id := p_pickup_location_id;
778          END IF;
779 
780          IF p_caller = 'WSH_FSTRXASSIGNTRIP' AND p_pickup_stop_seq IS NULL THEN
781             OPEN get_stop_new (l_pickup_location_id,P_PICKUP_ARR_DATE,P_PICKUP_DEP_DATE);
782             FETCH get_stop_new INTO l_pickup_stop_id, l_pickup_stop_seq, l_stop_shipments_type_flag;
783             CLOSE get_stop_new;
784          ELSE
785             OPEN get_stop (l_pickup_location_id,p_pickup_stop_seq);
786             FETCH get_stop INTO l_pickup_stop_id, l_pickup_stop_seq, l_stop_shipments_type_flag;
787             CLOSE get_stop;
788          END IF;
789 
790          IF l_debug_on THEN
791            WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id-'||l_pickup_stop_id);
792            WSH_DEBUG_SV.log(l_module_name,'l_pickup_location_id-'||l_pickup_location_id);
793            WSH_DEBUG_SV.log(l_module_name,'pickup_stop_seq-'||p_pickup_stop_seq);
794            WSH_DEBUG_SV.log(l_module_name,'l_stop_shipments_type_flag',l_stop_shipments_type_flag);
795          END IF;
796          /* H integration , for stop sequence number */
797          IF p_pickup_location_id IS NOT NULL THEN
798             l_new_flag := 'PICKUP';
799             l_pickup_stop_seq := p_pickup_stop_seq;
800          ELSE
801             l_new_flag := 'DELIVERY';
802             l_pickup_stop_seq := NULL;
803          END IF;
804 
805          --4106241 : Call get_new_sequence_number only if l_pickup_stop_seq  and l_pickup_stop_id are null.
806          If l_pickup_stop_seq is NULL  and l_pickup_stop_id is NULL THEN
807            IF l_pregen_seq = 'N' THEN
808            --
809               --
810               -- Debug Statements
811               --
812               IF l_debug_on THEN
813                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_VALIDATIONS.GET_NEW_SEQUENCE_NUMBER',WSH_DEBUG_SV.C_PROC_LEVEL);
814               END IF;
815               --
816               WSH_TRIP_STOPS_VALIDATIONS.get_new_sequence_number
817                  (x_stop_sequence_number => l_pickup_stop_seq,
818                   p_trip_id => p_trip_id,
819                   p_status_code => 'OP',
820                   p_stop_id => null, -- as of now no validations
821                   p_new_flag => l_new_flag,
822                   x_return_status => l_return_status
823                  );
824               IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
825                  x_return_status := l_return_status;
826                  raise e_return_excp; -- LPN CONV. rv
827               END IF;
828            ELSE
829              BEGIN
830                select column2, to_date(column1,'DD-MM-RRRR HH24:MI:SS')
831                into   l_pickup_stop_seq,l_tmp_date
832                from   wsh_tmp
833                where  id = l_pickup_location_id
834                and    flag = 'P';
835              EXCEPTION
836                WHEN NO_DATA_FOUND THEN
837                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
838                  raise e_return_excp; -- LPN CONV. rv
839                WHEN OTHERS THEN
840                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
841                  raise e_return_excp; -- LPN CONV. rv
842              END;
843            END IF; --}
844          --
845          END IF;
846               /* End of H integration , for stop sequence number */
847 
848          IF (l_pickup_stop_id IS NULL) THEN
849             l_trip_stop_info.trip_id := p_trip_id;
850             l_trip_stop_info.status_code := 'OP';
851             --l_trip_stop_info.stop_sequence_number := -99;
852             l_trip_stop_info.stop_sequence_number := l_pickup_stop_seq;
853             l_trip_stop_info.stop_location_id  := l_pickup_location_id;
854             -- Bug 3349133
855             IF l_pregen_seq = 'N' THEN
856             l_trip_stop_info.planned_arrival_date := NVL(l_pickup_date, sysdate);
857             ELSE
858             l_trip_stop_info.planned_arrival_date := l_tmp_date;
859             END IF;
860             l_trip_stop_info.planned_departure_date := l_trip_stop_info.planned_arrival_date;
861             l_trip_stop_info.weight_uom_code   := l_default_wt_uom;
862             l_trip_stop_info.volume_uom_code   := l_default_vol_uom;
863 
864             -- Default the W/V from previous stop(sequence)
865             l_gross_weight := NULL;
866             l_net_weight := NULL;
867             l_volume := NULL;
868 
869             OPEN c_get_prev_seq_wv(p_trip_id, l_pickup_stop_seq, l_default_wt_uom, l_default_vol_uom);
870             FETCH c_get_prev_seq_wv into l_gross_weight,l_net_weight,l_volume;
871             CLOSE c_get_prev_seq_wv;
872 
873             IF l_debug_on THEN
874               WSH_DEBUG_SV.log(l_module_name,'Prev stop Gross '||l_gross_weight||' Net '||l_net_weight||' Vol '||l_volume);
875             END IF;
876 
877             l_trip_stop_info.departure_gross_weight := l_gross_weight;
878             l_trip_stop_info.departure_net_weight   := l_net_weight;
879             l_trip_stop_info.departure_volume       := l_volume;
880 
881             -- J-IB-NPARIKH-{
882             --
883             -- For a new stop, calculate value of shipments type flag
884             -- using shipment direction of the delivery being assigned.
885             --
886             IF l_shipment_direction IN ('O','IO')
887             THEN
888                 l_trip_stop_info.shipments_type_flag := 'O';
889             ELSE
890                 l_trip_stop_info.shipments_type_flag := 'I';
891             END IF;
892             --
893             IF l_debug_on THEN
894                 WSH_DEBUG_SV.log(l_module_name,'l_trip_stop_info.shipments_type_flag',l_trip_stop_info.shipments_type_flag);
895             END IF;
896             --
897             -- J-IB-NPARIKH-}
898 
899             IF p_pickup_location_id IS NOT NULL THEN
900                IF l_debug_on THEN
901                   WSH_DEBUG_SV.log(l_module_name,'updating dates for pickup loc which is getting created',p_pickup_location_id );
902                END IF;
903                l_trip_stop_info.planned_arrival_date := p_pickup_arr_date;
904                l_trip_stop_info.planned_departure_date := p_pickup_dep_date;
905             END IF;
906 
907 
908             /* H integration -  call Multi Leg FTE */
909             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
910                --
911                -- Debug Statements
912                --
913                IF l_debug_on THEN
914                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
915                END IF;
916                --
917                wsh_fte_integration.trip_stop_validations
918                (p_stop_rec => l_trip_stop_info,
919                p_trip_rec => l_trip_rec,
920                p_action => 'ADD',
921                x_return_status => l_return_status);
922 
923                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
924                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
925                      l_num_warn := l_num_warn + 1;
926                   ELSE
927                      x_return_status := l_return_status;
928                      --
929                      -- Debug Statements
930                      --
931                      --IF l_debug_on THEN
932                         --WSH_DEBUG_SV.pop(l_module_name);
933                      --END IF;
934                      --
935                      --RETURN;
936                      raise e_return_excp; -- LPN CONV. rv
937                   END IF;
938                END IF;
939 
940             END IF;
941 
942             /* End of H integration - call Multi Leg FTE */
943             --
944             -- Debug Statements
945             --
946             IF l_debug_on THEN
947                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_PVT.CREATE_TRIP_STOP',WSH_DEBUG_SV.C_PROC_LEVEL);
948             END IF;
949             --
950             --
951 
952             wsh_trip_stops_pvt.create_trip_stop(l_trip_stop_info,l_rowid,l_pickup_stop_id, x_return_status);
953 
954             IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
955                RAISE e_InvalidDelExcep; -- Bug 5336308
956             END IF;
957 
958             --For a Routing Firm trip, when action is assign trip, check if the new stop
959             --created is a dummy stop which already has physical stop in trip or if the
960             --new stop is the physical stop and dummy is already present in the trip. Only
961             --in these 2 cases, we allow stop creation for Routing Firm trip. Else, this
962             --delivery cannot be assigned to the trip as this entails creation of a new stop
963             --This has to be done after create stop as linking happens only at creation time
964             IF l_plannedflag='Y' AND p_caller like '%ASSIGNTRIP%' THEN
965                OPEN c_check_dummystops(l_pickup_stop_id, p_trip_id);
966                FETCH c_check_dummystops INTO l_check_dummystops;
967                IF c_check_dummystops%NOTFOUND THEN
968                   CLOSE c_check_dummystops;
969                   IF l_debug_on THEN
970                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
971                   END IF;
972                   FND_MESSAGE.SET_NAME('WSH','WSH_FIRMTRIP_NO_NEW_STOP');
973                   FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
974                   wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
975                   RAISE e_InvalidDelExcep; -- Bug 5336308
976                END IF;
977                CLOSE c_check_dummystops;
978             END IF;
979 
980             IF( WSH_UTIL_CORE.FTE_Is_Installed = 'Y') THEN
981                 l_trip_mode_of_transport := NVL(l_trip_mode_of_transport, l_delivery_mode_of_transport);
982                 WSH_UTIL_VALIDATE.Validate_Trip_MultiStops (
983                   p_trip_id           => p_trip_id,
984                   p_mode_of_transport => l_trip_mode_of_transport,
985                   x_return_status     => x_return_status);
986                 IF l_debug_on THEN
987                    WSH_DEBUG_SV.log(l_module_name,'WSH_UTIL_VALIDATE.Validate_MultiStops x_return_status',x_return_status);
988                 END IF;
989 
990                 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
991                    RAISE e_InvalidDelExcep; -- Bug 5336308
992                 END IF;
993 
994             END IF;
995             -- 3516052 keep the pickup arrival date and departure date
996             l_pickup_arr_date := l_trip_stop_info.planned_arrival_date;
997             l_pickup_dep_date := l_trip_stop_info.planned_departure_date;
998             l_pickup_stop_seq := l_trip_stop_info.stop_sequence_number; --SSN Frontport
999 
1000          ELSE
1001             -- Get pvt type record structure for stop
1002             --
1003             -- Debug Statements
1004             --
1005             IF l_debug_on THEN
1006                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
1007             END IF;
1008             --
1009             wsh_trip_stops_grp.get_stop_details_pvt
1010             (p_stop_id => l_pickup_stop_id,
1011             x_stop_rec => l_stop_rec,
1012             x_return_status => l_return_status);
1013 
1014             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1015                x_return_status := l_return_status;
1016                --
1017                -- Debug Statements
1018                --
1019                --IF l_debug_on THEN
1020                   --WSH_DEBUG_SV.pop(l_module_name);
1021                --END IF;
1022                --
1023                --RETURN;
1024                raise e_return_excp; -- LPN CONV. rv
1025             END IF;
1026 
1027             -- 3516052 keep the pickup arrival date and deaprture date
1028             l_pickup_arr_date := l_stop_rec.planned_arrival_date;
1029             l_pickup_dep_date := l_stop_rec.planned_departure_date;
1030 
1031             --get pickup time, if > l_pickup_date, then update pickup stop
1032             --with the l_pickup_date so that the earliet time is set
1033             /* H integration - call Multi Leg FTE */
1034             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
1035 
1036                --
1037                -- Debug Statements
1038                --
1039                IF l_debug_on THEN
1040                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
1041                END IF;
1042                --
1043                wsh_fte_integration.trip_stop_validations
1044                (p_stop_rec => l_stop_rec,
1045                p_trip_rec => l_trip_rec,
1046                p_action => 'UPDATE',
1047                x_return_status => l_return_status);
1048                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1049                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1050                      l_num_warn := l_num_warn + 1;
1051                   ELSE
1052                      x_return_status := l_return_status;
1053                      --
1054                      -- Debug Statements
1055                      --
1056                      --IF l_debug_on THEN
1057                         --WSH_DEBUG_SV.pop(l_module_name);
1058                      --END IF;
1059                      --
1060                      --RETURN;
1061                      raise e_return_excp; -- LPN CONV. rv
1062                   END IF;
1063                END IF;
1064 
1065             END IF;
1066 
1067             -- J-IB-NPARIKH-{
1068             --
1069             --
1070             -- For an existing stop, calculate value of shipments type flag
1071             -- by calling WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1072             --
1073             IF l_debug_on THEN
1074                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WWSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag',WSH_DEBUG_SV.C_PROC_LEVEL);
1075             END IF;
1076             --
1077             WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1078                 (
1079                     p_trip_id               => p_trip_id,
1080                     p_stop_id               => l_pickup_stop_id,
1081                     p_action                => 'ASSIGN',
1082                     p_shipment_direction    => l_shipment_direction,
1083                     x_shipments_type_flag   => l_stop_shipments_type_flag,
1084                     x_return_status         => l_return_status
1085                 );
1086             --
1087             wsh_util_core.api_post_call
1088               (
1089                 p_return_status => l_return_status,
1090                 x_num_warnings  => l_num_warn,
1091                 x_num_errors    => l_num_error
1092               );
1093             --
1094             -- J-IB-NPARIKH-}
1095 
1096             /* End of H integration - call Multi Leg FTE */
1097             update wsh_trip_stops
1098             set planned_departure_date=least(nvl(l_pickup_date,sysdate),planned_departure_date),
1099             planned_arrival_date=least(nvl(l_pickup_date,sysdate),planned_arrival_date),
1100                    shipments_type_flag = l_stop_shipments_type_flag ,   -- J-IB-NPARIKH
1101                    last_update_date   = SYSDATE,    -- J-IB-NPARIKH
1102                    last_updated_by    = FND_GLOBAL.USER_ID,   -- J-IB-NPARIKH
1103                    last_update_login  = FND_GLOBAL.LOGIN_ID     -- J-IB-NPARIKH
1104             where stop_id=l_pickup_stop_id;
1105 
1106    --
1107         -- DBI Project
1108         -- Updating  WSH_TRIP_STOPS.
1109         -- Call DBI API after the Update.
1110         -- This API will also check for DBI Installed or not
1111         IF l_debug_on THEN
1112           WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Stop id -',l_pickup_stop_id);
1113         END IF;
1114 	l_stop_tab(1) := l_pickup_stop_id;
1115         WSH_INTEGRATION.DBI_Update_Trip_Stop_Log
1116           (p_stop_id_tab	=> l_stop_tab,
1117            p_dml_type		=> 'UPDATE',
1118            x_return_status      => l_dbi_rs);
1119 
1120         IF l_debug_on THEN
1121           WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
1122         END IF;
1123         IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1124 	  x_return_status := l_dbi_rs;
1125 	  rollback to assign_del_to_trip;
1126           -- just pass this return status to caller API
1127           IF l_debug_on THEN
1128             WSH_DEBUG_SV.log(l_module_name,'DBI API Returned Unexpected error '||x_return_status);
1129             --WSH_DEBUG_SV.pop(l_module_name);
1130           END IF;
1131           --return;
1132           raise e_return_excp; -- LPN CONV. rv
1133         END IF;
1134         -- End of Code for DBI Project
1135    --
1136        IF p_caller like '%ASSIGNTRIP%' THEN
1137                l_trip_ids(1):=p_trip_id;
1138                WSH_TRIPS_ACTIONS.Handle_Internal_Stops
1139                (   p_trip_ids          => l_trip_ids,
1140                   p_caller            => p_caller,
1141                   x_success_trip_ids  => l_dummy_trip_ids,
1142                   x_return_status     => l_return_status);
1143 
1144                IF l_debug_on THEN
1145                    WSH_DEBUG_SV.log(l_module_name,'Handle_Internal_Stops after updating stop l_return_status',l_return_status);
1146                END IF;
1147 
1148                wsh_util_core.api_post_call
1149                 (
1150                   p_return_status => l_return_status,
1151                   x_num_warnings  => l_num_warn,
1152                   x_num_errors    => l_num_error
1153                 );
1154             END IF;
1155          END IF;
1156 
1157       END IF;
1158 
1159       IF (p_create_flag = 'Y')AND(p_dropoff_stop_id IS NULL) THEN
1160 
1161          l_dropoff_stop_id := NULL;
1162          l_dropoff_stop_seq := NULL;
1163 
1164          IF (p_dropoff_location_id IS NOT NULL) THEN
1165             l_dropoff_location_id := p_dropoff_location_id;
1166          END IF;
1167 
1168          IF p_caller = 'WSH_FSTRXASSIGNTRIP' AND p_dropoff_stop_seq IS NULL THEN
1169             OPEN get_stop_new (l_dropoff_location_id,P_DROPOFF_ARR_DATE,P_DROPOFF_DEP_DATE);
1170             FETCH get_stop_new INTO l_dropoff_stop_id, l_dropoff_stop_seq,l_stop_shipments_type_flag;
1171             CLOSE get_stop_new;
1172          ELSE
1173             OPEN get_stop (l_dropoff_location_id,p_dropoff_stop_seq);
1174             FETCH get_stop INTO l_dropoff_stop_id, l_dropoff_stop_seq,l_stop_shipments_type_flag;
1175             CLOSE get_stop;
1176          END IF;
1177 
1178          IF l_debug_on THEN
1179            WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id-'||l_dropoff_stop_id);
1180            WSH_DEBUG_SV.log(l_module_name,'l_dropoff_location_id-'||l_dropoff_location_id);
1181            WSH_DEBUG_SV.log(l_module_name,'dropoff_stop_seq-'||p_dropoff_stop_seq);
1182            WSH_DEBUG_SV.log(l_module_name,'l_stop_shipments_type_flag'||l_stop_shipments_type_flag);
1183          END IF;
1184 
1185          -- bug 2784197
1186          open get_sequence(l_pickup_stop_id);
1187          fetch get_sequence into l_pickup_stop_seq;
1188          close get_sequence;
1189          IF l_debug_on THEN
1190             WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_seq',l_pickup_stop_seq);
1191             WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_seq',l_dropoff_stop_seq);
1192          END IF;
1193          IF nvl(l_dropoff_stop_seq, 0 ) = 0
1194          OR nvl(l_dropoff_stop_seq, 0 ) < nvl(l_pickup_stop_seq,0) THEN
1195            l_dropoff_stop_id := NULL;
1196          END IF;
1197          -- bug 2784197
1198 
1199          /* H integration , for stop sequence number */
1200          IF p_dropoff_location_id IS NOT NULL THEN
1201             l_new_flag := 'DROPOFF';
1202             l_dropoff_stop_seq := p_dropoff_stop_seq;
1203          ELSE
1204             l_new_flag := 'DELIVERY';
1205             l_dropoff_stop_seq := null;
1206          END IF;
1207 
1208          --
1209          -- Debug Statements
1210          --
1211          --4106241 : Call the get_new_sequence_number API only if l_dropoff_stop_seq and l_dropoff_stop_id are null.
1212          IF l_debug_on THEN
1213             WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_seq before api call is:',l_dropoff_stop_seq);
1214          END IF;
1215          IF l_dropoff_stop_seq is NULL and l_dropoff_stop_id is NULL THEN
1216 
1217            IF l_pregen_seq = 'N' THEN --{
1218               IF l_debug_on THEN
1219                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_VALIDATIONS.GET_NEW_SEQUENCE_NUMBER',WSH_DEBUG_SV.C_PROC_LEVEL);
1220               END IF;
1221               --
1222 
1223               WSH_TRIP_STOPS_VALIDATIONS.get_new_sequence_number
1224                  (x_stop_sequence_number => l_dropoff_stop_seq,
1225                   p_trip_id => p_trip_id,
1226                   p_status_code => 'OP',
1227                   p_stop_id => null, -- as of now no validations
1228                   p_new_flag => l_new_flag,
1229                   x_return_status => l_return_status
1230                  );
1231 
1232               IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1233                  x_return_status := l_return_status;
1234                  raise e_return_excp; -- LPN CONV. rv
1235               END IF;
1236            ELSE
1237              BEGIN
1238                select column2,to_date(column1,'DD-MM-RRRR HH24:MI:SS')
1239                into   l_dropoff_stop_seq,l_tmp_date
1240                from   wsh_tmp
1241                where  id = l_dropoff_location_id
1242                and    flag = 'D';
1243              EXCEPTION
1244                WHEN NO_DATA_FOUND THEN
1245                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1246                  raise e_return_excp; -- LPN CONV. rv
1247                WHEN OTHERS THEN
1248                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1249                  raise e_return_excp; -- LPN CONV. rv
1250              END;
1251            END IF; --}
1252 
1253          END IF;
1254          /* End of H integration , for stop sequence number */
1255 
1256          IF (l_dropoff_stop_id IS NULL) THEN
1257             l_trip_stop_info.trip_id := p_trip_id;
1258             l_trip_stop_info.status_code := 'OP';
1259             --l_trip_stop_info.stop_sequence_number := -99;
1260             l_trip_stop_info.stop_sequence_number := l_dropoff_stop_seq;
1261             l_trip_stop_info.stop_location_id  := l_dropoff_location_id;
1262             IF l_pregen_seq = 'N' THEN
1263             l_trip_stop_info.planned_arrival_date := greatest(NVL(l_pickup_date, sysdate) + WSH_TRIPS_ACTIONS.C_TEN_MINUTES, NVL(l_dropoff_date, sysdate));
1264             ELSE
1265               l_trip_stop_info.planned_arrival_date := l_tmp_date;
1266             END IF;
1267             -- bug 3349133, the planned arrival date of pickup stop and dropoff stop is 10 minutes apart
1268             l_trip_stop_info.planned_departure_date := l_trip_stop_info.planned_arrival_date;
1269             l_trip_stop_info.weight_uom_code   := l_default_wt_uom;
1270             l_trip_stop_info.volume_uom_code   := l_default_vol_uom;
1271 
1272             -- Need to clear out all the w/v value from previous stop record
1273             l_trip_stop_info.departure_gross_weight := null;
1274             l_trip_stop_info.departure_net_weight   := null;
1275             l_trip_stop_info.departure_volume       := null;
1276 
1277             -- Default the W/V from previous stop(sequence) only if the current sequence is not the last one at this point
1278             l_next_seq_exists := TRUE;
1279 
1280             OPEN c_next_seq_exists(p_trip_id, l_dropoff_stop_seq);
1281             FETCH c_next_seq_exists INTO l_dummy;
1282             IF    c_next_seq_exists%NOTFOUND THEN
1283               l_next_seq_exists := FALSE;
1284             END IF;
1285             CLOSE c_next_seq_exists;
1286 
1287             IF l_next_seq_exists THEN
1288               l_gross_weight := NULL;
1289               l_net_weight := NULL;
1290               l_volume := NULL;
1291 
1292               OPEN c_get_prev_seq_wv(p_trip_id, l_dropoff_stop_seq, l_default_wt_uom, l_default_vol_uom);
1293               FETCH c_get_prev_seq_wv into l_gross_weight,l_net_weight,l_volume;
1294               CLOSE c_get_prev_seq_wv;
1295 
1296               IF l_debug_on THEN
1297                 WSH_DEBUG_SV.log(l_module_name,'Prev stop Gross '||l_gross_weight||' Net '||l_net_weight||' Vol '||l_volume);
1298               END IF;
1299 
1300               l_trip_stop_info.departure_gross_weight := l_gross_weight;
1301               l_trip_stop_info.departure_net_weight   := l_net_weight;
1302               l_trip_stop_info.departure_volume       := l_volume;
1303             END IF;
1304 
1305             -- J-IB-NPARIKH-{
1306             --
1307             -- For a new stop, calculate value of shipments type flag
1308             -- using shipment direction of the delivery being assigned.
1309             --
1310             IF l_shipment_direction IN ('O','IO')
1311             THEN
1312                 l_trip_stop_info.shipments_type_flag := 'O';
1313             ELSE
1314                 l_trip_stop_info.shipments_type_flag := 'I';
1315             END IF;
1316             --
1317             IF l_debug_on THEN
1318                 WSH_DEBUG_SV.log(l_module_name,'l_trip_stop_info.shipments_type_flag',l_trip_stop_info.shipments_type_flag);
1319             END IF;
1320             --
1321             -- J-IB-NPARIKH-}
1322 
1323             IF p_dropoff_location_id IS NOT NULL THEN
1324                IF l_debug_on THEN
1325                   WSH_DEBUG_SV.log(l_module_name,'updating dates for dropoff loc which us getting created',p_dropoff_location_id);
1326                END IF;
1327                l_trip_stop_info.planned_arrival_date := p_dropoff_arr_date;
1328                l_trip_stop_info.planned_departure_date := p_dropoff_dep_date;
1329             END IF;
1330 
1331 
1332             /* H integration -  call Multi Leg FTE */
1333             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
1334                --
1335                -- Debug Statements
1336                --
1337                IF l_debug_on THEN
1338                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
1339                END IF;
1340                --
1341                wsh_fte_integration.trip_stop_validations
1342                (p_stop_rec => l_trip_stop_info,
1343                p_trip_rec => l_trip_rec,
1344                p_action => 'ADD',
1345                x_return_status => l_return_status);
1346 
1347                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1348                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1349                      l_num_warn := l_num_warn + 1;
1350                   ELSE
1351                      x_return_status := l_return_status;
1352                      --
1353                      -- Debug Statements
1354                      --
1355                      --IF l_debug_on THEN
1356                         --WSH_DEBUG_SV.pop(l_module_name);
1357                      --END IF;
1358                      --
1359                      --RETURN;
1360                      raise e_return_excp; -- LPN CONV. rv
1361                   END IF;
1362                END IF;
1363 
1364             END IF;
1365             /* End of H integration - call Multi Leg FTE */
1366             --
1367             -- Debug Statements
1368             --
1369             IF l_debug_on THEN
1370                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_PVT.CREATE_TRIP_STOP',WSH_DEBUG_SV.C_PROC_LEVEL);
1371             END IF;
1372             --
1373             wsh_trip_stops_pvt.create_trip_stop(l_trip_stop_info,l_rowid,l_dropoff_stop_id, x_return_status);
1374 
1375             IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1376                RAISE e_InvalidDelExcep; -- Bug 5336308
1377             END IF;
1378 
1379             --For a Routing Firm trip, when action is assign trip, check if the new stop
1380             --created is a dummy stop which already has physical stop in trip or if the
1381             --new stop is the physical stop and dummy is already present in the trip. Only
1382             --in these 2 cases, we allow stop creation for Routing Firm trip. Else, this
1383             --delivery cannot be assigned to the trip as this entails creation of a new stop
1384             --This has to be done after create stop as linking happens only at creation time
1385             IF l_plannedflag='Y' AND p_caller like '%ASSIGNTRIP%' THEN
1386 
1387                OPEN c_check_dummystops(l_dropoff_stop_id,p_trip_id);
1388                FETCH c_check_dummystops INTO l_check_dummystops;
1389                IF c_check_dummystops%NOTFOUND THEN
1390                   CLOSE c_check_dummystops;
1391                   IF l_debug_on THEN
1392                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
1393                   END IF;
1394                   FND_MESSAGE.SET_NAME('WSH','WSH_FIRMTRIP_NO_NEW_STOP');
1395                   FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
1396                   wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
1397                   RAISE e_InvalidDelExcep; -- Bug 5336308
1398                END IF;
1399                CLOSE c_check_dummystops;
1400             END IF;
1401 
1402             IF( WSH_UTIL_CORE.FTE_Is_Installed = 'Y') THEN
1403                 l_trip_mode_of_transport := NVL(l_trip_mode_of_transport, l_delivery_mode_of_transport);
1404                 WSH_UTIL_VALIDATE.Validate_Trip_MultiStops (
1405                   p_trip_id           => p_trip_id,
1406                   p_mode_of_transport => l_trip_mode_of_transport,
1407                   x_return_status     => x_return_status);
1408                 IF l_debug_on THEN
1409                    WSH_DEBUG_SV.log(l_module_name,'WSH_UTIL_VALIDATE.Validate_MultiStops x_return_status',x_return_status);
1410                 END IF;
1411 
1412                 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1413                    RAISE e_InvalidDelExcep; -- Bug 5336308
1414                 END IF;
1415 
1416             END IF;
1417             -- 3516052 keep the pickup arrival date and deaprture date
1418             l_dropoff_arr_date := l_trip_stop_info.planned_arrival_date;
1419             l_dropoff_dep_date := l_trip_stop_info.planned_departure_date;
1420             l_dropoff_stop_seq := l_trip_stop_info.stop_sequence_number; --SSN Frontport
1421 
1422          ELSE
1423             -- 3516052
1424             -- Get pvt type record structure for stop
1425             --
1426             -- Debug Statements
1427             --
1428             IF l_debug_on THEN
1429                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
1430             END IF;
1431             --
1432             wsh_trip_stops_grp.get_stop_details_pvt
1433             (p_stop_id => l_dropoff_stop_id,
1434             x_stop_rec => l_stop_rec,
1435             x_return_status => l_return_status);
1436 
1437             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1438                x_return_status := l_return_status;
1439                --
1440                -- Debug Statements
1441                --
1442                --IF l_debug_on THEN
1443                   --WSH_DEBUG_SV.pop(l_module_name);
1444                --END IF;
1445                --
1446                --RETURN;
1447                raise e_return_excp; -- LPN CONV. rv
1448             END IF;
1449 
1450             -- 3516052 keep the dropoff arrival date and deaprture date
1451             l_dropoff_arr_date := l_stop_rec.planned_arrival_date;
1452             l_dropoff_dep_date := l_stop_rec.planned_departure_date;
1453 
1454 
1455             /* H integration - call Multi Leg FTE */
1456             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
1457 
1458                --
1459                -- Debug Statements
1460                --
1461                IF l_debug_on THEN
1462                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
1463                END IF;
1464                --
1465                wsh_fte_integration.trip_stop_validations
1466                (p_stop_rec => l_stop_rec,
1467                p_trip_rec => l_trip_rec,
1468                p_action => 'UPDATE',
1469                x_return_status => l_return_status);
1470                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1471                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1472                      l_num_warn := l_num_warn + 1;
1473                   ELSE
1474                      x_return_status := l_return_status;
1475                      --
1476                      -- Debug Statements
1477                      --
1478                      --IF l_debug_on THEN
1479                         --WSH_DEBUG_SV.pop(l_module_name);
1480                      --END IF;
1481                      --
1482                      --RETURN;
1483                      raise e_return_excp; -- LPN CONV. rv
1484                   END IF;
1485                END IF;
1486 
1487             END IF;
1488 
1489             -- J-IB-NPARIKH-{
1490             --
1491             --
1492             -- For an existing stop, calculate value of shipments type flag
1493             -- by calling WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1494             --
1495             IF l_debug_on THEN
1496                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WWSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag',WSH_DEBUG_SV.C_PROC_LEVEL);
1497             END IF;
1498             --
1499             WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1500                 (
1501                     p_trip_id               => p_trip_id,
1502                     p_stop_id               => l_dropoff_stop_id,
1503                     p_action                => 'ASSIGN',
1504                     p_shipment_direction    => l_shipment_direction,
1505                     x_shipments_type_flag   => l_stop_shipments_type_flag,
1506                     x_return_status         => l_return_status
1507                 );
1508             --
1509             wsh_util_core.api_post_call
1510               (
1511                 p_return_status => l_return_status,
1512                 x_num_warnings  => l_num_warn,
1513                 x_num_errors    => l_num_error
1514               );
1515             --
1516             -- J-IB-NPARIKH-}
1517 
1518             /* End of H integration - call Multi Leg FTE */
1519             update wsh_trip_stops
1520             set    shipments_type_flag = l_stop_shipments_type_flag  ,  -- J-IB-NPARIKH
1521                    last_update_date   = SYSDATE,
1522                    last_updated_by    = FND_GLOBAL.USER_ID,
1523                    last_update_login  = FND_GLOBAL.LOGIN_ID
1524             where stop_id=l_dropoff_stop_id;
1525          END IF;
1526 
1527       END IF;
1528 
1529       --
1530       IF l_debug_on THEN
1531          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHK_DUP_PICKUP_DROPOFF_LOCNS',WSH_DEBUG_SV.C_PROC_LEVEL);
1532       END IF;
1533       --
1534       wsh_delivery_validations.chk_dup_pickup_dropoff_locns
1535       (p_delivery_id => l_del_rows(i),
1536       p_pickup_location_id => l_pickup_location_id,
1537       p_dropoff_location_id => l_dropoff_location_id,
1538       x_return_status       => l_return_status);
1539       IF l_return_status IN (wsh_util_core.g_ret_sts_error, wsh_util_core.g_ret_sts_unexp_error) THEN
1540          l_num_error := l_num_error + 1;
1541          --
1542          IF l_debug_on THEN
1543             WSH_DEBUG_SV.logmsg(l_module_name,'Rolling back to the begining of the loop',WSH_DEBUG_SV.C_PROC_LEVEL);
1544             WSH_DEBUG_SV.log(l_module_name,'l_num_error',l_num_error);
1545          END IF;
1546       --
1547          RAISE e_CommonExcep; -- Bug 5336308
1548       --
1549       END IF;
1550       --2709662
1551       IF l_debug_on THEN
1552          WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id', l_dropoff_stop_id);
1553          WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id', l_pickup_stop_id);
1554       END IF;
1555 
1556       IF l_pregen_seq = 'N' THEN --{
1557        --
1558        -- SSN change
1559        -- The date validation is to be triggered only if profile is PAD
1560        -- The SSN validation is to be triggered otherwise.
1561        IF (l_stop_seq_mode = WSH_INTERFACE_GRP.G_STOP_SEQ_MODE_PAD) AND
1562          (l_pickup_stop_id IS NOT NULL) AND (l_dropoff_stop_id IS NOT NULL)
1563        THEN
1564 
1565          IF l_debug_on THEN
1566             WSH_DEBUG_SV.log(l_module_name,'l_pickup_arr_date', fnd_date.date_to_displaydt(l_pickup_arr_date));
1567             WSH_DEBUG_SV.log(l_module_name,'l_pickup_dep_date', fnd_date.date_to_displaydt(l_pickup_dep_date));
1568             WSH_DEBUG_SV.log(l_module_name,'l_dropoff_arr_date', fnd_date.date_to_displaydt (l_dropoff_arr_date));
1569             WSH_DEBUG_SV.log(l_module_name,'l_dropoff_dep_date', fnd_date.date_to_displaydt (l_dropoff_dep_date));
1570          END IF;
1571          -- bug 3516052
1572          -- bug 4036204: We relax the restriction so that p_pickup_dep_date = p_dropoff_arr_date
1573          -- as long as p_pickup_arr_date >= p_dropoff_arr_date
1574          IF (p_pickup_dep_date > p_dropoff_arr_date) OR
1575             ((p_pickup_dep_date = p_dropoff_arr_date) AND (p_pickup_arr_date >= p_dropoff_arr_date))
1576          THEN
1577             FND_MESSAGE.Set_Name('WSH', 'WSH_INVALID_PLANNED_DATE');
1578             FND_MESSAGE.SET_TOKEN('PICKUP_DATE', fnd_date.date_to_displaydt(l_pickup_dep_date));
1579             FND_MESSAGE.SET_TOKEN('DROPOFF_DATE', fnd_date.date_to_displaydt(l_dropoff_arr_date));
1580             wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
1581             l_num_error := l_num_error + 1;
1582             RAISE e_CommonExcep; -- Bug 5336308
1583          END IF;
1584 
1585       ELSIF (l_stop_seq_mode = WSH_INTERFACE_GRP.G_STOP_SEQ_MODE_SSN) AND
1586          (l_pickup_stop_id IS NOT NULL) AND (l_dropoff_stop_id IS NOT NULL) THEN
1587 
1588         -- check that pick up SSN is before drop off SSN.
1589 
1590         IF l_debug_on THEN
1591           WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_seq', l_pickup_stop_seq);
1592           WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_seq', l_dropoff_stop_seq);
1593         END IF;
1594 
1595         IF l_pickup_stop_seq >= l_dropoff_stop_seq THEN
1596           FND_MESSAGE.Set_Name('WSH', 'WSH_PICKUP_STOP_SEQUENCE');
1597           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
1598           l_num_error := l_num_error + 1;
1599           RAISE e_CommonExcep; -- Bug 5336308
1600         END IF;
1601 
1602        END IF; -- end of mode check and date/SSN validation
1603       END IF;
1604 
1605       -- If a delivery leg exists then only update is possible. If it does
1606       -- not exist create a new delivery leg
1607 
1608       IF (l_leg_id IS NOT NULL) THEN
1609 
1610          --TD: Check if delivery can be unassigned from old trip stops
1611          --TD: and assigned to new trip stops
1612 
1613          IF (l_pickup_stop_id IS NOT NULL) THEN
1614 
1615             update wsh_delivery_legs
1616             set pick_up_stop_id = l_pickup_stop_id
1617             where delivery_leg_id = l_leg_id;
1618 
1619             IF (SQL%NOTFOUND) THEN
1620                FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
1621                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1622                wsh_util_core.add_message(x_return_status);
1623                RAISE e_CommonExcep; -- Bug 5336308
1624             END IF;
1625 
1626   --
1627         -- DBI Project
1628         -- Updating  WSH_TRIP_STOPS.
1629         -- Call DBI API after the Update.
1630         -- This API will also check for DBI Installed or not
1631         IF l_debug_on THEN
1632           WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Stop id -',l_pickup_stop_id);
1633         END IF;
1634 	l_stop_tab.delete;
1635 	l_stop_tab(1) := l_pickup_stop_id;
1636         WSH_INTEGRATION.DBI_Update_Trip_Stop_Log
1637           (p_stop_id_tab	=> l_stop_tab,
1638            p_dml_type		=> 'UPDATE',
1639            x_return_status      => l_dbi_rs);
1640 
1641         IF l_debug_on THEN
1642           WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
1643         END IF;
1644         IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1645 	  x_return_status := l_dbi_rs;
1646           rollback to assign_del_to_trip;
1647 	  -- just pass this return status to caller API
1648           IF l_debug_on THEN
1649             WSH_DEBUG_SV.log(l_module_name,'DBI API Returned Unexpected error '||x_return_status);
1650             --WSH_DEBUG_SV.pop(l_module_name);
1651           END IF;
1652           --return;
1653           raise e_return_excp; -- LPN CONV. rv
1654         END IF;
1655         -- End of Code for DBI Project
1656  --
1657 
1658 
1659          END IF;
1660 
1661          IF (l_dropoff_stop_id IS NOT NULL) THEN
1662 
1663             update wsh_delivery_legs
1664             set drop_off_stop_id = l_dropoff_stop_id
1665             where delivery_leg_id = l_leg_id;
1666 
1667  	    IF (SQL%NOTFOUND) THEN
1668                FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
1669                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1670                wsh_util_core.add_message(x_return_status);
1671                RAISE e_CommonExcep; -- Bug 5336308
1672             END IF;
1673 
1674  --
1675         -- DBI Project
1676         -- Updating  WSH_TRIP_STOPS.
1677         -- Call DBI API after the Update.
1678         -- This API will also check for DBI Installed or not
1679         IF l_debug_on THEN
1680           WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Stop id -',l_dropoff_stop_id);
1681         END IF;
1682 	l_stop_tab.delete;
1683 	l_stop_tab(1) := l_dropoff_stop_id;
1684         WSH_INTEGRATION.DBI_Update_Trip_Stop_Log
1685           (p_stop_id_tab	=> l_stop_tab,
1686            p_dml_type		=> 'UPDATE',
1687            x_return_status      => l_dbi_rs);
1688 
1689         IF l_debug_on THEN
1690           WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
1691         END IF;
1692         IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1693 	  x_return_status := l_dbi_rs;
1694           rollback to assign_del_to_trip;
1695 	  -- just pass this return status to caller API
1696           IF l_debug_on THEN
1697             WSH_DEBUG_SV.log(l_module_name,'DBI API Returned Unexpected error '||x_return_status);
1698             --WSH_DEBUG_SV.pop(l_module_name);
1699           END IF;
1700           --return;
1701           raise e_return_excp; -- LPN CONV. rv
1702         END IF;
1703         -- End of Code for DBI Project
1704  --
1705 
1706 
1707          END IF;
1708 
1709 
1710       ELSE
1711 
1712          l_delivery_leg_info.delivery_id := l_del_rows(i);
1713          l_delivery_leg_info.pick_up_stop_id := l_pickup_stop_id;
1714          l_delivery_leg_info.drop_off_stop_id := l_dropoff_stop_id;
1715 
1716 
1717          OPEN max_leg_seq_number (l_del_rows(i));
1718          FETCH max_leg_seq_number INTO l_leg_seq_number;
1719          CLOSE max_leg_seq_number;
1720 
1721          IF (l_leg_seq_number IS NULL) THEN
1722             l_delivery_leg_info.sequence_number := 10;
1723          ELSE
1724             l_delivery_leg_info.sequence_number := l_leg_seq_number + 10;
1725          END IF;
1726 
1727          --     dbms_output.put_line('creating delivery leg....');
1728 
1729          --
1730          -- Debug Statements
1731          --
1732          IF l_debug_on THEN
1733             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.CREATE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
1734          END IF;
1735          --
1736          wsh_delivery_legs_pvt.create_delivery_leg(l_delivery_leg_info, l_rowid, l_leg_id, x_return_status);
1737 
1738          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1739             RAISE e_InvalidDelExcep; -- Bug 5336308
1740          END IF;
1741 
1742          -- J: W/V Changes
1743          WSH_WV_UTILS.Del_WV_Post_Process(
1744            p_delivery_id   => l_del_rows(i),
1745            p_diff_gross_wt => l_org_gross_wt,
1746            p_diff_net_wt   => l_org_net_wt,
1747            p_diff_volume   => l_org_vol,
1748            p_leg_id        => l_leg_id,
1749            x_return_status => l_return_status);
1750 
1751          IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1752            RAISE e_InvalidDelExcep; -- Bug 5336308
1753          END IF;
1754 
1755          --     dbms_output.put_line('created delivery leg#'||l_leg_id);
1756 
1757       END IF;
1758 
1759       x_leg_rows(x_leg_rows.count+1) := l_leg_id;
1760 
1761         -- J-IB-NPARIKH-{
1762         --
1763       IF p_pickup_stop_id IS NOT NULL
1764       THEN
1765       --{
1766             IF l_debug_on THEN
1767                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WWSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag',WSH_DEBUG_SV.C_PROC_LEVEL);
1768             END IF;
1769             --
1770             --
1771             -- For an existing stop, calculate value of shipments type flag
1772             -- by calling WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1773             --
1774             WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1775                 (
1776                     p_trip_id               => p_trip_id,
1777                     p_stop_id               => p_pickup_stop_id,
1778                     p_action                => 'ASSIGN',
1779                     p_shipment_direction    => l_shipment_direction,
1780                     x_shipments_type_flag   => l_pu_stop_shipments_type_flag,
1781                     x_return_status         => l_return_status
1782                 );
1783             --
1784             wsh_util_core.api_post_call
1785               (
1786                 p_return_status => l_return_status,
1787                 x_num_warnings  => l_num_warn,
1788                 x_num_errors    => l_num_error
1789               );
1790 
1791             IF p_pickup_location_id IS NOT NULL THEN
1792               update wsh_trip_stops
1793               set  planned_departure_date=p_pickup_dep_date,
1794                    planned_arrival_date=p_pickup_arr_date,
1795                    last_update_date   = SYSDATE,
1796                    last_updated_by    = FND_GLOBAL.USER_ID,
1797                    last_update_login  = FND_GLOBAL.LOGIN_ID
1798               where stop_id=p_pickup_stop_id;
1799 
1800 --
1801         -- DBI Project
1802         -- Updating  WSH_TRIP_STOPS.
1803         -- Call DBI API after the Update.
1804         -- This API will also check for DBI Installed or not
1805         IF l_debug_on THEN
1806           WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Stop id -',p_pickup_stop_id);
1807         END IF;
1808 	l_stop_tab.delete;
1809 	l_stop_tab(1) := p_pickup_stop_id;
1810         WSH_INTEGRATION.DBI_Update_Trip_Stop_Log
1811           (p_stop_id_tab	=> l_stop_tab,
1812            p_dml_type		=> 'UPDATE',
1813            x_return_status      =>  l_dbi_rs);
1814 
1815         IF l_debug_on THEN
1816           WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
1817         END IF;
1818         IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1819 	  x_return_status := l_dbi_rs;
1820           rollback to assign_del_to_trip;
1821 	  -- just pass this return status to caller API
1822           IF l_debug_on THEN
1823             WSH_DEBUG_SV.log(l_module_name,'DBI API Returned Unexpected error '||l_dbi_rs);
1824             --WSH_DEBUG_SV.pop(l_module_name);
1825           END IF;
1826           --return;
1827           raise e_return_excp; -- LPN CONV. rv
1828        END IF;
1829         -- End of Code for DBI Project
1830  --
1831 
1832             END IF;
1833        --}
1834        END IF;
1835         --
1836       IF p_dropoff_stop_id IS NOT NULL
1837       THEN
1838       --{
1839             IF l_debug_on THEN
1840                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WWSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag',WSH_DEBUG_SV.C_PROC_LEVEL);
1841             END IF;
1842             --
1843             --
1844             -- For an existing stop, calculate value of shipments type flag
1845             -- by calling WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1846             --
1847             WSH_TRIP_STOPS_VALIDATIONS.refreshShipmentsTypeFlag
1848                 (
1849                     p_trip_id               => p_trip_id,
1850                     p_stop_id               => p_dropoff_stop_id,
1851                     p_action                => 'ASSIGN',
1852                     p_shipment_direction    => l_shipment_direction,
1853                     x_shipments_type_flag   => l_do_stop_shipments_type_flag,
1854                     x_return_status         => l_return_status
1855                 );
1856             --
1857             wsh_util_core.api_post_call
1858               (
1859                 p_return_status => l_return_status,
1860                 x_num_warnings  => l_num_warn,
1861                 x_num_errors    => l_num_error
1862               );
1863             --
1864             --
1865             IF l_debug_on THEN
1866                 WSH_DEBUG_SV.log(l_module_name,'l_do_stop_shipments_type_flag',l_do_stop_shipments_type_flag);
1867             END IF;
1868             IF p_dropoff_location_id IS NOT NULL THEN
1869               update wsh_trip_stops
1870               set  planned_departure_date=p_dropoff_dep_date,
1871                    planned_arrival_date=p_dropoff_arr_date,
1872                    last_update_date   = SYSDATE,
1873                    last_updated_by    = FND_GLOBAL.USER_ID,
1874                    last_update_login  = FND_GLOBAL.LOGIN_ID
1875               where stop_id=p_dropoff_stop_id;
1876 
1877  --
1878         -- DBI Project
1879         -- Updating  WSH_TRIP_STOPS.
1880         -- Call DBI API after the Update.
1881         -- This API will also check for DBI Installed or not
1882         IF l_debug_on THEN
1883           WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Stop id -',p_dropoff_stop_id);
1884         END IF;
1885 	l_stop_tab.delete;
1886 	l_stop_tab(1) := p_dropoff_stop_id;
1887         WSH_INTEGRATION.DBI_Update_Trip_Stop_Log
1888           (p_stop_id_tab	=> l_stop_tab,
1889            p_dml_type		=> 'UPDATE',
1890            x_return_status      => l_dbi_rs);
1891 
1892         IF l_debug_on THEN
1893           WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
1894         END IF;
1895         IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1896 	  x_return_status := l_dbi_rs;
1897           rollback to assign_del_to_trip;
1898 	  -- just pass this return status to caller API
1899           IF l_debug_on THEN
1900             WSH_DEBUG_SV.log(l_module_name,'DBI API Returned Unexpected error '||x_return_status);
1901             --WSH_DEBUG_SV.pop(l_module_name);
1902           END IF;
1903           --return;
1904           raise e_return_excp; -- LPN CONV. rv
1905        END IF;
1906         -- End of Code for DBI Project
1907  --
1908 
1909             END IF;
1910        --}
1911        END IF;
1912         --
1913         -- J-IB-NPARIKH-}
1914 
1915 
1916       -- Bug 3584924: Call WMS if this is the first leg of the delivery.
1917 
1918       IF NOT g_wms_installed.exists(l_org_id) THEN
1919         g_wms_installed(l_org_id) := wsh_util_validate.check_wms_org(l_org_id);
1920       END IF;
1921 
1922       IF g_wms_installed(l_org_id) = 'Y' THEN
1923          -- Check if it is the first leg of the delivery.
1924          l_dummy_leg_id := NULL;
1925          OPEN C_IS_FIRST_LEG(p_trip_id, l_del_rows(i), l_del_pu_location_id);
1926          FETCH C_IS_FIRST_LEG INTO l_dummy_leg_id;
1927          IF C_IS_FIRST_LEG%NOTFOUND THEN
1928             l_dummy_leg_id := NULL;
1929          END IF;
1930          CLOSE C_IS_FIRST_LEG;
1931          IF l_dummy_leg_id IS NOT NULL THEN
1932          -- Call wms to check if assignment is valid
1933             l_dlvy_trip_tbl(1).delivery_id := l_del_rows(i);
1934             l_dlvy_trip_tbl(1).trip_id := p_trip_id;
1935             IF l_debug_on THEN
1936                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_INTERFACE_GRP.Process_Delivery_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
1937                 WSH_DEBUG_SV.log(l_module_name,'trip_id',p_trip_id);
1938                 WSH_DEBUG_SV.log(l_module_name,'del_id',l_del_rows(i));
1939             END IF;
1940             WMS_SHIPPING_INTERFACE_GRP.Process_Delivery_Trip(
1941                                        p_api_version        => 1.0,
1942                                        p_init_msg_list      => wms_shipping_interface_grp.g_false,
1943                                        p_commit             => wms_shipping_interface_grp.g_false,
1944                                        p_validation_level   => wms_shipping_interface_grp.g_full_validation,
1945                                        p_action             => wms_shipping_interface_grp.g_action_assign_dlvy_trip,
1946                                        p_dlvy_trip_tbl      => l_dlvy_trip_tbl,
1947                                        x_return_status      => l_return_status,
1948                                        x_msg_count          => l_msg_count,
1949                                        x_msg_data           => l_msg_data);
1950 
1951             IF l_dlvy_trip_tbl(1).r_message_type IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)
1952             OR l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
1953                FND_MESSAGE.SET_NAME(l_dlvy_trip_tbl(1).r_message_appl,l_dlvy_trip_tbl(1).r_message_code);
1954                IF l_dlvy_trip_tbl(1).r_message_token IS NOT NULL THEN
1955                   FND_MESSAGE.SET_TOKEN(l_dlvy_trip_tbl(1).r_message_token_name, l_dlvy_trip_tbl(1).r_message_token);
1956                END IF;
1957                WSH_UTIL_CORE.ADD_MESSAGE(l_dlvy_trip_tbl(1).r_message_type);
1958                RAISE e_InvalidDelExcep; -- Bug 5336308
1959             END IF;
1960          END IF;
1961 
1962       END IF;
1963       --
1964      EXCEPTION
1965       --
1966       -- Bug 5336308 : Added these exception handlers as replacement for GOTOs
1967       --
1968       WHEN e_InvalidDelExcep THEN
1969        --
1970        ROLLBACK TO ASSIGN_DEL_TO_TRIP;
1971        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_ERROR');
1972        IF l_debug_on THEN
1973          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1974        END IF;
1975        --
1976        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_del_rows(i)));
1977        -- Bug 3439165
1978        FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
1979        wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
1980        l_num_error := l_num_error + 1;
1981        --
1982       WHEN e_CommonExcep THEN
1983        --
1984        ROLLBACK TO ASSIGN_DEL_TO_TRIP;
1985       --)
1986      END;
1987     --)
1988    END LOOP;
1989 
1990    IF p_caller like '%ASSIGNTRIP%' THEN
1991       l_trip_ids(1):=p_trip_id;
1992       WSH_TRIPS_ACTIONS.Handle_Internal_Stops
1993        ( p_trip_ids          => l_trip_ids,
1994         p_caller            => p_caller,
1995         x_success_trip_ids  => l_dummy_trip_ids,
1996         x_return_status     => l_return_status);
1997 
1998       IF l_debug_on THEN
1999          WSH_DEBUG_SV.log(l_module_name,'Handle_Internal_Stops l_return_status',l_return_status);
2000       END IF;
2001 
2002       wsh_util_core.api_post_call
2003               (
2004                 p_return_status => l_return_status,
2005                 x_num_warnings  => l_num_warn,
2006                 x_num_errors    => l_num_error
2007               );
2008    END IF;
2009 
2010    -- J-IB-NPARIKH-{
2011    --
2012    IF  p_pickup_stop_id IS NOT NULL
2013    AND l_pu_stop_shipments_type_flag <> l_pu_stop_shipType_flag_orig
2014    THEN
2015    --{
2016             -- If shipments type flag has changed due to assignment
2017             -- of delivery, update pickup stop with new value.
2018             --
2019             /* H integration - call Multi Leg FTE */
2020             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
2021                -- Get pvt type record structure for stop
2022                --
2023                -- Debug Statements
2024                --
2025                IF l_debug_on THEN
2026                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
2027                END IF;
2028                --
2029                wsh_trip_stops_grp.get_stop_details_pvt
2030                (p_stop_id => p_pickup_stop_id,
2031                x_stop_rec => l_stop_rec,
2032                x_return_status => l_return_status);
2033 
2034                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2035                   x_return_status := l_return_status;
2036                   --
2037                   -- Debug Statements
2038                   --
2039                   --IF l_debug_on THEN
2040                      --WSH_DEBUG_SV.pop(l_module_name);
2041                   --END IF;
2042                   --
2043                   --RETURN;
2044                   raise e_return_excp; -- LPN CONV. rv
2045                END IF;
2046 
2047                --
2048                -- Debug Statements
2049                --
2050                IF l_debug_on THEN
2051                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
2052                END IF;
2053                --
2054                wsh_fte_integration.trip_stop_validations
2055                (p_stop_rec => l_stop_rec,
2056                p_trip_rec => l_trip_rec,
2057                p_action => 'UPDATE',
2058                x_return_status => l_return_status);
2059                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2060                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2061                      l_num_warn := l_num_warn + 1;
2062                   ELSE
2063                      x_return_status := l_return_status;
2064                      --
2065                      -- Debug Statements
2066                      --
2067                      --IF l_debug_on THEN
2068                         --WSH_DEBUG_SV.pop(l_module_name);
2069                      --END IF;
2070                      --
2071                      --RETURN;
2072                      raise e_return_excp; -- LPN CONV. rv
2073                   END IF;
2074                END IF;
2075 
2076             END IF;
2077 
2078 
2079             IF l_debug_on THEN
2080                 WSH_DEBUG_SV.log(l_module_name,'l_pu_stop_shipments_type_flag',l_pu_stop_shipments_type_flag);
2081                 WSH_DEBUG_SV.log(l_module_name,'l_pu_stop_shipType_flag_orig',l_pu_stop_shipType_flag_orig);
2082             END IF;
2083             --
2084             -- J-IB-NPARIKH-}
2085 
2086             /* End of H integration - call Multi Leg FTE */
2087             update wsh_trip_stops
2088             set    shipments_type_flag = l_pu_stop_shipments_type_flag,    -- J-IB-NPARIKH
2089                    last_update_date   = SYSDATE,
2090                    last_updated_by    = FND_GLOBAL.USER_ID,
2091                    last_update_login  = FND_GLOBAL.LOGIN_ID
2092             where stop_id=l_pickup_stop_id;
2093    --}
2094    END IF;
2095    --
2096    --
2097    IF  p_dropoff_stop_id IS NOT NULL
2098    AND l_do_stop_shipments_type_flag <> l_do_stop_shipType_flag_orig
2099    THEN
2100    --{
2101             -- If shipments type flag has changed due to assignment
2102             -- of delivery, update dropoff stop with new value.
2103             --
2104             /* H integration - call Multi Leg FTE */
2105             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
2106                -- Get pvt type record structure for stop
2107                --
2108                -- Debug Statements
2109                --
2110                IF l_debug_on THEN
2111                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
2112                END IF;
2113                --
2114                wsh_trip_stops_grp.get_stop_details_pvt
2115                (p_stop_id => p_dropoff_stop_id,
2116                x_stop_rec => l_stop_rec,
2117                x_return_status => l_return_status);
2118 
2119                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2120                   x_return_status := l_return_status;
2121                   --
2122                   -- Debug Statements
2123                   --
2124                   --IF l_debug_on THEN
2125                      --WSH_DEBUG_SV.pop(l_module_name);
2126                   --END IF;
2127                   --
2128                   --RETURN;
2129                   raise e_return_excp; -- LPN CONV. rv
2130                END IF;
2131 
2132                --
2133                -- Debug Statements
2134                --
2135                IF l_debug_on THEN
2136                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
2137                END IF;
2138                --
2139                wsh_fte_integration.trip_stop_validations
2140                (p_stop_rec => l_stop_rec,
2141                p_trip_rec => l_trip_rec,
2142                p_action => 'UPDATE',
2143                x_return_status => l_return_status);
2144                IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2145                   IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2146                      l_num_warn := l_num_warn + 1;
2147                   ELSE
2148                      x_return_status := l_return_status;
2149                      --
2150                      -- Debug Statements
2151                      --
2152                      --IF l_debug_on THEN
2153                         --WSH_DEBUG_SV.pop(l_module_name);
2154                      --END IF;
2155                      --
2156                      --RETURN;
2157                      raise e_return_excp; -- LPN CONV. rv
2158                   END IF;
2159                END IF;
2160 
2161             END IF;
2162 
2163 
2164             IF l_debug_on THEN
2165                 WSH_DEBUG_SV.log(l_module_name,'l_do_stop_shipments_type_flag',l_do_stop_shipments_type_flag);
2166                 WSH_DEBUG_SV.log(l_module_name,'l_do_stop_shipType_flag_orig',l_do_stop_shipType_flag_orig);
2167             END IF;
2168             --
2169 
2170             /* End of H integration - call Multi Leg FTE */
2171             update wsh_trip_stops
2172             set    shipments_type_flag = l_do_stop_shipments_type_flag,    -- J-IB-NPARIKH
2173                    last_update_date   = SYSDATE,
2174                    last_updated_by    = FND_GLOBAL.USER_ID,
2175                    last_update_login  = FND_GLOBAL.LOGIN_ID
2176             where stop_id=l_dropoff_stop_id;
2177    --}
2178    END IF;
2179    --
2180    --
2181    --
2182    -- J-IB-NPARIKH-{
2183    --
2184    -- Determine new value of shipments type flag for the trip
2185    -- as a result of assignment operation
2186    --
2187    IF l_trip_shipments_type_flag IN ('I','O')
2188    THEN
2189    --{
2190         --
2191         -- If trip already has mixed deliveries, no further updates are required.
2192         -- Hence, this code is restricted only to trip shipments type flag I/O
2193         --
2194         IF l_debug_on THEN
2195             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_VALIDATIONS.has_mixed_deliveries',WSH_DEBUG_SV.C_PROC_LEVEL);
2196         END IF;
2197         --
2198         l_has_mixed_deliveries := WSH_TRIP_VALIDATIONS.has_mixed_deliveries
2199                                     (
2200                                       p_trip_id => p_trip_id
2201                                     );
2202         --
2203         IF l_debug_on THEN
2204             WSH_DEBUG_SV.log(l_module_name,'l_has_mixed_deliveries',l_has_mixed_deliveries);
2205         END IF;
2206         --
2207         --
2208         IF l_has_mixed_deliveries = 'Y'
2209         THEN
2210             l_trip_shipments_type_flag_new := 'M';
2211         ELSIF l_has_mixed_deliveries = 'NI'
2212         THEN
2213             l_trip_shipments_type_flag_new := 'I';
2214         ELSIF l_has_mixed_deliveries = 'NO'
2215         THEN
2216             l_trip_shipments_type_flag_new := 'O';
2217         ELSE
2218             l_trip_shipments_type_flag_new := l_trip_shipments_type_flag;
2219         END IF;
2220         --
2221         IF l_debug_on THEN
2222             WSH_DEBUG_SV.log(l_module_name,'l_trip_shipments_type_flag',l_trip_shipments_type_flag);
2223             WSH_DEBUG_SV.log(l_module_name,'l_trip_shipments_type_flag_new',l_trip_shipments_type_flag_new);
2224         END IF;
2225         --
2226         --
2227         --
2228         --IF l_has_mixed_deliveries = 'Y'
2229         IF  l_trip_shipments_type_flag_new <>  l_trip_shipments_type_flag
2230         THEN
2231             UPDATE WSH_TRIPS
2232             SET    shipments_type_flag = l_trip_shipments_type_flag_new, -- 'M',
2233                    last_update_date   = SYSDATE,
2234                    last_updated_by    = FND_GLOBAL.USER_ID,
2235                    last_update_login  = FND_GLOBAL.LOGIN_ID
2236             WHERE  trip_id             = p_trip_id;
2237 
2238             IF (l_trip_shipments_type_flag_new <> 'M') THEN
2239 
2240               UPDATE WSH_TRIP_STOPS
2241               SET    shipments_type_flag = l_trip_shipments_type_flag_new,
2242                      last_update_date   = SYSDATE,
2243                      last_updated_by    = FND_GLOBAL.USER_ID,
2244                      last_update_login  = FND_GLOBAL.LOGIN_ID
2245               WHERE  trip_id             = p_trip_id
2246               and    shipments_type_flag <> l_trip_shipments_type_flag_new;
2247 
2248               IF l_debug_on THEN
2249                 WSH_DEBUG_SV.log(l_module_name,'SQL%ROWCOUNT After updating wts',SQL%ROWCOUNT);
2250               END IF;
2251 
2252             END IF;
2253         END IF;
2254    --}
2255    END IF;
2256    --
2257    --
2258    -- J-IB-NPARIKH-}
2259 
2260 
2261    Mark_Reprice_Required(
2262    p_entity_type => 'DELIVERY_LEG',
2263    p_entity_ids  => x_leg_rows,
2264    x_return_status => l_return_status);
2265 
2266    IF l_debug_on THEN
2267       WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
2268    END IF;
2269 
2270    IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2271       raise mark_reprice_error;
2272    ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
2273       l_num_warn  := l_num_warn + 1;
2274    END IF;
2275 
2276    --
2277    --
2278 
2279    --J-IB-HEALI {
2280    FOR i IN 1..p_del_rows.count LOOP
2281       IF l_debug_on THEN
2282          WSH_DEBUG_SV.log(l_module_name,'delivery_id',p_del_rows(i));
2283       END IF;
2284 
2285       WSH_NEW_DELIVERY_ACTIONS.Process_Leg_Sequence
2286       ( p_delivery_id        => p_del_rows(i),
2287         p_update_del_flag    => 'Y',
2288         p_update_leg_flag    => 'N',
2289         x_leg_complete       => l_leg_complete,
2290         x_return_status      => l_return_status);
2291 
2292       IF l_debug_on THEN
2293          WSH_DEBUG_SV.log(l_module_name,'Process_Leg_Sequence l_return_status',l_return_status);
2294       END IF;
2295 
2296       wsh_util_core.api_post_call
2297               (
2298                 p_return_status => l_return_status,
2299                 x_num_warnings  => l_num_warn,
2300                 x_num_errors    => l_num_error
2301               );
2302    END LOOP;
2303    --J-IB-HEALI }
2304 
2305   --
2306   -- K LPN CONV. rv
2307   --
2308   IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2309   THEN
2310   --{
2311       IF l_debug_on THEN
2312         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2313       END IF;
2314 
2315       WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2316         (
2317           p_in_rec             => l_lpn_in_sync_comm_rec,
2318           x_return_status      => l_return_status,
2319           x_out_rec            => l_lpn_out_sync_comm_rec
2320         );
2321       --
2322       --
2323       IF l_debug_on THEN
2324         WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2325       END IF;
2326       --
2327       --
2328       WSH_UTIL_CORE.API_POST_CALL
2329         (
2330           p_return_status    => l_return_status,
2331           x_num_warnings     => l_num_warn,
2332           x_num_errors       => l_num_error,
2333           p_raise_error_flag => false
2334         );
2335   --}
2336   END IF;
2337   --
2338   -- K LPN CONV. rv
2339   --
2340    IF (l_num_error > 0) THEN
2341       IF (p_del_rows.count > 1) THEN
2342 
2343          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_SUMMARY');
2344          FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
2345          FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count-l_num_error);
2346          FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2347 
2348          IF (l_num_error = p_del_rows.count) THEN
2349             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2350          ELSE
2351             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2352          END IF;
2353 
2354          wsh_util_core.add_message(x_return_status);
2355       ELSE
2356          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2357       END IF;
2358 
2359    ELSE
2360       /* H integration more changes */
2361       IF l_num_warn > 0 THEN
2362          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2363       ELSE
2364          x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2365       END IF;
2366    END IF;
2367 
2368 
2369 
2370    --
2371    -- Debug Statements
2372    --
2373    IF l_debug_on THEN
2374       WSH_DEBUG_SV.log(l_module_name,'X_LEG_ROWS.COUNT'||x_leg_rows.count);
2375       WSH_DEBUG_SV.pop(l_module_name);
2376    END IF;
2377    --
2378 EXCEPTION
2379     WHEN e_return_excp THEN
2380 
2381           --
2382           -- K LPN CONV. rv
2383           --
2384           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2385           THEN
2386           --{
2387               IF l_debug_on THEN
2388                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2389               END IF;
2390 
2391               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2392                 (
2393                   p_in_rec             => l_lpn_in_sync_comm_rec,
2394                   x_return_status      => l_return_status,
2395                   x_out_rec            => l_lpn_out_sync_comm_rec
2396                 );
2397               --
2398               --
2399               IF l_debug_on THEN
2400                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2401               END IF;
2402               --
2403               --
2404               IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR) and x_return_status <> WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2405                 x_return_status := l_return_status;
2406               END IF;
2407               --
2408           --}
2409           END IF;
2410           --
2411           -- K LPN CONV. rv
2412           --
2413           --
2414           IF l_debug_on THEN
2415             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:E_RETURN_EXCP');
2416           END IF;
2417           --
2418     -- J-IB-NPARIKH-{
2419       --
2420     WHEN FND_API.G_EXC_ERROR THEN
2421       IF c_is_first_leg%isopen THEN
2422          close c_is_first_leg;
2423       END IF;
2424       IF c_get_seq_numbers%ISOPEN THEN
2425          close c_get_seq_numbers;
2426       END IF;
2427       IF c_get_prev_seq_wv%ISOPEN THEN
2428          close c_get_prev_seq_wv;
2429       END IF;
2430       IF c_next_seq_exists%ISOPEN THEN
2431          close c_next_seq_exists;
2432       END IF;
2433       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2434           --
2435           -- K LPN CONV. rv
2436           --
2437           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2438           THEN
2439           --{
2440               IF l_debug_on THEN
2441                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2442               END IF;
2443 
2444               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2445                 (
2446                   p_in_rec             => l_lpn_in_sync_comm_rec,
2447                   x_return_status      => l_return_status,
2448                   x_out_rec            => l_lpn_out_sync_comm_rec
2449                 );
2450               --
2451               --
2452               IF l_debug_on THEN
2453                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2454               END IF;
2455               --
2456               --
2457               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2458                 x_return_status := l_return_status;
2459               END IF;
2460               --
2461           --}
2462           END IF;
2463           --
2464           -- K LPN CONV. rv
2465           --
2466       --
2467       IF l_debug_on THEN
2468         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2469         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2470       END IF;
2471       --
2472     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2473       IF c_is_first_leg%isopen THEN
2474          close c_is_first_leg;
2475       END IF;
2476       IF c_get_seq_numbers%ISOPEN THEN
2477          close c_get_seq_numbers;
2478       END IF;
2479       IF c_get_prev_seq_wv%ISOPEN THEN
2480          close c_get_prev_seq_wv;
2481       END IF;
2482       IF c_next_seq_exists%ISOPEN THEN
2483          close c_next_seq_exists;
2484       END IF;
2485       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2486       --
2487       IF l_debug_on THEN
2488         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2489       END IF;
2490           --
2491           -- K LPN CONV. rv
2492           --
2493           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2494           THEN
2495           --{
2496               IF l_debug_on THEN
2497                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2498               END IF;
2499 
2500               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2501                 (
2502                   p_in_rec             => l_lpn_in_sync_comm_rec,
2503                   x_return_status      => l_return_status,
2504                   x_out_rec            => l_lpn_out_sync_comm_rec
2505                 );
2506               --
2507               --
2508               IF l_debug_on THEN
2509                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2510               END IF;
2511               --
2512               --
2513           --}
2514           END IF;
2515           --
2516           -- K LPN CONV. rv
2517           --
2518       IF l_debug_on THEN
2519         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
2520       END IF;
2521       --
2522       -- J-IB-NPARIKH-}
2523    WHEN mark_reprice_error THEN
2524       IF c_is_first_leg%isopen THEN
2525          close c_is_first_leg;
2526       END IF;
2527       IF c_get_seq_numbers%ISOPEN THEN
2528          close c_get_seq_numbers;
2529       END IF;
2530       IF c_get_prev_seq_wv%ISOPEN THEN
2531          close c_get_prev_seq_wv;
2532       END IF;
2533       IF c_next_seq_exists%ISOPEN THEN
2534          close c_next_seq_exists;
2535       END IF;
2536       FND_MESSAGE.SET_NAME('WSH', 'WSH_REPRICE_REQUIRED_ERR');
2537       WSH_UTIL_CORE.add_message(l_return_status);
2538       x_return_status := l_return_status;
2539       --
2540           --
2541           -- K LPN CONV. rv
2542           --
2543           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2544           THEN
2545           --{
2546               IF l_debug_on THEN
2547                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2548               END IF;
2549 
2550               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2551                 (
2552                   p_in_rec             => l_lpn_in_sync_comm_rec,
2553                   x_return_status      => l_return_status,
2554                   x_out_rec            => l_lpn_out_sync_comm_rec
2555                 );
2556               --
2557               --
2558               IF l_debug_on THEN
2559                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2560               END IF;
2561               --
2562               --
2563               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2564                 x_return_status := l_return_status;
2565               END IF;
2566               --
2567           --}
2568           END IF;
2569           --
2570           -- K LPN CONV. rv
2571           --
2572       -- Debug Statements
2573       --
2574       IF l_debug_on THEN
2575          WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2576          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
2577       END IF;
2578       --
2579    WHEN Invalid_Trip THEN
2580    IF c_is_first_leg%isopen THEN
2581       close c_is_first_leg;
2582    END IF;
2583       IF c_get_seq_numbers%ISOPEN THEN
2584          close c_get_seq_numbers;
2585       END IF;
2586       IF c_get_prev_seq_wv%ISOPEN THEN
2587          close c_get_prev_seq_wv;
2588       END IF;
2589       IF c_next_seq_exists%ISOPEN THEN
2590          close c_next_seq_exists;
2591       END IF;
2592       FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_TRIP');
2593       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2594       wsh_util_core.add_message(x_return_status);
2595           --
2596           -- K LPN CONV. rv
2597           --
2598           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2599           THEN
2600           --{
2601               IF l_debug_on THEN
2602                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2603               END IF;
2604 
2605               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2606                 (
2607                   p_in_rec             => l_lpn_in_sync_comm_rec,
2608                   x_return_status      => l_return_status,
2609                   x_out_rec            => l_lpn_out_sync_comm_rec
2610                 );
2611               --
2612               --
2613               IF l_debug_on THEN
2614                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2615               END IF;
2616               --
2617               --
2618               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2619                 x_return_status := l_return_status;
2620               END IF;
2621               --
2622           --}
2623           END IF;
2624           --
2625           -- K LPN CONV. rv
2626           --
2627       --
2628       -- Debug Statements
2629       --
2630       IF l_debug_on THEN
2631          WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_TRIP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2632          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_TRIP');
2633       END IF;
2634       --
2635    WHEN bad_trip_stop THEN
2636    IF c_is_first_leg%isopen THEN
2637       close c_is_first_leg;
2638    END IF;
2639       IF c_get_seq_numbers%ISOPEN THEN
2640          close c_get_seq_numbers;
2641       END IF;
2642       IF c_get_prev_seq_wv%ISOPEN THEN
2643          close c_get_prev_seq_wv;
2644       END IF;
2645       IF c_next_seq_exists%ISOPEN THEN
2646          close c_next_seq_exists;
2647       END IF;
2648       FND_MESSAGE.SET_NAME('WSH','WSH_STOP_NOT_FOUND');
2649       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2650       wsh_util_core.add_message(x_return_status);
2651       --
2652           --
2653           -- K LPN CONV. rv
2654           --
2655           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2656           THEN
2657           --{
2658               IF l_debug_on THEN
2659                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2660               END IF;
2661 
2662               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2663                 (
2664                   p_in_rec             => l_lpn_in_sync_comm_rec,
2665                   x_return_status      => l_return_status,
2666                   x_out_rec            => l_lpn_out_sync_comm_rec
2667                 );
2668               --
2669               --
2670               IF l_debug_on THEN
2671                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2672               END IF;
2673               --
2674               --
2675               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2676                 x_return_status := l_return_status;
2677               END IF;
2678               --
2679           --}
2680           END IF;
2681           --
2682           -- K LPN CONV. rv
2683           --
2684       -- Debug Statements
2685       --
2686       IF l_debug_on THEN
2687          WSH_DEBUG_SV.logmsg(l_module_name,'BAD_TRIP_STOP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2688          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:BAD_TRIP_STOP');
2689       END IF;
2690       --
2691   WHEN rate_trip_contents_fail THEN
2692    IF c_is_first_leg%isopen THEN
2693       close c_is_first_leg;
2694    END IF;
2695       IF c_get_seq_numbers%ISOPEN THEN
2696          close c_get_seq_numbers;
2697       END IF;
2698       IF c_get_prev_seq_wv%ISOPEN THEN
2699          close c_get_prev_seq_wv;
2700       END IF;
2701       IF c_next_seq_exists%ISOPEN THEN
2702          close c_next_seq_exists;
2703       END IF;
2704         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2705         FND_MESSAGE.Set_Name('WSH', 'WSH_RATE_TRIP_CONTENTS_FAIL');
2706         WSH_UTIL_CORE.Add_Message(x_return_status);
2707           --
2708           -- K LPN CONV. rv
2709           --
2710           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2711           THEN
2712           --{
2713               IF l_debug_on THEN
2714                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2715               END IF;
2716 
2717               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2718                 (
2719                   p_in_rec             => l_lpn_in_sync_comm_rec,
2720                   x_return_status      => l_return_status,
2721                   x_out_rec            => l_lpn_out_sync_comm_rec
2722                 );
2723               --
2724               --
2725               IF l_debug_on THEN
2726                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2727               END IF;
2728               --
2729               --
2730               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2731                 x_return_status := l_return_status;
2732               END IF;
2733               --
2734           --}
2735           END IF;
2736           --
2737           -- K LPN CONV. rv
2738           --
2739         IF l_debug_on THEN
2740             WSH_DEBUG_SV.logmsg(l_module_name,'rate_trip_contents_fail exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2741             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:rate_trip_contents_fail');
2742         END IF;
2743 
2744    WHEN e_lock_error THEN
2745       IF get_stop_new%ISOPEN THEN
2746          close get_stop_new;
2747       ELSIF get_stop%ISOPEN THEN
2748          close get_stop;
2749       END IF;
2750       IF get_trip_status%ISOPEN THEN
2751          close get_trip_status;
2752       ELSIF stop_exists%ISOPEN THEN
2753          close stop_exists;
2754       END IF;
2755 
2756       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2757 
2758       FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
2759       wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
2760       IF l_debug_on THEN
2761          WSH_DEBUG_SV.logmsg(l_module_name,'e_lock_error' ,WSH_DEBUG_SV.C_PROC_LEVEL);
2762       END IF;
2763           --
2764           -- K LPN CONV. rv
2765           --
2766           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2767           THEN
2768           --{
2769               IF l_debug_on THEN
2770                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2771               END IF;
2772 
2773               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2774                 (
2775                   p_in_rec             => l_lpn_in_sync_comm_rec,
2776                   x_return_status      => l_return_status,
2777                   x_out_rec            => l_lpn_out_sync_comm_rec
2778                 );
2779               --
2780               --
2781               IF l_debug_on THEN
2782                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2783               END IF;
2784               --
2785               --
2786           --}
2787           END IF;
2788           --
2789           -- K LPN CONV. rv
2790           --
2791       --
2792       -- Debug Statements
2793       --
2794       IF l_debug_on THEN
2795          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:E_LOCK_ERROR');
2796       END IF;
2797       --
2798    WHEN others THEN
2799       IF get_trip_status%ISOPEN THEN
2800          close get_trip_status;
2801       ELSIF stop_exists%ISOPEN THEN
2802          close stop_exists;
2803       END IF;
2804       IF c_is_first_leg%isopen THEN
2805          close c_is_first_leg;
2806       END IF;
2807       IF c_get_seq_numbers%ISOPEN THEN
2808          close c_get_seq_numbers;
2809       END IF;
2810       IF c_get_prev_seq_wv%ISOPEN THEN
2811          close c_get_prev_seq_wv;
2812       END IF;
2813       IF c_next_seq_exists%ISOPEN THEN
2814          close c_next_seq_exists;
2815       END IF;
2816       wsh_util_core.default_handler('WSH_DELIVERY_LEGS_ACTIONS.ASSIGN_DELIVERIES');
2817       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2818 
2819       IF l_debug_on THEN
2820          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2821       END IF;
2822           --
2823           -- K LPN CONV. rv
2824           --
2825           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
2826           THEN
2827           --{
2828               IF l_debug_on THEN
2829                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
2830               END IF;
2831 
2832               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
2833                 (
2834                   p_in_rec             => l_lpn_in_sync_comm_rec,
2835                   x_return_status      => l_return_status,
2836                   x_out_rec            => l_lpn_out_sync_comm_rec
2837                 );
2838               --
2839               --
2840               IF l_debug_on THEN
2841                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
2842               END IF;
2843               --
2844               --
2845           --}
2846           END IF;
2847           --
2848           -- K LPN CONV. rv
2849           --
2850       --
2851       -- Debug Statements
2852       --
2853       IF l_debug_on THEN
2854          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2855       END IF;
2856       --
2857 END Assign_Deliveries;
2858 
2859 
2860 PROCEDURE Unassign_Deliveries
2861     (p_del_rows      IN   wsh_util_core.id_tab_type,
2862      p_trip_id      IN   NUMBER := NULL,
2863      p_pickup_stop_id    IN   NUMBER := NULL,
2864      p_dropoff_stop_id     IN   NUMBER := NULL,
2865      x_return_status    OUT NOCOPY VARCHAR2
2866      ) IS
2867 
2868 -- Note: dont merge next two cursors due to full table scan problem
2869 
2870 CURSOR del_pickup_exists(p_del_id IN NUMBER) IS
2871 SELECT   delivery_leg_id
2872 FROM    wsh_delivery_legs
2873 WHERE pick_up_stop_id = p_pickup_stop_id
2874 FOR UPDATE NOWAIT;
2875 
2876 CURSOR del_dropoff_exists(p_del_id IN NUMBER) IS
2877 SELECT   delivery_leg_id
2878 FROM    wsh_delivery_legs
2879 WHERE drop_off_stop_id = p_dropoff_stop_id
2880 FOR UPDATE NOWAIT;
2881 
2882 CURSOR del_trip_exists( p_del_id IN NUMBER) IS
2883 SELECT   dg.delivery_leg_id, st1.stop_location_id
2884 FROM    wsh_trip_stops st1,
2885     wsh_trip_stops st2,
2886     wsh_delivery_legs dg
2887 WHERE st1.stop_id = dg.pick_up_stop_id AND
2888     st2.stop_id = dg.drop_off_stop_id AND
2889     st1.trip_id = p_trip_id AND
2890     st2.trip_id = p_trip_id AND
2891     dg.delivery_id = p_del_id
2892 FOR UPDATE NOWAIT;
2893 
2894 cursor get_del_status(c_del_id IN NUMBER) is
2895 select status_code,
2896        nvl(shipment_direction,'O') shipment_direction
2897 from wsh_new_deliveries
2898 where delivery_id = c_del_id;
2899 
2900 -- KLR
2901 /*
2902 cursor get_del_status(c_del_id IN NUMBER) is
2903 select status_code,
2904        nvl(shipment_direction,'O') shipment_direction
2905 from wsh_new_deliveries
2906 where delivery_id = c_del_id;
2907 */
2908 cursor get_del_info(c_del_id IN NUMBER) is
2909 select status_code,
2910        nvl(shipment_direction,'O') shipment_direction,
2911        gross_weight,
2912        net_weight,
2913        volume, initial_pickup_location_id,
2914        organization_id
2915 from wsh_new_deliveries
2916 where delivery_id = c_del_id;
2917 
2918 -- Bug 3875780
2919   CURSOR c_trip_stops(p_trip_id IN NUMBER) IS
2920   SELECT stop_id
2921   FROM   wsh_trip_stops
2922   WHERE  trip_id = p_trip_id;
2923 
2924 
2925   CURSOR c_trip_empty IS
2926   SELECT count(*)
2927   FROM wsh_trip_stops a,wsh_delivery_legs b
2928   WHERE a.stop_id = b.pick_up_stop_id
2929   AND   a.trip_id = p_trip_id
2930   AND   rownum = 1 ;
2931 
2932  l_cnt number;
2933  l_trip_empty BOOLEAN;
2934  --
2935 
2936 l_del_for_update_load_seq VARCHAR2(1); -- bug 6700792:OTM Dock Door App Sched Proj
2937 
2938 l_del_status VARCHAR2(2);
2939 l_gross_wt number;
2940 l_net_wt number;
2941 l_vol number;
2942 l_del_pu_location_id NUMBER;
2943 l_stop_pu_location_id NUMBER;
2944 l_org_id NUMBER;
2945 l_dummy_leg_id NUMBER;
2946 l_dlvy_trip_tbl WMS_SHIPPING_INTERFACE_GRP.g_dlvy_trip_tbl;
2947 l_msg_count NUMBER;
2948 l_msg_data VARCHAR2(2000);
2949 i            NUMBER;
2950 l_del_leg_id         NUMBER;
2951 l_return_status      VARCHAR2(1);
2952 l_ret_status      VARCHAR2(1);
2953 l_num_error       NUMBER := 0;
2954 l_num_warning       NUMBER := 0;
2955 
2956 cannot_unassign       EXCEPTION;
2957 lock_error         EXCEPTION;
2958 pragma EXCEPTION_INIT(lock_error,-54);
2959 
2960 --
2961 l_debug_on BOOLEAN;
2962 --
2963 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UNASSIGN_DELIVERIES';
2964 --
2965 --
2966 l_shipment_direction        VARCHAR2(30);
2967 l_shipping_control     VARCHAR2(30);
2968 l_routing_response_id  NUMBER;
2969 l_routing_request_flag VARCHAR2(30);
2970 -- K LPN CONV. rv
2971 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
2972 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
2973 e_return_excp EXCEPTION;
2974 -- K LPN CONV. rv
2975 BEGIN
2976 
2977   --
2978   -- Debug Statements
2979   --
2980   --
2981   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2982   --
2983   IF l_debug_on IS NULL
2984   THEN
2985       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2986   END IF;
2987 
2988   IF l_debug_on THEN
2989       WSH_DEBUG_SV.push(l_module_name);
2990       --
2991       WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
2992       WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_STOP_ID',P_PICKUP_STOP_ID);
2993       WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_STOP_ID',P_DROPOFF_STOP_ID);
2994   END IF;
2995   --
2996   IF (p_trip_id IS NULL) AND (p_pickup_stop_id IS NULL) AND
2997    (p_dropoff_stop_id IS NULL) THEN
2998   RAISE cannot_unassign;
2999   END IF;
3000 
3001   FOR i IN 1..p_del_rows.count LOOP
3002 
3003   l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3004   l_del_leg_id := NULL;
3005 
3006   -- bug 6700792: OTM Dock Door App Sched Proj
3007   -- l_del_for_update_load_seq will verrify whether the delivery was assigned to a planned trip from OTM.
3008   l_del_for_update_load_seq := 'N';
3009 
3010   --Bug 6884545 Start
3011   --Handling No data found
3012   BEGIN
3013 
3014   SELECT 'Y'
3015   INTO   l_del_for_update_load_seq
3016   FROM   wsh_delivery_legs wdl,
3017          wsh_trip_stops wts,
3018          wsh_trips wt
3019   WHERE  wdl.delivery_id = p_del_rows(i)
3020   AND    wdl.drop_off_stop_id = wts.stop_id
3021   AND    wts.trip_id = wt.trip_id
3022   AND    wt.ignore_for_planning = 'N'
3023   AND    rownum = 1; --Bug 6884545
3024 
3025   EXCEPTION
3026   WHEN NO_DATA_FOUND THEN
3027   l_del_for_update_load_seq := 'N';
3028 
3029   END; --Bug 6884545 End
3030 
3031 -- J: W/V Changes
3032   open get_del_info(p_del_rows(i));
3033   fetch get_del_info into l_del_status, l_shipment_direction, l_gross_wt, l_net_wt, l_vol, l_del_pu_location_id, l_org_id;
3034   close get_del_info;
3035 
3036   --IF l_del_status in ('CL', 'CA', 'SR', 'SC') THEN  -- sperera 940/945
3037 -- Bug 2307456, allow this action for status of SR and SC
3038 
3039       -- Check if the delivery is in a valid status.
3040       IF l_del_status IN ( 'CA') THEN
3041         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_ERROR');
3042         l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3043         wsh_util_core.add_message(l_return_status);
3044       END IF;
3045      --
3046 
3047      IF l_del_status = 'CL'
3048      THEN
3049                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_ERROR');
3050                 l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3051                 wsh_util_core.add_message(l_return_status);
3052      END IF;
3053      --
3054 
3055   l_stop_pu_location_id := NULL;
3056 
3057   IF (p_pickup_stop_id IS NOT NULL) THEN
3058 
3059     OPEN  del_pickup_exists(p_del_rows(i));
3060     FETCH del_pickup_exists INTO l_del_leg_id;
3061     CLOSE del_pickup_exists;
3062 
3063     IF (l_del_leg_id IS NULL) THEN
3064     FND_MESSAGE.SET_NAME('WSH','WSH_STOP_NOT_FOUND');
3065       l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3066        wsh_util_core.add_message(l_return_status);
3067     END IF;
3068 
3069   ELSIF (p_dropoff_stop_id IS NOT NULL) THEN
3070 
3071     OPEN del_dropoff_exists(p_del_rows(i));
3072     FETCH del_dropoff_exists INTO l_del_leg_id;
3073     CLOSE del_dropoff_exists;
3074 
3075     IF (l_del_leg_id IS NULL) THEN
3076     FND_MESSAGE.SET_NAME('WSH','WSH_STOP_NOT_FOUND');
3077     l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3078     wsh_util_core.add_message(l_return_status);
3079     END IF;
3080 
3081   ELSIF (p_trip_id IS NOT NULL) THEN
3082     OPEN del_trip_exists(p_del_rows(i));
3083     FETCH del_trip_exists INTO l_del_leg_id, l_stop_pu_location_id;
3084     CLOSE del_trip_exists;
3085 
3086     IF (l_del_leg_id IS NULL) THEN
3087     FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
3088     l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3089     wsh_util_core.add_message(l_return_status);
3090     END IF;
3091 
3092   END IF;
3093 
3094   -- Bug 3584924
3095   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3096       IF NOT g_wms_installed.exists(l_org_id) THEN
3097         g_wms_installed(l_org_id) := wsh_util_validate.check_wms_org(l_org_id);
3098       END IF;
3099 
3100       IF g_wms_installed(l_org_id) = 'Y' THEN
3101          -- Check if it is the first leg of the delivery.
3102          l_dummy_leg_id := NULL;
3103          IF l_stop_pu_location_id IS NOT NULL THEN
3104             IF l_stop_pu_location_id = l_del_pu_location_id THEN
3105                l_dummy_leg_id := l_del_leg_id;
3106             END IF;
3107          ELSE
3108             OPEN C_IS_FIRST_LEG(p_trip_id, p_del_rows(i), l_del_pu_location_id);
3109             FETCH C_IS_FIRST_LEG INTO l_dummy_leg_id;
3110             IF C_IS_FIRST_LEG%NOTFOUND THEN
3111                l_dummy_leg_id := NULL;
3112             END IF;
3113             CLOSE C_IS_FIRST_LEG;
3114          END IF;
3115          IF l_dummy_leg_id IS NOT NULL THEN
3116          -- Call wms to check if unassignment is valid
3117             l_dlvy_trip_tbl(1).delivery_id := p_del_rows(i);
3118             l_dlvy_trip_tbl(1).trip_id := p_trip_id;
3119             IF l_debug_on THEN
3120                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_INTERFACE_GRP.Process_Delivery_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
3121                 WSH_DEBUG_SV.log(l_module_name,'trip_id',p_trip_id);
3122                 WSH_DEBUG_SV.log(l_module_name,'del_id',p_del_rows(i));
3123             END IF;
3124             WMS_SHIPPING_INTERFACE_GRP.Process_Delivery_Trip(
3125                                        p_api_version        => 1.0,
3126                                        p_init_msg_list      => wms_shipping_interface_grp.g_false,
3127                                        p_commit             => wms_shipping_interface_grp.g_false,
3128                                        p_validation_level   => wms_shipping_interface_grp.g_full_validation,
3129                                        p_action             => wms_shipping_interface_grp.g_action_unassign_dlvy_trip,
3130                                        p_dlvy_trip_tbl      => l_dlvy_trip_tbl,
3131                                        x_return_status      => l_return_status,
3132                                        x_msg_count          => l_msg_count,
3133                                        x_msg_data           => l_msg_data);
3134             IF l_dlvy_trip_tbl(1).r_message_type IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)
3135             OR l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
3136                FND_MESSAGE.SET_NAME(l_dlvy_trip_tbl(1).r_message_appl,l_dlvy_trip_tbl(1).r_message_code);
3137                IF l_dlvy_trip_tbl(1).r_message_token IS NOT NULL THEN
3138                   FND_MESSAGE.SET_TOKEN(l_dlvy_trip_tbl(1).r_message_token_name, l_dlvy_trip_tbl(1).r_message_token);
3139                END IF;
3140                WSH_UTIL_CORE.ADD_MESSAGE(l_dlvy_trip_tbl(1).r_message_type);
3141                l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3142                l_num_error := l_num_error + 1;
3143             END IF;
3144          END IF;
3145 
3146       END IF;
3147   END IF;
3148   -- J: W/V Changes
3149   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3150 
3151     IF l_debug_on THEN
3152         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Del_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3153     END IF;
3154     WSH_WV_UTILS.Del_WV_Post_Process(
3155       p_delivery_id     => p_del_rows(i),
3156       p_diff_gross_wt   => -1 * l_gross_wt,
3157       p_diff_net_wt     => -1 * l_net_wt,
3158       p_diff_volume     => -1 * l_vol,
3159       p_check_for_empty => 'Y',
3160       p_leg_id          => l_del_leg_id,
3161       x_return_status   => l_return_status);
3162   END IF;
3163 
3164   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3165     IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3166     l_num_warning := l_num_warning + 1;
3167     ELSE
3168     l_num_error := l_num_error + 1;
3169     END IF;
3170   END IF;
3171 
3172 
3173   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3174 
3175     --
3176     -- Debug Statements
3177     --
3178     IF l_debug_on THEN
3179         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.DELETE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
3180     END IF;
3181     --
3182     wsh_delivery_legs_pvt.delete_delivery_leg(NULL,
3183                         l_del_leg_id, l_return_status);
3184 
3185   END IF;
3186 
3187   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3188     IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3189     l_num_warning := l_num_warning + 1;
3190     ELSE
3191     l_num_error := l_num_error + 1;
3192     END IF;
3193   END IF;
3194 
3195   -- bug 6700792: OTM Dock Door Appt Sched Proj
3196   -- NULL out the Load Sequencing Number for WMS enabled OTM org while unassigning delivery from trip.
3197   IF (l_del_for_update_load_seq = 'Y' AND g_wms_installed(l_org_id) = 'Y') THEN
3198 
3199     DECLARE
3200 
3201     CURSOR c_lock_delivery_details (c_delivery_id IN number) IS
3202     SELECT wdd.delivery_detail_id
3203     FROM   wsh_delivery_assignments wda,
3204            wsh_delivery_details wdd
3205     WHERE  wda.delivery_id = c_delivery_id
3206     AND    wda.delivery_detail_id = wdd.delivery_detail_id
3207     FOR UPDATE OF wdd.load_seq_number NOWAIT;
3208 
3209     l_del_det_tab WSH_UTIL_CORE.ID_TAB_TYPE;
3210 
3211     BEGIN
3212 
3213       l_del_det_tab.DELETE;
3214 
3215       OPEN  c_lock_delivery_details (p_del_rows(i));
3216       FETCH c_lock_delivery_details BULK COLLECT INTO l_del_det_tab;
3217       IF l_del_det_tab.COUNT > 0 THEN
3218         IF l_debug_on THEN
3219           WSH_DEBUG_SV.log(l_module_name, 'Updating Deliveries and Details With Loading Sequence as NULL');
3220         END IF;
3221 
3222         UPDATE wsh_new_deliveries
3223         SET    loading_sequence   = NULL,
3224                last_update_date   = SYSDATE,
3225                last_updated_by    = FND_GLOBAL.USER_ID,
3226                last_update_login  = FND_GLOBAL.LOGIN_ID
3227         WHERE  delivery_id = p_del_rows(i);
3228 
3229         FORALL i in l_del_det_tab.FIRST..l_del_det_tab.LAST
3230           UPDATE  wsh_delivery_details
3231           SET     load_seq_number    = NULL,
3232                   last_update_date   = SYSDATE,
3233                   last_updated_by    = FND_GLOBAL.USER_ID,
3234                   last_update_login  = FND_GLOBAL.LOGIN_ID
3235           WHERE   delivery_detail_id = l_del_det_tab(i);
3236 
3237       END IF;
3238 
3239       CLOSE c_lock_delivery_details;
3240 
3241     EXCEPTION
3242       WHEN OTHERS THEN
3243         l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3244         IF c_lock_delivery_details%ISOPEN then
3245           CLOSE c_lock_delivery_details;
3246         END IF;
3247         IF l_debug_on THEN
3248           WSH_DEBUG_SV.log(l_module_name, 'Unable to lock Deliveries/Details for delivery '||p_del_rows(i));
3249           WSH_DEBUG_SV.log(l_module_name, 'l_return_status', l_return_status);
3250         END IF;
3251         RAISE cannot_unassign;
3252     END;
3253   END IF;
3254   --
3255 
3256   END LOOP;
3257 
3258   -- bug 3875780
3259    IF WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y' THEN
3260         l_trip_empty := FALSE;
3261 	OPEN c_trip_empty ;
3262 	FETCH c_trip_empty into l_cnt;
3263 	CLOSE c_trip_empty;
3264 
3265 	IF l_cnt = 0 THEN
3266 	   l_trip_empty := TRUE;
3267 	END IF;
3268 	IF l_trip_empty THEN
3269 
3270            FOR rec IN c_trip_stops(p_trip_id) LOOP
3271 	  	WSH_TRIPS_ACTIONS.Fte_Load_Tender(
3272 		  p_stop_id       => rec.stop_id,
3273 		  p_gross_weight  => null,
3274 		  p_net_weight    => null,
3275 		  p_volume        => null,
3276 		  p_fill_percent  => null,
3277 		  x_return_status => l_return_status);
3278 
3279 		IF l_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3280 		  x_return_status := l_return_status;
3281 		  --RETURN;
3282                   raise e_return_excp; -- LPN CONV. rv
3283                 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3284                   -- we need to return warning if FTE gives warning here.
3285                   l_num_warning := l_num_warning + 1;
3286 		END IF;
3287            END LOOP;
3288 
3289         END IF;
3290    END IF;
3291   --
3292   -- K LPN CONV. rv
3293   --
3294   IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3295   THEN
3296   --{
3297       IF l_debug_on THEN
3298         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3299       END IF;
3300 
3301       WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3302         (
3303           p_in_rec             => l_lpn_in_sync_comm_rec,
3304           x_return_status      => l_return_status,
3305           x_out_rec            => l_lpn_out_sync_comm_rec
3306         );
3307       --
3308       --
3309       IF l_debug_on THEN
3310         WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3311       END IF;
3312       --
3313       --
3314       WSH_UTIL_CORE.API_POST_CALL
3315         (
3316           p_return_status    => l_return_status,
3317           x_num_warnings     => l_num_warning,
3318           x_num_errors       => l_num_error,
3319           p_raise_error_flag => false
3320         );
3321   --}
3322   END IF;
3323   --
3324   -- K LPN CONV. rv
3325   --
3326 
3327   IF (l_num_error >= p_del_rows.count) THEN
3328   x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3329   ELSIF (l_num_warning > 0 OR l_num_error >0)THEN
3330   x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3331   ELSE
3332   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3333   END IF;
3334 
3335 --
3336 -- Debug Statements
3337 --
3338 IF l_debug_on THEN
3339     WSH_DEBUG_SV.pop(l_module_name);
3340 END IF;
3341 --
3342 EXCEPTION
3343     WHEN e_return_excp THEN
3344 
3345           --
3346           -- K LPN CONV. rv
3347           --
3348           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3349           THEN
3350           --{
3351               IF l_debug_on THEN
3352                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3353               END IF;
3354 
3355               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3356                 (
3357                   p_in_rec             => l_lpn_in_sync_comm_rec,
3358                   x_return_status      => l_return_status,
3359                   x_out_rec            => l_lpn_out_sync_comm_rec
3360                 );
3361               --
3362               --
3363               IF l_debug_on THEN
3364                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3365               END IF;
3366               --
3367               --
3368               IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR) and x_return_status <> WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3369                 x_return_status := l_return_status;
3370               END IF;
3371               --
3372           --}
3373           END IF;
3374           --
3375           -- K LPN CONV. rv
3376           --
3377           --
3378           IF l_debug_on THEN
3379             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:E_RETURN_EXCP');
3380           END IF;
3381           --
3382     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3383 
3384       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
3385       IF l_debug_on THEN
3386         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3387       END IF;
3388           --
3389           -- K LPN CONV. rv
3390           --
3391           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3392           THEN
3393           --{
3394               IF l_debug_on THEN
3395                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3396               END IF;
3397 
3398               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3399                 (
3400                   p_in_rec             => l_lpn_in_sync_comm_rec,
3401                   x_return_status      => l_return_status,
3402                   x_out_rec            => l_lpn_out_sync_comm_rec
3403                 );
3404               --
3405               --
3406               IF l_debug_on THEN
3407                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3408               END IF;
3409               --
3410               --
3411           --}
3412           END IF;
3413           --
3414           -- K LPN CONV. rv
3415           --
3416       --
3417       IF c_is_first_leg%isopen THEN
3418           close c_is_first_leg;
3419       END IF;
3420       IF l_debug_on THEN
3421         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
3422       END IF;
3423       --
3424 
3425    WHEN lock_error THEN
3426    IF c_is_first_leg%isopen THEN
3427       close c_is_first_leg;
3428    END IF;
3429    FND_MESSAGE.SET_NAME('FND','FORM_UNABLE_TO_RESERVE_RECORD');
3430    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3431    wsh_util_core.add_message(x_return_status);
3432           --
3433           -- K LPN CONV. rv
3434           --
3435           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3436           THEN
3437           --{
3438               IF l_debug_on THEN
3439                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3440               END IF;
3441 
3442               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3443                 (
3444                   p_in_rec             => l_lpn_in_sync_comm_rec,
3445                   x_return_status      => l_return_status,
3446                   x_out_rec            => l_lpn_out_sync_comm_rec
3447                 );
3448               --
3449               --
3450               IF l_debug_on THEN
3451                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3452               END IF;
3453               --
3454               --
3455               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3456                 x_return_status := l_return_status;
3457               END IF;
3458               --
3459           --}
3460           END IF;
3461           --
3462           -- K LPN CONV. rv
3463           --
3464    --
3465    -- Debug Statements
3466    --
3467    IF l_debug_on THEN
3468        WSH_DEBUG_SV.logmsg(l_module_name,'LOCK_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3469        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:LOCK_ERROR');
3470    END IF;
3471    --
3472   WHEN cannot_unassign THEN
3473     IF c_is_first_leg%isopen THEN
3474        close c_is_first_leg;
3475     END IF;
3476     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_ERROR');
3477    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3478    wsh_util_core.add_message(x_return_status);
3479           --
3480           -- K LPN CONV. rv
3481           --
3482           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3483           THEN
3484           --{
3485               IF l_debug_on THEN
3486                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3487               END IF;
3488 
3489               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3490                 (
3491                   p_in_rec             => l_lpn_in_sync_comm_rec,
3492                   x_return_status      => l_return_status,
3493                   x_out_rec            => l_lpn_out_sync_comm_rec
3494                 );
3495               --
3496               --
3497               IF l_debug_on THEN
3498                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3499               END IF;
3500               --
3501               --
3502               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3503                 x_return_status := l_return_status;
3504               END IF;
3505               --
3506           --}
3507           END IF;
3508           --
3509           -- K LPN CONV. rv
3510           --
3511    --
3512    -- Debug Statements
3513    --
3514    IF l_debug_on THEN
3515        WSH_DEBUG_SV.logmsg(l_module_name,'CANNOT_UNASSIGN exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3516        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CANNOT_UNASSIGN');
3517    END IF;
3518    --
3519   WHEN others THEN
3520   iF c_is_first_leg%isopen THEN
3521      close c_is_first_leg;
3522   END IF;
3523   wsh_util_core.default_handler('WSH_DELIVERY_LEGS_ACTIONS.UNASSIGN_DELIVERIES');
3524   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3525 IF l_debug_on THEN
3526     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3527 END IF;
3528           --
3529           -- K LPN CONV. rv
3530           --
3531           IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3532           THEN
3533           --{
3534               IF l_debug_on THEN
3535                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3536               END IF;
3537 
3538               WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3539                 (
3540                   p_in_rec             => l_lpn_in_sync_comm_rec,
3541                   x_return_status      => l_return_status,
3542                   x_out_rec            => l_lpn_out_sync_comm_rec
3543                 );
3544               --
3545               --
3546               IF l_debug_on THEN
3547                 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
3548               END IF;
3549               --
3550               --
3551           --}
3552           END IF;
3553           --
3554           -- K LPN CONV. rv
3555           --
3556 
3557 --
3558 -- Debug Statements
3559 --
3560 IF l_debug_on THEN
3561     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3562 END IF;
3563 --
3564 END Unassign_Deliveries;
3565 
3566 
3567 /*  H integration: Pricing integration csun
3568 */
3569 --
3570 -- Name        Mark_Reprice_Required
3571 -- Purpose     This Procedure will set REPRICE_REQUIRED of
3572 --             delivery leg record
3573 --
3574 -- Input Arguments
3575 --       p_entity_type: entity type, valid values are
3576 --                     'DELIVERY_DETAIL', 'DELIVERY', 'TRIP',
3577 --                     'DELIVERY_LEG'
3578 --       p_entity_id : the entity id of the entity type
3579 --
3580 --TL Rating adding 'STOP' for call from create,update, delete stop
3581 --when trip mode is 'TRUCK'
3582 
3583 PROCEDURE Mark_Reprice_Required(
3584      p_entity_type           IN  VARCHAR2,
3585      p_entity_ids            IN  WSH_UTIL_CORE.id_tab_type,
3586      p_consolidation_change  IN  VARCHAR2 DEFAULT 'N',
3587      x_return_status         OUT NOCOPY VARCHAR2) IS
3588 
3589   cursor get_trip_from_det( c_delivery_detail_id NUMBER) is
3590     SELECT dlg.delivery_leg_id, trip.trip_id, trip.consolidation_allowed,
3591            trip.lane_id, trip.mode_of_transport
3592     FROM   wsh_delivery_legs dlg,
3593            wsh_delivery_assignments_v da,
3594            wsh_trips trip,
3595            wsh_trip_stops st
3596     WHERE  da.delivery_detail_id = c_delivery_detail_id AND
3597            da.delivery_id = dlg.delivery_id AND
3598            dlg.pick_up_stop_id = st.stop_id AND
3599            st.trip_id = trip.trip_id;
3600 
3601 cursor get_trip_from_del( c_delivery_id NUMBER) is
3602   SELECT dlg.delivery_leg_id, trip.trip_id, trip.consolidation_allowed,
3603          trip.lane_id, trip.mode_of_transport
3604   FROM   wsh_delivery_legs dlg,
3605          wsh_trip_stops stop,
3606          wsh_trips  trip
3607   WHERE  dlg.delivery_id = c_delivery_id and
3608          dlg.pick_up_stop_id = stop.stop_id and
3609          stop.trip_id = trip.trip_id;
3610 
3611 cursor get_trip_from_leg( c_leg_id NUMBER) is
3612   SELECT dlg.delivery_leg_id, trip.trip_id, trip.consolidation_allowed,
3613          trip.lane_id, trip.mode_of_transport
3614   FROM   wsh_delivery_legs   dlg,
3615          wsh_trip_stops      stop,
3616          wsh_trips           trip
3617   WHERE  dlg.delivery_leg_id = c_leg_id AND
3618          dlg.pick_up_stop_id = stop.stop_id AND
3619          stop.trip_id = trip.trip_id;
3620 
3621 --gets all legs for the trip the stop belongs to
3622 cursor get_trip_from_stop(c_stop_id NUMBER) is
3623  SELECT dlg.delivery_leg_id, trip.trip_id, trip.consolidation_allowed,
3624         trip.lane_id, trip.mode_of_transport
3625  FROM   wsh_trip_stops stop,
3626         wsh_trips      trip,
3627         wsh_delivery_legs dlg,
3628         wsh_trip_stops ts
3629  WHERE  stop.stop_id = c_stop_id AND
3630         stop.trip_id = trip.trip_id AND
3631         ts.trip_id=trip.trip_id AND
3632         dlg.pick_up_stop_id = ts.stop_id;
3633 
3634 cursor get_legs_from_trip( c_trip_id NUMBER) is
3635  SELECT dlg.delivery_leg_id, trip.trip_id, trip.consolidation_allowed,
3636         trip.lane_id, trip.mode_of_transport
3637  FROM   wsh_trip_stops ts,
3638         wsh_delivery_legs dlg,
3639         wsh_trips trip
3640  WHERE  ts.trip_id = c_trip_id AND
3641         dlg.pick_up_stop_id = ts.stop_id AND
3642         ts.trip_id = trip.trip_id;
3643 
3644 cursor legs_priced_cur( c_trip_id NUMBER) is
3645  select 1
3646  from   wsh_freight_costs wfc,
3647         wsh_trip_stops    wts,
3648         wsh_delivery_legs wdl
3649  where  wts.trip_id         = c_trip_id
3650  and    wdl.pick_up_stop_id = wts.stop_id
3651  and    wfc.delivery_leg_id = wdl.delivery_leg_id
3652  and    wfc.line_type_code  = 'SUMMARY'
3653  and    wfc.delivery_detail_id is null
3654  and    NVL(wfc.total_amount,0) > 0;
3655 
3656 
3657 cursor leg_price_cur( c_dleg_id NUMBER) is
3658  select NVL(wfc.total_amount,0) price
3659  from   wsh_freight_costs wfc
3660  where  wfc.delivery_leg_id = c_dleg_id
3661  and    wfc.line_type_code  = 'SUMMARY'
3662  and    wfc.delivery_detail_id is null
3663  and    NVL(wfc.total_amount,0) > 0;
3664 
3665 cursor c_lock_delivery_leg(c_delivery_leg_id NUMBER) is
3666  SELECT delivery_leg_id, status_code, reprice_required, parent_delivery_leg_id
3667  FROM wsh_delivery_legs
3668  WHERE delivery_leg_id = c_delivery_leg_id FOR UPDATE OF reprice_required NOWAIT;
3669 
3670 -- Bug 4451383
3671 cursor get_trip_details ( c_trip_id NUMBER) is
3672  SELECT mode_of_transport, lane_id
3673  --SELECT consolidation_allowed, lane_id
3674  FROM wsh_trips
3675  WHERE trip_id = c_trip_id;
3676 
3677 l_lock_delivery_leg_rec    c_lock_delivery_leg%ROWTYPE;
3678 
3679 l_del_leg_tab      WSH_UTIL_CORE.Id_Tab_Type;
3680 
3681 l_final_leg_tab        WSH_UTIL_CORE.Id_Tab_Type;
3682 l_parent_leg_tab        WSH_UTIL_CORE.Id_Tab_Type;
3683 
3684 j NUMBER := 0;
3685 k NUMBER := 0;
3686 
3687 l_duplicate  NUMBER := 0;
3688 
3689 invalid_parameter EXCEPTION;
3690 
3691 l_at_least_one_leg_priced BOOLEAN;
3692 l_price NUMBER := 0;
3693 
3694 -- Bug 4451383
3695 l_consolidation_allowed wsh_trips.consolidation_allowed%type;
3696 l_mode_of_transport wsh_trips.mode_of_transport%type;
3697 l_lane_id wsh_trips.lane_id%type;
3698 
3699 delivery_leg_locked exception  ;
3700 -- PRAGMA EXCEPTION_INIT(delivery_leg_locked, -54);
3701 
3702  --for mode=TRUCK
3703  C_TRUCK VARCHAR2(5):='TRUCK';
3704 
3705  --
3706 l_debug_on BOOLEAN;
3707  --
3708  l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'MARK_REPRICE_REQUIRED';
3709  --
3710   BEGIN
3711     --
3712     -- Debug Statements
3713     --
3714     --
3715     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3716     --
3717     IF l_debug_on IS NULL
3718     THEN
3719         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3720     END IF;
3721 
3722     IF l_debug_on THEN
3723         WSH_DEBUG_SV.push(l_module_name);
3724         --
3725         WSH_DEBUG_SV.log(l_module_name,'P_ENTITY_TYPE',P_ENTITY_TYPE);
3726         WSH_DEBUG_SV.log(l_module_name,'P_CONSOLIDATION_CHANGE',P_CONSOLIDATION_CHANGE);
3727     END IF;
3728     --
3729     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3730 
3731     --bug 3413328 - consolidation_allowed flag has been removed now from UI
3732     --removed checking for consolidation_allowed
3733 
3734     IF  WSH_UTIL_CORE.FTE_Is_Installed = 'Y'  AND p_entity_ids.count > 0 THEN
3735       l_del_leg_tab.delete;
3736       l_final_leg_tab.delete;
3737 
3738       IF p_entity_type = 'DELIVERY_DETAIL' THEN
3739         FOR i IN  1 .. p_entity_ids.count LOOP
3740           FOR l_leg IN get_trip_from_det(p_entity_ids(i)) LOOP
3741             l_at_least_one_leg_priced := FALSE;
3742             l_price := 0;
3743             --
3744             FOR leg_price_rec IN leg_price_cur(l_leg.delivery_leg_id) LOOP
3745               l_price := l_price+leg_price_rec.price;
3746             END LOOP;
3747             --
3748             IF l_price > 0 THEN
3749               j := j + 1;
3750               l_del_leg_tab(j) := l_leg.delivery_leg_id;
3751               l_at_least_one_leg_priced := TRUE;
3752             END IF;
3753             --
3754             IF (l_leg.lane_id is not null)
3755             --TL Rating
3756             OR l_leg.mode_of_transport=C_TRUCK THEN
3757 
3758               IF NOT(l_at_least_one_leg_priced) THEN
3759                 FOR legs_priced_rec IN legs_priced_cur( l_leg.trip_id ) LOOP
3760                   l_at_least_one_leg_priced := TRUE;
3761                 END LOOP;
3762               END IF;
3763               --
3764               IF l_at_least_one_leg_priced THEN
3765                 FOR l_other IN get_legs_from_trip( l_leg.trip_id ) LOOP
3766                   j := j + 1;
3767                   l_del_leg_tab(j) := l_other.delivery_leg_id;
3768                 END LOOP;
3769               END IF;
3770              END IF;
3771            END LOOP;
3772         END LOOP;
3773 
3774       ELSIF p_entity_type = 'DELIVERY' THEN
3775         FOR i IN  1 .. p_entity_ids.count LOOP
3776           FOR l_leg IN get_trip_from_del(p_entity_ids(i)) LOOP
3777             l_at_least_one_leg_priced := FALSE;
3778             l_price := 0;
3779             --
3780             FOR leg_price_rec IN leg_price_cur(l_leg.delivery_leg_id) LOOP
3781               l_price := l_price+leg_price_rec.price;
3782             END LOOP;
3783             --
3784             IF l_price > 0 THEN
3785               j := j + 1;
3786               l_del_leg_tab(j) := l_leg.delivery_leg_id;
3787               l_at_least_one_leg_priced := TRUE;
3788             END IF;
3789 
3790             IF (l_leg.lane_id is not null)
3791             --TL Rating
3792             OR l_leg.mode_of_transport=C_TRUCK THEN
3793 
3794               IF NOT(l_at_least_one_leg_priced) THEN
3795                 FOR legs_priced_rec IN legs_priced_cur( l_leg.trip_id ) LOOP
3796                   l_at_least_one_leg_priced := TRUE;
3797                 END LOOP;
3798               END IF;
3799               --
3800               IF l_at_least_one_leg_priced THEN
3801                 FOR l_other IN get_legs_from_trip( l_leg.trip_id ) LOOP
3802                   j := j + 1;
3803                   l_del_leg_tab(j) := l_other.delivery_leg_id;
3804                 END LOOP;
3805               END IF;
3806             END IF;
3807 
3808           END LOOP;
3809 
3810         END LOOP;
3811 
3812       ELSIF p_entity_type = 'DELIVERY_LEG' THEN
3813         FOR i IN  1 .. p_entity_ids.count LOOP
3814           FOR l_leg IN get_trip_from_leg(p_entity_ids(i)) LOOP
3815             --j := j + 1;
3816             --l_del_leg_tab(j) := l_leg.delivery_leg_id;
3817             l_at_least_one_leg_priced := FALSE;
3818             --
3819 ---  Added the following condition for the Bug 4451383
3820            IF (l_leg.lane_id is not null
3821                OR  l_leg.mode_of_transport=C_TRUCK
3822               )
3823            THEN
3824 
3825              IF l_debug_on THEN
3826                  WSH_DEBUG_SV.logmsg(l_module_name,'legs_priced_cur is being opened for dlegs');
3827              END IF;
3828 
3829              FOR legs_priced_rec IN legs_priced_cur( l_leg.trip_id ) LOOP
3830                l_at_least_one_leg_priced := TRUE;
3831              END LOOP;
3832            END IF;
3833             --
3834             --
3835             IF ((l_leg.lane_id is not null)
3836                 --TL Rating
3837                 OR l_leg.mode_of_transport=C_TRUCK) AND l_at_least_one_leg_priced THEN
3838               FOR l_other IN get_legs_from_trip( l_leg.trip_id ) LOOP
3839                 j := j + 1;
3840                 l_del_leg_tab(j) := l_other.delivery_leg_id;
3841                 --
3842               END LOOP;
3843             END IF;
3844           END LOOP;
3845         END LOOP;
3846       ELSIF p_entity_type = 'STOP' THEN
3847         FOR i IN  1 .. p_entity_ids.count LOOP
3848           FOR l_leg IN get_trip_from_stop(p_entity_ids(i)) LOOP
3849             l_at_least_one_leg_priced := FALSE;
3850 
3851 ---  Added the following condition for the Bug 4451383
3852            IF (l_leg.lane_id is not null
3853                OR  l_leg.mode_of_transport=C_TRUCK
3854               )
3855            THEN
3856 
3857              IF l_debug_on THEN
3858                  WSH_DEBUG_SV.logmsg(l_module_name,'legs_priced_cur is being opened for stops');
3859              END IF;
3860 
3861               FOR legs_priced_rec IN legs_priced_cur( l_leg.trip_id ) LOOP
3862                 l_at_least_one_leg_priced := TRUE;
3863               END LOOP;
3864             END IF;
3865 
3866             IF ((l_leg.lane_id is not null)
3867                 --TL Rating
3868                 OR l_leg.mode_of_transport=C_TRUCK) AND l_at_least_one_leg_priced THEN
3869               FOR l_other IN get_legs_from_trip( l_leg.trip_id ) LOOP
3870                 j := j + 1;
3871                 l_final_leg_tab(j) := l_other.delivery_leg_id;
3872               END LOOP;
3873             END IF;
3874           END LOOP;
3875         END LOOP;
3876 
3877       ELSIF p_entity_type = 'TRIP' THEN
3878         FOR i IN  1 .. p_entity_ids.count LOOP
3879           l_at_least_one_leg_priced := FALSE;
3880  -- Bug 4451383 new cursor to get trip details
3881           open get_trip_details(p_entity_ids(i) );
3882           fetch get_trip_details into l_mode_of_transport,l_lane_id;
3883           close get_trip_details;
3884 
3885           IF (  l_mode_of_transport = C_TRUCK OR
3886                 l_lane_id is not null) THEN
3887 
3888              IF l_debug_on THEN
3889                  WSH_DEBUG_SV.logmsg(l_module_name,'legs_priced_cur is being opened for trips');
3890              END IF;
3891 
3892             FOR legs_priced_rec IN legs_priced_cur( p_entity_ids(i) ) LOOP
3893               l_at_least_one_leg_priced := TRUE;
3894             END LOOP;
3895           END IF;
3896           --
3897           --
3898           IF l_at_least_one_leg_priced THEN
3899             FOR l_other IN get_legs_from_trip(p_entity_ids(i)) LOOP
3900               IF (l_other.lane_id is not null
3901                   --TL Rating
3902                   OR l_other.mode_of_transport=C_TRUCK) THEN
3903                 j := j + 1;
3904                 l_final_leg_tab(j) := l_other.delivery_leg_id;
3905               END IF;
3906             END LOOP;
3907           END IF;
3908         END LOOP;
3909 
3910       ELSE
3911         RAISE invalid_parameter;
3912       END IF;
3913 
3914         -- remove duplicate delivery leg ids
3915       IF p_entity_type NOT IN ('TRIP', 'STOP') THEN
3916         FOR i in 1 .. l_del_leg_tab.count LOOP
3917           IF i = 1 THEN
3918               l_final_leg_tab(1) := l_del_leg_tab(i);
3919           ELSE
3920              l_duplicate := 0;
3921              FOR k in 1 .. l_final_leg_tab.count LOOP
3922                 IF l_del_leg_tab(i) = l_final_leg_tab(k) THEN
3923                    l_duplicate := 1;
3924                    exit;
3925                 END IF;
3926              END LOOP;
3927              IF l_duplicate = 0 THEN
3928                 l_final_leg_tab(l_final_leg_tab.count+1) := l_del_leg_tab(i);
3929              END IF;
3930           END IF;
3931         END LOOP;
3932       END IF;
3933 
3934       FOR i in 1 .. l_final_leg_tab.count  LOOP
3935         OPEN c_lock_delivery_leg(l_final_leg_tab(i));
3936         FETCH c_lock_delivery_leg INTO l_lock_delivery_leg_rec;
3937         IF c_lock_delivery_leg%FOUND THEN
3938           IF l_lock_delivery_leg_rec.reprice_required <> 'Y' THEN
3939              UPDATE wsh_delivery_legs
3940              SET reprice_required = 'Y'
3941              WHERE CURRENT OF c_lock_delivery_leg;
3942              IF l_lock_delivery_leg_rec.parent_delivery_leg_id IS NOT NULL THEN
3943                 BEGIN
3944                    WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_dlvy_leg_id =>  l_lock_delivery_leg_rec.parent_delivery_leg_id);
3945                 EXCEPTION
3946                    WHEN OTHERS THEN
3947                         IF c_lock_delivery_leg%ISOPEN THEN
3948                            CLOSE c_lock_delivery_leg;
3949                         END IF;
3950                         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3951                         FND_MESSAGE.Set_Name('WSH', 'WSH_DEL_LEG_LOCKED');
3952                         WSH_UTIL_CORE.Add_Message(x_return_status);
3953                         IF l_debug_on THEN
3954                            WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY_LEG_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3955                            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DELIVERY_LEG_LOCKED');
3956                         END IF;
3957                         RETURN;
3958                 END;
3959                 UPDATE wsh_delivery_legs
3960                 SET reprice_required = 'Y'
3961                 WHERE delivery_leg_id =  l_lock_delivery_leg_rec.parent_delivery_leg_id
3962                 AND NVL(reprice_required, 'N') <> 'Y';
3963              END IF;
3964           END IF;
3965         END IF;
3966         CLOSE c_lock_delivery_leg;
3967       END LOOP;
3968 
3969     END IF;  -- fte is installed and p_entity_ids is not empty
3970 
3971 --
3972 -- Debug Statements
3973 --
3974 IF l_debug_on THEN
3975     WSH_DEBUG_SV.pop(l_module_name);
3976 END IF;
3977 --
3978   EXCEPTION
3979 
3980       WHEN invalid_parameter THEN
3981         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3982         FND_MESSAGE.Set_Name('WSH', 'WSH_PUB_INVALID_PARAMETER');
3983         FND_MESSAGE.Set_Token('PARAMETER', 'P_ENTITY_TYPE');
3984         WSH_UTIL_CORE.Add_Message(x_return_status);
3985 
3986 --
3987 -- Debug Statements
3988 --
3989 IF l_debug_on THEN
3990     WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_PARAMETER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3991     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_PARAMETER');
3992 END IF;
3993 --
3994       WHEN delivery_leg_locked THEN
3995         CLOSE c_lock_delivery_leg;
3996         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3997         FND_MESSAGE.Set_Name('WSH', 'WSH_DEL_LEG_LOCKED');
3998         WSH_UTIL_CORE.Add_Message(x_return_status);
3999 
4000 --
4001 -- Debug Statements
4002 --
4003 IF l_debug_on THEN
4004     WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY_LEG_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4005     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DELIVERY_LEG_LOCKED');
4006 END IF;
4007 --
4008       WHEN  others THEN
4009         wsh_util_core.default_handler('WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required');
4010         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4011 
4012 --
4013 -- Debug Statements
4014 --
4015 IF l_debug_on THEN
4016     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4017     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4018 END IF;
4019 --
4020   END Mark_Reprice_Required;
4021 
4022 -- FUNCTION: Check_Rate_Delivery
4023 -- PARAMETERS: p_delivery_id, p_freight_terms_code, p_shipment_direction
4024 -- DESCRIPTION:  This API will take in a delivery id or the shipment direction and freight code
4025 --               of a delivery. It will return values of 'Y' or 'N' depending on whether the delivery
4026 --               needs to be rated  or does not need to be rated based on the global parameter values.
4027 
4028 
4029 FUNCTION Check_Rate_Delivery (p_delivery_id IN NUMBER,
4030                               p_freight_terms_code VARCHAR2,
4031                               p_shipment_direction VARCHAR2,
4032                               x_return_status out nocopy VARCHAR2)
4033 RETURN VARCHAR2 IS
4034 
4035 
4036 CURSOR c_del_info(p_del_id in number) is
4037 select freight_terms_code, nvl(shipment_direction, 'O')
4038 from wsh_new_deliveries where delivery_id = p_del_id;
4039 
4040 
4041 l_rate_delivery VARCHAR2(1);
4042 l_global_params WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
4043 l_shipment_direction VARCHAR2(10);
4044 l_freight_terms_code VARCHAR2(30);
4045 l_debug_on BOOLEAN;
4046 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Check_Rate_Delivery';
4047 invalid_global_params EXCEPTION;
4048 invalid_delivery EXCEPTION;
4049 
4050 
4051 BEGIN
4052 
4053    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4054     --
4055     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4056     --
4057     IF l_debug_on IS NULL
4058     THEN
4059         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4060     END IF;
4061     --
4062     IF l_debug_on THEN
4063         WSH_DEBUG_SV.push(l_module_name);
4064         WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
4065     END IF;
4066 
4067 
4068    WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(
4069                 x_param_info => l_global_params,
4070                 x_return_status => x_return_status);
4071 
4072    IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4073 
4074       RAISE invalid_global_params;
4075 
4076    END IF;
4077 
4078 
4079    IF p_shipment_direction IS NULL THEN
4080 
4081       OPEN c_del_info(p_delivery_id);
4082       FETCH c_del_info INTO l_freight_terms_code, l_shipment_direction;
4083       IF c_del_info%NOTFOUND THEN
4084          RAISE invalid_delivery;
4085       END IF;
4086       CLOSE c_del_info;
4087 
4088 
4089    ELSE
4090 
4091      l_freight_terms_code := p_freight_terms_code;
4092      l_shipment_direction := p_shipment_direction;
4093 
4094    END IF;
4095 
4096 
4097 
4098    IF l_shipment_direction in ('IO', 'O') THEN
4099 
4100 
4101 
4102       IF l_freight_terms_code = l_global_params.skip_rate_ob_dels_fgt_term THEN
4103 
4104          l_rate_delivery := 'N';
4105 
4106       ELSE
4107 
4108          l_rate_delivery := 'Y';
4109 
4110       END IF;
4111 
4112 
4113    ELSIF l_shipment_direction = 'I' THEN
4114 
4115       IF l_freight_terms_code = l_global_params.rate_ib_dels_fgt_term THEN
4116 
4117          l_rate_delivery := 'Y';
4118 
4119       ELSE
4120 
4121          l_rate_delivery := 'N';
4122 
4123       END IF;
4124 
4125 
4126    ELSIF l_shipment_direction = 'D' THEN
4127 
4128       IF l_freight_terms_code = l_global_params.rate_ds_dels_fgt_term_id THEN
4129 
4130          l_rate_delivery := 'Y';
4131 
4132       ELSE
4133 
4134          l_rate_delivery := 'N';
4135 
4136       END IF;
4137 
4138     END IF;
4139 
4140     IF l_debug_on THEN
4141         WSH_DEBUG_SV.pop(l_module_name);
4142     END IF;
4143     RETURN l_rate_delivery;
4144 
4145 EXCEPTION
4146 
4147   WHEN invalid_delivery THEN
4148         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4149         FND_MESSAGE.Set_Name('WSH', 'WSH_INVALID_DELIVERY');
4150         WSH_UTIL_CORE.Add_Message(x_return_status);
4151         IF l_debug_on THEN
4152             WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DELIVERY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4153             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DELIVERY');
4154         END IF;
4155 
4156   WHEN invalid_global_params THEN
4157         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4158         FND_MESSAGE.Set_Name('WSH', 'WSH_INVALID_GLOBAL_PARAMETER');
4159         WSH_UTIL_CORE.Add_Message(x_return_status);
4160         IF l_debug_on THEN
4161             WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_PARAMETER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4162             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_PARAMETER');
4163         END IF;
4164 
4165   WHEN others THEN
4166        wsh_util_core.default_handler('WSH_TRIP_VALIDATIONS.Check_Rate_Content_Dels');
4167        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4168        IF l_debug_on THEN
4169            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4170            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4171        END IF;
4172 
4173 END Check_Rate_Delivery;
4174 
4175 -- FUNCTION: Check_Rate_Check_Rate_Trip_Contents
4176 -- PARAMETERS: p_trip_id
4177 -- DESCRIPTION:  This API will take in a trip_id, and it will return values of 'Y' or 'N'
4178 --               depending on whether the content deliveries need to be rated or do not need
4179 --               to be rated, or mixed based on the global parameter values.
4180 
4181 FUNCTION Check_Rate_Trip_Contents(p_trip_id IN NUMBER,
4182                                   x_return_status OUT nocopy VARCHAR2)
4183 RETURN VARCHAR2 IS
4184 
4185 CURSOR C_TRIP_DEL_RATE(p_trip_id IN NUMBER, p_freight_terms_code_o IN VARCHAR2,
4186                             p_freight_terms_code_i IN VARCHAR2, p_freight_terms_code_d VARCHAR2) IS
4187 select wnd.delivery_id
4188 FROM   wsh_new_deliveries wnd,
4189        wsh_trip_stops wts,
4190        wsh_delivery_legs wdl
4191 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4192        wts.trip_id = p_trip_id AND
4193        wdl.delivery_id = wnd.delivery_id AND
4194        wnd.freight_terms_code <> p_freight_terms_code_o and
4195        NVL(wnd.shipment_direction, 'O') IN ('O', 'IO')
4196        and rownum = 1
4197 UNION
4198 select wnd.delivery_id
4199 FROM   wsh_new_deliveries wnd,
4200        wsh_trip_stops wts,
4201        wsh_delivery_legs wdl
4202 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4203        wts.trip_id = p_trip_id AND
4204        wdl.delivery_id = wnd.delivery_id AND
4205        wnd.freight_terms_code <> p_freight_terms_code_i and
4206        wnd.shipment_direction = 'I'
4207        and rownum = 1
4208 UNION
4209 select wnd.delivery_id
4210 FROM   wsh_new_deliveries wnd,
4211        wsh_trip_stops wts,
4212        wsh_delivery_legs wdl
4213 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4214        wts.trip_id = p_trip_id AND
4215        wdl.delivery_id = wnd.delivery_id AND
4216        wnd.freight_terms_code <> p_freight_terms_code_d and
4217        wnd.shipment_direction = 'D'
4218        and rownum = 1;
4219 
4220 CURSOR C_TRIP_DEL_NORATE(p_trip_id IN NUMBER, p_freight_terms_code_o IN VARCHAR2,
4221                             p_freight_terms_code_i IN VARCHAR2, p_freight_terms_code_d VARCHAR2) IS
4222 select wnd.delivery_id
4223 FROM   wsh_new_deliveries wnd,
4224        wsh_trip_stops wts,
4225        wsh_delivery_legs wdl
4226 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4227        wts.trip_id = p_trip_id AND
4228        wdl.delivery_id = wnd.delivery_id AND
4229        wnd.freight_terms_code = p_freight_terms_code_o and
4230        NVL(wnd.shipment_direction, 'O') IN ('O', 'IO')
4231        and rownum = 1
4232 UNION
4233 select wnd.delivery_id
4234 FROM   wsh_new_deliveries wnd,
4235        wsh_trip_stops wts,
4236        wsh_delivery_legs wdl
4237 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4238        wts.trip_id = p_trip_id AND
4239        wdl.delivery_id = wnd.delivery_id AND
4240        wnd.freight_terms_code <> p_freight_terms_code_i and
4241        wnd.shipment_direction = 'I'
4242        and rownum = 1
4243 UNION
4244 select wnd.delivery_id
4245 FROM   wsh_new_deliveries wnd,
4246        wsh_trip_stops wts,
4247        wsh_delivery_legs wdl
4248 WHERE  wts.stop_id = wdl.pick_up_stop_id AND
4249        wts.trip_id = p_trip_id AND
4250        wdl.delivery_id = wnd.delivery_id AND
4251        wnd.freight_terms_code <> p_freight_terms_code_d and
4252        wnd.shipment_direction = 'D'
4253        and rownum = 1;
4254 
4255 
4256 
4257 l_rate_trip_dels VARCHAR2(1);
4258 l_global_params WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
4259 l_debug_on BOOLEAN;
4260 l_dummy_del NUMBER;
4261 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Check_Rate_Delivery';
4262 
4263 invalid_global_params EXCEPTION;
4264 invalid_trip EXCEPTION;
4265 
4266 BEGIN
4267 
4268     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4269     --
4270     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4271     --
4272     IF l_debug_on IS NULL
4273     THEN
4274         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4275     END IF;
4276     --
4277     IF l_debug_on THEN
4278         WSH_DEBUG_SV.push(l_module_name);
4279         WSH_DEBUG_SV.log(l_module_name,'p_trip_id',p_trip_id);
4280     END IF;
4281 
4282 
4283 IF p_trip_id is NULL THEN
4284 
4285    RAISE invalid_trip;
4286 
4287 ELSE
4288 
4289 
4290    WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(
4291                 x_param_info => l_global_params,
4292                 x_return_status => x_return_status);
4293 
4294    IF x_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4295       RAISE invalid_global_params;
4296    END IF;
4297 
4298    OPEN C_TRIP_DEL_RATE(p_trip_id,
4299                         l_global_params.skip_rate_ob_dels_fgt_term,
4300                         l_global_params.rate_ib_dels_fgt_term,
4301                         l_global_params.rate_ds_dels_fgt_term_id);
4302    FETCH C_TRIP_DEL_RATE INTO l_dummy_del;
4303    IF C_TRIP_DEL_RATE%FOUND THEN
4304       l_rate_trip_dels := 'Y';
4305       IF l_debug_on THEN
4306           WSH_DEBUG_SV.log(l_module_name,'l_rate_trip_dels 1',l_rate_trip_dels);
4307       END IF;
4308    END IF;
4309    CLOSE C_TRIP_DEL_RATE;
4310 
4311 
4312    OPEN C_TRIP_DEL_NORATE(p_trip_id,
4313                           l_global_params.skip_rate_ob_dels_fgt_term,
4314                           l_global_params.rate_ib_dels_fgt_term,
4315                           l_global_params.rate_ds_dels_fgt_term_id);
4316    FETCH C_TRIP_DEL_NORATE INTO l_dummy_del;
4317    IF C_TRIP_DEL_NORATE%FOUND THEN
4318       IF l_rate_trip_dels = 'Y' THEN
4319          l_rate_trip_dels := 'M';
4320          IF l_debug_on THEN
4321              WSH_DEBUG_SV.log(l_module_name,'l_rate_trip_dels 2',l_rate_trip_dels);
4322          END IF;
4323       ELSE
4324          l_rate_trip_dels := 'N';
4325          IF l_debug_on THEN
4326              WSH_DEBUG_SV.log(l_module_name,'l_rate_trip_dels 3',l_rate_trip_dels);
4327          END IF;
4328       END IF;
4329    END IF;
4330    CLOSE C_TRIP_DEL_NORATE;
4331 
4332 END IF;
4333 
4334 IF l_debug_on THEN
4335     WSH_DEBUG_SV.log(l_module_name,'l_rate_trip_dels',l_rate_trip_dels);
4336     WSH_DEBUG_SV.pop(l_module_name);
4337 END IF;
4338 RETURN l_rate_trip_dels;
4339 
4340 EXCEPTION
4341 
4342   WHEN invalid_trip THEN
4343         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4344         FND_MESSAGE.Set_Name('WSH', 'WSH_INVALID_TRIP');
4345         WSH_UTIL_CORE.Add_Message(x_return_status);
4346         IF l_debug_on THEN
4347             WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DELIVERY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4348             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DELIVERY');
4349         END IF;
4350 
4351   WHEN invalid_global_params THEN
4352         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4353         FND_MESSAGE.Set_Name('WSH', 'WSH_INVALID_GLOBAL_PARAMETER');
4354         WSH_UTIL_CORE.Add_Message(x_return_status);
4355         IF l_debug_on THEN
4356             WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_PARAMETER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4357             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_PARAMETER');
4358         END IF;
4359 
4360   WHEN others THEN
4361        IF c_trip_del_norate%isopen THEN
4362           close c_trip_del_norate;
4363        END IF;
4364        IF c_trip_del_rate%isopen THEN
4365           close c_trip_del_rate;
4366        END IF;
4367        wsh_util_core.default_handler('Check_Rate_Content_Dels');
4368        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4369        IF l_debug_on THEN
4370            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4371            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4372        END IF;
4373 
4374 END Check_Rate_Trip_Contents;
4375 
4376 
4377 
4378 END WSH_DELIVERY_LEGS_ACTIONS;