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.57.12020000.6 2013/04/08 10:56:15 suppal 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_client_ids             IN	      wsh_util_core.id_tab_type,	--Modified R12.1.1 LSP PROJECT
2173      p_ship_method_code_vals  IN              ship_method_type,
2174      x_autointransit_flag        OUT NOCOPY   VARCHAR2,
2175      x_autoclose_flag            OUT NOCOPY   VARCHAR2,
2176      x_report_set_id             OUT NOCOPY   NUMBER,   -- always NULL
2177      x_report_set_name           OUT NOCOPY   VARCHAR2, -- always NULL
2178      x_ship_method_name          OUT NOCOPY   VARCHAR2,
2179      x_return_status             OUT NOCOPY   VARCHAR2,
2180      x_sc_rule_id                OUT NOCOPY   NUMBER,
2181      x_ac_bol_flag               OUT NOCOPY   VARCHAR2,
2182      x_defer_interface_flag      OUT NOCOPY   VARCHAR2,
2183      x_sc_rule_name              OUT NOCOPY   VARCHAR2  -- always NULL
2184 
2185      ) IS
2186 
2187   CURSOR Report_Set (p_report_set_id NUMBER) IS
2188   SELECT rs.name,
2189     rs.report_set_id
2190   FROM wsh_report_sets rs
2191   WHERE rs.report_set_id = p_report_set_id;
2192 
2193   CURSOR Check_Trip (l_delivery_id NUMBER) IS
2194   select wts.trip_id
2195   from wsh_delivery_legs wdl, wsh_trip_stops wts
2196   where wdl.pick_up_stop_id=wts.stop_id
2197   and wdl.delivery_id=l_delivery_id
2198   and rownum=1;
2199 
2200   CURSOR sm_name(x_ship_method_code IN VARCHAR2) is
2201    SELECT meaning
2202    FROM   fnd_lookup_values_vl
2203    WHERE  lookup_code = x_ship_method_code
2204    AND  lookup_type = 'SHIP_METHOD'
2205    AND  view_application_id = 3;
2206 
2207 -- Use Ship Confirm Rule for the Organization
2208 -- Also, get the default values for the Rule
2209   CURSOR get_sc_rule (p_ship_confirm_rule_id NUMBER) IS
2210   SELECT wsc.name,
2211          wsc.ship_confirm_rule_id,
2212          wsc.ac_intransit_flag,
2213          wsc.ac_close_trip_flag,
2214          wsc.ac_bol_flag,
2215          wsc.ac_defer_interface_flag,
2216          wsc.report_set_id,
2217          wsc.ship_method_code,
2218          wsc.effective_end_date
2219     FROM wsh_ship_confirm_rules wsc
2220     WHERE wsc.ship_confirm_rule_id = p_ship_confirm_rule_id;
2221 
2222   l_trip_id              NUMBER;
2223   l_prev_organization_id NUMBER; -- to find out the Prev. Org. Id
2224   l_organization_id      NUMBER;
2225   l_all_orgids_match     BOOLEAN := TRUE;
2226   l_param_info           WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2227 
2228   l_num_warn             NUMBER := 0;
2229   l_count                NUMBER := 0;
2230 
2231   temp_ship_method_code VARCHAR2(30);
2232   dist_ship_method_code VARCHAR2(30);
2233 
2234   trip_options          BOOLEAN := FALSE;
2235   ship_method_options   BOOLEAN := FALSE;
2236   first_ship_method     BOOLEAN := TRUE;
2237   l_last_del            BOOLEAN := FALSE;
2238   l_return_status       VARCHAR2(1);
2239 
2240   /*Modified R12.1.1 LSP PROJECT*/
2241   l_Client_id           NUMBER ;
2242   l_client_params       INV_CACHE.ct_rec_type;
2243 
2244   l_sc_rule_id  NUMBER;
2245   l_report_set_id  NUMBER;
2246   l_prev_Client_id NUMBER; -- to find out the Prev. Client Id
2247   /*Modified R12.1.1 LSP PROJECT*/
2248 
2249   others EXCEPTION;
2250 
2251   -- frontport bug 4310141 / Bug 4103142 - to get first trip for delivery
2252   CURSOR c_first_ship_method (p_delivery_id IN number)IS
2253   SELECT  wt.ship_method_code
2254   FROM    wsh_new_deliveries del,
2255           wsh_delivery_legs dlg,
2256           wsh_trip_stops st,
2257           wsh_trips wt
2258   WHERE   del.delivery_id = dlg.delivery_id
2259   AND     dlg.pick_up_stop_id = st.stop_id
2260   AND     del.initial_pickup_location_id = st.stop_location_id
2261   AND     st.trip_id = wt.trip_id
2262   AND     del.delivery_id = p_delivery_id
2263   AND     rownum < 3;
2264 
2265 
2266 
2267   --
2268   l_debug_on BOOLEAN;
2269   --
2270   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_DEFAULTS';
2271   --
2272   BEGIN
2273 
2274     --
2275     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2276     --
2277     IF l_debug_on IS NULL
2278     THEN
2279       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2280     END IF;
2281     --
2282     IF l_debug_on THEN
2283       WSH_DEBUG_SV.push(l_module_name);
2284       WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Count'||p_del_rows.count);
2285       WSH_DEBUG_SV.logmsg(l_module_name,'Org id Count'||p_org_ids.count);
2286       WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Count'||p_ship_method_code_vals.count);
2287     END IF;
2288     --
2289     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2290 
2291     l_all_orgids_match := TRUE;
2292 
2293     IF (p_del_rows.count = 0) THEN
2294       RAISE others;
2295     END IF;
2296 
2297     l_count := p_org_ids.count;
2298 
2299     IF (p_org_ids.count = 1) THEN
2300       l_all_orgids_match := TRUE;
2301       l_organization_id  := p_org_ids(1);
2302       l_client_id        := p_client_ids(1); --Modified R12.1.1 LSP PROJECT
2303     END IF;
2304 
2305     IF (p_org_ids.count > 1) THEN
2306      begin
2307       FOR i IN 1..p_org_ids.count LOOP
2308 
2309        l_organization_id := p_org_ids(i);
2310        l_client_id       := p_client_ids(i); --Modified R12.1.1 LSP PROJECT
2311        IF ( i = 1 ) THEN
2312         l_prev_organization_id := l_organization_id;
2313         l_prev_client_id := l_client_id;      --Modified R12.1.1 LSP PROJECT
2314        END IF;
2315 
2316        IF  (l_prev_organization_id <> l_organization_id) OR (NVL(l_prev_client_id,-1) <> NVL(l_client_id,-1)) THEN
2317         l_all_orgids_match := FALSE;
2318         EXIT;  -- Exit from loop as soon as Orgs. differ
2319        END IF;
2320        l_prev_organization_id := l_organization_id;
2321       END LOOP;
2322      end;
2323     END IF;
2324 
2325     x_autointransit_flag := 'N';
2326     x_autoclose_flag     := 'N';
2327 
2328 
2329     IF (l_all_orgids_match = TRUE) THEN --{
2330      /*Modified R12.1.1 LSP PROJECT (rminocha)*/
2331       IF ( l_client_id IS NOT NULL ) THEN
2332       --{
2333            IF l_debug_on THEN
2334               WSH_DEBUG_SV.logmsg(l_module_name, 'Calling INV_CACHE.GET_CLIENT_DEFAULT_PARAMETERS', WSH_DEBUG_SV.C_PROC_LEVEL);
2335            END IF;
2336            INV_CACHE.GET_CLIENT_DEFAULT_PARAMETERS(
2337                p_client_id             => l_client_id,
2338                x_client_parameters_rec => l_client_params,
2339                x_return_status         => l_return_status);
2340 
2341           l_param_info.delivery_report_set_id := l_client_params.client_rec.delivery_report_set_id;
2342           l_param_info.ship_confirm_rule_id :=l_client_params.client_rec.ship_confirm_rule_id;
2343 
2344       ELSE
2345 /*Modified R12.1.1 LSP PROJECT*/
2346 
2347       WSH_SHIPPING_PARAMS_PVT.Get(
2348                        p_organization_id => l_organization_id,
2349                        x_param_info      => l_param_info,
2350                        x_return_status   => l_return_status);
2351 
2352       END IF;								--Modified R12.1.1 LSP PROJECT
2353 
2354       OPEN report_set(l_param_info.delivery_report_set_id);
2355       FETCH report_set INTO x_report_set_name, x_report_set_id;
2356       CLOSE report_set;
2357 
2358       -- Assign Ship Confirm Rule back to OUT parameter
2359       x_sc_rule_id := l_param_info.ship_confirm_rule_id;
2360     END IF; --}
2361 
2362 
2363     dist_ship_method_code  := '';
2364 
2365     -- Bug 2213342 : Ship Confirm Defaulting behavior
2366     FOR i IN 1..p_del_rows.count LOOP
2367       -- Find trip for the delivery
2368       l_trip_id := NULL;
2369       OPEN Check_Trip( p_del_rows (i));
2370       FETCH Check_Trip INTO l_trip_id;
2371       IF Check_Trip%NOTFOUND THEN
2372        l_trip_id := NULL;
2373       END IF;
2374       CLOSE Check_Trip;
2375 
2376       IF (l_trip_id IS NULL) THEN
2377         IF l_debug_on THEN
2378           WSH_DEBUG_SV.logmsg(l_module_name,'Trip id is null for delivery-'||p_del_rows(i))
2379 ;
2380         END IF;
2381 
2382         -- Check to see if Trip Options are already set
2383         IF NOT trip_options THEN
2384           trip_options := TRUE;
2385           IF l_debug_on THEN
2386             WSH_DEBUG_SV.logmsg(l_module_name,'Set Trip Options');
2387           END IF;
2388 
2389           x_autointransit_flag := 'Y';
2390           x_autoclose_flag     := 'Y';
2391         END IF;
2392 
2393         -- Check to see if Ship Method has to be set
2394         -- for Deliveries with Autocreate Trip
2395         IF NOT ship_method_options THEN
2396           IF l_debug_on THEN
2397             WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Options');
2398           END IF;
2399 
2400           IF first_ship_method THEN
2401             -- Initialize First Applicable Ship Method
2402             dist_ship_method_code := p_ship_method_code_vals(i);
2403             first_ship_method     := FALSE;
2404           END IF;
2405           temp_ship_method_code := p_ship_method_code_vals(i);
2406           IF NVL(temp_ship_method_code,' ') = NVL(dist_ship_method_code,' ') THEN
2407             IF l_debug_on THEN
2408               WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are same null');
2409             END IF;
2410 
2411             NULL;
2412           ELSE
2413             -- Ship Methods are different for Deliveries, so Null Ship Method is returned
2414             IF l_debug_on THEN
2415               WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are different');
2416             END IF;
2417 
2418             dist_ship_method_code := NULL;
2419             ship_method_options    := TRUE;
2420           END IF;
2421         END IF;
2422       ELSE  -- trip_id is not null, trip exists
2423 
2424         -- Find if this is the last delivery on the trip,
2425         -- then enable close options
2426         l_last_del := check_last_del_trip(p_del_rows(i));
2427 
2428         IF l_last_del THEN
2429           IF l_debug_on THEN
2430             WSH_DEBUG_SV.logmsg(l_module_name,'Last Delivery in Trip-'||p_del_rows(i));
2431           END IF;
2432           trip_options := TRUE; -- trip options should be allowed
2433           x_autointransit_flag := 'Y';
2434           x_autoclose_flag     := 'Y';
2435         END IF;
2436       END IF;
2437     END LOOP;
2438 
2439     -- frontport bug 4178235: Fix for bug 4147636
2440     -- Trip options viz. intransit flag, close trip flag, defer interface flag
2441     -- need to be disabled in the ship confirm dialogue box for cases
2442     -- where delivery is assigned to a trip and it is not the Final delivery
2443     -- in that trip.
2444     -- Earlier logic (before this fix) depended on setting autointransit_flag=N
2445     -- and autoclose_flag=N , so that UI could disable the trip options.
2446     --
2447     -- Issue with this logic is that the same two flags could be set to N
2448     -- because of ship confirm Rule.
2449     --
2450     -- To avoid conflict with values set by ship confirm rule,
2451     -- New Logic uses autointransit=D  and autoclose=D, (disable),
2452     -- so that UI should disable the trip options.
2453     --
2454     -- flags are set to Y or N depending on
2455     -- default value or based on the available ship confirm rule.
2456 
2457     IF NOT trip_options THEN
2458        x_autointransit_flag   := 'D';
2459        x_autoclose_flag       := 'D';
2460     END IF;
2461 
2462     IF l_debug_on THEN
2463       WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set id'||x_report_set_id);
2464       WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set Name'||x_report_set_name);
2465       WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule'||x_sc_rule_name);
2466       WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule id'||x_sc_rule_id);
2467       WSH_DEBUG_SV.logmsg(l_module_name,'End In transit'||x_autointransit_flag);
2468       WSH_DEBUG_SV.logmsg(l_module_name,'End Close '||x_autoclose_flag);
2469       WSH_DEBUG_SV.logmsg(l_module_name,'End BOL flag '||x_ac_bol_flag);
2470       WSH_DEBUG_SV.logmsg(l_module_name,'End Defer Interface flag '||x_defer_interface_flag);
2471       WSH_DEBUG_SV.logmsg(l_module_name,'End ship method '||x_ship_method_name);
2472     END IF;
2473 
2474     -- frontport bug 4310141:
2475     -- Bug 4103142 defaulted ship method from first trip
2476     IF (p_del_rows.count = 1) AND x_ship_method_name IS NULL THEN
2477       -- 42588951: default trip only if rule not specified.
2478       -- dist_ship_method_code has the delivery's SM value.
2479       -- so that if the trip exists and has null SM, we can use delivery's SM.
2480       IF dist_ship_method_code IS NULL THEN
2481         dist_ship_method_code := p_ship_method_code_vals(1);
2482       END IF;
2483 
2484       OPEN c_first_ship_method (p_del_rows(1));
2485       FETCH c_first_ship_method INTO temp_ship_method_code;
2486       IF c_first_ship_method%NOTFOUND THEN
2487         temp_ship_method_code := NULL;
2488       ELSE
2489         IF temp_ship_method_code IS NOT NULL THEN
2490           dist_ship_method_code := temp_ship_method_code;
2491         END IF;
2492       END IF;
2493       CLOSE c_first_ship_method;
2494     END IF;
2495 
2496     IF x_ship_method_name IS NULL AND dist_ship_method_code IS NOT NULL THEN
2497       OPEN  sm_name(dist_ship_method_code);
2498       FETCH sm_name into x_ship_method_name;
2499       CLOSE sm_name;
2500     END IF;
2501 
2502     --
2503     IF l_debug_on THEN
2504       WSH_DEBUG_SV.pop(l_module_name);
2505     END IF;
2506     --
2507 
2508   EXCEPTION
2509     WHEN others THEN
2510       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Delivery_Defaults');
2511       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2512       --
2513       IF l_debug_on THEN
2514         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2515         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2516       END IF;
2517       --
2518   END Get_Delivery_Defaults;
2519 
2520 
2521 -- Procedure: Confirm_Delivery
2522 -- Parameters:  p_del_rows   - Delivery_ids of deliveries to be confirmed
2523 --       p_action_flag   - 'S' for Ship Entered, Ship Unspecified Full
2524 --                         'B' for Ship Entered, Backorder Unspecified
2525 --                         'A' Ship All
2526 --       p_intransit_flag - 'Y' for autocreate_trip closes first stop
2527 --       p_close_flag - 'Y' closes autocreated trip and stops
2528 --       p_stage_del_flag - 'Y' creates a new delivery for the staged lines
2529 --       p_report_set_id - report set for delivery
2530 --       p_ship_method - ship method for autocreated trip
2531 --       p_actual_dep_date - actual departure date for pickup stop on autocreated trip
2532 --       p_defer_interface_flag - 'Y' to skip concurrent program submission, bug 1578251
2533 --       p_send_945_flag - 'Y' to trigger outbound shipment advice for delivery with WSH lines
2534 --       x_return_status - status of procedure call
2535 -- Description: This procedure will update shipped quantities of the details
2536 --        on each delivery and confirms each delivery
2537 --
2538 
2539   PROCEDURE Confirm_Delivery
2540     (p_del_rows   IN  wsh_util_core.id_tab_type,
2541      p_action_flag    IN  VARCHAR2,
2542      p_intransit_flag IN  VARCHAR2,
2543      p_close_flag    IN   VARCHAR2,
2544      p_stage_del_flag   IN   VARCHAR2,
2545      p_report_set_id  IN   NUMBER,
2546      p_ship_method    IN   VARCHAR2,
2547      p_actual_dep_date  IN   DATE,
2548      p_bol_flag    IN   VARCHAR2,
2549      p_mc_bol_flag    IN VARCHAR2,
2550      p_defer_interface_flag  IN VARCHAR2,
2551      p_send_945_flag  IN   VARCHAR2,
2552      p_autocreate_trip_flag  IN   varchar2 default 'Y',--heali :Shipment Advice change for trip Consolidation.
2553      x_return_status  OUT NOCOPY  VARCHAR2,
2554      p_caller               IN   VARCHAR2) IS
2555 
2556 
2557   record_locked        EXCEPTION;
2558   PRAGMA EXCEPTION_INIT(record_locked, -54);
2559 
2560   ship_confirm_error      EXCEPTION;
2561 
2562   -- Bug 1729723 : Updating number_of_lpn for delivery
2563   CURSOR number_of_lpn(l_delivery_id NUMBER) IS
2564   SELECT count(distinct wda.delivery_detail_id)
2565   FROM   wsh_delivery_assignments_v wda
2566   WHERE  wda.parent_delivery_detail_id is null
2567   AND LEVEL > 1
2568   CONNECT BY PRIOR wda.parent_delivery_detail_id = wda.delivery_detail_id
2569   START WITH wda.delivery_id = l_delivery_id;
2570 
2571   CURSOR Report_Set (l_organization_id NUMBER) IS
2572   SELECT rs.name, rs.report_set_id
2573   FROM   wsh_shipping_parameters sp,
2574       wsh_report_sets rs
2575   WHERE  sp.organization_id = l_organization_id AND
2576       rs.report_set_id = sp.delivery_report_set_id;
2577 
2578   CURSOR del_legs (l_delivery_id NUMBER) IS
2579   SELECT l1.pick_up_stop_id, l1.drop_off_stop_id, l1.delivery_leg_id, l2.delivery_id parent_delivery_id
2580   FROM   wsh_delivery_legs l1, wsh_delivery_legs l2
2581   WHERE  l1.delivery_id = l_delivery_id
2582   AND    l1.parent_delivery_leg_id = l2.delivery_leg_id(+);
2583 
2584 
2585   CURSOR get_consol_del (l_delivery_id NUMBER) IS
2586   SELECT l2.delivery_id parent_delivery_id
2587   FROM   wsh_delivery_legs l1, wsh_delivery_legs l2
2588   WHERE  l1.delivery_id = l_delivery_id
2589   AND    l1.parent_delivery_leg_id = l2.delivery_leg_id;
2590 
2591 
2592 
2593 ---BUG No:4241880.Cursor changed
2594   CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
2595   SELECT freight_code
2596   FROM   wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
2597   WHERE  wc.carrier_id=wcs.carrier_id AND
2598 	 wcs.carrier_service_id=wocs.carrier_service_id AND
2599 	 wcs.ship_method_code = p_ship_method_code AND
2600 	 wocs.organization_id = p_organization_id;
2601 ---BUG No:4241880.Cursor changed ends
2602 
2603 /*
2604   CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS -- Can this go ?!! pdo
2605   SELECT freight_code
2606   FROM   wsh_carrier_ship_methods_v
2607   WHERE  ship_method_code = p_ship_method_code AND
2608      organization_id = p_organization_id;
2609 */
2610 
2611   CURSOR user_name(l_user_id NUMBER ) is
2612   SELECT user_name
2613   FROM fnd_user
2614   WHERE user_id = l_user_id;
2615 
2616   CURSOR detail_info ( v_delivery_id in number ) IS
2617   SELECT da.parent_delivery_detail_id,
2618      dd.delivery_detail_id,
2619      dd.released_status ,
2620      dd.inspection_flag  ,
2621      dd.shipped_quantity ,
2622      dd.shipped_quantity2 ,
2623      dd.cycle_count_quantity ,
2624      dd.cycle_count_quantity2 ,
2625      dd.requested_quantity  ,
2626      dd.requested_quantity2 ,
2627      /* muom */
2628      dd.requested_quantity_uom2,
2629      NVL(dd.picked_quantity,  dd.requested_quantity)  pick_qty,  -- overpicking
2630      NVL(dd.picked_quantity2, dd.requested_quantity2) pick_qty2,
2631      dd.organization_id ,
2632      dd.inventory_item_id ,
2633      dd.subinventory ,
2634      dd.locator_id,
2635      dd.source_code,   /*Bug 2096052 for OKE */
2636      dd.source_line_id		-- Consolidation of BO Delivery Details project
2637   FROM   wsh_delivery_details dd,
2638      wsh_delivery_assignments_v da
2639   WHERE  da.delivery_id = v_delivery_id AND
2640       da.delivery_id IS NOT NULL AND
2641       da.delivery_detail_id = dd.delivery_detail_id AND
2642       dd.container_flag = 'N';
2643 
2644 
2645   CURSOR Get_Trip(v_del_id NUMBER) IS
2646   SELECT wt.trip_id , wt.carrier_id, wt.ship_method_code, wt.mode_of_transport,
2647          --OTM R12
2648          wt.tp_plan_name
2649          --
2650   FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_trips wt
2651   WHERE wdl.pick_up_stop_id=wts.stop_id
2652   AND wdl.delivery_id=v_del_id
2653   AND wts.trip_id=wt.trip_id;
2654 
2655   CURSOR Get_Containers (v_delivery_detail_id NUMBER) IS
2656   SELECT delivery_detail_id
2657   FROM wsh_delivery_assignments_v
2658   WHERE delivery_detail_id <> v_delivery_detail_id
2659   START WITH delivery_detail_id = v_delivery_detail_id
2660   CONNECT BY PRIOR parent_delivery_detail_id = delivery_detail_id;
2661 
2662   CURSOR get_empty_containers(v_delivery_id NUMBER) IS
2663   SELECT da.delivery_detail_id
2664   FROM wsh_delivery_assignments_v da,
2665        WSH_DELIVERY_DETAILS  dd
2666   WHERE da.delivery_id = v_delivery_id
2667   AND da.delivery_detail_id = dd.delivery_detail_id
2668   AND dd.container_flag = 'Y'
2669   AND NOT EXISTS(
2670      SELECT delivery_detail_id
2671      FROM wsh_delivery_assignments_v da2
2672      WHERE da2.parent_delivery_detail_id = da.delivery_detail_id) ;
2673 
2674 -- Bug 2713285, added batch_id
2675   CURSOR get_delivery_name(v_delivery_id NUMBER) IS
2676   SELECT name,batch_id,
2677          --OTM R12
2678          ignore_for_planning,
2679          tms_interface_flag
2680          --
2681   FROM wsh_new_deliveries
2682   WHERE delivery_id = v_delivery_id;
2683 
2684   -- J: W/V Changes
2685   CURSOR get_delivery_wv(v_delivery_id NUMBER) IS
2686   SELECT gross_weight,
2687          volume
2688   FROM   wsh_new_deliveries
2689   WHERE delivery_id = v_delivery_id;
2690 
2691 
2692   CURSOR Get_Del_First_Trip(v_del_id NUMBER) IS
2693   SELECT wts.trip_id
2694   FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_new_deliveries wnd
2695   WHERE wdl.pick_up_stop_id=wts.stop_id
2696   AND wnd.initial_pickup_location_id = wts.stop_location_id
2697   AND wnd.delivery_id = wdl.delivery_id
2698   AND wnd.delivery_id=v_del_id;
2699 
2700 
2701   --bug 3314353  -- jckwok
2702   CURSOR prev_stop_csr ( p_trip_id IN NUMBER, p_stop_sequence IN NUMBER) IS
2703   SELECT stop_id
2704   FROM wsh_trip_stops
2705   WHERE trip_id              = p_trip_id
2706   AND status_code         IN ('OP','AR')
2707   AND stop_sequence_number < p_stop_sequence
2708   AND nvl(shipments_type_flag,'0') <> 'I' --bugfix 3925963
2709   ORDER BY stop_sequence_number;
2710 
2711   --bug 3314353  -- jckwok
2712   CURSOR get_stops_csr (p_trip_id IN NUMBER) IS
2713   SELECT stop_id,shipments_type_flag,stop_location_id   --bugfix 3925963
2714   FROM wsh_trip_stops
2715   WHERE trip_id              = p_trip_id
2716   AND status_code         IN ('OP','AR')
2717   ORDER BY stop_sequence_number;
2718 
2719   --bugfix 3925963
2720   CURSOR get_trip_name_csr (p_first_trip_id NUMBER) IS
2721   Select wt.name
2722   from wsh_trips wt
2723   where wt.trip_id = p_first_trip_id;
2724 
2725 --bug 3314353  -- jckwok
2726   CURSOR stop_sequence_number_csr (p_stop_id IN NUMBER) IS
2727   SELECT stop_sequence_number
2728   FROM wsh_trip_stops
2729   WHERE stop_id = p_stop_id;
2730 
2731   -- Added for bug 4493263
2732   CURSOR c_delv_trip_id_cursor( t_delivery_id NUMBER ) IS
2733   select distinct trip_id from wsh_trip_stops
2734   where stop_id in
2735        ( select distinct pick_up_stop_id
2736          from   wsh_delivery_legs
2737          where  delivery_id = t_delivery_id );
2738 
2739 
2740   l_batch_id        WSH_NEW_DELIVERIES.batch_id%TYPE;
2741 
2742   l_source_code     VARCHAR2(30);  /*Bug 2096052 */
2743   l_source_code_flag     VARCHAR2(1) := 'N';  /*Bug 2096052 */
2744   l_released_status   VARCHAR2(1);
2745   l_inspection_flag   VARCHAR2(1);
2746   l_container_id       NUMBER;
2747   l_ship_method_code     VARCHAR2(30);
2748   l_freight_code       VARCHAR2(30);
2749   l_delivery_detail_id   NUMBER;
2750   l_dummy_detail_id   NUMBER;
2751   l_detail_num       NUMBER;
2752   l_initial_pickup_date wsh_util_core.Date_tab_type;
2753   l_ultimate_dropoff_date  wsh_util_core.Date_tab_type;
2754 
2755   u_initial_pickup_date wsh_util_core.Date_tab_type; -- Bulk update variable
2756   u_ultimate_dropoff_date  wsh_util_core.Date_tab_type;
2757 
2758   l_organization_id   NUMBER ;
2759   l_num_warn         NUMBER :=0;
2760   l_num_error       NUMBER :=0;
2761   l_dd_organization_id   NUMBER ;
2762   l_inventory_item_id   NUMBER ;
2763   l_subinventory       VARCHAR2 (30);
2764   l_locator_id       NUMBER ;
2765   /* muom */
2766   l_requested_quantity_uom2 VARCHAR2(4);
2767 
2768   l_unassign_dds      wsh_util_core.id_tab_type;   -- Renamed the variable l_unassign_line_ids for BO Consolidation
2769   /* H integration: 945 cancel staged wrudge */
2770   l_cancel_line_ids   wsh_util_core.id_tab_type;
2771 
2772   l_assigned_counter   NUMBER;
2773   l_assigned_line_ids wsh_util_core.id_tab_type;
2774   l_assigned_cont_ids wsh_util_core.id_tab_type;
2775   l_assigned_orgs   wsh_util_core.id_tab_type;
2776   l_assigned_items     wsh_util_core.id_tab_type;
2777   l_assigned_subs   wsh_util_core.Column_Tab_Type;
2778   l_assigned_locs   wsh_util_core.id_Tab_Type;
2779   -- muom
2780   l_assigned_req_qty_uoms2 wsh_util_core.Column_Tab_Type;
2781   l_assigned_src_codes wsh_util_core.Column_Tab_Type;
2782 
2783   l_bo_rows       wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2784   l_cc_rows       wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2785   l_out_bo_rows     wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2786   l_out_cc_rows     wsh_util_core.id_tab_type; --        list of new details that got backordered
2787 
2788   l_dd_org_ids       wsh_util_core.id_tab_type; --         list of details org ids
2789   l_item_ids       wsh_util_core.id_tab_type; --         list of details inventory_item_ids
2790 
2791   -- for non-transactable items
2792   l_inv_controls_rec    WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
2793   dft_subinv        VARCHAR2(30);
2794   loc_restricted_flag  VARCHAR2(1);
2795   dft_loc_id        NUMBER;
2796   org_loc_ctl      NUMBER;
2797   sub_loc_ctl      NUMBER;
2798   item_loc_ctl      NUMBER;
2799   loc_ctl_code      NUMBER;
2800 
2801   g_line_inv_rec      WSH_DELIVERY_DETAILS_INV.line_inv_info;
2802   l_details_flag      BOOLEAN;
2803 
2804   l_ship_from_location  NUMBER;
2805   l_ship_to_location    NUMBER;
2806 
2807   l_dummy_rows      wsh_util_core.id_tab_type;
2808   l_dummy_rows1      wsh_util_core.id_tab_type;
2809   l_dummy_doc_set    wsh_document_sets.document_set_tab_type;
2810 
2811   l_trip_id        NUMBER;
2812   l_trip_name      VARCHAR2(30);
2813   l_return_status    VARCHAR2(1);
2814 
2815   l_requested_quantity  NUMBER;
2816   l_shipped_quantity    NUMBER;
2817   l_cycle_quantity    NUMBER;
2818   l_stage_quantity    NUMBER;
2819   l_del_status_code    VARCHAR2(2);
2820   l_status_code      WSH_UTIL_CORE.Column_Tab_Type  ;
2821   l_number_of_lpn    wsh_util_core.id_tab_type;
2822   u_status_code      WSH_UTIL_CORE.Column_Tab_Type  ;
2823   u_number_of_lpn    wsh_util_core.id_tab_type;
2824   /* H integration: 945 send document wrudge */
2825   u_organization_id    wsh_util_core.id_tab_type;
2826   u_wsh_lines_exist    wsh_util_core.id_tab_type;
2827   l_wsh_lines_exist    NUMBER;
2828 
2829   -- hverddin : Begin of OPM Changes Added Dual Quantities  31-OCT-00
2830 
2831   l_requested_quantity2   NUMBER;
2832   l_shipped_quantity2  NUMBER;
2833   l_cycle_quantity2    NUMBER;
2834   l_stage_quantity2    NUMBER;
2835 
2836   -- hverddin : End of OPM Changes Added Dual Quantities  31-OCT-00
2837   l_valid_flag      BOOLEAN; -- Check if ship_set is valid
2838   l_overfilled_flag    BOOLEAN;
2839   l_underfilled_flag    BOOLEAN;
2840 
2841   -- overpicking
2842   l_picked_quantity    NUMBER;
2843   l_picked_quantity2    NUMBER;
2844   l_unshipped_pick_quantity   NUMBER;
2845   l_unshipped_pick_quantity2  NUMBER;
2846 
2847   l_shp_dd_shipped_qtys   wsh_util_core.id_tab_type;
2848   l_shp_dd_shipped_qtys2  wsh_util_core.id_tab_type;
2849   l_shp_dd_cc_qtys    wsh_util_core.id_tab_type;
2850   l_shp_dd_cc_qtys2    wsh_util_core.id_tab_type;
2851   l_shp_dd_req_qtys    wsh_util_core.id_tab_type;
2852   l_shp_dd_ids      wsh_util_core.id_tab_type;    -- Bug 1672188 : list of details to to Ship
2853   l_shp_dd_items      wsh_util_core.id_tab_type ;  --      : list of items in details to Ship
2854   l_shp_dd_orgs      wsh_util_core.id_tab_type;   --       : list of org of details  to Ship
2855   l_shp_dd_subs      wsh_util_core.column_tab_type;   --       : list of subinventories of details to Ship
2856   l_shp_dd_locs      wsh_util_core.id_tab_type;   --       : list of locators of details to Ship
2857   l_shp_dd_cont_ids    wsh_util_core.id_tab_type;   --       : list of containers of details to Ship
2858   /* H integration: 945 check detail wrudge */
2859   l_shp_dd_source    wsh_util_core.column_tab_type;  --      : list of source_code of details to ship
2860 
2861   l_assigned_req_qtys  wsh_util_core.id_tab_type; --         list of details req qty
2862   l_assigned_shp_qtys  wsh_util_core.id_tab_type  ;
2863   l_assigned_cc_qtys    wsh_util_core.id_tab_type  ;
2864   l_assigned_req_qtys2  wsh_util_core.id_tab_type; --        list of details req qty2
2865   l_assigned_shp_qtys2  wsh_util_core.id_tab_type  ;
2866   l_assigned_cc_qtys2  wsh_util_core.id_tab_type  ;
2867   l_assigned_pick_qtys  wsh_util_core.id_tab_type; --        overpicking NVL(picked, requested)
2868   l_assigned_pick_qtys2   wsh_util_core.id_tab_type;
2869   l_assigned_overpick_qtys  wsh_util_core.id_tab_type; --      for backordering or cycle-counting overpicked quantities
2870   l_assigned_overpick_qtys2   wsh_util_core.id_tab_type;
2871   /* H integration: 945 assigned detail wrudge */
2872    l_assigned_source      wsh_util_core.column_tab_type;
2873 
2874   l_stop_rows      wsh_util_core.id_tab_type;
2875   u_stop_rows      wsh_util_core.id_tab_type; -- bug 2064810
2876   l_del_rows        wsh_util_core.id_tab_type;
2877   u_del_rows        wsh_util_core.id_tab_type;
2878 
2879   l_param_info      WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2880   l_enforce_packing_flag  VARCHAR2(1) := 'N';
2881 
2882   l_cc_qtys        wsh_util_core.id_tab_type; --         list of details BO qty
2883   l_cc_req_qtys      wsh_util_core.id_tab_type  ;
2884   l_cc_overpick_qtys    wsh_util_core.id_tab_type  ;
2885   l_cc_qtys2        wsh_util_core.id_tab_type; --        list of details BO qty2
2886   l_cc_overpick_qtys2  wsh_util_core.id_tab_type  ;
2887 
2888   l_bo_qtys        wsh_util_core.id_tab_type; --         list of details BO qty
2889   l_bo_mode        VARCHAR2 (15) ;
2890   l_bo_req_qtys      wsh_util_core.id_tab_type  ;
2891   l_bo_overpick_qtys    wsh_util_core.id_tab_type  ;
2892   l_bo_qtys2        wsh_util_core.id_tab_type; --        list of details BO qty2
2893   l_bo_overpick_qtys2  wsh_util_core.id_tab_type  ;
2894 
2895   l_staged_dd_id      NUMBER ;
2896   l_new_detail_id    NUMBER ;
2897   l_stage_rows      wsh_util_core.id_tab_type ;
2898 
2899   l_backorder_all_flag  BOOLEAN  := TRUE ;
2900   l_stage_all_flag    BOOLEAN  ;
2901   l_inv_cntrl_flag    BOOLEAN ;
2902   l_inv_material_flag BOOLEAN;
2903   l_del_tmp_rows      wsh_util_core.id_tab_type;
2904   l_document_set_name  VARCHAR2 ( 50 );
2905 
2906   l_user_name      VARCHAR2(100);
2907   l_user_id        NUMBER ;
2908   l_login_id                       NUMBER;
2909   l_document_set_id    NUMBER ;
2910   l_gross_wt        NUMBER ;
2911   l_net_wt        NUMBER ;
2912   l_vol          NUMBER ;
2913 
2914   l_unpacked_flag    BOOLEAN ;
2915   --l_unassign_all_flag  BOOLEAN ;
2916   l_cont_exists_flag    BOOLEAN ;
2917   l_fill_status      VARCHAR2(2) ;
2918 
2919 -- this variable will store fill status Bug 2878538
2920 -- it will help saving the value from getting over ridden of l_fill_status
2921 -- since l_fill_status variable gets overridden in a loop
2922   l_save_fill_status      VARCHAR2(2) := 'S';
2923   l_exception_exist   VARCHAR2(1);
2924   l_severity_present   VARCHAR2(1);
2925 
2926   l_pickup_stop_id    NUMBER ;
2927   l_dropoff_stop_id    NUMBER ;
2928   l_delivery_leg_id    NUMBER ;
2929   l_parent_delivery_id    NUMBER ;
2930   l_delivery_id      NUMBER ;
2931 
2932   l_gross_weight      NUMBER ;
2933   l_net_weight      NUMBER ;
2934   l_volume        NUMBER ;
2935   l_temp_line_id      NUMBER ;
2936   l_temp_source_code    VARCHAR2(5);
2937   l_max_quantity      NUMBER ;
2938   -- HW OPM added qty2
2939   l_max_quantity2    NUMBER ;
2940   l_msg_data        VARCHAR2(2000);
2941   l_msg_count      NUMBER;
2942   l_wms_delivery_id    wsh_util_core.id_tab_type ;
2943   --2121399
2944   TYPE Flag_Tab_Type IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;
2945   l_unassign_all_flag_tab  Flag_Tab_Type ;
2946   --2121399
2947 
2948   l_label_status VARCHAR2(20);
2949   l_del_tab INV_LABEL_PUB.transaction_id_rec_type;
2950 
2951   l_close_del_cnt   NUMBER := 0;
2952   l_confirm_del_cnt NUMBER := 0;
2953 
2954   /*new variable */
2955   l_stop_rec          WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
2956   l_trip_rec          WSH_TRIPS_PVT.trip_rec_type;
2957   -- bug 2263249
2958   l_wms_enabled_flag BOOLEAN;
2959   -- bug 2343058
2960   l_check_credit_init_flag BOOLEAN;
2961 
2962   x_unassigned_cont wsh_util_core.id_tab_type;
2963   l_msg_rec_count wsh_util_core.MsgCountType;
2964   l_error_exists  BOOLEAN;
2965   l_msg_table     WSH_INTEGRATION.MSG_TABLE ;
2966   l_count         NUMBER := 0;
2967   l_cont_name     VARCHAR2(100);
2968   l_empty_container NUMBER;
2969   l_delivery_name   VARCHAR2(100);
2970 
2971 
2972 --Compatibility Changes
2973     l_cc_validate_result		VARCHAR2(1);
2974     l_cc_failed_records			WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
2975     l_cc_group_info			WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
2976     l_cc_line_groups			WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
2977 
2978     l_trip_info_tab			WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2979     l_trip_id_tab_temp  		wsh_util_core.id_tab_type;
2980     l_cc_count_success			NUMBER;
2981     b_cc_linefailed			BOOLEAN;
2982     l_target_trip_id			NUMBER;
2983     b_tripalreadychecked                VARCHAR2(1);
2984     l_count_hashtrip                    NUMBER;
2985 
2986     --dummy tables for calling validate_constraint_wrapper
2987     l_cc_del_attr_tab	        WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2988     l_cc_det_attr_tab	        WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Attr_Tbl_Type;
2989     l_cc_trip_attr_tab	        WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2990     l_cc_stop_attr_tab	        WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
2991     l_cc_in_ids		        wsh_util_core.id_tab_type;
2992     l_cc_fail_ids		wsh_util_core.id_tab_type;
2993     l_cc_carrier_id             NUMBER;
2994     l_cc_mode                   VARCHAR2(30);
2995     G_HASH_TRIP                 wsh_util_core.id_tab_type;
2996 --Compatibility Changes
2997 
2998     l_with_mc_trip_flag           Flag_Tab_Type;
2999 
3000   -- Variables added for Consolidation of BO Delivery Details project
3001   --
3002   l_global_parameters	    WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
3003   l_assigned_source_lines   wsh_util_core.id_Tab_Type;
3004   l_unassign_backordered_dds    wsh_util_core.id_Tab_Type; --Stores the list of BackOrder/Cycle-Count delivery detail ids
3005   l_unassign_rel_status     wsh_util_core.Column_Tab_Type;
3006 		-- Stores the corresponding Released_status of the delivery details in l_unassign_dds
3007   l_unassign_source_lines   wsh_util_core.id_Tab_Type;
3008 		-- Stores the Source line ids of the delivery details that are going to be unassigned from the Delivery
3009   l_bo_line_ids		    wsh_util_core.id_Tab_Type;
3010 
3011   l_bo_source_lines   wsh_util_core.id_Tab_Type;
3012   l_bo_sources        wsh_util_core.column_Tab_Type; -- RTV BO Cons Changes
3013   l_cc_source_lines   wsh_util_core.id_Tab_Type;
3014   l_cc_sources        wsh_util_core.column_Tab_Type; -- RTV BO Cons Changes
3015   l_cons_flags        wsh_util_core.Column_Tab_Type;
3016   l_source_line_id	NUMBER;
3017   l_idx		NUMBER;
3018   l_cmp_idx	NUMBER;
3019   j		NUMBER;
3020   k		NUMBER;
3021   l_flag	VARCHAR2(1);
3022   l_close_confirm_flag VARCHAR2(1):= NULL;
3023   --
3024 
3025   -- Exception Changes
3026   l_exceptions_tab  wsh_xc_util.XC_TAB_TYPE;
3027   l_exp_logged      BOOLEAN := FALSE;
3028 
3029   -- Pack J, table indexed by delivery_id to store whether ITM screening is required.
3030   l_itm_exc_flag   wsh_util_core.column_Tab_Type;
3031   l_itm_stops_tab   wsh_util_core.column_Tab_Type;
3032   l_lines_in_delivery NUMBER;
3033   l_itm_exc_severity VARCHAR2(30);
3034 
3035   -- Checks if the itm exception is enabled and its severity.
3036   CURSOR c_exc_severity (c_exception_name VARCHAR2) IS
3037   SELECT  UPPER(default_severity)
3038   FROM            wsh_exception_definitions_vl
3039   WHERE   exception_name = c_exception_name
3040   AND     enabled = 'Y';
3041 
3042   l_carrier_rec                  WSH_CARRIERS_GRP.Carrier_Service_InOut_Rec_Type;
3043   l_del_first_trip    NUMBER;
3044 
3045   --bug 3314353
3046   l_pick_up_stop_sequence_num NUMBER;
3047   l_first_trip_id NUMBER;
3048   l_prev_stop_id NUMBER;
3049 
3050   -- bug 2283621
3051   l_more_dd_flag           BOOLEAN;
3052   l_more_material_dd_flag           BOOLEAN;
3053   l_inv_ctrl_dd_count      NUMBER;
3054   l_inv_material_dd_count      NUMBER;
3055   l_inv_ctrl_dd_ids        VARCHAR2(100);
3056   l_inv_material_dd_ids        VARCHAR2(100);
3057 -- HW OPMCONV. Removed OPM variables
3058 
3059   -- Local Variables added for Bug 3118519
3060 
3061   l_more_flag              BOOLEAN      := TRUE;
3062   l_detail_count           NUMBER       := 0;
3063   l_invalid_details        VARCHAR2(100);
3064   l_token                  VARCHAR2(2000);
3065   l_sc_pickup_date         DATE;
3066   l_sc_dropoff_date        DATE;
3067 
3068   l_entity_name    VARCHAR2(1000);
3069   l_exc_beh_error  VARCHAR2(1000);
3070   l_exc_beh_warn   VARCHAR2(1000);
3071 
3072 -- HW OPMCONV. Added a new variable
3073    l_error_DFF  BOOLEAN :=FALSE;
3074 
3075 
3076   --Bugfix 3925963
3077   l_shipments_type_flag  VARCHAR2(30);
3078   l_stop_location_id     NUMBER;
3079   l_stops_trip_name      VARCHAR2(30);
3080   l_inbound_stops_exists  BOOLEAN;
3081   l_stop_name            VARCHAR2(60);
3082   l_stop_name_list       VARCHAR2(10000);
3083   --
3084 
3085   --/== Workflow Changes
3086   l_scpod_wf_del_rows   wsh_util_core.id_tab_type;
3087   l_ctr          NUMBER;
3088   l_aname_text   wf_engine.nametabtyp;
3089   l_avalue_text  wf_engine.texttabtyp;
3090   l_aname_num    wf_engine.nametabtyp;
3091   l_avalue_num   wf_engine.numtabtyp;
3092   l_process_started VARCHAR2(1);
3093   l_enable_sc_wf    VARCHAR2(1);
3094   l_override_wf     VARCHAR2(1);
3095   l_wf_rs           VARCHAR2(1);
3096   l_defer_interface_flag VARCHAR2(1);
3097   --==/
3098   l_custom_severity varchar2(10);
3099   l_activity_code   varchar2(200) := 'SHIP_CONFIRM_MESSAGE' ;
3100   l_validation_code varchar2(200) := 'MISSING_CONTROLS';
3101 
3102   l_mdc_cl_del_tab wsh_util_core.id_tab_type;
3103   l_mdc_co_del_tab wsh_util_core.id_tab_type;
3104   l_mdc_index_i NUMBER;
3105 
3106   -- LPN CONV rv
3107   cursor l_delete_wms_empty_cnt_csr is
3108   select distinct wwst.delivery_detail_id
3109   from   wsh_wms_sync_tmp wwst,
3110          wsh_delivery_details wdd
3111   where  wwst.operation_type = 'DELETE'
3112   and    wdd.delivery_detail_id = wwst.delivery_detail_id
3113   and    wdd.container_flag = 'Y'
3114   and    wdd.lpn_id is not null;
3115 
3116   l_delete_cnt_id_tbl wsh_util_core.id_tab_type;
3117   -- LPN CONV rv
3118   -- bug 4505105
3119   l_del_valid_flag VARCHAR2(1);
3120   -- bug 4505105
3121   --Bug 5255366
3122   l_consol_del_doc_set wsh_util_core.id_tab_type;
3123   l_content_del_flag  BOOLEAN  := TRUE;
3124 
3125   --OTM R12
3126   l_ignore_for_planning  WSH_NEW_DELIVERIES.IGNORE_FOR_PLANNING%TYPE;
3127   l_tms_interface_flag   WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
3128   l_otm_trip_id          WSH_TRIPS.TRIP_ID%TYPE;
3129   l_otm_carrier_id       WSH_NEW_DELIVERIES.CARRIER_ID%TYPE;
3130   l_otm_ship_method_code WSH_NEW_DELIVERIES.SHIP_METHOD_CODE%TYPE;
3131   l_otm_mode             WSH_NEW_DELIVERIES.MODE_OF_TRANSPORT%TYPE;
3132   l_otm_plan_name        WSH_TRIPS.TP_PLAN_NAME%TYPE;
3133   l_gc3_is_installed     VARCHAR2(1);
3134   --
3135   -- Bug 8555654 : begin
3136   l_period_id             NUMBER;
3137   l_open_past_period      BOOLEAN;
3138   l_opn_prd_chk_orgs      wsh_util_core.id_tab_type;
3139   -- Bug 8555654 : end
3140 
3141   -- muom
3142   l_fulfill_base      VARCHAR2(1);
3143 
3144   l_debug_on BOOLEAN;
3145   --
3146   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONFIRM_DELIVERY';
3147   --
3148 BEGIN
3149 
3150   -- 0. Get the user_id and user_name
3151         --
3152         -- Debug Statements
3153         --
3154         --
3155         l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3156         --
3157         IF l_debug_on IS NULL
3158         THEN
3159             l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3160         END IF;
3161         --
3162         IF l_debug_on THEN
3163             WSH_DEBUG_SV.push(l_module_name);
3164             --
3165             WSH_DEBUG_SV.log(l_module_name,'P_ACTION_FLAG',P_ACTION_FLAG);
3166             WSH_DEBUG_SV.log(l_module_name,'P_INTRANSIT_FLAG',P_INTRANSIT_FLAG);
3167             WSH_DEBUG_SV.log(l_module_name,'P_CLOSE_FLAG',P_CLOSE_FLAG);
3168             WSH_DEBUG_SV.log(l_module_name,'P_STAGE_DEL_FLAG',P_STAGE_DEL_FLAG);
3169             WSH_DEBUG_SV.log(l_module_name,'P_REPORT_SET_ID',P_REPORT_SET_ID);
3170             WSH_DEBUG_SV.log(l_module_name,'P_SHIP_METHOD',P_SHIP_METHOD);
3171             WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DEP_DATE',P_ACTUAL_DEP_DATE);
3172             WSH_DEBUG_SV.log(l_module_name,'P_BOL_FLAG',P_BOL_FLAG);
3173             WSH_DEBUG_SV.log(l_module_name,'P_MC_BOL_FLAG',P_MC_BOL_FLAG);
3174             WSH_DEBUG_SV.log(l_module_name,'P_DEFER_INTERFACE_FLAG',P_DEFER_INTERFACE_FLAG);
3175             WSH_DEBUG_SV.log(l_module_name,'P_SEND_945_FLAG',P_SEND_945_FLAG);
3176         END IF;
3177         --
3178         l_login_id := FND_GLOBAL.login_id;
3179   l_user_id   := FND_GLOBAL.user_id ;
3180   l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3181 
3182   --OTM R12
3183   l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
3184 
3185   IF l_gc3_is_installed IS NULL THEN
3186     l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
3187   END IF;
3188   --
3189 
3190   -- bug 2778035
3191   IF p_action_flag IS NULL
3192   OR p_action_flag NOT IN ('S', 'B', 'L', 'T', 'A', 'C', 'O') THEN
3193     FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_SC_ACTION_FLAG');
3194     wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
3195     RAISE FND_API.G_EXC_ERROR;
3196   END IF;
3197   -- bug 2778035
3198 
3199 -- Fix for Bug 3944151
3200 -- Using fnd_global.User_name for global G_USER_NAME
3201 -- This is because before this fix, global g_user_name carried the previous user name
3202 -- when one user logged out and another user logged back in the same mobile telnet session.
3203 
3204    G_USER_NAME := FND_GLOBAL.USER_NAME;
3205 
3206 /*  if ( G_USER_NAME is NULL ) then
3207           open user_name(l_user_id);
3208     fetch user_name into G_USER_NAME ;
3209     if user_name%NOTFOUND then
3210       raise ship_confirm_error;
3211     end if;
3212     close user_name;
3213   end if ;
3214 */
3215 -- End of fix for bug 3944151
3216 
3217 /* Bug 2761304 : The following call is now made inside the loop*/
3218 
3219  /* WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3220                                     x_msg_rec_count => l_msg_rec_count,
3221                                     x_return_status => l_return_status);
3222   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3223     raise ship_confirm_error;
3224   END IF;*/
3225 
3226   l_user_name := G_USER_NAME ;
3227   SAVEPOINT start_ship_confirm_delivery ;
3228 
3229   l_document_set_id := p_report_set_id;
3230 
3231   l_enable_sc_wf := 'N';  --Workflow Changes
3232 
3233         -- bug 2343058
3234         l_check_credit_init_flag := TRUE;
3235 
3236   -- Code Shifted from below to execute irrespective of the If condition - Workflow Changes
3237   IF l_debug_on THEN
3238       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit 2WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters',WSH_DEBUG_SV.C_PROC_LEVEL);
3239   END IF;
3240   --
3241   WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(l_global_parameters, l_return_status);
3242   IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3243 	      	          WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3244 	raise ship_confirm_error;
3245 --      x_return_status := l_return_status;
3246 --      wsh_util_core.add_message(x_return_status);
3247 --      l_num_error := l_num_error + 1 ;
3248 --      goto loop_end;
3249   END IF;
3250 
3251 
3252   FOR i IN 1..p_del_rows.count LOOP
3253 
3254   SAVEPOINT confirm_delivery_sp ;
3255 
3256 /* Bug 2761304*/
3257   WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3258                                     x_msg_rec_count => l_msg_rec_count,
3259                                     x_return_status => l_return_status);
3260 
3261   -- Bug 3913206
3262   l_sc_pickup_date        := NULL;
3263   l_sc_dropoff_date       := NULL;
3264 
3265   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3266     raise ship_confirm_error;
3267   END IF;
3268 
3269 -- Bug 2713285, movedthe code outside the loop,since it is for same delivery
3270 -- added batch_id
3271   OPEN get_delivery_name(p_del_rows(i));
3272   FETCH get_delivery_name INTO l_delivery_name,
3273                                l_batch_id,
3274                                --OTM R12
3275                                l_ignore_for_planning,
3276                                l_tms_interface_flag;
3277                                --
3278   CLOSE get_delivery_name;
3279 
3280   IF l_debug_on THEN
3281     WSH_DEBUG_SV.log(l_module_name,'Delivery Name',l_delivery_name);
3282     WSH_DEBUG_SV.log(l_module_name,'Batch id',l_batch_id);
3283     --OTM R12
3284     WSH_DEBUG_SV.log(l_module_name,'ignore for planning',l_ignore_for_planning);
3285     WSH_DEBUG_SV.log(l_module_name,'tms interface flag',l_tms_interface_flag);
3286     --
3287   END IF;
3288 
3289 
3290     OPEN get_empty_containers(p_del_rows(i));
3291     LOOP
3292        FETCH get_empty_containers INTO l_empty_container;
3293        EXIT WHEN get_empty_containers%NOTFOUND;
3294        l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_empty_container);
3295 
3296        IF l_debug_on THEN
3297           WSH_DEBUG_SV.log(l_module_name,'l_empty_container',l_empty_container);
3298           WSH_DEBUG_SV.log(l_module_name,'Empty Container',l_cont_name);
3299        END IF;
3300 
3301        FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_CONTAINER');
3302        FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
3303        FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3304        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3305        l_num_warn := l_num_warn + 1;
3306        wsh_util_core.add_message(x_return_status,l_module_name);
3307     END LOOP;
3308     CLOSE get_empty_containers;
3309 
3310     l_bo_rows.delete ;
3311     l_cc_rows.delete ;
3312     l_unassign_dds.delete ;
3313     -- Consolidation of BO Delivery Details project
3314     --
3315     l_bo_source_lines.delete;
3316     l_bo_sources.delete;  -- RTV BO Cons Changes
3317     l_cc_source_lines.delete;
3318     l_cc_sources.delete; -- RTV BO Cons Changes
3319     l_assigned_source_lines.delete;
3320     l_unassign_rel_status.delete;
3321     l_unassign_source_lines.delete;
3322     l_bo_line_ids.delete;
3323 
3324     --
3325     /* H integration: 945 cancel staged wrudge */
3326     l_cancel_line_ids.delete;
3327     l_assigned_counter   := 0 ;
3328     l_assigned_line_ids.delete;
3329     l_assigned_cont_ids.delete;
3330     l_assigned_orgs.delete;
3331     l_assigned_items.delete;
3332     l_assigned_subs.delete;
3333     l_assigned_locs.delete;
3334     -- muom
3335     l_assigned_req_qty_uoms2.delete;
3336     l_assigned_src_codes.delete;
3337     l_out_bo_rows.delete;
3338     l_out_cc_rows.delete;
3339     l_dd_org_ids.delete;
3340     l_item_ids.delete;
3341 
3342     /* H integration: 945 send document wrudge */
3343     l_wsh_lines_exist := 0;
3344 
3345     l_shp_dd_shipped_qtys.delete ;
3346     l_shp_dd_shipped_qtys2.delete ;
3347     l_shp_dd_cc_qtys.delete ;
3348     l_shp_dd_cc_qtys2.delete ;
3349     l_shp_dd_req_qtys.delete ;
3350     l_shp_dd_ids.delete ;
3351     l_shp_dd_items.delete ;
3352     l_shp_dd_orgs.delete ;
3353     l_shp_dd_subs.delete ;
3354     l_shp_dd_locs.delete ;
3355     l_shp_dd_cont_ids.delete ;
3356     /* H integration: 945 check detail wrudge */
3357     l_shp_dd_source.delete;
3358 
3359     l_assigned_req_qtys.delete ;
3360     l_assigned_shp_qtys.delete ;
3361     l_assigned_cc_qtys.delete ;
3362 
3363     l_assigned_req_qtys2.delete ;
3364     l_assigned_shp_qtys2.delete ;
3365     l_assigned_cc_qtys2.delete ;
3366 
3367     l_assigned_pick_qtys.delete;
3368     l_assigned_pick_qtys2.delete;
3369     l_assigned_overpick_qtys.delete;
3370     l_assigned_overpick_qtys2.delete;
3371 
3372     /* H integration: 945 assigned details wrudge */
3373     l_assigned_source.delete;
3374 
3375     l_stop_rows.delete ;
3376     l_del_rows.delete ;
3377 
3378     l_enforce_packing_flag  := 'N';
3379 
3380     l_bo_mode := 'UNRESERVE';
3381 
3382     l_cc_req_qtys.delete ;
3383     l_cc_overpick_qtys.delete ;
3384     l_cc_qtys.delete ;
3385     l_cc_qtys2.delete ;
3386 
3387     l_bo_qtys.delete ;
3388     l_bo_req_qtys.delete ;
3389     l_bo_overpick_qtys.delete ;
3390     l_bo_qtys2.delete ;
3391 
3392     L_stage_ROWS.delete ;
3393 
3394     l_organization_id := NULL ;
3395     l_ship_method_code   := NULL ;
3396     l_ship_from_location := NULL ;
3397     l_ship_to_location   := NULL ;
3398     l_gross_weight     := NULL ;
3399     l_net_weight     := NULL ;
3400     l_volume       := NULL ;
3401 
3402     l_del_status_code := NULL ;
3403 
3404     l_number_of_lpn(i)   := NULL;
3405     -- bug 2263249
3406     l_wms_enabled_flag   := FALSE;
3407     l_unassign_all_flag_tab(i) := TRUE ;
3408     l_inv_cntrl_flag := TRUE;
3409     l_inv_material_flag := TRUE;
3410     l_unpacked_flag := FALSE;
3411 -- Set to False by default,Bug 2878538
3412     l_cont_exists_flag := FALSE;
3413 
3414     -- bug 2283621
3415     l_more_dd_flag := TRUE;
3416     l_more_material_dd_flag  := TRUE;
3417     l_inv_ctrl_dd_ids := NULL;
3418     l_inv_material_dd_ids := NULL;
3419     l_inv_ctrl_dd_count := 0;
3420     l_inv_material_dd_count  :=0 ;
3421     -- end 2283621
3422 
3423     l_with_mc_trip_flag(i)  := FALSE;
3424 
3425     --OTM R12, check OTM exceptions before ship confirm
3426     IF (l_gc3_is_installed = 'Y' AND NVL(l_ignore_for_planning, 'N') = 'N') THEN
3427 
3428       l_otm_trip_id          := NULL;
3429       l_otm_carrier_id       := NULL;
3430       l_otm_ship_method_code := NULL;
3431       l_otm_mode             := NULL;
3432       l_otm_plan_name        := NULL;
3433 
3434       OPEN get_trip(p_del_rows(i));
3435       FETCH get_trip INTO l_otm_trip_id,
3436                         l_otm_carrier_id,
3437                         l_otm_ship_method_code,
3438                         l_otm_mode,
3439                         l_otm_plan_name;
3440 
3441       IF (get_trip%NOTFOUND) THEN
3442         --if cursor not found, then leave the ship method as
3443         --p_ship_method so does not error out later
3444         l_otm_ship_method_code := p_ship_method;
3445       END IF;
3446 
3447       CLOSE get_trip;
3448 
3449       IF l_debug_on THEN
3450         WSH_DEBUG_SV.log(l_module_name,'trip id',l_otm_trip_id);
3451         WSH_DEBUG_SV.log(l_module_name,'carrier id',l_otm_carrier_id);
3452         WSH_DEBUG_SV.log(l_module_name,'ship method',l_otm_ship_method_code);
3453         WSH_DEBUG_SV.log(l_module_name,'mode',l_otm_mode);
3454         WSH_DEBUG_SV.log(l_module_name,'otm plan name',l_otm_plan_name);
3455       END IF;
3456 
3457       IF (p_ship_method IS NULL) THEN
3458         --if p_ship_method is NULL, means no changes to the ship method,
3459         --set l_otm_ship_method_code to NULL as well to avoid error later.
3460         l_otm_ship_method_code := p_ship_method;
3461       END IF;
3462 
3463       -- trip id is NULL, not assigned. Hence ignore the delivery for planning.
3464       -- (CR->NS and AW->DR for 'Not assigned' to an OTM trip Delivery).
3465       -- This update for the ignore_for_plan to 'Y' is needed to autocreate the trip
3466       -- for this delivery during ship conform.
3467       --
3468 
3469       IF l_debug_on THEN
3470         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
3471       END IF;
3472 
3473       WSH_INTERFACE_EXT_GRP.otm_pre_ship_confirm(
3474         p_delivery_id        => p_del_rows(i),
3475         p_delivery_name      => l_delivery_name,
3476         p_tms_interface_flag => l_tms_interface_flag,
3477         p_trip_id            => l_otm_trip_id,
3478         x_return_status      => l_return_status);
3479 
3480       IF l_debug_on THEN
3481         WSH_DEBUG_SV.log(l_module_name,'Return Status after calling WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM', l_return_status);
3482       END IF;
3483 
3484       IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3485         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3486         FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3487 
3488         WSH_UTIL_CORE.add_message(l_return_status, l_module_name);
3489 
3490         l_num_error := l_num_error + 1 ;
3491         GOTO loop_end;
3492 
3493       ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3494         l_num_warn := l_num_warn + 1 ;
3495       END IF;
3496 
3497       --we are checking that otm_plan_name is NOT NULL meaning
3498       --OTM planned trip, and ship method code is being changed
3499       --during ship confirm flow, which is not allowed.
3500       --IF any ship method is NULL this will be skipped
3501       --the trip ship method l_otm_ship_method_code should not be
3502       --NULL for OTM trips.
3503       IF (l_otm_plan_name IS NOT NULL
3504           AND l_otm_ship_method_code <> p_ship_method ) THEN
3505 
3506         --
3507         --  Ship method on a delivery cannot be changed for an OTM trip
3508         --
3509         IF l_debug_on THEN
3510           WSH_DEBUG_SV.log(l_module_name,'ship method on trip', l_otm_ship_method_code);
3511           WSH_DEBUG_SV.log(l_module_name,'ship method passed in ship confirm', p_ship_method);
3512           WSH_DEBUG_SV.logmsg(l_module_name,'ship method not allowed to change for otm trip');
3513         END IF;
3514 
3515         FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_SHIP_CONFIRM_ERROR');
3516         FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', l_delivery_name);
3517 
3518         WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
3519         l_num_error := l_num_error + 1;
3520         GOTO loop_end;
3521       END IF;
3522     END IF;
3523     --END OTM R12
3524 
3525      -- 1. Fetch delivery info and lock it
3526 
3527      l_delivery_id     := p_del_rows(i) ;
3528 
3529      SELECT status_code ,
3530       initial_pickup_date ,
3531       ultimate_dropoff_date  ,
3532       organization_id ,
3533       ship_method_code ,
3534       initial_pickup_location_id,
3535       ultimate_dropoff_location_id ,
3536       gross_weight ,
3537       net_weight ,
3538       volume
3539      INTO   l_del_status_code,
3540       l_initial_pickup_date(i),
3541       l_ultimate_dropoff_date(i),
3542       l_organization_id ,
3543       l_ship_method_code ,
3544       l_ship_from_location,
3545       l_ship_to_location ,
3546       l_gross_weight ,
3547       l_net_weight ,
3548       l_volume
3549      FROM   wsh_new_deliveries
3550      WHERE  delivery_id = p_del_rows(i)
3551      AND    nvl(shipment_direction,'O') IN ('O','IO')    -- J-IB-NPARIKH
3552      FOR UPDATE NOWAIT;
3553 
3554      -- 2. Five checks performed here :
3555      --   a. If delivery is confirmed , skip it and go to next.
3556      IF (l_del_status_code = 'CO') THEN
3557        --  Although the name of this message looks like its an error , we are not
3558        -- really erroring out here.
3559        FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
3560        --
3561        -- Debug Statements
3562        --
3563        IF l_debug_on THEN
3564            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3565        END IF;
3566        --
3567        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3568              wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
3569        goto loop_end ;
3570      END IF;
3571 
3572      --b. If delivery is neither OPEN nor PACKED , then set WARNING and go to next one
3573 
3574      IF NOT (  (l_del_status_code IN  ('OP', 'PA', 'SA'))) THEN  -- sperera 940/945
3575        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_MULTI_ERROR');
3576        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3577        l_num_warn := l_num_warn + 1;
3578        wsh_util_core.add_message(x_return_status);
3579        goto loop_end ;
3580      END IF;
3581 
3582      -- c. If ship Method is null , freight_code is null
3583      --    If not null , then its should have a an associated freight code.
3584 
3585      IF l_ship_method_code IS NULL THEN
3586        l_freight_code:=null;
3587      ELSE
3588        OPEN get_freight(l_ship_method_code,l_organization_id );
3589        FETCH get_freight INTO l_freight_code;
3590 
3591        IF (get_freight%NOTFOUND) THEN
3592          CLOSE get_freight;
3593          fnd_message.set_name('WSH','WSH_INVALID_FREIGHT_CODE');
3594          --
3595          -- Debug Statements
3596          --
3597          IF l_debug_on THEN
3598              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3599          END IF;
3600          --
3601          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3602          FND_MESSAGE.SET_TOKEN('SHIP_METHOD',l_ship_method_code);
3603          FND_MESSAGE.SET_TOKEN('ORG_ID',l_organization_id);
3604          wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING);
3605          x_return_Status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
3606          l_num_warn := l_num_warn + 1 ;
3607              ELSE
3608          CLOSE get_freight;
3609        END IF;
3610      END IF;
3611 
3612      -- d. If Initial pickup date or ultimate dropoff date is null , then
3613      --    Set a warning , and default to sysdate .
3614 
3615      IF (l_initial_pickup_date(i) IS NULL)
3616              OR (l_ultimate_dropoff_date(i) IS NULL) THEN
3617 
3618        IF p_action_flag NOT IN ('C','O') THEN --{
3619           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DATES_NULL');
3620           --
3621           -- Debug Statements
3622           --
3623           IF l_debug_on THEN
3624               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3625           END IF;
3626           --
3627           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3628           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3629           wsh_util_core.add_message(x_return_status);
3630 
3631           l_num_warn := l_num_warn + 1;
3632        END IF; --}
3633 
3634        l_initial_pickup_date(i) :=  nvl(p_actual_dep_date, SYSDATE) ;
3635        l_ultimate_dropoff_date(i) :=  GREATEST(nvl(l_ultimate_dropoff_date(i),nvl(p_actual_dep_date,SYSDATE)), nvl(p_actual_dep_date,SYSDATE));
3636        -- Bug 3913206
3637        l_sc_pickup_date        := l_initial_pickup_date(i);
3638        l_sc_dropoff_date       := l_ultimate_dropoff_date(i);
3639      END IF;
3640 
3641      -- e. Validate Descriptive Flex-fields. If not valid , then warn and go to next one.
3642 
3643      --
3644      -- Debug Statements
3645      --
3646      IF l_debug_on THEN
3647          WSH_DEBUG_SV.log(l_module_name,'l_sc_pickup_date',l_sc_pickup_date);
3648          WSH_DEBUG_SV.log(l_module_name,'l_sc_dropoff_date',l_sc_dropoff_date);
3649          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FLEXFIELD_UTILS.VALIDATE_DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3650      END IF;
3651      --
3652      wsh_flexfield_utils.Validate_DFF
3653        (p_table_name => 'WSH_NEW_DELIVERIES',
3654         p_primary_id => p_del_rows(i),
3655         x_return_status => x_return_status);
3656 
3657        IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3658          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3659          --
3660          -- Debug Statements
3661          --
3662          IF l_debug_on THEN
3663              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3664          END IF;
3665          --
3666          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3667          wsh_util_core.add_message(x_return_status);
3668          if ( x_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR )  then
3669            l_num_error := l_num_error + 1 ;
3670            goto loop_end ;
3671          else
3672            l_num_warn := l_num_warn + 1 ;
3673          end if ;
3674        END IF;
3675 
3676      -- bug 4505105
3677      l_del_valid_flag := 'Y';
3678      validate_del_containers(p_del_rows(i),
3679                              'STD',
3680                              l_del_valid_flag,
3681                              x_return_status);
3682 
3683      IF l_debug_on THEN
3684        WSH_DEBUG_SV.log(l_module_name,'x_return_status after calling validate_del_containers', x_return_status);
3685      END IF;
3686 
3687      IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3688        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3689        --
3690        -- Debug Statements
3691        --
3692        IF l_debug_on THEN
3693            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3694        END IF;
3695        --
3696        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3697        wsh_util_core.add_message(x_return_status);
3698      END IF;
3699      --
3700      IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
3701        l_num_error := l_num_error + 1 ;
3702        goto loop_end ;
3703      END IF;
3704 
3705      IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3706        l_num_error := l_num_error + 1 ;
3707        goto loop_end ;
3708      ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3709        l_num_error := l_num_error + 1 ;
3710        goto loop_end ;
3711      ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3712        l_num_warn := l_num_warn + 1 ;
3713      END IF;
3714      -- bug 4505105
3715 
3716      --bug 1941793
3717      --
3718      -- Debug Statements
3719      --
3720      IF l_debug_on THEN
3721          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
3722      END IF;
3723      --
3724      if (wsh_util_validate.Check_Wms_Org(l_organization_id)='Y') then
3725 
3726 
3727               -- bug 2263249
3728               l_wms_enabled_flag := TRUE;
3729 
3730               l_wms_delivery_id(1):=p_del_rows(i);
3731 
3732        --
3733        -- Debug Statements
3734        --
3735        IF l_debug_on THEN
3736            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);
3737        END IF;
3738        --
3739        WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID(
3740             x_return_status  => l_return_status,
3741             x_msg_count   => l_msg_count,
3742             x_msg_data     => l_msg_data,
3743             p_commit     => 'F',
3744             p_init_msg_list  => 'F',
3745             p_api_version => 1.0, -- Bugfix 3561335
3746             p_delivery_ids   =>  l_wms_delivery_id);
3747        IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3748          FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
3749          FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID');
3750          FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
3751          x_return_status := l_return_status;
3752          wsh_util_core.add_message(x_return_status);
3753          IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
3754               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
3755            l_num_error := l_num_error + 1 ;
3756            goto confirm_error_no_msg;
3757          ELSE
3758             l_num_warn := l_num_warn + 1 ;
3759          END IF;
3760        END IF;
3761      end if;
3762      --
3763 
3764 	 -- Check for Exceptions against Delivery and Contents of Delivery
3765 	 IF l_debug_on THEN
3766         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
3767      END IF;
3768      l_exceptions_tab.delete;
3769      l_exp_logged      := FALSE;
3770      WSH_XC_UTIL.Check_Exceptions (
3771                                      p_api_version           => 1.0,
3772                                      x_return_status         => l_return_status,
3773                                      x_msg_count             => l_msg_count,
3774                                      x_msg_data              => l_msg_data,
3775                                      p_logging_entity_id     => p_del_rows(i) ,
3776                                      p_logging_entity_name   => 'DELIVERY',
3777                                      p_consider_content      => 'Y',
3778                                      x_exceptions_tab        => l_exceptions_tab
3779                                    );
3780 
3781      IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
3782          x_return_status := l_return_status;
3783          wsh_util_core.add_message(x_return_status);
3784          IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
3785              l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
3786               l_num_error := l_num_error + 1 ;
3787               goto confirm_error_no_msg;
3788          ELSE
3789               l_num_warn := l_num_warn + 1 ;
3790          END IF;
3791      END IF;
3792 
3793      l_entity_name:=FND_MESSAGE.GET_STRING('WSH','WSH_DELIVERY');
3794      l_exc_beh_error:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_ERROR');
3795      l_exc_beh_warn:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_WARNING');
3796 
3797      FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
3798          IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
3799             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3800                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3801             ELSE
3802                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3803             END IF;
3804             FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3805             FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3806             FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_error);
3807             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3808             wsh_util_core.add_message(x_return_status);
3809             l_num_error := l_num_error + 1 ;
3810             goto confirm_error_no_msg;
3811          ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
3812             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3813                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3814                FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3815                FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3816                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3817                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3818                wsh_util_core.add_message(x_return_status);
3819                l_num_warn := l_num_warn + 1 ;
3820             ELSIF NOT (l_exp_logged) THEN
3821                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3822                FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3823                FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3824                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3825                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3826                l_exp_logged := TRUE;
3827                wsh_util_core.add_message(x_return_status);
3828                l_num_warn := l_num_warn + 1 ;
3829             END IF;
3830          END IF;
3831      END LOOP;
3832 
3833 
3834      -- 3. Fetch delivery lines for the delivery
3835 
3836      l_assigned_counter := 0 ;
3837      l_lines_in_delivery := 0;
3838 
3839      OPEN detail_info ( p_del_rows(i) );
3840      LOOP
3841 
3842       l_detail_num := l_detail_num + 1;
3843       /*Bug 2096052 for OKE */
3844       l_source_code := NULL;
3845       /*end of 2096052 */
3846 
3847       l_container_id := NULL ;
3848       l_delivery_detail_id := NULL ;
3849       l_released_status  := NULL ;
3850 
3851       l_inspection_flag  := NULL ;
3852       l_shipped_quantity  := NULL ;
3853       l_shipped_quantity2  := NULL ;
3854 
3855       l_cycle_quantity  := NULL ;
3856       l_cycle_quantity2  := NULL ;
3857       l_requested_quantity  := NULL ;
3858 
3859       l_requested_quantity2  := NULL ;
3860       l_dd_organization_id  := NULL ;
3861       l_inventory_item_id  := NULL ;
3862 
3863       l_picked_quantity  := NULL;
3864       l_picked_quantity2 := NULL;
3865 
3866       l_subinventory  := NULL ;
3867       l_locator_id   := NULL ;
3868 
3869       FETCH detail_info INTO l_container_id, l_delivery_detail_id, l_released_status ,
3870                  l_inspection_flag , l_shipped_quantity , l_shipped_quantity2 ,
3871                  l_cycle_quantity , l_cycle_quantity2 , l_requested_quantity ,
3872                  l_requested_quantity2 , l_requested_quantity_uom2, -- muom
3873                  l_picked_quantity, l_picked_quantity2,
3874                  l_dd_organization_id ,l_inventory_item_id ,
3875                  l_subinventory ,  l_locator_id, l_source_code, l_source_line_id;
3876       /*Bug 2096052 added l_source_code for OKE */
3877 					 -- Added l_source_line_id for the Consolidation of BO Delivery Details project
3878 
3879       IF detail_info%NOTFOUND AND l_lines_in_delivery = 0 THEN
3880          CLOSE detail_info;
3881          FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_DELIVERY');
3882          FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3883          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3884          wsh_util_core.add_message(x_return_status);
3885          goto confirm_error_no_msg;
3886       END IF;
3887 
3888       EXIT WHEN detail_info%NOTFOUND;
3889       l_lines_in_delivery := l_lines_in_delivery + 1;
3890 
3891       -- This is a workaround to lock each individual line
3892       -- as locking in SELECT FOR UPDATE will not work
3893       -- on labels 8.1.6.3 and above because of the above mentioned reason
3894       -- This might have a performance hit
3895 
3896      /* remove after UT since the Check_Exceptions will supersede this
3897 
3898      -- check if exception exists for the delivery detail
3899       --
3900       -- Debug Statements
3901       --
3902       IF l_debug_on THEN
3903           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.CHECK_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
3904       END IF;
3905       --
3906       WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3907             p_delivery_detail_id => l_delivery_detail_id,
3908             x_exception_exist => l_exception_exist,
3909             x_severity_present => l_severity_present,
3910             x_return_status => l_return_status);
3911 
3912       -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3913       -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3914       IF (l_exception_exist = 'Y') THEN
3915          --
3916          -- Debug Statements
3917          --
3918          IF l_debug_on THEN
3919              WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR DELIVERY DETAIL ' || L_DELIVERY_DETAIL_ID|| ' , DURING SHIP CONFIRM' );
3920          END IF;
3921          --
3922          FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3923          FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_delivery_detail_id));
3924          IF l_severity_present IN ('H','M') THEN
3925             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3926             wsh_util_core.add_message(x_return_status);
3927             goto confirm_error;
3928          ELSIF l_severity_present = 'L' THEN
3929             x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3930             wsh_util_core.add_message(x_return_status);
3931             l_num_warn := l_num_warn + 1 ;
3932          END IF;
3933       END IF;
3934 
3935       IF l_debug_on THEN
3936         WSH_DEBUG_SV.log(l_module_name,'l_delivery_detail_id'||l_delivery_detail_id);
3937       END IF;
3938 
3939       OPEN Get_Containers(l_delivery_detail_id);
3940       LOOP
3941         FETCH Get_Containers INTO l_container_id;
3942         EXIT WHEN Get_Containers%NOTFOUND;
3943         WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3944             p_delivery_detail_id => l_container_id,
3945             x_exception_exist => l_exception_exist,
3946             x_severity_present => l_severity_present,
3947             x_return_status => l_return_status);
3948 
3949         -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3950         -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3951         IF (l_exception_exist = 'Y') THEN
3952            --
3953            -- Debug Statements
3954            --
3955            IF l_debug_on THEN
3956                WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR CONTAINER ' || L_CONTAINER_ID|| ' , DURING SHIP CONFIRM' );
3957            END IF;
3958            --
3959            FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3960            FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_container_id));
3961            IF l_severity_present IN ('H','M') THEN
3962               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3963               wsh_util_core.add_message(x_return_status);
3964               CLOSE Get_Containers;
3965               CLOSE detail_info;
3966               goto confirm_error;
3967            ELSIF l_severity_present = 'L' THEN
3968               x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
3969               wsh_util_core.add_message(x_return_status);
3970               l_num_warn := l_num_warn + 1 ;
3971            END IF;
3972         END IF;
3973 
3974       END LOOP;
3975       CLOSE Get_Containers;
3976 
3977       */
3978 
3979    -- Bug 3118519 : Validation for Additional Delivery Detail Information DFF.
3980       --
3981       -- Debug Statements
3982       --
3983       IF l_debug_on THEN
3984          WSH_DEBUG_SV.logmsg(l_module_name,'Calling WSH_FLEXFIELD_UTILS.VALIDATE_DFF to validate delivery details DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3985       END IF;
3986       --
3987       WSH_FLEXFIELD_UTILS.Validate_DFF(
3988                           p_table_name     =>  'WSH_DELIVERY_DETAILS',
3989                           p_primary_id     =>  l_delivery_detail_id,
3990                           x_return_status  =>  x_return_status);
3991 
3992  --
3993          IF l_debug_on THEN
3994 
3995             WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3996                                             || x_return_status);
3997          END IF;
3998       IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
3999          --
4000          -- Debug Statements
4001          --
4002          IF l_debug_on THEN
4003             WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF failed for delivery detail : '
4004                                             || l_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
4005             WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
4006                                             || x_return_status);
4007          END IF;
4008          --
4009          l_num_error    := l_num_error + 1;
4010 -- HW OPMCONV. Removed checking for org type
4011 
4012          l_error_DFF:= TRUE;
4013          l_detail_count := l_detail_count + 1;
4014 
4015          IF ( l_detail_count = 1 ) THEN
4016             l_invalid_details := l_delivery_detail_id;
4017          ELSIF ( l_detail_count <= 5 ) THEN
4018             l_invalid_details := l_invalid_details || ', ' || l_delivery_detail_id;
4019          ELSIF ( l_more_flag ) THEN
4020             l_more_flag := FALSE;
4021             l_invalid_details := l_invalid_details || '..';
4022          END IF;
4023       END IF;
4024 
4025     -- IF Condition added for Bug 3118519
4026 
4027     -- HW OPMCONV. Removed forking the code
4028 
4029     /* H integration: 945 send document wrudge */
4030     IF (l_source_code = 'WSH') THEN
4031       l_wsh_lines_exist := l_wsh_lines_exist + 1;
4032     END IF;
4033 
4034 
4035     /*Bug 2096052 added for OKE */
4036     IF (l_source_code = 'OKE' AND
4037       (p_action_flag = 'B' OR
4038        p_action_flag = 'O' OR
4039        p_action_flag = 'L' OR
4040        p_action_flag = 'C' OR
4041        l_cycle_quantity > 0)
4042      ) THEN
4043         l_source_code_flag := 'Y';
4044         FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_SHIP_MODE');
4045         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4046         wsh_util_core.add_message(x_return_status);
4047         l_num_error := l_num_error + 1;
4048         CLOSE detail_info;
4049         goto confirm_error_no_msg;
4050 
4051     END IF;
4052     /*end of Bug 2096052 added for OKE */
4053 
4054       BEGIN
4055         SELECT delivery_detail_id  INTO   l_dummy_detail_id
4056         FROM   wsh_delivery_details
4057         WHERE  delivery_detail_id = l_delivery_detail_id
4058         FOR UPDATE NOWAIT;
4059 
4060         EXCEPTION
4061           WHEN record_locked THEN
4062             x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4063             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
4064             wsh_util_core.add_message(x_return_status);
4065             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4066             CLOSE detail_info;
4067             goto confirm_error;
4068           WHEN OTHERS THEN
4069             RAISE;
4070       END;
4071 
4072       IF (l_released_status NOT IN ('X', 'Y')) THEN
4073          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_UNRELEASED');
4074 -- Bug 2713285
4075 -- for cancelling or unassigning the lines from delivery thru Batch process
4076         IF l_batch_id IS NULL THEN
4077           x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4078           l_num_warn := l_num_warn + 1 ;
4079         ELSE
4080           x_return_status :=  WSH_UTIL_CORE.G_RET_STS_ERROR;
4081           l_num_error := l_num_error + 1 ;
4082         END IF;
4083 
4084         wsh_util_core.add_message(x_return_status);
4085         WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4086         --bug 2770400
4087         IF l_batch_id IS NOT NULL THEN
4088           -- in batch mode ,stop confirming the delivery
4089           wsh_util_core.add_message(x_return_status);
4090           CLOSE detail_info;
4091           goto confirm_error_no_msg;
4092         END IF;
4093 -- End of Bug 2713285
4094 
4095          /* H integration: 945 cancel staged/unreleased wrudge */
4096          IF l_source_code = 'WSH' THEN
4097           l_cancel_line_ids(l_cancel_line_ids.count + 1) := l_delivery_detail_id;
4098          ELSE
4099           l_unassign_dds(l_unassign_dds.count + 1) := l_delivery_detail_id;
4100 	  l_unassign_rel_status(l_unassign_rel_status.count + 1) := l_released_status;
4101 	  l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id;  -- Bug#3246327
4102          END IF;
4103       ELSE
4104          -- check for inspection_flag
4105 
4106          IF ( l_inspection_flag = 'R') then
4107             FND_MESSAGE.SET_NAME('WSH','WSH_INSPECTION');
4108             --
4109             -- Debug Statements
4110             --
4111             IF l_debug_on THEN
4112                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4113             END IF;
4114             --
4115             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
4116             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4117             wsh_util_core.add_message(x_return_status);
4118             l_num_warn := l_num_warn + 1;
4119 
4120             UPDATE WSH_DELIVERY_DETAILS
4121             SET INSPECTION_FLAG = 'I'
4122             WHERE DELIVERY_DETAIL_ID = l_dummy_detail_id ;
4123 
4124          END IF ;
4125 
4126          l_assigned_counter := l_assigned_counter + 1 ;
4127          l_assigned_line_ids ( l_assigned_counter ) := l_dummy_detail_id ;
4128          l_assigned_cont_ids ( l_assigned_counter ) := l_container_id ;
4129          l_assigned_req_qtys      ( l_assigned_counter ) := l_requested_quantity ;
4130          l_assigned_shp_qtys      ( l_assigned_counter ) := l_shipped_quantity   ;
4131          l_assigned_cc_qtys      ( l_assigned_counter ) := l_cycle_quantity ;
4132          l_assigned_shp_qtys2    ( l_assigned_counter ) := l_shipped_quantity2;
4133          l_assigned_cc_qtys2      ( l_assigned_counter ) := l_cycle_quantity2;
4134          l_assigned_req_qtys2    ( l_assigned_counter ) := l_requested_quantity2  ;
4135          l_assigned_pick_qtys    ( l_assigned_counter ) := l_picked_quantity;
4136          l_assigned_pick_qtys2    ( l_assigned_counter ) := l_picked_quantity2;
4137          l_assigned_overpick_qtys  ( l_assigned_counter ) := l_picked_quantity - l_requested_quantity ;
4138          l_assigned_overpick_qtys2  ( l_assigned_counter ) := l_picked_quantity2 - l_requested_quantity2 ;
4139          l_assigned_orgs   ( l_assigned_counter ) := l_dd_organization_id  ;
4140          l_assigned_items ( l_assigned_counter ) := l_inventory_item_id ;
4141          l_assigned_subs   ( l_assigned_counter ) := l_subinventory  ;
4142          l_assigned_locs   ( l_assigned_counter ) := l_locator_id ;
4143          -- muom
4144          l_assigned_req_qty_uoms2   ( l_assigned_counter ) := l_requested_quantity_uom2;
4145          l_assigned_src_codes (l_assigned_counter) := l_source_code;
4146 
4147 	 -- Consolidation of BO Delivery Details project
4148   	 l_assigned_source_lines (l_assigned_counter) := l_source_line_id;
4149          /* H integration: 940/945 wrudge */
4150          l_assigned_source   ( l_assigned_counter ) := l_source_code;
4151 
4152       END IF ; -- If released_status not in ( 'X' , 'Y' )
4153 
4154      END LOOP ;-- for unassigning unreleased lines.
4155 
4156      close  detail_info  ;
4157 
4158      -- Added for Bug 3118519
4159      -- HW OPMCONV. Removed forking the code
4160 
4161      IF ( l_error_DFF) THEN
4162         --
4163         -- Debug Statements
4164         --
4165         IF l_debug_on THEN
4166            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF validation failed for delivery detail(s)',WSH_DEBUG_SV.C_PROC_LEVEL);
4167         END IF;
4168         --
4169         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4170         l_token := FND_MESSAGE.Get_String('WSH', 'WSH_DETAIL_DFF_TITLE');
4171 
4172         FND_MESSAGE.Set_Name('WSH', 'WSH_DFF_DETAIL_EMPTY');
4173         FND_MESSAGE.Set_Token('DFF_TITLE', l_token);
4174         FND_MESSAGE.Set_Token('DETAIL_IDS', l_invalid_details);
4175         WSH_UTIL_CORE.Add_Message(x_return_status);
4176 
4177         IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
4178            l_num_warn := l_num_warn;
4179         END IF;
4180 
4181         goto loop_end;
4182 
4183   END IF;
4184 
4185      -- 4. p_action_flag = O : If CYCLE COUNT all then cycle count all the reservations,
4186      -- backorder, clear inv controls and tracking number etc,
4187      -- unassign from delivery and close delivery, return
4188 
4189      IF (p_action_flag = 'O') THEN
4190 
4191                -- bug 2263249
4192                IF (l_wms_enabled_flag) THEN
4193                  --
4194                  -- Debug Statements
4195                  --
4196                  IF l_debug_on THEN
4197                      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4198                  END IF;
4199                  --
4200                  WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4201                    (p_delivery_id   => p_del_rows(i),
4202                     x_return_status => l_return_status,
4203                     x_msg_count     => l_msg_count,
4204                     x_msg_data      => l_msg_data
4205                                                                  );
4206                  IF (l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4207                    FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4208                    FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4209                    FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4210                    x_return_status := l_return_status;
4211                    wsh_util_core.add_message(x_return_status);
4212                    IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4213                        l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4214                    THEN
4215 
4216                      l_num_error := l_num_error + 1 ;
4217                    ELSE
4218                      l_num_warn := l_num_warn + 1 ;
4219                    END IF;
4220                  END IF;
4221                END IF;
4222                 -- end bug 2263249
4223 
4224         --
4225         -- Debug Statements
4226         --
4227         IF l_debug_on THEN
4228             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4229         END IF;
4230         --
4231 
4232 
4233 
4234         wsh_ship_confirm_actions2.backorder(
4235           p_detail_ids   => l_assigned_line_ids  ,
4236       	  p_line_ids	 => l_assigned_source_lines,	-- Consolidation of BO Delivery Details project
4237           p_bo_qtys => l_assigned_req_qtys ,   -- pass total requested_quantity for BO
4238           p_req_qtys     => l_assigned_req_qtys ,
4239           p_bo_qtys2     => l_assigned_req_qtys2 ,
4240           p_overpick_qtys  => l_assigned_overpick_qtys ,
4241           p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4242           p_sources        => l_assigned_source, -- RTV BO Cons Changes
4243           p_bo_mode    => 'CYCLE_COUNT' ,
4244           x_out_rows     => l_out_cc_rows ,
4245 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4246           x_return_status  => l_return_status);
4247 
4248         IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )
4249                     THEN
4250           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4251               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4252           THEN
4253                         l_num_error := l_num_error + 1 ;
4254                         goto confirm_error_no_msg;
4255           ELSE
4256             l_num_warn := l_num_warn + 1 ;
4257           END IF ;
4258         END IF ;
4259        -- 2131459 - remove goto update_delivery_status code
4260        l_unassign_all_flag_tab(i) := TRUE;
4261 
4262        -- 5. p_action_flag = C : If BACKORDER ALL then remove all reservations, clear inv controls and
4263        -- tracking number etc, unassign from delivery and close delivery, return
4264 
4265      ELSIF  ( p_action_flag = 'C' )  THEN
4266 
4267                -- bug 2263249
4268                IF (l_wms_enabled_flag) THEN
4269                    --
4270                    -- Debug Statements
4271                    --
4272                    IF l_debug_on THEN
4273                        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4274                    END IF;
4275                    --
4276                    WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4277                      (p_delivery_id   => p_del_rows(i),
4278                       x_return_status => l_return_status,
4279                       x_msg_count     => l_msg_count,
4280                       x_msg_data      => l_msg_data
4281                                                                  );
4282                    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4283                      FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4284                      FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4285                      FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4286                      x_return_status := l_return_status;
4287                      wsh_util_core.add_message(x_return_status);
4288                      IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4289                         l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4290                        l_num_error := l_num_error + 1 ;
4291                      ELSE
4292                        l_num_warn := l_num_warn + 1 ;
4293                      END IF;
4294                    END IF;
4295                  END IF;
4296                 -- end bug 2263249
4297 
4298         --
4299         -- Debug Statements
4300         --
4301         IF l_debug_on THEN
4302             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4303         END IF;
4304         --
4305 
4306         wsh_ship_confirm_actions2.backorder(
4307             p_detail_ids    => l_assigned_line_ids  ,
4308        	    p_line_ids	    => l_assigned_source_lines,	  -- Consolidation of BO Delivery Details project
4309             p_bo_qtys    => l_assigned_req_qtys ,   -- pass total requested_quantity for BO
4310             p_req_qtys    => l_assigned_req_qtys ,
4311             p_bo_qtys2    => l_assigned_req_qtys2 ,
4312             p_overpick_qtys   => l_assigned_overpick_qtys ,
4313             p_overpick_qtys2  => l_assigned_overpick_qtys2 ,
4314             p_sources         => l_assigned_source, -- RTV BO Cons Changes
4315             p_bo_mode    => 'UNRESERVE' ,
4316             x_out_rows    => l_out_bo_rows ,
4317 	    x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4318             x_return_status   => l_return_status);
4319 
4320         IF (l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4321           IF (l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4322               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4323                       THEN
4324             l_num_error := l_num_error + 1 ;
4325             goto confirm_error_no_msg;
4326           ELSE
4327             l_num_warn := l_num_warn + 1 ;
4328           END IF ;
4329         END IF ;
4330          --  2131459 - remove goto update_delivery_status code
4331         l_unassign_all_flag_tab(i) := TRUE;
4332 
4333      ELSE FOR j IN 1..l_assigned_line_ids.count LOOP
4334 
4335         -- 6a. p_action_flag = S : SHIP UNSPECIFIED QUANTITIES
4336         IF (p_action_flag = 'S') THEN
4337 
4338           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ),  l_assigned_pick_qtys( j ));
4339           l_shipped_quantity2 := nvl(l_assigned_shp_qtys2 ( j ), l_assigned_pick_qtys2( j ));
4340           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ) , 0);
4341           l_cycle_quantity2   := l_assigned_cc_qtys2( j ) ;
4342           l_bo_mode := 'UNRESERVE';
4343 
4344         -- 6b. p_action_flag = B : BACKORDER  UNSPECIFIED QUANTITIES
4345 
4346         ELSIF (p_action_flag = 'B') THEN
4347 
4348           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ) , 0);
4349           /* OPM BUG 2408223 - pupakare */
4350           l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4351           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ),  l_assigned_req_qtys ( j ) - l_shipped_quantity);
4352 -- HW OPMCONV - Added Qty2
4353           l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4354           /* End Bug 2408223 */
4355           l_bo_mode      := 'UNRESERVE' ;
4356 
4357         -- 6c. p_action_flag = L : CYCLE_COUNT  UNSPECIFIED QUANTITIES
4358 
4359         ELSIF (p_action_flag = 'L') THEN
4360 
4361           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ) , 0);
4362           /* OPM BUG 2408223 - pupakare */
4363           l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4364           l_cycle_quantity    := nvl(l_assigned_cc_qtys( j ) ,  l_assigned_req_qtys( j )  - l_shipped_quantity);
4365 -- HW OPMCONV - Added nvl to shipped_qty2
4366           l_cycle_quantity2   := nvl(l_assigned_cc_qtys2( j ),  l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4367           /* End Bug 2408223 */
4368                            IF l_debug_on THEN
4369             WSH_DEBUG_SV.push(l_module_name);
4370             --
4371             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4372             WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity2',l_shipped_quantity2);
4373             WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys2( j ',l_assigned_req_qtys2( j ));
4374             WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys2( j ));
4375 
4376             WSH_DEBUG_SV.push(l_module_name);
4377             --
4378             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4379             WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity',l_shipped_quantity2);
4380             WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys( j ',l_assigned_req_qtys( j ));
4381             WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys( j ));
4382 
4383 end if;
4384           if ( l_assigned_shp_qtys ( j ) is null  ) then
4385               l_bo_mode      := 'CYCLE_COUNT' ;
4386           else
4387               l_bo_mode      := 'UNRESERVE' ;
4388           end if ;
4389 
4390         -- 6d. p_action_flag = T : STAGE  UNSPECIFIED QUANTITIES
4391 
4392         ELSIF (p_action_flag = 'T') THEN
4393 
4394           l_shipped_quantity  := nvl(l_assigned_shp_qtys ( j ), 0);
4395           l_shipped_quantity2 := l_assigned_shp_qtys2 ( j );
4396           l_cycle_quantity  := nvl(l_assigned_cc_qtys( j ), 0);
4397           l_cycle_quantity2   := l_assigned_cc_qtys2( j ) ;
4398           l_bo_mode      := 'UNRESERVE' ;
4399 
4400         -- 6e. p_action_flag = A : SHIP ALL
4401 
4402         ELSIF (p_action_flag = 'A') THEN
4403           -- Bug 2112196 : If ship All , then don't update shipped_quantity if its being overshiped.
4404           l_shipped_quantity  :=  greatest ( nvl(l_assigned_shp_qtys ( j ), 0),
4405                      l_assigned_pick_qtys( j ));
4406           l_shipped_quantity2 :=  greatest ( nvl(l_assigned_shp_qtys2 ( j ), 0),
4407                      l_assigned_pick_qtys2( j ));
4408 
4409           l_cycle_quantity  := 0;
4410           -- HW BUG#:2005977 added cycle quantity2
4411           l_cycle_quantity2 := NULL;
4412 
4413         END IF;
4414 
4415         -- If line is overpicked, we need to backorder/cycle-count the unshipped picked quantity in
4416         -- excess of the requested quantity.
4417         -- Important: original value of req_qtys must be used before unassigning staged quantities.
4418         l_unshipped_pick_quantity  := l_assigned_pick_qtys( j )
4419                          - GREATEST(l_assigned_req_qtys( j ), l_shipped_quantity);
4420         l_unshipped_pick_quantity2 := l_assigned_pick_qtys2( j )
4421                          - GREATEST(l_assigned_req_qtys2( j ), l_shipped_quantity2);
4422 
4423 
4424         -- 7. Unassign staged lines (split if necessary, store delivery detail ids)
4425 
4426         -- because of overpicking/overshipping, both quantities should be at minimum 0.
4427         --   quantity (picked-requested) cannot be staged.
4428         l_stage_quantity  := GREATEST(l_assigned_req_qtys( j )  - l_shipped_quantity-l_cycle_quantity, 0);
4429         l_stage_quantity2 := GREATEST(l_assigned_req_qtys2( j ) - l_shipped_quantity2-l_cycle_quantity2, 0);
4430 
4431 -- HW Bug 3694454 For OPM if l_stage_quantity < .00001 due to small decimal mismatch in
4432 -- Requested Quantity and picked quantity then make both quantities zero.
4433 -- HW OPMCONV - Removed Branching
4434            IF (l_stage_quantity < .00001) THEN
4435               l_stage_quantity  := 0;
4436               l_stage_quantity2 := 0;
4437            END IF;
4438 
4439 -- End Bug 3694454
4440 
4441          -- muom
4442          IF l_debug_on THEN
4443              WSH_DEBUG_SV.logmsg(l_module_name,'l_stage_quantity '||l_stage_quantity||' l_stage_quantity2 '||l_stage_quantity2);
4444          END IF;
4445          l_fulfill_base := WSH_UTIL_CORE.Get_Line_Fulfillment_Base(l_assigned_src_codes(j), l_assigned_source_lines(j));
4446          -- When Fulfillment base is Secondary, the nothing should be Staged on Primary if there is nothing to be Staged on Secondary
4447          IF (l_stage_quantity > 0) and (nvl(l_stage_quantity2,0) <= 0) and (l_assigned_req_qty_uoms2(j) is not null) and
4448             (l_fulfill_base = 'S') THEN
4449            l_stage_quantity := 0;
4450            l_stage_quantity2 := 0;
4451          END IF;
4452 
4453         IF (l_stage_quantity > 0) THEN
4454          IF (l_stage_quantity =  l_assigned_req_qtys( j ) ) THEN
4455             l_staged_dd_id := l_assigned_line_ids( j );
4456          ELSE
4457               l_assigned_req_qtys( j ) := l_assigned_req_qtys( j ) - l_stage_quantity ;
4458               l_assigned_pick_qtys( j ):= l_assigned_pick_qtys( j ) - l_stage_quantity ;
4459               -- HW BUG#:2005977 added qty2 for OPM
4460               l_assigned_req_qtys2( j ) := l_assigned_req_qtys2( j ) - l_stage_quantity2 ;
4461               l_assigned_pick_qtys2( j ):= l_assigned_pick_qtys2( j ) - l_stage_quantity2 ;
4462 
4463           /* bug fix 1983460
4464           Now we pass a value 'Y' to the parameter 'p_manual_split' in the call
4465           to split_delivery_details. 'Y' is used only as a indicator to tell the
4466           split_delivery_details that the split call is for splitting the STAGED     quantity
4467           */
4468 
4469           --
4470           -- Debug Statements
4471           --
4472           IF l_debug_on THEN
4473               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
4474           END IF;
4475           --
4476           wsh_delivery_details_actions.split_delivery_details(
4477               p_from_detail_id => l_assigned_line_ids( j ),
4478               p_req_quantity   => l_stage_quantity,
4479               x_new_detail_id  => l_new_detail_id,
4480               x_return_status  => x_return_status,
4481               p_unassign_flag  => 'N',
4482               p_req_quantity2  => l_stage_quantity2,
4483               p_manual_split   => 'Y');
4484 
4485           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4486                 l_num_error := l_num_error + 1 ;
4487                 goto confirm_error;
4488           ELSE
4489             l_staged_dd_id := l_new_detail_id;
4490           END IF;
4491         END IF; -- if stage quantity = requested quantity
4492 
4493            /* H integration: 945 cancel staged wrudge */
4494            IF l_assigned_source( j ) = 'WSH' THEN
4495 
4496 -- Bug 2713285
4497 -- for cancelling any line in delivery thru Batch process
4498              IF l_batch_id IS NOT NULL THEN
4499                FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
4500                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4501                wsh_util_core.add_message(x_return_status);
4502                l_num_error := l_num_error + 1;
4503                goto confirm_error_no_msg;
4504              END IF;
4505 -- Bug 2713285
4506              l_cancel_line_ids ( l_cancel_line_ids.count+1) := l_staged_dd_id;
4507            ELSE
4508              l_stage_rows(l_stage_rows.count + 1) := l_staged_dd_id;
4509            END IF;
4510 
4511       END IF; -- (l_stage_quantity > 0)
4512 
4513         -- muom
4514         IF l_debug_on THEN
4515             WSH_DEBUG_SV.logmsg(l_module_name,'l_cycle_quantity '||l_cycle_quantity||' l_cycle_quantity2 '||l_cycle_quantity2);
4516         END IF;
4517         -- When Fulfillment base is Secondary, the nothing should be Backordered on Primary if there is nothing to be Backordered on Secondary
4518         IF (l_cycle_quantity > 0) and (nvl(l_cycle_quantity2,0) <= 0) and (l_assigned_req_qty_uoms2(j) is not null) and
4519            (l_fulfill_base = 'S') THEN
4520           l_cycle_quantity := 0;
4521           l_cycle_quantity2 := 0;
4522         END IF;
4523 
4524         -- Populate the tables to be passed as parameters for Backorder API.
4525 
4526         IF ( ( l_cycle_quantity > 0 )  OR  ( l_unshipped_pick_quantity > 0 ) )THEN
4527           if ( l_bo_mode = 'UNRESERVE') then
4528                  l_bo_rows ( l_bo_rows.count + 1  )   :=  l_assigned_line_ids ( j ) ;
4529 		 -- Consolidation of BO Delivery Details project
4530 		 l_bo_source_lines(l_bo_source_lines.count +1) := l_assigned_source_lines(j);
4531                  l_bo_qtys ( l_bo_qtys.count + 1  )   :=  l_cycle_quantity;
4532                  l_bo_req_qtys ( l_bo_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4533                  l_bo_overpick_qtys ( l_bo_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity;
4534                  l_bo_qtys2( l_bo_qtys2.count + 1  )   := l_cycle_quantity2 ;
4535                  l_bo_overpick_qtys2 ( l_bo_overpick_qtys2.count + 1 ):= l_unshipped_pick_quantity2;
4536                  l_bo_sources ( l_bo_sources.count + 1 ) := l_assigned_source( j ); -- RTV BO Cons Changes
4537           else
4538                  l_cc_rows ( l_cc_rows.count + 1  )   :=  l_assigned_line_ids ( j ) ;
4539 		 -- Consolidation of BO Delivery Details project
4540 		 l_cc_source_lines(l_cc_source_lines.count +1) := l_assigned_source_lines(j);
4541                  l_cc_qtys ( l_cc_qtys.count + 1  )   :=  l_cycle_quantity ;
4542                  l_cc_sources ( l_cc_sources.count + 1 ) := l_assigned_source(j); -- RTV BO Cons Changes
4543           IF l_debug_on THEN
4544             WSH_DEBUG_SV.push(l_module_name);
4545             --
4546             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4547           END IF;
4548 
4549                  l_cc_req_qtys ( l_cc_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4550                  l_cc_overpick_qtys ( l_cc_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity ;
4551 
4552                  l_cc_qtys2( l_cc_qtys2.count + 1  )   := l_cycle_quantity2 ;
4553                  IF l_debug_on THEN
4554             WSH_DEBUG_SV.push(l_module_name);
4555             --
4556             WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4557           END IF;
4558                  l_cc_overpick_qtys2( l_cc_overpick_qtys2.count + 1  )   := l_unshipped_pick_quantity2 ;
4559           end if ;
4560         END IF  ;
4561 
4562         IF (l_cycle_quantity <> l_assigned_req_qtys( j )) THEN
4563             l_backorder_all_flag := FALSE;
4564         END IF;
4565 
4566         IF ( l_shipped_quantity > 0 ) THEN
4567            l_shp_dd_ids( l_shp_dd_ids.count + 1 )     := l_assigned_line_ids( j );
4568            l_shp_dd_orgs( l_shp_dd_orgs.count + 1 )     := l_assigned_orgs( j );
4569            l_shp_dd_items( l_shp_dd_items.count + 1 )   := l_assigned_items( j );
4570            l_shp_dd_subs( l_shp_dd_subs.count + 1 )     := l_assigned_subs( j );
4571            l_shp_dd_locs( l_shp_dd_locs.count + 1 )     := l_assigned_locs( j );
4572            l_shp_dd_cont_ids ( l_shp_dd_cont_ids.count + 1 ) := l_assigned_cont_ids ( j );
4573            l_shp_dd_shipped_qtys ( l_shp_dd_shipped_qtys.count + 1 ) := l_shipped_quantity ;
4574            l_shp_dd_shipped_qtys2 ( l_shp_dd_shipped_qtys2.count + 1 ) := l_shipped_quantity2 ;
4575            l_shp_dd_cc_qtys ( l_shp_dd_cc_qtys.count + 1 ) := l_cycle_quantity ;
4576            l_shp_dd_cc_qtys2 ( l_shp_dd_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4577            l_shp_dd_req_qtys  ( l_shp_dd_req_qtys .count + 1 ) :=  l_assigned_req_qtys( j );
4578            /* H integration: 945 check detail  wrudge */
4579            l_shp_dd_source( l_shp_dd_source.count + 1)     := l_assigned_source( j );
4580         END IF ;
4581 
4582         /* LG new OPM -- OM changes*/
4583 
4584 -- HW OPMCONV. Removed forking the code
4585 
4586       END LOOP ; -- For all delivery details still assigned
4587 
4588      END IF ;  -- If P_action_flag
4589 
4590      -- 8. Update quantities based on p_action_flag for null values (shipped and cycle count)
4591 
4592      FORALL tmp_counter IN 1..l_shp_dd_ids.count
4593        UPDATE wsh_delivery_Details
4594        SET shipped_quantity  = l_shp_dd_shipped_qtys(tmp_counter),
4595            shipped_quantity2  = l_shp_dd_shipped_qtys2(tmp_counter),
4596            cycle_count_quantity = l_shp_dd_cc_qtys(tmp_counter),
4597            cycle_count_quantity2 = l_shp_dd_cc_qtys2(tmp_counter)
4598        WHERE  delivery_detail_id = l_shp_dd_ids(tmp_counter);
4599 
4600      IF (p_action_flag = 'A') THEN --bugfix 4070732
4601      --{
4602          -- J: W/V Changes
4603          -- Recalculate the W/V as the quantities would have changed
4604          FOR tmp_counter IN 1..l_shp_dd_ids.count LOOP
4605            IF l_debug_on THEN
4606              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
4607            END IF;
4608 
4609            WSH_WV_UTILS.Detail_Weight_Volume(
4610              p_delivery_detail_id => l_shp_dd_ids(tmp_counter),
4611              p_update_flag        => 'Y',
4612              p_post_process_flag  => 'Y',
4613              p_calc_wv_if_frozen  => 'N',
4614              x_net_weight         => l_net_weight,
4615              x_volume             => l_volume,
4616              x_return_status      => l_return_status);
4617 
4618            IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
4619              x_return_status := l_return_status;
4620              IF l_debug_on THEN
4621                WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
4622                WSH_DEBUG_SV.pop(l_module_name);
4623              END IF;
4624              return;
4625            END IF;
4626          END LOOP;
4627 
4628      --}
4629      END IF;
4630 
4631      -- HW Added fix from bug 2024384 to NULL SHIPPED_QUANTITY(S) and
4632      -- CYCLE_COUNT_QUANTITY(S)
4633 
4634      -- csun, Bug 2823512, if the transaction_temp_id is not NULL
4635      -- set the shipped_quantity to be requested_quantity
4636 
4637      FORALL tmp_counter IN 1..l_stage_rows.count
4638        UPDATE WSH_DELIVERY_DETAILS
4639        SET  -- TRACKING_NUMBER = NULL, Bug# 3632485
4640             SHIPPED_QUANTITY = DECODE (SERIAL_NUMBER, NULL,
4641                                        DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY),
4642                                        PICKED_QUANTITY),
4643             SHIPPED_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4644                                        DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY2),
4645                                        PICKED_QUANTITY2),
4646             CYCLE_COUNT_QUANTITY = DECODE (SERIAL_NUMBER, NULL ,
4647                                            DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0) , 0),
4648             CYCLE_COUNT_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4649                                            DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0), 0)
4650        WHERE  DELIVERY_DETAIL_ID = l_stage_rows(tmp_counter);
4651 
4652      -- J: W/V Changes
4653      -- Recalculate the W/V as the quantities would have changed with the above update
4654 
4655 
4656      -- 10. Backorder quantities and unassign(split if necessary)
4657 
4658      IF (l_cc_rows.count > 0 ) THEN
4659 
4660          --
4661          -- Debug Statements
4662          --
4663          IF l_debug_on THEN
4664              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4665          END IF;
4666          --
4667 
4668          wsh_ship_confirm_actions2.backorder(
4669           p_detail_ids => l_cc_rows ,
4670       	  p_line_ids   => l_cc_source_lines,  -- Consolidation of BO Delivery Details project
4671           p_bo_qtys => l_cc_qtys ,
4672           p_req_qtys   => l_cc_req_qtys ,
4673           p_bo_qtys2   => l_cc_qtys2 ,
4674           p_overpick_qtys   => l_cc_overpick_qtys ,
4675           p_overpick_qtys2  => l_cc_overpick_qtys2 ,
4676           p_sources         => l_cc_sources, -- RTV BO Cons Changes
4677           p_bo_mode => 'CYCLE_COUNT' ,
4678           x_out_rows  => l_out_bo_rows ,
4679 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4680           x_return_status  => l_return_status);
4681 
4682           IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4683              IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4684             l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4685               l_num_error := l_num_error + 1 ;
4686               goto confirm_error_no_msg;
4687              ELSE
4688                l_num_warn := l_num_warn + 1 ;
4689              END IF ;
4690           END IF ;
4691 
4692     END IF;
4693 
4694      IF (l_bo_rows.count > 0 ) THEN
4695 
4696          --
4697          -- Debug Statements
4698          --
4699          IF l_debug_on THEN
4700              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4701          END IF;
4702          --
4703 
4704          wsh_ship_confirm_actions2.backorder(
4705           p_detail_ids => l_bo_rows ,
4706        	  p_line_ids   => l_bo_source_lines,  -- Consolidation of BO Delivery Details project
4707           p_bo_qtys => l_bo_qtys ,
4708           p_req_qtys   => l_bo_req_qtys ,
4709           p_bo_qtys2   => l_bo_qtys2 ,
4710           p_overpick_qtys  => l_bo_overpick_qtys ,
4711           p_overpick_qtys2 => l_bo_overpick_qtys2 ,
4712           p_sources        => l_bo_sources, -- RTV BO Cons ChangeS
4713           p_bo_mode => 'UNRESERVE' ,
4714           x_out_rows  => l_out_cc_rows ,
4715 	  x_cons_flags   => l_cons_flags,               -- Consolidation of BO Delivery Details project
4716           x_return_status  => l_return_status);
4717 
4718           IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4719              IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
4720               l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
4721               l_num_error := l_num_error + 1 ;
4722               goto confirm_error_no_msg;
4723              ELSE
4724                l_num_warn := l_num_warn + 1 ;
4725              END IF ;
4726           END IF ;
4727 
4728     END IF;
4729 
4730 
4731 
4732     -- 11  Check for holds and inventory controls of details to be shipped
4733 
4734     FOR dd_count IN 1..l_shp_dd_ids.count LOOP
4735 
4736       dft_subinv := NULL;
4737       dft_loc_id := NULL;
4738 
4739       --
4740       -- Debug Statements
4741       --
4742       IF l_debug_on THEN
4743           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DETAIL_FOR_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
4744       END IF;
4745       --
4746       WSH_DELIVERY_VALIDATIONS.check_detail_for_confirm
4747           ( p_detail_id   => l_shp_dd_ids(dd_count),
4748             p_check_credit_init_flag => l_check_credit_init_flag, -- bug 2343058
4749             x_line_inv_flag_rec => l_inv_controls_rec,
4750             x_return_status => l_return_status);
4751 
4752       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4753         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4754            l_num_error := l_num_error + 1;
4755            raise ship_confirm_error;
4756         /* H integration: 945 check detail wrudge */
4757         ELSIF l_shp_dd_source(dd_count) = 'WSH' THEN
4758         /* new message: WSH_DEL_WSH_LINE_ERROR, token DEL_NAME  */
4759           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_WSH_LINE_ERROR');
4760           --
4761           -- Debug Statements
4762           --
4763           IF l_debug_on THEN
4764               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4765           END IF;
4766           --
4767           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
4768           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
4769           l_num_error := l_num_error + 1;
4770           goto confirm_error_no_msg;
4771         ELSE
4772 -- Bug 2713285
4773 -- for inventory control items, lines are unassigned from Delivery
4774 -- thru batch process
4775           IF l_batch_id IS NOT NULL THEN
4776 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4777 	    IF l_inv_controls_rec.details_required_flag='Y' THEN --Bug 3773225
4778                FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_REQUIRED');
4779                wsh_util_core.add_message(x_return_status);
4780 	    ELSIF l_inv_controls_rec.invalid_material_status_flag='Y' THEN --Material Status Impact
4781                FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_MATERIAL_STATUS');
4782                wsh_util_core.add_message(x_return_status);
4783             END IF;
4784 	    l_num_error := l_num_error + 1;
4785             goto confirm_error_no_msg;
4786           END IF;
4787 -- Bug 2713285
4788 
4789           l_unassign_dds(l_unassign_dds.count + 1) := l_shp_dd_ids(dd_count);
4790   	  l_unassign_rel_status(l_unassign_rel_status.count + 1) := 'Y';
4791  	  l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id;  -- Bug#3246327
4792           l_num_warn := l_num_warn + 1;
4793 
4794           /* Bug fix 2850555
4795           Need to set l_inv_cntrl_flag to FALSE ONLY when details_required_flag
4796           is set to Y by 'check_detail_for_confirm' procedure.
4797           Reason: For cases where inv controls are not really required, like
4798           the bug case where only HOLDS are a problem, l_inv_cntrl_flag
4799           should NOT be set to FALSE
4800           */
4801 
4802           if l_debug_on then
4803              wsh_debug_sv.log(l_module_name, 'l_inv_controls_rec.details_required_flag', l_inv_controls_rec.details_required_flag);
4804           end if;
4805 
4806           if nvl(l_inv_controls_rec.details_required_flag, 'N') = 'Y' then
4807              l_inv_cntrl_flag := FALSE;
4808              -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4809              -- l_unassign_dds can be used all because it could contain unreleased lines.
4810              l_inv_ctrl_dd_count := l_inv_ctrl_dd_count + 1;
4811              IF ( l_inv_ctrl_dd_count = 1 ) THEN
4812                 l_inv_ctrl_dd_ids := l_unassign_dds(l_unassign_dds.count);
4813              ELSIF ( l_inv_ctrl_dd_count <= 5 ) THEN
4814                 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4815              ELSIF ( l_more_dd_flag ) THEN
4816                 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ',..';
4817                 l_more_dd_flag := FALSE;
4818              END IF;
4819              -- end bug 2283621
4820           /***************************Material Status Project***************************************/
4821           ELSIF nvl(l_inv_controls_rec.invalid_material_status_flag, 'N') = 'Y' then
4822              l_inv_material_flag := FALSE;
4823              -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4824              -- l_unassign_dds can be used all because it could contain unreleased lines.
4825              l_inv_material_dd_count := l_inv_material_dd_count + 1;
4826              IF ( l_inv_material_dd_count = 1 ) THEN
4827                 l_inv_material_dd_ids := l_unassign_dds(l_unassign_dds.count);
4828              ELSIF ( l_inv_material_dd_count <= 5 ) THEN
4829                 l_inv_material_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4830              ELSIF ( l_more_material_dd_flag ) THEN
4831                 l_inv_material_dd_ids := l_inv_material_dd_ids || ',..';
4832                 l_more_material_dd_flag := FALSE;
4833              END IF;
4834           /***************************Material Status Project***************************************/
4835           end if;
4836 
4837           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
4838         END IF;
4839       ELSE
4840         l_unassign_all_flag_tab(i) := FALSE ;
4841 
4842         IF (l_shp_dd_cont_ids(dd_count) IS NULL) THEN
4843           l_unpacked_flag := TRUE;
4844         ELSE
4845 -- Bug 2878538
4846 -- Cont exists flag should be set even if there is 1 container
4847 -- else it will be FALSE by default
4848           l_cont_exists_flag := TRUE;
4849         END IF; -- (if container_id IS NULL)
4850 
4851        END IF; -- (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
4852 
4853        -- bug 2320388
4854        l_check_credit_init_flag := FALSE;
4855 
4856        -- Need to do this for non-transactable items to get default sub and loc
4857 
4858        IF (l_shp_dd_subs ( dd_count ) IS NULL) THEN
4859          --
4860          -- Debug Statements
4861          --
4862          IF l_debug_on THEN
4863              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_SUBINVENTORY',WSH_DEBUG_SV.C_PROC_LEVEL);
4864          END IF;
4865          --
4866          WSH_DELIVERY_DETAILS_INV.Default_Subinventory ( l_shp_dd_orgs ( dd_count ),
4867                                  l_shp_dd_items( dd_count ),
4868                                  dft_subinv,
4869                                  x_return_status);
4870          IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
4871           raise ship_confirm_error;
4872          END IF;
4873 
4874        END IF;
4875 
4876        -- Removed Details_required from here , because it was already called in
4877        -- check_detail_for_confirm.
4878 
4879        IF ((NVL(l_shp_dd_subs ( dd_count ),dft_subinv) IS NOT NULL) AND (l_shp_dd_locs ( dd_count ) IS NULL)) THEN
4880            --
4881            -- Debug Statements
4882            --
4883            IF l_debug_on THEN
4884                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_ORG_LOC',WSH_DEBUG_SV.C_PROC_LEVEL);
4885            END IF;
4886            --
4887            org_loc_ctl := WSH_DELIVERY_DETAILS_INV.Get_Org_Loc (l_shp_dd_orgs ( dd_count ));
4888 
4889            --
4890            -- Debug Statements
4891            --
4892            IF l_debug_on THEN
4893                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.SUB_LOC_CTL',WSH_DEBUG_SV.C_PROC_LEVEL);
4894            END IF;
4895            --
4896            sub_loc_ctl := WSH_DELIVERY_DETAILS_INV.Sub_Loc_Ctl (
4897                       nvl(l_shp_dd_subs ( dd_count ),dft_subinv),
4898                       l_shp_dd_orgs ( dd_count ));
4899 
4900            item_loc_ctl := l_inv_controls_rec.location_control_code;
4901            --
4902            -- Debug Statements
4903            --
4904            IF l_debug_on THEN
4905                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.LOCATOR_CTL_CODE',WSH_DEBUG_SV.C_PROC_LEVEL);
4906            END IF;
4907            --
4908            loc_ctl_code := WSH_DELIVERY_DETAILS_INV.Locator_Ctl_Code(
4909                              l_shp_dd_orgs ( dd_count ),
4910                              l_inv_controls_rec.restrict_loc,
4911                              org_loc_ctl,
4912                              sub_loc_ctl,
4913                              item_loc_ctl);
4914 
4915            IF ( loc_ctl_code <> 1 ) THEN
4916                IF ( l_inv_controls_rec.restrict_loc = 1) THEN
4917                  loc_restricted_flag := 'Y';
4918                ELSE
4919                  loc_restricted_flag := 'N';
4920                END IF;
4921 
4922                --
4923                -- Debug Statements
4924                --
4925                IF l_debug_on THEN
4926                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_LOCATOR',WSH_DEBUG_SV.C_PROC_LEVEL);
4927                END IF;
4928                --
4929                dft_loc_id := WSH_DELIVERY_DETAILS_INV.Default_Locator (
4930                                      l_shp_dd_orgs ( dd_count ),
4931                                      l_shp_dd_items ( dd_count ),
4932                                      NVL(l_shp_dd_subs ( dd_count ), dft_subinv),
4933                                      loc_restricted_flag);
4934            END IF;
4935 
4936            -- performance bug 5257207: SC-13, do this update only when needed.
4937            IF    (l_shp_dd_subs(dd_count) IS NULL AND dft_subinv IS NOT NULL)
4938               OR (dft_loc_id IS NOT NULL) THEN
4939              IF l_debug_on THEN
4940                 WSH_DEBUG_SV.logmsg(l_module_name, 'updating subinv/locator');
4941                 WSH_DEBUG_SV.log(l_module_name, 'dft_subinv', dft_subinv);
4942                 WSH_DEBUG_SV.log(l_module_name, 'dft_loc_id', dft_loc_id);
4943              END IF;
4944              update wsh_delivery_details set
4945                subinventory      = NVL(subinventory, dft_subinv),
4946                locator_id        = NVL(locator_id,   dft_loc_id)
4947              where delivery_detail_id = l_shp_dd_ids ( dd_count );
4948            END IF;
4949 
4950        END IF;
4951        -- End for non-transactable items
4952 
4953     END LOOP ;
4954 
4955     IF (NOT l_inv_cntrl_flag) THEN
4956         IF l_debug_on THEN
4957            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4958         End If;
4959         If g_missing_inv_severity is null then
4960            g_missing_inv_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
4961                                                                          ,wsh_new_delivery_actions.g_missing_inv_cntl_msg);
4962         End If;
4963 
4964         -- bug 2283621 - pass the l_inv_ctrl_dd_ids to the warning message
4965         IF l_debug_on THEN
4966            WSH_DEBUG_SV.log(l_module_name,'l_inv_ctrl_dd_ids - '|| l_inv_ctrl_dd_ids);
4967            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4968         END IF;
4969 
4970         If g_missing_inv_severity = 'E' then
4971             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4972             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4973             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4974             wsh_util_core.add_message(x_return_status);
4975             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4976             l_num_error := l_num_error + 1;
4977             goto confirm_error_no_msg;
4978         Else
4979             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4980             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4981             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4982             wsh_util_core.add_message(x_return_status);
4983             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4984         End If;
4985     END IF;
4986     /***************************Material Status Project***************************************/
4987     IF (NOT l_inv_material_flag) THEN
4988         IF l_debug_on THEN
4989            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4990         End If;
4991         If g_missing_inv_severity is null then
4992            g_missing_inv_severity := wsh_ru_actions.get_message_severity (
4993                                        wsh_new_delivery_actions.g_ship_confirm_act,
4994                                        wsh_new_delivery_actions.g_invalid_material_status_msg);
4995         End If;
4996 
4997         IF l_debug_on THEN
4998            WSH_DEBUG_SV.log(l_module_name,'l_inv_material_dd_ids - '|| l_inv_material_dd_ids);
4999            WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
5000         END IF;
5001 
5002         If g_missing_inv_severity = 'E' then
5003             FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
5004             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
5005             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5006             wsh_util_core.add_message(x_return_status);
5007             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5008             l_num_error := l_num_error + 1;
5009             goto confirm_error_no_msg;
5010         Else
5011             FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
5012             FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
5013             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5014             wsh_util_core.add_message(x_return_status);
5015             WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5016         End If;
5017     END IF;
5018     /***************************Material Status Project***************************************/
5019 
5020     --
5021     -- Debug Statements
5022     --
5023     IF l_debug_on THEN
5024         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_RELEASED_LINES',WSH_DEBUG_SV.C_PROC_LEVEL);
5025     END IF;
5026     --
5027     wsh_tpa_delivery_pkg.check_released_lines(
5028         p_del_rows(i), l_unassign_dds.count,
5029         l_detail_num-l_unassign_dds.count, l_return_status);
5030 
5031     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
5032       IF ( l_return_status =  WSH_UTIL_CORE.G_RET_STS_ERROR OR
5033         l_return_status =  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
5034         l_num_error := l_num_error + 1 ;
5035       ELSE
5036         l_num_warn := l_num_warn + 1 ;
5037       END IF ;
5038       goto loop_end ;
5039     END IF ;
5040 
5041 
5042     -- Consolidation of BO Delivery Details project.
5043     -- At this point of time, some of the dd_ids in l_unassign_dds with released_status as 'B'
5044     -- might have been deleted by wsh_ship_confirm_actions2.backorder api.
5045     -- So checking whether dd_ids to be unassigned are already deleted.
5046     -- Do this only if there are lines to be unassigned AND there is atleast one delivery line BackOrdered.
5047     -- Begin
5048     IF (l_unassign_dds.COUNT > 0 AND (l_out_bo_rows.count > 0 OR l_out_cc_rows.count > 0)) THEN
5049     -- --{
5050 	--
5051 	-- Debug Statements
5052 	--
5053         -- Shifted code to obtain Global parameters outside the Deliveries loop ***
5054 
5055         IF l_debug_on THEN
5056              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);
5057         END IF;
5058 
5059         IF (l_global_parameters.consolidate_bo_lines = 'Y') THEN
5060 	-- --{
5061 	   -- l_out_bo_rows contains list of dd_ids that were Backordered
5062 	   -- l_out_cc_rows contains list of dd_ids that were Cycle Count
5063            IF (l_out_bo_rows.count > 0) THEN
5064 	      l_unassign_backordered_dds := l_out_bo_rows;
5065 	   ELSIF (l_out_cc_rows.count > 0) THEN
5066 	      l_unassign_backordered_dds := l_out_cc_rows;
5067 	   END IF;
5068 
5069 	   -- Bug#3246327
5070 	   --
5071 	   -- Store backordered order line ids in the pl/sql table l_bo_line_ids
5072 	   IF (l_bo_source_lines.count > 0) THEN
5073 		l_bo_line_ids := l_bo_source_lines; -- Assign the partial backordered soure lines to l_bo_line_ids
5074 	   ELSIF (l_cc_source_lines.count > 0 ) THEN -- Assign the partial cycle-count soure lines to l_bo_line_ids
5075 		l_bo_line_ids := l_cc_source_lines;
5076 	   ELSIF (l_assigned_source_lines.count > 0) THEN -- Assign the completely backordered or cycle-counted lines
5077                 l_bo_line_ids := l_assigned_source_lines;
5078  	   END IF;
5079 
5080 	   -- Bug#3317692
5081 	   -- Compare l_unassign_source_lines and l_bo_line_ids and
5082 	   -- delete the entry in l_unassign_source_lines if it is not there in l_bo_line_ids.
5083 	   -- These changes are done to restrict the filtering of l_unassign_dds only
5084 	   -- if the corresponding line is backordered.
5085 	   l_idx := l_unassign_source_lines.FIRST;
5086 	   WHILE l_idx IS NOT NULL LOOP
5087 	   -- --{
5088 	         l_flag := 'N';
5089 	         l_cmp_idx := l_bo_line_ids.FIRST;
5090 	         WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5091                    IF (l_unassign_source_lines(l_idx) = l_bo_line_ids(l_cmp_idx)) THEN
5092 	 	     l_flag := 'Y';
5093    	             EXIT;
5094 	           END IF;
5095 		   l_cmp_idx := l_bo_line_ids.NEXT(l_cmp_idx);
5096 	         END LOOP;  -- --}
5097 	         IF l_flag = 'N' THEN
5098   	           l_unassign_source_lines.DELETE(l_idx);
5099                  END IF;
5100 	      l_idx := l_unassign_source_lines.NEXT(l_idx);
5101 	   END LOOP;  -- --}
5102 	   --
5103 
5104 	   l_idx := l_unassign_dds.FIRST;
5105 	   WHILE l_idx IS NOT NULL LOOP
5106 	   -- --{
5107 	   -- Loop thru' l_unassign_dds and check whether delivery_detail_id exists
5108 	   -- in l_unassign_backordered_dds, if NOT then Delete that dd_id from l_unassign_dds because
5109 	   -- it must already be physically deleted by the backorder API.
5110    	   -- [ This check should happen for dd_ids in l_unassign_dds, ONLY if the released_status is 'B'
5111 	   -- and if the dd_id is under the backordered source line ]
5112 	   -- Filter l_unassign_dds only if the corresponding Order line is backordered. ie., l_unassign_source_lines.EXISTS
5113 	      IF (l_unassign_source_lines.EXISTS(l_idx) AND l_unassign_rel_status(l_idx) = 'B') THEN --{
5114     	         l_flag := 'N';
5115 	         l_cmp_idx := l_unassign_backordered_dds.FIRST;
5116 	         WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5117                    IF (l_unassign_dds(l_idx) = l_unassign_backordered_dds(l_cmp_idx)) THEN
5118 	 	     l_flag := 'Y';
5119    	             EXIT;
5120 	           END IF;
5121 		   l_cmp_idx := l_unassign_backordered_dds.NEXT(l_cmp_idx);
5122 	         END LOOP;  -- --}
5123 	         IF l_flag = 'N' THEN
5124   	           l_unassign_dds.DELETE(l_idx);
5125                  END IF;
5126 	      END IF; --},  l_unassign_rel_status(l_idx) = 'B'
5127 	      l_idx := l_unassign_dds.NEXT(l_idx);
5128 	   END LOOP;  -- --}
5129 	   -- Now, l_unassign_dds contains only the not-deleted dd_ids.
5130 
5131 	   l_unassign_backordered_dds.DELETE;
5132 	   j := l_unassign_dds.FIRST;
5133 	   -- Following loop just puts the dd_ids in contiguous locations in the pl/sql table
5134 	   WHILE j IS NOT NULL LOOP
5135 	    	l_unassign_backordered_dds(l_unassign_backordered_dds.count+1) := l_unassign_dds(j);
5136 	        j := l_unassign_dds.NEXT(j);
5137 	   END LOOP;
5138 	   l_unassign_dds.DELETE;
5139 	   l_unassign_dds := l_unassign_backordered_dds;
5140 	END IF; -- --}, l_global_parameters.consolidate_bo_lines
5141     END IF;  -- --}, l_unassign_dds.count > 0
5142     -- End, Consolidation of BO Delivery Details project
5143 
5144     --
5145     -- Debug Statements
5146     --
5147     IF l_debug_on THEN
5148        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5149     END IF;
5150 
5151     -- Unassign the lines marked for unassigning.
5152     WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5153                           p_ids_tobe_unassigned  => l_unassign_dds ,
5154                           p_validate_flag        => 'N', -- want it to succeed in case of Planned Deliveries
5155                           x_return_status        => l_return_status
5156                          );
5157 
5158     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5159                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5160     THEN
5161       x_return_status := l_return_status;
5162       l_num_error := l_num_error + 1 ;
5163       goto loop_end;
5164     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5165       l_num_warn := l_num_warn + 1;
5166     END IF;
5167 
5168     --
5169     -- Debug Statements
5170     --
5171     IF l_debug_on THEN
5172        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.CONT_TOBE_UNASSIGNED',WSH_DEBUG_SV.C_PROC_LEVEL);
5173     END IF;
5174     -- Identify the Staged Lines or Containers to be Unassigned from the Delivery
5175     Cont_ToBe_Unassigned ( p_staged_lines    => l_stage_rows,
5176                            x_unassigned_cont => x_unassigned_cont,
5177                            x_return_status   => l_return_status
5178                          );
5179 
5180     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5181                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5182     THEN
5183       x_return_status := l_return_status;
5184       wsh_util_core.add_message(x_return_status);
5185       l_num_error := l_num_error + 1 ;
5186       goto loop_end;
5187     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5188       l_num_warn := l_num_warn + 1;
5189     END IF;
5190 
5191     --
5192     -- Debug Statements
5193     --
5194     IF l_debug_on THEN
5195        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5196     END IF;
5197     -- Unassign Containers or Staged Lines using new API
5198     WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5199                           p_ids_tobe_unassigned => x_unassigned_cont ,
5200                           p_validate_flag   => 'N', -- want it to succeed for Planned Deliveries too
5201                           x_return_status   => l_return_status
5202                          );
5203 
5204     IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5205                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5206     THEN
5207       x_return_status := l_return_status;
5208       l_num_error := l_num_error + 1 ;
5209       goto loop_end;
5210     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5211       l_num_warn := l_num_warn + 1;
5212     END IF;
5213 
5214     /* H integration: 945 cancel staged/unreleased */
5215     -- Cancel/delete lines marked for cancelling
5216     IF l_cancel_line_ids.count > 0 THEN
5217       --
5218       -- Debug Statements
5219       --
5220       IF l_debug_on THEN
5221           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE.DELETE_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
5222       END IF;
5223       --
5224       wsh_interface.delete_details(
5225         p_details_id     => l_cancel_line_ids,
5226         x_return_status   => l_return_status);
5227 
5228       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5229       /* new message: WSH_DEL_CANCEL_DET_ERROR, token DEL_NAME */
5230         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5231         --
5232         -- Debug Statements
5233         --
5234         IF l_debug_on THEN
5235             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5236         END IF;
5237         --
5238         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5239         x_return_status := l_return_status;
5240         wsh_util_core.add_message(x_return_status);
5241         l_num_error := l_num_error + 1 ;
5242         goto loop_end;
5243       END IF;
5244     END IF;
5245 
5246     -- Bug 5584951: Moved the call to after the call to unassign details.
5247 
5248     FOR tmp_counter IN 1..l_stage_rows.count LOOP
5249        IF l_debug_on THEN
5250          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
5251        END IF;
5252 
5253        WSH_WV_UTILS.Detail_Weight_Volume(
5254          p_delivery_detail_id => l_stage_rows(tmp_counter),
5255          p_update_flag        => 'Y',
5256          p_post_process_flag  => 'Y',
5257          p_calc_wv_if_frozen  => 'N',
5258          x_net_weight         => l_net_weight,
5259          x_volume             => l_volume,
5260          x_return_status      => l_return_status);
5261         IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
5262           x_return_status := l_return_status;
5263           IF l_debug_on THEN
5264             WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
5265             WSH_DEBUG_SV.pop(l_module_name);
5266           END IF;
5267           return;
5268         END IF;
5269       END LOOP;
5270 
5271     -- Bug 2527887 : Moved this call after unassigning detail lines from delivery since the check will not work
5272     -- if the pending overpick lines are still assigned to the delivery
5273     -- 10.5 Make sure no source lines with at total requested qty of zero are shipped or left behind
5274 
5275     --
5276     -- Debug Statements
5277     --
5278     IF l_debug_on THEN
5279         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_ZERO_REQ_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5280     END IF;
5281     --
5282     WSH_DETAILS_VALIDATIONS.check_zero_req_confirm(p_delivery_id => p_del_rows(i),
5283                                                    x_return_status => l_return_status);
5284 
5285     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
5286        x_return_status := l_return_Status ;
5287        --wsh_util_core.add_message(x_return_status);
5288        l_delivery_id := p_del_rows(i);
5289        goto confirm_error_no_msg;
5290     END IF;
5291 
5292 
5293     -- Code Shifted from below 12. *** to here, since this is a mandatory step now - Workflow Changes
5294     IF l_debug_on THEN
5295         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.GET',WSH_DEBUG_SV.C_PROC_LEVEL);
5296     END IF;
5297     --
5298     WSH_SHIPPING_PARAMS_PVT.Get(
5299             p_organization_id => l_organization_id,
5300             x_param_info    => l_param_info,
5301             x_return_status   => l_return_status
5302      );
5303 
5304 
5305      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5306        FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
5307        --
5308        -- Debug Statements
5309        --
5310        IF l_debug_on THEN
5311            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.GET_ORG_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5312        END IF;
5313        --
5314        FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
5315                      wsh_util_core.get_org_name(l_organization_id));
5316        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5317        wsh_util_core.add_message(x_return_status);
5318                          WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5319        goto confirm_error;
5320      END IF;
5321      --/== Workflow Changes
5322      l_enable_sc_wf := 'N';  --Workflow Changes
5323      l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
5324      --
5325      -- Debug Statements
5326      --
5327      IF l_debug_on THEN
5328          WSH_DEBUG_SV.log(l_module_name,'l_override_wf',l_override_wf);
5329          WSH_DEBUG_SV.log(l_module_name,'l_param_info.Enable_sc_wf',l_param_info.Enable_sc_wf);
5330          WSH_DEBUG_SV.log(l_module_name,'l_global_parameters.Enable_sc_wf',l_global_parameters.Enable_sc_wf);
5331          WSH_DEBUG_SV.log(l_module_name,'l_global_parameters.allow_future_ship_date',l_global_parameters.allow_future_ship_date);
5332      END IF;
5333      --
5334      IF  (l_param_info.Enable_sc_wf = 'Y' AND l_global_parameters.Enable_sc_wf = 'Y' AND nvl(l_override_wf,'N') = 'N') THEN
5335          -- Bug 8555654 : Should not start the workflow if ship confirm is going to fail due to actual dep. date validation.
5336          IF ( (nvl(p_actual_dep_date,sysdate) > sysdate)
5337               AND (nvl(l_global_parameters.allow_future_ship_date, 'N') = 'N')
5338               AND (p_intransit_flag = 'Y' OR p_close_flag = 'Y')  ) THEN
5339          --{
5340              l_enable_sc_wf := 'N';
5341          ELSE
5342              l_enable_sc_wf := 'Y';
5343          --}
5344          END IF;
5345          -- Bug 8555654 : : End
5346      END IF;
5347      -- Debug Statements
5348      --
5349      IF l_debug_on THEN
5350          WSH_DEBUG_SV.log(l_module_name,'l_enable_sc_wf',l_enable_sc_wf);
5351      END IF;
5352      --
5353      --==/
5354 
5355 
5356      -- 9. If p_stage_del_flag= 'Y' then create deliveries for the stored delivery details above
5357 
5358      IF (p_stage_del_flag = 'Y') AND (l_stage_rows.count > 0) THEN
5359       --
5360       -- Debug Statements
5361       --
5362       IF l_debug_on THEN
5363           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.AUTOCREATE_DELIVERIES',WSH_DEBUG_SV.C_PROC_LEVEL);
5364       END IF;
5365       --
5366       wsh_delivery_autocreate.autocreate_deliveries(
5367       p_line_rows    => l_stage_rows ,
5368       p_init_flag   => 'Y' ,
5369       p_pick_release_flag => 'N' ,
5370       p_container_flag  => 'N' ,
5371       p_check_flag    => 'N' ,
5372       p_max_detail_commit => 1000,
5373       x_del_rows     => l_dummy_rows ,
5374       x_grouping_rows      => l_dummy_rows ,
5375       x_return_status  => l_return_status  ) ;
5376 
5377       IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5378        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5379        l_num_warn := l_num_warn + 1;
5380       ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5381        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5382        l_num_error := l_num_error + 1;
5383       END IF;
5384 
5385       --deliveryMerge
5386       IF l_debug_on THEN
5387           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag',WSH_DEBUG_SV.C_PROC_LEVEL);
5388       END IF;
5389       WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag(
5390             p_delivery_ids          => l_dummy_rows,
5391             p_caller                => 'WSH_DLMG',
5392             p_force_appending_limit => 'N',
5393             p_call_lcss             => 'Y',
5394             p_event                 => NULL,
5395             x_return_status         => l_return_status);
5396 
5397       IF l_debug_on THEN
5398        WSH_DEBUG_SV.log(l_module_name,'Adjust_Planned_Flag l_return_status',l_return_status);
5399       END IF;
5400 
5401       IF x_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5402         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5403         l_num_warn := l_num_warn + 1;
5404       ELSIF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
5405         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5406         l_num_error := l_num_error + 1;
5407       END IF;
5408 
5409 
5410      END IF;
5411 
5412     -- Bug 1729723 : Updating number_of_lpn for delivery , 1672188 : now doing it after unassignments.
5413 
5414     l_number_of_lpn(i)    := NULL;
5415     OPEN number_of_lpn(p_del_rows(i));
5416     FETCH number_of_lpn into l_number_of_lpn (i) ;
5417     CLOSE number_of_lpn;
5418 
5419 
5420     -- Check that all overpicked lines for  one source line are in the same delivery,
5421     -- so that we can guarantee that these lines will get interfaced to OM.
5422     -- we might look up CURSOR overpicked_outside_delivery( v_delivery_id in number ) or have new API...
5423 
5424     -- 12.  Calculate Weight volume etc
5425     --
5426     -- Debug Statements
5427     --
5428     --- Code to obtain Shipping parameters shifted from here *** - Workflow Changes
5429      l_enforce_packing_flag := l_param_info.enforce_packing_flag;
5430 
5431      -- Pack J, ITM -- Check if delivery needs to be marked for export compliance.
5432      l_itm_exc_severity := '-99';
5433 
5434      IF l_debug_on THEN
5435         wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5436      END IF;
5437 
5438      IF l_param_info.export_screening_flag IN ('S', 'A') THEN
5439 
5440 
5441         IF l_debug_on THEN
5442            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',WSH_DEBUG_SV.C_PROC_LEVEL);
5443         END IF;
5444         --Bug 9326608 Changed l_itm_exc_flag to use i as index
5445         l_itm_exc_flag(i) :=  WSH_DELIVERY_VALIDATIONS.Check_ITM_Required
5446                                   (p_delivery_id => p_del_rows(i),
5447                                    x_return_status => l_return_status);
5448         IF l_debug_on THEN
5449            wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',l_return_status);
5450            WSH_DEBUG_SV.logmsg(l_module_name,'ITM flag: '||l_param_info.export_screening_flag);
5451            wsh_debug_sv.log(l_module_name,'l_itm_exc_flag for delivery: '|| p_del_rows(i),l_itm_exc_flag(i)); --Bug 9326608
5452         END IF;
5453 
5454         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5455            goto confirm_error;
5456         END IF;
5457         -- Find out the severity of the exception if it is enabled.
5458         --Bug 9326608 Changed l_itm_exc_flag to use i as index
5459         IF l_itm_exc_flag(i) = 'Y' THEN
5460 
5461            OPEN c_exc_severity('WSH_SC_REQ_EXPORT_COMPL');
5462            FETCH c_exc_severity INTO l_itm_exc_severity;
5463            CLOSE c_exc_severity;
5464 
5465         END IF;
5466 
5467            IF l_debug_on THEN
5468               wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5469            END IF;
5470      ELSE
5471         --Bug 9326608 Changed l_itm_exc_flag to use i as index
5472         l_itm_exc_flag(i) := 'N';
5473 
5474      END IF;
5475 
5476 
5477     -- J: W/V Changes
5478     -- 12.5 Give warning if delivery W/V is null depending on percent_fill_basis_flag
5479 
5480     IF (NOT l_unassign_all_flag_tab(i)) THEN
5481     -- Bug # 7580785:  Removed the call WSH_WV_UTILS.Delivery_Weight_Volume from here
5482     --                 as it is overriding the manually updated WMS LPN weights at the time of ship confirm.
5483 
5484       -- Get the latest W/V information.
5485       OPEN get_delivery_wv(p_del_rows(i));
5486       FETCH get_delivery_wv INTO l_gross_weight, l_volume;
5487       CLOSE get_delivery_wv;
5488 
5489       IF l_debug_on THEN
5490         WSH_DEBUG_SV.logmsg(l_module_name,'Gross '||l_gross_weight||' Volume '||l_volume||' Fill basis '||l_param_info.percent_fill_basis_flag);
5491       END IF;
5492 
5493       IF (l_param_info.percent_fill_basis_flag = 'W' and l_gross_weight is NULL) THEN
5494         FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5495         IF l_debug_on THEN
5496           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5497         END IF;
5498         --
5499         FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5500         FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5501         FND_MESSAGE.SET_TOKEN('WV','Weight');
5502         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5503         wsh_util_core.add_message(x_return_status);
5504         l_num_warn := l_num_warn + 1;
5505       END IF;
5506 
5507       IF (l_param_info.percent_fill_basis_flag = 'V' and l_volume is NULL) THEN
5508         FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5509         IF l_debug_on THEN
5510           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5511         END IF;
5512         --
5513         FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5514         FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5515         FND_MESSAGE.SET_TOKEN('WV','Volume');
5516         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5517         wsh_util_core.add_message(x_return_status);
5518         l_num_warn := l_num_warn + 1;
5519       END IF;
5520     END IF;
5521     -- End J: W/V Changes
5522 
5523 -- 2732719
5524 -- Calculate fill pc of the containers in the delivery
5525 
5526       l_underfilled_flag := FALSE;
5527       l_overfilled_flag := FALSE;
5528       IF l_debug_on THEN
5529         WSH_DEBUG_SV.log(l_module_name,'COUNT -'||l_shp_dd_cont_ids.count);
5530       END IF;
5531 
5532       FOR rec_count in 1..l_shp_dd_cont_ids.count
5533       LOOP
5534         IF l_debug_on THEN
5535           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.CHECK_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
5536           WSH_DEBUG_SV.log(l_module_name,'Cont -'||l_shp_dd_cont_ids(rec_count));
5537         END IF;
5538         --
5539         wsh_wv_utils.check_fill_pc( p_container_instance_id => l_shp_dd_cont_ids(rec_count),
5540                                     x_fill_status           => l_fill_status,
5541                                     x_return_status         => l_return_status);
5542 
5543         IF l_debug_on THEN
5544           WSH_DEBUG_SV.log(l_module_name,'RET STS -'||l_return_status);
5545           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_fill_status);
5546           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5547         END IF;
5548 
5549         IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5550                                 WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5551             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5552         ELSIF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
5553           raise ship_confirm_error;
5554         ELSIF (l_fill_status = 'U') THEN
5555           l_underfilled_flag := TRUE;
5556         ELSIF (l_fill_status = 'O') THEN
5557           l_overfilled_flag  := TRUE;
5558         END IF;
5559 
5560 -- Bug 2878538
5561 -- If l_save_fill_status is already saving U(nderfill) or O(verfill),then
5562 -- don't override,else override if it is Null or S(uccess)
5563         IF nvl(l_save_fill_status,'X') = 'S' THEN
5564           l_save_fill_status := l_fill_status;
5565         END IF;
5566 
5567         IF l_debug_on THEN
5568           WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5569         END IF;
5570 
5571       END LOOP;
5572 
5573       l_fill_status := l_save_fill_status;
5574 
5575       IF l_debug_on THEN
5576         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP RET STS -'||l_return_status);
5577         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP SAV STS -'||l_save_fill_status);
5578         WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP Fill St -'||l_fill_status);
5579       END IF;
5580 
5581 -- 2732719
5582 -- Calculate fill pc of the containers in the delivery
5583 
5584 
5585      --  Calculate weight volume for the delivery
5586 
5587      -- 13. Call check_confirm , it only has the TPA validations now.
5588 
5589      --  2131459 - added check for  l_unassign_all_flag_tab(i) and include steps 15 and 18 in this check
5590      IF (NOT l_unassign_all_flag_tab(i)) THEN
5591 
5592 
5593 
5594      -- Create trip from deconsol location to ultimate drop off
5595      -- consol deliveriers.
5596 
5597      IF l_mdc_co_del_tab.count > 0 THEN
5598 
5599         Create_Deconsol_Trips(p_deliveries_tab => p_del_rows,
5600                            x_return_status => l_return_status);
5601 
5602         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5603            raise ship_confirm_error;
5604         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5605            l_num_warn := l_num_warn + 1;
5606         END IF;
5607 
5608 
5609       END IF;
5610       --
5611       -- Debug Statements
5612       --
5613       IF l_debug_on THEN
5614           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5615       END IF;
5616       --
5617       wsh_delivery_validations.check_confirm(
5618       p_delivery_id      => p_del_rows(i),
5619       p_actual_dep_date  => p_actual_dep_date,
5620       p_cont_exists_flag    => l_cont_exists_flag ,
5621       p_enforce_packing_flag  => l_enforce_packing_flag,
5622       p_ship_from_location  => l_ship_from_location,
5623       p_ship_to_location    => l_ship_to_location,
5624       p_freight_code      => l_freight_code ,
5625       p_overfilled_flag    => l_overfilled_flag,
5626       p_underfilled_flag    => l_underfilled_flag,
5627       p_organization_id    => l_organization_id ,
5628       p_initial_pickup_date   => l_initial_pickup_date(i),
5629       p_ultimate_dropoff_date => l_ultimate_dropoff_date(i),
5630       x_return_status  => l_return_status ) ;
5631 
5632        /*
5633        ** begin bug 2426743
5634        **    Warning should not set the message that delivery will not be confirmed.
5635        **    Error should rollback and not continue processing this delivery.
5636        */
5637        IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5638 
5639          FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
5640          --
5641          -- Debug Statements
5642          --
5643          IF l_debug_on THEN
5644              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5645          END IF;
5646          --
5647          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5648          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5649          wsh_util_core.add_message(x_return_status);
5650          goto confirm_error_no_msg;
5651 
5652        ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5653 -- Bug 2711786
5654 -- for ship set,but this would include other validations done in
5655 -- check_confirm API like for SMC also
5656          IF l_batch_id IS NOT NULL THEN
5657           -- FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5658           -- x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5659           -- wsh_util_core.add_message(x_return_status);
5660            l_num_error := l_num_error + 1;
5661            goto confirm_error_no_msg;
5662          END IF;
5663 -- Bug 2711786
5664 
5665          --Ship Message Customization Project Change START
5666          IF l_debug_on THEN
5667             WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5668          END IF;
5669          If g_break_ship_set_or_smc > 0 then
5670             g_break_ship_set_or_smc := 0 ;
5671             l_num_error := l_num_error + 1;
5672             IF l_debug_on THEN
5673                WSH_DEBUG_SV.logmsg(l_module_name,'l_num_error ',l_num_error);
5674                WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5675             END IF;
5676             goto confirm_error_no_msg;
5677          End If;
5678          --Ship Message Customization Project Change END
5679 
5680          l_num_warn := l_num_warn + 1;
5681        END IF;
5682        /*
5683        ** end bug 2426743
5684        */
5685 
5686       -- Sequence delivery legs ( IS DONE IN CHECK_CONFIRM )
5687 
5688       IF (l_enforce_packing_flag = 'Y') THEN
5689 
5690         --
5691         -- Debug Statements
5692         --
5693         IF l_debug_on THEN
5694             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_UNPACKED',WSH_DEBUG_SV.C_PROC_LEVEL);
5695         END IF;
5696         --
5697         wsh_tpa_delivery_pkg.check_del_unpacked
5698                       (l_delivery_id,
5699                        l_cont_exists_flag,
5700                        l_unpacked_flag,
5701                        l_return_status);
5702 
5703         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5704                     THEN
5705             x_return_status := l_return_status;
5706           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5707             raise ship_confirm_error;
5708           ELSE
5709             l_num_warn := l_num_warn + 1;
5710           END IF;
5711         END IF;
5712       END IF;
5713 
5714       -- 15. Generate Packing Slip
5715       create_pack_slip(
5716         p_delivery_id => p_del_rows(i),
5717         x_return_status => l_return_status);
5718 
5719       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5720         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
5721                     THEN
5722           l_num_error := l_num_error + 1;
5723           goto loop_end;
5724         ELSE
5725           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_PACK_SLIP_ERROR');
5726           --
5727           -- Debug Statements
5728           --
5729           IF l_debug_on THEN
5730               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5731           END IF;
5732           --
5733           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5734           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5735           wsh_util_core.add_message(x_return_status);
5736           l_num_warn := l_num_warn + 1;
5737         END IF;
5738       END IF;
5739 
5740       -- 18. if p_intransit_flag = 'Y' and autocreate trip then set the pickup stop to closed
5741       --   Autocreate trip if necessary (trip stuff)
5742 
5743       l_pickup_stop_id  := NULL ;
5744       l_dropoff_stop_id := NULL ;
5745       l_delivery_leg_id := NULL ;
5746       l_parent_delivery_id := NULL;
5747       l_trip_id    := NULL ;
5748 
5749       OPEN  del_legs (p_del_rows(i));
5750       FETCH del_legs
5751                    INTO l_pickup_stop_id,
5752                         l_dropoff_stop_id,
5753                         l_delivery_leg_id,
5754                         l_parent_delivery_id;
5755       CLOSE del_legs;
5756 
5757       -- Note that the above FETCH might miss some legs if the delivery is assigned to mult. legs!!!!!!!!
5758 
5759       -- K: MDC: collect the deliveries that
5760       -- have parent deliveries.
5761       -- Note that this table may not be gapless.
5762       IF l_parent_delivery_id IS NULL THEN
5763 
5764          OPEN get_consol_del(p_del_rows(i));
5765          FETCH get_consol_del
5766          INTO l_parent_delivery_id;
5767          CLOSE get_consol_del;
5768 
5769       END IF;
5770 
5771       IF l_parent_delivery_id IS NOT NULL THEN
5772 
5773          l_mdc_co_del_tab(i) := l_parent_delivery_id;
5774 
5775       END IF;
5776 
5777       IF l_debug_on THEN
5778         wsh_debug_sv.log(l_module_name,'delivery',p_del_rows(i));
5779         wsh_debug_sv.log(l_module_name,'l_pickup_stop_id',l_pickup_stop_id);
5780         wsh_debug_sv.log(l_module_name,'l_dropoff_stop_id',l_dropoff_stop_id);
5781         wsh_debug_sv.log(l_module_name,'l_delivery_leg_id',l_delivery_leg_id);
5782         wsh_debug_sv.log(l_module_name,'l_parent_delivery_id',l_parent_delivery_id);
5783       END IF;
5784 
5785        /* Bug 2313359 Trip Information is Lost */
5786 
5787        IF (l_pickup_stop_id IS NULL) THEN
5788          l_del_rows( 1 ) := p_del_rows(i);
5789 
5790          --Compatiblity Changes
5791          --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
5792          --bug 2811489 : call should be made regardless of ship_method being null
5793          IF wsh_util_core.fte_is_installed='Y' THEN
5794 
5795            WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5796              p_api_version_number =>  1.0,
5797              p_init_msg_list      =>  FND_API.G_FALSE,
5798              p_entity_type        =>  'D',
5799              p_target_id          =>  l_target_trip_id,
5800              p_action_code        =>  'AUTOCREATE-TRIP',
5801              p_del_attr_tab       =>  l_cc_del_attr_tab,
5802              p_det_attr_tab       =>  l_cc_det_attr_tab,
5803              p_trip_attr_tab      =>  l_cc_trip_attr_tab,
5804              p_stop_attr_tab      =>  l_cc_stop_attr_tab,
5805              p_in_ids             =>  l_del_rows,
5806              x_fail_ids           =>  l_cc_fail_ids,
5807              x_validate_result          =>  l_cc_validate_result,
5808              x_failed_lines             =>  l_cc_failed_records,
5809              x_line_groups              =>  l_cc_line_groups,
5810              x_group_info               =>  l_cc_group_info,
5811              x_msg_count                =>  l_msg_count,
5812              x_msg_data                 =>  l_msg_data,
5813              x_return_status            =>  l_return_status);
5814 
5815 
5816            IF l_debug_on THEN
5817              wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and no ship method');
5818              wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5819              wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5820              wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5821              wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5822              wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
5823              wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5824              wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5825            END IF;
5826            --
5827 
5828            IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5829               IF l_cc_failed_records.COUNT>0 THEN
5830 
5831                       IF l_debug_on THEN
5832                           wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
5833                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5834                       END IF;
5835 
5836                       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
5837                       FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5838                       x_return_status := l_return_status;
5839                       wsh_util_core.add_message(x_return_status);
5840                       goto confirm_error;
5841                ELSE
5842                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5843                       l_num_warn := l_num_warn + 1;
5844                END IF;
5845            ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5846                  x_return_status := l_return_status;
5847                  goto confirm_error;
5848            ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5849                x_return_status := l_return_status;
5850                l_num_warn := l_num_warn + 1;
5851            END IF;
5852          END IF;
5853          --Compatiblity Changes
5854 
5855          --
5856          -- Debug Statements
5857          --
5858          IF l_debug_on THEN
5859              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.AUTOCREATE_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
5860          END IF;
5861          --
5862 
5863          --heali :Shipment Advice change for trip Consolidation.
5864          IF (p_autocreate_trip_flag = 'Y' ) THEN
5865             wsh_trips_actions.autocreate_trip(
5866                p_del_rows => l_del_rows,
5867                x_trip_id  => l_trip_id,
5868                x_trip_name => l_trip_name,
5869                x_return_status => l_return_status,
5870                -- Bug 3913206
5871                p_sc_pickup_date => l_sc_pickup_date,
5872                p_sc_dropoff_date => l_sc_dropoff_date
5873    );
5874 
5875             IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5876                      THEN
5877               x_return_status := l_return_status;
5878               FND_MESSAGE.SET_NAME('WSH','WSH_DEL_AUTOCREATE_TRIP_ERROR');
5879 
5880               IF l_debug_on THEN
5881                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5882               END IF;
5883               --
5884               FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5885               wsh_util_core.add_message(x_return_status);
5886               goto confirm_error;
5887             END IF;
5888           END IF;
5889        END IF;
5890        --heali :Shipment Advice change for trip Consolidation.
5891 
5892 
5893        -- Bug 2213342 : Ship Confirm Defaulting behavior
5894        IF l_trip_id IS NULL THEN
5895 
5896              --Compatibility Changes
5897              -- if trip already exists, need to check for must use constraints if carrier/mode is null
5898              IF wsh_util_core.fte_is_installed='Y' THEN
5899                l_trip_info_tab.delete;
5900                l_cc_count_success:=0;
5901 
5902                IF l_debug_on THEN
5903                    wsh_debug_sv.log(l_module_name,'HASH_TRIP count',G_HASH_TRIP.COUNT);
5904                END IF;
5905 
5906                FOR cur in Get_Trip(p_del_rows(i)) LOOP
5907                   b_tripalreadychecked:='N';
5908                   IF G_HASH_TRIP.COUNT>0 THEN
5909                    FOR l_count_hashtrip in G_HASH_TRIP.FIRST..G_HASH_TRIP.LAST LOOP
5910                     IF G_HASH_TRIP(l_count_hashtrip)=cur.trip_id THEN
5911                       b_tripalreadychecked:='Y';
5912                       IF l_debug_on THEN
5913                         wsh_debug_sv.log(l_module_name,'HASH_TRIP matched', cur.trip_id);
5914                       END IF;
5915                     END IF;
5916                    END LOOP;
5917                   END IF;
5918 
5919                   --IF (b_tripalreadychecked='N' and (cur.carrier_id is null or cur.mode_of_transport is null)) THEN
5920                   IF (b_tripalreadychecked='N' and
5921                       (cur.ship_method_code is null and (cur.carrier_id is null or cur.mode_of_transport is null))
5922                      ) THEN
5923 
5924                     IF l_debug_on THEN
5925                       wsh_debug_sv.log(l_module_name,'trip not already checked',cur.trip_id);
5926                     END IF;
5927                     l_cc_count_success:=l_cc_count_success+1;
5928                     l_trip_info_tab(l_cc_count_success).trip_id:=cur.trip_id;
5929                     l_trip_info_tab(l_cc_count_success).ship_method_code:=cur.ship_method_code;
5930                     l_trip_info_tab(l_cc_count_success).carrier_id:=cur.carrier_id;
5931                     l_trip_info_tab(l_cc_count_success).mode_of_transport:=cur.mode_of_transport;
5932                     G_HASH_TRIP(G_HASH_TRIP.COUNT+1):=cur.trip_id;
5933                   END IF;
5934                END LOOP;
5935 
5936                IF l_debug_on THEN
5937                    wsh_debug_sv.log(l_module_name,'l_trip_info_tab.COUNT : ',l_trip_info_tab.COUNT);
5938                END IF;
5939 
5940 
5941                IF l_trip_info_tab.COUNT>0 THEN
5942 
5943 		  WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5944                     p_api_version_number   =>  1.0,
5945                     p_init_msg_list        =>  FND_API.G_FALSE,
5946                     p_entity_type          =>  'T',
5947                     p_target_id            =>  l_target_trip_id,
5948                     p_action_code          =>  'UPDATE',
5949                     p_del_attr_tab         =>  l_cc_del_attr_tab,
5950                     p_det_attr_tab         =>  l_cc_det_attr_tab,
5951                     p_trip_attr_tab        =>  l_trip_info_tab,
5952                     p_stop_attr_tab        =>  l_cc_stop_attr_tab,
5953                     p_in_ids               =>  l_cc_in_ids,
5954                     x_fail_ids             =>  l_cc_fail_ids,
5955                     x_validate_result          =>  l_cc_validate_result,
5956                     x_failed_lines             =>  l_cc_failed_records,
5957                     x_line_groups              =>  l_cc_line_groups,
5958                     x_group_info               =>  l_cc_group_info,
5959                     x_msg_count                =>  l_msg_count,
5960                     x_msg_data                 =>  l_msg_data,
5961                     x_return_status            =>  l_return_status);
5962 
5963                  IF l_debug_on THEN
5964                    wsh_debug_sv.logmsg(l_module_name,'Ship confirm with trip already present');
5965                    wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5966                    wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5967                    wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5968                    wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5969                    wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
5970                    wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5971                    wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5972                    wsh_debug_sv.log(l_module_name,'HASH_TRIP trip_id',G_HASH_TRIP(1));
5973                  END IF;
5974                  --
5975 
5976                  IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5977                    IF l_cc_fail_ids.COUNT>0 THEN
5978 
5979                       IF l_debug_on THEN
5980                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
5981                       END IF;
5982 
5983                       FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_COMP_FAILED');
5984                       FND_MESSAGE.SET_TOKEN('TRIP_ID',wsh_trips_pvt.get_name(l_cc_fail_ids(1)));
5985                       x_return_status := l_return_status;
5986                       wsh_util_core.add_message(x_return_status);
5987                       goto confirm_error;
5988                    ELSE
5989                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5990                       l_num_warn := l_num_warn + 1;
5991                    END IF;
5992                  ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5993                    x_return_status := l_return_status;
5994                    goto confirm_error;
5995                  ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5996                    x_return_status := l_return_status;
5997                    l_num_warn := l_num_warn + 1;
5998                  END IF;
5999 
6000                END IF;--for trip_tab count>0
6001              END IF;
6002              --Compatibility Changes
6003 
6004              -- bug 2432330: to show expected warning, code has to count deliveries with
6005              -- existing stops:
6006              -- delivery has existing trip and will not be set in transit or closed.
6007              l_close_confirm_flag := 'F';
6008 
6009 	     l_with_mc_trip_flag(i)  := TRUE;
6010 
6011 
6012              IF p_ship_method IS NOT NULL THEN -- trip already exists...
6013              -- Bug 3347549 update the ship method components for
6014              -- the fisrt trip on the delivery.
6015 
6016                 OPEN get_del_first_trip(p_del_rows(i));
6017                 FETCH get_del_first_trip into l_del_first_trip;
6018                 CLOSE get_del_first_trip;
6019 
6020                 IF l_del_first_trip IS NULL THEN
6021 
6022                    FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6023                    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6024                    wsh_util_core.add_message(x_return_status);
6025                    goto confirm_error;
6026 
6027                 ELSE
6028 
6029                    l_carrier_rec.ship_method_code := p_ship_method;
6030 
6031 
6032                    WSH_CARRIERS_GRP.get_carrier_service_mode(
6033                       p_carrier_service_inout_rec => l_carrier_rec,
6034                       x_return_status => l_return_status);
6035 
6036                    IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6037                       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6038                       goto confirm_error;
6039                    END IF;
6040 
6041                    BEGIN
6042 
6043                       WSH_TRIPS_PVT.lock_trip_no_compare(l_del_first_trip);
6044 
6045                    EXCEPTION
6046 
6047                       WHEN app_exception.application_exception OR app_exception.record_lock_exception THEN
6048                       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6049                       FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_STOP_TRIP_LOCK');
6050                       FND_MESSAGE.SET_TOKEN('DLVY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6051                       wsh_util_core.add_message(x_return_status);
6052                       goto confirm_error;
6053 
6054                    END;
6055 
6056                    UPDATE wsh_trips
6057                    SET ship_method_code = p_ship_method,
6058                        service_level = l_carrier_rec.service_level,
6059                        mode_of_transport = l_carrier_rec.mode_of_transport,
6060                        carrier_id = l_carrier_rec.carrier_id
6061                    WHERE trip_id = l_del_first_trip;
6062 
6063                    IF (SQL%NOTFOUND) THEN
6064                      FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6065                      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6066                      wsh_util_core.add_message(x_return_status);
6067                      goto confirm_error;
6068                    END IF;
6069 
6070                 END IF;
6071 
6072              END IF;
6073 
6074        ELSE
6075          /* H integration - call MultiLeg FTE */
6076          IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
6077            -- Get pvt type record structure for trip
6078            --
6079            -- Debug Statements
6080            --
6081            IF l_debug_on THEN
6082                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.GET_TRIP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
6083            END IF;
6084            --
6085            wsh_trips_grp.get_trip_details_pvt
6086              (p_trip_id => l_trip_id,
6087               x_trip_rec => l_trip_rec,
6088               x_return_status => l_return_status);
6089            IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6090              x_return_status := l_return_status;
6091              wsh_util_core.add_message(x_return_status);
6092              goto confirm_error;
6093            END IF;
6094 
6095            -- this is the updated record
6096            l_trip_rec.ship_method_code :=
6097                          nvl(p_ship_method,l_trip_rec.ship_method_code);
6098 
6099            -- Call FTE
6100            --
6101            -- Debug Statements
6102            --
6103            IF l_debug_on THEN
6104                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
6105            END IF;
6106            --
6107            wsh_fte_integration.trip_stop_validations
6108              (p_stop_rec => l_stop_rec,
6109               p_trip_rec => l_trip_rec,
6110               p_action => 'UPDATE',
6111               x_return_status => l_return_status);
6112 
6113            /* H integration changes */
6114            IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6115              IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6116                l_num_warn := l_num_warn + 1;
6117              ELSE
6118                x_return_status := l_return_status;
6119                wsh_util_core.add_message(x_return_status);
6120                goto confirm_error;
6121              END IF;
6122            END IF;
6123         END IF;
6124 
6125         /* End of H integration - call MultiLeg FTE */
6126 
6127 
6128          --Compatiblity Changes
6129          --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
6130          --bug 2811489 : call should be made regardless of ship_method being null
6131          IF wsh_util_core.fte_is_installed='Y' THEN
6132 
6133              --only one record
6134              l_trip_info_tab(1).trip_id:=l_trip_id;
6135              IF p_ship_method is not null THEN
6136                 l_trip_info_tab(1).ship_method_code:=p_ship_method;
6137              ELSE -- ship method is not specified as an option, existing carrier, mode
6138                   -- have to be checked for must use constraints
6139                 l_trip_info_tab(1).ship_method_code  :=l_trip_rec.ship_method_code;
6140                 l_trip_info_tab(1).carrier_id        :=l_trip_rec.carrier_id;
6141                 l_trip_info_tab(1).mode_of_transport :=l_trip_rec.mode_of_transport;
6142              END IF;
6143 
6144              WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
6145                p_api_version_number   =>  1.0,
6146                p_init_msg_list        =>  FND_API.G_FALSE,
6147                p_entity_type          =>  'T',
6148                p_target_id            =>  l_target_trip_id,
6149                p_action_code          =>  'UPDATE',
6150                p_del_attr_tab         =>  l_cc_del_attr_tab,
6151                p_det_attr_tab         =>  l_cc_det_attr_tab,
6152                p_trip_attr_tab        =>  l_trip_info_tab,
6153                p_stop_attr_tab        =>  l_cc_stop_attr_tab,
6154                p_in_ids               =>  l_cc_in_ids,
6155                x_fail_ids             =>  l_cc_fail_ids,
6156                x_validate_result          =>  l_cc_validate_result,
6157                x_failed_lines             =>  l_cc_failed_records,
6158                x_line_groups              =>  l_cc_line_groups,
6159                x_group_info               =>  l_cc_group_info,
6160                x_msg_count                =>  l_msg_count,
6161                x_msg_data                 =>  l_msg_data,
6162                x_return_status            =>  l_return_status);
6163 
6164            IF l_debug_on THEN
6165              wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and ship method');
6166              wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
6167              wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
6168              wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
6169              wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
6170              wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
6171              wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
6172              wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
6173            END IF;
6174            --
6175 
6176            IF l_return_status=wsh_util_core.g_ret_sts_error THEN
6177               IF l_cc_fail_ids.COUNT>0 THEN
6178 
6179                       IF l_debug_on THEN
6180                           wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
6181                           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6182                       END IF;
6183 
6184                       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
6185                       FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6186                       x_return_status := l_return_status;
6187                       wsh_util_core.add_message(x_return_status);
6188                       goto confirm_error;
6189                ELSE
6190                       x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
6191                       l_num_warn := l_num_warn + 1;
6192                END IF;
6193            ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
6194                  x_return_status := l_return_status;
6195                  goto confirm_error;
6196            ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6197                 x_return_status := l_return_status;
6198                l_num_warn := l_num_warn + 1;
6199            END IF;
6200          END IF;
6201          --Compatiblity Changes
6202 
6203          -- Bug 3347549 Derive the ship method components for the trip.
6204 
6205          IF p_ship_method IS NOT NULL THEN
6206 
6207             l_carrier_rec.ship_method_code := p_ship_method;
6208 
6209             WSH_CARRIERS_GRP.get_carrier_service_mode(
6210                          p_carrier_service_inout_rec => l_carrier_rec,
6211                          x_return_status => l_return_status);
6212 
6213             IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6214                x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6215                goto confirm_error;
6216             END IF;
6217 
6218             UPDATE wsh_trips
6219             SET ship_method_code = p_ship_method,
6220                 service_level = l_carrier_rec.service_level,
6221                 mode_of_transport = l_carrier_rec.mode_of_transport,
6222                 carrier_id = l_carrier_rec.carrier_id
6223             WHERE trip_id = l_trip_id;
6224 
6225             IF (SQL%NOTFOUND) THEN
6226               FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6227               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6228               wsh_util_core.add_message(x_return_status);
6229               goto confirm_error;
6230             END IF;
6231 
6232          END IF;
6233 
6234        END IF;--l_trip_id is not null - autocreated trip
6235 
6236        IF l_debug_on THEN
6237           wsh_debug_sv.log(l_module_name,'p_intransit_flag', p_intransit_flag);
6238           wsh_debug_sv.log(l_module_name,'p_close_flag', p_close_flag);
6239           wsh_debug_sv.log(l_module_name,'l_itm_exc_severity', l_itm_exc_severity);
6240        END IF;
6241          /* Bug 2313359 move the code from above */
6242        --
6243        -- Bug 8555654 : Do not submit workflow for a delivery if it is going to
6244        --               fail as the actual departure date is outside of the current
6245        --               inventory open period.
6246        IF (l_enable_sc_wf = 'Y') THEN
6247        --{
6248            IF l_debug_on THEN
6249                WSH_DEBUG_SV.log(l_module_name,'l_organization_id',l_organization_id );
6250            END IF;
6251            IF (l_opn_prd_chk_orgs.EXISTS(l_organization_id)) THEN
6252            --{
6253                IF (l_opn_prd_chk_orgs(l_organization_id) = 1) THEN
6254                    l_enable_sc_wf := 'N';
6255                END IF;
6256            ELSE
6257                -- Check for open inventory period Error, if inventory
6258                -- period (corresponding to stop close date) is not open
6259                --
6260                -- Debug Statements
6261                --
6262                IF l_debug_on THEN
6263                    WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INVTTMTX.TDATECHK',WSH_DEBUG_SV.C_PROC_LEVEL);
6264                END IF;
6265                --
6266                invttmtx.tdatechk(l_organization_id, nvl(p_actual_dep_date,sysdate), l_period_id, l_open_past_period);
6267                IF (l_period_id <= 0) THEN
6268                    l_enable_sc_wf := 'N';
6269                    l_opn_prd_chk_orgs(l_organization_id) := 1;
6270                ELSE
6271                    l_opn_prd_chk_orgs(l_organization_id) := 0;
6272                END IF;
6273            --}
6274            END IF;
6275            IF l_debug_on THEN
6276                WSH_DEBUG_SV.log(l_module_name,'l_enable_sc_wf',l_enable_sc_wf);
6277            END IF;
6278        --}
6279        END IF;
6280        -- Bug 8555654 : : End
6281        --
6282        IF ((p_intransit_flag = 'Y'  OR p_close_flag = 'Y') AND (l_enable_sc_wf <> 'Y') )  THEN
6283            -- Now that the trip is created , fetch the delivery's  pickup_stop_id again.
6284            -- We do this only if severity 'ERROR', 'WARNING' ITM exceptions will not be
6285            -- logged against this delivery, as the stops attached to deliveries with
6286            -- 'ERROR', 'WARNING' ITM exceptions will not get closed.
6287            -- l_enable_sc_wf <> 'Y' - Workflow Changes
6288 
6289            OPEN  del_legs (p_del_rows(i));
6290            FETCH del_legs INTO l_pickup_stop_id,
6291                             l_dropoff_stop_id, l_delivery_leg_id,
6292                             l_parent_delivery_id;
6293            CLOSE del_legs;
6294 
6295            IF (l_itm_exc_severity IN ('ERROR', 'WARNING')) THEN
6296 
6297                l_itm_stops_tab(l_pickup_stop_id) := 'Y';
6298                l_itm_stops_tab(l_dropoff_stop_id) := 'Y';
6299 
6300                l_close_confirm_flag := 'F';
6301 
6302                FND_MESSAGE.SET_NAME('WSH','WSH_EXP_COMPL_SCRN_REQD');
6303                FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
6304                wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
6305 
6306            ELSE
6307 
6308                l_stop_rows(l_stop_rows.count + 1 ) := l_pickup_stop_id;
6309                --u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6310 
6311                -- 19. if p_close_flag = 'Y' and autocreate trip close the drop off stop
6312                IF (p_close_flag = 'Y') THEN
6313                  l_stop_rows(l_stop_rows.count + 1 ) := l_dropoff_stop_id;
6314                --  u_stop_rows(u_stop_rows.count + 1 ) := l_dropoff_stop_id;
6315                END IF;
6316 
6317 	       --bug 3314353  -- jckwok
6318 	       OPEN get_del_first_trip(p_del_rows(i));
6319 	       FETCH get_del_first_trip into l_first_trip_id;
6320 	       CLOSE get_del_first_trip;
6321 	       IF l_first_trip_id IS NULL THEN
6322 		  FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6323 		  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6324 		  wsh_util_core.add_message(x_return_status);
6325 		  goto confirm_error;
6326 	       END IF;
6327 	       OPEN stop_sequence_number_csr(l_pickup_stop_id);
6328 	       FETCH stop_sequence_number_csr INTO l_pick_up_stop_sequence_num;
6329                IF stop_sequence_number_csr%NOTFOUND THEN
6330                   CLOSE stop_sequence_number_csr;
6331                   RAISE NO_DATA_FOUND;
6332                END IF;
6333 	       CLOSE stop_sequence_number_csr;
6334 
6335 	       IF ((p_close_flag = 'Y') AND (p_intransit_flag = 'Y')) THEN
6336 	         --{ bugfix 3925963
6337    	         l_inbound_stops_exists := false;
6338 		 l_stop_name_list  := null;
6339 	         OPEN get_stops_csr(l_first_trip_id);
6340 	         LOOP
6341 	           FETCH get_stops_csr INTO l_prev_stop_id,l_shipments_type_flag,l_stop_location_id;
6342                    exit when get_stops_csr%NOTFOUND;
6343                    IF nvl(l_shipments_type_flag,'O') = 'I'  THEN
6344 		      l_inbound_stops_exists := true;
6345 		      l_stop_name            := SUBSTRB(
6346                                                          WSH_UTIL_CORE.get_location_description
6347                                                           ( l_stop_location_id,
6348                                                             'NEW UI CODE'
6349                                                            ),
6350                                                           1,
6351                                                           60
6352                                                         );
6353 		      IF l_stop_name_list is null THEN
6354                          l_stop_name_list := l_stop_name;
6355 		      ELSE
6356                          l_stop_name_list := l_stop_name_list || ' , ' || l_stop_name;
6357 		      END IF;
6358                    ELSE
6359    	             u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6360                    END IF;
6361 		   --
6362 	         END LOOP;
6363                  CLOSE get_stops_csr;
6364 		 IF l_inbound_stops_exists THEN
6365                     OPEN get_trip_name_csr (l_first_trip_id);
6366 		    FETCH get_trip_name_csr INTO l_stops_trip_name;
6367 		    CLOSE get_trip_name_csr;
6368                     FND_MESSAGE.SET_NAME('WSH','WSH_PREV_IB_STOPS_NOT_CLOSED');
6369 		    FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_stops_trip_name);
6370 		    FND_MESSAGE.SET_TOKEN('STOP_NAME_LIST', l_stop_name_list);
6371 		    x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
6372                     wsh_util_core.add_message(x_return_status);
6373 		 END IF;
6374 		 --} bugfix 3925963
6375 	       ELSIF ((p_close_flag = 'N') AND (p_intransit_flag = 'Y')) THEN
6376 	         OPEN prev_stop_csr(l_first_trip_id, l_pick_up_stop_sequence_num);
6377 	         LOOP
6378 	           FETCH prev_stop_csr INTO l_prev_stop_id;
6379                    exit when prev_stop_csr%NOTFOUND;
6380 	           u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6381 	         END LOOP;
6382                  CLOSE prev_stop_csr;
6383                  u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6384                END IF;
6385 	       --bug 3314353  -- jckwok
6386 
6387                l_close_confirm_flag := 'C';
6388 
6389            END IF;
6390 
6391        ELSE
6392 
6393            l_close_confirm_flag := 'F';
6394 
6395        END IF; -- end of p_in_transit_flag = Y
6396 
6397      END IF; -- end of IF (NOT l_unassign_all_flag_tab(i))
6398 
6399     IF l_debug_on THEN
6400            WSH_DEBUG_SV.log(l_module_name,'l_close_confirm_flag',l_close_confirm_flag );
6401     END IF;
6402 
6403     --set the close/confirm count accordingly
6404     IF(l_close_confirm_flag = 'C') THEN
6405       l_close_del_cnt := l_close_del_cnt +1;
6406     ELSIF(l_close_confirm_flag = 'F') THEN
6407       l_confirm_del_cnt := l_confirm_del_cnt +1;
6408     END IF;
6409 
6410     l_close_confirm_flag:=NULL;
6411 
6412 
6413      -- Set delivery status to confirm, set initial pickup date, ultimate dropoff date
6414 
6415      -- If all delivery_details from a delivery are being unassigned then set status to CLOSED
6416      -- ,unassign delivery from all trips it might be on and set a warning message
6417 
6418     IF l_unassign_all_flag_tab(i) THEN
6419         l_status_code(i) := 'CL';
6420 
6421         /* H integration: 940/945 WSH wrudge */
6422         -- we should get warning only if user doesn't expect to do unassign all.
6423         IF p_action_flag NOT IN ('C', 'O')  AND l_unassign_dds.count > 0 THEN
6424 
6425           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_UNASSIGN_ALL');
6426           --
6427           -- Debug Statements
6428           --
6429           IF l_debug_on THEN
6430               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6431           END IF;
6432           --
6433           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6434           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6435           wsh_util_core.add_message(x_return_status);
6436           WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
6437           l_num_warn := l_num_warn + 1;
6438         END IF;
6439 
6440         l_mdc_index_i := 0;
6441         FOR dg IN del_legs(p_del_rows(i)) LOOP
6442           --
6443           -- Debug Statements
6444           --
6445           --
6446           -- K: MDC Remove the delivery from the consol delivery and trip.
6447           IF dg.parent_delivery_id IS NOT NULL THEN
6448              l_mdc_cl_del_tab(1) := p_del_rows(i);
6449              l_mdc_co_del_tab.delete(i);
6450              WSH_NEW_DELIVERY_ACTIONS.Unassign_Dels_from_Consol_Del(
6451                        p_parent_del     => NULL,
6452                        p_caller         => p_caller,
6453                        p_del_tab        => l_mdc_cl_del_tab,
6454                        x_return_status  => l_return_status);
6455              l_mdc_cl_del_tab.delete;
6456              IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6457                IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6458                    l_num_warn := l_num_warn + 1;
6459                ELSE
6460                    x_return_status := l_return_status;
6461                    goto confirm_error;
6462                END IF;
6463              END IF;
6464           END IF;
6465           IF l_debug_on THEN
6466               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.DELETE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
6467           END IF;
6468           wsh_delivery_legs_pvt.delete_delivery_leg
6469                        (NULL, dg.delivery_leg_id, l_return_status);
6470           IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6471             --Bug 2108310
6472               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6473                 l_num_warn := l_num_warn + 1;
6474               ELSE
6475                 x_return_status := l_return_status;
6476                 goto confirm_error;
6477               END IF;
6478             --Bug 2108310
6479           END IF;
6480 
6481        END LOOP;
6482      ELSE
6483       l_status_code(i) := 'CO';
6484      END IF;
6485 
6486 
6487     -- LASTLY,  populated the delivery columns  for bulk update
6488 
6489     u_del_rows( u_del_rows.count + 1)       := p_del_rows (i);
6490     u_status_code( u_del_rows.count )      := l_status_code(i);
6491     u_number_of_lpn( u_del_rows.count )    := l_number_of_lpn(i) ;
6492     u_initial_pickup_date(  u_del_rows.count )   := l_initial_pickup_date(i);
6493     u_ultimate_dropoff_date(  u_del_rows.count ) := l_ultimate_dropoff_date(i);
6494     /* H integration: 945 send document wrudge */
6495     u_organization_id( u_del_rows.count )   := l_organization_id;
6496     u_wsh_lines_exist( u_del_rows.count )   := l_wsh_lines_exist;
6497     --/==Workflow Changes
6498     IF (l_enable_sc_wf = 'Y') THEN
6499         l_scpod_wf_del_rows(l_scpod_wf_del_rows.count + 1) := u_del_rows.count;
6500     END IF;
6501     --==/
6502 
6503      goto loop_end;
6504 
6505      <<confirm_error>>
6506 
6507      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
6508      --
6509      -- Debug Statements
6510      --
6511      IF l_debug_on THEN
6512          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6513      END IF;
6514      --
6515      FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6516      wsh_util_core.add_message(x_return_status);
6517 
6518      /* H integration: 940/945 wrudge */
6519      <<confirm_error_no_msg>>
6520      ROLLBACK TO SAVEPOINT confirm_delivery_sp;
6521      l_num_error := l_num_error + 1;
6522 
6523      <<loop_end>>
6524      null;
6525 
6526      l_error_exists := FALSE;
6527 
6528 /* Bug 2761304: Changed the following conditon from '=' to '>='. */
6529 
6530      IF (l_num_error >= 0) AND (l_wms_enabled_flag) THEN
6531        -- Bug 2942938: select all the 'W' message type from WSH_INTEGRATION.G_MSG_TABLE
6532 		 -- also select hold 'E' messages for WMS org, since hold errors
6533                  -- bug 3455640 added 'WSH_INVALID_CATCHWEIGHT'
6534 		 -- should prevent the delivery from being ship confirmed, not just unassign
6535        -- the delivery details
6536        l_count := 0;
6537        FOR i in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6538          IF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'W' )  OR
6539             ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME in (
6540                    'WSH_HEADER_HOLD_ERROR',
6541                    'WSH_SHIP_LINE_HOLD_ERROR',
6542                    'WSH_DET_CREDIT_HOLD_ERROR',
6543                    'WSH_INVALID_CATCHWEIGHT') ) THEN
6544            l_count := l_count + 1;
6545            l_msg_table(l_count) := WSH_INTEGRATION.G_MSG_TABLE(i);
6546            IF l_debug_on THEN
6547 			     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);
6548            END IF;
6549          END IF;
6550        END LOOP;
6551        -- Call WMS api to process the table of l_msg_table only for wms enabled org
6552        -- WMS: pass warnings to WMS for processing:
6553        WMS_SHIPPING_MESSAGES.PROCESS_SHIPPING_WARNING_MSGS(x_return_status  => l_return_status ,
6554                                                         x_msg_count      => l_msg_count ,
6555                                                         x_msg_data       => l_msg_data,
6556                                                         p_commit         => FND_API.g_false,
6557                                                         x_shipping_msg_tab  => l_msg_table);
6558 
6559        -- Check if there exists an 'E' message in the l_msg_table
6560        -- If there is then turn the message type to 'E' for the particular message name in
6561        -- WSH_INTEGRATION.G_MSG_TABLE
6562        FOR i in 1..l_msg_table.count LOOP
6563          IF ( l_msg_table(i).MESSAGE_TYPE = 'E' ) THEN
6564            l_error_exists := TRUE;
6565            FOR j in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6566              IF (l_msg_table(i).message_name = WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_NAME) THEN
6567                WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_TYPE := 'E';
6568              END IF;
6569            END LOOP;
6570          END IF;
6571        END LOOP;
6572        l_msg_table.delete;
6573      END IF;
6574      -- Call Store_Msg_In_Table Api to push the messages in WSH_INTEGRATION.G_MSG_TABLE to fnd stack
6575      WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
6576                                        x_msg_rec_count => l_msg_rec_count,
6577                                        x_return_status => l_return_status);
6578      IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6579        raise ship_confirm_error;
6580      END IF;
6581      -- If there is no Shipping error but WMS has turned one of the Warning to Error then set the l_num_error
6582      IF ( (l_num_error = 0) AND (l_error_exists) )THEN
6583        l_num_error := nvl(l_msg_rec_count.e_count,0) + nvl(l_msg_rec_count.u_count,0);
6584      END IF;
6585 
6586   end loop ;
6587 
6588   --delete the hash trip_ids stored
6589   G_HASH_TRIP.delete;
6590 
6591   -- Bug 2074768 : Check for tolerances now that all the delivery lines for all the deliveries have been updated.
6592   -- The need to check tolerances here arises because now we have all the deliveries that really will
6593   -- be ship confirmed.
6594   IF l_debug_on THEN
6595     WSH_DEBUG_SV.log(l_module_name,'p_del_rows count', p_del_rows.count);
6596   END IF;
6597 
6598   FOR i IN 1..p_del_rows.count LOOP
6599 
6600     -- HW OPM added l_max_quantity2
6601     --
6602     -- Debug Statements
6603     --
6604     IF l_debug_on THEN
6605         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DELIVERY_FOR_TOLERANCES',WSH_DEBUG_SV.C_PROC_LEVEL);
6606     END IF;
6607     --
6608     wsh_Delivery_validations.check_delivery_for_tolerances (
6609       p_delivery_id => p_del_rows(i) ,
6610       x_source_line_id  => l_temp_line_id ,
6611       x_source_code  => l_temp_source_code ,
6612       x_max_quantity  => l_max_quantity ,
6613       x_max_quantity2   => l_max_quantity2 ,
6614       x_return_status   => l_return_status  ) ;
6615 
6616     if ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS  ) then
6617       x_return_status := l_return_Status ;
6618       wsh_util_core.add_message(x_return_status);
6619       l_num_error := l_num_error + 1;
6620       l_delivery_id := p_del_rows(i);
6621       raise ship_confirm_error ;
6622     end if ;
6623 
6624 	-- Close Exceptions for the Delivery
6625 	IF l_debug_on THEN
6626        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
6627     END IF;
6628     WSH_XC_UTIL.Close_Exceptions (
6629                                      p_api_version           => 1.0,
6630                                      x_return_status         => l_return_status,
6631                                      x_msg_count             => l_msg_count,
6632                                      x_msg_data              => l_msg_data,
6633                                      p_logging_entity_id     => p_del_rows(i),
6634                                      p_logging_entity_name   => 'DELIVERY',
6635                                      p_consider_content      => 'Y'
6636                                   ) ;
6637 
6638     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
6639          x_return_status := l_return_status;
6640          wsh_util_core.add_message(x_return_status);
6641          IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6642               l_num_error := l_num_error + 1 ;
6643               l_delivery_id := p_del_rows(i);
6644               raise ship_confirm_error;
6645          ELSE
6646               l_num_warn := l_num_warn + 1 ;
6647          END IF;
6648     END IF;
6649 
6650 
6651 
6652   END LOOP ;
6653 
6654   -- Create trip from deconsol location to ultimate drop off
6655   -- consol deliveriers.
6656   IF l_debug_on THEN
6657     WSH_DEBUG_SV.log(l_module_name,'l_mdc_co_del_tab count', l_mdc_co_del_tab.count);
6658   END IF;
6659 
6660   IF l_mdc_co_del_tab.count > 0 THEN
6661 
6662      Create_Deconsol_Trips(p_deliveries_tab => u_del_rows,
6663                            x_return_status => l_return_status);
6664 
6665      IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6666         raise ship_confirm_error;
6667      ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6668            l_num_warn := l_num_warn + 1;
6669      END IF;
6670 
6671 
6672   END IF;
6673 
6674   -- 19.55 Generate BOL if p_bol_flag is set
6675   -- 2121399
6676   -- Moved Create_Bol and Print_document_sets APIs outside the main For Loop and
6677   -- and placed it after the call to Check_Delivery_for_tolerances is made.
6678   IF l_debug_on THEN
6679     WSH_DEBUG_SV.log(l_module_name,'u_del_rows count', u_del_rows.count);
6680   END IF;
6681 
6682   FOR i IN 1..u_del_rows.count LOOP
6683 
6684     IF l_debug_on THEN
6685       WSH_DEBUG_SV.log(l_module_name,'i', i);
6686       WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag count', l_with_mc_trip_flag.count);
6687       WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab count', l_unassign_all_flag_tab.count);
6688       WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6689       WSH_DEBUG_SV.log(l_module_name,'u_del_rows i', u_del_rows(i));
6690     END IF;
6691 
6692     OPEN  del_legs (u_del_rows(i));
6693     FETCH del_legs INTO l_pickup_stop_id, l_dropoff_stop_id, l_delivery_leg_id, l_parent_delivery_id;
6694     CLOSE del_legs;
6695 
6696     IF l_debug_on THEN
6697       WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id', l_pickup_stop_id);
6698       WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id', l_dropoff_stop_id);
6699       WSH_DEBUG_SV.log(l_module_name,'l_delivery_leg_id', l_delivery_leg_id);
6700       WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6701     END IF;
6702 
6703      --Bug 5255366 (The above cursor can fetch parent-del-id of newly created trip hence can be null)
6704      --            (Hence the second fetch is required)
6705      IF l_parent_delivery_id IS NULL THEN
6706 
6707        IF l_debug_on THEN
6708          WSH_DEBUG_SV.log(l_module_name,'p_del_rows i', p_del_rows(i));
6709        END IF;
6710 
6711          OPEN get_consol_del(p_del_rows(i));
6712          FETCH get_consol_del
6713          INTO l_parent_delivery_id;
6714          CLOSE get_consol_del;
6715      END IF;
6716 
6717     IF l_debug_on THEN
6718       WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6719     END IF;
6720 
6721     --Bug 3685366
6722     l_dummy_doc_set(1).bol_error_flag:='N';
6723     --
6724 
6725     IF l_debug_on THEN
6726       WSH_DEBUG_SV.log(l_module_name,'p_bol_flag', p_bol_flag);
6727       WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag', l_with_mc_trip_flag(i));
6728       WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab', l_unassign_all_flag_tab(i));
6729       WSH_DEBUG_SV.log(l_module_name,'p_mc_bol_flag', p_mc_bol_flag);
6730     END IF;
6731 
6732     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
6733 
6734       --Bug 5255366
6735       IF l_parent_delivery_id IS NOT NULL THEN
6736          create_bol( p_delivery_id  => l_parent_delivery_id,
6737          x_return_status  =>    l_return_status);
6738       ELSE
6739          create_bol( p_delivery_id  => u_del_rows(i),
6740          x_return_status  =>    l_return_status);
6741       END IF;
6742 
6743        IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6744 
6745 	IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6746            l_num_error := l_num_error + 1;
6747         ELSE
6748      	   --Bug 3685366
6749 	   l_dummy_doc_set(1).bol_error_flag:='Y';
6750 	   --
6751 	   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6752            --
6753            -- Debug Statements
6754            --
6755            IF l_debug_on THEN
6756                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6757            END IF;
6758            --
6759 
6760 	   FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6761            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6762            wsh_util_core.add_message(x_return_status);
6763            l_num_warn := l_num_warn + 1;
6764         END IF;
6765        END IF;
6766 
6767      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
6768 
6769        --Bug 5255366
6770        IF l_parent_delivery_id IS NOT NULL THEN
6771           create_bol( p_delivery_id  => l_parent_delivery_id,
6772           x_return_status  =>    l_return_status);
6773        ELSE
6774           create_bol( p_delivery_id  => u_del_rows(i),
6775           x_return_status  =>    l_return_status);
6776        END IF;
6777 
6778        IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6779 
6780 	IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6781            l_num_error := l_num_error + 1;
6782         ELSE
6783 
6784 	   -- Bug 3685366
6785 	     l_dummy_doc_set(1).bol_error_flag:='Y';
6786 	   --
6787 
6788 	   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6789            --
6790            -- Debug Statements
6791            --
6792 
6793 	   IF l_debug_on THEN
6794                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6795            END IF;
6796            --
6797            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6798            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6799            wsh_util_core.add_message(x_return_status);
6800            l_num_warn := l_num_warn + 1;
6801         END IF;
6802        END IF;
6803 
6804     END IF;
6805 
6806     IF l_debug_on THEN
6807       WSH_DEBUG_SV.logmsg(l_module_name,'print doc set');
6808     END IF;
6809 
6810      --19.6. Print document set if p_report_set_id is specified
6811 
6812     IF (l_document_set_id IS NOT NULL) AND (NOT l_unassign_all_flag_tab(i)) THEN
6813 
6814        l_del_tmp_rows.delete;
6815        --Bug 5255366
6816        IF l_parent_delivery_id IS NOT NULL THEN
6817           l_del_tmp_rows(1) := l_parent_delivery_id;
6818        ELSE
6819           l_del_tmp_rows(1) := u_del_rows(i);
6820        END IF;
6821 
6822        -- Start of bugfix 4493263
6823        OPEN c_delv_trip_id_cursor(l_del_tmp_rows(1));
6824        LOOP
6825            FETCH c_delv_trip_id_cursor INTO l_dummy_doc_set(1).p_trip_id;
6826            EXIT WHEN c_delv_trip_id_cursor%NOTFOUND;
6827            --
6828            IF l_debug_on THEN
6829               WSH_DEBUG_SV.log(l_module_name, 'Trip Id : ', l_dummy_doc_set(1).p_trip_id );
6830            END IF;
6831            --
6832        END LOOP;
6833        CLOSE c_delv_trip_id_cursor;
6834        -- End of bugfix 4493263
6835        --
6836        -- Debug Statements
6837        --
6838        IF(l_parent_delivery_id IS NOT NULL) THEN
6839 	IF (l_consol_del_doc_set.COUNT >0 AND(l_consol_del_doc_set.EXISTS(l_parent_delivery_id)))  THEN
6840           l_content_del_flag := FALSE;
6841         END IF;
6842        END IF;
6843        IF l_content_del_flag THEN
6844         IF l_debug_on THEN
6845            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_SETS.PRINT_DOCUMENT_SETS',WSH_DEBUG_SV.C_PROC_LEVEL);
6846         END IF;
6847        --
6848        wsh_document_sets.print_document_sets(
6849                p_report_set_id     =>   l_document_set_id ,
6850                p_organization_id     =>   NULL,
6851                p_trip_ids       =>    l_dummy_rows1,
6852                p_stop_ids       =>    l_dummy_rows1,
6853                p_delivery_ids     =>    l_del_tmp_rows,
6854                p_document_param_info   =>   l_dummy_doc_set,
6855                x_return_status     =>   l_return_status);
6856 
6857        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6858           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6859            l_num_error := l_num_error + 1;
6860           ELSE
6861            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DOC_SUB_ERROR');
6862            --
6863            -- Debug Statements
6864            --
6865            IF l_debug_on THEN
6866                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6867            END IF;
6868            --
6869            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6870            x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6871            wsh_util_core.add_message(x_return_status);
6872            l_num_warn := l_num_warn + 1;
6873           END IF;
6874        END IF;
6875       END IF;
6876     END IF;
6877 
6878  --Bug 5255366 (Storing Consol-del-Id in a tab so that multiple Doc set firing is avoided)
6879     IF l_parent_delivery_id IS NOT NULL THEN
6880        IF (NOT l_consol_del_doc_set.EXISTS(l_parent_delivery_id)) THEN
6881 	  l_consol_del_doc_set(l_parent_delivery_id) := l_parent_delivery_id;
6882        END IF;
6883     END IF;
6884      --J TP Release : If TP is installed, confirmed delivery has to be planned
6885     --tkt
6886     IF (NOT l_unassign_all_flag_tab(i) and wsh_util_core.TP_IS_INSTALLED='Y') THEN
6887 
6888        l_del_tmp_rows.delete;
6889        l_del_tmp_rows(1) := u_del_rows(i);
6890 
6891        IF l_debug_on THEN
6892           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
6893        END IF;
6894 
6895        PLAN(p_del_rows      => l_del_tmp_rows,
6896              x_return_status => l_return_status,
6897              p_called_for_sc => TRUE);
6898 
6899        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6900           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6901            l_num_error := l_num_error + 1;
6902           ELSE
6903              IF l_debug_on THEN
6904                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6905              END IF;
6906              FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6907              x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6908              wsh_util_core.add_message(x_return_status);
6909              l_num_warn := l_num_warn + 1;
6910           END IF;
6911        END IF;
6912 
6913     END IF;
6914 
6915     IF l_debug_on THEN
6916       WSH_DEBUG_SV.log(l_module_name,'l_itm_exc_flag count', l_itm_exc_flag.count);
6917     END IF;
6918     --Bug 9326608 Changed l_itm_exc_flag to use i as index
6919     IF l_itm_exc_flag(i) = 'Y' THEN
6920 
6921         IF l_debug_on THEN
6922            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',WSH_DEBUG_SV.C_PROC_LEVEL);
6923         END IF;
6924 
6925         WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception
6926                                   (p_delivery_id => u_del_rows(i),
6927                                    p_action_type => 'SHIP_CONFIRM',
6928                                    p_ship_from_location_id =>  l_ship_from_location,
6929                                    x_return_status => l_return_status);
6930 
6931         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6932               l_num_error := l_num_error + 1 ;
6933               l_delivery_id := u_del_rows(i);
6934               raise ship_confirm_error;
6935         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6936               l_num_warn := l_num_warn + 1;
6937         END IF;
6938 
6939     END IF;
6940 
6941     --
6942     -- Debug Statements
6943     --
6944     IF l_debug_on THEN
6945        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
6946     END IF;
6947     --
6948     wsh_new_delivery_actions.update_leg_sequence(
6949       p_delivery_id => u_del_rows(i),
6950       x_return_status => l_return_status);
6951 
6952     IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6953        l_num_error := l_num_error + 1 ;
6954        l_delivery_id := u_del_rows(i);
6955        raise ship_confirm_error;
6956     ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6957        l_num_warn := l_num_warn + 1;
6958     END IF;
6959 
6960 
6961 
6962   END LOOP ; ---key loop
6963 
6964 
6965 
6966 
6967 
6968   --/== Workflow Changes
6969   IF (p_intransit_flag = 'N') THEN
6970 	l_defer_interface_flag := 'Y';
6971   ELSE
6972 	l_defer_interface_flag :=  p_defer_interface_flag;
6973   END IF;
6974   --==/
6975 
6976   -- 2121399
6977 
6978   IF l_debug_on THEN
6979     WSH_DEBUG_SV.log(l_module_name,'u_number_of_lpn count', l_with_mc_trip_flag.count);
6980     WSH_DEBUG_SV.log(l_module_name,'u_initial_pickup_date count', u_initial_pickup_date.count);
6981     WSH_DEBUG_SV.log(l_module_name,'u_ultimate_dropoff_date count', u_ultimate_dropoff_date.count);
6982     WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6983   END IF;
6984 
6985   -- BULK UPDATE  FOR ALL DELIVERIES IN p_del_rows
6986 
6987   -- Update the delivery record with status code and confirm date
6988   -- 2052673  - modified the way in which the number_of_lpn is being updated.
6989         -- 2335270  included last_updated_by and last_update_login
6990   FORALL i IN 1..u_del_rows.count
6991     UPDATE wsh_new_deliveries
6992     SET status_code = u_status_code(i),
6993       confirm_date = sysdate,
6994     confirmed_by = nvl(confirmed_by, l_user_name),
6995       -- number_of_lpn = decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)) , --Bug 1729723
6996     number_of_lpn = decode(number_of_lpn, null, decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)), number_of_lpn),
6997     initial_pickup_date = u_initial_pickup_date(i) ,
6998     ultimate_dropoff_date = u_ultimate_dropoff_date(i) ,
6999     --OTM R12, when setting delivery to closed, set the tms flag
7000     TMS_INTERFACE_FLAG = DECODE(l_gc3_is_installed,
7001                                 'Y', DECODE(NVL(u_status_code(i), 'XXXXX'),
7002                                             'CL', DECODE(NVL(tms_interface_flag,
7003                                                              WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
7004                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7005                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7006                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7007                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7008                                                          WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
7009                                             NVL(tms_interface_flag,
7010                                                 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7011                                 NVL(tms_interface_flag,
7012                                     WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7013     --END OTM R12
7014     last_update_date    = SYSDATE  ,
7015     last_updated_by    = l_user_id,
7016     last_update_login  = l_login_id,
7017     --/==Workflow Changes
7018     del_wf_intransit_attr = decode(p_intransit_flag,'Y','I','X'),
7019     del_wf_close_attr = decode(p_close_flag,'Y','I','X'),
7020     del_wf_interface_attr = decode(l_defer_interface_flag,'N','I','X')
7021     --==/
7022     WHERE  delivery_id = u_del_rows(i);
7023 
7024     IF l_mdc_co_del_tab.count > 0 THEN
7025 
7026         Confirm_Consolidation_Delivery(
7027              p_consol_del_tab   => l_mdc_co_del_tab,
7028              x_return_status    => l_return_status);
7029 
7030         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7031               raise ship_confirm_error;
7032         ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7033               l_num_warn := l_num_warn + 1;
7034         END IF;
7035 
7036     END IF;
7037 
7038 
7039     --/== Workflow Changes - Controlling Workflow
7040     IF l_debug_on THEN
7041         WSH_DEBUG_SV.log(l_module_name,'L_ENABLE_SC_WF',l_enable_sc_wf);
7042         WSH_DEBUG_SV.log(l_module_name,'Controlling-scpod rows count',l_scpod_wf_del_rows.count);
7043     END IF;
7044     FOR k IN 1..l_scpod_wf_del_rows.count LOOP
7045         l_ctr := l_scpod_wf_del_rows(k);
7046 	IF l_debug_on THEN
7047 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_SCPOD_C_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
7048 	END IF;
7049 
7050         WSH_WF_STD.Start_Scpod_C_Process( p_entity_id => u_del_rows(l_ctr),
7051                                           p_organization_id => u_organization_id(l_ctr),
7052                                           x_process_started => l_process_started,
7053                                           x_return_status => l_return_status);
7054 	IF l_debug_on THEN
7055 	    WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
7056 	    WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
7057 	END IF;
7058 
7059         IF (l_process_started = 'Y' OR l_process_started = 'E')	THEN
7060 		l_aname_text(l_aname_text.COUNT + 1) := 'INTRANSIT_FLAG';
7061 		l_avalue_text(l_avalue_text.COUNT + 1) := P_INTRANSIT_FLAG;
7062 		l_aname_text(l_aname_text.COUNT + 1) := 'ACTION_FLAG';
7063 		l_avalue_text(l_avalue_text.COUNT + 1) := P_ACTION_FLAG;
7064 		l_aname_text(l_aname_text.COUNT + 1) := 'CLOSE_TRIP_FLAG';
7065 		l_avalue_text(l_avalue_text.COUNT + 1) := P_CLOSE_FLAG;
7066 		l_aname_text(l_aname_text.COUNT + 1) := 'STAGE_DEL_FLAG';
7067 		l_avalue_text(l_avalue_text.COUNT + 1) := P_STAGE_DEL_FLAG;
7068 		l_aname_text(l_aname_text.COUNT + 1) := 'SEND_945_FLAG';
7069 		l_avalue_text(l_avalue_text.COUNT + 1) := P_SEND_945_FLAG;
7070 		l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_BOL_FLAG';
7071 		l_avalue_text(l_avalue_text.COUNT + 1) := P_BOL_FLAG;
7072 		l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_MC_BOL_FLAG';
7073 		l_avalue_text(l_avalue_text.COUNT + 1) := P_MC_BOL_FLAG;
7074 		l_aname_text(l_aname_text.COUNT + 1) := 'SHIP_METHOD_CODE';
7075 		l_avalue_text(l_avalue_text.COUNT + 1) := p_ship_method;
7076 		l_aname_text(l_aname_text.COUNT + 1) := 'DEFER_INTERFACE_FLAG';
7077    		l_avalue_text(l_avalue_text.COUNT + 1) := l_defer_interface_flag;
7078 
7079 
7080 		WF_ENGINE.SetItemAttrTextArray(
7081 			itemtype => 'WSHDEL',
7082 			itemkey  => u_del_rows(l_ctr),
7083 			aname    => l_aname_text,
7084 			avalue   => l_avalue_text);
7085 
7086 		l_aname_num(l_aname_num.COUNT + 1) := 'REPORT_SET_ID';
7087 		l_avalue_num(l_avalue_num.COUNT + 1) := P_REPORT_SET_ID;
7088 
7089 		WF_ENGINE.SetItemAttrNumberArray(
7090 			itemtype => 'WSHDEL',
7091 			itemkey  => u_del_rows(l_ctr),
7092 			aname    => l_aname_num,
7093 			avalue   => l_avalue_num);
7094 
7095 		WF_ENGINE.SetItemAttrDate(
7096 			itemtype => 'WSHDEL',
7097 			itemkey => u_del_rows(l_ctr),
7098 			aname => 'ACTUAL_DATE',
7099 			avalue => P_ACTUAL_DEP_DATE);
7100 
7101           FND_MESSAGE.SET_NAME('WSH','WSH_WF_SCPOD_LAUNCHED');
7102           FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(l_ctr)));
7103           wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS,l_module_name);
7104 
7105 	END IF;
7106     END LOOP;
7107     -- Workflow Changes ==/
7108 
7109     FOR z IN 1..u_del_rows.count LOOP
7110     	IF l_debug_on THEN
7111 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.Raise_Event',WSH_DEBUG_SV.C_PROC_LEVEL);
7112 	END IF;
7113 
7114         WSH_WF_STD.Raise_Event(
7115                 p_entity_type => 'DELIVERY',
7116                 p_entity_id   => u_del_rows(z),
7117                 p_event       => 'oracle.apps.wsh.delivery.gen.shipconfirmed',
7118                 p_organization_id => u_organization_id(z),
7119                 x_return_status   => l_wf_rs);
7120 	IF l_debug_on THEN
7121 	    WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7122 	END IF;
7123 
7124     END LOOP;
7125 
7126   /* H integration: 945 send document  wrudge */
7127   -- Send outbound documents if enabled and deliveries have WSH lines.
7128   IF p_send_945_flag = 'Y' THEN
7129 
7130     FOR i IN 1..u_del_rows.count LOOP
7131       IF u_wsh_lines_exist(i) > 0 THEN
7132         --
7133         -- Debug Statements
7134         --
7135         IF l_debug_on THEN
7136             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRANSACTIONS_UTIL.SEND_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7137         END IF;
7138         --
7139         wsh_transactions_util.send_document(
7140         p_entity_id    => u_del_rows(i),
7141         p_entity_type  => 'DLVY',
7142         p_action_type  => 'A',
7143         p_document_type   => 'SA',
7144         p_organization_id => u_organization_id(i),
7145         x_return_status  => l_return_status);
7146         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7147           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7148             l_num_error := l_num_error + 1;
7149           ELSE
7150             /* new message: WSH_DEL_OUTBOUND_FAILED, token DEL_NAME */
7151             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_OUTBOUND_FAILED');
7152             --
7153             -- Debug Statements
7154             --
7155             IF l_debug_on THEN
7156                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7157             END IF;
7158             --
7159             FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
7160             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7161             wsh_util_core.add_message(x_return_status);
7162             l_num_warn := l_num_warn + 1;
7163           END IF;
7164         END IF;
7165       END IF;  -- u_wsh_lines_exist(i) > 0
7166     END LOOP;
7167 
7168   END IF; -- p_send_945_flag = 'Y'
7169 
7170 
7171 
7172     -- Remove stops that have deliveries with ITM exceptions logged
7173     -- against them from the table of stops to be closed.
7174 
7175     if u_stop_rows.count > 0 then
7176 
7177        FOR i IN u_stop_rows.FIRST .. u_stop_rows.LAST LOOP
7178 
7179            IF l_itm_stops_tab.exists(u_stop_rows(i)) THEN
7180 
7181               u_stop_rows.delete(i);
7182 
7183            END IF;
7184 
7185        END LOOP;
7186 
7187     END IF;
7188 
7189     -- Close the Autocreated Trip-Stops
7190 
7191     if u_stop_rows.count > 0 then
7192 
7193        IF l_debug_on THEN
7194            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7195        END IF;
7196        --
7197        wsh_trip_stops_actions.change_status(
7198             p_stop_rows => u_stop_rows,
7199             p_action  => 'CLOSE',
7200             p_actual_date => nvl(p_actual_dep_date,sysdate),
7201             p_defer_interface_flag => p_defer_interface_flag,   -- bug 1578251
7202             x_return_status => l_return_status,
7203 --tkt
7204             p_caller => p_caller);
7205 
7206        IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7207         x_return_status := l_return_status;
7208         IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7209           l_num_warn := l_num_warn + 1;
7210         ELSE
7211           l_num_error := l_num_error + 1;
7212         END IF;
7213        END IF;
7214 
7215     End if ;
7216 
7217     -- LPN CONV rv
7218     -- Need to delete all the WMS LPNs that were unassigned and unpacked during Ship Confirm
7219     --
7220     IF (l_wms_enabled_flag) THEN
7221     --{
7222         for l_delete_cnt_rec in l_delete_wms_empty_cnt_csr loop
7223         --{
7224             --
7225             --
7226             -- Debug Statements
7227             --
7228             IF l_debug_on THEN
7229                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.DELETE_CONTAINERS',WSH_DEBUG_SV.C_PROC_LEVEL);
7230             END IF;
7231             --
7232             wsh_container_actions.delete_containers (
7233               p_container_id  => l_delete_cnt_rec.delivery_detail_id,
7234               x_return_status => l_return_status);
7235             --
7236             --
7237             -- Debug Statements
7238             --
7239             IF l_debug_on THEN
7240               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
7241             END IF;
7242             --
7243             wsh_util_core.api_post_call(
7244               p_return_status => l_return_status,
7245               x_num_warnings  => l_num_error,
7246               x_num_errors    => l_num_warn,
7247               p_raise_error_flag => FALSE);
7248             --
7249         --}
7250         end loop;
7251     --}
7252     END IF;
7253 
7254    -- 20. set summary messages for warnings and errors
7255 
7256   IF (l_num_error > 0) THEN
7257      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7258      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7259      wsh_util_core.add_message(x_return_status);
7260      rollback to savepoint start_ship_confirm_delivery;
7261 
7262   ELSE
7263 
7264     -- Set Message as Number of Deliveries as Confirmed, In-Transit and Closed
7265     IF ( l_close_del_cnt <> 0 ) THEN
7266 
7267        FND_MESSAGE.SET_NAME('WSH','WSH_CL_DELIVERIES');
7268        FND_MESSAGE.SET_TOKEN('CL_DEL',l_close_del_cnt);
7269        wsh_util_core.add_message(x_return_status);
7270 
7271     END IF;
7272 
7273     IF  (l_confirm_del_cnt <> 0) THEN
7274 
7275        FND_MESSAGE.SET_NAME('WSH','WSH_CO_DELIVERIES');
7276        FND_MESSAGE.SET_TOKEN('CO_DEL',l_confirm_del_cnt);
7277        wsh_util_core.add_message(x_return_status);
7278 
7279     END IF;
7280 
7281     if (l_num_warn > 0) THEN
7282      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7283      x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7284      wsh_util_core.add_message(x_return_status);
7285     elsif (p_del_rows.count > 1) THEN
7286      -- bug 2523074 (frontported bug 2508132):
7287      -- if multiple deliveries are processed, show summary message,
7288      -- so that the user does not think the first message (e.g.,
7289      -- request number) applies to all deliveries.
7290      FND_MESSAGE.SET_NAME('WSH', 'WSH_DEL_CONFIRM_SUCCESS');
7291      wsh_util_core.add_message(x_return_status);
7292     else
7293      FND_MESSAGE.SET_NAME('WSH', 'WSH_ONE_DEL_CONFIRM_SUCCESS');
7294      wsh_util_core.add_message(x_return_status);
7295     end if;
7296   END IF;
7297 
7298   WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7299                                     x_msg_rec_count => l_msg_rec_count,
7300                                     x_return_status => l_return_status);
7301   IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7302      raise ship_confirm_error;
7303   END IF;
7304 
7305 --
7306 -- Debug Statements
7307 --
7308 IF l_debug_on THEN
7309     WSH_DEBUG_SV.pop(l_module_name);
7310 END IF;
7311 --
7312   EXCEPTION
7313     WHEN FND_API.G_EXC_ERROR THEN
7314 
7315       IF (Get_Trip%ISOPEN) THEN
7316         CLOSE Get_Trip;
7317       END IF;
7318 
7319       IF (get_delivery_name%ISOPEN) THEN
7320         CLOSE get_delivery_name;
7321       END IF;
7322 
7323       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7324       --
7325       IF l_debug_on THEN
7326         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7327         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7328       END IF;
7329       --
7330     WHEN ship_confirm_error  THEN
7331 
7332       IF (Get_Trip%ISOPEN) THEN
7333         CLOSE Get_Trip;
7334       END IF;
7335 
7336       IF (get_delivery_name%ISOPEN) THEN
7337         CLOSE get_delivery_name;
7338       END IF;
7339 
7340       FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
7341       --
7342       -- Debug Statements
7343       --
7344       IF l_debug_on THEN
7345           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7346       END IF;
7347       --
7348       FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
7349       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7350       wsh_util_core.add_message(x_return_status);
7351       WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7352                                         x_msg_rec_count => l_msg_rec_count,
7353                                         x_return_status => l_return_status);
7354 
7355 --
7356 -- Debug Statements
7357 --
7358 IF l_debug_on THEN
7359     WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_CONFIRM_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7360     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_CONFIRM_ERROR');
7361 END IF;
7362 --
7363     WHEN record_locked THEN
7364 
7365       IF (Get_Trip%ISOPEN) THEN
7366         CLOSE Get_Trip;
7367       END IF;
7368 
7369       IF (get_delivery_name%ISOPEN) THEN
7370         CLOSE get_delivery_name;
7371       END IF;
7372 
7373      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
7374      wsh_util_core.add_message(x_return_status);
7375      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7376      WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7377                                        x_msg_rec_count => l_msg_rec_count,
7378                                        x_return_status => l_return_status);
7379 
7380 --
7381 -- Debug Statements
7382 --
7383 IF l_debug_on THEN
7384     WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7385     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
7386 END IF;
7387 --
7388     WHEN others THEN
7389 
7390       IF (Get_Trip%ISOPEN) THEN
7391         CLOSE Get_Trip;
7392       END IF;
7393 
7394       IF (get_delivery_name%ISOPEN) THEN
7395         CLOSE get_delivery_name;
7396       END IF;
7397 
7398       IF get_del_first_trip%isopen THEN
7399          CLOSE get_del_first_trip;
7400       END IF;
7401       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CONFIRM_DELIVERY');
7402       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7403 
7404       --
7405       -- Debug Statements
7406       --
7407       IF l_debug_on THEN
7408           WSH_DEBUG_SV.logmsg(l_module_name,  'UNEXPECTED ERROR : ' || SQLERRM  );
7409       END IF;
7410       --
7411       WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7412                                         x_msg_rec_count => l_msg_rec_count,
7413                                         x_return_status => l_return_status);
7414 
7415 --
7416 -- Debug Statements
7417 --
7418 IF l_debug_on THEN
7419     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7420     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7421 END IF;
7422 --
7423 END Confirm_Delivery ;
7424 
7425 
7426 -- J-IB-NPARIKH---{
7427 --
7428 --========================================================================
7429 -- PROCEDURE : setInTransit
7430 --
7431 -- PARAMETERS: p_in_rec          Delivery information record
7432 --             x_return_status   Return status of the API
7433 --
7434 -- COMMENT   : This procedure sets delivery to in-transit.
7435 --             This is called by stop close API/Group API
7436 --
7437 --             It performs the following steps:
7438 --             01. Update delivery lines to status "C"
7439 --             02. For containers, update shipped quantity to 1
7440 --             03. Update INV/OE interface flag to N for non-containers
7441 --             04. Update INV/OE interface flag to Null for containers
7442 --             05. Update delivery status to IT
7443 --             06. Update delivery initial pickup date to actual departure date of stop
7444 --             07. Update delivery ultimate dropoff date based on actual departure date of stop
7445 --             08. Close delivery exceptions (Pack J Exceptions project)
7446 --
7447 --========================================================================
7448 --
7449 PROCEDURE setInTransit
7450             (
7451               p_in_rec             IN          WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7452               x_return_status      OUT NOCOPY  VARCHAR2
7453             )
7454 IS
7455 --{
7456     l_user_id     NUMBER;
7457     l_login_id    NUMBER;
7458     l_num_warnings          NUMBER;
7459     l_num_errors            NUMBER;
7460     --
7461 
7462     l_msg_count       NUMBER;
7463     l_msg_data        VARCHAR2(4000);
7464     l_return_status   VARCHAR2(1);
7465 
7466     l_detail_tab     WSH_UTIL_CORE.id_tab_type; -- DBI Project
7467     l_dbi_rs                      VARCHAR2(1); -- Return Status from DBI API
7468 
7469     --/== Workflow Changes
7470     l_org_id NUMBER;
7471     l_wf_rs VARCHAR2(1);
7472     l_override_wf VARCHAR2(1);
7473     l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7474     l_purged_count NUMBER;
7475     --==/
7476 
7477     -- LPN CONV. rv
7478     cursor l_get_cnt_attr_csr(p_delivery_id IN NUMBER) is
7479     select wdd.organization_id organization_id,
7480            nvl(wdd.line_direction,'O') line_direction,
7481            wdd.delivery_detail_id delivery_detail_id
7482     from   wsh_delivery_assignments_v wda,
7483            wsh_delivery_details wdd
7484     where  wda.delivery_detail_id = wdd.delivery_detail_id
7485     and    wdd.container_flag IN ('Y','C')
7486     and    nvl(wdd.line_direction,'O') IN ('O', 'IO')
7487     and    wda.delivery_id = p_delivery_id;
7488 
7489     l_wms_org VARCHAR2(10);
7490     l_sync_tmp_wms_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7491     l_sync_tmp_inv_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7492 
7493     l_child_cnt_counter NUMBER;
7494     l_cnt_wms_counter NUMBER;
7495     l_cnt_inv_counter NUMBER;
7496     -- LPN CONV. rv
7497 
7498     --R12.1.1 STANDALONE PROJECT
7499     l_pending_advice_flag  VARCHAR2(1);
7500     l_organization_id  NUMBER;
7501     l_warehouse_type   VARCHAR2(3);
7502     --
7503     -- LSP PROJECT
7504     l_standalone_mode  VARCHAR2(1);
7505     l_client_id_tab    WSH_UTIL_CORE.id_tab_type;
7506     -- LSP PROJECT
7507 
7508     l_debug_on    BOOLEAN;
7509     --
7510     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setInTransit';
7511 --}
7512 BEGIN
7513 --{
7514     --SAVEPOINT dlvy_setInTransit_begin_sp;
7515     --
7516     -- Debug Statements
7517     --
7518     --
7519     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7520     --
7521     IF l_debug_on IS NULL
7522     THEN
7523       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7524     END IF;
7525     --
7526     IF l_debug_on THEN
7527       WSH_DEBUG_SV.push(l_module_name);
7528       --
7529       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7530       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
7531       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7532       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7533       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7534       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
7535       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7536       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id     ', p_in_rec.stop_id     );
7537     END IF;
7538     --
7539     l_user_id       := FND_GLOBAL.user_id;
7540     l_login_id      := FND_GLOBAL.login_id;
7541     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7542     l_num_warnings  := 0;
7543     l_num_errors    := 0;
7544 
7545     --
7546     --
7547     -- Bug: 1563304 : Update all its delivery_details to 'C'
7548     -- Bug 1578251: update interfaced_flags = 'N' to improve
7549     --   performance in filtering records ready to interface
7550     --   but not yet interfaced.
7551     /* H Integration: 940/945 do not update cancelled delivery lines wrudge */
7552     --  Bug 2335270 : last_update_date = SYSDATE is included in
7553     --                the update statement
7554     --
7555     -- LPN CONV. rv
7556     --
7557     --
7558     IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7559     THEN
7560     --{
7561         --l_child_cnt_counter := 1;
7562         l_cnt_wms_counter := 1;
7563         l_cnt_inv_counter := 1;
7564         FOR child_cnt_rec in l_get_cnt_attr_csr(p_in_rec.delivery_id)  LOOP
7565         --{
7566             --
7567             IF l_debug_on THEN
7568               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
7569             END IF;
7570             --
7571             l_wms_org := wsh_util_validate.check_wms_org(child_cnt_rec.organization_id);
7572             --
7573 
7574             IF(l_wms_org = 'Y') THEN
7575               l_sync_tmp_wms_recTbl.delivery_detail_id_tbl(l_cnt_wms_counter) := child_cnt_rec.delivery_detail_id;
7576               l_sync_tmp_wms_recTbl.operation_type_tbl(l_cnt_wms_counter) := 'UPDATE';
7577               l_cnt_wms_counter := l_cnt_wms_counter +1;
7578             ELSIF (l_wms_org = 'N') THEN
7579               l_sync_tmp_inv_recTbl.delivery_detail_id_tbl(l_cnt_inv_counter) := child_cnt_rec.delivery_detail_id;
7580               l_sync_tmp_inv_recTbl.operation_type_tbl(l_cnt_inv_counter) := 'UPDATE';
7581               l_cnt_inv_counter := l_cnt_inv_counter +1;
7582             END IF;
7583             --
7584         --}
7585         END LOOP;
7586         --
7587         IF l_debug_on THEN
7588           wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_wms_recTbl', l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count);
7589           wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_inv_recTbl', l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count);
7590         END IF;
7591         --
7592         IF  (WSH_WMS_LPN_GRP.GK_WMS_UPD_STS OR WSH_WMS_LPN_GRP.GK_WMS_UPD_QTY)
7593         AND l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count > 0
7594         THEN
7595         --{
7596             --
7597             IF l_debug_on THEN
7598               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7599             END IF;
7600             --
7601             WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7602               (
7603                 p_sync_tmp_recTbl   => l_sync_tmp_wms_recTbl,
7604                 x_return_status     => l_return_status
7605               );
7606             --
7607             IF l_debug_on THEN
7608                WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7609             END IF;
7610             --
7611             WSH_UTIL_CORE.API_POST_CALL
7612               (
7613                 p_return_status => l_return_status,
7614                 x_num_warnings  => l_num_warnings,
7615                 x_num_errors    => l_num_errors
7616               );
7617             --
7618         --}
7619         ELSIF (WSH_WMS_LPN_GRP.GK_INV_UPD_STS OR WSH_WMS_LPN_GRP.GK_INV_UPD_QTY)
7620         AND l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count > 0
7621         THEN
7622         --{
7623             --
7624             IF l_debug_on THEN
7625               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7626             END IF;
7627             --
7628             WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7629               (
7630                 p_sync_tmp_recTbl   => l_sync_tmp_inv_recTbl,
7631                 x_return_status     => l_return_status
7632               );
7633             --
7634             IF l_debug_on THEN
7635                WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7636             END IF;
7637             --
7638             WSH_UTIL_CORE.API_POST_CALL
7639               (
7640                 p_return_status => l_return_status,
7641                 x_num_warnings  => l_num_warnings,
7642                 x_num_errors    => l_num_errors
7643               );
7644             --
7645         --}
7646         END IF;
7647     --}
7648     END IF;
7649     -- LPN CONV. rv
7650     UPDATE wsh_Delivery_details
7651     SET    released_Status     = 'C',
7652            shipped_quantity    = DECODE(container_flag, 'Y', 1, shipped_quantity),
7653            inv_interfaced_flag = DECODE(container_flag, 'N', NVL(inv_interfaced_flag,'N'), NULL),
7654            oe_interfaced_flag  = DECODE(container_flag, 'N', NVL(oe_interfaced_flag, 'N'), NULL),
7655            last_update_date    = SYSDATE,
7656            last_updated_by     = l_user_id,
7657            last_update_login   = l_login_id
7658     WHERE  delivery_detail_id IN (
7659                                     SELECT delivery_Detail_id
7660                                     FROM   wsh_delivery_assignments_v
7661                                     WHERE  delivery_id = p_in_rec.delivery_id
7662                                 )
7663     AND    released_status    <> 'D'
7664     RETURNING delivery_detail_id,client_id BULK COLLECT INTO l_detail_tab,l_client_id_tab; -- Added for DBI Project, LSP PROJECT :Added l_client_id_tab
7665     --
7666     IF l_debug_on THEN
7667       WSH_DEBUG_SV.log(l_module_name,'Number of Lines updated',SQL%ROWCOUNT);
7668     END IF;
7669     --
7670     --
7671     -- DBI Project
7672     -- Update of wsh_delivery_details where requested_quantity/released_status
7673     -- are changed, call DBI API after the update.
7674     -- DBI API will check if DBI is installed
7675     IF l_debug_on THEN
7676       WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_detail_tab.count);
7677     END IF;
7678     WSH_INTEGRATION.DBI_Update_Detail_Log
7679       (p_delivery_detail_id_tab => l_detail_tab,
7680        p_dml_type               => 'UPDATE',
7681        x_return_status          => l_dbi_rs);
7682 
7683     IF l_debug_on THEN
7684       WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7685     END IF;
7686     -- Only Handle Unexpected error
7687     IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7688       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7689     END IF;
7690     -- End of Code for DBI Project
7691     --
7692     -- R12.1.1 STANDALONE PROJECT
7693     l_pending_advice_flag := null;
7694     --
7695     -- LSP PROJECT :
7696     l_standalone_mode := WMS_DEPLOY.WMS_DEPLOYMENT_MODE;
7697     IF l_debug_on THEN
7698       WSH_DEBUG_SV.log(l_module_name,'l_standalone_mode',l_standalone_mode);
7699       WSH_DEBUG_SV.log(l_module_name,'l_client_id_tab.COUNT',l_client_id_tab.COUNT);
7700     END IF;
7701     IF (l_standalone_mode = 'D' OR (l_standalone_mode = 'L' and l_client_id_tab.COUNT > 0 )) THEN  --{
7702       l_pending_advice_flag := 'Y';
7703     ELSE
7704       l_organization_id := null;
7705 
7706       BEGIN
7707 
7708         SELECT organization_id
7709           INTO l_organization_id
7710           FROM wsh_new_deliveries
7711          WHERE delivery_id = p_in_rec.delivery_id;
7712 
7713       EXCEPTION
7714          WHEN OTHERS THEN
7715               NULL;
7716       END;
7717 
7718       IF (l_organization_id is not null) THEN
7719 
7720         l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
7721                                P_Organization_ID       => l_organization_id,
7722                                X_Return_Status         => l_return_status);
7723 
7724         IF l_debug_on THEN
7725             wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
7726             wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
7727         END IF;
7728 
7729         IF (l_warehouse_type = 'TPW') THEN
7730           l_pending_advice_flag := 'Y';
7731         END IF;
7732 
7733       END IF;
7734 
7735     END IF; --}
7736 
7737     UPDATE wsh_new_deliveries
7738     SET    initial_pickup_date   = p_in_rec.actual_date,
7739            ultimate_dropoff_date = GREATEST(
7740                                              NVL(ultimate_dropoff_date,p_in_rec.actual_date),
7741                                              p_in_rec.actual_date
7742                                            ),
7743            status_code           = 'IT',
7744            --R12.1.1 STANDALONE PROJECT
7745            pending_advice_flag   = l_pending_advice_flag,
7746            last_update_date      = SYSDATE  ,
7747            last_updated_by       = l_user_id,
7748            last_update_login     = l_login_id
7749     WHERE  delivery_id           = p_in_rec.delivery_id
7750     RETURNING organization_id INTO l_org_id;
7751     --
7752     IF (SQL%NOTFOUND)
7753     THEN
7754     --{
7755         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7756         l_num_errors := l_num_errors + 1;
7757         wsh_util_core.add_message(x_return_status,l_module_name);
7758     --}
7759     ELSE
7760         --/== Workflow Changes
7761         l_del_entity_ids(1) := p_in_rec.delivery_id;
7762         l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7763         IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7764             IF l_debug_on THEN
7765                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.LOG_WF_EXCEPTION', WSH_DEBUG_SV.C_PROC_LEVEL);
7766             END IF;
7767             WSH_WF_STD.Log_Wf_Exception(p_entity_type    => 'DELIVERY',
7768 	                                p_entity_id      => p_in_rec.delivery_id,
7769 				        p_logging_entity => 'SHIPPER',
7770 				        p_exception_name => 'WSH_DEL_SCPOD_PURGED',
7771 				        x_return_status  => l_wf_rs);
7772             IF l_debug_on THEN
7773                 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7774             END IF;
7775 
7776             IF l_debug_on THEN
7777                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
7778             END IF;
7779 
7780 	    WSH_WF_STD.Purge_Entity(p_entity_type   => 'DELIVERY',
7781 				    p_entity_ids    => l_del_entity_ids,
7782 				    p_docommit      => FALSE,
7783 				    x_success_count => l_purged_count,
7784 				    x_return_status => l_wf_rs);
7785             IF l_debug_on THEN
7786                 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
7787                 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7788 	    END IF;
7789 
7790         END IF;
7791 
7792 	IF l_debug_on THEN
7793 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7794 	END IF;
7795 
7796 	WSH_WF_STD.RAISE_EVENT(p_entity_type     =>  'DELIVERY',
7797 			       p_entity_id       =>  p_in_rec.delivery_id,
7798 			       p_event           =>  'oracle.apps.wsh.delivery.gen.setintransit',
7799 			       p_organization_id =>  l_org_id,
7800 			       x_return_status   =>  l_wf_rs);
7801 
7802 	IF l_debug_on THEN
7803 		WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7804 	END IF;
7805         -- Workflow Changes ==/
7806     END IF;
7807 
7808    --
7809 
7810    -- Close Exceptions for delivery and its contents
7811    IF l_debug_on THEN
7812       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7813    END IF;
7814    WSH_XC_UTIL.Close_Exceptions (
7815                                      p_api_version           => 1.0,
7816                                      x_return_status         => l_return_status,
7817                                      x_msg_count             => l_msg_count,
7818                                      x_msg_data              => l_msg_data,
7819                                      p_logging_entity_id     => p_in_rec.delivery_id,
7820                                      p_logging_entity_name   => 'DELIVERY',
7821                                      p_consider_content      => 'Y',
7822 --tkt
7823                                      p_caller                => p_in_rec.caller
7824                                   ) ;
7825 
7826    IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
7827         x_return_status := l_return_status;
7828         wsh_util_core.add_message(x_return_status);
7829         IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
7830               l_num_errors := l_num_errors + 1;
7831               RAISE FND_API.G_EXC_ERROR;
7832         ELSE
7833               l_num_warnings := l_num_warnings + 1 ;
7834         END IF;
7835    END IF;
7836 
7837    IF l_num_errors > 0
7838    THEN
7839         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
7840    ELSIF l_num_warnings > 0
7841    THEN
7842         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7843    ELSE
7844         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7845    END IF;
7846    --
7847    --
7848     --
7849     -- Debug Statements
7850     --
7851     IF l_debug_on THEN
7852         WSH_DEBUG_SV.pop(l_module_name);
7853     END IF;
7854     --
7855 --}
7856 EXCEPTION
7857 --{
7858     WHEN FND_API.G_EXC_ERROR THEN
7859 
7860       --ROLLBACK TO dlvy_setInTransit_begin_sp;
7861       --
7862       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7863       --
7864       IF l_debug_on THEN
7865         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7866         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7867       END IF;
7868       --
7869     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7870 
7871       --ROLLBACK TO dlvy_setInTransit_begin_sp;
7872       --
7873       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7874       --
7875       IF l_debug_on THEN
7876         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7877         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7878       END IF;
7879       --
7880     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
7881       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7882       --
7883       IF l_debug_on THEN
7884         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7885         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
7886       END IF;
7887      WHEN others THEN
7888         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setInTransit',l_module_name);
7889         --
7890         --ROLLBACK TO dlvy_setInTransit_begin_sp;
7891         --
7892         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7893         --
7894         -- Debug Statements
7895         --
7896         IF l_debug_on THEN
7897             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7898         END IF;
7899         --
7900 --}
7901 END setInTransit;
7902 --
7903 --
7904 --
7905 --========================================================================
7906 -- PROCEDURE : setClose
7907 --
7908 -- PARAMETERS: p_in_rec          Delivery information record
7909 --             x_return_status   Return status of the API
7910 --
7911 -- COMMENT   : This procedure sets delivery to CLOSED.
7912 --             This is called by stop close API/Group API
7913 --
7914 --             It performs the following steps:
7915 --             01. Update delivery status to CL
7916 --             02. Update delivery ultimate dropoff date based on actual departure date of stop
7917 --             03. Close delivery exceptions (Pack J Exceptions project)
7918 --             04. Close stops exclusively owened by delivery.
7919 --
7920 --========================================================================
7921 --
7922 PROCEDURE setClose
7923             (
7924               p_in_rec             IN          WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7925               x_return_status      OUT NOCOPY  VARCHAR2
7926             )
7927 IS
7928 --{
7929     CURSOR delivery_stops_csr (p_delivery_id NUMBER)
7930     IS
7931     SELECT stop_id
7932     FROM   wsh_delivery_legs wdl,
7933            wsh_Trip_stops    wts
7934     WHERE  wdl.delivery_id = p_delivery_id
7935     AND    (
7936                 wdl.pick_up_stop_id  = wts.stop_id
7937              OR wdl.drop_off_stop_id = wts.stop_id
7938            )
7939     AND    wts.status_code <> 'CL';
7940     --
7941     --
7942     l_num_warnings          NUMBER;
7943     l_num_errors            NUMBER;
7944     l_return_status         VARCHAR2(10);
7945     --
7946     l_user_id     NUMBER;
7947     l_login_id    NUMBER;
7948     l_cnt         NUMBER := 0;
7949     l_stop_rows   wsh_util_core.id_tab_type;
7950 
7951     l_msg_count       NUMBER;
7952     l_msg_data        VARCHAR2(4000);
7953 
7954     --/== Workflow Changes
7955     l_org_id NUMBER;
7956     l_wf_rs VARCHAR2(1);
7957     l_override_wf VARCHAR2(1);
7958     l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7959     l_purged_count NUMBER;
7960     --==/
7961 
7962     l_gc3_is_installed	   VARCHAR2(1); --OTM R12
7963 
7964     --
7965     l_debug_on    BOOLEAN;
7966     --
7967     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setClose';
7968 --}
7969 BEGIN
7970 --{
7971     --SAVEPOINT dlvy_close_begin_sp;
7972     --
7973     -- Debug Statements
7974     --
7975     --
7976     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7977     --
7978     IF l_debug_on IS NULL
7979     THEN
7980       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7981     END IF;
7982     --
7983     IF l_debug_on THEN
7984       WSH_DEBUG_SV.push(l_module_name);
7985       --
7986       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7987       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
7988       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7989       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7990       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7991       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
7992       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7993     END IF;
7994     --
7995     l_user_id       := FND_GLOBAL.user_id;
7996     l_login_id      := FND_GLOBAL.login_id;
7997     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7998     l_num_warnings  := 0;
7999     l_num_errors    := 0;
8000     --
8001     --OTM R12
8002     l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
8003 
8004     IF l_gc3_is_installed IS NULL THEN
8005       l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
8006     END IF;
8007     --
8008     --
8009     UPDATE wsh_new_deliveries
8010     SET    ultimate_dropoff_date = GREATEST(
8011                                              nvl(ultimate_dropoff_date,p_in_rec.actual_date),
8012                                              p_in_rec.actual_date
8013                                            ),
8014            status_code           = 'CL',
8015            --OTM R12, when setting delivery to closed, set tms flag
8016            tms_interface_flag    = DECODE(l_gc3_is_installed,
8017                                           'Y', DECODE(NVL(tms_interface_flag,
8018                                                           WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
8019                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
8020                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
8021                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
8022                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
8023                                                       WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
8024                                           NVL(tms_interface_flag,
8025                                               WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
8026            --
8027            last_update_date      = SYSDATE  ,
8028            last_updated_by       = l_user_id,
8029            last_update_login     = l_login_id
8030     WHERE  delivery_id           = p_in_rec.delivery_id
8031     RETURNING organization_id INTO l_org_id;
8032     --
8033     IF (SQL%NOTFOUND)
8034     THEN
8035          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8036          wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8037          RAISE FND_API.G_EXC_ERROR;
8038     END IF;
8039     --
8040 
8041 
8042     --/== Workflow Changes
8043     l_del_entity_ids(1) := p_in_rec.delivery_id;
8044     l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
8045     IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
8046         WSH_WF_STD.Log_Wf_Exception('DELIVERY',
8047 		p_in_rec.delivery_id,
8048 		NULL,
8049 		'SHIPPER',
8050 		'WSH_DEL_SCPOD_PURGED',
8051 		l_wf_rs);
8052 	WSH_WF_STD.Purge_Entity(
8053 		p_entity_type => 'DELIVERY',
8054 		p_entity_ids  => l_del_entity_ids,
8055 		p_docommit    => FALSE,
8056 		x_success_count  => l_purged_count,
8057 		x_return_status => l_wf_rs);
8058     END IF;
8059 
8060 
8061     IF l_debug_on THEN
8062 	WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8063     END IF;
8064 
8065     WSH_WF_STD.RAISE_EVENT(p_entity_type  =>  'DELIVERY',
8066 			p_entity_id       =>  p_in_rec.delivery_id,
8067 			p_event           =>  'oracle.apps.wsh.delivery.gen.closed',
8068 			p_organization_id =>  l_org_id,
8069 			x_return_status   =>  l_wf_rs);
8070 
8071     IF l_debug_on THEN
8072 	WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8073     END IF;
8074     -- Workflow Changes ==/
8075 
8076     -- Close Exceptions for delivery and its contents
8077     IF l_debug_on THEN
8078        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
8079     END IF;
8080     WSH_XC_UTIL.Close_Exceptions (
8081                                      p_api_version           => 1.0,
8082                                      x_return_status         => l_return_status,
8083                                      x_msg_count             => l_msg_count,
8084                                      x_msg_data              => l_msg_data,
8085                                      p_logging_entity_id     => p_in_rec.delivery_id,
8086                                      p_logging_entity_name   => 'DELIVERY',
8087                                      p_consider_content      => 'Y'
8088                                   ) ;
8089 
8090     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
8091          x_return_status := l_return_status;
8092          wsh_util_core.add_message(x_return_status);
8093          IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)  THEN
8094                l_num_errors := l_num_errors + 1;
8095                RAISE FND_API.G_EXC_ERROR;
8096          ELSE
8097                l_num_warnings := l_num_warnings + 1 ;
8098          END IF;
8099     END IF;
8100 
8101     IF (p_in_rec.manual_flag = 'Y')
8102     THEN
8103     --{
8104        -- If manual Close then close any stops not closed.
8105        -- Assumption: check_close validates that the delivery
8106        -- exclusively owns these stops.
8107        --
8108        FOR delivery_stops_rec IN delivery_stops_csr(p_in_rec.delivery_id)
8109        LOOP
8110        --{
8111             l_cnt := l_cnt + 1;
8112             --
8113             l_stop_rows(l_cnt) := delivery_stops_rec.stop_id;
8114        --}
8115        END LOOP;
8116        --
8117        IF l_stop_rows.count > 0
8118        THEN
8119        --{
8120             -- since the delivery is CLOSED and it owns these stops exclusively,
8121             -- it is safe to set p_defer_interface_flag = 'Y'
8122                -- because nothing needs to be interfaced
8123             --
8124             -- Debug Statements
8125             --
8126             IF l_debug_on THEN
8127                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
8128             END IF;
8129             --
8130             wsh_trip_stops_actions.change_status
8131                 (
8132                   p_stop_rows             => l_stop_rows,
8133                   p_action                => 'CLOSE',
8134                   p_actual_date           => p_in_rec.actual_date,
8135                   p_defer_interface_flag  => 'Y',   -- bug 1578251
8136                   x_return_status         => l_return_status,
8137 --tkt
8138                   p_caller                => p_in_rec.caller
8139                 );
8140             --
8141             wsh_util_core.api_post_call
8142               (
8143                 p_return_status => l_return_status,
8144                 x_num_warnings  => l_num_warnings,
8145                 x_num_errors    => l_num_errors
8146               );
8147             --
8148             --
8149        --}
8150        END IF;
8151     --}
8152     END IF;
8153    --
8154    IF l_num_errors > 0
8155    THEN
8156         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
8157    ELSIF l_num_warnings > 0
8158    THEN
8159         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8160    ELSE
8161         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8162    END IF;
8163    --
8164    --
8165     --
8166     -- Debug Statements
8167     --
8168     IF l_debug_on THEN
8169         WSH_DEBUG_SV.pop(l_module_name);
8170     END IF;
8171     --
8172 --}
8173 EXCEPTION
8174 --{
8175       --
8176     WHEN FND_API.G_EXC_ERROR THEN
8177 
8178       --ROLLBACK TO dlvy_close_begin_sp;
8179       --
8180       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8181       --
8182       IF l_debug_on THEN
8183         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8184         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8185       END IF;
8186       --
8187     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8188 
8189       --ROLLBACK TO dlvy_close_begin_sp;
8190       --
8191       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8192       --
8193       IF l_debug_on THEN
8194         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8195         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8196       END IF;
8197       --
8198     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8199       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8200       --
8201       IF l_debug_on THEN
8202         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8203         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8204       END IF;
8205     WHEN others THEN
8206         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setClose',l_module_name);
8207         --
8208         --ROLLBACK TO dlvy_close_begin_sp;
8209         --
8210         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8211         --
8212         -- Debug Statements
8213         --
8214         IF l_debug_on THEN
8215             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8216         END IF;
8217         --
8218 --}
8219 END setClose;
8220 -- J-IB-NPARIKH---}
8221 
8222 
8223 
8224   PROCEDURE change_Status ( p_del_rows  IN wsh_util_core.id_tab_type,
8225              p_action   IN VARCHAR2,
8226              p_actual_date  IN DATE,
8227              x_return_status OUT NOCOPY  VARCHAR2,
8228              p_caller               IN   VARCHAR2) IS
8229 
8230   CURSOR del_status (l_delivery_id NUMBER) IS
8231   SELECT status_code, name,organization_id
8232   FROM   wsh_new_deliveries
8233   WHERE  delivery_id = l_delivery_id;
8234 
8235   CURSOR delivery_leg_stops(l_delivery_id NUMBER) IS
8236   SELECT dg.pick_up_stop_id,
8237      pu_stop.status_code  pu_status,
8238    dg.drop_off_stop_id,
8239      do_stop.status_code  do_status
8240   FROM   wsh_delivery_legs dg,
8241      wsh_trip_stops pu_stop,
8242      wsh_trip_stops do_stop
8243   WHERE  dg.delivery_id = l_delivery_id
8244   AND pu_stop.stop_id = dg.pick_up_stop_id
8245   AND do_stop.stop_id = dg.drop_off_stop_id;
8246 
8247   trip_cnt NUMBER;
8248   l_old_status VARCHAR2(2);
8249   l_name VARCHAR2(30);
8250   l_status_code VARCHAR2(2);
8251   l_del_rows wsh_util_core.id_tab_type;
8252 
8253   l_delivery_id NUMBER;
8254   l_stop_rows wsh_util_core.id_tab_type;
8255 
8256   l_manual_flag  VARCHAR2(1);
8257   l_close_rs   VARCHAR2(1);
8258 
8259   l_num_error NUMBER := 0;
8260   k      NUMBER := 0;
8261 
8262   --bug 1929104
8263   l_actual_date date;
8264 
8265   others EXCEPTION;
8266 
8267   l_wf_rs VARCHAR2(1);    -- Workflow Changes
8268 
8269 --  bug 2335270
8270   l_user_id  NUMBER;
8271   l_login_id NUMBER;
8272   --
8273   l_debug_on BOOLEAN;
8274   --
8275   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHANGE_STATUS';
8276   --
8277   l_return_status    VARCHAR2(30);
8278   l_allowed          VARCHAR2(10);
8279   l_in_rec           WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type;
8280   --
8281   l_num_warnings          NUMBER;
8282   l_num_errors            NUMBER;
8283   l_num_dels_processed    NUMBER;
8284   l_organization_id       NUMBER;
8285   l_warehouse_type        VARCHAR2 (3);
8286 
8287   BEGIN
8288   --
8289   SAVEPOINT dlvy_chg_status_begin_sp;
8290   --
8291   -- Debug Statements
8292   --
8293   --
8294   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8295   --
8296   IF l_debug_on IS NULL
8297   THEN
8298       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8299   END IF;
8300   --
8301   IF l_debug_on THEN
8302       WSH_DEBUG_SV.push(l_module_name);
8303       --
8304       WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
8305       WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DATE',P_ACTUAL_DATE);
8306   END IF;
8307   --
8308   --
8309   l_user_id := FND_GLOBAL.user_id;
8310   l_login_id := FND_GLOBAL.login_id;
8311   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8312   --
8313   l_num_warnings  := 0;
8314   l_num_errors    := 0;
8315   l_num_dels_processed := 0;
8316   --
8317 
8318    IF (p_del_rows.count = 0) THEN
8319      raise others;
8320    END IF;
8321 
8322      -- Close called from Stop close or from UI.
8323 
8324      IF (p_actual_date IS NULL) THEN
8325       l_manual_flag := 'Y';
8326       l_actual_date := SYSDATE;
8327      ELSE
8328       l_manual_flag := 'N';
8329       l_actual_date := p_actual_date;
8330      END IF;
8331     --
8332    --FOR i IN 1..p_del_rows.count
8333    FOR i IN p_del_rows.FIRST..p_del_rows.LAST
8334    LOOP
8335    --{
8336         BEGIN
8337         --{
8338              SAVEPOINT dlvy_chg_status_sp;
8339              --
8340              OPEN  del_status (p_del_rows(i));
8341              FETCH del_status INTO l_old_status , l_name,l_organization_id;
8342              --
8343              -- J-IB-NPARIKH---{
8344              IF (del_status%NOTFOUND)
8345              THEN
8346                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8347                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8348                 --CLOSE del_status;
8349                 l_num_errors := l_num_errors + 1;
8350                 RAISE FND_API.G_EXC_ERROR;
8351              END IF;
8352              -- J-IB-NPARIKH---}
8353              --
8354              --
8355              CLOSE del_status;
8356 
8357                IF (p_action = 'IN-TRANSIT')
8358                THEN
8359                --{
8360 -- J-IB-NPARIKH---{
8361                     --
8362                     l_in_rec.delivery_id    := p_del_rows(i);
8363                     l_in_rec.name           := l_name;
8364                     l_in_rec.status_code    := l_old_status;
8365                     l_in_rec.put_messages   := TRUE;
8366                     l_in_rec.actual_date    := l_actual_date;
8367                     l_in_rec.manual_flag    := l_manual_flag;
8368 --tkt
8369                     l_in_rec.caller         := p_caller;
8370                     --
8371                     --
8372                     -- Debug Statements
8373                     --
8374                     IF l_debug_on THEN
8375                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8376                     END IF;
8377                     --
8378                     WSH_DELIVERY_VALIDATIONS.check_inTransit
8379                         (
8380                            p_in_rec         => l_in_rec,
8381                            x_return_status  => l_return_status,
8382                            x_allowed        => l_Allowed
8383                         );
8384                     --
8385                     IF l_debug_on THEN
8386                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8387                         WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8388                     END IF;
8389                     --
8390                     WSH_UTIL_CORE.api_post_call
8391                         (
8392                             p_return_status => l_return_status,
8393                             x_num_warnings  => l_num_warnings,
8394                             x_num_errors    => l_num_errors
8395                         );
8396                     --
8397                     IF l_Allowed = 'Y'
8398                     THEN
8399                         NULL;
8400                     ELSIF l_Allowed = 'YW'
8401                     THEN
8402                         l_num_warnings := l_num_warnings + 1;
8403                     ELSIF l_Allowed = 'NW'
8404                     THEN
8405                         l_num_warnings := l_num_warnings + 1;
8406                         RAISE wsh_util_core.g_exc_warning;
8407                     ELSE
8408                         l_num_errors   := l_num_errors   + 1;
8409                         RAISE FND_API.G_EXC_ERROR;
8410                     END IF;
8411                     --
8412                     --
8413                     IF l_debug_on THEN
8414                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setInTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8415                     END IF;
8416                     --
8417                     setInTransit
8418                         (
8419                            p_in_rec         => l_in_rec,
8420                            x_return_status  => l_return_status
8421                         );
8422                     --
8423                     IF l_debug_on THEN
8424                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8425                     END IF;
8426                     --
8427                     WSH_UTIL_CORE.api_post_call
8428                         (
8429                             p_return_status => l_return_status,
8430                             x_num_warnings  => l_num_warnings,
8431                             x_num_errors    => l_num_errors
8432                         );
8433                     --
8434                     l_num_dels_processed := l_num_dels_processed + 1;
8435                --}
8436                ELSIF (p_action = 'CLOSE')
8437                THEN
8438                --{
8439                     --
8440                     l_in_rec.delivery_id    := p_del_rows(i);
8441                     l_in_rec.name           := l_name;
8442                     l_in_rec.status_code    := l_old_status;
8443                     l_in_rec.put_messages   := TRUE;
8444                     l_in_rec.actual_date    := l_actual_date;
8445                     l_in_rec.manual_flag    := l_manual_flag;
8446 --tkt
8447                     l_in_rec.caller         := p_caller;
8448                     --
8449                     --
8450                     -- Debug Statements
8451                     --
8452                     IF l_debug_on THEN
8453                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8454                     END IF;
8455                     --
8456                     WSH_DELIVERY_VALIDATIONS.check_close
8457                         (
8458                            p_in_rec         => l_in_rec,
8459                            x_return_status  => l_return_status,
8460                            x_allowed        => l_Allowed
8461                         );
8462                     --
8463                     IF l_debug_on THEN
8464                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8465                         WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8466                     END IF;
8467                     --
8468                     WSH_UTIL_CORE.api_post_call
8469                         (
8470                             p_return_status => l_return_status,
8471                             x_num_warnings  => l_num_warnings,
8472                             x_num_errors    => l_num_errors
8473                         );
8474                     --
8475                     IF l_Allowed = 'Y'
8476                     THEN
8477                         NULL;
8478                     ELSIF l_Allowed = 'YW'
8479                     THEN
8480                         l_num_warnings := l_num_warnings + 1;
8481                     ELSIF l_Allowed = 'NW'
8482                     THEN
8483                         l_num_warnings := l_num_warnings + 1;
8484                         RAISE wsh_util_core.g_exc_warning;
8485                     ELSE
8486                         l_num_errors   := l_num_errors   + 1;
8487                         RAISE FND_API.G_EXC_ERROR;
8488                     END IF;
8489                     --
8490                     --
8491                     IF l_debug_on THEN
8492                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setClose',WSH_DEBUG_SV.C_PROC_LEVEL);
8493                     END IF;
8494                     --
8495                     setClose
8496                         (
8497                            p_in_rec         => l_in_rec,
8498                            x_return_status  => l_return_status
8499                         );
8500                     --
8501                     IF l_debug_on THEN
8502                         WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8503                     END IF;
8504                     --
8505                     WSH_UTIL_CORE.api_post_call
8506                         (
8507                             p_return_status => l_return_status,
8508                             x_num_warnings  => l_num_warnings,
8509                             x_num_errors    => l_num_errors
8510                         );
8511                     --
8512                     l_num_dels_processed := l_num_dels_processed + 1;
8513                     -- J-IB-NPARIKH---}
8514 
8515                --}
8516             ELSIF (p_action = 'PACK')
8517             THEN
8518             --{
8519                   --
8520                   -- Debug Statements
8521                   --
8522                   IF l_debug_on THEN
8523                       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PACK',WSH_DEBUG_SV.C_PROC_LEVEL);
8524                   END IF;
8525                   --
8526                   wsh_delivery_validations.check_pack(p_del_rows(i), l_return_status);
8527                         --
8528                         WSH_UTIL_CORE.api_post_call
8529                             (
8530                                 p_return_status => l_return_status,
8531                                 x_num_warnings  => l_num_warnings,
8532                                 x_num_errors    => l_num_errors
8533                             );
8534 
8535                   l_status_code := 'PA';
8536 
8537                   l_num_dels_processed := l_num_dels_processed + 1;
8538             --}
8539               -- Included 'RE-OPEN' in this if condition
8540               -- To fix bug 2359880
8541               -- Public api WSHDEPBB.pls calls with action='RE-OPEN'
8542             ELSIF (p_action IN  ('REOPEN', 'RE-OPEN')) THEN
8543             --{
8544                   --
8545                   -- Debug Statements
8546                   --
8547                   IF l_debug_on THEN
8548                       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_REOPEN',WSH_DEBUG_SV.C_PROC_LEVEL);
8549                   END IF;
8550                   --
8551 
8552 
8553                   -- Bug#3206399: Not Able to Re-open a Confirmed Delivery.
8554                   --
8555                   -- Call to check_reopen should return the status in local variable l_return_status.
8556                   -- (This variable is used in further calls)
8557                   -- x_return_status is assigned equal to l_return_status before exiting the
8558                   -- procedure.
8559 
8560                   -- wsh_delivery_validations.check_reopen(p_del_rows(i), x_return_status);
8561 
8562                    wsh_delivery_validations.check_reopen(p_del_rows(i), l_return_status);
8563 
8564                         --
8565                         WSH_UTIL_CORE.api_post_call
8566                             (
8567                                 p_return_status => l_return_status,
8568                                 x_num_warnings  => l_num_warnings,
8569                                 x_num_errors    => l_num_errors
8570                             );
8571                         --
8572 
8573                   l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
8574                      P_Organization_ID       => l_organization_id,
8575                      X_Return_Status         => l_return_status);
8576 
8577                   IF l_debug_on THEN
8578                    wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
8579                    wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
8580                   END IF;
8581 
8582                   WSH_UTIL_CORE.api_post_call (
8583                                 p_return_status => l_return_status,
8584                                 x_num_warnings  => l_num_warnings,
8585                                 x_num_errors    => l_num_errors);
8586 
8587                   IF (l_warehouse_type='TPW') THEN
8588                      l_status_code := 'SA';
8589                   ELSE
8590                      l_status_code := 'OP';
8591                   END IF;
8592 
8593                   IF l_debug_on THEN
8594                    wsh_debug_sv.log (l_module_name, 'l_status_code',l_status_code);
8595                   END IF;
8596 
8597 
8598                   update wsh_new_deliveries
8599                   set status_code           = l_status_code,
8600                       confirm_date          = null,--6453740
8601                       confirmed_by          = null,--6453740
8602                       last_update_date      = SYSDATE  ,
8603                       last_updated_by       = l_user_id,
8604                       last_update_login     = l_login_id
8605                   where delivery_id         = p_del_rows(i);
8606 
8607                 IF (SQL%NOTFOUND) THEN
8608                   FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8609                     wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8610                    l_num_errors := l_num_errors + 1;
8611                     RAISE FND_API.G_EXC_ERROR;
8612                 END IF;
8613 
8614                 -- K: MDC:
8615                 -- Reopen the consol delivery as well if it exists and is not open
8616                 IF l_status_code = 'OP' THEN
8617 
8618                    -- bug 4891897, sql 15037864
8619                    -- removed wsh_new_deliveries d2
8620 
8621                    update wsh_new_deliveries d1
8622                       set d1.status_code           = l_status_code,
8623                           d1.last_update_date      = SYSDATE,
8624                           d1.last_updated_by       = l_user_id,
8625                           d1.last_update_login     = l_login_id
8626                     where d1.status_code = 'CO'
8627                       and exists (
8628                             select 'X'
8629                               from wsh_delivery_legs l1, wsh_delivery_legs l2
8630                              where l2.delivery_id = p_del_rows(i)
8631                                and l2.parent_delivery_leg_id = l1.delivery_leg_id
8632                                and l1.delivery_id = d1.delivery_id);
8633                  END IF;
8634 
8635 		--/== Workflow Changes
8636 		IF (l_status_code = 'OP') THEN
8637 			IF l_debug_on THEN
8638 				WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8639 			END IF;
8640 
8641 			WSH_WF_STD.RAISE_EVENT(p_entity_type     =>  'DELIVERY',
8642 					       p_entity_id       =>  p_del_rows(i),
8643 					       p_event           =>  'oracle.apps.wsh.delivery.gen.open',
8644 					       p_organization_id =>  l_organization_id,
8645 					       x_return_status   =>  l_wf_rs);
8646 
8647 			IF l_debug_on THEN
8648 				WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8649 			END IF;
8650 		END IF;
8651 		-- Workflow Changes ==/
8652 
8653 		  l_num_dels_processed := l_num_dels_processed + 1;
8654 
8655             --}
8656             END IF;
8657        --}
8658        EXCEPTION
8659        --{
8660             WHEN FND_API.G_EXC_ERROR
8661             THEN
8662             --{
8663                 ROLLBACK TO dlvy_chg_status_sp;
8664                 --
8665                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8666                 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8667                 --
8668                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8669             --}
8670             WHEN wsh_util_core.g_exc_warning
8671             THEN
8672             --{
8673                 ROLLBACK TO dlvy_chg_status_sp;
8674                 --
8675                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8676                 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8677                 --
8678                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
8679             --}
8680         --}
8681         END;
8682    --}
8683    END LOOP;
8684    --
8685    --
8686     IF l_num_dels_processed = 0
8687     THEN
8688         l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8689     ELSIF l_num_dels_processed < p_del_rows.count
8690     THEN
8691         l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8692     ELSIF l_num_warnings > 0
8693     THEN
8694         l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8695     ELSE
8696         l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8697     END IF;
8698     --
8699     x_return_status := l_return_status;
8700     --
8701     IF p_del_rows.count > 1
8702     THEN
8703         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_SUMMARY');
8704         FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',l_num_dels_processed);
8705         FND_MESSAGE.SET_TOKEN('NUM_ERROR',p_del_rows.count - l_num_dels_processed);
8706         wsh_util_core.add_message(l_return_status,l_module_name);
8707     END IF;
8708 --
8709 -- Debug Statements
8710 --
8711 IF l_debug_on THEN
8712     WSH_DEBUG_SV.pop(l_module_name);
8713 END IF;
8714 --
8715   EXCEPTION
8716     WHEN FND_API.G_EXC_ERROR THEN
8717       ROLLBACK TO dlvy_chg_status_begin_sp;
8718       --
8719       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8720       --
8721       IF l_debug_on THEN
8722         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8723         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8724       END IF;
8725       --
8726     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8727 
8728       ROLLBACK TO dlvy_chg_status_begin_sp;
8729       --
8730       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8731       --
8732       IF l_debug_on THEN
8733         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8734         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8735       END IF;
8736       --
8737     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8738       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8739       --
8740       IF l_debug_on THEN
8741         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8742         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8743       END IF;
8744       --
8745     WHEN others THEN
8746 
8747       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CHANGE_STATUS',l_module_name);
8748       ROLLBACK TO dlvy_chg_status_begin_sp;
8749       --
8750       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8751 
8752 --
8753 -- Debug Statements
8754 --
8755 IF l_debug_on THEN
8756     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8757 END IF;
8758 --
8759   END CHANGE_STATUS;
8760 
8761 
8762 -- Following is old procedure as of I, which is replaced by proc. above in J
8763 -- remove after ut
8764 
8765 /* bug 2335270 Included last_update_date,last_updated_by and last_update_login
8766              in  wsh_new_deliveries and wsh_delivery_details */
8767 
8768 -- J-IB-HEALI---{
8769 PROCEDURE Complete_Leg_Sequence
8770       ( p_delivery_id   IN   NUMBER,
8771         p_update_flag   IN VARCHAR2,
8772         p_insert_msg    IN BOOLEAN default true,
8773         x_leg_count	OUT NOCOPY NUMBER,
8774         x_leg_complete	OUT NOCOPY varchar2,
8775         x_return_status OUT NOCOPY   VARCHAR2) IS
8776 
8777   CURSOR delivery_info IS
8778   SELECT initial_pickup_location_id,
8779     ultimate_dropoff_location_id
8780   FROM   wsh_new_deliveries
8781   WHERE  delivery_id = p_delivery_id;
8782 
8783   CURSOR count_legs IS
8784   SELECT count(*)
8785   FROM   wsh_delivery_legs
8786   WHERE  delivery_id = p_delivery_id;
8787 
8788   CURSOR pickup_delivery_legs(l_pickup_location_id IN NUMBER) IS
8789   SELECT dg.delivery_leg_id leg_id,
8790     st1.stop_location_id pickup,
8791     st2.stop_location_id dropoff
8792   FROM   wsh_delivery_legs dg,
8793     wsh_trip_stops st1,
8794     wsh_trip_stops st2
8795   WHERE  dg.delivery_id = p_delivery_id AND
8796     st1.stop_id = dg.pick_up_stop_id AND
8797     st2.stop_id = dg.drop_off_stop_id AND
8798     st1.stop_location_id = l_pickup_location_id;
8799 
8800   CURSOR dropoff_delivery_legs(l_pickup_location_id IN NUMBER) IS
8801   SELECT count(*)
8802   FROM   wsh_delivery_legs dg,
8803     wsh_trip_stops st1,
8804     wsh_trip_stops st2
8805   WHERE  dg.delivery_id = p_delivery_id AND
8806     st1.stop_id = dg.pick_up_stop_id AND
8807     st2.stop_id = dg.drop_off_stop_id AND
8808     st2.stop_location_id = l_pickup_location_id;
8809 
8810   l_leg_id         NUMBER;
8811   l_seq_num       NUMBER;
8812   l_pickup_location_id   NUMBER;
8813   l_dropoff_location_id  NUMBER;
8814   l_final_dropoff   NUMBER;
8815   l_leg_count     NUMBER := 0;
8816   l_count       NUMBER := 0;
8817 
8818   others EXCEPTION;
8819 
8820   l_debug_on BOOLEAN;
8821   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Complete_Leg_Sequence';
8822 BEGIN
8823 
8824   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8825   --
8826   IF l_debug_on IS NULL
8827   THEN
8828       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8829   END IF;
8830   --
8831   IF l_debug_on THEN
8832       WSH_DEBUG_SV.push(l_module_name);
8833       --
8834       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8835       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8836   END IF;
8837   --
8838   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8839   x_leg_complete := 'N';
8840 
8841 
8842   OPEN delivery_info;
8843   FETCH delivery_info INTO l_pickup_location_id, l_dropoff_location_id;
8844 
8845   IF (delivery_info%NOTFOUND) THEN
8846      CLOSE delivery_info;
8847 
8848      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8849      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8850      wsh_util_core.add_message(x_return_status);
8851 
8852 
8853      IF l_debug_on THEN
8854          WSH_DEBUG_SV.pop(l_module_name);
8855      END IF;
8856      --
8857      RETURN;
8858   END IF;
8859 
8860   l_final_dropoff := l_dropoff_location_id;
8861 
8862   IF (l_pickup_location_id IS NULL) OR (l_dropoff_location_id IS NULL)THEN
8863     raise others;
8864   END IF;
8865   CLOSE delivery_info;
8866 
8867 
8868   OPEN  count_legs;
8869   FETCH count_legs INTO l_leg_count;
8870   CLOSE count_legs;
8871 
8872   x_leg_count := l_leg_count;
8873 
8874   IF (l_leg_count = 0 OR l_leg_count IS NULL) THEN
8875      IF l_debug_on THEN
8876          WSH_DEBUG_SV.pop(l_module_name);
8877      END IF;
8878      --
8879      RETURN;
8880   END IF;
8881 
8882 
8883   l_seq_num := 0;
8884 
8885   LOOP --{
8886      OPEN  pickup_delivery_legs(l_pickup_location_id);
8887      FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8888 
8889      IF (pickup_delivery_legs%NOTFOUND) THEN
8890        CLOSE pickup_delivery_legs;
8891        EXIT;
8892      END IF;
8893 
8894 
8895      IF (l_leg_id IS NOT NULL) THEN
8896         l_seq_num := l_seq_num + 1;
8897 
8898         IF p_update_flag = 'Y' THEN
8899            UPDATE wsh_delivery_legs
8900             SET sequence_number = l_seq_num * 10
8901            WHERE delivery_leg_id = l_leg_id;
8902 
8903            IF (SQL%NOTFOUND) THEN
8904               x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8905 
8906               FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
8907               wsh_util_core.add_message(x_return_status);
8908 
8909               IF l_debug_on THEN
8910                   WSH_DEBUG_SV.pop(l_module_name);
8911               END IF;
8912               --
8913               RETURN;
8914            END IF;
8915         END IF; /* added for p_update_flag */
8916       END IF; /* l_leg_id IS NOT NULL */
8917 
8918 
8919      FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8920      IF (pickup_delivery_legs%FOUND) THEN
8921         CLOSE pickup_delivery_legs;
8922 
8923         IF (p_insert_msg) THEN
8924            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8925            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8926            wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8927         END IF;
8928 
8929         IF l_debug_on THEN
8930             WSH_DEBUG_SV.pop(l_module_name);
8931         END IF;
8932         --
8933         RETURN;
8934     END IF;
8935     CLOSE pickup_delivery_legs;
8936 
8937      OPEN dropoff_delivery_legs(l_dropoff_location_id);
8938      FETCH dropoff_delivery_legs INTO l_count;
8939      CLOSE dropoff_delivery_legs;
8940 
8941      IF (l_count > 1) THEN
8942         IF (p_insert_msg) THEN
8943            FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8944            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8945            wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8946         END IF;
8947 
8948         IF l_debug_on THEN
8949           WSH_DEBUG_SV.pop(l_module_name);
8950         END IF;
8951         --
8952         RETURN;
8953     END IF;
8954 
8955      l_pickup_location_id := l_dropoff_location_id;
8956   END LOOP; --}
8957 
8958 
8959 
8960   IF (l_seq_num <> l_leg_count) THEN
8961 
8962      IF (p_insert_msg) THEN
8963         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INVALID_FLOW');
8964         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8965         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8966      END IF;
8967      --
8968      IF l_debug_on THEN
8969          WSH_DEBUG_SV.pop(l_module_name);
8970      END IF;
8971      --
8972      RETURN;
8973   END IF;
8974 
8975 
8976   IF (l_final_dropoff <> l_dropoff_location_id) THEN
8977      x_leg_complete := 'NW';
8978 
8979      IF (p_insert_msg) THEN
8980         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_ULTIMATE_DROPOFF');
8981         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8982         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8983      END IF;
8984      RETURN;
8985   END IF;
8986 
8987 
8988   x_leg_complete := 'Y';
8989 
8990 IF l_debug_on THEN
8991     WSH_DEBUG_SV.pop(l_module_name);
8992 END IF;
8993 --
8994 EXCEPTION
8995      WHEN others THEN
8996       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Complete_Leg_Sequence');
8997      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8998 
8999 IF l_debug_on THEN
9000     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9001     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9002 END IF;
9003 --
9004 END Complete_Leg_Sequence;
9005 
9006 
9007 PROCEDURE Update_Leg_Sequence
9008       ( p_delivery_id   IN   NUMBER,
9009         p_update_flag    IN VARCHAR2,
9010         x_return_status OUT NOCOPY   VARCHAR2) IS
9011 
9012   l_leg_count           NUMBER := 0;
9013   l_leg_complete	varchar2(10);
9014   l_return_status	varchar2(1);
9015 
9016   l_debug_on BOOLEAN;
9017   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_LEG_SEQUENCE';
9018 BEGIN
9019   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9020   --
9021   IF l_debug_on IS NULL
9022   THEN
9023       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9024   END IF;
9025   --
9026   IF l_debug_on THEN
9027       WSH_DEBUG_SV.push(l_module_name);
9028       --
9029       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9030       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
9031   END IF;
9032 
9033 
9034   Complete_Leg_Sequence
9035       ( p_delivery_id   => p_delivery_id,
9036         p_update_flag   => p_update_flag,
9037         x_leg_count     => l_leg_count,
9038         x_leg_complete  => l_leg_complete,
9039         x_return_status => l_return_status);
9040 
9041   IF l_debug_on THEN
9042       WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',l_return_status);
9043       WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
9044       WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
9045   END IF;
9046 
9047   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9048     IF (l_leg_complete='NW') THEN
9049        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9050     ELSIF (l_leg_complete='Y') THEN
9051        x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9052     ELSIF (l_leg_complete='N') THEN
9053        IF (l_leg_count IS NULL or l_leg_count=0) THEN
9054           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9055        ELSE
9056           x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9057        END IF;
9058     END IF;
9059   ELSE
9060      x_return_status:= l_return_status;
9061   END IF;
9062 
9063 
9064   IF l_debug_on THEN
9065     WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
9066     WSH_DEBUG_SV.pop(l_module_name);
9067   END IF;
9068 --
9069 EXCEPTION
9070    WHEN others THEN
9071      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
9072      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9073 
9074 IF l_debug_on THEN
9075     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9076     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9077 END IF;
9078 --
9079 END Update_Leg_Sequence;
9080 
9081 
9082 
9083 PROCEDURE Process_Leg_Sequence
9084       ( p_delivery_id   IN   NUMBER,
9085         p_update_del_flag    IN VARCHAR2,
9086         p_update_leg_flag    IN VARCHAR2,
9087         x_leg_complete	OUT NOCOPY boolean,
9088         x_return_status OUT NOCOPY   VARCHAR2) IS
9089 
9090   l_leg_count           NUMBER := 0;
9091   l_leg_complete	varchar2(10);
9092   l_update_flag		varchar2(1):='N';
9093 
9094 
9095   l_debug_on BOOLEAN;
9096   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Leg_Sequence';
9097 BEGIN
9098   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9099   --
9100   IF l_debug_on IS NULL
9101   THEN
9102       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9103   END IF;
9104   --
9105   IF l_debug_on THEN
9106       WSH_DEBUG_SV.push(l_module_name);
9107       --
9108       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9109       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_del_FLAG',P_UPDATE_del_FLAG);
9110       WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_leg_FLAG',P_UPDATE_leg_FLAG);
9111   END IF;
9112 
9113 
9114   Complete_Leg_Sequence
9115       ( p_delivery_id   => p_delivery_id,
9116         p_update_flag   => p_update_leg_flag,
9117         p_insert_msg    => false,
9118         x_leg_count     => l_leg_count,
9119         x_leg_complete  => l_leg_complete,
9120         x_return_status => x_return_status);
9121 
9122   IF l_debug_on THEN
9123       WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',x_return_status);
9124       WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
9125       WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
9126   END IF;
9127 
9128   IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
9129        IF (l_leg_complete = 'Y' ) THEN
9130           x_leg_complete := true;
9131           l_update_flag:='Y';
9132        ELSE
9133           x_leg_complete := false;
9134           l_update_flag:= null;
9135        END IF;
9136 
9137 
9138        IF (p_update_del_flag='Y') THEN
9139           UPDATE wsh_new_deliveries
9140             SET ITINERARY_COMPLETE = l_update_flag,
9141                 last_update_date = sysdate,
9142                 last_updated_by = FND_GLOBAL.USER_ID
9143           WHERE delivery_id= p_delivery_id;
9144        END IF;
9145 
9146   END IF;
9147 
9148 
9149   IF l_debug_on THEN
9150     IF (x_leg_complete) THEN
9151       WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete TRUE');
9152     ELSE
9153       WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete FALSE');
9154     END IF;
9155 
9156     WSH_DEBUG_SV.pop(l_module_name);
9157   END IF;
9158 --
9159 EXCEPTION
9160    WHEN others THEN
9161      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
9162      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9163 
9164 IF l_debug_on THEN
9165     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9166     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9167 END IF;
9168 --
9169 END Process_Leg_Sequence;
9170 -- J-IB-HEALI---}
9171 
9172 --
9173 -- Procedure: Generate_Loading_Seq
9174 -- Parameters:  p_del_rows   - Delivery ids
9175 --    x_return_status - status of procedure call
9176 -- Description: This procedure is used to generate loading sequence for deliveries
9177 --
9178 
9179   PROCEDURE Generate_Loading_Seq
9180     (p_del_rows   IN  wsh_util_core.id_tab_type,
9181      x_return_status  OUT NOCOPY  VARCHAR2) IS
9182 
9183   CURSOR loading_order (l_delivery_id NUMBER) IS
9184   SELECT loading_order_flag
9185   FROM   wsh_new_deliveries
9186   WHERE  delivery_id = l_delivery_id;
9187 
9188    -- Bug 1421549: Changed the logic for load sequencing
9189   cont_str VARCHAR2(1000) :=
9190   'SELECT dd.delivery_detail_id '||
9191   'FROM   wsh_delivery_details dd, '||
9192      'wsh_delivery_assignments_v da '||
9193   'WHERE  dd.delivery_detail_id = da.delivery_detail_id AND  '||
9194      'da.parent_delivery_detail_id = :cont_id AND '||
9195      'container_flag = ''N'' '||
9196   'ORDER  BY customer_prod_seq ';
9197 
9198 -- This cursor fetches container_ids and average customer prod seq
9199 -- numbers for lines in each container for a particular delivery. The
9200 -- dynamic statement is used to add an ASC or DESC clause to the order by
9201 -- based on Forward or Reverse loading order of the delivery
9202 
9203   stmt_str VARCHAR2(1000) :=
9204   'SELECT da.parent_delivery_detail_id, '||
9205     'avg(customer_prod_seq) avg_prod_seq, '||
9206     'count(*) '||
9207   'FROM   wsh_delivery_details dd, '||
9208     'wsh_delivery_assignments_v da '||
9209   'WHERE  dd.delivery_detail_id = da.delivery_detail_id AND '||
9210     'dd.customer_prod_seq IS NOT NULL AND '||
9211     'dd.container_flag = ''N'' AND '||
9212     'da.parent_delivery_detail_id IS NOT NULL AND '||
9213     'da.delivery_id IS NOT NULL AND '||
9214     'da.delivery_id = :del_id '||
9215   'GROUP BY parent_delivery_detail_id '||
9216   'ORDER BY avg_prod_seq ';
9217 
9218   TYPE detailcurtype IS REF CURSOR;
9219   TYPE contcurtype IS REF CURSOR;
9220   detailinfo_cv detailcurtype;
9221   continfo_cv contcurtype;
9222 
9223   l_cont_id  NUMBER;
9224   l_avg_prod_seq NUMBER;
9225   l_num_error   BINARY_INTEGER;
9226   l_cnt    BINARY_INTEGER;
9227   l_old_cnt  BINARY_INTEGER;
9228   l_lines_cnt   BINARY_INTEGER;
9229   l_order_flag  VARCHAR2(2);
9230   str1      VARCHAR2(5);
9231   cont1    VARCHAR2(5);
9232   l_delivery_detail_id NUMBER;
9233   l_cont_cnt  BINARY_INTEGER;
9234 
9235   others EXCEPTION;
9236 
9237 --
9238 l_debug_on BOOLEAN;
9239 --
9240 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERATE_LOADING_SEQ';
9241 --
9242   BEGIN
9243 
9244   --
9245   -- Debug Statements
9246   --
9247   --
9248   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9249   --
9250   IF l_debug_on IS NULL
9251   THEN
9252       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9253   END IF;
9254   --
9255   IF l_debug_on THEN
9256       WSH_DEBUG_SV.push(l_module_name);
9257   END IF;
9258   --
9259   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9260 
9261   IF (p_del_rows.count = 0) THEN
9262     raise others;
9263   END IF;
9264 
9265   FOR i IN 1..p_del_rows.count LOOP
9266 
9267     OPEN  loading_order (p_del_rows(i));
9268     FETCH loading_order INTO l_order_flag;
9269 
9270      IF (loading_order%NOTFOUND) OR (l_order_flag IS NULL) THEN
9271     IF (loading_order%ISOPEN) THEN
9272        CLOSE loading_order;
9273       END IF;
9274     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INV_LOADING_ORDER');
9275     --
9276     -- Debug Statements
9277     --
9278     IF l_debug_on THEN
9279         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9280     END IF;
9281     --
9282     FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9283       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9284     wsh_util_core.add_message(x_return_status);
9285     l_num_error := l_num_error + 1;
9286      goto loop_end;
9287      END IF;
9288 
9289     IF (loading_order%ISOPEN) THEN
9290       CLOSE loading_order;
9291      END IF;
9292 
9293 -- Select containers for each delivery by ordering avg container prod seq num
9294 
9295     IF (l_order_flag = 'F') OR (l_order_flag = 'FI') THEN
9296     str1 := 'ASC';
9297      ELSE
9298     str1 := 'DESC';
9299     END IF;
9300 
9301      -- Bug 1421549: Changed the logic for load sequencing
9302      IF (l_order_flag = 'R') OR (l_order_flag = 'FI') THEN
9303      cont1 := 'DESC';
9304      ELSE
9305      cont1 := 'ASC';
9306      END IF;
9307 
9308     -- bug # 1716147. Fixed the incorrect messages issue
9309     l_cont_cnt  := 0;
9310 
9311     -- bug 3442398 moved this line from within the container loop to here
9312     l_cnt   := 0;
9313 
9314      OPEN detailinfo_cv FOR stmt_str || str1 USING p_del_rows(i);
9315     LOOP
9316 
9317       l_cont_id := null;
9318 
9319       FETCH detailinfo_cv INTO l_cont_id, l_avg_prod_seq, l_lines_cnt;
9320 
9321     -- Added by rvishnuv on 04/04/2001
9322     EXIT WHEN detailinfo_cv%NOTFOUND;
9323 
9324     l_cont_cnt  := l_cont_cnt + 1;
9325 
9326 
9327       -- Bug 1421549: Changed the logic for load sequencing
9328       OPEN  continfo_cv FOR cont_str || cont1 USING l_cont_id ;
9329       LOOP
9330 
9331       FETCH continfo_cv INTO l_delivery_detail_id ;
9332 
9333       EXIT WHEN continfo_cv%NOTFOUND;
9334 
9335       l_cnt := l_cnt + 1;
9336 
9337       UPDATE wsh_delivery_details
9338       SET load_seq_number = l_cnt
9339       WHERE  delivery_detail_id = l_delivery_detail_id;
9340 
9341       END LOOP;
9342 
9343     IF (l_cnt = 0) THEN
9344        IF (continfo_cv%ISOPEN) THEN
9345         CLOSE continfo_cv;
9346        END IF;
9347         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_LINE_ERROR');
9348        --
9349        -- Debug Statements
9350        --
9351        IF l_debug_on THEN
9352            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9353        END IF;
9354        --
9355        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9356        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9357        wsh_util_core.add_message(x_return_status);
9358        l_num_error := l_num_error + 1;
9359        EXIT;
9360     END IF;
9361 
9362     IF (continfo_cv%ISOPEN) THEN
9363        CLOSE continfo_cv;
9364       END IF;
9365 
9366      END LOOP;
9367 
9368     IF (l_cont_cnt = 0) THEN
9369     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_CONT_ERROR');
9370     --
9371     -- Debug Statements
9372     --
9373     IF l_debug_on THEN
9374         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9375     END IF;
9376     --
9377     FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9378       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9379     wsh_util_core.add_message(x_return_status);
9380     l_num_error := l_num_error + 1;
9381      END IF;
9382 
9383 
9384     IF (detailinfo_cv%ISOPEN) THEN
9385       CLOSE detailinfo_cv;
9386      END IF;
9387 
9388     <<loop_end>>
9389     null;
9390 
9391   END LOOP;
9392 
9393   IF (p_del_rows.count > 1) THEN
9394     IF (l_num_error > 0) THEN
9395     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_SUMMARY');
9396     FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
9397     FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
9398 
9399     IF (p_del_rows.count = l_num_error) THEN
9400        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9401       ELSE
9402        x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9403       END IF;
9404 
9405     wsh_util_core.add_message(x_return_status);
9406      END IF;
9407   END IF;
9408 
9409 --
9410 -- Debug Statements
9411 --
9412 IF l_debug_on THEN
9413     WSH_DEBUG_SV.pop(l_module_name);
9414 END IF;
9415 --
9416   EXCEPTION
9417      WHEN others THEN
9418     IF (continfo_cv%ISOPEN) THEN
9419        CLOSE continfo_cv;
9420       END IF;
9421     IF (detailinfo_cv%ISOPEN) THEN
9422        CLOSE detailinfo_cv;
9423     END IF;
9424      wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.GENERATE_LOADING_SEQ');
9425     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9426 
9427 --
9428 -- Debug Statements
9429 --
9430 IF l_debug_on THEN
9431     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9432     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9433 END IF;
9434 --
9435   END Generate_Loading_Seq;
9436 
9437 
9438 --
9439 -- Procedure: Assign_Delivery_Update
9440 -- Parameters:  p_delivery_id   - Delivery id
9441 --       p_del_params - Parameters to update the delivery with
9442 --    x_return_status - status of procedure call
9443 -- Description: This procedure is used to update the delivery with grouping
9444 --        attribute values from lines, while assigning lines to delivery
9445 --
9446 
9447   PROCEDURE Assign_Delivery_Update
9448     (p_delivery_id    IN  NUMBER,
9449      p_del_params    IN   wsh_delivery_autocreate.grp_attr_rec_type,
9450      x_return_status  OUT NOCOPY  VARCHAR2) IS
9451 
9452   l_del_info wsh_new_deliveries_pvt.delivery_rec_type;
9453 
9454 --
9455 l_debug_on BOOLEAN;
9456 --
9457 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ASSIGN_DELIVERY_UPDATE';
9458 --
9459   BEGIN
9460 
9461   --
9462   -- Debug Statements
9463   --
9464   --
9465   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9466   --
9467   IF l_debug_on IS NULL
9468   THEN
9469       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9470   END IF;
9471   --
9472   IF l_debug_on THEN
9473       WSH_DEBUG_SV.push(l_module_name);
9474       --
9475       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9476   END IF;
9477   --
9478   --
9479   -- Debug Statements
9480   --
9481   IF l_debug_on THEN
9482       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.POPULATE_RECORD',WSH_DEBUG_SV.C_PROC_LEVEL);
9483   END IF;
9484   --
9485   wsh_new_deliveries_pvt.populate_record( p_delivery_id, l_del_info, x_return_status);
9486 
9487    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9488      --
9489      -- Debug Statements
9490      --
9491      IF l_debug_on THEN
9492          WSH_DEBUG_SV.pop(l_module_name);
9493      END IF;
9494      --
9495      RETURN;
9496    END IF;
9497 
9498     --
9499     IF l_debug_on THEN
9500       WSH_DEBUG_SV.log(l_module_name,'l_del_info.shipment_direction',l_del_info.shipment_direction);
9501     END IF;
9502     --
9503 
9504    IF NVL(l_del_info.shipment_direction,'O') IN ('O','IO')   -- J-IB-NPARIKH
9505    THEN
9506    --{
9507        -- Set optional grouping attributes for delivery.
9508        l_del_info.customer_id := nvl(l_del_info.customer_id, p_del_params.customer_id);
9509        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);
9510        l_del_info.fob_code := nvl(l_del_info.fob_code, p_del_params.fob_code);
9511        l_del_info.freight_terms_code := nvl(l_del_info.freight_terms_code, p_del_params.freight_terms_code);
9512        l_del_info.ship_method_code := nvl(l_del_info.ship_method_code, p_del_params.ship_method_code);
9513        l_del_info.carrier_id := nvl(l_del_info.carrier_id, p_del_params.carrier_id);
9514 
9515        WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
9516                p_delivery_rec => l_del_info,
9517                x_return_status => x_return_status);
9518 
9519 
9520       --
9521       -- Debug Statements
9522       --
9523       IF l_debug_on THEN
9524           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.UPDATE_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
9525       END IF;
9526       --
9527       wsh_new_deliveries_pvt.update_delivery( null, l_del_info, x_return_status);
9528 
9529   --}
9530   END IF;
9531 
9532 --
9533 -- Debug Statements
9534 --
9535 IF l_debug_on THEN
9536     WSH_DEBUG_SV.pop(l_module_name);
9537 END IF;
9538 --
9539   END Assign_Delivery_Update;
9540 
9541 --
9542 --
9543 -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9544 --
9545 -- finito  CArrier Selection FTE Integration Changes
9546 -- **************************************************************************
9547 
9548 
9549 -- J-IB-NPARIKH---{
9550 
9551 
9552 -- ----------------------------------------------------------------------
9553 -- Procedure:   update_freight_terms
9554 -- Parameters:  p_delivery_id in  number
9555 --              p_action_code   in varchar2
9556 --                  'ASSIGN'  : Assign lines to delivery
9557 --                  'UNASSIGN' : Unassign lines from delivery
9558 --              p_line_freight_terms_code in varchar2
9559 --                  NULL : Caller did not pass value
9560 --                  'MIXED' : Lines assigned/unassigned have mixed/null freight terms
9561 --                  Other value: All lines assigned/unassigned have same freight term , equal to this value
9562 --              x_freight_terms_Code out varchar2
9563 --                   Delivery's freight term code
9564 -- Description: This procedure can be called after assign/unassign lines from delivery.
9565 --
9566 --              For action	ASSIGN :
9567 --                   If delivery freight term is not null and new lines have different/null freight terms,
9568 --                   update delivery freight term to NULL
9569 --              For action	UNASSIGN :
9570 --                   If delivery freight term is null and all existing lines in delivery have same freight
9571 --                   term, update delivery with the same
9572 --
9573 --  ----------------------------------------------------------------------
9574 PROCEDURE update_freight_terms
9575             (
9576                p_delivery_id             IN              NUMBER,
9577                p_action_code             IN              VARCHAR2 DEFAULT 'UNASSIGN',
9578                p_line_freight_terms_Code IN              VARCHAR2 DEFAULT NULL,
9579                x_freight_terms_Code      OUT    NOCOPY   VARCHAR2,
9580                x_return_status           OUT    NOCOPY   VARCHAR2
9581             )
9582 IS
9583 --{
9584     --
9585     -- Get delivery information
9586     --
9587     CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9588     IS
9589         SELECT freight_terms_code, name,
9590                nvl(shipment_direction,'O') shipment_direction
9591         FROM   wsh_new_deliveries
9592         WHERE  delivery_id             = p_delivery_id;
9593     --
9594     --
9595     -- Lock delivery
9596     --
9597     CURSOR lock_dlvy_csr (p_delivery_id IN NUMBER)
9598     IS
9599         SELECT 1
9600         FROM   wsh_new_deliveries
9601         WHERE  delivery_id             = p_delivery_id
9602         FOR UPDATE OF freight_terms_code NOWAIT;
9603     --
9604     --
9605     CURSOR line_csr (p_delivery_id IN NUMBER)
9606     IS
9607         SELECT distinct freight_terms_code
9608         FROM   wsh_delivery_details wdd,
9609                wsh_delivery_assignments_v wda
9610         WHERE  wdd.delivery_detail_id      = wda.delivery_detail_id
9611         AND    wda.delivery_id             = p_delivery_id
9612         AND    NVL(wdd.container_flag,'N') = 'N';
9613     --
9614     l_has_lines               VARCHAR2(1);
9615     l_dlvy_freight_terms_code VARCHAR2(30);
9616     l_line_freight_terms_code VARCHAR2(30);
9617     l_shipment_direction      VARCHAR2(30);
9618     l_name                    VARCHAR2(100);
9619     l_cnt                     NUMBER;
9620     --
9621     e_locked exception  ;
9622     PRAGMA EXCEPTION_INIT(e_locked, -54);
9623     --
9624     e_end_of_api EXCEPTION;
9625     e_end_of_sub EXCEPTION;
9626     e_end_of_api1 EXCEPTION;
9627     --
9628     e_update     EXCEPTION;
9629 
9630     --
9631     l_debug_on                    BOOLEAN;
9632     --
9633     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_freight_terms';
9634     --
9635 --}
9636 BEGIN
9637 --{
9638     --
9639     l_debug_on := wsh_debug_interface.g_debug;
9640     --
9641     IF l_debug_on IS NULL THEN
9642       l_debug_on := wsh_debug_sv.is_debug_enabled;
9643     END IF;
9644     --
9645     IF l_debug_on THEN
9646       wsh_debug_sv.push(l_module_name);
9647       --
9648       wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9649       wsh_debug_sv.LOG(l_module_name, 'p_action_code', p_action_code);
9650       wsh_debug_sv.LOG(l_module_name, 'p_line_freight_terms_Code', p_line_freight_terms_Code);
9651     END IF;
9652     --
9653     x_return_status := wsh_util_core.g_ret_sts_success;
9654     --
9655     --
9656     IF p_delivery_id IS NULL
9657     THEN
9658     --{
9659         --
9660         -- Delivery id is mandatory input
9661         --
9662         FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9663         FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9664         RAISE FND_API.G_EXC_ERROR;
9665     --}
9666     END IF;
9667     --
9668     --
9669     OPEN dlvy_csr (p_delivery_id);
9670     --
9671     FETCH dlvy_csr
9672     INTO l_dlvy_freight_terms_code,l_name,l_shipment_direction;
9673     --
9674     IF dlvy_csr%NOTFOUND
9675     THEN
9676     --{
9677         --
9678         -- Raise error for invalid Delivery id
9679         --
9680         fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9681         RAISE FND_API.G_EXC_ERROR;
9682     --}
9683     END IF;
9684     --
9685     CLOSE dlvy_Csr;
9686     --
9687     --
9688     IF l_debug_on THEN
9689       wsh_debug_sv.LOG(l_module_name, 'l_dlvy_freight_terms_code', l_dlvy_freight_terms_code);
9690       wsh_debug_sv.LOG(l_module_name, 'l_name', l_name);
9691       wsh_debug_sv.LOG(l_module_name, 'l_shipment_direction', l_shipment_direction);
9692     END IF;
9693     --
9694     x_freight_terms_code := l_dlvy_freight_terms_code;
9695     --
9696     --
9697     IF l_shipment_direction IN ('O','IO')
9698     THEN
9699         --
9700         -- Operation not valid for outbound delivery
9701         --
9702         RAISE e_end_of_api;
9703     END IF;
9704     --
9705     FOR lock_dlvy_rec IN lock_dlvy_csr (p_delivery_id)
9706     LOOP
9707         NULL;
9708     END LOOP;
9709     --
9710     --
9711     BEGIN
9712     --{
9713         BEGIN
9714         --{
9715             IF  p_action_code='ASSIGN'
9716             THEN
9717             --{
9718                 --
9719                 IF l_debug_on THEN
9720                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
9721                 END IF;
9722                 --
9723                 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
9724                                     (
9725                                         p_delivery_id => p_delivery_id
9726                                     );
9727                 --
9728                 --
9729                 IF l_debug_on THEN
9730                   wsh_debug_sv.LOG(l_module_name, 'l_has_lines', l_has_lines);
9731                 END IF;
9732                 --
9733                 --
9734                 IF l_has_lines = 'Y'  -- If delivery has lines
9735                 THEN
9736                 --{
9737 
9738                     /*
9739                     IF l_dlvy_freight_terms_code IS NULL
9740                     THEN
9741                         RAISE e_end_of_api;
9742                     ELSE
9743                     --{
9744                     */
9745                         IF p_line_freight_terms_code IS NULL
9746                         THEN
9747                             --
9748                             -- Line-level freight terms not passed in.
9749                             -- We need to check delivery contents to determine the freight term
9750                             --
9751                             RAISE e_end_of_sub;
9752                         ELSIF p_line_freight_terms_code = NVL(l_dlvy_freight_terms_code,'MIXED')
9753                         THEN
9754                             --
9755                             -- Line-level freight terms is same as delivery's freight term
9756                             -- No need for any updates, goto end of api.
9757                             --
9758                             RAISE e_end_of_api;
9759                         ELSIF p_line_freight_terms_code = 'MIXED'
9760 			                     THEN
9761                             --
9762                             -- Line-level freight terms are different.
9763                             -- We need to update delivery freight term to null
9764                             --
9765                             l_dlvy_freight_terms_code := NULL;
9766                             RAISE e_update;
9767                         ELSE
9768                             RAISE e_end_of_sub;
9769                         END IF;
9770                     --}
9771                     --END IF;
9772 
9773                 --}
9774                 /*--Assumption is that this api is called only after lines assigned to dlvy.
9775                 ELSE
9776                 --{
9777                     IF p_line_freight_terms_code IS NULL
9778                     THEN
9779                         RAISE e_end_of_api;
9780                     ELSIF p_line_freight_terms_code <> NVL(l_dlvy_freight_terms_code,'MIXED')
9781                     THEN
9782                         l_dlvy_freight_terms_code := p_line_freight_terms_code;
9783                         RAISE e_update;
9784                     ELSE
9785                         RAISE e_end_of_api;
9786                     END IF;
9787                 --}
9788                 */
9789                 END IF;
9790             --}
9791             ELSIF p_action_code='UNASSIGN'
9792             THEN
9793             --{
9794                 IF l_dlvy_freight_terms_code IS NOT NULL
9795                 THEN
9796                     --
9797                     -- All lines in delivery have same freight term.
9798                     -- No need for update, goto end of api.
9799                     --
9800                     RAISE e_end_of_api1;
9801                 END IF;
9802             --}
9803             END IF;
9804         --}
9805         EXCEPTION
9806             WHEN e_end_of_sub THEN
9807                 NULL;
9808         END;
9809         --
9810         --
9811         l_dlvy_freight_terms_code := NULL;
9812         l_cnt                     := 0;
9813         --
9814         --
9815         -- Get distinct freight terms from delivery contents.
9816         -- If any line has null/different freight term, update delivery's freight term to Null.
9817         -- else  update delivery's freight term same as line's
9818         --
9819         FOR line_rec IN line_csr(p_delivery_id)
9820         LOOP
9821         --{
9822             l_cnt := l_cnt + 1;
9823             --
9824             --
9825             IF l_debug_on THEN
9826               wsh_debug_sv.LOG(l_module_name, 'line_rec.freight_Terms_code', line_rec.freight_Terms_code);
9827             END IF;
9828             --
9829             IF line_rec.freight_Terms_code IS NULL
9830             THEN
9831                 l_dlvy_freight_terms_code := NULL;
9832                 EXIT;
9833             ELSIF l_dlvy_freight_terms_code IS NULL
9834             THEN
9835                 l_dlvy_freight_terms_code := line_rec.freight_Terms_code;
9836             ELSIF line_rec.freight_Terms_code <>  l_dlvy_freight_terms_code
9837             THEN
9838                 l_dlvy_freight_terms_code := NULL;
9839                 EXIT;
9840             END IF;
9841         --}
9842         END LOOP;
9843     --}
9844     EXCEPTION
9845         WHEN e_update THEN
9846             l_cnt := 1;
9847     END;
9848     --
9849     --
9850     IF l_cnt > 0
9851     THEN
9852     --{
9853 
9854         IF l_debug_on THEN
9855           wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery freight term to' || l_dlvy_freight_terms_code);
9856         END IF;
9857         --
9858         --OTM R12, this update here is done right after assign/unassign
9859         --of delivery lines, which means the
9860         --tms_interface_flag and tms_version_number should already be
9861         --reflecting the change in delivery,
9862         --no need to set them again.
9863 
9864         UPDATE wsh_new_deliveries
9865         SET    freight_terms_code = l_dlvy_freight_terms_code,
9866                last_update_date   = SYSDATE,
9867                last_updated_by    = FND_GLOBAL.USER_ID,
9868                last_update_login  = FND_GLOBAL.LOGIN_ID
9869         WHERE  delivery_id        = p_delivery_id;
9870         --
9871         IF (SQL%NOTFOUND)
9872         THEN
9873         --{
9874             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9875             fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9876             RAISE FND_API.G_EXC_ERROR;
9877         --}
9878         END IF;
9879         --
9880         x_freight_terms_code := l_dlvy_freight_terms_code;
9881 
9882     --}
9883     END IF;
9884     --
9885     --
9886     IF l_debug_on THEN
9887       wsh_debug_sv.pop(l_module_name);
9888     END IF;
9889     --
9890 --}
9891 EXCEPTION
9892 --{
9893     WHEN e_end_of_api THEN
9894         IF l_debug_on
9895         THEN
9896             WSH_DEBUG_SV.pop(l_module_name);
9897         END IF;
9898     WHEN e_end_of_api1 THEN
9899         IF l_debug_on THEN
9900           wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery WHO columns ' );
9901         END IF;
9902         --
9903         UPDATE wsh_new_deliveries
9904         SET    last_update_date   = SYSDATE,
9905                last_updated_by    = FND_GLOBAL.USER_ID,
9906                last_update_login  = FND_GLOBAL.LOGIN_ID
9907         WHERE  delivery_id        = p_delivery_id;
9908         --
9909         IF (SQL%NOTFOUND)
9910         THEN
9911         --{
9912             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9913             fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9914             WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9915         --}
9916         END IF;
9917         --
9918         IF l_debug_on
9919         THEN
9920             WSH_DEBUG_SV.pop(l_module_name);
9921         END IF;
9922     WHEN FND_API.G_EXC_ERROR THEN
9923         x_return_status := wsh_util_core.g_ret_sts_error;
9924         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9925         --
9926         IF l_debug_on
9927         THEN
9928             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
9929         END IF;
9930     WHEN e_locked THEN
9931         x_return_status := wsh_util_core.g_ret_sts_error;
9932 
9933         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
9934         FND_MESSAGE.SET_TOKEN('ENTITY_NAME', l_name);
9935         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9936         --
9937         IF l_debug_on
9938         THEN
9939             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:e_locked');
9940         END IF;
9941     WHEN OTHERS THEN
9942       x_return_status := fnd_api.g_ret_sts_unexp_error;
9943       wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',l_module_name);
9944       --
9945       IF l_debug_on THEN
9946         wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
9947       END IF;
9948 --}
9949 END update_freight_terms;
9950 --
9951 --
9952 -- ----------------------------------------------------------------------
9953 -- Procedure:   update_ship_from_location
9954 --
9955 -- Parameters:  p_delivery_id    Delivery ID
9956 --              p_location_id    Ship from location ID (New value)
9957 --              x_return_status  Return status of API
9958 --
9959 -- COMMENT   : This procedure is called from group API when
9960 --             ship-from location is updated for inbound (not O/IO) delivery.
9961 --
9962 --             It performs the following steps:
9963 --             01. Validate that input delivery id is not null and is a valid delivery.
9964 --             02. Validate that input table of lines contain at least one record.
9965 --             03. If delivery's ship-from location (current value) is not null(-1), return
9966 --             04. Update ship-from location on all delivery lines.
9967 --             05. Update ship-from location for stop associated with delivery's initial pickup location
9968 --                 05.01 Make a call-out to FTE before stop update.
9969 --             06. Update ship-from location for each delivery associated with same stop.
9970 --             07. Put a warning message for each each delivery updated above.
9971 --             08. Update ship-from location for lines of each delivery updated above.
9972 --
9973 --  ----------------------------------------------------------------------
9974 --
9975 PROCEDURE update_ship_from_location
9976             (
9977                p_delivery_id                 IN           NUMBER,
9978                p_location_id                 IN           NUMBER,
9979                x_return_status               OUT NOCOPY   VARCHAR2
9980             )
9981 IS
9982 --{
9983     --
9984     -- Get Delivery Info
9985     --
9986     CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9987     IS
9988         SELECT wnd.name,
9989                initial_pickup_location_id
9990         FROM   wsh_new_deliveries wnd
9991         WHERE  delivery_id             = p_delivery_id;
9992     --
9993     l_dlvy_rec dlvy_csr%ROWTYPE;
9994     --
9995     --
9996     -- Get stop associated with initial pickup location of delivery.
9997     --
9998     CURSOR stop_csr(p_delivery_id IN NUMBER, p_location_id IN NUMBER)
9999     IS
10000         SELECT stop_id
10001         FROM   wsh_delivery_legs wdl,
10002                wsh_trip_stops    wts
10003         WHERE  wdl.delivery_id             = p_delivery_id
10004         AND    wdl.pick_up_stop_id         = wts.stop_id
10005         AND    wts.stop_location_id        = p_location_id;
10006     --
10007     --
10008     stop_rec stop_csr%ROWTYPE;
10009     --
10010     --
10011     -- Get all deliveries being picked up from the same stop.
10012     --
10013     CURSOR pickup_dlvy_csr (p_delivery_id IN NUMBER,p_stop_id IN NUMBER)
10014     IS
10015         SELECT wnd.delivery_id, wnd.name
10016         FROM   wsh_delivery_legs  wdl,
10017                wsh_new_deliveries wnd
10018         WHERE  pick_up_stop_id      = p_stop_id
10019         AND    wdl.delivery_id     <> p_delivery_id
10020         AND    wdl.delivery_id      = wnd.delivery_id;
10021     --
10022     --
10023     l_num_warnings                NUMBER := 0;
10024     l_num_errors                  NUMBER := 0;
10025     l_return_status               VARCHAR2(10);
10026     l_location_name               VARCHAR2(60);
10027 
10028     -- J+ Internal Location
10029     l_physical_stop_id            WSH_TRIP_STOPS.physical_stop_id%TYPE;
10030     l_physical_location_id        WSH_TRIP_STOPS.physical_location_id%TYPE;
10031     l_trip_id_tab                 wsh_util_core.id_tab_type;
10032     l_success_trip_ids            wsh_util_core.id_tab_type;
10033     -- End of J+ Internal Location
10034     l_stop_rec  WSH_TRIP_STOPS_PVT.TRIP_STOP_REC_TYPE;
10035     l_pub_stop_rec  WSH_TRIP_STOPS_PUB.TRIP_STOP_PUB_REC_TYPE;
10036     l_trip_rec  WSH_TRIPS_PVT.TRIP_REC_TYPE;
10037     --
10038     l_debug_on                    BOOLEAN;
10039     --
10040     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_ship_from_location';
10041     --
10042 --}
10043 BEGIN
10044 --{
10045     SAVEPOINT update_ship_from_location_sp;
10046     --
10047     l_debug_on := wsh_debug_interface.g_debug;
10048     --
10049     IF l_debug_on IS NULL THEN
10050       l_debug_on := wsh_debug_sv.is_debug_enabled;
10051     END IF;
10052     --
10053     IF l_debug_on THEN
10054       wsh_debug_sv.push(l_module_name);
10055       --
10056       wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10057       wsh_debug_sv.LOG(l_module_name, 'p_location_id', p_location_id);
10058     END IF;
10059     --
10060     x_return_status := wsh_util_core.g_ret_sts_success;
10061     --
10062     --
10063     IF p_delivery_id IS NULL
10064     THEN
10065     --{
10066         --
10067         -- Delivery id is required field
10068         --
10069         FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
10070         FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
10071         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
10072         --
10073         RAISE FND_API.G_EXC_ERROR;
10074     --}
10075     END IF;
10076     --
10077     --
10078     OPEN dlvy_csr(p_delivery_id);
10079     FETCH dlvy_csr INTO l_dlvy_rec;
10080     CLOSE dlvy_csr;
10081     --
10082     IF l_dlvy_rec.initial_pickup_location_id IS NULL
10083     THEN
10084     --{
10085         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NOT_EXIST');
10086         FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_delivery_id);
10087         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
10088         --
10089         RAISE FND_API.G_EXC_ERROR;
10090     --}
10091     END IF;
10092     --
10093     --
10094     IF  l_dlvy_rec.initial_pickup_location_id  = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
10095     AND l_dlvy_rec.initial_pickup_location_id <> p_location_id
10096     THEN
10097     --{
10098         --
10099         -- Get stop associated with initial pickup location of delivery.
10100         --
10101         OPEN stop_csr(p_delivery_id,l_dlvy_rec.initial_pickup_location_id);
10102         FETCH stop_csr INTO stop_rec;
10103         CLOSE stop_csr;
10104         --
10105         /*
10106         UPDATE WSH_NEW_DELIVERIES
10107         SET    INITIAL_PICKUP_LOCATION_ID   = p_location_id,
10108                last_update_date             = SYSDATE,
10109                last_updated_by              = FND_GLOBAL.USER_ID,
10110                last_update_login            = FND_GLOBAL.LOGIN_ID
10111         WHERE  delivery_id                  = p_delivery_id;
10112         */
10113         --
10114         --
10115         UPDATE WSH_DELIVERY_DETAILS
10116         SET    SHIP_FROM_LOCATION_ID        = p_location_id,
10117                last_update_date             = SYSDATE,
10118                last_updated_by              = FND_GLOBAL.USER_ID,
10119                last_update_login            = FND_GLOBAL.LOGIN_ID
10120         WHERE  delivery_detail_id IN (
10121                                         SELECT delivery_detail_id
10122                                         FROM   wsh_delivery_assignments_v
10123                                         WHERE  delivery_id = p_delivery_id
10124                                      );
10125         --
10126         --
10127         IF stop_rec.stop_id IS NOT NULL
10128         THEN
10129         --{
10130                -- Get pvt type record structure for stop
10131                --
10132                -- Debug Statements
10133                --
10134                IF l_debug_on THEN
10135                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
10136                END IF;
10137                --
10138                wsh_trip_stops_grp.get_stop_details_pvt
10139                (p_stop_id => stop_rec.stop_id,
10140                x_stop_rec => l_stop_rec,
10141                x_return_status => l_return_status);
10142                 --
10143                 wsh_util_core.api_post_call
10144                   (
10145                     p_return_status => l_return_status,
10146                     x_num_warnings  => l_num_warnings,
10147                     x_num_errors    => l_num_errors
10148                   );
10149                 --
10150             -- Internal Locations J+
10151             -- Derive the physical location id
10152             IF l_stop_rec.stop_location_id <> p_location_id THEN -- New Location id
10153               IF l_debug_on THEN
10154                 wsh_debug_sv.logmsg(l_module_name,'stop location id has been changed');
10155               END IF;
10156               -- Derive physical Location id for this new location
10157               WSH_LOCATIONS_PKG.Convert_internal_cust_location(
10158                 p_internal_cust_location_id => p_location_id,
10159                 x_internal_org_location_id  => l_physical_location_id, -- New physical Location id
10160                 x_return_status             => l_return_status);
10161 
10162               IF l_debug_on THEN
10163                 wsh_debug_sv.log(l_module_name,'New stop_location_id' , p_location_id);
10164                 wsh_debug_sv.log(l_module_name,'Derived physical_location_id' , l_physical_location_id);
10165               END IF;
10166               -- delink the physical stop id
10167               IF nvl(l_stop_rec.physical_location_id, -99) <> nvl(l_physical_location_id, -99) THEN
10168                 l_stop_rec.physical_stop_id := NULL;
10169                 -- Nullify the physical stop id
10170                 l_physical_stop_id := NULL;
10171                 l_stop_rec.physical_location_id := l_physical_location_id; -- Populate record structure
10172               END IF;
10173             END IF;
10174             -- End of Internal Locations J+
10175                --
10176                /* H integration - call Multi Leg FTE */
10177             IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
10178                -- Code changes made in J+ along with Internal Locations
10179                -- Update the Input record structure which FTE uses to validate
10180                -- the new stop location
10181                l_stop_rec.stop_location_id := p_location_id;
10182                -- End of Code changes made in J+
10183                IF l_debug_on THEN
10184                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
10185                END IF;
10186                --
10187                wsh_fte_integration.trip_stop_validations
10188                (p_stop_rec => l_stop_rec,
10189                p_trip_rec => l_trip_rec,
10190                p_action => 'UPDATE',
10191                x_return_status => l_return_status);
10192                 --
10193                 wsh_util_core.api_post_call
10194                   (
10195                     p_return_status => l_return_status,
10196                     x_num_warnings  => l_num_warnings,
10197                     x_num_errors    => l_num_errors
10198                   );
10199                 --
10200             END IF;
10201             --
10202             --
10203             -- J+ Internal Locations, along with new location, update
10204             -- physical_stop_id and physical_location_id
10205             UPDATE wsh_trip_stops
10206             SET    stop_location_id             = p_location_id,
10207                    last_update_date             = SYSDATE,
10208                    last_updated_by              = FND_GLOBAL.USER_ID,
10209                    last_update_login            = FND_GLOBAL.LOGIN_ID,
10210                    physical_stop_id             = l_physical_stop_id, -- J+ Internal Locations
10211                    physical_location_id         = l_physical_location_id -- J+ Internal Locations
10212             WHERE  stop_id                      = stop_rec.stop_id;
10213             --
10214 
10215             -- Internal Locations J+
10216             -- Call Handle Internal Stops API to link the stops
10217             l_trip_id_tab(1) := l_stop_rec.trip_id;
10218             IF l_debug_on THEN
10219               wsh_debug_sv.log(l_module_name,'trip_id' , l_stop_rec.trip_id);
10220               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Handle_Internal_Stops',WSH_DEBUG_SV.C_PROC_LEVEL);
10221             END IF;
10222 
10223             WSH_TRIPS_ACTIONS.Handle_Internal_Stops(
10224                    p_trip_ids          => l_trip_id_tab,
10225                    p_caller            => 'WSH_UPDATE_SHIP_FROM_LOC',
10226                    x_success_trip_ids  => l_success_trip_ids,
10227                    x_return_status     => l_return_status);
10228 
10229             wsh_util_core.api_post_call(
10230                    p_return_status => l_return_status,
10231                    x_num_warnings  => l_num_warnings,
10232                    x_num_errors    => l_num_errors);
10233             -- End of Internal Locations J+
10234             --
10235 
10236             l_location_name := NULL;
10237             --
10238             --
10239             -- Get all deliveries being picked up from the same stop.
10240             --
10241             FOR pickup_dlvy_rec IN pickup_dlvy_csr (p_delivery_id , stop_rec.stop_id)
10242             LOOP
10243             --{
10244                 --OTM R12, this update is called by inbound so we
10245                 --will not check tms flag here
10246                 UPDATE WSH_NEW_DELIVERIES
10247                 SET    INITIAL_PICKUP_LOCATION_ID   = p_location_id,
10248                        last_update_date             = SYSDATE,
10249                        last_updated_by              = FND_GLOBAL.USER_ID,
10250                        last_update_login            = FND_GLOBAL.LOGIN_ID
10251                 WHERE  delivery_id                  = pickup_dlvy_rec.delivery_id;
10252                 --
10253                 --
10254                 UPDATE WSH_DELIVERY_DETAILS
10255                 SET    SHIP_FROM_LOCATION_ID        = p_location_id,
10256                        last_update_date             = SYSDATE,
10257                        last_updated_by              = FND_GLOBAL.USER_ID,
10258                        last_update_login            = FND_GLOBAL.LOGIN_ID
10259                 WHERE  delivery_detail_id IN (
10260                                                 SELECT delivery_detail_id
10261                                                 FROM   wsh_delivery_assignments_v
10262                                                 WHERE  delivery_id = pickup_dlvy_rec.delivery_id
10263                                              );
10264                 --
10265                 --
10266                 IF l_location_name IS NULL
10267                 THEN
10268                 --{
10269                     IF l_debug_on THEN
10270                         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_location_description',WSH_DEBUG_SV.C_PROC_LEVEL);
10271                     END IF;
10272                     --
10273                     l_location_name := SUBSTRB(
10274                                                 WSH_UTIL_CORE.get_location_description
10275                                                   (
10276                                                     p_location_id,
10277                                                     'NEW UI CODE'
10278                                                   ),
10279                                                 1,
10280                                                 60
10281                                               );
10282                 --}
10283                 END IF;
10284                 --
10285                 --
10286                 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_PU_LOCN_UPDATE');
10287                 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', pickup_dlvy_rec.name);
10288                 FND_MESSAGE.SET_TOKEN('LOCATION_NAME', l_location_name);
10289                 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_warning,l_module_name);
10290                 l_num_warnings := l_num_warnings + 1;
10291             --}
10292             END LOOP;
10293         --}
10294         END IF;
10295     --}
10296     END IF;
10297     --
10298     --
10299     --
10300     IF l_num_errors > 0
10301     THEN
10302         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10303     ELSIF l_num_warnings > 0
10304     THEN
10305         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10306     ELSE
10307         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10308     END IF;
10309     --
10310     IF l_debug_on THEN
10311       wsh_debug_sv.pop(l_module_name);
10312     END IF;
10313     --
10314 --}
10315 EXCEPTION
10316 --{
10317       --
10318     WHEN FND_API.G_EXC_ERROR THEN
10319 
10320       ROLLBACK TO  update_ship_from_location_sp;
10321       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10322       --
10323       IF l_debug_on THEN
10324         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10325         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10326       END IF;
10327       --
10328     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10329 
10330       ROLLBACK TO  update_ship_from_location_sp;
10331       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10332       --
10333       IF l_debug_on THEN
10334         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10335         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10336       END IF;
10337       --
10338     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10339       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10340       --
10341       IF l_debug_on THEN
10342         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10343         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10344       END IF;
10345       --
10346     WHEN OTHERS THEN
10347 
10348         ROLLBACK TO  update_ship_from_location_sp;
10349         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10350         wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_ship_from_location', l_module_name);
10351         IF l_debug_on THEN
10352            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10353         END IF;
10354         --
10355 --}
10356 END update_ship_from_location;
10357 
10358 -- J-IB-NPARIKH---}
10359 
10360 -- Look for Open deliveries in Trip
10361 -- If any delivery exists with status = OPEN in the trip ,then RETURN FALSE
10362 -- If no open delivery exists ,then RETURN TRUE
10363 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
10364  return BOOLEAN IS
10365 
10366 -- First row found is enough
10367 
10368 -- bug 4891897, sql 15038247
10369 -- 1) wsh_delivery_trips_v is replaced with the join of
10370 --    wsh_delivery_legs and wsh_trip_stops
10371 -- 2) query is flattened instead of using the subquery for lower sharable memory
10372 
10373   CURSOR Check_Last_Trip (l_delivery_id NUMBER) IS
10374   SELECT s1.trip_id
10375     FROM wsh_trip_stops s1,
10376          wsh_delivery_legs dl1,
10377          wsh_new_deliveries d1,
10378          wsh_trip_stops s2,
10379          wsh_delivery_legs dl2
10380    WHERE d1.delivery_id <> l_delivery_id
10381      AND s1.stop_id = dl1.pick_up_stop_id
10382      AND d1.delivery_id = dl1.delivery_id
10383      AND d1.status_code = 'OP'
10384      AND d1.delivery_type = 'STANDARD'
10385      AND s2.trip_id = s1.trip_id
10386      AND s2.stop_id = dl2.pick_up_stop_id
10387      AND dl2.delivery_id = l_delivery_id
10388      AND rownum = 1;
10389 
10390   l_trip_id NUMBER;
10391 
10392     l_debug_on                    BOOLEAN;
10393     --
10394     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'check_last_del_trip';
10395     --
10396 BEGIN
10397 
10398   l_debug_on := wsh_debug_interface.g_debug;
10399   --
10400   IF l_debug_on IS NULL THEN
10401     l_debug_on := wsh_debug_sv.is_debug_enabled;
10402   END IF;
10403   --
10404   IF l_debug_on THEN
10405     wsh_debug_sv.push(l_module_name);
10406     --
10407    --
10408     wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10409   END IF;
10410 
10411   OPEN check_last_trip(p_delivery_id);
10412   FETCH check_last_trip
10413    INTO l_trip_id;
10414   CLOSE check_last_trip;
10415 
10416   IF l_trip_id IS NOT NULL THEN -- found a open delivery
10417     IF l_debug_on THEN
10418       wsh_debug_sv.LOGMSG(l_module_name, 'Last Del on Trip-' || l_trip_id);
10419       wsh_debug_sv.pop(l_module_name);
10420     END IF;
10421     return FALSE;
10422   ELSE  -- no open delivery
10423     IF l_debug_on THEN
10424       wsh_debug_sv.LOGMSG(l_module_name, 'THIS IS LAST OPEN DELIVERY on TRIP');
10425       wsh_debug_sv.pop(l_module_name);
10426     END IF;
10427     return TRUE;
10428   END IF;
10429 
10430   IF l_debug_on THEN
10431     wsh_debug_sv.pop(l_module_name);
10432   END IF;
10433 
10434 EXCEPTION
10435 
10436   WHEN OTHERS THEN
10437     wsh_util_core.default_handler('wsh_new_delivery_actions.check_last_del_trip',l_module_name);
10438       --
10439     IF l_debug_on THEN
10440       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10441     END IF;
10442     RETURN FALSE;
10443 END check_last_del_trip;
10444 
10445 -- ---------------------------------------------------------------------------
10446 -- NAME:                GET_TRIP_STATUS
10447 -- TYPE:                FUNCTION
10448 -- PARAMETERS(IN):      p_delivery_id IN  NUMBER
10449 --
10450 -- RETURN:              MANY     - delivery is assigned to more than one trip
10451 --                      SHARED   - trip to which this delivery is assigned is
10452 --                                 shared with other deliveries
10453 --                      HAS_LANE - trip to which this delivery is assigned has
10454 --                                 Lane/Service assigned
10455 --                      NONE     - delivery is not assigned to a trip
10456 --                      ONE      - delivery is assigned to one trip and this
10457 --                                 trip is not shared with other deliveries
10458 -- DESCRIPTION:         get the relationship between the delivery and the trip
10459 --
10460 -- CALLED FROM PROCESS_CARRIER_SELECTION
10461 -- ADDED BY HJPARK AS PART OF 11i10+ ENHANCEMENT 9/20/2004
10462 -- ---------------------------------------------------------------------------
10463 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2) return VARCHAR2 IS
10464 --FUNCTION GET_TRIP_STATUS(p_delivery_id IN NUMBER) return VARCHAR2 IS
10465 
10466   l_debug_on        BOOLEAN;
10467   l_module_name     CONSTANT VARCHAR2(100) := 'wsh.plsql.'||g_pkg_name||'.'||'get_trip_status';
10468 
10469   l_count           NUMBER;
10470   l_delivery_leg_id NUMBER;
10471   l_trip_id         NUMBER;
10472   l_lane_id         NUMBER;
10473 
10474   CURSOR check_many_trips(x_delivery_id NUMBER) IS
10475   SELECT count(delivery_leg_id), min(delivery_leg_id)
10476     FROM wsh_delivery_legs
10477    WHERE delivery_id = x_delivery_id;
10478 
10479   CURSOR check_shared_trip(x_delivery_leg_id NUMBER) IS
10480   SELECT count(s.trip_id ), min(s.trip_id)
10481     FROM wsh_delivery_legs d, wsh_trip_stops s
10482    WHERE d.pick_up_stop_id = s.stop_id
10483      AND s.trip_id = (SELECT s1.trip_id
10484                         FROM wsh_trip_stops s1, wsh_delivery_legs d1
10485                        WHERE d1.delivery_leg_id = x_delivery_leg_id
10486                          AND s1.stop_id = d1.pick_up_stop_id);
10487 
10488   -- Hiding project
10489   -- count('CONSOLIDATION') should be 1
10490 
10491   CURSOR check_shared_trip_consol(x_delivery_leg_id NUMBER) IS
10492   SELECT count(*), min(s.trip_id)
10493   FROM wsh_new_deliveries n, wsh_delivery_legs d, wsh_trip_stops s
10494    WHERE n.delivery_id = d.delivery_id
10495      AND d.pick_up_stop_id = s.stop_id
10496      AND s.trip_id = (SELECT s1.trip_id
10497                         FROM wsh_trip_stops s1, wsh_delivery_legs d1
10498                        WHERE d1.delivery_leg_id = x_delivery_leg_id
10499                          AND s1.stop_id = d1.pick_up_stop_id)
10500      AND d.parent_delivery_leg_id IS NULL;
10501 
10502   CURSOR check_trip_lane(x_trip_id NUMBER) IS
10503   SELECT lane_id
10504     FROM wsh_trips
10505    WHERE trip_id = x_trip_id;
10506 
10507 BEGIN
10508 
10509   l_debug_on := wsh_debug_interface.g_debug;
10510   IF l_debug_on IS NULL THEN
10511     l_debug_on := wsh_debug_sv.is_debug_enabled;
10512   END IF;
10513   IF l_debug_on THEN
10514     wsh_debug_sv.push(l_module_name);
10515     wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10516   END IF;
10517 
10518   -- checks whether the delivery is assigned to a trip
10519 
10520   OPEN check_many_trips(p_delivery_id);
10521   FETCH check_many_trips INTO l_count, l_delivery_leg_id;
10522   CLOSE check_many_trips;
10523 
10524   IF (l_count = 0) THEN
10525     -- delivery is not assigned to a trip
10526     IF l_debug_on THEN
10527       wsh_debug_sv.LOGMSG(l_module_name, 'NONE');
10528       wsh_debug_sv.pop(l_module_name);
10529     END IF;
10530     return 'NONE';
10531   ELSIF (l_count > 1) THEN
10532     -- delivery is assigned to more than one trip
10533     IF l_debug_on THEN
10534       wsh_debug_sv.LOGMSG(l_module_name, 'MANY');
10535       wsh_debug_sv.pop(l_module_name);
10536     END IF;
10537     return 'MANY';
10538   END IF;
10539 
10540 
10541   -- comes here when the delivery is assigned to only one trip
10542   -- checks whether the trip is shared by more than one delivery
10543 
10544   IF p_delivery_type = 'CONSOLIDATION' THEN
10545 
10546   -- Hiding project
10547   -- A consol delivery can be assigned to only 1 trip
10548   -- But the trip can have other consol / regular / content deliveries on that trip
10549   -- The action should be allowed only if other deliveries in this trip
10550   -- are only the child content deliveries of this consol delivery
10551 
10552   OPEN check_shared_trip_consol(l_delivery_leg_id);
10553   FETCH check_shared_trip_consol INTO l_count,l_trip_id;
10554   CLOSE check_shared_trip_consol;
10555 
10556   IF (l_count > 1) THEN
10557     -- trip is shared by more than one delivery - Error
10558     IF l_debug_on THEN
10559       wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10560       wsh_debug_sv.pop(l_module_name);
10561     END IF;
10562     return 'SHARED';
10563   END IF;
10564 
10565   ELSE
10566 
10567   OPEN check_shared_trip(l_delivery_leg_id);
10568   FETCH check_shared_trip INTO l_count, l_trip_id;
10569   CLOSE check_shared_trip;
10570 
10571   IF (l_count > 1) THEN
10572     -- trip is shared by more than one delivery - Error
10573     IF l_debug_on THEN
10574       wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10575       wsh_debug_sv.pop(l_module_name);
10576     END IF;
10577     return 'SHARED';
10578   END IF;
10579 
10580   END IF;
10581   -- comes here when the trip is used only by this delivery, hence 1:1
10582   -- checks whether trip has lane assigned
10583 
10584   OPEN check_trip_lane(l_trip_id);
10585   FETCH check_trip_lane INTO l_lane_id;
10586   CLOSE check_trip_lane;
10587 
10588   IF l_lane_id is not NULL
10589   THEN
10590     IF l_debug_on THEN
10591       wsh_debug_sv.LOGMSG(l_module_name, 'HAS_LANE');
10592       wsh_debug_sv.pop(l_module_name);
10593     END IF;
10594     return 'HAS_LANE';
10595   ELSE
10596     IF l_debug_on THEN
10597       wsh_debug_sv.LOGMSG(l_module_name, 'ONE-'||l_trip_id);
10598       wsh_debug_sv.pop(l_module_name);
10599     END IF;
10600     return 'ONE-'||l_trip_id;
10601   END IF;
10602 
10603 EXCEPTION
10604   WHEN OTHERS THEN
10605     wsh_util_core.default_handler('wsh_new_delivery_actions.get_trip_status',l_module_name);
10606       --
10607     IF l_debug_on THEN
10608       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10609     END IF;
10610 
10611 END GET_TRIP_STATUS;
10612 
10613 --SBAKSHI(R12)
10614 --***************************************************************************--
10615 --========================================================================
10616 -- FUNCTION  :  IS_DLVY_CONTENT      PRIVATE
10617 --
10618 -- PARAMETERS: p_delivery_id		Delivery Id
10619 --
10620 -- COMMENT   : Returns True if the delivery is content
10621 --
10622 --***************************************************************************--
10623 FUNCTION IS_DLVY_CONTENT(p_delivery_id IN NUMBER)
10624 	RETURN BOOLEAN
10625 IS
10626 
10627 /*
10628 	When we query for a parent delivery of a delivery we
10629 	should always use wsh_delivery_legs instead of wsh_delivery_assignments.
10630 	If the child delivery does not have any lines attached to it,
10631 	it will not have record in wda, whereas a console delivery and
10632 	its children will always have a trip, and a record in wdl.
10633 */
10634 
10635 CURSOR c_get_console_delivery (c_delivery_id IN NUMBER) IS
10636 select pleg.delivery_id
10637 from   wsh_delivery_legs pleg,
10638        wsh_delivery_legs cleg
10639 where  pleg.delivery_leg_id = cleg.parent_delivery_leg_id
10640 and    cleg.delivery_id = c_delivery_id;
10641 
10642 l_delivery_id		NUMBER;
10643 l_content_dlvy		BOOLEAN := FALSE;
10644 
10645 l_debug_on         CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10646 l_module_name      CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_DLVY_CONTENT';
10647 
10648 BEGIN
10649 
10650         --
10651         IF l_debug_on THEN
10652 	       wsh_debug_sv.push (l_module_name);
10653         END IF;
10654         --
10655 
10656 	OPEN  c_get_console_delivery(p_delivery_id) ;
10657 	FETCH c_get_console_delivery INTO l_delivery_id;
10658 
10659 	IF (l_delivery_id IS NOT NULL) THEN
10660 		-- The dlvy is assigned to a console delivery
10661 		l_content_dlvy := TRUE;
10662 	END IF;
10663 	CLOSE c_get_console_delivery;
10664 
10665 	--
10666         IF l_debug_on THEN
10667 	     wsh_debug_sv.pop(l_module_name);
10668         END IF;
10669         --
10670 	RETURN l_content_dlvy;
10671 
10672 EXCEPTION
10673 WHEN OTHERS THEN
10674 
10675       IF c_get_console_delivery%ISOPEN THEN
10676          CLOSE c_get_console_delivery;
10677       END IF;
10678 
10679       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.IS_DLVY_CONTENT');
10680       --
10681       IF l_debug_on THEN
10682         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10683         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10684       END IF;
10685 
10686 END IS_DLVY_CONTENT;
10687 
10688 --***************************************************************************--
10689 --========================================================================
10690 -- PROCEDURE : GET_SHIP_TO_SITE       PRIVATE
10691 --
10692 -- PARAMETERS: p_delivery_id	      Delivery Id
10693 --	       x_site_id	      Customer Site Id.
10694 --             x_return_status	      Return Status
10695 --
10696 -- COMMENT   : Returns the ship to site associated with the delivery.
10697 --
10698 --***************************************************************************--
10699 PROCEDURE GET_SHIP_TO_SITE(p_delivery_id	IN	   NUMBER,
10700                            p_delivery_type      IN         VARCHAR2  DEFAULT NULL,
10701                            p_ultimate_dropoff_loc_id  IN NUMBER DEFAULT NULL,
10702 			   x_site_id		OUT NOCOPY NUMBER,
10703 			   x_return_status	OUT NOCOPY VARCHAR2)
10704 IS
10705 
10706 CURSOR c_get_ship_to_site IS
10707 SELECT DISTINCT wdd.ship_to_site_use_id
10708 FROM   wsh_delivery_details wdd,
10709        wsh_delivery_assignments wda
10710 WHERE  wda.delivery_detail_id  =  wdd.delivery_detail_id
10711 AND    wda.delivery_id         =  p_delivery_id
10712 AND    wdd.ship_to_site_use_id IS NOT NULL;
10713 
10714 CURSOR c_ship_to_site_use(c_location_id IN NUMBER) IS
10715 SELECT SITE.SITE_USE_ID
10716 FROM HZ_CUST_ACCT_SITES_ALL     ACCT_SITE,
10717  HZ_PARTY_SITES             PARTY_SITE,
10718  HZ_LOCATIONS               LOC,
10719  HZ_CUST_SITE_USES_ALL      SITE
10720 WHERE
10721  SITE.SITE_USE_CODE = 'SHIP_TO'
10722  AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
10723  AND ACCT_SITE.PARTY_SITE_ID    = PARTY_SITE.PARTY_SITE_ID
10724  AND PARTY_SITE.LOCATION_ID     = LOC.LOCATION_ID
10725  AND LOC.LOCATION_ID = c_location_id;
10726 
10727 l_site_tab			WSH_UTIL_CORE.ID_TAB_TYPE;
10728 multiple_ship_to_site		EXCEPTION;
10729 no_ship_to_site			EXCEPTION;
10730 
10731 l_debug_on         CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10732 l_module_name      CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_SITE';
10733 
10734 BEGIN
10735 
10736 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10737 	--
10738         IF l_debug_on THEN
10739 	       wsh_debug_sv.push (l_module_name);
10740         END IF;
10741 	--
10742 
10743         IF p_delivery_type = 'STANDARD' THEN
10744 
10745 	OPEN  c_get_ship_to_site;
10746 	FETCH c_get_ship_to_site BULK COLLECT INTO l_site_tab;
10747 	CLOSE c_get_ship_to_site;
10748 
10749 	IF (l_site_tab.COUNT = 1) THEN
10750 		x_site_id := l_site_tab(l_site_tab.FIRST);
10751 	ELSIF (l_site_tab.COUNT = 0 ) THEN
10752 		RAISE NO_SHIP_TO_SITE;
10753 	ELSE
10754 		RAISE MULTIPLE_SHIP_TO_SITE;
10755 	END IF;
10756 
10757         ELSIF p_delivery_type = 'CONSOLIDATION' THEN
10758 
10759         OPEN c_ship_to_site_use(p_ultimate_dropoff_loc_id);
10760         FETCH c_ship_to_site_use INTO x_site_id;
10761         IF c_ship_to_site_use%NOTFOUND THEN
10762             x_site_id := NULL;
10763         END IF;
10764         CLOSE c_ship_to_site_use;
10765 
10766         END IF;
10767 
10768 
10769 	--
10770 	IF l_debug_on THEN
10771 	      WSH_DEBUG_SV.pop(l_module_name);
10772 	END IF;
10773         --
10774 EXCEPTION
10775 
10776 WHEN NO_SHIP_TO_SITE THEN
10777 	 -- Delivery is not assoociated with a site.
10778 	IF l_debug_on THEN
10779           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with a site');
10780 	END IF;
10781 	 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_SITE');
10782          FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10783          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10784 	 WSH_UTIL_CORE.add_message(x_return_status);
10785 
10786 	IF l_debug_on THEN
10787 	      WSH_DEBUG_SV.pop(l_module_name);
10788 	END IF;
10789 
10790 WHEN MULTIPLE_SHIP_TO_SITE THEN
10791 
10792 	 -- Delivery is associated with multiple sites
10793 	IF l_debug_on THEN
10794           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with multiple sites');
10795 	END IF;
10796 	 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_MULT_SITE');
10797          FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10798 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10799 	 WSH_UTIL_CORE.add_message(x_return_status);
10800 
10801 	IF l_debug_on THEN
10802 	      WSH_DEBUG_SV.pop(l_module_name);
10803 	END IF;
10804 
10805 WHEN OTHERS THEN
10806 
10807 	IF ( c_get_ship_to_site%ISOPEN) THEN
10808 		CLOSE c_get_ship_to_site;
10809 	END IF;
10810 	--
10811         WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_site');
10812         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10813         --
10814 
10815 	IF l_debug_on THEN
10816           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10817           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10818         END IF;
10819        --
10820 END GET_SHIP_TO_SITE;
10821 
10822 
10823 --***************************************************************************--
10824 --========================================================================
10825 -- PROCEDURE : GET_SHIP_TO_CUSTOMER   PRIVATE
10826 --
10827 -- PARAMETERS:  p_ult_dropoff_loc_id   Drop off location id.
10828 --		p_delivery_id	       Delivery Id.
10829 --	        x_customer_id	       Customer Id.
10830 --              x_return_status	       Return Status
10831 --
10832 -- COMMENT   : Returns the customer associated with the given location.
10833 --
10834 --***************************************************************************--
10835 PROCEDURE GET_SHIP_TO_CUSTOMER( p_ult_dropoff_loc_id	IN  	   NUMBER,
10836 				p_delivery_id		IN	   NUMBER,
10837 				x_customer_id		OUT NOCOPY NUMBER,
10838 				x_return_status		OUT NOCOPY VARCHAR2)
10839 IS
10840 
10841 CURSOR c_get_shipto_cust_from_loc (p_location_id IN NUMBER) IS
10842 SELECT hcas.cust_account_id
10843 FROM   wsh_locations wl,
10844        hz_party_sites hps,
10845        hz_cust_acct_sites_all hcas
10846 WHERE  wl.wsh_location_id = p_location_id
10847 AND    wl.location_source_code = 'HZ'
10848 AND    wl.source_location_id = hps.location_id
10849 AND    hps.party_site_id = hcas.party_site_id;
10850 
10851 
10852 CURSOR c_get_shipto_cust_from_dlvy(p_delivery_id IN NUMBER) IS
10853 SELECT distinct hcas.cust_account_id
10854 FROM   hz_cust_site_uses_all hcsu,
10855        hz_cust_acct_sites_all hcas
10856  WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
10857  AND   hcsu.site_use_id IN (SELECT DISTINCT wdd.ship_to_site_use_id
10858 			    FROM   wsh_delivery_details wdd,
10859 				   wsh_delivery_assignments wda
10860  		            WHERE  wda.delivery_detail_id  = wdd.delivery_detail_id
10861 		            AND     wda.delivery_id        = p_delivery_id);
10862 
10863 
10864 l_cust_tab		WSH_UTIL_CORE.ID_TAB_TYPE;
10865 no_cust_for_loc		EXCEPTION;
10866 mult_cust_for_loc	EXCEPTION;
10867 
10868 l_debug_on		CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10869 l_module_name		CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_CUSTOMER';
10870 
10871 BEGIN
10872 
10873 	x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10874 	--
10875         IF l_debug_on THEN
10876 	       wsh_debug_sv.push (l_module_name);
10877         END IF;
10878 	--
10879 
10880 	OPEN  c_get_shipto_cust_from_loc(p_ult_dropoff_loc_id);
10881 	FETCH c_get_shipto_cust_from_loc BULK COLLECT INTO l_cust_tab;
10882 	CLOSE c_get_shipto_cust_from_loc;
10883 
10884 	IF (l_cust_tab.COUNT=1) THEN
10885 		x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10886 	ELSIF (l_cust_tab.COUNT = 0) THEN
10887 		-- Location is not associated with a customer.
10888 		RAISE NO_CUST_FOR_LOC;
10889 	ELSE
10890 		-- Multiple records have been returned.
10891 		-- For the delivery get the delivery lines and use ship to site id
10892 		-- to return the customer. check that each has the same customer.
10893 		OPEN  c_get_shipto_cust_from_dlvy(p_delivery_id);
10894 		FETCH c_get_shipto_cust_from_dlvy BULK COLLECT INTO l_cust_tab;
10895 		CLOSE c_get_shipto_cust_from_dlvy;
10896 
10897 		IF (l_cust_tab.COUNT=1) THEN
10898 			x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10899 		ELSIF (l_cust_tab.COUNT=0) THEN
10900 			RAISE NO_CUST_FOR_LOC;
10901 		ELSE
10902 			RAISE MULT_CUST_FOR_LOC;
10903 		END IF;
10904 	END IF;
10905 
10906 	--
10907 	IF l_debug_on THEN
10908 	      WSH_DEBUG_SV.pop(l_module_name);
10909 	END IF;
10910         --
10911 EXCEPTION
10912 
10913 	WHEN NO_CUST_FOR_LOC THEN
10914 		IF l_debug_on THEN
10915                   wsh_debug_sv.logmsg(l_module_name, 'Location not associated with a customer');
10916 		END IF;
10917 		  -- Location not associated with a customer.
10918 		 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_NO_LOC');
10919          FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10920 		 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10921 		 WSH_UTIL_CORE.add_message(x_return_status);
10922 
10923 		IF l_debug_on THEN
10924 		      WSH_DEBUG_SV.pop(l_module_name);
10925 		END IF;
10926 	WHEN MULT_CUST_FOR_LOC THEN
10927 		 -- Location  associated with a multiple customers.
10928 		IF l_debug_on THEN
10929                   wsh_debug_sv.logmsg(l_module_name, 'Location associated with multiple customers');
10930 		END IF;
10931 		 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_MULT_LOC');
10932          FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10933 		 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10934 		 WSH_UTIL_CORE.add_message(x_return_status);
10935 
10936 		IF l_debug_on THEN
10937 		      WSH_DEBUG_SV.pop(l_module_name);
10938 		END IF;
10939 	WHEN OTHERS THEN
10940 		IF (c_get_shipto_cust_from_loc%ISOPEN) THEN
10941 			CLOSE c_get_shipto_cust_from_loc;
10942 		END IF;
10943 
10944 		IF (c_get_shipto_cust_from_dlvy%ISOPEN) THEN
10945 			CLOSE c_get_shipto_cust_from_dlvy;
10946 		END IF;
10947 		--
10948 		WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_customer');
10949 	        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10950 	        --
10951   		IF l_debug_on THEN
10952 	          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10953 		  WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10954 		END IF;
10955 		--
10956 END GET_SHIP_TO_CUSTOMER;
10957 
10958 ---------------------------------------------------------------------------------------
10959 -- Procedure:   SET_PICK_UP_DROP_OFF_DATES
10960 --
10961 -- Parameters:  p_cs_mleg_result_tab     IN OUT table
10962 --              x_return_message            Return Message
10963 --              x_return_status             Return Status
10964 --
10965 -- COMMENT   : This procedure is called from Process_carrier_selection API
10966 --		in order to get pick up and drop off dates for intermediate stops.
10967 --		If Carrier selection API returns multileg output, the dates have to
10968 --      determined.
10969 --
10970 --      Logic for determining the dates:
10971 --
10972 --      a) Find transit time between delivery leg's pick up and drop off stops
10973 --      b) If transit time found
10974 --          i. drop off date = pick up date +transit time
10975 --      c) if transit time is not found, calculate total time between deliveries
10976 --          pick up and drop off stops and divide it equally amongst all the delivery legs.
10977 --
10978 --  ----------------------------------------------------------------------
10979 
10980 PROCEDURE SET_PICK_UP_DROP_OFF_DATES(
10981         p_cs_mleg_result_tab  IN OUT NOCOPY WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
10982         x_return_status          OUT NOCOPY VARCHAR2,
10983         x_msg_count              OUT NOCOPY NUMBER,
10984         x_msg_data               OUT NOCOPY VARCHAR2
10985 ) IS
10986 
10987 transit_time                NUMBER;
10988 transit_time_found          BOOLEAN := TRUE;
10989 from_location_id            NUMBER;
10990 to_location_id              NUMBER;
10991 ship_method                 VARCHAR2(60);
10992 num_legs                    NUMBER;
10993 num_days                    NUMBER;
10994 num_hours                   NUMBER;
10995 days_fraction               NUMBER;
10996 rec_cnt                     NUMBER;
10997 rec_cnt_prior               NUMBER;
10998 pick_up_date                DATE;
10999 drop_off_date               DATE;
11000 initial_pick_up_date        DATE;
11001 ultimate_drop_off_date      DATE;
11002 d_itr                       NUMBER;
11003 
11004 l_debug_on                  BOOLEAN;
11005 
11006 l_module_name               CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SET_PICK_UP_DROP_OFF_DATES';
11007 
11008 CURSOR get_transit_time(p_from_location_id  NUMBER,
11009                         p_to_location_id NUMBER,
11010                         p_ship_method VARCHAR2) IS
11011 
11012 SELECT INTRANSIT_TIME
11013 FROM MTL_INTERORG_SHIP_METHODS
11014 WHERE FROM_LOCATION_ID = p_from_location_id
11015 AND TO_LOCATION_ID = p_to_location_id
11016 AND SHIP_METHOD = p_ship_method;
11017 
11018 BEGIN
11019 --{
11020     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11021 
11022     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11023 
11024     --
11025     IF l_debug_on IS NULL
11026     THEN
11027       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11028     END IF;
11029     --
11030 
11031     IF l_debug_on THEN
11032       WSH_DEBUG_SV.push(l_module_name);
11033     END IF;
11034 
11035     --
11036     -- Obtain number of delivery legs, initial pick up date and ultimate drop off date for the delivery
11037     --
11038 
11039     num_legs := p_cs_mleg_result_tab.COUNT;
11040     initial_pick_up_date    := p_cs_mleg_result_tab(p_cs_mleg_result_tab.FIRST).pickup_date;
11041     ultimate_drop_off_date  := p_cs_mleg_result_tab(p_cs_mleg_result_tab.LAST).dropoff_date;
11042 
11043     IF l_debug_on THEN
11044         WSH_DEBUG_SV.logmsg(l_module_name,'No of legs :'||num_legs);
11045         WSH_DEBUG_SV.logmsg(l_module_name,'initial_pick_up_date :'||to_char(initial_pick_up_date, 'dd/mm/yyyy hh:mi:ss'));
11046         WSH_DEBUG_SV.logmsg(l_module_name,'ultimate_drop_off_date :'||to_char(ultimate_drop_off_date, 'dd/mm/yyyy hh:mi:ss'));
11047     END IF;
11048 
11049 
11050     rec_cnt := p_cs_mleg_result_tab.FIRST;
11051 
11052     IF rec_cnt IS NOT NULL THEN
11053         IF initial_pick_up_date = ultimate_drop_off_date   THEN
11054             LOOP
11055                 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
11056 
11057                 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
11058                     pick_up_date := initial_pick_up_date;
11059                 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
11060                     -- pick up date is one hour more than drop off date of last stop
11061                     pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
11062                 END IF;
11063 
11064                 drop_off_date := pick_up_date + 1/144;
11065 
11066                 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
11067                 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11068 
11069                 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
11070                 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
11071             END LOOP;
11072         ELSE
11073 
11074 
11075             --IF rec_cnt IS NOT NULL THEN
11076 
11077                 LOOP
11078                 --{
11079                     transit_time := null;
11080                     rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
11081 
11082                     IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
11083                         pick_up_date := initial_pick_up_date;
11084                     ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
11085                         -- pick up date is one hour more than drop off date of last stop
11086                         pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
11087                     END IF;
11088 
11089                     p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
11090 
11091                     IF transit_time_found = TRUE THEN
11092                     --{
11093                         from_location_id :=  p_cs_mleg_result_tab(rec_cnt).initial_pickup_location_id;
11094                         to_location_id   :=  p_cs_mleg_result_tab(rec_cnt).ultimate_dropoff_location_id;
11095                         ship_method      :=  p_cs_mleg_result_tab(rec_cnt).ship_method_code;
11096 
11097                         OPEN get_transit_time (from_location_id, to_location_id, ship_method);
11098                             FETCH get_transit_time into transit_time;
11099                         CLOSE get_transit_time;
11100 
11101                         --
11102                         -- If transit time is not found for a leg, divide remaining time equally between different legs
11103                         --
11104 
11105                         IF transit_time IS NULL THEN
11106                         --{
11107                             transit_time_found := false;
11108                             num_days           := ultimate_drop_off_date - pick_up_date;
11109                             IF num_days > (num_legs-1)/24 THEN
11110                                 days_fraction      := (num_days - (num_legs-2)/24)/ num_legs;
11111                             ELSE
11112                                 days_fraction      := num_days / num_legs;
11113                             END IF;
11114                             drop_off_date      := pick_up_date + days_fraction;
11115 
11116                             p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11117                         --}
11118                         ELSE -- transit time is not null
11119                         --{
11120                             IF l_debug_on THEN
11121                                 WSH_DEBUG_SV.log(l_module_name, 'transit_time_found', transit_time_found);
11122                                 WSH_DEBUG_SV.log(l_module_name, 'from_location_id', from_location_id);
11123                                 WSH_DEBUG_SV.log(l_module_name, 'to_location_id', to_location_id);
11124                                 WSH_DEBUG_SV.log(l_module_name, 'ship_method', ship_method);
11125                                 WSH_DEBUG_SV.log(l_module_name, 'transit_time', transit_time);
11126                             END IF;
11127 
11128                             IF rec_cnt = p_cs_mleg_result_tab.LAST THEN
11129                                 drop_off_date := ultimate_drop_off_date;
11130                             ELSE
11131                                 drop_off_date := pick_up_date + transit_time;
11132                             END IF;
11133 
11134                             IF drop_off_date < ultimate_drop_off_date THEN
11135                                p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11136                                num_legs := num_legs - 1;
11137                             ELSIF drop_off_date = ultimate_drop_off_date THEN
11138                                 IF drop_off_date <= pick_up_date THEN
11139                                     p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date + 1/24;
11140                                     ultimate_drop_off_date := ultimate_drop_off_date + 1/24;
11141                                 END IF;
11142                                 num_legs := num_legs - 1;
11143                             ELSE
11144                                 transit_time_found := false;
11145 
11146                                 IF p_cs_mleg_result_tab.EXISTS(rec_cnt_prior) THEN
11147                                     num_days := ultimate_drop_off_date - p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date;
11148                                 ELSE
11149                                     num_days := ultimate_drop_off_date - pick_up_date;
11150                                 END IF;
11151                                 IF num_days > (num_legs-1)/24 THEN
11152                                     days_fraction      := (num_days - (num_legs-2)/24)/ num_legs;
11153                                 ELSE
11154                                     days_fraction      := num_days / num_legs;
11155                                 END IF;
11156                                 --days_fraction := num_days / num_legs;
11157                                 drop_off_date := pick_up_date + days_fraction;
11158                                 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11159                             END IF;
11160 
11161                             IF l_debug_on THEN
11162                                 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'));
11163                                 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'));
11164                              END IF;
11165                         --}
11166                         END IF;
11167                     --}
11168                     ELSE
11169                     --{
11170                         drop_off_date := pick_up_date + days_fraction;
11171 
11172                         IF drop_off_date > ultimate_drop_off_date OR rec_cnt = p_cs_mleg_result_tab.LAST THEN
11173                             drop_off_date := ultimate_drop_off_date;
11174                         END IF;
11175 
11176                         IF drop_off_date = ultimate_drop_off_date AND drop_off_date <= pick_up_date THEN
11177                             drop_off_date := drop_off_date + 1/24;
11178                             ultimate_drop_off_date := drop_off_date;
11179                         END IF;
11180 
11181                         p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11182                     --}
11183                     END IF;
11184 
11185                    --}
11186                     EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
11187 
11188                     rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
11189 
11190                 END LOOP;
11191 
11192             --END IF;
11193 
11194             d_itr := p_cs_mleg_result_tab.FIRST;
11195 
11196             IF d_itr IS NOT NULL THEN
11197                 LOOP
11198                     IF p_cs_mleg_result_tab(d_itr).pickup_date = p_cs_mleg_result_tab(d_itr).dropoff_date THEN
11199                         p_cs_mleg_result_tab(d_itr).dropoff_date := p_cs_mleg_result_tab(d_itr).dropoff_date + 1/144;
11200                     END IF;
11201 
11202                     IF l_debug_on THEN
11203                         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);
11204                         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'));
11205                         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);
11206                         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'));
11207                      END IF;
11208 
11209                     EXIT WHEN d_itr = p_cs_mleg_result_tab.LAST;
11210                     d_itr := p_cs_mleg_result_tab.NEXT(d_itr);
11211                END LOOP;
11212             END IF;
11213         END IF;
11214     END IF;
11215 
11216     IF l_debug_on THEN
11217       WSH_DEBUG_SV.pop(l_module_name);
11218     END IF;
11219 --}
11220 EXCEPTION
11221 
11222   WHEN OTHERS THEN
11223 
11224        wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.SET_PICK_UP_DROP_OFF_DATES',l_module_name);
11225        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11226 
11227        IF get_transit_time%ISOPEN THEN
11228           CLOSE get_transit_time;
11229        END IF;
11230 
11231        IF l_debug_on THEN
11232 
11233           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11234           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11235 
11236        END IF;
11237 
11238 END SET_PICK_UP_DROP_OFF_DATES;
11239 
11240 -- -------------------------------------------------------------------------- --
11241 --                                                                            --
11242 -- NAME:                FORMAT_DEL_UPDATE_TABLE                               --
11243 --                                                                            --
11244 -- TYPE:                PROCEDURE                                             --
11245 --                                                                            --
11246 --                                                                            --
11247 -- PARAMETERS (IN):     p_del_id_tab        IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11248 --                      p_carrier_id_tab    IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11249 --                      p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11250 --                      p_mode_tab          IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11251 --                      p_freight_term_tab  IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11252 --                      p_smc_tab           IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30    --
11253 --                      p_org_del_id_tab    IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11254 --                      p_trip_id_tab       IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers      --
11255 --                                                                            --
11256 -- PARAMETERS (OUT):    x_rec_attr_tab      OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type --
11257 --                      x_trip_info_tab     OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type
11258 --
11259 --
11260 -- RETURN:              none                                                  --
11261 --                                                                            --
11262 -- DESCRIPTION:         This procedure is used to format the record for       --
11263 --                      updating the delivery table for carrier selection     --
11264 --                                                                            --
11265 --                                                                            --
11266 -- CHANGE CONTROL LOG                                                         --
11267 -- ------------------                                                         --
11268 --                                                                            --
11269 -- DATE        VERSION  BY        BUG      DESCRIPTION                        --
11270 -- ----------  -------  --------  -------  ---------------------------------- --
11271 -- 2002/12/09  I        ABLUNDEL  -------  Created                            --
11272 -- Attribute passed initially						      --
11273 -- p_del_id_tab         IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers,		--
11274 -- p_carrier_id_tab     IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers,	      --
11275 -- p_service_level_tab  IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11276 -- p_mode_tab		IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11277 -- p_freight_term_tab	IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11278 -- p_smc_tab		IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30,	      --
11279 --                                                                            --
11280 -- -------------------------------------------------------------------------- --
11281 
11282 -- Result table will be of type Shipping
11283 
11284 PROCEDURE FORMAT_DEL_UPDATE_TABLE(--p_cs_result_tab     IN FTE_ACS_PKG.FTE_CS_RESULT_TAB_TYPE,
11285                     p_cs_result_tab       IN WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
11286                     p_caller              IN  VARCHAR2 DEFAULT NULL,
11287                     x_rec_attr_tab        OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
11288                     x_trip_info_tab       OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type,
11289                     x_return_message            OUT NOCOPY VARCHAR2,
11290                     x_return_status             OUT NOCOPY VARCHAR2) IS
11291 
11292 fmc             NUMBER;
11293 fmct            NUMBER;
11294 fm              NUMBER;
11295 
11296 trpidx          NUMBER;
11297 l_del_found     BOOLEAN;
11298 l_error_code    NUMBER;
11299 l_error_text    VARCHAR2(2000);
11300 l_del_org_id    NUMBER;
11301 l_prev_org_id   NUMBER;
11302 l_skip_rtng_rule_ac_trip      VARCHAR2(1) := 'N';
11303 l_param_value_info            WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11304 l_ignore_for_planning         WSH_TRIPS.ignore_for_planning%TYPE;
11305 --
11306 l_debug_on      BOOLEAN;
11307 --
11308 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FORMAT_DEL_UPDATE_TABLE';
11309 --
11310 BEGIN
11311 
11312    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11313    --
11314    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11315    --
11316    IF l_debug_on IS NULL
11317    THEN
11318        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11319    END IF;
11320    --
11321    --
11322    -- Debug Statements
11323    --
11324    IF l_debug_on THEN
11325        WSH_DEBUG_SV.push(l_module_name);
11326    END IF;
11327    --
11328 
11329    IF l_debug_on THEN
11330         WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab.COUNT :'||p_cs_result_tab.COUNT);
11331 
11332    END IF;
11333 
11334    IF (p_cs_result_tab.COUNT > 0) THEN
11335 
11336       fmc  := 0;
11337       fmct := 0;
11338       l_prev_org_id := 0;
11339 
11340       fm  := p_cs_result_tab.FIRST;
11341       IF l_debug_on THEN
11342           WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).delivery_id :'||p_cs_result_tab(fm).delivery_id);
11343           WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).trip_id :'||p_cs_result_tab(fm).trip_id);
11344       END IF;
11345 
11346       LOOP
11347 
11348         IF (p_cs_result_tab(fm).trip_id) is NULL THEN
11349 
11350           fmc  := fmc + 1;
11351           IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11352 
11353             x_rec_attr_tab(fmc).DELIVERY_ID                    := p_cs_result_tab(fm).delivery_id;
11354             x_rec_attr_tab(fmc).NAME                           := FND_API.G_MISS_CHAR;
11355             x_rec_attr_tab(fmc).PLANNED_FLAG                   := FND_API.G_MISS_CHAR;
11356             x_rec_attr_tab(fmc).STATUS_CODE                    := FND_API.G_MISS_CHAR;
11357             x_rec_attr_tab(fmc).DELIVERY_TYPE                  := FND_API.G_MISS_CHAR;
11358             x_rec_attr_tab(fmc).LOADING_SEQUENCE               := FND_API.G_MISS_NUM;
11359             x_rec_attr_tab(fmc).LOADING_ORDER_FLAG             := FND_API.G_MISS_CHAR;
11360             x_rec_attr_tab(fmc).INITIAL_PICKUP_DATE            := FND_API.G_MISS_DATE;
11361             x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_ID     := FND_API.G_MISS_NUM;
11362             x_rec_attr_tab(fmc).ORGANIZATION_ID                := FND_API.G_MISS_NUM;
11363             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_ID   := FND_API.G_MISS_NUM;
11364             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_DATE          := FND_API.G_MISS_DATE;
11365             x_rec_attr_tab(fmc).CUSTOMER_ID                    := FND_API.G_MISS_NUM;
11366             x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_ID     := FND_API.G_MISS_NUM;
11367             x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_ID     := FND_API.G_MISS_NUM;
11368 
11369 	        -- Bug 4524023 (issue 1)
11370 	        /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11371               x_rec_attr_tab(fmc).CARRIER_ID                  := FND_API.G_MISS_NUM;
11372             ELSE*/
11373             x_rec_attr_tab(fmc).CARRIER_ID                  := p_cs_result_tab(fm).carrier_id;
11374 
11375             --END IF;
11376 
11377             /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11378               x_rec_attr_tab(fmc).SHIP_METHOD_CODE            := FND_API.G_MISS_CHAR;
11379             ELSE*/
11380             x_rec_attr_tab(fmc).SHIP_METHOD_CODE            := p_cs_result_tab(fm).ship_method_code;
11381             --END IF;
11382 
11383             IF (p_cs_result_tab(fm).freight_terms_code IS NULL) THEN
11384               x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE          := FND_API.G_MISS_CHAR;
11385             ELSE
11386               x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE          := p_cs_result_tab(fm).freight_terms_code;
11387             END IF;
11388 
11389             x_rec_attr_tab(fmc).FOB_CODE                      := FND_API.G_MISS_CHAR;
11390             x_rec_attr_tab(fmc).FOB_LOCATION_ID               := FND_API.G_MISS_NUM;
11391             x_rec_attr_tab(fmc).WAYBILL                       := FND_API.G_MISS_CHAR;
11392             x_rec_attr_tab(fmc).DOCK_CODE                     := FND_API.G_MISS_CHAR;
11393             x_rec_attr_tab(fmc).ACCEPTANCE_FLAG               := FND_API.G_MISS_CHAR;
11394             x_rec_attr_tab(fmc).ACCEPTED_BY                   := FND_API.G_MISS_CHAR;
11395             x_rec_attr_tab(fmc).ACCEPTED_DATE                 := FND_API.G_MISS_DATE;
11396             x_rec_attr_tab(fmc).ACKNOWLEDGED_BY               := FND_API.G_MISS_CHAR;
11397             x_rec_attr_tab(fmc).CONFIRMED_BY                  := FND_API.G_MISS_CHAR;
11398             x_rec_attr_tab(fmc).CONFIRM_DATE                  := FND_API.G_MISS_DATE;
11399             x_rec_attr_tab(fmc).ASN_DATE_SENT                 := FND_API.G_MISS_DATE;
11400             x_rec_attr_tab(fmc).ASN_STATUS_CODE               := FND_API.G_MISS_CHAR;
11401             x_rec_attr_tab(fmc).ASN_SEQ_NUMBER                := FND_API.G_MISS_NUM;
11402             x_rec_attr_tab(fmc).GROSS_WEIGHT                  := FND_API.G_MISS_NUM;
11403             x_rec_attr_tab(fmc).NET_WEIGHT                    := FND_API.G_MISS_NUM;
11404             x_rec_attr_tab(fmc).WEIGHT_UOM_CODE               := FND_API.G_MISS_CHAR;
11405             x_rec_attr_tab(fmc).VOLUME                        := FND_API.G_MISS_NUM;
11406             x_rec_attr_tab(fmc).VOLUME_UOM_CODE               := FND_API.G_MISS_CHAR;
11407             x_rec_attr_tab(fmc).ADDITIONAL_SHIPMENT_INFO      := FND_API.G_MISS_CHAR;
11408             x_rec_attr_tab(fmc).CURRENCY_CODE                 := FND_API.G_MISS_CHAR;
11409             x_rec_attr_tab(fmc).ATTRIBUTE_CATEGORY            := FND_API.G_MISS_CHAR;
11410             x_rec_attr_tab(fmc).ATTRIBUTE1                    := FND_API.G_MISS_CHAR;
11411             x_rec_attr_tab(fmc).ATTRIBUTE2                    := FND_API.G_MISS_CHAR;
11412             x_rec_attr_tab(fmc).ATTRIBUTE3                    := FND_API.G_MISS_CHAR;
11413             x_rec_attr_tab(fmc).ATTRIBUTE4                    := FND_API.G_MISS_CHAR;
11414             x_rec_attr_tab(fmc).ATTRIBUTE5                    := FND_API.G_MISS_CHAR;
11415             x_rec_attr_tab(fmc).ATTRIBUTE6                    := FND_API.G_MISS_CHAR;
11416             x_rec_attr_tab(fmc).ATTRIBUTE7                    := FND_API.G_MISS_CHAR;
11417             x_rec_attr_tab(fmc).ATTRIBUTE8                    := FND_API.G_MISS_CHAR;
11418             x_rec_attr_tab(fmc).ATTRIBUTE9                    := FND_API.G_MISS_CHAR;
11419             x_rec_attr_tab(fmc).ATTRIBUTE10                   := FND_API.G_MISS_CHAR;
11420             x_rec_attr_tab(fmc).ATTRIBUTE11                   := FND_API.G_MISS_CHAR;
11421             x_rec_attr_tab(fmc).ATTRIBUTE12                   := FND_API.G_MISS_CHAR;
11422             x_rec_attr_tab(fmc).ATTRIBUTE13                   := FND_API.G_MISS_CHAR;
11423             x_rec_attr_tab(fmc).ATTRIBUTE14                   := FND_API.G_MISS_CHAR;
11424             x_rec_attr_tab(fmc).ATTRIBUTE15                   := FND_API.G_MISS_CHAR;
11425             x_rec_attr_tab(fmc).TP_ATTRIBUTE_CATEGORY         := FND_API.G_MISS_CHAR;
11426             x_rec_attr_tab(fmc).TP_ATTRIBUTE1                 := FND_API.G_MISS_CHAR;
11427             x_rec_attr_tab(fmc).TP_ATTRIBUTE2                 := FND_API.G_MISS_CHAR;
11428             x_rec_attr_tab(fmc).TP_ATTRIBUTE3                 := FND_API.G_MISS_CHAR;
11429             x_rec_attr_tab(fmc).TP_ATTRIBUTE4                 := FND_API.G_MISS_CHAR;
11430             x_rec_attr_tab(fmc).TP_ATTRIBUTE5                 := FND_API.G_MISS_CHAR;
11431             x_rec_attr_tab(fmc).TP_ATTRIBUTE6                 := FND_API.G_MISS_CHAR;
11432             x_rec_attr_tab(fmc).TP_ATTRIBUTE7                 := FND_API.G_MISS_CHAR;
11433             x_rec_attr_tab(fmc).TP_ATTRIBUTE8                 := FND_API.G_MISS_CHAR;
11434             x_rec_attr_tab(fmc).TP_ATTRIBUTE9                 := FND_API.G_MISS_CHAR;
11435             x_rec_attr_tab(fmc).TP_ATTRIBUTE10                := FND_API.G_MISS_CHAR;
11436             x_rec_attr_tab(fmc).TP_ATTRIBUTE11                := FND_API.G_MISS_CHAR;
11437             x_rec_attr_tab(fmc).TP_ATTRIBUTE12                := FND_API.G_MISS_CHAR;
11438             x_rec_attr_tab(fmc).TP_ATTRIBUTE13                := FND_API.G_MISS_CHAR;
11439             x_rec_attr_tab(fmc).TP_ATTRIBUTE14                := FND_API.G_MISS_CHAR;
11440             x_rec_attr_tab(fmc).TP_ATTRIBUTE15                := FND_API.G_MISS_CHAR;
11441             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE_CATEGORY     := FND_API.G_MISS_CHAR;
11442             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE1             := FND_API.G_MISS_CHAR;
11443             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE2             := FND_API.G_MISS_CHAR;
11444             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE3             := FND_API.G_MISS_CHAR;
11445             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE4             := FND_API.G_MISS_CHAR;
11446             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE5             := FND_API.G_MISS_CHAR;
11447             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE6             := FND_API.G_MISS_CHAR;
11448             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE7             := FND_API.G_MISS_CHAR;
11449             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE8             := FND_API.G_MISS_CHAR;
11450             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE9             := FND_API.G_MISS_CHAR;
11451             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE10            := FND_API.G_MISS_CHAR;
11452             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE11            := FND_API.G_MISS_CHAR;
11453             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE12            := FND_API.G_MISS_CHAR;
11454             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE13            := FND_API.G_MISS_CHAR;
11455             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE14            := FND_API.G_MISS_CHAR;
11456             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE15            := FND_API.G_MISS_CHAR;
11457             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE16            := FND_API.G_MISS_CHAR;
11458             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE17            := FND_API.G_MISS_CHAR;
11459             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE18            := FND_API.G_MISS_CHAR;
11460             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE19            := FND_API.G_MISS_CHAR;
11461             x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE20            := FND_API.G_MISS_CHAR;
11462             x_rec_attr_tab(fmc).CREATION_DATE                 := FND_API.G_MISS_DATE;
11463             x_rec_attr_tab(fmc).CREATED_BY                    := FND_API.G_MISS_NUM;
11464             x_rec_attr_tab(fmc).LAST_UPDATE_DATE              := FND_API.G_MISS_DATE;
11465             x_rec_attr_tab(fmc).LAST_UPDATED_BY               := FND_API.G_MISS_NUM;
11466             x_rec_attr_tab(fmc).LAST_UPDATE_LOGIN             := FND_API.G_MISS_NUM;
11467             x_rec_attr_tab(fmc).PROGRAM_APPLICATION_ID        := FND_API.G_MISS_NUM;
11468             x_rec_attr_tab(fmc).PROGRAM_ID                    := FND_API.G_MISS_NUM;
11469             x_rec_attr_tab(fmc).PROGRAM_UPDATE_DATE           := FND_API.G_MISS_DATE;
11470             x_rec_attr_tab(fmc).REQUEST_ID                    := FND_API.G_MISS_NUM;
11471             x_rec_attr_tab(fmc).BATCH_ID                      := FND_API.G_MISS_NUM;
11472             x_rec_attr_tab(fmc).HASH_VALUE                    := FND_API.G_MISS_NUM;
11473             x_rec_attr_tab(fmc).SOURCE_HEADER_ID              := FND_API.G_MISS_NUM;
11474             x_rec_attr_tab(fmc).NUMBER_OF_LPN                 := FND_API.G_MISS_NUM;
11475             x_rec_attr_tab(fmc).COD_AMOUNT                    := FND_API.G_MISS_NUM;
11476             x_rec_attr_tab(fmc).COD_CURRENCY_CODE             := FND_API.G_MISS_CHAR;
11477             x_rec_attr_tab(fmc).COD_REMIT_TO                  := FND_API.G_MISS_CHAR;
11478             x_rec_attr_tab(fmc).COD_CHARGE_PAID_BY            := FND_API.G_MISS_CHAR;
11479             x_rec_attr_tab(fmc).PROBLEM_CONTACT_REFERENCE     := FND_API.G_MISS_CHAR;
11480             x_rec_attr_tab(fmc).PORT_OF_LOADING               := FND_API.G_MISS_CHAR;
11481             x_rec_attr_tab(fmc).PORT_OF_DISCHARGE             := FND_API.G_MISS_CHAR;
11482             x_rec_attr_tab(fmc).FTZ_NUMBER                    := FND_API.G_MISS_CHAR;
11483             x_rec_attr_tab(fmc).ROUTED_EXPORT_TXN             := FND_API.G_MISS_CHAR;
11484             x_rec_attr_tab(fmc).ENTRY_NUMBER                  := FND_API.G_MISS_CHAR;
11485             x_rec_attr_tab(fmc).ROUTING_INSTRUCTIONS          := FND_API.G_MISS_CHAR;
11486             x_rec_attr_tab(fmc).IN_BOND_CODE                  := FND_API.G_MISS_CHAR;
11487             x_rec_attr_tab(fmc).SHIPPING_MARKS                := FND_API.G_MISS_CHAR;
11488 
11489             /*IF (p_cs_result_tab(fm).service_level is null) THEN
11490               x_rec_attr_tab(fmc).SERVICE_LEVEL               := FND_API.G_MISS_CHAR;
11491             ELSE*/
11492             x_rec_attr_tab(fmc).SERVICE_LEVEL               := p_cs_result_tab(fm).service_level;
11493             --END IF;
11494 
11495             /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11496               x_rec_attr_tab(fmc).MODE_OF_TRANSPORT           := FND_API.G_MISS_CHAR;
11497             ELSE*/
11498             x_rec_attr_tab(fmc).MODE_OF_TRANSPORT           := p_cs_result_tab(fm).mode_of_transport;
11499             --END IF;
11500 
11501             x_rec_attr_tab(fmc).ASSIGNED_TO_FTE_TRIPS         := FND_API.G_MISS_CHAR;
11502             x_rec_attr_tab(fmc).AUTO_SC_EXCLUDE_FLAG          := FND_API.G_MISS_CHAR;
11503             x_rec_attr_tab(fmc).AUTO_AP_EXCLUDE_FLAG          := FND_API.G_MISS_CHAR;
11504             x_rec_attr_tab(fmc).AP_BATCH_ID                   := FND_API.G_MISS_NUM;
11505 
11506   --        x_rec_attr_tab(fmc).ROWID                         := FND_API.G_MISS_CHAR;
11507             x_rec_attr_tab(fmc).LOADING_ORDER_DESC            := FND_API.G_MISS_CHAR;
11508             x_rec_attr_tab(fmc).ORGANIZATION_CODE             := FND_API.G_MISS_CHAR;
11509             x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_CODE:= FND_API.G_MISS_CHAR;
11510             x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11511             x_rec_attr_tab(fmc).CUSTOMER_NUMBER               := FND_API.G_MISS_CHAR;
11512             x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11513             x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_CODE  := FND_API.G_MISS_CHAR;
11514             x_rec_attr_tab(fmc).CARRIER_CODE                  := FND_API.G_MISS_CHAR;
11515             x_rec_attr_tab(fmc).SHIP_METHOD_NAME              := FND_API.G_MISS_CHAR;
11516             x_rec_attr_tab(fmc).FREIGHT_TERMS_NAME            := FND_API.G_MISS_CHAR;
11517             x_rec_attr_tab(fmc).FOB_NAME                      := FND_API.G_MISS_CHAR;
11518             x_rec_attr_tab(fmc).FOB_LOCATION_CODE             := FND_API.G_MISS_CHAR;
11519             x_rec_attr_tab(fmc).WEIGHT_UOM_DESC               := FND_API.G_MISS_CHAR;
11520             x_rec_attr_tab(fmc).VOLUME_UOM_DESC               := FND_API.G_MISS_CHAR;
11521             x_rec_attr_tab(fmc).CURRENCY_NAME                 := FND_API.G_MISS_CHAR;
11522           END IF;
11523 
11524         ELSE
11525 
11526           fmct := fmct + 1;
11527 
11528             IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11529 
11530 /*
11531 -- Hiding project
11532                 IF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11533 
11534                     -- AG use organization_id from cs_result_tab
11535                     l_del_org_id := p_cs_result_tab(fm).organization_id;
11536 
11537                     IF l_del_org_id  <> l_prev_org_id THEN
11538 
11539                         l_param_value_info.organization_id := l_del_org_id;
11540                         l_param_value_info.param_name(1)   := 'SKIP_RTNG_RULE_AC_TRIP';
11541 
11542                         WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info       => l_param_value_info,
11543                                                     x_return_status          => x_return_status);
11544                         l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
11545                     END IF;
11546                 END IF;
11547 */ -- Hiding project
11548 
11549                 --IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN --Commented for bug 14768761
11550 /*
11551 -- Hiding project
11552                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
11553                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
11554 */ -- Hiding project
11555                     x_trip_info_tab(fmct).TRIP_ID := p_cs_result_tab(fm).trip_id;
11556 
11557                     x_trip_info_tab(fmct).NAME                     := FND_API.G_MISS_CHAR;
11558                     --x_trip_info_tab(fmct).PLANNED_FLAG			   := FND_API.G_MISS_CHAR;
11559                     x_trip_info_tab(fmct).PLANNED_FLAG			   := 'N';
11560                     x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_ID	   := FND_API.G_MISS_NUM;
11561                     x_trip_info_tab(fmct).STATUS_CODE			   := 'OP';
11562                     x_trip_info_tab(fmct).VEHICLE_ITEM_ID		   := FND_API.G_MISS_NUM;
11563                     x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_ID  := FND_API.G_MISS_NUM;
11564                     x_trip_info_tab(fmct).VEHICLE_NUMBER	       := FND_API.G_MISS_CHAR;
11565                     x_trip_info_tab(fmct).VEHICLE_NUM_PREFIX	   := FND_API.G_MISS_CHAR;
11566 
11567                     /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11568                       x_trip_info_tab(fmct).CARRIER_ID             := FND_API.G_MISS_NUM;
11569                     ELSE*/
11570                     x_trip_info_tab(fmct).CARRIER_ID             := p_cs_result_tab(fm).carrier_id;
11571                     --END IF;
11572 
11573                     /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11574                       x_trip_info_tab(fmct).SHIP_METHOD_CODE       := FND_API.G_MISS_CHAR;
11575                     ELSE*/
11576                     x_trip_info_tab(fmct).SHIP_METHOD_CODE       := p_cs_result_tab(fm).ship_method_code;
11577                     --END IF;
11578 
11579 
11580                     IF (p_cs_result_tab(fm).consignee_carrier_ac_no is null) THEN
11581                         x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := FND_API.G_MISS_CHAR;
11582                     ELSE
11583                         x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := p_cs_result_tab(fm).consignee_carrier_ac_no;
11584                     END IF;
11585 
11586 -- AG
11587 -- cs_result_tab.rank stores rank_sequence
11588 -- It is not same as trip's rank_id which has already been updated by FTE
11589 -- rank_list_action API
11590                     x_trip_info_tab(fmct).RANK_ID := FND_API.G_MISS_NUM;
11591 
11592                     IF (p_cs_result_tab(fm).append_flag is null) THEN
11593                       x_trip_info_tab(fmct).APPEND_FLAG := FND_API.G_MISS_CHAR;
11594                     ELSE
11595                       x_trip_info_tab(fmct).APPEND_FLAG := p_cs_result_tab(fm).append_flag;
11596                     END IF;
11597 
11598 -- AG Use rule_id from p_cs_result_tab and not routing_rule_id
11599 
11600                     IF (p_cs_result_tab(fm).rule_id  is null) THEN
11601                       x_trip_info_tab(fmct).ROUTING_RULE_ID := FND_API.G_MISS_NUM;
11602                     ELSE
11603                       x_trip_info_tab(fmct).ROUTING_RULE_ID := p_cs_result_tab(fm).rule_id ;
11604                     END IF;
11605 
11606                     x_trip_info_tab(fmct).ROUTE_ID			     := FND_API.G_MISS_NUM;
11607                     x_trip_info_tab(fmct).ROUTING_INSTRUCTIONS	 := FND_API.G_MISS_CHAR;
11608                     x_trip_info_tab(fmct).ATTRIBUTE_CATEGORY	 := FND_API.G_MISS_CHAR;
11609                     x_trip_info_tab(fmct).ATTRIBUTE1			 := FND_API.G_MISS_CHAR;
11610                     x_trip_info_tab(fmct).ATTRIBUTE2			 := FND_API.G_MISS_CHAR;
11611                     x_trip_info_tab(fmct).ATTRIBUTE3			 := FND_API.G_MISS_CHAR;
11612                     x_trip_info_tab(fmct).ATTRIBUTE4			 := FND_API.G_MISS_CHAR;
11613                     x_trip_info_tab(fmct).ATTRIBUTE5			 := FND_API.G_MISS_CHAR;
11614                     x_trip_info_tab(fmct).ATTRIBUTE6			 := FND_API.G_MISS_CHAR;
11615                     x_trip_info_tab(fmct).ATTRIBUTE7			 := FND_API.G_MISS_CHAR;
11616                     x_trip_info_tab(fmct).ATTRIBUTE8			 := FND_API.G_MISS_CHAR;
11617                     x_trip_info_tab(fmct).ATTRIBUTE9			 := FND_API.G_MISS_CHAR;
11618                     x_trip_info_tab(fmct).ATTRIBUTE10			 := FND_API.G_MISS_CHAR;
11619                     x_trip_info_tab(fmct).ATTRIBUTE11			 := FND_API.G_MISS_CHAR;
11620                     x_trip_info_tab(fmct).ATTRIBUTE12			 := FND_API.G_MISS_CHAR;
11621                     x_trip_info_tab(fmct).ATTRIBUTE13			 := FND_API.G_MISS_CHAR;
11622                     x_trip_info_tab(fmct).ATTRIBUTE14			 := FND_API.G_MISS_CHAR;
11623                     x_trip_info_tab(fmct).ATTRIBUTE15			 := FND_API.G_MISS_CHAR;
11624                     x_trip_info_tab(fmct).CREATION_DATE			 := SYSDATE;
11625                     x_trip_info_tab(fmct).CREATED_BY			 := fnd_global.user_id;
11626                     x_trip_info_tab(fmct).LAST_UPDATE_DATE		 := SYSDATE;
11627                     x_trip_info_tab(fmct).LAST_UPDATED_BY		 := fnd_global.user_id;
11628                     x_trip_info_tab(fmct).LAST_UPDATE_LOGIN		 := fnd_global.login_id;
11629                     x_trip_info_tab(fmct).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11630                     x_trip_info_tab(fmct).PROGRAM_ID			 := FND_API.G_MISS_NUM;
11631                     x_trip_info_tab(fmct).PROGRAM_UPDATE_DATE	 := FND_API.G_MISS_DATE;
11632                     x_trip_info_tab(fmct).REQUEST_ID			 := FND_API.G_MISS_NUM;
11633 
11634                     /*IF (p_cs_result_tab(fm).service_level is null) THEN
11635                       x_trip_info_tab(fmct).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11636                     ELSE*/
11637                       x_trip_info_tab(fmct).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11638                     --END IF;
11639 
11640                     /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11641                       x_trip_info_tab(fmct).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11642                     ELSE*/
11643                     x_trip_info_tab(fmct).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11644                     --END IF;
11645 
11646                     IF (p_cs_result_tab(fm).freight_terms_code is null) THEN
11647                       x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11648                     ELSE
11649                       x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11650                     END IF;
11651 
11652                     x_trip_info_tab(fmct).CONSOLIDATION_ALLOWED	 := FND_API.G_MISS_CHAR;
11653                     x_trip_info_tab(fmct).LOAD_TENDER_STATUS	 := FND_API.G_MISS_CHAR;
11654                     x_trip_info_tab(fmct).ROUTE_LANE_ID		 := FND_API.G_MISS_NUM;
11655                     x_trip_info_tab(fmct).LANE_ID		 := FND_API.G_MISS_NUM;
11656                     x_trip_info_tab(fmct).SCHEDULE_ID		 := FND_API.G_MISS_NUM;
11657                     x_trip_info_tab(fmct).BOOKING_NUMBER	 := FND_API.G_MISS_CHAR;
11658                     x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_NAME := FND_API.G_MISS_CHAR;
11659                     x_trip_info_tab(fmct).SHIP_METHOD_NAME	 := FND_API.G_MISS_CHAR;
11660                     x_trip_info_tab(fmct).VEHICLE_ITEM_DESC	 := FND_API.G_MISS_CHAR;
11661                     x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11662 
11663                 --END IF; --Commented for bug 14768761
11664             END IF;
11665 
11666         END IF;  -- END of IF (p_trip_id_tab(trpidx) is NULL) THEN
11667 --
11668          EXIT WHEN fm = p_cs_result_tab.LAST;
11669          fm := p_cs_result_tab.NEXT(fm);
11670     END LOOP;
11671    END IF;
11672 
11673    --
11674    -- Debug Statements
11675    --
11676    IF l_debug_on THEN
11677        WSH_DEBUG_SV.pop(l_module_name);
11678    END IF;
11679    --
11680    RETURN;
11681 
11682 EXCEPTION
11683    WHEN OTHERS THEN
11684       x_rec_attr_tab.DELETE;
11685       l_error_code := SQLCODE;
11686       l_error_text := SQLERRM;
11687       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11688       --
11689       -- Debug Statements
11690       --
11691       IF l_debug_on THEN
11692          WSH_DEBUG_SV.logmsg(l_module_name,  'THE UNEXPECTED ERROR FROM WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE IS ' ||l_error_text);
11693       END IF;
11694       --
11695       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE');
11696       WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
11697       --
11698       -- Debug Statements
11699       --
11700       IF l_debug_on THEN
11701           WSH_DEBUG_SV.pop(l_module_name);
11702       END IF;
11703       --
11704       RETURN;
11705 
11706 --
11707 -- Debug Statements
11708 --
11709 IF l_debug_on THEN
11710    WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11711     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11712 END IF;
11713 --
11714 END FORMAT_DEL_UPDATE_TABLE;
11715 
11716 
11717 PROCEDURE PROCESS_CARRIER_SELECTION(p_delivery_id_tab        IN OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
11718                                     p_batch_id               IN  NUMBER,
11719                                     p_form_flag              IN  VARCHAR2,
11720                                     p_organization_id	     IN  NUMBER DEFAULT NULL,
11721                                     p_caller                 IN  VARCHAR2 DEFAULT NULL,
11722                                     x_return_message         OUT NOCOPY  VARCHAR2,
11723                                     x_return_status          OUT NOCOPY  VARCHAR2) IS
11724 
11725 --
11726 -- Cursor to get delivery info from the table of delivery ids
11727 -- Carrier selection is not required if delivery's ship from location id is null.
11728 --
11729 cursor c_get_del_info_by_del_id(x_delivery_id NUMBER) IS
11730 select delivery_id,
11731        name,
11732        organization_id,
11733        gross_weight,
11734        weight_uom_code,
11735        volume,
11736        volume_uom_code,
11737        initial_pickup_location_id,
11738        ultimate_dropoff_location_id,
11739        customer_id,
11740        freight_terms_code,
11741        NULL,				-- planned_flag,
11742        initial_pickup_date,
11743        ultimate_dropoff_date,
11744        fob_code,
11745        shipment_direction,
11746        delivery_type,
11747        NULL				-- l_trip_id
11748 from   wsh_new_deliveries
11749 where  delivery_id = x_delivery_id
11750 and    ship_method_code is null
11751 AND    initial_pickup_location_id <> WSH_UTIL_CORE.C_NULL_SF_LOCN_ID   -- J-IB-NPARIKH
11752 and    planned_flag NOT IN ('Y','F');
11753 
11754 --
11755 -- cursor to get delivery info from the delivery table (for Pick Release Call)
11756 --
11757 
11758 cursor c_get_del_info_by_batch_id( x_batch_id NUMBER,
11759                                    x_organization_id NUMBER
11760                                   ) IS
11761 select delivery_id,
11762        name,
11763        organization_id,
11764        gross_weight,
11765        weight_uom_code,
11766        volume,
11767        volume_uom_code,
11768        initial_pickup_location_id,
11769        ultimate_dropoff_location_id,
11770        customer_id,
11771        freight_terms_code,
11772        NULL,		-- planned_flag,
11773        initial_pickup_date,
11774        ultimate_dropoff_date,
11775        fob_code,
11776        shipment_direction,
11777        delivery_type,
11778        NULL		-- l_trip_id
11779 from   wsh_new_deliveries
11780 where  batch_id = x_batch_id
11781 and    organization_id = x_organization_id
11782 and    ship_method_code is null
11783 and    planned_flag NOT IN ('Y','F');
11784 
11785 --
11786 -- cursor to get delivery info from the delivery table (for form call)
11787 -- BUG:2369435 - added planned_flag to cursor
11788 --
11789 cursor c_get_del_info_by_form(f_delivery_id NUMBER) IS
11790 select delivery_id,
11791        name,
11792        organization_id,
11793        gross_weight,
11794        weight_uom_code,
11795        volume,
11796        volume_uom_code,
11797        initial_pickup_location_id,
11798        ultimate_dropoff_location_id,
11799        customer_id,
11800        freight_terms_code,
11801        planned_flag,
11802        initial_pickup_date,
11803        ultimate_dropoff_date,
11804        fob_code,
11805        shipment_direction,
11806        delivery_type,
11807        NULL		-- l_trip_id
11808 from   wsh_new_deliveries
11809 where  delivery_id = f_delivery_id;
11810 
11811 CURSOR check_del_assigned(p_del_id IN NUMBER) IS
11812 select  wts.trip_id,
11813         wt.rank_id
11814 from    wsh_trip_stops wts,
11815         wsh_delivery_legs wdl,
11816         wsh_trips wt
11817 where  wdl.delivery_id = p_del_id
11818 and    wts.stop_id = wdl.pick_up_stop_id
11819 and    wts.trip_id = wt.trip_id;
11820 
11821 -- AG not required
11822 /*
11823 CURSOR get_org_for_delivery(p_del_id IN NUMBER) IS
11824 select  wnd.organization_id
11825 from    wsh_new_deliveries wnd
11826 where  wnd.delivery_id = p_del_id;
11827 */
11828 
11829 
11830 l_trip_id_tab                 WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
11831 l_return_status               VARCHAR2(1);                           -- returning error/success/warning
11832 l_return_message              VARCHAR2(2000);                        -- hold a return error message
11833 l_BatchSize                   PLS_INTEGER := 500;                    -- max rows from a batch fetch
11834 l_current_rows                PLS_INTEGER;                           -- number of current rows fetched
11835 l_remaining_rows              PLS_INTEGER;                           -- number of remaining rows left
11836 l_previous_rows               PLS_INTEGER;                           -- rows previously processed
11837 l_result_found_flag           VARCHAR2(1) := 'N';                    -- indicates a found result
11838 l_messaging_yn                VARCHAR2(1);
11839 l_y_planned_flag              VARCHAR2(1);
11840 
11841 								     -- new parameter for getting
11842                                                                      -- shipping paramters
11843 --
11844 -- Variables used for error handling
11845 --
11846 l_error_code                  NUMBER;                                -- Oracle SQL Error Number
11847 l_error_text                  VARCHAR2(2000);                        -- Oracle SQL Error Text
11848 
11849 --
11850 -- New variables added for new call to group constraint API to update delivery table
11851 --
11852 
11853 l_in_rec                      WSH_DELIVERIES_GRP.Del_In_Rec_Type;
11854 l_trip_in_rec                 WSH_TRIPS_GRP.tripInRecType;
11855 l_rec_attr_tab                WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
11856 l_trip_info_tab	              WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
11857 l_trip_out_rec_tab            WSH_TRIPS_GRP.Trip_Out_Tab_Type;
11858 l_del_out_rec_tab             WSH_DELIVERIES_GRP.Del_Out_Tbl_Type;
11859 l_msg_count                   NUMBER;
11860 l_msg_data                    VARCHAR2(2000);
11861 l_del_org_id                  NUMBER;
11862 l_prev_org_id                 NUMBER;
11863 l_trip_status                 VARCHAR2(50); -- get_trip_status
11864 --alksharm
11865 l_trip_id                     NUMBER;
11866 l_prev_trip_id                NUMBER;
11867 l_trip_name                   VARCHAR2(30);
11868 l_delivery_id                 NUMBER;
11869 list_cnt                      NUMBER;
11870 l_cs_mleg_result_tab          WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11871 l_ranked_list                 WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11872 
11873 l_rank_id                     NUMBER;
11874 l_trip_rank_seq               NUMBER;
11875 --l_skip_rtng_rule_ac_trip      VARCHAR2(1) := 'N'; -- Commented for the bug 14768761
11876 l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'Y'; -- Added for the bug 14768761
11877 -- sachin
11878  x_ranked_list                WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11879 -- Rename
11880 l_initial_pickup_date         DATE;
11881 l_ultimate_dropoff_date       DATE;
11882 i                             NUMBER;
11883 j                             NUMBER;
11884 k                             NUMBER;
11885 l_global_param_rec            WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
11886 l_param_value_info            WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11887 l_prev_delivery_id            NUMBER;
11888 l_start_index                 NUMBER;
11889 l_end_index                   NUMBER;
11890 rec_cnt                       NUMBER;
11891 l_del_result_type             VARCHAR2(60);
11892 l_rank_list_source            VARCHAR2(30);
11893 
11894 --
11895 -- sbakshi
11896 --
11897 l_carrier_sel_entity_tab      WSH_FTE_INTEGRATION.WSH_CS_ENTITY_TAB_TYPE;
11898 
11899 l_carrier_sel_result_rec      WSH_FTE_INTEGRATION.WSH_CS_RESULT_REC_TYPE;
11900 
11901 l_cs_result_tab               WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11902 l_cs_output_message_tab       WSH_FTE_INTEGRATION.wsh_cs_output_message_tab;
11903 
11904 
11905 l_dlvy_info_tab              wsh_cs_delivery_info_tab;
11906 l_dlvy_info_rec              wsh_cs_delivery_info_rec;
11907 
11908 itr                          NUMBER;
11909 l_cnt                        NUMBER := 0;
11910 l_start_search_level_flag    VARCHAR2(10) := 'SCOE';
11911 l_param_rec                  WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11912 l_num_ranked_results         NUMBER;
11913 -- sbakshi
11914 
11915 -- Debug Variables
11916 l_debug_on                    BOOLEAN;
11917 --
11918 
11919 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PROCESS_CARRIER_SELECTION';
11920 
11921 BEGIN
11922       --
11923       -- initialize the procedure return flags
11924       --
11925       --
11926       -- Debug Statements
11927       --
11928       --
11929       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11930       --
11931       IF l_debug_on IS NULL
11932       THEN
11933           l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11934       END IF;
11935       --
11936       IF l_debug_on THEN
11937           WSH_DEBUG_SV.push(l_module_name);
11938           --
11939           WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11940           WSH_DEBUG_SV.log(l_module_name,'P_FORM_FLAG',P_FORM_FLAG);
11941           WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
11942       END IF;
11943       --
11944 
11945       x_return_status  := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11946       x_return_message := null;
11947 
11948       IF  WSH_UTIL_CORE.FTE_Is_Installed <> 'Y' THEN
11949         return;
11950       END IF;
11951 
11952       l_y_planned_flag := 'Y';
11953 
11954       IF ((p_batch_id is null) AND
11955           (p_delivery_id_tab.COUNT <= 0)) THEN
11956 	   --
11957            -- Invalid input parameters means we will not be able to get delivery
11958            -- information, thus, we will not be able to call carrier selection,
11959            -- return to the calling procedure
11960            --
11961 
11962 	   IF l_debug_on THEN
11963 	       --
11964               WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11965               WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID_TAB.COUNT',p_delivery_id_tab.COUNT);
11966 
11967 	   END IF;
11968 
11969 	   FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_INVALID_INPUT');
11970            x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
11971            WSH_UTIL_CORE.add_message(x_return_status);
11972            --
11973            -- Debug Statements
11974            --
11975            IF l_debug_on THEN
11976               WSH_DEBUG_SV.logmsg(l_module_name,  'THE INPUT PARAMETERS ARE INVALID FOR THIS PROCEDURE'  );
11977            END IF;
11978            --
11979 
11980 	   x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11981            -- 2292513
11982            --
11983            -- Debug Statements
11984            --
11985            IF l_debug_on THEN
11986               WSH_DEBUG_SV.pop(l_module_name);
11987            END IF;
11988            --
11989            RETURN;
11990       END IF;
11991 
11992       -- Pick Release
11993       IF (p_batch_id is not null) THEN
11994 
11995         l_result_found_flag := 'N';
11996         --
11997         -- Set the messaging flag
11998         --
11999         l_messaging_yn := 'N';
12000         l_previous_rows := 0;
12001 
12002         IF l_debug_on THEN
12003             WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery info by batch id' );
12004         END IF;
12005 
12006 
12007         OPEN  c_get_del_info_by_batch_id(p_batch_id, p_organization_id);
12008             FETCH c_get_del_info_by_batch_id BULK COLLECT INTO l_dlvy_info_tab;
12009         CLOSE c_get_del_info_by_batch_id;
12010 
12011       -- Auto Apply routing rules is End of append delivery.
12012       ELSIF ((p_delivery_id_tab.COUNT > 0) AND
12013 	     (p_batch_id is null) AND (p_form_flag = 'N'))  THEN
12014 
12015    	     l_messaging_yn := 'Y';
12016 
12017 
12018 	     --FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
12019          itr := p_delivery_id_tab.FIRST;
12020          IF itr IS NOT NULL THEN
12021          LOOP
12022 
12023             IF l_debug_on THEN
12024             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)|| ' *** ');
12025             END IF;
12026 
12027             OPEN  c_get_del_info_by_del_id(p_delivery_id_tab(itr));
12028                 FETCH c_get_del_info_by_del_id INTO l_dlvy_info_rec;
12029             CLOSE c_get_del_info_by_del_id;
12030 
12031             /*IF l_debug_on THEN
12032                 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.delivery_id: *** : '|| l_dlvy_info_rec.delivery_id);
12033             END IF;*/
12034 
12035             IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
12036                 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
12037                 l_cnt := l_cnt+1 ;
12038             END IF;
12039             EXIT WHEN itr = p_delivery_id_tab.LAST;
12040             itr := p_delivery_id_tab.NEXT(itr);
12041           END LOOP;
12042         END IF;
12043 
12044     --Call from UI.
12045     ELSIF ((p_delivery_id_tab.COUNT > 0) AND
12046            (p_batch_id is null) AND
12047            (p_form_flag = 'Y')) THEN
12048 
12049         l_messaging_yn := 'Y';
12050 
12051         IF l_debug_on THEN
12052            WSH_DEBUG_SV.logmsg(l_module_name,'Getting Information using Form');
12053            WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT);
12054         END IF;
12055 
12056 
12057 	    FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
12058 
12059 		 IF l_debug_on THEN
12060 		     WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY  ID '||p_delivery_id_tab(i));
12061 		 END IF;
12062 
12063   		 OPEN  c_get_del_info_by_form(p_delivery_id_tab(i));
12064             FETCH c_get_del_info_by_form INTO l_dlvy_info_rec;
12065 		 CLOSE c_get_del_info_by_form;
12066 
12067          IF l_debug_on THEN
12068             WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.l_delivery_id: '|| l_dlvy_info_rec.l_delivery_id);
12069          END IF;
12070 
12071 		 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
12072 
12073 			IF (l_dlvy_info_rec.l_planned_flag IN ('Y', 'F')) THEN
12074 			    --
12075                 -- Delivery is planned cannot do carrier selection
12076                 --
12077                 --
12078                 -- [2003/01/29][I][ABLUNDEL][BUG# 2765987]
12079                 -- Changed planned delivery to an ERROR from a WARNING
12080                 --
12081                 x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
12082                 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12083                 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_PLAN_DEL');
12084                 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12085                 wsh_util_core.add_message(x_return_status);
12086                 --
12087                 -- Debug Statements
12088                 --
12089                 IF l_debug_on THEN
12090                    WSH_DEBUG_SV.logmsg(l_module_name,  'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS A PLANNED DELIVERY , CARRIER SELECTION IS NOT ALLOWED'  );
12091                 END IF;
12092                 --
12093                 -- 11i10+ change
12094              ELSE
12095 
12096 			    l_trip_status := get_trip_status(l_dlvy_info_rec.l_delivery_id,l_dlvy_info_rec.l_delivery_type);
12097 			    -- Delivery is assigned to more than one trip
12098                 IF (l_trip_status = 'MANY') THEN
12099 
12100                     x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
12101                     x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12102                     IF (substr(p_caller,1,3) = 'FTE') THEN
12103                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY_FTE');
12104                     ELSE
12105                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY');
12106                     END IF;
12107                     FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12108                     wsh_util_core.add_message(x_return_status);
12109 
12110                     IF l_debug_on THEN
12111                             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'  );
12112                     END IF;
12113 
12114 			    -- Trip to which this delivery is assigned has more than one deliveries
12115 		  	    ELSIF (l_trip_status = 'SHARED') THEN
12116 
12117                         x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
12118                         x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12119                         IF (substr(p_caller,1,3) = 'FTE') THEN
12120                             FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_SHARED_FTE');
12121                         ELSE
12122                             FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_SHARED');
12123                         END IF;
12124 
12125 					   FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12126 			                   wsh_util_core.add_message(x_return_status);
12127 
12128                         IF l_debug_on THEN
12129                             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'  );
12130                         END IF;
12131 
12132                 -- Trip to which this delivery is assigned has Lane/Service
12133                 ELSIF (l_trip_status = 'HAS_LANE') THEN
12134 
12135                     x_return_status  := WSH_UTIL_CORE.G_RET_STS_ERROR;
12136                     x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12137 
12138                     IF (substr(p_caller,1,3) = 'FTE') THEN
12139                         FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_HAS_LANE_FTE');
12140                     ELSE
12141                         FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_HAS_LANE');
12142                     END IF;
12143                     FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12144                     wsh_util_core.add_message(x_return_status);
12145 
12146                     IF l_debug_on THEN
12147                       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'  );
12148                     END IF;
12149 
12150 			     -- Delivery is not assigned to a trip Or
12151 			     -- Delivery is assigned to one trip and this trip is not shared with other deliveries
12152 			    ELSE   -- BUG:2369435
12153 
12154                     IF (substr(l_trip_status,1,3) = 'ONE') THEN
12155                         l_dlvy_info_rec.l_trip_id := to_number(substr(l_trip_status,5));
12156                     ELSE
12157                         l_dlvy_info_rec.l_trip_id := null;
12158                     END IF;
12159                     --Validate other things
12160                     l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
12161                     l_cnt := l_cnt +1 ;
12162 			     END IF;
12163 			END IF;
12164 		END IF;
12165 	  END LOOP; -- FOR i IN p_delivery_id_tab.FISRT..p_delivery_id_tab.LAST LOOP
12166     END IF;
12167 
12168 
12169     IF (l_dlvy_info_tab.COUNT = 0) THEN
12170         IF l_debug_on THEN
12171             WSH_DEBUG_SV.logmsg(l_module_name, 'now exiting');
12172             WSH_DEBUG_SV.pop(l_module_name);
12173         END IF;
12174         RETURN;
12175     END IF;
12176 
12177     l_cnt:= 0;
12178 
12179     i := l_dlvy_info_tab.FIRST;
12180 
12181     LOOP
12182         IF l_debug_on THEN
12183             WSH_DEBUG_SV.logmsg(l_module_name, 'l_cnt : '|| l_cnt);
12184         END IF;
12185 	--
12186 	-- If delivery is content do not add it.
12187 	--
12188 	IF NOT(is_dlvy_content(p_delivery_id =>l_dlvy_info_tab(i).l_delivery_id))
12189 	THEN
12190 
12191 		l_carrier_sel_entity_tab(l_cnt).delivery_id             := 	l_dlvy_info_tab(i).l_delivery_id;
12192 		l_carrier_sel_entity_tab(l_cnt).delivery_name           := 	l_dlvy_info_tab(i).l_dlvy_name;
12193 		l_carrier_sel_entity_tab(l_cnt).trip_id			:=      l_dlvy_info_tab(i).l_trip_id;
12194 		l_carrier_sel_entity_tab(l_cnt).organization_id         := 	l_dlvy_info_tab(i).l_organization_id;
12195 		l_carrier_sel_entity_tab(l_cnt).gross_weight            := 	l_dlvy_info_tab(i).l_gross_weight;
12196 		l_carrier_sel_entity_tab(l_cnt).volume		        := 	l_dlvy_info_tab(i).l_volume;
12197 		l_carrier_sel_entity_tab(l_cnt).initial_pickup_loc_id   := 	l_dlvy_info_tab(i).l_initial_pickup_location_id;
12198 		l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_loc_id := 	l_dlvy_info_tab(i).l_ultimate_dropoff_location_id;
12199 
12200 		l_carrier_sel_entity_tab(l_cnt).freight_terms_code      := 	l_dlvy_info_tab(i).l_freight_terms_code;
12201 		l_carrier_sel_entity_tab(l_cnt).initial_pickup_date     := 	l_dlvy_info_tab(i).l_initial_pickup_date;
12202 
12203 		l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_date   := 	l_dlvy_info_tab(i).l_ultimate_dropoff_date;
12204 		l_carrier_sel_entity_tab(l_cnt).fob_code	        := 	l_dlvy_info_tab(i).l_fob_code;
12205         --
12206 		-- In format carrier selection. If weight/volume UOM code is NULL then get the
12207 		-- default uoms. (This statement is in accordance with previous code)
12208 		--
12209 		IF ((l_dlvy_info_tab(i).l_weight_uom_code is null) AND
12210 		          (l_dlvy_info_tab(i).l_volume_uom_code is null)) THEN
12211 
12212 			    WSH_WV_UTILS.get_default_uoms( p_organization_id => l_dlvy_info_tab(i).l_organization_id,
12213 							   x_weight_uom_code => l_carrier_sel_entity_tab(l_cnt).weight_uom_code,
12214 							   x_volume_uom_code => l_carrier_sel_entity_tab(l_cnt).volume_uom_code,
12215 		                                           x_return_status   => l_return_status);
12216 
12217 
12218 			    IF l_debug_on THEN
12219 				 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_default_uoms'||l_return_status);
12220 			    END IF;
12221 
12222                 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12223                     FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_UOM');
12224                     FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12225                     WSH_UTIL_CORE.add_message(l_return_status);
12226                     l_carrier_sel_entity_tab.DELETE(l_cnt);
12227                     GOTO dlvy_nextpass;
12228                END IF;
12229         ELSE
12230             l_carrier_sel_entity_tab(l_cnt).weight_uom_code         := 	l_dlvy_info_tab(i).l_weight_uom_code;
12231             l_carrier_sel_entity_tab(l_cnt).volume_uom_code         := 	l_dlvy_info_tab(i).l_volume_uom_code;
12232         END IF;
12233 
12234 		--
12235 		--Determine the ship to site id. if delivery is not inbound
12236 		--
12237         IF l_dlvy_info_tab(i).l_shipment_direction <> 'I' THEN
12238            --l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12239 		    get_ship_to_site(
12240                           p_delivery_id	  =>  l_dlvy_info_tab(i).l_delivery_id,
12241                           p_delivery_type =>  l_dlvy_info_tab(i).l_delivery_type,
12242                           p_ultimate_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12243                           x_site_id       =>  l_carrier_sel_entity_tab(l_cnt).customer_site_id,
12244                           x_return_status =>  l_return_status);
12245 
12246 		IF l_debug_on THEN
12247 		    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_site '||l_return_status);
12248 		END IF;
12249 
12250         IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12251               l_carrier_sel_entity_tab.DELETE(l_cnt);
12252               GOTO dlvy_nextpass;
12253         END IF;
12254 	END IF;
12255 
12256                 --
12257 		-- At this stage we need to determine : Whether to use ship to / Sold to customer.
12258 		--
12259 		l_param_rec.organization_id := l_dlvy_info_tab(i).l_organization_id;
12260 		l_param_rec.param_name(1)   := 'EVAL_RULE_BASED_ON_SHIPTO_CUST';
12261 
12262 
12263 		WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_rec ,
12264 					    x_return_status    => l_return_status);
12265 
12266 		IF l_debug_on THEN
12267 		    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after getting shipping params '||l_return_status);
12268 		END IF;
12269 
12270 	IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12271               l_carrier_sel_entity_tab.DELETE(l_cnt);
12272               GOTO dlvy_nextpass;
12273         END IF;
12274 		--
12275         --Evaluate Rules based on ship to customer
12276 		--
12277 	IF (l_param_rec.PARAM_VALUE_CHR.EXISTS(1) AND l_param_rec.PARAM_VALUE_CHR(1) = 'Y'
12278                 AND l_dlvy_info_tab(i).l_shipment_direction <> 'I') AND
12279            l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12280 
12281 			get_ship_to_customer( p_ult_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12282 					      p_delivery_id	   => l_dlvy_info_tab(i).l_delivery_id,
12283 					      x_customer_id	   => l_carrier_sel_entity_tab(l_cnt).customer_id,
12284 					      x_return_status	   => l_return_status);
12285 
12286 			IF l_debug_on THEN
12287 			    WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_customer'||l_return_status);
12288 			END IF;
12289 
12290 	    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12291                   l_carrier_sel_entity_tab.DELETE(l_cnt);
12292                   GOTO dlvy_nextpass;
12293             END IF;
12294         ELSE
12295             l_carrier_sel_entity_tab(l_cnt).customer_id  := l_dlvy_info_tab(i).l_customer_id;
12296         END IF;
12297 
12298         l_cnt := l_cnt+1;
12299 
12300     ELSE
12301 		FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_CONTENT');
12302 		FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12303 		WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
12304     END IF;
12305 
12306     <<dlvy_nextpass>>
12307     EXIT WHEN i = l_dlvy_info_tab.LAST;
12308     i := l_dlvy_info_tab.NEXT(i);
12309    END LOOP;
12310 
12311    IF (l_carrier_sel_entity_tab.COUNT=0) THEN
12312          IF l_debug_on THEN
12313            wsh_debug_sv.logmsg(l_module_name, 'None of the selected deliveries have been found as eligible for Carrier Selection');
12314          END IF;
12315          -- All deliveries are content.
12316          FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_ALL_CONTENT');
12317          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12318          WSH_UTIL_CORE.add_message(x_return_status);
12319          IF l_debug_on THEN
12320               	WSH_DEBUG_SV.pop(l_module_name);
12321          END IF;
12322          RETURN;
12323    END IF;
12324 
12325    --
12326    -- Call Carrier Selection Engine
12327    --
12328 
12329    WSH_FTE_INTEGRATION.CARRIER_SELECTION( p_format_cs_tab	    => l_carrier_sel_entity_tab,
12330                       p_messaging_yn	        => l_messaging_yn,
12331                       p_caller	                => p_caller,
12332                       p_entity                  => 'DLVY',
12333                       x_cs_output_tab	        => l_cs_result_tab,
12334                       x_cs_output_message_tab   => l_cs_output_message_tab,
12335                       x_return_message	        => l_return_message,
12336                       x_return_status	        => l_return_status);
12337 
12338   IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS OR l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING)
12339                                     AND (l_cs_result_tab.COUNT > 0)  THEN
12340 
12341     --
12342     -- at least one result is found
12343     -- Now do a bulk update for all the carrier selection result tables
12344     --
12345      l_rec_attr_tab.DELETE;
12346      l_del_out_rec_tab.DELETE;
12347      l_return_status := null;
12348      l_rank_list_source := 'RG';
12349 
12350      --
12351      -- set the input record and tables
12352      --
12353      l_in_rec.caller      := 'FTE_CARRIER_SELECTION_AUTO';
12354      l_in_rec.phase       := null;
12355      l_in_rec.action_code := 'UPDATE';
12356 
12357 
12358      l_trip_in_rec.caller      := 'FTE_ROUTING_GUIDE';
12359      l_trip_in_rec.phase       := null;
12360      l_trip_in_rec.action_code := 'UPDATE';
12361 
12362      list_cnt := 1;
12363 
12364 
12365      l_prev_delivery_id := 0;
12366      l_prev_org_id      := 0;
12367      l_start_index      := 0;
12368      l_end_index        := 0;
12369 
12370 /*
12371 -- Hiding project
12372      WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters( x_Param_Info => l_global_param_rec,
12373                                                     x_return_status => l_return_status);
12374 */ -- Hiding project
12375 
12376      rec_cnt := l_cs_result_tab.FIRST;
12377 
12378      -- Loop through result tab in order to create/update trip for each delivery
12379      IF rec_cnt IS NOT NULL THEN
12380 
12381      LOOP
12382       --{
12383 
12384         --
12385         l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12386 
12387         IF l_debug_on THEN
12388             WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12389             WSH_DEBUG_SV.log(l_module_name, 'l_prev_delivery_id', l_prev_delivery_id);
12390             WSH_DEBUG_SV.log(l_module_name, 'rec_cnt', rec_cnt);
12391         END IF;
12392 
12393         -- get the value of trip_id if delivery is assigned to trip
12394         IF l_delivery_id <> l_prev_delivery_id THEN
12395             l_trip_id := null;
12396             l_num_ranked_results := 1;
12397             OPEN check_del_assigned(l_delivery_id);
12398                 FETCH check_del_assigned into l_trip_id, l_trip_rank_seq;
12399             CLOSE check_del_assigned;
12400 
12401             l_del_org_id := l_cs_result_tab(rec_cnt).organization_id;
12402 
12403 /*
12404 -- Hiding project
12405             IF l_del_org_id  <> l_prev_org_id THEN
12406 
12407                 l_param_value_info.organization_id := l_del_org_id;
12408                 l_param_value_info.param_name(1)   := 'SKIP_RTNG_RULE_AC_TRIP';
12409 
12410                 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info       => l_param_value_info,
12411                                             x_return_status          => l_return_status);
12412                 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
12413             END IF;
12414 */ -- Hiding project
12415 
12416         END IF;
12417 
12418         l_del_result_type := l_cs_result_tab(rec_cnt).result_type;
12419 
12420         -- If first delivery has 1 ranked result and 2nd delivery has multileg results.
12421         -- How will the rank for first get inserted into ranklist table
12422 
12423         -- Handled by moving rank list insertion in the same pass of the last result record
12424         -- for a delivery
12425 
12426         --IF (l_del_result_type = 'RANK') THEN -- if single leg delivery -- Commented for the bug 14768761
12427         IF (l_del_result_type = 'RANK' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- if single leg delivery -- Added for the bug 14768761
12428 		--{
12429             IF (l_delivery_id <> l_prev_delivery_id) THEN
12430             --{
12431                 --l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12432 
12433                 IF l_debug_on THEN
12434                     WSH_DEBUG_SV.log(l_module_name, 'l_num_ranked_results', l_num_ranked_results);
12435                     WSH_DEBUG_SV.log(l_module_name, 'p_caller', p_caller);
12436                     WSH_DEBUG_SV.log(l_module_name, 'l_skip_rtng_rule_ac_trip', l_skip_rtng_rule_ac_trip);
12437                     WSH_DEBUG_SV.log(l_module_name, 'list_cnt', list_cnt);
12438                 END IF;
12439 
12440                 --
12441                 -- 1. For Manual flow, append_flag is always set to 'Y'
12442                 -- For auto-flow, Check if only one ranked result is returned, set append flag to the value of
12443                 -- global parameter EXPAND_CARRIER_RANKINGS, else set it to 'Y'
12444                 --
12445 
12446                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12447 /*
12448 -- Hiding project
12449                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12450                 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12451 */ -- Hiding project
12452                 --{
12453                     -- AG check that current record is not LAST
12454 /*
12455 -- Hiding project
12456                     IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP')
12457                         AND ( rec_cnt = l_cs_result_tab.LAST OR
12458                             ( 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
12459                     --{
12460                          l_cs_result_tab(rec_cnt).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12461                     --}
12462                     ELSE
12463                     --{
12464                         l_cs_result_tab(rec_cnt).append_flag := 'Y';
12465                     --}
12466                     END IF;
12467 
12468                     IF l_debug_on THEN
12469                         WSH_DEBUG_SV.log(l_module_name, 'append_flag', l_cs_result_tab(rec_cnt).append_flag);
12470                     END IF;
12471 */ -- Hiding project
12472 
12473                     IF l_trip_id IS NULL THEN
12474                     --{
12475                        --
12476                        -- If Pick up date is same as drop off date,
12477                        -- introduce a gap of 10 mins between pick up date and drop off date
12478                        --
12479                        l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12480 
12481                        IF l_carrier_sel_result_rec.pickup_date = l_carrier_sel_result_rec.dropoff_date THEN
12482                            l_carrier_sel_result_rec.dropoff_date := l_carrier_sel_result_rec.dropoff_date+(1/144);
12483                        END IF;
12484 
12485                        IF l_debug_on THEN
12486                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).pickup_date '||l_cs_result_tab(rec_cnt).pickup_date);
12487                             WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).dropoff_date '||l_cs_result_tab(rec_cnt).dropoff_date);
12488                        END IF;
12489                         --
12490                         -- Since delivery not assigned to any trip( trip_id is null), and rank = 1, Create trip for the delivery
12491                         --
12492                         WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12493                                p_delivery_id               => l_delivery_id,
12494                                p_carrier_sel_result_rec    => l_carrier_sel_result_rec,
12495                                x_trip_id                   => l_trip_id,
12496                                x_trip_name                 => l_trip_name,
12497                                x_return_message            => x_return_message,
12498                                x_return_status             => l_return_status);
12499 
12500                         IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12501                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12502                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12503                             END IF;
12504                         END IF;
12505 
12506                         IF l_debug_on THEN
12507                             WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after calling CREATE_SEL_CREATE_TRIP '||x_return_status);
12508                             WSH_DEBUG_SV.logmsg(l_module_name,'Trip_id '||l_trip_id);
12509                         END IF;
12510 
12511                         l_ranked_list.DELETE;
12512                         list_cnt := 1;
12513                         l_num_ranked_results := 1;
12514                        --
12515                        -- set values in ranked list for rank #1 results
12516                        --
12517                        l_ranked_list(list_cnt).TRIP_ID                  := l_trip_id;
12518                        l_ranked_list(list_cnt).RANK_SEQUENCE            := l_cs_result_tab(rec_cnt).rank;
12519                        l_ranked_list(list_cnt).CARRIER_ID               := l_cs_result_tab(rec_cnt).carrier_id;
12520                        l_ranked_list(list_cnt).SERVICE_LEVEL            := l_cs_result_tab(rec_cnt).service_level;
12521                        l_ranked_list(list_cnt).MODE_OF_TRANSPORT        := l_cs_result_tab(rec_cnt).mode_of_transport;
12522                        l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12523                        l_ranked_list(list_cnt).FREIGHT_TERMS_CODE       := l_cs_result_tab(rec_cnt).freight_terms_code;
12524                        l_ranked_list(list_cnt).SOURCE                   := l_rank_list_source;
12525                        l_ranked_list(list_cnt).IS_CURRENT               := 'Y';
12526                        l_ranked_list(list_cnt).CALL_RG_FLAG             := 'N';
12527 
12528                        IF l_debug_on THEN
12529                             WSH_DEBUG_SV.logmsg(l_module_name,'Populated Ranked List for rank #1');
12530                        END IF;
12531 
12532                         --
12533                         -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12534                         -- the call to FORMAT_DEL_UPDATE_TABLE
12535                         --
12536                        l_cs_result_tab(rec_cnt) := NULL;
12537 
12538                     --}
12539                     ELSE -- for the case when delivery is already attached to trip, l_trip_id IS NOT NULL
12540                     --{
12541                         IF l_trip_rank_seq is NOT NULL THEN
12542                             FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_UPD_TRIP_RANK_LIST');
12543                             FND_MESSAGE.SET_TOKEN('TRIPID',l_trip_id);
12544                             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12545                             WSH_UTIL_CORE.add_message(x_return_status);
12546                         END IF;
12547 
12548                         l_cs_result_tab(rec_cnt).trip_id := l_trip_id;
12549 
12550                         l_ranked_list(list_cnt).TRIP_ID             := l_trip_id;
12551                         l_ranked_list(list_cnt).RANK_SEQUENCE       := l_cs_result_tab(rec_cnt).rank;
12552                         l_ranked_list(list_cnt).CARRIER_ID          := l_cs_result_tab(rec_cnt).carrier_id;
12553                         l_ranked_list(list_cnt).SERVICE_LEVEL       := l_cs_result_tab(rec_cnt).service_level;
12554                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT   := l_cs_result_tab(rec_cnt).mode_of_transport;
12555                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12556                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE  := l_cs_result_tab(rec_cnt).freight_terms_code;
12557                         l_ranked_list(list_cnt).SOURCE              := l_rank_list_source;
12558                         l_ranked_list(list_cnt).IS_CURRENT          := 'Y';
12559                         l_ranked_list(list_cnt).CALL_RG_FLAG        := 'N';
12560                     --}
12561                     END IF;
12562                 --}
12563                 END IF;
12564             --}
12565             ELSE  -- l_delivery_id = l_prev_delivery_id
12566             --{
12567                 l_num_ranked_results := l_num_ranked_results +1;
12568 
12569                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12570 /*
12571 -- Hiding project
12572                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12573                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12574 */ -- Hiding project
12575                 --{
12576                     IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12577                     --{
12578 
12579                     --
12580                     --  When Ranked List is created by RG engine during auto flow and if
12581                     --  only one ranked result is returned, set CALL_RG_FLAG flag to 'N'
12582                     --  If there are more than one ranked results, we'll set CALL_RG_FLAG flag to 'Y'
12583                     --
12584                         l_ranked_list(list_cnt).CALL_RG_FLAG    := 'Y';
12585                     --}
12586                     ELSE
12587                     --{
12588                         --
12589                         -- If caller is not Auto-Flow, build ranked list for other rank results as well
12590                         --
12591                         list_cnt := list_cnt + 1;
12592 
12593                         l_ranked_list(list_cnt).TRIP_ID         := l_trip_id;
12594                         l_ranked_list(list_cnt).RANK_SEQUENCE   := l_cs_result_tab(rec_cnt).rank;
12595                         l_ranked_list(list_cnt).CARRIER_ID      := l_cs_result_tab(rec_cnt).carrier_id;
12596                         l_ranked_list(list_cnt).SERVICE_LEVEL   := l_cs_result_tab(rec_cnt).service_level;
12597                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12598                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12599                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE       := l_cs_result_tab(rec_cnt).freight_terms_code;
12600                         l_ranked_list(list_cnt).SOURCE          := l_rank_list_source;
12601                         l_ranked_list(list_cnt).IS_CURRENT      := 'N';
12602                         l_ranked_list(list_cnt).CALL_RG_FLAG    := 'N';
12603                    --}
12604                     END IF;
12605 
12606                     IF l_debug_on THEN
12607                         WSH_DEBUG_SV.log(l_module_name, 'l_ranked_list(list_cnt).CALL_RG_FLAG', l_ranked_list(list_cnt).CALL_RG_FLAG);
12608                     END IF;
12609                 --}
12610                 END IF;
12611                 --
12612                 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12613                 -- the call to FORMAT_DEL_UPDATE_TABLE
12614                 --
12615                 l_cs_result_tab(rec_cnt) := NULL;
12616             --}
12617             END IF;
12618             IF (rec_cnt = l_cs_result_tab.LAST OR
12619             (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
12620             --{
12621                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12622 /*
12623 -- Hiding project
12624                 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12625                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12626 
12627                     IF l_debug_on THEN
12628                         WSH_DEBUG_SV.logmsg(l_module_name, 'calling RANK_LIST_ACTION');
12629                     END IF;
12630 
12631                     WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12632                                --p_api_version_number =>  1.0,
12633                                --p_init_msg_list      =>  FND_API.G_FALSE,
12634                                x_return_status      =>  l_return_status,
12635                                x_msg_count          =>  l_msg_count,
12636                                x_msg_data           =>  l_msg_data,
12637                                p_action_code        =>  'REPLACE',
12638                                p_ranklist           =>  l_ranked_list,
12639                                p_trip_id            =>  l_trip_id,
12640                                p_rank_id            =>  l_rank_id);
12641 
12642                     IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12643                         IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12644                             raise FND_API.G_EXC_UNEXPECTED_ERROR;
12645                         END IF;
12646                     END IF;
12647 */ -- Hiding project
12648                     l_ranked_list.DELETE;
12649                     list_cnt := 1;
12650                     l_num_ranked_results := 1;
12651                 END IF;
12652             --}
12653             END IF;
12654         --}
12655         --ELSIF (l_del_result_type = 'MULTILEG' ) THEN -- if multileg delivery output -- Commented for the bug 14768761
12656         ELSIF (l_del_result_type = 'MULTILEG' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- if multileg delivery output -- Added for the bug 14768761
12657         --{
12658 
12659             IF l_trip_id IS NOT NULL THEN
12660             --{
12661                 -- if delivery is already assigned to trip and multileg route to be created as per rule results
12662                  -- show error;
12663                 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DEL_MLEG_ASG_TRIP');
12664                 FND_MESSAGE.SET_TOKEN('DELIVERY_ID',l_delivery_id);
12665                 FND_MESSAGE.SET_TOKEN('TRIP_ID',l_trip_id);
12666                 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12667                 WSH_UTIL_CORE.add_message(x_return_status);
12668 
12669                 l_cs_result_tab(rec_cnt) := NULL;
12670 
12671                 IF l_debug_on THEN
12672                     WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_delivery_id || ' IS ALREADY ASSIGNED TO TRIP '||l_trip_id);
12673                 END IF;
12674              --}
12675              ELSIF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip = 'Y' THEN
12676              --{
12677                 IF l_delivery_id <> l_prev_delivery_id THEN
12678                     FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_MULTILEG');
12679                     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12680                     WSH_UTIL_CORE.add_message(x_return_status);
12681                 END IF;
12682 
12683                 l_cs_result_tab(rec_cnt) := NULL;
12684              --}
12685              ELSIF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12686                     (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- create trip for all the legs
12687              --{
12688 
12689                 l_prev_delivery_id := 0;
12690                 l_start_index := rec_cnt;
12691                 i := 1;
12692                 j := 1;
12693 
12694                 IF l_debug_on THEN
12695                     WSH_DEBUG_SV.logmsg(l_module_name,'l_start_index '||l_start_index);
12696                 END IF;
12697                 --
12698                 -- For multileg results, first we need to get all the legs for a delivery
12699                 -- in l_cs_mleg_result_tab. Then set pick up and drop off dates for leg pick
12700                 -- up and drop off stops in a call to SET_PICK_UP_DROP_OFF_DATES API
12701                 --
12702 
12703                 IF l_delivery_id <> l_prev_delivery_id THEN
12704                    LOOP
12705                         l_cs_mleg_result_tab(i) := l_cs_result_tab(rec_cnt);
12706 
12707                         EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12708                         l_prev_delivery_id      := l_delivery_id;
12709                         rec_cnt                 := l_cs_result_tab.NEXT(rec_cnt);
12710                         l_delivery_id           := l_cs_result_tab(rec_cnt).delivery_id;
12711                         i := i + 1;
12712                         EXIT WHEN l_delivery_id <> l_prev_delivery_id;
12713                     END LOOP;
12714 
12715                     IF (rec_cnt <> l_cs_result_tab.FIRST AND rec_cnt <> l_cs_result_tab.LAST) THEN
12716                         rec_cnt         := l_cs_result_tab.PRIOR(rec_cnt);
12717                         l_delivery_id   := l_cs_result_tab(rec_cnt).delivery_id;
12718                     END IF;
12719 
12720                     l_end_index     := rec_cnt;
12721 
12722                     IF l_debug_on THEN
12723                         WSH_DEBUG_SV.logmsg(l_module_name,'l_end_index '||l_end_index);
12724                     END IF;
12725 
12726                     SET_PICK_UP_DROP_OFF_DATES(
12727                             p_cs_mleg_result_tab => l_cs_mleg_result_tab,
12728                             x_return_status    =>  x_return_status,
12729                             x_msg_count        =>  l_msg_count,
12730                             x_msg_data         =>  l_msg_data);
12731 
12732                     k := l_cs_mleg_result_tab.FIRST;
12733 
12734                     FOR j IN l_start_index .. l_end_index LOOP
12735                         --
12736                         -- Set pick up and drop off dates for each leg in result tab
12737                         -- and Create Trip for each leg
12738                         --
12739                         l_cs_result_tab(j).pickup_date  := l_cs_mleg_result_tab(k).pickup_date;
12740                         l_cs_result_tab(j).dropoff_date := l_cs_mleg_result_tab(k).dropoff_date;
12741 
12742                         IF l_debug_on THEN
12743                             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'));
12744                             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);
12745                             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'));
12746                             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);
12747                         END IF;
12748 
12749                         l_carrier_sel_result_rec := l_cs_result_tab(j);
12750                         WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12751                                   p_delivery_id               => l_delivery_id,
12752                                   p_carrier_sel_result_rec    => l_carrier_sel_result_rec,
12753                                   x_trip_id                   => l_trip_id,
12754                                   x_trip_name                 => l_trip_name,
12755                                   x_return_message            => x_return_message,
12756                                   x_return_status             => l_return_status);
12757 
12758                          IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12759                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12760                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12761                             END IF;
12762                         END IF;
12763                         l_cs_result_tab(j).trip_id              := l_trip_id;
12764 
12765                         IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12766                             l_cs_result_tab(j).append_flag      := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12767                         ELSE
12768                             l_cs_result_tab(j).append_flag      := 'Y';
12769                         END IF;
12770 
12771                         l_ranked_list(list_cnt).TRIP_ID             := l_trip_id;
12772                         l_ranked_list(list_cnt).RANK_SEQUENCE       := l_carrier_sel_result_rec.rank;
12773                         l_ranked_list(list_cnt).CARRIER_ID          := l_carrier_sel_result_rec.carrier_id;
12774                         l_ranked_list(list_cnt).SERVICE_LEVEL       := l_carrier_sel_result_rec.service_level;
12775                         l_ranked_list(list_cnt).MODE_OF_TRANSPORT   := l_carrier_sel_result_rec.mode_of_transport;
12776                         l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO  := l_carrier_sel_result_rec.consignee_carrier_ac_no;
12777                         l_ranked_list(list_cnt).FREIGHT_TERMS_CODE  := l_carrier_sel_result_rec.freight_terms_code;
12778                         l_ranked_list(list_cnt).SOURCE              := l_rank_list_source;
12779                         l_ranked_list(list_cnt).IS_CURRENT          := 'Y';
12780                         l_ranked_list(list_cnt).CALL_RG_FLAG        := 'N';
12781 
12782                         --
12783                         -- Create and attach ranked list to each trip
12784                         --
12785 
12786 	                    WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12787 --                           p_api_version_number =>  1.0,
12788 --                           p_init_msg_list      =>  FND_API.G_FALSE,
12789                            x_return_status      =>  l_return_status,
12790                            x_msg_count          =>  l_msg_count,
12791                            x_msg_data           =>  l_msg_data,
12792                            p_action_code        =>  'REPLACE',
12793                            p_ranklist           =>  l_ranked_list,
12794                            p_trip_id            =>  l_trip_id,
12795                            p_rank_id            =>  l_rank_id);
12796 
12797                          IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12798                             IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12799                                 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12800                             END IF;
12801                         END IF;
12802                         l_ranked_list.DELETE;
12803                         list_cnt := 1;
12804 
12805                         k := l_cs_mleg_result_tab.NEXT(k);
12806 
12807                    END LOOP;
12808                 END IF;
12809               --}
12810              END IF;
12811            --}
12812        END IF;
12813        IF l_debug_on THEN
12814            WSH_DEBUG_SV.logmsg(l_module_name, 'set l_prev_delivery_id and l_prev_trip_id');
12815            WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12816            WSH_DEBUG_SV.log(l_module_name, 'l_trip_id', l_trip_id);
12817        END IF;
12818        l_prev_delivery_id := l_delivery_id;
12819        l_prev_trip_id     := l_trip_id;
12820 
12821        EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12822        rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12823       --}
12824       END LOOP;
12825     END IF;
12826 
12827     --
12828     -- Format the delivery table for the call to the group API
12829     --
12830 
12831     FORMAT_DEL_UPDATE_TABLE(p_cs_result_tab     => l_cs_result_tab,
12832                             p_caller            => p_caller,
12833                             x_rec_attr_tab      => l_rec_attr_tab,
12834                             x_trip_info_tab     => l_trip_info_tab,
12835                             x_return_status     => l_return_status,
12836                             x_return_message    => x_return_message);
12837 
12838 
12839     IF (l_rec_attr_tab.COUNT > 0) THEN
12840      --
12841      -- Update the deliveries table with the info
12842      --
12843         WSH_INTERFACE_GRP.Create_Update_Delivery(p_api_version_number => 1.0,
12844                                   p_init_msg_list      => 'F',
12845                                   p_commit             => null,
12846                                   p_in_rec             => l_in_rec,
12847                                   p_rec_attr_tab       => l_rec_attr_tab,
12848                                   x_del_out_rec_tab    => l_del_out_rec_tab,
12849                                   x_return_status      => l_return_status,
12850                                   x_msg_count          => l_msg_count,
12851                                   x_msg_data           => l_msg_data);
12852 
12853 
12854          IF ((l_return_status is not null) AND
12855          (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12856             --
12857             -- delivery not updated
12858             --
12859             x_return_status  := l_return_status;
12860             WSH_UTIL_CORE.add_message(x_return_status);
12861                 --
12862             -- Debug Statements
12863                 --
12864             IF l_debug_on THEN
12865                WSH_DEBUG_SV.logmsg(l_module_name,  'CARRIER SELECTION - AUTO CREATE - COULD NOT UPDATE DELIVERY');
12866             END IF;
12867                 --
12868             x_return_message := l_msg_data;
12869 
12870             IF l_debug_on THEN
12871                WSH_DEBUG_SV.pop(l_module_name);
12872             END IF;
12873                 --
12874             RETURN;
12875          END IF;
12876 
12877     END IF;
12878 
12879 
12880 
12881     IF (l_trip_info_tab.COUNT > 0) THEN
12882     --{
12883             WSH_INTERFACE_GRP.Create_Update_Trip(
12884                p_api_version_number => 1.0,
12885                p_init_msg_list      => 'F',
12886                p_commit             => null,
12887                x_return_status      => l_return_status,
12888                x_msg_count          => l_msg_count,
12889                x_msg_data           => l_msg_data,
12890                p_trip_info_tab      => l_trip_info_tab,
12891                p_in_rec             => l_trip_in_rec,
12892                x_out_tab            => l_trip_out_rec_tab);
12893 
12894             IF ((l_return_status is not null) AND
12895                  (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12896 
12897                 --
12898                 -- trip not updated
12899                 --
12900                 x_return_status  := l_return_status;
12901                 WSH_UTIL_CORE.add_message(x_return_status);
12902                 --
12903                 -- Debug Statements
12904                 --
12905                 IF l_debug_on THEN
12906                    WSH_DEBUG_SV.logmsg(l_module_name,  'CARRIER SELECTION - FORM MANUAL - COULD NOT UPDATE TRIP');
12907                 END IF;
12908                 --
12909                 x_return_message := l_msg_data;
12910                 --
12911                 -- Return back to the calling API or form
12912                 --
12913                 -- Debug Statements
12914                 --
12915                 IF l_debug_on THEN
12916                    WSH_DEBUG_SV.pop(l_module_name);
12917                 END IF;
12918                 --
12919                 RETURN;
12920             END IF;
12921       --}
12922   END IF;
12923 
12924 END IF;
12925 
12926  --
12927  -- Debug Statements
12928  --
12929 IF l_debug_on THEN
12930     WSH_DEBUG_SV.pop(l_module_name);
12931 END IF;
12932     --
12933 EXCEPTION
12934    WHEN OTHERS THEN
12935       l_error_code := SQLCODE;
12936       l_error_text := SQLERRM;
12937 
12938       WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION');
12939       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12940       x_return_message := l_error_text;
12941 
12942 
12943       IF l_debug_on THEN
12944 	WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12945 	WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12946       END IF;
12947       --
12948 END PROCESS_CARRIER_SELECTION;
12949 --SBAKSHI(R12)
12950 
12951 
12952 /**________________________________________________________________________
12953 --
12954 -- Name:
12955 -- Assign_Del_to_Consol_Del
12956 --
12957 -- Purpose:
12958 -- This API assigns a deliveries to a parent (consolidation)
12959 -- delivery. If the caller is FTE consolidation SRS, we
12960 -- assume that the child deliveries have already been validated
12961 -- as eligible to be assigned to the parent delivery.
12962 -- Parameters:
12963 -- p_del_tab: Table of deliveries that need to be assigned
12964 -- p_parent_del: Parent delivery id that will be assigne to
12965 -- p_caller: Calling entity/action
12966 -- x_return_status: status
12967 **/
12968 
12969 Procedure Assign_Del_to_Consol_Del(
12970           p_del_tab         IN WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
12971           p_parent_del_id   IN NUMBER,
12972           p_caller          IN VARCHAR2,
12973           x_return_status   OUT NOCOPY VARCHAR2) IS
12974 
12975 -- make sure the parent is OPEN and is of type 'CONSOLIDATION'
12976 CURSOR c_check_valid_parent(p_parent_del_id in NUMBER) IS
12977 select s1.trip_id,
12978        l.pick_up_stop_id,
12979        l.drop_off_stop_id,
12980        l.delivery_leg_id,
12981        d.ultimate_dropoff_location_id dropoff_stop_location,
12982        s1.stop_location_id pickup_stop_location,
12983        t.ignore_for_planning,
12984        s1.planned_arrival_date pu_ar_date,
12985        s1.planned_departure_date pu_dep_date,
12986        s2.planned_arrival_date do_ar_date,
12987        s2.planned_departure_date do_dep_date
12988 from wsh_trip_stops s1, wsh_trip_stops s2, wsh_delivery_legs l, wsh_new_deliveries d, wsh_trips t
12989 where s1.stop_id = l.pick_up_stop_id
12990 and s2.stop_id = l.drop_off_stop_id
12991 and l.delivery_id = d.delivery_id
12992 and d.delivery_id = p_parent_del_id
12993 and d.status_code = 'OP'
12994 and d.delivery_type = 'CONSOLIDATION'
12995 and s1.trip_id = t.trip_id ;
12996 
12997 
12998 -- make sure that the delivery is open, STANDARD and
12999 -- is not assigned to a parent delivery.
13000 cursor c_check_valid_child(p_delivery_id in number) is
13001 select d.delivery_id
13002 from wsh_new_deliveries d
13003 where d.delivery_id = p_delivery_id
13004 and d.status_code = 'OP'
13005 and d.delivery_type = 'STANDARD'
13006 and not exists (select 1 from wsh_delivery_legs
13007                 where parent_delivery_leg_id is not null
13008                 and delivery_id = d.delivery_id);
13009 -- check if the delivery is assigned to a trip
13010 /*cursor c_check_trips(p_delivery_id in number) is
13011 select delivery_leg_id
13012 from wsh_delivery_legs
13013 where delivery_id = p_delivery_id
13014 and rownum = 1;
13015 */
13016 -- check if the trip the delivery is assigned to is valid
13017 cursor c_check_trips(p_delivery_id in number) is
13018 select l.delivery_leg_id, s1.trip_id
13019 from wsh_delivery_legs l, wsh_trip_stops s1, wsh_new_deliveries d
13020 where l.delivery_id = p_delivery_id
13021 and   d.delivery_id = l.delivery_id
13022 and   d.initial_pickup_location_id = s1.stop_location_id
13023 and   s1.stop_id = l.pick_up_stop_id;
13024 
13025 l_parent_trip_rec c_check_valid_parent%rowtype;
13026 type l_trip_rec_tab_type is table of c_check_trips%rowtype index by binary_integer;
13027 l_trip_rec_tab l_trip_rec_tab_type;
13028 
13029 
13030 cursor c_get_top_child_details(p_delivery_id in number) is
13031 select a.delivery_detail_id
13032 from wsh_delivery_assignments a
13033 where a.delivery_id is not null
13034 and a.delivery_id = p_delivery_id
13035 and a.type = 'O'
13036 and a.parent_delivery_detail_id is null
13037 and not exists
13038 (select '1'
13039  from wsh_delivery_assignments b
13040  where a.delivery_detail_id = b.delivery_detail_id
13041  and b.type = 'C');
13042 
13043 -- This cursor selects all the trips that are
13044 -- assigned to all the deliveries that are
13045 -- assigned to the original trip.
13046 -- These trips will be set to ignore for planning
13047 -- along with the original trip.
13048 
13049 cursor c_get_trip_siblings(p_trip_id in number) is
13050 select distinct s2.trip_id
13051 from wsh_trip_stops s1, wsh_trip_stops s2,
13052      wsh_delivery_legs l1, wsh_delivery_legs l2
13053 where s1.trip_id = p_trip_id
13054 and s1.stop_id = l1.pick_up_stop_id
13055 and l1.delivery_id = l2.delivery_id
13056 and l2.pick_up_stop_id = s2.stop_id;
13057 
13058 
13059 cursor c_chil_del_trips(p_delivery_id in number) is
13060 select s.trip_id
13061 from wsh_trip_stops s, wsh_delivery_legs l
13062 where l.delivery_id = p_delivery_id
13063 and   l.pick_up_stop_id = s.stop_id;
13064 
13065 l_parent_trip_id NUMBER;
13066 l_child_trip_id NUMBER;
13067 l_parent_del_id NUMBER;
13068 l_dropoff_loc_id NUMBER;
13069 l_child_details_tab wsh_util_core.id_tab_type;
13070 l_valid_children_tab wsh_util_core.id_tab_type;
13071 l_unassigned_trips_tab wsh_util_core.id_tab_type;
13072 l_assigned_trips_tab wsh_util_core.id_tab_type;
13073 l_delivery_leg_id_dummy NUMBER;
13074 l_trip_id_tab wsh_util_core.id_tab_type;
13075 l_wv_delivery_tab wsh_util_core.id_tab_type;
13076 l_unassign_dels wsh_util_core.id_tab_type;
13077 l_ignore_plan_dels wsh_util_core.id_tab_type;
13078 l_include_plan_dels wsh_util_core.id_tab_type;
13079 l_change_plan_dels wsh_util_core.id_tab_type;
13080 l_child_del_trips  wsh_util_core.id_tab_type;
13081 l_child_del_trips_dummy  wsh_util_core.id_tab_type;
13082 l_parent_del_tab wsh_util_core.id_tab_type;
13083 l_intermediate_loc_id NUMBER;
13084 l_dummy_child NUMBER;
13085 l_gross_wt NUMBER;
13086 l_net_wt NUMBER;
13087 l_volume NUMBER;
13088 
13089 l_msg_count NUMBER;
13090 l_msg_data VARCHAR2(2000);
13091 i NUMBER := 0;
13092 j NUMBER := 0;
13093 k NUMBER := 0;
13094 l NUMBER := 0;
13095 m NUMBER := 0;
13096 n NUMBER := 0;
13097 o NUMBER := 0;
13098 p NUMBER := 0;
13099 q NUMBER := 0;
13100 
13101 l_num_warnings              NUMBER  := 0;
13102 l_num_errors                NUMBER  := 0;
13103 l_return_status             VARCHAR2(30);
13104 
13105 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Assig_Del_to_Consol_del';
13106 l_debug_on BOOLEAN;
13107 
13108 WSH_FAIL_ASSIGN_DEL_TO_CONSOL     EXCEPTION;
13109 WSH_INVALID_PARENT EXCEPTION;
13110 WSH_INVALID_CHILDREN EXCEPTION;
13111 WSH_INVALID_DECONSOL_POINT EXCEPTION;
13112 WSH_INVALID_TRIP EXCEPTION;
13113 
13114 
13115 BEGIN
13116 
13117    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13118    --
13119    IF l_debug_on IS NULL
13120    THEN
13121      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13122    END IF;
13123    --
13124    IF l_debug_on THEN
13125      wsh_debug_sv.push (l_module_name);
13126      WSH_DEBUG_SV.log(l_module_name,'p_parent_del_id', p_parent_del_id);
13127      WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13128    END IF;
13129 
13130    OPEN c_check_valid_parent(p_parent_del_id);
13131    FETCH c_check_valid_parent INTO l_parent_trip_rec;
13132    IF c_check_valid_parent%NOTFOUND THEN
13133       CLOSE c_check_valid_parent;
13134       -- RAISE EXCEPTION
13135       RAISE WSH_INVALID_PARENT;
13136    END IF;
13137    CLOSE c_check_valid_parent;
13138 
13139    -- If caller is WSH_AUTOCREATE_CONSOL no need to validate as grouping of deliveries and
13140    -- deconsol point has already been figured out
13141    IF p_caller <> 'WSH_AUTOCREATE_CONSOL' THEN
13142 
13143       i := p_del_tab.FIRST;
13144 
13145       IF l_debug_on THEN
13146          WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13147          WSH_DEBUG_SV.log(l_module_name,'p_del_tab.first', p_del_tab.first);
13148       END IF;
13149       WHILE i IS NOT NULL LOOP
13150 
13151         IF l_debug_on THEN
13152            WSH_DEBUG_SV.log(l_module_name,'delivery: '||i, p_del_tab(i).delivery_id);
13153            WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id: '||i, p_del_tab(i).initial_pickup_location_id);
13154            WSH_DEBUG_SV.log(l_module_name,'l_parent_trip_rec.pickup_stop_location: '||i, l_parent_trip_rec.pickup_stop_location);
13155         END IF;
13156 
13157         IF p_del_tab(i).initial_pickup_location_id = l_parent_trip_rec.pickup_stop_location THEN
13158 
13159           OPEN c_check_valid_child(p_del_tab(i).delivery_id);
13160           FETCH c_check_valid_child INTO l_dummy_child;
13161           IF c_check_valid_child%FOUND THEN
13162              IF l_debug_on THEN
13163                 WSH_DEBUG_SV.log(l_module_name,'l_dummy_child', l_dummy_child);
13164              END IF;
13165 
13166              CLOSE  c_check_valid_child;
13167              OPEN c_check_trips(p_del_tab(i).delivery_id);
13168              FETCH c_check_trips INTO l_delivery_leg_id_dummy, l_child_trip_id;
13169              IF c_check_trips%NOTFOUND THEN
13170              -- This delivery is not assigned to any trip at pu location, so we can assign it to the trip.
13171              -- Nothing to validate.
13172                 j := j+1;
13173                 k := k+1;
13174                 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13175                 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13176                 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13177                    n := n + 1;
13178                    l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13179                 ELSE
13180                    o := o + 1;
13181                    l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13182                 END IF;
13183 
13184              ELSIF p_caller = 'WMS_AUTOCREATE_CONSOL' THEN
13185              -- Called by autocreate_consol_del for WMS, if the delivery is already
13186              -- assigned to trips, then they must be assigned to a valid trip since
13187              -- autocreate_consol_del already validates the trips.
13188                 j := j+1;
13189                 m := m+1;
13190                 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13191                 l_assigned_trips_tab(m) := p_del_tab(i).delivery_id;
13192              ELSE
13193              -- If we are assigning the delivery to an already existing parent delivery, ie. not being
13194              -- called by autocreate_consol_del and the delivery has at least one trip, we need to
13195              -- make sure that there is a valid trip on the delivery.
13196 
13197                 IF l_child_trip_id <> l_parent_trip_rec.trip_id THEN
13198                    -- RAISE EXCEPTION
13199                    -- delivery is not in valid trip
13200                    CLOSE c_check_trips;
13201                    RAISE WSH_INVALID_TRIP;
13202 
13203                 ELSE
13204                    l_unassign_dels(1) := p_del_tab(i).delivery_id;
13205                    IF l_debug_on THEN
13206                       WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.Unassign_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
13207                    END IF;
13208                    WSH_TRIPS_ACTIONS.Unassign_Trip(p_del_rows => l_unassign_dels,
13209                                                    p_trip_id  => l_parent_trip_rec.trip_id,
13210                                                    x_return_status => l_return_status);
13211 
13212                    wsh_util_core.api_post_call
13213                       (
13214                         p_return_status => l_return_status,
13215                         x_num_warnings  => l_num_warnings,
13216                         x_num_errors    => l_num_errors
13217                       );
13218 
13219                    j := j+1;
13220                    k := k+1;
13221                    l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13222                    l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13223                    IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13224                       n := n + 1;
13225                       l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13226                    ELSE
13227                       o := o + 1;
13228                       l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13229                    END IF;
13230                 END IF;
13231              END IF;
13232              CLOSE c_check_trips;
13233           END IF;
13234           IF c_check_valid_child%ISOPEN THEN
13235              CLOSE c_check_valid_child;
13236           END IF;
13237 
13238         END IF;
13239         i := p_del_tab.next(i);
13240 
13241       END LOOP;
13242 
13243    ELSE
13244 
13245       FOR i in 1..p_del_tab.count LOOP
13246         l_valid_children_tab(i) := p_del_tab(i).delivery_id;
13247         l_unassigned_trips_tab(i) := p_del_tab(i).delivery_id;
13248         IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13249            n := n + 1;
13250            l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13251         ELSE
13252            o := o + 1;
13253            l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13254         END IF;
13255       END LOOP;
13256 
13257    END IF;
13258 
13259 
13260 
13261    IF l_valid_children_tab.count = 0 THEN
13262       -- ERROR!!!
13263       -- No valid deliveries were assigned to parent.
13264       RAISE WSH_INVALID_CHILDREN;
13265 
13266    END IF;
13267 
13268    BEGIN
13269      FOR i in 1..l_valid_children_tab.count LOOP
13270        WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_valid_children_tab(i));
13271      END LOOP;
13272 
13273    EXCEPTION
13274      WHEN OTHERS THEN
13275         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13276         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13277         FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13278         WSH_UTIL_CORE.Add_Message(x_return_status);
13279         --
13280         -- Debug Statements
13281         --
13282         IF l_debug_on THEN
13283            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13284            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13285         END IF;
13286         RETURN;
13287         --
13288    END;
13289    FORALL i in 1..l_valid_children_tab.count
13290          update wsh_delivery_assignments
13291          set type = 'O'
13292          where delivery_id = l_valid_children_tab(i)
13293          and delivery_id is not null
13294          and nvl(type, 'S') = 'S'
13295          and parent_delivery_detail_id is NULL;
13296 
13297    FOR i in 1..l_valid_children_tab.count LOOP
13298 
13299       OPEN c_get_top_child_details(l_valid_children_tab(i));
13300       FETCH c_get_top_child_details BULK COLLECT
13301       INTO l_child_details_tab;
13302       CLOSE c_get_top_child_details;
13303 
13304       Forall k in 1..l_child_details_tab.count
13305       INSERT INTO wsh_delivery_assignments (
13306       delivery_id,
13307       parent_delivery_id,
13308       delivery_detail_id,
13309       parent_delivery_detail_id,
13310       creation_date,
13311       created_by,
13312       last_update_date,
13313       last_updated_by,
13314       last_update_login,
13315       program_application_id,
13316       program_id,
13317       program_update_date,
13318       request_id,
13319       active_flag,
13320       delivery_assignment_id,
13321       type
13322       ) VALUES (
13323       l_valid_children_tab(i),
13324       p_parent_del_id,
13325       l_child_details_tab(k),
13326       NULL,
13327       SYSDATE,
13328       FND_GLOBAL.USER_ID,
13329       SYSDATE,
13330       FND_GLOBAL.USER_ID,
13331       FND_GLOBAL.USER_ID,
13332       NULL,
13333       NULL,
13334       NULL,
13335       NULL,
13336       NULL,
13337       wsh_delivery_assignments_s.nextval,
13338       'C'
13339       );
13340 
13341 
13342    END LOOP;
13343 
13344 
13345    -- Assign child delivery to parents' trip
13346 
13347    l_trip_id_tab(1) := l_parent_trip_rec.trip_id;
13348 
13349    IF l_include_plan_dels.count > 0 THEN
13350 
13351       IF l_parent_trip_rec.ignore_for_planning = 'Y' THEN
13352          -- Make the child deliveries ignore for planning before assignment.
13353          FOR i in 1..l_include_plan_dels.count LOOP
13354 
13355              OPEN c_chil_del_trips(l_include_plan_dels(i));
13356              FETCH c_chil_del_trips BULK COLLECT
13357              INTO l_child_del_trips_dummy;
13358              IF c_chil_del_trips%NOTFOUND THEN
13359                 p := p + 1;
13360                 l_change_plan_dels(p) := l_include_plan_dels(i);
13361              ELSE
13362                 q := l_child_del_trips.count;
13363                 FOR i in 1..l_child_del_trips_dummy.count LOOP
13364                     l_child_del_trips(q + i) := l_child_del_trips_dummy(i);
13365                 END LOOP;
13366                 l_child_del_trips_dummy.delete;
13367              END IF;
13368              CLOSE c_chil_del_trips;
13369 
13370          END LOOP;
13371 
13372          IF l_child_del_trips.count > 0 THEN
13373 
13374             IF l_debug_on THEN
13375                WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13376             END IF;
13377             WSH_TP_RELEASE.change_ignoreplan_status
13378                    (p_entity        => 'TRIP',
13379                     p_in_ids        => l_child_del_trips,
13380                     p_action_code   => 'IGNORE_PLAN',
13381                     x_return_status => l_return_status);
13382 
13383             wsh_util_core.api_post_call
13384                       (
13385                         p_return_status => l_return_status,
13386                         x_num_warnings  => l_num_warnings,
13387                         x_num_errors    => l_num_errors
13388                       );
13389          END IF;
13390 
13391          IF l_change_plan_dels.count > 0 THEN
13392             IF l_debug_on THEN
13393                WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13394             END IF;
13395             WSH_TP_RELEASE.change_ignoreplan_status
13396                    (p_entity        => 'DLVY',
13397                     p_in_ids        => l_change_plan_dels,
13398                     p_action_code   => 'IGNORE_PLAN',
13399                     x_return_status => l_return_status);
13400 
13401             wsh_util_core.api_post_call
13402                       (
13403                         p_return_status => l_return_status,
13404                         x_num_warnings  => l_num_warnings,
13405                         x_num_errors    => l_num_errors
13406                       );
13407          END IF;
13408 
13409       END IF;
13410 
13411       IF l_debug_on THEN
13412          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = N',WSH_DEBUG_SV.C_PROC_LEVEL);
13413       END IF;
13414       WSH_TRIPS_ACTIONS.assign_trip(
13415                 p_del_rows            =>  l_include_plan_dels,
13416                 p_trip_id             =>  l_trip_id_tab(1),
13417                 p_pickup_stop_id      =>  l_parent_trip_rec.pick_up_stop_id,
13418                 p_dropoff_stop_id     =>  l_parent_trip_rec.drop_off_stop_id,
13419                 p_pickup_location_id  =>  l_parent_trip_rec.pickup_stop_location,
13420                 p_dropoff_location_id =>  l_parent_trip_rec.dropoff_stop_location,
13421                 p_pickup_arr_date     =>  l_parent_trip_rec.pu_ar_date,
13422                 p_pickup_dep_date     =>  l_parent_trip_rec.pu_dep_date,
13423                 p_dropoff_arr_date    =>  l_parent_trip_rec.do_ar_date,
13424                 p_dropoff_dep_date    =>  l_parent_trip_rec.do_dep_date,
13425                 x_return_status       =>  l_return_status);
13426 
13427       wsh_util_core.api_post_call
13428                       (
13429                         p_return_status => l_return_status,
13430                         x_num_warnings  => l_num_warnings,
13431                         x_num_errors    => l_num_errors
13432                       );
13433    END IF;
13434 
13435    IF NVL(l_parent_trip_rec.ignore_for_planning, 'N') = 'N' THEN
13436       -- Set ignore for planning flag of child deliveries and their related trips.
13437       l_trip_id_tab.delete;
13438       OPEN c_get_trip_siblings(l_parent_trip_rec.trip_id);
13439       FETCH c_get_trip_siblings BULK COLLECT
13440       INTO l_trip_id_tab;
13441       CLOSE c_get_trip_siblings;
13442 
13443       IF l_debug_on THEN
13444          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13445       END IF;
13446       WSH_TP_RELEASE.change_ignoreplan_status
13447                    (p_entity        => 'TRIP',
13448                     p_in_ids        => l_trip_id_tab,
13449                     p_action_code   => 'IGNORE_PLAN',
13450                     x_return_status => l_return_status);
13451 
13452       wsh_util_core.api_post_call
13453                       (
13454                         p_return_status => l_return_status,
13455                         x_num_warnings  => l_num_warnings,
13456                         x_num_errors    => l_num_errors
13457                       );
13458 
13459    END IF;
13460    IF l_ignore_plan_dels.count > 0 THEN
13461 
13462       IF l_debug_on THEN
13463          WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = Y',WSH_DEBUG_SV.C_PROC_LEVEL);
13464       END IF;
13465 
13466       WSH_TRIPS_ACTIONS.assign_trip(
13467                 p_del_rows            =>  l_ignore_plan_dels,
13468                 p_trip_id             =>  l_trip_id_tab(1),
13469                 p_pickup_stop_id      =>  l_parent_trip_rec.pick_up_stop_id,
13470                 p_dropoff_stop_id     =>  l_parent_trip_rec.drop_off_stop_id,
13471                 p_pickup_location_id  =>  l_parent_trip_rec.pickup_stop_location,
13472                 p_dropoff_location_id =>  l_parent_trip_rec.dropoff_stop_location,
13473                 p_pickup_arr_date     =>  l_parent_trip_rec.pu_ar_date,
13474                 p_pickup_dep_date     =>  l_parent_trip_rec.pu_dep_date,
13475                 p_dropoff_arr_date    =>  l_parent_trip_rec.do_ar_date,
13476                 p_dropoff_dep_date    =>  l_parent_trip_rec.do_dep_date,
13477                 x_return_status       =>  l_return_status);
13478 
13479 
13480 
13481       wsh_util_core.api_post_call
13482                       (
13483                         p_return_status => l_return_status,
13484                         x_num_warnings  => l_num_warnings,
13485                         x_num_errors    => l_num_errors
13486                       );
13487    END IF;
13488 
13489    BEGIN
13490 
13491      FOR i in 1..l_valid_children_tab.count LOOP
13492        WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_delivery_id => l_valid_children_tab(i));
13493      END LOOP;
13494 
13495    EXCEPTION
13496      WHEN OTHERS THEN
13497         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13498         FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13499         FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13500         WSH_UTIL_CORE.Add_Message(x_return_status);
13501         --
13502         -- Debug Statements
13503         --
13504         IF l_debug_on THEN
13505            WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13506            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13507         END IF;
13508         RETURN;
13509         --
13510    END;
13511    -- Assign child delivery legs to parent
13512    FORALL i in 1..l_valid_children_tab.count
13513         update wsh_delivery_legs
13514         set parent_delivery_leg_id  = l_parent_trip_rec.delivery_leg_id
13515         where delivery_id = l_valid_children_tab(i)
13516         and pick_up_stop_id = l_parent_trip_rec.pick_up_stop_id;
13517 
13518    IF P_CALLER = 'WSH_AUTOCREATE_CONSOL' THEN
13519    -- Calculate Wt/Volume of the consolidation delivery
13520    -- if caller is WSH_AUTOCREATE_CONSOL.
13521    -- We recalculate the wt/vol of delivery during the assignment of
13522    -- consol lpns, so no need to do it here for WMS.
13523 
13524      IF l_debug_on THEN
13525         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13526      END IF;
13527      WSH_WV_UTILS.Delivery_Weight_Volume
13528                 ( p_delivery_id    => p_parent_del_id,
13529                   p_update_flag    => 'Y',
13530                   p_calc_wv_if_frozen => 'N',
13531                   x_gross_weight   => l_gross_wt,
13532                   x_net_weight     => l_net_wt,
13533                   x_volume         => l_volume,
13534                   x_return_status  => l_return_status);
13535 
13536      wsh_util_core.api_post_call
13537                       (
13538                         p_return_status => l_return_status,
13539                         x_num_warnings  => l_num_warnings,
13540                         x_num_errors    => l_num_errors
13541                       );
13542    END IF;
13543 
13544    l_parent_del_tab(1) := p_parent_del_id;
13545    WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13546                  p_entity_type => 'DELIVERY',
13547                  p_entity_ids   => l_parent_del_tab,
13548                  x_return_status => l_return_status);
13549 
13550    wsh_util_core.api_post_call
13551                       (
13552                         p_return_status => l_return_status,
13553                         x_num_warnings  => l_num_warnings,
13554                         x_num_errors    => l_num_errors
13555                       );
13556 
13557 
13558 
13559    IF l_valid_children_tab.count < p_del_tab.count THEN
13560 
13561       -- Not all deliveries were assigned to parent.
13562       FND_MESSAGE.SET_NAME('WSH', 'WSH_PARTIAL_CONSOL_ASSIGN');
13563       FND_MESSAGE.SET_TOKEN('DEL_COUNT', 'l_valid_children_tab.count');
13564       wsh_util_core.add_message(wsh_util_core.g_ret_sts_error, l_module_name);
13565       l_num_warnings := l_num_warnings + 1;
13566     END IF;
13567 
13568     IF l_num_errors > 0
13569     THEN
13570         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13571     ELSIF l_num_warnings > 0
13572     THEN
13573         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13574     ELSE
13575         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13576     END IF;
13577 
13578 
13579 IF l_debug_on THEN
13580 wsh_debug_sv.pop(l_module_name);
13581 END IF;
13582 
13583 EXCEPTION
13584  WHEN FND_API.G_EXC_ERROR THEN
13585     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13586     IF c_check_trips%ISOPEN THEN
13587       CLOSE c_check_trips;
13588     END IF;
13589     IF c_get_top_child_details%ISOPEN THEN
13590       CLOSE c_get_top_child_details;
13591     END IF;
13592     IF c_get_trip_siblings%ISOPEN THEN
13593       CLOSE c_get_trip_siblings;
13594     END IF;
13595     IF c_check_valid_parent%ISOPEN THEN
13596       CLOSE c_check_valid_parent;
13597     END IF;
13598     IF c_check_valid_child%ISOPEN THEN
13599       CLOSE c_check_valid_child;
13600     END IF;
13601 
13602 
13603     --
13604     -- Debug Statements
13605     --
13606     IF l_debug_on THEN
13607           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13608           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
13609     END IF;
13610 
13611  WHEN WSH_INVALID_TRIP THEN
13612    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13613     IF c_check_trips%ISOPEN THEN
13614       CLOSE c_check_trips;
13615     END IF;
13616     IF c_get_top_child_details%ISOPEN THEN
13617       CLOSE c_get_top_child_details;
13618     END IF;
13619     IF c_get_trip_siblings%ISOPEN THEN
13620       CLOSE c_get_trip_siblings;
13621     END IF;
13622     IF c_check_valid_parent%ISOPEN THEN
13623       CLOSE c_check_valid_parent;
13624     END IF;
13625     IF c_check_valid_child%ISOPEN THEN
13626       CLOSE c_check_valid_child;
13627     END IF;
13628    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_TRIP');
13629    WSH_UTIL_CORE.Add_Message(x_return_status);
13630    --
13631    -- Debug Statements
13632    --
13633    IF l_debug_on THEN
13634    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_TRIP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13635 
13636    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_TRIP');
13637    END IF;
13638 
13639  WHEN WSH_INVALID_DECONSOL_POINT THEN
13640    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13641     IF c_check_trips%ISOPEN THEN
13642       CLOSE c_check_trips;
13643     END IF;
13644     IF c_get_top_child_details%ISOPEN THEN
13645       CLOSE c_get_top_child_details;
13646     END IF;
13647     IF c_get_trip_siblings%ISOPEN THEN
13648       CLOSE c_get_trip_siblings;
13649     END IF;
13650     IF c_check_valid_parent%ISOPEN THEN
13651       CLOSE c_check_valid_parent;
13652     END IF;
13653     IF c_check_valid_child%ISOPEN THEN
13654       CLOSE c_check_valid_child;
13655     END IF;
13656    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_DECONSOL_POINT');
13657    WSH_UTIL_CORE.Add_Message(x_return_status);
13658    --
13659    -- Debug Statements
13660    --
13661    IF l_debug_on THEN
13662    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_DECONSOL_POINT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13663 
13664    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_DECONSOL_POINT');
13665    END IF;
13666 
13667  WHEN WSH_INVALID_CHILDREN THEN
13668    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13669     IF c_check_trips%ISOPEN THEN
13670       CLOSE c_check_trips;
13671     END IF;
13672     IF c_get_top_child_details%ISOPEN THEN
13673       CLOSE c_get_top_child_details;
13674     END IF;
13675     IF c_get_trip_siblings%ISOPEN THEN
13676       CLOSE c_get_trip_siblings;
13677     END IF;
13678     IF c_check_valid_parent%ISOPEN THEN
13679       CLOSE c_check_valid_parent;
13680     END IF;
13681     IF c_check_valid_child%ISOPEN THEN
13682       CLOSE c_check_valid_child;
13683     END IF;
13684    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILDREN');
13685    WSH_UTIL_CORE.Add_Message(x_return_status);
13686    --
13687    -- Debug Statements
13688    --
13689    IF l_debug_on THEN
13690    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILDREN exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13691 
13692    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILDREN');
13693    END IF;
13694 
13695  WHEN WSH_INVALID_PARENT THEN
13696     IF c_check_trips%ISOPEN THEN
13697       CLOSE c_check_trips;
13698     END IF;
13699     IF c_get_top_child_details%ISOPEN THEN
13700       CLOSE c_get_top_child_details;
13701     END IF;
13702     IF c_get_trip_siblings%ISOPEN THEN
13703       CLOSE c_get_trip_siblings;
13704     END IF;
13705     IF c_check_valid_parent%ISOPEN THEN
13706       CLOSE c_check_valid_parent;
13707     END IF;
13708     IF c_check_valid_child%ISOPEN THEN
13709       CLOSE c_check_valid_child;
13710     END IF;
13711    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13712    FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_PARENT');
13713    WSH_UTIL_CORE.Add_Message(x_return_status);
13714    --
13715    -- Debug Statements
13716    --
13717    IF l_debug_on THEN
13718    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_PARENT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13719 
13720    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_PARENT');
13721    END IF;
13722    --
13723 
13724  WHEN WSH_FAIL_ASSIGN_DEL_TO_CONSOL THEN
13725     IF c_check_trips%ISOPEN THEN
13726       CLOSE c_check_trips;
13727     END IF;
13728     IF c_get_top_child_details%ISOPEN THEN
13729       CLOSE c_get_top_child_details;
13730     END IF;
13731     IF c_get_trip_siblings%ISOPEN THEN
13732       CLOSE c_get_trip_siblings;
13733     END IF;
13734     IF c_check_valid_parent%ISOPEN THEN
13735       CLOSE c_check_valid_parent;
13736     END IF;
13737     IF c_check_valid_child%ISOPEN THEN
13738       CLOSE c_check_valid_child;
13739     END IF;
13740    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13741    FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13742    WSH_UTIL_CORE.Add_Message(x_return_status);
13743    --
13744    -- Debug Statements
13745    --
13746    IF l_debug_on THEN
13747    WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FAIL_ASSIGN_DEL_TO_CONSOL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13748 
13749    WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13750    END IF;
13751    --
13752 
13753 
13754   WHEN OTHERS THEN
13755     IF c_check_trips%ISOPEN THEN
13756       CLOSE c_check_trips;
13757     END IF;
13758     IF c_get_top_child_details%ISOPEN THEN
13759       CLOSE c_get_top_child_details;
13760     END IF;
13761     IF c_get_trip_siblings%ISOPEN THEN
13762       CLOSE c_get_trip_siblings;
13763     END IF;
13764     IF c_check_valid_parent%ISOPEN THEN
13765       CLOSE c_check_valid_parent;
13766     END IF;
13767     IF c_check_valid_child%ISOPEN THEN
13768       CLOSE c_check_valid_child;
13769     END IF;
13770     wsh_util_core.default_handler('wsh_new_delivery_actions.Assign_Del_to_Consol_Del',l_module_name);
13771       --
13772     IF l_debug_on THEN
13773       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
13774     END IF;
13775 
13776 END Assign_Del_to_Consol_Del;
13777 
13778 --
13779 -- Name:
13780 -- Unassign_Dels_from_Consol_Del
13781 --
13782 -- Purpose:
13783 -- This API unassigns deliveries from a parent (consolidation)
13784 -- delivery. If the parent delivery becomes empty we delete the
13785 -- parent delivery. Currently this will be called with
13786 -- assumption that all and only all deliveries in the parent
13787 -- delivery will be unassigned all at the same time.
13788 --
13789 -- Parameters:
13790 -- p_del_tab: Table of deliveries that need to be unassigned
13791 -- p_parent_del_ids: Parent deliveries that will be unassigned from
13792 -- and eventually deleted.
13793 -- p_caller: Calling entity/action
13794 -- x_return_status: status
13795 
13796 
13797 Procedure Unassign_Dels_from_Consol_Del(
13798           p_parent_del     IN NUMBER,
13799           p_caller         IN VARCHAR2,
13800           p_del_tab        IN OUT NOCOPY wsh_util_core.id_tab_type,
13801           x_return_status  OUT NOCOPY VARCHAR2) IS
13802 
13803 CURSOR c_check_parent_exists(p_child_delivery_id in number, p_parent_delivery_id in number) IS
13804 select l1.delivery_id, l2.delivery_id, l1.delivery_leg_id, s.trip_id
13805 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13806 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13807 and   l1.delivery_id = p_child_delivery_id
13808 and   l2.delivery_id = NVL(p_parent_delivery_id, l2.delivery_id)
13809 and   d.delivery_id = l1.delivery_id
13810 and   d.status_code = 'OP'
13811 and   s.stop_id = l1.pick_up_stop_id
13812 order by s.trip_id, l2.delivery_id;
13813 
13814 cursor c_check_children_exists(p_parent_delivery_id in number) is
13815 select l1.delivery_id
13816 from wsh_delivery_legs l1, wsh_delivery_legs l2
13817 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13818 and   l2.delivery_id = p_parent_delivery_id
13819 and rownum = 1;
13820 
13821 CURSOR c_get_children(p_parent_delivery_id IN NUMBER) is
13822 select l1.delivery_id, l1.delivery_leg_id, s.trip_id
13823 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13824 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13825 and   l2.delivery_id = p_parent_delivery_id
13826 and   d.delivery_id = l1.delivery_id
13827 and   d.status_code = 'OP'
13828 and   l1.pick_up_stop_id = s.stop_id;
13829 
13830 CURSOR check_consol_lpns(p_delivery_id in number) is
13831 select parent_delivery_detail_id
13832 from wsh_delivery_assignments
13833 where delivery_id = p_delivery_id
13834 and delivery_id is not null
13835 and parent_delivery_detail_id IS NOT NULL
13836 and type = 'C'
13837 and rownum = 1;
13838 
13839 l_parent_dels_tab wsh_util_core.id_tab_type;
13840 l_assigned_dels_tab wsh_util_core.id_tab_type;
13841 l_trip_tab wsh_util_core.id_tab_type;
13842 l_delete_parent_dels wsh_util_core.id_tab_type;
13843 l_remaining_parent_dels wsh_util_core.id_tab_type;
13844 l_child_legs_tab wsh_util_core.id_tab_type;
13845 l_trip_tab_dummy wsh_util_core.id_tab_type;
13846 l_distinct_parent_dels_tab wsh_util_core.id_tab_type;
13847 
13848 l_parent_del_id_dummy NUMBER;
13849 l_parent_lpn_id_dummy NUMBER;
13850 l_child_leg_id_dummy NUMBER;
13851 l_consol_lpn_dummy   NUMBER;
13852 l_child_del_dummy     NUMBER;
13853 l_trip_dummy     NUMBER;
13854 l_detail_id           NUMBER;
13855 l_parent_included     VARCHAR2(1);
13856 l_dummy_id    NUMBER;
13857 l_assigned_dels_dummy NUMBER;
13858 l_parent_dels_dummy   NUMBER;
13859 l_child_legs_dummy    NUMBER;
13860 l_gross_weight        NUMBER;
13861 l_net_weight          NUMBER;
13862 l_volume             NUMBER;
13863 
13864 i NUMBER := 0;
13865 j NUMBER := 0;
13866 k NUMBER := 0;
13867 l NUMBER := 0;
13868 m NUMBER := 0;
13869 
13870 l_num_warnings              NUMBER  := 0;
13871 l_num_errors                NUMBER  := 0;
13872 l_return_status             VARCHAR2(30);
13873 
13874 WSH_INVALID_CHILD_DELIVERIES EXCEPTION;
13875 WSH_NO_OPEN_CHILD_DELIVERIES EXCEPTION;
13876 
13877 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Unassign_Dels_from_Consol_Del';
13878 l_debug_on BOOLEAN;
13879 
13880 BEGIN
13881 
13882       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13883       --
13884       IF l_debug_on IS NULL
13885       THEN
13886         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13887       END IF;
13888       --
13889       IF l_debug_on THEN
13890         wsh_debug_sv.push (l_module_name);
13891         WSH_DEBUG_SV.log(l_module_name,'p_parent_del', p_parent_del);
13892         WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13893         WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13894       END IF;
13895 
13896       IF p_del_tab.count = 0 and p_parent_del IS NULL THEN
13897 
13898          -- raise exception
13899          RAISE WSH_INVALID_CHILD_DELIVERIES;
13900 
13901       ELSIF p_del_tab.count = 0 THEN
13902 
13903          -- unassign all children from the parent
13904 
13905          OPEN c_get_children(p_parent_del);
13906          FETCH c_get_children BULK COLLECT
13907          INTO l_assigned_dels_tab, l_child_legs_tab, l_trip_tab_dummy;
13908          CLOSE c_get_children;
13909 
13910 	 IF (l_assigned_dels_tab.COUNT = 0) THEN
13911 	   RAISE WSH_NO_OPEN_CHILD_DELIVERIES;
13912 	 END IF;
13913 
13914          l_parent_dels_tab(1) := p_parent_del;
13915          l_trip_tab(1) := l_trip_tab_dummy(1);
13916          IF l_debug_on THEN
13917            WSH_DEBUG_SV.log(l_module_name,'l_assigned_dels_tab(1)', l_assigned_dels_tab(1));
13918            WSH_DEBUG_SV.log(l_module_name,'l_child_legs_tab(1)', l_child_legs_tab(1));
13919            WSH_DEBUG_SV.log(l_module_name,'l_parent_dels_tab(1)', l_parent_dels_tab(1));
13920            WSH_DEBUG_SV.log(l_module_name,'l_trip_tab(1)', l_trip_tab(1));
13921          END IF;
13922       ELSE
13923 
13924       -- Check if the deliveries are assigned to parent dels.
13925         FOR del in 1..p_del_tab.count LOOP
13926           OPEN c_check_parent_exists(p_del_tab(del), p_parent_del);
13927           FETCH c_check_parent_exists
13928           INTO l_assigned_dels_dummy, l_parent_dels_dummy, l_child_legs_dummy, l_trip_dummy;
13929           IF c_check_parent_exists%FOUND THEN
13930              i := i + 1;
13931              l_assigned_dels_tab(i) := l_assigned_dels_dummy;
13932              l_parent_dels_tab(i) := l_parent_dels_dummy;
13933              l_child_legs_tab(i) := l_child_legs_dummy;
13934              l_trip_tab(i) := l_trip_dummy;
13935           END IF;
13936           CLOSE c_check_parent_exists;
13937         END LOOP;
13938 
13939       END IF;
13940 
13941       -- Check if the child deliveries have consol LPN's.
13942       -- If yes, do not unassign this delivery.
13943       -- and WSH cannot unpack from WMS orgs.
13944 
13945       FOR i in 1..l_assigned_dels_tab.count LOOP
13946           IF l_debug_on THEN
13947             WSH_DEBUG_SV.log(l_module_name,'looping thru del: ', l_assigned_dels_tab(i));
13948           END IF;
13949 
13950           OPEN check_consol_lpns(l_assigned_dels_tab(i));
13951           FETCH check_consol_lpns INTO l_consol_lpn_dummy;
13952             IF check_consol_lpns%FOUND THEN
13953                CLOSE check_consol_lpns;
13954                FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_UNASSIGN_DEL_LPN');
13955                FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13956                l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13957                wsh_util_core.add_message(l_return_status, l_module_name);
13958                wsh_util_core.api_post_call
13959                       (
13960                         p_return_status => l_return_status,
13961                         x_num_warnings  => l_num_warnings,
13962                         x_num_errors    => l_num_errors
13963                       );
13964             END IF;
13965           CLOSE check_consol_lpns;
13966 
13967           IF l_debug_on THEN
13968             WSH_DEBUG_SV.log(l_module_name,'after looping thru del: ', l_assigned_dels_tab(i));
13969           END IF;
13970 
13971       END LOOP;
13972 
13973       IF l_assigned_dels_tab.count = 0 THEN
13974 
13975          -- None of the deliveries were assigned to parents
13976 
13977          RAISE WSH_INVALID_CHILD_DELIVERIES;
13978 
13979 
13980       END IF;
13981 
13982       BEGIN
13983 
13984         FOR i in 1..l_assigned_dels_tab.count LOOP
13985           WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_assigned_dels_tab(i));
13986         END LOOP;
13987 
13988       EXCEPTION
13989         WHEN OTHERS THEN
13990            x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13991            FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13992            FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13993            WSH_UTIL_CORE.Add_Message(x_return_status);
13994            --
13995            -- Debug Statements
13996            --
13997            IF l_debug_on THEN
13998               WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13999               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14000            END IF;
14001            RETURN;
14002            --
14003       END;
14004       -- Delete the consolidation record for the child
14005 
14006       FORALL i in 1..l_assigned_dels_tab.count
14007          delete wsh_delivery_assignments
14008          where type = 'C'
14009          and delivery_id in l_assigned_dels_tab(i);
14010 
14011       -- Update the child deliveries record to indicate no consolidation.
14012 
14013       FORALL i in 1..l_assigned_dels_tab.count
14014          update wsh_delivery_assignments
14015          set type  = 'S'
14016          where delivery_id in l_assigned_dels_tab(i)
14017          and type = 'O';
14018 
14019 
14020       -- Unassign child delivery legs from the parents' trip/leg
14021 
14022 
14023       IF p_parent_del IS NOT NULL THEN
14024 
14025          l_distinct_parent_dels_tab(1) := p_parent_del;
14026          IF l_debug_on THEN
14027             WSH_DEBUG_SV.log(l_module_name,'only parent ', l_distinct_parent_dels_tab(1));
14028          END IF;
14029 
14030       ELSE
14031 
14032          FOR i in 1..l_assigned_dels_tab.count LOOP
14033 
14034             IF i = l_assigned_dels_tab.count OR l_parent_dels_tab(i) <> l_parent_dels_tab(i + 1) THEN
14035 
14036                k := k + 1;
14037                l_distinct_parent_dels_tab(k) := l_parent_dels_tab(i);
14038                IF l_debug_on THEN
14039                   WSH_DEBUG_SV.log(l_module_name,'distinct parents ', l_distinct_parent_dels_tab(k));
14040                END IF;
14041 
14042             END IF;
14043 
14044 
14045          END LOOP;
14046 
14047 
14048       END IF;
14049 
14050       BEGIN
14051 
14052         FOR i in 1..l_child_legs_tab.count LOOP
14053 
14054           WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_dlvy_leg_id => l_child_legs_tab(i));
14055 
14056         END LOOP;
14057 
14058       EXCEPTION
14059         WHEN OTHERS THEN
14060            x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14061            FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_DEL_LEG_LOCK');
14062            FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
14063            WSH_UTIL_CORE.Add_Message(x_return_status);
14064            --
14065            -- Debug Statements
14066            --
14067            IF l_debug_on THEN
14068               WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14069               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14070            END IF;
14071            RETURN;
14072            --
14073       END;
14074 
14075       FORALL i in 1..l_child_legs_tab.count
14076       update wsh_delivery_legs
14077       set parent_delivery_leg_id = NULL
14078       where delivery_leg_id = l_child_legs_tab(i);
14079 
14080 
14081       -- Separate the empty parent deliveries.
14082       IF l_debug_on THEN
14083          WSH_DEBUG_SV.log(l_module_name,'l_distinct_parent_dels_tab.count ', l_distinct_parent_dels_tab.count);
14084       END IF;
14085 
14086       FOR i in 1..l_distinct_parent_dels_tab.count LOOP
14087       IF l_debug_on THEN
14088          WSH_DEBUG_SV.log(l_module_name,'loop thru del: ', l_distinct_parent_dels_tab(i));
14089       END IF;
14090 
14091           OPEN c_check_children_exists(l_distinct_parent_dels_tab(i));
14092           FETCH c_check_children_exists INTO l_dummy_id;
14093           IF c_check_children_exists%FOUND THEN
14094              l := l + 1;
14095              l_remaining_parent_dels(l) := l_distinct_parent_dels_tab(i);
14096              IF l_debug_on THEN
14097                 WSH_DEBUG_SV.log(l_module_name,'l_remaining_parent_dels ', l_remaining_parent_dels(l));
14098              END IF;
14099            ELSE
14100              m := m + 1;
14101              l_delete_parent_dels(m) := l_distinct_parent_dels_tab(i);
14102              IF l_debug_on THEN
14103                 WSH_DEBUG_SV.log(l_module_name,'l_delete_parent_dels ', l_delete_parent_dels(m));
14104              END IF;
14105            END IF;
14106            CLOSE c_check_children_exists;
14107 
14108       END LOOP;
14109 
14110       -- Delete the parent deliveries if empty. This will
14111       -- also take care of deleting the parents' legs as well
14112 
14113      IF l_delete_parent_dels.count > 0 THEN
14114 
14115        IF l_debug_on THEN
14116         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.Delete',WSH_DEBUG_SV.C_PROC_LEVEL);
14117        END IF;
14118 
14119 
14120        WSH_UTIL_CORE.Delete(
14121         p_type            => 'DLVY',
14122         p_rows            => l_delete_parent_dels,
14123         p_caller          => p_caller,
14124         x_return_status   => l_return_status);
14125 
14126         -- Handle return status.
14127        wsh_util_core.api_post_call
14128                       (
14129                         p_return_status => l_return_status,
14130                         x_num_warnings  => l_num_warnings,
14131                         x_num_errors    => l_num_errors
14132                       );
14133 
14134      END IF;
14135      IF l_remaining_parent_dels.count > 0 THEN
14136       -- Update the wt/vol on the remaining parents.
14137 
14138        IF l_debug_on THEN
14139         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
14140        END IF;
14141 
14142        FOR i in 1..l_remaining_parent_dels.count LOOP
14143 
14144           WSH_WV_UTILS.Delivery_Weight_Volume (
14145                   p_delivery_id       => l_remaining_parent_dels(i),
14146                   p_update_flag       => 'Y',
14147                   p_calc_wv_if_frozen => 'N',
14148                   x_gross_weight      => l_gross_weight,
14149                   x_net_weight        => l_net_weight,
14150                   x_volume            => l_volume,
14151                   x_return_status     => l_return_status);
14152 
14153           wsh_util_core.api_post_call
14154                       (
14155                         p_return_status => l_return_status,
14156                         x_num_warnings  => l_num_warnings,
14157                         x_num_errors    => l_num_errors
14158                       );
14159 
14160        END LOOP;
14161 
14162        WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
14163                  p_entity_type => 'DELIVERY',
14164                  p_entity_ids   => l_remaining_parent_dels,
14165                  x_return_status => l_return_status);
14166 
14167        wsh_util_core.api_post_call
14168                       (
14169                         p_return_status => l_return_status,
14170                         x_num_warnings  => l_num_warnings,
14171                         x_num_errors    => l_num_errors
14172                       );
14173 
14174        Confirm_Consolidation_Delivery(
14175              p_consol_del_tab   => l_remaining_parent_dels,
14176              x_return_status    => l_return_status);
14177 
14178        wsh_util_core.api_post_call
14179                       (
14180                         p_return_status => l_return_status,
14181                         x_num_warnings  => l_num_warnings,
14182                         x_num_errors    => l_num_errors
14183                       );
14184 
14185     END IF;
14186 
14187     IF l_num_errors > 0
14188     THEN
14189         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14190     ELSIF l_num_warnings > 0
14191     THEN
14192         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14193     ELSE
14194         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14195     END IF;
14196 
14197 IF l_debug_on THEN
14198     WSH_DEBUG_SV.pop(l_module_name);
14199 END IF;
14200 
14201 EXCEPTION
14202  WHEN FND_API.G_EXC_ERROR THEN
14203     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14204     --
14205     -- Debug Statements
14206     --
14207     IF l_debug_on THEN
14208         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14209         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14210     END IF;
14211       --
14212 
14213  WHEN WSH_NO_OPEN_CHILD_DELIVERIES THEN
14214        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14215        FND_MESSAGE.SET_NAME('WSH','WSH_NO_OPEN_DELIVERIES');
14216        WSH_UTIL_CORE.Add_Message(x_return_status);
14217        --
14218        -- Debug Statements
14219        --
14220        IF l_debug_on THEN
14221        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_OPEN_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14222 
14223        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_OPEN_CHILD_DELIVERIES');
14224        END IF;
14225         --
14226 
14227  WHEN WSH_INVALID_CHILD_DELIVERIES THEN
14228        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14229        FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILD_DELIVERIES');
14230        WSH_UTIL_CORE.Add_Message(x_return_status);
14231        --
14232        -- Debug Statements
14233        --
14234        IF l_debug_on THEN
14235        WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14236 
14237        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILD_DELIVERIES');
14238        END IF;
14239         --
14240  WHEN OTHERS THEN
14241     wsh_util_core.default_handler('wsh_new_delivery_actions.Unassign_Dels_from_Consol_Del',l_module_name);
14242     --
14243     IF c_check_parent_exists%ISOPEN THEN
14244       CLOSE c_check_parent_exists;
14245     END IF;
14246     --
14247     IF c_check_children_exists%ISOPEN THEN
14248       CLOSE c_check_children_exists;
14249     END IF;
14250     --
14251     IF c_get_children%ISOPEN THEN
14252       CLOSE c_get_children;
14253     END IF;
14254     --
14255     IF check_consol_lpns%ISOPEN THEN
14256       CLOSE check_consol_lpns;
14257     END IF;
14258     --
14259     IF l_debug_on THEN
14260       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14261     END IF;
14262 
14263 END Unassign_Dels_from_Consol_Del;
14264 
14265 
14266 PROCEDURE Confirm_Consolidation_Delivery(
14267            p_consol_del_tab IN wsh_util_core.id_tab_type,
14268            x_return_status OUT NOCOPY VARCHAR2) IS
14269 
14270 cursor c_check_close_consol(p_del_id IN NUMBER) IS
14271 select d.delivery_id
14272 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d
14273 where l1.parent_delivery_leg_id = l2.delivery_leg_id
14274 and   l2.delivery_id = p_del_id
14275 and   l1.delivery_id = d.delivery_id
14276 and   d.status_code = 'OP'
14277 and   rownum = 1;
14278 
14279 l_u_consol_del_tab wsh_util_core.id_tab_type;
14280 l_co_consol_del_tab wsh_util_core.id_tab_type;
14281 l_number_of_lpn_tab wsh_util_core.id_tab_type;
14282 l_delivery_id NUMBER;
14283 l_lpn_number  NUMBER;
14284 i NUMBER;
14285 j NUMBER := 0;
14286 l_exists_flag VARCHAR2(1);
14287 l_lock_index NUMBER;
14288 
14289 
14290 CURSOR c_get_child_lpn_number(p_delivery_id IN NUMBER) IS
14291 select count(*)
14292 from wsh_delivery_assignments da,
14293      wsh_delivery_details dd
14294 where da.type = 'C'
14295 and   da.parent_delivery_detail_id IS NULL
14296 and   da.delivery_detail_id = dd.delivery_detail_id
14297 and   dd.container_flag = 'Y'
14298 and   da.parent_delivery_id = p_delivery_id
14299 and   da.parent_delivery_id IS NOT NULL;
14300 
14301 CURSOR c_get_consol_lpn_number(p_delivery_id in NUMBER) IS
14302 select count(*)
14303 from wsh_delivery_assignments
14304 where type = 'S'
14305 and delivery_id = p_delivery_id;
14306 
14307 -- bug 4505105
14308 cursor l_get_consol_del_org_csr (p_del_id IN NUMBER) is
14309 select organization_id
14310 from   wsh_new_deliveries
14311 where  delivery_id = p_del_id;
14312 
14313 l_return_status VARCHAR2(1);
14314 l_del_valid_flag VARCHAR2(1);
14315 l_org_id  NUMBER := 0;
14316 l_num_warnings  NUMBER := 0;
14317 l_num_err  NUMBER := 0;
14318 
14319 -- bug 4505105
14320 
14321 
14322 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Confirm_Consolidation_Delivery';
14323 l_debug_on BOOLEAN;
14324 
14325 BEGIN
14326      l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14327      --
14328      IF l_debug_on IS NULL
14329      THEN
14330        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14331      END IF;
14332      --
14333      IF l_debug_on THEN
14334        wsh_debug_sv.push (l_module_name);
14335      END IF;
14336 
14337      -- bug 4505105
14338      x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14339      -- bug 4505105
14340 
14341   -- collect the unique parent deliveries.
14342   -- p_consol_del_tab may not be gapless and
14343   -- may contain duplicates.
14344   i := p_consol_del_tab.FIRST;
14345   WHILE i IS NOT NULL LOOP
14346     IF l_debug_on THEN
14347        WSH_DEBUG_SV.logmsg(l_module_name,'Inside  WHILE i IS NOT NULL LOOP');
14348     END IF;
14349     l_exists_flag := 'N';
14350     FOR k in 1..l_u_consol_del_tab.count LOOP
14351         IF l_debug_on THEN
14352            WSH_DEBUG_SV.logmsg(l_module_name,'Inside FOR k in 1..l_u_consol_del_tab.count LOOP');
14353         END IF;
14354         IF l_u_consol_del_tab(k) = p_consol_del_tab(i) THEN
14355            l_exists_flag := 'Y';
14356            EXIT;
14357         END IF;
14358     END LOOP;
14359     IF l_debug_on THEN
14360        WSH_DEBUG_SV.logmsg(l_module_name,'after FOR k in 1..l_u_consol_del_tab.count LOOP');
14361     END IF;
14362     IF l_exists_flag = 'N' THEN
14363         IF l_debug_on THEN
14364            WSH_DEBUG_SV.log(l_module_name,'i is', i);
14365            WSH_DEBUG_SV.log(l_module_name,'p_consol_del_tab(i)', p_consol_del_tab(i));
14366            WSH_DEBUG_SV.log(l_module_name,'l_u_consol_del_tab.count', l_u_consol_del_tab.count);
14367         END IF;
14368        l_u_consol_del_tab(l_u_consol_del_tab.count + 1) := p_consol_del_tab(i);
14369        OPEN c_check_close_consol(p_consol_del_tab(i));
14370        FETCH c_check_close_consol INTO l_delivery_id;
14371        IF c_check_close_consol%NOTFOUND THEN
14372           -- bug 4505105
14373           l_del_valid_flag := 'Y';
14374           l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14375           -- Keeping it commented because as of today
14376           -- this procedure will be called only for WMS org.
14377           --l_org_id := NULL;
14378           --open l_get_consol_del_org_csr(p_consol_del_tab(i));
14379           --fetch l_get_consol_del_org_csr into l_org_id;
14380           --close l_get_consol_del_org_csr;
14381           --IF (l_org_id is not null
14382           --    and wsh_util_validate.Check_Wms_Org(l_org_id)='Y'
14383           --   )
14384           --THEN
14385           --{
14386               validate_del_containers(p_consol_del_tab(i),
14387                                       'CONSOL',
14388                                       l_del_valid_flag,
14389                                       l_return_status);
14390 
14391               IF l_debug_on THEN
14392                 WSH_DEBUG_SV.log(l_module_name,'l_return_status after calling validate_del_containers', l_return_status);
14393               END IF;
14394 
14395               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
14396                   RAISE FND_API.G_EXC_ERROR;
14397               ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
14398                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14399               ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
14400                 l_num_warnings := l_num_warnings + 1;
14401               END IF;
14402           --}
14403           --END IF;
14404 
14405           IF (nvl(l_del_valid_flag,'Y') = 'Y') THEN
14406             --
14407             j:= j+1;
14408             l_co_consol_del_tab(j) := p_consol_del_tab(i);
14409             IF l_debug_on THEN
14410                WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(j)', l_co_consol_del_tab(j));
14411             END IF;
14412             --
14413           ELSE
14414             --
14415             l_num_warnings := l_num_warnings + 1;
14416             l_num_err := l_num_err + 1;
14417             --
14418           END IF;
14419           -- bug 4505105
14420        END IF;
14421        CLOSE c_check_close_consol;
14422        IF l_debug_on THEN
14423           WSH_DEBUG_SV.logmsg(l_module_name,'after c_check_close_consol');
14424        END IF;
14425     END IF;
14426   IF l_debug_on THEN
14427      WSH_DEBUG_SV.log(l_module_name,'i', i);
14428   END IF;
14429 
14430   i := p_consol_del_tab.next(i);
14431 
14432   IF l_debug_on THEN
14433      WSH_DEBUG_SV.log(l_module_name,'i', i);
14434   END IF;
14435 
14436   END LOOP;
14437   IF l_debug_on THEN
14438      WSH_DEBUG_SV.logmsg(l_module_name,'After WHILE i IS NOT NULL LOOP');
14439   END IF;
14440 
14441   -- bug 4505105
14442   IF l_debug_on THEN
14443     WSH_DEBUG_SV.log(l_module_name,'Count of consol deliveries to be processed is ', l_u_consol_del_tab.count);
14444     WSH_DEBUG_SV.log(l_module_name,'Count of errored deliveries is ', l_num_err);
14445   END IF;
14446 
14447   IF (l_num_err >= l_u_consol_del_tab.count AND l_num_err > 0) THEN
14448     IF l_debug_on THEN
14449       WSH_DEBUG_SV.logmsg(l_module_name,'None of the Deliveries are eligible of Ship Confirm');
14450     END IF;
14451     RAISE FND_API.G_EXC_ERROR;
14452   END IF;
14453   -- bug 4505105
14454 
14455   BEGIN
14456      IF l_debug_on THEN
14457         WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab.count', l_co_consol_del_tab.count);
14458      END IF;
14459 
14460      FOR l in 1..l_co_consol_del_tab.count LOOP
14461         IF l_debug_on THEN
14462            WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(l)', l_co_consol_del_tab(l));
14463         END IF;
14464         l_lock_index := l;
14465         WSH_NEW_DELIVERIES_PVT.Lock_Dlvy_No_Compare(l_co_consol_del_tab(l));
14466 
14467         l_lpn_number := 0;
14468         OPEN c_get_child_lpn_number(l_co_consol_del_tab(l));
14469         FETCH c_get_child_lpn_number
14470         INTO  l_lpn_number;
14471         CLOSE c_get_child_lpn_number;
14472 
14473         l_number_of_lpn_tab(l) := NVL(l_lpn_number, 0);
14474         l_lpn_number := 0;
14475 
14476         OPEN c_get_consol_lpn_number(l_co_consol_del_tab(l));
14477         FETCH c_get_consol_lpn_number
14478         INTO  l_lpn_number;
14479         CLOSE c_get_consol_lpn_number;
14480 
14481         l_number_of_lpn_tab(l) := l_number_of_lpn_tab(l) + NVL(l_lpn_number, 0);
14482 
14483      END LOOP;
14484   EXCEPTION
14485     WHEN OTHERS THEN
14486        x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14487        FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
14488        FND_MESSAGE.Set_Token('ENTITY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_co_consol_del_tab(l_lock_index)));
14489        WSH_UTIL_CORE.Add_Message(x_return_status);
14490        --
14491        -- Debug Statements
14492        --
14493        IF l_debug_on THEN
14494           WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14495           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14496        END IF;
14497        RETURN;
14498        --
14499   END;
14500   IF l_debug_on THEN
14501      WSH_DEBUG_SV.logmsg(l_module_name,'after lock');
14502   END IF;
14503   IF l_co_consol_del_tab.count > 0 THEN
14504      FORALL m in 1..l_co_consol_del_tab.count
14505      UPDATE wsh_new_deliveries
14506      SET status_code = 'CO',
14507       number_of_lpn = decode(number_of_lpn, NULL, l_number_of_lpn_tab(m), number_of_lpn)
14508      WHERE delivery_id = l_co_consol_del_tab(m);
14509   END IF;
14510 
14511   -- bug 4505105
14512   IF (l_num_warnings > 0 and x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
14513     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14514   ELSE
14515     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14516   END IF;
14517   -- bug 4505105
14518 
14519 EXCEPTION
14520     -- bug 4505105
14521     WHEN FND_API.G_EXC_ERROR THEN
14522       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14523       --
14524       IF l_debug_on THEN
14525         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14526         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14527       END IF;
14528       --
14529     -- bug 4505105
14530   WHEN OTHERS THEN
14531      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14532     wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14533       --
14534     IF l_debug_on THEN
14535       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14536     END IF;
14537 
14538 END Confirm_Consolidation_Delivery;
14539 
14540 
14541 PROCEDURE Create_Deconsol_Trips(p_deliveries_tab IN wsh_util_core.id_tab_type,
14542                                 x_return_status OUT NOCOPY VARCHAR2) IS
14543 CURSOR c_del_info(p_delivery_id IN NUMBER) IS
14544 SELECT parent.ultimate_dropoff_location_id pu_location,
14545        stop.planned_departure_date pu_date,
14546        child.ultimate_dropoff_location_id do_location,
14547        child.ultimate_dropoff_date do_date,
14548        child.ship_method_code,
14549        child.carrier_id,
14550        child.service_level,
14551        child.mode_of_transport,
14552        child.ignore_for_planning
14553 FROM   wsh_new_deliveries child,
14554        wsh_new_deliveries parent,
14555        wsh_delivery_legs child_leg,
14556        wsh_delivery_legs parent_leg,
14557        wsh_trip_stops stop
14558 WHERE  child_leg.delivery_id = p_delivery_id
14559 AND    child_leg.parent_delivery_leg_id = parent_leg.delivery_leg_id
14560 AND    child_leg.delivery_id = child.delivery_id
14561 AND    parent_leg.delivery_id = parent.delivery_id
14562 AND    child_leg.drop_off_stop_id = stop.stop_id
14563 AND    child.ultimate_dropoff_location_id <> parent.ultimate_dropoff_location_id;
14564 
14565 CURSOR c_second_leg(p_delivery_id IN NUMBER) IS
14566 SELECT stop.trip_id
14567 FROM   wsh_delivery_legs leg,
14568        wsh_trip_stops stop
14569 WHERE  leg.parent_delivery_leg_id IS NULL
14570 AND    leg.delivery_id = p_delivery_id
14571 AND    leg.pick_up_stop_id = stop.stop_id;
14572 
14573 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Deconsol_Trips';
14574 l_debug_on BOOLEAN;
14575 
14576 
14577 l_del_tab wsh_util_core.id_tab_type;
14578 l_trip_tab wsh_util_core.id_tab_type;
14579 
14580 
14581 l_trip_in_rec        WSH_TRIPS_GRP.tripInRecType;
14582 l_init_msg_list        VARCHAR2(100);
14583 l_api_version_number    NUMBER := 1.0;
14584 l_commit        VARCHAR2(10);
14585 l_return_status        VARCHAR2(1);
14586 l_msg_count        NUMBER;
14587 l_msg_data        VARCHAR2(2000);
14588 l_trip_info_tab        WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
14589 l_trip_info_rec        WSH_TRIPS_PVT.trip_rec_type;
14590 l_trip_out_rec_tab    WSH_TRIPS_GRP.Trip_Out_Tab_Type;
14591 l_num_warnings  NUMBER := 0;
14592 l_num_errors  NUMBER := 0;
14593 l_do_date   DATE;
14594 i NUMBER;
14595 
14596 BEGIN
14597 
14598 
14599 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14600 --
14601 IF l_debug_on IS NULL
14602 THEN
14603   l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14604 END IF;
14605 --
14606 IF l_debug_on THEN
14607   wsh_debug_sv.push (l_module_name);
14608 END IF;
14609 
14610 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14611 
14612 i := p_deliveries_tab.FIRST;
14613 
14614 WHILE i is NOT NULL LOOP
14615 
14616 
14617   FOR del in c_del_info(p_deliveries_tab(i)) LOOP
14618 
14619      l_del_tab(1) := p_deliveries_tab(i);
14620 
14621      -- Unassign all non-consol trips attached to
14622      -- delivery.
14623 
14624      FOR trip in c_second_leg(p_deliveries_tab(i)) LOOP
14625 
14626          WSH_TRIPS_ACTIONS.Unassign_Trip(
14627                 p_del_rows           => l_del_tab,
14628                 p_trip_id            => trip.trip_id,
14629                 x_return_status      => l_return_status);
14630 
14631          WSH_UTIL_CORE.Api_Post_Call
14632                       (
14633                         p_return_status => l_return_status,
14634                         x_num_warnings  => l_num_warnings,
14635                         x_num_errors    => l_num_errors
14636                       );
14637      END LOOP;
14638 
14639 
14640      -- Create Trip
14641 
14642      l_trip_in_rec.caller := 'WSH_CONSOL';
14643      l_trip_in_rec.phase := NULL;
14644      l_trip_in_rec.action_code := 'CREATE';
14645 
14646      l_trip_info_tab.DELETE;
14647      l_trip_info_tab(1).ignore_for_planning := del.ignore_for_planning;
14648      l_trip_info_tab(1).ship_method_code := del.ship_method_code;
14649      l_trip_info_tab(1).service_level := del.service_level;
14650      l_trip_info_tab(1).mode_of_transport := del.mode_of_transport;
14651      l_trip_info_tab(1).carrier_id := del.carrier_id;
14652 
14653      l_commit := FND_API.g_false;
14654      IF l_debug_on THEN
14655          WSH_DEBUG_SV.logmsg(l_module_name,'Creating deconsol trip');
14656          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.Create_Update_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14657      END IF;
14658 
14659      WSH_TRIPS_GRP.Create_Update_Trip(
14660          p_api_version_number => l_api_version_number,
14661          p_init_msg_list      => l_init_msg_list,
14662          p_commit         => l_commit,
14663          x_return_status      => l_return_status,
14664          x_msg_count      => l_msg_count,
14665          x_msg_data       => l_msg_data,
14666          p_trip_info_tab      => l_trip_info_tab,
14667          p_in_rec         => l_trip_in_rec,
14668          x_out_tab        => l_trip_out_rec_tab);
14669 
14670     wsh_util_core.api_post_call
14671                       (
14672                         p_return_status => l_return_status,
14673                         x_num_warnings  => l_num_warnings,
14674                         x_num_errors    => l_num_errors
14675                       );
14676 
14677     -- Assign delivery to trip
14678 
14679     IF l_debug_on THEN
14680         WSH_DEBUG_SV.logmsg(l_module_name,'Assigning to deconsol trip');
14681         WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.assign_trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14682     END IF;
14683 
14684 
14685     IF del.pu_date < del.do_date THEN
14686        l_do_date := del.do_date;
14687     ELSE
14688        l_do_date := del.pu_date + 1;
14689     END IF;
14690 
14691     WSH_TRIPS_ACTIONS.assign_trip(
14692                 p_del_rows            =>  l_del_tab,
14693                 p_trip_id             =>  l_trip_out_rec_tab(l_trip_out_rec_tab.FIRST).trip_id,
14694                 p_pickup_location_id  =>  del.pu_location,
14695                 p_dropoff_location_id =>  del.do_location,
14696                 p_pickup_arr_date     =>  del.pu_date,
14697                 p_pickup_dep_date     =>  del.pu_date,
14698                 p_dropoff_arr_date    =>  l_do_date,
14699                 p_dropoff_dep_date    =>  l_do_date,
14700                 x_return_status       =>  l_return_status);
14701 
14702     wsh_util_core.api_post_call
14703                       (
14704                         p_return_status => l_return_status,
14705                         x_num_warnings  => l_num_warnings,
14706                         x_num_errors    => l_num_errors
14707                       );
14708   END LOOP;
14709 i := p_deliveries_tab.NEXT(i);
14710 
14711 END LOOP;
14712 
14713 
14714     IF l_num_errors > 0
14715     THEN
14716         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14717     ELSIF l_num_warnings > 0
14718     THEN
14719         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14720     ELSE
14721         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14722     END IF;
14723 
14724 IF l_debug_on THEN
14725     WSH_DEBUG_SV.pop(l_module_name);
14726 END IF;
14727 
14728 EXCEPTION
14729     WHEN FND_API.G_EXC_ERROR THEN
14730       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14731       --
14732       IF l_debug_on THEN
14733         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14734         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14735       END IF;
14736       --
14737   WHEN OTHERS THEN
14738      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14739     wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14740       --
14741     IF l_debug_on THEN
14742       wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14743     END IF;
14744 
14745 END Create_Deconsol_Trips;
14746 
14747 
14748   --OTM R12
14749   ----------------------------------------------------------
14750   -- FUNCTION IS_DELIVERY_EMPTY
14751   --
14752   -- parameters:	p_delivery_id	delivery id to check for emptiness
14753   --
14754   -- description:	This procedure checks the delivery to see if there's any detail
14755   -- 			lines on the delivery.  Returns Y if yes, N if no, and E if errors out
14756   ----------------------------------------------------------
14757   FUNCTION IS_DELIVERY_EMPTY (p_delivery_id IN NUMBER) RETURN VARCHAR2 IS
14758 
14759   CURSOR c_delivery_detail_count(p_del_id IN NUMBER) IS
14760     SELECT 1
14761     FROM   wsh_delivery_assignments wda,
14762            wsh_delivery_details wdd
14763     WHERE  wda.delivery_id = p_del_id
14764     AND    wda.delivery_detail_id = wdd.delivery_detail_id
14765     AND    wdd.container_flag = 'N';
14766 
14767   l_count        NUMBER;
14768   l_return_value VARCHAR2(1);
14769 
14770   l_debug_on     BOOLEAN;
14771   --
14772   l_module_name  CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'IS_DELIVERY_EMPTY';
14773   --
14774   BEGIN
14775 
14776     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14777     --
14778     IF l_debug_on IS NULL THEN
14779       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14780     END IF;
14781     --
14782     IF l_debug_on THEN
14783       WSH_DEBUG_SV.push(l_module_name);
14784       WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
14785     END IF;
14786 
14787     l_count := 0;
14788 
14789     l_return_value := 'Y';  --defaulting to empty
14790 
14791     IF (p_delivery_id IS NOT NULL) THEN
14792       OPEN c_delivery_detail_count(p_delivery_id);
14793       FETCH c_delivery_detail_count INTO l_count;
14794 
14795       IF (c_delivery_detail_count%FOUND) THEN -- not empty
14796 
14797         IF l_debug_on THEN
14798           wsh_debug_sv.logmsg(l_module_name, 'Delivery is not empty');
14799         END IF;
14800         l_return_value := 'N';
14801       ELSE  -- empty
14802         IF l_debug_on THEN
14803           wsh_debug_sv.logmsg(l_module_name, 'Delivery is empty');
14804         END IF;
14805       	l_return_value := 'Y';
14806       END IF;
14807       CLOSE c_delivery_detail_count;
14808     ELSE
14809       l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14810     END IF;
14811 
14812     IF l_debug_on THEN
14813       wsh_debug_sv.log(l_module_name, 'RETURN VALUE', l_return_value);
14814       WSH_DEBUG_SV.pop(l_module_name);
14815     END IF;
14816     --
14817 
14818     RETURN l_return_value;
14819   EXCEPTION
14820 
14821     WHEN OTHERS THEN
14822       wsh_util_core.default_handler('wsh_new_delivery_actions.is_delivery_empty',l_module_name);
14823       --
14824       IF (c_delivery_detail_count%ISOPEN) THEN
14825         CLOSE c_delivery_detail_count;
14826       END IF;
14827       l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14828 
14829       IF l_debug_on THEN
14830         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
14831         wsh_debug_sv.LOG(l_module_name, 'RETURN VALUE', l_return_value);
14832         WSH_DEBUG_SV.pop(l_module_name);
14833       END IF;
14834       --
14835       RETURN l_return_value;
14836   END IS_DELIVERY_EMPTY;
14837   --END OTM R12
14838 
14839 END WSH_NEW_DELIVERY_ACTIONS;