DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_NEW_DELIVERY_ACTIONS

Source


1 PACKAGE BODY WSH_NEW_DELIVERY_ACTIONS as
2 /* $Header: WSHDEACB.pls 120.51 2008/01/14 15:39:25 skanduku ship $ */
3 
4 
5 g_object_id_tab  WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
6 
7 
8   --
9   G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_NEW_DELIVERY_ACTIONS';
10   --
11 
12  -- Global variables used in Cont_Tobe_Unassigned and Get_Topmost_Unassignable_Cont
13   g_container_lines      wsh_util_core.id_tab_type ;
14   g_traversed_containers wsh_util_core.id_tab_type;
15 
16  /* Added the following global variable for Ship Message Customization project
17   * for R12. This variable is accessed in procedure CONFIRM_DELIVERY. This
18   * variable is used to cache the Message Severity Level */
19   g_missing_inv_severity     VARCHAR2(10);
20 
21  --
22  -- R12 Routing Guide (Start)
23  --
24 
25 TYPE wsh_cs_delivery_info_rec IS RECORD( l_delivery_id                  wsh_new_deliveries.delivery_id%TYPE,
26 		  		     l_dlvy_name		       	wsh_new_deliveries.name%TYPE,
27 		 		     l_organization_id             	wsh_new_deliveries.organization_id%TYPE,
28 				 	 l_gross_weight                	wsh_new_deliveries.gross_weight%TYPE,
29 					 l_weight_uom_code             	wsh_new_deliveries.weight_uom_code%TYPE,
30 					 l_volume                      	wsh_new_deliveries.volume%TYPE,
31 					 l_volume_uom_code             	wsh_new_deliveries.volume_uom_code%TYPE,
32 					 l_initial_pickup_location_id  	wsh_new_deliveries.initial_pickup_location_id%TYPE,
33 					 l_ultimate_dropoff_location_id	wsh_new_deliveries.ultimate_dropoff_location_id%TYPE,
34 					 l_customer_id                 	wsh_new_deliveries.customer_id%TYPE,
35 					 l_freight_terms_code          	wsh_new_deliveries.freight_terms_code%TYPE,
36 					 l_planned_flag                	wsh_new_deliveries.planned_flag%TYPE,
37 					 l_initial_pickup_date         	wsh_new_deliveries.initial_pickup_date%TYPE,
38 					 l_ultimate_dropoff_date      	wsh_new_deliveries.ultimate_dropoff_date%TYPE,
39 					 l_fob_code			wsh_new_deliveries.fob_code%TYPE,
40                                          l_shipment_direction           wsh_new_deliveries.shipment_direction%TYPE,
41                                          l_delivery_type                wsh_new_deliveries.delivery_type%TYPE,
42 					 l_trip_id			NUMBER);
43 
44 TYPE wsh_cs_delivery_info_tab	IS TABLE OF wsh_cs_delivery_info_rec INDEX BY BINARY_INTEGER;
45 --
46 -- R12 Routing Guide (End)
47 --
48 
49 
50 -- Local API, used within this procedure only
51 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
52  return BOOLEAN ;
53 
54 -- Local API, used within this procedure only
55 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2)
56  return VARCHAR2 ;
57 
58    -- K: MDC: Forward declaration
59 
60    PROCEDURE Confirm_Consolidation_Delivery(
61            p_consol_del_tab IN wsh_util_core.id_tab_type,
62            x_return_status OUT NOCOPY VARCHAR2);
63 
64    PROCEDURE Create_Deconsol_Trips(
65            p_deliveries_tab IN wsh_util_core.id_tab_type,
66            x_return_status OUT NOCOPY VARCHAR2);
67 
68 
69 /* This procedure identifies the topmost container which contains only packed or unpacked staged line(s)
70    that can be unassigned from the delivery. This procedure is initially called from Cont_Tobe_Unassigned
71    for all the Staged Lines. This procedure then recursively checks if the container has only staged lines.
72    If it has any empty containers or shipped lines, then the container cannot be unassigned. Only its
73    children may be unassigned. The unassigned list is stored in g_container_lines package variable.
74    Parameters :
75                  p_curr_line_id    Delivery Detail Id of Container or Staged Line
76                  p_staged_lines    Array of Staged Lines
77                  l_return_status   Return Status
78 */
79 
80 PROCEDURE get_topmost_unassignable_cont ( p_curr_line_id  IN NUMBER,
81                                           p_staged_lines  IN wsh_util_core.id_tab_type,
82                                           x_return_status OUT NOCOPY  VARCHAR2
83                                         )
84 IS
85 
86 CURSOR get_container(detail_id NUMBER) IS
87 SELECT parent_delivery_detail_id
88 FROM   wsh_delivery_assignments_v
89 WHERE  delivery_detail_id = detail_id;
90 
91 CURSOR get_lines (cont_id NUMBER) IS
92 SELECT delivery_detail_id
93 FROM   wsh_delivery_assignments_v
94 START WITH parent_delivery_detail_id = cont_id
95 CONNECT BY PRIOR delivery_detail_id = parent_delivery_detail_id;
96 
97 l_container_id NUMBER := NULL;
98 l_detail_found BOOLEAN ;
99 
100 x_immediate_contents  wsh_util_core.id_tab_type;
101 
102 l_contents            wsh_util_core.id_tab_type;
103 
104 get_lines_curr_fetch NUMBER;
105 get_lines_prev_fetch NUMBER;
106 
107 l_return_status      VARCHAR2(1);
108 
109 
110 --
111 l_debug_on BOOLEAN;
112 --
113 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_TOPMOST_UNASSIGNABLE_CONT';
114 --
115 
116 BEGIN
117   --
118   -- Debug Statements
119   --
120   --
121   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
122   --
123   IF l_debug_on IS NULL
124   THEN
125       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
126   END IF;
127   --
128   IF l_debug_on THEN
129       WSH_DEBUG_SV.push(l_module_name);
130   END IF;
131   --
132   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
133 
134   OPEN get_container (p_curr_line_id) ;
135   FETCH get_container INTO l_container_id;
136   IF get_container%NOTFOUND THEN
137      CLOSE get_container;
138      RAISE NO_DATA_FOUND;
139   END IF;
140   CLOSE get_container;
141 
142   IF l_debug_on THEN
143      WSH_DEBUG_SV.logmsg(l_module_name,'Current line : '||p_curr_line_id||' , Container : '|| l_container_id);
144   END IF;
145 
146   IF l_container_id IS NULL THEN
147      -- Either it is an unpacked staged line or it is the topmost container
148      FOR j IN 1..g_container_lines.COUNT LOOP
149          IF ( p_curr_line_id  = g_container_lines(j) ) THEN
150             GOTO END_PROC ;
151          END IF;
152      END LOOP;
153      g_container_lines(g_container_lines.COUNT + 1) := p_curr_line_id ;
154      GOTO END_PROC ;
155   ELSE
156      -- Check if this container has already been traversed
157      FOR r in 1..g_traversed_containers.COUNT LOOP
158          IF l_container_id = g_traversed_containers(r) THEN
159             GOTO END_PROC;
160          END IF;
161      END LOOP;
162   END IF;
163 
164   -- Check for all contents of Container
165   get_lines_curr_fetch := 0;
166   get_lines_prev_fetch := 0;
167   l_contents.delete;
168   OPEN get_lines(l_container_id);
169   LOOP
170      FETCH get_lines BULK COLLECT INTO x_immediate_contents LIMIT 100;
171      get_lines_curr_fetch := get_lines%rowcount - get_lines_prev_fetch;
172      EXIT WHEN ( get_lines_curr_fetch = 0 );
173      FOR m IN 1..get_lines_curr_fetch LOOP
174          l_contents(l_contents.COUNT + 1) := x_immediate_contents(m);
175          l_detail_found := FALSE;
176          -- Check if all the immediate lines in l_cont_id are present in staged lines list
177          FOR n in 1..p_staged_lines.COUNT LOOP
178              IF x_immediate_contents(m) = p_staged_lines(n) THEN
179                 IF l_debug_on THEN
180                    WSH_DEBUG_SV.logmsg(l_module_name,'Found Staged line :'||p_staged_lines(n));
181                 END IF;
182                 l_detail_found := TRUE;
183                 EXIT;
184              END IF;
185          END LOOP;
186 
187          IF ( NOT l_detail_found ) THEN
188             -- Check if contents of Container are in Traversed Container List
189             FOR p in 1..g_traversed_containers.COUNT LOOP
190                 IF x_immediate_contents(m) = g_traversed_containers(p) THEN
191                    IF l_debug_on THEN
192                       WSH_DEBUG_SV.logmsg(l_module_name,'Found Traversed Container :'||g_traversed_containers(p));
193                    END IF;
194                    l_detail_found := TRUE;
195                    EXIT;
196                 END IF;
197             END LOOP;
198          END IF;
199 
200          IF ( NOT l_detail_found ) THEN
201             -- Check if line or container is already marked as to be unassigned previously, if so, return to caller
202             FOR j IN 1..g_container_lines.COUNT LOOP
203                 IF ( p_curr_line_id  = g_container_lines(j) ) THEN
204                    IF l_debug_on THEN
205                       WSH_DEBUG_SV.logmsg(l_module_name,'Found current line in Unassigned Container List :'||p_curr_line_id);
206                    END IF;
207                    GOTO END_PROC ;
208                 END IF;
209             END LOOP;
210             IF l_debug_on THEN
211                WSH_DEBUG_SV.logmsg(l_module_name,'Found either shipped line, container_line or non-traversed path :'||x_immediate_contents(m));
212             END IF;
213             g_container_lines(g_container_lines.COUNT + 1) := p_curr_line_id ;
214             GOTO END_PROC ;
215          END IF;
216 
217      END LOOP;  -- get_lines_curr_fetch
218 
219      get_lines_prev_fetch := get_lines%rowcount;
220 
221   END LOOP;  -- get_lines cursor
222 
223   -- If all the lines in the Container are Staged Lines or other Container Lines, then call recursively for Container
224   IF ( l_detail_found ) THEN
225      -- Fail safe to close the open cursor before calling recursively
226      IF get_lines%ISOPEN THEN
227         CLOSE get_lines;
228      END IF;
229      FOR y in 1..l_contents.COUNT LOOP
230          FOR z in 1..g_container_lines.COUNT LOOP
231              IF l_contents(y) = g_container_lines(z) THEN
232                 g_container_lines(z) := -g_container_lines(z);
233              END IF;
234          END LOOP;
235      END LOOP;
236      g_traversed_containers(g_traversed_containers.count + 1) := l_container_id ;
237      IF l_debug_on THEN
238         WSH_DEBUG_SV.logmsg(l_module_name,'Recursive call for container :'||l_container_id);
239         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
240      END IF;
241      get_topmost_unassignable_cont( l_container_id, p_staged_lines, l_return_status );
242      IF l_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
243         IF l_debug_on THEN
244            WSH_DEBUG_SV.log(l_module_name,  'Return Status from WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT : ', l_return_status);
245         END IF;
246         g_container_lines.delete;
247         RAISE NO_DATA_FOUND;
248      END IF;
249   END IF;
250 
251   <<END_PROC>>
252   IF get_lines%ISOPEN THEN
253      CLOSE get_lines;
254   END IF;
255 
256   --
257   -- Debug Statements
258   --
259   IF l_debug_on THEN
260       WSH_DEBUG_SV.pop(l_module_name);
261   END IF;
262   --
263 
264 EXCEPTION
265   WHEN OTHERS THEN
266        wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Topmost_Unassignable_Cont',l_module_name);
267        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
268        IF get_lines%ISOPEN THEN
269           CLOSE get_lines;
270        END IF;
271        IF l_debug_on THEN
272             WSH_DEBUG_SV.pop(l_module_name,'When Others');
273        END IF;
274 END get_topmost_unassignable_cont;
275 
276 
277 /* This procedure takes input as staged lines and then calls get_topmost_unassignable_cont to
278    see if the parent container(s) can also be unassigned. It then returns the list of lines or
279    containers which should be unassigned back to the calling program.
280 */
281 PROCEDURE Cont_ToBe_Unassigned ( p_staged_lines    IN wsh_util_core.id_tab_type,
282                                  x_unassigned_cont OUT NOCOPY  wsh_util_core.id_tab_type,
283                                  x_return_status   OUT NOCOPY  VARCHAR2
284                                )
285 IS
286 
287 l_return_status  VARCHAR2(1);
288 
289 --
290 l_debug_on BOOLEAN;
291 --
292 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONT_TOBE_UNASSIGNED';
293 --
294 
295 BEGIN
296 
297   --
298   -- Debug Statements
299   --
300   --
301   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
302   --
303   IF l_debug_on IS NULL
304   THEN
305       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
306   END IF;
307   --
308   IF l_debug_on THEN
309       WSH_DEBUG_SV.push(l_module_name);
310   END IF;
311   --
312   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
313 
314   IF ( p_staged_lines.COUNT = 0 ) THEN
315      IF l_debug_on THEN
316          WSH_DEBUG_SV.pop(l_module_name);
317      END IF;
318      RETURN;
319   END IF;
320 
321   g_container_lines.delete;
322   g_traversed_containers.delete;
323 
324   FOR i in 1..p_staged_lines.COUNT LOOP
325      --
326      -- Debug Statements
327      --
328      IF l_debug_on THEN
329         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
330         WSH_DEBUG_SV.log(l_module_name,  'Staged Detail Line: ', p_staged_lines(i));
331      END IF;
332      --
333      get_topmost_unassignable_cont( p_staged_lines(i), p_staged_lines, l_return_status );
334 
335      IF l_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
336         IF l_debug_on THEN
337            WSH_DEBUG_SV.log(l_module_name,  'Return Status from WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT : ', l_return_status);
338         END IF;
339         x_unassigned_cont.delete;
340         RAISE NO_DATA_FOUND;
341      END IF;
342 
343   END LOOP;  -- main loop on p_staged_lines
344 
345   -- To assign only +ve values to the out parameter
346   FOR z in 1..g_container_lines.COUNT LOOP
347       IF g_container_lines(z) > 0 THEN
348          x_unassigned_cont(x_unassigned_cont.COUNT + 1) := g_container_lines(z);
349         IF l_debug_on THEN
350            WSH_DEBUG_SV.log(l_module_name,  'Containers/Lines to be Unassigned : ', g_container_lines(z));
351         END IF;
352       END IF;
353   END LOOP;
354 
355 --
356 -- Debug Statements
357 --
358 IF l_debug_on THEN
359     WSH_DEBUG_SV.pop(l_module_name);
360 END IF;
361 --
362 
363 EXCEPTION
364   WHEN OTHERS THEN
365        wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Cont_ToBe_Unassigned',l_module_name);
366        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
367        IF l_debug_on THEN
368             WSH_DEBUG_SV.pop(l_module_name,'When Others');
369        END IF;
370 END Cont_ToBe_Unassigned;
371 
372 -- bug 4505105
373 -- This procedure validates whether the containers
374 -- with in the given delivery are shippable or not
375 -- Validates Normal deliveries as well as Consol Deliveries.
376 PROCEDURE validate_del_containers (p_delivery_id IN NUMBER,
377                                    p_del_type    IN VARCHAR2 DEFAULT 'STD',
378                                    x_del_valid_flag OUT NOCOPY VARCHAR2,
379                                    x_return_status OUT NOCOPY VARCHAR2)
380 IS
381   --{
382       --
383       l_return_status  VARCHAR2(1);
384       l_del_valid_flag  VARCHAR2(1);
385       l_cnt_flag  VARCHAR2(1);
386 
387       cursor l_del_contents_csr (p_del_id IN NUMBER,
388                                  p_cnt_flag IN VARCHAR2) is
389       select 'N'
390       from   wsh_delivery_assignments_v wda,
391              wsh_delivery_details wdd,
392              mtl_system_items msi
393       where  wda.delivery_detail_id = wdd.delivery_detail_id
394       and    wdd.inventory_item_id = msi.inventory_item_id
395       and    wdd.organization_id = msi.organization_id
396       and    nvl(msi.shippable_item_flag,'Y') = 'N'
397       and    wdd.container_flag = p_cnt_flag
398       and    wda.delivery_id = p_del_id;
399 
400       --
401       l_debug_on BOOLEAN;
402       --
403       l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_DEL_CONTAINERS';
404       --
405 
406 
407   --}
408 BEGIN
409   --{
410       --
411       -- Debug Statements
412       --
413       --
414       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
415       --
416       IF l_debug_on IS NULL
417       THEN
418         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
419       END IF;
420       --
421       IF l_debug_on THEN
422         WSH_DEBUG_SV.push(l_module_name);
423         WSH_DEBUG_SV.log(l_module_name,  'p_delivery_id is ', p_delivery_id);
424         WSH_DEBUG_SV.logmsg(l_module_name,  ' Opening the cursor l_del_contents_csr');
425       END IF;
426       --
427       IF (nvl(p_del_type, 'STD') = 'STD') THEN
428         l_cnt_flag := 'Y';
429       ELSE
430         l_cnt_flag := 'C';
431       END IF;
432       --
433       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
434       --
435       open  l_del_contents_csr(p_delivery_id, l_cnt_flag);
436       fetch l_del_contents_csr into l_del_valid_flag;
437       close l_del_contents_csr;
438       --
439       IF l_debug_on THEN
440         WSH_DEBUG_SV.log(l_module_name,  'l_del_valid_flag is ', l_del_valid_flag);
441       END IF;
442       --
443       x_del_valid_flag := nvl(l_del_valid_flag,'Y');
444 
445       IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
446         --
447         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SC_CNT_ERROR');
448         IF l_debug_on THEN
449           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
450         END IF;
451 
452         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
453         wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
454         --
455       END IF;
456       --
457       -- Debug Statements
458       --
459       IF l_debug_on THEN
460         WSH_DEBUG_SV.pop(l_module_name);
461       END IF;
462       --
463 
464   --}
465 EXCEPTION
466   --{
467       WHEN OTHERS THEN
468         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.VALIDATE_DEL_CONTAINERS',l_module_name);
469         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
470         IF l_debug_on THEN
471           WSH_DEBUG_SV.pop(l_module_name,'When Others');
472         END IF;
473 
474   --}
475 END validate_del_containers;
476 -- bug 4505105
477 
478 /* J TP Release */
479   PROCEDURE FIRM
480   (p_del_rows   IN  wsh_util_core.id_tab_type,
481    x_return_status  OUT NOCOPY  VARCHAR2) IS
482 
483   l_return_status VARCHAR2(1);
484   l_net_weight  NUMBER;
485   l_gross_weight  NUMBER;
486   l_volume    NUMBER;
487   l_num_error  BINARY_INTEGER := 0;
488   l_num_warn    BINARY_INTEGER := 0;
489   others    EXCEPTION;
490 
491   --
492   l_debug_on BOOLEAN;
493   --
494   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FIRM';
495   --
496   BEGIN
497 
498   --
499   -- Debug Statements
500   --
501   --
502   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
503   --
504   IF l_debug_on IS NULL
505   THEN
506       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
507   END IF;
508   --
509   IF l_debug_on THEN
510       WSH_DEBUG_SV.push(l_module_name);
511   END IF;
512   --
513   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
514 
515 
516   IF (p_del_rows.count = 0) THEN
517     raise others;
518   END IF;
519 
520   FOR i IN 1..p_del_rows.count LOOP
521 
522     --  Check if Delivery can be planned
523     IF l_debug_on THEN
524         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
525     END IF;
526 
527     wsh_delivery_validations.check_plan( p_del_rows(i), x_return_status);
528 
529     IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
530       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_FIRM_ERROR');
531 
532       IF l_debug_on THEN
533           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
534       END IF;
535 
536       FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
537       wsh_util_core.add_message(x_return_status);
538       l_num_error := l_num_error + 1;
539       goto loop_end;
540     ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
541       l_num_warn := l_num_warn + 1;
542     END IF;
543 
544     wsh_tp_release.firm_entity( p_entity        => 'DLVY',
545                                 p_entity_id     =>p_del_rows(i),
546                                 x_return_status =>x_return_status);
547     IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
548            IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
549               l_num_warn := l_num_warn + 1;
550            ELSE
551               l_num_error:=l_num_error+1;
552            END IF;
553     END IF;
554 
555     <<loop_end>>
556     null;
557 
558   END LOOP;
559 
560 
561   IF (p_del_rows.count = 1) THEN
562     IF (l_num_warn > 0) AND (l_num_error = 0) THEN
563       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
564     END IF;
565   ELSIF (p_del_rows.count > 1) THEN
566     IF (l_num_error > 0) OR (l_num_warn > 0) THEN
567     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_FIRM_SUMMARY');
568     FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
569     FND_MESSAGE.SET_TOKEN('NUM_WARN',l_num_warn);
570     FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error - l_num_warn);
571 
572     IF (p_del_rows.count = l_num_error) THEN
573        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
574     ELSE
575        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
576     END IF;
577 
578     wsh_util_core.add_message(x_return_status);
579     ELSE
580       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
581     END IF;
582   END IF;
583 
584   IF l_debug_on THEN
585      WSH_DEBUG_SV.pop(l_module_name);
586   END IF;
587 
588   EXCEPTION
589     WHEN others THEN
590       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.FIRM');
591       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
592       IF l_debug_on THEN
593          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
594          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
595       END IF;
596   END FIRM;
597 
598 
599 
600 -- -----------------------------------------------------------------------
601 -- Name
602 --   PROCEDURE Adjust_Planned_Flag
603 --
604 -- Purpose:
605 --   This procedure takes a list of deliveries and adjust the planned_flag
606 --   based on appending_limit of the organization.
607 --   If the delivery is alrady planned, it will ignore the delivery.
608 --   It never unplan the delivery. For WMS caller, if the appending_limit
609 --   matches the event it will plan the delivery.
610 --
611 -- Input Parameters:
612 --   p_delivery_ids - the list of deliveries to be processed
613 --   p_caller - 'WSH_DLMG' if it is called from delivery merge code
614 --              'WMS_%' if it is called by WMS
615 --   p_force_appending_limit - 'Y': set the planned_flag to 'Y' without checking
616 --                                  the value in shipping parameters
617 --                           - 'N': Check the appending_limit in shipping parameters
618 --                                  and plan the delivery if the appending limit has
619 --                                  been reached
620 --   p_call_lcss             - 'Y' :Call Carrier Selection and Rate Deliveries when
621 --                                  appending limit has been reached if the options
622 --                                  in shipping parameters are set
623 --                           - 'N' :do not call Carrier Selection and Rate Deliveries when
624 --                                  appending limit has been reached
625 --
626 --   p_event                 - 'A': start of packing
627 --                           - 'W': start of shipping
628 --                           - required if p_caller like WMS_%
629 --
630 -- Output Parameters:
631 --   x_return_status  - Success, Warning, Error, Unexpected Error
632 -- ----------------------------------------------------------------------
633 
634 PROCEDURE Adjust_Planned_Flag(
635    p_delivery_ids            IN wsh_util_core.id_tab_type,
636    p_caller                  IN VARCHAR2,
637    p_force_appending_limit   IN VARCHAR2,
638    p_call_lcss               IN VARCHAR2,
639    p_event                   IN VARCHAR2,
640    x_return_status           OUT NOCOPY VARCHAR2,
641    p_called_for_sc           IN  BOOLEAN default false) IS
642 
643    CURSOR c_isdelfirm(p_delid IN NUMBER) IS
644    select 'Y'
645    from wsh_new_deliveries
646    where delivery_id=p_delid AND
647    planned_flag='F';
648 
649    Cursor c_get_unplanned_delivery(p_delivery_id NUMBER) IS
650    SELECT  wnd.organization_id, wnd.planned_flag , wnd.initial_pickup_location_id
651    FROM    wsh_new_deliveries wnd
652    WHERE   wnd.delivery_id = p_delivery_id AND
653            wnd.status_code = 'OP' AND
654            wnd.planned_flag = 'N' AND
655            NVL(wnd.shipment_direction,'O') in ('O','IO');
656 
657    Cursor c_get_delivery(p_delivery_id NUMBER) IS
658    SELECT  wnd.organization_id, wnd.planned_flag
659    FROM    wsh_new_deliveries wnd
660    WHERE   wnd.delivery_id = p_delivery_id AND
661            wnd.status_code = 'OP' AND
662            NVL(wnd.shipment_direction,'O') in ('O','IO');
663 
664    Cursor c_num_of_staged_lines(p_delivery_id NUMBER) IS
665    SELECT count(wdd.delivery_detail_id)
666    FROM   wsh_delivery_details wdd,
667           wsh_delivery_assignments_v wda
668    WHERE  wdd.delivery_detail_id = wda.delivery_detail_id AND
669           wda.delivery_id = p_delivery_id AND
670           wda.delivery_id is not NULL AND
671           wdd.container_flag = 'N' AND
672           wdd.source_code = 'OE' AND
673           wdd.released_status in ('Y', 'C') AND
674           NVL(wdd.line_direction,'O') in ('O','IO');
675 
676    Cursor c_get_line_status_in_delivery(p_delivery_id NUMBER) IS
677    SELECT wdd.released_status
678    FROM   wsh_delivery_details wdd,
679           wsh_delivery_assignments_v wda
680    WHERE  wdd.delivery_detail_id = wda.delivery_detail_id AND
681           wda.delivery_id = p_delivery_id AND
682           wda.delivery_id is not NULL AND
683           wdd.container_flag = 'N' AND
684           wdd.source_code = 'OE' AND
685           NVL(wdd.line_direction,'O') in ('O','IO');
686 
687    l_num_error  BINARY_INTEGER := 0;
688    l_num_warn    BINARY_INTEGER := 0;
689    l_delfirm VARCHAR2(1);
690    l_organization_id         WSH_SHIPPING_PARAMETERS.ORGANIZATION_ID%TYPE;
691    l_planned_flag            WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE;
692    l_initial_pickup_location_id  WSH_NEW_DELIVERIES.INITIAL_PICKUP_LOCATION_ID%TYPE;
693    l_released_status         WSH_DELIVERY_DETAILS.RELEASED_STATUS%TYPE;
694    l_num_of_staged_lines     NUMBER := 0;
695    l_ignore_count            NUMBER := 0;
696    l_delivery_detail_count   NUMBER := 0;
697    l_delivery_id             NUMBER := 0;
698    l_auto_rate_tbl           WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
699    l_select_carrier_tbl      WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
700    l_param_info              WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
701    l_return_status           VARCHAR2(1);
702    l_status_code             VARCHAR2(30) := 'OP';
703    l_dels_to_update          WSH_UTIL_CORE.Id_Tab_Type;
704    l_action_prms             WSH_DELIVERIES_GRP.action_parameters_rectype;
705    l_delivery_out_rec        WSH_DELIVERIES_GRP.Delivery_Action_Out_Rec_Type;
706    l_defaults_rec            WSH_DELIVERIES_GRP.default_parameters_rectype;
707    l_msg_count               NUMBER;
708    l_msg_data                VARCHAR2(2000);
709    l_planned_flag_true       WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE; --bugfix 3778944
710 
711    l_debug_on                BOOLEAN;
712    l_module_name             CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'Adjust_Planned_Flag';
713    l_exception_message       VARCHAR2(2000);
714    l_exception_id            NUMBER;
715    Rate_Delivery_Err         EXCEPTION;
716    Select_Carrier_Err        EXCEPTION;
717    invalid_caller            EXCEPTION;
718    invalid_event             EXCEPTION;
719    record_locked             EXCEPTION;
720    others                    EXCEPTION;
721    l_assigned_to_trip        VARCHAR2(1) := NULL;
722 
723    PRAGMA EXCEPTION_INIT(record_locked, -54);
724 
725  BEGIN
726 
727     SAVEPOINT before_adjust_planned_flag;
728 
729     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
730     --
731     IF l_debug_on IS NULL THEN
732        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
733     END IF;
734     --
735     IF l_debug_on THEN
736        WSH_DEBUG_SV.push(l_module_name);
737     END IF;
738 
739     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
740 
741 
742     l_select_carrier_tbl.delete;
743     l_auto_rate_tbl.delete;
744     l_dels_to_update.delete;
745 
746     IF l_debug_on THEN
747        wsh_debug_sv.logmsg(l_module_name, 'P_CALLER: '|| p_caller);
748        wsh_debug_sv.logmsg(l_module_name, 'P_FORCE_APPENDING_LIMIT: '|| p_force_appending_limit);
749        wsh_debug_sv.logmsg(l_module_name, 'P_EVENT: '|| p_event);
750     END IF;
751 
752     IF (p_delivery_ids.count = 0) THEN
753        IF l_debug_on THEN
754          WSH_DEBUG_SV.pop(l_module_name,'no delivery');
755        END IF;
756        return;
757     END IF;
758 
759     IF p_caller not like 'WSH_%' AND p_caller not like 'WMS_%' THEN
760        raise invalid_caller ;
761     END IF;
762 
763 
764     IF p_force_appending_limit = 'Y' THEN
765 
766        FOR i in p_delivery_ids.FIRST .. p_delivery_ids.LAST LOOP
767 
768           IF p_delivery_ids(i) is NULL THEN
769              goto loop_end;
770           END IF;
771           IF l_debug_on THEN
772              wsh_debug_sv.logmsg(l_module_name, 'forcing appending limit, lock and plan the delivery');
773           END IF;
774           l_planned_flag := NULL;
775 
776           --  Check if Delivery can be planned
777           --
778           -- Debug Statements
779           --
780           IF l_debug_on THEN
781               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
782           END IF;
783           --
784           wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
785 
786           IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
787              FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
788              --
789              -- Debug Statements
790              --
791              IF l_debug_on THEN
792                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
793              END IF;
794              --
795              FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
796              wsh_util_core.add_message(x_return_status);
797              l_num_error := l_num_error + 1;
798              goto loop_end;
799           ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
800             l_num_warn := l_num_warn + 1;
801           END IF;
802 
803           l_delfirm:='N';
804           FOR cur IN c_isdelfirm(p_delivery_ids(i)) LOOP
805                l_delfirm:='Y';
806                wsh_tp_release.unfirm_entity( p_entity      => 'DLVY',
807                                            p_entity_id     =>p_delivery_ids(i),
808                                            p_action        =>'PLAN',
809                                            x_return_status =>x_return_status);
810                IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
811                  IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
812                     l_num_warn := l_num_warn + 1;
813                  ELSE
814                     goto loop_end;
815                  END IF;
816                END IF;
817           END LOOP;
818 
819           IF l_delfirm='N' THEN
820              -- lock the delivery befor update
821              l_delivery_id := p_delivery_ids(i);
822 
823              SELECT organization_id, planned_flag  INTO l_organization_id, l_planned_flag
824                 FROM wsh_new_deliveries
825                 WHERE delivery_id = p_delivery_ids(i)
826                 FOR UPDATE NOWAIT;
827 
828              IF (SQL%NOTFOUND) THEN
829                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
830                 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
831                 wsh_util_core.add_message(x_return_status);
832                 l_num_error := l_num_error + 1;
833                 goto loop_end;
834              END IF;
835 
836              IF l_planned_flag = 'N' THEN
837                 -- set the planned_flag to 'Y'
838 
839                 l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
840                 IF l_debug_on THEN
841                    wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
842                 END IF;
843 
844                 -- carrier selection and rate delivery when appending limit has been reached
845                 IF p_call_lcss = 'Y' and WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
846                    OPEN c_get_unplanned_delivery(p_delivery_ids(i));
847                    FETCH c_get_unplanned_delivery INTO l_organization_id, l_planned_flag, l_initial_pickup_location_id;
848                    IF c_get_unplanned_delivery%NOTFOUND THEN
849                       CLOSE c_get_unplanned_delivery;
850                       goto loop_end;
851                    END IF;
852                    CLOSE c_get_unplanned_delivery;
853 
854                    IF l_debug_on THEN
855                       wsh_debug_sv.logmsg(l_module_name, 'found delivery '|| p_delivery_ids(i) );
856                    END IF;
857 
858                    l_assigned_to_trip :=  WSH_DELIVERY_VALIDATIONS.Del_Assigned_To_Trip(
859                                              p_delivery_id => p_delivery_ids(i),
860                                              x_return_status  => l_return_status);
861 
862                    WSH_SHIPPING_PARAMS_PVT.Get(
863                       p_organization_id  => l_organization_id,
864                       x_param_info       => l_param_info,
865                       x_return_status    => l_return_status);
866 
867                    IF l_debug_on THEN
868                       wsh_debug_sv.logmsg(l_module_name, 'Return status from WSH_SHIPPING_PARAMS_PVT.Get is :'||l_return_status );
869                    END IF;
870 
871 
872                    IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
873                       l_num_warn := l_num_warn + 1;
874                    ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
875                          l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
876                       FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
877                       FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
878                                              wsh_util_core.get_org_name(l_organization_id));
879                       wsh_util_core.add_message(x_return_status,l_module_name);
880                       l_num_error := l_num_error+1;
881                       goto loop_end;
882                    END IF;
883 
884 
885                    IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
886                       AND l_assigned_to_trip = 'N' THEN
887                       -- call carrier selection when appending limit is reached
888                       l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
889                       l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
890                       l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
891                       l_select_carrier_tbl(l_select_carrier_tbl.count).status_code :=  'OP';
892                    END IF;
893 
894                    IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
895                       -- autorate delivery when appending limit is reached
896                       l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
897                       l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
898                       l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
899                       l_auto_rate_tbl(l_auto_rate_tbl.count).status_code :=  'OP';
900                    END IF;
901 
902                 END IF;
903              -- IF p_call_lcss = 'Y' and WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
904              END IF;
905           END IF;
906           <<loop_end>>
907           null;
908 
909        END LOOP;
910 
911 
912     ELSE
913 
914        FOR i in p_delivery_ids.FIRST .. p_delivery_ids.LAST LOOP
915           IF l_debug_on THEN
916               wsh_debug_sv.logmsg(l_module_name, 'checking delivery '|| p_delivery_ids(i) );
917           END IF;
918 
919           IF  p_delivery_ids(i) is NULL THEN
920              goto end_of_loop;
921           END IF;
922 
923              OPEN c_get_unplanned_delivery(p_delivery_ids(i));
924              FETCH c_get_unplanned_delivery INTO l_organization_id, l_planned_flag, l_initial_pickup_location_id;
925              IF c_get_unplanned_delivery%NOTFOUND THEN
926                 CLOSE c_get_unplanned_delivery;
927                 goto end_of_loop;
928              END IF;
929              CLOSE c_get_unplanned_delivery;
930 
931              IF l_debug_on THEN
932                  wsh_debug_sv.logmsg(l_module_name, 'found delivery '|| p_delivery_ids(i) );
933              END IF;
934 
935              l_assigned_to_trip :=  WSH_DELIVERY_VALIDATIONS.Del_Assigned_To_Trip(
936 	                                p_delivery_id => p_delivery_ids(i),
937                                         x_return_status  => l_return_status);
938 
939              WSH_SHIPPING_PARAMS_PVT.Get(
940                 p_organization_id  => l_organization_id,
941                 x_param_info       => l_param_info,
942                 x_return_status    => l_return_status);
943 
944              IF l_debug_on THEN
945                 wsh_debug_sv.logmsg(l_module_name, 'Return status from WSH_SHIPPING_PARAMS_PVT.Get is :'||l_return_status );
946              END IF;
947              -- handle return status
948 
949              IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
950                 l_num_warn := l_num_warn + 1;
951              ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
952                    l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
953                 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
954                 FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
955                                        wsh_util_core.get_org_name(l_organization_id));
956                 wsh_util_core.add_message(x_return_status,l_module_name);
957                 l_num_error := l_num_error+1;
958                 goto end_of_loop;
959              END IF;
960 
961 
962              IF p_caller like 'WSH_%' THEN
963 
964                 IF l_debug_on THEN
965                    wsh_debug_sv.logmsg(l_module_name, 'appending_limit for organization '|| to_char(l_organization_id)||' is : '|| l_param_info.appending_limit );
966                 END IF;
967 
968                 l_ignore_count := 0;
969                 l_delivery_detail_count := 0;
970 
971                 IF l_param_info.appending_limit = G_NO_APPENDING THEN
972                    goto end_of_loop;
973                 ELSIF l_param_info.appending_limit = G_START_OF_STAGING THEN
974                    -- as long as there is a sigle line which is after staging, we should set the planned flag
975                    l_num_of_staged_lines := 0;
976                    OPEN c_num_of_staged_lines(p_delivery_ids(i));
977                    FETCH  c_num_of_staged_lines INTO l_num_of_staged_lines;
978                    CLOSE c_num_of_staged_lines;
979 
980                    IF l_num_of_staged_lines > 0 THEN
981                       l_delivery_id := p_delivery_ids(i);
982                       l_planned_flag := NULL;
983 
984                       DECLARE
985                         record_locked_test exception;
986                         PRAGMA EXCEPTION_INIT(record_locked_test, -54);
987                       BEGIN
988                               SELECT planned_flag  INTO l_planned_flag
989                                      FROM wsh_new_deliveries
990                                      WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
991                                      AND planned_flag = 'N'
992                                      FOR UPDATE NOWAIT;
993 
994                       EXCEPTION
995                         WHEN record_locked_test THEN
996                            IF l_debug_on THEN
997                               wsh_debug_sv.logmsg(l_module_name, 'Exception record_locked_test in the block');
998                            END IF;
999                            -- log exception
1000                            IF p_caller = 'WSH_DLMG' THEN
1001                                -- csun deliveryMerge (warning or error)
1002                                FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DELIVERY_FAIL');
1003                                FND_MESSAGE.SET_TOKEN('DELIVERY_ID' , to_char(p_delivery_ids(i)));
1004                                l_exception_message := FND_MESSAGE.Get;
1005 
1006                                l_exception_id := NULL;
1007                                wsh_xc_util.log_exception(
1008                                   p_api_version           => 1.0,
1009                                   x_return_status         => l_return_status,
1010                                   x_msg_count             => l_msg_count,
1011                                   x_msg_data              => l_msg_data,
1012                                   x_exception_id          => l_exception_id,
1013                                   p_exception_location_id => l_initial_pickup_location_id,
1014                                   p_logged_at_location_id => l_initial_pickup_location_id,
1015                                   p_logging_entity        => 'SHIPPER',
1016                                   p_logging_entity_id     => FND_GLOBAL.USER_ID,
1017                                   p_exception_name        => 'WSH_PLAN_DELIVERY_FAIL',
1018                                   p_message               => substrb(l_exception_message,1,2000),
1019                                   p_delivery_id           => p_delivery_ids(i),
1020                                   p_error_message         => 'W');
1021                            END IF;
1022                            l_num_error := l_num_error + 1;
1023                            goto end_of_loop;
1024 
1025                         WHEN OTHERS THEN
1026                           IF l_debug_on THEN
1027                               wsh_debug_sv.logmsg(l_module_name,'Exception others in the block');
1028                              wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1029                           END IF;
1030                           goto end_of_loop ;
1031 
1032                       END;
1033 
1034                       IF l_planned_flag is not NULL THEN
1035                          -- prepare to plan the delivery
1036                          wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1037 
1038                          IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1039                             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1040                             --
1041                             -- Debug Statements
1042                             --
1043                             IF l_debug_on THEN
1044                                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1045                             END IF;
1046                             --
1047                             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1048                             wsh_util_core.add_message(x_return_status);
1049                             l_num_error := l_num_error + 1;
1050                             goto end_of_loop;
1051                          ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1052                            l_num_warn := l_num_warn + 1;
1053                          END IF;
1054 
1055                          l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1056                          IF l_debug_on THEN
1057                             wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1058                          END IF;
1059 
1060                          IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1061                              IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
1062                                 AND l_assigned_to_trip = 'N' THEN
1063                                 -- call carrier selection when appending limit is reached
1064                                 l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1065                                 l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1066                                 l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1067                                 l_select_carrier_tbl(l_select_carrier_tbl.count).status_code :=  'OP';
1068                              END IF;
1069 
1070                              IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1071                                 -- autorate delivery when appending limit is reached
1072                                 l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1073                                 l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1074                                 l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1075                                 l_auto_rate_tbl(l_auto_rate_tbl.count).status_code :=  'OP';
1076                              END IF;
1077                          END IF;
1078                       END IF;
1079                    ELSE
1080                       goto end_of_loop;
1081                    END IF;
1082 
1083                 ELSIF l_param_info.appending_limit = G_END_OF_STAGING THEN
1084                    OPEN c_get_line_status_in_delivery(p_delivery_ids(i));
1085                    LOOP
1086                       FETCH c_get_line_status_in_delivery INTO l_released_status;
1087                       EXIT WHEN c_get_line_status_in_delivery%NOTFOUND;
1088 
1089                       l_delivery_detail_count := l_delivery_detail_count + 1;
1090 
1091                       IF l_released_status in ('N','R','S','B') THEN
1092                          l_delivery_detail_count := 0;
1093                          l_ignore_count := 0;
1094                          EXIT;
1095                       ELSIF l_released_status in ('X','D') THEN
1096                          l_ignore_count := l_ignore_count + 1;
1097                       END IF;
1098 
1099                    END LOOP;
1100                    CLOSE c_get_line_status_in_delivery;
1101 
1102                    IF l_delivery_detail_count > 0 and
1103                       l_delivery_detail_count - l_ignore_count > 0 THEN
1104                       l_delivery_id := p_delivery_ids(i);
1105                       l_planned_flag := NULL;
1106                       --
1107                      DECLARE
1108                         record_locked_test exception;
1109                         PRAGMA EXCEPTION_INIT(record_locked_test, -54);
1110                       BEGIN
1111                          SELECT planned_flag  INTO l_planned_flag
1112                             FROM wsh_new_deliveries
1113                             WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
1114                                   AND planned_flag = 'N'
1115                             FOR UPDATE NOWAIT;
1116 
1117                       EXCEPTION
1118                         WHEN record_locked_test THEN
1119                            IF l_debug_on THEN
1120                               wsh_debug_sv.logmsg(l_module_name, 'Exception record_locked_test in the block');
1121                            END IF;
1122                            -- log exception
1123                            IF p_caller = 'WSH_DLMG' THEN
1124                                -- csun deliveryMerge (warning or error)
1125                                FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DELIVERY_FAIL');
1126                                FND_MESSAGE.SET_TOKEN('DELIVERY_ID' , to_char(p_delivery_ids(i)));
1127                                l_exception_message := FND_MESSAGE.Get;
1128 
1129                                l_exception_id := NULL;
1130                                wsh_xc_util.log_exception(
1131                                   p_api_version           => 1.0,
1132                                   x_return_status         => l_return_status,
1133                                   x_msg_count             => l_msg_count,
1134                                   x_msg_data              => l_msg_data,
1135                                   x_exception_id          => l_exception_id,
1136                                   p_exception_location_id => l_initial_pickup_location_id,
1137                                   p_logged_at_location_id => l_initial_pickup_location_id,
1138                                   p_logging_entity        => 'SHIPPER',
1139                                   p_logging_entity_id     => FND_GLOBAL.USER_ID,
1140                                   p_exception_name        => 'WSH_PLAN_DELIVERY_FAIL',
1141                                   p_message               => substrb(l_exception_message,1,2000),
1142                                   p_delivery_id           => p_delivery_ids(i),
1143                                   p_error_message         => 'W');
1144                            END IF;
1145                            l_num_error := l_num_error + 1;
1146                            goto end_of_loop;
1147 
1148                         WHEN OTHERS THEN
1149                           IF l_debug_on THEN
1150                               wsh_debug_sv.logmsg(l_module_name,'Exception others in the block');
1151                              wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1152                           END IF;
1153                           goto end_of_loop ;
1154 
1155                       END;
1156                       --
1157 
1158                       IF l_planned_flag is not NULL THEN
1159 
1160                          -- prepare to plan the delivery
1161                          wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1162 
1163                          IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1164                             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1165                             --
1166                             -- Debug Statements
1167                             --
1168                             IF l_debug_on THEN
1169                                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1170                             END IF;
1171                             --
1172                             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1173                             wsh_util_core.add_message(x_return_status);
1174                             l_num_error := l_num_error + 1;
1175                             goto end_of_loop;
1176                          ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1177                            l_num_warn := l_num_warn + 1;
1178                          END IF;
1179 
1180                          l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1181                          IF l_debug_on THEN
1182                             wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1183                          END IF;
1184 
1185                          IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1186 
1187 
1188 
1189                             IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E' AND l_assigned_to_trip = 'N' THEN
1190                                -- perform carrier selection when appending limit is reached
1191                                l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1192                                l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1193                                l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1194                                l_select_carrier_tbl(l_select_carrier_tbl.count).status_code :=  'OP';
1195                             END IF;
1196 
1197                             IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1198                                -- autoreate delivery when appending limit is reached
1199                                l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1200                                l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1201                                l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1202                                l_auto_rate_tbl(l_auto_rate_tbl.count).status_code :=  'OP';
1203                             END IF;
1204                          END IF;
1205                       END IF;
1206                    END IF;
1207 
1208                 END IF;
1209 
1210 
1211              ELSIF p_caller like 'WMS_%' THEN
1212 
1213                 IF p_event is NULL OR
1214                    p_event not in (G_START_OF_PACKING,
1215                                    G_START_OF_SHIPPING ) THEN
1216                    raise invalid_event;
1217                 END IF;
1218 
1219                 IF l_param_info.appending_limit = p_event  THEN
1220                    IF l_debug_on THEN
1221                       wsh_debug_sv.logmsg(l_module_name, 'Called from WMS, Appending limit '|| l_param_info.appending_limit ||' has been reached, lock and plan the delivery');
1222                    END IF;
1223                    l_delivery_id := p_delivery_ids(i);
1224                    l_planned_flag := NULL;
1225 
1226                    SELECT planned_flag  INTO l_planned_flag
1227                       FROM wsh_new_deliveries
1228                       WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
1229                       FOR UPDATE NOWAIT;
1230 
1231                    IF l_planned_flag is not NULL THEN
1232                          -- prepare to plan the delivery
1233                          wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1234 
1235                          IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1236                             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1237                             --
1238                             -- Debug Statements
1239                             --
1240                             IF l_debug_on THEN
1241                                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1242                             END IF;
1243                             --
1244                             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1245                             wsh_util_core.add_message(x_return_status);
1246                             l_num_error := l_num_error + 1;
1247                             goto end_of_loop;
1248                          ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1249                            l_num_warn := l_num_warn + 1;
1250                          END IF;
1251 
1252                       l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1253 
1254                       IF l_debug_on THEN
1255                          wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1256                       END IF;
1257 
1258                       IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1259                          IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
1260                             AND l_assigned_to_trip = ' N' THEN
1261                             l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1262                             l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1263                             l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1264                             l_select_carrier_tbl(l_select_carrier_tbl.count).status_code :=  l_status_code;
1265                          END IF;
1266 
1267                          IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1268                             l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1269                             l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1270                             l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1271                             l_auto_rate_tbl(l_auto_rate_tbl.count).status_code :=  l_status_code;
1272                          END IF;
1273                       END IF;
1274                    END IF;
1275                 END IF;
1276 
1277              END IF;
1278 
1279 
1280           <<end_of_loop>>
1281           NULL;
1282 
1283        END LOOP;
1284 
1285     END IF;
1286 
1287      IF l_select_carrier_tbl.count > 0 THEN
1288        IF l_debug_on THEN
1289           wsh_debug_sv.logmsg(l_module_name, 'Call wsh_deliveries_grp.delivery_action for '|| to_char(l_select_carrier_tbl.count)||' deliveries');
1290        END IF;
1291 
1292        l_action_prms.action_code            := 'SELECT-CARRIER';
1293        l_action_prms.caller                 := p_caller;
1294        l_action_prms.phase                  := NULL;
1295        l_action_prms.ignore_ineligible_dels := 'Y';
1296        l_action_prms.form_flag              := 'N';
1297 
1298        IF l_debug_on THEN
1299           wsh_debug_sv.logmsg(l_module_name, 'Calling wsh_deliveries_grp.delivery_action SELECT-CARRIER with '||l_select_carrier_tbl.count||' deliveries');
1300        END IF;
1301 
1302        wsh_deliveries_grp.delivery_action(
1303           p_api_version_number => 1.0,
1304           p_init_msg_list      => FND_API.G_FALSE,
1305           p_commit             => FND_API.G_FALSE,
1306           p_action_prms        => l_action_prms,
1307           p_rec_attr_tab       => l_select_carrier_tbl,
1308           x_delivery_out_rec   => l_delivery_out_rec,
1309           x_defaults_rec       => l_defaults_rec,
1310           x_return_status      => l_return_status,
1311           x_msg_count          => l_msg_count,
1312           x_msg_data           => l_msg_data);
1313 
1314        IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING OR
1315           l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR  THEN
1316           l_num_warn := l_num_warn + 1;
1317        ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
1318            l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1319            raise Select_Carrier_Err;
1320        END IF;
1321 
1322      END IF;
1323 
1324      IF l_auto_rate_tbl.count > 0 THEN
1325        IF l_debug_on THEN
1326           wsh_debug_sv.logmsg(l_module_name, 'Calling wsh_deliveries_grp.delivery_action GET-FREIGHT-COSTS with '||l_auto_rate_tbl.count ||' deliveries');
1327        END IF;
1328 
1329        l_action_prms.action_code            := 'GET-FREIGHT-COSTS';
1330        l_action_prms.caller                 := 'WSH_DLMG';
1331        l_action_prms.phase                  := NULL;
1332        l_action_prms.ignore_ineligible_dels := 'Y';
1333 
1334        wsh_deliveries_grp.delivery_action(
1335           p_api_version_number => 1.0,
1336           p_init_msg_list      => FND_API.G_FALSE,
1337           p_commit             => FND_API.G_FALSE,
1338           p_action_prms        => l_action_prms,
1339           p_rec_attr_tab       => l_auto_rate_tbl,
1340           x_delivery_out_rec   => l_delivery_out_rec,
1341           x_defaults_rec       => l_defaults_rec,
1342           x_return_status      => l_return_status,
1343           x_msg_count          => l_msg_count,
1344           x_msg_data           => l_msg_data);
1345 
1346 
1347        IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING OR
1348           l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR  THEN
1349           l_num_warn := l_num_warn + 1;
1350        ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1351              raise Rate_Delivery_Err;
1352        END IF;
1353      END IF;
1354 
1355 
1356     -- plan the deliveries
1357     l_planned_flag_true := 'Y'; --Bugfix 3778944
1358     IF l_dels_to_update.count > 0 THEN
1359        FORALL i in l_dels_to_update.FIRST .. l_dels_to_update.LAST
1360         update wsh_new_deliveries
1361         set planned_flag = l_planned_flag_true --Bugfix 3778944
1362         where delivery_id = l_dels_to_update(i);
1363     END IF;
1364 
1365     IF (p_delivery_ids.count = 1) THEN
1366        IF (l_num_warn > 0) AND (l_num_error = 0) THEN
1367          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1368        END IF;
1369     ELSIF (p_delivery_ids.count > 1) THEN
1370        IF (l_num_error > 0) OR (l_num_warn > 0) THEN
1371           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_SUMMARY');
1372           FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
1373           FND_MESSAGE.SET_TOKEN('NUM_WARN',l_num_warn);
1374           FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_delivery_ids.count - l_num_error - l_num_warn);
1375 
1376           IF (p_delivery_ids.count = l_num_error) THEN
1377              x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1378           ELSE
1379              x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1380           END IF;
1381           wsh_util_core.add_message(x_return_status);
1382        ELSE
1383           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1384        END IF;
1385     END IF;
1386 
1387     IF l_num_error > 0 and l_num_error = p_delivery_ids.count THEN
1388        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1389     ELSIF l_num_warn > 0  OR l_num_error > 0 THEN
1390        x_return_status  :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
1391     END IF;
1392 
1393     IF l_debug_on THEN
1394         wsh_debug_sv.pop(l_module_name, 'Return status: '|| x_return_status);
1395     END IF;
1396 
1397    EXCEPTION
1398 
1399     WHEN invalid_caller THEN
1400       rollback to before_adjust_planned_flag;
1401       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1402       FND_MESSAGE.Set_Name('WSH', 'WSH_ADJUST_PLANNED_CALLER');
1403       wsh_util_core.add_message(x_return_status,l_module_name);
1404 
1405       IF l_debug_on THEN
1406          wsh_debug_sv.pop(l_module_name, 'EXCEPTION:invalid_caller');
1407       END IF;
1408 
1409     WHEN invalid_event THEN
1410       rollback to before_adjust_planned_flag;
1411       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1412       FND_MESSAGE.Set_Name('WSH', 'WSH_ADJUST_PLANNED_EVENT');
1413       wsh_util_core.add_message(x_return_status,l_module_name);
1414 
1415       IF l_debug_on THEN
1416          wsh_debug_sv.pop(l_module_name, 'EXCEPTION:invalid_appending_limit');
1417       END IF;
1418 
1419     WHEN Rate_Delivery_Err THEN
1420          rollback to before_adjust_planned_flag;
1421          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1422 
1423          IF l_debug_on THEN
1424             wsh_debug_sv.logmsg(l_module_name, 'Rate Delivery failed');
1425             wsh_debug_sv.pop(l_module_name, 'EXCEPTION:Rate_Delivery_Err');
1426          END IF;
1427 
1428     WHEN Select_Carrier_Err THEN
1429          rollback to before_adjust_planned_flag;
1430          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1431 
1432          IF l_debug_on THEN
1433             wsh_debug_sv.logmsg(l_module_name, 'Carrier Selection failed');
1434             wsh_debug_sv.pop(l_module_name, 'EXCEPTION:Select_Carrier_Err');
1435          END IF;
1436 
1437     WHEN record_locked THEN
1438          rollback to before_adjust_planned_flag;
1439 
1440          IF c_get_unplanned_delivery%ISOPEN THEN
1441             CLOSE c_get_unplanned_delivery;
1442          END IF;
1443 
1444          IF c_num_of_staged_lines%ISOPEN THEN
1445             CLOSE c_num_of_staged_lines;
1446          END IF;
1447 
1448          IF c_get_line_status_in_delivery%ISOPEN THEN
1449             CLOSE c_get_line_status_in_delivery;
1450          END IF;
1451 
1452          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1453          FND_MESSAGE.Set_Name('WSH', 'WSH_DLVY_LOCK_FAILED');
1454          FND_MESSAGE.Set_Token('ENTITY_NAME',to_char(l_delivery_id));
1455          wsh_util_core.add_message(x_return_status,l_module_name);
1456 
1457          wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.ADJUST_PLANNED_FLAG',l_module_name);
1458          IF l_debug_on THEN
1459            wsh_debug_sv.logmsg(l_module_name,'Delivery cannot be locked, Oracle error message is ' || SQLERRM);
1460            wsh_debug_sv.pop(l_module_name, 'EXCEPTION:record_locked');
1461          END IF;
1462 
1463     WHEN OTHERS THEN
1464          rollback to before_adjust_planned_flag;
1465 
1466          IF c_get_unplanned_delivery%ISOPEN THEN
1467             CLOSE c_get_unplanned_delivery;
1468          END IF;
1469 
1470          IF c_num_of_staged_lines%ISOPEN THEN
1471             CLOSE c_num_of_staged_lines;
1472          END IF;
1473 
1474          IF c_get_line_status_in_delivery%ISOPEN THEN
1475             CLOSE c_get_line_status_in_delivery;
1476          END IF;
1477 
1478          x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1479          wsh_util_core.add_message(x_return_status,l_module_name);
1480          wsh_util_core.default_handler('WSH_DELIVERY_ACTIONS.ADJUST_PLANNED_FLAG',l_module_name);
1481          IF l_debug_on THEN
1482             wsh_debug_sv.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is ' || SQLERRM);
1483             wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1484          END IF;
1485 
1486 
1487 END Adjust_Planned_Flag;
1488 
1489 --
1490 -- Procedure: Plan
1491 -- Parameters:  p_del_rows - Delivery_Ids of deliveries to be planned
1492 --    x_return_status - status of procedure call
1493 -- Description: This procedure will Plan deliveries for shipment
1494 --
1495 
1496 PROCEDURE Plan
1497    (p_del_rows   IN  wsh_util_core.id_tab_type,
1498     x_return_status  OUT NOCOPY  VARCHAR2,
1499     p_called_for_sc  IN    BOOLEAN default false) IS
1500 
1501 
1502    others    EXCEPTION;
1503 
1504 
1505   --
1506   l_debug_on BOOLEAN;
1507   --
1508   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PLAN';
1509   --
1510 BEGIN
1511 
1512    --
1513    -- Debug Statements
1514    --
1515    --
1516    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1517    --
1518    IF l_debug_on IS NULL
1519    THEN
1520        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1521    END IF;
1522      --
1523    IF l_debug_on THEN
1524        WSH_DEBUG_SV.push(l_module_name);
1525    END IF;
1526    --
1527    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1528 
1529 
1530    IF (p_del_rows.count = 0) THEN
1531      raise others;
1532    END IF;
1533 
1534    Adjust_Planned_Flag(
1535       p_delivery_ids          => p_del_rows,
1536       p_caller                => 'WSH_DLMG',
1537       p_force_appending_limit => 'Y',
1538       p_call_lcss             => 'Y',
1539       x_return_status         => x_return_status,
1540       p_called_for_sc         => p_called_for_sc);
1541 
1542 
1543    --
1544    -- Debug Statements
1545    --
1546    IF l_debug_on THEN
1547          WSH_DEBUG_SV.pop(l_module_name);
1548    END IF;
1549 
1550 EXCEPTION
1551    WHEN others THEN
1552    wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.PLAN');
1553    x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1554 
1555 
1556    --
1557    -- Debug Statements
1558    --
1559    IF l_debug_on THEN
1560        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1561        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1562    END IF;
1563    --
1564 END Plan;
1565 
1566 
1567 --
1568 -- Procedure: Unplan
1569 -- Parameters:  p_del_rows - Delivery_ids of deliveries to be unplanned
1570 --    x_return_status - status of procedure call
1571 -- Description: This procedure will unplan deliveries for shipment
1572 --
1573 
1574   PROCEDURE Unplan
1575     (p_del_rows   IN  wsh_util_core.id_tab_type,
1576      x_return_status  OUT NOCOPY  VARCHAR2) IS
1577 
1578   l_num_error   NUMBER := 0;
1579   l_num_warn    NUMBER := 0;
1580   others    EXCEPTION;
1581   l_return_status  VARCHAR2(1);
1582   l_planned_flag_false       WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE; --bugfix 3778944
1583 
1584 CURSOR c_isdelfirm(p_delid IN NUMBER) IS
1585 select 'Y'
1586 from wsh_new_deliveries
1587 where delivery_id=p_delid AND
1588 planned_flag='F';
1589 
1590 l_delfirm VARCHAR2(1);
1591 
1592   --
1593 l_debug_on BOOLEAN;
1594   --
1595   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UNPLAN';
1596   --
1597   BEGIN
1598 
1599   --
1600   -- Debug Statements
1601   --
1602   --
1603   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1604   --
1605   IF l_debug_on IS NULL
1606   THEN
1607       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1608   END IF;
1609   --
1610   IF l_debug_on THEN
1611       WSH_DEBUG_SV.push(l_module_name);
1612   END IF;
1613   --
1614   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1615 
1616   IF (p_del_rows.count = 0) THEN
1617     raise others;
1618   END IF;
1619 
1620   FOR i IN 1..p_del_rows.count LOOP
1621 
1622     --
1623     -- Debug Statements
1624     --
1625     IF l_debug_on THEN
1626         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_UNPLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
1627     END IF;
1628     --
1629     wsh_delivery_validations.check_unplan( p_del_rows(i), x_return_status);
1630 
1631     IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1632       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNPLAN_ERROR');
1633       --
1634       -- Debug Statements
1635       --
1636       IF l_debug_on THEN
1637           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1638       END IF;
1639       --
1640       FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
1641       wsh_util_core.add_message(x_return_status);
1642       l_num_error := l_num_error + 1;
1643     ELSE
1644 
1645       IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1646         l_num_warn := l_num_warn + 1;
1647       END IF;
1648 
1649       l_delfirm:='N';
1650       FOR cur IN c_isdelfirm(p_del_rows(i)) LOOP
1651          l_delfirm:='Y';
1652          wsh_tp_release.unfirm_entity( p_entity      => 'DLVY',
1653                                      p_entity_id     =>p_del_rows(i),
1654                                      p_action        =>'UNPLAN',
1655                                      x_return_status =>x_return_status);
1656          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1657            IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1658               l_num_warn := l_num_warn + 1;
1659            ELSE
1660               l_num_error := l_num_error + 1;
1661            END IF;
1662          END IF;
1663       END LOOP;
1664 
1665      IF l_delfirm='N' THEN
1666       -- Set planned flag to 'N'
1667         l_planned_flag_false := 'N'; --bugfix 3778944
1668 
1669         UPDATE wsh_new_deliveries
1670         SET planned_flag = l_planned_flag_false  --bugfix 3778944
1671         WHERE  delivery_id = p_del_rows(i);
1672 
1673         IF (SQL%NOTFOUND) THEN
1674           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
1675           x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1676           wsh_util_core.add_message(x_return_status);
1677           l_num_error := l_num_error + 1;
1678         END IF;
1679      END IF;--l_del_firm=N
1680 
1681     END IF;
1682 
1683   END LOOP;
1684 
1685 
1686   IF (p_del_rows.count = 1) THEN
1687     IF (l_num_warn > 0) AND (l_num_error = 0) THEN
1688       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1689     END IF;
1690   ELSIF (p_del_rows.count > 1) THEN
1691 
1692     IF (l_num_error > 0) THEN
1693 
1694       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNPLAN_SUMMARY');
1695       FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
1696       FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
1697 
1698       IF (p_del_rows.count = l_num_error) THEN
1699          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1700       ELSE
1701          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1702       END IF;
1703 
1704       wsh_util_core.add_message(x_return_status);
1705     ELSIF (l_num_warn > 0) THEN
1706       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1707     ELSE
1708       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1709     END IF;
1710 
1711   END IF;
1712 
1713 --
1714 -- Debug Statements
1715 --
1716 IF l_debug_on THEN
1717     WSH_DEBUG_SV.pop(l_module_name);
1718 END IF;
1719 --
1720   EXCEPTION
1721     WHEN others THEN
1722      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UNPLAN');
1723      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1724 
1725 --
1726 -- Debug Statements
1727 --
1728 IF l_debug_on THEN
1729     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1730     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1731 END IF;
1732 --
1733   END Unplan;
1734 
1735   PROCEDURE create_bol (
1736      p_delivery_id IN NUMBER,
1737      x_return_status OUT NOCOPY  VARCHAR2) IS
1738 
1739   CURSOR get_delivery_info IS
1740   SELECT dg.delivery_leg_id,
1741     dl.initial_pickup_location_id,
1742     t.ship_method_code,
1743     dl.organization_id,
1744     t.name
1745   FROM   wsh_new_deliveries dl,
1746     wsh_delivery_legs dg,
1747     wsh_trip_stops st,
1748     wsh_trips t
1749   WHERE  dl.delivery_id = p_delivery_id AND
1750     dl.delivery_id = dg.delivery_id AND
1751     dg.pick_up_stop_id = st.stop_id AND
1752     st.trip_id = t.trip_id;
1753 
1754  --performance fix : changed to get_ledger_id (LE Uptake) to get it from hr_organization_information
1755   --instead of org_organization_definitions
1756   CURSOR get_ledger_id (l_org_id NUMBER) IS
1757   SELECT hoi.org_information1 ledger_id
1758   from hr_organization_information hoi
1759   WHERE hoi.organization_id = l_org_id
1760   AND hoi.org_information_context = 'Accounting Information';
1761 
1762   --
1763   l_ledger_id  NUMBER;  --LE Uptake
1764   l_delivery_leg_id  NUMBER;
1765   l_pickup_location_id  NUMBER;
1766   l_ship_method_code  VARCHAR2(30);
1767   l_organization_id  NUMBER;
1768   l_document_number  VARCHAR2(50);
1769   l_pack_slip_flag    VARCHAR2(1);
1770   l_trip_name	      VARCHAR2(50);
1771   --
1772   x_msg_count      NUMBER;
1773   x_msg_data      VARCHAR2(2000);
1774   --
1775   wsh_create_document_error EXCEPTION;
1776   --
1777   l_debug_on BOOLEAN;
1778   --
1779   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_BOL';
1780   --
1781   BEGIN
1782 
1783   --
1784   -- Debug Statements
1785   --
1786   --
1787   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1788   --
1789   IF l_debug_on IS NULL
1790   THEN
1791       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1792   END IF;
1793   --
1794   IF l_debug_on THEN
1795     --
1796     WSH_DEBUG_SV.push(l_module_name);
1797     WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1798     --
1799   END IF;
1800   --
1801   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1802   --
1803   OPEN  get_delivery_info;
1804   FETCH get_delivery_info INTO l_delivery_leg_id,
1805                l_pickup_location_id,
1806                l_ship_method_code,
1807                l_organization_id,
1808 	       l_trip_name;
1809   CLOSE get_delivery_info;
1810 
1811    /* BUG 1393429
1812   SELECT ood.set_of_books_id INTO l_set_of_books_id
1813   FROM   org_organization_definitions ood
1814   WHERE  ood.organization_id = l_organization_id;
1815    */
1816 --LE Uptake
1817   OPEN  get_ledger_id(l_organization_id);
1818   FETCH  get_ledger_id INTO l_ledger_id;
1819 
1820   IF (get_ledger_id%NOTFOUND) THEN
1821      FND_MESSAGE.SET_NAME('WSH','WSH_LEDGER_ID_NOT_FOUND');
1822     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1823     wsh_util_core.add_message(x_return_status);
1824      CLOSE get_ledger_id; -- bug  2045315
1825      --
1826      -- Debug Statements
1827      --
1828      IF l_debug_on THEN
1829          WSH_DEBUG_SV.pop(l_module_name);
1830      END IF;
1831      --
1832      RETURN;
1833   END IF;
1834 
1835   CLOSE  get_ledger_id;     --LE Uptake
1836 
1837 
1838   SAVEPOINT sp1;
1839 
1840   -- Create BOL
1841 
1842   --
1843   -- Debug Statements
1844   --
1845   IF l_debug_on THEN
1846     WSH_DEBUG_SV.log(l_module_name, 'l_ship_method_code', l_ship_method_code);
1847   END IF;
1848 
1849   --
1850   -- Bug 2712087 : Do not create BOL if ship method is NULL
1851   --
1852   IF l_ship_method_code IS NULL THEN
1853    --
1854    IF l_debug_on THEN
1855     --
1856     WSH_DEBUG_SV.logmsg(l_module_name, 'Null ship Method, so do not create BOL');
1857     --
1858    END IF;
1859    --
1860    FND_MESSAGE.SET_NAME('WSH','WSH_BOL_NULL_SHIP_METHOD_ERROR');
1861    FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_trip_name);
1862    x_return_status := wsh_util_core.g_ret_sts_error;
1863    wsh_util_core.add_message(x_return_status);
1864    --
1865    RAISE wsh_create_document_error;
1866    --
1867 
1868   ELSE
1869     --
1870     IF l_debug_on THEN
1871       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_PVT.CREATE_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
1872     END IF;
1873     --
1874     wsh_document_pvt.create_document
1875      (1.0,
1876       'F',
1877       NULL,
1878       NULL,
1879       x_return_status,
1880       x_msg_count,
1881       x_msg_data,
1882       'WSH_DELIVERY_LEGS',
1883       l_delivery_leg_id,
1884       665,
1885       l_pickup_location_id,
1886       'BOL',
1887       l_ship_method_code,
1888       /* Commented for Bugfix#1918342
1889       NULL, -- p_pod_flag,
1890       NULL, -- p_pod_by,
1891       NULL, -- p_pod_date,
1892       NULL, -- p_reason_of_transport,
1893       NULL, -- p_description,
1894       NULL, -- p_cod_amount,
1895       NULL, -- p_cod_currency_code,
1896       NULL, -- p_cod_remit_to,
1897       NULL, -- p_cod_charge_paid_by,
1898       NULL, -- p_problem_contact_reference,
1899       NULL, -- p_bill_freight_to,
1900       NULL, -- p_carried_by,
1901       NULL, -- p_port_of_loading,
1902       NULL, -- p_port_of_discharge,
1903       NULL, -- p_booking_office,
1904       NULL, -- p_booking_number,
1905       NULL, -- p_service_contract,
1906       NULL, -- p_shipper_export_ref,
1907       NULL, -- p_carrier_export_ref,
1908       NULL, -- p_bol_notify_party,
1909       NULL, -- p_supplier_code,
1910       NULL, -- p_aetc_number,
1911       NULL, -- p_shipper_signed_by,
1912       NULL, -- p_shipper_date,
1913       NULL, -- p_carrier_signed_by,
1914       NULL, -- p_carrier_date,
1915       NULL, -- p_bol_issue_office,
1916       NULL, -- p_bol_issued_by,
1917       NULL, -- p_bol_date_issued,
1918       NULL, -- p_shipper_hm_by,
1919       NULL, -- p_shipper_hm_date,
1920       NULL, -- p_carrier_hm_by,
1921       NULL, -- p_carrier_hm_date,     */
1922       l_ledger_id,
1923       'BOTH',
1924       200,
1925       l_document_number
1926      );
1927    --
1928    IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1929      RAISE wsh_create_document_error;
1930    END IF;
1931    --
1932   END IF; /* if ship_method_code is null */
1933   --
1934   -- Debug Statements
1935   --
1936   IF l_debug_on THEN
1937     WSH_DEBUG_SV.pop(l_module_name);
1938   END IF;
1939   --
1940    EXCEPTION
1941 
1942     WHEN wsh_create_document_error THEN
1943      ROLLBACK TO sp1;
1944      x_return_status := wsh_util_core.g_ret_sts_error;
1945      --
1946      -- Debug Statements
1947      --
1948      IF l_debug_on THEN
1949        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CREATE_DOCUMENT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1950        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DOCUMENT_ERROR');
1951      END IF;
1952      --
1953   END create_bol;
1954 
1955 -- Create Pack Slip
1956 
1957   PROCEDURE create_pack_slip (
1958             p_delivery_id IN NUMBER,
1959             x_return_status OUT NOCOPY  VARCHAR2) IS
1960 
1961   CURSOR get_delivery_info IS
1962   SELECT dl.initial_pickup_location_id,
1963     dl.organization_id
1964   FROM   wsh_new_deliveries dl
1965   WHERE  dl.delivery_id = p_delivery_id;
1966 
1967   CURSOR pack_slip_required (l_org_id NUMBER) IS
1968   SELECT pack_slip_required_flag
1969   FROM   wsh_shipping_parameters
1970   WHERE  organization_id = l_org_id;
1971 
1972   CURSOR get_pack_slip_number IS
1973   SELECT packing_slip_number
1974   FROM   wsh_packing_slips_db_v
1975   WHERE  delivery_id = p_delivery_id;
1976 
1977   --LE Uptake
1978  --performance fix : changed to get ledger_id to get it from hr_organization_information
1979   --instead of org_organization_definitions
1980   CURSOR get_ledger_id (l_org_id NUMBER) IS
1981   SELECT hoi.org_information1 ledger_id
1982   from hr_organization_information hoi
1983   WHERE hoi.organization_id = l_org_id
1984   AND hoi.org_information_context = 'Accounting Information';
1985 
1986   l_ledger_id  NUMBER;
1987   l_delivery_leg_id  NUMBER;
1988   l_pickup_location_id  NUMBER;
1989   l_ship_method_code  VARCHAR2(30);
1990   l_organization_id  NUMBER;
1991   l_document_number  VARCHAR2(50);
1992   l_pack_slip_flag    VARCHAR2(1) := NULL;
1993   l_pack_slip_number  VARCHAR2(50) := NULL;
1994 
1995   x_msg_count      NUMBER;
1996   x_msg_data      VARCHAR2(2000);
1997 
1998 
1999   wsh_create_document_error EXCEPTION;
2000 
2001    --
2002 l_debug_on BOOLEAN;
2003    --
2004    l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_PACK_SLIP';
2005    --
2006   BEGIN
2007 
2008   --
2009   -- Debug Statements
2010   --
2011   --
2012   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2013   --
2014   IF l_debug_on IS NULL
2015   THEN
2016       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2017   END IF;
2018   --
2019   IF l_debug_on THEN
2020       WSH_DEBUG_SV.push(l_module_name);
2021       --
2022       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
2023   END IF;
2024   --
2025   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2026 
2027   OPEN  get_delivery_info;
2028   FETCH get_delivery_info INTO l_pickup_location_id,
2029                 l_organization_id;
2030   CLOSE get_delivery_info;
2031 
2032   /* BUG 1393429
2033   SELECT ood.set_of_books_id INTO l_set_of_books_id
2034   FROM   org_organization_definitions ood
2035   WHERE  ood.organization_id = l_organization_id;
2036   */
2037 
2038 --LE Uptake
2039   OPEN  get_ledger_id(l_organization_id);
2040   FETCH  get_ledger_id INTO l_ledger_id;
2041 
2042   IF (get_ledger_id%NOTFOUND) THEN
2043     FND_MESSAGE.SET_NAME('WSH','WSH_LEDGER_ID_NOT_FOUND');
2044     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2045     wsh_util_core.add_message(x_return_status);
2046     CLOSE  get_ledger_id; -- bug 2045315
2047     --
2048     -- Debug Statements
2049     --
2050     IF l_debug_on THEN
2051         WSH_DEBUG_SV.pop(l_module_name);
2052     END IF;
2053     --
2054     RETURN;
2055   END IF;
2056 
2057   CLOSE  get_ledger_id;
2058 
2059 
2060 /* Bug: 1527393
2061   OPEN  pack_slip_required (l_organization_id);
2062   FETCH pack_slip_required INTO l_pack_slip_flag;
2063   CLOSE pack_slip_required;
2064 */
2065   OPEN get_pack_slip_number;
2066   FETCH get_pack_slip_number INTO l_pack_slip_number;
2067   CLOSE get_pack_slip_number;
2068 
2069   SAVEPOINT sp2;
2070 -- Bug: 1527393 Packslip should be generated irrespective of the required_flag in wsh_shipping_parameters.
2071   IF (l_pack_slip_number IS NULL) THEN
2072      --
2073      -- Debug Statements
2074      --
2075      IF l_debug_on THEN
2076          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_PVT.CREATE_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
2077      END IF;
2078      --
2079      wsh_document_pvt.create_document
2080      (
2081        p_api_version        => 1.0,
2082        p_init_msg_list        => 'F',
2083        p_commit          => NULL,
2084        p_validation_level      => NULL,
2085        x_return_status        => x_return_status,
2086        x_msg_count          => x_msg_count,
2087        x_msg_data          => x_msg_data,
2088        p_entity_name        => 'WSH_NEW_DELIVERIES',
2089        p_entity_id          => p_delivery_id,
2090        p_application_id      => 665,
2091        p_location_id        => l_pickup_location_id,
2092        p_document_type        => 'PACK_TYPE',
2093        p_document_sub_type      => 'SALES_ORDER',
2094 /* Commented for Bugfix#1918342
2095        p_pod_flag          => NULL, -- p_pod_flag,
2096        p_pod_by          => NULL, -- p_pod_by,
2097        p_pod_date          => NULL, -- p_pod_date,
2098        p_reason_of_transport    => NULL, -- p_reason_of_transport,
2099        p_description        => NULL, -- p_description,
2100        p_cod_amount        => NULL, -- p_cod_amount,
2101        p_cod_currency_code      => NULL, -- p_cod_currency_code,
2102        p_cod_remit_to        => NULL, -- p_cod_remit_to,
2103        p_cod_charge_paid_by    => NULL, -- p_cod_charge_paid_by,
2104        p_problem_contact_reference  => NULL, -- p_problem_contact_reference,
2105        p_bill_freight_to      => NULL, -- p_bill_freight_to,
2106        p_carried_by        => NULL, -- p_carried_by,
2107        p_port_of_loading      => NULL, -- p_port_of_loading,
2108        p_port_of_discharge      => NULL, -- p_port_of_discharge,
2109        p_booking_office      => NULL, -- p_booking_office,
2110        p_booking_number      => NULL, -- p_booking_number,
2111        p_service_contract      => NULL, -- p_service_contract,
2112        p_shipper_export_ref    => NULL, -- p_shipper_export_ref,
2113        p_carrier_export_ref    => NULL, -- p_carrier_export_ref,
2114        p_bol_notify_party      => NULL, -- p_bol_notify_party,
2115        p_supplier_code        => NULL, -- p_supplier_code,
2116        p_aetc_number        => NULL, -- p_aetc_number,
2117        p_shipper_signed_by      => NULL, -- p_shipper_signed_by,
2118        p_shipper_date        => NULL, -- p_shipper_date,
2119        p_carrier_signed_by      => NULL, -- p_carrier_signed_by,
2120        p_carrier_date        => NULL, -- p_carrier_date,
2121        p_bol_issue_office      => NULL, -- p_bol_issue_office,
2122        p_bol_issued_by        => NULL, -- p_bol_issued_by,
2123        p_bol_date_issued      => NULL, -- p_bol_date_issued,
2124        p_shipper_hm_by        => NULL, -- p_shipper_hm_by,
2125        p_shipper_hm_date      => NULL, -- p_shipper_hm_date,
2126        p_carrier_hm_by        => NULL, -- p_carrier_hm_by,
2127        p_carrier_hm_date      => NULL, -- p_carrier_hm_date,       */
2128        p_ledger_id      => l_ledger_id,     --LE Uptake
2129        p_consolidate_option    => 'BOTH',
2130        p_manual_sequence_number  => 200,
2131        x_document_number      => l_document_number
2132      );
2133 
2134      IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2135       RAISE wsh_create_document_error;
2136      END IF;
2137   END IF;
2138   --
2139   -- Debug Statements
2140   --
2141   IF l_debug_on THEN
2142       WSH_DEBUG_SV.pop(l_module_name);
2143   END IF;
2144   --
2145    EXCEPTION
2146 
2147     WHEN wsh_create_document_error THEN
2148      ROLLBACK TO sp2;
2149      x_return_status := wsh_util_core.g_ret_sts_error;
2150 
2151 --
2152 -- Debug Statements
2153 --
2154 IF l_debug_on THEN
2155     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CREATE_DOCUMENT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2156     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DOCUMENT_ERROR');
2157 END IF;
2158 --
2159  END create_pack_slip;
2160 
2161 
2162 --  PROCEDURE Get_Delivery_Defaults
2163 --  Ship confirm rule logic has been removed and moved
2164 --  to UI and Integration API for Public API
2165 --  This procedure will only derive the applicable defaults
2166 --  based on input deliveries; the calling UI and integration API
2167 --  will finalize the ship method based on ship confirm rule.
2168 --  (references: frontport bugs 4310141 and 4178235)
2169 PROCEDURE Get_Delivery_Defaults
2170     (p_del_rows               IN              wsh_util_core.id_tab_type,
2171      p_org_ids                IN              wsh_util_core.id_tab_type,
2172      p_ship_method_code_vals  IN              ship_method_type,
2173      x_autointransit_flag        OUT NOCOPY   VARCHAR2,
2174      x_autoclose_flag            OUT NOCOPY   VARCHAR2,
2175      x_report_set_id             OUT NOCOPY   NUMBER,   -- always NULL
2176      x_report_set_name           OUT NOCOPY   VARCHAR2, -- always NULL
2177      x_ship_method_name          OUT NOCOPY   VARCHAR2,
2178      x_return_status             OUT NOCOPY   VARCHAR2,
2179      x_sc_rule_id                OUT NOCOPY   NUMBER,
2180      x_ac_bol_flag               OUT NOCOPY   VARCHAR2,
2181      x_defer_interface_flag      OUT NOCOPY   VARCHAR2,
2182      x_sc_rule_name              OUT NOCOPY   VARCHAR2  -- always NULL
2183 
2184      ) IS
2185 
2186   CURSOR Report_Set (p_report_set_id NUMBER) IS
2187   SELECT rs.name,
2188     rs.report_set_id
2189   FROM wsh_report_sets rs
2190   WHERE rs.report_set_id = p_report_set_id;
2191 
2192   CURSOR Check_Trip (l_delivery_id NUMBER) IS
2193   select wts.trip_id
2194   from wsh_delivery_legs wdl, wsh_trip_stops wts
2195   where wdl.pick_up_stop_id=wts.stop_id
2196   and wdl.delivery_id=l_delivery_id
2197   and rownum=1;
2198 
2199   CURSOR sm_name(x_ship_method_code IN VARCHAR2) is
2200    SELECT meaning
2201    FROM   fnd_lookup_values_vl
2202    WHERE  lookup_code = x_ship_method_code
2203    AND  lookup_type = 'SHIP_METHOD'
2204    AND  view_application_id = 3;
2205 
2206 -- Use Ship Confirm Rule for the Organization
2207 -- Also, get the default values for the Rule
2208   CURSOR get_sc_rule (p_ship_confirm_rule_id NUMBER) IS
2209   SELECT wsc.name,
2210          wsc.ship_confirm_rule_id,
2211          wsc.ac_intransit_flag,
2212          wsc.ac_close_trip_flag,
2213          wsc.ac_bol_flag,
2214          wsc.ac_defer_interface_flag,
2215          wsc.report_set_id,
2216          wsc.ship_method_code,
2217          wsc.effective_end_date
2218     FROM wsh_ship_confirm_rules wsc
2219     WHERE wsc.ship_confirm_rule_id = p_ship_confirm_rule_id;
2220 
2221   l_trip_id              NUMBER;
2222   l_prev_organization_id NUMBER; -- to find out the Prev. Org. Id
2223   l_organization_id      NUMBER;
2224   l_all_orgids_match     BOOLEAN := TRUE;
2225   l_param_info           WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2226 
2227   l_num_warn             NUMBER := 0;
2228   l_count                NUMBER := 0;
2229 
2230   temp_ship_method_code VARCHAR2(30);
2231   dist_ship_method_code VARCHAR2(30);
2232 
2233   trip_options          BOOLEAN := FALSE;
2234   ship_method_options   BOOLEAN := FALSE;
2235   first_ship_method     BOOLEAN := TRUE;
2236   l_last_del            BOOLEAN := FALSE;
2237   l_return_status       VARCHAR2(1);
2238 
2239 
2240   others EXCEPTION;
2241 
2242   -- frontport bug 4310141 / Bug 4103142 - to get first trip for delivery
2243   CURSOR c_first_ship_method (p_delivery_id IN number)IS
2244   SELECT  wt.ship_method_code
2245   FROM    wsh_new_deliveries del,
2246           wsh_delivery_legs dlg,
2247           wsh_trip_stops st,
2248           wsh_trips wt
2249   WHERE   del.delivery_id = dlg.delivery_id
2250   AND     dlg.pick_up_stop_id = st.stop_id
2251   AND     del.initial_pickup_location_id = st.stop_location_id
2252   AND     st.trip_id = wt.trip_id
2253   AND     del.delivery_id = p_delivery_id
2254   AND     rownum < 3;
2255 
2256 
2257 
2258   --
2259   l_debug_on BOOLEAN;
2260   --
2261   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_DEFAULTS';
2262   --
2263   BEGIN
2264 
2265     --
2266     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2267     --
2268     IF l_debug_on IS NULL
2269     THEN
2270       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2271     END IF;
2272     --
2273     IF l_debug_on THEN
2274       WSH_DEBUG_SV.push(l_module_name);
2275       WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Count'||p_del_rows.count);
2276       WSH_DEBUG_SV.logmsg(l_module_name,'Org id Count'||p_org_ids.count);
2277       WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Count'||p_ship_method_code_vals.count);
2278     END IF;
2279     --
2280     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2281 
2282     l_all_orgids_match := TRUE;
2283 
2284     IF (p_del_rows.count = 0) THEN
2285       RAISE others;
2286     END IF;
2287 
2288     l_count := p_org_ids.count;
2289 
2290     IF (p_org_ids.count = 1) THEN
2291       l_all_orgids_match := TRUE;
2292       l_organization_id  := p_org_ids(1);
2293     END IF;
2294 
2295     IF (p_org_ids.count > 1) THEN
2296      begin
2297       FOR i IN 1..p_org_ids.count LOOP
2298 
2299        l_organization_id := p_org_ids(i);
2300 
2301        IF ( i = 1 ) THEN
2302         l_prev_organization_id := l_organization_id;
2303        END IF;
2304 
2305        IF  (l_prev_organization_id <> l_organization_id) THEN
2306         l_all_orgids_match := FALSE;
2307         EXIT;  -- Exit from loop as soon as Orgs. differ
2308        END IF;
2309        l_prev_organization_id := l_organization_id;
2310       END LOOP;
2311      end;
2312     END IF;
2313 
2314     x_autointransit_flag := 'N';
2315     x_autoclose_flag     := 'N';
2316 
2317 
2318     IF (l_all_orgids_match = TRUE) THEN --{
2319       WSH_SHIPPING_PARAMS_PVT.Get(
2320                        p_organization_id => l_organization_id,
2321                        x_param_info      => l_param_info,
2322                        x_return_status   => l_return_status);
2323       OPEN report_set(l_param_info.delivery_report_set_id);
2324       FETCH report_set INTO x_report_set_name, x_report_set_id;
2325       CLOSE report_set;
2326 
2327       -- Assign Ship Confirm Rule back to OUT parameter
2328       x_sc_rule_id := l_param_info.ship_confirm_rule_id;
2329     END IF; --}
2330 
2331 
2332     dist_ship_method_code  := '';
2333 
2334     -- Bug 2213342 : Ship Confirm Defaulting behavior
2335     FOR i IN 1..p_del_rows.count LOOP
2336       -- Find trip for the delivery
2337       l_trip_id := NULL;
2338       OPEN Check_Trip( p_del_rows (i));
2339       FETCH Check_Trip INTO l_trip_id;
2340       IF Check_Trip%NOTFOUND THEN
2341        l_trip_id := NULL;
2342       END IF;
2343       CLOSE Check_Trip;
2344 
2345       IF (l_trip_id IS NULL) THEN
2346         IF l_debug_on THEN
2347           WSH_DEBUG_SV.logmsg(l_module_name,'Trip id is null for delivery-'||p_del_rows(i))
2348 ;
2349         END IF;
2350 
2351         -- Check to see if Trip Options are already set
2352         IF NOT trip_options THEN
2353           trip_options := TRUE;
2354           IF l_debug_on THEN
2355             WSH_DEBUG_SV.logmsg(l_module_name,'Set Trip Options');
2356           END IF;
2357 
2358           x_autointransit_flag := 'Y';
2359           x_autoclose_flag     := 'Y';
2360         END IF;
2361 
2362         -- Check to see if Ship Method has to be set
2363         -- for Deliveries with Autocreate Trip
2364         IF NOT ship_method_options THEN
2365           IF l_debug_on THEN
2366             WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Options');
2367           END IF;
2368 
2369           IF first_ship_method THEN
2370             -- Initialize First Applicable Ship Method
2371             dist_ship_method_code := p_ship_method_code_vals(i);
2372             first_ship_method     := FALSE;
2373           END IF;
2374           temp_ship_method_code := p_ship_method_code_vals(i);
2375           IF NVL(temp_ship_method_code,' ') = NVL(dist_ship_method_code,' ') THEN
2376             IF l_debug_on THEN
2377               WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are same null');
2378             END IF;
2379 
2380             NULL;
2381           ELSE
2382             -- Ship Methods are different for Deliveries, so Null Ship Method is returned
2383             IF l_debug_on THEN
2384               WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are different');
2385             END IF;
2386 
2387             dist_ship_method_code := NULL;
2388             ship_method_options    := TRUE;
2389           END IF;
2390         END IF;
2391       ELSE  -- trip_id is not null, trip exists
2392 
2393         -- Find if this is the last delivery on the trip,
2394         -- then enable close options
2395         l_last_del := check_last_del_trip(p_del_rows(i));
2396 
2397         IF l_last_del THEN
2398           IF l_debug_on THEN
2399             WSH_DEBUG_SV.logmsg(l_module_name,'Last Delivery in Trip-'||p_del_rows(i));
2400           END IF;
2401           trip_options := TRUE; -- trip options should be allowed
2402           x_autointransit_flag := 'Y';
2403           x_autoclose_flag     := 'Y';
2404         END IF;
2405       END IF;
2406     END LOOP;
2407 
2408     -- frontport bug 4178235: Fix for bug 4147636
2409     -- Trip options viz. intransit flag, close trip flag, defer interface flag
2410     -- need to be disabled in the ship confirm dialogue box for cases
2411     -- where delivery is assigned to a trip and it is not the Final delivery
2412     -- in that trip.
2413     -- Earlier logic (before this fix) depended on setting autointransit_flag=N
2414     -- and autoclose_flag=N , so that UI could disable the trip options.
2415     --
2416     -- Issue with this logic is that the same two flags could be set to N
2417     -- because of ship confirm Rule.
2418     --
2419     -- To avoid conflict with values set by ship confirm rule,
2420     -- New Logic uses autointransit=D  and autoclose=D, (disable),
2421     -- so that UI should disable the trip options.
2422     --
2423     -- flags are set to Y or N depending on
2424     -- default value or based on the available ship confirm rule.
2425 
2426     IF NOT trip_options THEN
2427        x_autointransit_flag   := 'D';
2428        x_autoclose_flag       := 'D';
2429     END IF;
2430 
2431     IF l_debug_on THEN
2432       WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set id'||x_report_set_id);
2433       WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set Name'||x_report_set_name);
2434       WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule'||x_sc_rule_name);
2435       WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule id'||x_sc_rule_id);
2436       WSH_DEBUG_SV.logmsg(l_module_name,'End In transit'||x_autointransit_flag);
2437       WSH_DEBUG_SV.logmsg(l_module_name,'End Close '||x_autoclose_flag);
2438       WSH_DEBUG_SV.logmsg(l_module_name,'End BOL flag '||x_ac_bol_flag);
2439       WSH_DEBUG_SV.logmsg(l_module_name,'End Defer Interface flag '||x_defer_interface_flag);
2440       WSH_DEBUG_SV.logmsg(l_module_name,'End ship method '||x_ship_method_name);
2441     END IF;
2442 
2443     -- frontport bug 4310141:
2444     -- Bug 4103142 defaulted ship method from first trip
2445     IF (p_del_rows.count = 1) AND x_ship_method_name IS NULL THEN
2446       -- 42588951: default trip only if rule not specified.
2447       -- dist_ship_method_code has the delivery's SM value.
2448       -- so that if the trip exists and has null SM, we can use delivery's SM.
2449       IF dist_ship_method_code IS NULL THEN
2450         dist_ship_method_code := p_ship_method_code_vals(1);
2451       END IF;
2452 
2453       OPEN c_first_ship_method (p_del_rows(1));
2454       FETCH c_first_ship_method INTO temp_ship_method_code;
2455       IF c_first_ship_method%NOTFOUND THEN
2456         temp_ship_method_code := NULL;
2457       ELSE
2458         IF temp_ship_method_code IS NOT NULL THEN
2459           dist_ship_method_code := temp_ship_method_code;
2460         END IF;
2461       END IF;
2462       CLOSE c_first_ship_method;
2463     END IF;
2464 
2465     IF x_ship_method_name IS NULL AND dist_ship_method_code IS NOT NULL THEN
2466       OPEN  sm_name(dist_ship_method_code);
2467       FETCH sm_name into x_ship_method_name;
2468       CLOSE sm_name;
2469     END IF;
2470 
2471     --
2472     IF l_debug_on THEN
2473       WSH_DEBUG_SV.pop(l_module_name);
2474     END IF;
2475     --
2476 
2477   EXCEPTION
2478     WHEN others THEN
2479       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Delivery_Defaults');
2480       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2481       --
2482       IF l_debug_on THEN
2483         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2484         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2485       END IF;
2486       --
2487   END Get_Delivery_Defaults;
2488 
2489 
2490 -- Procedure: Confirm_Delivery
2491 -- Parameters:  p_del_rows   - Delivery_ids of deliveries to be confirmed
2492 --       p_action_flag   - 'S' for Ship Entered, Ship Unspecified Full
2493 --                         'B' for Ship Entered, Backorder Unspecified
2494 --                         'A' Ship All
2495 --       p_intransit_flag - 'Y' for autocreate_trip closes first stop
2496 --       p_close_flag - 'Y' closes autocreated trip and stops
2497 --       p_stage_del_flag - 'Y' creates a new delivery for the staged lines
2498 --       p_report_set_id - report set for delivery
2499 --       p_ship_method - ship method for autocreated trip
2500 --       p_actual_dep_date - actual departure date for pickup stop on autocreated trip
2501 --       p_defer_interface_flag - 'Y' to skip concurrent program submission, bug 1578251
2502 --       p_send_945_flag - 'Y' to trigger outbound shipment advice for delivery with WSH lines
2503 --       x_return_status - status of procedure call
2504 -- Description: This procedure will update shipped quantities of the details
2505 --        on each delivery and confirms each delivery
2506 --
2507 
2508   PROCEDURE Confirm_Delivery
2509     (p_del_rows   IN  wsh_util_core.id_tab_type,
2510      p_action_flag    IN  VARCHAR2,
2511      p_intransit_flag IN  VARCHAR2,
2512      p_close_flag    IN   VARCHAR2,
2513      p_stage_del_flag   IN   VARCHAR2,
2514      p_report_set_id  IN   NUMBER,
2515      p_ship_method    IN   VARCHAR2,
2516      p_actual_dep_date  IN   DATE,
2517      p_bol_flag    IN   VARCHAR2,
2518      p_mc_bol_flag    IN VARCHAR2,
2519      p_defer_interface_flag  IN VARCHAR2,
2520      p_send_945_flag  IN   VARCHAR2,
2521      p_autocreate_trip_flag  IN   varchar2 default 'Y',--heali :Shipment Advice change for trip Consolidation.
2522      x_return_status  OUT NOCOPY  VARCHAR2,
2523      p_caller               IN   VARCHAR2) IS
2524 
2525 
2526   record_locked        EXCEPTION;
2527   PRAGMA EXCEPTION_INIT(record_locked, -54);
2528 
2529   ship_confirm_error      EXCEPTION;
2530 
2531   -- Bug 1729723 : Updating number_of_lpn for delivery
2532   CURSOR number_of_lpn(l_delivery_id NUMBER) IS
2533   SELECT count(distinct wda.delivery_detail_id)
2534   FROM   wsh_delivery_assignments_v wda
2535   WHERE  wda.parent_delivery_detail_id is null
2536   AND LEVEL > 1
2537   CONNECT BY PRIOR wda.parent_delivery_detail_id = wda.delivery_detail_id
2538   START WITH wda.delivery_id = l_delivery_id;
2539 
2540   CURSOR Report_Set (l_organization_id NUMBER) IS
2541   SELECT rs.name, rs.report_set_id
2542   FROM   wsh_shipping_parameters sp,
2543       wsh_report_sets rs
2544   WHERE  sp.organization_id = l_organization_id AND
2545       rs.report_set_id = sp.delivery_report_set_id;
2546 
2547   CURSOR del_legs (l_delivery_id NUMBER) IS
2548   SELECT l1.pick_up_stop_id, l1.drop_off_stop_id, l1.delivery_leg_id, l2.delivery_id parent_delivery_id
2549   FROM   wsh_delivery_legs l1, wsh_delivery_legs l2
2550   WHERE  l1.delivery_id = l_delivery_id
2551   AND    l1.parent_delivery_leg_id = l2.delivery_leg_id(+);
2552 
2553 
2554   CURSOR get_consol_del (l_delivery_id NUMBER) IS
2555   SELECT l2.delivery_id parent_delivery_id
2556   FROM   wsh_delivery_legs l1, wsh_delivery_legs l2
2557   WHERE  l1.delivery_id = l_delivery_id
2558   AND    l1.parent_delivery_leg_id = l2.delivery_leg_id;
2559 
2560 
2561 
2562 ---BUG No:4241880.Cursor changed
2563   CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
2564   SELECT freight_code
2565   FROM   wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
2566   WHERE  wc.carrier_id=wcs.carrier_id AND
2567 	 wcs.carrier_service_id=wocs.carrier_service_id AND
2568 	 wcs.ship_method_code = p_ship_method_code AND
2569 	 wocs.organization_id = p_organization_id;
2570 ---BUG No:4241880.Cursor changed ends
2571 
2572 /*
2573   CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS -- Can this go ?!! pdo
2574   SELECT freight_code
2575   FROM   wsh_carrier_ship_methods_v
2576   WHERE  ship_method_code = p_ship_method_code AND
2577      organization_id = p_organization_id;
2578 */
2579 
2580   CURSOR user_name(l_user_id NUMBER ) is
2581   SELECT user_name
2582   FROM fnd_user
2583   WHERE user_id = l_user_id;
2584 
2585   CURSOR detail_info ( v_delivery_id in number ) IS
2586   SELECT da.parent_delivery_detail_id,
2587      dd.delivery_detail_id,
2588      dd.released_status ,
2589      dd.inspection_flag  ,
2590      dd.shipped_quantity ,
2591      dd.shipped_quantity2 ,
2592      dd.cycle_count_quantity ,
2593      dd.cycle_count_quantity2 ,
2594      dd.requested_quantity  ,
2595      dd.requested_quantity2 ,
2596      NVL(dd.picked_quantity,  dd.requested_quantity)  pick_qty,  -- overpicking
2597      NVL(dd.picked_quantity2, dd.requested_quantity2) pick_qty2,
2598      dd.organization_id ,
2599      dd.inventory_item_id ,
2600      dd.subinventory ,
2601      dd.locator_id,
2602      dd.source_code,   /*Bug 2096052 for OKE */
2603      dd.source_line_id		-- Consolidation of BO Delivery Details project
2604   FROM   wsh_delivery_details dd,
2605      wsh_delivery_assignments_v da
2606   WHERE  da.delivery_id = v_delivery_id AND
2607       da.delivery_id IS NOT NULL AND
2608       da.delivery_detail_id = dd.delivery_detail_id AND
2609       dd.container_flag = 'N';
2610 
2611 
2612   CURSOR Get_Trip(v_del_id NUMBER) IS
2613   SELECT wt.trip_id , wt.carrier_id, wt.ship_method_code, wt.mode_of_transport,
2614          --OTM R12
2615          wt.tp_plan_name
2616          --
2617   FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_trips wt
2618   WHERE wdl.pick_up_stop_id=wts.stop_id
2619   AND wdl.delivery_id=v_del_id
2620   AND wts.trip_id=wt.trip_id;
2621 
2622   CURSOR Get_Containers (v_delivery_detail_id NUMBER) IS
2623   SELECT delivery_detail_id
2624   FROM wsh_delivery_assignments_v
2625   WHERE delivery_detail_id <> v_delivery_detail_id
2626   START WITH delivery_detail_id = v_delivery_detail_id
2627   CONNECT BY PRIOR parent_delivery_detail_id = delivery_detail_id;
2628 
2629   CURSOR get_empty_containers(v_delivery_id NUMBER) IS
2630   SELECT da.delivery_detail_id
2631   FROM wsh_delivery_assignments_v da,
2632        WSH_DELIVERY_DETAILS  dd
2633   WHERE da.delivery_id = v_delivery_id
2634   AND da.delivery_detail_id = dd.delivery_detail_id
2635   AND dd.container_flag = 'Y'
2636   AND NOT EXISTS(
2637      SELECT delivery_detail_id
2638      FROM wsh_delivery_assignments_v da2
2639      WHERE da2.parent_delivery_detail_id = da.delivery_detail_id) ;
2640 
2641 -- Bug 2713285, added batch_id
2642   CURSOR get_delivery_name(v_delivery_id NUMBER) IS
2643   SELECT name,batch_id,
2644          --OTM R12
2645          ignore_for_planning,
2646          tms_interface_flag
2647          --
2648   FROM wsh_new_deliveries
2649   WHERE delivery_id = v_delivery_id;
2650 
2651   -- J: W/V Changes
2652   CURSOR get_delivery_wv(v_delivery_id NUMBER) IS
2653   SELECT gross_weight,
2654          volume
2655   FROM   wsh_new_deliveries
2656   WHERE delivery_id = v_delivery_id;
2657 
2658 
2659   CURSOR Get_Del_First_Trip(v_del_id NUMBER) IS
2660   SELECT wts.trip_id
2661   FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_new_deliveries wnd
2662   WHERE wdl.pick_up_stop_id=wts.stop_id
2663   AND wnd.initial_pickup_location_id = wts.stop_location_id
2664   AND wnd.delivery_id = wdl.delivery_id
2665   AND wnd.delivery_id=v_del_id;
2666 
2667 
2668   --bug 3314353  -- jckwok
2669   CURSOR prev_stop_csr ( p_trip_id IN NUMBER, p_stop_sequence IN NUMBER) IS
2670   SELECT stop_id
2671   FROM wsh_trip_stops
2672   WHERE trip_id              = p_trip_id
2673   AND status_code         IN ('OP','AR')
2674   AND stop_sequence_number < p_stop_sequence
2675   AND nvl(shipments_type_flag,'0') <> 'I' --bugfix 3925963
2676   ORDER BY stop_sequence_number;
2677 
2678   --bug 3314353  -- jckwok
2679   CURSOR get_stops_csr (p_trip_id IN NUMBER) IS
2680   SELECT stop_id,shipments_type_flag,stop_location_id   --bugfix 3925963
2681   FROM wsh_trip_stops
2682   WHERE trip_id              = p_trip_id
2683   AND status_code         IN ('OP','AR')
2684   ORDER BY stop_sequence_number;
2685 
2686   --bugfix 3925963
2687   CURSOR get_trip_name_csr (p_first_trip_id NUMBER) IS
2688   Select wt.name
2689   from wsh_trips wt
2690   where wt.trip_id = p_first_trip_id;
2691 
2692 --bug 3314353  -- jckwok
2693   CURSOR stop_sequence_number_csr (p_stop_id IN NUMBER) IS
2694   SELECT stop_sequence_number
2695   FROM wsh_trip_stops
2696   WHERE stop_id = p_stop_id;
2697 
2698   -- Added for bug 4493263
2699   CURSOR c_delv_trip_id_cursor( t_delivery_id NUMBER ) IS
2700   select distinct trip_id from wsh_trip_stops
2701   where stop_id in
2702        ( select distinct pick_up_stop_id
2703          from   wsh_delivery_legs
2704          where  delivery_id = t_delivery_id );
2705 
2706 
2707   l_batch_id        WSH_NEW_DELIVERIES.batch_id%TYPE;
2708 
2709   l_source_code     VARCHAR2(30);  /*Bug 2096052 */
2710   l_source_code_flag     VARCHAR2(1) := 'N';  /*Bug 2096052 */
2711   l_released_status   VARCHAR2(1);
2712   l_inspection_flag   VARCHAR2(1);
2713   l_container_id       NUMBER;
2714   l_ship_method_code     VARCHAR2(30);
2715   l_freight_code       VARCHAR2(30);
2716   l_delivery_detail_id   NUMBER;
2717   l_dummy_detail_id   NUMBER;
2718   l_detail_num       NUMBER;
2719   l_initial_pickup_date wsh_util_core.Date_tab_type;
2720   l_ultimate_dropoff_date  wsh_util_core.Date_tab_type;
2721 
2722   u_initial_pickup_date wsh_util_core.Date_tab_type; -- Bulk update variable
2723   u_ultimate_dropoff_date  wsh_util_core.Date_tab_type;
2724 
2725   l_organization_id   NUMBER ;
2726   l_num_warn         NUMBER :=0;
2727   l_num_error       NUMBER :=0;
2728   l_dd_organization_id   NUMBER ;
2729   l_inventory_item_id   NUMBER ;
2730   l_subinventory       VARCHAR2 (30);
2731   l_locator_id       NUMBER ;
2732 
2733   l_unassign_dds      wsh_util_core.id_tab_type;   -- Renamed the variable l_unassign_line_ids for BO Consolidation
2734   /* H integration: 945 cancel staged wrudge */
2735   l_cancel_line_ids   wsh_util_core.id_tab_type;
2736 
2737   l_assigned_counter   NUMBER;
2738   l_assigned_line_ids wsh_util_core.id_tab_type;
2739   l_assigned_cont_ids wsh_util_core.id_tab_type;
2740   l_assigned_orgs   wsh_util_core.id_tab_type;
2741   l_assigned_items     wsh_util_core.id_tab_type;
2742   l_assigned_subs   wsh_util_core.Column_Tab_Type;
2743   l_assigned_locs   wsh_util_core.id_Tab_Type;
2744 
2745   l_bo_rows       wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2746   l_cc_rows       wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2747   l_out_bo_rows     wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2748   l_out_cc_rows     wsh_util_core.id_tab_type; --        list of new details that got backordered
2749 
2750   l_dd_org_ids       wsh_util_core.id_tab_type; --         list of details org ids
2751   l_item_ids       wsh_util_core.id_tab_type; --         list of details inventory_item_ids
2752 
2753   -- for non-transactable items
2754   l_inv_controls_rec    WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
2755   dft_subinv        VARCHAR2(30);
2756   loc_restricted_flag  VARCHAR2(1);
2757   dft_loc_id        NUMBER;
2758   org_loc_ctl      NUMBER;
2759   sub_loc_ctl      NUMBER;
2760   item_loc_ctl      NUMBER;
2761   loc_ctl_code      NUMBER;
2762 
2763   g_line_inv_rec      WSH_DELIVERY_DETAILS_INV.line_inv_info;
2764   l_details_flag      BOOLEAN;
2765 
2766   l_ship_from_location  NUMBER;
2767   l_ship_to_location    NUMBER;
2768 
2769   l_dummy_rows      wsh_util_core.id_tab_type;
2770   l_dummy_rows1      wsh_util_core.id_tab_type;
2771   l_dummy_doc_set    wsh_document_sets.document_set_tab_type;
2772 
2773   l_trip_id        NUMBER;
2774   l_trip_name      VARCHAR2(30);
2775   l_return_status    VARCHAR2(1);
2776 
2777   l_requested_quantity  NUMBER;
2778   l_shipped_quantity    NUMBER;
2779   l_cycle_quantity    NUMBER;
2780   l_stage_quantity    NUMBER;
2781   l_del_status_code    VARCHAR2(2);
2782   l_status_code      WSH_UTIL_CORE.Column_Tab_Type  ;
2783   l_number_of_lpn    wsh_util_core.id_tab_type;
2784   u_status_code      WSH_UTIL_CORE.Column_Tab_Type  ;
2785   u_number_of_lpn    wsh_util_core.id_tab_type;
2786   /* H integration: 945 send document wrudge */
2787   u_organization_id    wsh_util_core.id_tab_type;
2788   u_wsh_lines_exist    wsh_util_core.id_tab_type;
2789   l_wsh_lines_exist    NUMBER;
2790 
2791   -- hverddin : Begin of OPM Changes Added Dual Quantities  31-OCT-00
2792 
2793   l_requested_quantity2   NUMBER;
2794   l_shipped_quantity2  NUMBER;
2795   l_cycle_quantity2    NUMBER;
2796   l_stage_quantity2    NUMBER;
2797 
2798   -- hverddin : End of OPM Changes Added Dual Quantities  31-OCT-00
2799   l_valid_flag      BOOLEAN; -- Check if ship_set is valid
2800   l_overfilled_flag    BOOLEAN;
2801   l_underfilled_flag    BOOLEAN;
2802 
2803   -- overpicking
2804   l_picked_quantity    NUMBER;
2805   l_picked_quantity2    NUMBER;
2806   l_unshipped_pick_quantity   NUMBER;
2807   l_unshipped_pick_quantity2  NUMBER;
2808 
2809   l_shp_dd_shipped_qtys   wsh_util_core.id_tab_type;
2810   l_shp_dd_shipped_qtys2  wsh_util_core.id_tab_type;
2811   l_shp_dd_cc_qtys    wsh_util_core.id_tab_type;
2812   l_shp_dd_cc_qtys2    wsh_util_core.id_tab_type;
2813   l_shp_dd_req_qtys    wsh_util_core.id_tab_type;
2814   l_shp_dd_ids      wsh_util_core.id_tab_type;    -- Bug 1672188 : list of details to to Ship
2815   l_shp_dd_items      wsh_util_core.id_tab_type ;  --      : list of items in details to Ship
2816   l_shp_dd_orgs      wsh_util_core.id_tab_type;   --       : list of org of details  to Ship
2817   l_shp_dd_subs      wsh_util_core.column_tab_type;   --       : list of subinventories of details to Ship
2818   l_shp_dd_locs      wsh_util_core.id_tab_type;   --       : list of locators of details to Ship
2819   l_shp_dd_cont_ids    wsh_util_core.id_tab_type;   --       : list of containers of details to Ship
2820   /* H integration: 945 check detail wrudge */
2821   l_shp_dd_source    wsh_util_core.column_tab_type;  --      : list of source_code of details to ship
2822 
2823   l_assigned_req_qtys  wsh_util_core.id_tab_type; --         list of details req qty
2824   l_assigned_shp_qtys  wsh_util_core.id_tab_type  ;
2825   l_assigned_cc_qtys    wsh_util_core.id_tab_type  ;
2826   l_assigned_req_qtys2  wsh_util_core.id_tab_type; --        list of details req qty2
2827   l_assigned_shp_qtys2  wsh_util_core.id_tab_type  ;
2828   l_assigned_cc_qtys2  wsh_util_core.id_tab_type  ;
2829   l_assigned_pick_qtys  wsh_util_core.id_tab_type; --        overpicking NVL(picked, requested)
2830   l_assigned_pick_qtys2   wsh_util_core.id_tab_type;
2831   l_assigned_overpick_qtys  wsh_util_core.id_tab_type; --      for backordering or cycle-counting overpicked quantities
2832   l_assigned_overpick_qtys2   wsh_util_core.id_tab_type;
2833   /* H integration: 945 assigned detail wrudge */
2834    l_assigned_source      wsh_util_core.column_tab_type;
2835 
2836   l_stop_rows      wsh_util_core.id_tab_type;
2837   u_stop_rows      wsh_util_core.id_tab_type; -- bug 2064810
2838   l_del_rows        wsh_util_core.id_tab_type;
2839   u_del_rows        wsh_util_core.id_tab_type;
2840 
2841   l_param_info      WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2842   l_enforce_packing_flag  VARCHAR2(1) := 'N';
2843 
2844   l_cc_qtys        wsh_util_core.id_tab_type; --         list of details BO qty
2845   l_cc_req_qtys      wsh_util_core.id_tab_type  ;
2846   l_cc_overpick_qtys    wsh_util_core.id_tab_type  ;
2847   l_cc_qtys2        wsh_util_core.id_tab_type; --        list of details BO qty2
2848   l_cc_overpick_qtys2  wsh_util_core.id_tab_type  ;
2849 
2850   l_bo_qtys        wsh_util_core.id_tab_type; --         list of details BO qty
2851   l_bo_mode        VARCHAR2 (15) ;
2852   l_bo_req_qtys      wsh_util_core.id_tab_type  ;
2853   l_bo_overpick_qtys    wsh_util_core.id_tab_type  ;
2854   l_bo_qtys2        wsh_util_core.id_tab_type; --        list of details BO qty2
2855   l_bo_overpick_qtys2  wsh_util_core.id_tab_type  ;
2856 
2857   l_staged_dd_id      NUMBER ;
2858   l_new_detail_id    NUMBER ;
2859   l_stage_rows      wsh_util_core.id_tab_type ;
2860 
2861   l_backorder_all_flag  BOOLEAN  := TRUE ;
2862   l_stage_all_flag    BOOLEAN  ;
2863   l_inv_cntrl_flag    BOOLEAN ;
2864   l_inv_material_flag BOOLEAN;
2865   l_del_tmp_rows      wsh_util_core.id_tab_type;
2866   l_document_set_name  VARCHAR2 ( 50 );
2867 
2868   l_user_name      VARCHAR2(100);
2869   l_user_id        NUMBER ;
2870   l_login_id                       NUMBER;
2871   l_document_set_id    NUMBER ;
2872   l_gross_wt        NUMBER ;
2873   l_net_wt        NUMBER ;
2874   l_vol          NUMBER ;
2875 
2876   l_unpacked_flag    BOOLEAN ;
2877   --l_unassign_all_flag  BOOLEAN ;
2878   l_cont_exists_flag    BOOLEAN ;
2879   l_fill_status      VARCHAR2(2) ;
2880 
2881 -- this variable will store fill status Bug 2878538
2882 -- it will help saving the value from getting over ridden of l_fill_status
2883 -- since l_fill_status variable gets overridden in a loop
2884   l_save_fill_status      VARCHAR2(2) := 'S';
2885   l_exception_exist   VARCHAR2(1);
2886   l_severity_present   VARCHAR2(1);
2887 
2888   l_pickup_stop_id    NUMBER ;
2889   l_dropoff_stop_id    NUMBER ;
2890   l_delivery_leg_id    NUMBER ;
2891   l_parent_delivery_id    NUMBER ;
2892   l_delivery_id      NUMBER ;
2893 
2894   l_gross_weight      NUMBER ;
2895   l_net_weight      NUMBER ;
2896   l_volume        NUMBER ;
2897   l_temp_line_id      NUMBER ;
2898   l_temp_source_code    VARCHAR2(5);
2899   l_max_quantity      NUMBER ;
2900   -- HW OPM added qty2
2901   l_max_quantity2    NUMBER ;
2902   l_msg_data        VARCHAR2(2000);
2903   l_msg_count      NUMBER;
2904   l_wms_delivery_id    wsh_util_core.id_tab_type ;
2905   --2121399
2906   TYPE Flag_Tab_Type IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;
2907   l_unassign_all_flag_tab  Flag_Tab_Type ;
2908   --2121399
2909 
2910   l_label_status VARCHAR2(20);
2911   l_del_tab INV_LABEL_PUB.transaction_id_rec_type;
2912 
2913   l_close_del_cnt   NUMBER := 0;
2914   l_confirm_del_cnt NUMBER := 0;
2915 
2916   /*new variable */
2917   l_stop_rec          WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
2918   l_trip_rec          WSH_TRIPS_PVT.trip_rec_type;
2919   -- bug 2263249
2920   l_wms_enabled_flag BOOLEAN;
2921   -- bug 2343058
2922   l_check_credit_init_flag BOOLEAN;
2923 
2924   x_unassigned_cont wsh_util_core.id_tab_type;
2925   l_msg_rec_count wsh_util_core.MsgCountType;
2926   l_error_exists  BOOLEAN;
2927   l_msg_table     WSH_INTEGRATION.MSG_TABLE ;
2928   l_count         NUMBER := 0;
2929   l_cont_name     VARCHAR2(100);
2930   l_empty_container NUMBER;
2931   l_delivery_name   VARCHAR2(100);
2932 
2933 
2934 --Compatibility Changes
2935     l_cc_validate_result		VARCHAR2(1);
2936     l_cc_failed_records			WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
2937     l_cc_group_info			WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
2938     l_cc_line_groups			WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
2939 
2940     l_trip_info_tab			WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2941     l_trip_id_tab_temp  		wsh_util_core.id_tab_type;
2942     l_cc_count_success			NUMBER;
2943     b_cc_linefailed			BOOLEAN;
2944     l_target_trip_id			NUMBER;
2945     b_tripalreadychecked                VARCHAR2(1);
2946     l_count_hashtrip                    NUMBER;
2947 
2948     --dummy tables for calling validate_constraint_wrapper
2949     l_cc_del_attr_tab	        WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2950     l_cc_det_attr_tab	        WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Attr_Tbl_Type;
2951     l_cc_trip_attr_tab	        WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2952     l_cc_stop_attr_tab	        WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
2953     l_cc_in_ids		        wsh_util_core.id_tab_type;
2954     l_cc_fail_ids		wsh_util_core.id_tab_type;
2955     l_cc_carrier_id             NUMBER;
2956     l_cc_mode                   VARCHAR2(30);
2957     G_HASH_TRIP                 wsh_util_core.id_tab_type;
2958 --Compatibility Changes
2959 
2960     l_with_mc_trip_flag           Flag_Tab_Type;
2961 
2962   -- Variables added for Consolidation of BO Delivery Details project
2963   --
2964   l_global_parameters	    WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
2965   l_assigned_source_lines   wsh_util_core.id_Tab_Type;
2966   l_unassign_backordered_dds    wsh_util_core.id_Tab_Type; --Stores the list of BackOrder/Cycle-Count delivery detail ids
2967   l_unassign_rel_status     wsh_util_core.Column_Tab_Type;
2968 		-- Stores the corresponding Released_status of the delivery details in l_unassign_dds
2969   l_unassign_source_lines   wsh_util_core.id_Tab_Type;
2970 		-- Stores the Source line ids of the delivery details that are going to be unassigned from the Delivery
2971   l_bo_line_ids		    wsh_util_core.id_Tab_Type;
2972 
2973   l_bo_source_lines   wsh_util_core.id_Tab_Type;
2974   l_cc_source_lines   wsh_util_core.id_Tab_Type;
2975   l_cons_flags        wsh_util_core.Column_Tab_Type;
2976   l_source_line_id	NUMBER;
2977   l_idx		NUMBER;
2978   l_cmp_idx	NUMBER;
2979   j		NUMBER;
2980   k		NUMBER;
2981   l_flag	VARCHAR2(1);
2982   l_close_confirm_flag VARCHAR2(1):= NULL;
2983   --
2984 
2985   -- Exception Changes
2986   l_exceptions_tab  wsh_xc_util.XC_TAB_TYPE;
2987   l_exp_logged      BOOLEAN := FALSE;
2988 
2989   -- Pack J, table indexed by delivery_id to store whether ITM screening is required.
2990   l_itm_exc_flag   wsh_util_core.column_Tab_Type;
2991   l_itm_stops_tab   wsh_util_core.column_Tab_Type;
2992   l_lines_in_delivery NUMBER;
2993   l_itm_exc_severity VARCHAR2(30);
2994 
2995   -- Checks if the itm exception is enabled and its severity.
2996   CURSOR c_exc_severity (c_exception_name VARCHAR2) IS
2997   SELECT  UPPER(default_severity)
2998   FROM            wsh_exception_definitions_vl
2999   WHERE   exception_name = c_exception_name
3000   AND     enabled = 'Y';
3001 
3002   l_carrier_rec                  WSH_CARRIERS_GRP.Carrier_Service_InOut_Rec_Type;
3003   l_del_first_trip    NUMBER;
3004 
3005   --bug 3314353
3006   l_pick_up_stop_sequence_num NUMBER;
3007   l_first_trip_id NUMBER;
3008   l_prev_stop_id NUMBER;
3009 
3010   -- bug 2283621
3011   l_more_dd_flag           BOOLEAN;
3012   l_more_material_dd_flag           BOOLEAN;
3013   l_inv_ctrl_dd_count      NUMBER;
3014   l_inv_material_dd_count      NUMBER;
3015   l_inv_ctrl_dd_ids        VARCHAR2(100);
3016   l_inv_material_dd_ids        VARCHAR2(100);
3017 -- HW OPMCONV. Removed OPM variables
3018 
3019   -- Local Variables added for Bug 3118519
3020 
3021   l_more_flag              BOOLEAN      := TRUE;
3022   l_detail_count           NUMBER       := 0;
3023   l_invalid_details        VARCHAR2(100);
3024   l_token                  VARCHAR2(2000);
3025   l_sc_pickup_date         DATE;
3026   l_sc_dropoff_date        DATE;
3027 
3028   l_entity_name    VARCHAR2(1000);
3029   l_exc_beh_error  VARCHAR2(1000);
3030   l_exc_beh_warn   VARCHAR2(1000);
3031 
3032 -- HW OPMCONV. Added a new variable
3033    l_error_DFF  BOOLEAN :=FALSE;
3034 
3035 
3036   --Bugfix 3925963
3037   l_shipments_type_flag  VARCHAR2(30);
3038   l_stop_location_id     NUMBER;
3039   l_stops_trip_name      VARCHAR2(30);
3040   l_inbound_stops_exists  BOOLEAN;
3041   l_stop_name            VARCHAR2(60);
3042   l_stop_name_list       VARCHAR2(10000);
3043   --
3044 
3045   --/== Workflow Changes
3046   l_scpod_wf_del_rows   wsh_util_core.id_tab_type;
3047   l_ctr          NUMBER;
3048   l_aname_text   wf_engine.nametabtyp;
3049   l_avalue_text  wf_engine.texttabtyp;
3050   l_aname_num    wf_engine.nametabtyp;
3051   l_avalue_num   wf_engine.numtabtyp;
3052   l_process_started VARCHAR2(1);
3053   l_enable_sc_wf    VARCHAR2(1);
3054   l_override_wf     VARCHAR2(1);
3055   l_wf_rs           VARCHAR2(1);
3056   l_defer_interface_flag VARCHAR2(1);
3057   --==/
3058   l_custom_severity varchar2(10);
3059   l_activity_code   varchar2(200) := 'SHIP_CONFIRM_MESSAGE' ;
3060   l_validation_code varchar2(200) := 'MISSING_CONTROLS';
3061 
3062   l_mdc_cl_del_tab wsh_util_core.id_tab_type;
3063   l_mdc_co_del_tab wsh_util_core.id_tab_type;
3064   l_mdc_index_i NUMBER;
3065 
3066   -- LPN CONV rv
3067   cursor l_delete_wms_empty_cnt_csr is
3068   select distinct wwst.delivery_detail_id
3069   from   wsh_wms_sync_tmp wwst,
3070          wsh_delivery_details wdd
3071   where  wwst.operation_type = 'DELETE'
3072   and    wdd.delivery_detail_id = wwst.delivery_detail_id
3073   and    wdd.container_flag = 'Y'
3074   and    wdd.lpn_id is not null;
3075 
3076   l_delete_cnt_id_tbl wsh_util_core.id_tab_type;
3077   -- LPN CONV rv
3078   -- bug 4505105
3079   l_del_valid_flag VARCHAR2(1);
3080   -- bug 4505105
3081   --Bug 5255366
3082   l_consol_del_doc_set wsh_util_core.id_tab_type;
3083   l_content_del_flag  BOOLEAN  := TRUE;
3084 
3085   --OTM R12
3086   l_ignore_for_planning  WSH_NEW_DELIVERIES.IGNORE_FOR_PLANNING%TYPE;
3087   l_tms_interface_flag   WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
3088   l_otm_trip_id          WSH_TRIPS.TRIP_ID%TYPE;
3089   l_otm_carrier_id       WSH_NEW_DELIVERIES.CARRIER_ID%TYPE;
3090   l_otm_ship_method_code WSH_NEW_DELIVERIES.SHIP_METHOD_CODE%TYPE;
3091   l_otm_mode             WSH_NEW_DELIVERIES.MODE_OF_TRANSPORT%TYPE;
3092   l_otm_plan_name        WSH_TRIPS.TP_PLAN_NAME%TYPE;
3093   l_gc3_is_installed     VARCHAR2(1);
3094   --
3095 
3096   l_debug_on BOOLEAN;
3097   --
3098   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONFIRM_DELIVERY';
3099   --
3100 BEGIN
3101 
3102   -- 0. Get the user_id and user_name
3103         --
3104         -- Debug Statements
3105         --
3106         --
3107         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3108         --
3109         IF l_debug_on IS NULL
3110         THEN
3111             l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3112         END IF;
3113         --
3114         IF l_debug_on THEN
3115             WSH_DEBUG_SV.push(l_module_name);
3116             --
3117             WSH_DEBUG_SV.log(l_module_name,'P_ACTION_FLAG',P_ACTION_FLAG);
3118             WSH_DEBUG_SV.log(l_module_name,'P_INTRANSIT_FLAG',P_INTRANSIT_FLAG);
3119             WSH_DEBUG_SV.log(l_module_name,'P_CLOSE_FLAG',P_CLOSE_FLAG);
3120             WSH_DEBUG_SV.log(l_module_name,'P_STAGE_DEL_FLAG',P_STAGE_DEL_FLAG);
3121             WSH_DEBUG_SV.log(l_module_name,'P_REPORT_SET_ID',P_REPORT_SET_ID);
3122             WSH_DEBUG_SV.log(l_module_name,'P_SHIP_METHOD',P_SHIP_METHOD);
3123             WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DEP_DATE',P_ACTUAL_DEP_DATE);
3124             WSH_DEBUG_SV.log(l_module_name,'P_BOL_FLAG',P_BOL_FLAG);
3125             WSH_DEBUG_SV.log(l_module_name,'P_MC_BOL_FLAG',P_MC_BOL_FLAG);
3126             WSH_DEBUG_SV.log(l_module_name,'P_DEFER_INTERFACE_FLAG',P_DEFER_INTERFACE_FLAG);
3127             WSH_DEBUG_SV.log(l_module_name,'P_SEND_945_FLAG',P_SEND_945_FLAG);
3128         END IF;
3129         --
3130         l_login_id := FND_GLOBAL.login_id;
3131   l_user_id   := FND_GLOBAL.user_id ;
3132   l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3133 
3134   --OTM R12
3135   l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
3136 
3137   IF l_gc3_is_installed IS NULL THEN
3138     l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
3139   END IF;
3140   --
3141 
3142   -- bug 2778035
3143   IF p_action_flag IS NULL
3144   OR p_action_flag NOT IN ('S', 'B', 'L', 'T', 'A', 'C', 'O') THEN
3145     FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_SC_ACTION_FLAG');
3146     wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
3147     RAISE FND_API.G_EXC_ERROR;
3148   END IF;
3149   -- bug 2778035
3150 
3151 -- Fix for Bug 3944151
3152 -- Using fnd_global.User_name for global G_USER_NAME
3153 -- This is because before this fix, global g_user_name carried the previous user name
3154 -- when one user logged out and another user logged back in the same mobile telnet session.
3155 
3156    G_USER_NAME := FND_GLOBAL.USER_NAME;
3157 
3158 /*  if ( G_USER_NAME is NULL ) then
3159           open user_name(l_user_id);
3160     fetch user_name into G_USER_NAME ;
3161     if user_name%NOTFOUND then
3162       raise ship_confirm_error;
3163     end if;
3164     close user_name;
3165   end if ;
3166 */
3167 -- End of fix for bug 3944151
3168 
3169 /* Bug 2761304 : The following call is now made inside the loop*/
3170 
3171  /* WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3172                                     x_msg_rec_count => l_msg_rec_count,
3173                                     x_return_status => l_return_status);
3174   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3175     raise ship_confirm_error;
3176   END IF;*/
3177 
3178   l_user_name := G_USER_NAME ;
3179   SAVEPOINT start_ship_confirm_delivery ;
3180 
3181   l_document_set_id := p_report_set_id;
3182 
3183   l_enable_sc_wf := 'N';  --Workflow Changes
3184 
3185         -- bug 2343058
3186         l_check_credit_init_flag := TRUE;
3187 
3188   -- Code Shifted from below to execute irrespective of the If condition - Workflow Changes
3189   IF l_debug_on THEN
3190       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit 2WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters',WSH_DEBUG_SV.C_PROC_LEVEL);
3191   END IF;
3192   --
3193   WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(l_global_parameters, l_return_status);
3194   IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3195 	      	          WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3196 	raise ship_confirm_error;
3197 --      x_return_status := l_return_status;
3198 --      wsh_util_core.add_message(x_return_status);
3199 --      l_num_error := l_num_error + 1 ;
3200 --      goto loop_end;
3201   END IF;
3202 
3203 
3204   FOR i IN 1..p_del_rows.count LOOP
3205 
3206   SAVEPOINT confirm_delivery_sp ;
3207 
3208 /* Bug 2761304*/
3209   WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3210                                     x_msg_rec_count => l_msg_rec_count,
3211                                     x_return_status => l_return_status);
3212 
3213   -- Bug 3913206
3214   l_sc_pickup_date        := NULL;
3215   l_sc_dropoff_date       := NULL;
3216 
3217   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3218     raise ship_confirm_error;
3219   END IF;
3220 
3221 -- Bug 2713285, movedthe code outside the loop,since it is for same delivery
3222 -- added batch_id
3223   OPEN get_delivery_name(p_del_rows(i));
3224   FETCH get_delivery_name INTO l_delivery_name,
3225                                l_batch_id,
3226                                --OTM R12
3227                                l_ignore_for_planning,
3228                                l_tms_interface_flag;
3229                                --
3230   CLOSE get_delivery_name;
3231 
3232   IF l_debug_on THEN
3233     WSH_DEBUG_SV.log(l_module_name,'Delivery Name',l_delivery_name);
3234     WSH_DEBUG_SV.log(l_module_name,'Batch id',l_batch_id);
3235     --OTM R12
3236     WSH_DEBUG_SV.log(l_module_name,'ignore for planning',l_ignore_for_planning);
3237     WSH_DEBUG_SV.log(l_module_name,'tms interface flag',l_tms_interface_flag);
3238     --
3239   END IF;
3240 
3241 
3242     OPEN get_empty_containers(p_del_rows(i));
3243     LOOP
3244        FETCH get_empty_containers INTO l_empty_container;
3245        EXIT WHEN get_empty_containers%NOTFOUND;
3246        l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_empty_container);
3247 
3248        IF l_debug_on THEN
3249           WSH_DEBUG_SV.log(l_module_name,'l_empty_container',l_empty_container);
3250           WSH_DEBUG_SV.log(l_module_name,'Empty Container',l_cont_name);
3251        END IF;
3252 
3253        FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_CONTAINER');
3254        FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
3255        FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3256        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3257        l_num_warn := l_num_warn + 1;
3258        wsh_util_core.add_message(x_return_status,l_module_name);
3259     END LOOP;
3260     CLOSE get_empty_containers;
3261 
3262     l_bo_rows.delete ;
3263     l_cc_rows.delete ;
3264     l_unassign_dds.delete ;
3265     -- Consolidation of BO Delivery Details project
3266     --
3267     l_bo_source_lines.delete;
3268     l_cc_source_lines.delete;
3269     l_assigned_source_lines.delete;
3270     l_unassign_rel_status.delete;
3271     l_unassign_source_lines.delete;
3272     l_bo_line_ids.delete;
3273 
3274     --
3275     /* H integration: 945 cancel staged wrudge */
3276     l_cancel_line_ids.delete;
3277     l_assigned_counter   := 0 ;
3278     l_assigned_line_ids.delete;
3279     l_assigned_cont_ids.delete;
3280     l_assigned_orgs.delete;
3281     l_assigned_items.delete;
3282     l_assigned_subs.delete;
3283     l_assigned_locs.delete;
3284     l_out_bo_rows.delete;
3285     l_out_cc_rows.delete;
3286     l_dd_org_ids.delete;
3287     l_item_ids.delete;
3288 
3289     /* H integration: 945 send document wrudge */
3290     l_wsh_lines_exist := 0;
3291 
3292     l_shp_dd_shipped_qtys.delete ;
3293     l_shp_dd_shipped_qtys2.delete ;
3294     l_shp_dd_cc_qtys.delete ;
3295     l_shp_dd_cc_qtys2.delete ;
3296     l_shp_dd_req_qtys.delete ;
3297     l_shp_dd_ids.delete ;
3298     l_shp_dd_items.delete ;
3299     l_shp_dd_orgs.delete ;
3300     l_shp_dd_subs.delete ;
3301     l_shp_dd_locs.delete ;
3302     l_shp_dd_cont_ids.delete ;
3303     /* H integration: 945 check detail wrudge */
3304     l_shp_dd_source.delete;
3305 
3306     l_assigned_req_qtys.delete ;
3307     l_assigned_shp_qtys.delete ;
3308     l_assigned_cc_qtys.delete ;
3309 
3310     l_assigned_req_qtys2.delete ;
3311     l_assigned_shp_qtys2.delete ;
3312     l_assigned_cc_qtys2.delete ;
3313 
3314     l_assigned_pick_qtys.delete;
3315     l_assigned_pick_qtys2.delete;
3316     l_assigned_overpick_qtys.delete;
3317     l_assigned_overpick_qtys2.delete;
3318 
3319     /* H integration: 945 assigned details wrudge */
3320     l_assigned_source.delete;
3321 
3322     l_stop_rows.delete ;
3323     l_del_rows.delete ;
3324 
3325     l_enforce_packing_flag  := 'N';
3326 
3327     l_bo_mode := 'UNRESERVE';
3328 
3329     l_cc_req_qtys.delete ;
3330     l_cc_overpick_qtys.delete ;
3331     l_cc_qtys.delete ;
3332     l_cc_qtys2.delete ;
3333 
3334     l_bo_qtys.delete ;
3335     l_bo_req_qtys.delete ;
3336     l_bo_overpick_qtys.delete ;
3337     l_bo_qtys2.delete ;
3338 
3339     L_stage_ROWS.delete ;
3340 
3341     l_organization_id := NULL ;
3342     l_ship_method_code   := NULL ;
3343     l_ship_from_location := NULL ;
3344     l_ship_to_location   := NULL ;
3345     l_gross_weight     := NULL ;
3346     l_net_weight     := NULL ;
3347     l_volume       := NULL ;
3348 
3349     l_del_status_code := NULL ;
3350 
3351     l_number_of_lpn(i)   := NULL;
3352     -- bug 2263249
3353     l_wms_enabled_flag   := FALSE;
3354     l_unassign_all_flag_tab(i) := TRUE ;
3355     l_inv_cntrl_flag := TRUE;
3356     l_inv_material_flag := TRUE;
3357     l_unpacked_flag := FALSE;
3358 -- Set to False by default,Bug 2878538
3359     l_cont_exists_flag := FALSE;
3360 
3361     -- bug 2283621
3362     l_more_dd_flag := TRUE;
3363     l_more_material_dd_flag  := TRUE;
3364     l_inv_ctrl_dd_ids := NULL;
3365     l_inv_material_dd_ids := NULL;
3366     l_inv_ctrl_dd_count := 0;
3367     l_inv_material_dd_count  :=0 ;
3368     -- end 2283621
3369 
3370     l_with_mc_trip_flag(i)  := FALSE;
3371 
3372     --OTM R12, check OTM exceptions before ship confirm
3373     IF (l_gc3_is_installed = 'Y' AND NVL(l_ignore_for_planning, 'N') = 'N') THEN
3374 
3375       l_otm_trip_id          := NULL;
3376       l_otm_carrier_id       := NULL;
3377       l_otm_ship_method_code := NULL;
3378       l_otm_mode             := NULL;
3379       l_otm_plan_name        := NULL;
3380 
3381       OPEN get_trip(p_del_rows(i));
3382       FETCH get_trip INTO l_otm_trip_id,
3383                         l_otm_carrier_id,
3384                         l_otm_ship_method_code,
3385                         l_otm_mode,
3386                         l_otm_plan_name;
3387 
3388       IF (get_trip%NOTFOUND) THEN
3389         --if cursor not found, then leave the ship method as
3390         --p_ship_method so does not error out later
3391         l_otm_ship_method_code := p_ship_method;
3392       END IF;
3393 
3394       CLOSE get_trip;
3395 
3396       IF l_debug_on THEN
3397         WSH_DEBUG_SV.log(l_module_name,'trip id',l_otm_trip_id);
3398         WSH_DEBUG_SV.log(l_module_name,'carrier id',l_otm_carrier_id);
3399         WSH_DEBUG_SV.log(l_module_name,'ship method',l_otm_ship_method_code);
3400         WSH_DEBUG_SV.log(l_module_name,'mode',l_otm_mode);
3401         WSH_DEBUG_SV.log(l_module_name,'otm plan name',l_otm_plan_name);
3402       END IF;
3403 
3404       IF (p_ship_method IS NULL) THEN
3405         --if p_ship_method is NULL, means no changes to the ship method,
3406         --set l_otm_ship_method_code to NULL as well to avoid error later.
3407         l_otm_ship_method_code := p_ship_method;
3408       END IF;
3409 
3410       -- trip id is NULL, not assigned. Hence ignore the delivery for planning.
3411       -- (CR->NS and AW->DR for 'Not assigned' to an OTM trip Delivery).
3412       -- This update for the ignore_for_plan to 'Y' is needed to autocreate the trip
3413       -- for this delivery during ship conform.
3414       --
3415 
3416       IF l_debug_on THEN
3417         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
3418       END IF;
3419 
3420       WSH_INTERFACE_EXT_GRP.otm_pre_ship_confirm(
3421         p_delivery_id        => p_del_rows(i),
3422         p_delivery_name      => l_delivery_name,
3423         p_tms_interface_flag => l_tms_interface_flag,
3424         p_trip_id            => l_otm_trip_id,
3425         x_return_status      => l_return_status);
3426 
3427       IF l_debug_on THEN
3428         WSH_DEBUG_SV.log(l_module_name,'Return Status after calling WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM', l_return_status);
3429       END IF;
3430 
3431       IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3432         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3433         FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3434 
3435         WSH_UTIL_CORE.add_message(l_return_status, l_module_name);
3436 
3437         l_num_error := l_num_error + 1 ;
3438         GOTO loop_end;
3439 
3440       ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3441         l_num_warn := l_num_warn + 1 ;
3442       END IF;
3443 
3444       --we are checking that otm_plan_name is NOT NULL meaning
3445       --OTM planned trip, and ship method code is being changed
3446       --during ship confirm flow, which is not allowed.
3447       --IF any ship method is NULL this will be skipped
3448       --the trip ship method l_otm_ship_method_code should not be
3449       --NULL for OTM trips.
3450       IF (l_otm_plan_name IS NOT NULL
3451           AND l_otm_ship_method_code <> p_ship_method ) THEN
3452 
3453         --
3454         --  Ship method on a delivery cannot be changed for an OTM trip
3455         --
3456         IF l_debug_on THEN
3457           WSH_DEBUG_SV.log(l_module_name,'ship method on trip', l_otm_ship_method_code);
3458           WSH_DEBUG_SV.log(l_module_name,'ship method passed in ship confirm', p_ship_method);
3459           WSH_DEBUG_SV.logmsg(l_module_name,'ship method not allowed to change for otm trip');
3460         END IF;
3461 
3462         FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_SHIP_CONFIRM_ERROR');
3463         FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', l_delivery_name);
3464 
3465         WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
3466         l_num_error := l_num_error + 1;
3467         GOTO loop_end;
3468       END IF;
3469     END IF;
3470     --END OTM R12
3471 
3472      -- 1. Fetch delivery info and lock it
3473 
3474      l_delivery_id     := p_del_rows(i) ;
3475 
3476      SELECT status_code ,
3477       initial_pickup_date ,
3478       ultimate_dropoff_date  ,
3479       organization_id ,
3480       ship_method_code ,
3481       initial_pickup_location_id,
3482       ultimate_dropoff_location_id ,
3483       gross_weight ,
3484       net_weight ,
3485       volume
3486      INTO   l_del_status_code,
3487       l_initial_pickup_date(i),
3488       l_ultimate_dropoff_date(i),
3489       l_organization_id ,
3490       l_ship_method_code ,
3491       l_ship_from_location,
3492       l_ship_to_location ,
3493       l_gross_weight ,
3494       l_net_weight ,
3495       l_volume
3496      FROM   wsh_new_deliveries
3497      WHERE  delivery_id = p_del_rows(i)
3498      AND    nvl(shipment_direction,'O') IN ('O','IO')    -- J-IB-NPARIKH
3499      FOR UPDATE NOWAIT;
3500 
3501      -- 2. Five checks performed here :
3502      --   a. If delivery is confirmed , skip it and go to next.
3503      IF (l_del_status_code = 'CO') THEN
3504        --  Although the name of this message looks like its an error , we are not
3505        -- really erroring out here.
3506        FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
3507        --
3508        -- Debug Statements
3509        --
3510        IF l_debug_on THEN
3511            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3512        END IF;
3513        --
3514        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3515              wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
3516        goto loop_end ;
3517      END IF;
3518 
3519      --b. If delivery is neither OPEN nor PACKED , then set WARNING and go to next one
3520 
3521      IF NOT (  (l_del_status_code IN  ('OP', 'PA', 'SA'))) THEN  -- sperera 940/945
3522        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_MULTI_ERROR');
3523        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3524        l_num_warn := l_num_warn + 1;
3525        wsh_util_core.add_message(x_return_status);
3526        goto loop_end ;
3527      END IF;
3528 
3529      -- c. If ship Method is null , freight_code is null
3530      --    If not null , then its should have a an associated freight code.
3531 
3532      IF l_ship_method_code IS NULL THEN
3533        l_freight_code:=null;
3534      ELSE
3535        OPEN get_freight(l_ship_method_code,l_organization_id );
3536        FETCH get_freight INTO l_freight_code;
3537 
3538        IF (get_freight%NOTFOUND) THEN
3539          CLOSE get_freight;
3540          fnd_message.set_name('WSH','WSH_INVALID_FREIGHT_CODE');
3541          --
3542          -- Debug Statements
3543          --
3544          IF l_debug_on THEN
3545              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3546          END IF;
3547          --
3548          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3549          FND_MESSAGE.SET_TOKEN('SHIP_METHOD',l_ship_method_code);
3550          FND_MESSAGE.SET_TOKEN('ORG_ID',l_organization_id);
3551          wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING);
3552          x_return_Status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
3553          l_num_warn := l_num_warn + 1 ;
3554              ELSE
3555          CLOSE get_freight;
3556        END IF;
3557      END IF;
3558 
3559      -- d. If Initial pickup date or ultimate dropoff date is null , then
3560      --    Set a warning , and default to sysdate .
3561 
3562      IF (l_initial_pickup_date(i) IS NULL)
3563              OR (l_ultimate_dropoff_date(i) IS NULL) THEN
3564 
3565        IF p_action_flag NOT IN ('C','O') THEN --{
3566           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DATES_NULL');
3567           --
3568           -- Debug Statements
3569           --
3570           IF l_debug_on THEN
3571               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3572           END IF;
3573           --
3574           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3575           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3576           wsh_util_core.add_message(x_return_status);
3577 
3578           l_num_warn := l_num_warn + 1;
3579        END IF; --}
3580 
3581        l_initial_pickup_date(i) :=  nvl(p_actual_dep_date, SYSDATE) ;
3582        l_ultimate_dropoff_date(i) :=  GREATEST(nvl(l_ultimate_dropoff_date(i),nvl(p_actual_dep_date,SYSDATE)), nvl(p_actual_dep_date,SYSDATE));
3583        -- Bug 3913206
3584        l_sc_pickup_date        := l_initial_pickup_date(i);
3585        l_sc_dropoff_date       := l_ultimate_dropoff_date(i);
3586      END IF;
3587 
3588      -- e. Validate Descriptive Flex-fields. If not valid , then warn and go to next one.
3589 
3590      --
3591      -- Debug Statements
3592      --
3593      IF l_debug_on THEN
3594          WSH_DEBUG_SV.log(l_module_name,'l_sc_pickup_date',l_sc_pickup_date);
3595          WSH_DEBUG_SV.log(l_module_name,'l_sc_dropoff_date',l_sc_dropoff_date);
3596          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FLEXFIELD_UTILS.VALIDATE_DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3597      END IF;
3598      --
3599      wsh_flexfield_utils.Validate_DFF
3600        (p_table_name => 'WSH_NEW_DELIVERIES',
3601         p_primary_id => p_del_rows(i),
3602         x_return_status => x_return_status);
3603 
3604        IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3605          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3606          --
3607          -- Debug Statements
3608          --
3609          IF l_debug_on THEN
3610              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3611          END IF;
3612          --
3613          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3614          wsh_util_core.add_message(x_return_status);
3615          if ( x_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR )  then
3616            l_num_error := l_num_error + 1 ;
3617            goto loop_end ;
3618          else
3619            l_num_warn := l_num_warn + 1 ;
3620          end if ;
3621        END IF;
3622 
3623      -- bug 4505105
3624      l_del_valid_flag := 'Y';
3625      validate_del_containers(p_del_rows(i),
3626                              'STD',
3627                              l_del_valid_flag,
3628                              x_return_status);
3629 
3630      IF l_debug_on THEN
3631        WSH_DEBUG_SV.log(l_module_name,'x_return_status after calling validate_del_containers', x_return_status);
3632      END IF;
3633 
3634      IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3635        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3636        --
3637        -- Debug Statements
3638        --
3639        IF l_debug_on THEN
3640            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3641        END IF;
3642        --
3643        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3644        wsh_util_core.add_message(x_return_status);
3645      END IF;
3646      --
3647      IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
3648        l_num_error := l_num_error + 1 ;
3649        goto loop_end ;
3650      END IF;
3651 
3652      IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3653        l_num_error := l_num_error + 1 ;
3654        goto loop_end ;
3655      ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3656        l_num_error := l_num_error + 1 ;
3657        goto loop_end ;
3658      ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3659        l_num_warn := l_num_warn + 1 ;
3660      END IF;
3661      -- bug 4505105
3662 
3663      --bug 1941793
3664      --
3665      -- Debug Statements
3666      --
3667      IF l_debug_on THEN
3668          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
3669      END IF;
3670      --
3671      if (wsh_util_validate.Check_Wms_Org(l_organization_id)='Y') then
3672 
3673 
3674               -- bug 2263249
3675               l_wms_enabled_flag := TRUE;
3676 
3677               l_wms_delivery_id(1):=p_del_rows(i);
3678 
3679        --
3680        -- Debug Statements
3681        --
3682        IF l_debug_on THEN
3683            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID',WSH_DEBUG_SV.C_PROC_LEVEL);
3684        END IF;
3685        --
3686        WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID(
3687             x_return_status  => l_return_status,
3688             x_msg_count   => l_msg_count,
3689             x_msg_data     => l_msg_data,
3690             p_commit     => 'F',
3691             p_init_msg_list  => 'F',
3692             p_api_version => 1.0, -- Bugfix 3561335
3693             p_delivery_ids   =>  l_wms_delivery_id);
3694        IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3695          FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
3696          FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID');
3697          FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
3698          x_return_status := l_return_status;
3699          wsh_util_core.add_message(x_return_status);
3700          IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
3701               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
3702            l_num_error := l_num_error + 1 ;
3703            goto confirm_error_no_msg;
3704          ELSE
3705             l_num_warn := l_num_warn + 1 ;
3706          END IF;
3707        END IF;
3708      end if;
3709      --
3710 
3711 	 -- Check for Exceptions against Delivery and Contents of Delivery
3712 	 IF l_debug_on THEN
3713         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
3714      END IF;
3715      l_exceptions_tab.delete;
3716      l_exp_logged      := FALSE;
3717      WSH_XC_UTIL.Check_Exceptions (
3718                                      p_api_version           => 1.0,
3719                                      x_return_status         => l_return_status,
3720                                      x_msg_count             => l_msg_count,
3721                                      x_msg_data              => l_msg_data,
3722                                      p_logging_entity_id     => p_del_rows(i) ,
3723                                      p_logging_entity_name   => 'DELIVERY',
3724                                      p_consider_content      => 'Y',
3725                                      x_exceptions_tab        => l_exceptions_tab
3726                                    );
3727 
3728      IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3729          x_return_status := l_return_status;
3730          wsh_util_core.add_message(x_return_status);
3731          IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
3732              l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
3733               l_num_error := l_num_error + 1 ;
3734               goto confirm_error_no_msg;
3735          ELSE
3736               l_num_warn := l_num_warn + 1 ;
3737          END IF;
3738      END IF;
3739 
3740      l_entity_name:=FND_MESSAGE.GET_STRING('WSH','WSH_DELIVERY');
3741      l_exc_beh_error:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_ERROR');
3742      l_exc_beh_warn:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_WARNING');
3743 
3744      FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
3745          IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
3746             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3747                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3748             ELSE
3749                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3750             END IF;
3751             FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3752             FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3753             FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_error);
3754             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3755             wsh_util_core.add_message(x_return_status);
3756             l_num_error := l_num_error + 1 ;
3757             goto confirm_error_no_msg;
3758          ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
3759             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3760                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3761                FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3762                FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3763                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3764                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3765                wsh_util_core.add_message(x_return_status);
3766                l_num_warn := l_num_warn + 1 ;
3767             ELSIF NOT (l_exp_logged) THEN
3768                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3769                FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3770                FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3771                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3772                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3773                l_exp_logged := TRUE;
3774                wsh_util_core.add_message(x_return_status);
3775                l_num_warn := l_num_warn + 1 ;
3776             END IF;
3777          END IF;
3778      END LOOP;
3779 
3780 
3781      -- 3. Fetch delivery lines for the delivery
3782 
3783      l_assigned_counter := 0 ;
3784      l_lines_in_delivery := 0;
3785 
3786      OPEN detail_info ( p_del_rows(i) );
3787      LOOP
3788 
3789       l_detail_num := l_detail_num + 1;
3790       /*Bug 2096052 for OKE */
3791       l_source_code := NULL;
3792       /*end of 2096052 */
3793 
3794       l_container_id := NULL ;
3795       l_delivery_detail_id := NULL ;
3796       l_released_status  := NULL ;
3797 
3798       l_inspection_flag  := NULL ;
3799       l_shipped_quantity  := NULL ;
3800       l_shipped_quantity2  := NULL ;
3801 
3802       l_cycle_quantity  := NULL ;
3803       l_cycle_quantity2  := NULL ;
3804       l_requested_quantity  := NULL ;
3805 
3806       l_requested_quantity2  := NULL ;
3807       l_dd_organization_id  := NULL ;
3808       l_inventory_item_id  := NULL ;
3809 
3810       l_picked_quantity  := NULL;
3811       l_picked_quantity2 := NULL;
3812 
3813       l_subinventory  := NULL ;
3814       l_locator_id   := NULL ;
3815 
3816       FETCH detail_info INTO l_container_id, l_delivery_detail_id, l_released_status ,
3817                  l_inspection_flag , l_shipped_quantity , l_shipped_quantity2 ,
3818                  l_cycle_quantity , l_cycle_quantity2 , l_requested_quantity ,
3819                  l_requested_quantity2 ,
3820                  l_picked_quantity, l_picked_quantity2,
3821                  l_dd_organization_id ,l_inventory_item_id ,
3822                  l_subinventory ,  l_locator_id, l_source_code, l_source_line_id;
3823       /*Bug 2096052 added l_source_code for OKE */
3824 					 -- Added l_source_line_id for the Consolidation of BO Delivery Details project
3825 
3826       IF detail_info%NOTFOUND AND l_lines_in_delivery = 0 THEN
3827          CLOSE detail_info;
3828          FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_DELIVERY');
3829          FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3830          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3831          wsh_util_core.add_message(x_return_status);
3832          goto confirm_error_no_msg;
3833       END IF;
3834 
3835       EXIT WHEN detail_info%NOTFOUND;
3836       l_lines_in_delivery := l_lines_in_delivery + 1;
3837 
3838       -- This is a workaround to lock each individual line
3839       -- as locking in SELECT FOR UPDATE will not work
3840       -- on labels 8.1.6.3 and above because of the above mentioned reason
3841       -- This might have a performance hit
3842 
3843      /* remove after UT since the Check_Exceptions will supersede this
3844 
3845      -- check if exception exists for the delivery detail
3846       --
3847       -- Debug Statements
3848       --
3849       IF l_debug_on THEN
3850           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.CHECK_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
3851       END IF;
3852       --
3853       WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3854             p_delivery_detail_id => l_delivery_detail_id,
3855             x_exception_exist => l_exception_exist,
3856             x_severity_present => l_severity_present,
3857             x_return_status => l_return_status);
3858 
3859       -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3860       -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3861       IF (l_exception_exist = 'Y') THEN
3862          --
3863          -- Debug Statements
3864          --
3865          IF l_debug_on THEN
3866              WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR DELIVERY DETAIL ' || L_DELIVERY_DETAIL_ID|| ' , DURING SHIP CONFIRM' );
3867          END IF;
3868          --
3869          FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3870          FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_delivery_detail_id));
3871          IF l_severity_present IN ('H','M') THEN
3872             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3873             wsh_util_core.add_message(x_return_status);
3874             goto confirm_error;
3875          ELSIF l_severity_present = 'L' THEN
3876             x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3877             wsh_util_core.add_message(x_return_status);
3878             l_num_warn := l_num_warn + 1 ;
3879          END IF;
3880       END IF;
3881 
3882       IF l_debug_on THEN
3883         WSH_DEBUG_SV.log(l_module_name,'l_delivery_detail_id'||l_delivery_detail_id);
3884       END IF;
3885 
3886       OPEN Get_Containers(l_delivery_detail_id);
3887       LOOP
3888         FETCH Get_Containers INTO l_container_id;
3889         EXIT WHEN Get_Containers%NOTFOUND;
3890         WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3891             p_delivery_detail_id => l_container_id,
3892             x_exception_exist => l_exception_exist,
3893             x_severity_present => l_severity_present,
3894             x_return_status => l_return_status);
3895 
3896         -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3897         -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3898         IF (l_exception_exist = 'Y') THEN
3899            --
3900            -- Debug Statements
3901            --
3902            IF l_debug_on THEN
3903                WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR CONTAINER ' || L_CONTAINER_ID|| ' , DURING SHIP CONFIRM' );
3904            END IF;
3905            --
3906            FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3907            FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_container_id));
3908            IF l_severity_present IN ('H','M') THEN
3909               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3910               wsh_util_core.add_message(x_return_status);
3911               CLOSE Get_Containers;
3912               CLOSE detail_info;
3913               goto confirm_error;
3914            ELSIF l_severity_present = 'L' THEN
3915               x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3916               wsh_util_core.add_message(x_return_status);
3917               l_num_warn := l_num_warn + 1 ;
3918            END IF;
3919         END IF;
3920 
3921       END LOOP;
3922       CLOSE Get_Containers;
3923 
3924       */
3925 
3926    -- Bug 3118519 : Validation for Additional Delivery Detail Information DFF.
3927       --
3928       -- Debug Statements
3929       --
3930       IF l_debug_on THEN
3931          WSH_DEBUG_SV.logmsg(l_module_name,'Calling WSH_FLEXFIELD_UTILS.VALIDATE_DFF to validate delivery details DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3932       END IF;
3933       --
3934       WSH_FLEXFIELD_UTILS.Validate_DFF(
3935                           p_table_name     =>  'WSH_DELIVERY_DETAILS',
3936                           p_primary_id     =>  l_delivery_detail_id,
3937                           x_return_status  =>  x_return_status);
3938 
3939  --
3940          IF l_debug_on THEN
3941 
3942             WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3943                                             || x_return_status);
3944          END IF;
3945       IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
3946          --
3947          -- Debug Statements
3948          --
3949          IF l_debug_on THEN
3950             WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF failed for delivery detail : '
3951                                             || l_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
3952             WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3953                                             || x_return_status);
3954          END IF;
3955          --
3956          l_num_error    := l_num_error + 1;
3957 -- HW OPMCONV. Removed checking for org type
3958 
3959          l_error_DFF:= TRUE;
3960          l_detail_count := l_detail_count + 1;
3961 
3962          IF ( l_detail_count = 1 ) THEN
3963             l_invalid_details := l_delivery_detail_id;
3964          ELSIF ( l_detail_count <= 5 ) THEN
3965             l_invalid_details := l_invalid_details || ', ' || l_delivery_detail_id;
3966          ELSIF ( l_more_flag ) THEN
3967             l_more_flag := FALSE;
3968             l_invalid_details := l_invalid_details || '..';
3969          END IF;
3970       END IF;
3971 
3972     -- IF Condition added for Bug 3118519
3973 
3974     -- HW OPMCONV. Removed forking the code
3975 
3976     /* H integration: 945 send document wrudge */
3977     IF (l_source_code = 'WSH') THEN
3978       l_wsh_lines_exist := l_wsh_lines_exist + 1;
3979     END IF;
3980 
3981 
3982     /*Bug 2096052 added for OKE */
3983     IF (l_source_code = 'OKE' AND
3984       (p_action_flag = 'B' OR
3985        p_action_flag = 'O' OR
3986        p_action_flag = 'L' OR
3987        p_action_flag = 'C' OR
3988        l_cycle_quantity > 0)
3989      ) THEN
3990         l_source_code_flag := 'Y';
3991         FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_SHIP_MODE');
3992         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3993         wsh_util_core.add_message(x_return_status);
3994         l_num_error := l_num_error + 1;
3995         CLOSE detail_info;
3996         goto confirm_error_no_msg;
3997 
3998     END IF;
3999     /*end of Bug 2096052 added for OKE */
4000 
4001       BEGIN
4002         SELECT delivery_detail_id  INTO   l_dummy_detail_id
4003         FROM   wsh_delivery_details
4004         WHERE  delivery_detail_id = l_delivery_detail_id
4005         FOR UPDATE NOWAIT;
4006 
4007         EXCEPTION
4008           WHEN record_locked THEN
4009             x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4010             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
4011             wsh_util_core.add_message(x_return_status);
4012             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4013             CLOSE detail_info;
4014             goto confirm_error;
4015           WHEN OTHERS THEN
4016             RAISE;
4017       END;
4018 
4019       IF (l_released_status NOT IN ('X', 'Y')) THEN
4020          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_UNRELEASED');
4021 -- Bug 2713285
4022 -- for cancelling or unassigning the lines from delivery thru Batch process
4023         IF l_batch_id IS NULL THEN
4024           x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4025           l_num_warn := l_num_warn + 1 ;
4026         ELSE
4027           x_return_status :=  WSH_UTIL_CORE.G_RET_STS_ERROR;
4028           l_num_error := l_num_error + 1 ;
4029         END IF;
4030 
4031         wsh_util_core.add_message(x_return_status);
4032         WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4033         --bug 2770400
4034         IF l_batch_id IS NOT NULL THEN
4035           -- in batch mode ,stop confirming the delivery
4036           wsh_util_core.add_message(x_return_status);
4037           CLOSE detail_info;
4038           goto confirm_error_no_msg;
4039         END IF;
4040 -- End of Bug 2713285
4041 
4042          /* H integration: 945 cancel staged/unreleased wrudge */
4043          IF l_source_code = 'WSH' THEN
4044           l_cancel_line_ids(l_cancel_line_ids.count + 1) := l_delivery_detail_id;
4045          ELSE
4046           l_unassign_dds(l_unassign_dds.count + 1) := l_delivery_detail_id;
4047 	  l_unassign_rel_status(l_unassign_rel_status.count + 1) := l_released_status;
4048 	  l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id;  -- Bug#3246327
4049          END IF;
4050       ELSE
4051          -- check for inspection_flag
4052 
4053          IF ( l_inspection_flag = 'R') then
4054             FND_MESSAGE.SET_NAME('WSH','WSH_INSPECTION');
4055             --
4056             -- Debug Statements
4057             --
4058             IF l_debug_on THEN
4059                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4060             END IF;
4061             --
4062             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
4063             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4064             wsh_util_core.add_message(x_return_status);
4065             l_num_warn := l_num_warn + 1;
4066 
4067             UPDATE WSH_DELIVERY_DETAILS
4068             SET INSPECTION_FLAG = 'I'
4069             WHERE DELIVERY_DETAIL_ID = l_dummy_detail_id ;
4070 
4071          END IF ;
4072 
4073          l_assigned_counter := l_assigned_counter + 1 ;
4074          l_assigned_line_ids ( l_assigned_counter ) := l_dummy_detail_id ;
4075          l_assigned_cont_ids ( l_assigned_counter ) := l_container_id ;
4076          l_assigned_req_qtys      ( l_assigned_counter ) := l_requested_quantity ;
4077          l_assigned_shp_qtys      ( l_assigned_counter ) := l_shipped_quantity   ;
4078          l_assigned_cc_qtys      ( l_assigned_counter ) := l_cycle_quantity ;
4079          l_assigned_shp_qtys2    ( l_assigned_counter ) := l_shipped_quantity2;
4080          l_assigned_cc_qtys2      ( l_assigned_counter ) := l_cycle_quantity2;
4081          l_assigned_req_qtys2    ( l_assigned_counter ) := l_requested_quantity2  ;
4082          l_assigned_pick_qtys    ( l_assigned_counter ) := l_picked_quantity;
4083          l_assigned_pick_qtys2    ( l_assigned_counter ) := l_picked_quantity2;
4084          l_assigned_overpick_qtys  ( l_assigned_counter ) := l_picked_quantity - l_requested_quantity ;
4085          l_assigned_overpick_qtys2  ( l_assigned_counter ) := l_picked_quantity2 - l_requested_quantity2 ;
4086          l_assigned_orgs   ( l_assigned_counter ) := l_dd_organization_id  ;
4087          l_assigned_items ( l_assigned_counter ) := l_inventory_item_id ;
4088          l_assigned_subs   ( l_assigned_counter ) := l_subinventory  ;
4089          l_assigned_locs   ( l_assigned_counter ) := l_locator_id ;
4090 	 -- Consolidation of BO Delivery Details project
4091   	 l_assigned_source_lines (l_assigned_counter) := l_source_line_id;
4092          /* H integration: 940/945 wrudge */
4093          l_assigned_source   ( l_assigned_counter ) := l_source_code;
4094 
4095       END IF ; -- If released_status not in ( 'X' , 'Y' )
4096 
4097      END LOOP ;-- for unassigning unreleased lines.
4098 
4099      close  detail_info  ;
4100 
4101      -- Added for Bug 3118519
4102      -- HW OPMCONV. Removed forking the code
4103 
4104      IF ( l_error_DFF) THEN
4105         --
4106         -- Debug Statements
4107         --
4108         IF l_debug_on THEN
4109            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF validation failed for delivery detail(s)',WSH_DEBUG_SV.C_PROC_LEVEL);
4110         END IF;
4111         --
4112         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4113         l_token := FND_MESSAGE.Get_String('WSH', 'WSH_DETAIL_DFF_TITLE');
4114 
4115         FND_MESSAGE.Set_Name('WSH', 'WSH_DFF_DETAIL_EMPTY');
4116         FND_MESSAGE.Set_Token('DFF_TITLE', l_token);
4117         FND_MESSAGE.Set_Token('DETAIL_IDS', l_invalid_details);
4118         WSH_UTIL_CORE.Add_Message(x_return_status);
4119 
4120         IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
4121            l_num_warn := l_num_warn;
4122         END IF;
4123 
4124         goto loop_end;
4125 
4126   END IF;
4127 
4128      -- 4. p_action_flag = O : If CYCLE COUNT all then cycle count all the reservations,
4129      -- backorder, clear inv controls and tracking number etc,
4130      -- unassign from delivery and close delivery, return
4131 
4132      IF (p_action_flag = 'O') THEN
4133 
4134                -- bug 2263249
4135                IF (l_wms_enabled_flag) THEN
4136                  --
4137                  -- Debug Statements
4138                  --
4139                  IF l_debug_on THEN
4140                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4141                  END IF;
4142                  --
4143                  WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4144                    (p_delivery_id   => p_del_rows(i),
4145                     x_return_status => l_return_status,
4146                     x_msg_count     => l_msg_count,
4147                     x_msg_data      => l_msg_data
4148                                                                  );
4149                  IF (l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4150                    FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4151                    FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4152                    FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4153                    x_return_status := l_return_status;
4154                    wsh_util_core.add_message(x_return_status);
4155                    IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4156                        l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4157                    THEN
4158 
4159                      l_num_error := l_num_error + 1 ;
4160                    ELSE
4161                      l_num_warn := l_num_warn + 1 ;
4162                    END IF;
4163                  END IF;
4164                END IF;
4165                 -- end bug 2263249
4166 
4167         --
4168         -- Debug Statements
4169         --
4170         IF l_debug_on THEN
4171             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4172         END IF;
4173         --
4174 
4175 
4176 
4177         wsh_ship_confirm_actions2.backorder(
4178           p_detail_ids   => l_assigned_line_ids  ,
4179       	  p_line_ids	 => l_assigned_source_lines,	-- Consolidation of BO Delivery Details project
4180           p_bo_qtys => l_assigned_req_qtys ,   -- pass total requested_quantity for BO
4181           p_req_qtys     => l_assigned_req_qtys ,
4182           p_bo_qtys2     => l_assigned_req_qtys2 ,
4183           p_overpick_qtys  => l_assigned_overpick_qtys ,
4184           p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4185           p_bo_mode    => 'CYCLE_COUNT' ,
4186           x_out_rows     => l_out_cc_rows ,
4187 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4188           x_return_status  => l_return_status);
4189 
4190         IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )
4191                     THEN
4192           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4193               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4194           THEN
4195                         l_num_error := l_num_error + 1 ;
4196                         goto confirm_error_no_msg;
4197           ELSE
4198             l_num_warn := l_num_warn + 1 ;
4199           END IF ;
4200         END IF ;
4201        -- 2131459 - remove goto update_delivery_status code
4202        l_unassign_all_flag_tab(i) := TRUE;
4203 
4204        -- 5. p_action_flag = C : If BACKORDER ALL then remove all reservations, clear inv controls and
4205        -- tracking number etc, unassign from delivery and close delivery, return
4206 
4207      ELSIF  ( p_action_flag = 'C' )  THEN
4208 
4209                -- bug 2263249
4210                IF (l_wms_enabled_flag) THEN
4211                    --
4212                    -- Debug Statements
4213                    --
4214                    IF l_debug_on THEN
4215                        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4216                    END IF;
4217                    --
4218                    WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4219                      (p_delivery_id   => p_del_rows(i),
4220                       x_return_status => l_return_status,
4221                       x_msg_count     => l_msg_count,
4222                       x_msg_data      => l_msg_data
4223                                                                  );
4224                    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4225                      FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4226                      FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4227                      FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4228                      x_return_status := l_return_status;
4229                      wsh_util_core.add_message(x_return_status);
4230                      IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4231                         l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4232                        l_num_error := l_num_error + 1 ;
4233                      ELSE
4234                        l_num_warn := l_num_warn + 1 ;
4235                      END IF;
4236                    END IF;
4237                  END IF;
4238                 -- end bug 2263249
4239 
4240         --
4241         -- Debug Statements
4242         --
4243         IF l_debug_on THEN
4244             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4245         END IF;
4246         --
4247 
4248         wsh_ship_confirm_actions2.backorder(
4249             p_detail_ids    => l_assigned_line_ids  ,
4250        	    p_line_ids	    => l_assigned_source_lines,	  -- Consolidation of BO Delivery Details project
4251             p_bo_qtys    => l_assigned_req_qtys ,   -- pass total requested_quantity for BO
4252             p_req_qtys    => l_assigned_req_qtys ,
4253             p_bo_qtys2    => l_assigned_req_qtys2 ,
4254             p_overpick_qtys   => l_assigned_overpick_qtys ,
4255             p_overpick_qtys2  => l_assigned_overpick_qtys2 ,
4256             p_bo_mode    => 'UNRESERVE' ,
4257             x_out_rows    => l_out_bo_rows ,
4258 	    x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4259             x_return_status   => l_return_status);
4260 
4261         IF (l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4262           IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4263               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4264                       THEN
4265             l_num_error := l_num_error + 1 ;
4266             goto confirm_error_no_msg;
4267           ELSE
4268             l_num_warn := l_num_warn + 1 ;
4269           END IF ;
4270         END IF ;
4271          --  2131459 - remove goto update_delivery_status code
4272         l_unassign_all_flag_tab(i) := TRUE;
4273 
4274      ELSE FOR j IN 1..l_assigned_line_ids.count LOOP
4275 
4276         -- 6a. p_action_flag = S : SHIP UNSPECIFIED QUANTITIES
4277         IF (p_action_flag = 'S') THEN
4278 
4279           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ),  l_assigned_pick_qtys( j ));
4280           l_shipped_quantity2 := nvl(l_assigned_shp_qtys2 ( j ), l_assigned_pick_qtys2( j ));
4281           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ) , 0);
4282           l_cycle_quantity2   := l_assigned_cc_qtys2( j ) ;
4283           l_bo_mode := 'UNRESERVE';
4284 
4285         -- 6b. p_action_flag = B : BACKORDER  UNSPECIFIED QUANTITIES
4286 
4287         ELSIF (p_action_flag = 'B') THEN
4288 
4289           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ) , 0);
4290           /* OPM BUG 2408223 - pupakare */
4291           l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4292           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ),  l_assigned_req_qtys ( j ) - l_shipped_quantity);
4293 -- HW OPMCONV - Added Qty2
4294           l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4295           /* End Bug 2408223 */
4296           l_bo_mode      := 'UNRESERVE' ;
4297 
4298         -- 6c. p_action_flag = L : CYCLE_COUNT  UNSPECIFIED QUANTITIES
4299 
4300         ELSIF (p_action_flag = 'L') THEN
4301 
4302           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ) , 0);
4303           /* OPM BUG 2408223 - pupakare */
4304           l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4305           l_cycle_quantity    := nvl(l_assigned_cc_qtys( j ) ,  l_assigned_req_qtys( j )  - l_shipped_quantity);
4306 -- HW OPMCONV - Added nvl to shipped_qty2
4307           l_cycle_quantity2   := nvl(l_assigned_cc_qtys2( j ),  l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4308           /* End Bug 2408223 */
4309                            IF l_debug_on THEN
4310             WSH_DEBUG_SV.push(l_module_name);
4311             --
4312             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4313             WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity2',l_shipped_quantity2);
4314             WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys2( j ',l_assigned_req_qtys2( j ));
4315             WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys2( j ));
4316 
4317             WSH_DEBUG_SV.push(l_module_name);
4318             --
4319             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4320             WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity',l_shipped_quantity2);
4321             WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys( j ',l_assigned_req_qtys( j ));
4322             WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys( j ));
4323 
4324 end if;
4325           if ( l_assigned_shp_qtys ( j ) is null  ) then
4326               l_bo_mode      := 'CYCLE_COUNT' ;
4327           else
4328               l_bo_mode      := 'UNRESERVE' ;
4329           end if ;
4330 
4331         -- 6d. p_action_flag = T : STAGE  UNSPECIFIED QUANTITIES
4332 
4333         ELSIF (p_action_flag = 'T') THEN
4334 
4335           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ), 0);
4336           l_shipped_quantity2 := l_assigned_shp_qtys2 ( j );
4337           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ), 0);
4338           l_cycle_quantity2   := l_assigned_cc_qtys2( j ) ;
4339           l_bo_mode      := 'UNRESERVE' ;
4340 
4341         -- 6e. p_action_flag = A : SHIP ALL
4342 
4343         ELSIF (p_action_flag = 'A') THEN
4344           -- Bug 2112196 : If ship All , then don't update shipped_quantity if its being overshiped.
4345           l_shipped_quantity  :=  greatest ( nvl(l_assigned_shp_qtys ( j ), 0),
4346                      l_assigned_pick_qtys( j ));
4347           l_shipped_quantity2 :=  greatest ( nvl(l_assigned_shp_qtys2 ( j ), 0),
4348                      l_assigned_pick_qtys2( j ));
4349 
4350           l_cycle_quantity  := 0;
4351           -- HW BUG#:2005977 added cycle quantity2
4352           l_cycle_quantity2 := NULL;
4353 
4354         END IF;
4355 
4356         -- If line is overpicked, we need to backorder/cycle-count the unshipped picked quantity in
4357         -- excess of the requested quantity.
4358         -- Important: original value of req_qtys must be used before unassigning staged quantities.
4359         l_unshipped_pick_quantity  := l_assigned_pick_qtys( j )
4360                          - GREATEST(l_assigned_req_qtys( j ), l_shipped_quantity);
4361         l_unshipped_pick_quantity2 := l_assigned_pick_qtys2( j )
4362                          - GREATEST(l_assigned_req_qtys2( j ), l_shipped_quantity2);
4363 
4364 
4365         -- 7. Unassign staged lines (split if necessary, store delivery detail ids)
4366 
4367         -- because of overpicking/overshipping, both quantities should be at minimum 0.
4368         --   quantity (picked-requested) cannot be staged.
4369         l_stage_quantity  := GREATEST(l_assigned_req_qtys( j )  - l_shipped_quantity-l_cycle_quantity, 0);
4370         l_stage_quantity2 := GREATEST(l_assigned_req_qtys2( j ) - l_shipped_quantity2-l_cycle_quantity2, 0);
4371 
4372 -- HW Bug 3694454 For OPM if l_stage_quantity < .00001 due to small decimal mismatch in
4373 -- Requested Quantity and picked quantity then make both quantities zero.
4374 -- HW OPMCONV - Removed Branching
4375            IF (l_stage_quantity < .00001) THEN
4376               l_stage_quantity  := 0;
4377               l_stage_quantity2 := 0;
4378            END IF;
4379 
4380 -- End Bug 3694454
4381 
4382 
4383         IF (l_stage_quantity > 0) THEN
4384          IF (l_stage_quantity =  l_assigned_req_qtys( j ) ) THEN
4385             l_staged_dd_id := l_assigned_line_ids( j );
4386          ELSE
4387               l_assigned_req_qtys( j ) := l_assigned_req_qtys( j ) - l_stage_quantity ;
4388               l_assigned_pick_qtys( j ):= l_assigned_pick_qtys( j ) - l_stage_quantity ;
4389               -- HW BUG#:2005977 added qty2 for OPM
4390               l_assigned_req_qtys2( j ) := l_assigned_req_qtys2( j ) - l_stage_quantity2 ;
4391               l_assigned_pick_qtys2( j ):= l_assigned_pick_qtys2( j ) - l_stage_quantity2 ;
4392 
4393           /* bug fix 1983460
4394           Now we pass a value 'Y' to the parameter 'p_manual_split' in the call
4395           to split_delivery_details. 'Y' is used only as a indicator to tell the
4396           split_delivery_details that the split call is for splitting the STAGED     quantity
4397           */
4398 
4399           --
4400           -- Debug Statements
4401           --
4402           IF l_debug_on THEN
4403               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
4404           END IF;
4405           --
4406           wsh_delivery_details_actions.split_delivery_details(
4407               p_from_detail_id => l_assigned_line_ids( j ),
4408               p_req_quantity   => l_stage_quantity,
4409               x_new_detail_id  => l_new_detail_id,
4410               x_return_status  => x_return_status,
4411               p_unassign_flag  => 'N',
4412               p_req_quantity2  => l_stage_quantity2,
4413               p_manual_split   => 'Y');
4414 
4415           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4416                 l_num_error := l_num_error + 1 ;
4417                 goto confirm_error;
4418           ELSE
4419             l_staged_dd_id := l_new_detail_id;
4420           END IF;
4421         END IF; -- if stage quantity = requested quantity
4422 
4423            /* H integration: 945 cancel staged wrudge */
4424            IF l_assigned_source( j ) = 'WSH' THEN
4425 
4426 -- Bug 2713285
4427 -- for cancelling any line in delivery thru Batch process
4428              IF l_batch_id IS NOT NULL THEN
4429                FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
4430                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4431                wsh_util_core.add_message(x_return_status);
4432                l_num_error := l_num_error + 1;
4433                goto confirm_error_no_msg;
4434              END IF;
4435 -- Bug 2713285
4436              l_cancel_line_ids ( l_cancel_line_ids.count+1) := l_staged_dd_id;
4437            ELSE
4438              l_stage_rows(l_stage_rows.count + 1) := l_staged_dd_id;
4439            END IF;
4440 
4441       END IF; -- (l_stage_quantity > 0)
4442 
4443 
4444         -- Populate the tables to be passed as parameters for Backorder API.
4445 
4446         IF ( ( l_cycle_quantity > 0 )  OR  ( l_unshipped_pick_quantity > 0 ) )THEN
4447           if ( l_bo_mode = 'UNRESERVE') then
4448                  l_bo_rows ( l_bo_rows.count + 1  )   :=  l_assigned_line_ids ( j ) ;
4449 		 -- Consolidation of BO Delivery Details project
4450 		 l_bo_source_lines(l_bo_source_lines.count +1) := l_assigned_source_lines(j);
4451                  l_bo_qtys ( l_bo_qtys.count + 1  )   :=  l_cycle_quantity;
4452                  l_bo_req_qtys ( l_bo_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4453                  l_bo_overpick_qtys ( l_bo_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity;
4454                  l_bo_qtys2( l_bo_qtys2.count + 1  )   := l_cycle_quantity2 ;
4455                  l_bo_overpick_qtys2 ( l_bo_overpick_qtys2.count + 1 ):= l_unshipped_pick_quantity2;
4456           else
4457                  l_cc_rows ( l_cc_rows.count + 1  )   :=  l_assigned_line_ids ( j ) ;
4458 		 -- Consolidation of BO Delivery Details project
4459 		 l_cc_source_lines(l_cc_source_lines.count +1) := l_assigned_source_lines(j);
4460                  l_cc_qtys ( l_cc_qtys.count + 1  )   :=  l_cycle_quantity ;
4461           IF l_debug_on THEN
4462             WSH_DEBUG_SV.push(l_module_name);
4463             --
4464             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4465           END IF;
4466 
4467                  l_cc_req_qtys ( l_cc_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4468                  l_cc_overpick_qtys ( l_cc_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity ;
4469 
4470                  l_cc_qtys2( l_cc_qtys2.count + 1  )   := l_cycle_quantity2 ;
4471                  IF l_debug_on THEN
4472             WSH_DEBUG_SV.push(l_module_name);
4473             --
4474             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4475           END IF;
4476                  l_cc_overpick_qtys2( l_cc_overpick_qtys2.count + 1  )   := l_unshipped_pick_quantity2 ;
4477           end if ;
4478         END IF  ;
4479 
4480         IF (l_cycle_quantity <> l_assigned_req_qtys( j )) THEN
4481             l_backorder_all_flag := FALSE;
4482         END IF;
4483 
4484         IF ( l_shipped_quantity > 0 ) THEN
4485            l_shp_dd_ids( l_shp_dd_ids.count + 1 )     := l_assigned_line_ids( j );
4486            l_shp_dd_orgs( l_shp_dd_orgs.count + 1 )     := l_assigned_orgs( j );
4487            l_shp_dd_items( l_shp_dd_items.count + 1 )   := l_assigned_items( j );
4488            l_shp_dd_subs( l_shp_dd_subs.count + 1 )     := l_assigned_subs( j );
4489            l_shp_dd_locs( l_shp_dd_locs.count + 1 )     := l_assigned_locs( j );
4490            l_shp_dd_cont_ids ( l_shp_dd_cont_ids.count + 1 ) := l_assigned_cont_ids ( j );
4491            l_shp_dd_shipped_qtys ( l_shp_dd_shipped_qtys.count + 1 ) := l_shipped_quantity ;
4492            l_shp_dd_shipped_qtys2 ( l_shp_dd_shipped_qtys2.count + 1 ) := l_shipped_quantity2 ;
4493            l_shp_dd_cc_qtys ( l_shp_dd_cc_qtys.count + 1 ) := l_cycle_quantity ;
4494            l_shp_dd_cc_qtys2 ( l_shp_dd_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4495            l_shp_dd_req_qtys  ( l_shp_dd_req_qtys .count + 1 ) :=  l_assigned_req_qtys( j );
4496            /* H integration: 945 check detail  wrudge */
4497            l_shp_dd_source( l_shp_dd_source.count + 1)     := l_assigned_source( j );
4498         END IF ;
4499 
4500         /* LG new OPM -- OM changes*/
4501 
4502 -- HW OPMCONV. Removed forking the code
4503 
4504       END LOOP ; -- For all delivery details still assigned
4505 
4506      END IF ;  -- If P_action_flag
4507 
4508      -- 8. Update quantities based on p_action_flag for null values (shipped and cycle count)
4509 
4510      FORALL tmp_counter IN 1..l_shp_dd_ids.count
4511        UPDATE wsh_delivery_Details
4512        SET shipped_quantity  = l_shp_dd_shipped_qtys(tmp_counter),
4513            shipped_quantity2  = l_shp_dd_shipped_qtys2(tmp_counter),
4514            cycle_count_quantity = l_shp_dd_cc_qtys(tmp_counter),
4515            cycle_count_quantity2 = l_shp_dd_cc_qtys2(tmp_counter)
4516        WHERE  delivery_detail_id = l_shp_dd_ids(tmp_counter);
4517 
4518      IF (p_action_flag = 'A') THEN --bugfix 4070732
4519      --{
4520          -- J: W/V Changes
4521          -- Recalculate the W/V as the quantities would have changed
4522          FOR tmp_counter IN 1..l_shp_dd_ids.count LOOP
4523            IF l_debug_on THEN
4524              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
4525            END IF;
4526 
4527            WSH_WV_UTILS.Detail_Weight_Volume(
4528              p_delivery_detail_id => l_shp_dd_ids(tmp_counter),
4529              p_update_flag        => 'Y',
4530              p_post_process_flag  => 'Y',
4531              p_calc_wv_if_frozen  => 'N',
4532              x_net_weight         => l_net_weight,
4533              x_volume             => l_volume,
4534              x_return_status      => l_return_status);
4535 
4536            IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
4537              x_return_status := l_return_status;
4538              IF l_debug_on THEN
4539                WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
4540                WSH_DEBUG_SV.pop(l_module_name);
4541              END IF;
4542              return;
4543            END IF;
4544          END LOOP;
4545 
4546      --}
4547      END IF;
4548 
4549      -- HW Added fix from bug 2024384 to NULL SHIPPED_QUANTITY(S) and
4550      -- CYCLE_COUNT_QUANTITY(S)
4551 
4552      -- csun, Bug 2823512, if the transaction_temp_id is not NULL
4553      -- set the shipped_quantity to be requested_quantity
4554 
4555      FORALL tmp_counter IN 1..l_stage_rows.count
4556        UPDATE WSH_DELIVERY_DETAILS
4557        SET  -- TRACKING_NUMBER = NULL, Bug# 3632485
4558             SHIPPED_QUANTITY = DECODE (SERIAL_NUMBER, NULL,
4559                                        DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY),
4560                                        PICKED_QUANTITY),
4561             SHIPPED_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4562                                        DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY2),
4563                                        PICKED_QUANTITY2),
4564             CYCLE_COUNT_QUANTITY = DECODE (SERIAL_NUMBER, NULL ,
4565                                            DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0) , 0),
4566             CYCLE_COUNT_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4567                                            DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0), 0)
4568        WHERE  DELIVERY_DETAIL_ID = l_stage_rows(tmp_counter);
4569 
4570      -- J: W/V Changes
4571      -- Recalculate the W/V as the quantities would have changed with the above update
4572 
4573 
4574      -- 10. Backorder quantities and unassign(split if necessary)
4575 
4576      IF (l_cc_rows.count > 0 ) THEN
4577 
4578          --
4579          -- Debug Statements
4580          --
4581          IF l_debug_on THEN
4582              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4583          END IF;
4584          --
4585 
4586          wsh_ship_confirm_actions2.backorder(
4587           p_detail_ids => l_cc_rows ,
4588       	  p_line_ids   => l_cc_source_lines,  -- Consolidation of BO Delivery Details project
4589           p_bo_qtys => l_cc_qtys ,
4590           p_req_qtys   => l_cc_req_qtys ,
4591           p_bo_qtys2   => l_cc_qtys2 ,
4592           p_overpick_qtys   => l_cc_overpick_qtys ,
4593           p_overpick_qtys2  => l_cc_overpick_qtys2 ,
4594           p_bo_mode => 'CYCLE_COUNT' ,
4595           x_out_rows  => l_out_bo_rows ,
4596 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4597           x_return_status  => l_return_status);
4598 
4599           IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4600              IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4601             l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4602               l_num_error := l_num_error + 1 ;
4603               goto confirm_error_no_msg;
4604              ELSE
4605                l_num_warn := l_num_warn + 1 ;
4606              END IF ;
4607           END IF ;
4608 
4609     END IF;
4610 
4611      IF (l_bo_rows.count > 0 ) THEN
4612 
4613          --
4614          -- Debug Statements
4615          --
4616          IF l_debug_on THEN
4617              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4618          END IF;
4619          --
4620 
4621          wsh_ship_confirm_actions2.backorder(
4622           p_detail_ids => l_bo_rows ,
4623        	  p_line_ids   => l_bo_source_lines,  -- Consolidation of BO Delivery Details project
4624           p_bo_qtys => l_bo_qtys ,
4625           p_req_qtys   => l_bo_req_qtys ,
4626           p_bo_qtys2   => l_bo_qtys2 ,
4627           p_overpick_qtys  => l_bo_overpick_qtys ,
4628           p_overpick_qtys2 => l_bo_overpick_qtys2 ,
4629           p_bo_mode => 'UNRESERVE' ,
4630           x_out_rows  => l_out_cc_rows ,
4631 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4632           x_return_status  => l_return_status);
4633 
4634           IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4635              IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4636               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4637               l_num_error := l_num_error + 1 ;
4638               goto confirm_error_no_msg;
4639              ELSE
4640                l_num_warn := l_num_warn + 1 ;
4641              END IF ;
4642           END IF ;
4643 
4644     END IF;
4645 
4646 
4647 
4648     -- 11  Check for holds and inventory controls of details to be shipped
4649 
4650     FOR dd_count IN 1..l_shp_dd_ids.count LOOP
4651 
4652       dft_subinv := NULL;
4653       dft_loc_id := NULL;
4654 
4655       --
4656       -- Debug Statements
4657       --
4658       IF l_debug_on THEN
4659           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DETAIL_FOR_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
4660       END IF;
4661       --
4662       WSH_DELIVERY_VALIDATIONS.check_detail_for_confirm
4663           ( p_detail_id   => l_shp_dd_ids(dd_count),
4664             p_check_credit_init_flag => l_check_credit_init_flag, -- bug 2343058
4665             x_line_inv_flag_rec => l_inv_controls_rec,
4666             x_return_status => l_return_status);
4667 
4668       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4669         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4670            l_num_error := l_num_error + 1;
4671            raise ship_confirm_error;
4672         /* H integration: 945 check detail wrudge */
4673         ELSIF l_shp_dd_source(dd_count) = 'WSH' THEN
4674         /* new message: WSH_DEL_WSH_LINE_ERROR, token DEL_NAME  */
4675           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_WSH_LINE_ERROR');
4676           --
4677           -- Debug Statements
4678           --
4679           IF l_debug_on THEN
4680               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4681           END IF;
4682           --
4683           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
4684           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
4685           l_num_error := l_num_error + 1;
4686           goto confirm_error_no_msg;
4687         ELSE
4688 -- Bug 2713285
4689 -- for inventory control items, lines are unassigned from Delivery
4690 -- thru batch process
4691           IF l_batch_id IS NOT NULL THEN
4692 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4693 	    IF l_inv_controls_rec.details_required_flag='Y' THEN --Bug 3773225
4694                FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_REQUIRED');
4695                wsh_util_core.add_message(x_return_status);
4696 	    ELSIF l_inv_controls_rec.invalid_material_status_flag='Y' THEN --Material Status Impact
4697                FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_MATERIAL_STATUS');
4698                wsh_util_core.add_message(x_return_status);
4699             END IF;
4700 	    l_num_error := l_num_error + 1;
4701             goto confirm_error_no_msg;
4702           END IF;
4703 -- Bug 2713285
4704 
4705           l_unassign_dds(l_unassign_dds.count + 1) := l_shp_dd_ids(dd_count);
4706   	  l_unassign_rel_status(l_unassign_rel_status.count + 1) := 'Y';
4707  	  l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id;  -- Bug#3246327
4708           l_num_warn := l_num_warn + 1;
4709 
4710           /* Bug fix 2850555
4711           Need to set l_inv_cntrl_flag to FALSE ONLY when details_required_flag
4712           is set to Y by 'check_detail_for_confirm' procedure.
4713           Reason: For cases where inv controls are not really required, like
4714           the bug case where only HOLDS are a problem, l_inv_cntrl_flag
4715           should NOT be set to FALSE
4716           */
4717 
4718           if l_debug_on then
4719              wsh_debug_sv.log(l_module_name, 'l_inv_controls_rec.details_required_flag', l_inv_controls_rec.details_required_flag);
4720           end if;
4721 
4722           if nvl(l_inv_controls_rec.details_required_flag, 'N') = 'Y' then
4723              l_inv_cntrl_flag := FALSE;
4724              -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4725              -- l_unassign_dds can be used all because it could contain unreleased lines.
4726              l_inv_ctrl_dd_count := l_inv_ctrl_dd_count + 1;
4727              IF ( l_inv_ctrl_dd_count = 1 ) THEN
4728                 l_inv_ctrl_dd_ids := l_unassign_dds(l_unassign_dds.count);
4729              ELSIF ( l_inv_ctrl_dd_count <= 5 ) THEN
4730                 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4731              ELSIF ( l_more_dd_flag ) THEN
4732                 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ',..';
4733                 l_more_dd_flag := FALSE;
4734              END IF;
4735              -- end bug 2283621
4736           /***************************Material Status Project***************************************/
4737           ELSIF nvl(l_inv_controls_rec.invalid_material_status_flag, 'N') = 'Y' then
4738              l_inv_material_flag := FALSE;
4739              -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4740              -- l_unassign_dds can be used all because it could contain unreleased lines.
4741              l_inv_material_dd_count := l_inv_material_dd_count + 1;
4742              IF ( l_inv_material_dd_count = 1 ) THEN
4743                 l_inv_material_dd_ids := l_unassign_dds(l_unassign_dds.count);
4744              ELSIF ( l_inv_material_dd_count <= 5 ) THEN
4745                 l_inv_material_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4746              ELSIF ( l_more_material_dd_flag ) THEN
4747                 l_inv_material_dd_ids := l_inv_material_dd_ids || ',..';
4748                 l_more_material_dd_flag := FALSE;
4749              END IF;
4750           /***************************Material Status Project***************************************/
4751           end if;
4752 
4753           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
4754         END IF;
4755       ELSE
4756         l_unassign_all_flag_tab(i) := FALSE ;
4757 
4758         IF (l_shp_dd_cont_ids(dd_count) IS NULL) THEN
4759           l_unpacked_flag := TRUE;
4760         ELSE
4761 -- Bug 2878538
4762 -- Cont exists flag should be set even if there is 1 container
4763 -- else it will be FALSE by default
4764           l_cont_exists_flag := TRUE;
4765         END IF; -- (if container_id IS NULL)
4766 
4767        END IF; -- (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
4768 
4769        -- bug 2320388
4770        l_check_credit_init_flag := FALSE;
4771 
4772        -- Need to do this for non-transactable items to get default sub and loc
4773 
4774        IF (l_shp_dd_subs ( dd_count ) IS NULL) THEN
4775          --
4776          -- Debug Statements
4777          --
4778          IF l_debug_on THEN
4779              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_SUBINVENTORY',WSH_DEBUG_SV.C_PROC_LEVEL);
4780          END IF;
4781          --
4782          WSH_DELIVERY_DETAILS_INV.Default_Subinventory ( l_shp_dd_orgs ( dd_count ),
4783                                  l_shp_dd_items( dd_count ),
4784                                  dft_subinv,
4785                                  x_return_status);
4786          IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
4787           raise ship_confirm_error;
4788          END IF;
4789 
4790        END IF;
4791 
4792        -- Removed Details_required from here , because it was already called in
4793        -- check_detail_for_confirm.
4794 
4795        IF ((NVL(l_shp_dd_subs ( dd_count ),dft_subinv) IS NOT NULL) AND (l_shp_dd_locs ( dd_count ) IS NULL)) THEN
4796            --
4797            -- Debug Statements
4798            --
4799            IF l_debug_on THEN
4800                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_ORG_LOC',WSH_DEBUG_SV.C_PROC_LEVEL);
4801            END IF;
4802            --
4803            org_loc_ctl := WSH_DELIVERY_DETAILS_INV.Get_Org_Loc (l_shp_dd_orgs ( dd_count ));
4804 
4805            --
4806            -- Debug Statements
4807            --
4808            IF l_debug_on THEN
4809                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.SUB_LOC_CTL',WSH_DEBUG_SV.C_PROC_LEVEL);
4810            END IF;
4811            --
4812            sub_loc_ctl := WSH_DELIVERY_DETAILS_INV.Sub_Loc_Ctl (
4813                       nvl(l_shp_dd_subs ( dd_count ),dft_subinv),
4814                       l_shp_dd_orgs ( dd_count ));
4815 
4816            item_loc_ctl := l_inv_controls_rec.location_control_code;
4817            --
4818            -- Debug Statements
4819            --
4820            IF l_debug_on THEN
4821                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.LOCATOR_CTL_CODE',WSH_DEBUG_SV.C_PROC_LEVEL);
4822            END IF;
4823            --
4824            loc_ctl_code := WSH_DELIVERY_DETAILS_INV.Locator_Ctl_Code(
4825                              l_shp_dd_orgs ( dd_count ),
4826                              l_inv_controls_rec.restrict_loc,
4827                              org_loc_ctl,
4828                              sub_loc_ctl,
4829                              item_loc_ctl);
4830 
4831            IF ( loc_ctl_code <> 1 ) THEN
4832                IF ( l_inv_controls_rec.restrict_loc = 1) THEN
4833                  loc_restricted_flag := 'Y';
4834                ELSE
4835                  loc_restricted_flag := 'N';
4836                END IF;
4837 
4838                --
4839                -- Debug Statements
4840                --
4841                IF l_debug_on THEN
4842                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_LOCATOR',WSH_DEBUG_SV.C_PROC_LEVEL);
4843                END IF;
4844                --
4845                dft_loc_id := WSH_DELIVERY_DETAILS_INV.Default_Locator (
4846                                      l_shp_dd_orgs ( dd_count ),
4847                                      l_shp_dd_items ( dd_count ),
4848                                      NVL(l_shp_dd_subs ( dd_count ), dft_subinv),
4849                                      loc_restricted_flag);
4850            END IF;
4851 
4852            -- performance bug 5257207: SC-13, do this update only when needed.
4853            IF    (l_shp_dd_subs(dd_count) IS NULL AND dft_subinv IS NOT NULL)
4854               OR (dft_loc_id IS NOT NULL) THEN
4855              IF l_debug_on THEN
4856                 WSH_DEBUG_SV.logmsg(l_module_name, 'updating subinv/locator');
4857                 WSH_DEBUG_SV.log(l_module_name, 'dft_subinv', dft_subinv);
4858                 WSH_DEBUG_SV.log(l_module_name, 'dft_loc_id', dft_loc_id);
4859              END IF;
4860              update wsh_delivery_details set
4861                subinventory      = NVL(subinventory, dft_subinv),
4862                locator_id        = NVL(locator_id,   dft_loc_id)
4863              where delivery_detail_id = l_shp_dd_ids ( dd_count );
4864            END IF;
4865 
4866        END IF;
4867        -- End for non-transactable items
4868 
4869     END LOOP ;
4870 
4871     IF (NOT l_inv_cntrl_flag) THEN
4872         IF l_debug_on THEN
4873            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4874         End If;
4875         If g_missing_inv_severity is null then
4876            g_missing_inv_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
4877                                                                          ,wsh_new_delivery_actions.g_missing_inv_cntl_msg);
4878         End If;
4879 
4880         -- bug 2283621 - pass the l_inv_ctrl_dd_ids to the warning message
4881         IF l_debug_on THEN
4882            WSH_DEBUG_SV.log(l_module_name,'l_inv_ctrl_dd_ids - '|| l_inv_ctrl_dd_ids);
4883            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4884         END IF;
4885 
4886         If g_missing_inv_severity = 'E' then
4887             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4888             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4889             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4890             wsh_util_core.add_message(x_return_status);
4891             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4892             l_num_error := l_num_error + 1;
4893             goto confirm_error_no_msg;
4894         Else
4895             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4896             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4897             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4898             wsh_util_core.add_message(x_return_status);
4899             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4900         End If;
4901     END IF;
4902     /***************************Material Status Project***************************************/
4903     IF (NOT l_inv_material_flag) THEN
4904         IF l_debug_on THEN
4905            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4906         End If;
4907         If g_missing_inv_severity is null then
4908            g_missing_inv_severity := wsh_ru_actions.get_message_severity (
4909                                        wsh_new_delivery_actions.g_ship_confirm_act,
4910                                        wsh_new_delivery_actions.g_invalid_material_status_msg);
4911         End If;
4912 
4913         IF l_debug_on THEN
4914            WSH_DEBUG_SV.log(l_module_name,'l_inv_material_dd_ids - '|| l_inv_material_dd_ids);
4915            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4916         END IF;
4917 
4918         If g_missing_inv_severity = 'E' then
4919             FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
4920             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
4921             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4922             wsh_util_core.add_message(x_return_status);
4923             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4924             l_num_error := l_num_error + 1;
4925             goto confirm_error_no_msg;
4926         Else
4927             FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
4928             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
4929             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4930             wsh_util_core.add_message(x_return_status);
4931             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4932         End If;
4933     END IF;
4934     /***************************Material Status Project***************************************/
4935 
4936     --
4937     -- Debug Statements
4938     --
4939     IF l_debug_on THEN
4940         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_RELEASED_LINES',WSH_DEBUG_SV.C_PROC_LEVEL);
4941     END IF;
4942     --
4943     wsh_tpa_delivery_pkg.check_released_lines(
4944         p_del_rows(i), l_unassign_dds.count,
4945         l_detail_num-l_unassign_dds.count, l_return_status);
4946 
4947     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4948       IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4949         l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4950         l_num_error := l_num_error + 1 ;
4951       ELSE
4952         l_num_warn := l_num_warn + 1 ;
4953       END IF ;
4954       goto loop_end ;
4955     END IF ;
4956 
4957 
4958     -- Consolidation of BO Delivery Details project.
4959     -- At this point of time, some of the dd_ids in l_unassign_dds with released_status as 'B'
4960     -- might have been deleted by wsh_ship_confirm_actions2.backorder api.
4961     -- So checking whether dd_ids to be unassigned are already deleted.
4962     -- Do this only if there are lines to be unassigned AND there is atleast one delivery line BackOrdered.
4963     -- Begin
4964     IF (l_unassign_dds.COUNT > 0 AND (l_out_bo_rows.count > 0 OR l_out_cc_rows.count > 0)) THEN
4965     -- --{
4966 	--
4967 	-- Debug Statements
4968 	--
4969         -- Shifted code to obtain Global parameters outside the Deliveries loop ***
4970 
4971         IF l_debug_on THEN
4972              WSH_DEBUG_SV.logmsg(l_module_name,'Back Order Consolidation Flag is set as '||l_global_parameters.consolidate_bo_lines, WSH_DEBUG_SV.C_PROC_LEVEL);
4973         END IF;
4974 
4975         IF (l_global_parameters.consolidate_bo_lines = 'Y') THEN
4976 	-- --{
4977 	   -- l_out_bo_rows contains list of dd_ids that were Backordered
4978 	   -- l_out_cc_rows contains list of dd_ids that were Cycle Count
4979            IF (l_out_bo_rows.count > 0) THEN
4980 	      l_unassign_backordered_dds := l_out_bo_rows;
4981 	   ELSIF (l_out_cc_rows.count > 0) THEN
4982 	      l_unassign_backordered_dds := l_out_cc_rows;
4983 	   END IF;
4984 
4985 	   -- Bug#3246327
4986 	   --
4987 	   -- Store backordered order line ids in the pl/sql table l_bo_line_ids
4988 	   IF (l_bo_source_lines.count > 0) THEN
4989 		l_bo_line_ids := l_bo_source_lines; -- Assign the partial backordered soure lines to l_bo_line_ids
4990 	   ELSIF (l_cc_source_lines.count > 0 ) THEN -- Assign the partial cycle-count soure lines to l_bo_line_ids
4991 		l_bo_line_ids := l_cc_source_lines;
4992 	   ELSIF (l_assigned_source_lines.count > 0) THEN -- Assign the completely backordered or cycle-counted lines
4993                 l_bo_line_ids := l_assigned_source_lines;
4994  	   END IF;
4995 
4996 	   -- Bug#3317692
4997 	   -- Compare l_unassign_source_lines and l_bo_line_ids and
4998 	   -- delete the entry in l_unassign_source_lines if it is not there in l_bo_line_ids.
4999 	   -- These changes are done to restrict the filtering of l_unassign_dds only
5000 	   -- if the corresponding line is backordered.
5001 	   l_idx := l_unassign_source_lines.FIRST;
5002 	   WHILE l_idx IS NOT NULL LOOP
5003 	   -- --{
5004 	         l_flag := 'N';
5005 	         l_cmp_idx := l_bo_line_ids.FIRST;
5006 	         WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5007                    IF (l_unassign_source_lines(l_idx) = l_bo_line_ids(l_cmp_idx)) THEN
5008 	 	     l_flag := 'Y';
5009    	             EXIT;
5010 	           END IF;
5011 		   l_cmp_idx := l_bo_line_ids.NEXT(l_cmp_idx);
5012 	         END LOOP;  -- --}
5013 	         IF l_flag = 'N' THEN
5014   	           l_unassign_source_lines.DELETE(l_idx);
5015                  END IF;
5016 	      l_idx := l_unassign_source_lines.NEXT(l_idx);
5017 	   END LOOP;  -- --}
5018 	   --
5019 
5020 	   l_idx := l_unassign_dds.FIRST;
5021 	   WHILE l_idx IS NOT NULL LOOP
5022 	   -- --{
5023 	   -- Loop thru' l_unassign_dds and check whether delivery_detail_id exists
5024 	   -- in l_unassign_backordered_dds, if NOT then Delete that dd_id from l_unassign_dds because
5025 	   -- it must already be physically deleted by the backorder API.
5026    	   -- [ This check should happen for dd_ids in l_unassign_dds, ONLY if the released_status is 'B'
5027 	   -- and if the dd_id is under the backordered source line ]
5028 	   -- Filter l_unassign_dds only if the corresponding Order line is backordered. ie., l_unassign_source_lines.EXISTS
5029 	      IF (l_unassign_source_lines.EXISTS(l_idx) AND l_unassign_rel_status(l_idx) = 'B') THEN --{
5030     	         l_flag := 'N';
5031 	         l_cmp_idx := l_unassign_backordered_dds.FIRST;
5032 	         WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5033                    IF (l_unassign_dds(l_idx) = l_unassign_backordered_dds(l_cmp_idx)) THEN
5034 	 	     l_flag := 'Y';
5035    	             EXIT;
5036 	           END IF;
5037 		   l_cmp_idx := l_unassign_backordered_dds.NEXT(l_cmp_idx);
5038 	         END LOOP;  -- --}
5039 	         IF l_flag = 'N' THEN
5040   	           l_unassign_dds.DELETE(l_idx);
5041                  END IF;
5042 	      END IF; --},  l_unassign_rel_status(l_idx) = 'B'
5043 	      l_idx := l_unassign_dds.NEXT(l_idx);
5044 	   END LOOP;  -- --}
5045 	   -- Now, l_unassign_dds contains only the not-deleted dd_ids.
5046 
5047 	   l_unassign_backordered_dds.DELETE;
5048 	   j := l_unassign_dds.FIRST;
5049 	   -- Following loop just puts the dd_ids in contiguous locations in the pl/sql table
5050 	   WHILE j IS NOT NULL LOOP
5051 	    	l_unassign_backordered_dds(l_unassign_backordered_dds.count+1) := l_unassign_dds(j);
5052 	        j := l_unassign_dds.NEXT(j);
5053 	   END LOOP;
5054 	   l_unassign_dds.DELETE;
5055 	   l_unassign_dds := l_unassign_backordered_dds;
5056 	END IF; -- --}, l_global_parameters.consolidate_bo_lines
5057     END IF;  -- --}, l_unassign_dds.count > 0
5058     -- End, Consolidation of BO Delivery Details project
5059 
5060     --
5061     -- Debug Statements
5062     --
5063     IF l_debug_on THEN
5064        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5065     END IF;
5066 
5067     -- Unassign the lines marked for unassigning.
5068     WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5069                           p_ids_tobe_unassigned  => l_unassign_dds ,
5070                           p_validate_flag        => 'N', -- want it to succeed in case of Planned Deliveries
5071                           x_return_status        => l_return_status
5072                          );
5073 
5074     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5075                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5076     THEN
5077       x_return_status := l_return_status;
5078       l_num_error := l_num_error + 1 ;
5079       goto loop_end;
5080     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5081       l_num_warn := l_num_warn + 1;
5082     END IF;
5083 
5084     --
5085     -- Debug Statements
5086     --
5087     IF l_debug_on THEN
5088        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.CONT_TOBE_UNASSIGNED',WSH_DEBUG_SV.C_PROC_LEVEL);
5089     END IF;
5090     -- Identify the Staged Lines or Containers to be Unassigned from the Delivery
5091     Cont_ToBe_Unassigned ( p_staged_lines    => l_stage_rows,
5092                            x_unassigned_cont => x_unassigned_cont,
5093                            x_return_status   => l_return_status
5094                          );
5095 
5096     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5097                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5098     THEN
5099       x_return_status := l_return_status;
5100       wsh_util_core.add_message(x_return_status);
5101       l_num_error := l_num_error + 1 ;
5102       goto loop_end;
5103     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5104       l_num_warn := l_num_warn + 1;
5105     END IF;
5106 
5107     --
5108     -- Debug Statements
5109     --
5110     IF l_debug_on THEN
5111        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5112     END IF;
5113     -- Unassign Containers or Staged Lines using new API
5114     WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5115                           p_ids_tobe_unassigned => x_unassigned_cont ,
5116                           p_validate_flag   => 'N', -- want it to succeed for Planned Deliveries too
5117                           x_return_status   => l_return_status
5118                          );
5119 
5120     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5121                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5122     THEN
5123       x_return_status := l_return_status;
5124       l_num_error := l_num_error + 1 ;
5125       goto loop_end;
5126     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5127       l_num_warn := l_num_warn + 1;
5128     END IF;
5129 
5130     /* H integration: 945 cancel staged/unreleased */
5131     -- Cancel/delete lines marked for cancelling
5132     IF l_cancel_line_ids.count > 0 THEN
5133       --
5134       -- Debug Statements
5135       --
5136       IF l_debug_on THEN
5137           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE.DELETE_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
5138       END IF;
5139       --
5140       wsh_interface.delete_details(
5141         p_details_id     => l_cancel_line_ids,
5142         x_return_status   => l_return_status);
5143 
5144       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5145       /* new message: WSH_DEL_CANCEL_DET_ERROR, token DEL_NAME */
5146         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5147         --
5148         -- Debug Statements
5149         --
5150         IF l_debug_on THEN
5151             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5152         END IF;
5153         --
5154         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5155         x_return_status := l_return_status;
5156         wsh_util_core.add_message(x_return_status);
5157         l_num_error := l_num_error + 1 ;
5158         goto loop_end;
5159       END IF;
5160     END IF;
5161 
5162     -- Bug 5584951: Moved the call to after the call to unassign details.
5163 
5164     FOR tmp_counter IN 1..l_stage_rows.count LOOP
5165        IF l_debug_on THEN
5166          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
5167        END IF;
5168 
5169        WSH_WV_UTILS.Detail_Weight_Volume(
5170          p_delivery_detail_id => l_stage_rows(tmp_counter),
5171          p_update_flag        => 'Y',
5172          p_post_process_flag  => 'Y',
5173          p_calc_wv_if_frozen  => 'N',
5174          x_net_weight         => l_net_weight,
5175          x_volume             => l_volume,
5176          x_return_status      => l_return_status);
5177         IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
5178           x_return_status := l_return_status;
5179           IF l_debug_on THEN
5180             WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
5181             WSH_DEBUG_SV.pop(l_module_name);
5182           END IF;
5183           return;
5184         END IF;
5185       END LOOP;
5186 
5187     -- Bug 2527887 : Moved this call after unassigning detail lines from delivery since the check will not work
5188     -- if the pending overpick lines are still assigned to the delivery
5189     -- 10.5 Make sure no source lines with at total requested qty of zero are shipped or left behind
5190 
5191     --
5192     -- Debug Statements
5193     --
5194     IF l_debug_on THEN
5195         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_ZERO_REQ_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5196     END IF;
5197     --
5198     WSH_DETAILS_VALIDATIONS.check_zero_req_confirm(p_delivery_id => p_del_rows(i),
5199                                                    x_return_status => l_return_status);
5200 
5201     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
5202        x_return_status := l_return_Status ;
5203        --wsh_util_core.add_message(x_return_status);
5204        l_delivery_id := p_del_rows(i);
5205        goto confirm_error_no_msg;
5206     END IF;
5207 
5208 
5209     -- Code Shifted from below 12. *** to here, since this is a mandatory step now - Workflow Changes
5210     IF l_debug_on THEN
5211         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.GET',WSH_DEBUG_SV.C_PROC_LEVEL);
5212     END IF;
5213     --
5214     WSH_SHIPPING_PARAMS_PVT.Get(
5215             p_organization_id => l_organization_id,
5216             x_param_info    => l_param_info,
5217             x_return_status   => l_return_status
5218      );
5219 
5220 
5221      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5222        FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
5223        --
5224        -- Debug Statements
5225        --
5226        IF l_debug_on THEN
5227            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.GET_ORG_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5228        END IF;
5229        --
5230        FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
5231                      wsh_util_core.get_org_name(l_organization_id));
5232        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5233        wsh_util_core.add_message(x_return_status);
5234                          WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5235        goto confirm_error;
5236      END IF;
5237 
5238 
5239      --/== Workflow Changes
5240      l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
5241      IF  (l_param_info.Enable_sc_wf = 'Y' AND l_global_parameters.Enable_sc_wf = 'Y' AND nvl(l_override_wf,'N') = 'N') THEN
5242          l_enable_sc_wf := 'Y';
5243      END IF;
5244      --==/
5245 
5246 
5247      -- 9. If p_stage_del_flag= 'Y' then create deliveries for the stored delivery details above
5248 
5249      IF (p_stage_del_flag = 'Y') AND (l_stage_rows.count > 0) THEN
5250       --
5251       -- Debug Statements
5252       --
5253       IF l_debug_on THEN
5254           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.AUTOCREATE_DELIVERIES',WSH_DEBUG_SV.C_PROC_LEVEL);
5255       END IF;
5256       --
5257       wsh_delivery_autocreate.autocreate_deliveries(
5258       p_line_rows    => l_stage_rows ,
5259       p_init_flag   => 'Y' ,
5260       p_pick_release_flag => 'N' ,
5261       p_container_flag  => 'N' ,
5262       p_check_flag    => 'N' ,
5263       p_max_detail_commit => 1000,
5264       x_del_rows     => l_dummy_rows ,
5265       x_grouping_rows      => l_dummy_rows ,
5266       x_return_status  => l_return_status  ) ;
5267 
5268       IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5269        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5270        l_num_warn := l_num_warn + 1;
5271       ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5272        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5273        l_num_error := l_num_error + 1;
5274       END IF;
5275 
5276       --deliveryMerge
5277       IF l_debug_on THEN
5278           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag',WSH_DEBUG_SV.C_PROC_LEVEL);
5279       END IF;
5280       WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag(
5281             p_delivery_ids          => l_dummy_rows,
5282             p_caller                => 'WSH_DLMG',
5283             p_force_appending_limit => 'N',
5284             p_call_lcss             => 'Y',
5285             p_event                 => NULL,
5286             x_return_status         => l_return_status);
5287 
5288       IF l_debug_on THEN
5289        WSH_DEBUG_SV.log(l_module_name,'Adjust_Planned_Flag l_return_status',l_return_status);
5290       END IF;
5291 
5292       IF x_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5293         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5294         l_num_warn := l_num_warn + 1;
5295       ELSIF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
5296         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5297         l_num_error := l_num_error + 1;
5298       END IF;
5299 
5300 
5301      END IF;
5302 
5303     -- Bug 1729723 : Updating number_of_lpn for delivery , 1672188 : now doing it after unassignments.
5304 
5305     l_number_of_lpn(i)    := NULL;
5306     OPEN number_of_lpn(p_del_rows(i));
5307     FETCH number_of_lpn into l_number_of_lpn (i) ;
5308     CLOSE number_of_lpn;
5309 
5310 
5311     -- Check that all overpicked lines for  one source line are in the same delivery,
5312     -- so that we can guarantee that these lines will get interfaced to OM.
5313     -- we might look up CURSOR overpicked_outside_delivery( v_delivery_id in number ) or have new API...
5314 
5315     -- 12.  Calculate Weight volume etc
5316     --
5317     -- Debug Statements
5318     --
5319     --- Code to obtain Shipping parameters shifted from here *** - Workflow Changes
5320      l_enforce_packing_flag := l_param_info.enforce_packing_flag;
5321 
5322      -- Pack J, ITM -- Check if delivery needs to be marked for export compliance.
5323      l_itm_exc_severity := '-99';
5324 
5325      IF l_debug_on THEN
5326         wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5327      END IF;
5328 
5329      IF l_param_info.export_screening_flag IN ('S', 'A') THEN
5330 
5331 
5332         IF l_debug_on THEN
5333            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',WSH_DEBUG_SV.C_PROC_LEVEL);
5334         END IF;
5335 
5336         l_itm_exc_flag(p_del_rows(i)) :=  WSH_DELIVERY_VALIDATIONS.Check_ITM_Required
5337                                   (p_delivery_id => p_del_rows(i),
5338                                    x_return_status => l_return_status);
5339         IF l_debug_on THEN
5340            wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',l_return_status);
5341            WSH_DEBUG_SV.logmsg(l_module_name,'ITM flag: '||l_param_info.export_screening_flag);
5342            wsh_debug_sv.log(l_module_name,'l_itm_exc_flag for delivery: '|| p_del_rows(i),l_itm_exc_flag(p_del_rows(i)));
5343         END IF;
5344 
5345         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5346            goto confirm_error;
5347         END IF;
5348         -- Find out the severity of the exception if it is enabled.
5349         IF l_itm_exc_flag(p_del_rows(i)) = 'Y' THEN
5350 
5351            OPEN c_exc_severity('WSH_SC_REQ_EXPORT_COMPL');
5352            FETCH c_exc_severity INTO l_itm_exc_severity;
5353            CLOSE c_exc_severity;
5354 
5355         END IF;
5356 
5357            IF l_debug_on THEN
5358               wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5359            END IF;
5360      ELSE
5361 
5362         l_itm_exc_flag(p_del_rows(i)) := 'N';
5363 
5364      END IF;
5365 
5366 
5367     -- J: W/V Changes
5368     -- 12.5 Give warning if delivery W/V is null depending on percent_fill_basis_flag
5369 
5370     IF (NOT l_unassign_all_flag_tab(i)) THEN
5371 
5372      WSH_WV_UTILS.Delivery_Weight_Volume
5373                 ( p_delivery_id    => p_del_rows(i),
5374                   p_update_flag    => 'Y',
5375                   p_calc_wv_if_frozen => 'N',
5376                   x_gross_weight   => l_gross_weight,
5377                   x_net_weight     => l_net_wt,
5378                   x_volume         => l_volume,
5379                   x_return_status  => l_return_status);
5380 
5381 
5382 
5383       -- Get the latest W/V information.
5384       OPEN get_delivery_wv(p_del_rows(i));
5385       FETCH get_delivery_wv INTO l_gross_weight, l_volume;
5386       CLOSE get_delivery_wv;
5387 
5388       IF l_debug_on THEN
5389         WSH_DEBUG_SV.logmsg(l_module_name,'Gross '||l_gross_weight||' Volume '||l_volume||' Fill basis '||l_param_info.percent_fill_basis_flag);
5390       END IF;
5391 
5392       IF (l_param_info.percent_fill_basis_flag = 'W' and l_gross_weight is NULL) THEN
5393         FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5394         IF l_debug_on THEN
5395           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5396         END IF;
5397         --
5398         FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5399         FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5400         FND_MESSAGE.SET_TOKEN('WV','Weight');
5401         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5402         wsh_util_core.add_message(x_return_status);
5403         l_num_warn := l_num_warn + 1;
5404       END IF;
5405 
5406       IF (l_param_info.percent_fill_basis_flag = 'V' and l_volume is NULL) THEN
5407         FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5408         IF l_debug_on THEN
5409           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5410         END IF;
5411         --
5412         FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5413         FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5414         FND_MESSAGE.SET_TOKEN('WV','Volume');
5415         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5416         wsh_util_core.add_message(x_return_status);
5417         l_num_warn := l_num_warn + 1;
5418       END IF;
5419     END IF;
5420     -- End J: W/V Changes
5421 
5422 -- 2732719
5423 -- Calculate fill pc of the containers in the delivery
5424 
5425       l_underfilled_flag := FALSE;
5426       l_overfilled_flag := FALSE;
5427       IF l_debug_on THEN
5428         WSH_DEBUG_SV.log(l_module_name,'COUNT -'||l_shp_dd_cont_ids.count);
5429       END IF;
5430 
5431       FOR rec_count in 1..l_shp_dd_cont_ids.count
5432       LOOP
5433         IF l_debug_on THEN
5434           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.CHECK_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
5435           WSH_DEBUG_SV.log(l_module_name,'Cont -'||l_shp_dd_cont_ids(rec_count));
5436         END IF;
5437         --
5438         wsh_wv_utils.check_fill_pc( p_container_instance_id => l_shp_dd_cont_ids(rec_count),
5439                                     x_fill_status           => l_fill_status,
5440                                     x_return_status         => l_return_status);
5441 
5442         IF l_debug_on THEN
5443           WSH_DEBUG_SV.log(l_module_name,'RET STS -'||l_return_status);
5444           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_fill_status);
5445           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5446         END IF;
5447 
5448         IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5449                                 WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5450             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5451         ELSIF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
5452           raise ship_confirm_error;
5453         ELSIF (l_fill_status = 'U') THEN
5454           l_underfilled_flag := TRUE;
5455         ELSIF (l_fill_status = 'O') THEN
5456           l_overfilled_flag  := TRUE;
5457         END IF;
5458 
5459 -- Bug 2878538
5460 -- If l_save_fill_status is already saving U(nderfill) or O(verfill),then
5461 -- don't override,else override if it is Null or S(uccess)
5462         IF nvl(l_save_fill_status,'X') = 'S' THEN
5463           l_save_fill_status := l_fill_status;
5464         END IF;
5465 
5466         IF l_debug_on THEN
5467           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5468         END IF;
5469 
5470       END LOOP;
5471 
5472       l_fill_status := l_save_fill_status;
5473 
5474       IF l_debug_on THEN
5475         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP RET STS -'||l_return_status);
5476         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP SAV STS -'||l_save_fill_status);
5477         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP Fill St -'||l_fill_status);
5478       END IF;
5479 
5480 -- 2732719
5481 -- Calculate fill pc of the containers in the delivery
5482 
5483 
5484      --  Calculate weight volume for the delivery
5485 
5486      -- 13. Call check_confirm , it only has the TPA validations now.
5487 
5488      --  2131459 - added check for  l_unassign_all_flag_tab(i) and include steps 15 and 18 in this check
5489      IF (NOT l_unassign_all_flag_tab(i)) THEN
5490 
5491 
5492 
5493      -- Create trip from deconsol location to ultimate drop off
5494      -- consol deliveriers.
5495 
5496      IF l_mdc_co_del_tab.count > 0 THEN
5497 
5498         Create_Deconsol_Trips(p_deliveries_tab => p_del_rows,
5499                            x_return_status => l_return_status);
5500 
5501         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5502            raise ship_confirm_error;
5503         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5504            l_num_warn := l_num_warn + 1;
5505         END IF;
5506 
5507 
5508       END IF;
5509       --
5510       -- Debug Statements
5511       --
5512       IF l_debug_on THEN
5513           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5514       END IF;
5515       --
5516       wsh_delivery_validations.check_confirm(
5517       p_delivery_id      => p_del_rows(i),
5518       p_actual_dep_date  => p_actual_dep_date,
5519       p_cont_exists_flag    => l_cont_exists_flag ,
5520       p_enforce_packing_flag  => l_enforce_packing_flag,
5521       p_ship_from_location  => l_ship_from_location,
5522       p_ship_to_location    => l_ship_to_location,
5523       p_freight_code      => l_freight_code ,
5524       p_overfilled_flag    => l_overfilled_flag,
5525       p_underfilled_flag    => l_underfilled_flag,
5526       p_organization_id    => l_organization_id ,
5527       p_initial_pickup_date   => l_initial_pickup_date(i),
5528       p_ultimate_dropoff_date => l_ultimate_dropoff_date(i),
5529       x_return_status  => l_return_status ) ;
5530 
5531        /*
5532        ** begin bug 2426743
5533        **    Warning should not set the message that delivery will not be confirmed.
5534        **    Error should rollback and not continue processing this delivery.
5535        */
5536        IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5537 
5538          FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
5539          --
5540          -- Debug Statements
5541          --
5542          IF l_debug_on THEN
5543              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5544          END IF;
5545          --
5546          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5547          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5548          wsh_util_core.add_message(x_return_status);
5549          goto confirm_error_no_msg;
5550 
5551        ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5552 -- Bug 2711786
5553 -- for ship set,but this would include other validations done in
5554 -- check_confirm API like for SMC also
5555          IF l_batch_id IS NOT NULL THEN
5556           -- FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5557           -- x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5558           -- wsh_util_core.add_message(x_return_status);
5559            l_num_error := l_num_error + 1;
5560            goto confirm_error_no_msg;
5561          END IF;
5562 -- Bug 2711786
5563 
5564          --Ship Message Customization Project Change START
5565          IF l_debug_on THEN
5566             WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5567          END IF;
5568          If g_break_ship_set_or_smc > 0 then
5569             g_break_ship_set_or_smc := 0 ;
5570             l_num_error := l_num_error + 1;
5571             IF l_debug_on THEN
5572                WSH_DEBUG_SV.logmsg(l_module_name,'l_num_error ',l_num_error);
5573                WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5574             END IF;
5575             goto confirm_error_no_msg;
5576          End If;
5577          --Ship Message Customization Project Change END
5578 
5579          l_num_warn := l_num_warn + 1;
5580        END IF;
5581        /*
5582        ** end bug 2426743
5583        */
5584 
5585       -- Sequence delivery legs ( IS DONE IN CHECK_CONFIRM )
5586 
5587       IF (l_enforce_packing_flag = 'Y') THEN
5588 
5589         --
5590         -- Debug Statements
5591         --
5592         IF l_debug_on THEN
5593             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_UNPACKED',WSH_DEBUG_SV.C_PROC_LEVEL);
5594         END IF;
5595         --
5596         wsh_tpa_delivery_pkg.check_del_unpacked
5597                       (l_delivery_id,
5598                        l_cont_exists_flag,
5599                        l_unpacked_flag,
5600                        l_return_status);
5601 
5602         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5603                     THEN
5604             x_return_status := l_return_status;
5605           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5606             raise ship_confirm_error;
5607           ELSE
5608             l_num_warn := l_num_warn + 1;
5609           END IF;
5610         END IF;
5611       END IF;
5612 
5613       -- 15. Generate Packing Slip
5614       create_pack_slip(
5615         p_delivery_id => p_del_rows(i),
5616         x_return_status => l_return_status);
5617 
5618       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5619         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
5620                     THEN
5621           l_num_error := l_num_error + 1;
5622           goto loop_end;
5623         ELSE
5624           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_PACK_SLIP_ERROR');
5625           --
5626           -- Debug Statements
5627           --
5628           IF l_debug_on THEN
5629               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5630           END IF;
5631           --
5632           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5633           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5634           wsh_util_core.add_message(x_return_status);
5635           l_num_warn := l_num_warn + 1;
5636         END IF;
5637       END IF;
5638 
5639       -- 18. if p_intransit_flag = 'Y' and autocreate trip then set the pickup stop to closed
5640       --   Autocreate trip if necessary (trip stuff)
5641 
5642       l_pickup_stop_id  := NULL ;
5643       l_dropoff_stop_id := NULL ;
5644       l_delivery_leg_id := NULL ;
5645       l_parent_delivery_id := NULL;
5646       l_trip_id    := NULL ;
5647 
5648       OPEN  del_legs (p_del_rows(i));
5649       FETCH del_legs
5650                    INTO l_pickup_stop_id,
5651                         l_dropoff_stop_id,
5652                         l_delivery_leg_id,
5653                         l_parent_delivery_id;
5654       CLOSE del_legs;
5655 
5656       -- Note that the above FETCH might miss some legs if the delivery is assigned to mult. legs!!!!!!!!
5657 
5658       -- K: MDC: collect the deliveries that
5659       -- have parent deliveries.
5660       -- Note that this table may not be gapless.
5661       IF l_parent_delivery_id IS NULL THEN
5662 
5663          OPEN get_consol_del(p_del_rows(i));
5664          FETCH get_consol_del
5665          INTO l_parent_delivery_id;
5666          CLOSE get_consol_del;
5667 
5668       END IF;
5669 
5670       IF l_parent_delivery_id IS NOT NULL THEN
5671 
5672          l_mdc_co_del_tab(i) := l_parent_delivery_id;
5673 
5674       END IF;
5675 
5676       IF l_debug_on THEN
5677         wsh_debug_sv.log(l_module_name,'delivery',p_del_rows(i));
5678         wsh_debug_sv.log(l_module_name,'l_pickup_stop_id',l_pickup_stop_id);
5679         wsh_debug_sv.log(l_module_name,'l_dropoff_stop_id',l_dropoff_stop_id);
5680         wsh_debug_sv.log(l_module_name,'l_delivery_leg_id',l_delivery_leg_id);
5681         wsh_debug_sv.log(l_module_name,'l_parent_delivery_id',l_parent_delivery_id);
5682       END IF;
5683 
5684        /* Bug 2313359 Trip Information is Lost */
5685 
5686        IF (l_pickup_stop_id IS NULL) THEN
5687          l_del_rows( 1 ) := p_del_rows(i);
5688 
5689          --Compatiblity Changes
5690          --for autocreatetrip if no ship method is provided do the compatibility check to see if trip can be created for the delivery else if ship method is provided, do the compatibility check before update trip call
5691          --bug 2811489 : call should be made regardless of ship_method being null
5692          IF wsh_util_core.fte_is_installed='Y' THEN
5693 
5694            WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5695              p_api_version_number =>  1.0,
5696              p_init_msg_list      =>  FND_API.G_FALSE,
5697              p_entity_type        =>  'D',
5698              p_target_id          =>  l_target_trip_id,
5699              p_action_code        =>  'AUTOCREATE-TRIP',
5700              p_del_attr_tab       =>  l_cc_del_attr_tab,
5701              p_det_attr_tab       =>  l_cc_det_attr_tab,
5702              p_trip_attr_tab      =>  l_cc_trip_attr_tab,
5703              p_stop_attr_tab      =>  l_cc_stop_attr_tab,
5704              p_in_ids             =>  l_del_rows,
5705              x_fail_ids           =>  l_cc_fail_ids,
5706              x_validate_result          =>  l_cc_validate_result,
5707              x_failed_lines             =>  l_cc_failed_records,
5708              x_line_groups              =>  l_cc_line_groups,
5709              x_group_info               =>  l_cc_group_info,
5710              x_msg_count                =>  l_msg_count,
5711              x_msg_data                 =>  l_msg_data,
5712              x_return_status            =>  l_return_status);
5713 
5714 
5715            IF l_debug_on THEN
5716              wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and no ship method');
5717              wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5718              wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5719              wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5720              wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5721              wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
5722              wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5723              wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5724            END IF;
5725            --
5726 
5727            IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5728               IF l_cc_failed_records.COUNT>0 THEN
5729 
5730                       IF l_debug_on THEN
5731                           wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
5732                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5733                       END IF;
5734 
5735                       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
5736                       FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5737                       x_return_status := l_return_status;
5738                       wsh_util_core.add_message(x_return_status);
5739                       goto confirm_error;
5740                ELSE
5741                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5742                       l_num_warn := l_num_warn + 1;
5743                END IF;
5744            ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5745                  x_return_status := l_return_status;
5746                  goto confirm_error;
5747            ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5748                x_return_status := l_return_status;
5749                l_num_warn := l_num_warn + 1;
5750            END IF;
5751          END IF;
5752          --Compatiblity Changes
5753 
5754          --
5755          -- Debug Statements
5756          --
5757          IF l_debug_on THEN
5758              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.AUTOCREATE_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
5759          END IF;
5760          --
5761 
5762          --heali :Shipment Advice change for trip Consolidation.
5763          IF (p_autocreate_trip_flag = 'Y' ) THEN
5764             wsh_trips_actions.autocreate_trip(
5765                p_del_rows => l_del_rows,
5766                x_trip_id  => l_trip_id,
5767                x_trip_name => l_trip_name,
5768                x_return_status => l_return_status,
5769                -- Bug 3913206
5770                p_sc_pickup_date => l_sc_pickup_date,
5771                p_sc_dropoff_date => l_sc_dropoff_date
5772    );
5773 
5774             IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5775                      THEN
5776               x_return_status := l_return_status;
5777               FND_MESSAGE.SET_NAME('WSH','WSH_DEL_AUTOCREATE_TRIP_ERROR');
5778 
5779               IF l_debug_on THEN
5780                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5781               END IF;
5782               --
5783               FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5784               wsh_util_core.add_message(x_return_status);
5785               goto confirm_error;
5786             END IF;
5787           END IF;
5788        END IF;
5789        --heali :Shipment Advice change for trip Consolidation.
5790 
5791 
5792        -- Bug 2213342 : Ship Confirm Defaulting behavior
5793        IF l_trip_id IS NULL THEN
5794 
5795              --Compatibility Changes
5796              -- if trip already exists, need to check for must use constraints if carrier/mode is null
5797              IF wsh_util_core.fte_is_installed='Y' THEN
5798                l_trip_info_tab.delete;
5799                l_cc_count_success:=0;
5800 
5801                IF l_debug_on THEN
5802                    wsh_debug_sv.log(l_module_name,'HASH_TRIP count',G_HASH_TRIP.COUNT);
5803                END IF;
5804 
5805                FOR cur in Get_Trip(p_del_rows(i)) LOOP
5806                   b_tripalreadychecked:='N';
5807                   IF G_HASH_TRIP.COUNT>0 THEN
5808                    FOR l_count_hashtrip in G_HASH_TRIP.FIRST..G_HASH_TRIP.LAST LOOP
5809                     IF G_HASH_TRIP(l_count_hashtrip)=cur.trip_id THEN
5810                       b_tripalreadychecked:='Y';
5811                       IF l_debug_on THEN
5812                         wsh_debug_sv.log(l_module_name,'HASH_TRIP matched', cur.trip_id);
5813                       END IF;
5814                     END IF;
5815                    END LOOP;
5816                   END IF;
5817 
5818                   --IF (b_tripalreadychecked='N' and (cur.carrier_id is null or cur.mode_of_transport is null)) THEN
5819                   IF (b_tripalreadychecked='N' and
5820                       (cur.ship_method_code is null and (cur.carrier_id is null or cur.mode_of_transport is null))
5821                      ) THEN
5822 
5823                     IF l_debug_on THEN
5824                       wsh_debug_sv.log(l_module_name,'trip not already checked',cur.trip_id);
5825                     END IF;
5826                     l_cc_count_success:=l_cc_count_success+1;
5827                     l_trip_info_tab(l_cc_count_success).trip_id:=cur.trip_id;
5828                     l_trip_info_tab(l_cc_count_success).ship_method_code:=cur.ship_method_code;
5829                     l_trip_info_tab(l_cc_count_success).carrier_id:=cur.carrier_id;
5830                     l_trip_info_tab(l_cc_count_success).mode_of_transport:=cur.mode_of_transport;
5831                     G_HASH_TRIP(G_HASH_TRIP.COUNT+1):=cur.trip_id;
5832                   END IF;
5833                END LOOP;
5834 
5835                IF l_debug_on THEN
5836                    wsh_debug_sv.log(l_module_name,'l_trip_info_tab.COUNT : ',l_trip_info_tab.COUNT);
5837                END IF;
5838 
5839 
5840                IF l_trip_info_tab.COUNT>0 THEN
5841 
5842 		  WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5843                     p_api_version_number   =>  1.0,
5844                     p_init_msg_list        =>  FND_API.G_FALSE,
5845                     p_entity_type          =>  'T',
5846                     p_target_id            =>  l_target_trip_id,
5847                     p_action_code          =>  'UPDATE',
5848                     p_del_attr_tab         =>  l_cc_del_attr_tab,
5849                     p_det_attr_tab         =>  l_cc_det_attr_tab,
5850                     p_trip_attr_tab        =>  l_trip_info_tab,
5851                     p_stop_attr_tab        =>  l_cc_stop_attr_tab,
5852                     p_in_ids               =>  l_cc_in_ids,
5853                     x_fail_ids             =>  l_cc_fail_ids,
5854                     x_validate_result          =>  l_cc_validate_result,
5855                     x_failed_lines             =>  l_cc_failed_records,
5856                     x_line_groups              =>  l_cc_line_groups,
5857                     x_group_info               =>  l_cc_group_info,
5858                     x_msg_count                =>  l_msg_count,
5859                     x_msg_data                 =>  l_msg_data,
5860                     x_return_status            =>  l_return_status);
5861 
5862                  IF l_debug_on THEN
5863                    wsh_debug_sv.logmsg(l_module_name,'Ship confirm with trip already present');
5864                    wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5865                    wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5866                    wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5867                    wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5868                    wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
5869                    wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5870                    wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5871                    wsh_debug_sv.log(l_module_name,'HASH_TRIP trip_id',G_HASH_TRIP(1));
5872                  END IF;
5873                  --
5874 
5875                  IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5876                    IF l_cc_fail_ids.COUNT>0 THEN
5877 
5878                       IF l_debug_on THEN
5879                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
5880                       END IF;
5881 
5882                       FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_COMP_FAILED');
5883                       FND_MESSAGE.SET_TOKEN('TRIP_ID',wsh_trips_pvt.get_name(l_cc_fail_ids(1)));
5884                       x_return_status := l_return_status;
5885                       wsh_util_core.add_message(x_return_status);
5886                       goto confirm_error;
5887                    ELSE
5888                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5889                       l_num_warn := l_num_warn + 1;
5890                    END IF;
5891                  ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5892                    x_return_status := l_return_status;
5893                    goto confirm_error;
5894                  ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5895                    x_return_status := l_return_status;
5896                    l_num_warn := l_num_warn + 1;
5897                  END IF;
5898 
5899                END IF;--for trip_tab count>0
5900              END IF;
5901              --Compatibility Changes
5902 
5903              -- bug 2432330: to show expected warning, code has to count deliveries with
5904              -- existing stops:
5905              -- delivery has existing trip and will not be set in transit or closed.
5906              l_close_confirm_flag := 'F';
5907 
5908 	     l_with_mc_trip_flag(i)  := TRUE;
5909 
5910 
5911              IF p_ship_method IS NOT NULL THEN -- trip already exists...
5912              -- Bug 3347549 update the ship method components for
5913              -- the fisrt trip on the delivery.
5914 
5915                 OPEN get_del_first_trip(p_del_rows(i));
5916                 FETCH get_del_first_trip into l_del_first_trip;
5917                 CLOSE get_del_first_trip;
5918 
5919                 IF l_del_first_trip IS NULL THEN
5920 
5921                    FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
5922                    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5923                    wsh_util_core.add_message(x_return_status);
5924                    goto confirm_error;
5925 
5926                 ELSE
5927 
5928                    l_carrier_rec.ship_method_code := p_ship_method;
5929 
5930 
5931                    WSH_CARRIERS_GRP.get_carrier_service_mode(
5932                       p_carrier_service_inout_rec => l_carrier_rec,
5933                       x_return_status => l_return_status);
5934 
5935                    IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5936                       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5937                       goto confirm_error;
5938                    END IF;
5939 
5940                    BEGIN
5941 
5942                       WSH_TRIPS_PVT.lock_trip_no_compare(l_del_first_trip);
5943 
5944                    EXCEPTION
5945 
5946                       WHEN app_exception.application_exception OR app_exception.record_lock_exception THEN
5947                       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5948                       FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_STOP_TRIP_LOCK');
5949                       FND_MESSAGE.SET_TOKEN('DLVY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5950                       wsh_util_core.add_message(x_return_status);
5951                       goto confirm_error;
5952 
5953                    END;
5954 
5955                    UPDATE wsh_trips
5956                    SET ship_method_code = p_ship_method,
5957                        service_level = l_carrier_rec.service_level,
5958                        mode_of_transport = l_carrier_rec.mode_of_transport,
5959                        carrier_id = l_carrier_rec.carrier_id
5960                    WHERE trip_id = l_del_first_trip;
5961 
5962                    IF (SQL%NOTFOUND) THEN
5963                      FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
5964                      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5965                      wsh_util_core.add_message(x_return_status);
5966                      goto confirm_error;
5967                    END IF;
5968 
5969                 END IF;
5970 
5971              END IF;
5972 
5973        ELSE
5974          /* H integration - call MultiLeg FTE */
5975          IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
5976            -- Get pvt type record structure for trip
5977            --
5978            -- Debug Statements
5979            --
5980            IF l_debug_on THEN
5981                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.GET_TRIP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
5982            END IF;
5983            --
5984            wsh_trips_grp.get_trip_details_pvt
5985              (p_trip_id => l_trip_id,
5986               x_trip_rec => l_trip_rec,
5987               x_return_status => l_return_status);
5988            IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5989              x_return_status := l_return_status;
5990              wsh_util_core.add_message(x_return_status);
5991              goto confirm_error;
5992            END IF;
5993 
5994            -- this is the updated record
5995            l_trip_rec.ship_method_code :=
5996                          nvl(p_ship_method,l_trip_rec.ship_method_code);
5997 
5998            -- Call FTE
5999            --
6000            -- Debug Statements
6001            --
6002            IF l_debug_on THEN
6003                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
6004            END IF;
6005            --
6006            wsh_fte_integration.trip_stop_validations
6007              (p_stop_rec => l_stop_rec,
6008               p_trip_rec => l_trip_rec,
6009               p_action => 'UPDATE',
6010               x_return_status => l_return_status);
6011 
6012            /* H integration changes */
6013            IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6014              IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6015                l_num_warn := l_num_warn + 1;
6016              ELSE
6017                x_return_status := l_return_status;
6018                wsh_util_core.add_message(x_return_status);
6019                goto confirm_error;
6020              END IF;
6021            END IF;
6022         END IF;
6023 
6024         /* End of H integration - call MultiLeg FTE */
6025 
6026 
6027          --Compatiblity Changes
6028          --for autocreatetrip if no ship method is provided do the compatibility check to see if trip can be created for the delivery else if ship method is provided, do the compatibility check before update trip call
6029          --bug 2811489 : call should be made regardless of ship_method being null
6030          IF wsh_util_core.fte_is_installed='Y' THEN
6031 
6032              --only one record
6033              l_trip_info_tab(1).trip_id:=l_trip_id;
6034              IF p_ship_method is not null THEN
6035                 l_trip_info_tab(1).ship_method_code:=p_ship_method;
6036              ELSE -- ship method is not specified as an option, existing carrier, mode
6037                   -- have to be checked for must use constraints
6038                 l_trip_info_tab(1).ship_method_code  :=l_trip_rec.ship_method_code;
6039                 l_trip_info_tab(1).carrier_id        :=l_trip_rec.carrier_id;
6040                 l_trip_info_tab(1).mode_of_transport :=l_trip_rec.mode_of_transport;
6041              END IF;
6042 
6043              WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
6044                p_api_version_number   =>  1.0,
6045                p_init_msg_list        =>  FND_API.G_FALSE,
6046                p_entity_type          =>  'T',
6047                p_target_id            =>  l_target_trip_id,
6048                p_action_code          =>  'UPDATE',
6049                p_del_attr_tab         =>  l_cc_del_attr_tab,
6050                p_det_attr_tab         =>  l_cc_det_attr_tab,
6051                p_trip_attr_tab        =>  l_trip_info_tab,
6052                p_stop_attr_tab        =>  l_cc_stop_attr_tab,
6053                p_in_ids               =>  l_cc_in_ids,
6054                x_fail_ids             =>  l_cc_fail_ids,
6055                x_validate_result          =>  l_cc_validate_result,
6056                x_failed_lines             =>  l_cc_failed_records,
6057                x_line_groups              =>  l_cc_line_groups,
6058                x_group_info               =>  l_cc_group_info,
6059                x_msg_count                =>  l_msg_count,
6060                x_msg_data                 =>  l_msg_data,
6061                x_return_status            =>  l_return_status);
6062 
6063            IF l_debug_on THEN
6064              wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and ship method');
6065              wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
6066              wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
6067              wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
6068              wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
6069              wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
6070              wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
6071              wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
6072            END IF;
6073            --
6074 
6075            IF l_return_status=wsh_util_core.g_ret_sts_error THEN
6076               IF l_cc_fail_ids.COUNT>0 THEN
6077 
6078                       IF l_debug_on THEN
6079                           wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
6080                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6081                       END IF;
6082 
6083                       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
6084                       FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6085                       x_return_status := l_return_status;
6086                       wsh_util_core.add_message(x_return_status);
6087                       goto confirm_error;
6088                ELSE
6089                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
6090                       l_num_warn := l_num_warn + 1;
6091                END IF;
6092            ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
6093                  x_return_status := l_return_status;
6094                  goto confirm_error;
6095            ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6096                 x_return_status := l_return_status;
6097                l_num_warn := l_num_warn + 1;
6098            END IF;
6099          END IF;
6100          --Compatiblity Changes
6101 
6102          -- Bug 3347549 Derive the ship method components for the trip.
6103 
6104          IF p_ship_method IS NOT NULL THEN
6105 
6106             l_carrier_rec.ship_method_code := p_ship_method;
6107 
6108             WSH_CARRIERS_GRP.get_carrier_service_mode(
6109                          p_carrier_service_inout_rec => l_carrier_rec,
6110                          x_return_status => l_return_status);
6111 
6112             IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6113                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6114                goto confirm_error;
6115             END IF;
6116 
6117             UPDATE wsh_trips
6118             SET ship_method_code = p_ship_method,
6119                 service_level = l_carrier_rec.service_level,
6120                 mode_of_transport = l_carrier_rec.mode_of_transport,
6121                 carrier_id = l_carrier_rec.carrier_id
6122             WHERE trip_id = l_trip_id;
6123 
6124             IF (SQL%NOTFOUND) THEN
6125               FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6126               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6127               wsh_util_core.add_message(x_return_status);
6128               goto confirm_error;
6129             END IF;
6130 
6131          END IF;
6132 
6133        END IF;--l_trip_id is not null - autocreated trip
6134 
6135        IF l_debug_on THEN
6136           wsh_debug_sv.log(l_module_name,'p_intransit_flag', p_intransit_flag);
6137           wsh_debug_sv.log(l_module_name,'p_close_flag', p_close_flag);
6138           wsh_debug_sv.log(l_module_name,'l_itm_exc_severity', l_itm_exc_severity);
6139        END IF;
6140          /* Bug 2313359 move the code from above */
6141 
6142        IF ((p_intransit_flag = 'Y'  OR p_close_flag = 'Y') AND (l_enable_sc_wf <> 'Y') )  THEN
6143            -- Now that the trip is created , fetch the delivery's  pickup_stop_id again.
6144            -- We do this only if severity 'ERROR', 'WARNING' ITM exceptions will not be
6145            -- logged against this delivery, as the stops attached to deliveries with
6146            -- 'ERROR', 'WARNING' ITM exceptions will not get closed.
6147            -- l_enable_sc_wf <> 'Y' - Workflow Changes
6148 
6149            OPEN  del_legs (p_del_rows(i));
6150            FETCH del_legs INTO l_pickup_stop_id,
6151                             l_dropoff_stop_id, l_delivery_leg_id,
6152                             l_parent_delivery_id;
6153            CLOSE del_legs;
6154 
6155            IF (l_itm_exc_severity IN ('ERROR', 'WARNING')) THEN
6156 
6157                l_itm_stops_tab(l_pickup_stop_id) := 'Y';
6158                l_itm_stops_tab(l_dropoff_stop_id) := 'Y';
6159 
6160                l_close_confirm_flag := 'F';
6161 
6162                FND_MESSAGE.SET_NAME('WSH','WSH_EXP_COMPL_SCRN_REQD');
6163                FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
6164                wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
6165 
6166            ELSE
6167 
6168                l_stop_rows(l_stop_rows.count + 1 ) := l_pickup_stop_id;
6169                --u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6170 
6171                -- 19. if p_close_flag = 'Y' and autocreate trip close the drop off stop
6172                IF (p_close_flag = 'Y') THEN
6173                  l_stop_rows(l_stop_rows.count + 1 ) := l_dropoff_stop_id;
6174                --  u_stop_rows(u_stop_rows.count + 1 ) := l_dropoff_stop_id;
6175                END IF;
6176 
6177 	       --bug 3314353  -- jckwok
6178 	       OPEN get_del_first_trip(p_del_rows(i));
6179 	       FETCH get_del_first_trip into l_first_trip_id;
6180 	       CLOSE get_del_first_trip;
6181 	       IF l_first_trip_id IS NULL THEN
6182 		  FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6183 		  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6184 		  wsh_util_core.add_message(x_return_status);
6185 		  goto confirm_error;
6186 	       END IF;
6187 	       OPEN stop_sequence_number_csr(l_pickup_stop_id);
6188 	       FETCH stop_sequence_number_csr INTO l_pick_up_stop_sequence_num;
6189                IF stop_sequence_number_csr%NOTFOUND THEN
6190                   CLOSE stop_sequence_number_csr;
6191                   RAISE NO_DATA_FOUND;
6192                END IF;
6193 	       CLOSE stop_sequence_number_csr;
6194 
6195 	       IF ((p_close_flag = 'Y') AND (p_intransit_flag = 'Y')) THEN
6196 	         --{ bugfix 3925963
6197    	         l_inbound_stops_exists := false;
6198 		 l_stop_name_list  := null;
6199 	         OPEN get_stops_csr(l_first_trip_id);
6200 	         LOOP
6201 	           FETCH get_stops_csr INTO l_prev_stop_id,l_shipments_type_flag,l_stop_location_id;
6202                    exit when get_stops_csr%NOTFOUND;
6203                    IF nvl(l_shipments_type_flag,'O') = 'I'  THEN
6204 		      l_inbound_stops_exists := true;
6205 		      l_stop_name            := SUBSTRB(
6206                                                          WSH_UTIL_CORE.get_location_description
6207                                                           ( l_stop_location_id,
6208                                                             'NEW UI CODE'
6209                                                            ),
6210                                                           1,
6211                                                           60
6212                                                         );
6213 		      IF l_stop_name_list is null THEN
6214                          l_stop_name_list := l_stop_name;
6215 		      ELSE
6216                          l_stop_name_list := l_stop_name_list || ' , ' || l_stop_name;
6217 		      END IF;
6218                    ELSE
6219    	             u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6220                    END IF;
6221 		   --
6222 	         END LOOP;
6223                  CLOSE get_stops_csr;
6224 		 IF l_inbound_stops_exists THEN
6225                     OPEN get_trip_name_csr (l_first_trip_id);
6226 		    FETCH get_trip_name_csr INTO l_stops_trip_name;
6227 		    CLOSE get_trip_name_csr;
6228                     FND_MESSAGE.SET_NAME('WSH','WSH_PREV_IB_STOPS_NOT_CLOSED');
6229 		    FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_stops_trip_name);
6230 		    FND_MESSAGE.SET_TOKEN('STOP_NAME_LIST', l_stop_name_list);
6231 		    x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
6232                     wsh_util_core.add_message(x_return_status);
6233 		 END IF;
6234 		 --} bugfix 3925963
6235 	       ELSIF ((p_close_flag = 'N') AND (p_intransit_flag = 'Y')) THEN
6236 	         OPEN prev_stop_csr(l_first_trip_id, l_pick_up_stop_sequence_num);
6237 	         LOOP
6238 	           FETCH prev_stop_csr INTO l_prev_stop_id;
6239                    exit when prev_stop_csr%NOTFOUND;
6240 	           u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6241 	         END LOOP;
6242                  CLOSE prev_stop_csr;
6243                  u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6244                END IF;
6245 	       --bug 3314353  -- jckwok
6246 
6247                l_close_confirm_flag := 'C';
6248 
6249            END IF;
6250 
6251        ELSE
6252 
6253            l_close_confirm_flag := 'F';
6254 
6255        END IF; -- end of p_in_transit_flag = Y
6256 
6257      END IF; -- end of IF (NOT l_unassign_all_flag_tab(i))
6258 
6259     IF l_debug_on THEN
6260            WSH_DEBUG_SV.log(l_module_name,'l_close_confirm_flag',l_close_confirm_flag );
6261     END IF;
6262 
6263     --set the close/confirm count accordingly
6264     IF(l_close_confirm_flag = 'C') THEN
6265       l_close_del_cnt := l_close_del_cnt +1;
6266     ELSIF(l_close_confirm_flag = 'F') THEN
6267       l_confirm_del_cnt := l_confirm_del_cnt +1;
6268     END IF;
6269 
6270     l_close_confirm_flag:=NULL;
6271 
6272 
6273      -- Set delivery status to confirm, set initial pickup date, ultimate dropoff date
6274 
6275      -- If all delivery_details from a delivery are being unassigned then set status to CLOSED
6276      -- ,unassign delivery from all trips it might be on and set a warning message
6277 
6278     IF l_unassign_all_flag_tab(i) THEN
6279         l_status_code(i) := 'CL';
6280 
6281         /* H integration: 940/945 WSH wrudge */
6282         -- we should get warning only if user doesn't expect to do unassign all.
6283         IF p_action_flag NOT IN ('C', 'O')  AND l_unassign_dds.count > 0 THEN
6284 
6285           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_UNASSIGN_ALL');
6286           --
6287           -- Debug Statements
6288           --
6289           IF l_debug_on THEN
6290               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6291           END IF;
6292           --
6293           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6294           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6295           wsh_util_core.add_message(x_return_status);
6296           WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
6297           l_num_warn := l_num_warn + 1;
6298         END IF;
6299 
6300         l_mdc_index_i := 0;
6301         FOR dg IN del_legs(p_del_rows(i)) LOOP
6302           --
6303           -- Debug Statements
6304           --
6305           --
6306           -- K: MDC Remove the delivery from the consol delivery and trip.
6307           IF dg.parent_delivery_id IS NOT NULL THEN
6308              l_mdc_cl_del_tab(1) := p_del_rows(i);
6309              l_mdc_co_del_tab.delete(i);
6310              WSH_NEW_DELIVERY_ACTIONS.Unassign_Dels_from_Consol_Del(
6311                        p_parent_del     => NULL,
6312                        p_caller         => p_caller,
6313                        p_del_tab        => l_mdc_cl_del_tab,
6314                        x_return_status  => l_return_status);
6315              l_mdc_cl_del_tab.delete;
6316              IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6317                IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6318                    l_num_warn := l_num_warn + 1;
6319                ELSE
6320                    x_return_status := l_return_status;
6321                    goto confirm_error;
6322                END IF;
6323              END IF;
6324           END IF;
6325           IF l_debug_on THEN
6326               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.DELETE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
6327           END IF;
6328           wsh_delivery_legs_pvt.delete_delivery_leg
6329                        (NULL, dg.delivery_leg_id, l_return_status);
6330           IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6331             --Bug 2108310
6332               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6333                 l_num_warn := l_num_warn + 1;
6334               ELSE
6335                 x_return_status := l_return_status;
6336                 goto confirm_error;
6337               END IF;
6338             --Bug 2108310
6339           END IF;
6340 
6341        END LOOP;
6342      ELSE
6343       l_status_code(i) := 'CO';
6344      END IF;
6345 
6346 
6347     -- LASTLY,  populated the delivery columns  for bulk update
6348 
6349     u_del_rows( u_del_rows.count + 1)       := p_del_rows (i);
6350     u_status_code( u_del_rows.count )      := l_status_code(i);
6351     u_number_of_lpn( u_del_rows.count )    := l_number_of_lpn(i) ;
6352     u_initial_pickup_date(  u_del_rows.count )   := l_initial_pickup_date(i);
6353     u_ultimate_dropoff_date(  u_del_rows.count ) := l_ultimate_dropoff_date(i);
6354     /* H integration: 945 send document wrudge */
6355     u_organization_id( u_del_rows.count )   := l_organization_id;
6356     u_wsh_lines_exist( u_del_rows.count )   := l_wsh_lines_exist;
6357     --/==Workflow Changes
6358     IF (l_enable_sc_wf = 'Y') THEN
6359         l_scpod_wf_del_rows(l_scpod_wf_del_rows.count + 1) := u_del_rows.count;
6360     END IF;
6361     --==/
6362 
6363      goto loop_end;
6364 
6365      <<confirm_error>>
6366 
6367      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
6368      --
6369      -- Debug Statements
6370      --
6371      IF l_debug_on THEN
6372          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6373      END IF;
6374      --
6375      FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6376      wsh_util_core.add_message(x_return_status);
6377 
6378      /* H integration: 940/945 wrudge */
6379      <<confirm_error_no_msg>>
6380      ROLLBACK TO SAVEPOINT confirm_delivery_sp;
6381      l_num_error := l_num_error + 1;
6382 
6383      <<loop_end>>
6384      null;
6385 
6386      l_error_exists := FALSE;
6387 
6388 /* Bug 2761304: Changed the following conditon from '=' to '>='. */
6389 
6390      IF (l_num_error >= 0) AND (l_wms_enabled_flag) THEN
6391        -- Bug 2942938: select all the 'W' message type from WSH_INTEGRATION.G_MSG_TABLE
6392 		 -- also select hold 'E' messages for WMS org, since hold errors
6393                  -- bug 3455640 added 'WSH_INVALID_CATCHWEIGHT'
6394 		 -- should prevent the delivery from being ship confirmed, not just unassign
6395        -- the delivery details
6396        l_count := 0;
6397        FOR i in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6398          IF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'W' )  OR
6399             ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME in (
6400                    'WSH_HEADER_HOLD_ERROR',
6401                    'WSH_SHIP_LINE_HOLD_ERROR',
6402                    'WSH_DET_CREDIT_HOLD_ERROR',
6403                    'WSH_INVALID_CATCHWEIGHT') ) THEN
6404            l_count := l_count + 1;
6405            l_msg_table(l_count) := WSH_INTEGRATION.G_MSG_TABLE(i);
6406            IF l_debug_on THEN
6407 			     WSH_DEBUG_SV.logmsg(l_module_name,'Msg '||i||' : '||WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE||' '||WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME,WSH_DEBUG_SV.C_PROC_LEVEL);
6408            END IF;
6409          END IF;
6410        END LOOP;
6411        -- Call WMS api to process the table of l_msg_table only for wms enabled org
6412        -- WMS: pass warnings to WMS for processing:
6413        WMS_SHIPPING_MESSAGES.PROCESS_SHIPPING_WARNING_MSGS(x_return_status  => l_return_status ,
6414                                                         x_msg_count      => l_msg_count ,
6415                                                         x_msg_data       => l_msg_data,
6416                                                         p_commit         => FND_API.g_false,
6417                                                         x_shipping_msg_tab  => l_msg_table);
6418 
6419        -- Check if there exists an 'E' message in the l_msg_table
6420        -- If there is then turn the message type to 'E' for the particular message name in
6421        -- WSH_INTEGRATION.G_MSG_TABLE
6422        FOR i in 1..l_msg_table.count LOOP
6423          IF ( l_msg_table(i).MESSAGE_TYPE = 'E' ) THEN
6424            l_error_exists := TRUE;
6425            FOR j in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6426              IF (l_msg_table(i).message_name = WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_NAME) THEN
6427                WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_TYPE := 'E';
6428              END IF;
6429            END LOOP;
6430          END IF;
6431        END LOOP;
6432        l_msg_table.delete;
6433      END IF;
6434      -- Call Store_Msg_In_Table Api to push the messages in WSH_INTEGRATION.G_MSG_TABLE to fnd stack
6435      WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
6436                                        x_msg_rec_count => l_msg_rec_count,
6437                                        x_return_status => l_return_status);
6438      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6439        raise ship_confirm_error;
6440      END IF;
6441      -- If there is no Shipping error but WMS has turned one of the Warning to Error then set the l_num_error
6442      IF ( (l_num_error = 0) AND (l_error_exists) )THEN
6443        l_num_error := nvl(l_msg_rec_count.e_count,0) + nvl(l_msg_rec_count.u_count,0);
6444      END IF;
6445 
6446   end loop ;
6447 
6448   --delete the hash trip_ids stored
6449   G_HASH_TRIP.delete;
6450 
6451   -- Bug 2074768 : Check for tolerances now that all the delivery lines for all the deliveries have been updated.
6452   -- The need to check tolerances here arises because now we have all the deliveries that really will
6453   -- be ship confirmed.
6454   IF l_debug_on THEN
6455     WSH_DEBUG_SV.log(l_module_name,'p_del_rows count', p_del_rows.count);
6456   END IF;
6457 
6458   FOR i IN 1..p_del_rows.count LOOP
6459 
6460     -- HW OPM added l_max_quantity2
6461     --
6462     -- Debug Statements
6463     --
6464     IF l_debug_on THEN
6465         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DELIVERY_FOR_TOLERANCES',WSH_DEBUG_SV.C_PROC_LEVEL);
6466     END IF;
6467     --
6468     wsh_Delivery_validations.check_delivery_for_tolerances (
6469       p_delivery_id => p_del_rows(i) ,
6470       x_source_line_id  => l_temp_line_id ,
6471       x_source_code  => l_temp_source_code ,
6472       x_max_quantity  => l_max_quantity ,
6473       x_max_quantity2   => l_max_quantity2 ,
6474       x_return_status   => l_return_status  ) ;
6475 
6476     if ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS  ) then
6477       x_return_status := l_return_Status ;
6478       wsh_util_core.add_message(x_return_status);
6479       l_num_error := l_num_error + 1;
6480       l_delivery_id := p_del_rows(i);
6481       raise ship_confirm_error ;
6482     end if ;
6483 
6484 	-- Close Exceptions for the Delivery
6485 	IF l_debug_on THEN
6486        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
6487     END IF;
6488     WSH_XC_UTIL.Close_Exceptions (
6489                                      p_api_version           => 1.0,
6490                                      x_return_status         => l_return_status,
6491                                      x_msg_count             => l_msg_count,
6492                                      x_msg_data              => l_msg_data,
6493                                      p_logging_entity_id     => p_del_rows(i),
6494                                      p_logging_entity_name   => 'DELIVERY',
6495                                      p_consider_content      => 'Y'
6496                                   ) ;
6497 
6498     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
6499          x_return_status := l_return_status;
6500          wsh_util_core.add_message(x_return_status);
6501          IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6502               l_num_error := l_num_error + 1 ;
6503               l_delivery_id := p_del_rows(i);
6504               raise ship_confirm_error;
6505          ELSE
6506               l_num_warn := l_num_warn + 1 ;
6507          END IF;
6508     END IF;
6509 
6510 
6511 
6512   END LOOP ;
6513 
6514   -- Create trip from deconsol location to ultimate drop off
6515   -- consol deliveriers.
6516   IF l_debug_on THEN
6517     WSH_DEBUG_SV.log(l_module_name,'l_mdc_co_del_tab count', l_mdc_co_del_tab.count);
6518   END IF;
6519 
6520   IF l_mdc_co_del_tab.count > 0 THEN
6521 
6522      Create_Deconsol_Trips(p_deliveries_tab => u_del_rows,
6523                            x_return_status => l_return_status);
6524 
6525      IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6526         raise ship_confirm_error;
6527      ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6528            l_num_warn := l_num_warn + 1;
6529      END IF;
6530 
6531 
6532   END IF;
6533 
6534   -- 19.55 Generate BOL if p_bol_flag is set
6535   -- 2121399
6536   -- Moved Create_Bol and Print_document_sets APIs outside the main For Loop and
6537   -- and placed it after the call to Check_Delivery_for_tolerances is made.
6538   IF l_debug_on THEN
6539     WSH_DEBUG_SV.log(l_module_name,'u_del_rows count', u_del_rows.count);
6540   END IF;
6541 
6542   FOR i IN 1..u_del_rows.count LOOP
6543 
6544     IF l_debug_on THEN
6545       WSH_DEBUG_SV.log(l_module_name,'i', i);
6546       WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag count', l_with_mc_trip_flag.count);
6547       WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab count', l_unassign_all_flag_tab.count);
6548       WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6549       WSH_DEBUG_SV.log(l_module_name,'u_del_rows i', u_del_rows(i));
6550     END IF;
6551 
6552     OPEN  del_legs (u_del_rows(i));
6553     FETCH del_legs INTO l_pickup_stop_id, l_dropoff_stop_id, l_delivery_leg_id, l_parent_delivery_id;
6554     CLOSE del_legs;
6555 
6556     IF l_debug_on THEN
6557       WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id', l_pickup_stop_id);
6558       WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id', l_dropoff_stop_id);
6559       WSH_DEBUG_SV.log(l_module_name,'l_delivery_leg_id', l_delivery_leg_id);
6560       WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6561     END IF;
6562 
6563      --Bug 5255366 (The above cursor can fetch parent-del-id of newly created trip hence can be null)
6564      --            (Hence the second fetch is required)
6565      IF l_parent_delivery_id IS NULL THEN
6566 
6567        IF l_debug_on THEN
6568          WSH_DEBUG_SV.log(l_module_name,'p_del_rows i', p_del_rows(i));
6569        END IF;
6570 
6571          OPEN get_consol_del(p_del_rows(i));
6572          FETCH get_consol_del
6573          INTO l_parent_delivery_id;
6574          CLOSE get_consol_del;
6575      END IF;
6576 
6577     IF l_debug_on THEN
6578       WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6579     END IF;
6580 
6581     --Bug 3685366
6582     l_dummy_doc_set(1).bol_error_flag:='N';
6583     --
6584 
6585     IF l_debug_on THEN
6586       WSH_DEBUG_SV.log(l_module_name,'p_bol_flag', p_bol_flag);
6587       WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag', l_with_mc_trip_flag(i));
6588       WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab', l_unassign_all_flag_tab(i));
6589       WSH_DEBUG_SV.log(l_module_name,'p_mc_bol_flag', p_mc_bol_flag);
6590     END IF;
6591 
6592     IF ((p_bol_flag ='Y') AND (NOT l_with_mc_trip_flag(i)) AND (NOT l_unassign_all_flag_tab(i)) AND (l_pickup_stop_id IS NOT NULL)) THEN
6593 
6594       --Bug 5255366
6595       IF l_parent_delivery_id IS NOT NULL THEN
6596          create_bol( p_delivery_id  => l_parent_delivery_id,
6597          x_return_status  =>    l_return_status);
6598       ELSE
6599          create_bol( p_delivery_id  => u_del_rows(i),
6600          x_return_status  =>    l_return_status);
6601       END IF;
6602 
6603        IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6604 
6605 	IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6606            l_num_error := l_num_error + 1;
6607         ELSE
6608      	   --Bug 3685366
6609 	   l_dummy_doc_set(1).bol_error_flag:='Y';
6610 	   --
6611 	   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6612            --
6613            -- Debug Statements
6614            --
6615            IF l_debug_on THEN
6616                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6617            END IF;
6618            --
6619 
6620 	   FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6621            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6622            wsh_util_core.add_message(x_return_status);
6623            l_num_warn := l_num_warn + 1;
6624         END IF;
6625        END IF;
6626 
6627      ELSIF ((p_mc_bol_flag ='Y') AND l_with_mc_trip_flag(i) AND (NOT l_unassign_all_flag_tab(i)) AND (l_pickup_stop_id IS NOT NULL)) THEN
6628 
6629        --Bug 5255366
6630        IF l_parent_delivery_id IS NOT NULL THEN
6631           create_bol( p_delivery_id  => l_parent_delivery_id,
6632           x_return_status  =>    l_return_status);
6633        ELSE
6634           create_bol( p_delivery_id  => u_del_rows(i),
6635           x_return_status  =>    l_return_status);
6636        END IF;
6637 
6638        IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6639 
6640 	IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6641            l_num_error := l_num_error + 1;
6642         ELSE
6643 
6644 	   -- Bug 3685366
6645 	     l_dummy_doc_set(1).bol_error_flag:='Y';
6646 	   --
6647 
6648 	   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6649            --
6650            -- Debug Statements
6651            --
6652 
6653 	   IF l_debug_on THEN
6654                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6655            END IF;
6656            --
6657            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6658            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6659            wsh_util_core.add_message(x_return_status);
6660            l_num_warn := l_num_warn + 1;
6661         END IF;
6662        END IF;
6663 
6664     END IF;
6665 
6666     IF l_debug_on THEN
6667       WSH_DEBUG_SV.logmsg(l_module_name,'print doc set');
6668     END IF;
6669 
6670      --19.6. Print document set if p_report_set_id is specified
6671 
6672     IF (l_document_set_id IS NOT NULL) AND (NOT l_unassign_all_flag_tab(i)) THEN
6673 
6674        l_del_tmp_rows.delete;
6675        --Bug 5255366
6676        IF l_parent_delivery_id IS NOT NULL THEN
6677           l_del_tmp_rows(1) := l_parent_delivery_id;
6678        ELSE
6679           l_del_tmp_rows(1) := u_del_rows(i);
6680        END IF;
6681 
6682        -- Start of bugfix 4493263
6683        OPEN c_delv_trip_id_cursor(l_del_tmp_rows(1));
6684        LOOP
6685            FETCH c_delv_trip_id_cursor INTO l_dummy_doc_set(1).p_trip_id;
6686            EXIT WHEN c_delv_trip_id_cursor%NOTFOUND;
6687            --
6688            IF l_debug_on THEN
6689               WSH_DEBUG_SV.log(l_module_name, 'Trip Id : ', l_dummy_doc_set(1).p_trip_id );
6690            END IF;
6691            --
6692        END LOOP;
6693        CLOSE c_delv_trip_id_cursor;
6694        -- End of bugfix 4493263
6695        --
6696        -- Debug Statements
6697        --
6698        IF(l_parent_delivery_id IS NOT NULL) THEN
6699 	IF (l_consol_del_doc_set.COUNT >0 AND(l_consol_del_doc_set.EXISTS(l_parent_delivery_id)))  THEN
6700           l_content_del_flag := FALSE;
6701         END IF;
6702        END IF;
6703        IF l_content_del_flag THEN
6704         IF l_debug_on THEN
6705            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_SETS.PRINT_DOCUMENT_SETS',WSH_DEBUG_SV.C_PROC_LEVEL);
6706         END IF;
6707        --
6708        wsh_document_sets.print_document_sets(
6709                p_report_set_id     =>   l_document_set_id ,
6710                p_organization_id     =>   NULL,
6711                p_trip_ids       =>    l_dummy_rows1,
6712                p_stop_ids       =>    l_dummy_rows1,
6713                p_delivery_ids     =>    l_del_tmp_rows,
6714                p_document_param_info   =>   l_dummy_doc_set,
6715                x_return_status     =>   l_return_status);
6716 
6717        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6718           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6719            l_num_error := l_num_error + 1;
6720           ELSE
6721            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DOC_SUB_ERROR');
6722            --
6723            -- Debug Statements
6724            --
6725            IF l_debug_on THEN
6726                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6727            END IF;
6728            --
6729            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6730            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6731            wsh_util_core.add_message(x_return_status);
6732            l_num_warn := l_num_warn + 1;
6733           END IF;
6734        END IF;
6735       END IF;
6736     END IF;
6737 
6738  --Bug 5255366 (Storing Consol-del-Id in a tab so that multiple Doc set firing is avoided)
6739     IF l_parent_delivery_id IS NOT NULL THEN
6740        IF (NOT l_consol_del_doc_set.EXISTS(l_parent_delivery_id)) THEN
6741 	  l_consol_del_doc_set(l_parent_delivery_id) := l_parent_delivery_id;
6742        END IF;
6743     END IF;
6744      --J TP Release : If TP is installed, confirmed delivery has to be planned
6745     --tkt
6746     IF (NOT l_unassign_all_flag_tab(i) and wsh_util_core.TP_IS_INSTALLED='Y') THEN
6747 
6748        l_del_tmp_rows.delete;
6749        l_del_tmp_rows(1) := u_del_rows(i);
6750 
6751        IF l_debug_on THEN
6752           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
6753        END IF;
6754 
6755        PLAN(p_del_rows      => l_del_tmp_rows,
6756              x_return_status => l_return_status,
6757              p_called_for_sc => TRUE);
6758 
6759        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6760           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6761            l_num_error := l_num_error + 1;
6762           ELSE
6763              IF l_debug_on THEN
6764                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6765              END IF;
6766              FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6767              x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6768              wsh_util_core.add_message(x_return_status);
6769              l_num_warn := l_num_warn + 1;
6770           END IF;
6771        END IF;
6772 
6773     END IF;
6774 
6775     IF l_debug_on THEN
6776       WSH_DEBUG_SV.log(l_module_name,'l_itm_exc_flag count', l_itm_exc_flag.count);
6777     END IF;
6778 
6779     IF l_itm_exc_flag(u_del_rows(i)) = 'Y' THEN
6780 
6781         IF l_debug_on THEN
6782            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',WSH_DEBUG_SV.C_PROC_LEVEL);
6783         END IF;
6784 
6785         WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception
6786                                   (p_delivery_id => u_del_rows(i),
6787                                    p_action_type => 'SHIP_CONFIRM',
6788                                    p_ship_from_location_id =>  l_ship_from_location,
6789                                    x_return_status => l_return_status);
6790 
6791         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6792               l_num_error := l_num_error + 1 ;
6793               l_delivery_id := u_del_rows(i);
6794               raise ship_confirm_error;
6795         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6796               l_num_warn := l_num_warn + 1;
6797         END IF;
6798 
6799     END IF;
6800 
6801     --
6802     -- Debug Statements
6803     --
6804     IF l_debug_on THEN
6805        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
6806     END IF;
6807     --
6808     wsh_new_delivery_actions.update_leg_sequence(
6809       p_delivery_id => u_del_rows(i),
6810       x_return_status => l_return_status);
6811 
6812     IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6813        l_num_error := l_num_error + 1 ;
6814        l_delivery_id := u_del_rows(i);
6815        raise ship_confirm_error;
6816     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6817        l_num_warn := l_num_warn + 1;
6818     END IF;
6819 
6820 
6821 
6822   END LOOP ; ---key loop
6823 
6824 
6825 
6826 
6827 
6828   --/== Workflow Changes
6829   IF (p_intransit_flag = 'N') THEN
6830 	l_defer_interface_flag := 'Y';
6831   ELSE
6832 	l_defer_interface_flag :=  p_defer_interface_flag;
6833   END IF;
6834   --==/
6835 
6836   -- 2121399
6837 
6838   IF l_debug_on THEN
6839     WSH_DEBUG_SV.log(l_module_name,'u_number_of_lpn count', l_with_mc_trip_flag.count);
6840     WSH_DEBUG_SV.log(l_module_name,'u_initial_pickup_date count', u_initial_pickup_date.count);
6841     WSH_DEBUG_SV.log(l_module_name,'u_ultimate_dropoff_date count', u_ultimate_dropoff_date.count);
6842     WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6843   END IF;
6844 
6845   -- BULK UPDATE  FOR ALL DELIVERIES IN p_del_rows
6846 
6847   -- Update the delivery record with status code and confirm date
6848   -- 2052673  - modified the way in which the number_of_lpn is being updated.
6849         -- 2335270  included last_updated_by and last_update_login
6850   FORALL i IN 1..u_del_rows.count
6851     UPDATE wsh_new_deliveries
6852     SET status_code = u_status_code(i),
6853       confirm_date = sysdate,
6854     confirmed_by = nvl(confirmed_by, l_user_name),
6855       -- number_of_lpn = decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)) , --Bug 1729723
6856     number_of_lpn = decode(number_of_lpn, null, decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)), number_of_lpn),
6857     initial_pickup_date = u_initial_pickup_date(i) ,
6858     ultimate_dropoff_date = u_ultimate_dropoff_date(i) ,
6859     --OTM R12, when setting delivery to closed, set the tms flag
6860     TMS_INTERFACE_FLAG = DECODE(l_gc3_is_installed,
6861                                 'Y', DECODE(NVL(u_status_code(i), 'XXXXX'),
6862                                             'CL', DECODE(NVL(tms_interface_flag,
6863                                                              WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
6864                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
6865                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
6866                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
6867                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
6868                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
6869                                             NVL(tms_interface_flag,
6870                                                 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
6871                                 NVL(tms_interface_flag,
6872                                     WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
6873     --END OTM R12
6874     last_update_date    = SYSDATE  ,
6875     last_updated_by    = l_user_id,
6876     last_update_login  = l_login_id,
6877     --/==Workflow Changes
6878     del_wf_intransit_attr = decode(p_intransit_flag,'Y','I','X'),
6879     del_wf_close_attr = decode(p_close_flag,'Y','I','X'),
6880     del_wf_interface_attr = decode(l_defer_interface_flag,'N','I','X')
6881     --==/
6882     WHERE  delivery_id = u_del_rows(i);
6883 
6884     IF l_mdc_co_del_tab.count > 0 THEN
6885 
6886         Confirm_Consolidation_Delivery(
6887              p_consol_del_tab   => l_mdc_co_del_tab,
6888              x_return_status    => l_return_status);
6889 
6890         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6891               raise ship_confirm_error;
6892         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6893               l_num_warn := l_num_warn + 1;
6894         END IF;
6895 
6896     END IF;
6897 
6898 
6899     --/== Workflow Changes - Controlling Workflow
6900     IF l_debug_on THEN
6901         WSH_DEBUG_SV.log(l_module_name,'L_ENABLE_SC_WF',l_enable_sc_wf);
6902         WSH_DEBUG_SV.log(l_module_name,'Controlling-scpod rows count',l_scpod_wf_del_rows.count);
6903     END IF;
6904     FOR k IN 1..l_scpod_wf_del_rows.count LOOP
6905         l_ctr := l_scpod_wf_del_rows(k);
6906 	IF l_debug_on THEN
6907 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_SCPOD_C_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
6908 	END IF;
6909 
6910         WSH_WF_STD.Start_Scpod_C_Process( p_entity_id => u_del_rows(l_ctr),
6911                                           p_organization_id => u_organization_id(l_ctr),
6912                                           x_process_started => l_process_started,
6913                                           x_return_status => l_return_status);
6914 	IF l_debug_on THEN
6915 	    WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
6916 	    WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
6917 	END IF;
6918 
6919         IF (l_process_started = 'Y' OR l_process_started = 'E')	THEN
6920 		l_aname_text(l_aname_text.COUNT + 1) := 'INTRANSIT_FLAG';
6921 		l_avalue_text(l_avalue_text.COUNT + 1) := P_INTRANSIT_FLAG;
6922 		l_aname_text(l_aname_text.COUNT + 1) := 'ACTION_FLAG';
6923 		l_avalue_text(l_avalue_text.COUNT + 1) := P_ACTION_FLAG;
6924 		l_aname_text(l_aname_text.COUNT + 1) := 'CLOSE_TRIP_FLAG';
6925 		l_avalue_text(l_avalue_text.COUNT + 1) := P_CLOSE_FLAG;
6926 		l_aname_text(l_aname_text.COUNT + 1) := 'STAGE_DEL_FLAG';
6927 		l_avalue_text(l_avalue_text.COUNT + 1) := P_STAGE_DEL_FLAG;
6928 		l_aname_text(l_aname_text.COUNT + 1) := 'SEND_945_FLAG';
6929 		l_avalue_text(l_avalue_text.COUNT + 1) := P_SEND_945_FLAG;
6930 		l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_BOL_FLAG';
6931 		l_avalue_text(l_avalue_text.COUNT + 1) := P_BOL_FLAG;
6932 		l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_MC_BOL_FLAG';
6933 		l_avalue_text(l_avalue_text.COUNT + 1) := P_MC_BOL_FLAG;
6934 		l_aname_text(l_aname_text.COUNT + 1) := 'SHIP_METHOD_CODE';
6935 		l_avalue_text(l_avalue_text.COUNT + 1) := p_ship_method;
6936 		l_aname_text(l_aname_text.COUNT + 1) := 'DEFER_INTERFACE_FLAG';
6937    		l_avalue_text(l_avalue_text.COUNT + 1) := l_defer_interface_flag;
6938 
6939 
6940 		WF_ENGINE.SetItemAttrTextArray(
6941 			itemtype => 'WSHDEL',
6942 			itemkey  => u_del_rows(l_ctr),
6943 			aname    => l_aname_text,
6944 			avalue   => l_avalue_text);
6945 
6946 		l_aname_num(l_aname_num.COUNT + 1) := 'REPORT_SET_ID';
6947 		l_avalue_num(l_avalue_num.COUNT + 1) := P_REPORT_SET_ID;
6948 
6949 		WF_ENGINE.SetItemAttrNumberArray(
6950 			itemtype => 'WSHDEL',
6951 			itemkey  => u_del_rows(l_ctr),
6952 			aname    => l_aname_num,
6953 			avalue   => l_avalue_num);
6954 
6955 		WF_ENGINE.SetItemAttrDate(
6956 			itemtype => 'WSHDEL',
6957 			itemkey => u_del_rows(l_ctr),
6958 			aname => 'ACTUAL_DATE',
6959 			avalue => P_ACTUAL_DEP_DATE);
6960 
6961           FND_MESSAGE.SET_NAME('WSH','WSH_WF_SCPOD_LAUNCHED');
6962           FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(l_ctr)));
6963           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS,l_module_name);
6964 
6965 	END IF;
6966     END LOOP;
6967     -- Workflow Changes ==/
6968 
6969     FOR z IN 1..u_del_rows.count LOOP
6970     	IF l_debug_on THEN
6971 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.Raise_Event',WSH_DEBUG_SV.C_PROC_LEVEL);
6972 	END IF;
6973 
6974         WSH_WF_STD.Raise_Event(
6975                 p_entity_type => 'DELIVERY',
6976                 p_entity_id   => u_del_rows(z),
6977                 p_event       => 'oracle.apps.wsh.delivery.gen.shipconfirmed',
6978                 p_organization_id => u_organization_id(z),
6979                 x_return_status   => l_wf_rs);
6980 	IF l_debug_on THEN
6981 	    WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
6982 	END IF;
6983 
6984     END LOOP;
6985 
6986   /* H integration: 945 send document  wrudge */
6987   -- Send outbound documents if enabled and deliveries have WSH lines.
6988   IF p_send_945_flag = 'Y' THEN
6989 
6990     FOR i IN 1..u_del_rows.count LOOP
6991       IF u_wsh_lines_exist(i) > 0 THEN
6992         --
6993         -- Debug Statements
6994         --
6995         IF l_debug_on THEN
6996             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRANSACTIONS_UTIL.SEND_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
6997         END IF;
6998         --
6999         wsh_transactions_util.send_document(
7000         p_entity_id    => u_del_rows(i),
7001         p_entity_type  => 'DLVY',
7002         p_action_type  => 'A',
7003         p_document_type   => 'SA',
7004         p_organization_id => u_organization_id(i),
7005         x_return_status  => l_return_status);
7006         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7007           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7008             l_num_error := l_num_error + 1;
7009           ELSE
7010             /* new message: WSH_DEL_OUTBOUND_FAILED, token DEL_NAME */
7011             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_OUTBOUND_FAILED');
7012             --
7013             -- Debug Statements
7014             --
7015             IF l_debug_on THEN
7016                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7017             END IF;
7018             --
7019             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
7020             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7021             wsh_util_core.add_message(x_return_status);
7022             l_num_warn := l_num_warn + 1;
7023           END IF;
7024         END IF;
7025       END IF;  -- u_wsh_lines_exist(i) > 0
7026     END LOOP;
7027 
7028   END IF; -- p_send_945_flag = 'Y'
7029 
7030 
7031 
7032     -- Remove stops that have deliveries with ITM exceptions logged
7033     -- against them from the table of stops to be closed.
7034 
7035     if u_stop_rows.count > 0 then
7036 
7037        FOR i IN u_stop_rows.FIRST .. u_stop_rows.LAST LOOP
7038 
7039            IF l_itm_stops_tab.exists(u_stop_rows(i)) THEN
7040 
7041               u_stop_rows.delete(i);
7042 
7043            END IF;
7044 
7045        END LOOP;
7046 
7047     END IF;
7048 
7049     -- Close the Autocreated Trip-Stops
7050 
7051     if u_stop_rows.count > 0 then
7052 
7053        IF l_debug_on THEN
7054            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7055        END IF;
7056        --
7057        wsh_trip_stops_actions.change_status(
7058             p_stop_rows => u_stop_rows,
7059             p_action  => 'CLOSE',
7060             p_actual_date => nvl(p_actual_dep_date,sysdate),
7061             p_defer_interface_flag => p_defer_interface_flag,   -- bug 1578251
7062             x_return_status => l_return_status,
7063 --tkt
7064             p_caller => p_caller);
7065 
7066        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7067         x_return_status := l_return_status;
7068         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7069           l_num_warn := l_num_warn + 1;
7070         ELSE
7071           l_num_error := l_num_error + 1;
7072         END IF;
7073        END IF;
7074 
7075     End if ;
7076 
7077     -- LPN CONV rv
7078     -- Need to delete all the WMS LPNs that were unassigned and unpacked during Ship Confirm
7079     --
7080     IF (l_wms_enabled_flag) THEN
7081     --{
7082         for l_delete_cnt_rec in l_delete_wms_empty_cnt_csr loop
7083         --{
7084             --
7085             --
7086             -- Debug Statements
7087             --
7088             IF l_debug_on THEN
7089                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.DELETE_CONTAINERS',WSH_DEBUG_SV.C_PROC_LEVEL);
7090             END IF;
7091             --
7092             wsh_container_actions.delete_containers (
7093               p_container_id  => l_delete_cnt_rec.delivery_detail_id,
7094               x_return_status => l_return_status);
7095             --
7096             --
7097             -- Debug Statements
7098             --
7099             IF l_debug_on THEN
7100               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
7101             END IF;
7102             --
7103             wsh_util_core.api_post_call(
7104               p_return_status => l_return_status,
7105               x_num_warnings  => l_num_error,
7106               x_num_errors    => l_num_warn,
7107               p_raise_error_flag => FALSE);
7108             --
7109         --}
7110         end loop;
7111     --}
7112     END IF;
7113 
7114    -- 20. set summary messages for warnings and errors
7115 
7116   IF (l_num_error > 0) THEN
7117      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7118      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7119      wsh_util_core.add_message(x_return_status);
7120      rollback to savepoint start_ship_confirm_delivery;
7121 
7122   ELSE
7123 
7124     -- Set Message as Number of Deliveries as Confirmed, In-Transit and Closed
7125     IF ( l_close_del_cnt <> 0 ) THEN
7126 
7127        FND_MESSAGE.SET_NAME('WSH','WSH_CL_DELIVERIES');
7128        FND_MESSAGE.SET_TOKEN('CL_DEL',l_close_del_cnt);
7129        wsh_util_core.add_message(x_return_status);
7130 
7131     END IF;
7132 
7133     IF  (l_confirm_del_cnt <> 0) THEN
7134 
7135        FND_MESSAGE.SET_NAME('WSH','WSH_CO_DELIVERIES');
7136        FND_MESSAGE.SET_TOKEN('CO_DEL',l_confirm_del_cnt);
7137        wsh_util_core.add_message(x_return_status);
7138 
7139     END IF;
7140 
7141     if (l_num_warn > 0) THEN
7142      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7143      x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7144      wsh_util_core.add_message(x_return_status);
7145     elsif (p_del_rows.count > 1) THEN
7146      -- bug 2523074 (frontported bug 2508132):
7147      -- if multiple deliveries are processed, show summary message,
7148      -- so that the user does not think the first message (e.g.,
7149      -- request number) applies to all deliveries.
7150      FND_MESSAGE.SET_NAME('WSH', 'WSH_DEL_CONFIRM_SUCCESS');
7151      wsh_util_core.add_message(x_return_status);
7152     else
7153      FND_MESSAGE.SET_NAME('WSH', 'WSH_ONE_DEL_CONFIRM_SUCCESS');
7154      wsh_util_core.add_message(x_return_status);
7155     end if;
7156   END IF;
7157 
7158   WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7159                                     x_msg_rec_count => l_msg_rec_count,
7160                                     x_return_status => l_return_status);
7161   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7162      raise ship_confirm_error;
7163   END IF;
7164 
7165 --
7166 -- Debug Statements
7167 --
7168 IF l_debug_on THEN
7169     WSH_DEBUG_SV.pop(l_module_name);
7170 END IF;
7171 --
7172   EXCEPTION
7173     WHEN FND_API.G_EXC_ERROR THEN
7174 
7175       IF (Get_Trip%ISOPEN) THEN
7176         CLOSE Get_Trip;
7177       END IF;
7178 
7179       IF (get_delivery_name%ISOPEN) THEN
7180         CLOSE get_delivery_name;
7181       END IF;
7182 
7183       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7184       --
7185       IF l_debug_on THEN
7186         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7187         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7188       END IF;
7189       --
7190     WHEN ship_confirm_error  THEN
7191 
7192       IF (Get_Trip%ISOPEN) THEN
7193         CLOSE Get_Trip;
7194       END IF;
7195 
7196       IF (get_delivery_name%ISOPEN) THEN
7197         CLOSE get_delivery_name;
7198       END IF;
7199 
7200       FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
7201       --
7202       -- Debug Statements
7203       --
7204       IF l_debug_on THEN
7205           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7206       END IF;
7207       --
7208       FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
7209       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7210       wsh_util_core.add_message(x_return_status);
7211       WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7212                                         x_msg_rec_count => l_msg_rec_count,
7213                                         x_return_status => l_return_status);
7214 
7215 --
7216 -- Debug Statements
7217 --
7218 IF l_debug_on THEN
7219     WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_CONFIRM_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7220     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_CONFIRM_ERROR');
7221 END IF;
7222 --
7223     WHEN record_locked THEN
7224 
7225       IF (Get_Trip%ISOPEN) THEN
7226         CLOSE Get_Trip;
7227       END IF;
7228 
7229       IF (get_delivery_name%ISOPEN) THEN
7230         CLOSE get_delivery_name;
7231       END IF;
7232 
7233      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
7234      wsh_util_core.add_message(x_return_status);
7235      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7236      WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7237                                        x_msg_rec_count => l_msg_rec_count,
7238                                        x_return_status => l_return_status);
7239 
7240 --
7241 -- Debug Statements
7242 --
7243 IF l_debug_on THEN
7244     WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7245     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
7246 END IF;
7247 --
7248     WHEN others THEN
7249 
7250       IF (Get_Trip%ISOPEN) THEN
7251         CLOSE Get_Trip;
7252       END IF;
7253 
7254       IF (get_delivery_name%ISOPEN) THEN
7255         CLOSE get_delivery_name;
7256       END IF;
7257 
7258       IF get_del_first_trip%isopen THEN
7259          CLOSE get_del_first_trip;
7260       END IF;
7261       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CONFIRM_DELIVERY');
7262       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7263 
7264       --
7265       -- Debug Statements
7266       --
7267       IF l_debug_on THEN
7268           WSH_DEBUG_SV.logmsg(l_module_name,  'UNEXPECTED ERROR : ' || SQLERRM  );
7269       END IF;
7270       --
7271       WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7272                                         x_msg_rec_count => l_msg_rec_count,
7273                                         x_return_status => l_return_status);
7274 
7275 --
7276 -- Debug Statements
7277 --
7278 IF l_debug_on THEN
7279     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7280     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7281 END IF;
7282 --
7283 END Confirm_Delivery ;
7284 
7285 
7286 -- J-IB-NPARIKH---{
7287 --
7288 --========================================================================
7289 -- PROCEDURE : setInTransit
7290 --
7291 -- PARAMETERS: p_in_rec          Delivery information record
7292 --             x_return_status   Return status of the API
7293 --
7294 -- COMMENT   : This procedure sets delivery to in-transit.
7295 --             This is called by stop close API/Group API
7296 --
7297 --             It performs the following steps:
7298 --             01. Update delivery lines to status "C"
7299 --             02. For containers, update shipped quantity to 1
7300 --             03. Update INV/OE interface flag to N for non-containers
7301 --             04. Update INV/OE interface flag to Null for containers
7302 --             05. Update delivery status to IT
7303 --             06. Update delivery initial pickup date to actual departure date of stop
7304 --             07. Update delivery ultimate dropoff date based on actual departure date of stop
7305 --             08. Close delivery exceptions (Pack J Exceptions project)
7306 --
7307 --========================================================================
7308 --
7309 PROCEDURE setInTransit
7310             (
7311               p_in_rec             IN          WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7312               x_return_status      OUT NOCOPY  VARCHAR2
7313             )
7314 IS
7315 --{
7316     l_user_id     NUMBER;
7317     l_login_id    NUMBER;
7318     l_num_warnings          NUMBER;
7319     l_num_errors            NUMBER;
7320     --
7321 
7322     l_msg_count       NUMBER;
7323     l_msg_data        VARCHAR2(4000);
7324     l_return_status   VARCHAR2(1);
7325 
7326     l_detail_tab     WSH_UTIL_CORE.id_tab_type; -- DBI Project
7327     l_dbi_rs                      VARCHAR2(1); -- Return Status from DBI API
7328 
7329     --/== Workflow Changes
7330     l_org_id NUMBER;
7331     l_wf_rs VARCHAR2(1);
7332     l_override_wf VARCHAR2(1);
7333     l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7334     l_purged_count NUMBER;
7335     --==/
7336 
7337     -- LPN CONV. rv
7338     cursor l_get_cnt_attr_csr(p_delivery_id IN NUMBER) is
7339     select wdd.organization_id organization_id,
7340            nvl(wdd.line_direction,'O') line_direction,
7341            wdd.delivery_detail_id delivery_detail_id
7342     from   wsh_delivery_assignments_v wda,
7343            wsh_delivery_details wdd
7344     where  wda.delivery_detail_id = wdd.delivery_detail_id
7345     and    wdd.container_flag IN ('Y','C')
7346     and    nvl(wdd.line_direction,'O') IN ('O', 'IO')
7347     and    wda.delivery_id = p_delivery_id;
7348 
7349     l_wms_org VARCHAR2(10);
7350     l_sync_tmp_wms_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7351     l_sync_tmp_inv_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7352 
7353     l_child_cnt_counter NUMBER;
7354     l_cnt_wms_counter NUMBER;
7355     l_cnt_inv_counter NUMBER;
7356     -- LPN CONV. rv
7357 
7358     l_debug_on    BOOLEAN;
7359     --
7360     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setInTransit';
7361 --}
7362 BEGIN
7363 --{
7364     --SAVEPOINT dlvy_setInTransit_begin_sp;
7365     --
7366     -- Debug Statements
7367     --
7368     --
7369     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7370     --
7371     IF l_debug_on IS NULL
7372     THEN
7373       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7374     END IF;
7375     --
7376     IF l_debug_on THEN
7377       WSH_DEBUG_SV.push(l_module_name);
7378       --
7379       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7380       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
7381       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7382       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7383       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7384       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
7385       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7386       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id     ', p_in_rec.stop_id     );
7387     END IF;
7388     --
7389     l_user_id       := FND_GLOBAL.user_id;
7390     l_login_id      := FND_GLOBAL.login_id;
7391     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7392     l_num_warnings  := 0;
7393     l_num_errors    := 0;
7394 
7395     --
7396     --
7397     -- Bug: 1563304 : Update all its delivery_details to 'C'
7398     -- Bug 1578251: update interfaced_flags = 'N' to improve
7399     --   performance in filtering records ready to interface
7400     --   but not yet interfaced.
7401     /* H Integration: 940/945 do not update cancelled delivery lines wrudge */
7402     --  Bug 2335270 : last_update_date = SYSDATE is included in
7403     --                the update statement
7404     --
7405     -- LPN CONV. rv
7406     --
7407     --
7408     IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7409     THEN
7410     --{
7411         --l_child_cnt_counter := 1;
7412         l_cnt_wms_counter := 1;
7413         l_cnt_inv_counter := 1;
7414         FOR child_cnt_rec in l_get_cnt_attr_csr(p_in_rec.delivery_id)  LOOP
7415         --{
7416             --
7417             IF l_debug_on THEN
7418               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
7419             END IF;
7420             --
7421             l_wms_org := wsh_util_validate.check_wms_org(child_cnt_rec.organization_id);
7422             --
7423 
7424             IF(l_wms_org = 'Y') THEN
7425               l_sync_tmp_wms_recTbl.delivery_detail_id_tbl(l_cnt_wms_counter) := child_cnt_rec.delivery_detail_id;
7426               l_sync_tmp_wms_recTbl.operation_type_tbl(l_cnt_wms_counter) := 'UPDATE';
7427               l_cnt_wms_counter := l_cnt_wms_counter +1;
7428             ELSIF (l_wms_org = 'N') THEN
7429               l_sync_tmp_inv_recTbl.delivery_detail_id_tbl(l_cnt_inv_counter) := child_cnt_rec.delivery_detail_id;
7430               l_sync_tmp_inv_recTbl.operation_type_tbl(l_cnt_inv_counter) := 'UPDATE';
7431               l_cnt_inv_counter := l_cnt_inv_counter +1;
7432             END IF;
7433             --
7434         --}
7435         END LOOP;
7436         --
7437         IF l_debug_on THEN
7438           wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_wms_recTbl', l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count);
7439           wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_inv_recTbl', l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count);
7440         END IF;
7441         --
7442         IF  (WSH_WMS_LPN_GRP.GK_WMS_UPD_STS OR WSH_WMS_LPN_GRP.GK_WMS_UPD_QTY)
7443         AND l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count > 0
7444         THEN
7445         --{
7446             --
7447             IF l_debug_on THEN
7448               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7449             END IF;
7450             --
7451             WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7452               (
7453                 p_sync_tmp_recTbl   => l_sync_tmp_wms_recTbl,
7454                 x_return_status     => l_return_status
7455               );
7456             --
7457             IF l_debug_on THEN
7458                WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7459             END IF;
7460             --
7461             WSH_UTIL_CORE.API_POST_CALL
7462               (
7463                 p_return_status => l_return_status,
7464                 x_num_warnings  => l_num_warnings,
7465                 x_num_errors    => l_num_errors
7466               );
7467             --
7468         --}
7469         ELSIF (WSH_WMS_LPN_GRP.GK_INV_UPD_STS OR WSH_WMS_LPN_GRP.GK_INV_UPD_QTY)
7470         AND l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count > 0
7471         THEN
7472         --{
7473             --
7474             IF l_debug_on THEN
7475               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7476             END IF;
7477             --
7478             WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7479               (
7480                 p_sync_tmp_recTbl   => l_sync_tmp_inv_recTbl,
7481                 x_return_status     => l_return_status
7482               );
7483             --
7484             IF l_debug_on THEN
7485                WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7486             END IF;
7487             --
7488             WSH_UTIL_CORE.API_POST_CALL
7489               (
7490                 p_return_status => l_return_status,
7491                 x_num_warnings  => l_num_warnings,
7492                 x_num_errors    => l_num_errors
7493               );
7494             --
7495         --}
7496         END IF;
7497     --}
7498     END IF;
7499     -- LPN CONV. rv
7500     UPDATE wsh_Delivery_details
7501     SET    released_Status     = 'C',
7502            shipped_quantity    = DECODE(container_flag, 'Y', 1, shipped_quantity),
7503            inv_interfaced_flag = DECODE(container_flag, 'N', NVL(inv_interfaced_flag,'N'), NULL),
7504            oe_interfaced_flag  = DECODE(container_flag, 'N', NVL(oe_interfaced_flag, 'N'), NULL),
7505            last_update_date    = SYSDATE,
7506            last_updated_by     = l_user_id,
7507            last_update_login   = l_login_id
7508     WHERE  delivery_detail_id IN (
7509                                     SELECT delivery_Detail_id
7510                                     FROM   wsh_delivery_assignments_v
7511                                     WHERE  delivery_id = p_in_rec.delivery_id
7512                                 )
7513     AND    released_status    <> 'D'
7514     RETURNING delivery_detail_id BULK COLLECT INTO l_detail_tab; -- Added for DBI Project
7515     --
7516     IF l_debug_on THEN
7517       WSH_DEBUG_SV.log(l_module_name,'Number of Lines updated',SQL%ROWCOUNT);
7518     END IF;
7519     --
7520     --
7521     -- DBI Project
7522     -- Update of wsh_delivery_details where requested_quantity/released_status
7523     -- are changed, call DBI API after the update.
7524     -- DBI API will check if DBI is installed
7525     IF l_debug_on THEN
7526       WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_detail_tab.count);
7527     END IF;
7528     WSH_INTEGRATION.DBI_Update_Detail_Log
7529       (p_delivery_detail_id_tab => l_detail_tab,
7530        p_dml_type               => 'UPDATE',
7531        x_return_status          => l_dbi_rs);
7532 
7533     IF l_debug_on THEN
7534       WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7535     END IF;
7536     -- Only Handle Unexpected error
7537     IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7538       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7539     END IF;
7540     -- End of Code for DBI Project
7541     --
7542     --
7543     UPDATE wsh_new_deliveries
7544     SET    initial_pickup_date   = p_in_rec.actual_date,
7545            ultimate_dropoff_date = GREATEST(
7546                                              NVL(ultimate_dropoff_date,p_in_rec.actual_date),
7547                                              p_in_rec.actual_date
7548                                            ),
7549            status_code           = 'IT',
7550            last_update_date      = SYSDATE  ,
7551            last_updated_by       = l_user_id,
7552            last_update_login     = l_login_id
7553     WHERE  delivery_id           = p_in_rec.delivery_id
7554     RETURNING organization_id INTO l_org_id;
7555     --
7556     IF (SQL%NOTFOUND)
7557     THEN
7558     --{
7559         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7560         l_num_errors := l_num_errors + 1;
7561         wsh_util_core.add_message(x_return_status,l_module_name);
7562     --}
7563     ELSE
7564         --/== Workflow Changes
7565         l_del_entity_ids(1) := p_in_rec.delivery_id;
7566         l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7567         IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7568             IF l_debug_on THEN
7569                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.LOG_WF_EXCEPTION', WSH_DEBUG_SV.C_PROC_LEVEL);
7570             END IF;
7571             WSH_WF_STD.Log_Wf_Exception(p_entity_type    => 'DELIVERY',
7572 	                                p_entity_id      => p_in_rec.delivery_id,
7573 				        p_logging_entity => 'SHIPPER',
7574 				        p_exception_name => 'WSH_DEL_SCPOD_PURGED',
7575 				        x_return_status  => l_wf_rs);
7576             IF l_debug_on THEN
7577                 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7578             END IF;
7579 
7580             IF l_debug_on THEN
7581                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
7582             END IF;
7583 
7584 	    WSH_WF_STD.Purge_Entity(p_entity_type   => 'DELIVERY',
7585 				    p_entity_ids    => l_del_entity_ids,
7586 				    p_docommit      => FALSE,
7587 				    x_success_count => l_purged_count,
7588 				    x_return_status => l_wf_rs);
7589             IF l_debug_on THEN
7590                 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
7591                 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7592 	    END IF;
7593 
7594         END IF;
7595 
7596 	IF l_debug_on THEN
7597 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7598 	END IF;
7599 
7600 	WSH_WF_STD.RAISE_EVENT(p_entity_type     =>  'DELIVERY',
7601 			       p_entity_id       =>  p_in_rec.delivery_id,
7602 			       p_event           =>  'oracle.apps.wsh.delivery.gen.setintransit',
7603 			       p_organization_id =>  l_org_id,
7604 			       x_return_status   =>  l_wf_rs);
7605 
7606 	IF l_debug_on THEN
7607 		WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7608 	END IF;
7609         -- Workflow Changes ==/
7610     END IF;
7611 
7612    --
7613 
7614    -- Close Exceptions for delivery and its contents
7615    IF l_debug_on THEN
7616       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7617    END IF;
7618    WSH_XC_UTIL.Close_Exceptions (
7619                                      p_api_version           => 1.0,
7620                                      x_return_status         => l_return_status,
7621                                      x_msg_count             => l_msg_count,
7622                                      x_msg_data              => l_msg_data,
7623                                      p_logging_entity_id     => p_in_rec.delivery_id,
7624                                      p_logging_entity_name   => 'DELIVERY',
7625                                      p_consider_content      => 'Y',
7626 --tkt
7627                                      p_caller                => p_in_rec.caller
7628                                   ) ;
7629 
7630    IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
7631         x_return_status := l_return_status;
7632         wsh_util_core.add_message(x_return_status);
7633         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
7634               l_num_errors := l_num_errors + 1;
7635               RAISE FND_API.G_EXC_ERROR;
7636         ELSE
7637               l_num_warnings := l_num_warnings + 1 ;
7638         END IF;
7639    END IF;
7640 
7641    IF l_num_errors > 0
7642    THEN
7643         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
7644    ELSIF l_num_warnings > 0
7645    THEN
7646         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7647    ELSE
7648         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7649    END IF;
7650    --
7651    --
7652     --
7653     -- Debug Statements
7654     --
7655     IF l_debug_on THEN
7656         WSH_DEBUG_SV.pop(l_module_name);
7657     END IF;
7658     --
7659 --}
7660 EXCEPTION
7661 --{
7662     WHEN FND_API.G_EXC_ERROR THEN
7663 
7664       --ROLLBACK TO dlvy_setInTransit_begin_sp;
7665       --
7666       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7667       --
7668       IF l_debug_on THEN
7669         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7670         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7671       END IF;
7672       --
7673     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7674 
7675       --ROLLBACK TO dlvy_setInTransit_begin_sp;
7676       --
7677       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7678       --
7679       IF l_debug_on THEN
7680         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7681         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7682       END IF;
7683       --
7684     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
7685       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7686       --
7687       IF l_debug_on THEN
7688         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7689         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
7690       END IF;
7691      WHEN others THEN
7692         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setInTransit',l_module_name);
7693         --
7694         --ROLLBACK TO dlvy_setInTransit_begin_sp;
7695         --
7696         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7697         --
7698         -- Debug Statements
7699         --
7700         IF l_debug_on THEN
7701             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7702         END IF;
7703         --
7704 --}
7705 END setInTransit;
7706 --
7707 --
7708 --
7709 --========================================================================
7710 -- PROCEDURE : setClose
7711 --
7712 -- PARAMETERS: p_in_rec          Delivery information record
7713 --             x_return_status   Return status of the API
7714 --
7715 -- COMMENT   : This procedure sets delivery to CLOSED.
7716 --             This is called by stop close API/Group API
7717 --
7718 --             It performs the following steps:
7719 --             01. Update delivery status to CL
7720 --             02. Update delivery ultimate dropoff date based on actual departure date of stop
7721 --             03. Close delivery exceptions (Pack J Exceptions project)
7722 --             04. Close stops exclusively owened by delivery.
7723 --
7724 --========================================================================
7725 --
7726 PROCEDURE setClose
7727             (
7728               p_in_rec             IN          WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7729               x_return_status      OUT NOCOPY  VARCHAR2
7730             )
7731 IS
7732 --{
7733     CURSOR delivery_stops_csr (p_delivery_id NUMBER)
7734     IS
7735     SELECT stop_id
7736     FROM   wsh_delivery_legs wdl,
7737            wsh_Trip_stops    wts
7738     WHERE  wdl.delivery_id = p_delivery_id
7739     AND    (
7740                 wdl.pick_up_stop_id  = wts.stop_id
7741              OR wdl.drop_off_stop_id = wts.stop_id
7742            )
7743     AND    wts.status_code <> 'CL';
7744     --
7745     --
7746     l_num_warnings          NUMBER;
7747     l_num_errors            NUMBER;
7748     l_return_status         VARCHAR2(10);
7749     --
7750     l_user_id     NUMBER;
7751     l_login_id    NUMBER;
7752     l_cnt         NUMBER := 0;
7753     l_stop_rows   wsh_util_core.id_tab_type;
7754 
7755     l_msg_count       NUMBER;
7756     l_msg_data        VARCHAR2(4000);
7757 
7758     --/== Workflow Changes
7759     l_org_id NUMBER;
7760     l_wf_rs VARCHAR2(1);
7761     l_override_wf VARCHAR2(1);
7762     l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7763     l_purged_count NUMBER;
7764     --==/
7765 
7766     l_gc3_is_installed	   VARCHAR2(1); --OTM R12
7767 
7768     --
7769     l_debug_on    BOOLEAN;
7770     --
7771     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setClose';
7772 --}
7773 BEGIN
7774 --{
7775     --SAVEPOINT dlvy_close_begin_sp;
7776     --
7777     -- Debug Statements
7778     --
7779     --
7780     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7781     --
7782     IF l_debug_on IS NULL
7783     THEN
7784       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7785     END IF;
7786     --
7787     IF l_debug_on THEN
7788       WSH_DEBUG_SV.push(l_module_name);
7789       --
7790       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7791       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
7792       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7793       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7794       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7795       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
7796       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7797     END IF;
7798     --
7799     l_user_id       := FND_GLOBAL.user_id;
7800     l_login_id      := FND_GLOBAL.login_id;
7801     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7802     l_num_warnings  := 0;
7803     l_num_errors    := 0;
7804     --
7805     --OTM R12
7806     l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
7807 
7808     IF l_gc3_is_installed IS NULL THEN
7809       l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
7810     END IF;
7811     --
7812     --
7813     UPDATE wsh_new_deliveries
7814     SET    ultimate_dropoff_date = GREATEST(
7815                                              nvl(ultimate_dropoff_date,p_in_rec.actual_date),
7816                                              p_in_rec.actual_date
7817                                            ),
7818            status_code           = 'CL',
7819            --OTM R12, when setting delivery to closed, set tms flag
7820            tms_interface_flag    = DECODE(l_gc3_is_installed,
7821                                           'Y', DECODE(NVL(tms_interface_flag,
7822                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
7823                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7824                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7825                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7826                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7827                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
7828                                           NVL(tms_interface_flag,
7829                                               WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7830            --
7831            last_update_date      = SYSDATE  ,
7832            last_updated_by       = l_user_id,
7833            last_update_login     = l_login_id
7834     WHERE  delivery_id           = p_in_rec.delivery_id
7835     RETURNING organization_id INTO l_org_id;
7836     --
7837     IF (SQL%NOTFOUND)
7838     THEN
7839          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7840          wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
7841          RAISE FND_API.G_EXC_ERROR;
7842     END IF;
7843     --
7844 
7845 
7846     --/== Workflow Changes
7847     l_del_entity_ids(1) := p_in_rec.delivery_id;
7848     l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7849     IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7850         WSH_WF_STD.Log_Wf_Exception('DELIVERY',
7851 		p_in_rec.delivery_id,
7852 		NULL,
7853 		'SHIPPER',
7854 		'WSH_DEL_SCPOD_PURGED',
7855 		l_wf_rs);
7856 	WSH_WF_STD.Purge_Entity(
7857 		p_entity_type => 'DELIVERY',
7858 		p_entity_ids  => l_del_entity_ids,
7859 		p_docommit    => FALSE,
7860 		x_success_count  => l_purged_count,
7861 		x_return_status => l_wf_rs);
7862     END IF;
7863 
7864 
7865     IF l_debug_on THEN
7866 	WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7867     END IF;
7868 
7869     WSH_WF_STD.RAISE_EVENT(p_entity_type  =>  'DELIVERY',
7870 			p_entity_id       =>  p_in_rec.delivery_id,
7871 			p_event           =>  'oracle.apps.wsh.delivery.gen.closed',
7872 			p_organization_id =>  l_org_id,
7873 			x_return_status   =>  l_wf_rs);
7874 
7875     IF l_debug_on THEN
7876 	WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7877     END IF;
7878     -- Workflow Changes ==/
7879 
7880     -- Close Exceptions for delivery and its contents
7881     IF l_debug_on THEN
7882        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7883     END IF;
7884     WSH_XC_UTIL.Close_Exceptions (
7885                                      p_api_version           => 1.0,
7886                                      x_return_status         => l_return_status,
7887                                      x_msg_count             => l_msg_count,
7888                                      x_msg_data              => l_msg_data,
7889                                      p_logging_entity_id     => p_in_rec.delivery_id,
7890                                      p_logging_entity_name   => 'DELIVERY',
7891                                      p_consider_content      => 'Y'
7892                                   ) ;
7893 
7894     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
7895          x_return_status := l_return_status;
7896          wsh_util_core.add_message(x_return_status);
7897          IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
7898                l_num_errors := l_num_errors + 1;
7899                RAISE FND_API.G_EXC_ERROR;
7900          ELSE
7901                l_num_warnings := l_num_warnings + 1 ;
7902          END IF;
7903     END IF;
7904 
7905     IF (p_in_rec.manual_flag = 'Y')
7906     THEN
7907     --{
7908        -- If manual Close then close any stops not closed.
7909        -- Assumption: check_close validates that the delivery
7910        -- exclusively owns these stops.
7911        --
7912        FOR delivery_stops_rec IN delivery_stops_csr(p_in_rec.delivery_id)
7913        LOOP
7914        --{
7915             l_cnt := l_cnt + 1;
7916             --
7917             l_stop_rows(l_cnt) := delivery_stops_rec.stop_id;
7918        --}
7919        END LOOP;
7920        --
7921        IF l_stop_rows.count > 0
7922        THEN
7923        --{
7924             -- since the delivery is CLOSED and it owns these stops exclusively,
7925             -- it is safe to set p_defer_interface_flag = 'Y'
7926                -- because nothing needs to be interfaced
7927             --
7928             -- Debug Statements
7929             --
7930             IF l_debug_on THEN
7931                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7932             END IF;
7933             --
7934             wsh_trip_stops_actions.change_status
7935                 (
7936                   p_stop_rows             => l_stop_rows,
7937                   p_action                => 'CLOSE',
7938                   p_actual_date           => p_in_rec.actual_date,
7939                   p_defer_interface_flag  => 'Y',   -- bug 1578251
7940                   x_return_status         => l_return_status,
7941 --tkt
7942                   p_caller                => p_in_rec.caller
7943                 );
7944             --
7945             wsh_util_core.api_post_call
7946               (
7947                 p_return_status => l_return_status,
7948                 x_num_warnings  => l_num_warnings,
7949                 x_num_errors    => l_num_errors
7950               );
7951             --
7952             --
7953        --}
7954        END IF;
7955     --}
7956     END IF;
7957    --
7958    IF l_num_errors > 0
7959    THEN
7960         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
7961    ELSIF l_num_warnings > 0
7962    THEN
7963         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7964    ELSE
7965         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7966    END IF;
7967    --
7968    --
7969     --
7970     -- Debug Statements
7971     --
7972     IF l_debug_on THEN
7973         WSH_DEBUG_SV.pop(l_module_name);
7974     END IF;
7975     --
7976 --}
7977 EXCEPTION
7978 --{
7979       --
7980     WHEN FND_API.G_EXC_ERROR THEN
7981 
7982       --ROLLBACK TO dlvy_close_begin_sp;
7983       --
7984       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7985       --
7986       IF l_debug_on THEN
7987         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7988         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7989       END IF;
7990       --
7991     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7992 
7993       --ROLLBACK TO dlvy_close_begin_sp;
7994       --
7995       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7996       --
7997       IF l_debug_on THEN
7998         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7999         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8000       END IF;
8001       --
8002     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8003       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8004       --
8005       IF l_debug_on THEN
8006         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8007         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8008       END IF;
8009     WHEN others THEN
8010         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setClose',l_module_name);
8011         --
8012         --ROLLBACK TO dlvy_close_begin_sp;
8013         --
8014         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8015         --
8016         -- Debug Statements
8017         --
8018         IF l_debug_on THEN
8019             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8020         END IF;
8021         --
8022 --}
8023 END setClose;
8024 -- J-IB-NPARIKH---}
8025 
8026 
8027 
8028   PROCEDURE change_Status ( p_del_rows  IN wsh_util_core.id_tab_type,
8029              p_action   IN VARCHAR2,
8030              p_actual_date  IN DATE,
8031              x_return_status OUT NOCOPY  VARCHAR2,
8032              p_caller               IN   VARCHAR2) IS
8033 
8034   CURSOR del_status (l_delivery_id NUMBER) IS
8035   SELECT status_code, name,organization_id
8036   FROM   wsh_new_deliveries
8037   WHERE  delivery_id = l_delivery_id;
8038 
8039   CURSOR delivery_leg_stops(l_delivery_id NUMBER) IS
8040   SELECT dg.pick_up_stop_id,
8041      pu_stop.status_code  pu_status,
8042    dg.drop_off_stop_id,
8043      do_stop.status_code  do_status
8044   FROM   wsh_delivery_legs dg,
8045      wsh_trip_stops pu_stop,
8046      wsh_trip_stops do_stop
8047   WHERE  dg.delivery_id = l_delivery_id
8048   AND pu_stop.stop_id = dg.pick_up_stop_id
8049   AND do_stop.stop_id = dg.drop_off_stop_id;
8050 
8051   trip_cnt NUMBER;
8052   l_old_status VARCHAR2(2);
8053   l_name VARCHAR2(30);
8054   l_status_code VARCHAR2(2);
8055   l_del_rows wsh_util_core.id_tab_type;
8056 
8057   l_delivery_id NUMBER;
8058   l_stop_rows wsh_util_core.id_tab_type;
8059 
8060   l_manual_flag  VARCHAR2(1);
8061   l_close_rs   VARCHAR2(1);
8062 
8063   l_num_error NUMBER := 0;
8064   k      NUMBER := 0;
8065 
8066   --bug 1929104
8067   l_actual_date date;
8068 
8069   others EXCEPTION;
8070 
8071   l_wf_rs VARCHAR2(1);    -- Workflow Changes
8072 
8073 --  bug 2335270
8074   l_user_id  NUMBER;
8075   l_login_id NUMBER;
8076   --
8077   l_debug_on BOOLEAN;
8078   --
8079   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHANGE_STATUS';
8080   --
8081   l_return_status    VARCHAR2(30);
8082   l_allowed          VARCHAR2(10);
8083   l_in_rec           WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type;
8084   --
8085   l_num_warnings          NUMBER;
8086   l_num_errors            NUMBER;
8087   l_num_dels_processed    NUMBER;
8088   l_organization_id       NUMBER;
8089   l_warehouse_type        VARCHAR2 (3);
8090 
8091   BEGIN
8092   --
8093   SAVEPOINT dlvy_chg_status_begin_sp;
8094   --
8095   -- Debug Statements
8096   --
8097   --
8098   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8099   --
8100   IF l_debug_on IS NULL
8101   THEN
8102       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8103   END IF;
8104   --
8105   IF l_debug_on THEN
8106       WSH_DEBUG_SV.push(l_module_name);
8107       --
8108       WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
8109       WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DATE',P_ACTUAL_DATE);
8110   END IF;
8111   --
8112   --
8113   l_user_id := FND_GLOBAL.user_id;
8114   l_login_id := FND_GLOBAL.login_id;
8115   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8116   --
8117   l_num_warnings  := 0;
8118   l_num_errors    := 0;
8119   l_num_dels_processed := 0;
8120   --
8121 
8122    IF (p_del_rows.count = 0) THEN
8123      raise others;
8124    END IF;
8125 
8126      -- Close called from Stop close or from UI.
8127 
8128      IF (p_actual_date IS NULL) THEN
8129       l_manual_flag := 'Y';
8130       l_actual_date := SYSDATE;
8131      ELSE
8132       l_manual_flag := 'N';
8133       l_actual_date := p_actual_date;
8134      END IF;
8135     --
8136    --FOR i IN 1..p_del_rows.count
8137    FOR i IN p_del_rows.FIRST..p_del_rows.LAST
8138    LOOP
8139    --{
8140         BEGIN
8141         --{
8142              SAVEPOINT dlvy_chg_status_sp;
8143              --
8144              OPEN  del_status (p_del_rows(i));
8145              FETCH del_status INTO l_old_status , l_name,l_organization_id;
8146              --
8147              -- J-IB-NPARIKH---{
8148              IF (del_status%NOTFOUND)
8149              THEN
8150                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8151                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8152                 --CLOSE del_status;
8153                 l_num_errors := l_num_errors + 1;
8154                 RAISE FND_API.G_EXC_ERROR;
8155              END IF;
8156              -- J-IB-NPARIKH---}
8157              --
8158              --
8159              CLOSE del_status;
8160 
8161                IF (p_action = 'IN-TRANSIT')
8162                THEN
8163                --{
8164 -- J-IB-NPARIKH---{
8165                     --
8166                     l_in_rec.delivery_id    := p_del_rows(i);
8167                     l_in_rec.name           := l_name;
8168                     l_in_rec.status_code    := l_old_status;
8169                     l_in_rec.put_messages   := TRUE;
8170                     l_in_rec.actual_date    := l_actual_date;
8171                     l_in_rec.manual_flag    := l_manual_flag;
8172 --tkt
8173                     l_in_rec.caller         := p_caller;
8174                     --
8175                     --
8176                     -- Debug Statements
8177                     --
8178                     IF l_debug_on THEN
8179                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8180                     END IF;
8181                     --
8182                     WSH_DELIVERY_VALIDATIONS.check_inTransit
8183                         (
8184                            p_in_rec         => l_in_rec,
8185                            x_return_status  => l_return_status,
8186                            x_allowed        => l_Allowed
8187                         );
8188                     --
8189                     IF l_debug_on THEN
8190                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8191                         WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8192                     END IF;
8193                     --
8194                     WSH_UTIL_CORE.api_post_call
8195                         (
8196                             p_return_status => l_return_status,
8197                             x_num_warnings  => l_num_warnings,
8198                             x_num_errors    => l_num_errors
8199                         );
8200                     --
8201                     IF l_Allowed = 'Y'
8202                     THEN
8203                         NULL;
8204                     ELSIF l_Allowed = 'YW'
8205                     THEN
8206                         l_num_warnings := l_num_warnings + 1;
8207                     ELSIF l_Allowed = 'NW'
8208                     THEN
8209                         l_num_warnings := l_num_warnings + 1;
8210                         RAISE wsh_util_core.g_exc_warning;
8211                     ELSE
8212                         l_num_errors   := l_num_errors   + 1;
8213                         RAISE FND_API.G_EXC_ERROR;
8214                     END IF;
8215                     --
8216                     --
8217                     IF l_debug_on THEN
8218                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setInTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8219                     END IF;
8220                     --
8221                     setInTransit
8222                         (
8223                            p_in_rec         => l_in_rec,
8224                            x_return_status  => l_return_status
8225                         );
8226                     --
8227                     IF l_debug_on THEN
8228                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8229                     END IF;
8230                     --
8231                     WSH_UTIL_CORE.api_post_call
8232                         (
8233                             p_return_status => l_return_status,
8234                             x_num_warnings  => l_num_warnings,
8235                             x_num_errors    => l_num_errors
8236                         );
8237                     --
8238                     l_num_dels_processed := l_num_dels_processed + 1;
8239                --}
8240                ELSIF (p_action = 'CLOSE')
8241                THEN
8242                --{
8243                     --
8244                     l_in_rec.delivery_id    := p_del_rows(i);
8245                     l_in_rec.name           := l_name;
8246                     l_in_rec.status_code    := l_old_status;
8247                     l_in_rec.put_messages   := TRUE;
8248                     l_in_rec.actual_date    := l_actual_date;
8249                     l_in_rec.manual_flag    := l_manual_flag;
8250 --tkt
8251                     l_in_rec.caller         := p_caller;
8252                     --
8253                     --
8254                     -- Debug Statements
8255                     --
8256                     IF l_debug_on THEN
8257                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8258                     END IF;
8259                     --
8260                     WSH_DELIVERY_VALIDATIONS.check_close
8261                         (
8262                            p_in_rec         => l_in_rec,
8263                            x_return_status  => l_return_status,
8264                            x_allowed        => l_Allowed
8265                         );
8266                     --
8267                     IF l_debug_on THEN
8268                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8269                         WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8270                     END IF;
8271                     --
8272                     WSH_UTIL_CORE.api_post_call
8273                         (
8274                             p_return_status => l_return_status,
8275                             x_num_warnings  => l_num_warnings,
8276                             x_num_errors    => l_num_errors
8277                         );
8278                     --
8279                     IF l_Allowed = 'Y'
8280                     THEN
8281                         NULL;
8282                     ELSIF l_Allowed = 'YW'
8283                     THEN
8284                         l_num_warnings := l_num_warnings + 1;
8285                     ELSIF l_Allowed = 'NW'
8286                     THEN
8287                         l_num_warnings := l_num_warnings + 1;
8288                         RAISE wsh_util_core.g_exc_warning;
8289                     ELSE
8290                         l_num_errors   := l_num_errors   + 1;
8291                         RAISE FND_API.G_EXC_ERROR;
8292                     END IF;
8293                     --
8294                     --
8295                     IF l_debug_on THEN
8296                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setClose',WSH_DEBUG_SV.C_PROC_LEVEL);
8297                     END IF;
8298                     --
8299                     setClose
8300                         (
8301                            p_in_rec         => l_in_rec,
8302                            x_return_status  => l_return_status
8303                         );
8304                     --
8305                     IF l_debug_on THEN
8306                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8307                     END IF;
8308                     --
8309                     WSH_UTIL_CORE.api_post_call
8310                         (
8311                             p_return_status => l_return_status,
8312                             x_num_warnings  => l_num_warnings,
8313                             x_num_errors    => l_num_errors
8314                         );
8315                     --
8316                     l_num_dels_processed := l_num_dels_processed + 1;
8317                     -- J-IB-NPARIKH---}
8318 
8319                --}
8320             ELSIF (p_action = 'PACK')
8321             THEN
8322             --{
8323                   --
8324                   -- Debug Statements
8325                   --
8326                   IF l_debug_on THEN
8327                       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PACK',WSH_DEBUG_SV.C_PROC_LEVEL);
8328                   END IF;
8329                   --
8330                   wsh_delivery_validations.check_pack(p_del_rows(i), l_return_status);
8331                         --
8332                         WSH_UTIL_CORE.api_post_call
8333                             (
8334                                 p_return_status => l_return_status,
8335                                 x_num_warnings  => l_num_warnings,
8336                                 x_num_errors    => l_num_errors
8337                             );
8338 
8339                   l_status_code := 'PA';
8340 
8341                   l_num_dels_processed := l_num_dels_processed + 1;
8342             --}
8343               -- Included 'RE-OPEN' in this if condition
8344               -- To fix bug 2359880
8345               -- Public api WSHDEPBB.pls calls with action='RE-OPEN'
8346             ELSIF (p_action IN  ('REOPEN', 'RE-OPEN')) THEN
8347             --{
8348                   --
8349                   -- Debug Statements
8350                   --
8351                   IF l_debug_on THEN
8352                       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_REOPEN',WSH_DEBUG_SV.C_PROC_LEVEL);
8353                   END IF;
8354                   --
8355 
8356 
8357                   -- Bug#3206399: Not Able to Re-open a Confirmed Delivery.
8358                   --
8359                   -- Call to check_reopen should return the status in local variable l_return_status.
8360                   -- (This variable is used in further calls)
8361                   -- x_return_status is assigned equal to l_return_status before exiting the
8362                   -- procedure.
8363 
8364                   -- wsh_delivery_validations.check_reopen(p_del_rows(i), x_return_status);
8365 
8366                    wsh_delivery_validations.check_reopen(p_del_rows(i), l_return_status);
8367 
8368                         --
8369                         WSH_UTIL_CORE.api_post_call
8370                             (
8371                                 p_return_status => l_return_status,
8372                                 x_num_warnings  => l_num_warnings,
8373                                 x_num_errors    => l_num_errors
8374                             );
8375                         --
8376 
8377                   l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
8378                      P_Organization_ID       => l_organization_id,
8379                      X_Return_Status         => l_return_status);
8380 
8381                   IF l_debug_on THEN
8382                    wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
8383                    wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
8384                   END IF;
8385 
8386                   WSH_UTIL_CORE.api_post_call (
8387                                 p_return_status => l_return_status,
8388                                 x_num_warnings  => l_num_warnings,
8389                                 x_num_errors    => l_num_errors);
8390 
8391                   IF (l_warehouse_type='TPW') THEN
8392                      l_status_code := 'SA';
8393                   ELSE
8394                      l_status_code := 'OP';
8395                   END IF;
8396 
8397                   IF l_debug_on THEN
8398                    wsh_debug_sv.log (l_module_name, 'l_status_code',l_status_code);
8399                   END IF;
8400 
8401 
8402                   update wsh_new_deliveries
8403                   set status_code           = l_status_code,
8404                       confirm_date          = null,--6453740
8405                       confirmed_by          = null,--6453740
8406                       last_update_date      = SYSDATE  ,
8407                       last_updated_by       = l_user_id,
8408                       last_update_login     = l_login_id
8409                   where delivery_id         = p_del_rows(i);
8410 
8411                 IF (SQL%NOTFOUND) THEN
8412                   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8413                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8414                    l_num_errors := l_num_errors + 1;
8415                     RAISE FND_API.G_EXC_ERROR;
8416                 END IF;
8417 
8418                 -- K: MDC:
8419                 -- Reopen the consol delivery as well if it exists and is not open
8420                 IF l_status_code = 'OP' THEN
8421 
8422                    -- bug 4891897, sql 15037864
8423                    -- removed wsh_new_deliveries d2
8424 
8425                    update wsh_new_deliveries d1
8426                       set d1.status_code           = l_status_code,
8427                           d1.last_update_date      = SYSDATE,
8428                           d1.last_updated_by       = l_user_id,
8429                           d1.last_update_login     = l_login_id
8430                     where d1.status_code = 'CO'
8431                       and exists (
8432                             select 'X'
8433                               from wsh_delivery_legs l1, wsh_delivery_legs l2
8434                              where l2.delivery_id = p_del_rows(i)
8435                                and l2.parent_delivery_leg_id = l1.delivery_leg_id
8436                                and l1.delivery_id = d1.delivery_id);
8437                  END IF;
8438 
8439 		--/== Workflow Changes
8440 		IF (l_status_code = 'OP') THEN
8441 			IF l_debug_on THEN
8442 				WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8443 			END IF;
8444 
8445 			WSH_WF_STD.RAISE_EVENT(p_entity_type     =>  'DELIVERY',
8446 					       p_entity_id       =>  p_del_rows(i),
8447 					       p_event           =>  'oracle.apps.wsh.delivery.gen.open',
8448 					       p_organization_id =>  l_organization_id,
8449 					       x_return_status   =>  l_wf_rs);
8450 
8451 			IF l_debug_on THEN
8452 				WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8453 			END IF;
8454 		END IF;
8455 		-- Workflow Changes ==/
8456 
8457 		  l_num_dels_processed := l_num_dels_processed + 1;
8458 
8459             --}
8460             END IF;
8461        --}
8462        EXCEPTION
8463        --{
8464             WHEN FND_API.G_EXC_ERROR
8465             THEN
8466             --{
8467                 ROLLBACK TO dlvy_chg_status_sp;
8468                 --
8469                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8470                 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8471                 --
8472                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8473             --}
8474             WHEN wsh_util_core.g_exc_warning
8475             THEN
8476             --{
8477                 ROLLBACK TO dlvy_chg_status_sp;
8478                 --
8479                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8480                 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8481                 --
8482                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
8483             --}
8484         --}
8485         END;
8486    --}
8487    END LOOP;
8488    --
8489    --
8490     IF l_num_dels_processed = 0
8491     THEN
8492         l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8493     ELSIF l_num_dels_processed < p_del_rows.count
8494     THEN
8495         l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8496     ELSIF l_num_warnings > 0
8497     THEN
8498         l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8499     ELSE
8500         l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8501     END IF;
8502     --
8503     x_return_status := l_return_status;
8504     --
8505     IF p_del_rows.count > 1
8506     THEN
8507         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_SUMMARY');
8508         FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',l_num_dels_processed);
8509         FND_MESSAGE.SET_TOKEN('NUM_ERROR',p_del_rows.count - l_num_dels_processed);
8510         wsh_util_core.add_message(l_return_status,l_module_name);
8511     END IF;
8512 --
8513 -- Debug Statements
8514 --
8515 IF l_debug_on THEN
8516     WSH_DEBUG_SV.pop(l_module_name);
8517 END IF;
8518 --
8519   EXCEPTION
8520     WHEN FND_API.G_EXC_ERROR THEN
8521       ROLLBACK TO dlvy_chg_status_begin_sp;
8522       --
8523       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8524       --
8525       IF l_debug_on THEN
8526         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8527         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8528       END IF;
8529       --
8530     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8531 
8532       ROLLBACK TO dlvy_chg_status_begin_sp;
8533       --
8534       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8535       --
8536       IF l_debug_on THEN
8537         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8538         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8539       END IF;
8540       --
8541     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8542       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8543       --
8544       IF l_debug_on THEN
8545         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8546         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8547       END IF;
8548       --
8549     WHEN others THEN
8550 
8551       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CHANGE_STATUS',l_module_name);
8552       ROLLBACK TO dlvy_chg_status_begin_sp;
8553       --
8554       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8555 
8556 --
8557 -- Debug Statements
8558 --
8559 IF l_debug_on THEN
8560     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8561 END IF;
8562 --
8563   END CHANGE_STATUS;
8564 
8565 
8566 -- Following is old procedure as of I, which is replaced by proc. above in J
8567 -- remove after ut
8568 
8569 /* bug 2335270 Included last_update_date,last_updated_by and last_update_login
8570              in  wsh_new_deliveries and wsh_delivery_details */
8571 
8572 -- J-IB-HEALI---{
8573 PROCEDURE Complete_Leg_Sequence
8574       ( p_delivery_id   IN   NUMBER,
8575         p_update_flag   IN VARCHAR2,
8576         p_insert_msg    IN BOOLEAN default true,
8577         x_leg_count	OUT NOCOPY NUMBER,
8578         x_leg_complete	OUT NOCOPY varchar2,
8579         x_return_status OUT NOCOPY   VARCHAR2) IS
8580 
8581   CURSOR delivery_info IS
8582   SELECT initial_pickup_location_id,
8583     ultimate_dropoff_location_id
8584   FROM   wsh_new_deliveries
8585   WHERE  delivery_id = p_delivery_id;
8586 
8587   CURSOR count_legs IS
8588   SELECT count(*)
8589   FROM   wsh_delivery_legs
8590   WHERE  delivery_id = p_delivery_id;
8591 
8592   CURSOR pickup_delivery_legs(l_pickup_location_id IN NUMBER) IS
8593   SELECT dg.delivery_leg_id leg_id,
8594     st1.stop_location_id pickup,
8595     st2.stop_location_id dropoff
8596   FROM   wsh_delivery_legs dg,
8597     wsh_trip_stops st1,
8598     wsh_trip_stops st2
8599   WHERE  dg.delivery_id = p_delivery_id AND
8600     st1.stop_id = dg.pick_up_stop_id AND
8601     st2.stop_id = dg.drop_off_stop_id AND
8602     st1.stop_location_id = l_pickup_location_id;
8603 
8604   CURSOR dropoff_delivery_legs(l_pickup_location_id IN NUMBER) IS
8605   SELECT count(*)
8606   FROM   wsh_delivery_legs dg,
8607     wsh_trip_stops st1,
8608     wsh_trip_stops st2
8609   WHERE  dg.delivery_id = p_delivery_id AND
8610     st1.stop_id = dg.pick_up_stop_id AND
8611     st2.stop_id = dg.drop_off_stop_id AND
8612     st2.stop_location_id = l_pickup_location_id;
8613 
8614   l_leg_id         NUMBER;
8615   l_seq_num       NUMBER;
8616   l_pickup_location_id   NUMBER;
8617   l_dropoff_location_id  NUMBER;
8618   l_final_dropoff   NUMBER;
8619   l_leg_count     NUMBER := 0;
8620   l_count       NUMBER := 0;
8621 
8622   others EXCEPTION;
8623 
8624   l_debug_on BOOLEAN;
8625   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Complete_Leg_Sequence';
8626 BEGIN
8627 
8628   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8629   --
8630   IF l_debug_on IS NULL
8631   THEN
8632       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8633   END IF;
8634   --
8635   IF l_debug_on THEN
8636       WSH_DEBUG_SV.push(l_module_name);
8637       --
8638       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8639       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8640   END IF;
8641   --
8642   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8643   x_leg_complete := 'N';
8644 
8645 
8646   OPEN delivery_info;
8647   FETCH delivery_info INTO l_pickup_location_id, l_dropoff_location_id;
8648 
8649   IF (delivery_info%NOTFOUND) THEN
8650      CLOSE delivery_info;
8651 
8652      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8653      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8654      wsh_util_core.add_message(x_return_status);
8655 
8656 
8657      IF l_debug_on THEN
8658          WSH_DEBUG_SV.pop(l_module_name);
8659      END IF;
8660      --
8661      RETURN;
8662   END IF;
8663 
8664   l_final_dropoff := l_dropoff_location_id;
8665 
8666   IF (l_pickup_location_id IS NULL) OR (l_dropoff_location_id IS NULL)THEN
8667     raise others;
8668   END IF;
8669   CLOSE delivery_info;
8670 
8671 
8672   OPEN  count_legs;
8673   FETCH count_legs INTO l_leg_count;
8674   CLOSE count_legs;
8675 
8676   x_leg_count := l_leg_count;
8677 
8678   IF (l_leg_count = 0 OR l_leg_count IS NULL) THEN
8679      IF l_debug_on THEN
8680          WSH_DEBUG_SV.pop(l_module_name);
8681      END IF;
8682      --
8683      RETURN;
8684   END IF;
8685 
8686 
8687   l_seq_num := 0;
8688 
8689   LOOP --{
8690      OPEN  pickup_delivery_legs(l_pickup_location_id);
8691      FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8692 
8693      IF (pickup_delivery_legs%NOTFOUND) THEN
8694        CLOSE pickup_delivery_legs;
8695        EXIT;
8696      END IF;
8697 
8698 
8699      IF (l_leg_id IS NOT NULL) THEN
8700         l_seq_num := l_seq_num + 1;
8701 
8702         IF p_update_flag = 'Y' THEN
8703            UPDATE wsh_delivery_legs
8704             SET sequence_number = l_seq_num * 10
8705            WHERE delivery_leg_id = l_leg_id;
8706 
8707            IF (SQL%NOTFOUND) THEN
8708               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8709 
8710               FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
8711               wsh_util_core.add_message(x_return_status);
8712 
8713               IF l_debug_on THEN
8714                   WSH_DEBUG_SV.pop(l_module_name);
8715               END IF;
8716               --
8717               RETURN;
8718            END IF;
8719         END IF; /* added for p_update_flag */
8720       END IF; /* l_leg_id IS NOT NULL */
8721 
8722 
8723      FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8724      IF (pickup_delivery_legs%FOUND) THEN
8725         CLOSE pickup_delivery_legs;
8726 
8727         IF (p_insert_msg) THEN
8728            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8729            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8730            wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8731         END IF;
8732 
8733         IF l_debug_on THEN
8734             WSH_DEBUG_SV.pop(l_module_name);
8735         END IF;
8736         --
8737         RETURN;
8738     END IF;
8739     CLOSE pickup_delivery_legs;
8740 
8741      OPEN dropoff_delivery_legs(l_dropoff_location_id);
8742      FETCH dropoff_delivery_legs INTO l_count;
8743      CLOSE dropoff_delivery_legs;
8744 
8745      IF (l_count > 1) THEN
8746         IF (p_insert_msg) THEN
8747            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8748            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8749            wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8750         END IF;
8751 
8752         IF l_debug_on THEN
8753           WSH_DEBUG_SV.pop(l_module_name);
8754         END IF;
8755         --
8756         RETURN;
8757     END IF;
8758 
8759      l_pickup_location_id := l_dropoff_location_id;
8760   END LOOP; --}
8761 
8762 
8763 
8764   IF (l_seq_num <> l_leg_count) THEN
8765 
8766      IF (p_insert_msg) THEN
8767         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INVALID_FLOW');
8768         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8769         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8770      END IF;
8771      --
8772      IF l_debug_on THEN
8773          WSH_DEBUG_SV.pop(l_module_name);
8774      END IF;
8775      --
8776      RETURN;
8777   END IF;
8778 
8779 
8780   IF (l_final_dropoff <> l_dropoff_location_id) THEN
8781      x_leg_complete := 'NW';
8782 
8783      IF (p_insert_msg) THEN
8784         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_ULTIMATE_DROPOFF');
8785         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8786         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8787      END IF;
8788      RETURN;
8789   END IF;
8790 
8791 
8792   x_leg_complete := 'Y';
8793 
8794 IF l_debug_on THEN
8795     WSH_DEBUG_SV.pop(l_module_name);
8796 END IF;
8797 --
8798 EXCEPTION
8799      WHEN others THEN
8800       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Complete_Leg_Sequence');
8801      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8802 
8803 IF l_debug_on THEN
8804     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8805     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8806 END IF;
8807 --
8808 END Complete_Leg_Sequence;
8809 
8810 
8811 PROCEDURE Update_Leg_Sequence
8812       ( p_delivery_id   IN   NUMBER,
8813         p_update_flag    IN VARCHAR2,
8814         x_return_status OUT NOCOPY   VARCHAR2) IS
8815 
8816   l_leg_count           NUMBER := 0;
8817   l_leg_complete	varchar2(10);
8818   l_return_status	varchar2(1);
8819 
8820   l_debug_on BOOLEAN;
8821   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_LEG_SEQUENCE';
8822 BEGIN
8823   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8824   --
8825   IF l_debug_on IS NULL
8826   THEN
8827       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8828   END IF;
8829   --
8830   IF l_debug_on THEN
8831       WSH_DEBUG_SV.push(l_module_name);
8832       --
8833       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8834       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8835   END IF;
8836 
8837 
8838   Complete_Leg_Sequence
8839       ( p_delivery_id   => p_delivery_id,
8840         p_update_flag   => p_update_flag,
8841         x_leg_count     => l_leg_count,
8842         x_leg_complete  => l_leg_complete,
8843         x_return_status => l_return_status);
8844 
8845   IF l_debug_on THEN
8846       WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',l_return_status);
8847       WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
8848       WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
8849   END IF;
8850 
8851   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8852     IF (l_leg_complete='NW') THEN
8853        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8854     ELSIF (l_leg_complete='Y') THEN
8855        x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8856     ELSIF (l_leg_complete='N') THEN
8857        IF (l_leg_count IS NULL or l_leg_count=0) THEN
8858           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8859        ELSE
8860           x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8861        END IF;
8862     END IF;
8863   ELSE
8864      x_return_status:= l_return_status;
8865   END IF;
8866 
8867 
8868   IF l_debug_on THEN
8869     WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
8870     WSH_DEBUG_SV.pop(l_module_name);
8871   END IF;
8872 --
8873 EXCEPTION
8874    WHEN others THEN
8875      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
8876      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8877 
8878 IF l_debug_on THEN
8879     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8880     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8881 END IF;
8882 --
8883 END Update_Leg_Sequence;
8884 
8885 
8886 
8887 PROCEDURE Process_Leg_Sequence
8888       ( p_delivery_id   IN   NUMBER,
8889         p_update_del_flag    IN VARCHAR2,
8890         p_update_leg_flag    IN VARCHAR2,
8891         x_leg_complete	OUT NOCOPY boolean,
8892         x_return_status OUT NOCOPY   VARCHAR2) IS
8893 
8894   l_leg_count           NUMBER := 0;
8895   l_leg_complete	varchar2(10);
8896   l_update_flag		varchar2(1):='N';
8897 
8898 
8899   l_debug_on BOOLEAN;
8900   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Leg_Sequence';
8901 BEGIN
8902   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8903   --
8904   IF l_debug_on IS NULL
8905   THEN
8906       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8907   END IF;
8908   --
8909   IF l_debug_on THEN
8910       WSH_DEBUG_SV.push(l_module_name);
8911       --
8912       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8913       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_del_FLAG',P_UPDATE_del_FLAG);
8914       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_leg_FLAG',P_UPDATE_leg_FLAG);
8915   END IF;
8916 
8917 
8918   Complete_Leg_Sequence
8919       ( p_delivery_id   => p_delivery_id,
8920         p_update_flag   => p_update_leg_flag,
8921         p_insert_msg    => false,
8922         x_leg_count     => l_leg_count,
8923         x_leg_complete  => l_leg_complete,
8924         x_return_status => x_return_status);
8925 
8926   IF l_debug_on THEN
8927       WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',x_return_status);
8928       WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
8929       WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
8930   END IF;
8931 
8932   IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
8933        IF (l_leg_complete = 'Y' ) THEN
8934           x_leg_complete := true;
8935           l_update_flag:='Y';
8936        ELSE
8937           x_leg_complete := false;
8938           l_update_flag:= null;
8939        END IF;
8940 
8941 
8942        IF (p_update_del_flag='Y') THEN
8943           UPDATE wsh_new_deliveries
8944             SET ITINERARY_COMPLETE = l_update_flag,
8945                 last_update_date = sysdate,
8946                 last_updated_by = FND_GLOBAL.USER_ID
8947           WHERE delivery_id= p_delivery_id;
8948        END IF;
8949 
8950   END IF;
8951 
8952 
8953   IF l_debug_on THEN
8954     IF (x_leg_complete) THEN
8955       WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete TRUE');
8956     ELSE
8957       WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete FALSE');
8958     END IF;
8959 
8960     WSH_DEBUG_SV.pop(l_module_name);
8961   END IF;
8962 --
8963 EXCEPTION
8964    WHEN others THEN
8965      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
8966      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8967 
8968 IF l_debug_on THEN
8969     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8970     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8971 END IF;
8972 --
8973 END Process_Leg_Sequence;
8974 -- J-IB-HEALI---}
8975 
8976 --
8977 -- Procedure: Generate_Loading_Seq
8978 -- Parameters:  p_del_rows   - Delivery ids
8979 --    x_return_status - status of procedure call
8980 -- Description: This procedure is used to generate loading sequence for deliveries
8981 --
8982 
8983   PROCEDURE Generate_Loading_Seq
8984     (p_del_rows   IN  wsh_util_core.id_tab_type,
8985      x_return_status  OUT NOCOPY  VARCHAR2) IS
8986 
8987   CURSOR loading_order (l_delivery_id NUMBER) IS
8988   SELECT loading_order_flag
8989   FROM   wsh_new_deliveries
8990   WHERE  delivery_id = l_delivery_id;
8991 
8992    -- Bug 1421549: Changed the logic for load sequencing
8993   cont_str VARCHAR2(1000) :=
8994   'SELECT dd.delivery_detail_id '||
8995   'FROM   wsh_delivery_details dd, '||
8996      'wsh_delivery_assignments_v da '||
8997   'WHERE  dd.delivery_detail_id = da.delivery_detail_id AND  '||
8998      'da.parent_delivery_detail_id = :cont_id AND '||
8999      'container_flag = ''N'' '||
9000   'ORDER  BY customer_prod_seq ';
9001 
9002 -- This cursor fetches container_ids and average customer prod seq
9003 -- numbers for lines in each container for a particular delivery. The
9004 -- dynamic statement is used to add an ASC or DESC clause to the order by
9005 -- based on Forward or Reverse loading order of the delivery
9006 
9007   stmt_str VARCHAR2(1000) :=
9008   'SELECT da.parent_delivery_detail_id, '||
9009     'avg(customer_prod_seq) avg_prod_seq, '||
9010     'count(*) '||
9011   'FROM   wsh_delivery_details dd, '||
9012     'wsh_delivery_assignments_v da '||
9013   'WHERE  dd.delivery_detail_id = da.delivery_detail_id AND '||
9014     'dd.customer_prod_seq IS NOT NULL AND '||
9015     'dd.container_flag = ''N'' AND '||
9016     'da.parent_delivery_detail_id IS NOT NULL AND '||
9017     'da.delivery_id IS NOT NULL AND '||
9018     'da.delivery_id = :del_id '||
9019   'GROUP BY parent_delivery_detail_id '||
9020   'ORDER BY avg_prod_seq ';
9021 
9022   TYPE detailcurtype IS REF CURSOR;
9023   TYPE contcurtype IS REF CURSOR;
9024   detailinfo_cv detailcurtype;
9025   continfo_cv contcurtype;
9026 
9027   l_cont_id  NUMBER;
9028   l_avg_prod_seq NUMBER;
9029   l_num_error   BINARY_INTEGER;
9030   l_cnt    BINARY_INTEGER;
9031   l_old_cnt  BINARY_INTEGER;
9032   l_lines_cnt   BINARY_INTEGER;
9033   l_order_flag  VARCHAR2(2);
9034   str1      VARCHAR2(5);
9035   cont1    VARCHAR2(5);
9036   l_delivery_detail_id NUMBER;
9037   l_cont_cnt  BINARY_INTEGER;
9038 
9039   others EXCEPTION;
9040 
9041 --
9042 l_debug_on BOOLEAN;
9043 --
9044 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERATE_LOADING_SEQ';
9045 --
9046   BEGIN
9047 
9048   --
9049   -- Debug Statements
9050   --
9051   --
9052   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9053   --
9054   IF l_debug_on IS NULL
9055   THEN
9056       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9057   END IF;
9058   --
9059   IF l_debug_on THEN
9060       WSH_DEBUG_SV.push(l_module_name);
9061   END IF;
9062   --
9063   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9064 
9065   IF (p_del_rows.count = 0) THEN
9066     raise others;
9067   END IF;
9068 
9069   FOR i IN 1..p_del_rows.count LOOP
9070 
9071     OPEN  loading_order (p_del_rows(i));
9072     FETCH loading_order INTO l_order_flag;
9073 
9074      IF (loading_order%NOTFOUND) OR (l_order_flag IS NULL) THEN
9075     IF (loading_order%ISOPEN) THEN
9076        CLOSE loading_order;
9077       END IF;
9078     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INV_LOADING_ORDER');
9079     --
9080     -- Debug Statements
9081     --
9082     IF l_debug_on THEN
9083         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9084     END IF;
9085     --
9086     FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9087       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9088     wsh_util_core.add_message(x_return_status);
9089     l_num_error := l_num_error + 1;
9090      goto loop_end;
9091      END IF;
9092 
9093     IF (loading_order%ISOPEN) THEN
9094       CLOSE loading_order;
9095      END IF;
9096 
9097 -- Select containers for each delivery by ordering avg container prod seq num
9098 
9099     IF (l_order_flag = 'F') OR (l_order_flag = 'FI') THEN
9100     str1 := 'ASC';
9101      ELSE
9102     str1 := 'DESC';
9103     END IF;
9104 
9105      -- Bug 1421549: Changed the logic for load sequencing
9106      IF (l_order_flag = 'R') OR (l_order_flag = 'FI') THEN
9107      cont1 := 'DESC';
9108      ELSE
9109      cont1 := 'ASC';
9110      END IF;
9111 
9112     -- bug # 1716147. Fixed the incorrect messages issue
9113     l_cont_cnt  := 0;
9114 
9115     -- bug 3442398 moved this line from within the container loop to here
9116     l_cnt   := 0;
9117 
9118      OPEN detailinfo_cv FOR stmt_str || str1 USING p_del_rows(i);
9119     LOOP
9120 
9121       l_cont_id := null;
9122 
9123       FETCH detailinfo_cv INTO l_cont_id, l_avg_prod_seq, l_lines_cnt;
9124 
9125     -- Added by rvishnuv on 04/04/2001
9126     EXIT WHEN detailinfo_cv%NOTFOUND;
9127 
9128     l_cont_cnt  := l_cont_cnt + 1;
9129 
9130 
9131       -- Bug 1421549: Changed the logic for load sequencing
9132       OPEN  continfo_cv FOR cont_str || cont1 USING l_cont_id ;
9133       LOOP
9134 
9135       FETCH continfo_cv INTO l_delivery_detail_id ;
9136 
9137       EXIT WHEN continfo_cv%NOTFOUND;
9138 
9139       l_cnt := l_cnt + 1;
9140 
9141       UPDATE wsh_delivery_details
9142       SET load_seq_number = l_cnt
9143       WHERE  delivery_detail_id = l_delivery_detail_id;
9144 
9145       END LOOP;
9146 
9147     IF (l_cnt = 0) THEN
9148        IF (continfo_cv%ISOPEN) THEN
9149         CLOSE continfo_cv;
9150        END IF;
9151         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_LINE_ERROR');
9152        --
9153        -- Debug Statements
9154        --
9155        IF l_debug_on THEN
9156            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9157        END IF;
9158        --
9159        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9160        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9161        wsh_util_core.add_message(x_return_status);
9162        l_num_error := l_num_error + 1;
9163        EXIT;
9164     END IF;
9165 
9166     IF (continfo_cv%ISOPEN) THEN
9167        CLOSE continfo_cv;
9168       END IF;
9169 
9170      END LOOP;
9171 
9172     IF (l_cont_cnt = 0) THEN
9173     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_CONT_ERROR');
9174     --
9175     -- Debug Statements
9176     --
9177     IF l_debug_on THEN
9178         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9179     END IF;
9180     --
9181     FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9182       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9183     wsh_util_core.add_message(x_return_status);
9184     l_num_error := l_num_error + 1;
9185      END IF;
9186 
9187 
9188     IF (detailinfo_cv%ISOPEN) THEN
9189       CLOSE detailinfo_cv;
9190      END IF;
9191 
9192     <<loop_end>>
9193     null;
9194 
9195   END LOOP;
9196 
9197   IF (p_del_rows.count > 1) THEN
9198     IF (l_num_error > 0) THEN
9199     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_SUMMARY');
9200     FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
9201     FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
9202 
9203     IF (p_del_rows.count = l_num_error) THEN
9204        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9205       ELSE
9206        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9207       END IF;
9208 
9209     wsh_util_core.add_message(x_return_status);
9210      END IF;
9211   END IF;
9212 
9213 --
9214 -- Debug Statements
9215 --
9216 IF l_debug_on THEN
9217     WSH_DEBUG_SV.pop(l_module_name);
9218 END IF;
9219 --
9220   EXCEPTION
9221      WHEN others THEN
9222     IF (continfo_cv%ISOPEN) THEN
9223        CLOSE continfo_cv;
9224       END IF;
9225     IF (detailinfo_cv%ISOPEN) THEN
9226        CLOSE detailinfo_cv;
9227     END IF;
9228      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.GENERATE_LOADING_SEQ');
9229     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9230 
9231 --
9232 -- Debug Statements
9233 --
9234 IF l_debug_on THEN
9235     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9236     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9237 END IF;
9238 --
9239   END Generate_Loading_Seq;
9240 
9241 
9242 --
9243 -- Procedure: Assign_Delivery_Update
9244 -- Parameters:  p_delivery_id   - Delivery id
9245 --       p_del_params - Parameters to update the delivery with
9246 --    x_return_status - status of procedure call
9247 -- Description: This procedure is used to update the delivery with grouping
9248 --        attribute values from lines, while assigning lines to delivery
9249 --
9250 
9251   PROCEDURE Assign_Delivery_Update
9252     (p_delivery_id    IN  NUMBER,
9253      p_del_params    IN   wsh_delivery_autocreate.grp_attr_rec_type,
9254      x_return_status  OUT NOCOPY  VARCHAR2) IS
9255 
9256   l_del_info wsh_new_deliveries_pvt.delivery_rec_type;
9257 
9258 --
9259 l_debug_on BOOLEAN;
9260 --
9261 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ASSIGN_DELIVERY_UPDATE';
9262 --
9263   BEGIN
9264 
9265   --
9266   -- Debug Statements
9267   --
9268   --
9269   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9270   --
9271   IF l_debug_on IS NULL
9272   THEN
9273       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9274   END IF;
9275   --
9276   IF l_debug_on THEN
9277       WSH_DEBUG_SV.push(l_module_name);
9278       --
9279       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9280   END IF;
9281   --
9282   --
9283   -- Debug Statements
9284   --
9285   IF l_debug_on THEN
9286       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.POPULATE_RECORD',WSH_DEBUG_SV.C_PROC_LEVEL);
9287   END IF;
9288   --
9289   wsh_new_deliveries_pvt.populate_record( p_delivery_id, l_del_info, x_return_status);
9290 
9291    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9292      --
9293      -- Debug Statements
9294      --
9295      IF l_debug_on THEN
9296          WSH_DEBUG_SV.pop(l_module_name);
9297      END IF;
9298      --
9299      RETURN;
9300    END IF;
9301 
9302     --
9303     IF l_debug_on THEN
9304       WSH_DEBUG_SV.log(l_module_name,'l_del_info.shipment_direction',l_del_info.shipment_direction);
9305     END IF;
9306     --
9307 
9308    IF NVL(l_del_info.shipment_direction,'O') IN ('O','IO')   -- J-IB-NPARIKH
9309    THEN
9310    --{
9311        -- Set optional grouping attributes for delivery.
9312        l_del_info.customer_id := nvl(l_del_info.customer_id, p_del_params.customer_id);
9313        l_del_info.intmed_ship_to_location_id := nvl(l_del_info.intmed_ship_to_location_id, p_del_params.intmed_ship_to_location_id);
9314        l_del_info.fob_code := nvl(l_del_info.fob_code, p_del_params.fob_code);
9315        l_del_info.freight_terms_code := nvl(l_del_info.freight_terms_code, p_del_params.freight_terms_code);
9316        l_del_info.ship_method_code := nvl(l_del_info.ship_method_code, p_del_params.ship_method_code);
9317        l_del_info.carrier_id := nvl(l_del_info.carrier_id, p_del_params.carrier_id);
9318 
9319        WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
9320                p_delivery_rec => l_del_info,
9321                x_return_status => x_return_status);
9322 
9323 
9324       --
9325       -- Debug Statements
9326       --
9327       IF l_debug_on THEN
9328           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.UPDATE_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
9329       END IF;
9330       --
9331       wsh_new_deliveries_pvt.update_delivery( null, l_del_info, x_return_status);
9332 
9333   --}
9334   END IF;
9335 
9336 --
9337 -- Debug Statements
9338 --
9339 IF l_debug_on THEN
9340     WSH_DEBUG_SV.pop(l_module_name);
9341 END IF;
9342 --
9343   END Assign_Delivery_Update;
9344 
9345 --
9346 --
9347 -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9348 --
9349 -- finito  CArrier Selection FTE Integration Changes
9350 -- **************************************************************************
9351 
9352 
9353 -- J-IB-NPARIKH---{
9354 
9355 
9356 -- ----------------------------------------------------------------------
9357 -- Procedure:   update_freight_terms
9358 -- Parameters:  p_delivery_id in  number
9359 --              p_action_code   in varchar2
9360 --                  'ASSIGN'  : Assign lines to delivery
9361 --                  'UNASSIGN' : Unassign lines from delivery
9362 --              p_line_freight_terms_code in varchar2
9363 --                  NULL : Caller did not pass value
9364 --                  'MIXED' : Lines assigned/unassigned have mixed/null freight terms
9365 --                  Other value: All lines assigned/unassigned have same freight term , equal to this value
9366 --              x_freight_terms_Code out varchar2
9367 --                   Delivery's freight term code
9368 -- Description: This procedure can be called after assign/unassign lines from delivery.
9369 --
9370 --              For action	ASSIGN :
9371 --                   If delivery freight term is not null and new lines have different/null freight terms,
9372 --                   update delivery freight term to NULL
9373 --              For action	UNASSIGN :
9374 --                   If delivery freight term is null and all existing lines in delivery have same freight
9375 --                   term, update delivery with the same
9376 --
9377 --  ----------------------------------------------------------------------
9378 PROCEDURE update_freight_terms
9379             (
9380                p_delivery_id             IN              NUMBER,
9381                p_action_code             IN              VARCHAR2 DEFAULT 'UNASSIGN',
9382                p_line_freight_terms_Code IN              VARCHAR2 DEFAULT NULL,
9383                x_freight_terms_Code      OUT    NOCOPY   VARCHAR2,
9384                x_return_status           OUT    NOCOPY   VARCHAR2
9385             )
9386 IS
9387 --{
9388     --
9389     -- Get delivery information
9390     --
9391     CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9392     IS
9393         SELECT freight_terms_code, name,
9394                nvl(shipment_direction,'O') shipment_direction
9395         FROM   wsh_new_deliveries
9396         WHERE  delivery_id             = p_delivery_id;
9397     --
9398     --
9399     -- Lock delivery
9400     --
9401     CURSOR lock_dlvy_csr (p_delivery_id IN NUMBER)
9402     IS
9403         SELECT 1
9404         FROM   wsh_new_deliveries
9405         WHERE  delivery_id             = p_delivery_id
9406         FOR UPDATE OF freight_terms_code NOWAIT;
9407     --
9408     --
9409     CURSOR line_csr (p_delivery_id IN NUMBER)
9410     IS
9411         SELECT distinct freight_terms_code
9412         FROM   wsh_delivery_details wdd,
9413                wsh_delivery_assignments_v wda
9414         WHERE  wdd.delivery_detail_id      = wda.delivery_detail_id
9415         AND    wda.delivery_id             = p_delivery_id
9416         AND    NVL(wdd.container_flag,'N') = 'N';
9417     --
9418     l_has_lines               VARCHAR2(1);
9419     l_dlvy_freight_terms_code VARCHAR2(30);
9420     l_line_freight_terms_code VARCHAR2(30);
9421     l_shipment_direction      VARCHAR2(30);
9422     l_name                    VARCHAR2(100);
9423     l_cnt                     NUMBER;
9424     --
9425     e_locked exception  ;
9426     PRAGMA EXCEPTION_INIT(e_locked, -54);
9427     --
9428     e_end_of_api EXCEPTION;
9429     e_end_of_sub EXCEPTION;
9430     e_end_of_api1 EXCEPTION;
9431     --
9432     e_update     EXCEPTION;
9433 
9434     --
9435     l_debug_on                    BOOLEAN;
9436     --
9437     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_freight_terms';
9438     --
9439 --}
9440 BEGIN
9441 --{
9442     --
9443     l_debug_on := wsh_debug_interface.g_debug;
9444     --
9445     IF l_debug_on IS NULL THEN
9446       l_debug_on := wsh_debug_sv.is_debug_enabled;
9447     END IF;
9448     --
9449     IF l_debug_on THEN
9450       wsh_debug_sv.push(l_module_name);
9451       --
9452       wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9453       wsh_debug_sv.LOG(l_module_name, 'p_action_code', p_action_code);
9454       wsh_debug_sv.LOG(l_module_name, 'p_line_freight_terms_Code', p_line_freight_terms_Code);
9455     END IF;
9456     --
9457     x_return_status := wsh_util_core.g_ret_sts_success;
9458     --
9459     --
9460     IF p_delivery_id IS NULL
9461     THEN
9462     --{
9463         --
9464         -- Delivery id is mandatory input
9465         --
9466         FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9467         FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9468         RAISE FND_API.G_EXC_ERROR;
9469     --}
9470     END IF;
9471     --
9472     --
9473     OPEN dlvy_csr (p_delivery_id);
9474     --
9475     FETCH dlvy_csr
9476     INTO l_dlvy_freight_terms_code,l_name,l_shipment_direction;
9477     --
9478     IF dlvy_csr%NOTFOUND
9479     THEN
9480     --{
9481         --
9482         -- Raise error for invalid Delivery id
9483         --
9484         fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9485         RAISE FND_API.G_EXC_ERROR;
9486     --}
9487     END IF;
9488     --
9489     CLOSE dlvy_Csr;
9490     --
9491     --
9492     IF l_debug_on THEN
9493       wsh_debug_sv.LOG(l_module_name, 'l_dlvy_freight_terms_code', l_dlvy_freight_terms_code);
9494       wsh_debug_sv.LOG(l_module_name, 'l_name', l_name);
9495       wsh_debug_sv.LOG(l_module_name, 'l_shipment_direction', l_shipment_direction);
9496     END IF;
9497     --
9498     x_freight_terms_code := l_dlvy_freight_terms_code;
9499     --
9500     --
9501     IF l_shipment_direction IN ('O','IO')
9502     THEN
9503         --
9504         -- Operation not valid for outbound delivery
9505         --
9506         RAISE e_end_of_api;
9507     END IF;
9508     --
9509     FOR lock_dlvy_rec IN lock_dlvy_csr (p_delivery_id)
9510     LOOP
9511         NULL;
9512     END LOOP;
9513     --
9514     --
9515     BEGIN
9516     --{
9517         BEGIN
9518         --{
9519             IF  p_action_code='ASSIGN'
9520             THEN
9521             --{
9522                 --
9523                 IF l_debug_on THEN
9524                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
9525                 END IF;
9526                 --
9527                 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
9528                                     (
9529                                         p_delivery_id => p_delivery_id
9530                                     );
9531                 --
9532                 --
9533                 IF l_debug_on THEN
9534                   wsh_debug_sv.LOG(l_module_name, 'l_has_lines', l_has_lines);
9535                 END IF;
9536                 --
9537                 --
9538                 IF l_has_lines = 'Y'  -- If delivery has lines
9539                 THEN
9540                 --{
9541 
9542                     /*
9543                     IF l_dlvy_freight_terms_code IS NULL
9544                     THEN
9545                         RAISE e_end_of_api;
9546                     ELSE
9547                     --{
9548                     */
9549                         IF p_line_freight_terms_code IS NULL
9550                         THEN
9551                             --
9552                             -- Line-level freight terms not passed in.
9553                             -- We need to check delivery contents to determine the freight term
9554                             --
9555                             RAISE e_end_of_sub;
9556                         ELSIF p_line_freight_terms_code = NVL(l_dlvy_freight_terms_code,'MIXED')
9557                         THEN
9558                             --
9559                             -- Line-level freight terms is same as delivery's freight term
9560                             -- No need for any updates, goto end of api.
9561                             --
9562                             RAISE e_end_of_api;
9563                         ELSIF p_line_freight_terms_code = 'MIXED'
9564 			                     THEN
9565                             --
9566                             -- Line-level freight terms are different.
9567                             -- We need to update delivery freight term to null
9568                             --
9569                             l_dlvy_freight_terms_code := NULL;
9570                             RAISE e_update;
9571                         ELSE
9572                             RAISE e_end_of_sub;
9573                         END IF;
9574                     --}
9575                     --END IF;
9576 
9577                 --}
9578                 /*--Assumption is that this api is called only after lines assigned to dlvy.
9579                 ELSE
9580                 --{
9581                     IF p_line_freight_terms_code IS NULL
9582                     THEN
9583                         RAISE e_end_of_api;
9584                     ELSIF p_line_freight_terms_code <> NVL(l_dlvy_freight_terms_code,'MIXED')
9585                     THEN
9586                         l_dlvy_freight_terms_code := p_line_freight_terms_code;
9587                         RAISE e_update;
9588                     ELSE
9589                         RAISE e_end_of_api;
9590                     END IF;
9591                 --}
9592                 */
9593                 END IF;
9594             --}
9595             ELSIF p_action_code='UNASSIGN'
9596             THEN
9597             --{
9598                 IF l_dlvy_freight_terms_code IS NOT NULL
9599                 THEN
9600                     --
9601                     -- All lines in delivery have same freight term.
9602                     -- No need for update, goto end of api.
9603                     --
9604                     RAISE e_end_of_api1;
9605                 END IF;
9606             --}
9607             END IF;
9608         --}
9609         EXCEPTION
9610             WHEN e_end_of_sub THEN
9611                 NULL;
9612         END;
9613         --
9614         --
9615         l_dlvy_freight_terms_code := NULL;
9616         l_cnt                     := 0;
9617         --
9618         --
9619         -- Get distinct freight terms from delivery contents.
9620         -- If any line has null/different freight term, update delivery's freight term to Null.
9621         -- else  update delivery's freight term same as line's
9622         --
9623         FOR line_rec IN line_csr(p_delivery_id)
9624         LOOP
9625         --{
9626             l_cnt := l_cnt + 1;
9627             --
9628             --
9629             IF l_debug_on THEN
9630               wsh_debug_sv.LOG(l_module_name, 'line_rec.freight_Terms_code', line_rec.freight_Terms_code);
9631             END IF;
9632             --
9633             IF line_rec.freight_Terms_code IS NULL
9634             THEN
9635                 l_dlvy_freight_terms_code := NULL;
9636                 EXIT;
9637             ELSIF l_dlvy_freight_terms_code IS NULL
9638             THEN
9639                 l_dlvy_freight_terms_code := line_rec.freight_Terms_code;
9640             ELSIF line_rec.freight_Terms_code <>  l_dlvy_freight_terms_code
9641             THEN
9642                 l_dlvy_freight_terms_code := NULL;
9643                 EXIT;
9644             END IF;
9645         --}
9646         END LOOP;
9647     --}
9648     EXCEPTION
9649         WHEN e_update THEN
9650             l_cnt := 1;
9651     END;
9652     --
9653     --
9654     IF l_cnt > 0
9655     THEN
9656     --{
9657 
9658         IF l_debug_on THEN
9659           wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery freight term to' || l_dlvy_freight_terms_code);
9660         END IF;
9661         --
9662         --OTM R12, this update here is done right after assign/unassign
9663         --of delivery lines, which means the
9664         --tms_interface_flag and tms_version_number should already be
9665         --reflecting the change in delivery,
9666         --no need to set them again.
9667 
9668         UPDATE wsh_new_deliveries
9669         SET    freight_terms_code = l_dlvy_freight_terms_code,
9670                last_update_date   = SYSDATE,
9671                last_updated_by    = FND_GLOBAL.USER_ID,
9672                last_update_login  = FND_GLOBAL.LOGIN_ID
9673         WHERE  delivery_id        = p_delivery_id;
9674         --
9675         IF (SQL%NOTFOUND)
9676         THEN
9677         --{
9678             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9679             fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9680             RAISE FND_API.G_EXC_ERROR;
9681         --}
9682         END IF;
9683         --
9684         x_freight_terms_code := l_dlvy_freight_terms_code;
9685 
9686     --}
9687     END IF;
9688     --
9689     --
9690     IF l_debug_on THEN
9691       wsh_debug_sv.pop(l_module_name);
9692     END IF;
9693     --
9694 --}
9695 EXCEPTION
9696 --{
9697     WHEN e_end_of_api THEN
9698         IF l_debug_on
9699         THEN
9700             WSH_DEBUG_SV.pop(l_module_name);
9701         END IF;
9702     WHEN e_end_of_api1 THEN
9703         IF l_debug_on THEN
9704           wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery WHO columns ' );
9705         END IF;
9706         --
9707         UPDATE wsh_new_deliveries
9708         SET    last_update_date   = SYSDATE,
9709                last_updated_by    = FND_GLOBAL.USER_ID,
9710                last_update_login  = FND_GLOBAL.LOGIN_ID
9711         WHERE  delivery_id        = p_delivery_id;
9712         --
9713         IF (SQL%NOTFOUND)
9714         THEN
9715         --{
9716             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9717             fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9718             WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9719         --}
9720         END IF;
9721         --
9722         IF l_debug_on
9723         THEN
9724             WSH_DEBUG_SV.pop(l_module_name);
9725         END IF;
9726     WHEN FND_API.G_EXC_ERROR THEN
9727         x_return_status := wsh_util_core.g_ret_sts_error;
9728         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9729         --
9730         IF l_debug_on
9731         THEN
9732             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
9733         END IF;
9734     WHEN e_locked THEN
9735         x_return_status := wsh_util_core.g_ret_sts_error;
9736 
9737         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
9738         FND_MESSAGE.SET_TOKEN('ENTITY_NAME', l_name);
9739         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9740         --
9741         IF l_debug_on
9742         THEN
9743             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:e_locked');
9744         END IF;
9745     WHEN OTHERS THEN
9746       x_return_status := fnd_api.g_ret_sts_unexp_error;
9747       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',l_module_name);
9748       --
9749       IF l_debug_on THEN
9750         wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
9751       END IF;
9752 --}
9753 END update_freight_terms;
9754 --
9755 --
9756 -- ----------------------------------------------------------------------
9757 -- Procedure:   update_ship_from_location
9758 --
9759 -- Parameters:  p_delivery_id    Delivery ID
9760 --              p_location_id    Ship from location ID (New value)
9761 --              x_return_status  Return status of API
9762 --
9763 -- COMMENT   : This procedure is called from group API when
9764 --             ship-from location is updated for inbound (not O/IO) delivery.
9765 --
9766 --             It performs the following steps:
9767 --             01. Validate that input delivery id is not null and is a valid delivery.
9768 --             02. Validate that input table of lines contain at least one record.
9769 --             03. If delivery's ship-from location (current value) is not null(-1), return
9770 --             04. Update ship-from location on all delivery lines.
9771 --             05. Update ship-from location for stop associated with delivery's initial pickup location
9772 --                 05.01 Make a call-out to FTE before stop update.
9773 --             06. Update ship-from location for each delivery associated with same stop.
9774 --             07. Put a warning message for each each delivery updated above.
9775 --             08. Update ship-from location for lines of each delivery updated above.
9776 --
9777 --  ----------------------------------------------------------------------
9778 --
9779 PROCEDURE update_ship_from_location
9780             (
9781                p_delivery_id                 IN           NUMBER,
9782                p_location_id                 IN           NUMBER,
9783                x_return_status               OUT NOCOPY   VARCHAR2
9784             )
9785 IS
9786 --{
9787     --
9788     -- Get Delivery Info
9789     --
9790     CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9791     IS
9792         SELECT wnd.name,
9793                initial_pickup_location_id
9794         FROM   wsh_new_deliveries wnd
9795         WHERE  delivery_id             = p_delivery_id;
9796     --
9797     l_dlvy_rec dlvy_csr%ROWTYPE;
9798     --
9799     --
9800     -- Get stop associated with initial pickup location of delivery.
9801     --
9802     CURSOR stop_csr(p_delivery_id IN NUMBER, p_location_id IN NUMBER)
9803     IS
9804         SELECT stop_id
9805         FROM   wsh_delivery_legs wdl,
9806                wsh_trip_stops    wts
9807         WHERE  wdl.delivery_id             = p_delivery_id
9808         AND    wdl.pick_up_stop_id         = wts.stop_id
9809         AND    wts.stop_location_id        = p_location_id;
9810     --
9811     --
9812     stop_rec stop_csr%ROWTYPE;
9813     --
9814     --
9815     -- Get all deliveries being picked up from the same stop.
9816     --
9817     CURSOR pickup_dlvy_csr (p_delivery_id IN NUMBER,p_stop_id IN NUMBER)
9818     IS
9819         SELECT wnd.delivery_id, wnd.name
9820         FROM   wsh_delivery_legs  wdl,
9821                wsh_new_deliveries wnd
9822         WHERE  pick_up_stop_id      = p_stop_id
9823         AND    wdl.delivery_id     <> p_delivery_id
9824         AND    wdl.delivery_id      = wnd.delivery_id;
9825     --
9826     --
9827     l_num_warnings                NUMBER := 0;
9828     l_num_errors                  NUMBER := 0;
9829     l_return_status               VARCHAR2(10);
9830     l_location_name               VARCHAR2(60);
9831 
9832     -- J+ Internal Location
9833     l_physical_stop_id            WSH_TRIP_STOPS.physical_stop_id%TYPE;
9834     l_physical_location_id        WSH_TRIP_STOPS.physical_location_id%TYPE;
9835     l_trip_id_tab                 wsh_util_core.id_tab_type;
9836     l_success_trip_ids            wsh_util_core.id_tab_type;
9837     -- End of J+ Internal Location
9838     l_stop_rec  WSH_TRIP_STOPS_PVT.TRIP_STOP_REC_TYPE;
9839     l_pub_stop_rec  WSH_TRIP_STOPS_PUB.TRIP_STOP_PUB_REC_TYPE;
9840     l_trip_rec  WSH_TRIPS_PVT.TRIP_REC_TYPE;
9841     --
9842     l_debug_on                    BOOLEAN;
9843     --
9844     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_ship_from_location';
9845     --
9846 --}
9847 BEGIN
9848 --{
9849     SAVEPOINT update_ship_from_location_sp;
9850     --
9851     l_debug_on := wsh_debug_interface.g_debug;
9852     --
9853     IF l_debug_on IS NULL THEN
9854       l_debug_on := wsh_debug_sv.is_debug_enabled;
9855     END IF;
9856     --
9857     IF l_debug_on THEN
9858       wsh_debug_sv.push(l_module_name);
9859       --
9860       wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9861       wsh_debug_sv.LOG(l_module_name, 'p_location_id', p_location_id);
9862     END IF;
9863     --
9864     x_return_status := wsh_util_core.g_ret_sts_success;
9865     --
9866     --
9867     IF p_delivery_id IS NULL
9868     THEN
9869     --{
9870         --
9871         -- Delivery id is required field
9872         --
9873         FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9874         FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9875         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9876         --
9877         RAISE FND_API.G_EXC_ERROR;
9878     --}
9879     END IF;
9880     --
9881     --
9882     OPEN dlvy_csr(p_delivery_id);
9883     FETCH dlvy_csr INTO l_dlvy_rec;
9884     CLOSE dlvy_csr;
9885     --
9886     IF l_dlvy_rec.initial_pickup_location_id IS NULL
9887     THEN
9888     --{
9889         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NOT_EXIST');
9890         FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_delivery_id);
9891         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9892         --
9893         RAISE FND_API.G_EXC_ERROR;
9894     --}
9895     END IF;
9896     --
9897     --
9898     IF  l_dlvy_rec.initial_pickup_location_id  = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
9899     AND l_dlvy_rec.initial_pickup_location_id <> p_location_id
9900     THEN
9901     --{
9902         --
9903         -- Get stop associated with initial pickup location of delivery.
9904         --
9905         OPEN stop_csr(p_delivery_id,l_dlvy_rec.initial_pickup_location_id);
9906         FETCH stop_csr INTO stop_rec;
9907         CLOSE stop_csr;
9908         --
9909         /*
9910         UPDATE WSH_NEW_DELIVERIES
9911         SET    INITIAL_PICKUP_LOCATION_ID   = p_location_id,
9912                last_update_date             = SYSDATE,
9913                last_updated_by              = FND_GLOBAL.USER_ID,
9914                last_update_login            = FND_GLOBAL.LOGIN_ID
9915         WHERE  delivery_id                  = p_delivery_id;
9916         */
9917         --
9918         --
9919         UPDATE WSH_DELIVERY_DETAILS
9920         SET    SHIP_FROM_LOCATION_ID        = p_location_id,
9921                last_update_date             = SYSDATE,
9922                last_updated_by              = FND_GLOBAL.USER_ID,
9923                last_update_login            = FND_GLOBAL.LOGIN_ID
9924         WHERE  delivery_detail_id IN (
9925                                         SELECT delivery_detail_id
9926                                         FROM   wsh_delivery_assignments_v
9927                                         WHERE  delivery_id = p_delivery_id
9928                                      );
9929         --
9930         --
9931         IF stop_rec.stop_id IS NOT NULL
9932         THEN
9933         --{
9934                -- Get pvt type record structure for stop
9935                --
9936                -- Debug Statements
9937                --
9938                IF l_debug_on THEN
9939                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
9940                END IF;
9941                --
9942                wsh_trip_stops_grp.get_stop_details_pvt
9943                (p_stop_id => stop_rec.stop_id,
9944                x_stop_rec => l_stop_rec,
9945                x_return_status => l_return_status);
9946                 --
9947                 wsh_util_core.api_post_call
9948                   (
9949                     p_return_status => l_return_status,
9950                     x_num_warnings  => l_num_warnings,
9951                     x_num_errors    => l_num_errors
9952                   );
9953                 --
9954             -- Internal Locations J+
9955             -- Derive the physical location id
9956             IF l_stop_rec.stop_location_id <> p_location_id THEN -- New Location id
9957               IF l_debug_on THEN
9958                 wsh_debug_sv.logmsg(l_module_name,'stop location id has been changed');
9959               END IF;
9960               -- Derive physical Location id for this new location
9961               WSH_LOCATIONS_PKG.Convert_internal_cust_location(
9962                 p_internal_cust_location_id => p_location_id,
9963                 x_internal_org_location_id  => l_physical_location_id, -- New physical Location id
9964                 x_return_status             => l_return_status);
9965 
9966               IF l_debug_on THEN
9967                 wsh_debug_sv.log(l_module_name,'New stop_location_id' , p_location_id);
9968                 wsh_debug_sv.log(l_module_name,'Derived physical_location_id' , l_physical_location_id);
9969               END IF;
9970               -- delink the physical stop id
9971               IF nvl(l_stop_rec.physical_location_id, -99) <> nvl(l_physical_location_id, -99) THEN
9972                 l_stop_rec.physical_stop_id := NULL;
9973                 -- Nullify the physical stop id
9974                 l_physical_stop_id := NULL;
9975                 l_stop_rec.physical_location_id := l_physical_location_id; -- Populate record structure
9976               END IF;
9977             END IF;
9978             -- End of Internal Locations J+
9979                --
9980                /* H integration - call Multi Leg FTE */
9981             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
9982                -- Code changes made in J+ along with Internal Locations
9983                -- Update the Input record structure which FTE uses to validate
9984                -- the new stop location
9985                l_stop_rec.stop_location_id := p_location_id;
9986                -- End of Code changes made in J+
9987                IF l_debug_on THEN
9988                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
9989                END IF;
9990                --
9991                wsh_fte_integration.trip_stop_validations
9992                (p_stop_rec => l_stop_rec,
9993                p_trip_rec => l_trip_rec,
9994                p_action => 'UPDATE',
9995                x_return_status => l_return_status);
9996                 --
9997                 wsh_util_core.api_post_call
9998                   (
9999                     p_return_status => l_return_status,
10000                     x_num_warnings  => l_num_warnings,
10001                     x_num_errors    => l_num_errors
10002                   );
10003                 --
10004             END IF;
10005             --
10006             --
10007             -- J+ Internal Locations, along with new location, update
10008             -- physical_stop_id and physical_location_id
10009             UPDATE wsh_trip_stops
10010             SET    stop_location_id             = p_location_id,
10011                    last_update_date             = SYSDATE,
10012                    last_updated_by              = FND_GLOBAL.USER_ID,
10013                    last_update_login            = FND_GLOBAL.LOGIN_ID,
10014                    physical_stop_id             = l_physical_stop_id, -- J+ Internal Locations
10015                    physical_location_id         = l_physical_location_id -- J+ Internal Locations
10016             WHERE  stop_id                      = stop_rec.stop_id;
10017             --
10018 
10019             -- Internal Locations J+
10020             -- Call Handle Internal Stops API to link the stops
10021             l_trip_id_tab(1) := l_stop_rec.trip_id;
10022             IF l_debug_on THEN
10023               wsh_debug_sv.log(l_module_name,'trip_id' , l_stop_rec.trip_id);
10024               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Handle_Internal_Stops',WSH_DEBUG_SV.C_PROC_LEVEL);
10025             END IF;
10026 
10027             WSH_TRIPS_ACTIONS.Handle_Internal_Stops(
10028                    p_trip_ids          => l_trip_id_tab,
10029                    p_caller            => 'WSH_UPDATE_SHIP_FROM_LOC',
10030                    x_success_trip_ids  => l_success_trip_ids,
10031                    x_return_status     => l_return_status);
10032 
10033             wsh_util_core.api_post_call(
10034                    p_return_status => l_return_status,
10035                    x_num_warnings  => l_num_warnings,
10036                    x_num_errors    => l_num_errors);
10037             -- End of Internal Locations J+
10038             --
10039 
10040             l_location_name := NULL;
10041             --
10042             --
10043             -- Get all deliveries being picked up from the same stop.
10044             --
10045             FOR pickup_dlvy_rec IN pickup_dlvy_csr (p_delivery_id , stop_rec.stop_id)
10046             LOOP
10047             --{
10048                 --OTM R12, this update is called by inbound so we
10049                 --will not check tms flag here
10050                 UPDATE WSH_NEW_DELIVERIES
10051                 SET    INITIAL_PICKUP_LOCATION_ID   = p_location_id,
10052                        last_update_date             = SYSDATE,
10053                        last_updated_by              = FND_GLOBAL.USER_ID,
10054                        last_update_login            = FND_GLOBAL.LOGIN_ID
10055                 WHERE  delivery_id                  = pickup_dlvy_rec.delivery_id;
10056                 --
10057                 --
10058                 UPDATE WSH_DELIVERY_DETAILS
10059                 SET    SHIP_FROM_LOCATION_ID        = p_location_id,
10060                        last_update_date             = SYSDATE,
10061                        last_updated_by              = FND_GLOBAL.USER_ID,
10062                        last_update_login            = FND_GLOBAL.LOGIN_ID
10063                 WHERE  delivery_detail_id IN (
10064                                                 SELECT delivery_detail_id
10065                                                 FROM   wsh_delivery_assignments_v
10066                                                 WHERE  delivery_id = pickup_dlvy_rec.delivery_id
10067                                              );
10068                 --
10069                 --
10070                 IF l_location_name IS NULL
10071                 THEN
10072                 --{
10073                     IF l_debug_on THEN
10074                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_location_description',WSH_DEBUG_SV.C_PROC_LEVEL);
10075                     END IF;
10076                     --
10077                     l_location_name := SUBSTRB(
10078                                                 WSH_UTIL_CORE.get_location_description
10079                                                   (
10080                                                     p_location_id,
10081                                                     'NEW UI CODE'
10082                                                   ),
10083                                                 1,
10084                                                 60
10085                                               );
10086                 --}
10087                 END IF;
10088                 --
10089                 --
10090                 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_PU_LOCN_UPDATE');
10091                 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', pickup_dlvy_rec.name);
10092                 FND_MESSAGE.SET_TOKEN('LOCATION_NAME', l_location_name);
10093                 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_warning,l_module_name);
10094                 l_num_warnings := l_num_warnings + 1;
10095             --}
10096             END LOOP;
10097         --}
10098         END IF;
10099     --}
10100     END IF;
10101     --
10102     --
10103     --
10104     IF l_num_errors > 0
10105     THEN
10106         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10107     ELSIF l_num_warnings > 0
10108     THEN
10109         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10110     ELSE
10111         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10112     END IF;
10113     --
10114     IF l_debug_on THEN
10115       wsh_debug_sv.pop(l_module_name);
10116     END IF;
10117     --
10118 --}
10119 EXCEPTION
10120 --{
10121       --
10122     WHEN FND_API.G_EXC_ERROR THEN
10123 
10124       ROLLBACK TO  update_ship_from_location_sp;
10125       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10126       --
10127       IF l_debug_on THEN
10128         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10129         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10130       END IF;
10131       --
10132     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10133 
10134       ROLLBACK TO  update_ship_from_location_sp;
10135       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10136       --
10137       IF l_debug_on THEN
10138         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10139         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10140       END IF;
10141       --
10142     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10143       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10144       --
10145       IF l_debug_on THEN
10146         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10147         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10148       END IF;
10149       --
10150     WHEN OTHERS THEN
10151 
10152         ROLLBACK TO  update_ship_from_location_sp;
10153         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10154         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_ship_from_location', l_module_name);
10155         IF l_debug_on THEN
10156            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10157         END IF;
10158         --
10159 --}
10160 END update_ship_from_location;
10161 
10162 -- J-IB-NPARIKH---}
10163 
10164 -- Look for Open deliveries in Trip
10165 -- If any delivery exists with status = OPEN in the trip ,then RETURN FALSE
10166 -- If no open delivery exists ,then RETURN TRUE
10167 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
10168  return BOOLEAN IS
10169 
10170 -- First row found is enough
10171 
10172 -- bug 4891897, sql 15038247
10173 -- 1) wsh_delivery_trips_v is replaced with the join of
10174 --    wsh_delivery_legs and wsh_trip_stops
10175 -- 2) query is flattened instead of using the subquery for lower sharable memory
10176 
10177   CURSOR Check_Last_Trip (l_delivery_id NUMBER) IS
10178   SELECT s1.trip_id
10179     FROM wsh_trip_stops s1,
10180          wsh_delivery_legs dl1,
10181          wsh_new_deliveries d1,
10182          wsh_trip_stops s2,
10183          wsh_delivery_legs dl2
10184    WHERE d1.delivery_id <> l_delivery_id
10185      AND s1.stop_id = dl1.pick_up_stop_id
10186      AND d1.delivery_id = dl1.delivery_id
10187      AND d1.status_code = 'OP'
10188      AND d1.delivery_type = 'STANDARD'
10189      AND s2.trip_id = s1.trip_id
10190      AND s2.stop_id = dl2.pick_up_stop_id
10191      AND dl2.delivery_id = l_delivery_id
10192      AND rownum = 1;
10193 
10194   l_trip_id NUMBER;
10195 
10196     l_debug_on                    BOOLEAN;
10197     --
10198     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'check_last_del_trip';
10199     --
10200 BEGIN
10201 
10202   l_debug_on := wsh_debug_interface.g_debug;
10203   --
10204   IF l_debug_on IS NULL THEN
10205     l_debug_on := wsh_debug_sv.is_debug_enabled;
10206   END IF;
10207   --
10208   IF l_debug_on THEN
10209     wsh_debug_sv.push(l_module_name);
10210     --
10211    --
10212     wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10213   END IF;
10214 
10215   OPEN check_last_trip(p_delivery_id);
10216   FETCH check_last_trip
10217    INTO l_trip_id;
10218   CLOSE check_last_trip;
10219 
10220   IF l_trip_id IS NOT NULL THEN -- found a open delivery
10221     IF l_debug_on THEN
10222       wsh_debug_sv.LOGMSG(l_module_name, 'Last Del on Trip-' || l_trip_id);
10223       wsh_debug_sv.pop(l_module_name);
10224     END IF;
10225     return FALSE;
10226   ELSE  -- no open delivery
10227     IF l_debug_on THEN
10228       wsh_debug_sv.LOGMSG(l_module_name, 'THIS IS LAST OPEN DELIVERY on TRIP');
10229       wsh_debug_sv.pop(l_module_name);
10230     END IF;
10231     return TRUE;
10232   END IF;
10233 
10234   IF l_debug_on THEN
10235     wsh_debug_sv.pop(l_module_name);
10236   END IF;
10237 
10238 EXCEPTION
10239 
10240   WHEN OTHERS THEN
10241     wsh_util_core.default_handler('wsh_new_delivery_actions.check_last_del_trip',l_module_name);
10242       --
10243     IF l_debug_on THEN
10244       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10245     END IF;
10246     RETURN FALSE;
10247 END check_last_del_trip;
10248 
10249 -- ---------------------------------------------------------------------------
10250 -- NAME:                GET_TRIP_STATUS
10251 -- TYPE:                FUNCTION
10252 -- PARAMETERS(IN):      p_delivery_id IN  NUMBER
10253 --
10254 -- RETURN:              MANY     - delivery is assigned to more than one trip
10255 --                      SHARED   - trip to which this delivery is assigned is
10256 --                                 shared with other deliveries
10257 --                      HAS_LANE - trip to which this delivery is assigned has
10258 --                                 Lane/Service assigned
10259 --                      NONE     - delivery is not assigned to a trip
10260 --                      ONE      - delivery is assigned to one trip and this
10261 --                                 trip is not shared with other deliveries
10262 -- DESCRIPTION:         get the relationship between the delivery and the trip
10263 --
10264 -- CALLED FROM PROCESS_CARRIER_SELECTION
10265 -- ADDED BY HJPARK AS PART OF 11i10+ ENHANCEMENT 9/20/2004
10266 -- ---------------------------------------------------------------------------
10267 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2) return VARCHAR2 IS
10268 --FUNCTION GET_TRIP_STATUS(p_delivery_id IN NUMBER) return VARCHAR2 IS
10269 
10270   l_debug_on        BOOLEAN;
10271   l_module_name     CONSTANT VARCHAR2(100) := 'wsh.plsql.'||g_pkg_name||'.'||'get_trip_status';
10272 
10273   l_count           NUMBER;
10274   l_delivery_leg_id NUMBER;
10275   l_trip_id         NUMBER;
10276   l_lane_id         NUMBER;
10277 
10278   CURSOR check_many_trips(x_delivery_id NUMBER) IS
10279   SELECT count(delivery_leg_id), min(delivery_leg_id)
10280     FROM wsh_delivery_legs
10281    WHERE delivery_id = x_delivery_id;
10282 
10283   CURSOR check_shared_trip(x_delivery_leg_id NUMBER) IS
10284   SELECT count(s.trip_id ), min(s.trip_id)
10285     FROM wsh_delivery_legs d, wsh_trip_stops s
10286    WHERE d.pick_up_stop_id = s.stop_id
10287      AND s.trip_id = (SELECT s1.trip_id
10288                         FROM wsh_trip_stops s1, wsh_delivery_legs d1
10289                        WHERE d1.delivery_leg_id = x_delivery_leg_id
10290                          AND s1.stop_id = d1.pick_up_stop_id);
10291 
10292   -- Hiding project
10293   -- count('CONSOLIDATION') should be 1
10294 
10295   CURSOR check_shared_trip_consol(x_delivery_leg_id NUMBER) IS
10296   SELECT count(*), min(s.trip_id)
10297   FROM wsh_new_deliveries n, wsh_delivery_legs d, wsh_trip_stops s
10298    WHERE n.delivery_id = d.delivery_id
10299      AND d.pick_up_stop_id = s.stop_id
10300      AND s.trip_id = (SELECT s1.trip_id
10301                         FROM wsh_trip_stops s1, wsh_delivery_legs d1
10302                        WHERE d1.delivery_leg_id = x_delivery_leg_id
10303                          AND s1.stop_id = d1.pick_up_stop_id)
10304      AND d.parent_delivery_leg_id IS NULL;
10305 
10306   CURSOR check_trip_lane(x_trip_id NUMBER) IS
10307   SELECT lane_id
10308     FROM wsh_trips
10309    WHERE trip_id = x_trip_id;
10310 
10311 BEGIN
10312 
10313   l_debug_on := wsh_debug_interface.g_debug;
10314   IF l_debug_on IS NULL THEN
10315     l_debug_on := wsh_debug_sv.is_debug_enabled;
10316   END IF;
10317   IF l_debug_on THEN
10318     wsh_debug_sv.push(l_module_name);
10319     wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10320   END IF;
10321 
10322   -- checks whether the delivery is assigned to a trip
10323 
10324   OPEN check_many_trips(p_delivery_id);
10325   FETCH check_many_trips INTO l_count, l_delivery_leg_id;
10326   CLOSE check_many_trips;
10327 
10328   IF (l_count = 0) THEN
10329     -- delivery is not assigned to a trip
10330     IF l_debug_on THEN
10331       wsh_debug_sv.LOGMSG(l_module_name, 'NONE');
10332       wsh_debug_sv.pop(l_module_name);
10333     END IF;
10334     return 'NONE';
10335   ELSIF (l_count > 1) THEN
10336     -- delivery is assigned to more than one trip
10337     IF l_debug_on THEN
10338       wsh_debug_sv.LOGMSG(l_module_name, 'MANY');
10339       wsh_debug_sv.pop(l_module_name);
10340     END IF;
10341     return 'MANY';
10342   END IF;
10343 
10344 
10345   -- comes here when the delivery is assigned to only one trip
10346   -- checks whether the trip is shared by more than one delivery
10347 
10348   IF p_delivery_type = 'CONSOLIDATION' THEN
10349 
10350   -- Hiding project
10351   -- A consol delivery can be assigned to only 1 trip
10352   -- But the trip can have other consol / regular / content deliveries on that trip
10353   -- The action should be allowed only if other deliveries in this trip
10354   -- are only the child content deliveries of this consol delivery
10355 
10356   OPEN check_shared_trip_consol(l_delivery_leg_id);
10357   FETCH check_shared_trip_consol INTO l_count,l_trip_id;
10358   CLOSE check_shared_trip_consol;
10359 
10360   IF (l_count > 1) THEN
10361     -- trip is shared by more than one delivery - Error
10362     IF l_debug_on THEN
10363       wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10364       wsh_debug_sv.pop(l_module_name);
10365     END IF;
10366     return 'SHARED';
10367   END IF;
10368 
10369   ELSE
10370 
10371   OPEN check_shared_trip(l_delivery_leg_id);
10372   FETCH check_shared_trip INTO l_count, l_trip_id;
10373   CLOSE check_shared_trip;
10374 
10375   IF (l_count > 1) THEN
10376     -- trip is shared by more than one delivery - Error
10377     IF l_debug_on THEN
10378       wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10379       wsh_debug_sv.pop(l_module_name);
10380     END IF;
10381     return 'SHARED';
10382   END IF;
10383 
10384   END IF;
10385   -- comes here when the trip is used only by this delivery, hence 1:1
10386   -- checks whether trip has lane assigned
10387 
10388   OPEN check_trip_lane(l_trip_id);
10389   FETCH check_trip_lane INTO l_lane_id;
10390   CLOSE check_trip_lane;
10391 
10392   IF l_lane_id is not NULL
10393   THEN
10394     IF l_debug_on THEN
10395       wsh_debug_sv.LOGMSG(l_module_name, 'HAS_LANE');
10396       wsh_debug_sv.pop(l_module_name);
10397     END IF;
10398     return 'HAS_LANE';
10399   ELSE
10400     IF l_debug_on THEN
10401       wsh_debug_sv.LOGMSG(l_module_name, 'ONE-'||l_trip_id);
10402       wsh_debug_sv.pop(l_module_name);
10403     END IF;
10404     return 'ONE-'||l_trip_id;
10405   END IF;
10406 
10407 EXCEPTION
10408   WHEN OTHERS THEN
10409     wsh_util_core.default_handler('wsh_new_delivery_actions.get_trip_status',l_module_name);
10410       --
10411     IF l_debug_on THEN
10412       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10413     END IF;
10414 
10415 END GET_TRIP_STATUS;
10416 
10417 --SBAKSHI(R12)
10418 --***************************************************************************--
10419 --========================================================================
10420 -- FUNCTION  :  IS_DLVY_CONTENT      PRIVATE
10421 --
10422 -- PARAMETERS: p_delivery_id		Delivery Id
10423 --
10424 -- COMMENT   : Returns True if the delivery is content
10425 --
10426 --***************************************************************************--
10427 FUNCTION IS_DLVY_CONTENT(p_delivery_id IN NUMBER)
10428 	RETURN BOOLEAN
10429 IS
10430 
10431 /*
10432 	When we query for a parent delivery of a delivery we
10433 	should always use wsh_delivery_legs instead of wsh_delivery_assignments.
10434 	If the child delivery does not have any lines attached to it,
10435 	it will not have record in wda, whereas a console delivery and
10436 	its children will always have a trip, and a record in wdl.
10437 */
10438 
10439 CURSOR c_get_console_delivery (c_delivery_id IN NUMBER) IS
10440 select pleg.delivery_id
10441 from   wsh_delivery_legs pleg,
10442        wsh_delivery_legs cleg
10443 where  pleg.delivery_leg_id = cleg.parent_delivery_leg_id
10444 and    cleg.delivery_id = c_delivery_id;
10445 
10446 l_delivery_id		NUMBER;
10447 l_content_dlvy		BOOLEAN := FALSE;
10448 
10449 l_debug_on         CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10450 l_module_name      CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_DLVY_CONTENT';
10451 
10452 BEGIN
10453 
10454         --
10455         IF l_debug_on THEN
10456 	       wsh_debug_sv.push (l_module_name);
10457         END IF;
10458         --
10459 
10460 	OPEN  c_get_console_delivery(p_delivery_id) ;
10461 	FETCH c_get_console_delivery INTO l_delivery_id;
10462 
10463 	IF (l_delivery_id IS NOT NULL) THEN
10464 		-- The dlvy is assigned to a console delivery
10465 		l_content_dlvy := TRUE;
10466 	END IF;
10467 	CLOSE c_get_console_delivery;
10468 
10469 	--
10470         IF l_debug_on THEN
10471 	     wsh_debug_sv.pop(l_module_name);
10472         END IF;
10473         --
10474 	RETURN l_content_dlvy;
10475 
10476 EXCEPTION
10477 WHEN OTHERS THEN
10478 
10479       IF c_get_console_delivery%ISOPEN THEN
10480          CLOSE c_get_console_delivery;
10481       END IF;
10482 
10483       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.IS_DLVY_CONTENT');
10484       --
10485       IF l_debug_on THEN
10486         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10487         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10488       END IF;
10489 
10490 END IS_DLVY_CONTENT;
10491 
10492 --***************************************************************************--
10493 --========================================================================
10494 -- PROCEDURE : GET_SHIP_TO_SITE       PRIVATE
10495 --
10496 -- PARAMETERS: p_delivery_id	      Delivery Id
10497 --	       x_site_id	      Customer Site Id.
10498 --             x_return_status	      Return Status
10499 --
10500 -- COMMENT   : Returns the ship to site associated with the delivery.
10501 --
10502 --***************************************************************************--
10503 PROCEDURE GET_SHIP_TO_SITE(p_delivery_id	IN	   NUMBER,
10504                            p_delivery_type      IN         VARCHAR2  DEFAULT NULL,
10505                            p_ultimate_dropoff_loc_id  IN NUMBER DEFAULT NULL,
10506 			   x_site_id		OUT NOCOPY NUMBER,
10507 			   x_return_status	OUT NOCOPY VARCHAR2)
10508 IS
10509 
10510 CURSOR c_get_ship_to_site IS
10511 SELECT DISTINCT wdd.ship_to_site_use_id
10512 FROM   wsh_delivery_details wdd,
10513        wsh_delivery_assignments wda
10514 WHERE  wda.delivery_detail_id  =  wdd.delivery_detail_id
10515 AND    wda.delivery_id         =  p_delivery_id
10516 AND    wdd.ship_to_site_use_id IS NOT NULL;
10517 
10518 CURSOR c_ship_to_site_use(c_location_id IN NUMBER) IS
10519 SELECT SITE.SITE_USE_ID
10520 FROM HZ_CUST_ACCT_SITES_ALL     ACCT_SITE,
10521  HZ_PARTY_SITES             PARTY_SITE,
10522  HZ_LOCATIONS               LOC,
10523  HZ_CUST_SITE_USES_ALL      SITE
10524 WHERE
10525  SITE.SITE_USE_CODE = 'SHIP_TO'
10526  AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
10527  AND ACCT_SITE.PARTY_SITE_ID    = PARTY_SITE.PARTY_SITE_ID
10528  AND PARTY_SITE.LOCATION_ID     = LOC.LOCATION_ID
10529  AND LOC.LOCATION_ID = c_location_id;
10530 
10531 l_site_tab			WSH_UTIL_CORE.ID_TAB_TYPE;
10532 multiple_ship_to_site		EXCEPTION;
10533 no_ship_to_site			EXCEPTION;
10534 
10535 l_debug_on         CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10536 l_module_name      CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_SITE';
10537 
10538 BEGIN
10539 
10540 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10541 	--
10542         IF l_debug_on THEN
10543 	       wsh_debug_sv.push (l_module_name);
10544         END IF;
10545 	--
10546 
10547         IF p_delivery_type = 'STANDARD' THEN
10548 
10549 	OPEN  c_get_ship_to_site;
10550 	FETCH c_get_ship_to_site BULK COLLECT INTO l_site_tab;
10551 	CLOSE c_get_ship_to_site;
10552 
10553 	IF (l_site_tab.COUNT = 1) THEN
10554 		x_site_id := l_site_tab(l_site_tab.FIRST);
10555 	ELSIF (l_site_tab.COUNT = 0 ) THEN
10556 		RAISE NO_SHIP_TO_SITE;
10557 	ELSE
10558 		RAISE MULTIPLE_SHIP_TO_SITE;
10559 	END IF;
10560 
10561         ELSIF p_delivery_type = 'CONSOLIDATION' THEN
10562 
10563         OPEN c_ship_to_site_use(p_ultimate_dropoff_loc_id);
10564         FETCH c_ship_to_site_use INTO x_site_id;
10565         IF c_ship_to_site_use%NOTFOUND THEN
10566             x_site_id := NULL;
10567         END IF;
10568         CLOSE c_ship_to_site_use;
10569 
10570         END IF;
10571 
10572 
10573 	--
10574 	IF l_debug_on THEN
10575 	      WSH_DEBUG_SV.pop(l_module_name);
10576 	END IF;
10577         --
10578 EXCEPTION
10579 
10580 WHEN NO_SHIP_TO_SITE THEN
10581 	 -- Delivery is not assoociated with a site.
10582 	IF l_debug_on THEN
10583           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with a site');
10584 	END IF;
10585 	 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_SITE');
10586          FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10587          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10588 	 WSH_UTIL_CORE.add_message(x_return_status);
10589 
10590 	IF l_debug_on THEN
10591 	      WSH_DEBUG_SV.pop(l_module_name);
10592 	END IF;
10593 
10594 WHEN MULTIPLE_SHIP_TO_SITE THEN
10595 
10596 	 -- Delivery is associated with multiple sites
10597 	IF l_debug_on THEN
10598           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with multiple sites');
10599 	END IF;
10600 	 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_MULT_SITE');
10601          FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10602 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10603 	 WSH_UTIL_CORE.add_message(x_return_status);
10604 
10605 	IF l_debug_on THEN
10606 	      WSH_DEBUG_SV.pop(l_module_name);
10607 	END IF;
10608 
10609 WHEN OTHERS THEN
10610 
10611 	IF ( c_get_ship_to_site%ISOPEN) THEN
10612 		CLOSE c_get_ship_to_site;
10613 	END IF;
10614 	--
10615         WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_site');
10616         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10617         --
10618 
10619 	IF l_debug_on THEN
10620           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10621           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10622         END IF;
10623        --
10624 END GET_SHIP_TO_SITE;
10625 
10626 
10627 --***************************************************************************--
10628 --========================================================================
10629 -- PROCEDURE : GET_SHIP_TO_CUSTOMER   PRIVATE
10630 --
10631 -- PARAMETERS:  p_ult_dropoff_loc_id   Drop off location id.
10632 --		p_delivery_id	       Delivery Id.
10633 --	        x_customer_id	       Customer Id.
10634 --              x_return_status	       Return Status
10635 --
10636 -- COMMENT   : Returns the customer associated with the given location.
10637 --
10638 --***************************************************************************--
10639 PROCEDURE GET_SHIP_TO_CUSTOMER( p_ult_dropoff_loc_id	IN  	   NUMBER,
10640 				p_delivery_id		IN	   NUMBER,
10641 				x_customer_id		OUT NOCOPY NUMBER,
10642 				x_return_status		OUT NOCOPY VARCHAR2)
10643 IS
10644 
10645 CURSOR c_get_shipto_cust_from_loc (p_location_id IN NUMBER) IS
10646 SELECT hcas.cust_account_id
10647 FROM   wsh_locations wl,
10648        hz_party_sites hps,
10649        hz_cust_acct_sites_all hcas
10650 WHERE  wl.wsh_location_id = p_location_id
10651 AND    wl.location_source_code = 'HZ'
10652 AND    wl.source_location_id = hps.location_id
10653 AND    hps.party_site_id = hcas.party_site_id;
10654 
10655 
10656 CURSOR c_get_shipto_cust_from_dlvy(p_delivery_id IN NUMBER) IS
10657 SELECT distinct hcas.cust_account_id
10658 FROM   hz_cust_site_uses_all hcsu,
10659        hz_cust_acct_sites_all hcas
10660  WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
10661  AND   hcsu.site_use_id IN (SELECT DISTINCT wdd.ship_to_site_use_id
10662 			    FROM   wsh_delivery_details wdd,
10663 				   wsh_delivery_assignments wda
10664  		            WHERE  wda.delivery_detail_id  = wdd.delivery_detail_id
10665 		            AND     wda.delivery_id        = p_delivery_id);
10666 
10667 
10668 l_cust_tab		WSH_UTIL_CORE.ID_TAB_TYPE;
10669 no_cust_for_loc		EXCEPTION;
10670 mult_cust_for_loc	EXCEPTION;
10671 
10672 l_debug_on		CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10673 l_module_name		CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_CUSTOMER';
10674 
10675 BEGIN
10676 
10677 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10678 	--
10679         IF l_debug_on THEN
10680 	       wsh_debug_sv.push (l_module_name);
10681         END IF;
10682 	--
10683 
10684 	OPEN  c_get_shipto_cust_from_loc(p_ult_dropoff_loc_id);
10685 	FETCH c_get_shipto_cust_from_loc BULK COLLECT INTO l_cust_tab;
10686 	CLOSE c_get_shipto_cust_from_loc;
10687 
10688 	IF (l_cust_tab.COUNT=1) THEN
10689 		x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10690 	ELSIF (l_cust_tab.COUNT = 0) THEN
10691 		-- Location is not associated with a customer.
10692 		RAISE NO_CUST_FOR_LOC;
10693 	ELSE
10694 		-- Multiple records have been returned.
10695 		-- For the delivery get the delivery lines and use ship to site id
10696 		-- to return the customer. check that each has the same customer.
10697 		OPEN  c_get_shipto_cust_from_dlvy(p_delivery_id);
10698 		FETCH c_get_shipto_cust_from_dlvy BULK COLLECT INTO l_cust_tab;
10699 		CLOSE c_get_shipto_cust_from_dlvy;
10700 
10701 		IF (l_cust_tab.COUNT=1) THEN
10702 			x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10703 		ELSIF (l_cust_tab.COUNT=0) THEN
10704 			RAISE NO_CUST_FOR_LOC;
10705 		ELSE
10706 			RAISE MULT_CUST_FOR_LOC;
10707 		END IF;
10708 	END IF;
10709 
10710 	--
10711 	IF l_debug_on THEN
10712 	      WSH_DEBUG_SV.pop(l_module_name);
10713 	END IF;
10714         --
10715 EXCEPTION
10716 
10717 	WHEN NO_CUST_FOR_LOC THEN
10718 		IF l_debug_on THEN
10719                   wsh_debug_sv.logmsg(l_module_name, 'Location not associated with a customer');
10720 		END IF;
10721 		  -- Location not associated with a customer.
10722 		 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_NO_LOC');
10723          FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10724 		 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10725 		 WSH_UTIL_CORE.add_message(x_return_status);
10726 
10727 		IF l_debug_on THEN
10728 		      WSH_DEBUG_SV.pop(l_module_name);
10729 		END IF;
10730 	WHEN MULT_CUST_FOR_LOC THEN
10731 		 -- Location  associated with a multiple customers.
10732 		IF l_debug_on THEN
10733                   wsh_debug_sv.logmsg(l_module_name, 'Location associated with multiple customers');
10734 		END IF;
10735 		 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_MULT_LOC');
10736          FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10737 		 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10738 		 WSH_UTIL_CORE.add_message(x_return_status);
10739 
10740 		IF l_debug_on THEN
10741 		      WSH_DEBUG_SV.pop(l_module_name);
10742 		END IF;
10743 	WHEN OTHERS THEN
10744 		IF (c_get_shipto_cust_from_loc%ISOPEN) THEN
10745 			CLOSE c_get_shipto_cust_from_loc;
10746 		END IF;
10747 
10748 		IF (c_get_shipto_cust_from_dlvy%ISOPEN) THEN
10749 			CLOSE c_get_shipto_cust_from_dlvy;
10750 		END IF;
10751 		--
10752 		WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_customer');
10753 	        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10754 	        --
10755   		IF l_debug_on THEN
10756 	          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10757 		  WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10758 		END IF;
10759 		--
10760 END GET_SHIP_TO_CUSTOMER;
10761 
10762 ---------------------------------------------------------------------------------------
10763 -- Procedure:   SET_PICK_UP_DROP_OFF_DATES
10764 --
10765 -- Parameters:  p_cs_mleg_result_tab     IN OUT table
10766 --              x_return_message            Return Message
10767 --              x_return_status             Return Status
10768 --
10769 -- COMMENT   : This procedure is called from Process_carrier_selection API
10770 --		in order to get pick up and drop off dates for intermediate stops.
10771 --		If Carrier selection API returns multileg output, the dates have to
10772 --      determined.
10773 --
10774 --      Logic for determining the dates:
10775 --
10776 --      a) Find transit time between delivery leg's pick up and drop off stops
10777 --      b) If transit time found
10778 --          i. drop off date = pick up date +transit time
10779 --      c) if transit time is not found, calculate total time between deliveries
10780 --          pick up and drop off stops and divide it equally amongst all the delivery legs.
10781 --
10782 --  ----------------------------------------------------------------------
10783 
10784 PROCEDURE SET_PICK_UP_DROP_OFF_DATES(
10785         p_cs_mleg_result_tab  IN OUT NOCOPY WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
10786         x_return_status          OUT NOCOPY VARCHAR2,
10787         x_msg_count              OUT NOCOPY NUMBER,
10788         x_msg_data               OUT NOCOPY VARCHAR2
10789 ) IS
10790 
10791 transit_time                NUMBER;
10792 transit_time_found          BOOLEAN := TRUE;
10793 from_location_id            NUMBER;
10794 to_location_id              NUMBER;
10795 ship_method                 VARCHAR2(60);
10796 num_legs                    NUMBER;
10797 num_days                    NUMBER;
10798 num_hours                   NUMBER;
10799 days_fraction               NUMBER;
10800 rec_cnt                     NUMBER;
10801 rec_cnt_prior               NUMBER;
10802 pick_up_date                DATE;
10803 drop_off_date               DATE;
10804 initial_pick_up_date        DATE;
10805 ultimate_drop_off_date      DATE;
10806 d_itr                       NUMBER;
10807 
10808 l_debug_on                  BOOLEAN;
10809 
10810 l_module_name               CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SET_PICK_UP_DROP_OFF_DATES';
10811 
10812 CURSOR get_transit_time(p_from_location_id  NUMBER,
10813                         p_to_location_id NUMBER,
10814                         p_ship_method VARCHAR2) IS
10815 
10816 SELECT INTRANSIT_TIME
10817 FROM MTL_INTERORG_SHIP_METHODS
10818 WHERE FROM_LOCATION_ID = p_from_location_id
10819 AND TO_LOCATION_ID = p_to_location_id
10820 AND SHIP_METHOD = p_ship_method;
10821 
10822 BEGIN
10823 --{
10824     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10825 
10826     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10827 
10828     --
10829     IF l_debug_on IS NULL
10830     THEN
10831       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10832     END IF;
10833     --
10834 
10835     IF l_debug_on THEN
10836       WSH_DEBUG_SV.push(l_module_name);
10837     END IF;
10838 
10839     --
10840     -- Obtain number of delivery legs, initial pick up date and ultimate drop off date for the delivery
10841     --
10842 
10843     num_legs := p_cs_mleg_result_tab.COUNT;
10844     initial_pick_up_date    := p_cs_mleg_result_tab(p_cs_mleg_result_tab.FIRST).pickup_date;
10845     ultimate_drop_off_date  := p_cs_mleg_result_tab(p_cs_mleg_result_tab.LAST).dropoff_date;
10846 
10847     IF l_debug_on THEN
10848         WSH_DEBUG_SV.logmsg(l_module_name,'No of legs :'||num_legs);
10849         WSH_DEBUG_SV.logmsg(l_module_name,'initial_pick_up_date :'||to_char(initial_pick_up_date, 'dd/mm/yyyy hh:mi:ss'));
10850         WSH_DEBUG_SV.logmsg(l_module_name,'ultimate_drop_off_date :'||to_char(ultimate_drop_off_date, 'dd/mm/yyyy hh:mi:ss'));
10851     END IF;
10852 
10853 
10854     rec_cnt := p_cs_mleg_result_tab.FIRST;
10855 
10856     IF rec_cnt IS NOT NULL THEN
10857         IF initial_pick_up_date = ultimate_drop_off_date   THEN
10858             LOOP
10859                 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
10860 
10861                 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
10862                     pick_up_date := initial_pick_up_date;
10863                 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
10864                     -- pick up date is one hour more than drop off date of last stop
10865                     pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
10866                 END IF;
10867 
10868                 drop_off_date := pick_up_date + 1/144;
10869 
10870                 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
10871                 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10872 
10873                 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
10874                 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
10875             END LOOP;
10876         ELSE
10877 
10878 
10879             --IF rec_cnt IS NOT NULL THEN
10880 
10881                 LOOP
10882                 --{
10883                     transit_time := null;
10884                     rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
10885 
10886                     IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
10887                         pick_up_date := initial_pick_up_date;
10888                     ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
10889                         -- pick up date is one hour more than drop off date of last stop
10890                         pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
10891                     END IF;
10892 
10893                     p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
10894 
10895                     IF transit_time_found = TRUE THEN
10896                     --{
10897                         from_location_id :=  p_cs_mleg_result_tab(rec_cnt).initial_pickup_location_id;
10898                         to_location_id   :=  p_cs_mleg_result_tab(rec_cnt).ultimate_dropoff_location_id;
10899                         ship_method      :=  p_cs_mleg_result_tab(rec_cnt).ship_method_code;
10900 
10901                         OPEN get_transit_time (from_location_id, to_location_id, ship_method);
10902                             FETCH get_transit_time into transit_time;
10903                         CLOSE get_transit_time;
10904 
10905                         --
10906                         -- If transit time is not found for a leg, divide remaining time equally between different legs
10907                         --
10908 
10909                         IF transit_time IS NULL THEN
10910                         --{
10911                             transit_time_found := false;
10912                             num_days           := ultimate_drop_off_date - pick_up_date;
10913                             IF num_days > (num_legs-1)/24 THEN
10914                                 days_fraction      := (num_days - (num_legs-2)/24)/ num_legs;
10915                             ELSE
10916                                 days_fraction      := num_days / num_legs;
10917                             END IF;
10918                             drop_off_date      := pick_up_date + days_fraction;
10919 
10920                             p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10921                         --}
10922                         ELSE -- transit time is not null
10923                         --{
10924                             IF l_debug_on THEN
10925                                 WSH_DEBUG_SV.log(l_module_name, 'transit_time_found', transit_time_found);
10926                                 WSH_DEBUG_SV.log(l_module_name, 'from_location_id', from_location_id);
10927                                 WSH_DEBUG_SV.log(l_module_name, 'to_location_id', to_location_id);
10928                                 WSH_DEBUG_SV.log(l_module_name, 'ship_method', ship_method);
10929                                 WSH_DEBUG_SV.log(l_module_name, 'transit_time', transit_time);
10930                             END IF;
10931 
10932                             IF rec_cnt = p_cs_mleg_result_tab.LAST THEN
10933                                 drop_off_date := ultimate_drop_off_date;
10934                             ELSE
10935                                 drop_off_date := pick_up_date + transit_time;
10936                             END IF;
10937 
10938                             IF drop_off_date < ultimate_drop_off_date THEN
10939                                p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10940                                num_legs := num_legs - 1;
10941                             ELSIF drop_off_date = ultimate_drop_off_date THEN
10942                                 IF drop_off_date <= pick_up_date THEN
10943                                     p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date + 1/24;
10944                                     ultimate_drop_off_date := ultimate_drop_off_date + 1/24;
10945                                 END IF;
10946                                 num_legs := num_legs - 1;
10947                             ELSE
10948                                 transit_time_found := false;
10949 
10950                                 IF p_cs_mleg_result_tab.EXISTS(rec_cnt_prior) THEN
10951                                     num_days := ultimate_drop_off_date - p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date;
10952                                 ELSE
10953                                     num_days := ultimate_drop_off_date - pick_up_date;
10954                                 END IF;
10955                                 IF num_days > (num_legs-1)/24 THEN
10956                                     days_fraction      := (num_days - (num_legs-2)/24)/ num_legs;
10957                                 ELSE
10958                                     days_fraction      := num_days / num_legs;
10959                                 END IF;
10960                                 --days_fraction := num_days / num_legs;
10961                                 drop_off_date := pick_up_date + days_fraction;
10962                                 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10963                             END IF;
10964 
10965                             IF l_debug_on THEN
10966                                 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(rec_cnt).pickup_date :'||to_char(p_cs_mleg_result_tab(rec_cnt).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
10967                                 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(rec_cnt).dropoff_date :'||to_char(p_cs_mleg_result_tab(rec_cnt).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
10968                              END IF;
10969                         --}
10970                         END IF;
10971                     --}
10972                     ELSE
10973                     --{
10974                         drop_off_date := pick_up_date + days_fraction;
10975 
10976                         IF drop_off_date > ultimate_drop_off_date OR rec_cnt = p_cs_mleg_result_tab.LAST THEN
10977                             drop_off_date := ultimate_drop_off_date;
10978                         END IF;
10979 
10980                         IF drop_off_date = ultimate_drop_off_date AND drop_off_date <= pick_up_date THEN
10981                             drop_off_date := drop_off_date + 1/24;
10982                             ultimate_drop_off_date := drop_off_date;
10983                         END IF;
10984 
10985                         p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10986                     --}
10987                     END IF;
10988 
10989                    --}
10990                     EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
10991 
10992                     rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
10993 
10994                 END LOOP;
10995 
10996             --END IF;
10997 
10998             d_itr := p_cs_mleg_result_tab.FIRST;
10999 
11000             IF d_itr IS NOT NULL THEN
11001                 LOOP
11002                     IF p_cs_mleg_result_tab(d_itr).pickup_date = p_cs_mleg_result_tab(d_itr).dropoff_date THEN
11003                         p_cs_mleg_result_tab(d_itr).dropoff_date := p_cs_mleg_result_tab(d_itr).dropoff_date + 1/144;
11004                     END IF;
11005 
11006                     IF l_debug_on THEN
11007                         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).initial_pickup_location_id :'||p_cs_mleg_result_tab(d_itr).initial_pickup_location_id);
11008                         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).pickup_date :'||to_char(p_cs_mleg_result_tab(d_itr).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
11009                         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).ultimate_dropoff_location_id :'||p_cs_mleg_result_tab(d_itr).ultimate_dropoff_location_id);
11010                         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).dropoff_date :'||to_char(p_cs_mleg_result_tab(d_itr).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
11011                      END IF;
11012 
11013                     EXIT WHEN d_itr = p_cs_mleg_result_tab.LAST;
11014                     d_itr := p_cs_mleg_result_tab.NEXT(d_itr);
11015                END LOOP;
11016             END IF;
11017         END IF;
11018     END IF;
11019 
11020     IF l_debug_on THEN
11021       WSH_DEBUG_SV.pop(l_module_name);
11022     END IF;
11023 --}
11024 EXCEPTION
11025 
11026   WHEN OTHERS THEN
11027 
11028        wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.SET_PICK_UP_DROP_OFF_DATES',l_module_name);
11029        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11030 
11031        IF get_transit_time%ISOPEN THEN
11032           CLOSE get_transit_time;
11033        END IF;
11034 
11035        IF l_debug_on THEN
11036 
11037           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11038           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11039 
11040        END IF;
11041 
11042 END SET_PICK_UP_DROP_OFF_DATES;
11043 
11044 -- -------------------------------------------------------------------------- --
11045 --                                                                            --
11046 -- NAME:                FORMAT_DEL_UPDATE_TABLE                               --
11047 --                                                                            --
11048 -- TYPE:                PROCEDURE                                             --
11049 --                                                                            --
11050 --                                                                            --
11051 -- PARAMETERS (IN):     p_del_id_tab        IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11052 --                      p_carrier_id_tab    IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11053 --                      p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11054 --                      p_mode_tab          IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11055 --                      p_freight_term_tab  IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11056 --                      p_smc_tab           IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11057 --                      p_org_del_id_tab    IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11058 --                      p_trip_id_tab       IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11059 --                                                                            --
11060 -- PARAMETERS (OUT):    x_rec_attr_tab      OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type --
11061 --                      x_trip_info_tab     OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type
11062 --
11063 --
11064 -- RETURN:              none                                                  --
11065 --                                                                            --
11066 -- DESCRIPTION:         This procedure is used to format the record for       --
11067 --                      updating the delivery table for carrier selection     --
11068 --                                                                            --
11069 --                                                                            --
11070 -- CHANGE CONTROL LOG                                                         --
11071 -- ------------------                                                         --
11072 --                                                                            --
11073 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
11074 -- ----------  -------  --------  -------  ---------------------------------- --
11075 -- 2002/12/09  I        ABLUNDEL  -------  Created                            --
11076 -- Attribute passed initially						      --
11077 -- p_del_id_tab         IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers,		--
11078 -- p_carrier_id_tab     IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers,	      --
11079 -- p_service_level_tab  IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11080 -- p_mode_tab		IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11081 -- p_freight_term_tab	IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11082 -- p_smc_tab		IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11083 --                                                                            --
11084 -- -------------------------------------------------------------------------- --
11085 
11086 -- Result table will be of type Shipping
11087 
11088 PROCEDURE FORMAT_DEL_UPDATE_TABLE(--p_cs_result_tab     IN FTE_ACS_PKG.FTE_CS_RESULT_TAB_TYPE,
11089                     p_cs_result_tab       IN WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
11090                     p_caller              IN  VARCHAR2 DEFAULT NULL,
11091                     x_rec_attr_tab        OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
11092                     x_trip_info_tab       OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type,
11093                     x_return_message            OUT NOCOPY VARCHAR2,
11094                     x_return_status             OUT NOCOPY VARCHAR2) IS
11095 
11096 fmc             NUMBER;
11097 fmct            NUMBER;
11098 fm              NUMBER;
11099 
11100 trpidx          NUMBER;
11101 l_del_found     BOOLEAN;
11102 l_error_code    NUMBER;
11103 l_error_text    VARCHAR2(2000);
11104 l_del_org_id    NUMBER;
11105 l_prev_org_id   NUMBER;
11106 l_skip_rtng_rule_ac_trip      VARCHAR2(1) := 'N';
11107 l_param_value_info            WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11108 l_ignore_for_planning         WSH_TRIPS.ignore_for_planning%TYPE;
11109 --
11110 l_debug_on      BOOLEAN;
11111 --
11112 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FORMAT_DEL_UPDATE_TABLE';
11113 --
11114 BEGIN
11115 
11116    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11117    --
11118    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11119    --
11120    IF l_debug_on IS NULL
11121    THEN
11122        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11123    END IF;
11124    --
11125    --
11126    -- Debug Statements
11127    --
11128    IF l_debug_on THEN
11129        WSH_DEBUG_SV.push(l_module_name);
11130    END IF;
11131    --
11132 
11133    IF l_debug_on THEN
11134         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab.COUNT :'||p_cs_result_tab.COUNT);
11135 
11136    END IF;
11137 
11138    IF (p_cs_result_tab.COUNT > 0) THEN
11139 
11140       fmc  := 0;
11141       fmct := 0;
11142       l_prev_org_id := 0;
11143 
11144       fm  := p_cs_result_tab.FIRST;
11145       IF l_debug_on THEN
11146           WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).delivery_id :'||p_cs_result_tab(fm).delivery_id);
11147           WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).trip_id :'||p_cs_result_tab(fm).trip_id);
11148       END IF;
11149 
11150       LOOP
11151 
11152         IF (p_cs_result_tab(fm).trip_id) is NULL THEN
11153 
11154           fmc  := fmc + 1;
11155           IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11156 
11157             x_rec_attr_tab(fmc).DELIVERY_ID                    := p_cs_result_tab(fm).delivery_id;
11158             x_rec_attr_tab(fmc).NAME                           := FND_API.G_MISS_CHAR;
11159             x_rec_attr_tab(fmc).PLANNED_FLAG                   := FND_API.G_MISS_CHAR;
11160             x_rec_attr_tab(fmc).STATUS_CODE                    := FND_API.G_MISS_CHAR;
11161             x_rec_attr_tab(fmc).DELIVERY_TYPE                  := FND_API.G_MISS_CHAR;
11162             x_rec_attr_tab(fmc).LOADING_SEQUENCE               := FND_API.G_MISS_NUM;
11163             x_rec_attr_tab(fmc).LOADING_ORDER_FLAG             := FND_API.G_MISS_CHAR;
11164             x_rec_attr_tab(fmc).INITIAL_PICKUP_DATE            := FND_API.G_MISS_DATE;
11165             x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_ID     := FND_API.G_MISS_NUM;
11166             x_rec_attr_tab(fmc).ORGANIZATION_ID                := FND_API.G_MISS_NUM;
11167             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_ID   := FND_API.G_MISS_NUM;
11168             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_DATE          := FND_API.G_MISS_DATE;
11169             x_rec_attr_tab(fmc).CUSTOMER_ID                    := FND_API.G_MISS_NUM;
11170             x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_ID     := FND_API.G_MISS_NUM;
11171             x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_ID     := FND_API.G_MISS_NUM;
11172 
11173 	        -- Bug 4524023 (issue 1)
11174 	        /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11175               x_rec_attr_tab(fmc).CARRIER_ID                  := FND_API.G_MISS_NUM;
11176             ELSE*/
11177             x_rec_attr_tab(fmc).CARRIER_ID                  := p_cs_result_tab(fm).carrier_id;
11178 
11179             --END IF;
11180 
11181             /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11182               x_rec_attr_tab(fmc).SHIP_METHOD_CODE            := FND_API.G_MISS_CHAR;
11183             ELSE*/
11184             x_rec_attr_tab(fmc).SHIP_METHOD_CODE            := p_cs_result_tab(fm).ship_method_code;
11185             --END IF;
11186 
11187             IF (p_cs_result_tab(fm).freight_terms_code IS NULL) THEN
11188               x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE          := FND_API.G_MISS_CHAR;
11189             ELSE
11190               x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE          := p_cs_result_tab(fm).freight_terms_code;
11191             END IF;
11192 
11193             x_rec_attr_tab(fmc).FOB_CODE                      := FND_API.G_MISS_CHAR;
11194             x_rec_attr_tab(fmc).FOB_LOCATION_ID               := FND_API.G_MISS_NUM;
11195             x_rec_attr_tab(fmc).WAYBILL                       := FND_API.G_MISS_CHAR;
11196             x_rec_attr_tab(fmc).DOCK_CODE                     := FND_API.G_MISS_CHAR;
11197             x_rec_attr_tab(fmc).ACCEPTANCE_FLAG               := FND_API.G_MISS_CHAR;
11198             x_rec_attr_tab(fmc).ACCEPTED_BY                   := FND_API.G_MISS_CHAR;
11199             x_rec_attr_tab(fmc).ACCEPTED_DATE                 := FND_API.G_MISS_DATE;
11200             x_rec_attr_tab(fmc).ACKNOWLEDGED_BY               := FND_API.G_MISS_CHAR;
11201             x_rec_attr_tab(fmc).CONFIRMED_BY                  := FND_API.G_MISS_CHAR;
11202             x_rec_attr_tab(fmc).CONFIRM_DATE                  := FND_API.G_MISS_DATE;
11203             x_rec_attr_tab(fmc).ASN_DATE_SENT                 := FND_API.G_MISS_DATE;
11204             x_rec_attr_tab(fmc).ASN_STATUS_CODE               := FND_API.G_MISS_CHAR;
11205             x_rec_attr_tab(fmc).ASN_SEQ_NUMBER                := FND_API.G_MISS_NUM;
11206             x_rec_attr_tab(fmc).GROSS_WEIGHT                  := FND_API.G_MISS_NUM;
11207             x_rec_attr_tab(fmc).NET_WEIGHT                    := FND_API.G_MISS_NUM;
11208             x_rec_attr_tab(fmc).WEIGHT_UOM_CODE               := FND_API.G_MISS_CHAR;
11209             x_rec_attr_tab(fmc).VOLUME                        := FND_API.G_MISS_NUM;
11210             x_rec_attr_tab(fmc).VOLUME_UOM_CODE               := FND_API.G_MISS_CHAR;
11211             x_rec_attr_tab(fmc).ADDITIONAL_SHIPMENT_INFO      := FND_API.G_MISS_CHAR;
11212             x_rec_attr_tab(fmc).CURRENCY_CODE                 := FND_API.G_MISS_CHAR;
11213             x_rec_attr_tab(fmc).ATTRIBUTE_CATEGORY            := FND_API.G_MISS_CHAR;
11214             x_rec_attr_tab(fmc).ATTRIBUTE1                    := FND_API.G_MISS_CHAR;
11215             x_rec_attr_tab(fmc).ATTRIBUTE2                    := FND_API.G_MISS_CHAR;
11216             x_rec_attr_tab(fmc).ATTRIBUTE3                    := FND_API.G_MISS_CHAR;
11217             x_rec_attr_tab(fmc).ATTRIBUTE4                    := FND_API.G_MISS_CHAR;
11218             x_rec_attr_tab(fmc).ATTRIBUTE5                    := FND_API.G_MISS_CHAR;
11219             x_rec_attr_tab(fmc).ATTRIBUTE6                    := FND_API.G_MISS_CHAR;
11220             x_rec_attr_tab(fmc).ATTRIBUTE7                    := FND_API.G_MISS_CHAR;
11221             x_rec_attr_tab(fmc).ATTRIBUTE8                    := FND_API.G_MISS_CHAR;
11222             x_rec_attr_tab(fmc).ATTRIBUTE9                    := FND_API.G_MISS_CHAR;
11223             x_rec_attr_tab(fmc).ATTRIBUTE10                   := FND_API.G_MISS_CHAR;
11224             x_rec_attr_tab(fmc).ATTRIBUTE11                   := FND_API.G_MISS_CHAR;
11225             x_rec_attr_tab(fmc).ATTRIBUTE12                   := FND_API.G_MISS_CHAR;
11226             x_rec_attr_tab(fmc).ATTRIBUTE13                   := FND_API.G_MISS_CHAR;
11227             x_rec_attr_tab(fmc).ATTRIBUTE14                   := FND_API.G_MISS_CHAR;
11228             x_rec_attr_tab(fmc).ATTRIBUTE15                   := FND_API.G_MISS_CHAR;
11229             x_rec_attr_tab(fmc).TP_ATTRIBUTE_CATEGORY         := FND_API.G_MISS_CHAR;
11230             x_rec_attr_tab(fmc).TP_ATTRIBUTE1                 := FND_API.G_MISS_CHAR;
11231             x_rec_attr_tab(fmc).TP_ATTRIBUTE2                 := FND_API.G_MISS_CHAR;
11232             x_rec_attr_tab(fmc).TP_ATTRIBUTE3                 := FND_API.G_MISS_CHAR;
11233             x_rec_attr_tab(fmc).TP_ATTRIBUTE4                 := FND_API.G_MISS_CHAR;
11234             x_rec_attr_tab(fmc).TP_ATTRIBUTE5                 := FND_API.G_MISS_CHAR;
11235             x_rec_attr_tab(fmc).TP_ATTRIBUTE6                 := FND_API.G_MISS_CHAR;
11236             x_rec_attr_tab(fmc).TP_ATTRIBUTE7                 := FND_API.G_MISS_CHAR;
11237             x_rec_attr_tab(fmc).TP_ATTRIBUTE8                 := FND_API.G_MISS_CHAR;
11238             x_rec_attr_tab(fmc).TP_ATTRIBUTE9                 := FND_API.G_MISS_CHAR;
11239             x_rec_attr_tab(fmc).TP_ATTRIBUTE10                := FND_API.G_MISS_CHAR;
11240             x_rec_attr_tab(fmc).TP_ATTRIBUTE11                := FND_API.G_MISS_CHAR;
11241             x_rec_attr_tab(fmc).TP_ATTRIBUTE12                := FND_API.G_MISS_CHAR;
11242             x_rec_attr_tab(fmc).TP_ATTRIBUTE13                := FND_API.G_MISS_CHAR;
11243             x_rec_attr_tab(fmc).TP_ATTRIBUTE14                := FND_API.G_MISS_CHAR;
11244             x_rec_attr_tab(fmc).TP_ATTRIBUTE15                := FND_API.G_MISS_CHAR;
11245             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE_CATEGORY     := FND_API.G_MISS_CHAR;
11246             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE1             := FND_API.G_MISS_CHAR;
11247             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE2             := FND_API.G_MISS_CHAR;
11248             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE3             := FND_API.G_MISS_CHAR;
11249             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE4             := FND_API.G_MISS_CHAR;
11250             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE5             := FND_API.G_MISS_CHAR;
11251             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE6             := FND_API.G_MISS_CHAR;
11252             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE7             := FND_API.G_MISS_CHAR;
11253             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE8             := FND_API.G_MISS_CHAR;
11254             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE9             := FND_API.G_MISS_CHAR;
11255             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE10            := FND_API.G_MISS_CHAR;
11256             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE11            := FND_API.G_MISS_CHAR;
11257             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE12            := FND_API.G_MISS_CHAR;
11258             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE13            := FND_API.G_MISS_CHAR;
11259             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE14            := FND_API.G_MISS_CHAR;
11260             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE15            := FND_API.G_MISS_CHAR;
11261             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE16            := FND_API.G_MISS_CHAR;
11262             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE17            := FND_API.G_MISS_CHAR;
11263             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE18            := FND_API.G_MISS_CHAR;
11264             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE19            := FND_API.G_MISS_CHAR;
11265             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE20            := FND_API.G_MISS_CHAR;
11266             x_rec_attr_tab(fmc).CREATION_DATE                 := FND_API.G_MISS_DATE;
11267             x_rec_attr_tab(fmc).CREATED_BY                    := FND_API.G_MISS_NUM;
11268             x_rec_attr_tab(fmc).LAST_UPDATE_DATE              := FND_API.G_MISS_DATE;
11269             x_rec_attr_tab(fmc).LAST_UPDATED_BY               := FND_API.G_MISS_NUM;
11270             x_rec_attr_tab(fmc).LAST_UPDATE_LOGIN             := FND_API.G_MISS_NUM;
11271             x_rec_attr_tab(fmc).PROGRAM_APPLICATION_ID        := FND_API.G_MISS_NUM;
11272             x_rec_attr_tab(fmc).PROGRAM_ID                    := FND_API.G_MISS_NUM;
11273             x_rec_attr_tab(fmc).PROGRAM_UPDATE_DATE           := FND_API.G_MISS_DATE;
11274             x_rec_attr_tab(fmc).REQUEST_ID                    := FND_API.G_MISS_NUM;
11275             x_rec_attr_tab(fmc).BATCH_ID                      := FND_API.G_MISS_NUM;
11276             x_rec_attr_tab(fmc).HASH_VALUE                    := FND_API.G_MISS_NUM;
11277             x_rec_attr_tab(fmc).SOURCE_HEADER_ID              := FND_API.G_MISS_NUM;
11278             x_rec_attr_tab(fmc).NUMBER_OF_LPN                 := FND_API.G_MISS_NUM;
11279             x_rec_attr_tab(fmc).COD_AMOUNT                    := FND_API.G_MISS_NUM;
11280             x_rec_attr_tab(fmc).COD_CURRENCY_CODE             := FND_API.G_MISS_CHAR;
11281             x_rec_attr_tab(fmc).COD_REMIT_TO                  := FND_API.G_MISS_CHAR;
11282             x_rec_attr_tab(fmc).COD_CHARGE_PAID_BY            := FND_API.G_MISS_CHAR;
11283             x_rec_attr_tab(fmc).PROBLEM_CONTACT_REFERENCE     := FND_API.G_MISS_CHAR;
11284             x_rec_attr_tab(fmc).PORT_OF_LOADING               := FND_API.G_MISS_CHAR;
11285             x_rec_attr_tab(fmc).PORT_OF_DISCHARGE             := FND_API.G_MISS_CHAR;
11286             x_rec_attr_tab(fmc).FTZ_NUMBER                    := FND_API.G_MISS_CHAR;
11287             x_rec_attr_tab(fmc).ROUTED_EXPORT_TXN             := FND_API.G_MISS_CHAR;
11288             x_rec_attr_tab(fmc).ENTRY_NUMBER                  := FND_API.G_MISS_CHAR;
11289             x_rec_attr_tab(fmc).ROUTING_INSTRUCTIONS          := FND_API.G_MISS_CHAR;
11290             x_rec_attr_tab(fmc).IN_BOND_CODE                  := FND_API.G_MISS_CHAR;
11291             x_rec_attr_tab(fmc).SHIPPING_MARKS                := FND_API.G_MISS_CHAR;
11292 
11293             /*IF (p_cs_result_tab(fm).service_level is null) THEN
11294               x_rec_attr_tab(fmc).SERVICE_LEVEL               := FND_API.G_MISS_CHAR;
11295             ELSE*/
11296             x_rec_attr_tab(fmc).SERVICE_LEVEL               := p_cs_result_tab(fm).service_level;
11297             --END IF;
11298 
11299             /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11300               x_rec_attr_tab(fmc).MODE_OF_TRANSPORT           := FND_API.G_MISS_CHAR;
11301             ELSE*/
11302             x_rec_attr_tab(fmc).MODE_OF_TRANSPORT           := p_cs_result_tab(fm).mode_of_transport;
11303             --END IF;
11304 
11305             x_rec_attr_tab(fmc).ASSIGNED_TO_FTE_TRIPS         := FND_API.G_MISS_CHAR;
11306             x_rec_attr_tab(fmc).AUTO_SC_EXCLUDE_FLAG          := FND_API.G_MISS_CHAR;
11307             x_rec_attr_tab(fmc).AUTO_AP_EXCLUDE_FLAG          := FND_API.G_MISS_CHAR;
11308             x_rec_attr_tab(fmc).AP_BATCH_ID                   := FND_API.G_MISS_NUM;
11309 
11310   --        x_rec_attr_tab(fmc).ROWID                         := FND_API.G_MISS_CHAR;
11311             x_rec_attr_tab(fmc).LOADING_ORDER_DESC            := FND_API.G_MISS_CHAR;
11312             x_rec_attr_tab(fmc).ORGANIZATION_CODE             := FND_API.G_MISS_CHAR;
11313             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_CODE:= FND_API.G_MISS_CHAR;
11314             x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11315             x_rec_attr_tab(fmc).CUSTOMER_NUMBER               := FND_API.G_MISS_CHAR;
11316             x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11317             x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11318             x_rec_attr_tab(fmc).CARRIER_CODE                  := FND_API.G_MISS_CHAR;
11319             x_rec_attr_tab(fmc).SHIP_METHOD_NAME              := FND_API.G_MISS_CHAR;
11320             x_rec_attr_tab(fmc).FREIGHT_TERMS_NAME            := FND_API.G_MISS_CHAR;
11321             x_rec_attr_tab(fmc).FOB_NAME                      := FND_API.G_MISS_CHAR;
11322             x_rec_attr_tab(fmc).FOB_LOCATION_CODE             := FND_API.G_MISS_CHAR;
11323             x_rec_attr_tab(fmc).WEIGHT_UOM_DESC               := FND_API.G_MISS_CHAR;
11324             x_rec_attr_tab(fmc).VOLUME_UOM_DESC               := FND_API.G_MISS_CHAR;
11325             x_rec_attr_tab(fmc).CURRENCY_NAME                 := FND_API.G_MISS_CHAR;
11326           END IF;
11327 
11328         ELSE
11329 
11330           fmct := fmct + 1;
11331 
11332             IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11333 
11334 /*
11335 -- Hiding project
11336                 IF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11337 
11338                     -- AG use organization_id from cs_result_tab
11339                     l_del_org_id := p_cs_result_tab(fm).organization_id;
11340 
11341                     IF l_del_org_id  <> l_prev_org_id THEN
11342 
11343                         l_param_value_info.organization_id := l_del_org_id;
11344                         l_param_value_info.param_name(1)   := 'SKIP_RTNG_RULE_AC_TRIP';
11345 
11346                         WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info       => l_param_value_info,
11347                                                     x_return_status          => x_return_status);
11348                         l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
11349                     END IF;
11350                 END IF;
11351 */ -- Hiding project
11352 
11353                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11354 /*
11355 -- Hiding project
11356                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
11357                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
11358 */ -- Hiding project
11359                     x_trip_info_tab(fmct).TRIP_ID := p_cs_result_tab(fm).trip_id;
11360 
11361                     x_trip_info_tab(fmct).NAME                     := FND_API.G_MISS_CHAR;
11362                     --x_trip_info_tab(fmct).PLANNED_FLAG			   := FND_API.G_MISS_CHAR;
11363                     x_trip_info_tab(fmct).PLANNED_FLAG			   := 'N';
11364                     x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_ID	   := FND_API.G_MISS_NUM;
11365                     x_trip_info_tab(fmct).STATUS_CODE			   := 'OP';
11366                     x_trip_info_tab(fmct).VEHICLE_ITEM_ID		   := FND_API.G_MISS_NUM;
11367                     x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_ID  := FND_API.G_MISS_NUM;
11368                     x_trip_info_tab(fmct).VEHICLE_NUMBER	       := FND_API.G_MISS_CHAR;
11369                     x_trip_info_tab(fmct).VEHICLE_NUM_PREFIX	   := FND_API.G_MISS_CHAR;
11370 
11371                     /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11372                       x_trip_info_tab(fmct).CARRIER_ID             := FND_API.G_MISS_NUM;
11373                     ELSE*/
11374                     x_trip_info_tab(fmct).CARRIER_ID             := p_cs_result_tab(fm).carrier_id;
11375                     --END IF;
11376 
11377                     /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11378                       x_trip_info_tab(fmct).SHIP_METHOD_CODE       := FND_API.G_MISS_CHAR;
11379                     ELSE*/
11380                     x_trip_info_tab(fmct).SHIP_METHOD_CODE       := p_cs_result_tab(fm).ship_method_code;
11381                     --END IF;
11382 
11383 
11384                     IF (p_cs_result_tab(fm).consignee_carrier_ac_no is null) THEN
11385                         x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := FND_API.G_MISS_CHAR;
11386                     ELSE
11387                         x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := p_cs_result_tab(fm).consignee_carrier_ac_no;
11388                     END IF;
11389 
11390 -- AG
11391 -- cs_result_tab.rank stores rank_sequence
11392 -- It is not same as trip's rank_id which has already been updated by FTE
11393 -- rank_list_action API
11394                     x_trip_info_tab(fmct).RANK_ID := FND_API.G_MISS_NUM;
11395 
11396                     IF (p_cs_result_tab(fm).append_flag is null) THEN
11397                       x_trip_info_tab(fmct).APPEND_FLAG := FND_API.G_MISS_CHAR;
11398                     ELSE
11399                       x_trip_info_tab(fmct).APPEND_FLAG := p_cs_result_tab(fm).append_flag;
11400                     END IF;
11401 
11402 -- AG Use rule_id from p_cs_result_tab and not routing_rule_id
11403 
11404                     IF (p_cs_result_tab(fm).rule_id  is null) THEN
11405                       x_trip_info_tab(fmct).ROUTING_RULE_ID := FND_API.G_MISS_NUM;
11406                     ELSE
11407                       x_trip_info_tab(fmct).ROUTING_RULE_ID := p_cs_result_tab(fm).rule_id ;
11408                     END IF;
11409 
11410                     x_trip_info_tab(fmct).ROUTE_ID			     := FND_API.G_MISS_NUM;
11411                     x_trip_info_tab(fmct).ROUTING_INSTRUCTIONS	 := FND_API.G_MISS_CHAR;
11412                     x_trip_info_tab(fmct).ATTRIBUTE_CATEGORY	 := FND_API.G_MISS_CHAR;
11413                     x_trip_info_tab(fmct).ATTRIBUTE1			 := FND_API.G_MISS_CHAR;
11414                     x_trip_info_tab(fmct).ATTRIBUTE2			 := FND_API.G_MISS_CHAR;
11415                     x_trip_info_tab(fmct).ATTRIBUTE3			 := FND_API.G_MISS_CHAR;
11416                     x_trip_info_tab(fmct).ATTRIBUTE4			 := FND_API.G_MISS_CHAR;
11417                     x_trip_info_tab(fmct).ATTRIBUTE5			 := FND_API.G_MISS_CHAR;
11418                     x_trip_info_tab(fmct).ATTRIBUTE6			 := FND_API.G_MISS_CHAR;
11419                     x_trip_info_tab(fmct).ATTRIBUTE7			 := FND_API.G_MISS_CHAR;
11420                     x_trip_info_tab(fmct).ATTRIBUTE8			 := FND_API.G_MISS_CHAR;
11421                     x_trip_info_tab(fmct).ATTRIBUTE9			 := FND_API.G_MISS_CHAR;
11422                     x_trip_info_tab(fmct).ATTRIBUTE10			 := FND_API.G_MISS_CHAR;
11423                     x_trip_info_tab(fmct).ATTRIBUTE11			 := FND_API.G_MISS_CHAR;
11424                     x_trip_info_tab(fmct).ATTRIBUTE12			 := FND_API.G_MISS_CHAR;
11425                     x_trip_info_tab(fmct).ATTRIBUTE13			 := FND_API.G_MISS_CHAR;
11426                     x_trip_info_tab(fmct).ATTRIBUTE14			 := FND_API.G_MISS_CHAR;
11427                     x_trip_info_tab(fmct).ATTRIBUTE15			 := FND_API.G_MISS_CHAR;
11428                     x_trip_info_tab(fmct).CREATION_DATE			 := SYSDATE;
11429                     x_trip_info_tab(fmct).CREATED_BY			 := fnd_global.user_id;
11430                     x_trip_info_tab(fmct).LAST_UPDATE_DATE		 := SYSDATE;
11431                     x_trip_info_tab(fmct).LAST_UPDATED_BY		 := fnd_global.user_id;
11432                     x_trip_info_tab(fmct).LAST_UPDATE_LOGIN		 := fnd_global.login_id;
11433                     x_trip_info_tab(fmct).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11434                     x_trip_info_tab(fmct).PROGRAM_ID			 := FND_API.G_MISS_NUM;
11435                     x_trip_info_tab(fmct).PROGRAM_UPDATE_DATE	 := FND_API.G_MISS_DATE;
11436                     x_trip_info_tab(fmct).REQUEST_ID			 := FND_API.G_MISS_NUM;
11437 
11438                     /*IF (p_cs_result_tab(fm).service_level is null) THEN
11439                       x_trip_info_tab(fmct).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11440                     ELSE*/
11441                       x_trip_info_tab(fmct).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11442                     --END IF;
11443 
11444                     /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11445                       x_trip_info_tab(fmct).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11446                     ELSE*/
11447                     x_trip_info_tab(fmct).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11448                     --END IF;
11449 
11450                     IF (p_cs_result_tab(fm).freight_terms_code is null) THEN
11451                       x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11452                     ELSE
11453                       x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11454                     END IF;
11455 
11456                     x_trip_info_tab(fmct).CONSOLIDATION_ALLOWED	 := FND_API.G_MISS_CHAR;
11457                     x_trip_info_tab(fmct).LOAD_TENDER_STATUS	 := FND_API.G_MISS_CHAR;
11458                     x_trip_info_tab(fmct).ROUTE_LANE_ID		 := FND_API.G_MISS_NUM;
11459                     x_trip_info_tab(fmct).LANE_ID		 := FND_API.G_MISS_NUM;
11460                     x_trip_info_tab(fmct).SCHEDULE_ID		 := FND_API.G_MISS_NUM;
11461                     x_trip_info_tab(fmct).BOOKING_NUMBER	 := FND_API.G_MISS_CHAR;
11462                     x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_NAME := FND_API.G_MISS_CHAR;
11463                     x_trip_info_tab(fmct).SHIP_METHOD_NAME	 := FND_API.G_MISS_CHAR;
11464                     x_trip_info_tab(fmct).VEHICLE_ITEM_DESC	 := FND_API.G_MISS_CHAR;
11465                     x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11466 
11467                 END IF;
11468             END IF;
11469 
11470         END IF;  -- END of IF (p_trip_id_tab(trpidx) is NULL) THEN
11471 --
11472          EXIT WHEN fm = p_cs_result_tab.LAST;
11473          fm := p_cs_result_tab.NEXT(fm);
11474     END LOOP;
11475    END IF;
11476 
11477    --
11478    -- Debug Statements
11479    --
11480    IF l_debug_on THEN
11481        WSH_DEBUG_SV.pop(l_module_name);
11482    END IF;
11483    --
11484    RETURN;
11485 
11486 EXCEPTION
11487    WHEN OTHERS THEN
11488       x_rec_attr_tab.DELETE;
11489       l_error_code := SQLCODE;
11490       l_error_text := SQLERRM;
11491       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11492       --
11493       -- Debug Statements
11494       --
11495       IF l_debug_on THEN
11496          WSH_DEBUG_SV.logmsg(l_module_name,  'THE UNEXPECTED ERROR FROM WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE IS ' ||l_error_text);
11497       END IF;
11498       --
11499       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE');
11500       WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
11501       --
11502       -- Debug Statements
11503       --
11504       IF l_debug_on THEN
11505           WSH_DEBUG_SV.pop(l_module_name);
11506       END IF;
11507       --
11508       RETURN;
11509 
11510 --
11511 -- Debug Statements
11512 --
11513 IF l_debug_on THEN
11514    WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11515     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11516 END IF;
11517 --
11518 END FORMAT_DEL_UPDATE_TABLE;
11519 
11520 
11521 PROCEDURE PROCESS_CARRIER_SELECTION(p_delivery_id_tab        IN OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
11522                                     p_batch_id               IN  NUMBER,
11523                                     p_form_flag              IN  VARCHAR2,
11524                                     p_organization_id	     IN  NUMBER DEFAULT NULL,
11525                                     p_caller                 IN  VARCHAR2 DEFAULT NULL,
11526                                     x_return_message         OUT NOCOPY  VARCHAR2,
11527                                     x_return_status          OUT NOCOPY  VARCHAR2) IS
11528 
11529 --
11530 -- Cursor to get delivery info from the table of delivery ids
11531 -- Carrier selection is not required if delivery's ship from location id is null.
11532 --
11533 cursor c_get_del_info_by_del_id(x_delivery_id NUMBER) IS
11534 select delivery_id,
11535        name,
11536        organization_id,
11537        gross_weight,
11538        weight_uom_code,
11539        volume,
11540        volume_uom_code,
11541        initial_pickup_location_id,
11542        ultimate_dropoff_location_id,
11543        customer_id,
11544        freight_terms_code,
11545        NULL,				-- planned_flag,
11546        initial_pickup_date,
11547        ultimate_dropoff_date,
11548        fob_code,
11549        shipment_direction,
11550        delivery_type,
11551        NULL				-- l_trip_id
11552 from   wsh_new_deliveries
11553 where  delivery_id = x_delivery_id
11554 and    ship_method_code is null
11555 AND    initial_pickup_location_id <> WSH_UTIL_CORE.C_NULL_SF_LOCN_ID   -- J-IB-NPARIKH
11556 and    planned_flag NOT IN ('Y','F');
11557 
11558 --
11559 -- cursor to get delivery info from the delivery table (for Pick Release Call)
11560 --
11561 
11562 cursor c_get_del_info_by_batch_id( x_batch_id NUMBER,
11563                                    x_organization_id NUMBER
11564                                   ) IS
11565 select delivery_id,
11566        name,
11567        organization_id,
11568        gross_weight,
11569        weight_uom_code,
11570        volume,
11571        volume_uom_code,
11572        initial_pickup_location_id,
11573        ultimate_dropoff_location_id,
11574        customer_id,
11575        freight_terms_code,
11576        NULL,		-- planned_flag,
11577        initial_pickup_date,
11578        ultimate_dropoff_date,
11579        fob_code,
11580        shipment_direction,
11581        delivery_type,
11582        NULL		-- l_trip_id
11583 from   wsh_new_deliveries
11584 where  batch_id = x_batch_id
11585 and    organization_id = x_organization_id
11586 and    ship_method_code is null
11587 and    planned_flag NOT IN ('Y','F');
11588 
11589 --
11590 -- cursor to get delivery info from the delivery table (for form call)
11591 -- BUG:2369435 - added planned_flag to cursor
11592 --
11593 cursor c_get_del_info_by_form(f_delivery_id NUMBER) IS
11594 select delivery_id,
11595        name,
11596        organization_id,
11597        gross_weight,
11598        weight_uom_code,
11599        volume,
11600        volume_uom_code,
11601        initial_pickup_location_id,
11602        ultimate_dropoff_location_id,
11603        customer_id,
11604        freight_terms_code,
11605        planned_flag,
11606        initial_pickup_date,
11607        ultimate_dropoff_date,
11608        fob_code,
11609        shipment_direction,
11610        delivery_type,
11611        NULL		-- l_trip_id
11612 from   wsh_new_deliveries
11613 where  delivery_id = f_delivery_id;
11614 
11615 CURSOR check_del_assigned(p_del_id IN NUMBER) IS
11616 select  wts.trip_id,
11617         wt.rank_id
11618 from    wsh_trip_stops wts,
11619         wsh_delivery_legs wdl,
11620         wsh_trips wt
11621 where  wdl.delivery_id = p_del_id
11622 and    wts.stop_id = wdl.pick_up_stop_id
11623 and    wts.trip_id = wt.trip_id;
11624 
11625 -- AG not required
11626 /*
11627 CURSOR get_org_for_delivery(p_del_id IN NUMBER) IS
11628 select  wnd.organization_id
11629 from    wsh_new_deliveries wnd
11630 where  wnd.delivery_id = p_del_id;
11631 */
11632 
11633 
11634 l_trip_id_tab                 WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
11635 l_return_status               VARCHAR2(1);                           -- returning error/success/warning
11636 l_return_message              VARCHAR2(2000);                        -- hold a return error message
11637 l_BatchSize                   PLS_INTEGER := 500;                    -- max rows from a batch fetch
11638 l_current_rows                PLS_INTEGER;                           -- number of current rows fetched
11639 l_remaining_rows              PLS_INTEGER;                           -- number of remaining rows left
11640 l_previous_rows               PLS_INTEGER;                           -- rows previously processed
11641 l_result_found_flag           VARCHAR2(1) := 'N';                    -- indicates a found result
11642 l_messaging_yn                VARCHAR2(1);
11643 l_y_planned_flag              VARCHAR2(1);
11644 
11645 								     -- new parameter for getting
11646                                                                      -- shipping paramters
11647 --
11648 -- Variables used for error handling
11649 --
11650 l_error_code                  NUMBER;                                -- Oracle SQL Error Number
11651 l_error_text                  VARCHAR2(2000);                        -- Oracle SQL Error Text
11652 
11653 --
11654 -- New variables added for new call to group constraint API to update delivery table
11655 --
11656 
11657 l_in_rec                      WSH_DELIVERIES_GRP.Del_In_Rec_Type;
11658 l_trip_in_rec                 WSH_TRIPS_GRP.tripInRecType;
11659 l_rec_attr_tab                WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
11660 l_trip_info_tab	              WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
11661 l_trip_out_rec_tab            WSH_TRIPS_GRP.Trip_Out_Tab_Type;
11662 l_del_out_rec_tab             WSH_DELIVERIES_GRP.Del_Out_Tbl_Type;
11663 l_msg_count                   NUMBER;
11664 l_msg_data                    VARCHAR2(2000);
11665 l_del_org_id                  NUMBER;
11666 l_prev_org_id                 NUMBER;
11667 l_trip_status                 VARCHAR2(50); -- get_trip_status
11668 --alksharm
11669 l_trip_id                     NUMBER;
11670 l_prev_trip_id                NUMBER;
11671 l_trip_name                   VARCHAR2(30);
11672 l_delivery_id                 NUMBER;
11673 list_cnt                      NUMBER;
11674 l_cs_mleg_result_tab          WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11675 l_ranked_list                 WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11676 
11677 l_rank_id                     NUMBER;
11678 l_trip_rank_seq               NUMBER;
11679 l_skip_rtng_rule_ac_trip      VARCHAR2(1) := 'N';
11680 -- sachin
11681  x_ranked_list                WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11682 -- Rename
11683 
11684 
11685 l_initial_pickup_date         DATE;
11686 l_ultimate_dropoff_date       DATE;
11687 i                             NUMBER;
11688 j                             NUMBER;
11689 k                             NUMBER;
11690 l_global_param_rec            WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
11691 l_param_value_info            WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11692 l_prev_delivery_id            NUMBER;
11693 l_start_index                 NUMBER;
11694 l_end_index                   NUMBER;
11695 rec_cnt                       NUMBER;
11696 l_del_result_type             VARCHAR2(60);
11697 l_rank_list_source            VARCHAR2(30);
11698 
11699 --
11700 -- sbakshi
11701 --
11702 l_carrier_sel_entity_tab      WSH_FTE_INTEGRATION.WSH_CS_ENTITY_TAB_TYPE;
11703 
11704 l_carrier_sel_result_rec      WSH_FTE_INTEGRATION.WSH_CS_RESULT_REC_TYPE;
11705 
11706 l_cs_result_tab               WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11707 l_cs_output_message_tab       WSH_FTE_INTEGRATION.wsh_cs_output_message_tab;
11708 
11709 
11710 l_dlvy_info_tab              wsh_cs_delivery_info_tab;
11711 l_dlvy_info_rec              wsh_cs_delivery_info_rec;
11712 
11713 itr                          NUMBER;
11714 l_cnt                        NUMBER := 0;
11715 l_start_search_level_flag    VARCHAR2(10) := 'SCOE';
11716 l_param_rec                  WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11717 l_num_ranked_results         NUMBER;
11718 -- sbakshi
11719 
11720 -- Debug Variables
11721 l_debug_on                    BOOLEAN;
11722 --
11723 
11724 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PROCESS_CARRIER_SELECTION';
11725 
11726 BEGIN
11727       --
11728       -- initialize the procedure return flags
11729       --
11730       --
11731       -- Debug Statements
11732       --
11733       --
11734       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11735       --
11736       IF l_debug_on IS NULL
11737       THEN
11738           l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11739       END IF;
11740       --
11741       IF l_debug_on THEN
11742           WSH_DEBUG_SV.push(l_module_name);
11743           --
11744           WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11745           WSH_DEBUG_SV.log(l_module_name,'P_FORM_FLAG',P_FORM_FLAG);
11746           WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
11747       END IF;
11748       --
11749 
11750       x_return_status  := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11751       x_return_message := null;
11752 
11753       IF  WSH_UTIL_CORE.FTE_Is_Installed <> 'Y' THEN
11754         return;
11755       END IF;
11756 
11757       l_y_planned_flag := 'Y';
11758 
11759       IF ((p_batch_id is null) AND
11760           (p_delivery_id_tab.COUNT <= 0)) THEN
11761 	   --
11762            -- Invalid input parameters means we will not be able to get delivery
11763            -- information, thus, we will not be able to call carrier selection,
11764            -- return to the calling procedure
11765            --
11766 
11767 	   IF l_debug_on THEN
11768 	       --
11769               WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11770               WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID_TAB.COUNT',p_delivery_id_tab.COUNT);
11771 
11772 	   END IF;
11773 
11774 	   FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_INVALID_INPUT');
11775            x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11776            WSH_UTIL_CORE.add_message(x_return_status);
11777            --
11778            -- Debug Statements
11779            --
11780            IF l_debug_on THEN
11781               WSH_DEBUG_SV.logmsg(l_module_name,  'THE INPUT PARAMETERS ARE INVALID FOR THIS PROCEDURE'  );
11782            END IF;
11783            --
11784 
11785 	   x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11786            -- 2292513
11787            --
11788            -- Debug Statements
11789            --
11790            IF l_debug_on THEN
11791               WSH_DEBUG_SV.pop(l_module_name);
11792            END IF;
11793            --
11794            RETURN;
11795       END IF;
11796 
11797       -- Pick Release
11798       IF (p_batch_id is not null) THEN
11799 
11800         l_result_found_flag := 'N';
11801         --
11802         -- Set the messaging flag
11803         --
11804         l_messaging_yn := 'N';
11805         l_previous_rows := 0;
11806 
11807         IF l_debug_on THEN
11808             WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery info by batch id' );
11809         END IF;
11810 
11811 
11812         OPEN  c_get_del_info_by_batch_id(p_batch_id, p_organization_id);
11813             FETCH c_get_del_info_by_batch_id BULK COLLECT INTO l_dlvy_info_tab;
11814         CLOSE c_get_del_info_by_batch_id;
11815 
11816       -- Auto Apply routing rules is End of append delivery.
11817       ELSIF ((p_delivery_id_tab.COUNT > 0) AND
11818 	     (p_batch_id is null) AND (p_form_flag = 'N'))  THEN
11819 
11820    	     l_messaging_yn := 'Y';
11821 
11822 
11823 	     --FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
11824          itr := p_delivery_id_tab.FIRST;
11825          IF itr IS NOT NULL THEN
11826          LOOP
11827 
11828             IF l_debug_on THEN
11829             WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT || ' *** '|| p_delivery_id_tab(itr)|| ' *** ');
11830             END IF;
11831 
11832             OPEN  c_get_del_info_by_del_id(p_delivery_id_tab(itr));
11833                 FETCH c_get_del_info_by_del_id INTO l_dlvy_info_rec;
11834             CLOSE c_get_del_info_by_del_id;
11835 
11836             /*IF l_debug_on THEN
11837                 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.delivery_id: *** : '|| l_dlvy_info_rec.delivery_id);
11838             END IF;*/
11839 
11840             IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
11841                 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
11842                 l_cnt := l_cnt+1 ;
11843             END IF;
11844             EXIT WHEN itr = p_delivery_id_tab.LAST;
11845             itr := p_delivery_id_tab.NEXT(itr);
11846           END LOOP;
11847         END IF;
11848 
11849     --Call from UI.
11850     ELSIF ((p_delivery_id_tab.COUNT > 0) AND
11851            (p_batch_id is null) AND
11852            (p_form_flag = 'Y')) THEN
11853 
11854         l_messaging_yn := 'Y';
11855 
11856         IF l_debug_on THEN
11857            WSH_DEBUG_SV.logmsg(l_module_name,'Getting Information using Form');
11858            WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT);
11859         END IF;
11860 
11861 
11862 	    FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
11863 
11864 		 IF l_debug_on THEN
11865 		     WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY  ID '||p_delivery_id_tab(i));
11866 		 END IF;
11867 
11868   		 OPEN  c_get_del_info_by_form(p_delivery_id_tab(i));
11869             FETCH c_get_del_info_by_form INTO l_dlvy_info_rec;
11870 		 CLOSE c_get_del_info_by_form;
11871 
11872          IF l_debug_on THEN
11873             WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.l_delivery_id: '|| l_dlvy_info_rec.l_delivery_id);
11874          END IF;
11875 
11876 		 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
11877 
11878 			IF (l_dlvy_info_rec.l_planned_flag IN ('Y', 'F')) THEN
11879 			    --
11880                 -- Delivery is planned cannot do carrier selection
11881                 --
11882                 --
11883                 -- [2003/01/29][I][ABLUNDEL][BUG# 2765987]
11884                 -- Changed planned delivery to an ERROR from a WARNING
11885                 --
11886                 x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11887                 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11888                 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_PLAN_DEL');
11889                 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11890                 wsh_util_core.add_message(x_return_status);
11891                 --
11892                 -- Debug Statements
11893                 --
11894                 IF l_debug_on THEN
11895                    WSH_DEBUG_SV.logmsg(l_module_name,  'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS A PLANNED DELIVERY , CARRIER SELECTION IS NOT ALLOWED'  );
11896                 END IF;
11897                 --
11898                 -- 11i10+ change
11899              ELSE
11900 
11901 			    l_trip_status := get_trip_status(l_dlvy_info_rec.l_delivery_id,l_dlvy_info_rec.l_delivery_type);
11902 			    -- Delivery is assigned to more than one trip
11903                 IF (l_trip_status = 'MANY') THEN
11904 
11905                     x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11906                     x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11907                     IF (substr(p_caller,1,3) = 'FTE') THEN
11908                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY_FTE');
11909                     ELSE
11910                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY');
11911                     END IF;
11912                     FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11913                     wsh_util_core.add_message(x_return_status);
11914 
11915                     IF l_debug_on THEN
11916                             WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO MANY TRIPS, CARRIER SELECTION IS NOT ALLOWED'  );
11917                     END IF;
11918 
11919 			    -- Trip to which this delivery is assigned has more than one deliveries
11920 		  	    ELSIF (l_trip_status = 'SHARED') THEN
11921 
11922                         x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11923                         x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11924                         IF (substr(p_caller,1,3) = 'FTE') THEN
11925                             FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_SHARED_FTE');
11926                         ELSE
11927                             FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_SHARED');
11928                         END IF;
11929 
11930 					   FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11931 			                   wsh_util_core.add_message(x_return_status);
11932 
11933                         IF l_debug_on THEN
11934                             WSH_DEBUG_SV.logmsg(l_module_name,  'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO A SHARED TRIP, CARRIER SELECTION IS NOT ALLOWED'  );
11935                         END IF;
11936 
11937                 -- Trip to which this delivery is assigned has Lane/Service
11938                 ELSIF (l_trip_status = 'HAS_LANE') THEN
11939 
11940                     x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11941                     x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11942 
11943                     IF (substr(p_caller,1,3) = 'FTE') THEN
11944                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_HAS_LANE_FTE');
11945                     ELSE
11946                         FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_HAS_LANE');
11947                     END IF;
11948                     FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11949                     wsh_util_core.add_message(x_return_status);
11950 
11951                     IF l_debug_on THEN
11952                       WSH_DEBUG_SV.logmsg(l_module_name,  'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO A TRIP WITH SERVICE, CARRIER SELECTION IS NOT ALLOWED'  );
11953                     END IF;
11954 
11955 			     -- Delivery is not assigned to a trip Or
11956 			     -- Delivery is assigned to one trip and this trip is not shared with other deliveries
11957 			    ELSE   -- BUG:2369435
11958 
11959                     IF (substr(l_trip_status,1,3) = 'ONE') THEN
11960                         l_dlvy_info_rec.l_trip_id := to_number(substr(l_trip_status,5));
11961                     ELSE
11962                         l_dlvy_info_rec.l_trip_id := null;
11963                     END IF;
11964                     --Validate other things
11965                     l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
11966                     l_cnt := l_cnt +1 ;
11967 			     END IF;
11968 			END IF;
11969 		END IF;
11970 	  END LOOP; -- FOR i IN p_delivery_id_tab.FISRT..p_delivery_id_tab.LAST LOOP
11971     END IF;
11972 
11973 
11974     IF (l_dlvy_info_tab.COUNT = 0) THEN
11975         IF l_debug_on THEN
11976             WSH_DEBUG_SV.logmsg(l_module_name, 'now exiting');
11977             WSH_DEBUG_SV.pop(l_module_name);
11978         END IF;
11979         RETURN;
11980     END IF;
11981 
11982     l_cnt:= 0;
11983 
11984     i := l_dlvy_info_tab.FIRST;
11985 
11986     LOOP
11987         IF l_debug_on THEN
11988             WSH_DEBUG_SV.logmsg(l_module_name, 'l_cnt : '|| l_cnt);
11989         END IF;
11990 	--
11991 	-- If delivery is content do not add it.
11992 	--
11993 	IF NOT(is_dlvy_content(p_delivery_id =>l_dlvy_info_tab(i).l_delivery_id))
11994 	THEN
11995 
11996 		l_carrier_sel_entity_tab(l_cnt).delivery_id             := 	l_dlvy_info_tab(i).l_delivery_id;
11997 		l_carrier_sel_entity_tab(l_cnt).delivery_name           := 	l_dlvy_info_tab(i).l_dlvy_name;
11998 		l_carrier_sel_entity_tab(l_cnt).trip_id			:=      l_dlvy_info_tab(i).l_trip_id;
11999 		l_carrier_sel_entity_tab(l_cnt).organization_id         := 	l_dlvy_info_tab(i).l_organization_id;
12000 		l_carrier_sel_entity_tab(l_cnt).gross_weight            := 	l_dlvy_info_tab(i).l_gross_weight;
12001 		l_carrier_sel_entity_tab(l_cnt).volume		        := 	l_dlvy_info_tab(i).l_volume;
12002 		l_carrier_sel_entity_tab(l_cnt).initial_pickup_loc_id   := 	l_dlvy_info_tab(i).l_initial_pickup_location_id;
12003 		l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_loc_id := 	l_dlvy_info_tab(i).l_ultimate_dropoff_location_id;
12004 
12005 		l_carrier_sel_entity_tab(l_cnt).freight_terms_code      := 	l_dlvy_info_tab(i).l_freight_terms_code;
12006 		l_carrier_sel_entity_tab(l_cnt).initial_pickup_date     := 	l_dlvy_info_tab(i).l_initial_pickup_date;
12007 
12008 		l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_date   := 	l_dlvy_info_tab(i).l_ultimate_dropoff_date;
12009 		l_carrier_sel_entity_tab(l_cnt).fob_code	        := 	l_dlvy_info_tab(i).l_fob_code;
12010         --
12011 		-- In format carrier selection. If weight/volume UOM code is NULL then get the
12012 		-- default uoms. (This statement is in accordance with previous code)
12013 		--
12014 		IF ((l_dlvy_info_tab(i).l_weight_uom_code is null) AND
12015 		          (l_dlvy_info_tab(i).l_volume_uom_code is null)) THEN
12016 
12017 			    WSH_WV_UTILS.get_default_uoms( p_organization_id => l_dlvy_info_tab(i).l_organization_id,
12018 							   x_weight_uom_code => l_carrier_sel_entity_tab(l_cnt).weight_uom_code,
12019 							   x_volume_uom_code => l_carrier_sel_entity_tab(l_cnt).volume_uom_code,
12020 		                                           x_return_status   => l_return_status);
12021 
12022 
12023 			    IF l_debug_on THEN
12024 				 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_default_uoms'||l_return_status);
12025 			    END IF;
12026 
12027                 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12028                     FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_UOM');
12029                     FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12030                     WSH_UTIL_CORE.add_message(l_return_status);
12031                     l_carrier_sel_entity_tab.DELETE(l_cnt);
12032                     GOTO dlvy_nextpass;
12033                END IF;
12034         ELSE
12035             l_carrier_sel_entity_tab(l_cnt).weight_uom_code         := 	l_dlvy_info_tab(i).l_weight_uom_code;
12036             l_carrier_sel_entity_tab(l_cnt).volume_uom_code         := 	l_dlvy_info_tab(i).l_volume_uom_code;
12037         END IF;
12038 
12039 		--
12040 		--Determine the ship to site id. if delivery is not inbound
12041 		--
12042         IF l_dlvy_info_tab(i).l_shipment_direction <> 'I' THEN
12043            --l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12044 		    get_ship_to_site(
12045                           p_delivery_id	  =>  l_dlvy_info_tab(i).l_delivery_id,
12046                           p_delivery_type =>  l_dlvy_info_tab(i).l_delivery_type,
12047                           p_ultimate_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12048                           x_site_id       =>  l_carrier_sel_entity_tab(l_cnt).customer_site_id,
12049                           x_return_status =>  l_return_status);
12050 
12051 		IF l_debug_on THEN
12052 		    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_site '||l_return_status);
12053 		END IF;
12054 
12055         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12056               l_carrier_sel_entity_tab.DELETE(l_cnt);
12057               GOTO dlvy_nextpass;
12058         END IF;
12059 	END IF;
12060 
12061                 --
12062 		-- At this stage we need to determine : Whether to use ship to / Sold to customer.
12063 		--
12064 		l_param_rec.organization_id := l_dlvy_info_tab(i).l_organization_id;
12065 		l_param_rec.param_name(1)   := 'EVAL_RULE_BASED_ON_SHIPTO_CUST';
12066 
12067 
12068 		WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_rec ,
12069 					    x_return_status    => l_return_status);
12070 
12071 		IF l_debug_on THEN
12072 		    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after getting shipping params '||l_return_status);
12073 		END IF;
12074 
12075 	IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12076               l_carrier_sel_entity_tab.DELETE(l_cnt);
12077               GOTO dlvy_nextpass;
12078         END IF;
12079 		--
12080         --Evaluate Rules based on ship to customer
12081 		--
12082 	IF (l_param_rec.PARAM_VALUE_CHR.EXISTS(1) AND l_param_rec.PARAM_VALUE_CHR(1) = 'Y'
12083                 AND l_dlvy_info_tab(i).l_shipment_direction <> 'I') AND
12084            l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12085 
12086 			get_ship_to_customer( p_ult_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12087 					      p_delivery_id	   => l_dlvy_info_tab(i).l_delivery_id,
12088 					      x_customer_id	   => l_carrier_sel_entity_tab(l_cnt).customer_id,
12089 					      x_return_status	   => l_return_status);
12090 
12091 			IF l_debug_on THEN
12092 			    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_customer'||l_return_status);
12093 			END IF;
12094 
12095 	    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12096                   l_carrier_sel_entity_tab.DELETE(l_cnt);
12097                   GOTO dlvy_nextpass;
12098             END IF;
12099         ELSE
12100             l_carrier_sel_entity_tab(l_cnt).customer_id  := l_dlvy_info_tab(i).l_customer_id;
12101         END IF;
12102 
12103         l_cnt := l_cnt+1;
12104 
12105     ELSE
12106 		FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_CONTENT');
12107 		FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12108 		WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
12109     END IF;
12110 
12111     <<dlvy_nextpass>>
12112     EXIT WHEN i = l_dlvy_info_tab.LAST;
12113     i := l_dlvy_info_tab.NEXT(i);
12114    END LOOP;
12115 
12116    IF (l_carrier_sel_entity_tab.COUNT=0) THEN
12117          IF l_debug_on THEN
12118            wsh_debug_sv.logmsg(l_module_name, 'None of the selected deliveries have been found as eligible for Carrier Selection');
12119          END IF;
12120          -- All deliveries are content.
12121          FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_ALL_CONTENT');
12122          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12123          WSH_UTIL_CORE.add_message(x_return_status);
12124          IF l_debug_on THEN
12125               	WSH_DEBUG_SV.pop(l_module_name);
12126          END IF;
12127          RETURN;
12128    END IF;
12129 
12130    --
12131    -- Call Carrier Selection Engine
12132    --
12133 
12134    WSH_FTE_INTEGRATION.CARRIER_SELECTION( p_format_cs_tab	    => l_carrier_sel_entity_tab,
12135                       p_messaging_yn	        => l_messaging_yn,
12136                       p_caller	                => p_caller,
12137                       p_entity                  => 'DLVY',
12138                       x_cs_output_tab	        => l_cs_result_tab,
12139                       x_cs_output_message_tab   => l_cs_output_message_tab,
12140                       x_return_message	        => l_return_message,
12141                       x_return_status	        => l_return_status);
12142 
12143   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS OR l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING)
12144                                     AND (l_cs_result_tab.COUNT > 0)  THEN
12145 
12146     --
12147     -- at least one result is found
12148     -- Now do a bulk update for all the carrier selection result tables
12149     --
12150      l_rec_attr_tab.DELETE;
12151      l_del_out_rec_tab.DELETE;
12152      l_return_status := null;
12153      l_rank_list_source := 'RG';
12154 
12155      --
12156      -- set the input record and tables
12157      --
12158      l_in_rec.caller      := 'FTE_CARRIER_SELECTION_AUTO';
12159      l_in_rec.phase       := null;
12160      l_in_rec.action_code := 'UPDATE';
12161 
12162 
12163      l_trip_in_rec.caller      := 'FTE_ROUTING_GUIDE';
12164      l_trip_in_rec.phase       := null;
12165      l_trip_in_rec.action_code := 'UPDATE';
12166 
12167      list_cnt := 1;
12168 
12169 
12170      l_prev_delivery_id := 0;
12171      l_prev_org_id      := 0;
12172      l_start_index      := 0;
12173      l_end_index        := 0;
12174 
12175 /*
12176 -- Hiding project
12177      WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters( x_Param_Info => l_global_param_rec,
12178                                                     x_return_status => l_return_status);
12179 */ -- Hiding project
12180 
12181      rec_cnt := l_cs_result_tab.FIRST;
12182 
12183      -- Loop through result tab in order to create/update trip for each delivery
12184      IF rec_cnt IS NOT NULL THEN
12185 
12186      LOOP
12187       --{
12188 
12189         --
12190         l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12191 
12192         IF l_debug_on THEN
12193             WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12194             WSH_DEBUG_SV.log(l_module_name, 'l_prev_delivery_id', l_prev_delivery_id);
12195             WSH_DEBUG_SV.log(l_module_name, 'rec_cnt', rec_cnt);
12196         END IF;
12197 
12198         -- get the value of trip_id if delivery is assigned to trip
12199         IF l_delivery_id <> l_prev_delivery_id THEN
12200             l_trip_id := null;
12201             l_num_ranked_results := 1;
12202             OPEN check_del_assigned(l_delivery_id);
12203                 FETCH check_del_assigned into l_trip_id, l_trip_rank_seq;
12204             CLOSE check_del_assigned;
12205 
12206             l_del_org_id := l_cs_result_tab(rec_cnt).organization_id;
12207 
12208 /*
12209 -- Hiding project
12210             IF l_del_org_id  <> l_prev_org_id THEN
12211 
12212                 l_param_value_info.organization_id := l_del_org_id;
12213                 l_param_value_info.param_name(1)   := 'SKIP_RTNG_RULE_AC_TRIP';
12214 
12215                 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info       => l_param_value_info,
12216                                             x_return_status          => l_return_status);
12217                 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
12218             END IF;
12219 */ -- Hiding project
12220 
12221         END IF;
12222 
12223         l_del_result_type := l_cs_result_tab(rec_cnt).result_type;
12224 
12225         -- If first delivery has 1 ranked result and 2nd delivery has multileg results.
12226         -- How will the rank for first get inserted into ranklist table
12227 
12228         -- Handled by moving rank list insertion in the same pass of the last result record
12229         -- for a delivery
12230 
12231         IF (l_del_result_type = 'RANK') THEN -- if single leg delivery
12232         --{
12233             IF (l_delivery_id <> l_prev_delivery_id) THEN
12234             --{
12235                 --l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12236 
12237                 IF l_debug_on THEN
12238                     WSH_DEBUG_SV.log(l_module_name, 'l_num_ranked_results', l_num_ranked_results);
12239                     WSH_DEBUG_SV.log(l_module_name, 'p_caller', p_caller);
12240                     WSH_DEBUG_SV.log(l_module_name, 'l_skip_rtng_rule_ac_trip', l_skip_rtng_rule_ac_trip);
12241                     WSH_DEBUG_SV.log(l_module_name, 'list_cnt', list_cnt);
12242                 END IF;
12243 
12244                 --
12245                 -- 1. For Manual flow, append_flag is always set to 'Y'
12246                 -- For auto-flow, Check if only one ranked result is returned, set append flag to the value of
12247                 -- global parameter EXPAND_CARRIER_RANKINGS, else set it to 'Y'
12248                 --
12249 
12250                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12251 /*
12252 -- Hiding project
12253                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12254                 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12255 */ -- Hiding project
12256                 --{
12257                     -- AG check that current record is not LAST
12258 /*
12259 -- Hiding project
12260                     IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP')
12261                         AND ( rec_cnt = l_cs_result_tab.LAST OR
12262                             ( rec_cnt <> l_cs_result_tab.LAST AND l_cs_result_tab(l_cs_result_tab.NEXT(rec_cnt)).delivery_id <> l_delivery_id)) THEN
12263                     --{
12264                          l_cs_result_tab(rec_cnt).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12265                     --}
12266                     ELSE
12267                     --{
12268                         l_cs_result_tab(rec_cnt).append_flag := 'Y';
12269                     --}
12270                     END IF;
12271 
12272                     IF l_debug_on THEN
12273                         WSH_DEBUG_SV.log(l_module_name, 'append_flag', l_cs_result_tab(rec_cnt).append_flag);
12274                     END IF;
12275 */ -- Hiding project
12276 
12277                     IF l_trip_id IS NULL THEN
12278                     --{
12279                        --
12280                        -- If Pick up date is same as drop off date,
12281                        -- introduce a gap of 10 mins between pick up date and drop off date
12282                        --
12283                        l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12284 
12285                        IF l_carrier_sel_result_rec.pickup_date = l_carrier_sel_result_rec.dropoff_date THEN
12286                            l_carrier_sel_result_rec.dropoff_date := l_carrier_sel_result_rec.dropoff_date+(1/144);
12287                        END IF;
12288 
12289                        IF l_debug_on THEN
12290                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).pickup_date '||l_cs_result_tab(rec_cnt).pickup_date);
12291                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).dropoff_date '||l_cs_result_tab(rec_cnt).dropoff_date);
12292                        END IF;
12293                         --
12294                         -- Since delivery not assigned to any trip( trip_id is null), and rank = 1, Create trip for the delivery
12295                         --
12296                         WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12297                                p_delivery_id               => l_delivery_id,
12298                                p_carrier_sel_result_rec    => l_carrier_sel_result_rec,
12299                                x_trip_id                   => l_trip_id,
12300                                x_trip_name                 => l_trip_name,
12301                                x_return_message            => x_return_message,
12302                                x_return_status             => l_return_status);
12303 
12304                         IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12305                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12306                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12307                             END IF;
12308                         END IF;
12309 
12310                         IF l_debug_on THEN
12311                             WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after calling CREATE_SEL_CREATE_TRIP '||x_return_status);
12312                             WSH_DEBUG_SV.logmsg(l_module_name,'Trip_id '||l_trip_id);
12313                         END IF;
12314 
12315                         l_ranked_list.DELETE;
12316                         list_cnt := 1;
12317                         l_num_ranked_results := 1;
12318                        --
12319                        -- set values in ranked list for rank #1 results
12320                        --
12321                        l_ranked_list(list_cnt).TRIP_ID                  := l_trip_id;
12322                        l_ranked_list(list_cnt).RANK_SEQUENCE            := l_cs_result_tab(rec_cnt).rank;
12323                        l_ranked_list(list_cnt).CARRIER_ID               := l_cs_result_tab(rec_cnt).carrier_id;
12324                        l_ranked_list(list_cnt).SERVICE_LEVEL            := l_cs_result_tab(rec_cnt).service_level;
12325                        l_ranked_list(list_cnt).MODE_OF_TRANSPORT        := l_cs_result_tab(rec_cnt).mode_of_transport;
12326                        l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12327                        l_ranked_list(list_cnt).FREIGHT_TERMS_CODE       := l_cs_result_tab(rec_cnt).freight_terms_code;
12328                        l_ranked_list(list_cnt).SOURCE                   := l_rank_list_source;
12329                        l_ranked_list(list_cnt).IS_CURRENT               := 'Y';
12330                        l_ranked_list(list_cnt).CALL_RG_FLAG             := 'N';
12331 
12332                        IF l_debug_on THEN
12333                             WSH_DEBUG_SV.logmsg(l_module_name,'Populated Ranked List for rank #1');
12334                        END IF;
12335 
12336                         --
12337                         -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12338                         -- the call to FORMAT_DEL_UPDATE_TABLE
12339                         --
12340                        l_cs_result_tab(rec_cnt) := NULL;
12341 
12342                     --}
12343                     ELSE -- for the case when delivery is already attached to trip, l_trip_id IS NOT NULL
12344                     --{
12345                         IF l_trip_rank_seq is NOT NULL THEN
12346                             FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_UPD_TRIP_RANK_LIST');
12347                             FND_MESSAGE.SET_TOKEN('TRIPID',l_trip_id);
12348                             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12349                             WSH_UTIL_CORE.add_message(x_return_status);
12350                         END IF;
12351 
12352                         l_cs_result_tab(rec_cnt).trip_id := l_trip_id;
12353 
12354                         l_ranked_list(list_cnt).TRIP_ID             := l_trip_id;
12355                         l_ranked_list(list_cnt).RANK_SEQUENCE       := l_cs_result_tab(rec_cnt).rank;
12356                         l_ranked_list(list_cnt).CARRIER_ID          := l_cs_result_tab(rec_cnt).carrier_id;
12357                         l_ranked_list(list_cnt).SERVICE_LEVEL       := l_cs_result_tab(rec_cnt).service_level;
12358                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT   := l_cs_result_tab(rec_cnt).mode_of_transport;
12359                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12360                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE  := l_cs_result_tab(rec_cnt).freight_terms_code;
12361                         l_ranked_list(list_cnt).SOURCE              := l_rank_list_source;
12362                         l_ranked_list(list_cnt).IS_CURRENT          := 'Y';
12363                         l_ranked_list(list_cnt).CALL_RG_FLAG        := 'N';
12364                     --}
12365                     END IF;
12366                 --}
12367                 END IF;
12368             --}
12369             ELSE  -- l_delivery_id = l_prev_delivery_id
12370             --{
12371                 l_num_ranked_results := l_num_ranked_results +1;
12372 
12373                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12374 /*
12375 -- Hiding project
12376                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12377                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12378 */ -- Hiding project
12379                 --{
12380                     IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12381                     --{
12382 
12383                     --
12384                     --  When Ranked List is created by RG engine during auto flow and if
12385                     --  only one ranked result is returned, set CALL_RG_FLAG flag to 'N'
12386                     --  If there are more than one ranked results, we'll set CALL_RG_FLAG flag to 'Y'
12387                     --
12388                         l_ranked_list(list_cnt).CALL_RG_FLAG    := 'Y';
12389                     --}
12390                     ELSE
12391                     --{
12392                         --
12393                         -- If caller is not Auto-Flow, build ranked list for other rank results as well
12394                         --
12395                         list_cnt := list_cnt + 1;
12396 
12397                         l_ranked_list(list_cnt).TRIP_ID         := l_trip_id;
12398                         l_ranked_list(list_cnt).RANK_SEQUENCE   := l_cs_result_tab(rec_cnt).rank;
12399                         l_ranked_list(list_cnt).CARRIER_ID      := l_cs_result_tab(rec_cnt).carrier_id;
12400                         l_ranked_list(list_cnt).SERVICE_LEVEL   := l_cs_result_tab(rec_cnt).service_level;
12401                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12402                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12403                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE       := l_cs_result_tab(rec_cnt).freight_terms_code;
12404                         l_ranked_list(list_cnt).SOURCE          := l_rank_list_source;
12405                         l_ranked_list(list_cnt).IS_CURRENT      := 'N';
12406                         l_ranked_list(list_cnt).CALL_RG_FLAG    := 'N';
12407                    --}
12408                     END IF;
12409 
12410                     IF l_debug_on THEN
12411                         WSH_DEBUG_SV.log(l_module_name, 'l_ranked_list(list_cnt).CALL_RG_FLAG', l_ranked_list(list_cnt).CALL_RG_FLAG);
12412                     END IF;
12413                 --}
12414                 END IF;
12415                 --
12416                 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12417                 -- the call to FORMAT_DEL_UPDATE_TABLE
12418                 --
12419                 l_cs_result_tab(rec_cnt) := NULL;
12420             --}
12421             END IF;
12422             IF (rec_cnt = l_cs_result_tab.LAST OR
12423             (rec_cnt <> l_cs_result_tab.LAST AND l_cs_result_tab(l_cs_result_tab.NEXT(rec_cnt)).delivery_id <> l_delivery_id)) THEN
12424             --{
12425                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12426 /*
12427 -- Hiding project
12428                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12429                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12430 
12431                     IF l_debug_on THEN
12432                         WSH_DEBUG_SV.logmsg(l_module_name, 'calling RANK_LIST_ACTION');
12433                     END IF;
12434 
12435                     WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12436                                --p_api_version_number =>  1.0,
12437                                --p_init_msg_list      =>  FND_API.G_FALSE,
12438                                x_return_status      =>  l_return_status,
12439                                x_msg_count          =>  l_msg_count,
12440                                x_msg_data           =>  l_msg_data,
12441                                p_action_code        =>  'REPLACE',
12442                                p_ranklist           =>  l_ranked_list,
12443                                p_trip_id            =>  l_trip_id,
12444                                p_rank_id            =>  l_rank_id);
12445 
12446                     IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12447                         IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12448                             raise FND_API.G_EXC_UNEXPECTED_ERROR;
12449                         END IF;
12450                     END IF;
12451 */ -- Hiding project
12452                     l_ranked_list.DELETE;
12453                     list_cnt := 1;
12454                     l_num_ranked_results := 1;
12455                 END IF;
12456             --}
12457             END IF;
12458         --}
12459         ELSIF (l_del_result_type = 'MULTILEG') THEN  -- if multileg delivery output
12460         --{
12461 
12462             IF l_trip_id IS NOT NULL THEN
12463             --{
12464                 -- if delivery is already assigned to trip and multileg route to be created as per rule results
12465                  -- show error;
12466                 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DEL_MLEG_ASG_TRIP');
12467                 FND_MESSAGE.SET_TOKEN('DELIVERY_ID',l_delivery_id);
12468                 FND_MESSAGE.SET_TOKEN('TRIP_ID',l_trip_id);
12469                 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12470                 WSH_UTIL_CORE.add_message(x_return_status);
12471 
12472                 l_cs_result_tab(rec_cnt) := NULL;
12473 
12474                 IF l_debug_on THEN
12475                     WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_delivery_id || ' IS ALREADY ASSIGNED TO TRIP '||l_trip_id);
12476                 END IF;
12477              --}
12478              ELSIF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip = 'Y' THEN
12479              --{
12480                 IF l_delivery_id <> l_prev_delivery_id THEN
12481                     FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_MULTILEG');
12482                     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12483                     WSH_UTIL_CORE.add_message(x_return_status);
12484                 END IF;
12485 
12486                 l_cs_result_tab(rec_cnt) := NULL;
12487              --}
12488              ELSIF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12489                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- create trip for all the legs
12490              --{
12491 
12492                 l_prev_delivery_id := 0;
12493                 l_start_index := rec_cnt;
12494                 i := 1;
12495                 j := 1;
12496 
12497                 IF l_debug_on THEN
12498                     WSH_DEBUG_SV.logmsg(l_module_name,'l_start_index '||l_start_index);
12499                 END IF;
12500                 --
12501                 -- For multileg results, first we need to get all the legs for a delivery
12502                 -- in l_cs_mleg_result_tab. Then set pick up and drop off dates for leg pick
12503                 -- up and drop off stops in a call to SET_PICK_UP_DROP_OFF_DATES API
12504                 --
12505 
12506                 IF l_delivery_id <> l_prev_delivery_id THEN
12507                    LOOP
12508                         l_cs_mleg_result_tab(i) := l_cs_result_tab(rec_cnt);
12509 
12510                         EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12511                         l_prev_delivery_id      := l_delivery_id;
12512                         rec_cnt                 := l_cs_result_tab.NEXT(rec_cnt);
12513                         l_delivery_id           := l_cs_result_tab(rec_cnt).delivery_id;
12514                         i := i + 1;
12515                         EXIT WHEN l_delivery_id <> l_prev_delivery_id;
12516                     END LOOP;
12517 
12518                     IF (rec_cnt <> l_cs_result_tab.FIRST AND rec_cnt <> l_cs_result_tab.LAST) THEN
12519                         rec_cnt         := l_cs_result_tab.PRIOR(rec_cnt);
12520                         l_delivery_id   := l_cs_result_tab(rec_cnt).delivery_id;
12521                     END IF;
12522 
12523                     l_end_index     := rec_cnt;
12524 
12525                     IF l_debug_on THEN
12526                         WSH_DEBUG_SV.logmsg(l_module_name,'l_end_index '||l_end_index);
12527                     END IF;
12528 
12529                     SET_PICK_UP_DROP_OFF_DATES(
12530                             p_cs_mleg_result_tab => l_cs_mleg_result_tab,
12531                             x_return_status    =>  x_return_status,
12532                             x_msg_count        =>  l_msg_count,
12533                             x_msg_data         =>  l_msg_data);
12534 
12535                     k := l_cs_mleg_result_tab.FIRST;
12536 
12537                     FOR j IN l_start_index .. l_end_index LOOP
12538                         --
12539                         -- Set pick up and drop off dates for each leg in result tab
12540                         -- and Create Trip for each leg
12541                         --
12542                         l_cs_result_tab(j).pickup_date  := l_cs_mleg_result_tab(k).pickup_date;
12543                         l_cs_result_tab(j).dropoff_date := l_cs_mleg_result_tab(k).dropoff_date;
12544 
12545                         IF l_debug_on THEN
12546                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).pickup_date :'||to_char(l_cs_result_tab(j).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
12547                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).initial_pickup_location_id: '||l_cs_result_tab(j).initial_pickup_location_id);
12548                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).dropoff_date :'||to_char(l_cs_result_tab(j).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
12549                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).ultimate_dropoff_location_id: '||l_cs_result_tab(j).ultimate_dropoff_location_id);
12550                         END IF;
12551 
12552                         l_carrier_sel_result_rec := l_cs_result_tab(j);
12553                         WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12554                                   p_delivery_id               => l_delivery_id,
12555                                   p_carrier_sel_result_rec    => l_carrier_sel_result_rec,
12556                                   x_trip_id                   => l_trip_id,
12557                                   x_trip_name                 => l_trip_name,
12558                                   x_return_message            => x_return_message,
12559                                   x_return_status             => l_return_status);
12560 
12561                          IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12562                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12563                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12564                             END IF;
12565                         END IF;
12566                         l_cs_result_tab(j).trip_id              := l_trip_id;
12567 
12568                         IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12569                             l_cs_result_tab(j).append_flag      := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12570                         ELSE
12571                             l_cs_result_tab(j).append_flag      := 'Y';
12572                         END IF;
12573 
12574                         l_ranked_list(list_cnt).TRIP_ID             := l_trip_id;
12575                         l_ranked_list(list_cnt).RANK_SEQUENCE       := l_carrier_sel_result_rec.rank;
12576                         l_ranked_list(list_cnt).CARRIER_ID          := l_carrier_sel_result_rec.carrier_id;
12577                         l_ranked_list(list_cnt).SERVICE_LEVEL       := l_carrier_sel_result_rec.service_level;
12578                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT   := l_carrier_sel_result_rec.mode_of_transport;
12579                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_carrier_sel_result_rec.consignee_carrier_ac_no;
12580                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE  := l_carrier_sel_result_rec.freight_terms_code;
12581                         l_ranked_list(list_cnt).SOURCE              := l_rank_list_source;
12582                         l_ranked_list(list_cnt).IS_CURRENT          := 'Y';
12583                         l_ranked_list(list_cnt).CALL_RG_FLAG        := 'N';
12584 
12585                         --
12586                         -- Create and attach ranked list to each trip
12587                         --
12588 
12589 	                    WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12590 --                           p_api_version_number =>  1.0,
12591 --                           p_init_msg_list      =>  FND_API.G_FALSE,
12592                            x_return_status      =>  l_return_status,
12593                            x_msg_count          =>  l_msg_count,
12594                            x_msg_data           =>  l_msg_data,
12595                            p_action_code        =>  'REPLACE',
12596                            p_ranklist           =>  l_ranked_list,
12597                            p_trip_id            =>  l_trip_id,
12598                            p_rank_id            =>  l_rank_id);
12599 
12600                          IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12601                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12602                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12603                             END IF;
12604                         END IF;
12605                         l_ranked_list.DELETE;
12606                         list_cnt := 1;
12607 
12608                         k := l_cs_mleg_result_tab.NEXT(k);
12609 
12610                    END LOOP;
12611                 END IF;
12612               --}
12613              END IF;
12614            --}
12615        END IF;
12616        IF l_debug_on THEN
12617            WSH_DEBUG_SV.logmsg(l_module_name, 'set l_prev_delivery_id and l_prev_trip_id');
12618            WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12619            WSH_DEBUG_SV.log(l_module_name, 'l_trip_id', l_trip_id);
12620        END IF;
12621        l_prev_delivery_id := l_delivery_id;
12622        l_prev_trip_id     := l_trip_id;
12623 
12624        EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12625        rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12626       --}
12627       END LOOP;
12628     END IF;
12629 
12630     --
12631     -- Format the delivery table for the call to the group API
12632     --
12633 
12634     FORMAT_DEL_UPDATE_TABLE(p_cs_result_tab     => l_cs_result_tab,
12635                             p_caller            => p_caller,
12636                             x_rec_attr_tab      => l_rec_attr_tab,
12637                             x_trip_info_tab     => l_trip_info_tab,
12638                             x_return_status     => l_return_status,
12639                             x_return_message    => x_return_message);
12640 
12641 
12642     IF (l_rec_attr_tab.COUNT > 0) THEN
12643      --
12644      -- Update the deliveries table with the info
12645      --
12646         WSH_INTERFACE_GRP.Create_Update_Delivery(p_api_version_number => 1.0,
12647                                   p_init_msg_list      => 'F',
12648                                   p_commit             => null,
12649                                   p_in_rec             => l_in_rec,
12650                                   p_rec_attr_tab       => l_rec_attr_tab,
12651                                   x_del_out_rec_tab    => l_del_out_rec_tab,
12652                                   x_return_status      => l_return_status,
12653                                   x_msg_count          => l_msg_count,
12654                                   x_msg_data           => l_msg_data);
12655 
12656 
12657          IF ((l_return_status is not null) AND
12658          (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12659             --
12660             -- delivery not updated
12661             --
12662             x_return_status  := l_return_status;
12663             WSH_UTIL_CORE.add_message(x_return_status);
12664                 --
12665             -- Debug Statements
12666                 --
12667             IF l_debug_on THEN
12668                WSH_DEBUG_SV.logmsg(l_module_name,  'CARRIER SELECTION - AUTO CREATE - COULD NOT UPDATE DELIVERY');
12669             END IF;
12670                 --
12671             x_return_message := l_msg_data;
12672 
12673             IF l_debug_on THEN
12674                WSH_DEBUG_SV.pop(l_module_name);
12675             END IF;
12676                 --
12677             RETURN;
12678          END IF;
12679 
12680     END IF;
12681 
12682 
12683 
12684     IF (l_trip_info_tab.COUNT > 0) THEN
12685     --{
12686             WSH_INTERFACE_GRP.Create_Update_Trip(
12687                p_api_version_number => 1.0,
12688                p_init_msg_list      => 'F',
12689                p_commit             => null,
12690                x_return_status      => l_return_status,
12691                x_msg_count          => l_msg_count,
12692                x_msg_data           => l_msg_data,
12693                p_trip_info_tab      => l_trip_info_tab,
12694                p_in_rec             => l_trip_in_rec,
12695                x_out_tab            => l_trip_out_rec_tab);
12696 
12697             IF ((l_return_status is not null) AND
12698                  (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12699 
12700                 --
12701                 -- trip not updated
12702                 --
12703                 x_return_status  := l_return_status;
12704                 WSH_UTIL_CORE.add_message(x_return_status);
12705                 --
12706                 -- Debug Statements
12707                 --
12708                 IF l_debug_on THEN
12709                    WSH_DEBUG_SV.logmsg(l_module_name,  'CARRIER SELECTION - FORM MANUAL - COULD NOT UPDATE TRIP');
12710                 END IF;
12711                 --
12712                 x_return_message := l_msg_data;
12713                 --
12714                 -- Return back to the calling API or form
12715                 --
12716                 -- Debug Statements
12717                 --
12718                 IF l_debug_on THEN
12719                    WSH_DEBUG_SV.pop(l_module_name);
12720                 END IF;
12721                 --
12722                 RETURN;
12723             END IF;
12724       --}
12725   END IF;
12726 
12727 END IF;
12728 
12729  --
12730  -- Debug Statements
12731  --
12732 IF l_debug_on THEN
12733     WSH_DEBUG_SV.pop(l_module_name);
12734 END IF;
12735     --
12736 EXCEPTION
12737    WHEN OTHERS THEN
12738       l_error_code := SQLCODE;
12739       l_error_text := SQLERRM;
12740 
12741       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION');
12742       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12743       x_return_message := l_error_text;
12744 
12745 
12746       IF l_debug_on THEN
12747 	WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12748 	WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12749       END IF;
12750       --
12751 END PROCESS_CARRIER_SELECTION;
12752 --SBAKSHI(R12)
12753 
12754 
12755 /**________________________________________________________________________
12756 --
12757 -- Name:
12758 -- Assign_Del_to_Consol_Del
12759 --
12760 -- Purpose:
12761 -- This API assigns a deliveries to a parent (consolidation)
12762 -- delivery. If the caller is FTE consolidation SRS, we
12763 -- assume that the child deliveries have already been validated
12764 -- as eligible to be assigned to the parent delivery.
12765 -- Parameters:
12766 -- p_del_tab: Table of deliveries that need to be assigned
12767 -- p_parent_del: Parent delivery id that will be assigne to
12768 -- p_caller: Calling entity/action
12769 -- x_return_status: status
12770 **/
12771 
12772 Procedure Assign_Del_to_Consol_Del(
12773           p_del_tab         IN WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
12774           p_parent_del_id   IN NUMBER,
12775           p_caller          IN VARCHAR2,
12776           x_return_status   OUT NOCOPY VARCHAR2) IS
12777 
12778 -- make sure the parent is OPEN and is of type 'CONSOLIDATION'
12779 CURSOR c_check_valid_parent(p_parent_del_id in NUMBER) IS
12780 select s1.trip_id,
12781        l.pick_up_stop_id,
12782        l.drop_off_stop_id,
12783        l.delivery_leg_id,
12784        d.ultimate_dropoff_location_id dropoff_stop_location,
12785        s1.stop_location_id pickup_stop_location,
12786        t.ignore_for_planning,
12787        s1.planned_arrival_date pu_ar_date,
12788        s1.planned_departure_date pu_dep_date,
12789        s2.planned_arrival_date do_ar_date,
12790        s2.planned_departure_date do_dep_date
12791 from wsh_trip_stops s1, wsh_trip_stops s2, wsh_delivery_legs l, wsh_new_deliveries d, wsh_trips t
12792 where s1.stop_id = l.pick_up_stop_id
12793 and s2.stop_id = l.drop_off_stop_id
12794 and l.delivery_id = d.delivery_id
12795 and d.delivery_id = p_parent_del_id
12796 and d.status_code = 'OP'
12797 and d.delivery_type = 'CONSOLIDATION'
12798 and s1.trip_id = t.trip_id ;
12799 
12800 
12801 -- make sure that the delivery is open, STANDARD and
12802 -- is not assigned to a parent delivery.
12803 cursor c_check_valid_child(p_delivery_id in number) is
12804 select d.delivery_id
12805 from wsh_new_deliveries d
12806 where d.delivery_id = p_delivery_id
12807 and d.status_code = 'OP'
12808 and d.delivery_type = 'STANDARD'
12809 and not exists (select 1 from wsh_delivery_legs
12810                 where parent_delivery_leg_id is not null
12811                 and delivery_id = d.delivery_id);
12812 -- check if the delivery is assigned to a trip
12813 /*cursor c_check_trips(p_delivery_id in number) is
12814 select delivery_leg_id
12815 from wsh_delivery_legs
12816 where delivery_id = p_delivery_id
12817 and rownum = 1;
12818 */
12819 -- check if the trip the delivery is assigned to is valid
12820 cursor c_check_trips(p_delivery_id in number) is
12821 select l.delivery_leg_id, s1.trip_id
12822 from wsh_delivery_legs l, wsh_trip_stops s1, wsh_new_deliveries d
12823 where l.delivery_id = p_delivery_id
12824 and   d.delivery_id = l.delivery_id
12825 and   d.initial_pickup_location_id = s1.stop_location_id
12826 and   s1.stop_id = l.pick_up_stop_id;
12827 
12828 l_parent_trip_rec c_check_valid_parent%rowtype;
12829 type l_trip_rec_tab_type is table of c_check_trips%rowtype index by binary_integer;
12830 l_trip_rec_tab l_trip_rec_tab_type;
12831 
12832 
12833 cursor c_get_top_child_details(p_delivery_id in number) is
12834 select a.delivery_detail_id
12835 from wsh_delivery_assignments a
12836 where a.delivery_id is not null
12837 and a.delivery_id = p_delivery_id
12838 and a.type = 'O'
12839 and a.parent_delivery_detail_id is null
12840 and not exists
12841 (select '1'
12842  from wsh_delivery_assignments b
12843  where a.delivery_detail_id = b.delivery_detail_id
12844  and b.type = 'C');
12845 
12846 -- This cursor selects all the trips that are
12847 -- assigned to all the deliveries that are
12848 -- assigned to the original trip.
12849 -- These trips will be set to ignore for planning
12850 -- along with the original trip.
12851 
12852 cursor c_get_trip_siblings(p_trip_id in number) is
12853 select distinct s2.trip_id
12854 from wsh_trip_stops s1, wsh_trip_stops s2,
12855      wsh_delivery_legs l1, wsh_delivery_legs l2
12856 where s1.trip_id = p_trip_id
12857 and s1.stop_id = l1.pick_up_stop_id
12858 and l1.delivery_id = l2.delivery_id
12859 and l2.pick_up_stop_id = s2.stop_id;
12860 
12861 
12862 cursor c_chil_del_trips(p_delivery_id in number) is
12863 select s.trip_id
12864 from wsh_trip_stops s, wsh_delivery_legs l
12865 where l.delivery_id = p_delivery_id
12866 and   l.pick_up_stop_id = s.stop_id;
12867 
12868 l_parent_trip_id NUMBER;
12869 l_child_trip_id NUMBER;
12870 l_parent_del_id NUMBER;
12871 l_dropoff_loc_id NUMBER;
12872 l_child_details_tab wsh_util_core.id_tab_type;
12873 l_valid_children_tab wsh_util_core.id_tab_type;
12874 l_unassigned_trips_tab wsh_util_core.id_tab_type;
12875 l_assigned_trips_tab wsh_util_core.id_tab_type;
12876 l_delivery_leg_id_dummy NUMBER;
12877 l_trip_id_tab wsh_util_core.id_tab_type;
12878 l_wv_delivery_tab wsh_util_core.id_tab_type;
12879 l_unassign_dels wsh_util_core.id_tab_type;
12880 l_ignore_plan_dels wsh_util_core.id_tab_type;
12881 l_include_plan_dels wsh_util_core.id_tab_type;
12882 l_change_plan_dels wsh_util_core.id_tab_type;
12883 l_child_del_trips  wsh_util_core.id_tab_type;
12884 l_child_del_trips_dummy  wsh_util_core.id_tab_type;
12885 l_parent_del_tab wsh_util_core.id_tab_type;
12886 l_intermediate_loc_id NUMBER;
12887 l_dummy_child NUMBER;
12888 l_gross_wt NUMBER;
12889 l_net_wt NUMBER;
12890 l_volume NUMBER;
12891 
12892 l_msg_count NUMBER;
12893 l_msg_data VARCHAR2(2000);
12894 i NUMBER := 0;
12895 j NUMBER := 0;
12896 k NUMBER := 0;
12897 l NUMBER := 0;
12898 m NUMBER := 0;
12899 n NUMBER := 0;
12900 o NUMBER := 0;
12901 p NUMBER := 0;
12902 q NUMBER := 0;
12903 
12904 l_num_warnings              NUMBER  := 0;
12905 l_num_errors                NUMBER  := 0;
12906 l_return_status             VARCHAR2(30);
12907 
12908 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Assig_Del_to_Consol_del';
12909 l_debug_on BOOLEAN;
12910 
12911 WSH_FAIL_ASSIGN_DEL_TO_CONSOL     EXCEPTION;
12912 WSH_INVALID_PARENT EXCEPTION;
12913 WSH_INVALID_CHILDREN EXCEPTION;
12914 WSH_INVALID_DECONSOL_POINT EXCEPTION;
12915 WSH_INVALID_TRIP EXCEPTION;
12916 
12917 
12918 BEGIN
12919 
12920    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12921    --
12922    IF l_debug_on IS NULL
12923    THEN
12924      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12925    END IF;
12926    --
12927    IF l_debug_on THEN
12928      wsh_debug_sv.push (l_module_name);
12929      WSH_DEBUG_SV.log(l_module_name,'p_parent_del_id', p_parent_del_id);
12930      WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
12931    END IF;
12932 
12933    OPEN c_check_valid_parent(p_parent_del_id);
12934    FETCH c_check_valid_parent INTO l_parent_trip_rec;
12935    IF c_check_valid_parent%NOTFOUND THEN
12936       CLOSE c_check_valid_parent;
12937       -- RAISE EXCEPTION
12938       RAISE WSH_INVALID_PARENT;
12939    END IF;
12940    CLOSE c_check_valid_parent;
12941 
12942    -- If caller is WSH_AUTOCREATE_CONSOL no need to validate as grouping of deliveries and
12943    -- deconsol point has already been figured out
12944    IF p_caller <> 'WSH_AUTOCREATE_CONSOL' THEN
12945 
12946       i := p_del_tab.FIRST;
12947 
12948       IF l_debug_on THEN
12949          WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
12950          WSH_DEBUG_SV.log(l_module_name,'p_del_tab.first', p_del_tab.first);
12951       END IF;
12952       WHILE i IS NOT NULL LOOP
12953 
12954         IF l_debug_on THEN
12955            WSH_DEBUG_SV.log(l_module_name,'delivery: '||i, p_del_tab(i).delivery_id);
12956            WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id: '||i, p_del_tab(i).initial_pickup_location_id);
12957            WSH_DEBUG_SV.log(l_module_name,'l_parent_trip_rec.pickup_stop_location: '||i, l_parent_trip_rec.pickup_stop_location);
12958         END IF;
12959 
12960         IF p_del_tab(i).initial_pickup_location_id = l_parent_trip_rec.pickup_stop_location THEN
12961 
12962           OPEN c_check_valid_child(p_del_tab(i).delivery_id);
12963           FETCH c_check_valid_child INTO l_dummy_child;
12964           IF c_check_valid_child%FOUND THEN
12965              IF l_debug_on THEN
12966                 WSH_DEBUG_SV.log(l_module_name,'l_dummy_child', l_dummy_child);
12967              END IF;
12968 
12969              CLOSE  c_check_valid_child;
12970              OPEN c_check_trips(p_del_tab(i).delivery_id);
12971              FETCH c_check_trips INTO l_delivery_leg_id_dummy, l_child_trip_id;
12972              IF c_check_trips%NOTFOUND THEN
12973              -- This delivery is not assigned to any trip at pu location, so we can assign it to the trip.
12974              -- Nothing to validate.
12975                 j := j+1;
12976                 k := k+1;
12977                 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
12978                 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
12979                 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
12980                    n := n + 1;
12981                    l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
12982                 ELSE
12983                    o := o + 1;
12984                    l_include_plan_dels(o) := p_del_tab(i).delivery_id;
12985                 END IF;
12986 
12987              ELSIF p_caller = 'WMS_AUTOCREATE_CONSOL' THEN
12988              -- Called by autocreate_consol_del for WMS, if the delivery is already
12989              -- assigned to trips, then they must be assigned to a valid trip since
12990              -- autocreate_consol_del already validates the trips.
12991                 j := j+1;
12992                 m := m+1;
12993                 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
12994                 l_assigned_trips_tab(m) := p_del_tab(i).delivery_id;
12995              ELSE
12996              -- If we are assigning the delivery to an already existing parent delivery, ie. not being
12997              -- called by autocreate_consol_del and the delivery has at least one trip, we need to
12998              -- make sure that there is a valid trip on the delivery.
12999 
13000                 IF l_child_trip_id <> l_parent_trip_rec.trip_id THEN
13001                    -- RAISE EXCEPTION
13002                    -- delivery is not in valid trip
13003                    CLOSE c_check_trips;
13004                    RAISE WSH_INVALID_TRIP;
13005 
13006                 ELSE
13007                    l_unassign_dels(1) := p_del_tab(i).delivery_id;
13008                    IF l_debug_on THEN
13009                       WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.Unassign_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
13010                    END IF;
13011                    WSH_TRIPS_ACTIONS.Unassign_Trip(p_del_rows => l_unassign_dels,
13012                                                    p_trip_id  => l_parent_trip_rec.trip_id,
13013                                                    x_return_status => l_return_status);
13014 
13015                    wsh_util_core.api_post_call
13016                       (
13017                         p_return_status => l_return_status,
13018                         x_num_warnings  => l_num_warnings,
13019                         x_num_errors    => l_num_errors
13020                       );
13021 
13022                    j := j+1;
13023                    k := k+1;
13024                    l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13025                    l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13026                    IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13027                       n := n + 1;
13028                       l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13029                    ELSE
13030                       o := o + 1;
13031                       l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13032                    END IF;
13033                 END IF;
13034              END IF;
13035              CLOSE c_check_trips;
13036           END IF;
13037           IF c_check_valid_child%ISOPEN THEN
13038              CLOSE c_check_valid_child;
13039           END IF;
13040 
13041         END IF;
13042         i := p_del_tab.next(i);
13043 
13044       END LOOP;
13045 
13046    ELSE
13047 
13048       FOR i in 1..p_del_tab.count LOOP
13049         l_valid_children_tab(i) := p_del_tab(i).delivery_id;
13050         l_unassigned_trips_tab(i) := p_del_tab(i).delivery_id;
13051         IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13052            n := n + 1;
13053            l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13054         ELSE
13055            o := o + 1;
13056            l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13057         END IF;
13058       END LOOP;
13059 
13060    END IF;
13061 
13062 
13063 
13064    IF l_valid_children_tab.count = 0 THEN
13065       -- ERROR!!!
13066       -- No valid deliveries were assigned to parent.
13067       RAISE WSH_INVALID_CHILDREN;
13068 
13069    END IF;
13070 
13071    BEGIN
13072      FOR i in 1..l_valid_children_tab.count LOOP
13073        WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_valid_children_tab(i));
13074      END LOOP;
13075 
13076    EXCEPTION
13077      WHEN OTHERS THEN
13078         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13079         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13080         FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13081         WSH_UTIL_CORE.Add_Message(x_return_status);
13082         --
13083         -- Debug Statements
13084         --
13085         IF l_debug_on THEN
13086            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13087            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13088         END IF;
13089         RETURN;
13090         --
13091    END;
13092    FORALL i in 1..l_valid_children_tab.count
13093          update wsh_delivery_assignments
13094          set type = 'O'
13095          where delivery_id = l_valid_children_tab(i)
13096          and delivery_id is not null
13097          and nvl(type, 'S') = 'S'
13098          and parent_delivery_detail_id is NULL;
13099 
13100    FOR i in 1..l_valid_children_tab.count LOOP
13101 
13102       OPEN c_get_top_child_details(l_valid_children_tab(i));
13103       FETCH c_get_top_child_details BULK COLLECT
13104       INTO l_child_details_tab;
13105       CLOSE c_get_top_child_details;
13106 
13107       Forall k in 1..l_child_details_tab.count
13108       INSERT INTO wsh_delivery_assignments (
13109       delivery_id,
13110       parent_delivery_id,
13111       delivery_detail_id,
13112       parent_delivery_detail_id,
13113       creation_date,
13114       created_by,
13115       last_update_date,
13116       last_updated_by,
13117       last_update_login,
13118       program_application_id,
13119       program_id,
13120       program_update_date,
13121       request_id,
13122       active_flag,
13123       delivery_assignment_id,
13124       type
13125       ) VALUES (
13126       l_valid_children_tab(i),
13127       p_parent_del_id,
13128       l_child_details_tab(k),
13129       NULL,
13130       SYSDATE,
13131       FND_GLOBAL.USER_ID,
13132       SYSDATE,
13133       FND_GLOBAL.USER_ID,
13134       FND_GLOBAL.USER_ID,
13135       NULL,
13136       NULL,
13137       NULL,
13138       NULL,
13139       NULL,
13140       wsh_delivery_assignments_s.nextval,
13141       'C'
13142       );
13143 
13144 
13145    END LOOP;
13146 
13147 
13148    -- Assign child delivery to parents' trip
13149 
13150    l_trip_id_tab(1) := l_parent_trip_rec.trip_id;
13151 
13152    IF l_include_plan_dels.count > 0 THEN
13153 
13154       IF l_parent_trip_rec.ignore_for_planning = 'Y' THEN
13155          -- Make the child deliveries ignore for planning before assignment.
13156          FOR i in 1..l_include_plan_dels.count LOOP
13157 
13158              OPEN c_chil_del_trips(l_include_plan_dels(i));
13159              FETCH c_chil_del_trips BULK COLLECT
13160              INTO l_child_del_trips_dummy;
13161              IF c_chil_del_trips%NOTFOUND THEN
13162                 p := p + 1;
13163                 l_change_plan_dels(p) := l_include_plan_dels(i);
13164              ELSE
13165                 q := l_child_del_trips.count;
13166                 FOR i in 1..l_child_del_trips_dummy.count LOOP
13167                     l_child_del_trips(q + i) := l_child_del_trips_dummy(i);
13168                 END LOOP;
13169                 l_child_del_trips_dummy.delete;
13170              END IF;
13171              CLOSE c_chil_del_trips;
13172 
13173          END LOOP;
13174 
13175          IF l_child_del_trips.count > 0 THEN
13176 
13177             IF l_debug_on THEN
13178                WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13179             END IF;
13180             WSH_TP_RELEASE.change_ignoreplan_status
13181                    (p_entity        => 'TRIP',
13182                     p_in_ids        => l_child_del_trips,
13183                     p_action_code   => 'IGNORE_PLAN',
13184                     x_return_status => l_return_status);
13185 
13186             wsh_util_core.api_post_call
13187                       (
13188                         p_return_status => l_return_status,
13189                         x_num_warnings  => l_num_warnings,
13190                         x_num_errors    => l_num_errors
13191                       );
13192          END IF;
13193 
13194          IF l_change_plan_dels.count > 0 THEN
13195             IF l_debug_on THEN
13196                WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13197             END IF;
13198             WSH_TP_RELEASE.change_ignoreplan_status
13199                    (p_entity        => 'DLVY',
13200                     p_in_ids        => l_change_plan_dels,
13201                     p_action_code   => 'IGNORE_PLAN',
13202                     x_return_status => l_return_status);
13203 
13204             wsh_util_core.api_post_call
13205                       (
13206                         p_return_status => l_return_status,
13207                         x_num_warnings  => l_num_warnings,
13208                         x_num_errors    => l_num_errors
13209                       );
13210          END IF;
13211 
13212       END IF;
13213 
13214       IF l_debug_on THEN
13215          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = N',WSH_DEBUG_SV.C_PROC_LEVEL);
13216       END IF;
13217       WSH_TRIPS_ACTIONS.assign_trip(
13218                 p_del_rows            =>  l_include_plan_dels,
13219                 p_trip_id             =>  l_trip_id_tab(1),
13220                 p_pickup_stop_id      =>  l_parent_trip_rec.pick_up_stop_id,
13221                 p_dropoff_stop_id     =>  l_parent_trip_rec.drop_off_stop_id,
13222                 p_pickup_location_id  =>  l_parent_trip_rec.pickup_stop_location,
13223                 p_dropoff_location_id =>  l_parent_trip_rec.dropoff_stop_location,
13224                 p_pickup_arr_date     =>  l_parent_trip_rec.pu_ar_date,
13225                 p_pickup_dep_date     =>  l_parent_trip_rec.pu_dep_date,
13226                 p_dropoff_arr_date    =>  l_parent_trip_rec.do_ar_date,
13227                 p_dropoff_dep_date    =>  l_parent_trip_rec.do_dep_date,
13228                 x_return_status       =>  l_return_status);
13229 
13230       wsh_util_core.api_post_call
13231                       (
13232                         p_return_status => l_return_status,
13233                         x_num_warnings  => l_num_warnings,
13234                         x_num_errors    => l_num_errors
13235                       );
13236    END IF;
13237 
13238    IF NVL(l_parent_trip_rec.ignore_for_planning, 'N') = 'N' THEN
13239       -- Set ignore for planning flag of child deliveries and their related trips.
13240       l_trip_id_tab.delete;
13241       OPEN c_get_trip_siblings(l_parent_trip_rec.trip_id);
13242       FETCH c_get_trip_siblings BULK COLLECT
13243       INTO l_trip_id_tab;
13244       CLOSE c_get_trip_siblings;
13245 
13246       IF l_debug_on THEN
13247          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13248       END IF;
13249       WSH_TP_RELEASE.change_ignoreplan_status
13250                    (p_entity        => 'TRIP',
13251                     p_in_ids        => l_trip_id_tab,
13252                     p_action_code   => 'IGNORE_PLAN',
13253                     x_return_status => l_return_status);
13254 
13255       wsh_util_core.api_post_call
13256                       (
13257                         p_return_status => l_return_status,
13258                         x_num_warnings  => l_num_warnings,
13259                         x_num_errors    => l_num_errors
13260                       );
13261 
13262    END IF;
13263    IF l_ignore_plan_dels.count > 0 THEN
13264 
13265       IF l_debug_on THEN
13266          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = Y',WSH_DEBUG_SV.C_PROC_LEVEL);
13267       END IF;
13268 
13269       WSH_TRIPS_ACTIONS.assign_trip(
13270                 p_del_rows            =>  l_ignore_plan_dels,
13271                 p_trip_id             =>  l_trip_id_tab(1),
13272                 p_pickup_stop_id      =>  l_parent_trip_rec.pick_up_stop_id,
13273                 p_dropoff_stop_id     =>  l_parent_trip_rec.drop_off_stop_id,
13274                 p_pickup_location_id  =>  l_parent_trip_rec.pickup_stop_location,
13275                 p_dropoff_location_id =>  l_parent_trip_rec.dropoff_stop_location,
13276                 p_pickup_arr_date     =>  l_parent_trip_rec.pu_ar_date,
13277                 p_pickup_dep_date     =>  l_parent_trip_rec.pu_dep_date,
13278                 p_dropoff_arr_date    =>  l_parent_trip_rec.do_ar_date,
13279                 p_dropoff_dep_date    =>  l_parent_trip_rec.do_dep_date,
13280                 x_return_status       =>  l_return_status);
13281 
13282 
13283 
13284       wsh_util_core.api_post_call
13285                       (
13286                         p_return_status => l_return_status,
13287                         x_num_warnings  => l_num_warnings,
13288                         x_num_errors    => l_num_errors
13289                       );
13290    END IF;
13291 
13292    BEGIN
13293 
13294      FOR i in 1..l_valid_children_tab.count LOOP
13295        WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_delivery_id => l_valid_children_tab(i));
13296      END LOOP;
13297 
13298    EXCEPTION
13299      WHEN OTHERS THEN
13300         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13301         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13302         FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13303         WSH_UTIL_CORE.Add_Message(x_return_status);
13304         --
13305         -- Debug Statements
13306         --
13307         IF l_debug_on THEN
13308            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13309            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13310         END IF;
13311         RETURN;
13312         --
13313    END;
13314    -- Assign child delivery legs to parent
13315    FORALL i in 1..l_valid_children_tab.count
13316         update wsh_delivery_legs
13317         set parent_delivery_leg_id  = l_parent_trip_rec.delivery_leg_id
13318         where delivery_id = l_valid_children_tab(i)
13319         and pick_up_stop_id = l_parent_trip_rec.pick_up_stop_id;
13320 
13321    IF P_CALLER = 'WSH_AUTOCREATE_CONSOL' THEN
13322    -- Calculate Wt/Volume of the consolidation delivery
13323    -- if caller is WSH_AUTOCREATE_CONSOL.
13324    -- We recalculate the wt/vol of delivery during the assignment of
13325    -- consol lpns, so no need to do it here for WMS.
13326 
13327      IF l_debug_on THEN
13328         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13329      END IF;
13330      WSH_WV_UTILS.Delivery_Weight_Volume
13331                 ( p_delivery_id    => p_parent_del_id,
13332                   p_update_flag    => 'Y',
13333                   p_calc_wv_if_frozen => 'N',
13334                   x_gross_weight   => l_gross_wt,
13335                   x_net_weight     => l_net_wt,
13336                   x_volume         => l_volume,
13337                   x_return_status  => l_return_status);
13338 
13339      wsh_util_core.api_post_call
13340                       (
13341                         p_return_status => l_return_status,
13342                         x_num_warnings  => l_num_warnings,
13343                         x_num_errors    => l_num_errors
13344                       );
13345    END IF;
13346 
13347    l_parent_del_tab(1) := p_parent_del_id;
13348    WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13349                  p_entity_type => 'DELIVERY',
13350                  p_entity_ids   => l_parent_del_tab,
13351                  x_return_status => l_return_status);
13352 
13353    wsh_util_core.api_post_call
13354                       (
13355                         p_return_status => l_return_status,
13356                         x_num_warnings  => l_num_warnings,
13357                         x_num_errors    => l_num_errors
13358                       );
13359 
13360 
13361 
13362    IF l_valid_children_tab.count < p_del_tab.count THEN
13363 
13364       -- Not all deliveries were assigned to parent.
13365       FND_MESSAGE.SET_NAME('WSH', 'WSH_PARTIAL_CONSOL_ASSIGN');
13366       FND_MESSAGE.SET_TOKEN('DEL_COUNT', 'l_valid_children_tab.count');
13367       wsh_util_core.add_message(wsh_util_core.g_ret_sts_error, l_module_name);
13368       l_num_warnings := l_num_warnings + 1;
13369     END IF;
13370 
13371     IF l_num_errors > 0
13372     THEN
13373         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13374     ELSIF l_num_warnings > 0
13375     THEN
13376         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13377     ELSE
13378         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13379     END IF;
13380 
13381 
13382 IF l_debug_on THEN
13383 wsh_debug_sv.pop(l_module_name);
13384 END IF;
13385 
13386 EXCEPTION
13387  WHEN FND_API.G_EXC_ERROR THEN
13388     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13389     IF c_check_trips%ISOPEN THEN
13390       CLOSE c_check_trips;
13391     END IF;
13392     IF c_get_top_child_details%ISOPEN THEN
13393       CLOSE c_get_top_child_details;
13394     END IF;
13395     IF c_get_trip_siblings%ISOPEN THEN
13396       CLOSE c_get_trip_siblings;
13397     END IF;
13398     IF c_check_valid_parent%ISOPEN THEN
13399       CLOSE c_check_valid_parent;
13400     END IF;
13401     IF c_check_valid_child%ISOPEN THEN
13402       CLOSE c_check_valid_child;
13403     END IF;
13404 
13405 
13406     --
13407     -- Debug Statements
13408     --
13409     IF l_debug_on THEN
13410           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13411           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
13412     END IF;
13413 
13414  WHEN WSH_INVALID_TRIP THEN
13415    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13416     IF c_check_trips%ISOPEN THEN
13417       CLOSE c_check_trips;
13418     END IF;
13419     IF c_get_top_child_details%ISOPEN THEN
13420       CLOSE c_get_top_child_details;
13421     END IF;
13422     IF c_get_trip_siblings%ISOPEN THEN
13423       CLOSE c_get_trip_siblings;
13424     END IF;
13425     IF c_check_valid_parent%ISOPEN THEN
13426       CLOSE c_check_valid_parent;
13427     END IF;
13428     IF c_check_valid_child%ISOPEN THEN
13429       CLOSE c_check_valid_child;
13430     END IF;
13431    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_TRIP');
13432    WSH_UTIL_CORE.Add_Message(x_return_status);
13433    --
13434    -- Debug Statements
13435    --
13436    IF l_debug_on THEN
13437    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_TRIP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13438 
13439    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_TRIP');
13440    END IF;
13441 
13442  WHEN WSH_INVALID_DECONSOL_POINT THEN
13443    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13444     IF c_check_trips%ISOPEN THEN
13445       CLOSE c_check_trips;
13446     END IF;
13447     IF c_get_top_child_details%ISOPEN THEN
13448       CLOSE c_get_top_child_details;
13449     END IF;
13450     IF c_get_trip_siblings%ISOPEN THEN
13451       CLOSE c_get_trip_siblings;
13452     END IF;
13453     IF c_check_valid_parent%ISOPEN THEN
13454       CLOSE c_check_valid_parent;
13455     END IF;
13456     IF c_check_valid_child%ISOPEN THEN
13457       CLOSE c_check_valid_child;
13458     END IF;
13459    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_DECONSOL_POINT');
13460    WSH_UTIL_CORE.Add_Message(x_return_status);
13461    --
13462    -- Debug Statements
13463    --
13464    IF l_debug_on THEN
13465    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_DECONSOL_POINT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13466 
13467    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_DECONSOL_POINT');
13468    END IF;
13469 
13470  WHEN WSH_INVALID_CHILDREN THEN
13471    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13472     IF c_check_trips%ISOPEN THEN
13473       CLOSE c_check_trips;
13474     END IF;
13475     IF c_get_top_child_details%ISOPEN THEN
13476       CLOSE c_get_top_child_details;
13477     END IF;
13478     IF c_get_trip_siblings%ISOPEN THEN
13479       CLOSE c_get_trip_siblings;
13480     END IF;
13481     IF c_check_valid_parent%ISOPEN THEN
13482       CLOSE c_check_valid_parent;
13483     END IF;
13484     IF c_check_valid_child%ISOPEN THEN
13485       CLOSE c_check_valid_child;
13486     END IF;
13487    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILDREN');
13488    WSH_UTIL_CORE.Add_Message(x_return_status);
13489    --
13490    -- Debug Statements
13491    --
13492    IF l_debug_on THEN
13493    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILDREN exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13494 
13495    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILDREN');
13496    END IF;
13497 
13498  WHEN WSH_INVALID_PARENT THEN
13499     IF c_check_trips%ISOPEN THEN
13500       CLOSE c_check_trips;
13501     END IF;
13502     IF c_get_top_child_details%ISOPEN THEN
13503       CLOSE c_get_top_child_details;
13504     END IF;
13505     IF c_get_trip_siblings%ISOPEN THEN
13506       CLOSE c_get_trip_siblings;
13507     END IF;
13508     IF c_check_valid_parent%ISOPEN THEN
13509       CLOSE c_check_valid_parent;
13510     END IF;
13511     IF c_check_valid_child%ISOPEN THEN
13512       CLOSE c_check_valid_child;
13513     END IF;
13514    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13515    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_PARENT');
13516    WSH_UTIL_CORE.Add_Message(x_return_status);
13517    --
13518    -- Debug Statements
13519    --
13520    IF l_debug_on THEN
13521    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_PARENT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13522 
13523    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_PARENT');
13524    END IF;
13525    --
13526 
13527  WHEN WSH_FAIL_ASSIGN_DEL_TO_CONSOL THEN
13528     IF c_check_trips%ISOPEN THEN
13529       CLOSE c_check_trips;
13530     END IF;
13531     IF c_get_top_child_details%ISOPEN THEN
13532       CLOSE c_get_top_child_details;
13533     END IF;
13534     IF c_get_trip_siblings%ISOPEN THEN
13535       CLOSE c_get_trip_siblings;
13536     END IF;
13537     IF c_check_valid_parent%ISOPEN THEN
13538       CLOSE c_check_valid_parent;
13539     END IF;
13540     IF c_check_valid_child%ISOPEN THEN
13541       CLOSE c_check_valid_child;
13542     END IF;
13543    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13544    FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13545    WSH_UTIL_CORE.Add_Message(x_return_status);
13546    --
13547    -- Debug Statements
13548    --
13549    IF l_debug_on THEN
13550    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FAIL_ASSIGN_DEL_TO_CONSOL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13551 
13552    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13553    END IF;
13554    --
13555 
13556 
13557   WHEN OTHERS THEN
13558     IF c_check_trips%ISOPEN THEN
13559       CLOSE c_check_trips;
13560     END IF;
13561     IF c_get_top_child_details%ISOPEN THEN
13562       CLOSE c_get_top_child_details;
13563     END IF;
13564     IF c_get_trip_siblings%ISOPEN THEN
13565       CLOSE c_get_trip_siblings;
13566     END IF;
13567     IF c_check_valid_parent%ISOPEN THEN
13568       CLOSE c_check_valid_parent;
13569     END IF;
13570     IF c_check_valid_child%ISOPEN THEN
13571       CLOSE c_check_valid_child;
13572     END IF;
13573     wsh_util_core.default_handler('wsh_new_delivery_actions.Assign_Del_to_Consol_Del',l_module_name);
13574       --
13575     IF l_debug_on THEN
13576       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
13577     END IF;
13578 
13579 END Assign_Del_to_Consol_Del;
13580 
13581 --
13582 -- Name:
13583 -- Unassign_Dels_from_Consol_Del
13584 --
13585 -- Purpose:
13586 -- This API unassigns deliveries from a parent (consolidation)
13587 -- delivery. If the parent delivery becomes empty we delete the
13588 -- parent delivery. Currently this will be called with
13589 -- assumption that all and only all deliveries in the parent
13590 -- delivery will be unassigned all at the same time.
13591 --
13592 -- Parameters:
13593 -- p_del_tab: Table of deliveries that need to be unassigned
13594 -- p_parent_del_ids: Parent deliveries that will be unassigned from
13595 -- and eventually deleted.
13596 -- p_caller: Calling entity/action
13597 -- x_return_status: status
13598 
13599 
13600 Procedure Unassign_Dels_from_Consol_Del(
13601           p_parent_del     IN NUMBER,
13602           p_caller         IN VARCHAR2,
13603           p_del_tab        IN OUT NOCOPY wsh_util_core.id_tab_type,
13604           x_return_status  OUT NOCOPY VARCHAR2) IS
13605 
13606 CURSOR c_check_parent_exists(p_child_delivery_id in number, p_parent_delivery_id in number) IS
13607 select l1.delivery_id, l2.delivery_id, l1.delivery_leg_id, s.trip_id
13608 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13609 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13610 and   l1.delivery_id = p_child_delivery_id
13611 and   l2.delivery_id = NVL(p_parent_delivery_id, l2.delivery_id)
13612 and   d.delivery_id = l1.delivery_id
13613 and   d.status_code = 'OP'
13614 and   s.stop_id = l1.pick_up_stop_id
13615 order by s.trip_id, l2.delivery_id;
13616 
13617 cursor c_check_children_exists(p_parent_delivery_id in number) is
13618 select l1.delivery_id
13619 from wsh_delivery_legs l1, wsh_delivery_legs l2
13620 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13621 and   l2.delivery_id = p_parent_delivery_id
13622 and rownum = 1;
13623 
13624 CURSOR c_get_children(p_parent_delivery_id IN NUMBER) is
13625 select l1.delivery_id, l1.delivery_leg_id, s.trip_id
13626 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13627 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13628 and   l2.delivery_id = p_parent_delivery_id
13629 and   d.delivery_id = l1.delivery_id
13630 and   d.status_code = 'OP'
13631 and   l1.pick_up_stop_id = s.stop_id;
13632 
13633 CURSOR check_consol_lpns(p_delivery_id in number) is
13634 select parent_delivery_detail_id
13635 from wsh_delivery_assignments
13636 where delivery_id = p_delivery_id
13637 and delivery_id is not null
13638 and parent_delivery_detail_id IS NOT NULL
13639 and type = 'C'
13640 and rownum = 1;
13641 
13642 l_parent_dels_tab wsh_util_core.id_tab_type;
13643 l_assigned_dels_tab wsh_util_core.id_tab_type;
13644 l_trip_tab wsh_util_core.id_tab_type;
13645 l_delete_parent_dels wsh_util_core.id_tab_type;
13646 l_remaining_parent_dels wsh_util_core.id_tab_type;
13647 l_child_legs_tab wsh_util_core.id_tab_type;
13648 l_trip_tab_dummy wsh_util_core.id_tab_type;
13649 l_distinct_parent_dels_tab wsh_util_core.id_tab_type;
13650 
13651 l_parent_del_id_dummy NUMBER;
13652 l_parent_lpn_id_dummy NUMBER;
13653 l_child_leg_id_dummy NUMBER;
13654 l_consol_lpn_dummy   NUMBER;
13655 l_child_del_dummy     NUMBER;
13656 l_trip_dummy     NUMBER;
13657 l_detail_id           NUMBER;
13658 l_parent_included     VARCHAR2(1);
13659 l_dummy_id    NUMBER;
13660 l_assigned_dels_dummy NUMBER;
13661 l_parent_dels_dummy   NUMBER;
13662 l_child_legs_dummy    NUMBER;
13663 l_gross_weight        NUMBER;
13664 l_net_weight          NUMBER;
13665 l_volume             NUMBER;
13666 
13667 i NUMBER := 0;
13668 j NUMBER := 0;
13669 k NUMBER := 0;
13670 l NUMBER := 0;
13671 m NUMBER := 0;
13672 
13673 l_num_warnings              NUMBER  := 0;
13674 l_num_errors                NUMBER  := 0;
13675 l_return_status             VARCHAR2(30);
13676 
13677 WSH_INVALID_CHILD_DELIVERIES EXCEPTION;
13678 WSH_NO_OPEN_CHILD_DELIVERIES EXCEPTION;
13679 
13680 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Unassign_Dels_from_Consol_Del';
13681 l_debug_on BOOLEAN;
13682 
13683 BEGIN
13684 
13685       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13686       --
13687       IF l_debug_on IS NULL
13688       THEN
13689         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13690       END IF;
13691       --
13692       IF l_debug_on THEN
13693         wsh_debug_sv.push (l_module_name);
13694         WSH_DEBUG_SV.log(l_module_name,'p_parent_del', p_parent_del);
13695         WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13696         WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13697       END IF;
13698 
13699       IF p_del_tab.count = 0 and p_parent_del IS NULL THEN
13700 
13701          -- raise exception
13702          RAISE WSH_INVALID_CHILD_DELIVERIES;
13703 
13704       ELSIF p_del_tab.count = 0 THEN
13705 
13706          -- unassign all children from the parent
13707 
13708          OPEN c_get_children(p_parent_del);
13709          FETCH c_get_children BULK COLLECT
13710          INTO l_assigned_dels_tab, l_child_legs_tab, l_trip_tab_dummy;
13711          CLOSE c_get_children;
13712 
13713 	 IF (l_assigned_dels_tab.COUNT = 0) THEN
13714 	   RAISE WSH_NO_OPEN_CHILD_DELIVERIES;
13715 	 END IF;
13716 
13717          l_parent_dels_tab(1) := p_parent_del;
13718          l_trip_tab(1) := l_trip_tab_dummy(1);
13719          IF l_debug_on THEN
13720            WSH_DEBUG_SV.log(l_module_name,'l_assigned_dels_tab(1)', l_assigned_dels_tab(1));
13721            WSH_DEBUG_SV.log(l_module_name,'l_child_legs_tab(1)', l_child_legs_tab(1));
13722            WSH_DEBUG_SV.log(l_module_name,'l_parent_dels_tab(1)', l_parent_dels_tab(1));
13723            WSH_DEBUG_SV.log(l_module_name,'l_trip_tab(1)', l_trip_tab(1));
13724          END IF;
13725       ELSE
13726 
13727       -- Check if the deliveries are assigned to parent dels.
13728         FOR del in 1..p_del_tab.count LOOP
13729           OPEN c_check_parent_exists(p_del_tab(del), p_parent_del);
13730           FETCH c_check_parent_exists
13731           INTO l_assigned_dels_dummy, l_parent_dels_dummy, l_child_legs_dummy, l_trip_dummy;
13732           IF c_check_parent_exists%FOUND THEN
13733              i := i + 1;
13734              l_assigned_dels_tab(i) := l_assigned_dels_dummy;
13735              l_parent_dels_tab(i) := l_parent_dels_dummy;
13736              l_child_legs_tab(i) := l_child_legs_dummy;
13737              l_trip_tab(i) := l_trip_dummy;
13738           END IF;
13739           CLOSE c_check_parent_exists;
13740         END LOOP;
13741 
13742       END IF;
13743 
13744       -- Check if the child deliveries have consol LPN's.
13745       -- If yes, do not unassign this delivery.
13746       -- and WSH cannot unpack from WMS orgs.
13747 
13748       FOR i in 1..l_assigned_dels_tab.count LOOP
13749           IF l_debug_on THEN
13750             WSH_DEBUG_SV.log(l_module_name,'looping thru del: ', l_assigned_dels_tab(i));
13751           END IF;
13752 
13753           OPEN check_consol_lpns(l_assigned_dels_tab(i));
13754           FETCH check_consol_lpns INTO l_consol_lpn_dummy;
13755             IF check_consol_lpns%FOUND THEN
13756                CLOSE check_consol_lpns;
13757                FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_UNASSIGN_DEL_LPN');
13758                FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13759                l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13760                wsh_util_core.add_message(l_return_status, l_module_name);
13761                wsh_util_core.api_post_call
13762                       (
13763                         p_return_status => l_return_status,
13764                         x_num_warnings  => l_num_warnings,
13765                         x_num_errors    => l_num_errors
13766                       );
13767             END IF;
13768           CLOSE check_consol_lpns;
13769 
13770           IF l_debug_on THEN
13771             WSH_DEBUG_SV.log(l_module_name,'after looping thru del: ', l_assigned_dels_tab(i));
13772           END IF;
13773 
13774       END LOOP;
13775 
13776       IF l_assigned_dels_tab.count = 0 THEN
13777 
13778          -- None of the deliveries were assigned to parents
13779 
13780          RAISE WSH_INVALID_CHILD_DELIVERIES;
13781 
13782 
13783       END IF;
13784 
13785       BEGIN
13786 
13787         FOR i in 1..l_assigned_dels_tab.count LOOP
13788           WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_assigned_dels_tab(i));
13789         END LOOP;
13790 
13791       EXCEPTION
13792         WHEN OTHERS THEN
13793            x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13794            FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13795            FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13796            WSH_UTIL_CORE.Add_Message(x_return_status);
13797            --
13798            -- Debug Statements
13799            --
13800            IF l_debug_on THEN
13801               WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13802               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13803            END IF;
13804            RETURN;
13805            --
13806       END;
13807       -- Delete the consolidation record for the child
13808 
13809       FORALL i in 1..l_assigned_dels_tab.count
13810          delete wsh_delivery_assignments
13811          where type = 'C'
13812          and delivery_id in l_assigned_dels_tab(i);
13813 
13814       -- Update the child deliveries record to indicate no consolidation.
13815 
13816       FORALL i in 1..l_assigned_dels_tab.count
13817          update wsh_delivery_assignments
13818          set type  = 'S'
13819          where delivery_id in l_assigned_dels_tab(i)
13820          and type = 'O';
13821 
13822 
13823       -- Unassign child delivery legs from the parents' trip/leg
13824 
13825 
13826       IF p_parent_del IS NOT NULL THEN
13827 
13828          l_distinct_parent_dels_tab(1) := p_parent_del;
13829          IF l_debug_on THEN
13830             WSH_DEBUG_SV.log(l_module_name,'only parent ', l_distinct_parent_dels_tab(1));
13831          END IF;
13832 
13833       ELSE
13834 
13835          FOR i in 1..l_assigned_dels_tab.count LOOP
13836 
13837             IF i = l_assigned_dels_tab.count OR l_parent_dels_tab(i) <> l_parent_dels_tab(i + 1) THEN
13838 
13839                k := k + 1;
13840                l_distinct_parent_dels_tab(k) := l_parent_dels_tab(i);
13841                IF l_debug_on THEN
13842                   WSH_DEBUG_SV.log(l_module_name,'distinct parents ', l_distinct_parent_dels_tab(k));
13843                END IF;
13844 
13845             END IF;
13846 
13847 
13848          END LOOP;
13849 
13850 
13851       END IF;
13852 
13853       BEGIN
13854 
13855         FOR i in 1..l_child_legs_tab.count LOOP
13856 
13857           WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_dlvy_leg_id => l_child_legs_tab(i));
13858 
13859         END LOOP;
13860 
13861       EXCEPTION
13862         WHEN OTHERS THEN
13863            x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13864            FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_DEL_LEG_LOCK');
13865            FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13866            WSH_UTIL_CORE.Add_Message(x_return_status);
13867            --
13868            -- Debug Statements
13869            --
13870            IF l_debug_on THEN
13871               WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13872               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13873            END IF;
13874            RETURN;
13875            --
13876       END;
13877 
13878       FORALL i in 1..l_child_legs_tab.count
13879       update wsh_delivery_legs
13880       set parent_delivery_leg_id = NULL
13881       where delivery_leg_id = l_child_legs_tab(i);
13882 
13883 
13884       -- Separate the empty parent deliveries.
13885       IF l_debug_on THEN
13886          WSH_DEBUG_SV.log(l_module_name,'l_distinct_parent_dels_tab.count ', l_distinct_parent_dels_tab.count);
13887       END IF;
13888 
13889       FOR i in 1..l_distinct_parent_dels_tab.count LOOP
13890       IF l_debug_on THEN
13891          WSH_DEBUG_SV.log(l_module_name,'loop thru del: ', l_distinct_parent_dels_tab(i));
13892       END IF;
13893 
13894           OPEN c_check_children_exists(l_distinct_parent_dels_tab(i));
13895           FETCH c_check_children_exists INTO l_dummy_id;
13896           IF c_check_children_exists%FOUND THEN
13897              l := l + 1;
13898              l_remaining_parent_dels(l) := l_distinct_parent_dels_tab(i);
13899              IF l_debug_on THEN
13900                 WSH_DEBUG_SV.log(l_module_name,'l_remaining_parent_dels ', l_remaining_parent_dels(l));
13901              END IF;
13902            ELSE
13903              m := m + 1;
13904              l_delete_parent_dels(m) := l_distinct_parent_dels_tab(i);
13905              IF l_debug_on THEN
13906                 WSH_DEBUG_SV.log(l_module_name,'l_delete_parent_dels ', l_delete_parent_dels(m));
13907              END IF;
13908            END IF;
13909            CLOSE c_check_children_exists;
13910 
13911       END LOOP;
13912 
13913       -- Delete the parent deliveries if empty. This will
13914       -- also take care of deleting the parents' legs as well
13915 
13916      IF l_delete_parent_dels.count > 0 THEN
13917 
13918        IF l_debug_on THEN
13919         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.Delete',WSH_DEBUG_SV.C_PROC_LEVEL);
13920        END IF;
13921 
13922 
13923        WSH_UTIL_CORE.Delete(
13924         p_type            => 'DLVY',
13925         p_rows            => l_delete_parent_dels,
13926         p_caller          => p_caller,
13927         x_return_status   => l_return_status);
13928 
13929         -- Handle return status.
13930        wsh_util_core.api_post_call
13931                       (
13932                         p_return_status => l_return_status,
13933                         x_num_warnings  => l_num_warnings,
13934                         x_num_errors    => l_num_errors
13935                       );
13936 
13937      END IF;
13938      IF l_remaining_parent_dels.count > 0 THEN
13939       -- Update the wt/vol on the remaining parents.
13940 
13941        IF l_debug_on THEN
13942         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13943        END IF;
13944 
13945        FOR i in 1..l_remaining_parent_dels.count LOOP
13946 
13947           WSH_WV_UTILS.Delivery_Weight_Volume (
13948                   p_delivery_id       => l_remaining_parent_dels(i),
13949                   p_update_flag       => 'Y',
13950                   p_calc_wv_if_frozen => 'N',
13951                   x_gross_weight      => l_gross_weight,
13952                   x_net_weight        => l_net_weight,
13953                   x_volume            => l_volume,
13954                   x_return_status     => l_return_status);
13955 
13956           wsh_util_core.api_post_call
13957                       (
13958                         p_return_status => l_return_status,
13959                         x_num_warnings  => l_num_warnings,
13960                         x_num_errors    => l_num_errors
13961                       );
13962 
13963        END LOOP;
13964 
13965        WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13966                  p_entity_type => 'DELIVERY',
13967                  p_entity_ids   => l_remaining_parent_dels,
13968                  x_return_status => l_return_status);
13969 
13970        wsh_util_core.api_post_call
13971                       (
13972                         p_return_status => l_return_status,
13973                         x_num_warnings  => l_num_warnings,
13974                         x_num_errors    => l_num_errors
13975                       );
13976 
13977        Confirm_Consolidation_Delivery(
13978              p_consol_del_tab   => l_remaining_parent_dels,
13979              x_return_status    => l_return_status);
13980 
13981        wsh_util_core.api_post_call
13982                       (
13983                         p_return_status => l_return_status,
13984                         x_num_warnings  => l_num_warnings,
13985                         x_num_errors    => l_num_errors
13986                       );
13987 
13988     END IF;
13989 
13990     IF l_num_errors > 0
13991     THEN
13992         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13993     ELSIF l_num_warnings > 0
13994     THEN
13995         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13996     ELSE
13997         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13998     END IF;
13999 
14000 IF l_debug_on THEN
14001     WSH_DEBUG_SV.pop(l_module_name);
14002 END IF;
14003 
14004 EXCEPTION
14005  WHEN FND_API.G_EXC_ERROR THEN
14006     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14007     --
14008     -- Debug Statements
14009     --
14010     IF l_debug_on THEN
14011         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14012         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14013     END IF;
14014       --
14015 
14016  WHEN WSH_NO_OPEN_CHILD_DELIVERIES THEN
14017        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14018        FND_MESSAGE.SET_NAME('WSH','WSH_NO_OPEN_DELIVERIES');
14019        WSH_UTIL_CORE.Add_Message(x_return_status);
14020        --
14021        -- Debug Statements
14022        --
14023        IF l_debug_on THEN
14024        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_OPEN_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14025 
14026        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_OPEN_CHILD_DELIVERIES');
14027        END IF;
14028         --
14029 
14030  WHEN WSH_INVALID_CHILD_DELIVERIES THEN
14031        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14032        FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILD_DELIVERIES');
14033        WSH_UTIL_CORE.Add_Message(x_return_status);
14034        --
14035        -- Debug Statements
14036        --
14037        IF l_debug_on THEN
14038        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14039 
14040        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILD_DELIVERIES');
14041        END IF;
14042         --
14043  WHEN OTHERS THEN
14044     wsh_util_core.default_handler('wsh_new_delivery_actions.Unassign_Dels_from_Consol_Del',l_module_name);
14045     --
14046     IF c_check_parent_exists%ISOPEN THEN
14047       CLOSE c_check_parent_exists;
14048     END IF;
14049     --
14050     IF c_check_children_exists%ISOPEN THEN
14051       CLOSE c_check_children_exists;
14052     END IF;
14053     --
14054     IF c_get_children%ISOPEN THEN
14055       CLOSE c_get_children;
14056     END IF;
14057     --
14058     IF check_consol_lpns%ISOPEN THEN
14059       CLOSE check_consol_lpns;
14060     END IF;
14061     --
14062     IF l_debug_on THEN
14063       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14064     END IF;
14065 
14066 END Unassign_Dels_from_Consol_Del;
14067 
14068 
14069 PROCEDURE Confirm_Consolidation_Delivery(
14070            p_consol_del_tab IN wsh_util_core.id_tab_type,
14071            x_return_status OUT NOCOPY VARCHAR2) IS
14072 
14073 cursor c_check_close_consol(p_del_id IN NUMBER) IS
14074 select d.delivery_id
14075 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d
14076 where l1.parent_delivery_leg_id = l2.delivery_leg_id
14077 and   l2.delivery_id = p_del_id
14078 and   l1.delivery_id = d.delivery_id
14079 and   d.status_code = 'OP'
14080 and   rownum = 1;
14081 
14082 l_u_consol_del_tab wsh_util_core.id_tab_type;
14083 l_co_consol_del_tab wsh_util_core.id_tab_type;
14084 l_number_of_lpn_tab wsh_util_core.id_tab_type;
14085 l_delivery_id NUMBER;
14086 l_lpn_number  NUMBER;
14087 i NUMBER;
14088 j NUMBER := 0;
14089 l_exists_flag VARCHAR2(1);
14090 l_lock_index NUMBER;
14091 
14092 
14093 CURSOR c_get_child_lpn_number(p_delivery_id IN NUMBER) IS
14094 select count(*)
14095 from wsh_delivery_assignments da,
14096      wsh_delivery_details dd
14097 where da.type = 'C'
14098 and   da.parent_delivery_detail_id IS NULL
14099 and   da.delivery_detail_id = dd.delivery_detail_id
14100 and   dd.container_flag = 'Y'
14101 and   da.parent_delivery_id = p_delivery_id
14102 and   da.parent_delivery_id IS NOT NULL;
14103 
14104 CURSOR c_get_consol_lpn_number(p_delivery_id in NUMBER) IS
14105 select count(*)
14106 from wsh_delivery_assignments
14107 where type = 'S'
14108 and delivery_id = p_delivery_id;
14109 
14110 -- bug 4505105
14111 cursor l_get_consol_del_org_csr (p_del_id IN NUMBER) is
14112 select organization_id
14113 from   wsh_new_deliveries
14114 where  delivery_id = p_del_id;
14115 
14116 l_return_status VARCHAR2(1);
14117 l_del_valid_flag VARCHAR2(1);
14118 l_org_id  NUMBER := 0;
14119 l_num_warnings  NUMBER := 0;
14120 l_num_err  NUMBER := 0;
14121 
14122 -- bug 4505105
14123 
14124 
14125 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Confirm_Consolidation_Delivery';
14126 l_debug_on BOOLEAN;
14127 
14128 BEGIN
14129      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14130      --
14131      IF l_debug_on IS NULL
14132      THEN
14133        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14134      END IF;
14135      --
14136      IF l_debug_on THEN
14137        wsh_debug_sv.push (l_module_name);
14138      END IF;
14139 
14140      -- bug 4505105
14141      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14142      -- bug 4505105
14143 
14144   -- collect the unique parent deliveries.
14145   -- p_consol_del_tab may not be gapless and
14146   -- may contain duplicates.
14147   i := p_consol_del_tab.FIRST;
14148   WHILE i IS NOT NULL LOOP
14149     IF l_debug_on THEN
14150        WSH_DEBUG_SV.logmsg(l_module_name,'Inside  WHILE i IS NOT NULL LOOP');
14151     END IF;
14152     l_exists_flag := 'N';
14153     FOR k in 1..l_u_consol_del_tab.count LOOP
14154         IF l_debug_on THEN
14155            WSH_DEBUG_SV.logmsg(l_module_name,'Inside FOR k in 1..l_u_consol_del_tab.count LOOP');
14156         END IF;
14157         IF l_u_consol_del_tab(k) = p_consol_del_tab(i) THEN
14158            l_exists_flag := 'Y';
14159            EXIT;
14160         END IF;
14161     END LOOP;
14162     IF l_debug_on THEN
14163        WSH_DEBUG_SV.logmsg(l_module_name,'after FOR k in 1..l_u_consol_del_tab.count LOOP');
14164     END IF;
14165     IF l_exists_flag = 'N' THEN
14166         IF l_debug_on THEN
14167            WSH_DEBUG_SV.log(l_module_name,'i is', i);
14168            WSH_DEBUG_SV.log(l_module_name,'p_consol_del_tab(i)', p_consol_del_tab(i));
14169            WSH_DEBUG_SV.log(l_module_name,'l_u_consol_del_tab.count', l_u_consol_del_tab.count);
14170         END IF;
14171        l_u_consol_del_tab(l_u_consol_del_tab.count + 1) := p_consol_del_tab(i);
14172        OPEN c_check_close_consol(p_consol_del_tab(i));
14173        FETCH c_check_close_consol INTO l_delivery_id;
14174        IF c_check_close_consol%NOTFOUND THEN
14175           -- bug 4505105
14176           l_del_valid_flag := 'Y';
14177           l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14178           -- Keeping it commented because as of today
14179           -- this procedure will be called only for WMS org.
14180           --l_org_id := NULL;
14181           --open l_get_consol_del_org_csr(p_consol_del_tab(i));
14182           --fetch l_get_consol_del_org_csr into l_org_id;
14183           --close l_get_consol_del_org_csr;
14184           --IF (l_org_id is not null
14185           --    and wsh_util_validate.Check_Wms_Org(l_org_id)='Y'
14186           --   )
14187           --THEN
14188           --{
14189               validate_del_containers(p_consol_del_tab(i),
14190                                       'CONSOL',
14191                                       l_del_valid_flag,
14192                                       l_return_status);
14193 
14194               IF l_debug_on THEN
14195                 WSH_DEBUG_SV.log(l_module_name,'l_return_status after calling validate_del_containers', l_return_status);
14196               END IF;
14197 
14198               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
14199                   RAISE FND_API.G_EXC_ERROR;
14200               ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
14201                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14202               ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
14203                 l_num_warnings := l_num_warnings + 1;
14204               END IF;
14205           --}
14206           --END IF;
14207 
14208           IF (nvl(l_del_valid_flag,'Y') = 'Y') THEN
14209             --
14210             j:= j+1;
14211             l_co_consol_del_tab(j) := p_consol_del_tab(i);
14212             IF l_debug_on THEN
14213                WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(j)', l_co_consol_del_tab(j));
14214             END IF;
14215             --
14216           ELSE
14217             --
14218             l_num_warnings := l_num_warnings + 1;
14219             l_num_err := l_num_err + 1;
14220             --
14221           END IF;
14222           -- bug 4505105
14223        END IF;
14224        CLOSE c_check_close_consol;
14225        IF l_debug_on THEN
14226           WSH_DEBUG_SV.logmsg(l_module_name,'after c_check_close_consol');
14227        END IF;
14228     END IF;
14229   IF l_debug_on THEN
14230      WSH_DEBUG_SV.log(l_module_name,'i', i);
14231   END IF;
14232 
14233   i := p_consol_del_tab.next(i);
14234 
14235   IF l_debug_on THEN
14236      WSH_DEBUG_SV.log(l_module_name,'i', i);
14237   END IF;
14238 
14239   END LOOP;
14240   IF l_debug_on THEN
14241      WSH_DEBUG_SV.logmsg(l_module_name,'After WHILE i IS NOT NULL LOOP');
14242   END IF;
14243 
14244   -- bug 4505105
14245   IF l_debug_on THEN
14246     WSH_DEBUG_SV.log(l_module_name,'Count of consol deliveries to be processed is ', l_u_consol_del_tab.count);
14247     WSH_DEBUG_SV.log(l_module_name,'Count of errored deliveries is ', l_num_err);
14248   END IF;
14249 
14250   IF (l_num_err >= l_u_consol_del_tab.count AND l_num_err > 0) THEN
14251     IF l_debug_on THEN
14252       WSH_DEBUG_SV.logmsg(l_module_name,'None of the Deliveries are eligible of Ship Confirm');
14253     END IF;
14254     RAISE FND_API.G_EXC_ERROR;
14255   END IF;
14256   -- bug 4505105
14257 
14258   BEGIN
14259      IF l_debug_on THEN
14260         WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab.count', l_co_consol_del_tab.count);
14261      END IF;
14262 
14263      FOR l in 1..l_co_consol_del_tab.count LOOP
14264         IF l_debug_on THEN
14265            WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(l)', l_co_consol_del_tab(l));
14266         END IF;
14267         l_lock_index := l;
14268         WSH_NEW_DELIVERIES_PVT.Lock_Dlvy_No_Compare(l_co_consol_del_tab(l));
14269 
14270         l_lpn_number := 0;
14271         OPEN c_get_child_lpn_number(l_co_consol_del_tab(l));
14272         FETCH c_get_child_lpn_number
14273         INTO  l_lpn_number;
14274         CLOSE c_get_child_lpn_number;
14275 
14276         l_number_of_lpn_tab(l) := NVL(l_lpn_number, 0);
14277         l_lpn_number := 0;
14278 
14279         OPEN c_get_consol_lpn_number(l_co_consol_del_tab(l));
14280         FETCH c_get_consol_lpn_number
14281         INTO  l_lpn_number;
14282         CLOSE c_get_consol_lpn_number;
14283 
14284         l_number_of_lpn_tab(l) := l_number_of_lpn_tab(l) + NVL(l_lpn_number, 0);
14285 
14286      END LOOP;
14287   EXCEPTION
14288     WHEN OTHERS THEN
14289        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14290        FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
14291        FND_MESSAGE.Set_Token('ENTITY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_co_consol_del_tab(l_lock_index)));
14292        WSH_UTIL_CORE.Add_Message(x_return_status);
14293        --
14294        -- Debug Statements
14295        --
14296        IF l_debug_on THEN
14297           WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14298           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14299        END IF;
14300        RETURN;
14301        --
14302   END;
14303   IF l_debug_on THEN
14304      WSH_DEBUG_SV.logmsg(l_module_name,'after lock');
14305   END IF;
14306   IF l_co_consol_del_tab.count > 0 THEN
14307      FORALL m in 1..l_co_consol_del_tab.count
14308      UPDATE wsh_new_deliveries
14309      SET status_code = 'CO',
14310       number_of_lpn = decode(number_of_lpn, NULL, l_number_of_lpn_tab(m), number_of_lpn)
14311      WHERE delivery_id = l_co_consol_del_tab(m);
14312   END IF;
14313 
14314   -- bug 4505105
14315   IF (l_num_warnings > 0 and x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
14316     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14317   ELSE
14318     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14319   END IF;
14320   -- bug 4505105
14321 
14322 EXCEPTION
14323     -- bug 4505105
14324     WHEN FND_API.G_EXC_ERROR THEN
14325       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14326       --
14327       IF l_debug_on THEN
14328         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14329         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14330       END IF;
14331       --
14332     -- bug 4505105
14333   WHEN OTHERS THEN
14334      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14335     wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14336       --
14337     IF l_debug_on THEN
14338       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14339     END IF;
14340 
14341 END Confirm_Consolidation_Delivery;
14342 
14343 
14344 PROCEDURE Create_Deconsol_Trips(p_deliveries_tab IN wsh_util_core.id_tab_type,
14345                                 x_return_status OUT NOCOPY VARCHAR2) IS
14346 CURSOR c_del_info(p_delivery_id IN NUMBER) IS
14347 SELECT parent.ultimate_dropoff_location_id pu_location,
14348        stop.planned_departure_date pu_date,
14349        child.ultimate_dropoff_location_id do_location,
14350        child.ultimate_dropoff_date do_date,
14351        child.ship_method_code,
14352        child.carrier_id,
14353        child.service_level,
14354        child.mode_of_transport,
14355        child.ignore_for_planning
14356 FROM   wsh_new_deliveries child,
14357        wsh_new_deliveries parent,
14358        wsh_delivery_legs child_leg,
14359        wsh_delivery_legs parent_leg,
14360        wsh_trip_stops stop
14361 WHERE  child_leg.delivery_id = p_delivery_id
14362 AND    child_leg.parent_delivery_leg_id = parent_leg.delivery_leg_id
14363 AND    child_leg.delivery_id = child.delivery_id
14364 AND    parent_leg.delivery_id = parent.delivery_id
14365 AND    child_leg.drop_off_stop_id = stop.stop_id
14366 AND    child.ultimate_dropoff_location_id <> parent.ultimate_dropoff_location_id;
14367 
14368 CURSOR c_second_leg(p_delivery_id IN NUMBER) IS
14369 SELECT stop.trip_id
14370 FROM   wsh_delivery_legs leg,
14371        wsh_trip_stops stop
14372 WHERE  leg.parent_delivery_leg_id IS NULL
14373 AND    leg.delivery_id = p_delivery_id
14374 AND    leg.pick_up_stop_id = stop.stop_id;
14375 
14376 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Deconsol_Trips';
14377 l_debug_on BOOLEAN;
14378 
14379 
14380 l_del_tab wsh_util_core.id_tab_type;
14381 l_trip_tab wsh_util_core.id_tab_type;
14382 
14383 
14384 l_trip_in_rec        WSH_TRIPS_GRP.tripInRecType;
14385 l_init_msg_list        VARCHAR2(100);
14386 l_api_version_number    NUMBER := 1.0;
14387 l_commit        VARCHAR2(10);
14388 l_return_status        VARCHAR2(1);
14389 l_msg_count        NUMBER;
14390 l_msg_data        VARCHAR2(2000);
14391 l_trip_info_tab        WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
14392 l_trip_info_rec        WSH_TRIPS_PVT.trip_rec_type;
14393 l_trip_out_rec_tab    WSH_TRIPS_GRP.Trip_Out_Tab_Type;
14394 l_num_warnings  NUMBER := 0;
14395 l_num_errors  NUMBER := 0;
14396 l_do_date   DATE;
14397 i NUMBER;
14398 
14399 BEGIN
14400 
14401 
14402 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14403 --
14404 IF l_debug_on IS NULL
14405 THEN
14406   l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14407 END IF;
14408 --
14409 IF l_debug_on THEN
14410   wsh_debug_sv.push (l_module_name);
14411 END IF;
14412 
14413 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14414 
14415 i := p_deliveries_tab.FIRST;
14416 
14417 WHILE i is NOT NULL LOOP
14418 
14419 
14420   FOR del in c_del_info(p_deliveries_tab(i)) LOOP
14421 
14422      l_del_tab(1) := p_deliveries_tab(i);
14423 
14424      -- Unassign all non-consol trips attached to
14425      -- delivery.
14426 
14427      FOR trip in c_second_leg(p_deliveries_tab(i)) LOOP
14428 
14429          WSH_TRIPS_ACTIONS.Unassign_Trip(
14430                 p_del_rows           => l_del_tab,
14431                 p_trip_id            => trip.trip_id,
14432                 x_return_status      => l_return_status);
14433 
14434          WSH_UTIL_CORE.Api_Post_Call
14435                       (
14436                         p_return_status => l_return_status,
14437                         x_num_warnings  => l_num_warnings,
14438                         x_num_errors    => l_num_errors
14439                       );
14440      END LOOP;
14441 
14442 
14443      -- Create Trip
14444 
14445      l_trip_in_rec.caller := 'WSH_CONSOL';
14446      l_trip_in_rec.phase := NULL;
14447      l_trip_in_rec.action_code := 'CREATE';
14448 
14449      l_trip_info_tab.DELETE;
14450      l_trip_info_tab(1).ignore_for_planning := del.ignore_for_planning;
14451      l_trip_info_tab(1).ship_method_code := del.ship_method_code;
14452      l_trip_info_tab(1).service_level := del.service_level;
14453      l_trip_info_tab(1).mode_of_transport := del.mode_of_transport;
14454      l_trip_info_tab(1).carrier_id := del.carrier_id;
14455 
14456      l_commit := FND_API.g_false;
14457      IF l_debug_on THEN
14458          WSH_DEBUG_SV.logmsg(l_module_name,'Creating deconsol trip');
14459          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.Create_Update_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14460      END IF;
14461 
14462      WSH_TRIPS_GRP.Create_Update_Trip(
14463          p_api_version_number => l_api_version_number,
14464          p_init_msg_list      => l_init_msg_list,
14465          p_commit         => l_commit,
14466          x_return_status      => l_return_status,
14467          x_msg_count      => l_msg_count,
14468          x_msg_data       => l_msg_data,
14469          p_trip_info_tab      => l_trip_info_tab,
14470          p_in_rec         => l_trip_in_rec,
14471          x_out_tab        => l_trip_out_rec_tab);
14472 
14473     wsh_util_core.api_post_call
14474                       (
14475                         p_return_status => l_return_status,
14476                         x_num_warnings  => l_num_warnings,
14477                         x_num_errors    => l_num_errors
14478                       );
14479 
14480     -- Assign delivery to trip
14481 
14482     IF l_debug_on THEN
14483         WSH_DEBUG_SV.logmsg(l_module_name,'Assigning to deconsol trip');
14484         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.assign_trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14485     END IF;
14486 
14487 
14488     IF del.pu_date < del.do_date THEN
14489        l_do_date := del.do_date;
14490     ELSE
14491        l_do_date := del.pu_date + 1;
14492     END IF;
14493 
14494     WSH_TRIPS_ACTIONS.assign_trip(
14495                 p_del_rows            =>  l_del_tab,
14496                 p_trip_id             =>  l_trip_out_rec_tab(l_trip_out_rec_tab.FIRST).trip_id,
14497                 p_pickup_location_id  =>  del.pu_location,
14498                 p_dropoff_location_id =>  del.do_location,
14499                 p_pickup_arr_date     =>  del.pu_date,
14500                 p_pickup_dep_date     =>  del.pu_date,
14501                 p_dropoff_arr_date    =>  l_do_date,
14502                 p_dropoff_dep_date    =>  l_do_date,
14503                 x_return_status       =>  l_return_status);
14504 
14505     wsh_util_core.api_post_call
14506                       (
14507                         p_return_status => l_return_status,
14508                         x_num_warnings  => l_num_warnings,
14509                         x_num_errors    => l_num_errors
14510                       );
14511   END LOOP;
14512 i := p_deliveries_tab.NEXT(i);
14513 
14514 END LOOP;
14515 
14516 
14517     IF l_num_errors > 0
14518     THEN
14519         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14520     ELSIF l_num_warnings > 0
14521     THEN
14522         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14523     ELSE
14524         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14525     END IF;
14526 
14527 IF l_debug_on THEN
14528     WSH_DEBUG_SV.pop(l_module_name);
14529 END IF;
14530 
14531 EXCEPTION
14532     WHEN FND_API.G_EXC_ERROR THEN
14533       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14534       --
14535       IF l_debug_on THEN
14536         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14537         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14538       END IF;
14539       --
14540   WHEN OTHERS THEN
14541      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14542     wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14543       --
14544     IF l_debug_on THEN
14545       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14546     END IF;
14547 
14548 END Create_Deconsol_Trips;
14549 
14550 
14551   --OTM R12
14552   ----------------------------------------------------------
14553   -- FUNCTION IS_DELIVERY_EMPTY
14554   --
14555   -- parameters:	p_delivery_id	delivery id to check for emptiness
14556   --
14557   -- description:	This procedure checks the delivery to see if there's any detail
14558   -- 			lines on the delivery.  Returns Y if yes, N if no, and E if errors out
14559   ----------------------------------------------------------
14560   FUNCTION IS_DELIVERY_EMPTY (p_delivery_id IN NUMBER) RETURN VARCHAR2 IS
14561 
14562   CURSOR c_delivery_detail_count(p_del_id IN NUMBER) IS
14563     SELECT 1
14564     FROM   wsh_delivery_assignments wda,
14565            wsh_delivery_details wdd
14566     WHERE  wda.delivery_id = p_del_id
14567     AND    wda.delivery_detail_id = wdd.delivery_detail_id
14568     AND    wdd.container_flag = 'N';
14569 
14570   l_count        NUMBER;
14571   l_return_value VARCHAR2(1);
14572 
14573   l_debug_on     BOOLEAN;
14574   --
14575   l_module_name  CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'IS_DELIVERY_EMPTY';
14576   --
14577   BEGIN
14578 
14579     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14580     --
14581     IF l_debug_on IS NULL THEN
14582       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14583     END IF;
14584     --
14585     IF l_debug_on THEN
14586       WSH_DEBUG_SV.push(l_module_name);
14587       WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
14588     END IF;
14589 
14590     l_count := 0;
14591 
14592     l_return_value := 'Y';  --defaulting to empty
14593 
14594     IF (p_delivery_id IS NOT NULL) THEN
14595       OPEN c_delivery_detail_count(p_delivery_id);
14596       FETCH c_delivery_detail_count INTO l_count;
14597 
14598       IF (c_delivery_detail_count%FOUND) THEN -- not empty
14599 
14600         IF l_debug_on THEN
14601           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not empty');
14602         END IF;
14603         l_return_value := 'N';
14604       ELSE  -- empty
14605         IF l_debug_on THEN
14606           wsh_debug_sv.logmsg(l_module_name, 'Delivery is empty');
14607         END IF;
14608       	l_return_value := 'Y';
14609       END IF;
14610       CLOSE c_delivery_detail_count;
14611     ELSE
14612       l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14613     END IF;
14614 
14615     IF l_debug_on THEN
14616       wsh_debug_sv.log(l_module_name, 'RETURN VALUE', l_return_value);
14617       WSH_DEBUG_SV.pop(l_module_name);
14618     END IF;
14619     --
14620 
14621     RETURN l_return_value;
14622   EXCEPTION
14623 
14624     WHEN OTHERS THEN
14625       wsh_util_core.default_handler('wsh_new_delivery_actions.is_delivery_empty',l_module_name);
14626       --
14627       IF (c_delivery_detail_count%ISOPEN) THEN
14628         CLOSE c_delivery_detail_count;
14629       END IF;
14630       l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14631 
14632       IF l_debug_on THEN
14633         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
14634         wsh_debug_sv.LOG(l_module_name, 'RETURN VALUE', l_return_value);
14635         WSH_DEBUG_SV.pop(l_module_name);
14636       END IF;
14637       --
14638       RETURN l_return_value;
14639   END IS_DELIVERY_EMPTY;
14640   --END OTM R12
14641 
14642 END WSH_NEW_DELIVERY_ACTIONS;