DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_DELIVERY_VALIDATIONS

Source


1 PACKAGE BODY WSH_DELIVERY_VALIDATIONS as
2 /* $Header: WSHDEVLB.pls 120.35.12020000.2 2013/03/14 16:13:09 suppal ship $ */
3 --6156495  : A global variable added to store the value of actual_departure_date
4 G_ACT_DEPT_DATE DATE;
5 
6 --3509004:public api changes
7 PROCEDURE   user_non_updatable_columns
8      (p_user_in_rec     IN WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type,
9       p_out_rec         IN WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type,
10       p_in_rec          IN WSH_DELIVERIES_GRP.Del_In_Rec_Type,
11       x_return_status   OUT NOCOPY    VARCHAR2);
12 
13 
14 -----------------------------------------------------------------------------
15 --
16 -- Procedure:     Check_Ship_Set
17 -- Parameters:    p_delivery_id, x_return_status
18 -- Description:   Checks if Ship Set is together and returns x_valid_flag
19 --                TRUE - if Ship Set is together
20 --                FALSE - if Ship Set is not together
21 --
22 -----------------------------------------------------------------------------
23 
24 --
25 G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_DELIVERY_VALIDATIONS';
26 --
27 
28 
29 /* The following 2 global variables added as part of Ship Message Customization
30  * Project ( R12 ). These varibales are accessed from Check_Confirm Procedure
31  * and are used to cache values for a session.*/
32   g_break_ship_set_severity     VARCHAR2(10);
33   g_break_smc_severity          VARCHAR2(10);
34 
35 PROCEDURE check_ship_set( p_delivery_id IN NUMBER,
36 					 x_valid_flag  OUT NOCOPY  BOOLEAN,
37 					 x_return_status OUT NOCOPY  VARCHAR2) IS
38 
39 CURSOR check_ship_set IS
40 	SELECT dd.delivery_detail_id
41 	FROM   wsh_delivery_details dd,
42 		  wsh_delivery_assignments_v da
43 	WHERE  ((NVL(da.delivery_id, -1) <> p_delivery_id) OR
44 		   (da.delivery_id = p_delivery_id AND dd.requested_quantity > dd.shipped_quantity
45                     AND da.delivery_id IS NOT NULL AND dd.shipped_quantity <> 0)) AND
46 		  da.delivery_detail_id = dd.delivery_detail_id AND
47                   NVL(dd.released_status, 'C') NOT IN ('C' ,'D') AND  -- when the other lines are not shipped
48 		  dd.container_flag <> 'Y' AND
49 		  dd.source_code = 'OE' AND
50 		  (dd.ship_set_id, dd.source_header_id) IN
51 		    (SELECT DISTINCT dd.ship_set_id, dd.source_header_id
52 			FROM   wsh_delivery_details dd,
53 				  wsh_delivery_assignments_v da
54 		     WHERE  da.delivery_id = p_delivery_id AND
55 				  da.delivery_id IS NOT NULL AND
56 				  da.delivery_detail_id = dd.delivery_detail_id AND
57 				  dd.container_flag <> 'Y' AND
58                                   dd.source_code = 'OE' AND
59 				  dd.ship_set_id IS NOT NULL );
60 CURSOR check_all_lines_imported IS
61 SELECT DISTINCT dd.source_code, dd.ship_set_id, dd.source_header_id
62 FROM   wsh_delivery_details dd,
63        wsh_delivery_assignments_v da
64 WHERE  da.delivery_id = p_delivery_id AND
65        da.delivery_id IS NOT NULL AND
66        da.delivery_detail_id = dd.delivery_detail_id AND
67        dd.container_flag <> 'Y' AND
68        dd.source_code = 'OE' AND
69        dd.ship_set_id IS NOT NULL ;
70 
71 l_detail_id NUMBER;
72 l_status BOOLEAN;
73 l_ship_set_id NUMBER;
74 l_source_header_id NUMBER;
75 l_source_code  WSH_DELIVERY_DETAILS.SOURCE_CODE%TYPE;
76 others exception;
77 
78 --
79 l_debug_on BOOLEAN;
80 --
81 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_SHIP_SET';
82 --
83 BEGIN
84 
85    --
86    -- Debug Statements
87    --
88    --
89    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
90    --
91    IF l_debug_on IS NULL
92    THEN
93        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
94    END IF;
95    --
96    IF l_debug_on THEN
97        WSH_DEBUG_SV.push(l_module_name);
98        --
99        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
100    END IF;
101    --
102    x_valid_flag := TRUE;
103    OPEN check_all_lines_imported;
104    LOOP
105      FETCH check_all_lines_imported
106      INTO  l_source_code, l_ship_set_id, l_source_header_id;
107      IF (check_all_lines_imported%NOTFOUND) THEN
108         EXIT;
109      END IF;
110      l_status := Check_SS_Imp_Pending(l_source_code, l_source_header_id, l_ship_set_id, 'N',x_return_status);
111      IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
112        raise others;
113      ELSE
114        IF (l_status = TRUE) THEN
115          x_valid_flag := FALSE;
116          EXIT;
117        END IF;
118      END IF;
119    END LOOP;
120    CLOSE check_all_lines_imported;
121 
122    IF (x_valid_flag = TRUE) THEN -- All lines in ship set are imported
123      OPEN check_ship_set;
124      FETCH check_ship_set INTO l_detail_id;
125 
126      IF (check_ship_set%FOUND) THEN
127        x_valid_flag := FALSE;
128      ELSE
129        x_valid_flag := TRUE;
130      END IF;
131 
132      CLOSE check_ship_set;
133    END IF;
134 
135    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
136 
137 --
138 -- Debug Statements
139 --
140 IF l_debug_on THEN
141     WSH_DEBUG_SV.pop(l_module_name);
142 END IF;
143 --
144    EXCEPTION
145      WHEN others THEN
146 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_SHIP_SET');
147 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
148 
149 --
150 -- Debug Statements
151 --
152 IF l_debug_on THEN
153     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
154     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
155 END IF;
156 --
157 END check_ship_set;
158 
159 -----------------------------------------------------------------------------
160 --
161 -- Procedure:     Check_Smc
162 -- Parameters:    p_delivery_id, x_return_status
163 -- Description:   Checks if Ship Model is complete and returns x_valid_flag
164 --                TRUE - if Ship Model is complete
165 --                FALSE - if Ship Model is not complete
166 --
167 -----------------------------------------------------------------------------
168 
169 PROCEDURE check_smc ( p_delivery_id   IN  NUMBER,
170 		      x_valid_flag    OUT NOCOPY  BOOLEAN,
171 		      x_return_status OUT NOCOPY  VARCHAR2) IS
172 
173 -- Bug 2284000
174 CURSOR check_smc(top_model_line NUMBER) IS
175         SELECT MAX(OEL.ORDERED_QUANTITY) child_ord_qty, SUM(NVL(WDD.SHIPPED_QUANTITY,0)) child_shp_qty,
176                OEL.LINE_ID
177         FROM   WSH_DELIVERY_DETAILS WDD, OE_ORDER_LINES_ALL OEL, wsh_delivery_assignments_v WDA
178         WHERE  OEL.LINE_ID = WDD.SOURCE_LINE_ID
179         AND    WDD.DELIVERY_DETAIL_ID = WDA.DELIVERY_DETAIL_ID
180         AND    WDD.SHIP_MODEL_COMPLETE_FLAG = 'Y'
181         AND    WDD.SOURCE_CODE = 'OE'
182         AND    WDD.CONTAINER_FLAG <> 'Y'
183         AND    WDA.DELIVERY_ID IS NOT NULL
184         AND    WDA.DELIVERY_ID = p_delivery_id
185         AND    WDD.TOP_MODEL_LINE_ID = top_model_line
186         GROUP  BY OEL.LINE_ID;
187 check_smc_rec check_smc%rowtype;
188 
189 cursor get_top_model IS
190        SELECT DISTINCT dd.top_model_line_id, dd.source_header_id , oe.ordered_quantity
191        FROM   wsh_delivery_details dd, wsh_delivery_assignments_v da, oe_order_lines_all oe
192        WHERE  da.delivery_id = p_delivery_id
193        AND    da.delivery_id IS NOT NULL
194        AND    dd.ship_model_complete_flag = 'Y'
195        AND    da.delivery_detail_id = dd.delivery_detail_id
196        AND    dd.source_code = 'OE'
197        AND    dd.container_flag <> 'Y'
198        AND    dd.top_model_line_id IS NOT NULL
199        AND    dd.top_model_line_id = oe.line_id ;
200 
201 cursor check_item (top_model_line NUMBER, header_id NUMBER) IS
202        SELECT line_id
203        FROM   oe_order_lines_all
204        WHERE  top_model_line_id = top_model_line
205        AND    NVL(shippable_flag,'N') = 'Y'
206        AND    NVL(cancelled_flag,'N') = 'N'    -- bug 4997888
207        AND    ( ato_line_id IS NULL OR
208                 ( ato_line_id IS NOT NULL AND item_type_code = 'CONFIG' )
209               )
210        MINUS
211        SELECT source_line_id
212        FROM   wsh_delivery_details dd, wsh_delivery_assignments_v da
213        WHERE  dd.source_header_id = header_id
214        AND    dd.source_code = 'OE'
215        AND    dd.container_flag <> 'Y'
216        AND    da.delivery_id IS NOT NULL
217        AND    dd.delivery_detail_id = da.delivery_detail_id
218        AND    da.delivery_id = p_delivery_id;
219 
220 cursor check_config (ato_id NUMBER) IS
221        SELECT inventory_item_id
222        FROM   oe_order_lines_all
223        WHERE  ato_line_id = ato_id
224        AND    NVL(shippable_flag,'N') = 'Y'
225        AND    item_type_code = 'CONFIG';
226 
227 cursor get_ato (top_model_line NUMBER) IS
228        SELECT ato_line_id
229        FROM   oe_order_lines_all
230        WHERE  top_model_line_id = top_model_line
231        AND    ato_line_id = line_id
232        AND    item_type_code NOT IN ('STANDARD','OPTION','INCLUDED');--Bug10166876
233        --Bug 10166876 :  Item_type_code is populated as 'Included' for order lines with ATO Item,
234        --         which are included in PTO Model(If non-Optional in BOM) or KIT Model.
235        --         Lines with item_type_code as 'Standard' ,'Option' or 'Included' should be
236        --         excluded for validation of ATO Configurations.
237 
238 
239 l_detail_id  NUMBER;
240 l_item_id    NUMBER;
241 qty          NUMBER;
242 prev_qty     NUMBER;
243 
244 --
245 l_debug_on BOOLEAN;
246 --
247 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_SMC';
248 --
249 BEGIN
250 
251    -- Bug 2284000 : Ship Confirm fails for Order with a Model and Cancelled Line
252    -- Bug 2284000 : Rewrote Logic to check for completeness of Model before Proportion checking
253 
254    --
255    -- Debug Statements
256    --
257    --
258    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
259    --
260    IF l_debug_on IS NULL
261    THEN
262        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
263    END IF;
264    --
265    IF l_debug_on THEN
266        WSH_DEBUG_SV.push(l_module_name);
267        --
268        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
269    END IF;
270    --
271    x_valid_flag := TRUE;
272 
273    FOR model_rec IN get_top_model LOOP
274 
275        -- Check for ATO Models and whether the Configured Item has been created or not
276 
277        --
278        IF l_debug_on THEN
279          WSH_DEBUG_SV.log(l_module_name,'Top Model Line ID',model_rec.top_model_line_id);
280        END IF;
281        --
282 
283        -- Get all the ATO Model IDs
284        FOR get_ato_rec IN get_ato(model_rec.top_model_line_id) LOOP
285          --
286          IF l_debug_on THEN
287            WSH_DEBUG_SV.log(l_module_name,'ATO Line ID',get_ato_rec.ato_line_id);
288          END IF;
289          --
290 
291            -- Check if the Configured Item is available, if not SMC is broken
292            OPEN check_config(get_ato_rec.ato_line_id);
293            FETCH check_config INTO l_item_id;
294            IF check_config%NOTFOUND THEN
295               x_valid_flag := FALSE;
296               CLOSE check_config;
297               EXIT;
298            END IF;
299            CLOSE check_config;
300 
301        END LOOP;
302 
303        IF x_valid_flag THEN
304 
305           -- Check if at least one of the Included Items for the Model is not selected for the delivery
306           -- This means SMC is broken and no more checks are needed
307           OPEN check_item (model_rec.top_model_line_id, model_rec.source_header_id);
308           FETCH check_item INTO l_item_id;
309           IF check_item%NOTFOUND THEN
310              l_item_id := 0;
311           END IF;
312           CLOSE check_item;
313 
314           IF l_item_id = 0 THEN
315 
316              prev_qty:=null; --bug 2709011
317 
318              -- All Included Items are selected
319              OPEN check_smc(model_rec.top_model_line_id);
320              FETCH check_smc INTO check_smc_rec;
321              WHILE (check_smc%FOUND) AND (x_valid_flag)
322              LOOP
323                  qty := (model_rec.ordered_quantity * check_smc_rec.child_shp_qty) / check_smc_rec.child_ord_qty;
324 
325                  IF l_debug_on THEN
326                    WSH_DEBUG_SV.log(l_module_name,'Ordered Qty',model_rec.ordered_quantity);
327                    WSH_DEBUG_SV.log(l_module_name,'Child Shp Qty',check_smc_rec.child_shp_qty);
328                    WSH_DEBUG_SV.log(l_module_name,'Child Ord Qty',check_smc_rec.child_ord_qty);
329                    WSH_DEBUG_SV.log(l_module_name,'Prev Qty',qty);
330                  END IF;
331 
332                  IF ( NVL(prev_qty,qty) <> qty ) THEN
333                      x_valid_flag := FALSE;
334                  ELSE
335                      prev_qty := qty;
336                  END IF;
337 
338                  FETCH check_smc INTO check_smc_rec;
339               END LOOP;
340               CLOSE check_smc;
341 
342           ELSE
343               x_valid_flag := FALSE;
344           END IF;
345 
346        END IF;
347 
348        IF NOT (x_valid_flag) THEN
349           EXIT;
350        END IF;
351 
352    END LOOP;
353 
354    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
355 
356 --
357 -- Debug Statements
358 --
359 IF l_debug_on THEN
360     WSH_DEBUG_SV.pop(l_module_name);
361 END IF;
362 --
363    EXCEPTION
364      WHEN others THEN
365 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_SMC');
366 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
367 
368 --
369 -- Debug Statements
370 --
371 IF l_debug_on THEN
372     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
373     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
374 END IF;
375 --
376 END check_smc;
377 
378 -----------------------------------------------------------------------------
379 --
380 -- Procedure:     Check_Arrival_Set
381 -- Parameters:    p_delivery_id, x_return_status
382 -- Description:   Checks if Arrival set is complete and returns a valid_flag
383 --                TRUE - if Arrival Set is complete
384 --                FALSE - if Arrival Set is not complete
385 --
386 -----------------------------------------------------------------------------
387 
388 PROCEDURE check_arrival_set( p_delivery_id IN NUMBER,
389                              x_valid_flag  OUT NOCOPY  BOOLEAN,
390                              x_return_status OUT NOCOPY  VARCHAR2) IS
391 
392 CURSOR check_arrival_set IS
393 SELECT 1 from dual
394 WHERE exists (
395    SELECT 1
396    FROM   wsh_delivery_details dd,
397           wsh_delivery_assignments_v da
398    WHERE  ((NVL(da.delivery_id, -1) <> p_delivery_id) OR
399            (da.delivery_id = p_delivery_id AND dd.requested_quantity > dd.shipped_quantity
400             AND da.delivery_id IS NOT NULL AND dd.shipped_quantity <> 0))
401    AND    da.delivery_detail_id = dd.delivery_detail_id
402    AND    dd.container_flag <> 'Y'
403    AND    dd.source_code = 'OE'
404    AND    (dd.arrival_set_id, dd.source_header_id) IN
405              (SELECT DISTINCT dd.arrival_set_id, dd.source_header_id
406               FROM   wsh_delivery_details dd,
407                      wsh_delivery_assignments_v da
408               WHERE  da.delivery_id = p_delivery_id
409               AND    da.delivery_id IS NOT NULL
410               AND    da.delivery_detail_id = dd.delivery_detail_id
411               AND    dd.container_flag <> 'Y'
412               AND    dd.source_code = 'OE'
413               AND    dd.arrival_set_id IS NOT NULL ) );
414 
415 l_detail_id NUMBER;
416 others exception;
417 
418 --
419 l_debug_on BOOLEAN;
420 --
421 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_ARRIVAL_SET';
422 --
423 BEGIN
424 
425    --
426    -- Debug Statements
427    --
428    --
429    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
430    --
431    IF l_debug_on IS NULL
432    THEN
433        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
434    END IF;
435    --
436    IF l_debug_on THEN
437        WSH_DEBUG_SV.push(l_module_name);
438        --
439        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
440    END IF;
441    --
442    x_valid_flag := TRUE;
443    OPEN check_arrival_set;
444    FETCH check_arrival_set INTO l_detail_id;
445 
446    IF (check_arrival_set%FOUND) THEN
447       x_valid_flag := FALSE;
448    ELSE
449       x_valid_flag := TRUE;
450    END IF;
451 
452    CLOSE check_arrival_set;
453 
454    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
455 
456 --
457 -- Debug Statements
458 --
459 IF l_debug_on THEN
460     WSH_DEBUG_SV.pop(l_module_name);
461 END IF;
462 --
463    EXCEPTION
464      WHEN others THEN
465            wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_ARRIVAL_SET');
466            x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
467 
468 --
469 -- Debug Statements
470 --
471 IF l_debug_on THEN
472     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
473     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
474 END IF;
475 --
476 END check_arrival_set;
477 
478 -----------------------------------------------------------------------------
479 --
480 -- Procedure:     Check_Del_Not_I_T
481 -- Parameters:    p_delivery_id, delivery_status, x_return_status
482 -- Description:   Checks if delivery is In-transit status and sets a warning
483 --
484 -----------------------------------------------------------------------------
485 
486 PROCEDURE check_del_not_i_t( p_delivery_id IN NUMBER,
487                      p_delivery_status IN VARCHAR2,
488 				 x_return_status OUT NOCOPY  VARCHAR2) IS
489 
490 --
491 l_debug_on BOOLEAN;
492 --
493 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DEL_NOT_I_T';
494 --
495 BEGIN
496 
497    --
498    -- Debug Statements
499    --
500    --
501    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
502    --
503    IF l_debug_on IS NULL
504    THEN
505        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
506    END IF;
507    --
508    IF l_debug_on THEN
509        WSH_DEBUG_SV.push(l_module_name);
510        --
511        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
512        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_STATUS',P_DELIVERY_STATUS);
513    END IF;
514    --
515    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
516 
517    IF (p_delivery_status = 'IT') THEN
518 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_DEL_IT');
519          --
520          -- Debug Statements
521          --
522          IF l_debug_on THEN
523              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
524          END IF;
525          --
526          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
527 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
528 	 wsh_util_core.add_message(x_return_status);
529    END IF;
530 
531 --
532 -- Debug Statements
533 --
534 IF l_debug_on THEN
535     WSH_DEBUG_SV.pop(l_module_name);
536 END IF;
537 --
538    EXCEPTION
539      WHEN others THEN
540 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DEL_NOT_I_T');
541 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
542 
543 --
544 -- Debug Statements
545 --
546 IF l_debug_on THEN
547     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
548     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
549 END IF;
550 --
551 END check_del_not_i_t;
552 
553 -----------------------------------------------------------------------------
554 --
555 -- Procedure:     Check_Released_Lines
556 -- Parameters:    p_delivery_id, rel_num, unrel_num, x_return_status
557 -- Description:   Checks if delivery has atleast one released and one unreleased lines and sets a warning
558 --
559 -----------------------------------------------------------------------------
560 
561 PROCEDURE check_released_lines( p_delivery_id IN NUMBER,
562                      rel_num IN NUMBER,
563                      unrel_num IN NUMBER,
564 				 x_return_status OUT NOCOPY  VARCHAR2) IS
565 
566 --
567 l_debug_on BOOLEAN;
568 --
569 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_RELEASED_LINES';
570 --
571 BEGIN
572 
573    --
574    -- Debug Statements
575    --
576    --
577    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
578    --
579    IF l_debug_on IS NULL
580    THEN
581        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
582    END IF;
583    --
584    IF l_debug_on THEN
585        WSH_DEBUG_SV.push(l_module_name);
586        --
587        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
588        WSH_DEBUG_SV.log(l_module_name,'REL_NUM',REL_NUM);
589        WSH_DEBUG_SV.log(l_module_name,'UNREL_NUM',UNREL_NUM);
590    END IF;
591    --
592    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
593 
594    IF (rel_num <> 0) AND (unrel_num > 0) THEN
595 
596       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
597       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
598 	 wsh_util_core.add_message(x_return_status);
599 
600    END IF;
601 
602 --
603 -- Debug Statements
604 --
605 IF l_debug_on THEN
606     WSH_DEBUG_SV.pop(l_module_name);
607 END IF;
608 --
609    EXCEPTION
610      WHEN others THEN
611 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_RELEASED_LINES');
612 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
613 
614 --
615 -- Debug Statements
616 --
617 IF l_debug_on THEN
618     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
619     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
620 END IF;
621 --
622 END check_released_lines;
623 
624 -----------------------------------------------------------------------------
625 --
626 -- Procedure:     Check_Del_Unpacked
627 -- Parameters:    p_delivery_id, p_cont_exists_flag, p_unpacked_flag, x_return_status
628 -- Description:   Checks if delivery has containers and is unpacked and issues a warning
629 --
630 -----------------------------------------------------------------------------
631 
632 PROCEDURE check_del_unpacked( p_delivery_id IN NUMBER,
633                      p_cont_exists_flag IN BOOLEAN,
634                      p_unpacked_flag IN BOOLEAN,
635 		     x_return_status OUT NOCOPY  VARCHAR2) IS
636 
637 --
638 l_debug_on BOOLEAN;
639 --
640 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DEL_UNPACKED';
641 --
642 BEGIN
643 
644    --
645    -- Debug Statements
646    --
647    --
648    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
649    --
650    IF l_debug_on IS NULL
651    THEN
652        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
653    END IF;
654    --
655    IF l_debug_on THEN
656        WSH_DEBUG_SV.push(l_module_name);
657        --
658        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
659        WSH_DEBUG_SV.log(l_module_name,'P_CONT_EXISTS_FLAG',P_CONT_EXISTS_FLAG);
660        WSH_DEBUG_SV.log(l_module_name,'P_UNPACKED_FLAG',P_UNPACKED_FLAG);
661    END IF;
662    --
663    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
664 
665    IF (p_unpacked_flag) THEN
666      FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PACK_ITEMS_UNPACKED');
667      --
668      -- Debug Statements
669      --
670      IF l_debug_on THEN
671          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
672      END IF;
673      --
674      FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
675      x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
676      wsh_util_core.add_message(x_return_status);
677    END IF;
678 
679 
680 
681 --
682 -- Debug Statements
683 --
684 IF l_debug_on THEN
685     WSH_DEBUG_SV.pop(l_module_name);
686 END IF;
687 --
688    EXCEPTION
689      WHEN others THEN
690 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DEL_UNPACKED');
691 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
692 
693 --
694 -- Debug Statements
695 --
696 IF l_debug_on THEN
697     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
698     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
699 END IF;
700 --
701 END check_del_unpacked;
702 
703 -----------------------------------------------------------------------------
704 --
705 -- Procedure:     Check_Del_Overfilled
706 -- Parameters:    p_delivery_id, p_cont_exists_flag, p_unpacked_flag, x_return_status
707 -- Description:   Checks if delivery has containers and does not have overfilled containers and issues a warning
708 --
709 -----------------------------------------------------------------------------
710 
711 PROCEDURE check_del_overfilled( p_delivery_id IN NUMBER,
712                      p_cont_exists_flag IN BOOLEAN,
713                      p_overfilled_flag IN BOOLEAN,
714 				 x_return_status OUT NOCOPY  VARCHAR2) IS
715 
716 --
717 l_debug_on BOOLEAN;
718 --
719 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DEL_OVERFILLED';
720 --
721 BEGIN
722 
723    --
724    -- Debug Statements
725    --
726    --
727    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
728    --
729    IF l_debug_on IS NULL
730    THEN
731        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
732    END IF;
733    --
734    IF l_debug_on THEN
735        WSH_DEBUG_SV.push(l_module_name);
736        --
737        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
738        WSH_DEBUG_SV.log(l_module_name,'P_CONT_EXISTS_FLAG',P_CONT_EXISTS_FLAG);
739        WSH_DEBUG_SV.log(l_module_name,'P_OVERFILLED_FLAG',P_OVERFILLED_FLAG);
740    END IF;
741    --
742    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
743 
744    IF (p_cont_exists_flag) THEN
745 
746       IF (p_overfilled_flag) THEN
747 	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONT_OVERPACKED');
748 	    --
749 	    -- Debug Statements
750 	    --
751 	    IF l_debug_on THEN
752 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
753 	    END IF;
754 	    --
755 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
756 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
757 	    wsh_util_core.add_message(x_return_status);
758       END IF;
759 
760    END IF;
761 
762 --
763 -- Debug Statements
764 --
765 IF l_debug_on THEN
766     WSH_DEBUG_SV.pop(l_module_name);
767 END IF;
768 --
769    EXCEPTION
770      WHEN others THEN
771 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DEL_OVERFILLED');
772 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
773 
774 --
775 -- Debug Statements
776 --
777 IF l_debug_on THEN
778     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
779     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
780 END IF;
781 --
782 END check_del_overfilled;
783 
784 -----------------------------------------------------------------------------
785 --
786 -- Procedure:     Check_Del_Underfilled
787 -- Parameters:    p_delivery_id, p_cont_exists_flag, p_underfilled_flag, x_return_status
788 -- Description:   Checks if delivery has containers and does not have under filled containers and issues a warning
789 --
790 -----------------------------------------------------------------------------
791 
792 PROCEDURE check_del_underfilled( p_delivery_id IN NUMBER,
793                      p_cont_exists_flag IN BOOLEAN,
794                      p_underfilled_flag IN BOOLEAN,
795 				 x_return_status OUT NOCOPY  VARCHAR2) IS
796 
797 --
798 l_debug_on BOOLEAN;
799 --
800 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DEL_UNDERFILLED';
801 --
802 BEGIN
803 
804    --
805    -- Debug Statements
806    --
807    --
808    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
809    --
810    IF l_debug_on IS NULL
811    THEN
812        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
813    END IF;
814    --
815    IF l_debug_on THEN
816        WSH_DEBUG_SV.push(l_module_name);
817        --
818        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
819        WSH_DEBUG_SV.log(l_module_name,'P_CONT_EXISTS_FLAG',P_CONT_EXISTS_FLAG);
820        WSH_DEBUG_SV.log(l_module_name,'P_UNDERFILLED_FLAG',P_UNDERFILLED_FLAG);
821    END IF;
822    --
823    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
824 
825    IF (p_cont_exists_flag) THEN
826 
827       IF (p_underfilled_flag) THEN
828 	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONT_UNDERPACKED');
829 	    --
830 	    -- Debug Statements
831 	    --
832 	    IF l_debug_on THEN
833 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
834 	    END IF;
835 	    --
836 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
837 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
838 	    wsh_util_core.add_message(x_return_status);
839 
840       END IF;
841 
842    END IF;
843 
844 --
845 -- Debug Statements
846 --
847 IF l_debug_on THEN
848     WSH_DEBUG_SV.pop(l_module_name);
849 END IF;
850 --
851    EXCEPTION
852      WHEN others THEN
853 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DEL_UNDERFILLED');
854 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
855 
856 --
857 -- Debug Statements
858 --
859 IF l_debug_on THEN
860     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
861     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
862 END IF;
863 --
864 END check_del_underfilled;
865 
866 
867 -----------------------------------------------------------------------------
868 --
869 -- Procedure:     Check_Del_Final_Dest
870 -- Parameters:    p_delivery_id, p_final_dropoff_id, p_ultimate_dropoff_id, x_return_status
871 -- Description:   Checks if delivery final destination matches ultimate dropoff destination and returns a warning if it does not
872 --
873 -----------------------------------------------------------------------------
874 
875 PROCEDURE check_del_final_dest( p_delivery_id IN NUMBER,
876                      p_final_dropoff_id IN NUMBER,
877                      p_ultimate_dropoff_id IN NUMBER,
878 				 x_return_status OUT NOCOPY  VARCHAR2) IS
879 
880 --
881 l_debug_on BOOLEAN;
882 --
883 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DEL_FINAL_DEST';
884 --
885 BEGIN
886 
887    --
888    -- Debug Statements
889    --
890    --
891    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
892    --
893    IF l_debug_on IS NULL
894    THEN
895        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
896    END IF;
897    --
898    IF l_debug_on THEN
899        WSH_DEBUG_SV.push(l_module_name);
900        --
901        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
902        WSH_DEBUG_SV.log(l_module_name,'P_FINAL_DROPOFF_ID',P_FINAL_DROPOFF_ID);
903        WSH_DEBUG_SV.log(l_module_name,'P_ULTIMATE_DROPOFF_ID',P_ULTIMATE_DROPOFF_ID);
904    END IF;
905    --
906    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
907 
908    IF (p_final_dropoff_id <> p_ultimate_dropoff_id) THEN
909 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_ULTIMATE_DROPOFF');
910 	 --
911 	 -- Debug Statements
912 	 --
913 	 IF l_debug_on THEN
914 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
915 	 END IF;
916 	 --
917 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
918       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
919 	 wsh_util_core.add_message(x_return_status);
920    END IF;
921 
922 --
923 -- Debug Statements
924 --
925 IF l_debug_on THEN
926     WSH_DEBUG_SV.pop(l_module_name);
927 END IF;
928 --
929    EXCEPTION
930      WHEN others THEN
931 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DEL_FINAL_DEST');
932 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
933 
934 --
935 -- Debug Statements
936 --
937 IF l_debug_on THEN
938     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
939     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
940 END IF;
941 --
942 END check_del_final_dest;
943 
944 -----------------------------------------------------------------------------
945 --
946 -- Procedure:     Check_Calendar
947 -- Parameters:    p_entity_type, p_ship_date, p_ship_assoc_type, p_ship_location_id,
948 --                p_freight_code, p_freight_org_id,
949 --			   p_receive_date, p_receive_assoc_type, p_receive_location_id,
950 --			   x_return_status
951 -- Description:   Checks if p_ship_date and p_rec_date are valid for the calendar
952 --                at location p_location_id
953 --                Values for p_entity_type are
954 --                    DELIVERY
955 --                Values for p_assoc_type are
956 --                    CUSTOMER
957 --                    VENDOR
958 --                    ORG
959 --                    CARRIER
960 --
961 -----------------------------------------------------------------------------
962 
963 PROCEDURE Check_Calendar ( p_entity_type     		IN  VARCHAR2,
964                            p_entity_id                 IN  NUMBER,
965 					  p_ship_date               	IN  DATE,
966 					  p_ship_assoc_type         	IN  VARCHAR2,
967 					  p_ship_location_id     	IN  NUMBER,
968 					  p_freight_code       		IN  VARCHAR2,
969 					  p_freight_org_id     		IN  NUMBER,
970 					  p_receive_date              IN  DATE,
971 					  p_receive_assoc_type        IN  VARCHAR2,
972 					  p_receive_location_id       IN  NUMBER,
973 					  p_update_flag               IN  VARCHAR2,
974 					  x_return_status			OUT NOCOPY  VARCHAR2) IS
975 l_msg_count 	NUMBER;
976 l_msg_data     VARCHAR2(2000);
977 l_return_code  NUMBER;
978 l_suggest_ship_date    DATE;
979 l_suggest_receive_date DATE;
980 l_temp_suggest_receive_date DATE;--Bug 8687915:New local variable
981 
982 --
983 l_debug_on BOOLEAN;
984 --
985 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_CALENDAR';
986 --
987 BEGIN
988 
989    --
990    -- Debug Statements
991    --
992    --
993    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
994    --
995    IF l_debug_on IS NULL
996    THEN
997        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
998    END IF;
999    --
1000    IF l_debug_on THEN
1001        WSH_DEBUG_SV.push(l_module_name);
1002        --
1003        WSH_DEBUG_SV.log(l_module_name,'P_ENTITY_TYPE',P_ENTITY_TYPE);
1004        WSH_DEBUG_SV.log(l_module_name,'P_ENTITY_ID',P_ENTITY_ID);
1005        WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE',P_SHIP_DATE);
1006        WSH_DEBUG_SV.log(l_module_name,'P_SHIP_ASSOC_TYPE',P_SHIP_ASSOC_TYPE);
1007        WSH_DEBUG_SV.log(l_module_name,'P_SHIP_LOCATION_ID',P_SHIP_LOCATION_ID);
1008        WSH_DEBUG_SV.log(l_module_name,'P_FREIGHT_CODE',P_FREIGHT_CODE);
1009        WSH_DEBUG_SV.log(l_module_name,'P_FREIGHT_ORG_ID',P_FREIGHT_ORG_ID);
1010        WSH_DEBUG_SV.log(l_module_name,'P_RECEIVE_DATE',P_RECEIVE_DATE);
1011        WSH_DEBUG_SV.log(l_module_name,'P_RECEIVE_ASSOC_TYPE',P_RECEIVE_ASSOC_TYPE);
1012        WSH_DEBUG_SV.log(l_module_name,'P_RECEIVE_LOCATION_ID',P_RECEIVE_LOCATION_ID);
1013        WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
1014    END IF;
1015    --
1016    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1017 
1018    IF (p_entity_type = 'DELIVERY') THEN
1019 
1020 		  --
1021 		  -- Debug Statements
1022 		  --
1023 		  IF l_debug_on THEN
1024 		      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CAL_ASG_VALIDATIONS.TRANSPORT_DATES',WSH_DEBUG_SV.C_PROC_LEVEL);
1025 		  END IF;
1026 		  --
1027 		  wsh_cal_asg_validations.transport_dates(
1028                    p_api_version_number 		=> 1.0
1029                  , p_init_msg_list     			=> FND_API.G_FALSE
1030                  , x_return_status    			=> x_return_status
1031                  , x_msg_count       			=> l_msg_count
1032                  , x_msg_data       			=> l_msg_data
1033                  , p_priority      			=> 'SHIP'
1034                  , p_ship_date    				=> p_ship_date
1035                  , p_ship_assoc_type    		=> p_ship_assoc_type
1036                  , p_ship_location_id    		=> p_ship_location_id
1037                  , p_ship_vendor_site_id		=> to_number(NULL)
1038                  , p_ship_customer_site_use_id 	=> to_number(NULL)
1039                  , p_ship_time_matters     		=> FALSE
1040                  , p_freight_code     			=> p_freight_code
1041                  , p_freight_org_id  			=> p_freight_org_id
1042                  , p_receive_date   			=> p_receive_date
1043                  , p_receive_assoc_type			=> p_receive_assoc_type
1044                  , p_receive_location_id		=> p_receive_location_id
1045                  , p_receive_vendor_site_id  	=> to_number(NULL)
1046                  , p_receive_customer_site_use_id	=> to_number(NULL)
1047                  , p_receive_time_matters   		=> FALSE
1048                  , x_return_code           		=> l_return_code
1049                  , x_suggest_ship_date    		=> l_suggest_ship_date
1050                  , x_suggest_receive_date		=> l_suggest_receive_date
1051                  , p_primary_threshold  		=> 10
1052                  , p_secondary_threshold		=> 10
1053 			  );
1054 
1055           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) OR (l_return_code = 0) THEN
1056 		   --
1057 		   -- Debug Statements
1058 		   --
1059 		   IF l_debug_on THEN
1060 		       WSH_DEBUG_SV.pop(l_module_name);
1061 		   END IF;
1062 		   --
1063 		   RETURN;
1064           END IF;
1065 
1066 		IF (l_return_code IN (1,2,3,4)) AND (l_suggest_ship_date <> p_ship_date) THEN
1067 		   IF (p_update_flag <> 'Y') THEN
1068 		      FND_MESSAGE.SET_NAME('WSH','WSH_CAL_SHIP_DATE_ALT');
1069              ELSE
1070 		      FND_MESSAGE.SET_NAME('WSH','WSH_CAL_SHIP_DATE_ALT_UPDATE');
1071 		   END IF;
1072 	        --
1073 	        -- Debug Statements
1074 	        --
1075 	        IF l_debug_on THEN
1076 	            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1077 	        END IF;
1078 	        --
1079 	        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_entity_id));
1080 		   FND_MESSAGE.SET_TOKEN('SHIP',fnd_date.date_to_chardate(p_ship_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1081 		   FND_MESSAGE.SET_TOKEN('SUGGESTED',fnd_date.date_to_chardate(l_suggest_ship_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1082 		   x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1083 		   wsh_util_core.add_message(x_return_status);
1084           END IF;
1085                    --Bug 8687915 :Handling Return codes appropriately.
1086  	           --             Return_Code 4 : No valid date according to Receiving Calendar in the next 10 days.
1087  	           --             Return_Code 5 : No valid date according to Shipping/Carrier Calendar in the next 10 days.
1088                    --             When Return Code is 5 (Valid Ship Date  out of tolerence),
1089                    --             messages related to Suggested Receiving Date should not be shown )
1090                 l_temp_suggest_receive_date := p_receive_date+(l_suggest_ship_date-p_ship_date);
1091 		IF (l_return_code IN (1,2,3)) AND (l_suggest_receive_date <> p_receive_date) THEN
1092                     --Bug 8687915: If drop_off date has changed due to a change in 'pick_up' date and NOT due to 'RCV Calendar'
1093                     --             message should NOT talk about Rcv calendar.
1094                     IF l_suggest_ship_date <> p_ship_date and l_suggest_receive_date = l_temp_suggest_receive_date THEN
1095                         IF (p_update_flag <> 'Y') THEN
1096                             FND_MESSAGE.SET_NAME('WSH','WSH_REC_DATE_ALT');
1097                         ELSE
1098                             FND_MESSAGE.SET_NAME('WSH','WSH_REC_DATE_ALT_UPDATE');
1099                         END IF;
1100                         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_entity_id));
1101                         FND_MESSAGE.SET_TOKEN('RECEIVE',fnd_date.date_to_chardate(p_receive_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1102                         FND_MESSAGE.SET_TOKEN('SUGGESTED',fnd_date.date_to_chardate(l_suggest_receive_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1103                     ELSE
1104                         IF (p_update_flag <> 'Y') THEN
1105                             FND_MESSAGE.SET_NAME('WSH','WSH_CAL_REC_DATE_ALT');
1106                         ELSE
1107                             FND_MESSAGE.SET_NAME('WSH','WSH_CAL_REC_DATE_ALT_UPDATE');
1108                         END IF;
1109                         FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_entity_id));
1110                         --Bug 8687915: Passing the date validated against Receiving Calendar, instead of p_recv_date.
1111                         FND_MESSAGE.SET_TOKEN('RECEIVE',fnd_date.date_to_chardate(l_temp_suggest_receive_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1112                         FND_MESSAGE.SET_TOKEN('SUGGESTED',fnd_date.date_to_chardate(l_suggest_receive_date,calendar_aware=>FND_DATE.calendar_aware_alt));
1113                     END IF;
1114 	        --
1115 	        -- Debug Statements
1116 	        --
1117 	        IF l_debug_on THEN
1118 	            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1119 	        END IF;
1120 	        --
1121 		   x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1122 		   wsh_util_core.add_message(x_return_status);
1123           END IF;
1124 
1125 		IF (l_return_code = 6) THEN
1126 		   FND_MESSAGE.SET_NAME('WSH','WSH_CAL_INV_DATES');
1127 	        --
1128 	        -- Debug Statements
1129 	        --
1130 	        IF l_debug_on THEN
1131 	            WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1132 	        END IF;
1133 	        --
1134 	        FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_entity_id));
1135 		   x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1136 		   wsh_util_core.add_message(x_return_status);
1137           END IF;
1138 
1139           IF (p_update_flag = 'Y') THEN
1140 
1141 		   IF (l_suggest_ship_date <> p_ship_date) THEN
1142 			 UPDATE wsh_new_deliveries
1143 			 SET    initial_pickup_date = l_suggest_ship_date
1144 			 WHERE  delivery_id = p_entity_id;
1145              END IF;
1146 
1147 		   IF (l_suggest_receive_date <> p_receive_date) THEN
1148 			 UPDATE wsh_new_deliveries
1149 			 SET    ultimate_dropoff_date = l_suggest_receive_date
1150 			 WHERE  delivery_id = p_entity_id;
1151              END IF;
1152 
1153           END IF;
1154 
1155    END IF;
1156 
1157 --
1158 -- Debug Statements
1159 --
1160 IF l_debug_on THEN
1161     WSH_DEBUG_SV.pop(l_module_name);
1162 END IF;
1163 --
1164    EXCEPTION
1165      WHEN others THEN
1166 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_CALENDAR');
1167 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1168 
1169 --
1170 -- Debug Statements
1171 --
1172 IF l_debug_on THEN
1173     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1174     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1175 END IF;
1176 --
1177 END Check_Calendar;
1178 
1179 -----------------------------------------------------------------------------
1180 --
1181 -- Procedure:     Check_Plan
1182 -- Parameters:    delivery_id, x_return_status
1183 -- Description:   Checks for Plan action pre-requisites which are
1184 --          - Delivery status is OPEN or PACKED
1185 -- 		  - At least one delivery detail is assigned
1186 --		  - SMC models must be together [warning]
1187 --		  - Ship Sets must be complete [warning]
1188 --                - Delivery flow on trip/s is valid [error/warning]
1189 --
1190 -----------------------------------------------------------------------------
1191 
1192 PROCEDURE Check_Plan ( p_delivery_id 		IN  NUMBER,
1193 		       x_return_status 		OUT NOCOPY  VARCHAR2,
1194                        p_called_for_sc          IN BOOLEAN default false) IS
1195 CURSOR delivery_info IS
1196 SELECT status_code,
1197        planned_flag,
1198 	  organization_id,
1199 	  ship_method_code,
1200 	  initial_pickup_date,
1201 	  ultimate_dropoff_date,
1202 	  initial_pickup_location_id,
1203 	  ultimate_dropoff_location_id,
1204    nvl(shipment_direction,'O') shipment_direction,
1205           delivery_type
1206 FROM   wsh_new_deliveries
1207 WHERE  delivery_id = p_delivery_id;
1208 
1209 
1210 CURSOR delivery_details IS
1211 SELECT da.delivery_detail_id
1212 FROM   wsh_delivery_assignments_v da,
1213        wsh_delivery_details dd
1214 WHERE  dd.delivery_detail_id = da.delivery_detail_id AND
1215 	  da.delivery_id = p_delivery_id AND
1216 	  da.delivery_id IS NOT NULL AND
1217 	  nvl(dd.container_flag,'N') <> 'Y';
1218 
1219 ---BUG No:4241880.Cursor changed
1220   CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
1221   SELECT freight_code
1222   FROM   wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
1223   WHERE  wc.carrier_id=wcs.carrier_id AND
1224 	 wcs.carrier_service_id=wocs.carrier_service_id AND
1225 	 wcs.ship_method_code = p_ship_method_code AND
1226 	 wocs.organization_id = p_organization_id;
1227 ---BUG No:4241880.Cursor changed ends
1228 
1229 /*
1230 CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
1231 SELECT freight_code
1232 FROM   wsh_carrier_ship_methods_v
1233 WHERE  ship_method_code = p_ship_method_code AND
1234        organization_id = p_organization_id;
1235 */
1236 
1237 l_detail_id NUMBER;
1238 l_valid_flag BOOLEAN;
1239 l_status_code VARCHAR2(2);
1240 l_planned_flag VARCHAR2(1);
1241 l_return_status VARCHAR2(1);
1242 l_org_id      NUMBER;
1243 l_ship_method_code VARCHAR2(30);
1244 l_freight_code VARCHAR2(30);
1245 l_rec_date    DATE;
1246 l_ship_date   DATE;
1247 l_ship_from_location NUMBER;
1248 l_ship_to_location NUMBER;
1249 l_delivery_type VARCHAR2(30);
1250 --6156495  : Added local variables
1251 l_temp_ship_date   DATE;
1252 l_temp_rec_date    DATE;
1253 
1254 NO_FREIGHT_CODE EXCEPTION;
1255 
1256 --
1257 l_debug_on BOOLEAN;
1258 --
1259 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_PLAN';
1260 --
1261 l_shipping_control     VARCHAR2(30);
1262 l_routing_response_id  NUMBER;
1263 l_routing_request_flag VARCHAR2(30);
1264 l_shipment_direction   VARCHAR2(30);
1265 l_ship_assoc_type      VARCHAR2(30);
1266 l_receive_assoc_type      VARCHAR2(30);
1267 -- 10365977:
1268 l_chk_shp_rcvg_calendar VARCHAR2(1) := 'Y';
1269 BEGIN
1270 
1271    --
1272    -- Debug Statements
1273    --
1274    --
1275    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1276    --
1277    IF l_debug_on IS NULL
1278    THEN
1279        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1280    END IF;
1281    --
1282    IF l_debug_on THEN
1283        WSH_DEBUG_SV.push(l_module_name);
1284        --
1285        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1286        WSH_DEBUG_SV.log(l_module_name,'p_called_for_sc',p_called_for_sc);
1287    END IF;
1288    --
1289    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1290 
1291    OPEN delivery_info;
1292    FETCH delivery_info INTO l_status_code,
1293 					   l_planned_flag,
1294 					   l_org_id,
1295                                            l_ship_method_code,
1296 					   l_ship_date,
1297 					   l_rec_date,
1298 					   l_ship_from_location,
1299 					   l_ship_to_location,
1300                    l_shipment_direction,   -- J-IB-NPARIKH
1301                    l_delivery_type;
1302 
1303    IF (delivery_info%NOTFOUND) THEN
1304 	 CLOSE delivery_info;
1305 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
1306 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1307 	 wsh_util_core.add_message(x_return_status);
1308 	 --
1309 	 -- Debug Statements
1310 	 --
1311 	 IF l_debug_on THEN
1312 	     WSH_DEBUG_SV.pop(l_module_name);
1313 	 END IF;
1314 	 --
1315 	 RETURN;
1316    ELSE
1317      IF l_ship_method_code IS NULL THEN
1318           l_freight_code:=null;
1319      ELSE
1320           OPEN get_freight(l_ship_method_code,l_org_id);
1321           FETCH get_freight INTO l_freight_code;
1322 
1323           IF (get_freight%NOTFOUND) THEN
1324             --bug 3389356 ship method shud be associated with org for a contents firm - this check
1325             --need not be performed here - LOV is restricting, for public api's restrict
1326             --in public api itself for create/update
1327             --don't raise error here
1328             l_freight_code:=null;
1329           END IF;
1330 
1331           CLOSE get_freight;
1332      END IF;
1333    END IF;
1334 
1335    CLOSE delivery_info;
1336 
1337    IF (l_planned_flag IN ('Y','F')) THEN
1338 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1339 	 --
1340 	 -- Debug Statements
1341 	 --
1342 	 IF l_debug_on THEN
1343 	     WSH_DEBUG_SV.pop(l_module_name);
1344 	 END IF;
1345 	 --
1346 	 RETURN;
1347    END IF;
1348 
1349    --removed code causing error for closed, in-transit dels
1350 
1351    IF l_delivery_type = 'STANDARD' THEN
1352 
1353      OPEN  delivery_details;
1354      FETCH delivery_details INTO l_detail_id;
1355 
1356      IF (delivery_details%NOTFOUND) THEN
1357 	 CLOSE delivery_details;
1358 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_DETAILS');
1359 	 --
1360 	 -- Debug Statements
1361 	 --
1362 	 IF l_debug_on THEN
1363 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1364 	 END IF;
1365 	 --
1366 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
1367 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1368 	 wsh_util_core.add_message(x_return_status);
1369         --
1370         -- Debug Statements
1371         --
1372         IF l_debug_on THEN
1373           WSH_DEBUG_SV.pop(l_module_name);
1374         END IF;
1375         --
1376         RETURN;
1377      END IF;
1378 
1379      CLOSE delivery_details;
1380    END IF;
1381 
1382  IF  l_shipment_direction IN ('O','IO') --J-IB-NPARIKH
1383  THEN
1384  --{
1385    --
1386    -- Ship-model complete and ship-set checks are required only
1387    -- for outbound (O/IO) deliveries
1388    --
1389 
1390    -- Bug 4519097 : The following IF condition is commong for both ship set and smc.So
1391    -- moved the END IF of the IF stmt after the check on shipsets is also done.
1392 -- TPA change
1393    IF NOT NVL(p_called_for_sc,FALSE)  THEN --{
1394       --
1395       -- Debug Statements
1396       --
1397       IF l_debug_on THEN
1398           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_SMC',WSH_DEBUG_SV.C_PROC_LEVEL);
1399       END IF;
1400       --
1401       wsh_tpa_delivery_pkg.check_smc( p_delivery_id, l_valid_flag, l_return_status);
1402 
1403       IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1404 	    x_return_status := l_return_status;
1405 	    --
1406 	    -- Debug Statements
1407 	    --
1408 	    IF l_debug_on THEN
1409 	        WSH_DEBUG_SV.pop(l_module_name);
1410 	    END IF;
1411 	    --
1412 	    RETURN;
1413       END IF;
1414 
1415       IF NOT (l_valid_flag) THEN
1416          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SMC_INCOMPLETE');
1417 	 IF l_debug_on THEN
1418 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1419 	 END IF;
1420 	 --
1421 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
1422 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1423 	 WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
1424       END IF;
1425 
1426      --
1427      -- Debug Statements
1428      --
1429      IF l_debug_on THEN
1430        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_SHIP_SET',WSH_DEBUG_SV.C_PROC_LEVEL);
1431      END IF;
1432      --
1433      wsh_tpa_delivery_pkg.check_ship_set( p_delivery_id, l_valid_flag, l_return_status);
1434 
1435      IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1436 	 x_return_status := l_return_status;
1437 	 --
1438 	 -- Debug Statements
1439 	 --
1440 	 IF l_debug_on THEN
1441 	     WSH_DEBUG_SV.pop(l_module_name);
1442 	 END IF;
1443 	 --
1444 	 RETURN;
1445      END IF;
1446 
1447      IF NOT (l_valid_flag) THEN
1448         FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SHIP_SET_INCOMPLETE');
1449 
1450         -- Bug 2429632 Added a  Delivery Name Token to the above error message
1451            --
1452            -- Debug Statements
1453            --
1454            IF l_debug_on THEN
1455                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1456            END IF;
1457            --
1458            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
1459         -- End Bug 2429632
1460 
1461 	x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1462 	WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
1463      END IF;
1464      --
1465    END IF;
1466    --}
1467  --}
1468  END IF;
1469 /* H integration anxsharm use name of parameters */
1470    --
1471    -- Debug Statements
1472    --
1473    IF l_debug_on THEN
1474        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
1475    END IF;
1476    --
1477    wsh_new_delivery_actions.update_leg_sequence(
1478      p_delivery_id => p_delivery_id,
1479      x_return_status => l_return_status);
1480 
1481    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1482 	 x_return_status := l_return_status;
1483 	 --
1484 	 -- Debug Statements
1485 	 --
1486 	 IF l_debug_on THEN
1487 	     WSH_DEBUG_SV.pop(l_module_name);
1488 	 END IF;
1489 	 --
1490 	 RETURN;
1491    END IF;
1492 
1493 -- 10365977: before Call to  -- Check for transportation calendar requirements
1494 
1495 FND_PROFILE.Get('WSH_CHK_SHPG_RCV_CAL', l_chk_shp_rcvg_calendar);
1496 
1497 IF l_debug_on THEN
1498        WSH_DEBUG_SV.log(l_module_name,'profile:: l_chk_shp_rcvg calendar : ', l_chk_shp_rcvg_calendar);
1499 END IF;
1500 
1501 -- 10365977: Only if this profile has Value of N it will Skip Calendar Check (Y and Null will enforce check Calendar)
1502 IF ( nvl(l_chk_shp_rcvg_calendar, 'Y')  = 'Y' ) THEN
1503 --{
1504 
1505 -- Check for transportation calendar requirements
1506 
1507     -- J-IB-NPARIKH-{
1508     IF l_shipment_Direction = 'I'
1509     THEN
1510         l_ship_assoc_type       := 'VENDOR';
1511         l_receive_assoc_type    := 'ORG';
1512     ELSIF l_shipment_direction = 'D'
1513     THEN
1514         l_ship_assoc_type       := 'VENDOR';
1515         l_receive_assoc_type    := 'CUSTOMER';
1516     ELSE
1517 -- modified ship_assoc type to 'HR_LOCATION' and receive_assoc_type to 'CUSTOMER_SITE' for bug 5880742
1518         l_ship_assoc_type       := 'HR_LOCATION';
1519         l_receive_assoc_type    := 'CUSTOMER_SITE';
1520     END IF;
1521     -- J-IB-NPARIKH-}
1522   --6156495  :Determining the dates to be validated against the shipping and Receiving Calendars
1523    IF G_ACT_DEPT_DATE IS NOT NULL
1524    THEN
1525        l_temp_ship_date := G_ACT_DEPT_DATE;
1526        IF l_rec_date > G_ACT_DEPT_DATE
1527        THEN
1528         l_temp_rec_date := l_rec_date;
1529        ELSE
1530         l_temp_rec_date := G_ACT_DEPT_DATE;
1531        END IF;
1532     ELSE
1533        l_temp_ship_date := l_ship_date;
1534        l_temp_rec_date  := l_rec_date;
1535     END IF;
1536 
1537    -- TPA Change
1538    --
1539    -- Debug Statements
1540    --
1541    IF l_debug_on THEN
1542        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_CALENDAR',WSH_DEBUG_SV.C_PROC_LEVEL);
1543    END IF;
1544    --
1545    wsh_tpa_delivery_pkg.check_calendar(p_entity_type    		=> 'DELIVERY',
1546                   p_entity_id     			=> p_delivery_id,
1547 --			   p_ship_date    			=> l_ship_date,--6156495
1548 			   p_ship_date    			=> l_temp_ship_date,
1549            p_ship_assoc_type        => l_ship_assoc_type, --'ORG',
1550 			   p_ship_location_id		=> l_ship_from_location,
1551 			   p_freight_code   		=> l_freight_code,
1552 			   p_freight_org_id			=> l_org_id,
1553 --			   p_receive_date 			=> l_rec_date, --6156495
1554 			   p_receive_date 			=> l_temp_rec_date,
1555            p_receive_assoc_type     => l_receive_assoc_type, --'CUSTOMER',
1556 			   p_receive_location_id		=> l_ship_to_location,
1557 			   p_update_flag       		=> 'Y',
1558 			   x_return_status			=> l_return_status);
1559 
1560     IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1561 	   x_return_status := l_return_status;
1562     END IF;
1563 -- } --- check shp-rcvg-calendar
1564 END IF;
1565 --
1566 -- Debug Statements
1567 --
1568 IF l_debug_on THEN
1569     WSH_DEBUG_SV.pop(l_module_name);
1570 END IF;
1571 --
1572    EXCEPTION
1573      WHEN   NO_FREIGHT_CODE THEN
1574             fnd_message.set_name('WSH','WSH_FREIGHT_CODE_NOT_FOUND');
1575             wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
1576             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1577             --
1578             -- Debug Statements
1579             --
1580             IF l_debug_on THEN
1581                 WSH_DEBUG_SV.logmsg(l_module_name,'NO_FREIGHT_CODE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1582                 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NO_FREIGHT_CODE');
1583             END IF;
1584             --
1585      WHEN others THEN
1586 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_PLAN');
1587 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1588 
1589 --
1590 -- Debug Statements
1591 --
1592 IF l_debug_on THEN
1593     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1594     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1595 END IF;
1596 --
1597 END Check_Plan;
1598 
1599 
1600 -----------------------------------------------------------------------------
1601 --
1602 -- Procedure:     Check_Unplan
1603 -- Parameters:    p_delivery_id, x_return_status
1604 -- Description:   Checks for Unplan action pre-requisites which are
1605 -- 		  - Delivery status is OPEN or IN-TRANSIT
1606 --                - Delivery is planned
1607 --
1608 -----------------------------------------------------------------------------
1609 
1610 PROCEDURE Check_Unplan ( p_delivery_id 		IN  NUMBER,
1611 		         x_return_status 	OUT NOCOPY  VARCHAR2) IS
1612 
1613 CURSOR delivery_status IS
1614 SELECT status_code,
1615 	  planned_flag,
1616         nvl(shipment_direction,'O') shipment_direction   -- J-IB-NPARIKH
1617 FROM   wsh_new_deliveries
1618 WHERE  delivery_id = p_delivery_id;
1619 
1620 l_status_code VARCHAR2(2);
1621 l_planned_flag VARCHAR2(1);
1622 
1623 --
1624 l_debug_on BOOLEAN;
1625 --
1626 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_UNPLAN';
1627 --
1628 --
1629 l_return_status        VARCHAR2(10);
1630 l_shipping_control     VARCHAR2(30);
1631 l_routing_response_id  NUMBER;
1632 l_routing_request_flag VARCHAR2(30);
1633 l_shipment_direction   VARCHAR2(30);
1634 BEGIN
1635 
1636    --
1637    -- Debug Statements
1638    --
1639    --
1640    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1641    --
1642    IF l_debug_on IS NULL
1643    THEN
1644        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1645    END IF;
1646    --
1647    IF l_debug_on THEN
1648        WSH_DEBUG_SV.push(l_module_name);
1649        --
1650        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1651    END IF;
1652    --
1653    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1654 
1655    OPEN delivery_status;
1656    FETCH delivery_status INTO l_status_code, l_planned_flag,l_shipment_direction;
1657 
1658    IF (delivery_status%NOTFOUND) THEN
1659 	 CLOSE delivery_status;
1660 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
1661 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1662 	 wsh_util_core.add_message(x_return_status);
1663 	 --
1664 	 -- Debug Statements
1665 	 --
1666 	 IF l_debug_on THEN
1667 	     WSH_DEBUG_SV.pop(l_module_name);
1668 	 END IF;
1669 	 --
1670 	 RETURN;
1671    END IF;
1672 
1673    CLOSE delivery_status;
1674 
1675    IF (l_planned_flag NOT IN ('Y','F')) THEN
1676 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1677 	 --
1678 	 -- Debug Statements
1679 	 --
1680 	 IF l_debug_on THEN
1681 	     WSH_DEBUG_SV.pop(l_module_name);
1682 	 END IF;
1683 	 --
1684 	 RETURN;
1685    END IF;
1686 
1687    --tkt removed code for raising error for IT CL cases
1688 
1689 --
1690 -- Debug Statements
1691 --
1692 IF l_debug_on THEN
1693     WSH_DEBUG_SV.pop(l_module_name);
1694 END IF;
1695 --
1696    EXCEPTION
1697      WHEN others THEN
1698 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_UNPLAN');
1699 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1700 
1701 --
1702 -- Debug Statements
1703 --
1704 IF l_debug_on THEN
1705     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1706     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1707 END IF;
1708 --
1709 END Check_Unplan;
1710 
1711 
1712 
1713 -----------------------------------------------------------------------------
1714 --
1715 -- Procedure:     Check_Tender_Load
1716 -- Parameters:    p_delivery_leg_id, x_return_status
1717 -- Description:   Checks for Tender Load action pre-requisites which are
1718 -- 		  - Delivery satisfies rules for Plan
1719 --                - Weight/Volume information must be specified
1720 --
1721 -----------------------------------------------------------------------------
1722 
1723 PROCEDURE Check_Tender_Load ( p_delivery_leg_id IN  NUMBER,
1724 		             x_return_status 	OUT NOCOPY  VARCHAR2) IS
1725 
1726 CURSOR delivery_details IS
1727 SELECT dl.delivery_id,
1728 	  dg.gross_weight,
1729 	  dg.net_weight,
1730 	  dg.weight_uom_code,
1731 	  dg.volume,
1732 	  dg.volume_uom_code
1733 FROM   wsh_delivery_legs dg,
1734 	  wsh_new_deliveries dl
1735 WHERE  dl.delivery_id = dg.delivery_id AND
1736 	  dg.delivery_leg_id = p_delivery_leg_id;
1737 
1738 others        EXCEPTION;
1739 l_delivery_id NUMBER;
1740 l_gr_weight   NUMBER;
1741 l_net_weight  NUMBER;
1742 l_wt_uom      VARCHAR2(3);
1743 l_volume      NUMBER;
1744 l_vol_uom     VARCHAR2(3);
1745 
1746 --
1747 l_debug_on BOOLEAN;
1748 --
1749 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_TENDER_LOAD';
1750 --
1751 BEGIN
1752 
1753    --
1754    -- Debug Statements
1755    --
1756    --
1757    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1758    --
1759    IF l_debug_on IS NULL
1760    THEN
1761        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1762    END IF;
1763    --
1764    IF l_debug_on THEN
1765        WSH_DEBUG_SV.push(l_module_name);
1766        --
1767        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_LEG_ID',P_DELIVERY_LEG_ID);
1768    END IF;
1769    --
1770    OPEN delivery_details;
1771    FETCH delivery_details INTO l_delivery_id, l_gr_weight, l_net_weight, l_wt_uom, l_volume, l_vol_uom;
1772 
1773    IF (delivery_details%NOTFOUND) THEN
1774       CLOSE delivery_details;
1775 	 raise others;
1776    END IF;
1777    CLOSE delivery_details;
1778 
1779    Check_Plan( l_delivery_id, x_return_status);
1780 
1781    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1782 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1783 	 --
1784 	 -- Debug Statements
1785 	 --
1786 	 IF l_debug_on THEN
1787 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1788 	 END IF;
1789 	 --
1790 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
1791 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1792 	 wsh_util_core.add_message(x_return_status);
1793 	 --
1794 	 -- Debug Statements
1795 	 --
1796 	 IF l_debug_on THEN
1797 	     WSH_DEBUG_SV.pop(l_module_name);
1798 	 END IF;
1799 	 --
1800 	 RETURN;
1801    END IF;
1802 
1803    IF (l_gr_weight IS NULL) or (l_gr_weight = 0) or (l_wt_uom IS NULL) THEN
1804 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LT_WT_VOL_MISSING');
1805 	 --
1806 	 -- Debug Statements
1807 	 --
1808 	 IF l_debug_on THEN
1809 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1810 	 END IF;
1811 	 --
1812 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
1813 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1814 	 wsh_util_core.add_message(x_return_status);
1815 	 --
1816 	 -- Debug Statements
1817 	 --
1818 	 IF l_debug_on THEN
1819 	     WSH_DEBUG_SV.pop(l_module_name);
1820 	 END IF;
1821 	 --
1822 	 RETURN;
1823    END IF;
1824 
1825    IF (l_volume IS NULL) or (l_volume = 0) or (l_vol_uom IS NULL) THEN
1826 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LT_WT_VOL_MISSING');
1827 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1828 	 wsh_util_core.add_message(x_return_status);
1829    ELSE
1830 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1831    END IF;
1832 
1833 --
1834 -- Debug Statements
1835 --
1836 IF l_debug_on THEN
1837     WSH_DEBUG_SV.pop(l_module_name);
1838 END IF;
1839 --
1840    EXCEPTION
1841       WHEN others THEN
1842 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_UNPLAN');
1843 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1844 
1845 --
1846 -- Debug Statements
1847 --
1848 IF l_debug_on THEN
1849     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1850     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1851 END IF;
1852 --
1853 END Check_Tender_Load;
1854 
1855 
1856 
1857 
1858 -----------------------------------------------------------------------------
1859 --
1860 -- Procedure:     Check_Assign_Trip
1861 -- Parameters:    p_delivery_id, x_return_status
1862 -- Description:   Checks for Assign Trip action pre-requisites which are
1863 -- 		  - Delivery status is not CLOSED
1864 --		  - Trip status is not CLOSED
1865 --                - Pickup Stop status is OPEN or ARRIVED
1866 --                - Pickup Stop sequence number is smaller than Dropoff Stop sequence number
1867 --                - If GROUP_BY_CARRIER_FLAG set then freight carrier same as that on trip [warning]
1868 --                - Delivery status is not IN-TRANSIT [warning]
1869 -- NOT YET IMPLEMENTED               - If trip is Planned and has Vehicle information then no stops on the trip are over filled by addition of this delivery [warning]
1870 
1871 --
1872 --Bug 2313077 :
1873 /*
1874       1. Report an error if Ship Method on Trip does not belong to Orgs of
1875          deliveries being assigned to the trip
1876       2. Ship Method LOV on the trip shows all available values for all Orgs
1877 	 on the trip
1878       3. If delivery Ship Method is different from Trips provide a warning
1879 	 when assigning to the trip (unless Del SM is null)
1880 */
1881 -----------------------------------------------------------------------------
1882 
1883 PROCEDURE Check_Assign_Trip ( p_delivery_id     IN  NUMBER,
1884 			      p_trip_id 	IN  NUMBER,
1885 				 p_pickup_stop_id IN NUMBER,
1886 				 p_dropoff_stop_id IN NUMBER,
1887 		              x_return_status 	OUT NOCOPY  VARCHAR2) IS
1888 
1889 CURSOR delivery_status IS
1890 SELECT status_code,
1891 	  organization_id,
1892 	  ship_method_code,
1893       nvl(shipment_direction,'O') shipment_direction,   -- J-IB-NPARIKH
1894       nvl(ignore_for_planning, 'N') ignore_for_planning
1895 FROM   wsh_new_deliveries
1896 WHERE  delivery_id = p_delivery_id;
1897 
1898 CURSOR trip_status IS
1899 SELECT status_code,ship_method_code, planned_flag,
1900        nvl(ignore_for_planning, 'N') ignore_for_planning
1901 FROM   wsh_trips
1902 WHERE  trip_id = p_trip_id;
1903 
1904 /*
1905 CURSOR org_ship_method (l_organization_id NUMBER,l_ship_method_code VARCHAR2)  IS
1906 SELECT ship_method_code
1907 FROM   wsh_carrier_ship_methods
1908 WHERE  organization_id=l_organization_id
1909 AND ship_method_code=l_ship_method_code;
1910 */
1911 --replace above cursor with the one below
1912 --when changes for carrier enhancements are being done
1913 
1914 ---BUG No:4241880.Cursor changed
1915 CURSOR org_ship_method (l_organization_id NUMBER,l_ship_method_code VARCHAR2)  IS
1916 SELECT ship_method_code
1917 FROM   wsh_carrier_services wcs, wsh_org_carrier_services wocs
1918 WHERE  wocs.organization_id=l_organization_id
1919 and wocs.carrier_service_id=wcs.carrier_service_id
1920 AND wcs.ship_method_code=l_ship_method_code;
1921 ---BUG No:4241880.Cursor changed ends
1922 
1923 CURSOR stop_status (l_stop_id NUMBER) IS
1924 SELECT status_code,
1925 	  planned_arrival_date,
1926 	  planned_departure_date
1927 FROM   wsh_trip_Stops
1928 WHERE  stop_id = l_stop_id AND
1929 	  status_code <> 'OP';
1930 
1931 l_del_status  VARCHAR2(2);
1932 l_org_id      NUMBER;
1933 l_del_ship_method VARCHAR2(30);
1934 l_shipment_direction VARCHAR2(30);
1935 l_trip_status VARCHAR2(2);
1936 l_trip_ship_method VARCHAR2(30);
1937 l_tmp_ship_method VARCHAR2(30);
1938 
1939 l_trip_planflag   VARCHAR2(1);
1940 l_trip_ignore     VARCHAR2(1);
1941 l_del_ignore      VARCHAR2(1);
1942 trip_diffignore   EXCEPTION;
1943 trip_firm         EXCEPTION;
1944 
1945 l_stop_status VARCHAR2(2);
1946 
1947 l_pickup_arr_date  DATE;
1948 l_pickup_dep_date  DATE;
1949 l_dropoff_arr_date DATE;
1950 l_dropoff_dep_date DATE;
1951 
1952 l_group_by_attr    wsh_delivery_autocreate.group_by_flags_rec_type;
1953 l_return_status    VARCHAR2(1);
1954 
1955 invalid_status EXCEPTION;
1956 INVALID_TRIPSHIPMETHOD_DEL_ORG EXCEPTION;
1957 INVALID_DEL_TRIP_SHIPMETHOD EXCEPTION;
1958 
1959 others EXCEPTION;
1960 
1961 --
1962 l_debug_on BOOLEAN;
1963 --
1964 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_ASSIGN_TRIP';
1965 --
1966 l_shipping_control     VARCHAR2(30);
1967 l_routing_response_id  NUMBER;
1968 l_routing_request_flag VARCHAR2(30);
1969 BEGIN
1970 
1971    --
1972    -- Debug Statements
1973    --
1974    --
1975    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1976    --
1977    IF l_debug_on IS NULL
1978    THEN
1979        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1980    END IF;
1981    --
1982    IF l_debug_on THEN
1983        WSH_DEBUG_SV.push(l_module_name);
1984        --
1985        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1986        WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
1987        WSH_DEBUG_SV.log(l_module_name,'P_PICKUP_STOP_ID',P_PICKUP_STOP_ID);
1988        WSH_DEBUG_SV.log(l_module_name,'P_DROPOFF_STOP_ID',P_DROPOFF_STOP_ID);
1989    END IF;
1990    --
1991    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1992 
1993    OPEN delivery_status;
1994    FETCH delivery_status INTO l_del_status, l_org_id, l_del_ship_method, l_shipment_direction, l_del_ignore;
1995 
1996    IF (delivery_status%NOTFOUND) THEN
1997 	 CLOSE delivery_status;
1998 	 raise others;
1999    END IF;
2000 
2001    CLOSE delivery_status;
2002      --
2003      IF l_debug_on THEN
2004         wsh_debug_sv.log(l_module_name, 'l_del_status', l_del_status);
2005         wsh_debug_sv.log(l_module_name, 'l_shipment_direction', l_shipment_direction);
2006         wsh_debug_sv.log(l_module_name, 'l_del_ignore', l_del_ignore);
2007      END IF;
2008      --
2009 
2010      /*
2011     -- J-IB-NPARIKH-{
2012      IF l_shipment_direction NOT IN ('O','IO')
2013      THEN
2014      --{
2015          IF l_debug_on THEN
2016             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit GET_SHIPPING_CONTROL',WSH_DEBUG_SV.C_PROC_LEVEL);
2017          END IF;
2018          --
2019          GET_SHIPPING_CONTROL
2020             (
2021                 p_delivery_id           => p_delivery_id,
2022                 x_shipping_control      => l_shipping_control,
2023                 x_routing_response_id   => l_routing_response_id,
2024                 x_routing_request_flag  => l_routing_request_flag,
2025                 x_return_status         => l_return_status
2026             );
2027          --
2028          --
2029          IF l_debug_on THEN
2030             wsh_debug_sv.log(l_module_name, 'l_return_status', l_return_status);
2031             wsh_debug_sv.log(l_module_name, 'l_shipping_control', l_shipping_control);
2032             wsh_debug_sv.log(l_module_name, 'l_routing_response_id', l_routing_response_id);
2033             wsh_debug_sv.log(l_module_name, 'l_routing_request_flag', l_routing_request_flag);
2034             --
2035          END IF;
2036          --
2037         --
2038         IF l_return_status = wsh_util_core.g_ret_sts_unexp_error THEN
2039            raise FND_API.G_EXC_UNEXPECTED_ERROR;
2040         ELSIF l_return_status = wsh_util_core.g_ret_sts_error THEN
2041            raise FND_API.G_EXC_ERROR;
2042         END IF;
2043         --
2044      --}
2045      END IF;
2046      --
2047      IF l_shipment_direction   IN ('O','IO')
2048      OR l_shipping_control     <> 'SUPPLIER'
2049      OR l_routing_request_flag <> 'N'
2050      THEN
2051      -- J-IB-NPARIKH-}
2052      --{
2053       */
2054          IF  l_del_status          = 'CL'
2055          THEN
2056               raise invalid_status;
2057          END IF;
2058          --
2059            -- TPA Change
2060            --
2061            -- Debug Statements
2062            --
2063            IF l_debug_on THEN
2064                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_NOT_I_T',WSH_DEBUG_SV.C_PROC_LEVEL);
2065            END IF;
2066            --
2067            wsh_tpa_delivery_pkg.check_del_not_i_t(p_delivery_id, l_del_status, l_return_status);
2068 
2069            IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2070              x_return_status := l_return_status;
2071              IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
2072                 --
2073                 -- Debug Statements
2074                 --
2075                 IF l_debug_on THEN
2076                     WSH_DEBUG_SV.pop(l_module_name);
2077                 END IF;
2078                 --
2079                 RETURN;
2080               END IF;
2081            END IF;
2082      --}
2083      --END IF;
2084 
2085 
2086    OPEN trip_status;
2087    FETCH trip_status INTO l_trip_status, l_trip_ship_method, l_trip_planflag, l_trip_ignore;
2088 
2089    IF (trip_status%NOTFOUND) THEN
2090       CLOSE trip_status;
2091 	 raise others;
2092    END IF;
2093 
2094    CLOSE trip_status;
2095 
2096    IF l_debug_on THEN
2097         wsh_debug_sv.log(l_module_name, 'l_trip_planflag', l_trip_planflag);
2098         wsh_debug_sv.log(l_module_name, 'l_trip_ignore', l_trip_ignore);
2099    END IF;
2100 
2101    IF l_trip_planflag='F' THEN
2102       raise trip_firm;
2103    END IF;
2104 
2105    IF l_trip_ignore <> l_del_ignore THEN
2106       raise trip_diffignore;
2107    END IF;
2108 
2109    IF (l_trip_status = 'CL')
2110    THEN
2111    --{
2112         raise invalid_status;
2113 
2114         /*
2115          -- J-IB-NPARIKH-{
2116          IF l_shipment_direction   IN ('O','IO')
2117          THEN
2118                 raise invalid_status;
2119          ELSIF l_shipping_control     = 'SUPPLIER'
2120          OR    l_routing_request_flag = 'N'
2121          THEN
2122             IF l_del_status <> 'CL'
2123             THEN
2124                 raise invalid_status;
2125             END IF;
2126          ELSE
2127                 raise invalid_status;
2128          END IF;
2129          -- J-IB-NPARIKH-}
2130          */
2131    --}
2132    END IF;
2133 
2134    if (l_trip_ship_method is not null) then
2135 	OPEN org_ship_method(l_org_id, l_trip_ship_method);
2136    	FETCH org_ship_method INTO l_tmp_ship_method;
2137 
2138    	IF (org_ship_method%NOTFOUND) THEN
2139       	  CLOSE org_ship_method;
2140       	  raise invalid_tripshipmethod_del_org;
2141    	END IF;
2142    	CLOSE org_ship_method;
2143    end if;
2144 
2145    IF (l_del_ship_method is not null and l_trip_ship_method is not null
2146 	and l_del_ship_method <> l_trip_ship_method) THEN
2147 	raise invalid_del_trip_shipmethod;
2148    END IF;
2149 
2150 
2151    --
2152    -- Debug Statements
2153    --
2154    IF l_debug_on THEN
2155        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
2156    END IF;
2157    --
2158    wsh_delivery_autocreate.get_group_by_attr( p_organization_id => l_org_id,
2159                                               x_group_by_flags => l_group_by_attr,
2160                                               x_return_status => l_return_status);
2161 
2162    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2163 	 x_return_status := l_return_status;
2164 	 --
2165 	 -- Debug Statements
2166 	 --
2167 	 IF l_debug_on THEN
2168 	     WSH_DEBUG_SV.pop(l_module_name);
2169 	 END IF;
2170 	 --
2171 	 RETURN;
2172    END IF;
2173 
2174    IF (l_group_by_attr.ship_method = 'Y') AND (l_trip_ship_method <> l_del_ship_method) THEN
2175 	 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_SHIP_METHOD_NOT_SAME');
2176 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2177 	 wsh_util_core.add_message(x_return_status);
2178    END IF;
2179 
2180    IF (p_pickup_stop_id IS NOT NULL) THEN
2181 
2182       OPEN stop_status (p_pickup_stop_id);
2183       FETCH stop_status INTO l_stop_status, l_pickup_arr_date, l_pickup_dep_date;
2184 
2185       IF (stop_status%FOUND) THEN
2186       	CLOSE stop_status;
2187          --
2188 
2189          raise invalid_status;
2190 
2191          /*
2192          -- J-IB-NPARIKH-{
2193          IF l_shipment_direction   IN ('O','IO')
2194          THEN
2195                 raise invalid_status;
2196          ELSIF l_shipping_control     = 'SUPPLIER'
2197          OR    l_routing_request_flag = 'N'
2198          THEN
2199             IF l_del_status NOT IN ('IT', 'CL')
2200             THEN
2201                 raise invalid_status;
2202             END IF;
2203          ELSE
2204                 raise invalid_status;
2205          END IF;
2206          -- J-IB-NPARIKH-}
2207          */
2208       END IF;
2209 		CLOSE stop_status;
2210 
2211    END IF;
2212 
2213    IF (p_dropoff_stop_id IS NOT NULL) THEN
2214 
2215       OPEN stop_status (p_dropoff_stop_id);
2216       FETCH stop_status INTO l_stop_status, l_dropoff_arr_date, l_dropoff_dep_date;
2217 
2218       IF (stop_status%FOUND) THEN
2219 			CLOSE stop_status;
2220                     raise invalid_status;
2221 
2222              /*
2223              --
2224              -- J-IB-NPARIKH-{
2225              IF l_shipment_direction   IN ('O','IO')
2226              THEN
2227                     raise invalid_status;
2228              ELSIF l_shipping_control     = 'SUPPLIER'
2229              OR    l_routing_request_flag = 'N'
2230              THEN
2231                 IF l_del_status NOT IN ('IT', 'CL')
2232                 THEN
2233                     raise invalid_status;
2234                 END IF;
2235              ELSE
2236                     raise invalid_status;
2237              END IF;
2238              -- J-IB-NPARIKH-}
2239              */
2240 
2241       END IF;
2242 
2243 		CLOSE stop_status;
2244 
2245    END IF;
2246 
2247 --
2248 -- Debug Statements
2249 --
2250 IF l_debug_on THEN
2251     WSH_DEBUG_SV.pop(l_module_name);
2252 END IF;
2253 --
2254    EXCEPTION
2255     -- J-IB-NPARIKH-{
2256       --
2257     WHEN FND_API.G_EXC_ERROR THEN
2258 
2259       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2260       --
2261       IF l_debug_on THEN
2262         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2263         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2264       END IF;
2265       --
2266     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2267 
2268       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2269       --
2270       IF l_debug_on THEN
2271         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2272         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
2273       END IF;
2274       --
2275       -- J-IB-NPARIKH-}
2276 
2277 
2278 
2279       WHEN invalid_del_trip_shipmethod THEN
2280    	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_SHIP');
2281 	    --
2282 	    -- Debug Statements
2283 	    --
2284 	    IF l_debug_on THEN
2285 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2286 	    END IF;
2287 	    --
2288 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2289 	    --
2290 	    -- Debug Statements
2291 	    --
2292 	    IF l_debug_on THEN
2293 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2294 	    END IF;
2295 	    --
2296 	    FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2297 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2298 	    wsh_util_core.add_message(x_return_status);
2299 
2300 --
2301 -- Debug Statements
2302 --
2303 IF l_debug_on THEN
2304     WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DEL_TRIP_SHIPMETHOD exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2305     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DEL_TRIP_SHIPMETHOD');
2306 END IF;
2307 --
2308       WHEN invalid_tripshipmethod_del_org THEN
2309    	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_SM_ORG');
2310 	    --
2311 	    -- Debug Statements
2312 	    --
2313 	    IF l_debug_on THEN
2314 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2315 	    END IF;
2316 	    --
2317 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2318 	    --
2319 	    -- Debug Statements
2320 	    --
2321 	    IF l_debug_on THEN
2322 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2323 	    END IF;
2324 	    --
2325 	    FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2326 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2327 	    wsh_util_core.add_message(x_return_status);
2328 
2329 --
2330 -- Debug Statements
2331 --
2332 IF l_debug_on THEN
2333     WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_TRIPSHIPMETHOD_DEL_ORG exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2334     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_TRIPSHIPMETHOD_DEL_ORG');
2335 END IF;
2336 --
2337       WHEN invalid_status THEN
2338    	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_STATUS');
2339 	    --
2340 	    -- Debug Statements
2341 	    --
2342 	    IF l_debug_on THEN
2343 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2344 	    END IF;
2345 	    --
2346 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2347 	    --
2348 	    -- Debug Statements
2349 	    --
2350 	    IF l_debug_on THEN
2351 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2352 	    END IF;
2353 	    --
2354 	    FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2355 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2356 	    wsh_util_core.add_message(x_return_status);
2357 
2358 --
2359 -- Debug Statements
2360 --
2361 IF l_debug_on THEN
2362     WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_STATUS exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2363     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_STATUS');
2364 END IF;
2365 --
2366 
2367       WHEN trip_firm THEN
2368    	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_FIRM');
2369 	    IF l_debug_on THEN
2370 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2371 	    END IF;
2372 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2373 	    IF l_debug_on THEN
2374 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2375 	    END IF;
2376 	    FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2377 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2378 	    wsh_util_core.add_message(x_return_status);
2379             IF l_debug_on THEN
2380                WSH_DEBUG_SV.logmsg(l_module_name,'TRIP_FIRM exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2381                WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:TRIP_FIRM');
2382             END IF;
2383       WHEN trip_diffignore THEN
2384    	    FND_MESSAGE.SET_NAME('WSH','WSH_DELASSIGNTR_IGNORE');
2385 	    IF l_debug_on THEN
2386 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2387 	    END IF;
2388 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2389 	    IF l_debug_on THEN
2390 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2391 	    END IF;
2392 	    FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(p_trip_id));
2393 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2394 	    wsh_util_core.add_message(x_return_status);
2395             IF l_debug_on THEN
2396                WSH_DEBUG_SV.logmsg(l_module_name,'TRIP_DIFFIGNORE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2397                WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:TRIP_DIFFIGNORE');
2398             END IF;
2399 
2400       WHEN others THEN
2401 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_ASSIGN_TRIP');
2402 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2403 
2404 --
2405 -- Debug Statements
2406 --
2407 IF l_debug_on THEN
2408     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2409     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2410 END IF;
2411 --
2412 END Check_Assign_Trip;
2413 
2414 
2415 /* ******** Commented this out for bug 2554849
2416 -----------------------------------------------------------------------------
2417 --
2418 -- Procedure:     Check_Unassign_Trip
2419 -- Parameters:    p_delivery_id, x_return_status
2420 -- Description:   Checks for Unassign Trip action pre-requisites which are
2421 -- 		  - Delivery status is not CLOSED
2422 --		  - Trip status is not CLOSED
2423 --                - Delivery status is not IN-TRANSIT [warning]
2424 -- NOT YET IMPLEMENTED               - If trip is Planned and has Vehicle information then no stops on the trip are under filled by removal of this delivery [warning]
2425 --                - No Bill of Lading is assigned to this delivery for this trip [warning] NOTE: this warning will inform the user that all Bill of Ladings will be deleted.
2426 --
2427 -----------------------------------------------------------------------------
2428 
2429 PROCEDURE Check_Unassign_Trip ( p_delivery_id   IN  NUMBER,
2430 			      	p_trip_id 	IN  NUMBER,
2431 		              	x_return_status OUT NOCOPY  VARCHAR2) IS
2432 
2433 CURSOR delivery_status IS
2434 SELECT status_code
2435 FROM   wsh_new_deliveries
2436 WHERE  delivery_id = p_delivery_id;
2437 
2438 CURSOR trip_status IS
2439 SELECT status_code
2440 FROM   wsh_trips
2441 WHERE  trip_id = p_trip_id;
2442 
2443 l_del_status  VARCHAR2(2);
2444 l_trip_status VARCHAR2(2);
2445 others        EXCEPTION;
2446 
2447 --
2448 l_debug_on BOOLEAN;
2449 --
2450 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_UNASSIGN_TRIP';
2451 --
2452 BEGIN
2453 
2454    --
2455    -- Debug Statements
2456    --
2457    --
2458    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2459    --
2460    IF l_debug_on IS NULL
2461    THEN
2462        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2463    END IF;
2464    --
2465    IF l_debug_on THEN
2466        WSH_DEBUG_SV.push(l_module_name);
2467        --
2468        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
2469        WSH_DEBUG_SV.log(l_module_name,'P_TRIP_ID',P_TRIP_ID);
2470    END IF;
2471    --
2472    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2473 
2474    OPEN delivery_status;
2475    FETCH delivery_status INTO l_del_status;
2476 
2477    IF (delivery_status%NOTFOUND) THEN
2478 	 CLOSE delivery_status;
2479 	 raise others;
2480    END IF;
2481 
2482    CLOSE delivery_status;
2483 
2484    IF (l_del_status = 'CL') THEN
2485 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_STATUS');
2486 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2487 	 wsh_util_core.add_message(x_return_status);
2488 	 --
2489 	 -- Debug Statements
2490 	 --
2491 	 IF l_debug_on THEN
2492 	     WSH_DEBUG_SV.pop(l_module_name);
2493 	 END IF;
2494 	 --
2495 	 RETURN;
2496    END IF;
2497 
2498    -- TPA Change
2499    --
2500    -- Debug Statements
2501    --
2502    IF l_debug_on THEN
2503        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_NOT_I_T',WSH_DEBUG_SV.C_PROC_LEVEL);
2504    END IF;
2505    --
2506    wsh_tpa_delivery_pkg.check_del_not_i_t(p_delivery_id, l_del_status, x_return_status);
2507 
2508    IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
2509 	 --
2510 	 -- Debug Statements
2511 	 --
2512 	 IF l_debug_on THEN
2513 	     WSH_DEBUG_SV.pop(l_module_name);
2514 	 END IF;
2515 	 --
2516 	 RETURN;
2517    END IF;
2518 
2519    OPEN trip_status;
2520    FETCH trip_status INTO l_trip_status;
2521 
2522    IF (trip_status%NOTFOUND) THEN
2523       CLOSE trip_status;
2524 	 raise others;
2525    END IF;
2526 
2527    CLOSE trip_status;
2528 
2529    IF (l_trip_status = 'CL') THEN
2530 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_TR_STATUS');
2531 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2532 	 wsh_util_core.add_message(x_return_status);
2533 	 --
2534 	 -- Debug Statements
2535 	 --
2536 	 IF l_debug_on THEN
2537 	     WSH_DEBUG_SV.pop(l_module_name);
2538 	 END IF;
2539 	 --
2540 	 RETURN;
2541    END IF;
2542 
2543 -- TO DO: Implement document instances checks
2544 
2545 --
2546 -- Debug Statements
2547 --
2548 IF l_debug_on THEN
2549     WSH_DEBUG_SV.pop(l_module_name);
2550 END IF;
2551 --
2552    EXCEPTION
2553       WHEN others THEN
2554 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_ASSIGN_TRIP');
2555 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2556 
2557 --
2558 -- Debug Statements
2559 --
2560 IF l_debug_on THEN
2561     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2562     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2563 END IF;
2564 --
2565 END Check_Unassign_Trip;
2566 ************ */
2567 
2568 
2569 -----------------------------------------------------------------------------
2570 --
2571 -- Procedure:     Check_Pack
2572 -- Parameters:    p_delivery_id, x_return_status
2573 -- Description:   Checks for Pack action pre-requisites which are
2574 --		  - Delivery status is OPEN
2575 --		  - At least one line is assigned to delivery
2576 --                - All items being shipped on this delivery are packed in containers
2577 -- NOT YET IMPLEMENTED (JESSICA)     - Details (shipped quantity, inventory controls ) must be specified for all delivery lines
2578 -- NOT YET IMPLEMENTED               - Containers assigned to the delivery are not over/under packed [warning]
2579 --
2580 -----------------------------------------------------------------------------
2581 
2582 PROCEDURE Check_Pack ( p_delivery_id 		IN  NUMBER,
2583 		       x_return_status 		OUT NOCOPY  VARCHAR2) IS
2584 
2585 CURSOR delivery_status IS
2586 SELECT status_code
2587 FROM   wsh_new_deliveries
2588 WHERE  delivery_id = p_delivery_id;
2589 
2590 CURSOR detail_info IS
2591 SELECT da.parent_delivery_detail_id
2592 FROM   wsh_delivery_assignments_v da,
2593 	  wsh_delivery_details dd
2594 WHERE  dd.delivery_detail_id = da.delivery_detail_id AND
2595 	  da.delivery_id = p_delivery_id AND
2596 	  da.delivery_id IS NOT NULL AND
2597 	  dd.container_flag = 'N';
2598 
2599 l_container_id NUMBER;
2600 l_count_detail NUMBER := 0;
2601 l_del_status   VARCHAR2(2);
2602 l_fill_status  VARCHAR2(1);
2603 l_return_status VARCHAR2(1);
2604 
2605 l_underfilled_flag BOOLEAN := FALSE;
2606 l_overfilled_flag BOOLEAN := FALSE;
2607 
2608 others         EXCEPTION;
2609 
2610 --
2611 l_debug_on BOOLEAN;
2612 --
2613 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_PACK';
2614 --
2615 BEGIN
2616 
2617    --
2618    -- Debug Statements
2619    --
2620    --
2621    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2622    --
2623    IF l_debug_on IS NULL
2624    THEN
2625        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2626    END IF;
2627    --
2628    IF l_debug_on THEN
2629        WSH_DEBUG_SV.push(l_module_name);
2630        --
2631        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
2632    END IF;
2633    --
2634    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2635 
2636    OPEN delivery_status;
2637    FETCH delivery_status INTO l_del_status;
2638 
2639    IF (delivery_status%NOTFOUND) THEN
2640 	 CLOSE delivery_status;
2641 	 raise others;
2642    END IF;
2643 
2644    CLOSE delivery_status;
2645 
2646    IF (l_del_status = 'PA') THEN
2647 	  --
2648 	  -- Debug Statements
2649 	  --
2650 	  IF l_debug_on THEN
2651 	      WSH_DEBUG_SV.pop(l_module_name);
2652 	  END IF;
2653 	  --
2654 	  RETURN;
2655    END IF;
2656 
2657    IF (l_del_status NOT IN  ('OP', 'SA')) THEN  -- sperera 940/945
2658 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_OP_PA_STATUS');
2659 	 --
2660 	 -- Debug Statements
2661 	 --
2662 	 IF l_debug_on THEN
2663 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2664 	 END IF;
2665 	 --
2666 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2667 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2668 	 wsh_util_core.add_message(x_return_status);
2669 	 --
2670 	 -- Debug Statements
2671 	 --
2672 	 IF l_debug_on THEN
2673 	     WSH_DEBUG_SV.pop(l_module_name);
2674 	 END IF;
2675 	 --
2676 	 RETURN;
2677    END IF;
2678 
2679    OPEN detail_info;
2680 
2681    LOOP
2682 
2683       l_container_id := NULL;
2684 
2685 	 FETCH detail_info INTO l_container_id;
2686       EXIT WHEN detail_info%NOTFOUND;
2687 
2688       --IF (detail_info%FOUND) THEN
2689 	    IF (l_container_id IS NULL) THEN
2690 	       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PACK_ITEMS_UNPACKED');
2691 		  --
2692 		  -- Debug Statements
2693 		  --
2694 		  IF l_debug_on THEN
2695 		      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2696 		  END IF;
2697 		  --
2698 		  FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2699 	       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2700 	       wsh_util_core.add_message(x_return_status);
2701 	       --
2702 	       -- Debug Statements
2703 	       --
2704 	       IF l_debug_on THEN
2705 	           WSH_DEBUG_SV.pop(l_module_name);
2706 	       END IF;
2707 	       --
2708 	       RETURN;
2709          END IF;
2710 
2711          --
2712          -- Debug Statements
2713          --
2714          IF l_debug_on THEN
2715              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.CHECK_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
2716          END IF;
2717          --
2718          wsh_wv_utils.check_fill_pc( p_container_instance_id => l_container_id,
2719 				     x_fill_status           => l_fill_status,
2720 				     x_return_status         => l_return_status);
2721          IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2722 --		  FND_MESSAGE.SET_NAME('WSH','Error-in-fill-percent');
2723 		  x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2724 --		  wsh_util_core.add_message(x_return_status);
2725          ELSIF (l_fill_status = 'U') THEN
2726 		  l_underfilled_flag := TRUE;
2727 	    ELSIF (l_fill_status = 'O') THEN
2728             l_overfilled_flag := TRUE;
2729          END IF;
2730 
2731       --END IF;
2732 
2733    l_count_detail := l_count_detail + 1;
2734 
2735    END LOOP;
2736    CLOSE detail_info;
2737 
2738    IF (l_overfilled_flag) THEN
2739 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONT_OVERPACKED');
2740 	 --
2741 	 -- Debug Statements
2742 	 --
2743 	 IF l_debug_on THEN
2744 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2745 	 END IF;
2746 	 --
2747 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2748 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2749 	 wsh_util_core.add_message(x_return_status);
2750    END IF;
2751 
2752    IF (l_underfilled_flag) THEN
2753 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONT_UNDERPACKED');
2754 	 --
2755 	 -- Debug Statements
2756 	 --
2757 	 IF l_debug_on THEN
2758 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2759 	 END IF;
2760 	 --
2761 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2762 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2763 	 wsh_util_core.add_message(x_return_status);
2764    END IF;
2765 
2766    --IF (l_container_id IS NULL) THEN
2767    IF (l_count_detail = 0) THEN /*Bug #1701366 Issue 3 */
2768 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_DETAILS');
2769 	 --
2770 	 -- Debug Statements
2771 	 --
2772 	 IF l_debug_on THEN
2773 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2774 	 END IF;
2775 	 --
2776 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
2777 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2778 	 wsh_util_core.add_message(x_return_status);
2779 	 --
2780 	 -- Debug Statements
2781 	 --
2782 	 IF l_debug_on THEN
2783 	     WSH_DEBUG_SV.pop(l_module_name);
2784 	 END IF;
2785 	 --
2786 	 RETURN;
2787    END IF;
2788 
2789 --
2790 -- Debug Statements
2791 --
2792 IF l_debug_on THEN
2793     WSH_DEBUG_SV.pop(l_module_name);
2794 END IF;
2795 --
2796    EXCEPTION
2797       WHEN others THEN
2798 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_PACK');
2799 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2800 
2801 --
2802 -- Debug Statements
2803 --
2804 IF l_debug_on THEN
2805     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2806     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2807 END IF;
2808 --
2809 END Check_Pack;
2810 
2811 -----------------------------------------------------------------------------
2812 --
2813 -- Procedure:     Check_Detail_for_Confirm
2814 -- Parameters:    p_detail_id, p_check_credit_init_flag, x_line_inv_flag_rec, x_return_status
2815 -- Description:   Checks for Confirm action pre-requisites which are
2816 --                Check for inventory controls
2817 --                Check for credit and holds
2818 -- NOT YET IMPLEMENTED Check for exceptions
2819 --
2820 -----------------------------------------------------------------------------
2821 PROCEDURE Check_Detail_for_Confirm ( p_detail_id           IN  NUMBER,
2822                                      p_check_credit_init_flag   IN  BOOLEAN, -- 2343058
2823                                      x_line_inv_flag_rec   OUT NOCOPY  wsh_delivery_details_inv.inv_control_flag_rec,
2824                                      x_return_status OUT NOCOPY  VARCHAR2) IS
2825 
2826 CURSOR detail_info IS
2827 SELECT delivery_detail_id,
2828           inventory_item_id,
2829           shipped_quantity,
2830           requested_quantity,
2831           NULL,
2832           revision,
2833           subinventory,
2834           lot_number,
2835           locator_id,
2836           NULL,
2837           serial_number,
2838           NULL,
2839           transaction_temp_id,
2840           organization_id,
2841           source_line_id,
2842           source_header_id,
2843           source_code,
2844           picked_quantity,
2845           picked_quantity2,
2846           requested_quantity_uom,
2847           requested_quantity_uom2,
2848           line_direction
2849 FROM   wsh_delivery_details
2850 WHERE  delivery_detail_id = p_detail_id;
2851 
2852 
2853 /************************MATERIAL STATUS CONTROL ********/
2854 CURSOR C_GET_SERIAL (l_transaction_temp_id NUMBER) IS
2855 SELECT fm_serial_number,nvl(to_serial_number,fm_serial_number)
2856 from MTL_SERIAL_NUMBERS_TEMP
2857 where transaction_temp_id = l_transaction_temp_id;
2858 
2859 l_prefix    VARCHAR2(10);
2860 l_result    BOOLEAN;
2861 l_valid_serial_range NUMBER;
2862 l_org       INV_VALIDATE.org;
2863 l_item      INV_VALIDATE.item;
2864 l_lot       INV_VALIDATE.lot;
2865 l_locator   INV_VALIDATE.locator;
2866 l_sub       INV_VALIDATE.sub;
2867 
2868 p_fm_serial INV_VALIDATE.SERIAL_NUMBER_TBL;
2869 p_to_serial INV_VALIDATE.SERIAL_NUMBER_TBL;
2870 x_errored_serials  INV_VALIDATE.SERIAL_NUMBER_TBL;
2871 
2872 /************************MATERIAL STATUS CONTROL ********/
2873 
2874 -- 11728970: Cursor to Get the LPN -id
2875 CURSOR C_GET_LPN_ID ( p_detail_id NUMBER) IS
2876 SELECT wdd1.lpn_id from wsh_delivery_details wdd1,
2877                         wsh_delivery_details wdd2, wsh_delivery_assignments wda
2878  WHERE wdd2.delivery_detail_id = p_detail_id
2879    AND wdd2.delivery_detail_id = wda.delivery_detail_id
2880    AND wda.parent_delivery_detail_id IS NOT NULL
2881    AND wda.parent_delivery_detail_id = wdd1.delivery_detail_id
2882    AND wdd1.container_flag = 'Y'
2883    AND wdd1.lpn_id is not null;
2884 
2885 l_lpn_id   NUMBER;
2886 -- 11728970: Cursor to Get the LPN -id
2887 
2888 l_line_inv_rec wsh_delivery_details_inv.line_inv_info;
2889 g_line_inv_rec wsh_delivery_details_inv.line_inv_info;
2890 l_line_inv_flag_rec wsh_delivery_details_inv.inv_control_flag_rec;
2891 l_details_flag  BOOLEAN;
2892 
2893 l_source_line_id NUMBER;
2894 l_source_header_id NUMBER;
2895 l_source_code    WSH_DELIVERY_DETAILS.SOURCE_CODE%TYPE;
2896 l_picked_quantity2   NUMBER;
2897 l_temp_status VARCHAR2(1);
2898 l_transaction_type_id NUMBER;
2899 l_wms_enabled VARCHAR2(10);
2900 --
2901 l_debug_on BOOLEAN;
2902 --
2903 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DETAIL_FOR_CONFIRM';
2904 --
2905 BEGIN
2906 
2907    --
2908    -- Debug Statements
2909    --
2910    --
2911    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2912    --
2913    IF l_debug_on IS NULL
2914    THEN
2915        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2916    END IF;
2917    --
2918    IF l_debug_on THEN
2919        WSH_DEBUG_SV.push(l_module_name);
2920        --
2921        WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
2922        WSH_DEBUG_SV.log(l_module_name,'P_CHECK_CREDIT_INIT_FLAG',P_CHECK_CREDIT_INIT_FLAG);
2923    END IF;
2924    --
2925    OPEN  detail_info;
2926    FETCH detail_info INTO l_line_inv_rec.delivery_detail_id,
2927                                          l_line_inv_rec.inventory_item_id,
2928                                          l_line_inv_rec.shp_qty,
2929                                          l_line_inv_rec.req_qty,
2930                                          l_line_inv_rec.ser_qty,
2931                                          l_line_inv_rec.revision,
2932                                          l_line_inv_rec.subinventory,
2933                                          l_line_inv_rec.lot_number,
2934                                          l_line_inv_rec.locator_id,
2935                                          l_line_inv_rec.locator_control_code,
2936                                          l_line_inv_rec.serial_number,
2937                                          l_line_inv_rec.serial_number_control_code,
2938                                          l_line_inv_rec.transaction_temp_id,
2939                                          l_line_inv_rec.organization_id,
2940                                          l_line_inv_rec.source_line_id,
2941                                          l_line_inv_rec.source_header_id,
2942                                          l_line_inv_rec.source_code,
2943                                          l_line_inv_rec.picked_quantity,
2944                                          l_line_inv_rec.picked_quantity2,
2945                                          l_line_inv_rec.requested_quantity_uom,
2946                                          l_line_inv_rec.requested_quantity_uom2,
2947                                          l_line_inv_rec.line_direction;
2948    CLOSE detail_info;
2949 
2950    -- bug 2343058
2951    IF (p_check_credit_init_flag) THEN
2952       --
2953       -- Debug Statements
2954       --
2955       IF l_debug_on THEN
2956           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_CREDIT_HOLDS',WSH_DEBUG_SV.C_PROC_LEVEL);
2957       END IF;
2958       --
2959       wsh_details_validations.check_credit_holds(
2960         p_detail_id             => p_detail_id,
2961         p_activity_type         => 'SHIP',
2962         p_source_line_id        => l_line_inv_rec.source_line_id,
2963         p_source_header_id      => l_line_inv_rec.source_header_id,
2964         p_source_code           => l_line_inv_rec.source_code,
2965         p_init_flag             => 'Y',
2966         x_return_status         => x_return_status);
2967    ELSE
2968       --
2969       -- Debug Statements
2970       --
2971       IF l_debug_on THEN
2972           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_CREDIT_HOLDS',WSH_DEBUG_SV.C_PROC_LEVEL);
2973       END IF;
2974       --
2975       wsh_details_validations.check_credit_holds(
2976         p_detail_id             => p_detail_id,
2977         p_activity_type         => 'SHIP',
2978         p_source_line_id        => l_line_inv_rec.source_line_id,
2979         p_source_header_id      => l_line_inv_rec.source_header_id,
2980         p_source_code           => l_line_inv_rec.source_code,
2981         p_init_flag             => 'N',
2982         x_return_status         => x_return_status);
2983    END IF;
2984 
2985    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2986 
2987       --
2988       -- Debug Statements
2989       --
2990       IF l_debug_on THEN
2991           WSH_DEBUG_SV.pop(l_module_name);
2992       END IF;
2993       --
2994       RETURN;
2995    END IF;
2996 
2997 
2998    -- Pack J Catch Weights
2999    -- Call wrapper API to default catchweight if null.
3000    -- If required and not defaulted raise error.
3001    -- Bug # 8655653 : catch weight defaulting can be done for only dds
3002    -- which are having inv item populated.
3003    IF
3004       (wsh_util_validate.Check_Wms_Org(l_line_inv_rec.organization_id) = 'Y')
3005    AND (NVL(l_line_inv_rec.picked_quantity2,0) = 0)
3006    AND  l_line_inv_rec.inventory_item_id IS NOT NULL THEN
3007 
3008 
3009       IF l_debug_on THEN
3010          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.Check_Default_Catch_Weights',WSH_DEBUG_SV.C_PROC_LEVEL);
3011       END IF;
3012 
3013       WSH_DELIVERY_DETAILS_INV.Check_Default_Catch_Weights
3014                                      (p_line_inv_rec => l_line_inv_rec,
3015                                       x_return_status => x_return_status);
3016 
3017       IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3018 
3019         IF l_debug_on THEN
3020           WSH_DEBUG_SV.pop(l_module_name);
3021         END IF;
3022 
3023         RETURN;
3024 
3025       END IF;
3026 
3027    END IF;
3028 
3029    /* Bug fix 2850555
3030    Initializing the new flag 'details_required_flag' to Y
3031    Flag will be set to 'N' after call to 'details_required' API, if
3032    the details are really not required */
3033 
3034    x_line_inv_flag_rec.details_required_flag := 'Y';
3035 
3036    --
3037    -- Debug Statements
3038    --
3039    IF l_debug_on THEN
3040        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.FETCH_INV_CONTROLS',WSH_DEBUG_SV.C_PROC_LEVEL);
3041    END IF;
3042    --
3043    wsh_delivery_details_inv.fetch_inv_controls(
3044       p_delivery_detail_id   => l_line_inv_rec.delivery_detail_id,
3045       p_inventory_item_id    => l_line_inv_rec.inventory_item_id,
3046       p_organization_id      => l_line_inv_rec.organization_id,
3047       p_subinventory         => l_line_inv_rec.subinventory,
3048       x_inv_controls_rec     => l_line_inv_flag_rec,
3049       x_return_status        => x_return_status);
3050 
3051    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3052          --
3053          -- Debug Statements
3054          --
3055          IF l_debug_on THEN
3056              WSH_DEBUG_SV.pop(l_module_name);
3057          END IF;
3058          --
3059          RETURN;
3060    END IF;
3061 
3062    l_line_inv_rec.serial_number_control_code := l_line_inv_flag_rec.serial_code;
3063    l_line_inv_rec.locator_control_code := l_line_inv_flag_rec.location_control_code;
3064 
3065    --
3066    -- Debug Statements
3067    --
3068    IF l_debug_on THEN
3069        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DETAILS_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
3070    END IF;
3071    --
3072    wsh_delivery_details_inv.Details_Required (
3073           p_line_inv_rec        => l_line_inv_rec,
3074           p_set_default         => FALSE,
3075           x_line_inv_rec        => g_line_inv_rec,
3076           x_details_required    => l_details_flag,
3077           x_return_status       => x_return_status);
3078 
3079    IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3080          --
3081          -- Debug Statements
3082          --
3083          IF l_debug_on THEN
3084              WSH_DEBUG_SV.pop(l_module_name);
3085          END IF;
3086          --
3087          RETURN;
3088    END IF;
3089 
3090    IF (l_details_flag) THEN
3091 
3092       /* Bug fix 2850555
3093          Set the new flag 'details_required_flag' to Y , when l_details_flag
3094          is TRUE after the call to details_required API.
3095       */
3096 
3097         l_line_inv_flag_rec.details_required_flag := 'Y';
3098         --
3099         -- Debug Statements
3100         --
3101         IF l_debug_on THEN
3102             WSH_DEBUG_SV.logmsg(l_module_name,  'DETAILS REQUIRED ERROR ' || X_RETURN_STATUS  );
3103         END IF;
3104         --
3105          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3106    ELSE
3107       /* Bug fix 2850555
3108          Set the new flag 'details_required_flag' to N , when l_details_flag
3109          is FALSE after the call to details_required API.
3110       */
3111       l_line_inv_flag_rec.details_required_flag := 'N';
3112    END IF;
3113    x_line_inv_flag_rec   := l_line_inv_flag_rec  ;
3114 
3115    IF l_debug_on THEN
3116       wsh_debug_sv.log(l_module_name, 'x_line_inv_flag_rec.details_required_flag', x_line_inv_flag_rec.details_required_flag);
3117    END IF;
3118 
3119    /****************Material Status Control**************/
3120    -- Bug 9220228:Added condition on inventory item id to skip material status
3121    --             check when it is null(It could be null for delivery lies from Project contracts orders).
3122    IF l_line_inv_flag_rec.details_required_flag <> 'Y' AND l_line_inv_rec.inventory_item_id is not null THEN
3123 
3124       select DECODE(wsh_util_validate.Check_Wms_Org(l_line_inv_rec.organization_id),'Y','TRUE','FALSE')
3125       into   l_wms_enabled
3126       from   dual;
3127 
3128       WSH_DELIVERY_DETAILS_INV.get_trx_type_id(
3129         p_source_line_id      => l_line_inv_rec.source_line_id,
3130         p_source_code         => l_line_inv_rec.source_code,
3131         x_transaction_type_id => L_TRANSACTION_TYPE_ID ,
3132         x_return_status       => x_return_status);
3133       IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3134         IF l_debug_on THEN
3135           WSH_DEBUG_SV.pop(l_module_name);
3136         END IF;
3137         return;
3138       END IF;
3139 
3140       IF (l_line_inv_rec.serial_number_control_code = 1) THEN
3141          -- 11728970: Check for WMS enabled org
3142          -- get the Detail's Parent LPN-id, if not null then pass it to INV api
3143          l_lpn_id  := NULL;
3144          IF ( l_wms_enabled = 'TRUE' ) THEN
3145               OPEN  c_get_lpn_id (l_line_inv_rec.delivery_detail_id);
3146               FETCH c_get_lpn_id  INTO l_lpn_id;
3147               CLOSE c_get_lpn_id;
3148               --
3149               IF l_debug_on THEN
3150                  wsh_debug_sv.log(l_module_name, 'WMS Enabled, lpn_id ', l_lpn_id);
3151               END IF;
3152               --
3153          END IF;
3154          -- 11728970: Calling INV API -  Calling Inventory Over-loaded api by passing lpn-id
3155          l_temp_status := inv_material_status_grp.is_status_applicable(
3156                               p_wms_installed         => l_wms_enabled
3157                              ,p_trx_status_enabled    => NULL
3158                              ,p_trx_type_id           => L_TRANSACTION_TYPE_ID
3159                              ,p_lot_status_enabled    => NULL
3160                              ,p_serial_status_enabled => NULL
3161                              ,p_organization_id       => l_line_inv_rec.organization_id
3162                              ,p_inventory_item_id     => l_line_inv_rec.inventory_item_id
3163                              ,p_sub_code              => l_line_inv_rec.subinventory
3164                              ,p_locator_id            => l_line_inv_rec.locator_id
3165                              ,p_lot_number            => l_line_inv_rec.lot_number
3166                              ,p_serial_number         => NULL
3167                              ,p_object_type           => 'A'
3168                              ,p_lpn_id                => l_lpn_id );
3169 
3170       IF l_temp_status <>'Y' THEN
3171          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3172   	 l_line_inv_flag_rec.invalid_material_status_flag := 'Y';
3173   	 x_line_inv_flag_rec   := l_line_inv_flag_rec  ;
3174   	 IF l_debug_on THEN
3175             WSH_DEBUG_SV.pop(l_module_name);
3176             END IF;
3177   	    return;
3178          END IF;
3179       ELSE
3180 
3181            IF l_line_inv_rec.transaction_temp_id IS NOT NULL THEN
3182               OPEN C_GET_SERIAL (l_line_inv_rec.transaction_temp_id);
3183               FETCH  C_GET_SERIAL BULK COLLECT
3184   	      INTO p_fm_serial,p_to_serial;
3185               CLOSE C_GET_SERIAL;
3186 
3187               l_org.organization_id    := l_line_inv_rec.organization_id;
3188               l_item.inventory_item_id := l_line_inv_rec.inventory_item_id;
3189               l_sub.secondary_inventory_name := l_line_inv_rec.subinventory;
3190               l_lot.lot_number := l_line_inv_rec.lot_number;
3191               l_locator.inventory_location_id := l_line_inv_rec.locator_id;
3192 
3193               l_valid_serial_range := INV_VALIDATE.validate_serial_range(
3194 	                                       p_fm_serial   => p_fm_serial,
3195   		                               p_to_serial   => p_to_serial,
3196   		                               p_org         => l_org,
3197   				               p_item        => l_item ,
3198   					       p_from_sub    => l_sub ,
3199   		                               p_lot         => l_lot,
3200   		                               p_loc         => l_locator,
3201   		                               p_revision    => l_line_inv_rec.revision,
3202   		                               p_trx_type_id => L_TRANSACTION_TYPE_ID,
3203   		                               p_object_type => 'A',
3204   		                               x_errored_serials => x_errored_serials);
3205 
3206 	      IF l_valid_serial_range <> 1 THEN
3207                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3208   	         l_line_inv_flag_rec.invalid_material_status_flag := 'Y';
3209   	         x_line_inv_flag_rec   := l_line_inv_flag_rec  ;
3210   	         FOR i in 1..x_errored_serials.count LOOP
3211                      IF l_debug_on THEN
3212                       wsh_debug_sv.log(l_module_name, 'errored serial_number'||to_char(i), x_errored_serials(i));
3213   	             END IF;
3214                  END LOOP;
3215   	         IF l_debug_on THEN
3216                     WSH_DEBUG_SV.pop(l_module_name);
3217                  END IF;
3218   	         return;
3219   	      END IF;
3220 
3221            ELSE
3222               WSH_DELIVERY_DETAILS_INV.Validate_Serial( p_serial_number       => l_line_inv_rec.serial_number,
3223     							p_lot_number          => l_line_inv_rec.lot_number,
3224   							p_organization_id     => l_line_inv_rec.organization_id ,
3225   							p_inventory_item_id   => l_line_inv_rec.inventory_item_id ,
3226   							p_subinventory        => l_line_inv_rec.subinventory ,
3227   							p_revision            => l_line_inv_rec.revision,
3228   							p_locator_id          => l_line_inv_rec.locator_id,
3229   							p_transaction_type_id => L_TRANSACTION_TYPE_ID,
3230   							p_object_type         => 'A',
3231   							x_return_status       => x_return_status ,
3232   							x_result              => l_result
3233   					              );
3234               IF l_result <> TRUE  OR x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3235                  x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3236   	         IF l_result <> TRUE THEN
3237   	            l_line_inv_flag_rec.invalid_material_status_flag := 'Y';
3238   	         END IF;
3239   	         x_line_inv_flag_rec   := l_line_inv_flag_rec  ;
3240                  IF l_debug_on THEN
3241                     WSH_DEBUG_SV.pop(l_module_name);
3242                  END IF;
3243   	         return;
3244   	      END IF;
3245            END IF;
3246            l_line_inv_flag_rec.invalid_material_status_flag := 'N';
3247            x_line_inv_flag_rec   := l_line_inv_flag_rec  ;
3248       END IF;
3249     /****************Material Status Control**************/
3250       IF l_debug_on THEN
3251          wsh_debug_sv.log(l_module_name, 'x_line_inv_flag_rec.invalid_material_status_flag', x_line_inv_flag_rec.invalid_material_status_flag);
3252       END IF;
3253    END IF;
3254    IF l_debug_on THEN
3255       WSH_DEBUG_SV.pop(l_module_name);
3256    END IF;
3257 --
3258    EXCEPTION
3259       WHEN others THEN
3260 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DETAIL_FOR_CONFIRM');
3261 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3262 
3263          IF C_GET_SERIAL%ISOPEN THEN
3264 	    CLOSE C_GET_SERIAL;
3265          END IF;
3266 --
3267 -- Debug Statements
3268 --
3269      IF l_debug_on THEN
3270          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3271          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3272      END IF;
3273 END Check_Detail_for_Confirm;
3274 
3275 
3276 
3277 -----------------------------------------------------------------------------
3278 --
3279 -- Procedure:     Check_Confirm
3280 -- Parameters:    p_delivery_id, x_return_status
3281 -- Description:   Checks for Confirm action pre-requisites which are
3282 --		  - Delivery Status is OPEN or PACKED
3283 -- NOT YET IMPLEMENTED (JESSICA)              - Details (shipped quantity, inventory controls ) must be specified for all delivery details (lines)
3284 --                - At least one delivery detail (line) is released
3285 --                - All delivery details (lines) are released [warning]
3286 --                - If delivery status is OPEN and containers are assigned to this delivery then all items being shipped on this delivery are packed [warning]
3287 --                - If delivery status is OPEN then containers for this delivery are not over/under packed [warning]
3288 --                - SMC models must be together [warning]
3289 --                - Ship Sets must be complete [warning]
3290 --                - Arrival Sets must be complete [warning]
3291 --                - Delivery flow on trip/s is valid [error/warning]
3292 --
3293 -----------------------------------------------------------------------------
3294 
3295 PROCEDURE Check_Confirm ( p_delivery_id 	IN  NUMBER,
3296                           p_cont_exists_flag     IN  BOOLEAN,
3297                           p_enforce_packing_flag IN  VARCHAR2,
3298                           p_overfilled_flag      IN  BOOLEAN,
3299                           p_underfilled_flag     IN  BOOLEAN,
3300 			  p_ship_from_location   IN NUMBER ,
3301 			  p_ship_to_location     IN NUMBER ,
3302 			  p_freight_code         IN VARCHAR2 ,
3303 			  p_organization_id      IN NUMBER  ,
3304 			  p_initial_pickup_date   IN DATE ,
3305 			  p_ultimate_dropoff_date IN DATE ,
3306 			  p_actual_dep_date 	  IN DATE ,
3307 		          x_return_status 	OUT NOCOPY  VARCHAR2) IS
3308 
3309 
3310 l_unpacked_flag 	BOOLEAN;
3311 l_valid_flag        BOOLEAN;
3312 l_return_status 	VARCHAR2(1);
3313 
3314 -- Variables for trans cal check
3315 
3316 l_ship_from_location NUMBER;
3317 l_ship_to_location NUMBER;
3318 --Bug 6156495 :Variable added
3319 l_temp_date   DATE;
3320 
3321 
3322 record_locked                 EXCEPTION;
3323 PRAGMA EXCEPTION_INIT(record_locked, -54);
3324 others        	              EXCEPTION;
3325 
3326 l_ship_parameter   WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
3327 
3328 
3329 --
3330 l_debug_on BOOLEAN;
3331 --
3332 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_CONFIRM';
3333 --
3334   -- Added for Ship Confirm Message Customization. R12
3335   l_custom_severity varchar2(10);
3336   l_activity_code   varchar2(200) := 'SHIP_CONFIRM_MESSAGE' ;
3337   l_validation_code varchar2(200) := 'BREAK_SHIP_SET';
3338 
3339 -- 10365977
3340 l_chk_shp_rcvg_calendar VARCHAR2(1) := 'Y';
3341 BEGIN
3342    --6156495  :Storing actual_departure_date in global variable so that it can be used again in the procedure 'CHECK_PLAN'
3343    G_ACT_DEPT_DATE := p_actual_dep_date;
3344 
3345 
3346    -- TPA Change
3347    --
3348    -- Debug Statements
3349    --
3350    --
3351    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3352    --
3353    IF l_debug_on IS NULL
3354    THEN
3355        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3356    END IF;
3357    --
3358    IF l_debug_on THEN
3359        WSH_DEBUG_SV.push(l_module_name);
3360        --
3361        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
3362        WSH_DEBUG_SV.log(l_module_name,'P_CONT_EXISTS_FLAG',P_CONT_EXISTS_FLAG);
3363        WSH_DEBUG_SV.log(l_module_name,'P_ENFORCE_PACKING_FLAG',P_ENFORCE_PACKING_FLAG);
3364        WSH_DEBUG_SV.log(l_module_name,'P_OVERFILLED_FLAG',P_OVERFILLED_FLAG);
3365        WSH_DEBUG_SV.log(l_module_name,'P_UNDERFILLED_FLAG',P_UNDERFILLED_FLAG);
3366        WSH_DEBUG_SV.log(l_module_name,'P_SHIP_FROM_LOCATION',P_SHIP_FROM_LOCATION);
3367        WSH_DEBUG_SV.log(l_module_name,'P_SHIP_TO_LOCATION',P_SHIP_TO_LOCATION);
3368        WSH_DEBUG_SV.log(l_module_name,'P_FREIGHT_CODE',P_FREIGHT_CODE);
3369        WSH_DEBUG_SV.log(l_module_name,'P_ORGANIZATION_ID',P_ORGANIZATION_ID);
3370        WSH_DEBUG_SV.log(l_module_name,'P_INITIAL_PICKUP_DATE',P_INITIAL_PICKUP_DATE);
3371        WSH_DEBUG_SV.log(l_module_name,'P_ULTIMATE_DROPOFF_DATE',P_ULTIMATE_DROPOFF_DATE);
3372        WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DEP_DATE',P_ACTUAL_DEP_DATE);
3373    END IF;
3374    --
3375    --
3376    -- Debug Statements
3377    --
3378    IF l_debug_on THEN
3379        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_OVERFILLED',WSH_DEBUG_SV.C_PROC_LEVEL);
3380    END IF;
3381    --
3382    wsh_tpa_delivery_pkg.check_del_overfilled(p_delivery_id, p_cont_exists_flag, p_overfilled_flag, l_return_status);
3383 
3384    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3385 	 x_return_status := l_return_status;
3386 	 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3387 	    --
3388 	    -- Debug Statements
3389 	    --
3390 	    IF l_debug_on THEN
3391 	        WSH_DEBUG_SV.pop(l_module_name);
3392 	    END IF;
3393 	    --
3394 	    RETURN;
3395       END IF;
3396    END IF;
3397 
3398    -- TPA Change
3399    --
3400    -- Debug Statements
3401    --
3402    IF l_debug_on THEN
3403        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_UNDERFILLED',WSH_DEBUG_SV.C_PROC_LEVEL);
3404    END IF;
3405    --
3406    wsh_tpa_delivery_pkg.check_del_underfilled(p_delivery_id, p_cont_exists_flag, p_underfilled_flag, l_return_status);
3407 
3408    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3409 	 x_return_status := l_return_status;
3410 	 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3411 	    --
3412 	    -- Debug Statements
3413 	    --
3414 	    IF l_debug_on THEN
3415 	        WSH_DEBUG_SV.pop(l_module_name);
3416 	    END IF;
3417 	    --
3418 	    RETURN;
3419       END IF;
3420    END IF;
3421 
3422 -- TPA change
3423    --
3424    -- Debug Statements
3425    --
3426    IF l_debug_on THEN
3427        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_SMC',WSH_DEBUG_SV.C_PROC_LEVEL);
3428    END IF;
3429    --
3430    wsh_tpa_delivery_pkg.check_smc( p_delivery_id, l_valid_flag, l_return_status);
3431 
3432    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3433 	 x_return_status := l_return_status;
3434 	 --
3435 	 -- Debug Statements
3436 	 --
3437 	 IF l_debug_on THEN
3438 	     WSH_DEBUG_SV.pop(l_module_name);
3439 	 END IF;
3440 	 --
3441 	 RETURN;
3442    END IF;
3443 
3444    IF NOT (l_valid_flag) THEN
3445       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SMC_INCOMPLETE');
3446       FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
3447 
3448       IF l_debug_on THEN
3449          WSH_DEBUG_SV.log(l_module_name,'g_break_smc_severity',g_break_smc_severity);
3450       END IF;
3451 
3452       If g_break_smc_severity is NULL then
3453          g_break_smc_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
3454                                                                      ,wsh_new_delivery_actions.g_break_smc_msg);
3455       End If;
3456 
3457       IF l_debug_on THEN
3458          WSH_DEBUG_SV.log(l_module_name,'g_break_smc_severity',g_break_smc_severity);
3459       END IF;
3460 
3461       If g_break_smc_severity = 'E' then
3462          --Note. Setting return status to 'W' and message severity to 'E'. The return
3463          --status is checked in wsh_new_delivery_actions.confirm_delivery and treated
3464          --as error if WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc.count > 0.
3465          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3466          WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_ERROR);
3467          WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc := nvl(WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc,0) + 1;
3468          IF l_debug_on THEN
3469              WSH_DEBUG_SV.log(l_module_name,'Going to exit wsh_delivery_validations due to message severity set to (SMC) ',g_break_smc_severity);
3470              WSH_DEBUG_SV.pop(l_module_name);
3471          END IF;
3472          RETURN;
3473       Else
3474          x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3475          WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
3476       End If;
3477    END IF;
3478 
3479 -- TPA change
3480    --
3481    -- Debug Statements
3482    --
3483    IF l_debug_on THEN
3484        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_SHIP_SET',WSH_DEBUG_SV.C_PROC_LEVEL);
3485    END IF;
3486    --
3487    wsh_tpa_delivery_pkg.check_ship_set( p_delivery_id, l_valid_flag, l_return_status);
3488 
3489    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3490 	 x_return_status := l_return_status;
3491 	 --
3492 	 -- Debug Statements
3493 	 --
3494 	 IF l_debug_on THEN
3495 	     WSH_DEBUG_SV.pop(l_module_name);
3496 	 END IF;
3497 	 --
3498 	 RETURN;
3499    END IF;
3500 
3501    IF NOT (l_valid_flag) THEN
3502          FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SHIP_SET_INCOMPLETE');
3503          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
3504 
3505          IF l_debug_on THEN
3506              WSH_DEBUG_SV.log(l_module_name,'g_break_ship_set_severity',g_break_ship_set_severity);
3507          END IF;
3508 
3509          If g_break_ship_set_severity is null then
3510             g_break_ship_set_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
3511                                                                              ,wsh_new_delivery_actions.g_break_ship_set_msg);
3512 
3513          End If;
3514 
3515          IF l_debug_on THEN
3516              WSH_DEBUG_SV.log(l_module_name,'g_break_ship_set_severity',g_break_ship_set_severity);
3517          END IF;
3518 
3519          If g_break_ship_set_severity = 'E' then
3520             --Note. Setting return status to 'W' and message severity to 'E'. The return
3521             --status is checked in wsh_new_delivery_actions.confirm_delivery and treated
3522             --as error if WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc.count > 0.
3523             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3524             WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_ERROR);
3525             WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc := nvl(WSH_NEW_DELIVERY_ACTIONS.g_break_ship_set_or_smc,0) + 1;
3526             IF l_debug_on THEN
3527                WSH_DEBUG_SV.log(l_module_name,'Going to exit wsh_delivery_validations due to message severity set to (ShipSet) ',g_break_ship_set_severity);
3528                WSH_DEBUG_SV.pop(l_module_name);
3529             END IF;
3530             RETURN;
3531          Else
3532             x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3533             WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
3534          End If;
3535    END IF;
3536 	/* H integration anxsharm */
3537 
3538    -- REmoved call to update_leg_sequence here this is now done at the end of ship confirm.
3539 /**   --
3540    -- Debug Statements
3541    --
3542    IF l_debug_on THEN
3543        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
3544    END IF;
3545    --
3546    wsh_new_delivery_actions.update_leg_sequence(
3547      p_delivery_id => p_delivery_id,
3548      x_return_status => l_return_status);
3549 
3550    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3551 	 x_return_status := l_return_status;
3552 	 --
3553 	 -- Debug Statements
3554 	 --
3555 	 IF l_debug_on THEN
3556 	     WSH_DEBUG_SV.pop(l_module_name);
3557 	 END IF;
3558 	 --
3559 	 RETURN;
3560    END IF;
3561 **/
3562 
3563 -- 10365977: before Call to  -- Check for transportation calendar requirements
3564 
3565 FND_PROFILE.Get('WSH_CHK_SHPG_RCV_CAL', l_chk_shp_rcvg_calendar);
3566 
3567 IF l_debug_on THEN
3568        WSH_DEBUG_SV.log(l_module_name,'Profile: - l_chk_shp_rcvg calendar : ', l_chk_shp_rcvg_calendar);
3569 END IF;
3570 
3571 -- 10365977: Only if this profile has Value of N it will Skip Calendar Check (Y and Null will enforce check Calendar)
3572 IF ( nvl(l_chk_shp_rcvg_calendar, 'Y')  = 'Y' ) THEN
3573 --{
3574 -- Check for transportation calendar requirements
3575 
3576    -- TPA Change
3577    --
3578    -- Debug Statements
3579    --
3580    --Bug 6156495 (Determining  the date to be passed to the API wsh_tpa_delivery_pkg.check_calendar)
3581    IF p_ultimate_dropoff_date > P_ACTUAL_DEP_DATE
3582    THEN
3583    l_temp_date := p_ultimate_dropoff_date;
3584    ELSE
3585    l_temp_date := P_ACTUAL_DEP_DATE;
3586    END IF;
3587    --Bug 6156495 -End of code addition
3588 
3589 
3590    IF l_debug_on THEN
3591        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_CALENDAR',WSH_DEBUG_SV.C_PROC_LEVEL);
3592    END IF;
3593 -- modified ship_assoc type to 'HR_LOCATION' and receive_assoc_type to 'CUSTOMER_SITE' for bug 5880742
3594    --
3595    wsh_tpa_delivery_pkg.check_calendar(p_entity_type   	=> 'DELIVERY',
3596                            p_entity_id  		=> p_delivery_id,
3597 --			   p_ship_date    		=> p_initial_pickup_date  ,--6156495
3598 			   p_ship_date    		=> P_ACTUAL_DEP_DATE  ,
3599 			   p_ship_assoc_type 		=> 'HR_LOCATION',
3600 			   p_ship_location_id		=> p_ship_from_location,
3601 			   p_freight_code   		=> p_freight_code,
3602 			   p_freight_org_id		=> p_organization_id ,
3603 --			   p_receive_date 		=> p_ultimate_dropoff_date ,--6156495
3604 			   p_receive_date 		=> l_temp_date ,
3605 			   p_receive_assoc_type  	=> 'CUSTOMER_SITE',
3606 			   p_receive_location_id	=> p_ship_to_location,
3607 			   p_update_flag       		=> 'N',
3608 			   x_return_status		=> l_return_status);
3609 
3610    IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3611       x_return_status := l_return_status;
3612    END IF;
3613 --
3614 -- } check-shpg_rcvg calendar
3615 END IF;
3616 --
3617 -- Debug Statements
3618 --
3619 IF l_debug_on THEN
3620     WSH_DEBUG_SV.pop(l_module_name);
3621 END IF;
3622 --
3623    EXCEPTION
3624       WHEN others THEN
3625 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_CONFIRM');
3626 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3627 
3628 --
3629 -- Debug Statements
3630 --
3631 IF l_debug_on THEN
3632     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3633     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3634 END IF;
3635 --
3636 END Check_Confirm;
3637 
3638 -----------------------------------------------------------------------------
3639 --
3640 -- Procedure:     Check_Reopen
3641 -- Parameters:    p_delivery_id, x_return_status
3642 -- Description:   Checks for Reopen action pre-requisites which are
3643 --		  - Delivery status is PACKED or CONFIRMED
3644 --
3645 -----------------------------------------------------------------------------
3646 
3647 PROCEDURE Check_Reopen ( p_delivery_id 		IN  NUMBER,
3648 		         x_return_status 	OUT NOCOPY  VARCHAR2) IS
3649 
3650 CURSOR delivery_status IS
3651 SELECT status_code
3652 FROM   wsh_new_deliveries
3653 WHERE  delivery_id = p_delivery_id;
3654 
3655 l_del_status  VARCHAR2(2);
3656 others        EXCEPTION;
3657 
3658 --
3659 l_debug_on BOOLEAN;
3660 --
3661 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_REOPEN';
3662 --
3663 BEGIN
3664 
3665    --
3666    -- Debug Statements
3667    --
3668    --
3669    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3670    --
3671    IF l_debug_on IS NULL
3672    THEN
3673        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3674    END IF;
3675    --
3676    IF l_debug_on THEN
3677        WSH_DEBUG_SV.push(l_module_name);
3678        --
3679        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
3680    END IF;
3681    --
3682    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3683 
3684    OPEN delivery_status;
3685    FETCH delivery_status INTO l_del_status;
3686 
3687    IF (delivery_status%NOTFOUND) THEN
3688 	 CLOSE delivery_status;
3689 	 raise others;
3690    END IF;
3691 
3692    CLOSE delivery_status;
3693 
3694    IF (l_del_status <> 'CO') AND (l_del_status <> 'PA') AND (l_del_status <> 'OP') THEN
3695 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_CO_PA_STATUS');
3696 	 --
3697 	 -- Debug Statements
3698 	 --
3699 	 IF l_debug_on THEN
3700 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3701 	 END IF;
3702 	 --
3703 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
3704 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3705 	 wsh_util_core.add_message(x_return_status);
3706 	 --
3707 	 -- Debug Statements
3708 	 --
3709 	 IF l_debug_on THEN
3710 	     WSH_DEBUG_SV.pop(l_module_name);
3711 	 END IF;
3712 	 --
3713 	 RETURN;
3714    END IF;
3715 
3716 --
3717 -- Debug Statements
3718 --
3719 IF l_debug_on THEN
3720     WSH_DEBUG_SV.pop(l_module_name);
3721 END IF;
3722 --
3723    EXCEPTION
3724       WHEN others THEN
3725 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_REOPEN');
3726 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3727 
3728 --
3729 -- Debug Statements
3730 --
3731 IF l_debug_on THEN
3732     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3733     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3734 END IF;
3735 --
3736 END Check_Reopen;
3737 
3738 
3739 -----------------------------------------------------------------------------
3740 --
3741 -- Procedure:     Check_Intransit
3742 -- Parameters:    p_delivery_id, x_return_status
3743 -- Description:   Checks for Reopen action pre-requisites which are
3744 --		  - Delivery status is CONFIRMED
3745 --                - First pickup stop status is CLOSED
3746 --
3747 -----------------------------------------------------------------------------
3748 
3749 PROCEDURE Check_Intransit ( p_delivery_id 	IN  NUMBER,
3750 		            x_return_status 	OUT NOCOPY  VARCHAR2) IS
3751 
3752 CURSOR delivery_status IS
3753 SELECT status_code
3754 FROM   wsh_new_deliveries
3755 WHERE  delivery_id = p_delivery_id;
3756 
3757 CURSOR stop_status IS
3758 SELECT st.status_code
3759 FROM   wsh_trip_stops st,
3760 	  wsh_delivery_legs dg,
3761 	  wsh_new_deliveries dl
3762 WHERE  dl.delivery_id = p_delivery_id AND
3763 	  dg.delivery_id = dl.delivery_id AND
3764 	  st.stop_id = dg.pick_up_stop_id AND
3765 	  dl.initial_pickup_location_id = st.stop_location_id;
3766 
3767 l_del_status  VARCHAR2(2);
3768 l_stop_status VARCHAR2(2);
3769 others        EXCEPTION;
3770 
3771 --
3772 l_debug_on BOOLEAN;
3773 --
3774 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_INTRANSIT';
3775 --
3776 BEGIN
3777 
3778    --
3779    -- Debug Statements
3780    --
3781    --
3782    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3783    --
3784    IF l_debug_on IS NULL
3785    THEN
3786        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3787    END IF;
3788    --
3789    IF l_debug_on THEN
3790        WSH_DEBUG_SV.push(l_module_name);
3791        --
3792        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
3793    END IF;
3794    --
3795 -- J-IB-NPARIKH-{
3796 -- Stubbed out as no one is calling this API.
3797 /*
3798    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3799 
3800    OPEN delivery_status;
3801    FETCH delivery_status INTO l_del_status;
3802 
3803    IF (delivery_status%NOTFOUND) THEN
3804 	 CLOSE delivery_status;
3805 	 raise others;
3806    END IF;
3807 
3808    CLOSE delivery_status;
3809 
3810    IF (l_del_status <> 'CO') THEN
3811 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_CONFIRMED');
3812 	 --
3813 	 -- Debug Statements
3814 	 --
3815 	 IF l_debug_on THEN
3816 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3817 	 END IF;
3818 	 --
3819 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
3820 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3821 	 wsh_util_core.add_message(x_return_status);
3822 	 --
3823 	 -- Debug Statements
3824 	 --
3825 	 IF l_debug_on THEN
3826 	     WSH_DEBUG_SV.pop(l_module_name);
3827 	 END IF;
3828 	 --
3829 	 RETURN;
3830    END IF;
3831 */
3832    -- J-IB-NPARIKH-}
3833 
3834 /*
3835    OPEN stop_status;
3836    FETCH stop_status INTO l_stop_status;
3837 
3838    IF (stop_status%NOTFOUND) THEN
3839 	 CLOSE stop_status;
3840 	 raise others;
3841    END IF;
3842 
3843    CLOSE stop_status;
3844 
3845    IF (l_stop_status <> 'CL') THEN
3846 	 FND_MESSAGE.SET_NAME('WSH','First-pickup-stop-not-closed');
3847 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3848 	 wsh_util_core.add_message(x_return_status);
3849 	 RETURN;
3850    END IF;
3851 */
3852 
3853 
3854 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;   -- J-IB-NPARIKH
3855 --
3856 -- Debug Statements
3857 --
3858 IF l_debug_on THEN
3859     WSH_DEBUG_SV.pop(l_module_name);
3860 END IF;
3861 --
3862    EXCEPTION
3863       WHEN others THEN
3864 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_INTRANSIT');
3865 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3866 
3867 --
3868 -- Debug Statements
3869 --
3870 IF l_debug_on THEN
3871     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3872     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3873 END IF;
3874 --
3875 END Check_Intransit;
3876 
3877 -----------------------------------------------------------------------------
3878 --
3879 -- Procedure:     Check_Close
3880 -- Parameters:    p_delivery_id = delivery being closed
3881 --                p_manual_flag = 'Y' if user invokes the UI action Close Del.
3882 --                                'N' if its drop-off stop is being closed
3883 --        p_old_status_code = delivery's original status_code
3884 --                x_return_status = SUCCESS -> can close,
3885 --                                  ERROR -> cannot close
3886 --
3887 -- Description:   Checks for Close action pre-requisites which are
3888 --                - POD has been received
3889 --                - If POD not received then last drop-off stop status
3890 --                  is ARRIVED or CLOSED
3891 --        If manually closing, the pre-requisite is either:
3892 --                - Delivery is open with no details or legs assigned.
3893 --                - Delivery is IN TRANSIT and owns all stops still open.
3894 --
3895 -----------------------------------------------------------------------------
3896 
3897 PROCEDURE Check_Close ( p_delivery_id       IN  NUMBER,
3898             p_manual_flag       IN  VARCHAR2,
3899             p_old_status_code   IN  VARCHAR2,
3900                 x_return_status     OUT NOCOPY  VARCHAR2) IS
3901 
3902   CURSOR dropoff_stop_info (l_delivery_id NUMBER) IS
3903   SELECT dg.drop_off_stop_id,
3904         st.stop_location_id
3905   FROM   wsh_new_deliveries dl,
3906         wsh_delivery_legs  dg,
3907         wsh_trip_stops     st
3908   WHERE  dl.delivery_id = l_delivery_id AND
3909         dl.delivery_id = dg.delivery_id AND
3910         dg.drop_off_stop_id = st.stop_id AND
3911         dl.ultimate_dropoff_location_id = st.stop_location_id;
3912 /*Refer POD Information from WSH_DELIVERY_LEGS. Bug#1918342*/
3913   CURSOR check_POD (l_stop_id NUMBER, l_delivery_id NUMBER) IS
3914   SELECT dg.pod_flag
3915   FROM   wsh_delivery_legs dg,
3916          wsh_document_instances di
3917   WHERE  dg.drop_off_stop_id = l_stop_id AND
3918         di.entity_id = dg.delivery_leg_id AND
3919         di.entity_name = 'WSH_DELIVERY_LEGS' AND
3920         di.document_type = 'BOL' AND
3921         dg.pod_flag = 'Y' AND
3922         dg.pod_date IS NULL AND
3923         di.status IN ('OPEN','PLANNED');
3924 
3925   CURSOR have_details(l_delivery_id NUMBER) IS
3926   SELECT delivery_detail_id
3927   FROM   wsh_delivery_assignments_v
3928   WHERE  delivery_id = l_delivery_id
3929   AND    rownum = 1;
3930 
3931   CURSOR have_legs(l_delivery_id NUMBER) IS
3932   SELECT delivery_leg_id
3933   FROM   wsh_delivery_legs
3934   WHERE  delivery_id = l_delivery_id;
3935 
3936   CURSOR delivery_leg_stops(l_delivery_id NUMBER) IS
3937   SELECT dg.pick_up_stop_id,
3938          pu_stop.status_code  pu_status,
3939      dg.drop_off_stop_id,
3940          do_stop.status_code  do_status
3941   FROM   wsh_delivery_legs dg,
3942          wsh_trip_stops pu_stop,
3943          wsh_trip_stops do_stop
3944   WHERE  dg.delivery_id = l_delivery_id
3945   AND    pu_stop.stop_id = dg.pick_up_stop_id
3946   AND    do_stop.stop_id = dg.drop_off_stop_id;
3947 
3948   CURSOR shared_stops(l_delivery_id NUMBER, l_stop_id NUMBER) IS
3949   SELECT dg.delivery_leg_id
3950   FROM   wsh_delivery_legs dg, wsh_new_deliveries nd
3951   WHERE  dg.pick_up_stop_id = l_stop_id
3952   AND    dg.delivery_id <> l_delivery_id
3953   AND    dg.delivery_id = nd.delivery_id
3954   AND    nd.delivery_type = 'STANDARD'
3955   UNION
3956   SELECT dg.delivery_leg_id
3957   FROM   wsh_delivery_legs dg, wsh_new_deliveries nd
3958   WHERE  dg.drop_off_stop_id = l_stop_id
3959   AND    dg.delivery_id <> l_delivery_id
3960   AND    dg.delivery_id = nd.delivery_id
3961   AND    nd.delivery_type = 'STANDARD';
3962 
3963   -- bug 2429322: check that all stops are closed when
3964   --              automatically closing delivery.
3965   --    Sufficient to check drop off stops only;
3966   --    A drop off stop being closed implies that pick up stop is closed.
3967   CURSOR stops_not_closed(l_delivery_id NUMBER) IS
3968   SELECT ts.stop_id
3969   FROM wsh_trip_stops ts,
3970        wsh_delivery_legs dg
3971   WHERE dg.delivery_id = l_delivery_id
3972   AND   ts.stop_id = dg.drop_off_stop_id
3973   AND   ts.status_code in ('OP', 'AR')
3974   AND   rownum = 1;
3975 
3976   l_stop_id           NUMBER;
3977   l_stop_location_id  NUMBER;
3978   l_pod_flag          wsh_delivery_legs.pod_flag%TYPE;
3979   leg                 delivery_leg_stops%ROWTYPE;
3980   num                 NUMBER;
3981   shared_flag         BOOLEAN;
3982 
3983 
3984 --
3985 l_debug_on BOOLEAN;
3986 --
3987 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_CLOSE';
3988 --
3989 BEGIN
3990 
3991     --
3992     -- Debug Statements
3993     --
3994     --
3995     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3996     --
3997     IF l_debug_on IS NULL
3998     THEN
3999         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4000     END IF;
4001     --
4002     IF l_debug_on THEN
4003         WSH_DEBUG_SV.push(l_module_name);
4004         --
4005         WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
4006         WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_FLAG',P_MANUAL_FLAG);
4007         WSH_DEBUG_SV.log(l_module_name,'P_OLD_STATUS_CODE',P_OLD_STATUS_CODE);
4008     END IF;
4009 
4010     /**
4011     -- J-IB-NPARIKH-{
4012     --
4013     -- stubbed out as no longer being called.
4014     --
4015          x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4016          RETURN;
4017     -- J-IB-NPARIKH-}
4018     **/
4019     --
4020     IF p_manual_flag = 'N' THEN
4021       -- Close called from Stop close. Need to check if POD requirements
4022       -- are fulfilled. If not, do not close the delivery, simply return
4023 
4024       -- bug 2429322: Make sure all stops associated with this delivey
4025       --    are closed, especially if delivery is on two or more trips.
4026       OPEN  stops_not_closed(p_delivery_id);
4027       FETCH stops_not_closed INTO l_stop_id;
4028       IF stops_not_closed%NOTFOUND THEN
4029         l_stop_id := NULL;
4030       END IF;
4031       CLOSE stops_not_closed;
4032 
4033       IF l_stop_id IS NOT NULL THEN
4034         -- this status signals: Do not close this delivery.
4035         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4036         --
4037         -- Debug Statements
4038         --
4039         IF l_debug_on THEN
4040             WSH_DEBUG_SV.pop(l_module_name);
4041         END IF;
4042         --
4043         return;
4044       END IF;
4045 
4046 
4047       -- TO DO: Log exceptions if the delivery is not PODed
4048 
4049       l_pod_flag := NULL;
4050 
4051 
4052       OPEN  dropoff_stop_info (p_delivery_id);
4053       FETCH dropoff_stop_info INTO l_stop_id, l_stop_location_id;
4054       CLOSE dropoff_stop_info;
4055 
4056       OPEN  check_pod (l_stop_id, p_delivery_id);
4057       FETCH check_pod INTO l_pod_flag;
4058       IF check_pod%NOTFOUND THEN
4059         l_pod_flag := NULL;
4060       END IF;
4061       CLOSE check_pod;
4062 
4063       IF (l_pod_flag IS NULL) THEN
4064       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4065       ELSE
4066       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4067       --
4068       -- Debug Statements
4069       --
4070       IF l_debug_on THEN
4071           WSH_DEBUG_SV.pop(l_module_name);
4072       END IF;
4073       --
4074       return;
4075       END IF;
4076 
4077     ELSE -- p_manual_flag = 'Y'
4078 
4079     IF p_old_status_code = 'OP' THEN
4080 
4081       OPEN   have_details(p_delivery_id);
4082       FETCH  have_details INTO num;
4083       IF have_details%NOTFOUND THEN
4084         num := NULL;
4085       END IF;
4086       CLOSE  have_details;
4087 
4088       IF num IS NOT NULL THEN
4089         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4090         --
4091         -- Debug Statements
4092         --
4093         IF l_debug_on THEN
4094             WSH_DEBUG_SV.pop(l_module_name);
4095         END IF;
4096         --
4097         return;
4098       END IF;
4099 
4100       OPEN   have_legs(p_delivery_id);
4101       FETCH  have_legs INTO num;
4102       IF have_legs%NOTFOUND THEN
4103         num := NULL;
4104       END IF;
4105       CLOSE  have_legs;
4106 
4107       IF num IS NOT NULL THEN
4108         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4109         --
4110         -- Debug Statements
4111         --
4112         IF l_debug_on THEN
4113             WSH_DEBUG_SV.pop(l_module_name);
4114         END IF;
4115         --
4116         return;
4117       END IF;
4118 
4119       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4120 
4121     ELSIF p_old_status_code = 'IT' THEN
4122 
4123       -- Look for stops that are not closed and shared by other deliveries.
4124       -- These stops should not be shared with other deliveries.
4125       -- We don't need to worry about closed stops.
4126 
4127       shared_flag := FALSE;
4128 
4129       OPEN  delivery_leg_stops(p_delivery_id);
4130           FETCH delivery_leg_stops INTO leg;
4131 
4132           WHILE delivery_leg_stops%FOUND LOOP
4133 
4134         IF leg.pu_status <> 'CL' THEN
4135           OPEN shared_stops(p_delivery_id, leg.pick_up_stop_id);
4136               FETCH shared_stops INTO NUM;
4137               shared_flag := shared_stops%FOUND;
4138               CLOSE shared_stops;
4139             END IF;
4140 
4141         IF shared_flag THEN
4142               GOTO loop_end;
4143             END IF;
4144 
4145             IF leg.do_status <> 'CL' THEN
4146           OPEN shared_stops(p_delivery_id, leg.drop_off_stop_id);
4147               FETCH shared_stops INTO NUM;
4148               shared_flag := shared_stops%FOUND;
4149               CLOSE shared_stops;
4150             END IF;
4151 
4152         IF shared_flag THEN
4153               GOTO loop_end;
4154             END IF;
4155 
4156         FETCH delivery_leg_stops INTO leg;
4157       END LOOP;
4158       << loop_end >>
4159 
4160       CLOSE delivery_leg_stops;
4161 
4162       IF shared_flag THEN
4163         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4164             --
4165             -- Debug Statements
4166             --
4167             IF l_debug_on THEN
4168                 WSH_DEBUG_SV.pop(l_module_name);
4169             END IF;
4170             --
4171             return;
4172           ELSE
4173         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4174           END IF;
4175 
4176     ELSE
4177           -- any other status is invalid for closing.
4178       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4179     END IF;
4180 
4181     END IF;
4182 
4183 --
4184 -- Debug Statements
4185 --
4186 IF l_debug_on THEN
4187     WSH_DEBUG_SV.pop(l_module_name);
4188 END IF;
4189 --
4190    EXCEPTION
4191       WHEN others THEN
4192        wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_CLOSE');
4193        x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4194 
4195 --
4196 -- Debug Statements
4197 --
4198 IF l_debug_on THEN
4199     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4200     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4201 END IF;
4202 --
4203 END;
4204 
4205 
4206 -----------------------------------------------------------------------------
4207 --
4208 -- Procedure:     Check_Close
4209 -- Parameters:    p_in_rec.delivery_id = delivery being closed
4210 --                p_in_rec.manual_flag = 'Y' if user invokes the UI action Close Del.
4211 --                                       'N' if its drop-off stop is being closed
4212 --		              p_in_rec.stop_id = Stop ID of stop being closed in case of automatic close.
4213 --		              p_in_rec.status_code = delivery's current status_code
4214 --                x_allowed         Close operation is allowed or not
4215 --                                    'Y' : Allowed
4216 --                                    'YW': Allowed with warnings
4217 --                                    'N' : Not Allowed
4218 --                                    'NW': Not Allowed with warnings
4219 --                x_return_status = Return status of API
4220 --
4221 -- Description:   This API Validates if delivery can be closed or not.
4222 --                Pre-requisites for automatic closing are:
4223 --                - All other drop-off stops(other than current one) for delivery are closed.
4224 --                - POD has been received
4225 --		              If manually closing, the pre-requisite is either
4226 --                - Delivery is open with no details or legs assigned.
4227 --                OR
4228 --                - Delivery is IN TRANSIT and exclusively owns all stops still open.
4229 --
4230 --               Pack J Exceptions project - Check for exception for any type of closing
4231 --
4232 -----------------------------------------------------------------------------
4233 
4234 -- J-IB-NPARIKH-{
4235 PROCEDURE Check_Close
4236             (
4237                p_in_rec             IN         ChgStatus_in_rec_type,
4238                x_return_status      OUT NOCOPY VARCHAR2,
4239                x_allowed            OUT NOCOPY VARCHAR2
4240             )
4241 IS
4242 --{
4243     --
4244     -- bug 2429322: check that all stops are closed when
4245     --              automatically closing delivery.
4246     --    Sufficient to check drop off stops only;
4247     --    A drop off stop being closed implies that pick up stop is closed.
4248     CURSOR stops_not_closed(p_delivery_id NUMBER, p_stop_id NUMBER) IS
4249     SELECT 1
4250     FROM   wsh_trip_stops ts,
4251            wsh_delivery_legs dg
4252     WHERE  dg.delivery_id  = p_delivery_id
4253     AND    ts.stop_id      = dg.drop_off_stop_id
4254     AND    ts.stop_id     <> p_stop_id
4255     AND    ts.status_code in ('OP', 'AR')
4256     AND    rownum = 1;
4257     --
4258     --
4259     /*Refer POD Information from WSH_DELIVERY_LEGS. Bug#1918342*/
4260     --
4261     -- Check if POD has been pending (pod_date null)
4262     --
4263     CURSOR check_POD (p_stop_id NUMBER) IS
4264     SELECT 1
4265     FROM   wsh_delivery_legs dg,
4266            wsh_document_instances di
4267     WHERE  dg.drop_off_stop_id = p_stop_id
4268     AND    di.entity_id        = dg.delivery_leg_id
4269     AND    di.entity_name      = 'WSH_DELIVERY_LEGS'
4270     AND    di.document_type    = 'BOL'
4271     AND    dg.pod_flag         = 'Y'
4272     AND    dg.pod_date         IS NULL
4273     AND    di.status           IN ('OPEN','PLANNED');
4274     --
4275     --
4276     CURSOR have_details (p_delivery_id NUMBER) IS
4277     SELECT 1
4278     FROM   wsh_delivery_assignments_v
4279     WHERE  delivery_id = p_delivery_id
4280     AND    rownum      = 1;
4281     --
4282     --
4283     CURSOR have_legs (p_delivery_id NUMBER) IS
4284     SELECT 1
4285     FROM   wsh_delivery_legs
4286     WHERE  delivery_id = p_delivery_id
4287     AND    rownum      = 1;
4288     --
4289     --
4290     -- Check if delivery is associated with any OP/AR stops which
4291     -- also has some other deliveries associated with it.
4292     --
4293     CURSOR shared_stops_csr (p_delivery_id NUMBER)
4294     IS
4295     SELECT 1
4296     FROM   wsh_delivery_legs wdl,
4297            wsh_Trip_stops    wts
4298     WHERE  wdl.delivery_id = p_delivery_id
4299     AND    (
4300                 wdl.pick_up_stop_id  = wts.stop_id
4301              OR wdl.drop_off_stop_id = wts.stop_id
4302            )
4303     AND    wts.status_code <> 'CL'
4304     AND    EXISTS
4305             (
4306                 SELECT 1
4307                 FROM   wsh_delivery_legs wdl1, wsh_new_deliveries wnd
4308                 WHERE  wdl1.delivery_id  <> p_delivery_id
4309                 AND    wdl1.delivery_id = wnd.delivery_id
4310                 AND    wnd.delivery_type = 'STANDARD'
4311                 AND    (
4312                             wdl1.pick_up_stop_id  = wts.stop_id
4313                          OR wdl1.drop_off_stop_id = wts.stop_id
4314                        )
4315             )
4316     AND    rownum = 1;
4317     --
4318     --
4319     l_dummy           NUMBER;
4320     l_num_warnings          NUMBER;
4321     l_num_errors            NUMBER;
4322     --
4323     -- Exception variables
4324     l_exceptions_tab  wsh_xc_util.XC_TAB_TYPE;
4325     l_exp_logged      BOOLEAN := FALSE;
4326     l_msg_count       NUMBER;
4327     l_msg_data        VARCHAR2(4000);
4328     l_return_status   VARCHAR2(1);
4329     l_exp_warning     BOOLEAN := FALSE;
4330     --
4331     l_debug_on BOOLEAN;
4332     --
4333     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_CLOSE';
4334 --}
4335 BEGIN
4336 --{
4337     --
4338     -- Debug Statements
4339     --
4340     --
4341     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4342     --
4343     IF l_debug_on IS NULL
4344     THEN
4345         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4346     END IF;
4347     --
4348     IF l_debug_on THEN
4349         WSH_DEBUG_SV.push(l_module_name);
4350         --
4351         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
4352         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
4353         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
4354         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
4355         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
4356         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
4357         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
4358         wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id     ', p_in_rec.stop_id     );
4359     END IF;
4360     --
4361     l_num_warnings  := 0;
4362     l_num_errors    := 0;
4363     --
4364     IF p_in_rec.manual_flag = 'N'
4365     THEN
4366     --{
4367         -- bug 2429322: Make sure all stops associated with this delivey
4368         --    are closed, especially if delivery is on two or more trips.
4369         --
4370         --
4371         IF p_in_rec.stop_id IS NULL
4372         THEN
4373             RAISE wsh_util_core.e_not_allowed;
4374         END IF;
4375         --
4376         --
4377         OPEN  stops_not_closed(p_in_rec.delivery_id, p_in_rec.stop_id);
4378         FETCH stops_not_closed INTO l_dummy;
4379         --
4380         IF stops_not_closed%FOUND
4381         THEN
4382             --CLOSE stops_not_closed;
4383             --
4384             -- Delivery associated with stops which are not closed
4385             -- Cannot close delivery.
4386             --
4387             FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_NO_CLOSE_OPEN_STOP');
4388             FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_in_rec.delivery_id));
4389             wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
4390             RAISE wsh_util_core.e_not_allowed;
4391         END IF;
4392         CLOSE stops_not_closed;
4393         --
4394         OPEN  check_pod (p_in_rec.stop_id);
4395         FETCH check_pod INTO l_dummy;
4396         --
4397         IF check_pod%FOUND
4398         THEN
4399             --CLOSE check_pod;
4400             --
4401             -- POD not received
4402             -- Cannot close delivery.
4403             --
4404             FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_NO_CLOSE_POD');
4405             FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_in_rec.delivery_id));
4406             wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
4407             RAISE wsh_util_core.e_not_allowed;
4408         END IF;
4409         --
4410         CLOSE check_pod;
4411         --
4412     --}
4413     ELSE        -- p_manual_flag = 'Y'
4414     --{
4415         IF p_in_rec.status_code = 'OP'
4416         THEN
4417         --{
4418             --
4419             OPEN  have_details (p_in_rec.delivery_id);
4420             FETCH have_details INTO l_dummy;
4421             --
4422             IF have_details%FOUND
4423             THEN
4424                 --CLOSE have_details;
4425                 --
4426                 -- Delivery has lines
4427                 -- Cannot close delivery.
4428                 --
4429                 FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_NO_CLOSE_DETAIL');
4430                 FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_in_rec.delivery_id));
4431                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
4432                 RAISE wsh_util_core.e_not_allowed;
4433 
4434             END IF;
4435             --
4436             CLOSE have_details;
4437             --
4438             --
4439             OPEN  have_legs (p_in_rec.delivery_id);
4440             FETCH have_legs INTO l_dummy;
4441             --
4442             IF have_legs%FOUND
4443             THEN
4444                 --CLOSE have_legs;
4445                 --
4446                 -- Delivery has legs
4447                 -- Cannot close delivery.
4448                 --
4449                 FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_NO_CLOSE_LEGS');
4450                 FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_in_rec.delivery_id));
4451                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
4452 
4453                 RAISE wsh_util_core.e_not_allowed;
4454             END IF;
4455             --
4456             CLOSE have_legs;
4457             --
4458         --}
4459         ELSIF p_in_rec.status_code = 'IT'
4460         THEN
4461         --{
4462             -- Look for stops that are not closed and shared by other deliveries.
4463             -- These stops should not be shared with other deliveries.
4464             -- We don't need to worry about closed stops.
4465             --
4466             OPEN  shared_stops_csr (p_in_rec.delivery_id);
4467             FETCH shared_stops_csr INTO l_dummy;
4468             --
4469             IF shared_stops_csr%FOUND
4470             THEN
4471                 --CLOSE shared_stops_csr;
4472                 FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_NO_CLOSE_SHR_STOPS');
4473                 FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_in_rec.delivery_id));
4474                 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
4475                 RAISE wsh_util_core.e_not_allowed;
4476             END IF;
4477             --
4478             CLOSE shared_stops_csr;
4479         --}
4480         ELSE
4481         --{
4482             RAISE wsh_util_core.e_not_allowed;
4483         --}
4484         END IF;
4485     --}
4486     END IF;
4487     --
4488 
4489     -- Check for Exceptions against Delivery and its Contents
4490     IF l_debug_on THEN
4491        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);    END IF;
4492     l_exceptions_tab.delete;
4493     l_exp_logged      := FALSE;
4494     l_exp_warning     := FALSE;
4495     WSH_XC_UTIL.Check_Exceptions (
4496                                      p_api_version           => 1.0,
4497                                      x_return_status         => l_return_status,
4498                                      x_msg_count             => l_msg_count,
4499                                      x_msg_data              => l_msg_data,
4500                                      p_logging_entity_id     => p_in_rec.delivery_id,
4501                                      p_logging_entity_name   => 'DELIVERY',
4502                                      p_consider_content      => 'Y',
4503                                      x_exceptions_tab        => l_exceptions_tab
4504                                    );
4505     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
4506          x_return_status := l_return_status;
4507          wsh_util_core.add_message(x_return_status);
4508          RAISE FND_API.G_EXC_ERROR;
4509     END IF;
4510     FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
4511          IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
4512             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
4513                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
4514             ELSE
4515                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
4516             END IF;
4517             FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
4518             FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
4519             FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Error');
4520             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4521             wsh_util_core.add_message(x_return_status);
4522             l_num_warnings := l_num_warnings + 1 ;
4523             RAISE wsh_util_core.e_not_allowed;
4524          ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
4525             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
4526                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
4527                FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
4528                FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
4529                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
4530                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4531                wsh_util_core.add_message(x_return_status);
4532                l_num_warnings := l_num_warnings + 1 ;
4533                l_exp_warning := TRUE;
4534             ELSIF NOT (l_exp_logged) THEN
4535                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
4536                FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
4537                FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
4538                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
4539                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
4540                l_exp_logged := TRUE;
4541                wsh_util_core.add_message(x_return_status);
4542                l_num_warnings := l_num_warnings + 1 ;
4543                l_exp_warning := TRUE;
4544             END IF;
4545          END IF;
4546     END LOOP;
4547 
4548 
4549    IF l_num_errors > 0
4550    THEN
4551         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
4552         x_allowed               := 'N';
4553    ELSIF l_num_warnings > 0
4554    THEN
4555         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4556    ELSE
4557         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4558    END IF;
4559    --
4560    --
4561    -- If Exceptions have warnings, then display warnings but allow to proceed
4562    IF l_exp_warning THEN
4563       x_allowed := 'YW';
4564    ELSE
4565       x_allowed := 'Y';
4566    END IF;
4567     --
4568     --
4569     -- Debug Statements
4570     --
4571     IF l_debug_on THEN
4572         WSH_DEBUG_SV.pop(l_module_name);
4573     END IF;
4574     --
4575 --}
4576 EXCEPTION
4577 --{
4578     WHEN wsh_util_core.e_not_allowed THEN
4579       IF l_num_warnings > 0
4580       THEN
4581           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4582       ELSE
4583           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4584       END IF;
4585       --
4586       x_allowed       := 'N';
4587       --
4588       --
4589       IF l_debug_on THEN
4590         WSH_DEBUG_SV.logmsg(l_module_name,'wsh_util_core.e_not_allowed exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4591         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:wsh_util_core.e_not_allowed');
4592       END IF;
4593       --
4594     WHEN wsh_util_core.e_not_allowed_warning THEN
4595       IF l_num_warnings > 0
4596       THEN
4597           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4598       ELSE
4599           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4600       END IF;
4601       --
4602       x_allowed := 'NW';
4603       --
4604       --
4605       IF l_debug_on THEN
4606         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4607         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4608       END IF;
4609       --
4610     WHEN FND_API.G_EXC_ERROR THEN
4611 
4612       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4613       --
4614       IF l_debug_on THEN
4615         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4616         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4617       END IF;
4618       --
4619     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4620 
4621       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4622       --
4623       IF l_debug_on THEN
4624         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4625         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4626       END IF;
4627       --
4628     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4629       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4630       --
4631       IF l_debug_on THEN
4632         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4633         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
4634       END IF;
4635       --
4636     WHEN OTHERS THEN
4637 
4638       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4639       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.Check_Close',l_module_name);
4640       --
4641       IF l_debug_on THEN
4642         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4643       END IF;
4644       --
4645 --}
4646 END;
4647 -- J-IB-NPARIKH-}
4648 
4649 
4650 
4651 -----------------------------------------------------------------------------
4652 --
4653 -- Procedure:     Check_Delete_Delivery
4654 -- Parameters:    p_delivery_id, x_return_status
4655 -- Description:   Checks for Delete Delivery action pre-requisites which are
4656 --                - Delivery status is OPEN
4657 --                - No freight costs assigned to delivery [warning]
4658 --  NOT SUPPORTED YET              - No documents assigned to delivery [warning]
4659 --                - No delivery details assigned to this delivery [warning]
4660 --
4661 -----------------------------------------------------------------------------
4662 
4663 PROCEDURE Check_Delete_Delivery ( p_delivery_id   	IN  NUMBER,
4664 		        	  x_return_status 	OUT NOCOPY  VARCHAR2) IS
4665 
4666 CURSOR delivery_status IS
4667 SELECT status_code, routing_response_id, --J-IB-NPARIKH
4668        delivery_type,
4669        tms_interface_flag --OTM R12
4670 FROM   wsh_new_deliveries
4671 WHERE  delivery_id = p_delivery_id;
4672 
4673 CURSOR detail_info IS
4674 SELECT delivery_detail_id
4675 FROM   wsh_delivery_assignments_v
4676 WHERE  delivery_id = p_delivery_id
4677 FOR UPDATE NOWAIT;
4678 
4679 CURSOR leg_info IS
4680 SELECT delivery_leg_id
4681 FROM   wsh_delivery_legs
4682 WHERE  delivery_id = p_delivery_id
4683 FOR UPDATE NOWAIT;
4684 
4685 CURSOR freight_costs_exist IS
4686 SELECT freight_cost_id
4687 FROM   wsh_freight_costs
4688 WHERE  delivery_id = p_delivery_id
4689 FOR UPDATE NOWAIT;
4690 
4691 l_del_status  VARCHAR2(2);
4692 l_detail_id   NUMBER;
4693 l_routingResponseId   NUMBER;
4694 l_flag        VARCHAR2(1) := 'N';
4695 l_delivery_type VARCHAR2(30);
4696 others        EXCEPTION;
4697 
4698 record_locked                 EXCEPTION;
4699 PRAGMA EXCEPTION_INIT(record_locked, -54);
4700 --OTM R12
4701 cannot_delete_GC3_delivery EXCEPTION;
4702 l_gc3_is_installed         VARCHAR2(1);
4703 l_tms_interface_flag       WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
4704 --
4705 
4706 
4707 --
4708 l_debug_on BOOLEAN;
4709 --
4710 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DELETE_DELIVERY';
4711 --
4712 BEGIN
4713 
4714    --
4715    -- Debug Statements
4716    --
4717    --
4718    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4719    --
4720    IF l_debug_on IS NULL
4721    THEN
4722        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4723    END IF;
4724    --
4725    IF l_debug_on THEN
4726        WSH_DEBUG_SV.push(l_module_name);
4727        --
4728        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
4729    END IF;
4730    --
4731    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4732 
4733 
4734    --OTM R12
4735    l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
4736 
4737    IF l_gc3_is_installed IS NULL THEN
4738      l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
4739    END IF;
4740    --
4741 
4742 
4743    OPEN delivery_status;
4744    FETCH delivery_status INTO l_del_status,
4745                               l_routingResponseId,
4746                               l_delivery_type,
4747                               l_tms_interface_flag;  --OTM R12
4748 
4749    IF (delivery_status%NOTFOUND) THEN
4750 	 CLOSE delivery_status;
4751 	 RAISE others;
4752    END IF;
4753 
4754    CLOSE delivery_status;
4755 
4756    --OTM R12, can only delete NS flag deliveries when gc3 is installed
4757    IF (l_gc3_is_installed = 'Y'
4758        AND l_tms_interface_flag <> WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT) THEN
4759 
4760      RAISE cannot_delete_gc3_delivery;
4761    END IF;
4762    --
4763 
4764    IF (l_del_status = 'CL') OR (l_del_status = 'CO') THEN
4765 	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DELETE_ERROR');
4766 	    --
4767 	    -- Debug Statements
4768 	    --
4769 	    IF l_debug_on THEN
4770 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4771 	    END IF;
4772 	    --
4773 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
4774 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4775 	    wsh_util_core.add_message(x_return_status);
4776    END IF;
4777 			--
4778 			--
4779    --{ --J-IB-NPARIKH
4780 			-- Routing response is sent for delivery, cannot be deleted.
4781 			--
4782    IF l_routingResponseId IS NOT NULL
4783 			THEN
4784 	    FND_MESSAGE.SET_NAME('WSH','WSH_IB_DELETE_DELIVERY');
4785 	    --
4786 	    -- Debug Statements
4787 	    --
4788 	    IF l_debug_on THEN
4789 	        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4790 	    END IF;
4791 	    --
4792 	    FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
4793 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4794 	    wsh_util_core.add_message(x_return_status);
4795    END IF;
4796    --} --J-IB-NPARIKH
4797    -- 1. Checks if details exist for the delivery and locks them
4798    FOR dt IN detail_info LOOP
4799 	l_flag := 'Y';
4800    END LOOP;
4801 
4802    IF (l_flag = 'Y') THEN
4803 	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_UNASSIGNED');
4804             FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_delivery_id));
4805 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4806 	    wsh_util_core.add_message(x_return_status);
4807    END IF;
4808 
4809    -- 2. Checks if legs exist for the delivery and locks them
4810    l_flag := 'N';
4811    FOR dt IN leg_info LOOP
4812 	l_flag := 'Y';
4813    END LOOP;
4814 
4815    IF (l_flag = 'Y')  and l_delivery_type = 'STANDARD' THEN
4816 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DELETE_WITH_LEGS');
4817 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4818          --
4819          -- Debug Statements
4820          --
4821          IF l_debug_on THEN
4822              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4823          END IF;
4824          --
4825          FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_delivery_id));
4826 	 wsh_util_core.add_message(x_return_status);
4827    END IF;
4828 
4829    -- 3. Checks if freight costs exist for the delivery and locks them
4830    l_flag := 'N';
4831    FOR fc IN freight_costs_exist LOOP
4832 	 l_flag := 'Y';
4833    END LOOP;
4834 
4835    IF (l_flag = 'Y') THEN
4836       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DELETE_WITH_FC');
4837       --
4838       -- Debug Statements
4839       --
4840       IF l_debug_on THEN
4841           WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4842       END IF;
4843       --
4844       FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(p_delivery_id));
4845       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4846       WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
4847    END IF;
4848 
4849 --
4850 -- Debug Statements
4851 --
4852 IF l_debug_on THEN
4853     WSH_DEBUG_SV.pop(l_module_name);
4854 END IF;
4855 --
4856    EXCEPTION
4857       --OTM R12
4858       WHEN cannot_delete_gc3_delivery THEN
4859 
4860         IF (delivery_status%ISOPEN) THEN
4861           CLOSE delivery_status;
4862         END IF;
4863 
4864         IF (leg_info%ISOPEN) THEN
4865           CLOSE leg_info;
4866         END IF;
4867 
4868         IF (detail_info%ISOPEN) THEN
4869           CLOSE detail_info;
4870         END IF;
4871 
4872         IF (freight_costs_exist%ISOPEN) THEN
4873           CLOSE freight_costs_exist;
4874         END IF;
4875 
4876         FND_MESSAGE.SET_NAME('WSH','WSH_OTM_DEL_DELETE_ERROR');
4877         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4878         WSH_UTIL_CORE.add_message(x_return_status,l_module_name);
4879 
4880         IF l_debug_on THEN
4881           WSH_DEBUG_SV.logmsg(l_module_name,'CANNOT_DELETE_GC3_DELIVERY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4882           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CANNOT_DELETE_GC3_DELIVERY');
4883         END IF;
4884       --END OTM R12
4885 
4886       WHEN record_locked THEN
4887 
4888         IF (delivery_status%ISOPEN) THEN
4889           CLOSE delivery_status;
4890         END IF;
4891 
4892         IF (leg_info%ISOPEN) THEN
4893           CLOSE leg_info;
4894         END IF;
4895 
4896         IF (detail_info%ISOPEN) THEN
4897           CLOSE detail_info;
4898         END IF;
4899 
4900         IF (freight_costs_exist%ISOPEN) THEN
4901           CLOSE freight_costs_exist;
4902         END IF;
4903 
4904 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4905 
4906            FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
4907            wsh_util_core.add_message(x_return_status,l_module_name);
4908 
4909 
4910            IF l_debug_on THEN
4911              WSH_DEBUG_SV.logmsg(l_module_name,'record_locked has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4912              WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:record_locked');
4913            END IF;
4914            --
4915 
4916       WHEN others THEN
4917 
4918         IF (delivery_status%ISOPEN) THEN
4919           CLOSE delivery_status;
4920         END IF;
4921 
4922         IF (leg_info%ISOPEN) THEN
4923           CLOSE leg_info;
4924         END IF;
4925 
4926         IF (detail_info%ISOPEN) THEN
4927           CLOSE detail_info;
4928         END IF;
4929 
4930         IF (freight_costs_exist%ISOPEN) THEN
4931           CLOSE freight_costs_exist;
4932         END IF;
4933 
4934 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DELETE_DELIVERY');
4935 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4936 
4937            IF l_debug_on THEN
4938              WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4939              WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4940            END IF;
4941            --
4942 END Check_Delete_Delivery;
4943 
4944 
4945 
4946 -----------------------------------------------------------------------------
4947 --
4948 -- Procedure:     Check_Change_Carrier
4949 -- Parameters:    p_delivery_id, x_return_status
4950 -- Description:   Checks for Change Carrier action pre-requisites which are
4951 --                - Delivery status is OPEN or PACKED
4952 --                - If GROUP_BY_CARRIER_FLAG is set then delivery details do not have a Ship Method specified
4953 --
4954 -----------------------------------------------------------------------------
4955 
4956 PROCEDURE Check_Change_Carrier ( p_delivery_id 		IN  NUMBER,
4957 		        	 x_return_status 	OUT NOCOPY  VARCHAR2) IS
4958 
4959 CURSOR delivery_status IS
4960 SELECT status_code,
4961 	  organization_id
4962 FROM   wsh_new_deliveries
4963 WHERE  delivery_id = p_delivery_id;
4964 
4965 CURSOR detail_info IS
4966 SELECT count(*)
4967 FROM   wsh_delivery_assignments_v da,
4968 	  wsh_delivery_details dd
4969 WHERE  da.delivery_id = p_delivery_id AND
4970        da.delivery_id IS NOT NULL AND
4971        da.delivery_detail_id = dd.delivery_detail_id AND
4972 	  dd.ship_method_code IS NULL AND
4973 	  nvl(dd.container_flag,'N') <> 'Y';
4974 
4975 l_del_status  VARCHAR2(2);
4976 l_detail_num   NUMBER;
4977 l_org_id       NUMBER;
4978 
4979 l_group_by_attr wsh_delivery_autocreate.group_by_flags_rec_type;
4980 l_return_status VARCHAR2(1);
4981 others          EXCEPTION;
4982 
4983 --
4984 l_debug_on BOOLEAN;
4985 --
4986 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_CHANGE_CARRIER';
4987 --
4988 BEGIN
4989 
4990    --
4991    -- Debug Statements
4992    --
4993    --
4994    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4995    --
4996    IF l_debug_on IS NULL
4997    THEN
4998        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4999    END IF;
5000    --
5001    IF l_debug_on THEN
5002        WSH_DEBUG_SV.push(l_module_name);
5003        --
5004        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
5005    END IF;
5006    --
5007    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5008 
5009    OPEN delivery_status;
5010    FETCH delivery_status INTO l_del_status, l_org_id;
5011 
5012    IF (delivery_status%NOTFOUND) THEN
5013 	 CLOSE delivery_status;
5014 	 raise others;
5015    END IF;
5016 
5017    CLOSE delivery_status;
5018 
5019    IF (l_del_status <> 'OP') AND (l_del_status <> 'PA') THEN
5020 	 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_OP_PA_STATUS');
5021 	 --
5022 	 -- Debug Statements
5023 	 --
5024 	 IF l_debug_on THEN
5025 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5026 	 END IF;
5027 	 --
5028 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
5029 	 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5030 	 wsh_util_core.add_message(x_return_status);
5031 	 --
5032 	 -- Debug Statements
5033 	 --
5034 	 IF l_debug_on THEN
5035 	     WSH_DEBUG_SV.pop(l_module_name);
5036 	 END IF;
5037 	 --
5038 	 RETURN;
5039    END IF;
5040 
5041    IF (l_org_id IS NULL) THEN
5042 	 raise others;
5043    ELSE
5044 	 --
5045 	 -- Debug Statements
5046 	 --
5047 	 IF l_debug_on THEN
5048 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
5049 	 END IF;
5050 	 --
5051 	 wsh_delivery_autocreate.get_group_by_attr( p_organization_id => l_org_id,
5052                                                     x_group_by_flags => l_group_by_attr,
5053                                                     x_return_status => l_return_status);
5054 
5055 	 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5056 	    x_return_status := l_return_status;
5057 	    --
5058 	    -- Debug Statements
5059 	    --
5060 	    IF l_debug_on THEN
5061 	        WSH_DEBUG_SV.pop(l_module_name);
5062 	    END IF;
5063 	    --
5064 	    RETURN;
5065       END IF;
5066 
5067    END IF;
5068 
5069    IF (l_group_by_attr.ship_method = 'Y') THEN
5070       OPEN detail_info;
5071       FETCH detail_info INTO l_detail_num;
5072       CLOSE detail_info;
5073 
5074       IF (l_detail_num <> 0) AND (l_detail_num IS NOT NULL) THEN
5075 	    FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_SH_M_ERROR');
5076 	    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5077 	    wsh_util_core.add_message(x_return_status);
5078       END IF;
5079    END IF;
5080 
5081 --
5082 -- Debug Statements
5083 --
5084 IF l_debug_on THEN
5085     WSH_DEBUG_SV.pop(l_module_name);
5086 END IF;
5087 --
5088    EXCEPTION
5089       WHEN others THEN
5090 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_CHANGE_CARRIER');
5091 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5092 
5093 --
5094 -- Debug Statements
5095 --
5096 IF l_debug_on THEN
5097     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5098     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5099 END IF;
5100 --
5101 END Check_Change_Carrier;
5102 
5103 PROCEDURE Get_Disabled_List(
5104   p_delivery_id		IN   NUMBER
5105 , p_list_type           IN   VARCHAR2
5106 , x_return_status  	OUT NOCOPY   VARCHAR2
5107 , x_disabled_list  	OUT NOCOPY   wsh_util_core.column_tab_type
5108 , x_msg_count           OUT NOCOPY   NUMBER
5109 , x_msg_data            OUT NOCOPY   VARCHAR2
5110 , p_caller IN VARCHAR2 -- DEFAULT NULL, --3509004:public api changes
5111 )
5112 IS
5113 CURSOR get_delivery_status
5114 IS
5115 SELECT status_code, planned_flag, organization_id,
5116         nvl(shipment_direction,'O') shipment_direction   -- J-IB-NPARIKH
5117 	, INITIAL_PICKUP_LOCATION_ID, --3509004:public api changes
5118         delivery_type  -- MDC
5119 FROM   wsh_new_deliveries
5120 WHERE  delivery_id = p_delivery_id;
5121 
5122 CURSOR has_delivery_lines
5123 IS
5124 SELECT delivery_detail_id
5125 FROM   wsh_delivery_assignments_v
5126 WHERE  delivery_id = p_delivery_id
5127 AND ROWNUM=1;
5128 
5129 CURSOR has_delivery_legs
5130 IS
5131 SELECT delivery_leg_id
5132 FROM wsh_delivery_legs
5133 WHERE delivery_id = p_delivery_id
5134 AND ROWNUM=1;
5135 
5136 l_detail_id		NUMBER;
5137 i  			NUMBER := 0;
5138 WSH_DP_NO_ENTITY	EXCEPTION;
5139 WSH_INV_LIST_TYPE	EXCEPTION;
5140 l_status_code		VARCHAR2(2);
5141 l_planned_flag		VARCHAR2(1);
5142 l_shipment_direction  VARCHAR2(30);
5143 l_organization_id	NUMBER;
5144 l_msg_summary           VARCHAR2(2000) := NULL;
5145 l_msg_details           VARCHAR2(4000) := NULL;
5146 l_assigned_to_trip	VARCHAR2(1);
5147 l_delivery_leg_id	NUMBER;
5148 --3509004:public api changes
5149 e_all_disabled EXCEPTION ;
5150 l_shipping_control     VARCHAR2(30);
5151 l_routing_response_id  NUMBER;
5152 l_routing_request_flag VARCHAR2(30);
5153 l_initial_pickup_location_id NUMBER;
5154 l_delivery_type        VARCHAR2(30);
5155 
5156 l_return_status               VARCHAR2(30);
5157 
5158 --
5159 l_debug_on BOOLEAN;
5160 --
5161 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DISABLED_LIST';
5162 
5163 BEGIN
5164    --
5165    -- Debug Statements
5166    --
5167    --
5168    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5169    --
5170    IF l_debug_on IS NULL
5171    THEN
5172        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5173    END IF;
5174    --
5175    IF l_debug_on THEN
5176        WSH_DEBUG_SV.push(l_module_name);
5177        --
5178        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
5179        WSH_DEBUG_SV.log(l_module_name,'P_LIST_TYPE',P_LIST_TYPE);
5180    END IF;
5181    --
5182    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5183 
5184    -- clear the disabled list
5185    x_disabled_list.delete;
5186 
5187    OPEN get_delivery_status;
5188    FETCH get_delivery_status INTO l_status_code, l_planned_flag, l_organization_id, l_shipment_direction,
5189    l_initial_pickup_location_id, --3509004:public api changes
5190    l_delivery_type; -- MDC
5191    IF (get_delivery_status%NOTFOUND) THEN
5192       CLOSE get_delivery_status;
5193       RAISE WSH_DP_NO_ENTITY;
5194    END IF;
5195    CLOSE get_delivery_status;
5196 
5197    -- Check if delivery is assigned to a trip or not
5198    OPEN has_delivery_legs;
5199    FETCH has_delivery_legs INTO l_delivery_leg_id;
5200    IF (has_delivery_legs%NOTFOUND) THEN
5201       CLOSE has_delivery_legs;
5202       l_assigned_to_trip := 'N';
5203    ELSE
5204       CLOSE has_delivery_legs;
5205       l_assigned_to_trip := 'Y';
5206    END IF;
5207 
5208 
5209    IF (l_status_code IN ('CO', 'IT', 'CL')) THEN
5210       i:=i+1; x_disabled_list(i) := 'FULL';
5211       i:=i+1; x_disabled_list(i) := 'GLOBALIZATION_FLEXFIELD';
5212       i:=i+1; x_disabled_list(i) := 'TP_FLEXFIELD';
5213       i:=i+1; x_disabled_list(i) := 'DESC_FLEX';
5214       IF (l_status_code = 'CO') THEN
5215          i:=i+1; x_disabled_list(i) := 'ADDITIONAL_SHIPMENT_INFO';
5216          i:=i+1; x_disabled_list(i) := 'DOCK_CODE';
5217       ELSIF (l_status_code = 'IT') THEN
5218          i:=i+1; x_disabled_list(i) := 'ADDITIONAL_SHIPMENT_INFO';
5219          i:=i+1; x_disabled_list(i) := 'DOCK_CODE';
5220          i:=i+1; x_disabled_list(i) := '+ACCEPTANCE_FLAG';
5221          i:=i+1; x_disabled_list(i) := '+ACCEPTED_BY';
5222          i:=i+1; x_disabled_list(i) := '+ACCEPTED_DATE';
5223          i:=i+1; x_disabled_list(i) := '+ACKNOWLEDGED_BY';
5224       ELSIF (l_status_code = 'CL') THEN
5225          i:=i+1; x_disabled_list(i) := '+ACCEPTANCE_FLAG';
5226          i:=i+1; x_disabled_list(i) := '+ACCEPTED_BY';
5227          i:=i+1; x_disabled_list(i) := '+ACCEPTED_DATE';
5228          i:=i+1; x_disabled_list(i) := '+ACKNOWLEDGED_BY';
5229       END IF;
5230       --
5231       -- J-IB-NPARIKH-{
5232       --
5233       IF  l_shipment_direction NOT IN ('O','IO')
5234       AND l_status_code IN ('IT', 'CL')
5235       THEN
5236       --{
5237             --
5238             -- Weight/Volume/No of LPN are updateable
5239             -- for in-transit/closed inbound (not O/IO) deliveries
5240             --
5241             i:=i+1; x_disabled_list(i) := 'GROSS_WEIGHT';
5242             i:=i+1; x_disabled_list(i) := 'TARE_WEIGHT';
5243             i:=i+1; x_disabled_list(i) := 'NET_WEIGHT';
5244             i:=i+1; x_disabled_list(i) := 'WEIGHT_UOM_CODE';
5245             i:=i+1; x_disabled_list(i) := 'VOLUME';
5246             i:=i+1; x_disabled_list(i) := 'VOLUME_UOM_CODE';
5247             i:=i+1; x_disabled_list(i) := 'NUMBER_OF_LPN';
5248             -- Bug 4539613: Proration is allowed for in-transit/closed inbound deliveries.
5249             i:=i+1; x_disabled_list(i) := 'PRORATE_WT_FLAG';
5250             --
5251             --
5252             IF l_assigned_to_trip = 'N'
5253             THEN
5254             --{
5255                 --
5256                 -- Ship method/carrier/mode/service level updateable (only if NULL)
5257                 -- for in-transit/closed inbound (not O/IO) deliveries
5258                 --
5259 		IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5260                    i:=i+1; x_disabled_list(i) := '+SHIP_METHOD_CODE';
5261                    i:=i+1; x_disabled_list(i) := '+CARRIER_ID';
5262                    i:=i+1; x_disabled_list(i) := '+SERVICE_LEVEL';
5263                    i:=i+1; x_disabled_list(i) := '+MODE_OF_TRANSPORT';
5264 		ELSE
5265                    i:=i+1; x_disabled_list(i) := '+SHIP_METHOD_NAME';
5266                    i:=i+1; x_disabled_list(i) := '+FREIGHT_CODE';
5267                    i:=i+1; x_disabled_list(i) := '+SERVICE_LEVEL_NAME';
5268                    i:=i+1; x_disabled_list(i) := '+MODE_OF_TRANSPORT_NAME';
5269 		END IF;
5270             --}
5271             END IF;
5272             --
5273             --
5274             -- Waybill updateable for in-transit inbound (not O/IO) deliveries
5275             --
5276             IF l_status_code = 'IT'
5277             THEN
5278                 i:=i+1; x_disabled_list(i) := 'WAYBILL';
5279             END IF;
5280             --
5281       --}
5282       END IF;
5283       --
5284       -- J-IB-NPARIKH-}
5285       --
5286       IF (p_list_type = 'FORM') THEN
5287          NULL; /* more form field name */
5288       ELSIF (p_list_type = 'TABLE') THEN
5289          NULL; /* table columns */
5290       ELSE
5291          RAISE WSH_INV_LIST_TYPE;
5292       END IF;
5293 
5294    ELSIF (l_status_code = 'PA') THEN
5295       IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5296         i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_ID';
5297         i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_ID';
5298         i:=i+1; x_disabled_list(i) := 'CUSTOMER_ID';
5299         i:=i+1; x_disabled_list(i) := 'ORGANIZATION_ID';
5300       ELSE
5301         i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_CODE';
5302         i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_CODE';
5303         i:=i+1; x_disabled_list(i) := 'CUSTOMER_NAME';
5304         i:=i+1; x_disabled_list(i) := 'ORGANIZATION_CODE';
5305       END IF;
5306 
5307       i:=i+1; x_disabled_list(i) := 'LOADING_ORDER_FLAG';
5308       i:=i+1; x_disabled_list(i) := 'ACCEPTANCE_FLAG';
5309       i:=i+1; x_disabled_list(i) := 'ACCEPTED_BY';
5310       i:=i+1; x_disabled_list(i) := 'ACCEPTED_DATE';
5311       i:=i+1; x_disabled_list(i) := 'ACKNOWLEDGED_BY';
5312       i:=i+1; x_disabled_list(i) := '+CONFIRMED_BY';
5313       i:=i+1; x_disabled_list(i) := 'CURRENCY_CODE';
5314       IF (l_planned_flag IN ('Y','F')) THEN
5315          i:=i+1; x_disabled_list(i) := 'NAME';
5316          i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_DATE';
5317          i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_DATE';
5318          IF (l_planned_flag ='F') THEN
5319 	    i:=i+1; x_disabled_list(i) := 'LOADING_SEQUENCE';
5320          END IF;
5321          IF (l_assigned_to_trip = 'Y') THEN
5322 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5323                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_CODE';
5324                i:=i+1; x_disabled_list(i) := 'CARRIER_ID';
5325                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL';
5326                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT';
5327 	    ELSE
5328                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_NAME';
5329                i:=i+1; x_disabled_list(i) := 'FREIGHT_CODE';
5330                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL_NAME';
5331                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT_NAME';
5332 	    END IF;
5333          END IF;
5334       ELSE
5335          IF (l_assigned_to_trip = 'Y') THEN
5336             i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_DATE';
5337             i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_DATE';
5338 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5339                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_CODE';
5340                i:=i+1; x_disabled_list(i) := 'CARRIER_ID';
5341                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL';
5342                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT';
5343 	    ELSE
5344                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_NAME';
5345                i:=i+1; x_disabled_list(i) := 'FREIGHT_CODE';
5346                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL_NAME';
5347                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT_NAME';
5348 	    END IF;
5349          END IF;
5350       END IF; -- if planned
5351 
5352 /* H integration: data protection wrudge */
5353    ELSIF (l_status_code IN ('OP', 'SA', 'SR', 'SC')) THEN
5354       i:=i+1; x_disabled_list(i) := 'ACCEPTANCE_FLAG';
5355       i:=i+1; x_disabled_list(i) := 'ACCEPTED_BY';
5356       i:=i+1; x_disabled_list(i) := 'ACCEPTED_DATE';
5357       i:=i+1; x_disabled_list(i) := 'ACKNOWLEDGED_BY';
5358       i:=i+1; x_disabled_list(i) := '+CONFIRMED_BY';
5359 
5360       --"Proration of weight from Delivery to delivery lines" Project(Bug#4254552).
5361       IF l_status_code IN ('SA', 'SR', 'SC') THEN
5362            i:=i+1; x_disabled_list(i) := 'PRORATE_WT_FLAG';
5363       END IF;
5364 
5365       --{ J-IB-NPARIKH
5366       --
5367       -- No updates on freight term for inbound delivery (not O/IO)
5368       --
5369       IF  l_shipment_direction NOT IN ('O','IO')
5370       THEN
5371           IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5372              i:=i+1; x_disabled_list(i) := 'FREIGHT_TERMS_CODE';
5373 	  ELSE
5374              i:=i+1; x_disabled_list(i) := 'FREIGHT_TERMS_NAME';
5375 	  END IF;
5376       END IF;
5377       --} J-IB-NPARIKH
5378       --
5379       --
5380 /* H integration: data protection wrudge */
5381       IF (l_status_code IN ('SR', 'SC')) THEN
5382          -- Outbound document has been sent for this delivery.
5383 	 i:=i+1; x_disabled_list(i) := 'NAME';
5384 	 IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5385            i:=i+1; x_disabled_list(i) := 'INTMED_SHIP_TO_LOCATION_ID';
5386            i:=i+1; x_disabled_list(i) := 'POOLED_SHIP_TO_LOCATION_ID';
5387            i:=i+1; x_disabled_list(i) := 'FOB_CODE';
5388            i:=i+1; x_disabled_list(i) := 'FOB_LOCATION_ID';
5389            i:=i+1; x_disabled_list(i) := 'FREIGHT_TERMS_CODE';
5390 	 ELSE
5391            i:=i+1; x_disabled_list(i) := 'INTMED_SHIP_TO_LOCATION_CODE';
5392            i:=i+1; x_disabled_list(i) := 'POOLED_SHIP_TO_LOCATION_CODE';
5393            i:=i+1; x_disabled_list(i) := 'FOB_NAME';
5394            i:=i+1; x_disabled_list(i) := 'FOB_LOCATION_CODE';
5395            i:=i+1; x_disabled_list(i) := 'FREIGHT_TERMS_NAME';
5396 	 END IF;
5397          i:=i+1; x_disabled_list(i) := 'WAYBILL';
5398          i:=i+1; x_disabled_list(i) := 'GROSS_WEIGHT';
5399          i:=i+1; x_disabled_list(i) := 'TARE_WEIGHT';
5400          i:=i+1; x_disabled_list(i) := 'NET_WEIGHT';
5401          i:=i+1; x_disabled_list(i) := 'WEIGHT_UOM_CODE';
5402          i:=i+1; x_disabled_list(i) := 'VOLUME';
5403          i:=i+1; x_disabled_list(i) := 'VOLUME_UOM_CODE';
5404 	 i:=i+1; x_disabled_list(i) := 'NUMBER_OF_LPN';
5405 
5406          -- treat deliveries sent outbound as planned and assigned to trip.
5407          l_planned_flag     := 'Y';
5408          l_assigned_to_trip := 'Y';
5409       END IF;
5410 
5411       --J TP Release : firm del will always have a trip
5412       IF (l_planned_flag IN ('Y','F')) THEN
5413 	 IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5414            i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_ID';
5415            i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_ID';
5416            i:=i+1; x_disabled_list(i) := 'ORGANIZATION_ID';
5417            i:=i+1; x_disabled_list(i) := 'CUSTOMER_ID';
5418            i:=i+1; x_disabled_list(i) := 'CLIENT_ID';	-- Modified R12.1.1 LSP PROJECT
5419          ELSE
5420            i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_CODE';
5421            i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_CODE';
5422            i:=i+1; x_disabled_list(i) := 'ORGANIZATION_CODE';
5423            i:=i+1; x_disabled_list(i) := 'CUSTOMER_NAME';
5424            i:=i+1; x_disabled_list(i) := 'CLIENT_NAME';	-- Modified R12.1.1 LSP PROJECT
5425 	 END IF;
5426          i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_DATE';
5427          i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_DATE';
5428          i:=i+1; x_disabled_list(i) := 'LOADING_ORDER_FLAG';
5429          i:=i+1; x_disabled_list(i) := 'CURRENCY_CODE';
5430 	 IF (l_planned_flag ='F') THEN
5431 	    i:=i+1; x_disabled_list(i) := 'LOADING_SEQUENCE';
5432          END IF;
5433 
5434          IF (l_assigned_to_trip = 'Y') THEN
5435 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5436                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_CODE';
5437                i:=i+1; x_disabled_list(i) := 'CARRIER_ID';
5438                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL';
5439                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT';
5440 	    ELSE
5441                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_NAME';
5442                i:=i+1; x_disabled_list(i) := 'FREIGHT_CODE';
5443                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL_NAME';
5444                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT_NAME';
5445 	    END IF;
5446          END IF;
5447       ELSE -- if not planned
5448          IF (l_assigned_to_trip = 'Y') THEN
5449 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5450                i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_ID';
5451                i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_ID';
5452                i:=i+1; x_disabled_list(i) := 'CUSTOMER_ID';
5453                i:=i+1; x_disabled_list(i) := 'ORGANIZATION_ID';
5454                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_CODE';
5455                i:=i+1; x_disabled_list(i) := 'CARRIER_ID';
5456                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL';
5457                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT';
5458 	    ELSE
5459                i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_CODE';
5460                i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_CODE';
5461                i:=i+1; x_disabled_list(i) := 'CUSTOMER_NAME';
5462                i:=i+1; x_disabled_list(i) := 'ORGANIZATION_CODE';
5463                i:=i+1; x_disabled_list(i) := 'SHIP_METHOD_NAME';
5464                i:=i+1; x_disabled_list(i) := 'FREIGHT_CODE';
5465                i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL_NAME';
5466                i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT_NAME';
5467 	    END IF;
5468             i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_DATE';
5469             i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_DATE';
5470          END IF;
5471          -- check in the delivery has delivery lines
5472          OPEN has_delivery_lines;
5473          FETCH has_delivery_lines INTO l_detail_id;
5474          IF (has_delivery_lines%NOTFOUND) THEN
5475            -- Modified R12.1.1 LSP PROJECT: Disable client info even for not assigned deliveries
5476            -- when deployment mode is other than LSP.
5477            IF (WMS_DEPLOY.WMS_DEPLOYMENT_MODE <> 'L') THEN
5478              IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN
5479                i:=i+1; x_disabled_list(i) := 'CLIENT_ID';
5480              ELSE
5481                i:=i+1; x_disabled_list(i) := 'CLIENT_NAME';
5482              END IF;
5483            END IF;
5484            -- Modified R12.1.1 LSP PROJECT: End
5485            CLOSE has_delivery_lines;
5486          ELSE
5487             CLOSE has_delivery_lines;
5488 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5489                i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_ID';
5490                i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_ID';
5491                i:=i+1; x_disabled_list(i) := 'CUSTOMER_ID';
5492                i:=i+1; x_disabled_list(i) := 'ORGANIZATION_ID';
5493                i:=i+1; x_disabled_list(i) := 'CLIENT_ID';	-- Modified R12.1.1 LSP PROJECT
5494 	    ELSE
5495                i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_CODE';
5496                i:=i+1; x_disabled_list(i) := 'ULTIMATE_DROPOFF_LOCATION_CODE';
5497                i:=i+1; x_disabled_list(i) := 'CUSTOMER_NAME';
5498                i:=i+1; x_disabled_list(i) := 'ORGANIZATION_CODE';
5499                i:=i+1; x_disabled_list(i) := 'CLIENT_NAME';	-- Modified R12.1.1 LSP PROJECT
5500 	    END IF;
5501             i:=i+1; x_disabled_list(i) := 'CURRENCY_CODE';
5502          END IF;
5503       END IF;
5504 
5505       -- MDC: disable wt/vol related fields for a consol delivery
5506 
5507       IF l_delivery_type = 'CONSOLIDATION' THEN
5508 
5509          i:=i+1; x_disabled_list(i) := 'GROSS_WEIGHT';
5510          i:=i+1; x_disabled_list(i) := 'NET_WEIGHT';
5511          i:=i+1; x_disabled_list(i) := 'TARE_WEIGHT';
5512          i:=i+1; x_disabled_list(i) := 'WEIGHT_UOM_CODE';
5513          i:=i+1; x_disabled_list(i) := 'VOLUME';
5514          i:=i+1; x_disabled_list(i) := 'VOLUME_UOM_CODE';
5515          i:=i+1; x_disabled_list(i) := 'PRORATE_WT_FLAG';
5516 
5517       END IF;
5518 
5519    END IF;
5520 
5521     -- J-IB-NPARIKH-{
5522     --3509004:public api changes
5523     --
5524     -- Update on inbound/drop-ship deliveries are allowed only if caller
5525     -- starts with  one of the following:
5526     --     - FTE
5527     --     - WSH_IB
5528     --     - WSH_PUB
5529     --     - WSH_TP_RELEASE
5530     --
5531     IF  NVL(l_shipment_direction,'O') NOT IN ('O','IO')
5532     AND NVL(p_caller, '!!!')                               NOT LIKE 'FTE%'
5533     AND NVL(p_caller, '!!!')                               NOT LIKE 'WSH_PUB%'
5534     AND NVL(p_caller, '!!!')                               NOT LIKE 'WSH_IB%'
5535     AND NVL(p_caller, '!!!')                               NOT LIKE 'WSH_TP_RELEASE%'
5536     THEN
5537         RAISE e_all_disabled;
5538     END IF;
5539 
5540     IF  NVL(l_shipment_direction,'O') NOT IN ('O','IO')
5541     AND l_status_code IN ('IT', 'CL')
5542     AND l_initial_pickup_location_id  = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
5543     THEN
5544     --{
5545          --
5546          -- For in-transit/closed inbound deliveries (not O/IO),
5547          -- update of initial pickup location is allowed if Null AND
5548          --  - supplier is managing transportation
5549          -- OR
5550          --  - routing request was not received for all delivery lines
5551          --
5552         IF l_debug_on THEN
5553             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit GET_SHIPPING_CONTROL',WSH_DEBUG_SV.C_PROC_LEVEL);
5554         END IF;
5555         --
5556         GET_SHIPPING_CONTROL
5557         (
5558             p_delivery_id           => p_delivery_id,
5559             x_shipping_control      => l_shipping_control,
5560             x_routing_response_id   => l_routing_response_id,
5561             x_routing_request_flag  => l_routing_request_flag,
5562             x_return_status         => l_return_status
5563         );
5564         --
5565         --
5566         IF l_debug_on THEN
5567             wsh_debug_sv.log(l_module_name, 'l_return_status', l_return_status);
5568             wsh_debug_sv.log(l_module_name, 'l_shipping_control', l_shipping_control);
5569             wsh_debug_sv.log(l_module_name, 'l_routing_response_id', l_routing_response_id);
5570             wsh_debug_sv.log(l_module_name, 'l_routing_request_flag', l_routing_request_flag);
5571             --
5572         END IF;
5573         --
5574         --
5575         IF l_return_status = wsh_util_core.g_ret_sts_unexp_error THEN
5576            raise FND_API.G_EXC_UNEXPECTED_ERROR;
5577         ELSIF l_return_status = wsh_util_core.g_ret_sts_error THEN
5578            raise FND_API.G_EXC_ERROR;
5579         END IF;
5580         --
5581         --
5582         IF l_shipping_control     = 'SUPPLIER'
5583         OR l_routing_request_flag = 'N'
5584         THEN
5585 	    IF NVL(p_caller,'!!!') LIKE 'FTE%' THEN --3509004:public api changes
5586 	       i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_ID';
5587 	    ELSE
5588 	       i:=i+1; x_disabled_list(i) := 'INITIAL_PICKUP_LOCATION_CODE';
5589 	    END IF;
5590         END IF;
5591     --}
5592     END IF;
5593     --
5594     -- J-IB-NPARIKH-}
5595 
5596 
5597 -- Commented FTE_IS_INSTALLED If condition for Bug-2801799
5598 /***
5599    IF  ( WSH_UTIL_CORE.FTE_Is_Installed ='N' ) THEN
5600     -- Bug Fix 2780610  added the below if condition --
5601       IF (l_status_code IN ('OP','SA','PA')) THEN
5602             i:=i+1; x_disabled_list(i) := 'FREIGHT_CODE';
5603             i:=i+1; x_disabled_list(i) := 'SERVICE_LEVEL_NAME';
5604             i:=i+1; x_disabled_list(i) := 'MODE_OF_TRANSPORT_NAME';
5605       END IF;
5606    END IF;
5607 ***/
5608 
5609 --
5610 -- Debug Statements
5611 --
5612 IF l_debug_on THEN
5613     WSH_DEBUG_SV.pop(l_module_name);
5614 END IF;
5615 --
5616    EXCEPTION
5617     WHEN e_all_disabled THEN --3509004:public api changes
5618       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5619       FND_MESSAGE.SET_NAME('WSH','WSH_ALL_COLS_DISABLED');
5620       FND_MESSAGE.Set_Token('ENTITY_ID',p_delivery_id);
5621       wsh_util_core.add_message(x_return_status,l_module_name);
5622       IF l_debug_on THEN
5623         -- Nothing is updateable
5624         WSH_DEBUG_SV.pop(l_module_name,'e_all_disabled');
5625       END IF;
5626 
5627 
5628       WHEN wsh_dp_no_entity THEN
5629          x_return_status := FND_API.G_RET_STS_ERROR;
5630          FND_MESSAGE.SET_NAME('WSH', 'WSH_DP_NO_ENTITY');
5631          WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
5632          WSH_UTIL_CORE.get_messages('Y', l_msg_summary, l_msg_details, x_msg_count);
5633          IF x_msg_count > 1 then
5634             x_msg_data := l_msg_summary || l_msg_details;
5635          ELSE
5636             x_msg_data := l_msg_summary;
5637          END IF;
5638 
5639 --
5640 -- Debug Statements
5641 --
5642 IF l_debug_on THEN
5643     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DP_NO_ENTITY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5644     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DP_NO_ENTITY');
5645 END IF;
5646 --
5647       WHEN wsh_inv_list_type THEN
5648          x_return_status := FND_API.G_RET_STS_ERROR;
5649          FND_MESSAGE.SET_NAME('WSH', 'WSH_INV_LIST_TYPE');
5650          WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
5651          WSH_UTIL_CORE.get_messages('Y', l_msg_summary, l_msg_details, x_msg_count);
5652          IF x_msg_count > 1 then
5653             x_msg_data := l_msg_summary || l_msg_details;
5654          ELSE
5655             x_msg_data := l_msg_summary;
5656          END IF;
5657 
5658 --
5659 -- Debug Statements
5660 --
5661 IF l_debug_on THEN
5662     WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INV_LIST_TYPE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5663     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INV_LIST_TYPE');
5664 END IF;
5665 --
5666       WHEN others THEN
5667          IF (get_delivery_status%ISOPEN) THEN
5668             CLOSE get_delivery_status;
5669          END IF;
5670          IF (has_delivery_lines%ISOPEN) THEN
5671             CLOSE has_delivery_lines;
5672          END IF;
5673          wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.get_disabled_list');
5674          x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5675 
5676 --
5677 -- Debug Statements
5678 --
5679 IF l_debug_on THEN
5680     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5681     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5682 END IF;
5683 --
5684 END Get_Disabled_List;
5685 
5686 -----------------------------------------------------------------------------
5687 --
5688 -- Function:      Check_SS_Imp_Pending
5689 -- Parameters:    p_source_code,
5690 --                p_source_header_id, p_ship_set_id, p_check_transactable,
5691 --                x_return_status
5692 --                  p_check_transactable: If p_check_transactable is Y then
5693 --                                          check whether any transactable
5694 --                                          line is not imported
5695 --                                        else
5696 --                                          check whether any line is not imported
5697 -- Description:   Checks if any lines in the ship set are not yet imported
5698 --                FALSE - All lines are imported into shipping
5699 --                TRUE  - Some lines are not imported into shipping
5700 --
5701 -----------------------------------------------------------------------------
5702 
5703 FUNCTION Check_SS_Imp_Pending(
5704   p_source_code                 IN   VARCHAR2
5705 , p_source_header_id            IN   NUMBER
5706 , p_ship_set_id                 IN   NUMBER
5707 , p_check_transactable          IN   VARCHAR2
5708 , x_return_status               OUT NOCOPY   VARCHAR2
5709 ) return BOOLEAN IS
5710 cursor c_pending_lines IS
5711 SELECT oel.line_id
5712 FROM   oe_order_lines_all oel,
5713        mtl_system_items msi
5714 WHERE  oel.header_id = p_source_header_id
5715 AND    oel.ship_set_id = p_ship_set_id
5716 AND    oel.inventory_item_id = msi.inventory_item_id
5717 and    oel.ship_from_org_id = msi.organization_id
5718 and    ((p_check_transactable = 'N') or (p_check_transactable = 'Y' AND msi.mtl_transactions_enabled_flag = 'Y'))
5719 AND    oel.shipping_interfaced_flag = 'N'
5720 AND (oel.shippable_flag = 'Y' or
5721      (EXISTS (SELECT 'Y'
5722               FROM   oe_order_lines_all oel1
5723               WHERE  oel1.header_id = p_source_header_id
5724               AND    oel1.ship_set_id = p_ship_set_id
5725               AND    oel1.ato_line_id = oel1.line_id
5726               AND    oel1.item_type_code in ('MODEL','CLASS')
5727               AND    NOT EXISTS (SELECT 'Y'
5728                                  FROM  oe_order_lines_all oel2
5729                                  WHERE oel2.top_model_line_id = oel1.top_model_line_id
5730                                  AND   oel2.ato_line_id = oel1.ato_line_id
5731                                  AND   oel2.item_type_code = 'CONFIG')
5732              )
5733      )
5734     );
5735 l_lines_exist BOOLEAN;
5736 l_line_id NUMBER;
5737 --
5738 l_debug_on BOOLEAN;
5739 --
5740 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_SS_IMP_PENDING';
5741 --
5742 BEGIN
5743 
5744   --
5745   -- Debug Statements
5746   --
5747   --
5748   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5749   --
5750   IF l_debug_on IS NULL
5751   THEN
5752       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5753   END IF;
5754   --
5755   IF l_debug_on THEN
5756       WSH_DEBUG_SV.push(l_module_name);
5757       --
5758       WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_CODE',P_SOURCE_CODE);
5759       WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_HEADER_ID',P_SOURCE_HEADER_ID);
5760       WSH_DEBUG_SV.log(l_module_name,'P_SHIP_SET_ID',P_SHIP_SET_ID);
5761       WSH_DEBUG_SV.log(l_module_name,'P_CHECK_TRANSACTABLE',P_CHECK_TRANSACTABLE);
5762   END IF;
5763   --
5764   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5765 
5766   IF p_source_code <> 'OE' THEN
5767     -- assume everything is imported.
5768     --
5769     -- Debug Statements
5770     --
5771     IF l_debug_on THEN
5772         WSH_DEBUG_SV.pop(l_module_name);
5773     END IF;
5774     --
5775     RETURN TRUE;
5776   END IF;
5777 
5778   l_lines_exist := FALSE;
5779   --
5780   -- Debug Statements
5781   --
5782   IF l_debug_on THEN
5783       WSH_DEBUG_SV.logmsg(l_module_name,  'CHECKING FOR LINES NOT IMPORTED IN SHIP SET '||P_SHIP_SET_ID||' HEADER '||P_SOURCE_HEADER_ID  );
5784   END IF;
5785   --
5786   /* Need to replace the following with OM API once it is available */
5787   OPEN  c_pending_lines;
5788   FETCH c_pending_lines
5789   INTO  l_line_id;
5790   IF (c_pending_lines%NOTFOUND) THEN
5791     l_lines_exist := FALSE;
5792   ELSE
5793     l_lines_exist := TRUE;
5794     --
5795     -- Debug Statements
5796     --
5797     IF l_debug_on THEN
5798         WSH_DEBUG_SV.logmsg(l_module_name,  'LINE '||L_LINE_ID||' IS NOT IMPORTED'  );
5799     END IF;
5800     --
5801   END IF;
5802   CLOSE c_pending_lines;
5803 
5804   --
5805   -- Debug Statements
5806   --
5807   IF l_debug_on THEN
5808       WSH_DEBUG_SV.pop(l_module_name);
5809   END IF;
5810   --
5811   return l_lines_exist;
5812 
5813 EXCEPTION
5814   WHEN OTHERS THEN
5815      wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.Check_SS_Imp_Pending');
5816      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5817      --
5818      -- Debug Statements
5819      --
5820      IF l_debug_on THEN
5821          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5822          WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5823      END IF;
5824      --
5825 END Check_SS_Imp_Pending;
5826 
5827 -- This procedure added for bug 2074768
5828 
5829 -- HW OPM Added x_max_quantity2
5830 PROCEDURE Check_Delivery_for_tolerances ( p_delivery_id 	   IN  NUMBER,
5831                                           x_source_line_id        OUT NOCOPY   NUMBER,
5832                                           x_source_code           OUT NOCOPY   VARCHAR,
5833 					  x_max_quantity          OUT NOCOPY   NUMBER,
5834 					  x_max_quantity2         OUT NOCOPY   NUMBER,
5835 	                                  x_return_status OUT NOCOPY  VARCHAR2 ) is
5836 
5837 -- HW OPM retrieve organization to check if line is OPM/Discrete
5838 CURSOR  c_del_lines ( v_delivery_id in number ) is
5839 select  distinct
5840         dd.source_line_id,
5841         dd.source_code,
5842         dd.source_line_number,
5843         dd.source_header_id,
5844         dd.source_header_number,
5845         dd.source_header_type_name,
5846         dd.organization_id,
5847         dd.source_line_set_id,     --  Bug 2181132
5848         dd.ship_tolerance_above,     --  Bug 2181132
5849         dd.ship_tolerance_below,     --  Bug 2181132
5850         dd.requested_quantity_uom,  -- Bug 2181132
5851         dd.requested_quantity_uom2 -- Bug 2181132
5852 from wsh_delivery_assignments_v da,
5853      wsh_Delivery_details dd
5854 where dd.delivery_detail_id = da.delivery_detail_id
5855 and   da.delivery_id = v_delivery_id
5856 and   dd.container_flag = 'N'
5857 and   dd.released_status <> 'D'
5858 and   da.delivery_id is not null; /* added for performance */
5859 
5860 /* csun bug 2401502 , check tolerance for lines with source_code other than OE */
5861 CURSOR c_detail_lines(v_source_code VARCHAR2, v_source_line_id NUMBER) is
5862 select sum( nvl(requested_quantity,0)) requested_quantity,
5863        sum( nvl(requested_quantity2,0)) requested_quantity2,
5864        ship_tolerance_above,
5865        ship_tolerance_below
5866 from wsh_delivery_details
5867 where source_code = v_source_code and
5868       source_line_id = v_source_line_id and
5869       container_flag = 'N'
5870 group by ship_tolerance_above,
5871          ship_tolerance_below;
5872 l_detail_lines c_detail_lines%ROWTYPE;
5873 
5874 
5875 l_source_header_number WSH_DELIVERY_DETAILS.SOURCE_HEADER_NUMBER%TYPE;
5876 l_source_header_type_name WSH_DELIVERY_DETAILS.SOURCE_HEADER_TYPE_NAME%TYPE;
5877 
5878 -- HW OPM added qty2
5879 -- HW OPM added qty2 in the group by
5880 CURSOR  c_total_line_quantities (v_source_line_id in number, v_source_code in varchar2, v_source_header_id IN NUMBER) is
5881 select  sum( greatest ( nvl(shipped_quantity , 0)  ,
5882 			nvl(picked_quantity , requested_quantity )
5883 		      )
5884 	   )  expected_quantity ,
5885 	sum( greatest ( nvl(shipped_quantity2 , 0)  ,
5886 			nvl(picked_quantity2 , requested_quantity2 )
5887 		      )
5888 	   )  expected_quantity2 ,
5889         src_requested_quantity_uom ,
5890 	requested_quantity_uom ,
5891 	src_requested_quantity_uom2 ,
5892 	requested_quantity_uom2 ,
5893 	inventory_item_id
5894 from    wsh_delivery_details
5895 where   source_line_id = v_source_line_id
5896 and     released_status <> 'D'
5897 and     source_code    = v_source_code
5898 and     container_flag = 'N'
5899 --Bug 3622571
5900 and     source_header_id = v_source_header_id
5901 group by
5902 src_requested_quantity_uom ,
5903 requested_quantity_uom ,
5904 src_requested_quantity_uom2 ,
5905 requested_quantity_uom2 ,
5906 inventory_item_id;
5907 
5908 -- HW OPM added qty2
5909 -- HW OPM added qty2 in the group by
5910 /* Get the qty on other deliveries or without deliveries but not on the
5911    delivery which is being ship confirmed */
5912 CURSOR  c_total_other_line_qty (v_source_line_id in number,
5913                                 v_source_code in varchar2,
5914                                 v_source_header_id IN NUMBER) is
5915 select  sum( greatest ( nvl(wdd.shipped_quantity , 0)  ,
5916                         nvl(wdd.picked_quantity , wdd.requested_quantity )
5917                       )
5918            )  expected_quantity ,
5919         sum( greatest ( nvl(wdd.shipped_quantity2 , 0)  ,
5920                         nvl(wdd.picked_quantity2 , wdd.requested_quantity2 )
5921                       )
5922            )  expected_quantity2 ,
5923         wdd.src_requested_quantity_uom ,
5924         wdd.requested_quantity_uom ,
5925         wdd.src_requested_quantity_uom2 ,
5926         wdd.requested_quantity_uom2 ,
5927         wdd.inventory_item_id
5928 from    wsh_delivery_details wdd,
5929         wsh_delivery_assignments_v wda
5930 where   wdd.source_line_id = v_source_line_id
5931 and     wdd.released_status <> ('D')
5932 and     wdd.source_code    = v_source_code
5933 and     wdd.delivery_detail_id = wda.delivery_detail_id
5934 and     (wda.delivery_id IS NULL
5935          OR wda.delivery_id <> p_delivery_id)
5936 and     wdd.container_flag = 'N'
5937 --Bug 3622571
5938 and     wdd.source_header_id = v_source_header_id
5939 group by
5940 wdd.src_requested_quantity_uom ,
5941 wdd.requested_quantity_uom ,
5942 wdd.src_requested_quantity_uom2 ,
5943 wdd.requested_quantity_uom2 ,
5944 wdd.inventory_item_id;
5945 
5946 l_total_other_line_qty c_total_other_line_qty%ROWTYPE;
5947 
5948 l_total_quantities  c_total_line_quantities%ROWTYPE;
5949 l_bad_quantities  c_total_line_quantities%ROWTYPE;
5950 
5951 l_max_quantity   NUMBER;
5952 l_min_quantity   NUMBER;
5953 l_max_quantity2  NUMBER;
5954 l_min_quantity2  NUMBER;
5955 l_source_line_number  VARCHAR(150);
5956 l_source_line_set_id  NUMBER;
5957 
5958 l_line_max_quantity NUMBER;
5959 l_line_max_quantity2 NUMBER;
5960 
5961 l_msg_count     NUMBER ;
5962 l_msg_data      VARCHAR2(2000);
5963 l_source_system VARCHAR2(80);
5964 l_return_status VARCHAR2(1);
5965 
5966 -- 2181132
5967   l_minmaxinrectype WSH_DETAILS_VALIDATIONS.MinMaxInRecType;
5968   l_minmaxinoutrectype WSH_DETAILS_VALIDATIONS.MinMaxInOutRecType;
5969   l_minmaxoutrectype WSH_DETAILS_VALIDATIONS.MinMaxOutRecType;
5970   l_quantity_uom  WSH_DELIVERY_DETAILS.requested_quantity_uom%TYPE;
5971   l_quantity_uom2  WSH_DELIVERY_DETAILS.requested_quantity_uom2%TYPE;
5972 
5973 others          EXCEPTION;
5974 tolerance_exceeded          EXCEPTION;
5975 -- HW OPM
5976 -- HW OPMCONV. Removed OPM variables
5977 -- muom
5978 l_flag varchar2(1);
5979 
5980 --
5981 l_debug_on BOOLEAN;
5982 --
5983 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_DELIVERY_FOR_TOLERANCES';
5984 --
5985 BEGIN
5986 
5987    --
5988    -- Debug Statements
5989    --
5990    --
5991    l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5992    --
5993    IF l_debug_on IS NULL
5994    THEN
5995        l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5996    END IF;
5997    --
5998    IF l_debug_on THEN
5999        WSH_DEBUG_SV.push(l_module_name);
6000        --
6001        WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
6002    END IF;
6003    --
6004    FOR dl in c_del_lines (p_delivery_id )
6005    LOOP
6006 
6007 -- anxsharm
6008 -- Bug 2181132
6009 
6010     l_minmaxinrectype.source_code := dl.source_code;
6011     l_minmaxinrectype.line_id := dl.source_line_id;
6012     l_minmaxinrectype.source_header_id := dl.source_header_id;
6013     l_minmaxinrectype.source_line_set_id := dl.source_line_set_id;
6014     l_minmaxinrectype.ship_tolerance_above := dl.ship_tolerance_above;
6015     l_minmaxinrectype.ship_tolerance_below := dl.ship_tolerance_below;
6016     l_minmaxinrectype.action_flag := 'S'; -- ship confirm
6017     l_minmaxinrectype.lock_flag := 'N';  -- verify this in UT
6018     l_minmaxinrectype.quantity_uom := dl.requested_quantity_uom;
6019     l_minmaxinrectype.quantity_uom2 := dl.requested_quantity_uom2;
6020 
6021   -- Debug Statements
6022   --
6023   IF l_debug_on THEN
6024       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.GET_MIN_MAX_TOLERANCE_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
6025   END IF;
6026 
6027                WSH_DETAILS_VALIDATIONS.get_min_max_tolerance_quantity
6028                  (p_in_attributes  => l_minmaxinrectype,
6029                   x_out_attributes  => l_minmaxoutrectype,
6030                   p_inout_attributes  => l_minmaxinoutrectype,
6031                   x_return_status  => l_return_status,
6032                   x_msg_count  =>  l_msg_count,
6033                   x_msg_data =>  l_msg_data
6034                  );
6035 
6036     l_quantity_uom := l_minmaxoutrectype.quantity_uom;
6037     l_min_quantity := l_minmaxoutrectype.min_remaining_quantity;
6038     l_max_quantity := l_minmaxoutrectype.max_remaining_quantity;
6039     l_quantity_uom2 := l_minmaxoutrectype.quantity2_uom;
6040     l_min_quantity2 := l_minmaxoutrectype.min_remaining_quantity2;
6041     l_max_quantity2 := l_minmaxoutrectype.max_remaining_quantity2;
6042 
6043 
6044                IF l_return_status <> FND_API.G_RET_STS_SUCCESS  THEN
6045                       raise others ;
6046                END IF;
6047 
6048 
6049        --Bug 3622571
6050        --Add source_header_id along with line_id and source_code
6051        --In TPW instance, same source_line_id and source_code combination can exist
6052        --for different header_ids
6053 
6054        OPEN c_total_line_quantities ( dl.source_line_id , dl.source_code, dl.source_header_id ) ;
6055 
6056        FETCH c_total_line_quantities into l_total_quantities ;
6057        if c_total_line_quantities%NOTFOUND then
6058 	 raise others ;
6059        end if ;
6060 
6061 
6062        -- Making sure we have not hit an old data-corruption if the same order line has delivery
6063        -- details in two different UOMs or Items .
6064        LOOP
6065 
6066          FETCH c_total_line_quantities into l_bad_quantities ;
6067          EXIT WHEN c_total_line_quantities%NOTFOUND;
6068 
6069 
6070          -- Bug 3430649, J Catchweights. Since the secondary uom for catchweight
6071          -- items is entered only after pick release, it is possible for a source
6072          -- line to have one detail with secondary uom populated and one without
6073          -- depending on the released status. We should handle this case w/o
6074          -- erroring out.
6075 
6076          IF   NVL(l_bad_quantities.requested_quantity_uom2, NVL(l_total_quantities.requested_quantity_uom2, FND_API.G_MISS_CHAR))
6077               =  NVL(l_total_quantities.requested_quantity_uom2, NVL(l_bad_quantities.requested_quantity_uom2, FND_API.G_MISS_CHAR))
6078          AND  NVL(l_total_quantities.src_requested_quantity_uom, FND_API.G_MISS_CHAR)
6079               = NVL(l_bad_quantities.src_requested_quantity_uom, FND_API.G_MISS_CHAR)
6080          AND  l_total_quantities.requested_quantity_uom = l_bad_quantities.requested_quantity_uom
6081          AND  NVL(l_total_quantities.inventory_item_id, FND_API.G_MISS_NUM)
6082               = NVL(l_bad_quantities.inventory_item_id, FND_API.G_MISS_NUM)
6083          THEN
6084             l_total_quantities.expected_quantity :=  l_total_quantities.expected_quantity
6085                                                      + l_bad_quantities.expected_quantity;
6086          ELSE
6087             CLOSE c_total_line_quantities;
6088 	    FND_MESSAGE.SET_NAME('WSH','WSH_DATA_CORRUPTION');
6089             WSH_UTIL_CORE.ADD_MESSAGE(FND_API.G_RET_STS_ERROR);
6090 	    raise others ;
6091          END IF;
6092 
6093        END LOOP;
6094 
6095        CLOSE c_total_line_quantities ;
6096 
6097 -- HW OPM Need to check the org for forking
6098        --
6099        -- Debug Statements
6100 
6101 
6102        IF l_debug_on THEN
6103            -- muom
6104            WSH_DEBUG_SV.logmsg(l_module_name,'l_total_quantities.expected_quantity '||l_total_quantities.expected_quantity||' l_max_quantity '||l_max_quantity);
6105            WSH_DEBUG_SV.logmsg(l_module_name,'l_total_quantities.expected_quantity2 '||l_total_quantities.expected_quantity2||' l_max_quantity2 '||l_max_quantity2);
6106        END IF;
6107 
6108        -- muom
6109        IF WSH_UTIL_CORE.Get_Line_Fulfillment_Base(dl.source_code, dl.source_line_id) = 'S' THEN
6110           IF (l_total_quantities.expected_quantity2 > l_max_quantity2) THEN
6111             l_flag := 'S';
6112           END IF;
6113        ELSIF l_total_quantities.expected_quantity > l_max_quantity THEN
6114          l_flag := 'P';
6115        END IF;
6116 
6117        IF (l_flag is not null) THEN
6118 	   x_source_line_id := dl.source_line_id ;
6119 	   l_source_line_number :=  dl.source_line_number;
6120 	   l_source_header_number :=  dl.source_header_number;
6121 	   l_source_header_type_name :=  dl.source_header_type_name;
6122            l_source_line_set_id      := dl.source_line_set_id;
6123 	   x_source_code    := dl.source_code ;
6124 
6125          OPEN c_total_other_line_qty( dl.source_line_id , dl.source_code, dl.source_header_id ) ;
6126          FETCH  c_total_other_line_qty
6127           INTO  l_total_other_line_qty;
6128          CLOSE  c_total_other_line_qty;
6129 
6130          IF l_debug_on THEN
6131              WSH_DEBUG_SV.log(l_module_name,'l_total_other_line_qty.expected_quantity',l_total_other_line_qty.expected_quantity);
6132              -- muom
6133              WSH_DEBUG_SV.log(l_module_name,'l_total_other_line_qty.expected_quantity2',l_total_other_line_qty.expected_quantity2);
6134          END IF;
6135 
6136          x_max_quantity   := l_max_quantity - nvl(l_total_other_line_qty.expected_quantity,0);
6137          x_max_quantity2  := nvl(l_max_quantity2,0) - nvl(l_total_other_line_qty.expected_quantity2,0);
6138 
6139          -- bug 2429367: provide full maximum quantity if x_max_quantity is negative.
6140          l_line_max_quantity := l_max_quantity;
6141          l_line_max_quantity2 := nvl(l_max_quantity2, 0);
6142 
6143          SELECT meaning
6144            INTO l_source_system
6145            FROM wsh_lookups
6146           WHERE lookup_type = 'SOURCE_SYSTEM'
6147             AND lookup_code = dl.source_code;
6148 
6149 
6150 	 raise tolerance_exceeded ;
6151        end if;
6152 
6153    END LOOP;
6154    x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
6155 
6156 --
6157 -- Debug Statements
6158 --
6159 IF l_debug_on THEN
6160     WSH_DEBUG_SV.pop(l_module_name);
6161 END IF;
6162 --
6163    EXCEPTION
6164      WHEN tolerance_exceeded   THEN
6165 
6166        -- bug 2429367: give an alternate message if x_max_quantity is negative.
6167        IF (l_flag = 'P' and x_max_quantity > 0) OR (l_flag = 'S' and x_max_quantity2 > 0) THEN
6168 
6169          -- bug 2662327: choose appropriate message based
6170          -- on line being in a set or not.
6171 
6172 	 -- Changes for Bug# 3836415
6173          IF l_source_line_set_id IS NULL THEN
6174 	   IF l_source_header_type_name is NOT NULL THEN
6175               -- muom
6176               IF l_flag = 'P' THEN
6177     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEEDED');
6178               ELSE
6179     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEEDED2');
6180               END IF;
6181               FND_MESSAGE.SET_TOKEN('ORDER_TYPE',l_source_header_type_name);
6182 	   ELSE
6183               -- muom
6184               IF l_flag = 'P' THEN
6185     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEEDED_OR');
6186               ELSE
6187     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEEDED_OR2');
6188               END IF;
6189 	   END IF;
6190 	 ELSE
6191 	   IF l_source_header_type_name is NOT NULL THEN
6192               -- muom
6193               IF l_flag = 'P' THEN
6194                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEED_LS');
6195               ELSE
6196                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEED_LS2');
6197               END IF;
6198               FND_MESSAGE.SET_TOKEN('ORDER_TYPE',l_source_header_type_name);
6199 	   ELSE
6200               -- muom
6201               IF l_flag = 'P' THEN
6202     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEED_LS_OR');
6203               ELSE
6204     	        FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOLERANCE_EXCEED_LS_O2');
6205               END IF;
6206 	   END IF;
6207 	 END IF;
6208 	 --
6209 	 -- Debug Statements
6210 	 --
6211 	 IF l_debug_on THEN
6212 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6213 	 END IF;
6214 	 --
6215 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
6216 	 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',l_source_header_number);
6217 	 FND_MESSAGE.SET_TOKEN('SOURCE_SYSTEM',l_source_system);
6218 	 FND_MESSAGE.SET_TOKEN('LINE_NUM',ltrim( rtrim ( l_source_line_number )) );
6219          -- muom
6220          IF l_flag = 'P' THEN
6221            FND_MESSAGE.SET_TOKEN('MAX_QTY',x_max_quantity);
6222          ELSE
6223            FND_MESSAGE.SET_TOKEN('MAX_QTY',x_max_quantity2);
6224          END IF;
6225 
6226        -- muom
6227        ELSIF (l_flag = 'P' and x_max_quantity < 0) OR (l_flag = 'S' and x_max_quantity2 < 0) THEN
6228 
6229          -- bug : choose appropriate message based
6230          -- on line being in a set or not.
6231          -- muom
6232          IF l_flag = 'P' THEN
6233            IF l_source_line_set_id IS NULL THEN
6234   	     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOL_EXCEEDED_REVIEW');
6235            ELSE
6236   	     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOL_EXCEED_REVIEW_LS');
6237            END IF;
6238          ELSE
6239            IF l_source_line_set_id IS NULL THEN
6240   	     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOL_EXCEEDED_REVIEW2');
6241            ELSE
6242   	     FND_MESSAGE.SET_NAME('WSH','WSH_DEL_TOL_EXCEED_REVIEW_LS2');
6243            END IF;
6244          END IF;
6245 	 --
6246 	 -- Debug Statements
6247 	 --
6248 	 IF l_debug_on THEN
6249 	     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6250 	 END IF;
6251 	 --
6252 	 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
6253 	 FND_MESSAGE.SET_TOKEN('ORDER_NUMBER',l_source_header_number);
6254 	 FND_MESSAGE.SET_TOKEN('SOURCE_SYSTEM',l_source_system);
6255 	 FND_MESSAGE.SET_TOKEN('ORDER_TYPE',l_source_header_type_name);
6256 	 FND_MESSAGE.SET_TOKEN('LINE_NUM',ltrim( rtrim ( l_source_line_number )) );
6257          -- muom
6258          IF l_flag = 'P' THEN
6259            FND_MESSAGE.SET_TOKEN('MAX_QTY',l_line_max_quantity);
6260          ELSE
6261            FND_MESSAGE.SET_TOKEN('MAX_QTY',l_line_max_quantity2);
6262          END IF;
6263 
6264        END IF;
6265 
6266        x_return_status := FND_API.G_RET_STS_ERROR;
6267 -- Add_message is not needed because the caller Confirm_Delivery does this.
6268 --       WSH_UTIL_CORE.ADD_MESSAGE(x_return_status);
6269 
6270 --
6271 -- Debug Statements
6272 --
6273 IF l_debug_on THEN
6274     WSH_DEBUG_SV.logmsg(l_module_name,'TOLERANCE_EXCEEDED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6275     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:TOLERANCE_EXCEEDED');
6276 END IF;
6277 --
6278      WHEN others THEN
6279 	   if c_total_line_quantities%ISOPEN THEN
6280 	      close c_total_line_quantities ;
6281            end if ;
6282 	   wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHECK_DELIVERY_FOR_TOLERANCE');
6283 	   x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6284 
6285 --
6286 -- Debug Statements
6287 --
6288 IF l_debug_on THEN
6289     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6290     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6291 END IF;
6292 --
6293 END Check_Delivery_for_tolerances ;
6294 
6295 
6296 FUNCTION Del_Assigned_To_Trip(
6297   p_delivery_id                IN   NUMBER,
6298   x_return_status              OUT NOCOPY   VARCHAR2
6299 ) RETURN VARCHAR2 IS
6300 
6301 cursor check_assigned(c_delivery_id in number) is
6302 select delivery_id
6303 FROM   wsh_delivery_legs
6304 WHERE  delivery_id = c_delivery_id
6305 AND rownum = 1;
6306 
6307 l_delivery_id  NUMBER;
6308 l_assigned     VARCHAR2(1);
6309 
6310 --
6311 l_debug_on BOOLEAN;
6312 --
6313 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DEL_ASSIGNED_TO_TRIP';
6314 --
6315 BEGIN
6316 
6317   --
6318   -- Debug Statements
6319   --
6320   --
6321   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6322   --
6323   IF l_debug_on IS NULL
6324   THEN
6325       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6326   END IF;
6327   --
6328   IF l_debug_on THEN
6329       WSH_DEBUG_SV.push(l_module_name);
6330       --
6331       WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
6332   END IF;
6333   --
6334   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6335 
6336   OPEN check_assigned(p_delivery_id);
6337 
6338   FETCH check_assigned INTO l_delivery_id;
6339 
6340   IF check_assigned%FOUND THEN
6341 
6342     l_assigned := 'Y';
6343 
6344   ELSE
6345 
6346     l_assigned := 'N';
6347 
6348   END IF;
6349 
6350   CLOSE check_assigned;
6351 
6352   --
6353   -- Debug Statements
6354   --
6355   IF l_debug_on THEN
6356       WSH_DEBUG_SV.pop(l_module_name);
6357   END IF;
6358   --
6359   RETURN  l_assigned;
6360 
6361   EXCEPTION
6362     WHEN OTHERS THEN
6363            IF check_assigned%ISOPEN THEN
6364              CLOSE check_assigned;
6365            END IF;
6366            x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6367            wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.Del_Assigned_To_Trip');
6368            --
6369            -- Debug Statements
6370            --
6371            IF l_debug_on THEN
6372                WSH_DEBUG_SV.pop(l_module_name);
6373            END IF;
6374            --
6375            return NULL;
6376 
6377 --
6378 -- Debug Statements
6379 --
6380 IF l_debug_on THEN
6381     WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6382     WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6383 END IF;
6384 --
6385 END Del_Assigned_To_Trip;
6386 
6387 
6388 --Harmonization Project I
6389 PROCEDURE Is_Action_Enabled(
6390                 p_dlvy_rec_tab          IN      dlvy_rec_tab_type,
6391                 p_action                IN      VARCHAR2,
6392                 p_caller                IN      VARCHAR2,
6393                 p_tripid                IN      NUMBER DEFAULT null,
6394                 x_return_status         OUT NOCOPY      VARCHAR2,
6395                 x_valid_ids             OUT NOCOPY      wsh_util_core.id_tab_type,
6396                 x_error_ids             OUT NOCOPY      wsh_util_core.id_tab_type,
6397                 x_valid_index_tab       OUT NOCOPY      wsh_util_core.id_tab_type
6398           ) IS
6399 
6400 cursor  del_to_det_cur( p_delivery_id IN NUMBER ) is
6401 select  distinct 'X'
6402 from    wsh_delivery_details wdd,
6403         wsh_delivery_assignments_v wda
6404 where   wda.delivery_id = p_delivery_id
6405 and     wdd.delivery_detail_id = wda.delivery_detail_id
6406 and     wdd.source_code = 'WSH'
6407 and     wdd.container_flag = 'N';
6408 
6409 cursor  valid_shpmnt_advice_cur(p_delivery_id IN NUMBER,
6410                                 p_tp_id IN NUMBER
6411                               ) is
6412 select  'X'
6413 from    wsh_transactions_history
6414 where   transaction_id = (
6415                         select  max(transaction_id)
6416                         from    wsh_transactions_history wth,
6417                                 wsh_new_deliveries wnd
6418                         where   wth.entity_number = wnd.name
6419                         and     wth.trading_partner_id = p_tp_id
6420                         and     wnd.delivery_id = p_delivery_id
6421                         )
6422 and     document_direction='I'
6423 and     action_type = 'A';
6424 
6425 cursor  det_stat_cur( p_delivery_id IN NUMBER) is
6426 select  distinct 'X'
6427 from    wsh_delivery_details wdd,
6428         wsh_delivery_assignments_v wda
6429 where   wdd.source_code = 'WSH'
6430 and     wdd.container_flag = 'N'
6431 and     wdd.delivery_detail_id = wda.delivery_detail_id
6432 and     wda.delivery_id = p_delivery_id;
6433 
6434 CURSOR c_istripfirm(p_tripid IN NUMBER) IS
6435 SELECT 'Y'
6436 FROM wsh_trips wt
6437 WHERE wt.trip_id=p_tripid
6438       AND wt.planned_flag='F';
6439 
6440 CURSOR c_isvalidtptrip(p_delid IN NUMBER, p_tripid IN NUMBER) IS
6441 SELECT 'Y'
6442 FROM wsh_trips wt
6443 WHERE wt.trip_id=p_tripid
6444       AND (nvl(wt.ignore_for_planning,'N') <> (select nvl(ignore_for_planning,'N') from wsh_new_deliveries where delivery_id=p_delid)
6445           );
6446 
6447 
6448 --/== Workflow Changes
6449 CURSOR c_get_cntrl_wf_details(p_delivery_id IN NUMBER) IS
6450 SELECT delivery_scpod_wf_process,
6451        del_wf_close_attr
6452 FROM WSH_NEW_DELIVERIES
6453 WHERE delivery_id = p_delivery_id;
6454 
6455 l_override_wf  VARCHAR2(1);
6456 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
6457 l_del_scpod_wf_process VARCHAR2(30);
6458 l_close_flag   VARCHAR2(1);
6459 l_purged_count NUMBER;
6460 l_wf_rs        VARCHAR2(1);
6461 e_scpod_wf_inprogress       EXCEPTION;
6462 --==/
6463 
6464 -- R12 MDC
6465 CURSOR cur_get_delivery_type (p_delivery_id IN NUMBER) IS
6466 SELECT delivery_type
6467 FROM   wsh_new_deliveries
6468 WHERE  delivery_id = p_delivery_id;
6469 l_delivery_type   wsh_new_deliveries.delivery_type%type;
6470 
6471 CURSOR cur_check_consol_delivery (p_delivery_id IN NUMBER) IS
6472 select 1
6473 from   wsh_delivery_legs pleg,
6474        wsh_delivery_legs cleg
6475 where  pleg.delivery_leg_id = cleg.parent_delivery_leg_id
6476 and    cleg.delivery_id = p_delivery_id;
6477 
6478 --RTV changes
6479 cursor  del_to_det_sc_cur( p_delivery_id IN NUMBER ) is
6480 select  'X'
6481 from    wsh_delivery_details wdd,
6482         wsh_delivery_assignments_v wda
6483 where   wda.delivery_id = p_delivery_id
6484 and     wdd.delivery_detail_id = wda.delivery_detail_id
6485 and     wdd.source_code NOT IN ('OE','WSH','OKE')
6486 and     wdd.container_flag = 'N';
6487 
6488 l_x_sc_wdd  VARCHAR2(1) ;
6489 --RTV changes
6490 
6491 
6492 l_dummy number;
6493 --
6494 
6495 l_dlvy_actions_tab	DeliveryActionsTabType;
6496 -- OTM R12 - Bug#5399341
6497 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
6498 
6499 l_organization_id       NUMBER;
6500 l_planned_flag VARCHAR2(1);
6501 l_status_code VARCHAR2(2);
6502 l_wh_type VARCHAR2(30);
6503 l_return_status VARCHAR2(1);
6504 l_tpw_temp VARCHAR2(1);
6505 l_valid_shpt_advc_tmp VARCHAR2(1);
6506 l_atd_tpw_temp VARCHAR2(1);
6507 
6508 l_org_type VARCHAR2(30);
6509 l_cache_org_type VARCHAR2(30);
6510 l_cache_org_id NUMBER;
6511 l_non_wms_org_id NUMBER;
6512 
6513 error_in_init_actions   EXCEPTION;
6514 e_record_ineligible     EXCEPTION;
6515 e_tp_record_ineligible     EXCEPTION;
6516 
6517 l_debug_on BOOLEAN;
6518 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_ACTION_ENABLED';
6519 
6520 --
6521 l_dlvy_status_code     VARCHAR2(30);
6522 l_shipping_control     VARCHAR2(30);
6523 l_routing_response_id  NUMBER;
6524 l_routing_request_flag VARCHAR2(30);
6525 l_caller               VARCHAR2(50);
6526 --l_planned_flag         VARCHAR2(10);
6527 l_is_del_eligible  BOOLEAN;  --ADDED FOR BUG FIX 3562492
6528 
6529 --OTM R12
6530 l_gc3_is_installed              VARCHAR2(1);
6531 
6532 BEGIN
6533  --
6534  l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6535  --
6536  IF l_debug_on IS NULL
6537  THEN
6538      l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6539  END IF;
6540  --
6541  IF l_debug_on THEN
6542     WSH_DEBUG_SV.push(l_module_name);
6543     --
6544     WSH_DEBUG_SV.log(l_module_name,'p_caller',p_caller);
6545     WSH_DEBUG_SV.log(l_module_name,'p_action',p_action);
6546  END IF;
6547 
6548 
6549   --OTM R12
6550   l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
6551 
6552   IF l_gc3_is_installed IS NULL THEN
6553     l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
6554   END IF;
6555   --
6556 
6557  Init_Delivery_Actions_Tbl(
6558 	p_action => p_action,
6559 	x_delivery_actions_tab => l_dlvy_actions_tab,
6560 	x_return_status => x_return_status);
6561 
6562  IF l_debug_on THEN
6563     WSH_DEBUG_SV.log(l_module_name,'Init_Detail_Actions_Tbl x_return_status',x_return_status);
6564     WSH_DEBUG_SV.log(l_module_name,' Count of p_dlvy_rec_tab is',p_dlvy_rec_tab.count);
6565  END IF;
6566 
6567  IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
6568     raise error_in_init_actions;
6569  END IF;
6570 
6571  FOR j IN p_dlvy_rec_tab.FIRST..p_dlvy_rec_tab.LAST LOOP
6572    BEGIN
6573 
6574      -- R12 MDC
6575      -- Only PRINT-BOL and WT-VOL actions are allowed for
6576      -- consolidation delivery, other actions are not allwed.
6577      IF (p_action NOT IN ('PRINT-BOL', 'GENERATE-BOL', 'WT-VOL', 'UNASSIGN', 'SELECT-CARRIER'))
6578          OR (p_action = 'UNASSIGN' AND p_caller NOT like 'WMS%') THEN --{
6579         OPEN  cur_get_delivery_type(p_dlvy_rec_tab(j).delivery_id);
6580         FETCH cur_get_delivery_type into l_delivery_type;
6581         CLOSE cur_get_delivery_type;
6582 
6583         IF l_delivery_type = 'CONSOLIDATION' THEN
6584            raise e_record_ineligible;
6585         END IF;
6586      END IF; -- p_action NOT IN ('PRINT-BOL', 'WT-VOL')
6587 
6588      -- Following actions are not allowed when a delivery is
6589      -- assigned to a consolidation delivery.
6590      IF p_action IN ('AUTOCREATE-TRIP', 'PLAN', 'FIRM', 'INCLUDE_PLAN',
6591                      'SELECT-CARRIER', 'GET-FREIGHT-COSTS', 'CANCEL-SHIP-METHOD',
6592                      'IGNORE_PLAN') THEN
6593 
6594         OPEN cur_check_consol_delivery(p_dlvy_rec_tab(j).delivery_id);
6595 	FETCH cur_check_consol_delivery INTO l_dummy;
6596 	IF cur_check_consol_delivery%FOUND THEN
6597            raise e_record_ineligible;
6598 	END IF;
6599 	CLOSE cur_check_consol_delivery;
6600      END IF;
6601      --
6602 
6603      l_org_type := NULL;
6604      --
6605      IF l_debug_on THEN
6606        wsh_debug_sv.log(l_module_name, 'Organization Id', p_dlvy_rec_tab(j).organization_id);
6607        wsh_debug_sv.log(l_module_name, 'Cached Organization Id', l_cache_org_id);
6608      END IF;
6609      --
6610      IF p_dlvy_rec_tab(j).organization_id = l_cache_org_id THEN
6611        l_org_type := l_cache_org_type;
6612      ELSE
6613        --
6614        IF l_debug_on THEN
6615 	 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.GET_ORG_TYPE',WSH_DEBUG_SV.C_PROC_LEVEL);
6616        END IF;
6617        --
6618        l_org_type := wsh_util_validate.get_org_type(
6619                        p_organization_id => p_dlvy_rec_tab(j).organization_id,
6620                        p_delivery_id     => p_dlvy_rec_tab(j).delivery_id,
6621                        p_msg_display     => 'N',
6622                        x_return_status   => l_return_status );
6623        --
6624        IF l_debug_on THEN
6625 	 wsh_debug_sv.log(l_module_name, 'Return status after wsh_util_validate.get_org_type', l_return_status);
6626 	 wsh_debug_sv.log(l_module_name, 'l_org_type is: ', l_org_type);
6627        END IF;
6628        --
6629        IF l_return_status = wsh_util_core.g_ret_sts_unexp_error THEN
6630            raise FND_API.G_EXC_UNEXPECTED_ERROR;
6631        ELSIF l_return_status = wsh_util_core.g_ret_sts_error THEN
6632          raise e_record_ineligible;
6633        END IF;
6634        --
6635        l_cache_org_id := p_dlvy_rec_tab(j).organization_id;
6636        l_cache_org_type := l_org_type;
6637        --
6638      END IF;
6639      -- OTM R12
6640      -- Bug 5399341: Get shipping params to figure if the org is OTM enabled.
6641 
6642      WSH_SHIPPING_PARAMS_PVT.Get(
6643                       p_organization_id => l_cache_org_id,
6644                       p_client_id       => p_dlvy_rec_tab(j).client_id, -- LSP PROJECT : Client defaults should be considered.
6645                       x_param_info      => l_param_info,
6646                       x_return_status   => x_return_status
6647                       );
6648 
6649      -- end of OTM R12
6650      -- This condition is added to enable the actions when the caller is
6651      -- WMS itself.
6652      IF (p_caller LIKE 'WMS%') THEN
6653        --
6654        IF instrb( l_org_type, 'WMS') > 0 THEN
6655          l_org_type := replace(l_org_type,'WMS');
6656        END IF;
6657        --
6658      END IF;
6659      --
6660 
6661      --
6662      IF l_debug_on THEN
6663        wsh_debug_sv.log(l_module_name, 'l_org_type', l_org_type);
6664        wsh_debug_sv.log(l_module_name, 'l_dlvy_actions_tab.Count', l_dlvy_actions_tab.count);
6665      END IF;
6666      --
6667      --
6668      -- J-IB-NPARIKH-{
6669      --
6670      l_dlvy_status_code := p_dlvy_rec_tab(j).status_code;   -- J-IB-NPARIKH
6671      l_caller           := p_caller;
6672      l_planned_flag     := p_dlvy_rec_tab(j).planned_flag;
6673      --
6674      --
6675      IF l_debug_on THEN
6676         wsh_debug_sv.log(l_module_name, 'l_dlvy_status_code', l_dlvy_status_code);
6677         wsh_debug_sv.log(l_module_name, 'l_caller', l_caller);
6678         wsh_debug_sv.log(l_module_name, 'l_planned_flag', l_planned_flag);
6679      END IF;
6680         --
6681         --
6682         -- Actions on inbound/drop-ship deliveries are allowed only if caller
6683         -- starts with  one of the following:
6684         --     - FTE
6685         --     - WSH_IB
6686         --     - WSH_PUB
6687         --     - WSH_TP_RELEASE
6688         -- For any other callers, set l_caller to WSH_FSTRX
6689         -- Since for caller, WSH_FSTRX, all actions are disabled
6690         -- on inbound/drop-ship deliveries
6691         --
6692         --
6693         IF  nvl(p_dlvy_rec_tab(j).shipment_direction,'O') NOT IN ('O','IO')  -- Inbound/Drop-ship
6694         THEN
6695         --{
6696             IF l_caller LIKE 'FTE%'
6697             OR l_caller LIKE 'WSH_PUB%'
6698             OR l_caller LIKE 'WSH_IB%'
6699             OR l_caller LIKE 'WSH_TP_RELEASE%'
6700             THEN
6701                 NULL;
6702             ELSE
6703                 l_caller := 'WSH_FSTRX';
6704             END IF;
6705         --}
6706         END IF;
6707      --
6708      --Bug 3458160
6709      IF p_action = 'INCLUDE_PLAN' THEN --{
6710          -- 5746444: skip this check for WSH lines if OTM is enabled
6711         IF l_gc3_is_installed = 'N' THEN
6712            open det_stat_cur(p_dlvy_rec_tab(j).delivery_id);
6713            fetch det_stat_cur into l_atd_tpw_temp;
6714            close det_stat_cur;
6715 
6716            IF l_atd_tpw_temp IS NOT NULL THEN
6717               raise e_record_ineligible;
6718            END IF;
6719          END IF;
6720      END IF; --}
6721 
6722      IF  p_action IN ('UNASSIGN','INCLUDE_PLAN') --WT-VOL-check
6723      AND l_dlvy_status_code IN ('IT','CL')
6724      AND NVL(p_dlvy_rec_tab(j).shipment_direction,'O') NOT IN ('O','IO')
6725      THEN
6726      --{
6727          --
6728          -- For in-transit/closed inbound deliveries (not O/IO),
6729          -- include plan action should not be allowed if
6730          --  - supplier is managing transportation
6731          -- OR
6732          --  - routing request was not received for all delivery lines
6733          --
6734          IF l_debug_on THEN
6735             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit GET_SHIPPING_CONTROL',WSH_DEBUG_SV.C_PROC_LEVEL);
6736          END IF;
6737          --
6738          -- Check if transportation is managed by supplier
6739          --
6740          GET_SHIPPING_CONTROL
6741             (
6742                 p_delivery_id           => p_dlvy_rec_tab(j).delivery_id,
6743                 x_shipping_control      => l_shipping_control,
6744                 x_routing_response_id   => l_routing_response_id,
6745                 x_routing_request_flag  => l_routing_request_flag,
6746                 x_return_status         => l_return_status
6747             );
6748          --
6749          --
6750          IF l_debug_on THEN
6751             wsh_debug_sv.log(l_module_name, 'l_return_status', l_return_status);
6752             wsh_debug_sv.log(l_module_name, 'l_shipping_control', l_shipping_control);
6753             wsh_debug_sv.log(l_module_name, 'l_routing_response_id', l_routing_response_id);
6754             wsh_debug_sv.log(l_module_name, 'l_routing_request_flag', l_routing_request_flag);
6755             --
6756          END IF;
6757          --
6758             --
6759             IF l_return_status = wsh_util_core.g_ret_sts_unexp_error THEN
6760                raise FND_API.G_EXC_UNEXPECTED_ERROR;
6761             ELSIF l_return_status = wsh_util_core.g_ret_sts_error THEN
6762                raise e_record_ineligible;
6763             END IF;
6764             --
6765          --
6766          IF l_shipping_control     = 'SUPPLIER'
6767          OR l_routing_request_flag = 'N'
6768          THEN
6769             IF p_action = 'UNASSIGN'
6770             THEN
6771                 l_planned_flag       := 'N';
6772             ELSIF p_action = 'INCLUDE_PLAN'
6773             THEN
6774                 l_dlvy_status_code   := 'XX';
6775             ELSE
6776                 l_dlvy_status_code   := 'OP';
6777             END IF;
6778          END IF;
6779      --}
6780      END IF;
6781      --
6782 
6783 
6784      IF l_debug_on THEN
6785         wsh_debug_sv.log(l_module_name, 'l_dlvy_status_code-modified', l_dlvy_status_code);
6786         wsh_debug_sv.log(l_module_name, 'l_caller-modified', l_caller);
6787         wsh_debug_sv.log(l_module_name, 'l_planned_flag-modified', l_planned_flag);
6788      END IF;
6789      --
6790      -- J-IB-NPARIKH-}
6791      --
6792      -- Section a
6793      IF (l_dlvy_actions_tab.COUNT > 0 ) THEN
6794        For k in l_dlvy_actions_tab.FIRST..l_dlvy_actions_tab.LAST  LOOP
6795 
6796           --bug 3301211 : adding debug msgs
6797           IF l_debug_on THEN
6798              wsh_debug_sv.log(l_module_name, 'Results from init_delivery_actions_tbl for index ', k);
6799              wsh_debug_sv.log(l_module_name, '---status_code', l_dlvy_actions_tab(k).status_code);
6800              wsh_debug_sv.log(l_module_name, '---planned_flag', l_dlvy_actions_tab(k).planned_flag);
6801              wsh_debug_sv.log(l_module_name, '---caller', l_dlvy_actions_tab(k).caller);
6802              wsh_debug_sv.log(l_module_name, '---org_type', l_dlvy_actions_tab(k).org_type);
6803              wsh_debug_sv.log(l_module_name, '---action_not_allowed', l_dlvy_actions_tab(k).action_not_allowed);
6804              wsh_debug_sv.log(l_module_name, '---shipment direction', l_dlvy_actions_tab(k).shipment_direction||' , '||p_dlvy_rec_tab(j).shipment_direction);
6805              --OTM R12
6806              wsh_debug_sv.log(l_module_name, '---ignore_for_planning', l_dlvy_actions_tab(k).ignore_for_planning);
6807              wsh_debug_sv.log(l_module_name, '---tms_interface_flag', l_dlvy_actions_tab(k).tms_interface_flag);
6808              -- OTM R12 Org Specific changes - 5399341
6809              wsh_debug_sv.log(l_module_name, '---otm_enabled', l_dlvy_actions_tab(k).otm_enabled);
6810              --
6811           END IF;
6812 
6813           IF(
6814           nvl(l_dlvy_actions_tab(k).status_code,l_dlvy_status_code) = l_dlvy_status_code     -- J-IB-NPARIKH
6815           --nvl(l_dlvy_actions_tab(k).status_code,p_dlvy_rec_tab(j).status_code) = p_dlvy_rec_tab(j).status_code
6816           AND nvl(l_dlvy_actions_tab(k).planned_flag,nvl(l_planned_flag,'N')) = nvl(l_planned_flag,'N')
6817           AND nvl(l_dlvy_actions_tab(k).caller,l_caller) = l_caller   -- J-IB-NPARIKH
6818           AND instrb( nvl(l_org_type, '!'), nvl(l_dlvy_actions_tab(k).org_type,nvl(l_org_type, '!')) ) > 0
6819 	  AND l_dlvy_actions_tab(k).action_not_allowed = p_action
6820           /* J new condition to check shipment_direction jckwok */
6821           AND nvl(l_dlvy_actions_tab(k).shipment_direction, nvl(p_dlvy_rec_tab(j).shipment_direction, 'O'))= nvl(p_dlvy_rec_tab(j).shipment_direction, 'O')
6822           --OTM R12
6823           AND NVL(l_dlvy_actions_tab(k).ignore_for_planning, NVL(p_dlvy_rec_tab(j).ignore_for_planning, 'N')) =
6824               NVL(p_dlvy_rec_tab(j).ignore_for_planning, 'N')
6825           AND NVL(l_dlvy_actions_tab(k).tms_interface_flag, NVL(p_dlvy_rec_tab(j).tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)) =
6826               NVL(p_dlvy_rec_tab(j).tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)
6827           -- OTM R12 Org Specific changes - 5399341
6828           AND nvl(l_dlvy_actions_tab(k).otm_enabled, nvl(l_param_info.otm_enabled, 'N')) =nvl(l_param_info.otm_enabled, 'N')
6829           --
6830           )
6831           THEN
6832             IF l_dlvy_actions_tab(k).message_name IS NOT NULL THEN
6833               FND_MESSAGE.SET_NAME('WSH',l_dlvy_actions_tab(k).message_name);
6834               wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
6835 	    END IF;
6836 	      raise e_record_ineligible;
6837             exit;
6838           END IF;
6839        END LOOP;
6840      END IF;
6841      -- Section a
6842      -- Intialization of local variables for section b
6843      l_status_code := l_dlvy_status_code; --p_dlvy_rec_tab(j).status_code;
6844      --l_planned_flag := p_dlvy_rec_tab(j).planned_flag;
6845 
6846      -- Bug 5298643, action Pack is not allowed from delivery tab,
6847      -- However, this procedure can be called from delivery detail,
6848      -- while packing a line that is assigned to a delivery.
6849 
6850      IF (p_action IN ('PICK-RELEASE','AUTO-PACK','AUTO-PACK-MASTER','PACK'))
6851      THEN
6852        --BUG FIX 3562492
6853        IF (p_action = 'PICK-RELEASE') THEN
6854           l_is_del_eligible := Is_del_eligible_pick(
6855                                      p_delivery_id  => p_dlvy_rec_tab(j).delivery_id,
6856                                      x_return_status => l_return_status);
6857           IF l_debug_on THEN
6858                WSH_DEBUG_SV.log(l_module_name,'Is_del_eligible_pick l_return_status',l_return_status);
6859           END IF;
6860        ELSE
6861           l_is_del_eligible := TRUE;
6862        END IF;
6863 
6864        IF l_debug_on THEN
6865              WSH_DEBUG_SV.log(l_module_name,'l_is_del_eligible ',l_is_del_eligible);
6866        END IF;
6867 
6868        IF l_is_del_eligible
6869        THEN
6870        --{
6871           l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
6872 			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
6873                          x_return_status  	=> l_return_status,
6874 			 p_delivery_id     	=> p_dlvy_rec_tab(j).delivery_id,
6875                          p_msg_display    	=> 'N');
6876 
6877            IF l_debug_on THEN
6878                 WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
6879            END IF;
6880 
6881            IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) = 'TPW' ) THEN
6882               open del_to_det_cur(p_dlvy_rec_tab(j).delivery_id);
6883        	      Fetch del_to_det_cur into l_tpw_temp;
6884 	      close del_to_det_cur;
6885   	      IF ( l_tpw_temp is null ) THEN
6886   	         raise e_record_ineligible;
6887 	      ELSE
6888  	         x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6889                  x_valid_index_tab(j) := j;
6890 	      END IF;
6891 	   ELSE
6892 	      x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6893               x_valid_index_tab(j) := j;
6894 	   END IF;
6895         --}
6896        ELSE
6897          raise e_record_ineligible;
6898        END IF;
6899        --
6900      ELSIF ( p_action ='GEN-LOAD-SEQ' ) THEN
6901        IF ( l_status_code IN ('SR', 'SC') AND l_planned_flag IN ('Y','F') ) THEN
6902          l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
6903 			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
6904                          x_return_status  	=> l_return_status,
6905 			 p_delivery_id     	=> p_dlvy_rec_tab(j).delivery_id,
6906                          p_msg_display    	=> 'N');
6907 
6908          IF l_debug_on THEN
6909            WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
6910          END IF;
6911 
6912 	 IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) = 'TPW' ) THEN
6913 	   raise e_record_ineligible;
6914 	 ELSE
6915 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6916            x_valid_index_tab(j) := j;
6917 	 END IF;
6918        ELSE
6919 	 x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6920          x_valid_index_tab(j) := j;
6921        END IF;
6922 
6923      ELSIF ( p_action = 'RE-OPEN' ) THEN
6924        IF ( l_status_code = 'CO' ) THEN
6925 	 open del_to_det_cur(p_dlvy_rec_tab(j).delivery_id);
6926 	 Fetch del_to_det_cur into l_tpw_temp;
6927 	 close del_to_det_cur;
6928 
6929 	 IF ( l_tpw_temp is null ) THEN
6930 	   l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
6931 			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
6932                          x_return_status  	=> l_return_status,
6933 			 p_delivery_id     	=> p_dlvy_rec_tab(j).delivery_id,
6934                          p_msg_display    	=> 'N');
6935 
6936            IF l_debug_on THEN
6937              WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type|| l_return_status);
6938            END IF;
6939 
6940            IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) = 'CMS' ) THEN
6941 	     raise e_record_ineligible;
6942            ELSE
6943 	     x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6944              x_valid_index_tab(j) := j;
6945            END IF;
6946 
6947 	 ELSE
6948 	   raise e_record_ineligible;
6949 	 END IF; -- IF ( l_tpw_temp is null )
6950        ELSE
6951          l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
6952      			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
6953                          x_return_status  	=> l_return_status,
6954 			 p_delivery_id     	=> p_dlvy_rec_tab(j).delivery_id,
6955                          p_msg_display    	=> 'N');
6956 
6957          IF l_debug_on THEN
6958            WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
6959          END IF;
6960 
6961          IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) = 'CMS' ) THEN
6962 	   raise e_record_ineligible;
6963          ELSE
6964 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6965            x_valid_index_tab(j) := j;
6966          END IF;
6967        END IF; --IF ( l_status_code = 'CO' )
6968 
6969      ELSIF ( p_action ='CONFIRM' ) THEN
6970        l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type (
6971                       p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
6972                       x_return_status   => l_return_status,
6973 		      p_delivery_id     => p_dlvy_rec_tab(j).delivery_id,
6974                       p_msg_display     => 'N');
6975 
6976        IF l_debug_on THEN
6977          WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
6978        END IF;
6979 
6980        IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) IN ('TPW','CMS') ) THEN
6981 	 open del_to_det_cur(p_dlvy_rec_tab(j).delivery_id);
6982 	 Fetch del_to_det_cur into l_tpw_temp;
6983 	 close del_to_det_cur;
6984 
6985 	 IF ( l_tpw_temp IS NULL ) THEN
6986 	   IF ( l_status_code = 'OP' ) THEN
6987 	     open valid_shpmnt_advice_cur(p_dlvy_rec_tab(j).delivery_id, l_organization_id);
6988 	     fetch valid_shpmnt_advice_cur into l_valid_shpt_advc_tmp;
6989 	     close valid_shpmnt_advice_cur;
6990 	     IF ( l_valid_shpt_advc_tmp IS NOT NULL ) THEN
6991 	       x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6992                x_valid_index_tab(j) := j;
6993 	     ELSE
6994 	       raise e_record_ineligible;
6995              END IF;
6996 	   ELSE
6997 	     x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
6998              x_valid_index_tab(j) := j;
6999 	   END IF; -- IF ( l_status_code = 'OP' )
7000 	 ELSE
7001 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7002            x_valid_index_tab(j) := j;
7003 	 END IF; -- IF ( l_tpw_temp IS NULL )
7004        ELSE
7005  	 x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7006          x_valid_index_tab(j) := j;
7007        END IF; --IF ( nvl(l_wh_type,
7008 
7009      ELSIF (p_action IN ('OUTBOUND-DOCUMENT','TRANSACTION-HISTORY-UI') ) THEN
7010 
7011        --R12.1.1 STANDALONE PROJECT
7012        IF ( WMS_DEPLOY.wms_deployment_mode = 'D'
7013           OR (p_dlvy_rec_tab(j).client_id IS NOT NULL AND WMS_DEPLOY.wms_deployment_mode = 'L')) THEN
7014        --
7015        --R12.1.1 STANDALONE PROJECT
7016        x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7017        x_valid_index_tab(j) := j;
7018        ELSE
7019        l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
7020 		      (p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
7021                        x_return_status   	=> l_return_status,
7022 		       p_delivery_id     	=>  p_dlvy_rec_tab(j).delivery_id);
7023 
7024        IF l_debug_on THEN
7025          WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
7026        END IF;
7027 
7028        IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR ) THEN
7029 	 open det_stat_cur(p_dlvy_rec_tab(j).delivery_id);
7030 	 fetch det_stat_cur into l_atd_tpw_temp;
7031 	 close det_stat_cur;
7032 
7033 	 IF ( l_atd_tpw_temp IS NULL ) THEN
7034 	   raise e_record_ineligible;
7035 	 ELSE
7036 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7037            x_valid_index_tab(j) := j;
7038 	 END IF;
7039        ELSIF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) IN ('CMS','TPW') ) THEN
7040 	  --RTV changes
7041 	  open del_to_det_sc_cur(p_dlvy_rec_tab(j).delivery_id);
7042 	  fetch del_to_det_sc_cur into l_x_sc_wdd;
7043 	  close del_to_det_sc_cur;
7044 
7045           IF l_debug_on THEN
7046             WSH_DEBUG_SV.logmsg(l_module_name,'l_status_code '||l_status_code ||' l_x_sc_wdd '||l_x_sc_wdd);
7047           END IF;
7048 
7049           IF l_x_sc_wdd IS NOT NULL THEN
7050             raise e_record_ineligible;
7051           ELSE --{        --RTV changes
7052 	    IF ( l_status_code = 'OP' ) THEN
7053 	      open valid_shpmnt_advice_cur(p_dlvy_rec_tab(j).delivery_id, l_organization_id);
7054    	      fetch valid_shpmnt_advice_cur into l_valid_shpt_advc_tmp;
7055    	      close valid_shpmnt_advice_cur;
7056 
7057    	      IF ( l_valid_shpt_advc_tmp IS NULL ) THEN
7058    	        x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7059                 x_valid_index_tab(j) := j;
7060    	      ELSE
7061    	        raise e_record_ineligible;
7062    	      END IF;
7063 	    ELSE
7064               x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7065               x_valid_index_tab(j) := j;
7066 	    END IF;
7067 	  END IF;--}
7068         ELSE
7069 	 raise e_record_ineligible;
7070 
7071          END IF; -- IF ( nvl(l_wh_type
7072 
7073        END IF ;
7074        --
7075      ELSIF ( p_action IN ('AUTOCREATE-TRIP','ASSIGN-TRIP')) THEN
7076        --tp_is_installed check not reqd as 'Firm' action is going to be available for wsh users as well
7077        IF (p_action='ASSIGN-TRIP') THEN
7078          IF (l_planned_flag='F') THEN --bug 3384112
7079             raise e_record_ineligible;
7080          END IF;
7081          FOR cur IN c_istripfirm(p_tripid) LOOP
7082             raise e_record_ineligible;
7083          END LOOP;
7084          FOR cur IN c_isvalidtptrip(p_dlvy_rec_tab(j).delivery_id, p_tripid) LOOP
7085             raise e_tp_record_ineligible;
7086          END LOOP;
7087        END IF;
7088        IF (p_dlvy_rec_tab(j).status_code = 'SA' )
7089        OR NVL(p_dlvy_rec_tab(j).shipment_direction,'O') NOT IN ('O','IO')     -- J-IB-NPARIKH
7090        THEN
7091 	 x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7092          x_valid_index_tab(j) := j;
7093        ELSE
7094 	 l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
7095 			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
7096                          x_return_status   	=> l_return_status,
7097 			 p_delivery_id     	=> p_dlvy_rec_tab(j).delivery_id,
7098                          p_msg_display     	=> 'N');
7099 
7100          IF l_debug_on THEN
7101            WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
7102          END IF;
7103 
7104          IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) in ( 'CMS','TPW') )
7105 
7106          THEN
7107 	   open del_to_det_cur(p_dlvy_rec_tab(j).delivery_id);
7108 	   fetch del_to_det_cur into l_tpw_temp;
7109 	   close del_to_det_cur;
7110 	   IF ( l_tpw_temp IS NULL ) THEN
7111 	     raise e_record_ineligible;
7112 	   ELSE
7113 	     x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7114              x_valid_index_tab(j) := j;
7115 	   END IF;
7116          ELSE
7117 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7118            x_valid_index_tab(j) := j;
7119 	 END IF;  -- IF ( nvl(l_wh_type
7120        END IF; -- IF (p_dlvy_rec_tab .status_code = 'SA' )
7121 
7122      --lines can't be unassigned from firm delivery.
7123      ELSIF ( p_action IN ('UNASSIGN', 'UNASSIGN-TRIP')) THEN --bug 3384112
7124        --tp_is_installed check not reqd as 'Firm' action is going to be available for wsh users as well
7125        IF (l_planned_flag='F') THEN
7126             raise e_record_ineligible;
7127        ELSE
7128 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7129            x_valid_index_tab(j) := j;
7130        END IF;
7131      ELSIF ( p_action IN ('GENERATE-BOL','PRINT-BOL'))
7132      THEN
7133        open det_stat_cur(p_dlvy_rec_tab(j).delivery_id);
7134        Fetch det_stat_cur into l_atd_tpw_temp;
7135        close det_stat_cur;
7136        IF ( l_atd_tpw_temp is not null ) THEN
7137 	 x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7138          x_valid_index_tab(j) := j;
7139        ELSE
7140          l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
7141 			(p_organization_id	=> p_dlvy_rec_tab(j).organization_id,
7142                          x_return_status       	=> l_return_status,
7143 			 p_delivery_id		=> p_dlvy_rec_tab(j).delivery_id,
7144                          p_msg_display     	=> 'N');
7145 
7146          IF l_debug_on THEN
7147            WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type l_wh_type,l_return_status',l_wh_type||l_return_status);
7148          END IF;
7149 
7150 	 IF ( nvl(l_wh_type, FND_API.G_MISS_CHAR) IN ('TPW','CMS') ) THEN
7151 	   raise e_record_ineligible;
7152 	 ELSE
7153 	   x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7154            x_valid_index_tab(j) := j;
7155 	 END IF;
7156        END IF; -- IF ( l_atd_tpw_temp
7157      --/== Workflow Changes
7158      ELSIF (p_action IN ('CLOSE')) THEN
7159     	 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7160 	 IF (nvl(l_override_wf,'N') = 'N') THEN
7161 	     OPEN c_get_cntrl_wf_details(p_dlvy_rec_tab(j).delivery_id);
7162 	     FETCH c_get_cntrl_wf_details into l_del_scpod_wf_process,l_close_flag;
7163 	     CLOSE c_get_cntrl_wf_details;
7164 	     IF (l_del_scpod_wf_process is not null and l_close_flag = 'I') THEN
7165 		 raise e_scpod_wf_inprogress;
7166 	     END IF;
7167 	 END IF;
7168          x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7169          x_valid_index_tab(j) := j;      -- Workflow Changes ==/
7170      ELSE
7171        x_valid_ids(x_valid_ids.COUNT + 1) := p_dlvy_rec_tab(j).delivery_id;
7172        x_valid_index_tab(j) := j;
7173      END IF; -- IF ( p_action IN ('LAUNCH_PICK_RELEASE'
7174    EXCEPTION
7175      WHEN e_record_ineligible THEN
7176        x_error_ids(x_error_ids.count +1) := p_dlvy_rec_tab(j).delivery_id;
7177        IF p_caller = 'WSH_PUB' or p_caller like 'FTE%' OR
7178           p_caller = 'WSH_TRCON' THEN
7179           FND_MESSAGE.SET_NAME('WSH','WSH_DELIVERY_ACTION_INELIGIBLE');
7180           FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(x_error_ids(x_error_ids.count)));
7181           FND_MESSAGE.Set_Token('ACTION',wsh_util_core.get_action_meaning('DLVY',p_action));
7182           wsh_util_core.add_message('E',l_module_name);
7183        END IF;
7184      WHEN e_tp_record_ineligible THEN
7185        x_error_ids(x_error_ids.count +1) := p_dlvy_rec_tab(j).delivery_id;
7186        IF p_caller = 'WSH_PUB' or p_caller like 'FTE%' OR
7187           p_caller = 'WSH_TRCON' THEN
7188           FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGN_FIRMTRIP_ERROR');
7189           FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(x_error_ids(x_error_ids.count)));
7190           FND_MESSAGE.Set_Token('TRIP_NAME',wsh_trips_pvt.get_name(p_tripid));
7191           wsh_util_core.add_message('E',l_module_name);
7192        END IF;
7193      WHEN e_scpod_wf_inprogress THEN     --/== Workflow Changes
7194        x_error_ids(x_error_ids.count +1) := p_dlvy_rec_tab(j).delivery_id;
7195        IF p_caller = 'WSH_PUB' or p_caller like 'FTE%' OR
7196           p_caller = 'WSH_TRCON' THEN
7197           FND_MESSAGE.SET_NAME('WSH','WSH_WF_DEL_ACTION_INELIGIBLE');
7198           FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(x_error_ids(x_error_ids.count)));
7199           FND_MESSAGE.Set_Token('ACTION',wsh_util_core.get_action_meaning('DLVY',p_action));
7200           wsh_util_core.add_message('E',l_module_name);    --==/
7201        END IF;
7202 
7203    END;
7204  END LOOP; -- For j IN p_dlvy_rec_tab.FIRST
7205 
7206 
7207  IF (x_valid_ids.COUNT = 0 ) THEN
7208     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7209     --
7210     IF NOT (l_caller LIKE 'FTE%' OR l_caller = 'WSH_PUB') THEN
7211       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED');
7212       wsh_util_core.add_message(x_return_status,l_module_name);
7213     END IF;
7214     --
7215  ELSIF (x_valid_ids.COUNT = p_dlvy_rec_tab.COUNT) THEN
7216     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7217  ELSIF (x_valid_ids.COUNT < p_dlvy_rec_tab.COUNT ) THEN
7218     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7219     --
7220     IF NOT (l_caller LIKE 'FTE%' OR l_caller = 'WSH_PUB') THEN
7221       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED_WARN');
7222       wsh_util_core.add_message(x_return_status,l_module_name);
7223     END IF;
7224     --
7225  ELSE
7226     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7227     --
7228     IF NOT (l_caller LIKE 'FTE%' OR l_caller = 'WSH_PUB') THEN
7229       FND_MESSAGE.SET_NAME('WSH','WSH_ACTION_ENABLED');
7230       wsh_util_core.add_message(x_return_status,l_module_name);
7231     END IF;
7232     --
7233  END IF;
7234 
7235  IF l_debug_on THEN
7236     WSH_DEBUG_SV.pop(l_module_name);
7237  END IF;
7238 
7239 EXCEPTION
7240   WHEN error_in_init_actions THEN
7241    IF l_debug_on THEN
7242       WSH_DEBUG_SV.logmsg(l_module_name,'error_in_init_actions exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7243       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:error_in_init_actions');
7244    END IF;
7245 
7246   WHEN OTHERS THEN
7247    x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7248    IF l_debug_on THEN
7249       WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
7250                           SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7251       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7252    END IF;
7253 END Is_Action_Enabled;
7254 
7255 /*
7256    Procedure populate_external_edf is called from
7257    eliminate_displayonly_fields to populate the external value
7258    for a given internal field
7259 */
7260 
7261 PROCEDURE populate_external_edf(
7262   p_internal        IN   NUMBER
7263 , p_external        IN   VARCHAR2
7264 , x_internal        IN OUT  NOCOPY NUMBER
7265 , x_external        IN OUT  NOCOPY VARCHAR2
7266 )
7267 IS
7268 BEGIN
7269 
7270    IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
7271       x_internal := p_internal;
7272       IF p_internal IS NULL THEN
7273          x_external := NULL;
7274       ELSE
7275          x_external := p_external;
7276       END IF;
7277    ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
7278       x_external := p_external;
7279       IF x_external IS NULL THEN
7280          x_internal := NULL;
7281       ELSE
7282          x_internal := p_internal;
7283       END IF;
7284    END IF;
7285 
7286 END populate_external_edf;
7287 
7288 
7289 /*
7290    Procedure populate_external_edf is called from
7291    eliminate_displayonly_fields to populate the external value
7292    for a given internal field
7293 */
7294 
7295 PROCEDURE populate_external_edf(
7296   p_internal        IN   VARCHAR2
7297 , p_external        IN   VARCHAR2
7298 , x_internal        IN OUT  NOCOPY VARCHAR2
7299 , x_external        IN OUT  NOCOPY VARCHAR2
7300 )
7301 IS
7302 BEGIN
7303 
7304    IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
7305       x_internal := p_internal;
7306       IF p_internal IS NULL THEN
7307          x_external := NULL;
7308       ELSE
7309          x_external := p_external;
7310       END IF;
7311    ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
7312       x_external := p_external;
7313       IF x_external IS NULL THEN
7314          x_internal := NULL;
7315       ELSE
7316          x_internal := p_internal;
7317       END IF;
7318    END IF;
7319 
7320 END populate_external_edf;
7321 
7322 
7323 PROCEDURE eliminate_displayonly_fields (
7324   p_delivery_rec   IN WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
7325 --tkt
7326 , p_in_rec		  IN  WSH_DELIVERIES_GRP.Del_In_Rec_Type
7327 , x_delivery_rec   IN OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
7328 )
7329 IS
7330 BEGIN
7331 
7332     /*
7333        Enable the x_delivery_detail_rec, with the columns that are not
7334        permanently  disabled.
7335     */
7336     --
7337 
7338     IF p_delivery_rec.NAME <> FND_API.G_MISS_CHAR
7339       OR p_delivery_rec.NAME IS NULL THEN
7340       x_delivery_rec.NAME :=
7341                           p_delivery_rec.NAME;
7342     END IF;
7343 
7344     -- RTV changes
7345     IF ( p_delivery_rec.CONSIGNEE_flag <> FND_API.G_MISS_CHAR
7346       OR p_delivery_rec.CONSIGNEE_flag IS NULL )    THEN
7347       x_delivery_rec.CONSIGNEE_flag :=
7348                           p_delivery_rec.CONSIGNEE_flag;
7349     END IF;
7350 
7351 
7352 
7353     populate_external_edf(p_delivery_rec.ORGANIZATION_ID,
7354                           p_delivery_rec.ORGANIZATION_CODE,
7355                           x_delivery_rec.ORGANIZATION_ID,
7356                           x_delivery_rec.ORGANIZATION_CODE );
7357 
7358     populate_external_edf(p_delivery_rec.INITIAL_PICKUP_LOCATION_ID,
7359                           p_delivery_rec.INITIAL_PICKUP_LOCATION_CODE,
7360                           x_delivery_rec.INITIAL_PICKUP_LOCATION_ID,
7361                           x_delivery_rec.INITIAL_PICKUP_LOCATION_CODE );
7362 
7363     populate_external_edf(p_delivery_rec.INTMED_SHIP_TO_LOCATION_ID,
7364                           p_delivery_rec.INTMED_SHIP_TO_LOCATION_CODE,
7365                           x_delivery_rec.INTMED_SHIP_TO_LOCATION_ID,
7366                           x_delivery_rec.INTMED_SHIP_TO_LOCATION_CODE );
7367 
7368     populate_external_edf(p_delivery_rec.POOLED_SHIP_TO_LOCATION_ID,
7369                           p_delivery_rec.POOLED_SHIP_TO_LOCATION_CODE,
7370                           x_delivery_rec.POOLED_SHIP_TO_LOCATION_ID,
7371                           x_delivery_rec.POOLED_SHIP_TO_LOCATION_CODE );
7372 
7373     IF p_delivery_rec.INITIAL_PICKUP_DATE <> FND_API.G_MISS_DATE
7374        OR p_delivery_rec.INITIAL_PICKUP_DATE IS NULL THEN
7375       x_delivery_rec.INITIAL_PICKUP_DATE :=
7376                           p_delivery_rec.INITIAL_PICKUP_DATE;
7377     END IF;
7378 
7379     --Bug 3458160
7380     IF p_in_rec.caller = 'WSH_TPW_INBOUND' THEN
7381        IF p_delivery_rec.SHIPMENT_DIRECTION <> FND_API.G_MISS_CHAR THEN
7382          x_delivery_rec.SHIPMENT_DIRECTION :=
7383                              p_delivery_rec.SHIPMENT_DIRECTION;
7384        END IF;
7385        IF p_delivery_rec.IGNORE_FOR_PLANNING <> FND_API.G_MISS_CHAR THEN
7386          x_delivery_rec.IGNORE_FOR_PLANNING :=
7387                              p_delivery_rec.IGNORE_FOR_PLANNING;
7388        END IF;
7389     ELSIF p_in_rec.caller = 'WSH_INBOUND' THEN
7390        IF p_delivery_rec.DELIVERED_DATE <> FND_API.G_MISS_DATE
7391             OR p_delivery_rec.DELIVERED_DATE IS NULL THEN
7392          x_delivery_rec.DELIVERED_DATE :=
7393                              p_delivery_rec.DELIVERED_DATE;
7394        END IF;
7395     END IF;
7396 
7397 
7398     populate_external_edf(p_delivery_rec.ULTIMATE_DROPOFF_LOCATION_ID,
7399                           p_delivery_rec.ULTIMATE_DROPOFF_LOCATION_CODE,
7400                           x_delivery_rec.ULTIMATE_DROPOFF_LOCATION_ID,
7401                           x_delivery_rec.ULTIMATE_DROPOFF_LOCATION_CODE );
7402 
7403     IF p_delivery_rec.NUMBER_OF_LPN <> FND_API.G_MISS_NUM
7404        OR p_delivery_rec.NUMBER_OF_LPN IS NULL THEN
7405       x_delivery_rec.NUMBER_OF_LPN :=
7406                           p_delivery_rec.NUMBER_OF_LPN;
7407     END IF;
7408     IF p_delivery_rec.WAYBILL <> FND_API.G_MISS_CHAR
7409        OR p_delivery_rec.WAYBILL IS NULL THEN
7410       x_delivery_rec.WAYBILL :=
7411                           p_delivery_rec.WAYBILL;
7412     END IF;
7413 
7414     populate_external_edf(p_delivery_rec.CUSTOMER_ID,
7415                           p_delivery_rec.CUSTOMER_NUMBER,
7416                           x_delivery_rec.CUSTOMER_ID,
7417                           x_delivery_rec.CUSTOMER_NUMBER );
7418     --Modified R12.1.1 LSP PROJECT (anvarshn)
7419     /*IF p_delivery_rec.client_id <> FND_API.G_MISS_NUM
7420        OR p_delivery_rec.client_id IS NULL THEN
7421       x_delivery_rec.client_id :=
7422                           p_delivery_rec.client_id;
7423     END IF;*/
7424 --Modified R12.1.1 LSP PROJECT (anvarshn)
7425    -- LSP PROJECT..
7426    populate_external_edf(p_delivery_rec.client_ID,
7427                           p_delivery_rec.client_CODE,
7428                           x_delivery_rec.client_id,
7429                           x_delivery_rec.client_CODE);
7430 
7431     populate_external_edf(p_delivery_rec.FREIGHT_TERMS_CODE,
7432                           p_delivery_rec.FREIGHT_TERMS_NAME,
7433                           x_delivery_rec.FREIGHT_TERMS_CODE,
7434                           x_delivery_rec.FREIGHT_TERMS_NAME );
7435 
7436     populate_external_edf(p_delivery_rec.SHIP_METHOD_CODE,
7437                           p_delivery_rec.SHIP_METHOD_NAME,
7438                           x_delivery_rec.SHIP_METHOD_CODE,
7439                           x_delivery_rec.SHIP_METHOD_NAME );
7440 
7441     populate_external_edf(p_delivery_rec.CARRIER_ID,
7442                           p_delivery_rec.CARRIER_CODE,
7443                           x_delivery_rec.CARRIER_ID,
7444                           x_delivery_rec.CARRIER_CODE );
7445 
7446     IF p_delivery_rec.SERVICE_LEVEL <> FND_API.G_MISS_CHAR
7447        OR p_delivery_rec.SERVICE_LEVEL IS NULL THEN
7448       x_delivery_rec.SERVICE_LEVEL :=
7449                           p_delivery_rec.SERVICE_LEVEL;
7450     END IF;
7451     IF p_delivery_rec.MODE_OF_TRANSPORT <> FND_API.G_MISS_CHAR
7452        OR p_delivery_rec.MODE_OF_TRANSPORT IS NULL THEN
7453       x_delivery_rec.MODE_OF_TRANSPORT :=
7454                           p_delivery_rec.MODE_OF_TRANSPORT;
7455     END IF;
7456 
7457     populate_external_edf(p_delivery_rec.FOB_CODE,
7458                           p_delivery_rec.FOB_NAME,
7459                           x_delivery_rec.FOB_CODE,
7460                           x_delivery_rec.FOB_NAME );
7461 
7462     populate_external_edf(p_delivery_rec.FOB_LOCATION_ID,
7463                           p_delivery_rec.FOB_LOCATION_CODE,
7464                           x_delivery_rec.FOB_LOCATION_ID,
7465                           x_delivery_rec.FOB_LOCATION_CODE );
7466 
7467     IF p_delivery_rec.GROSS_WEIGHT <> FND_API.G_MISS_NUM
7468        OR p_delivery_rec.GROSS_WEIGHT IS NULL THEN
7469       x_delivery_rec.GROSS_WEIGHT :=
7470                           p_delivery_rec.GROSS_WEIGHT;
7471     END IF;
7472     IF p_delivery_rec.NET_WEIGHT <> FND_API.G_MISS_NUM
7473        OR p_delivery_rec.NET_WEIGHT IS NULL THEN
7474       x_delivery_rec.NET_WEIGHT :=
7475                           p_delivery_rec.NET_WEIGHT;
7476     END IF;
7477 
7478     populate_external_edf(p_delivery_rec.WEIGHT_UOM_CODE,
7479                           p_delivery_rec.WEIGHT_UOM_DESC,
7480                           x_delivery_rec.WEIGHT_UOM_CODE,
7481                           x_delivery_rec.WEIGHT_UOM_DESC );
7482 
7483     IF p_delivery_rec.VOLUME <> FND_API.G_MISS_NUM
7484        OR p_delivery_rec.VOLUME IS NULL THEN
7485       x_delivery_rec.VOLUME :=
7486                           p_delivery_rec.VOLUME;
7487     END IF;
7488 
7489     populate_external_edf(p_delivery_rec.VOLUME_UOM_CODE,
7490                           p_delivery_rec.VOLUME_UOM_DESC,
7491                           x_delivery_rec.VOLUME_UOM_CODE,
7492                           x_delivery_rec.VOLUME_UOM_DESC );
7493 
7494     -- bug 3666967 - need wv_frozen_flag when creating new delivery through public api.
7495     IF p_delivery_rec.wv_frozen_flag <> FND_API.G_MISS_CHAR THEN
7496       x_delivery_rec.wv_frozen_flag :=
7497                           p_delivery_rec.wv_frozen_flag;
7498     END IF;
7499     -- end bug 3666967
7500 
7501     -- Bug#4539613 : Consider the Prorate weight flag while populating output record.
7502     IF p_delivery_rec.prorate_wt_flag <> FND_API.G_MISS_CHAR
7503        OR  p_delivery_rec.prorate_wt_flag  IS NULL THEN
7504       x_delivery_rec.prorate_wt_flag :=
7505                           p_delivery_rec.prorate_wt_flag;
7506     END IF;
7507 
7508     IF p_delivery_rec.LOADING_SEQUENCE <> FND_API.G_MISS_NUM
7509        OR p_delivery_rec.LOADING_SEQUENCE IS NULL THEN
7510       x_delivery_rec.LOADING_SEQUENCE :=
7511                           p_delivery_rec.LOADING_SEQUENCE;
7512     END IF;
7513 
7514     populate_external_edf(p_delivery_rec.LOADING_ORDER_FLAG,
7515                           p_delivery_rec.LOADING_ORDER_DESC,
7516                           x_delivery_rec.LOADING_ORDER_FLAG,
7517                           x_delivery_rec.LOADING_ORDER_DESC );
7518 
7519     IF p_delivery_rec.ADDITIONAL_SHIPMENT_INFO <> FND_API.G_MISS_CHAR
7520        OR p_delivery_rec.ADDITIONAL_SHIPMENT_INFO IS NULL THEN
7521       x_delivery_rec.ADDITIONAL_SHIPMENT_INFO :=
7522                           p_delivery_rec.ADDITIONAL_SHIPMENT_INFO;
7523     END IF;
7524     IF p_delivery_rec.PORT_OF_LOADING <> FND_API.G_MISS_CHAR
7525        OR p_delivery_rec.PORT_OF_LOADING IS NULL THEN
7526       x_delivery_rec.PORT_OF_LOADING :=
7527                           p_delivery_rec.PORT_OF_LOADING;
7528     END IF;
7529     IF p_delivery_rec.ROUTED_EXPORT_TXN <> FND_API.G_MISS_CHAR
7530        OR p_delivery_rec.ROUTED_EXPORT_TXN IS NULL THEN
7531       x_delivery_rec.ROUTED_EXPORT_TXN :=
7532                           p_delivery_rec.ROUTED_EXPORT_TXN;
7533     END IF;
7534     IF p_delivery_rec.FTZ_NUMBER <> FND_API.G_MISS_CHAR
7535        OR p_delivery_rec.FTZ_NUMBER IS NULL THEN
7536       x_delivery_rec.FTZ_NUMBER :=
7537                           p_delivery_rec.FTZ_NUMBER;
7538     END IF;
7539     IF p_delivery_rec.ENTRY_NUMBER <> FND_API.G_MISS_CHAR
7540        OR p_delivery_rec.ENTRY_NUMBER IS NULL THEN
7541       x_delivery_rec.ENTRY_NUMBER :=
7542                           p_delivery_rec.ENTRY_NUMBER;
7543     END IF;
7544     IF p_delivery_rec.IN_BOND_CODE <> FND_API.G_MISS_CHAR
7545        OR p_delivery_rec.IN_BOND_CODE IS NULL THEN
7546       x_delivery_rec.IN_BOND_CODE :=
7547                           p_delivery_rec.IN_BOND_CODE;
7548     END IF;
7549     IF p_delivery_rec.SHIPPING_MARKS <> FND_API.G_MISS_CHAR
7550        OR p_delivery_rec.SHIPPING_MARKS IS NULL THEN
7551       x_delivery_rec.SHIPPING_MARKS :=
7552                           p_delivery_rec.SHIPPING_MARKS;
7553     END IF;
7554     IF p_delivery_rec.PROBLEM_CONTACT_REFERENCE <> FND_API.G_MISS_CHAR
7555        OR p_delivery_rec.PROBLEM_CONTACT_REFERENCE IS NULL THEN
7556       x_delivery_rec.PROBLEM_CONTACT_REFERENCE :=
7557                           p_delivery_rec.PROBLEM_CONTACT_REFERENCE;
7558     END IF;
7559     IF p_delivery_rec.COD_AMOUNT <> FND_API.G_MISS_NUM
7560        OR p_delivery_rec.COD_AMOUNT IS NULL THEN
7561       x_delivery_rec.COD_AMOUNT :=
7562                           p_delivery_rec.COD_AMOUNT;
7563     END IF;
7564     IF p_delivery_rec.COD_CURRENCY_CODE <> FND_API.G_MISS_CHAR
7565        OR p_delivery_rec.COD_CURRENCY_CODE IS NULL THEN
7566       x_delivery_rec.COD_CURRENCY_CODE :=
7567                           p_delivery_rec.COD_CURRENCY_CODE;
7568     END IF;
7569     IF p_delivery_rec.COD_REMIT_TO <> FND_API.G_MISS_CHAR
7570        OR p_delivery_rec.COD_REMIT_TO IS NULL THEN
7571       x_delivery_rec.COD_REMIT_TO :=
7572                           p_delivery_rec.COD_REMIT_TO;
7573     END IF;
7574     IF p_delivery_rec.COD_CHARGE_PAID_BY <> FND_API.G_MISS_CHAR
7575        OR p_delivery_rec.COD_CHARGE_PAID_BY IS NULL THEN
7576       x_delivery_rec.COD_CHARGE_PAID_BY :=
7577                           p_delivery_rec.COD_CHARGE_PAID_BY;
7578     END IF;
7579     IF p_delivery_rec.AUTO_SC_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
7580        OR p_delivery_rec.AUTO_SC_EXCLUDE_FLAG IS NULL THEN
7581       x_delivery_rec.AUTO_SC_EXCLUDE_FLAG :=
7582                           p_delivery_rec.AUTO_SC_EXCLUDE_FLAG;
7583     END IF;
7584     IF p_delivery_rec.AUTO_AP_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
7585        OR p_delivery_rec.AUTO_AP_EXCLUDE_FLAG IS NULL THEN
7586       x_delivery_rec.AUTO_AP_EXCLUDE_FLAG :=
7587                           p_delivery_rec.AUTO_AP_EXCLUDE_FLAG;
7588     END IF;
7589     IF p_delivery_rec.attribute1 <> FND_API.G_MISS_CHAR
7590        OR p_delivery_rec.attribute1 IS NULL THEN
7591       x_delivery_rec.attribute1 :=
7592                           p_delivery_rec.attribute1;
7593     END IF;
7594     IF p_delivery_rec.attribute2 <> FND_API.G_MISS_CHAR
7595        OR p_delivery_rec.attribute2 IS NULL THEN
7596       x_delivery_rec.attribute2 :=
7597                           p_delivery_rec.attribute2;
7598     END IF;
7599     IF p_delivery_rec.attribute3 <> FND_API.G_MISS_CHAR
7600        OR p_delivery_rec.attribute3 IS NULL THEN
7601       x_delivery_rec.attribute3 :=
7602                           p_delivery_rec.attribute3;
7603     END IF;
7604     IF p_delivery_rec.attribute4 <> FND_API.G_MISS_CHAR
7605        OR p_delivery_rec.attribute4 IS NULL THEN
7606       x_delivery_rec.attribute4 :=
7607                           p_delivery_rec.attribute4;
7608     END IF;
7609     IF p_delivery_rec.attribute5 <> FND_API.G_MISS_CHAR
7610        OR p_delivery_rec.attribute5 IS NULL THEN
7611       x_delivery_rec.attribute5 :=
7612                           p_delivery_rec.attribute5;
7613     END IF;
7614     IF p_delivery_rec.attribute6 <> FND_API.G_MISS_CHAR
7615        OR p_delivery_rec.attribute6 IS NULL THEN
7616       x_delivery_rec.attribute6 :=
7617                           p_delivery_rec.attribute6;
7618     END IF;
7619     IF p_delivery_rec.attribute7 <> FND_API.G_MISS_CHAR
7620        OR p_delivery_rec.attribute7 IS NULL THEN
7621       x_delivery_rec.attribute7 :=
7622                           p_delivery_rec.attribute7;
7623     END IF;
7624     IF p_delivery_rec.attribute8 <> FND_API.G_MISS_CHAR
7625        OR p_delivery_rec.attribute8 IS NULL THEN
7626       x_delivery_rec.attribute8 :=
7627                           p_delivery_rec.attribute8;
7628     END IF;
7629     IF p_delivery_rec.attribute9 <> FND_API.G_MISS_CHAR
7630        OR p_delivery_rec.attribute9 IS NULL THEN
7631       x_delivery_rec.attribute9 :=
7632                           p_delivery_rec.attribute9;
7633     END IF;
7634     IF p_delivery_rec.attribute10 <> FND_API.G_MISS_CHAR
7635        OR p_delivery_rec.attribute10 IS NULL THEN
7636       x_delivery_rec.attribute10 :=
7637                           p_delivery_rec.attribute10;
7638     END IF;
7639     IF p_delivery_rec.attribute11 <> FND_API.G_MISS_CHAR
7640        OR p_delivery_rec.attribute11 IS NULL THEN
7641       x_delivery_rec.attribute11 :=
7642                           p_delivery_rec.attribute11;
7643     END IF;
7644     IF p_delivery_rec.attribute12 <> FND_API.G_MISS_CHAR
7645        OR p_delivery_rec.attribute12 IS NULL THEN
7646       x_delivery_rec.attribute12 :=
7647                           p_delivery_rec.attribute12;
7648     END IF;
7649     IF p_delivery_rec.attribute13 <> FND_API.G_MISS_CHAR
7650        OR p_delivery_rec.attribute13 IS NULL THEN
7651       x_delivery_rec.attribute13 :=
7652                           p_delivery_rec.attribute13;
7653     END IF;
7654     IF p_delivery_rec.attribute14 <> FND_API.G_MISS_CHAR
7655        OR p_delivery_rec.attribute14 IS NULL THEN
7656       x_delivery_rec.attribute14 :=
7657                           p_delivery_rec.attribute14;
7658     END IF;
7659     IF p_delivery_rec.attribute15 <> FND_API.G_MISS_CHAR
7660        OR p_delivery_rec.attribute15 IS NULL THEN
7661       x_delivery_rec.attribute15 :=
7662                           p_delivery_rec.attribute15;
7663     END IF;
7664     IF p_delivery_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
7665        OR p_delivery_rec.ATTRIBUTE_CATEGORY IS NULL THEN
7666       x_delivery_rec.ATTRIBUTE_CATEGORY :=
7667                           p_delivery_rec.ATTRIBUTE_CATEGORY;
7668     END IF;
7669     IF p_delivery_rec.tp_attribute1 <> FND_API.G_MISS_CHAR
7670        OR p_delivery_rec.tp_attribute1 IS NULL THEN
7671       x_delivery_rec.tp_attribute1 :=
7672                           p_delivery_rec.tp_attribute1;
7673     END IF;
7674     IF p_delivery_rec.tp_attribute2 <> FND_API.G_MISS_CHAR
7675        OR p_delivery_rec.tp_attribute2 IS NULL THEN
7676       x_delivery_rec.tp_attribute2 :=
7677                           p_delivery_rec.tp_attribute2;
7678     END IF;
7679     IF p_delivery_rec.tp_attribute3 <> FND_API.G_MISS_CHAR
7680        OR p_delivery_rec.tp_attribute3 IS NULL THEN
7681       x_delivery_rec.tp_attribute3 :=
7682                           p_delivery_rec.tp_attribute3;
7683     END IF;
7684     IF p_delivery_rec.tp_attribute4 <> FND_API.G_MISS_CHAR
7685        OR p_delivery_rec.tp_attribute4 IS NULL THEN
7686       x_delivery_rec.tp_attribute4 :=
7687                           p_delivery_rec.tp_attribute4;
7688     END IF;
7689     IF p_delivery_rec.tp_attribute5 <> FND_API.G_MISS_CHAR
7690        OR p_delivery_rec.tp_attribute5 IS NULL THEN
7691       x_delivery_rec.tp_attribute5 :=
7692                           p_delivery_rec.tp_attribute5;
7693     END IF;
7694     IF p_delivery_rec.tp_attribute6 <> FND_API.G_MISS_CHAR
7695        OR p_delivery_rec.tp_attribute6 IS NULL THEN
7696       x_delivery_rec.tp_attribute6 :=
7697                           p_delivery_rec.tp_attribute6;
7698     END IF;
7699     IF p_delivery_rec.tp_attribute7 <> FND_API.G_MISS_CHAR
7700        OR p_delivery_rec.tp_attribute7 IS NULL THEN
7701       x_delivery_rec.tp_attribute7 :=
7702                           p_delivery_rec.tp_attribute7;
7703     END IF;
7704     IF p_delivery_rec.tp_attribute8 <> FND_API.G_MISS_CHAR
7705        OR p_delivery_rec.tp_attribute8 IS NULL THEN
7706       x_delivery_rec.tp_attribute8 :=
7707                           p_delivery_rec.tp_attribute8;
7708     END IF;
7709     IF p_delivery_rec.tp_attribute9 <> FND_API.G_MISS_CHAR
7710        OR p_delivery_rec.tp_attribute9 IS NULL THEN
7711       x_delivery_rec.tp_attribute9 :=
7712                           p_delivery_rec.tp_attribute9;
7713     END IF;
7714     IF p_delivery_rec.tp_attribute10 <> FND_API.G_MISS_CHAR
7715        OR p_delivery_rec.tp_attribute10 IS NULL THEN
7716       x_delivery_rec.tp_attribute10 :=
7717                           p_delivery_rec.tp_attribute10;
7718     END IF;
7719     IF p_delivery_rec.tp_attribute11 <> FND_API.G_MISS_CHAR
7720        OR p_delivery_rec.tp_attribute11 IS NULL THEN
7721       x_delivery_rec.tp_attribute11 :=
7722                           p_delivery_rec.tp_attribute11;
7723     END IF;
7724     IF p_delivery_rec.tp_attribute12 <> FND_API.G_MISS_CHAR
7725        OR p_delivery_rec.tp_attribute12 IS NULL THEN
7726       x_delivery_rec.tp_attribute12 :=
7727                           p_delivery_rec.tp_attribute12;
7728     END IF;
7729     IF p_delivery_rec.tp_attribute13 <> FND_API.G_MISS_CHAR
7730        OR p_delivery_rec.tp_attribute13 IS NULL THEN
7731       x_delivery_rec.tp_attribute13 :=
7732                           p_delivery_rec.tp_attribute13;
7733     END IF;
7734     IF p_delivery_rec.tp_attribute14 <> FND_API.G_MISS_CHAR
7735        OR p_delivery_rec.tp_attribute14 IS NULL THEN
7736       x_delivery_rec.tp_attribute14 :=
7737                           p_delivery_rec.tp_attribute14;
7738     END IF;
7739     IF p_delivery_rec.tp_attribute15 <> FND_API.G_MISS_CHAR
7740        OR p_delivery_rec.tp_attribute15 IS NULL THEN
7741       x_delivery_rec.tp_attribute15 :=
7742                           p_delivery_rec.tp_attribute15;
7743     END IF;
7744     IF p_delivery_rec.tp_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
7745        OR p_delivery_rec.tp_ATTRIBUTE_CATEGORY IS NULL THEN
7746       x_delivery_rec.tp_ATTRIBUTE_CATEGORY :=
7747                           p_delivery_rec.tp_ATTRIBUTE_CATEGORY;
7748     END IF;
7749     IF p_delivery_rec.global_attribute1 <> FND_API.G_MISS_CHAR
7750        OR p_delivery_rec.global_attribute1 IS NULL THEN
7751       x_delivery_rec.global_attribute1 :=
7752                           p_delivery_rec.global_attribute1;
7753     END IF;
7754     IF p_delivery_rec.global_attribute2 <> FND_API.G_MISS_CHAR
7755        OR p_delivery_rec.global_attribute2 IS NULL THEN
7756       x_delivery_rec.global_attribute2 :=
7757                           p_delivery_rec.global_attribute2;
7758     END IF;
7759     IF p_delivery_rec.global_attribute3 <> FND_API.G_MISS_CHAR
7760        OR p_delivery_rec.global_attribute3 IS NULL THEN
7761       x_delivery_rec.global_attribute3 :=
7762                           p_delivery_rec.global_attribute3;
7763     END IF;
7764     IF p_delivery_rec.global_attribute4 <> FND_API.G_MISS_CHAR
7765        OR p_delivery_rec.global_attribute4 IS NULL THEN
7766       x_delivery_rec.global_attribute4 :=
7767                           p_delivery_rec.global_attribute4;
7768     END IF;
7769     IF p_delivery_rec.global_attribute5 <> FND_API.G_MISS_CHAR
7770        OR p_delivery_rec.global_attribute5 IS NULL THEN
7771       x_delivery_rec.global_attribute5 :=
7772                           p_delivery_rec.global_attribute5;
7773     END IF;
7774     IF p_delivery_rec.global_attribute6 <> FND_API.G_MISS_CHAR
7775        OR p_delivery_rec.global_attribute6 IS NULL THEN
7776       x_delivery_rec.global_attribute6 :=
7777                           p_delivery_rec.global_attribute6;
7778     END IF;
7779     IF p_delivery_rec.global_attribute7 <> FND_API.G_MISS_CHAR
7780        OR p_delivery_rec.global_attribute7 IS NULL THEN
7781       x_delivery_rec.global_attribute7 :=
7782                           p_delivery_rec.global_attribute7;
7783     END IF;
7784     IF p_delivery_rec.global_attribute8 <> FND_API.G_MISS_CHAR
7785        OR p_delivery_rec.global_attribute8 IS NULL THEN
7786       x_delivery_rec.global_attribute8 :=
7787                           p_delivery_rec.global_attribute8;
7788     END IF;
7789     IF p_delivery_rec.global_attribute9 <> FND_API.G_MISS_CHAR
7790        OR p_delivery_rec.global_attribute9 IS NULL THEN
7791       x_delivery_rec.global_attribute9 :=
7792                           p_delivery_rec.global_attribute9;
7793     END IF;
7794     IF p_delivery_rec.global_attribute10 <> FND_API.G_MISS_CHAR
7795        OR p_delivery_rec.global_attribute10 IS NULL THEN
7796       x_delivery_rec.global_attribute10 :=
7797                           p_delivery_rec.global_attribute10;
7798     END IF;
7799     IF p_delivery_rec.global_attribute11 <> FND_API.G_MISS_CHAR
7800        OR p_delivery_rec.global_attribute11 IS NULL THEN
7801       x_delivery_rec.global_attribute11 :=
7802                           p_delivery_rec.global_attribute11;
7803     END IF;
7804     IF p_delivery_rec.global_attribute12 <> FND_API.G_MISS_CHAR
7805        OR p_delivery_rec.global_attribute12 IS NULL THEN
7806       x_delivery_rec.global_attribute12 :=
7807                           p_delivery_rec.global_attribute12;
7808     END IF;
7809     IF p_delivery_rec.global_attribute13 <> FND_API.G_MISS_CHAR
7810        OR p_delivery_rec.global_attribute13 IS NULL THEN
7811       x_delivery_rec.global_attribute13 :=
7812                           p_delivery_rec.global_attribute13;
7813     END IF;
7814     IF p_delivery_rec.global_attribute14 <> FND_API.G_MISS_CHAR
7815        OR p_delivery_rec.global_attribute14 IS NULL THEN
7816       x_delivery_rec.global_attribute14 :=
7817                           p_delivery_rec.global_attribute14;
7818     END IF;
7819     IF p_delivery_rec.global_attribute15 <> FND_API.G_MISS_CHAR
7820        OR p_delivery_rec.global_attribute15 IS NULL THEN
7821       x_delivery_rec.global_attribute15 :=
7822                           p_delivery_rec.global_attribute15;
7823     END IF;
7824     IF p_delivery_rec.global_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
7825        OR p_delivery_rec.global_ATTRIBUTE_CATEGORY IS NULL THEN
7826       x_delivery_rec.global_ATTRIBUTE_CATEGORY :=
7827                           p_delivery_rec.global_ATTRIBUTE_CATEGORY;
7828     END IF;
7829     IF p_delivery_rec.ULTIMATE_DROPOFF_DATE <> FND_API.G_MISS_DATE
7830        OR p_delivery_rec.ULTIMATE_DROPOFF_DATE IS NULL THEN
7831       x_delivery_rec.ULTIMATE_DROPOFF_DATE :=
7832                           p_delivery_rec.ULTIMATE_DROPOFF_DATE;
7833     END IF;
7834     IF p_delivery_rec.DOCK_CODE <> FND_API.G_MISS_CHAR
7835        OR p_delivery_rec.DOCK_CODE IS NULL THEN
7836       x_delivery_rec.DOCK_CODE :=
7837                           p_delivery_rec.DOCK_CODE;
7838     END IF;
7839     IF p_delivery_rec.ACCEPTANCE_FLAG <> FND_API.G_MISS_CHAR
7840        OR p_delivery_rec.ACCEPTANCE_FLAG IS NULL THEN
7841       x_delivery_rec.ACCEPTANCE_FLAG :=
7842                           p_delivery_rec.ACCEPTANCE_FLAG;
7843     END IF;
7844     IF p_delivery_rec.ACCEPTED_BY <> FND_API.G_MISS_CHAR
7845        OR p_delivery_rec.ACCEPTED_BY IS NULL THEN
7846       x_delivery_rec.ACCEPTED_BY :=
7847                           p_delivery_rec.ACCEPTED_BY;
7848     END IF;
7849     IF p_delivery_rec.ACCEPTED_DATE <> FND_API.G_MISS_DATE
7850        OR p_delivery_rec.ACCEPTED_DATE IS NULL THEN
7851       x_delivery_rec.ACCEPTED_DATE :=
7852                           p_delivery_rec.ACCEPTED_DATE;
7853     END IF;
7854     IF p_delivery_rec.ACKNOWLEDGED_BY <> FND_API.G_MISS_CHAR
7855        OR p_delivery_rec.ACKNOWLEDGED_BY IS NULL THEN
7856       x_delivery_rec.ACKNOWLEDGED_BY :=
7857                           p_delivery_rec.ACKNOWLEDGED_BY;
7858     END IF;
7859     IF p_delivery_rec.CONFIRMED_BY <> FND_API.G_MISS_CHAR
7860        OR p_delivery_rec.CONFIRMED_BY IS NULL THEN
7861       x_delivery_rec.CONFIRMED_BY :=
7862                           p_delivery_rec.CONFIRMED_BY;
7863     END IF;
7864     IF p_delivery_rec.CONFIRM_DATE <> FND_API.G_MISS_DATE
7865        OR p_delivery_rec.CONFIRM_DATE IS NULL THEN
7866       x_delivery_rec.CONFIRM_DATE :=
7867                           p_delivery_rec.CONFIRM_DATE;
7868     END IF;
7869     IF p_delivery_rec.PORT_OF_DISCHARGE <> FND_API.G_MISS_CHAR
7870        OR p_delivery_rec.PORT_OF_DISCHARGE IS NULL THEN
7871       x_delivery_rec.PORT_OF_DISCHARGE :=
7872                           p_delivery_rec.PORT_OF_DISCHARGE;
7873     END IF;
7874     IF p_delivery_rec.ROUTING_INSTRUCTIONS <> FND_API.G_MISS_CHAR
7875        OR p_delivery_rec.ROUTING_INSTRUCTIONS IS NULL THEN
7876       x_delivery_rec.ROUTING_INSTRUCTIONS :=
7877                           p_delivery_rec.ROUTING_INSTRUCTIONS;
7878     END IF;
7879     IF p_delivery_rec.ASSIGNED_TO_FTE_TRIPS <> FND_API.G_MISS_CHAR
7880        OR p_delivery_rec.ASSIGNED_TO_FTE_TRIPS IS NULL THEN
7881       x_delivery_rec.ASSIGNED_TO_FTE_TRIPS :=
7882                           p_delivery_rec.ASSIGNED_TO_FTE_TRIPS;
7883     END IF;
7884 
7885 --tkt
7886     IF p_in_rec.caller='WSH_TP_RELEASE' THEN
7887        IF p_delivery_rec.tp_plan_name <> FND_API.G_MISS_CHAR
7888           OR p_delivery_rec.tp_plan_name IS NULL THEN
7889           x_delivery_rec.tp_plan_name :=
7890                           p_delivery_rec.tp_plan_name;
7891        END IF;
7892        IF p_delivery_rec.tp_delivery_number <> FND_API.G_MISS_NUM
7893           OR p_delivery_rec.tp_delivery_number IS NULL THEN
7894           x_delivery_rec.tp_delivery_number :=
7895                           p_delivery_rec.tp_delivery_number;
7896        END IF;
7897     END IF;
7898 
7899 /*3667348*/
7900      IF p_delivery_rec.REASON_OF_TRANSPORT <> FND_API.G_MISS_CHAR
7901 	  OR p_delivery_rec.REASON_OF_TRANSPORT IS NULL THEN
7902        	  x_delivery_rec.REASON_OF_TRANSPORT :=  p_delivery_rec.REASON_OF_TRANSPORT;
7903      END IF;
7904      IF p_delivery_rec.DESCRIPTION <> FND_API.G_MISS_CHAR
7905 	  OR p_delivery_rec.DESCRIPTION IS NULL THEN
7906        	  x_delivery_rec.DESCRIPTION :=  p_delivery_rec.DESCRIPTION;
7907      END IF;
7908 
7909 
7910 END eliminate_displayonly_fields;
7911 
7912 /*----------------------------------------------------------
7913 -- Procedure disable_from_list will update the record x_out_rec
7914 -- and disables the field contained in p_disabled_list.
7915 -----------------------------------------------------------*/
7916 
7917 PROCEDURE disable_from_list(
7918   p_disabled_list IN         WSH_UTIL_CORE.column_tab_type
7919 , p_in_rec        IN         WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
7920 , x_out_rec       IN OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
7921 , x_return_status OUT NOCOPY       VARCHAR2
7922 , x_field_name    OUT NOCOPY       VARCHAR2
7923 , p_caller        IN               VARCHAR2
7924 
7925 ) IS
7926 l_prefix VARCHAR2(1);
7927 BEGIN
7928 
7929   FOR i IN 1..p_disabled_list.COUNT
7930   LOOP
7931     l_prefix := SUBSTR(p_disabled_list(i),1,1);
7932     IF l_prefix = '+' THEN
7933       IF p_disabled_list(i)  = '+ADDITIONAL_SHIPMENT_INFO' THEN
7934        IF p_in_rec.ADDITIONAL_SHIPMENT_INFO IS NOT NULL THEN
7935         x_out_rec.ADDITIONAL_SHIPMENT_INFO := p_in_rec.ADDITIONAL_SHIPMENT_INFO ;
7936        END IF;
7937       ELSIF p_disabled_list(i)  = '+DOCK_CODE' THEN
7938        IF p_in_rec.DOCK_CODE IS NOT NULL THEN
7939         x_out_rec.DOCK_CODE := p_in_rec.DOCK_CODE ;
7940        END IF;
7941       ELSIF p_disabled_list(i)  = '+CONFIRMED_BY' THEN
7942        IF p_in_rec.CONFIRMED_BY IS NOT NULL THEN
7943         x_out_rec.CONFIRMED_BY := p_in_rec.CONFIRMED_BY ;
7944        END IF;
7945       ELSIF p_disabled_list(i)  = '+INITIAL_PICKUP_LOCATION_CODE' THEN
7946        IF p_in_rec.INITIAL_PICKUP_LOCATION_ID IS NOT NULL THEN
7947         x_out_rec.INITIAL_PICKUP_LOCATION_ID :=
7948                                            p_in_rec.INITIAL_PICKUP_LOCATION_ID ;
7949         x_out_rec.INITIAL_PICKUP_LOCATION_CODE := FND_API.G_MISS_CHAR;
7950        END IF;
7951       ELSIF p_disabled_list(i)  = '+ULTIMATE_DROPOFF_LOCATION_CODE' THEN
7952        IF p_in_rec.ULTIMATE_DROPOFF_LOCATION_ID IS NOT NULL THEN
7953         x_out_rec.ULTIMATE_DROPOFF_LOCATION_ID :=
7954                                        p_in_rec.ULTIMATE_DROPOFF_LOCATION_ID ;
7955         x_out_rec.ULTIMATE_DROPOFF_LOCATION_CODE := FND_API.G_MISS_CHAR;
7956        END IF;
7957       ELSIF p_disabled_list(i)  = '+CUSTOMER_NAME' THEN
7958        IF p_in_rec.CUSTOMER_ID IS NOT NULL THEN
7959         x_out_rec.CUSTOMER_ID := p_in_rec.CUSTOMER_ID ;
7960         x_out_rec.CUSTOMER_NUMBER := FND_API.G_MISS_CHAR;
7961        END IF;
7962        -- LSP PROJECT
7963        ELSIF p_disabled_list(i)  = '+CLIENT_NAME' THEN
7964        IF p_in_rec.client_ID IS NOT NULL THEN
7965         x_out_rec.client_ID := p_in_rec.client_ID ;
7966         x_out_rec.client_code := FND_API.G_MISS_CHAR;
7967        END IF;
7968        -- LSP PROJECT
7969       ELSIF p_disabled_list(i)  = '+ORGANIZATION_CODE' THEN
7970        IF p_in_rec.ORGANIZATION_ID IS NOT NULL THEN
7971         x_out_rec.ORGANIZATION_ID := p_in_rec.ORGANIZATION_ID ;
7972         x_out_rec.organization_code := FND_API.G_MISS_CHAR;
7973        END IF;
7974       ELSIF p_disabled_list(i)  = '+LOADING_ORDER_FLAG' THEN
7975        IF p_in_rec.LOADING_ORDER_FLAG IS NOT NULL THEN
7976         x_out_rec.LOADING_ORDER_FLAG := p_in_rec.LOADING_ORDER_FLAG ;
7977         x_out_rec.LOADING_ORDER_DESC := FND_API.G_MISS_CHAR;
7978        END IF;
7979       ELSIF p_disabled_list(i)  = '+ACCEPTANCE_FLAG' THEN
7980        IF p_in_rec.ACCEPTANCE_FLAG IS NOT NULL THEN
7981         x_out_rec.ACCEPTANCE_FLAG := p_in_rec.ACCEPTANCE_FLAG ;
7982        END IF;
7983       ELSIF p_disabled_list(i)  = '+ACCEPTED_BY' THEN
7984        IF p_in_rec.ACCEPTED_BY IS NOT NULL THEN
7985         x_out_rec.ACCEPTED_BY := p_in_rec.ACCEPTED_BY ;
7986        END IF;
7987       ELSIF p_disabled_list(i)  = '+ACCEPTED_DATE' THEN
7988        IF p_in_rec.ACCEPTED_DATE IS NOT NULL THEN
7989         x_out_rec.ACCEPTED_DATE := p_in_rec.ACCEPTED_DATE ;
7990        END IF;
7991       ELSIF p_disabled_list(i)  = '+ACKNOWLEDGED_BY' THEN
7992        IF p_in_rec.ACKNOWLEDGED_BY IS NOT NULL THEN
7993         x_out_rec.ACKNOWLEDGED_BY := p_in_rec.ACKNOWLEDGED_BY ;
7994        END IF;
7995       ELSIF p_disabled_list(i)  = '+CURRENCY_CODE' THEN
7996        IF p_in_rec.CURRENCY_CODE IS NOT NULL THEN
7997         x_out_rec.CURRENCY_CODE := p_in_rec.CURRENCY_CODE ;
7998         x_out_rec.currency_name := FND_API.G_MISS_CHAR;
7999        END IF;
8000       ELSIF p_disabled_list(i)  = '+INITIAL_PICKUP_DATE' THEN
8001        IF p_in_rec.INITIAL_PICKUP_DATE IS NOT NULL THEN
8002         x_out_rec.INITIAL_PICKUP_DATE := p_in_rec.INITIAL_PICKUP_DATE ;
8003        END IF;
8004       ELSIF p_disabled_list(i)  = '+ULTIMATE_DROPOFF_DATE' THEN
8005        IF p_in_rec.ULTIMATE_DROPOFF_DATE IS NOT NULL THEN
8006         x_out_rec.ULTIMATE_DROPOFF_DATE := p_in_rec.ULTIMATE_DROPOFF_DATE ;
8007        END IF;
8008       ELSIF p_disabled_list(i)  = '+LOADING_SEQUENCE' THEN
8009        IF p_in_rec.LOADING_SEQUENCE IS NOT NULL THEN
8010         x_out_rec.LOADING_SEQUENCE := p_in_rec.LOADING_SEQUENCE ;
8011        END IF;
8012       ELSIF p_disabled_list(i)  = '+SHIP_METHOD_NAME' THEN
8013        IF p_in_rec.SHIP_METHOD_CODE IS NOT NULL THEN
8014         x_out_rec.SHIP_METHOD_CODE := p_in_rec.SHIP_METHOD_CODE ;
8015         x_out_rec.ship_method_name := FND_API.G_MISS_CHAR;
8016        END IF;
8017       ELSIF p_disabled_list(i)  = '+FREIGHT_CODE' THEN
8018         NULL ;
8019        -- J-IB-NPARIKH-{  --I-bugfix
8020        IF p_in_rec.CARRIER_CODE IS NOT NULL THEN
8021         x_out_rec.carrier_id := p_in_rec.carrier_id ;
8022         x_out_rec.CARRIER_CODE := FND_API.G_MISS_CHAR;
8023        END IF;
8024        -- J-IB-NPARIKH-}
8025 
8026       ELSIF p_disabled_list(i)  = '+SERVICE_LEVEL_NAME' THEN
8027        IF p_in_rec.SERVICE_LEVEL IS NOT NULL THEN
8028         x_out_rec.SERVICE_LEVEL := p_in_rec.SERVICE_LEVEL ;
8029        END IF;
8030       ELSIF p_disabled_list(i)  = '+MODE_OF_TRANSPORT_NAME' THEN
8031        IF p_in_rec.MODE_OF_TRANSPORT IS NOT NULL THEN
8032         x_out_rec.MODE_OF_TRANSPORT := p_in_rec.MODE_OF_TRANSPORT ;
8033        END IF;
8034       ELSIF p_disabled_list(i)  = '+NAME' THEN
8035        IF p_in_rec.NAME IS NOT NULL THEN
8036         x_out_rec.NAME := p_in_rec.NAME ;
8037        END IF;
8038       ELSIF p_disabled_list(i)  = '+INTMED_SHIP_TO_LOCATION_CODE' THEN
8039        IF p_in_rec.INTMED_SHIP_TO_LOCATION_ID IS NOT NULL THEN
8040         x_out_rec.INTMED_SHIP_TO_LOCATION_ID :=
8041                                         p_in_rec.INTMED_SHIP_TO_LOCATION_ID ;
8042         x_out_rec.INTMED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
8043        END IF;
8044       ELSIF p_disabled_list(i)  = '+POOLED_SHIP_TO_LOCATION_CODE' THEN
8045        IF p_in_rec.POOLED_SHIP_TO_LOCATION_ID IS NOT NULL THEN
8046         x_out_rec.POOLED_SHIP_TO_LOCATION_ID :=
8047                                            p_in_rec.POOLED_SHIP_TO_LOCATION_ID ;
8048         x_out_rec.POOLED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
8049        END IF;
8050       ELSIF p_disabled_list(i)  = '+WAYBILL' THEN
8051        IF p_in_rec.WAYBILL IS NOT NULL THEN
8052         x_out_rec.WAYBILL := p_in_rec.WAYBILL ;
8053        END IF;
8054       ELSIF p_disabled_list(i)  = '+FREIGHT_TERMS_NAME' THEN
8055        IF p_in_rec.FREIGHT_TERMS_CODE IS NOT NULL THEN
8056         x_out_rec.FREIGHT_TERMS_CODE := p_in_rec.FREIGHT_TERMS_CODE ;
8057         x_out_rec.FREIGHT_TERMS_NAME := FND_API.G_MISS_CHAR;
8058        END IF;
8059       ELSIF p_disabled_list(i)  = '+GROSS_WEIGHT' THEN
8060        IF p_in_rec.GROSS_WEIGHT IS NOT NULL THEN
8061         x_out_rec.GROSS_WEIGHT := p_in_rec.GROSS_WEIGHT ;
8062        END IF;
8063       ELSIF p_disabled_list(i)  = '+NET_WEIGHT' THEN
8064        IF p_in_rec.NET_WEIGHT IS NOT NULL THEN
8065         x_out_rec.NET_WEIGHT := p_in_rec.NET_WEIGHT ;
8066        END IF;
8067       ELSIF p_disabled_list(i)  = '+WEIGHT_UOM_CODE' THEN
8068        IF p_in_rec.WEIGHT_UOM_CODE IS NOT NULL THEN
8069         x_out_rec.WEIGHT_UOM_CODE := p_in_rec.WEIGHT_UOM_CODE ;
8070        END IF;
8071       ELSIF p_disabled_list(i)  = '+VOLUME' THEN
8072        IF p_in_rec.VOLUME IS NOT NULL THEN
8073         x_out_rec.VOLUME := p_in_rec.VOLUME ;
8074        END IF;
8075       ELSIF p_disabled_list(i)  = '+VOLUME_UOM_CODE' THEN
8076        IF p_in_rec.VOLUME_UOM_CODE IS NOT NULL THEN
8077         x_out_rec.VOLUME_UOM_CODE := p_in_rec.VOLUME_UOM_CODE ;
8078         x_out_rec.volume_uom_desc := FND_API.G_MISS_CHAR;
8079        END IF;
8080       ELSIF p_disabled_list(i)  = '+FOB_NAME' THEN
8081        IF p_in_rec.FOB_CODE IS NOT NULL THEN
8082         x_out_rec.FOB_CODE := p_in_rec.FOB_CODE ;
8083         x_out_rec.FOB_NAME := FND_API.G_MISS_CHAR;
8084        END IF;
8085       ELSIF p_disabled_list(i)  = '+FOB_LOCATION_CODE' THEN
8086        IF p_in_rec.FOB_LOCATION_ID IS NOT NULL THEN
8087         x_out_rec.FOB_LOCATION_ID := p_in_rec.FOB_LOCATION_ID ;
8088         x_out_rec.FOB_LOCATION_CODE := FND_API.G_MISS_CHAR;
8089        END IF;
8090       ELSIF p_disabled_list(i)  = '+AUTO_SC_EXCLUDE_FLAG' THEN
8091        IF p_in_rec.AUTO_SC_EXCLUDE_FLAG IS NOT NULL THEN
8092         x_out_rec.AUTO_SC_EXCLUDE_FLAG := p_in_rec.AUTO_SC_EXCLUDE_FLAG ;
8093        END IF;
8094       ELSIF p_disabled_list(i)  = '+AUTO_AP_EXCLUDE_FLAG' THEN
8095        IF p_in_rec.AUTO_AP_EXCLUDE_FLAG IS NOT NULL THEN
8096         x_out_rec.AUTO_AP_EXCLUDE_FLAG := p_in_rec.AUTO_AP_EXCLUDE_FLAG ;
8097        END IF;
8098       ELSIF p_disabled_list(i)  = '+NUMBER_OF_LPN' THEN
8099        IF p_in_rec.NUMBER_OF_LPN IS NOT NULL THEN
8100         x_out_rec.NUMBER_OF_LPN := p_in_rec.NUMBER_OF_LPN ;
8101        END IF;
8102       ELSIF p_disabled_list(i)  = '+DESC_FLEX' THEN
8103        IF p_in_rec.attribute1 IS NOT NULL THEN
8104         x_out_rec.attribute1 := p_in_rec.attribute1 ;
8105        END IF;
8106        IF p_in_rec.attribute2 IS NOT NULL THEN
8107         x_out_rec.attribute2 := p_in_rec.attribute2 ;
8108        END IF;
8109        IF p_in_rec.attribute3 IS NOT NULL THEN
8110         x_out_rec.attribute3 := p_in_rec.attribute3 ;
8111        END IF;
8112        IF p_in_rec.attribute4 IS NOT NULL THEN
8113         x_out_rec.attribute4 := p_in_rec.attribute4 ;
8114        END IF;
8115        IF p_in_rec.attribute5 IS NOT NULL THEN
8116         x_out_rec.attribute5 := p_in_rec.attribute5 ;
8117        END IF;
8118        IF p_in_rec.attribute6 IS NOT NULL THEN
8119         x_out_rec.attribute6 := p_in_rec.attribute6 ;
8120        END IF;
8121        IF p_in_rec.attribute7 IS NOT NULL THEN
8122         x_out_rec.attribute7 := p_in_rec.attribute7 ;
8123        END IF;
8124        IF p_in_rec.attribute8 IS NOT NULL THEN
8125         x_out_rec.attribute8 := p_in_rec.attribute8 ;
8126        END IF;
8127        IF p_in_rec.attribute9 IS NOT NULL THEN
8128         x_out_rec.attribute9 := p_in_rec.attribute9 ;
8129        END IF;
8130        IF p_in_rec.attribute10 IS NOT NULL THEN
8131         x_out_rec.attribute10 := p_in_rec.attribute10 ;
8132        END IF;
8133        IF p_in_rec.attribute11 IS NOT NULL THEN
8134         x_out_rec.attribute11 := p_in_rec.attribute11 ;
8135        END IF;
8136        IF p_in_rec.attribute12 IS NOT NULL THEN
8137         x_out_rec.attribute12 := p_in_rec.attribute12 ;
8138        END IF;
8139        IF p_in_rec.attribute13 IS NOT NULL THEN
8140         x_out_rec.attribute13 := p_in_rec.attribute13 ;
8141        END IF;
8142        IF p_in_rec.attribute14 IS NOT NULL THEN
8143         x_out_rec.attribute14 := p_in_rec.attribute14 ;
8144        END IF;
8145        IF p_in_rec.attribute15 IS NOT NULL THEN
8146         x_out_rec.attribute15 := p_in_rec.attribute15 ;
8147        END IF;
8148        IF p_in_rec.attribute_category IS NOT NULL THEN
8149         x_out_rec.attribute_category := p_in_rec.attribute_category ;
8150        END IF;
8151       ELSIF p_disabled_list(i)  = '+TP_FLEXFIELD' THEN
8152        IF p_in_rec.tp_attribute1 IS NOT NULL THEN
8153         x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
8154        END IF;
8155        IF p_in_rec.tp_attribute2 IS NOT NULL THEN
8156         x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
8157        END IF;
8158        IF p_in_rec.tp_attribute3 IS NOT NULL THEN
8159         x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
8160        END IF;
8161        IF p_in_rec.tp_attribute4 IS NOT NULL THEN
8162         x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
8163        END IF;
8164        IF p_in_rec.tp_attribute5 IS NOT NULL THEN
8165         x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
8166        END IF;
8167        IF p_in_rec.tp_attribute6 IS NOT NULL THEN
8168         x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
8169        END IF;
8170        IF p_in_rec.tp_attribute7 IS NOT NULL THEN
8171         x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
8172        END IF;
8173        IF p_in_rec.tp_attribute8 IS NOT NULL THEN
8174         x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
8175        END IF;
8176        IF p_in_rec.tp_attribute9 IS NOT NULL THEN
8177         x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
8178        END IF;
8179        IF p_in_rec.tp_attribute10 IS NOT NULL THEN
8180         x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
8181        END IF;
8182        IF p_in_rec.tp_attribute11 IS NOT NULL THEN
8183         x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
8184        END IF;
8185        IF p_in_rec.tp_attribute12 IS NOT NULL THEN
8186         x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
8187        END IF;
8188        IF p_in_rec.tp_attribute13 IS NOT NULL THEN
8189         x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
8190        END IF;
8191        IF p_in_rec.tp_attribute14 IS NOT NULL THEN
8192         x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
8193        END IF;
8194        IF p_in_rec.tp_attribute15 IS NOT NULL THEN
8195         x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
8196        END IF;
8197        IF p_in_rec.tp_attribute_category IS NOT NULL THEN
8198         x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
8199        END IF;
8200       ELSIF p_disabled_list(i)  = '+GLOBALIZATION_FLEXFIELD' THEN
8201        IF p_in_rec.global_attribute1 IS NOT NULL THEN
8202         x_out_rec.global_attribute1 := p_in_rec.global_attribute1 ;
8203        END IF;
8204        IF p_in_rec.global_attribute2 IS NOT NULL THEN
8205         x_out_rec.global_attribute2 := p_in_rec.global_attribute2 ;
8206        END IF;
8207        IF p_in_rec.global_attribute3 IS NOT NULL THEN
8208         x_out_rec.global_attribute3 := p_in_rec.global_attribute3 ;
8209        END IF;
8210        IF p_in_rec.global_attribute4 IS NOT NULL THEN
8211         x_out_rec.global_attribute4 := p_in_rec.global_attribute4 ;
8212        END IF;
8213        IF p_in_rec.global_attribute5 IS NOT NULL THEN
8214         x_out_rec.global_attribute5 := p_in_rec.global_attribute5 ;
8215        END IF;
8216        IF p_in_rec.global_attribute6 IS NOT NULL THEN
8217         x_out_rec.global_attribute6 := p_in_rec.global_attribute6 ;
8218        END IF;
8219        IF p_in_rec.global_attribute7 IS NOT NULL THEN
8220         x_out_rec.global_attribute7 := p_in_rec.global_attribute7 ;
8221        END IF;
8222        IF p_in_rec.global_attribute8 IS NOT NULL THEN
8223         x_out_rec.global_attribute8 := p_in_rec.global_attribute8 ;
8224        END IF;
8225        IF p_in_rec.global_attribute9 IS NOT NULL THEN
8226         x_out_rec.global_attribute9 := p_in_rec.global_attribute9 ;
8227        END IF;
8228        IF p_in_rec.global_attribute10 IS NOT NULL THEN
8229         x_out_rec.global_attribute10 := p_in_rec.global_attribute10 ;
8230        END IF;
8231        IF p_in_rec.global_attribute11 IS NOT NULL THEN
8232         x_out_rec.global_attribute11 := p_in_rec.global_attribute11 ;
8233        END IF;
8234        IF p_in_rec.global_attribute12 IS NOT NULL THEN
8235         x_out_rec.global_attribute12 := p_in_rec.global_attribute12 ;
8236        END IF;
8237        IF p_in_rec.global_attribute13 IS NOT NULL THEN
8238         x_out_rec.global_attribute13 := p_in_rec.global_attribute13 ;
8239        END IF;
8240        IF p_in_rec.global_attribute14 IS NOT NULL THEN
8241         x_out_rec.global_attribute14 := p_in_rec.global_attribute14 ;
8242        END IF;
8243        IF p_in_rec.global_attribute15 IS NOT NULL THEN
8244         x_out_rec.global_attribute15 := p_in_rec.global_attribute15 ;
8245        END IF;
8246        IF p_in_rec.global_attribute_category IS NOT NULL THEN
8247         x_out_rec.global_attribute_category := p_in_rec.global_attribute_category ;
8248        END IF;
8249       ELSIF   p_disabled_list(i)  = '+TARE_WEIGHT'       THEN
8250         NULL;
8251       ELSE
8252         -- invalid name
8253         x_field_name := p_disabled_list(i);
8254         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8255         RETURN;
8256         --
8257       END IF;
8258     ELSE -- else if l_prefix is not '+'
8259       IF p_disabled_list(i)  = 'ADDITIONAL_SHIPMENT_INFO' THEN
8260         x_out_rec.ADDITIONAL_SHIPMENT_INFO := p_in_rec.ADDITIONAL_SHIPMENT_INFO ;
8261       ELSIF p_disabled_list(i)  = 'DOCK_CODE' THEN
8262         x_out_rec.DOCK_CODE := p_in_rec.DOCK_CODE ;
8263       ELSIF p_disabled_list(i)  = 'CONFIRMED_BY' THEN
8264         x_out_rec.CONFIRMED_BY := p_in_rec.CONFIRMED_BY ;
8265       ELSIF p_disabled_list(i)  = 'INITIAL_PICKUP_LOCATION_CODE' THEN
8266         x_out_rec.INITIAL_PICKUP_LOCATION_ID :=
8267                                            p_in_rec.INITIAL_PICKUP_LOCATION_ID ;
8268         x_out_rec.INITIAL_PICKUP_LOCATION_CODE := FND_API.G_MISS_CHAR;
8269       ELSIF p_disabled_list(i)  = 'ULTIMATE_DROPOFF_LOCATION_CODE' THEN
8270         x_out_rec.ULTIMATE_DROPOFF_LOCATION_ID :=
8271                                        p_in_rec.ULTIMATE_DROPOFF_LOCATION_ID ;
8272         x_out_rec.ULTIMATE_DROPOFF_LOCATION_CODE := FND_API.G_MISS_CHAR;
8273       ELSIF p_disabled_list(i)  = 'CUSTOMER_NAME' THEN
8274         x_out_rec.CUSTOMER_ID := p_in_rec.CUSTOMER_ID ;
8275         x_out_rec.customer_number := FND_API.G_MISS_CHAR;
8276         -- LSP PROJECT
8277       ELSIF p_disabled_list(i)  = 'CLIENT_NAME' THEN
8278         x_out_rec.CLIENT_ID := p_in_rec.CLIENT_ID ;
8279         x_out_rec.CLIENT_CODE := FND_API.G_MISS_CHAR;
8280       -- LSP PROJECT
8281       ELSIF p_disabled_list(i)  = 'ORGANIZATION_CODE' THEN
8282         x_out_rec.ORGANIZATION_ID := p_in_rec.ORGANIZATION_ID ;
8283         x_out_rec.ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
8284       ELSIF p_disabled_list(i)  = 'LOADING_ORDER_FLAG' THEN
8285         x_out_rec.LOADING_ORDER_FLAG := p_in_rec.LOADING_ORDER_FLAG ;
8286         x_out_rec.LOADING_ORDER_DESC := FND_API.G_MISS_CHAR;
8287       ELSIF p_disabled_list(i)  = 'ACCEPTANCE_FLAG' THEN
8288         x_out_rec.ACCEPTANCE_FLAG := p_in_rec.ACCEPTANCE_FLAG ;
8289       ELSIF p_disabled_list(i)  = 'ACCEPTED_BY' THEN
8290         x_out_rec.ACCEPTED_BY := p_in_rec.ACCEPTED_BY ;
8291       ELSIF p_disabled_list(i)  = 'ACCEPTED_DATE' THEN
8292         x_out_rec.ACCEPTED_DATE := p_in_rec.ACCEPTED_DATE ;
8293       ELSIF p_disabled_list(i)  = 'ACKNOWLEDGED_BY' THEN
8294         x_out_rec.ACKNOWLEDGED_BY := p_in_rec.ACKNOWLEDGED_BY ;
8295       ELSIF p_disabled_list(i)  = 'CURRENCY_CODE' THEN
8296         x_out_rec.CURRENCY_CODE := p_in_rec.CURRENCY_CODE ;
8297         x_out_rec.currency_name := FND_API.G_MISS_CHAR;
8298       ELSIF p_disabled_list(i)  = 'INITIAL_PICKUP_DATE' THEN
8299         x_out_rec.INITIAL_PICKUP_DATE := p_in_rec.INITIAL_PICKUP_DATE ;
8300       ELSIF p_disabled_list(i)  = 'ULTIMATE_DROPOFF_DATE' THEN
8301         x_out_rec.ULTIMATE_DROPOFF_DATE := p_in_rec.ULTIMATE_DROPOFF_DATE ;
8302       ELSIF p_disabled_list(i)  = 'LOADING_SEQUENCE' THEN
8303         x_out_rec.LOADING_SEQUENCE := p_in_rec.LOADING_SEQUENCE ;
8304       ELSIF p_disabled_list(i)  = 'SHIP_METHOD_NAME' THEN
8305         x_out_rec.SHIP_METHOD_CODE := p_in_rec.SHIP_METHOD_CODE ;
8306         x_out_rec.SHIP_METHOD_NAME := FND_API.G_MISS_CHAR;
8307       ELSIF p_disabled_list(i)  = 'FREIGHT_CODE' THEN
8308         IF (nvl(p_caller, '!!!!') <> 'WSH_INBOUND') THEN
8309           --x_out_rec.carrier_code := p_in_rec.carrier_code ;   -- J-IB-NPARIKH--I-bug-fix
8310           x_out_rec.carrier_id := p_in_rec.carrier_id ; -- J-IB-NPARIKH--I-bug-fix
8311           x_out_rec.CARRIER_CODE := FND_API.G_MISS_CHAR; -- J-IB-NPARIKH--I-bug-fix
8312         END IF;
8313       ELSIF p_disabled_list(i)  = 'SERVICE_LEVEL_NAME' THEN
8314         IF (nvl(p_caller, '!!!!') <> 'WSH_INBOUND') THEN
8315           x_out_rec.SERVICE_LEVEL := p_in_rec.SERVICE_LEVEL ;
8316         END IF;
8317       ELSIF p_disabled_list(i)  = 'MODE_OF_TRANSPORT_NAME' THEN
8318         IF (nvl(p_caller, '!!!!') <> 'WSH_INBOUND') THEN
8319           x_out_rec.MODE_OF_TRANSPORT := p_in_rec.MODE_OF_TRANSPORT ;
8320         END IF;
8321       ELSIF p_disabled_list(i)  = 'NAME' THEN
8322         x_out_rec.NAME := p_in_rec.NAME ;
8323       ELSIF p_disabled_list(i)  = 'INTMED_SHIP_TO_LOCATION_CODE' THEN
8324         x_out_rec.INTMED_SHIP_TO_LOCATION_ID :=
8325                                         p_in_rec.INTMED_SHIP_TO_LOCATION_ID ;
8326         x_out_rec.INTMED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
8327       ELSIF p_disabled_list(i)  = 'POOLED_SHIP_TO_LOCATION_CODE' THEN
8328         x_out_rec.POOLED_SHIP_TO_LOCATION_ID :=
8329                                            p_in_rec.POOLED_SHIP_TO_LOCATION_ID ;
8330         x_out_rec.POOLED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
8331       ELSIF p_disabled_list(i)  = 'WAYBILL' THEN
8332         x_out_rec.WAYBILL := p_in_rec.WAYBILL ;
8333       ELSIF p_disabled_list(i)  = 'FREIGHT_TERMS_NAME' THEN
8334         x_out_rec.FREIGHT_TERMS_CODE := p_in_rec.FREIGHT_TERMS_CODE ;
8335         x_out_rec.FREIGHT_TERMS_NAME := FND_API.G_MISS_CHAR;
8336       ELSIF p_disabled_list(i)  = 'GROSS_WEIGHT' THEN
8337         x_out_rec.GROSS_WEIGHT := p_in_rec.GROSS_WEIGHT ;
8338       ELSIF p_disabled_list(i)  = 'NET_WEIGHT' THEN
8339         x_out_rec.NET_WEIGHT := p_in_rec.NET_WEIGHT ;
8340 -- Non Database field prorate_wt_flag added for "Proration of weight from Delivery to delivery lines" Project(Bug#4254552).
8341       ELSIF p_disabled_list(i)  = 'PRORATE_WT_FLAG' THEN
8342         x_out_rec.PRORATE_WT_FLAG := p_in_rec.PRORATE_WT_FLAG ;
8343 --
8344       ELSIF p_disabled_list(i)  = 'WEIGHT_UOM_CODE' THEN
8345         x_out_rec.WEIGHT_UOM_CODE := p_in_rec.WEIGHT_UOM_CODE ;
8346         x_out_rec.weight_uom_desc := FND_API.G_MISS_CHAR;
8347       ELSIF p_disabled_list(i)  = 'VOLUME' THEN
8348         x_out_rec.VOLUME := p_in_rec.VOLUME ;
8349       ELSIF p_disabled_list(i)  = 'VOLUME_UOM_CODE' THEN
8350         x_out_rec.VOLUME_UOM_CODE := p_in_rec.VOLUME_UOM_CODE ;
8351         x_out_rec.volume_uom_desc := FND_API.G_MISS_CHAR;
8352       ELSIF p_disabled_list(i)  = 'FOB_NAME' THEN
8353         x_out_rec.FOB_CODE := p_in_rec.FOB_CODE ;
8354         x_out_rec.FOB_NAME := FND_API.G_MISS_CHAR;
8355       ELSIF p_disabled_list(i)  = 'FOB_LOCATION_CODE' THEN
8356         x_out_rec.FOB_LOCATION_ID := p_in_rec.FOB_LOCATION_ID ;
8357         x_out_rec.FOB_LOCATION_CODE := FND_API.G_MISS_CHAR;
8358       ELSIF p_disabled_list(i)  = 'NUMBER_OF_LPN' THEN
8359         x_out_rec.NUMBER_OF_LPN := p_in_rec.NUMBER_OF_LPN ;
8360       ELSIF p_disabled_list(i)  = 'AUTO_SC_EXCLUDE_FLAG' THEN
8361         x_out_rec.AUTO_SC_EXCLUDE_FLAG := p_in_rec.AUTO_SC_EXCLUDE_FLAG ;
8362       ELSIF p_disabled_list(i)  = 'AUTO_AP_EXCLUDE_FLAG' THEN
8363         x_out_rec.AUTO_AP_EXCLUDE_FLAG := p_in_rec.AUTO_AP_EXCLUDE_FLAG ;
8364       ELSIF p_disabled_list(i)  = 'DESC_FLEX' THEN
8365         x_out_rec.attribute1 := p_in_rec.attribute1 ;
8366         x_out_rec.attribute2 := p_in_rec.attribute2 ;
8367         x_out_rec.attribute3 := p_in_rec.attribute3 ;
8368         x_out_rec.attribute4 := p_in_rec.attribute4 ;
8369         x_out_rec.attribute5 := p_in_rec.attribute5 ;
8370         x_out_rec.attribute6 := p_in_rec.attribute6 ;
8371         x_out_rec.attribute7 := p_in_rec.attribute7 ;
8372         x_out_rec.attribute8 := p_in_rec.attribute8 ;
8373         x_out_rec.attribute9 := p_in_rec.attribute9 ;
8374         x_out_rec.attribute10 := p_in_rec.attribute10 ;
8375         x_out_rec.attribute11 := p_in_rec.attribute11 ;
8376         x_out_rec.attribute12 := p_in_rec.attribute12 ;
8377         x_out_rec.attribute13 := p_in_rec.attribute13 ;
8378         x_out_rec.attribute14 := p_in_rec.attribute14 ;
8379         x_out_rec.attribute15 := p_in_rec.attribute15 ;
8380         x_out_rec.attribute_category := p_in_rec.attribute_category ;
8381       ELSIF p_disabled_list(i)  = 'TP_FLEXFIELD' THEN
8382         x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
8383         x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
8384         x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
8385         x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
8386         x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
8387         x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
8388         x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
8389         x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
8390         x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
8391         x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
8392         x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
8393         x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
8394         x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
8395         x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
8396         x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
8397         x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
8398       ELSIF p_disabled_list(i)  = 'GLOBALIZATION_FLEXFIELD' THEN
8399         x_out_rec.global_attribute1 := p_in_rec.global_attribute1 ;
8400         x_out_rec.global_attribute2 := p_in_rec.global_attribute2 ;
8401         x_out_rec.global_attribute3 := p_in_rec.global_attribute3 ;
8402         x_out_rec.global_attribute4 := p_in_rec.global_attribute4 ;
8403         x_out_rec.global_attribute5 := p_in_rec.global_attribute5 ;
8404         x_out_rec.global_attribute6 := p_in_rec.global_attribute6 ;
8405         x_out_rec.global_attribute7 := p_in_rec.global_attribute7 ;
8406         x_out_rec.global_attribute8 := p_in_rec.global_attribute8 ;
8407         x_out_rec.global_attribute9 := p_in_rec.global_attribute9 ;
8408         x_out_rec.global_attribute10 := p_in_rec.global_attribute10 ;
8409         x_out_rec.global_attribute11 := p_in_rec.global_attribute11 ;
8410         x_out_rec.global_attribute12 := p_in_rec.global_attribute12 ;
8411         x_out_rec.global_attribute13 := p_in_rec.global_attribute13 ;
8412         x_out_rec.global_attribute14 := p_in_rec.global_attribute14 ;
8413         x_out_rec.global_attribute15 := p_in_rec.global_attribute15 ;
8414         x_out_rec.global_attribute_category := p_in_rec.global_attribute_category;
8415       ELSIF  p_disabled_list(i)  = 'FULL'
8416            OR p_disabled_list(i)  = 'TARE_WEIGHT'       THEN
8417         NULL;
8418       ELSE
8419         -- invalid name
8420         x_field_name := p_disabled_list(i);
8421         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8422         RETURN;
8423         --
8424       END IF;
8425     END IF;
8426   END LOOP;
8427 END disable_from_list;
8428 
8429 /*
8430    Procedure populate_external_efl is called from
8431    enable_from_list to populate the external value
8432    for a given internal field
8433 */
8434 
8435 PROCEDURE populate_external_efl(
8436   p_internal        IN   NUMBER
8437 , p_external        IN   VARCHAR2
8438 , p_mode            IN   VARCHAR2
8439 , x_internal        IN OUT  NOCOPY NUMBER
8440 , x_external        IN OUT  NOCOPY VARCHAR2
8441 )
8442 IS
8443 BEGIN
8444 
8445    IF p_mode = '+' THEN
8446       IF x_internal IS NULL THEN
8447          IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
8448             x_internal := p_internal ;
8449             IF p_internal IS NULL THEN
8450                x_external := NULL;
8451             ELSE
8452                x_external := p_external;
8453             END IF;
8454          ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
8455             x_external := p_external;
8456             IF p_external IS NULL THEN
8457                x_internal := NULL;
8458             ELSE
8459                x_internal := p_internal;
8460             END IF;
8461          END IF;
8462       END IF;
8463    ELSE --p_mode <> +
8464       IF p_internal <> FND_API.G_MISS_NUM OR p_internal IS NULL THEN
8465          x_internal := p_internal ;
8466          IF p_internal IS NULL THEN
8467             x_external := NULL;
8468          ELSE
8469             x_external := p_external;
8470          END IF;
8471       ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
8472          x_external := p_external;
8473          IF p_external IS NULL THEN
8474             x_internal := NULL;
8475          ELSE
8476             x_internal := p_internal;
8477          END IF;
8478       END IF;
8479    END IF;
8480 
8481 END populate_external_efl;
8482 
8483 /*
8484    Procedure populate_external_efl is called from
8485    enable_from_list to populate the external value
8486    for a given internal field
8487 */
8488 
8489 PROCEDURE populate_external_efl(
8490   p_internal        IN   VARCHAR2
8491 , p_external        IN   VARCHAR2
8492 , p_mode            IN   VARCHAR2
8493 , x_internal        IN OUT  NOCOPY VARCHAR2
8494 , x_external        IN OUT  NOCOPY VARCHAR2
8495 )
8496 IS
8497 BEGIN
8498 
8499    IF p_mode = '+' THEN
8500       IF x_internal IS NULL THEN
8501          IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
8502             x_internal := p_internal ;
8503             IF p_internal IS NULL THEN
8504                x_external := NULL;
8505             ELSE
8506                x_external := p_external;
8507             END IF;
8508          ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
8509             x_external := p_external;
8510             IF p_external IS NULL THEN
8511                x_internal := NULL;
8512             ELSE
8513                x_internal := p_internal;
8514             END IF;
8515          END IF;
8516       END IF;
8517    ELSE --p_mode <> +
8518       IF p_internal <> FND_API.G_MISS_CHAR OR p_internal IS NULL THEN
8519          x_internal := p_internal ;
8520          IF p_internal IS NULL THEN
8521             x_external := NULL;
8522          ELSE
8523             x_external := p_external;
8524          END IF;
8525       ELSIF p_external <> FND_API.G_MISS_CHAR OR p_external IS NULL THEN
8526          x_external := p_external;
8527          IF p_external IS NULL THEN
8528             x_internal := NULL;
8529          ELSE
8530             x_internal := p_internal;
8531          END IF;
8532       END IF;
8533    END IF;
8534 
8535 END populate_external_efl;
8536 
8537 
8538 /*----------------------------------------------------------
8539 -- Procedure enable_from_list will update the record x_out_rec for the fields
8540 --   included in p_disabled_list and will enable them
8541 -----------------------------------------------------------*/
8542 
8543 PROCEDURE enable_from_list(
8544   p_disabled_list IN         WSH_UTIL_CORE.column_tab_type
8545 , p_in_rec        IN         WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
8546 , x_out_rec       IN OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_rec_type
8547 , x_return_status OUT NOCOPY         VARCHAR2
8548 , x_field_name    OUT NOCOPY        VARCHAR2
8549 
8550 ) IS
8551 l_prefix VARCHAR2(1);
8552 BEGIN
8553   FOR i IN 2..p_disabled_list.COUNT
8554   LOOP
8555    l_prefix := SUBSTR(p_disabled_list(i),1,1);
8556    IF l_prefix = '+' THEN
8557     IF p_disabled_list(i)  = '+ADDITIONAL_SHIPMENT_INFO' THEN
8558      IF p_in_rec.ADDITIONAL_SHIPMENT_INFO <> FND_API.G_MISS_CHAR
8559       OR p_in_rec.ADDITIONAL_SHIPMENT_INFO IS NULL THEN
8560         IF x_out_rec.ADDITIONAL_SHIPMENT_INFO IS NULL THEN
8561           x_out_rec.ADDITIONAL_SHIPMENT_INFO := p_in_rec.ADDITIONAL_SHIPMENT_INFO ;
8562         END IF;
8563      END IF;
8564     ELSIF p_disabled_list(i)  = '+DOCK_CODE' THEN
8565      IF p_in_rec.DOCK_CODE <> FND_API.G_MISS_CHAR
8566       OR p_in_rec.DOCK_CODE IS NULL THEN
8567         IF x_out_rec.DOCK_CODE IS NULL THEN
8568          x_out_rec.DOCK_CODE := p_in_rec.DOCK_CODE ;
8569         END IF;
8570      END IF;
8571     ELSIF p_disabled_list(i)  = '+INITIAL_PICKUP_LOCATION_CODE' THEN
8572      populate_external_efl(p_in_rec.INITIAL_PICKUP_LOCATION_ID,
8573                            p_in_rec.INITIAL_PICKUP_LOCATION_CODE,
8574                            '+',
8575                            x_out_rec.INITIAL_PICKUP_LOCATION_ID,
8576                            x_out_rec.INITIAL_PICKUP_LOCATION_CODE);
8577 
8578     ELSIF p_disabled_list(i)  = '+ULTIMATE_DROPOFF_LOCATION_CODE' THEN
8579      populate_external_efl(p_in_rec.ULTIMATE_DROPOFF_LOCATION_ID,
8580                            p_in_rec.ULTIMATE_DROPOFF_LOCATION_CODE,
8581                            '+',
8582                            x_out_rec.ULTIMATE_DROPOFF_LOCATION_ID,
8583                            x_out_rec.ULTIMATE_DROPOFF_LOCATION_CODE);
8584 
8585     ELSIF p_disabled_list(i)  = '+CUSTOMER_NAME' THEN
8586      populate_external_efl(p_in_rec.customer_id,
8587                            p_in_rec.customer_number,
8588                            '+',
8589                            x_out_rec.customer_id,
8590                            x_out_rec.customer_number);
8591 
8592        -- LSP PROJECT
8593     ELSIF p_disabled_list(i)  = '+CLIENT_NAME' THEN
8594      populate_external_efl(p_in_rec.client_id,
8595                            p_in_rec.client_code,
8596                            '+',
8597                            x_out_rec.client_id,
8598                            x_out_rec.client_code);
8599   -- LSP PROJECT
8600 
8601     ELSIF p_disabled_list(i)  = '+ORGANIZATION_CODE' THEN
8602      populate_external_efl(p_in_rec.organization_id,
8603                            p_in_rec.organization_code,
8604                            '+',
8605                            x_out_rec.organization_id,
8606                            x_out_rec.organization_code);
8607 
8608     ELSIF p_disabled_list(i)  = '+LOADING_ORDER_FLAG' THEN
8609      populate_external_efl(p_in_rec.loading_order_flag,
8610                            p_in_rec.loading_order_desc,
8611                            '+',
8612                            x_out_rec.loading_order_flag,
8613                            x_out_rec.loading_order_desc);
8614 
8615     ELSIF p_disabled_list(i)  = '+ACCEPTANCE_FLAG' THEN
8616      IF p_in_rec.ACCEPTANCE_FLAG <> FND_API.G_MISS_CHAR
8617       OR p_in_rec.ACCEPTANCE_FLAG IS NULL THEN
8618         IF x_out_rec.ACCEPTANCE_FLAG IS NULL THEN
8619          x_out_rec.ACCEPTANCE_FLAG := p_in_rec.ACCEPTANCE_FLAG ;
8620         END IF;
8621      END IF;
8622     ELSIF p_disabled_list(i)  = '+ACCEPTED_BY' THEN
8623      IF p_in_rec.ACCEPTED_BY <> FND_API.G_MISS_CHAR
8624       OR p_in_rec.ACCEPTED_BY IS NULL THEN
8625         IF x_out_rec.ACCEPTED_BY IS NULL THEN
8626          x_out_rec.ACCEPTED_BY := p_in_rec.ACCEPTED_BY ;
8627         END IF;
8628      END IF;
8629     ELSIF p_disabled_list(i)  = '+ACCEPTED_DATE' THEN
8630      IF p_in_rec.ACCEPTED_DATE <> FND_API.G_MISS_DATE
8631       OR p_in_rec.ACCEPTED_DATE IS NULL THEN
8632         IF x_out_rec.ACCEPTED_DATE IS NULL THEN
8633          x_out_rec.ACCEPTED_DATE := p_in_rec.ACCEPTED_DATE ;
8634         END IF;
8635      END IF;
8636     ELSIF p_disabled_list(i)  = '+ACKNOWLEDGED_BY' THEN
8637      IF p_in_rec.ACKNOWLEDGED_BY <> FND_API.G_MISS_CHAR
8638       OR p_in_rec.ACKNOWLEDGED_BY IS NULL THEN
8639         IF x_out_rec.ACKNOWLEDGED_BY IS NULL THEN
8640          x_out_rec.ACKNOWLEDGED_BY := p_in_rec.ACKNOWLEDGED_BY ;
8641         END IF;
8642      END IF;
8643     ELSIF p_disabled_list(i)  = '+CONFIRMED_BY' THEN
8644      IF p_in_rec.CONFIRMED_BY <> FND_API.G_MISS_CHAR
8645       OR p_in_rec.CONFIRMED_BY IS NULL THEN
8646         IF x_out_rec.CONFIRMED_BY IS NULL THEN
8647          x_out_rec.CONFIRMED_BY := p_in_rec.CONFIRMED_BY ;
8648         END IF;
8649      END IF;
8650     ELSIF p_disabled_list(i)  = '+CURRENCY_CODE' THEN
8651      populate_external_efl(p_in_rec.currency_code,
8652                            p_in_rec.currency_name,
8653                            '+',
8654                            x_out_rec.currency_code,
8655                            x_out_rec.currency_name);
8656 
8657     ELSIF p_disabled_list(i)  = '+INITIAL_PICKUP_DATE' THEN
8658      IF p_in_rec.INITIAL_PICKUP_DATE <> FND_API.G_MISS_DATE
8659       OR p_in_rec.INITIAL_PICKUP_DATE IS NULL THEN
8660         IF x_out_rec.INITIAL_PICKUP_DATE IS NULL THEN
8661          x_out_rec.INITIAL_PICKUP_DATE := p_in_rec.INITIAL_PICKUP_DATE ;
8662         END IF;
8663      END IF;
8664     ELSIF p_disabled_list(i)  = '+ULTIMATE_DROPOFF_DATE' THEN
8665      IF p_in_rec.ULTIMATE_DROPOFF_DATE <> FND_API.G_MISS_DATE
8666       OR p_in_rec.ULTIMATE_DROPOFF_DATE IS NULL THEN
8667         IF x_out_rec.ULTIMATE_DROPOFF_DATE IS NULL THEN
8668          x_out_rec.ULTIMATE_DROPOFF_DATE := p_in_rec.ULTIMATE_DROPOFF_DATE ;
8669         END IF;
8670      END IF;
8671     ELSIF p_disabled_list(i)  = '+LOADING_SEQUENCE' THEN
8672      IF p_in_rec.LOADING_SEQUENCE <> FND_API.G_MISS_NUM
8673       OR p_in_rec.LOADING_SEQUENCE IS NULL THEN
8674         IF x_out_rec.LOADING_SEQUENCE IS NULL THEN
8675          x_out_rec.LOADING_SEQUENCE := p_in_rec.LOADING_SEQUENCE ;
8676         END IF;
8677      END IF;
8678     ELSIF p_disabled_list(i)  = '+SHIP_METHOD_NAME' THEN
8679      populate_external_efl(p_in_rec.ship_method_code,
8680                            p_in_rec.ship_method_name,
8681                            '+',
8682                            x_out_rec.ship_method_code,
8683                            x_out_rec.ship_method_name);
8684     ELSIF p_disabled_list(i)  = '+FREIGHT_CODE' THEN
8685        NULL;
8686      -- J-IB-NPARIKH-{ --I-bug-fix
8687      populate_external_efl(p_in_rec.carrier_id,
8688                            p_in_rec.carrier_code,
8689                            '+',
8690                            x_out_rec.carrier_id,
8691                            x_out_rec.carrier_code);
8692      -- J-IB-NPARIKH-}
8693 
8694     ELSIF p_disabled_list(i)  = '+SERVICE_LEVEL_NAME' THEN
8695      IF p_in_rec.SERVICE_LEVEL <> FND_API.G_MISS_CHAR
8696       OR p_in_rec.SERVICE_LEVEL IS NULL THEN
8697         IF x_out_rec.SERVICE_LEVEL IS NULL THEN
8698          x_out_rec.SERVICE_LEVEL := p_in_rec.SERVICE_LEVEL ;
8699         END IF;
8700      END IF;
8701     ELSIF p_disabled_list(i)  = '+MODE_OF_TRANSPORT_NAME' THEN
8702      IF p_in_rec.MODE_OF_TRANSPORT <> FND_API.G_MISS_CHAR
8703       OR p_in_rec.MODE_OF_TRANSPORT IS NULL THEN
8704         IF x_out_rec.MODE_OF_TRANSPORT IS NULL THEN
8705          x_out_rec.MODE_OF_TRANSPORT := p_in_rec.MODE_OF_TRANSPORT ;
8706         END IF;
8707      END IF;
8708     ELSIF p_disabled_list(i)  = '+NAME' THEN
8709      IF p_in_rec.NAME <> FND_API.G_MISS_CHAR
8710       OR p_in_rec.NAME IS NULL THEN
8711         IF x_out_rec.NAME IS NULL THEN
8712          x_out_rec.NAME := p_in_rec.NAME ;
8713         END IF;
8714      END IF;
8715     ELSIF p_disabled_list(i)  = '+INTMED_SHIP_TO_LOCATION_CODE' THEN
8716      populate_external_efl(p_in_rec.INTMED_SHIP_TO_LOCATION_ID,
8717                            p_in_rec.INTMED_SHIP_TO_LOCATION_CODE,
8718                            '+',
8719                            x_out_rec.INTMED_SHIP_TO_LOCATION_ID,
8720                            x_out_rec.INTMED_SHIP_TO_LOCATION_CODE);
8721 
8722     ELSIF p_disabled_list(i)  = '+POOLED_SHIP_TO_LOCATION_CODE' THEN
8723      populate_external_efl(p_in_rec.POOLED_SHIP_TO_LOCATION_ID,
8724                            p_in_rec.POOLED_SHIP_TO_LOCATION_CODE,
8725                            '+',
8726                            x_out_rec.POOLED_SHIP_TO_LOCATION_ID,
8727                            x_out_rec.POOLED_SHIP_TO_LOCATION_CODE);
8728 
8729     ELSIF p_disabled_list(i)  = '+WAYBILL' THEN
8730      IF p_in_rec.WAYBILL <> FND_API.G_MISS_CHAR
8731       OR p_in_rec.WAYBILL IS NULL THEN
8732         IF x_out_rec.WAYBILL IS NULL THEN
8733          x_out_rec.WAYBILL := p_in_rec.WAYBILL ;
8734         END IF;
8735      END IF;
8736     ELSIF p_disabled_list(i)  = '+FREIGHT_TERMS_NAME' THEN
8737      populate_external_efl(p_in_rec.FREIGHT_TERMS_CODE,
8738                            p_in_rec.FREIGHT_TERMS_NAME,
8739                            '+',
8740                            x_out_rec.FREIGHT_TERMS_CODE,
8741                            x_out_rec.FREIGHT_TERMS_NAME);
8742 
8743     ELSIF p_disabled_list(i)  = '+GROSS_WEIGHT' THEN
8744      IF p_in_rec.GROSS_WEIGHT <> FND_API.G_MISS_NUM
8745       OR p_in_rec.GROSS_WEIGHT IS NULL THEN
8746         IF x_out_rec.GROSS_WEIGHT IS NULL THEN
8747          x_out_rec.GROSS_WEIGHT := p_in_rec.GROSS_WEIGHT ;
8748         END IF;
8749      END IF;
8750     ELSIF p_disabled_list(i)  = '+NET_WEIGHT' THEN
8751      IF p_in_rec.NET_WEIGHT <> FND_API.G_MISS_NUM
8752       OR p_in_rec.NET_WEIGHT IS NULL THEN
8753         IF x_out_rec.NET_WEIGHT IS NULL THEN
8754          x_out_rec.NET_WEIGHT := p_in_rec.NET_WEIGHT ;
8755         END IF;
8756      END IF;
8757     ELSIF p_disabled_list(i)  = '+WEIGHT_UOM_CODE' THEN
8758      populate_external_efl(p_in_rec.WEIGHT_UOM_CODE,
8759                            p_in_rec.WEIGHT_UOM_DESC,
8760                            '+',
8761                            x_out_rec.WEIGHT_UOM_CODE,
8762                            x_out_rec.WEIGHT_UOM_DESC);
8763 
8764     ELSIF p_disabled_list(i)  = '+VOLUME' THEN
8765      IF p_in_rec.VOLUME <> FND_API.G_MISS_NUM
8766       OR p_in_rec.VOLUME IS NULL THEN
8767         IF x_out_rec.VOLUME IS NULL THEN
8768          x_out_rec.VOLUME := p_in_rec.VOLUME ;
8769         END IF;
8770      END IF;
8771     ELSIF p_disabled_list(i)  = '+VOLUME_UOM_CODE' THEN
8772      populate_external_efl(p_in_rec.VOLUME_UOM_CODE,
8773                            p_in_rec.VOLUME_UOM_DESC,
8774                            '+',
8775                            x_out_rec.VOLUME_UOM_CODE,
8776                            x_out_rec.VOLUME_UOM_DESC);
8777 
8778     ELSIF p_disabled_list(i)  = '+FOB_NAME' THEN
8779      populate_external_efl(p_in_rec.FOB_CODE,
8780                            p_in_rec.FOB_NAME,
8781                            '+',
8782                            x_out_rec.FOB_CODE,
8783                            x_out_rec.FOB_NAME);
8784 
8785     ELSIF p_disabled_list(i)  = '+FOB_LOCATION_CODE' THEN
8786      populate_external_efl(p_in_rec.FOB_LOCATION_ID,
8787                            p_in_rec.FOB_LOCATION_CODE,
8788                            '+',
8789                            x_out_rec.FOB_LOCATION_ID,
8790                            x_out_rec.FOB_LOCATION_CODE);
8791 
8792     ELSIF p_disabled_list(i)  = '+NUMBER_OF_LPN' THEN
8793      IF p_in_rec.NUMBER_OF_LPN <> FND_API.G_MISS_NUM
8794       OR p_in_rec.NUMBER_OF_LPN IS NULL THEN
8795         IF x_out_rec.NUMBER_OF_LPN IS NULL THEN
8796          x_out_rec.NUMBER_OF_LPN := p_in_rec.NUMBER_OF_LPN ;
8797         END IF;
8798      END IF;
8799     ELSIF p_disabled_list(i)  = '+AUTO_SC_EXCLUDE_FLAG' THEN
8800      IF p_in_rec.AUTO_SC_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
8801       OR p_in_rec.AUTO_SC_EXCLUDE_FLAG IS NULL THEN
8802         IF x_out_rec.AUTO_SC_EXCLUDE_FLAG IS NULL THEN
8803          x_out_rec.AUTO_SC_EXCLUDE_FLAG := p_in_rec.AUTO_SC_EXCLUDE_FLAG ;
8804         END IF;
8805      END IF;
8806     ELSIF p_disabled_list(i)  = '+AUTO_AP_EXCLUDE_FLAG' THEN
8807      IF p_in_rec.AUTO_AP_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
8808       OR p_in_rec.AUTO_AP_EXCLUDE_FLAG IS NULL THEN
8809         IF x_out_rec.AUTO_AP_EXCLUDE_FLAG IS NULL THEN
8810          x_out_rec.AUTO_AP_EXCLUDE_FLAG := p_in_rec.AUTO_AP_EXCLUDE_FLAG ;
8811         END IF;
8812      END IF;
8813     ELSIF p_disabled_list(i)  = '+DESC_FLEX' THEN
8814      IF p_in_rec.attribute1 <> FND_API.G_MISS_CHAR
8815       OR p_in_rec.attribute1 IS NULL THEN
8816         IF x_out_rec.attribute1 IS NULL THEN
8817          x_out_rec.attribute1 := p_in_rec.attribute1 ;
8818         END IF;
8819      END IF;
8820      IF p_in_rec.attribute2 <> FND_API.G_MISS_CHAR
8821       OR p_in_rec.attribute2 IS NULL THEN
8822         IF x_out_rec.attribute2 IS NULL THEN
8823          x_out_rec.attribute2 := p_in_rec.attribute2 ;
8824         END IF;
8825      END IF;
8826      IF p_in_rec.attribute3 <> FND_API.G_MISS_CHAR
8827       OR p_in_rec.attribute3 IS NULL THEN
8828         IF x_out_rec.attribute3 IS NULL THEN
8829          x_out_rec.attribute3 := p_in_rec.attribute3 ;
8830         END IF;
8831      END IF;
8832      IF p_in_rec.attribute4 <> FND_API.G_MISS_CHAR
8833       OR p_in_rec.attribute4 IS NULL THEN
8834         IF x_out_rec.attribute4 IS NULL THEN
8835          x_out_rec.attribute4 := p_in_rec.attribute4 ;
8836         END IF;
8837      END IF;
8838      IF p_in_rec.attribute5 <> FND_API.G_MISS_CHAR
8839       OR p_in_rec.attribute5 IS NULL THEN
8840         IF x_out_rec.attribute5 IS NULL THEN
8841          x_out_rec.attribute5 := p_in_rec.attribute5 ;
8842         END IF;
8843      END IF;
8844      IF p_in_rec.attribute6 <> FND_API.G_MISS_CHAR
8845       OR p_in_rec.attribute6 IS NULL THEN
8846         IF x_out_rec.attribute6 IS NULL THEN
8847          x_out_rec.attribute6 := p_in_rec.attribute6 ;
8848         END IF;
8849      END IF;
8850      IF p_in_rec.attribute7 <> FND_API.G_MISS_CHAR
8851       OR p_in_rec.attribute7 IS NULL THEN
8852         IF x_out_rec.attribute7 IS NULL THEN
8853          x_out_rec.attribute7 := p_in_rec.attribute7 ;
8854         END IF;
8855      END IF;
8856      IF p_in_rec.attribute8 <> FND_API.G_MISS_CHAR
8857       OR p_in_rec.attribute8 IS NULL THEN
8858         IF x_out_rec.attribute8 IS NULL THEN
8859          x_out_rec.attribute8 := p_in_rec.attribute8 ;
8860         END IF;
8861      END IF;
8862      IF p_in_rec.attribute9 <> FND_API.G_MISS_CHAR
8863       OR p_in_rec.attribute9 IS NULL THEN
8864         IF x_out_rec.attribute9 IS NULL THEN
8865          x_out_rec.attribute9 := p_in_rec.attribute9 ;
8866         END IF;
8867      END IF;
8868      IF p_in_rec.attribute10 <> FND_API.G_MISS_CHAR
8869       OR p_in_rec.attribute10 IS NULL THEN
8870         IF x_out_rec.attribute10 IS NULL THEN
8871          x_out_rec.attribute10 := p_in_rec.attribute10 ;
8872         END IF;
8873      END IF;
8874      IF p_in_rec.attribute11 <> FND_API.G_MISS_CHAR
8875       OR p_in_rec.attribute11 IS NULL THEN
8876         IF x_out_rec.attribute11 IS NULL THEN
8877          x_out_rec.attribute11 := p_in_rec.attribute11 ;
8878         END IF;
8879      END IF;
8880      IF p_in_rec.attribute12 <> FND_API.G_MISS_CHAR
8881       OR p_in_rec.attribute12 IS NULL THEN
8882         IF x_out_rec.attribute12 IS NULL THEN
8883          x_out_rec.attribute12 := p_in_rec.attribute12 ;
8884         END IF;
8885      END IF;
8886      IF p_in_rec.attribute13 <> FND_API.G_MISS_CHAR
8887       OR p_in_rec.attribute13 IS NULL THEN
8888         IF x_out_rec.attribute13 IS NULL THEN
8889          x_out_rec.attribute13 := p_in_rec.attribute13 ;
8890         END IF;
8891      END IF;
8892      IF p_in_rec.attribute14 <> FND_API.G_MISS_CHAR
8893       OR p_in_rec.attribute14 IS NULL THEN
8894         IF x_out_rec.attribute14 IS NULL THEN
8895          x_out_rec.attribute14 := p_in_rec.attribute14 ;
8896         END IF;
8897      END IF;
8898      IF p_in_rec.attribute15 <> FND_API.G_MISS_CHAR
8899       OR p_in_rec.attribute15 IS NULL THEN
8900         IF x_out_rec.attribute15 IS NULL THEN
8901          x_out_rec.attribute15 := p_in_rec.attribute15 ;
8902         END IF;
8903      END IF;
8904      IF p_in_rec.attribute_category <> FND_API.G_MISS_CHAR
8905       OR p_in_rec.attribute_category IS NULL THEN
8906         IF x_out_rec.attribute_category IS NULL THEN
8907          x_out_rec.attribute_category := p_in_rec.attribute_category ;
8908         END IF;
8909      END IF;
8910     ELSIF p_disabled_list(i)  = '+TP_FLEXFIELD' THEN
8911      IF p_in_rec.tp_attribute1 <> FND_API.G_MISS_CHAR
8912       OR p_in_rec.tp_attribute1 IS NULL THEN
8913         IF x_out_rec.tp_attribute1 IS NULL THEN
8914          x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
8915         END IF;
8916      END IF;
8917      IF p_in_rec.tp_attribute2 <> FND_API.G_MISS_CHAR
8918       OR p_in_rec.tp_attribute2 IS NULL THEN
8919         IF x_out_rec.tp_attribute2 IS NULL THEN
8920          x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
8921         END IF;
8922      END IF;
8923      IF p_in_rec.tp_attribute3 <> FND_API.G_MISS_CHAR
8924       OR p_in_rec.tp_attribute3 IS NULL THEN
8925         IF x_out_rec.tp_attribute3 IS NULL THEN
8926          x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
8927         END IF;
8928      END IF;
8929      IF p_in_rec.tp_attribute4 <> FND_API.G_MISS_CHAR
8930       OR p_in_rec.tp_attribute4 IS NULL THEN
8931         IF x_out_rec.tp_attribute4 IS NULL THEN
8932          x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
8933         END IF;
8934      END IF;
8935      IF p_in_rec.tp_attribute5 <> FND_API.G_MISS_CHAR
8936       OR p_in_rec.tp_attribute5 IS NULL THEN
8937         IF x_out_rec.tp_attribute5 IS NULL THEN
8938          x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
8939         END IF;
8940      END IF;
8941      IF p_in_rec.tp_attribute6 <> FND_API.G_MISS_CHAR
8942       OR p_in_rec.tp_attribute6 IS NULL THEN
8943         IF x_out_rec.tp_attribute6 IS NULL THEN
8944          x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
8945         END IF;
8946      END IF;
8947      IF p_in_rec.tp_attribute7 <> FND_API.G_MISS_CHAR
8948       OR p_in_rec.tp_attribute7 IS NULL THEN
8949         IF x_out_rec.tp_attribute7 IS NULL THEN
8950          x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
8951         END IF;
8952      END IF;
8953      IF p_in_rec.tp_attribute8 <> FND_API.G_MISS_CHAR
8954       OR p_in_rec.tp_attribute8 IS NULL THEN
8955         IF x_out_rec.tp_attribute8 IS NULL THEN
8956          x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
8957         END IF;
8958      END IF;
8959      IF p_in_rec.tp_attribute9 <> FND_API.G_MISS_CHAR
8960       OR p_in_rec.tp_attribute9 IS NULL THEN
8961         IF x_out_rec.tp_attribute9 IS NULL THEN
8962          x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
8963         END IF;
8964      END IF;
8965      IF p_in_rec.tp_attribute10 <> FND_API.G_MISS_CHAR
8966       OR p_in_rec.tp_attribute10 IS NULL THEN
8967         IF x_out_rec.tp_attribute10 IS NULL THEN
8968          x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
8969         END IF;
8970      END IF;
8971      IF p_in_rec.tp_attribute11 <> FND_API.G_MISS_CHAR
8972       OR p_in_rec.tp_attribute11 IS NULL THEN
8973         IF x_out_rec.tp_attribute11 IS NULL THEN
8974          x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
8975         END IF;
8976      END IF;
8977      IF p_in_rec.tp_attribute12 <> FND_API.G_MISS_CHAR
8978       OR p_in_rec.tp_attribute12 IS NULL THEN
8979         IF x_out_rec.tp_attribute12 IS NULL THEN
8980          x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
8981         END IF;
8982      END IF;
8983      IF p_in_rec.tp_attribute13 <> FND_API.G_MISS_CHAR
8984       OR p_in_rec.tp_attribute13 IS NULL THEN
8985         IF x_out_rec.tp_attribute13 IS NULL THEN
8986          x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
8987         END IF;
8988      END IF;
8989      IF p_in_rec.tp_attribute14 <> FND_API.G_MISS_CHAR
8990       OR p_in_rec.tp_attribute14 IS NULL THEN
8991         IF x_out_rec.tp_attribute14 IS NULL THEN
8992          x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
8993         END IF;
8994      END IF;
8995      IF p_in_rec.tp_attribute15 <> FND_API.G_MISS_CHAR
8996       OR p_in_rec.tp_attribute15 IS NULL THEN
8997         IF x_out_rec.tp_attribute15 IS NULL THEN
8998          x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
8999         END IF;
9000      END IF;
9001      IF p_in_rec.tp_attribute_category <> FND_API.G_MISS_CHAR
9002       OR p_in_rec.tp_attribute_category IS NULL THEN
9003         IF x_out_rec.tp_attribute_category IS NULL THEN
9004          x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
9005         END IF;
9006      END IF;
9007     ELSIF p_disabled_list(i)  = '+GLOBALIZATION_FLEXFIELD' THEN
9008      IF p_in_rec.global_attribute1 <> FND_API.G_MISS_CHAR
9009       OR p_in_rec.global_attribute1 IS NULL THEN
9010         IF x_out_rec.global_attribute1 IS NULL THEN
9011          x_out_rec.global_attribute1 := p_in_rec.global_attribute1 ;
9012         END IF;
9013      END IF;
9014      IF p_in_rec.global_attribute2 <> FND_API.G_MISS_CHAR
9015       OR p_in_rec.global_attribute2 IS NULL THEN
9016         IF x_out_rec.global_attribute2 IS NULL THEN
9017          x_out_rec.global_attribute2 := p_in_rec.global_attribute2 ;
9018         END IF;
9019      END IF;
9020      IF p_in_rec.global_attribute3 <> FND_API.G_MISS_CHAR
9021       OR p_in_rec.global_attribute3 IS NULL THEN
9022         IF x_out_rec.global_attribute3 IS NULL THEN
9023          x_out_rec.global_attribute3 := p_in_rec.global_attribute3 ;
9024         END IF;
9025      END IF;
9026      IF p_in_rec.global_attribute4 <> FND_API.G_MISS_CHAR
9027       OR p_in_rec.global_attribute4 IS NULL THEN
9028         IF x_out_rec.global_attribute4 IS NULL THEN
9029          x_out_rec.global_attribute4 := p_in_rec.global_attribute4 ;
9030         END IF;
9031      END IF;
9032      IF p_in_rec.global_attribute5 <> FND_API.G_MISS_CHAR
9033       OR p_in_rec.global_attribute5 IS NULL THEN
9034         IF x_out_rec.global_attribute5 IS NULL THEN
9035          x_out_rec.global_attribute5 := p_in_rec.global_attribute5 ;
9036         END IF;
9037      END IF;
9038      IF p_in_rec.global_attribute6 <> FND_API.G_MISS_CHAR
9039       OR p_in_rec.global_attribute6 IS NULL THEN
9040         IF x_out_rec.global_attribute6 IS NULL THEN
9041          x_out_rec.global_attribute6 := p_in_rec.global_attribute6 ;
9042         END IF;
9043      END IF;
9044      IF p_in_rec.global_attribute7 <> FND_API.G_MISS_CHAR
9045       OR p_in_rec.global_attribute7 IS NULL THEN
9046         IF x_out_rec.global_attribute7 IS NULL THEN
9047          x_out_rec.global_attribute7 := p_in_rec.global_attribute7 ;
9048         END IF;
9049      END IF;
9050      IF p_in_rec.global_attribute8 <> FND_API.G_MISS_CHAR
9051       OR p_in_rec.global_attribute8 IS NULL THEN
9052         IF x_out_rec.global_attribute8 IS NULL THEN
9053          x_out_rec.global_attribute8 := p_in_rec.global_attribute8 ;
9054         END IF;
9055      END IF;
9056      IF p_in_rec.global_attribute9 <> FND_API.G_MISS_CHAR
9057       OR p_in_rec.global_attribute9 IS NULL THEN
9058         IF x_out_rec.global_attribute9 IS NULL THEN
9059          x_out_rec.global_attribute9 := p_in_rec.global_attribute9 ;
9060         END IF;
9061      END IF;
9062      IF p_in_rec.global_attribute10 <> FND_API.G_MISS_CHAR
9063       OR p_in_rec.global_attribute10 IS NULL THEN
9064         IF x_out_rec.global_attribute10 IS NULL THEN
9065          x_out_rec.global_attribute10 := p_in_rec.global_attribute10 ;
9066         END IF;
9067      END IF;
9068      IF p_in_rec.global_attribute11 <> FND_API.G_MISS_CHAR
9069       OR p_in_rec.global_attribute11 IS NULL THEN
9070         IF x_out_rec.global_attribute11 IS NULL THEN
9071          x_out_rec.global_attribute11 := p_in_rec.global_attribute11 ;
9072         END IF;
9073      END IF;
9074      IF p_in_rec.global_attribute12 <> FND_API.G_MISS_CHAR
9075       OR p_in_rec.global_attribute12 IS NULL THEN
9076         IF x_out_rec.global_attribute12 IS NULL THEN
9077          x_out_rec.global_attribute12 := p_in_rec.global_attribute12 ;
9078         END IF;
9079      END IF;
9080      IF p_in_rec.global_attribute13 <> FND_API.G_MISS_CHAR
9081       OR p_in_rec.global_attribute13 IS NULL THEN
9082         IF x_out_rec.global_attribute13 IS NULL THEN
9083          x_out_rec.global_attribute13 := p_in_rec.global_attribute13 ;
9084         END IF;
9085      END IF;
9086      IF p_in_rec.global_attribute14 <> FND_API.G_MISS_CHAR
9087       OR p_in_rec.global_attribute14 IS NULL THEN
9088         IF x_out_rec.global_attribute14 IS NULL THEN
9089          x_out_rec.global_attribute14 := p_in_rec.global_attribute14 ;
9090         END IF;
9091      END IF;
9092      IF p_in_rec.global_attribute15 <> FND_API.G_MISS_CHAR
9093       OR p_in_rec.global_attribute15 IS NULL THEN
9094         IF x_out_rec.global_attribute15 IS NULL THEN
9095          x_out_rec.global_attribute15 := p_in_rec.global_attribute15 ;
9096         END IF;
9097      END IF;
9098      IF p_in_rec.global_attribute_category <> FND_API.G_MISS_CHAR
9099       OR p_in_rec.global_attribute_category IS NULL THEN
9100         IF x_out_rec.global_attribute_category IS NULL THEN
9101          x_out_rec.global_attribute_category := p_in_rec.global_attribute_category ;
9102         END IF;
9103      END IF;
9104     ELSIF   p_disabled_list(i)  = 'TARE_WEIGHT'       THEN
9105       NULL;
9106     ELSE
9107       -- invalid name
9108       x_field_name := p_disabled_list(i);
9109       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9110       RETURN;
9111      END IF;
9112     ELSE -- if the prefix is not +
9113     IF p_disabled_list(i)  = 'ADDITIONAL_SHIPMENT_INFO' THEN
9114      IF p_in_rec.ADDITIONAL_SHIPMENT_INFO <> FND_API.G_MISS_CHAR
9115       OR p_in_rec.ADDITIONAL_SHIPMENT_INFO IS NULL THEN
9116           x_out_rec.ADDITIONAL_SHIPMENT_INFO := p_in_rec.ADDITIONAL_SHIPMENT_INFO ;
9117      END IF;
9118     ELSIF p_disabled_list(i)  = 'DOCK_CODE' THEN
9119      IF p_in_rec.DOCK_CODE <> FND_API.G_MISS_CHAR
9120       OR p_in_rec.DOCK_CODE IS NULL THEN
9121          x_out_rec.DOCK_CODE := p_in_rec.DOCK_CODE ;
9122      END IF;
9123     ELSIF p_disabled_list(i)  = 'INITIAL_PICKUP_LOCATION_CODE' THEN
9124       populate_external_efl(p_in_rec.INITIAL_PICKUP_LOCATION_ID,
9125                            p_in_rec.INITIAL_PICKUP_LOCATION_CODE,
9126                            NULL,
9127                            x_out_rec.INITIAL_PICKUP_LOCATION_ID,
9128                            x_out_rec.INITIAL_PICKUP_LOCATION_CODE);
9129     ELSIF p_disabled_list(i)  = 'ULTIMATE_DROPOFF_LOCATION_CODE' THEN
9130      populate_external_efl(p_in_rec.ULTIMATE_DROPOFF_LOCATION_ID,
9131                            p_in_rec.ULTIMATE_DROPOFF_LOCATION_CODE,
9132                            NULL,
9133                            x_out_rec.ULTIMATE_DROPOFF_LOCATION_ID,
9134                            x_out_rec.ULTIMATE_DROPOFF_LOCATION_CODE);
9135     ELSIF p_disabled_list(i)  = 'CUSTOMER_NAME' THEN
9136      populate_external_efl(p_in_rec.customer_id,
9137                            p_in_rec.customer_number,
9138                            NULL,
9139                            x_out_rec.customer_id,
9140                            x_out_rec.customer_number);
9141    -- LSP PROJECT :
9142    ELSIF p_disabled_list(i)  = 'CLIENT_NAME' THEN
9143      populate_external_efl(p_in_rec.client_id,
9144                            p_in_rec.client_code,
9145                            NULL,
9146                            x_out_rec.client_id,
9147                            x_out_rec.client_code);
9148 
9149     ELSIF p_disabled_list(i)  = 'ORGANIZATION_CODE' THEN
9150      populate_external_efl(p_in_rec.organization_id,
9151                            p_in_rec.organization_code,
9152                            NULL,
9153                            x_out_rec.organization_id,
9154                            x_out_rec.organization_code);
9155     ELSIF p_disabled_list(i)  = 'LOADING_ORDER_FLAG' THEN
9156      populate_external_efl(p_in_rec.loading_order_flag,
9157                            p_in_rec.loading_order_desc,
9158                            NULL,
9159                            x_out_rec.loading_order_flag,
9160                            x_out_rec.loading_order_desc);
9161     ELSIF p_disabled_list(i)  = 'ACCEPTANCE_FLAG' THEN
9162      IF p_in_rec.ACCEPTANCE_FLAG <> FND_API.G_MISS_CHAR
9163       OR p_in_rec.ACCEPTANCE_FLAG IS NULL THEN
9164          x_out_rec.ACCEPTANCE_FLAG := p_in_rec.ACCEPTANCE_FLAG ;
9165      END IF;
9166     ELSIF p_disabled_list(i)  = 'ACCEPTED_BY' THEN
9167      IF p_in_rec.ACCEPTED_BY <> FND_API.G_MISS_CHAR
9168       OR p_in_rec.ACCEPTED_BY IS NULL THEN
9169          x_out_rec.ACCEPTED_BY := p_in_rec.ACCEPTED_BY ;
9170      END IF;
9171     ELSIF p_disabled_list(i)  = 'ACCEPTED_DATE' THEN
9172      IF p_in_rec.ACCEPTED_DATE <> FND_API.G_MISS_DATE
9173       OR p_in_rec.ACCEPTED_DATE IS NULL THEN
9174          x_out_rec.ACCEPTED_DATE := p_in_rec.ACCEPTED_DATE ;
9175      END IF;
9176     ELSIF p_disabled_list(i)  = 'ACKNOWLEDGED_BY' THEN
9177      IF p_in_rec.ACKNOWLEDGED_BY <> FND_API.G_MISS_CHAR
9178       OR p_in_rec.ACKNOWLEDGED_BY IS NULL THEN
9179          x_out_rec.ACKNOWLEDGED_BY := p_in_rec.ACKNOWLEDGED_BY ;
9180      END IF;
9181     ELSIF p_disabled_list(i)  = 'CONFIRMED_BY' THEN
9182      IF p_in_rec.CONFIRMED_BY <> FND_API.G_MISS_CHAR
9183       OR p_in_rec.CONFIRMED_BY IS NULL THEN
9184          x_out_rec.CONFIRMED_BY := p_in_rec.CONFIRMED_BY ;
9185      END IF;
9186     ELSIF p_disabled_list(i)  = 'CURRENCY_CODE' THEN
9187      populate_external_efl(p_in_rec.currency_code,
9188                            p_in_rec.currency_name,
9189                            NULL,
9190                            x_out_rec.currency_code,
9191                            x_out_rec.currency_name);
9192     ELSIF p_disabled_list(i)  = 'INITIAL_PICKUP_DATE' THEN
9193      IF p_in_rec.INITIAL_PICKUP_DATE <> FND_API.G_MISS_DATE
9194       OR p_in_rec.INITIAL_PICKUP_DATE IS NULL THEN
9195          x_out_rec.INITIAL_PICKUP_DATE := p_in_rec.INITIAL_PICKUP_DATE ;
9196      END IF;
9197     ELSIF p_disabled_list(i)  = 'ULTIMATE_DROPOFF_DATE' THEN
9198      IF p_in_rec.ULTIMATE_DROPOFF_DATE <> FND_API.G_MISS_DATE
9199       OR p_in_rec.ULTIMATE_DROPOFF_DATE IS NULL THEN
9200          x_out_rec.ULTIMATE_DROPOFF_DATE := p_in_rec.ULTIMATE_DROPOFF_DATE ;
9201      END IF;
9202     ELSIF p_disabled_list(i)  = 'LOADING_SEQUENCE' THEN
9203      IF p_in_rec.LOADING_SEQUENCE <> FND_API.G_MISS_NUM
9204       OR p_in_rec.LOADING_SEQUENCE IS NULL THEN
9205          x_out_rec.LOADING_SEQUENCE := p_in_rec.LOADING_SEQUENCE ;
9206      END IF;
9207     ELSIF p_disabled_list(i)  = 'SHIP_METHOD_NAME' THEN
9208      populate_external_efl(p_in_rec.ship_method_code,
9209                            p_in_rec.ship_method_name,
9210                            NULL,
9211                            x_out_rec.ship_method_code,
9212                            x_out_rec.ship_method_name);
9213 
9214     ELSIF p_disabled_list(i)  = 'FREIGHT_CODE' THEN
9215        NULL;
9216      -- J-IB-NPARIKH-{
9217      populate_external_efl(p_in_rec.carrier_id,
9218                            p_in_rec.carrier_code,
9219                            NULL,
9220                            x_out_rec.carrier_id,
9221                            x_out_rec.carrier_code);
9222      -- J-IB-NPARIKH-}
9223     ELSIF p_disabled_list(i)  = 'SERVICE_LEVEL_NAME' THEN
9224      IF p_in_rec.SERVICE_LEVEL <> FND_API.G_MISS_CHAR
9225       OR p_in_rec.SERVICE_LEVEL IS NULL THEN
9226          x_out_rec.SERVICE_LEVEL := p_in_rec.SERVICE_LEVEL ;
9227      END IF;
9228     ELSIF p_disabled_list(i)  = 'MODE_OF_TRANSPORT_NAME' THEN
9229      IF p_in_rec.MODE_OF_TRANSPORT <> FND_API.G_MISS_CHAR
9230       OR p_in_rec.MODE_OF_TRANSPORT IS NULL THEN
9231          x_out_rec.MODE_OF_TRANSPORT := p_in_rec.MODE_OF_TRANSPORT ;
9232      END IF;
9233     ELSIF p_disabled_list(i)  = 'NAME' THEN
9234      IF p_in_rec.NAME <> FND_API.G_MISS_CHAR
9235       OR p_in_rec.NAME IS NULL THEN
9236          x_out_rec.NAME := p_in_rec.NAME ;
9237      END IF;
9238     ELSIF p_disabled_list(i)  = 'INTMED_SHIP_TO_LOCATION_CODE' THEN
9239      populate_external_efl(p_in_rec.INTMED_SHIP_TO_LOCATION_ID,
9240                            p_in_rec.INTMED_SHIP_TO_LOCATION_CODE,
9241                            NULL,
9242                            x_out_rec.INTMED_SHIP_TO_LOCATION_ID,
9243                            x_out_rec.INTMED_SHIP_TO_LOCATION_CODE);
9244     ELSIF p_disabled_list(i)  = 'POOLED_SHIP_TO_LOCATION_CODE' THEN
9245      populate_external_efl(p_in_rec.POOLED_SHIP_TO_LOCATION_ID,
9246                            p_in_rec.POOLED_SHIP_TO_LOCATION_CODE,
9247                            NULL,
9248                            x_out_rec.POOLED_SHIP_TO_LOCATION_ID,
9249                            x_out_rec.POOLED_SHIP_TO_LOCATION_CODE);
9250     ELSIF p_disabled_list(i)  = 'WAYBILL' THEN
9251      IF p_in_rec.WAYBILL <> FND_API.G_MISS_CHAR
9252       OR p_in_rec.WAYBILL IS NULL THEN
9253          x_out_rec.WAYBILL := p_in_rec.WAYBILL ;
9254      END IF;
9255     ELSIF p_disabled_list(i)  = 'FREIGHT_TERMS_NAME' THEN
9256      populate_external_efl(p_in_rec.FREIGHT_TERMS_CODE,
9257                            p_in_rec.FREIGHT_TERMS_NAME,
9258                            NULL,
9259                            x_out_rec.FREIGHT_TERMS_CODE,
9260                            x_out_rec.FREIGHT_TERMS_NAME);
9261     ELSIF p_disabled_list(i)  = 'GROSS_WEIGHT' THEN
9262      IF p_in_rec.GROSS_WEIGHT <> FND_API.G_MISS_NUM
9263       OR p_in_rec.GROSS_WEIGHT IS NULL THEN
9264          x_out_rec.GROSS_WEIGHT := p_in_rec.GROSS_WEIGHT ;
9265      END IF;
9266     ELSIF p_disabled_list(i)  = 'NET_WEIGHT' THEN
9267      IF p_in_rec.NET_WEIGHT <> FND_API.G_MISS_NUM
9268       OR p_in_rec.NET_WEIGHT IS NULL THEN
9269          x_out_rec.NET_WEIGHT := p_in_rec.NET_WEIGHT ;
9270      END IF;
9271 -- Non Database field prorate_wt_flag added for "Proration of weight from Delivery to delivery lines" Project(Bug#4254552).
9272     ELSIF p_disabled_list(i)  = 'PRORATE_WT_FLAG' THEN
9273         -- Bug#4539613 :  replaced FND_API.G_MISS_NUM   by FND_API.G_MISS_CHAR
9274         IF p_in_rec.PRORATE_WT_FLAG <> FND_API.G_MISS_CHAR  OR p_in_rec.PRORATE_WT_FLAG IS NULL THEN
9275             x_out_rec.PRORATE_WT_FLAG := p_in_rec.PRORATE_WT_FLAG ;
9276         END IF;
9277 --
9278     ELSIF p_disabled_list(i)  = 'WEIGHT_UOM_CODE' THEN
9279      populate_external_efl(p_in_rec.WEIGHT_UOM_CODE,
9280                            p_in_rec.WEIGHT_UOM_DESC,
9281                            NULL,
9282                            x_out_rec.WEIGHT_UOM_CODE,
9283                            x_out_rec.WEIGHT_UOM_DESC);
9284 
9285     ELSIF p_disabled_list(i)  = 'VOLUME' THEN
9286      IF p_in_rec.VOLUME <> FND_API.G_MISS_NUM
9287       OR p_in_rec.VOLUME IS NULL THEN
9288          x_out_rec.VOLUME := p_in_rec.VOLUME ;
9289      END IF;
9290     ELSIF p_disabled_list(i)  = 'VOLUME_UOM_CODE' THEN
9291      populate_external_efl(p_in_rec.VOLUME_UOM_CODE,
9292                            p_in_rec.VOLUME_UOM_DESC,
9293                            NULL,
9294                            x_out_rec.VOLUME_UOM_CODE,
9295                            x_out_rec.VOLUME_UOM_DESC);
9296     ELSIF p_disabled_list(i)  = 'FOB_NAME' THEN
9297      populate_external_efl(p_in_rec.FOB_CODE,
9298                            p_in_rec.FOB_NAME,
9299                            NULL,
9300                            x_out_rec.FOB_CODE,
9301                            x_out_rec.FOB_NAME);
9302     ELSIF p_disabled_list(i)  = 'FOB_LOCATION_CODE' THEN
9303      populate_external_efl(p_in_rec.FOB_LOCATION_ID,
9304                            p_in_rec.FOB_LOCATION_CODE,
9305                            NULL,
9306                            x_out_rec.FOB_LOCATION_ID,
9307                            x_out_rec.FOB_LOCATION_CODE);
9308     ELSIF p_disabled_list(i)  = 'NUMBER_OF_LPN' THEN
9309      IF p_in_rec.NUMBER_OF_LPN <> FND_API.G_MISS_NUM
9310       OR p_in_rec.NUMBER_OF_LPN IS NULL THEN
9311          x_out_rec.NUMBER_OF_LPN := p_in_rec.NUMBER_OF_LPN ;
9312      END IF;
9313     ELSIF p_disabled_list(i)  = 'AUTO_SC_EXCLUDE_FLAG' THEN
9314      IF p_in_rec.AUTO_SC_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
9315       OR p_in_rec.AUTO_SC_EXCLUDE_FLAG IS NULL THEN
9316          x_out_rec.AUTO_SC_EXCLUDE_FLAG := p_in_rec.AUTO_SC_EXCLUDE_FLAG ;
9317      END IF;
9318     ELSIF p_disabled_list(i)  = 'AUTO_AP_EXCLUDE_FLAG' THEN
9319      IF p_in_rec.AUTO_AP_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
9320       OR p_in_rec.AUTO_AP_EXCLUDE_FLAG IS NULL THEN
9321          x_out_rec.AUTO_AP_EXCLUDE_FLAG := p_in_rec.AUTO_AP_EXCLUDE_FLAG ;
9322      END IF;
9323     ELSIF p_disabled_list(i)  = 'DESC_FLEX' THEN
9324      IF p_in_rec.attribute1 <> FND_API.G_MISS_CHAR
9325       OR p_in_rec.attribute1  IS NULL THEN
9326       x_out_rec.attribute1 := p_in_rec.attribute1 ;
9327      END IF;
9328      IF p_in_rec.attribute2 <> FND_API.G_MISS_CHAR
9329       OR p_in_rec.attribute2  IS NULL THEN
9330       x_out_rec.attribute2 := p_in_rec.attribute2 ;
9331      END IF;
9332      IF p_in_rec.attribute3 <> FND_API.G_MISS_CHAR
9333       OR p_in_rec.attribute3  IS NULL THEN
9334       x_out_rec.attribute3 := p_in_rec.attribute3 ;
9335      END IF;
9336      IF p_in_rec.attribute4 <> FND_API.G_MISS_CHAR
9337       OR p_in_rec.attribute4  IS NULL THEN
9338       x_out_rec.attribute4 := p_in_rec.attribute4 ;
9339      END IF;
9340      IF p_in_rec.attribute5 <> FND_API.G_MISS_CHAR
9341       OR p_in_rec.attribute5  IS NULL THEN
9342       x_out_rec.attribute5 := p_in_rec.attribute5 ;
9343      END IF;
9344      IF p_in_rec.attribute6 <> FND_API.G_MISS_CHAR
9345       OR p_in_rec.attribute6  IS NULL THEN
9346       x_out_rec.attribute6 := p_in_rec.attribute6 ;
9347      END IF;
9348      IF p_in_rec.attribute7 <> FND_API.G_MISS_CHAR
9349       OR p_in_rec.attribute7  IS NULL THEN
9350       x_out_rec.attribute7 := p_in_rec.attribute7 ;
9351      END IF;
9352      IF p_in_rec.attribute8 <> FND_API.G_MISS_CHAR
9353       OR p_in_rec.attribute8  IS NULL THEN
9354       x_out_rec.attribute8 := p_in_rec.attribute8 ;
9355      END IF;
9356      IF p_in_rec.attribute9 <> FND_API.G_MISS_CHAR
9357       OR p_in_rec.attribute9  IS NULL THEN
9358       x_out_rec.attribute9 := p_in_rec.attribute9 ;
9359      END IF;
9360      IF p_in_rec.attribute10 <> FND_API.G_MISS_CHAR
9361       OR p_in_rec.attribute10  IS NULL THEN
9362       x_out_rec.attribute10 := p_in_rec.attribute10 ;
9363      END IF;
9364      IF p_in_rec.attribute11 <> FND_API.G_MISS_CHAR
9365       OR p_in_rec.attribute11  IS NULL THEN
9366       x_out_rec.attribute11 := p_in_rec.attribute11 ;
9367      END IF;
9368      IF p_in_rec.attribute12 <> FND_API.G_MISS_CHAR
9369       OR p_in_rec.attribute12  IS NULL THEN
9370       x_out_rec.attribute12 := p_in_rec.attribute12 ;
9371      END IF;
9372      IF p_in_rec.attribute13 <> FND_API.G_MISS_CHAR
9373       OR p_in_rec.attribute13  IS NULL THEN
9374       x_out_rec.attribute13 := p_in_rec.attribute13 ;
9375      END IF;
9376      IF p_in_rec.attribute14 <> FND_API.G_MISS_CHAR
9377       OR p_in_rec.attribute14  IS NULL THEN
9378       x_out_rec.attribute14 := p_in_rec.attribute14 ;
9379      END IF;
9380      IF p_in_rec.attribute15 <> FND_API.G_MISS_CHAR
9381       OR p_in_rec.attribute15  IS NULL THEN
9382       x_out_rec.attribute15 := p_in_rec.attribute15 ;
9383      END IF;
9384      IF p_in_rec.attribute_category <> FND_API.G_MISS_CHAR
9385       OR p_in_rec.attribute_category  IS NULL THEN
9386       x_out_rec.attribute_category := p_in_rec.attribute_category ;
9387      END IF;
9388     ELSIF p_disabled_list(i)  = 'TP_FLEXFIELD' THEN
9389      IF p_in_rec.tp_attribute1 <> FND_API.G_MISS_CHAR
9390       OR p_in_rec.tp_attribute1  IS NULL THEN
9391       x_out_rec.tp_attribute1 := p_in_rec.tp_attribute1 ;
9392      END IF;
9393      IF p_in_rec.tp_attribute2 <> FND_API.G_MISS_CHAR
9394       OR p_in_rec.tp_attribute2  IS NULL THEN
9395       x_out_rec.tp_attribute2 := p_in_rec.tp_attribute2 ;
9396      END IF;
9397      IF p_in_rec.tp_attribute3 <> FND_API.G_MISS_CHAR
9398       OR p_in_rec.tp_attribute3  IS NULL THEN
9399       x_out_rec.tp_attribute3 := p_in_rec.tp_attribute3 ;
9400      END IF;
9401      IF p_in_rec.tp_attribute4 <> FND_API.G_MISS_CHAR
9402       OR p_in_rec.tp_attribute4  IS NULL THEN
9403       x_out_rec.tp_attribute4 := p_in_rec.tp_attribute4 ;
9404      END IF;
9405      IF p_in_rec.tp_attribute5 <> FND_API.G_MISS_CHAR
9406       OR p_in_rec.tp_attribute5  IS NULL THEN
9407       x_out_rec.tp_attribute5 := p_in_rec.tp_attribute5 ;
9408      END IF;
9409      IF p_in_rec.tp_attribute6 <> FND_API.G_MISS_CHAR
9410       OR p_in_rec.tp_attribute6  IS NULL THEN
9411       x_out_rec.tp_attribute6 := p_in_rec.tp_attribute6 ;
9412      END IF;
9413      IF p_in_rec.tp_attribute7 <> FND_API.G_MISS_CHAR
9414       OR p_in_rec.tp_attribute7  IS NULL THEN
9415       x_out_rec.tp_attribute7 := p_in_rec.tp_attribute7 ;
9416      END IF;
9417      IF p_in_rec.tp_attribute8 <> FND_API.G_MISS_CHAR
9418       OR p_in_rec.tp_attribute8  IS NULL THEN
9419       x_out_rec.tp_attribute8 := p_in_rec.tp_attribute8 ;
9420      END IF;
9421      IF p_in_rec.tp_attribute9 <> FND_API.G_MISS_CHAR
9422       OR p_in_rec.tp_attribute9  IS NULL THEN
9423       x_out_rec.tp_attribute9 := p_in_rec.tp_attribute9 ;
9424      END IF;
9425      IF p_in_rec.tp_attribute10 <> FND_API.G_MISS_CHAR
9426       OR p_in_rec.tp_attribute10  IS NULL THEN
9427       x_out_rec.tp_attribute10 := p_in_rec.tp_attribute10 ;
9428      END IF;
9429      IF p_in_rec.tp_attribute11 <> FND_API.G_MISS_CHAR
9430       OR p_in_rec.tp_attribute11  IS NULL THEN
9431       x_out_rec.tp_attribute11 := p_in_rec.tp_attribute11 ;
9432      END IF;
9433      IF p_in_rec.tp_attribute12 <> FND_API.G_MISS_CHAR
9434       OR p_in_rec.tp_attribute12  IS NULL THEN
9435       x_out_rec.tp_attribute12 := p_in_rec.tp_attribute12 ;
9436      END IF;
9437      IF p_in_rec.tp_attribute13 <> FND_API.G_MISS_CHAR
9438       OR p_in_rec.tp_attribute13  IS NULL THEN
9439       x_out_rec.tp_attribute13 := p_in_rec.tp_attribute13 ;
9440      END IF;
9441      IF p_in_rec.tp_attribute14 <> FND_API.G_MISS_CHAR
9442       OR p_in_rec.tp_attribute14  IS NULL THEN
9443       x_out_rec.tp_attribute14 := p_in_rec.tp_attribute14 ;
9444      END IF;
9445      IF p_in_rec.tp_attribute15 <> FND_API.G_MISS_CHAR
9446       OR p_in_rec.tp_attribute15  IS NULL THEN
9447       x_out_rec.tp_attribute15 := p_in_rec.tp_attribute15 ;
9448      END IF;
9449      IF p_in_rec.tp_attribute_category <> FND_API.G_MISS_CHAR
9450       OR p_in_rec.tp_attribute_category  IS NULL THEN
9451       x_out_rec.tp_attribute_category := p_in_rec.tp_attribute_category ;
9452      END IF;
9453     ELSIF p_disabled_list(i)  = 'GLOBALIZATION_FLEXFIELD' THEN
9454      IF p_in_rec.global_attribute1 <> FND_API.G_MISS_CHAR
9455       OR p_in_rec.global_attribute1  IS NULL THEN
9456       x_out_rec.global_attribute1 := p_in_rec.global_attribute1 ;
9457      END IF;
9458      IF p_in_rec.global_attribute2 <> FND_API.G_MISS_CHAR
9459       OR p_in_rec.global_attribute2  IS NULL THEN
9460       x_out_rec.global_attribute2 := p_in_rec.global_attribute2 ;
9461      END IF;
9462      IF p_in_rec.global_attribute3 <> FND_API.G_MISS_CHAR
9463       OR p_in_rec.global_attribute3  IS NULL THEN
9464       x_out_rec.global_attribute3 := p_in_rec.global_attribute3 ;
9465      END IF;
9466      IF p_in_rec.global_attribute4 <> FND_API.G_MISS_CHAR
9467       OR p_in_rec.global_attribute4  IS NULL THEN
9468       x_out_rec.global_attribute4 := p_in_rec.global_attribute4 ;
9469      END IF;
9470      IF p_in_rec.global_attribute5 <> FND_API.G_MISS_CHAR
9471       OR p_in_rec.global_attribute5  IS NULL THEN
9472       x_out_rec.global_attribute5 := p_in_rec.global_attribute5 ;
9473      END IF;
9474      IF p_in_rec.global_attribute6 <> FND_API.G_MISS_CHAR
9475       OR p_in_rec.global_attribute6  IS NULL THEN
9476       x_out_rec.global_attribute6 := p_in_rec.global_attribute6 ;
9477      END IF;
9478      IF p_in_rec.global_attribute7 <> FND_API.G_MISS_CHAR
9479       OR p_in_rec.global_attribute7  IS NULL THEN
9480       x_out_rec.global_attribute7 := p_in_rec.global_attribute7 ;
9481      END IF;
9482      IF p_in_rec.global_attribute8 <> FND_API.G_MISS_CHAR
9483       OR p_in_rec.global_attribute8  IS NULL THEN
9484       x_out_rec.global_attribute8 := p_in_rec.global_attribute8 ;
9485      END IF;
9486      IF p_in_rec.global_attribute9 <> FND_API.G_MISS_CHAR
9487       OR p_in_rec.global_attribute9  IS NULL THEN
9488       x_out_rec.global_attribute9 := p_in_rec.global_attribute9 ;
9489      END IF;
9490      IF p_in_rec.global_attribute10 <> FND_API.G_MISS_CHAR
9491       OR p_in_rec.global_attribute10  IS NULL THEN
9492       x_out_rec.global_attribute10 := p_in_rec.global_attribute10 ;
9493      END IF;
9494      IF p_in_rec.global_attribute11 <> FND_API.G_MISS_CHAR
9495       OR p_in_rec.global_attribute11  IS NULL THEN
9496       x_out_rec.global_attribute11 := p_in_rec.global_attribute11 ;
9497      END IF;
9498      IF p_in_rec.global_attribute12 <> FND_API.G_MISS_CHAR
9499       OR p_in_rec.global_attribute12  IS NULL THEN
9500       x_out_rec.global_attribute12 := p_in_rec.global_attribute12 ;
9501      END IF;
9502      IF p_in_rec.global_attribute13 <> FND_API.G_MISS_CHAR
9503       OR p_in_rec.global_attribute13  IS NULL THEN
9504       x_out_rec.global_attribute13 := p_in_rec.global_attribute13 ;
9505      END IF;
9506      IF p_in_rec.global_attribute14 <> FND_API.G_MISS_CHAR
9507       OR p_in_rec.global_attribute14  IS NULL THEN
9508       x_out_rec.global_attribute14 := p_in_rec.global_attribute14 ;
9509      END IF;
9510      IF p_in_rec.global_attribute15 <> FND_API.G_MISS_CHAR
9511       OR p_in_rec.global_attribute15  IS NULL THEN
9512       x_out_rec.global_attribute15 := p_in_rec.global_attribute15 ;
9513      END IF;
9514      IF p_in_rec.global_attribute_category <> FND_API.G_MISS_CHAR
9515       OR p_in_rec.global_attribute_category  IS NULL THEN
9516       x_out_rec.attribute_category := p_in_rec.attribute_category ;
9517      END IF;
9518     ELSIF   p_disabled_list(i)  = 'TARE_WEIGHT'       THEN
9519       NULL;
9520     ELSE
9521       -- invalid name
9522       x_field_name := p_disabled_list(i);
9523       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9524       RETURN;
9525       --
9526     END IF;
9527    END IF;
9528   END LOOP;
9529 
9530 END enable_from_list;
9531 
9532 --
9533 -- Overloaded procedure
9534 -- Replaced p_action with p_in_rec as a parameter
9535 --
9536 PROCEDURE Get_Disabled_List  (
9537   p_delivery_rec          IN  WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type
9538 , p_in_rec		  IN  WSH_DELIVERIES_GRP.Del_In_Rec_Type
9539 , x_return_status         OUT NOCOPY VARCHAR2
9540 , x_msg_count             OUT NOCOPY NUMBER
9541 , x_msg_data              OUT NOCOPY VARCHAR2
9542 , x_delivery_rec          OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type
9543 )
9544 IS
9545   l_disabled_list               WSH_UTIL_CORE.column_tab_type;
9546   l_db_col_rec                  WSH_NEW_DELIVERIES_PVT.Delivery_rec_type;
9547   l_return_status               VARCHAR2(30);
9548   l_field_name                  VARCHAR2(100);
9549   l_debug_on BOOLEAN;
9550   l_module_name CONSTANT VARCHAR2(100) :=
9551              'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DISABLED_LIST';
9552 
9553   CURSOR c_tbl_rec IS
9554   SELECT DELIVERY_ID
9555 	,NAME
9556 	,PLANNED_FLAG
9557 	,STATUS_CODE
9558 	,DELIVERY_TYPE
9559 	,LOADING_SEQUENCE
9560 	,LOADING_ORDER_FLAG
9561 	,INITIAL_PICKUP_DATE
9562 	,INITIAL_PICKUP_LOCATION_ID
9563 	,ORGANIZATION_ID
9564 	,ULTIMATE_DROPOFF_LOCATION_ID
9565 	,ULTIMATE_DROPOFF_DATE
9566 	,CUSTOMER_ID
9567 	,INTMED_SHIP_TO_LOCATION_ID
9568 	,POOLED_SHIP_TO_LOCATION_ID
9569 	,CARRIER_ID
9570 	,SHIP_METHOD_CODE
9571 	,FREIGHT_TERMS_CODE
9572 	,FOB_CODE
9573 	,FOB_LOCATION_ID
9574 	,WAYBILL
9575 	,DOCK_CODE
9576 	,ACCEPTANCE_FLAG
9577 	,ACCEPTED_BY
9578 	,ACCEPTED_DATE
9579 	,ACKNOWLEDGED_BY
9580 	,CONFIRMED_BY
9581 	,CONFIRM_DATE
9582 	,ASN_DATE_SENT
9583 	,ASN_STATUS_CODE
9584 	,ASN_SEQ_NUMBER
9585 	,GROSS_WEIGHT
9586 	,NET_WEIGHT
9587 	,WEIGHT_UOM_CODE
9588 	,VOLUME
9589 	,VOLUME_UOM_CODE
9590 	,ADDITIONAL_SHIPMENT_INFO
9591 	,CURRENCY_CODE
9592 	,ATTRIBUTE_CATEGORY
9593 	,ATTRIBUTE1
9594 	,ATTRIBUTE2
9595 	,ATTRIBUTE3
9596 	,ATTRIBUTE4
9597 	,ATTRIBUTE5
9598 	,ATTRIBUTE6
9599 	,ATTRIBUTE7
9600 	,ATTRIBUTE8
9601 	,ATTRIBUTE9
9602 	,ATTRIBUTE10
9603 	,ATTRIBUTE11
9604 	,ATTRIBUTE12
9605 	,ATTRIBUTE13
9606 	,ATTRIBUTE14
9607 	,ATTRIBUTE15
9608 	,TP_ATTRIBUTE_CATEGORY
9609 	,TP_ATTRIBUTE1
9610 	,TP_ATTRIBUTE2
9611 	,TP_ATTRIBUTE3
9612 	,TP_ATTRIBUTE4
9613 	,TP_ATTRIBUTE5
9614 	,TP_ATTRIBUTE6
9615 	,TP_ATTRIBUTE7
9616 	,TP_ATTRIBUTE8
9617 	,TP_ATTRIBUTE9
9618 	,TP_ATTRIBUTE10
9619 	,TP_ATTRIBUTE11
9620 	,TP_ATTRIBUTE12
9621 	,TP_ATTRIBUTE13
9622 	,TP_ATTRIBUTE14
9623 	,TP_ATTRIBUTE15
9624 	,GLOBAL_ATTRIBUTE_CATEGORY
9625 	,GLOBAL_ATTRIBUTE1
9626 	,GLOBAL_ATTRIBUTE2
9627 	,GLOBAL_ATTRIBUTE3
9628 	,GLOBAL_ATTRIBUTE4
9629 	,GLOBAL_ATTRIBUTE5
9630 	,GLOBAL_ATTRIBUTE6
9631 	,GLOBAL_ATTRIBUTE7
9632 	,GLOBAL_ATTRIBUTE8
9633 	,GLOBAL_ATTRIBUTE9
9634 	,GLOBAL_ATTRIBUTE10
9635 	,GLOBAL_ATTRIBUTE11
9636 	,GLOBAL_ATTRIBUTE12
9637 	,GLOBAL_ATTRIBUTE13
9638 	,GLOBAL_ATTRIBUTE14
9639 	,GLOBAL_ATTRIBUTE15
9640 	,GLOBAL_ATTRIBUTE16
9641 	,GLOBAL_ATTRIBUTE17
9642 	,GLOBAL_ATTRIBUTE18
9643 	,GLOBAL_ATTRIBUTE19
9644 	,GLOBAL_ATTRIBUTE20
9645 	,CREATION_DATE
9646 	,CREATED_BY
9647         ,sysdate
9648         ,FND_GLOBAL.USER_ID
9649         ,FND_GLOBAL.LOGIN_ID
9650 	,PROGRAM_APPLICATION_ID
9651 	,PROGRAM_ID
9652 	,PROGRAM_UPDATE_DATE
9653 	,REQUEST_ID
9654         ,BATCH_ID
9655         ,HASH_VALUE
9656         ,SOURCE_HEADER_ID
9657 	,NUMBER_OF_LPN
9658         ,COD_AMOUNT
9659         ,COD_CURRENCY_CODE
9660         ,COD_REMIT_TO
9661         ,COD_CHARGE_PAID_BY
9662         ,PROBLEM_CONTACT_REFERENCE
9663         ,PORT_OF_LOADING
9664         ,PORT_OF_DISCHARGE
9665         ,FTZ_NUMBER
9666         ,ROUTED_EXPORT_TXN
9667         ,ENTRY_NUMBER
9668         ,ROUTING_INSTRUCTIONS
9669         ,IN_BOND_CODE
9670         ,SHIPPING_MARKS
9671 	,SERVICE_LEVEL
9672 	,MODE_OF_TRANSPORT
9673 	,ASSIGNED_TO_FTE_TRIPS
9674         --new added fields
9675         , AUTO_SC_EXCLUDE_FLAG
9676         , AUTO_AP_EXCLUDE_FLAG
9677         , AP_BATCH_ID
9678         --
9679         ,p_delivery_rec.ROWID
9680         ,p_delivery_rec.LOADING_ORDER_DESC
9681         ,p_delivery_rec.ORGANIZATION_CODE
9682         ,p_delivery_rec.ULTIMATE_DROPOFF_LOCATION_CODE
9683         ,p_delivery_rec.INITIAL_PICKUP_LOCATION_CODE
9684         ,p_delivery_rec.CUSTOMER_NUMBER
9685         ,p_delivery_rec.INTMED_SHIP_TO_LOCATION_CODE
9686         ,p_delivery_rec.POOLED_SHIP_TO_LOCATION_CODE
9687         ,p_delivery_rec.CARRIER_CODE
9688         ,p_delivery_rec.SHIP_METHOD_NAME
9689         ,p_delivery_rec.FREIGHT_TERMS_NAME
9690         ,p_delivery_rec.FOB_NAME
9691         ,p_delivery_rec.FOB_LOCATION_CODE
9692         ,p_delivery_rec.WEIGHT_UOM_DESC
9693         ,p_delivery_rec.VOLUME_UOM_DESC
9694         ,p_delivery_rec.CURRENCY_NAME
9695 /*  J  Inbound Logistics: New columns jckwok */
9696         ,SHIPMENT_DIRECTION
9697         ,VENDOR_ID
9698         ,PARTY_ID
9699         ,ROUTING_RESPONSE_ID
9700         ,RCV_SHIPMENT_HEADER_ID
9701         ,ASN_SHIPMENT_HEADER_ID
9702         ,SHIPPING_CONTROL
9703 /* J TP Release : ttrichy */
9704         ,TP_DELIVERY_NUMBER
9705         ,EARLIEST_PICKUP_DATE
9706         ,LATEST_PICKUP_DATE
9707         ,EARLIEST_DROPOFF_DATE
9708         ,LATEST_DROPOFF_DATE
9709         ,IGNORE_FOR_PLANNING
9710         ,TP_PLAN_NAME
9711 -- J: W/V Changes
9712         ,WV_FROZEN_FLAG
9713         ,HASH_STRING
9714         ,delivered_date
9715         ,p_delivery_rec.packing_slip
9716 --bug 3667348
9717         ,REASON_OF_TRANSPORT
9718         ,DESCRIPTION
9719         ,'N' --Non Database field added for "Proration of weight from Delivery to delivery lines" Project(Bug#4254552).
9720 --OTM R12
9721         ,TMS_INTERFACE_FLAG
9722         ,TMS_VERSION_NUMBER
9723 --R12.1.1 STANDALONE PROJECT
9724         ,PENDING_ADVICE_FLAG
9725         ,CLIENT_ID -- LSP PROJECT : Added just for compatibility ( not used anywhere). -- Modified R12.1.1 LSP PROJECT (rminocha)
9726         ,p_delivery_rec.client_code -- LSP PROJECT
9727         ,consignee_flag  -- RTV changes
9728   FROM wsh_new_deliveries
9729   WHERE delivery_id = p_delivery_rec.delivery_id;
9730 
9731   e_dp_no_entity EXCEPTION;
9732   e_bad_field EXCEPTION;
9733   e_all_disabled EXCEPTION ;
9734     --
9735     l_shipping_control     VARCHAR2(30);
9736     l_routing_response_id  NUMBER;
9737     l_routing_request_flag VARCHAR2(30);
9738 
9739     l_caller               VARCHAR2(32767);
9740     --l_return_status        VARCHAR2(10);
9741 
9742 BEGIN
9743   --
9744   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9745   --
9746   IF l_debug_on IS NULL
9747   THEN
9748       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9749   END IF;
9750   --
9751   IF l_debug_on THEN
9752       WSH_DEBUG_SV.push(l_module_name);
9753       WSH_DEBUG_SV.log(l_module_name,'DELIVERY_ID', p_delivery_rec.DELIVERY_ID);
9754       WSH_DEBUG_SV.log(l_module_name,'Action Code', p_in_rec.action_code);
9755       WSH_DEBUG_SV.log(l_module_name,'Caller', p_in_rec.caller);
9756   END IF;
9757   --
9758   x_return_status := FND_API.G_RET_STS_SUCCESS;
9759   --
9760   IF p_in_rec.action_code = 'CREATE' THEN
9761      --
9762      IF l_debug_on THEN
9763          WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
9764      END IF;
9765      --
9766      -- nothing else need to be disabled
9767      --
9768 --tkt
9769      eliminate_displayonly_fields(p_delivery_rec,p_in_rec, x_delivery_rec);
9770      --
9771 --3509004: : public api changes
9772 /*
9773      IF l_debug_on THEN
9774        WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
9775        WSH_DEBUG_SV.pop(l_module_name);
9776      END IF;
9777      --
9778      RETURN;
9779      --
9780 */
9781   ELSIF p_in_rec.action_code = 'UPDATE' THEN
9782     --
9783     l_caller := p_in_rec.caller;
9784     IF (l_caller like 'FTE%') THEN
9785       l_caller := 'WSH_PUB';
9786     END IF;
9787     Get_Disabled_List( p_delivery_rec.DELIVERY_ID
9788                      , 'FORM'
9789                      , x_return_status
9790                      , l_disabled_list
9791                      , x_msg_count
9792                      , x_msg_data
9793 		     , l_caller --3509004:public api changes
9794                      );
9795     --
9796     IF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR OR
9797        x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR
9798     THEN
9799       --
9800       IF l_debug_on THEN
9801         WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
9802         WSH_DEBUG_SV.pop(l_module_name);
9803       END IF;
9804       --
9805       RETURN;
9806       --
9807     END IF;
9808     --
9809 
9810     --
9811     IF l_disabled_list.COUNT = 1 THEN
9812       IF l_disabled_list(1) = 'FULL' THEN
9813         RAISE e_all_disabled;
9814         --Everything  is disabled
9815       END IF;
9816     END IF;
9817     --
9818     OPEN c_tbl_rec;
9819     FETCH c_tbl_rec INTO x_delivery_rec;
9820       IF c_tbl_rec%NOTFOUND THEN
9821        --
9822        CLOSE c_tbl_rec;
9823        RAISE e_dp_no_entity;
9824        --
9825       END IF;
9826     CLOSE c_tbl_rec;
9827     --
9828     -- J-IB-NPARIKH-{
9829     --
9830     --
9831     --
9832     -- depending on the caller,
9833     --   firmly overwrite columns that are otherwise normally protected.
9834     --
9835     IF p_in_rec.caller LIKE 'WSH_TP_RELEASE%' THEN
9836       -- bug 3371077: need to overwrite these dates even
9837       --   if delivery has contents.
9838       --   (technically equivalent to emptying the delivery,
9839       --    updating the dates, and re-assigning its contents)
9840       IF p_delivery_rec.INITIAL_PICKUP_DATE <> FND_API.G_MISS_DATE THEN
9841         x_delivery_rec.INITIAL_PICKUP_DATE := p_delivery_rec.INITIAL_PICKUP_DATE ;
9842       END IF;
9843       IF p_delivery_rec.ULTIMATE_DROPOFF_DATE <> FND_API.G_MISS_DATE THEN
9844         x_delivery_rec.ULTIMATE_DROPOFF_DATE := p_delivery_rec.ULTIMATE_DROPOFF_DATE ;
9845       END IF;
9846     END IF;
9847     --
9848     --
9849     --
9850     -- J-IB-NPARIKH-}
9851 
9852     IF l_debug_on THEN
9853      WSH_DEBUG_SV.log(l_module_name,'list.COUNT',l_disabled_list.COUNT);
9854     END IF;
9855     --
9856     IF l_disabled_list.COUNT = 0 THEN
9857      IF l_debug_on THEN
9858          WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
9859      END IF;
9860      --
9861      -- nothing else need to be disabled
9862      --
9863 --tkt
9864      eliminate_displayonly_fields (p_delivery_rec,p_in_rec,x_delivery_rec);
9865      --
9866     ELSIF l_disabled_list(1) = 'FULL' THEN
9867       IF l_disabled_list.COUNT > 1 THEN
9868       --
9869       IF l_debug_on THEN
9870           FOR i in 1..l_disabled_list.COUNT
9871           LOOP
9872             WSH_DEBUG_SV.log(l_module_name,'list values',l_disabled_list(i));
9873           END LOOP;
9874           WSH_DEBUG_SV.log(l_module_name,'calling enable_from_list');
9875       END IF;
9876       --enable the columns matching the l_disabled_list
9877       enable_from_list(l_disabled_list,
9878                       p_delivery_rec,
9879                       x_delivery_rec,
9880                       l_return_status,
9881                       l_field_name);
9882       IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
9883          RAISE e_bad_field;
9884       END IF;
9885       END IF;
9886       --
9887     ELSE -- list.count > 1 and list(1) <> 'FULL'
9888       l_db_col_rec := x_delivery_rec ;
9889       --
9890       IF l_debug_on THEN
9891         FOR i in 1..l_disabled_list.COUNT
9892         LOOP
9893           WSH_DEBUG_SV.log(l_module_name,'list values',l_disabled_list(i));
9894         END LOOP;
9895         WSH_DEBUG_SV.log(l_module_name,'First element is not FULL');
9896         WSH_DEBUG_SV.log(l_module_name,'calling eliminate_displayonly_fields');
9897       END IF;
9898       --
9899 --tkt
9900       eliminate_displayonly_fields (p_delivery_rec,p_in_rec,x_delivery_rec);
9901       --
9902       IF l_debug_on THEN
9903         WSH_DEBUG_SV.log(l_module_name,'calling disable_from_list');
9904       END IF;
9905       -- The fileds in the list are getting disabled
9906       disable_from_list(l_disabled_list,
9907                       l_db_col_rec,
9908                       x_delivery_rec,
9909                       l_return_status,
9910                       l_field_name,
9911                       p_in_rec.caller
9912                       );
9913       IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
9914        RAISE e_bad_field;
9915       END IF;
9916     END IF;
9917   --
9918   END IF; /* if action = 'UPDATE' */
9919 
9920   --3509004:public api changes
9921   IF (NVL(p_in_rec.caller, '!!!') <> 'WSH_FSTRX' AND
9922       NVL(p_in_rec.caller, '!!!') NOT LIKE 'FTE%'
9923       AND NVL(p_in_rec.caller, '!!!') <> 'WSH_INBOUND'
9924       AND NVL(p_in_rec.caller, '!!!') <> 'WSH_TPW_INBOUND') THEN
9925     --
9926     user_non_updatable_columns
9927      (p_user_in_rec   => p_delivery_rec,
9928       p_out_rec       => x_delivery_rec,
9929       p_in_rec        => p_in_rec,
9930       x_return_status => l_return_status);
9931     --
9932     IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
9933        x_return_status := l_return_status;
9934     END IF;
9935     --
9936   END IF;
9937   --
9938   IF l_debug_on THEN
9939     WSH_DEBUG_SV.pop(l_module_name);
9940   END IF;
9941 
9942   EXCEPTION
9943     WHEN e_all_disabled THEN
9944       IF (c_tbl_rec%ISOPEN) THEN
9945         CLOSE c_tbl_rec;
9946       END IF;
9947 
9948       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9949       FND_MESSAGE.SET_NAME('WSH','WSH_ALL_COLS_DISABLED');
9950       FND_MESSAGE.Set_Token('ENTITY_ID',p_delivery_rec.delivery_id);
9951       wsh_util_core.add_message(x_return_status,l_module_name);
9952       IF l_debug_on THEN
9953         -- Nothing is updateable
9954         WSH_DEBUG_SV.pop(l_module_name,'e_all_disabled');
9955       END IF;
9956     WHEN e_dp_no_entity THEN
9957       IF (c_tbl_rec%ISOPEN) THEN
9958         CLOSE c_tbl_rec;
9959       END IF;
9960 
9961       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9962       -- the message for this is set in original get_disabled_list
9963       IF l_debug_on THEN
9964         WSH_DEBUG_SV.pop(l_module_name,'e_dp_no_entity');
9965       END IF;
9966     WHEN e_bad_field THEN
9967       IF (c_tbl_rec%ISOPEN) THEN
9968         CLOSE c_tbl_rec;
9969       END IF;
9970 
9971       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9972       FND_MESSAGE.SET_NAME('WSH','WSH_BAD_FIELD_NAME');
9973       FND_MESSAGE.Set_Token('FIELD_NAME',l_field_name);
9974       wsh_util_core.add_message(x_return_status,l_module_name);
9975       IF l_debug_on THEN
9976         WSH_DEBUG_SV.log(l_module_name,'Bad field name passed to the list:'
9977                                                         ,l_field_name);
9978         WSH_DEBUG_SV.pop(l_module_name,'e_bad_field');
9979       END IF;
9980       --
9981     WHEN FND_API.G_EXC_ERROR THEN
9982       IF (c_tbl_rec%ISOPEN) THEN
9983         CLOSE c_tbl_rec;
9984       END IF;
9985 
9986       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9987       --
9988       IF l_debug_on THEN
9989         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9990         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
9991       END IF;
9992       --
9993     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9994       IF (c_tbl_rec%ISOPEN) THEN
9995         CLOSE c_tbl_rec;
9996       END IF;
9997 
9998       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
9999       --
10000       IF l_debug_on THEN
10001         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10002         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10003       END IF;
10004 
10005     WHEN OTHERS THEN
10006       IF (c_tbl_rec%ISOPEN) THEN
10007         CLOSE c_tbl_rec;
10008       END IF;
10009 
10010       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10011       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.get_disabled_list', l_module_name);
10012       IF l_debug_on THEN
10013         WSH_DEBUG_SV.log(l_module_name,'Error:',SUBSTR(SQLERRM,1,200));
10014         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10015       END IF;
10016 END Get_Disabled_List;
10017 
10018 
10019 PROCEDURE Init_Delivery_Actions_Tbl (
10020   p_action                   IN                VARCHAR2
10021 , x_delivery_actions_tab     OUT      NOCOPY         DeliveryActionsTabType
10022 , x_return_status            OUT      NOCOPY         VARCHAR2
10023 )
10024 
10025 IS
10026 i NUMBER := 0;
10027 --OTM R12
10028 l_gc3_is_installed		VARCHAR2(1);
10029 --
10030 
10031 l_debug_on BOOLEAN;
10032   l_module_name CONSTANT VARCHAR2(100) :=
10033          'wsh.plsql.' || G_PKG_NAME || '.' || 'Init_Delivery_Actions_Tbl';
10034 
10035 BEGIN
10036 
10037   --
10038   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10039   --
10040   IF l_debug_on IS NULL
10041   THEN
10042       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10043   END IF;
10044   --
10045   IF l_debug_on THEN
10046       WSH_DEBUG_SV.push(l_module_name);
10047       --
10048       WSH_DEBUG_SV.log(l_module_name,'p_action', p_action);
10049   END IF;
10050   --
10051   x_return_status :=  WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10052 
10053   --OTM R12
10054   l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
10055 
10056   IF l_gc3_is_installed IS NULL THEN
10057     l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
10058   END IF;
10059   --
10060 
10061 /*
10062   PLEASE READ BEFORE MODIFYING THIS PROCEDURE:
10063   Actions are disabled by updating i FIRST and then adding appropriate conditions (like
10064   status code, action not allowed etc.) and NOT the other way (update i after updating
10065   status code, action not allowed).
10066 */
10067 
10068   --OTM R12
10069   IF l_gc3_is_installed = 'Y' THEN
10070     IF p_action IN ('GET-FREIGHT-COSTS',
10071                     'FIRM',
10072                     'SELECT-CARRIER',
10073                     'RATE_WITH_UPS',
10074                     'UPS_TIME_IN_TRANSIT',
10075                     'UPS_ADDRESS_VALIDATION',
10076                     'UPS_TRACKING') THEN
10077       i := i + 1;
10078       x_delivery_actions_tab(i).action_not_allowed := p_action;
10079     END IF;
10080   END IF;
10081   --END OTM R12
10082   --
10083   --
10084   -- J-IB-NPARIKH-{
10085     --
10086     -- Disable all the actions for inbound/drop-ship deliveries
10087     -- when called from shipping transaction form
10088     --
10089     i := i+1;
10090     x_delivery_actions_tab(i).shipment_direction := 'I';
10091     x_delivery_actions_tab(i).caller             := 'WSH_FSTRX';
10092     x_delivery_actions_tab(i).action_not_allowed := p_action;
10093     i := i+1;
10094     x_delivery_actions_tab(i).shipment_direction := 'D';
10095     x_delivery_actions_tab(i).caller             := 'WSH_FSTRX';
10096     x_delivery_actions_tab(i).action_not_allowed := p_action;
10097   -- J-IB-NPARIKH-}
10098   --
10099   --
10100 
10101   IF p_action = 'CLOSE'  THEN
10102         i := i+1;
10103         x_delivery_actions_tab(i).status_code := 'CL';
10104         x_delivery_actions_tab(i).action_not_allowed := p_action;
10105         i := i + 1;
10106         x_delivery_actions_tab(i).status_code := 'CO';
10107         x_delivery_actions_tab(i).action_not_allowed := p_action;
10108         --
10109         -- J-IB-NPARIKH-{
10110         --
10111   ELSIF p_action = 'GENERATE-ROUTING-RESPONSE'  THEN
10112         --
10113         -- Generate routing response action not allowed for
10114         -- - outbound (O/IO) deliveries
10115         -- - in-transit/closed deliveries
10116         --
10117         i := i + 1;
10118         x_delivery_actions_tab(i).status_code := 'CL';
10119         x_delivery_actions_tab(i).action_not_allowed := p_action;
10120         i := i + 1;
10121         x_delivery_actions_tab(i).status_code := 'IT';
10122         x_delivery_actions_tab(i).action_not_allowed := p_action;
10123         i := i+1;
10124         x_delivery_actions_tab(i).shipment_direction := 'O';
10125         x_delivery_actions_tab(i).action_not_allowed := p_action;
10126         i := i+1;
10127         x_delivery_actions_tab(i).shipment_direction := 'IO';
10128         x_delivery_actions_tab(i).action_not_allowed := p_action;
10129         --
10130         -- J-IB-NPARIKH-}
10131         --
10132   ELSIF p_action IN (  'IN-TRANSIT' ,'RE-OPEN' )  THEN
10133         i := i+1;
10134      x_delivery_actions_tab(i).status_code := 'CL';
10135      x_delivery_actions_tab(i).action_not_allowed := p_action;
10136      i := i + 1;
10137      x_delivery_actions_tab(i).status_code := 'IT';
10138      x_delivery_actions_tab(i).action_not_allowed := p_action;
10139 /*J add disallowed actions for shipment_direction jckwok */
10140      i := i + 1;
10141      x_delivery_actions_tab(i).shipment_direction := 'I';
10142      x_delivery_actions_tab(i).action_not_allowed := p_action;
10143      i := i + 1;
10144      x_delivery_actions_tab(i).shipment_direction := 'D';
10145      x_delivery_actions_tab(i).action_not_allowed := p_action;
10146   ELSIF p_action IN ('UNASSIGN-TRIP','AUTOCREATE-TRIP','WT-VOL',
10147                        'PICK-RELEASE-UI' ,'DELETE','ASSIGN-TRIP')  THEN
10148 
10149      -- J-IB-NPARIKH-{
10150      IF p_action = 'WT-VOL'
10151      THEN
10152      --{
10153          --
10154          -- Calculate weight/volume action
10155          --  - allowed for in-transit/closed inbound (not O/IO) deliveries
10156          --  - not allowed for in-transit/closed outbound (O/IO) deliveries
10157          --
10158          i := i + 1;
10159          x_delivery_actions_tab(i).shipment_direction := 'O';
10160          x_delivery_actions_tab(i).status_code := 'CL';
10161          x_delivery_actions_tab(i).action_not_allowed := p_action;
10162          i := i + 1;
10163          x_delivery_actions_tab(i).shipment_direction := 'IO';
10164          x_delivery_actions_tab(i).status_code := 'CL';
10165          x_delivery_actions_tab(i).action_not_allowed := p_action;
10166 
10167          i := i + 1;
10168          x_delivery_actions_tab(i).shipment_direction := 'O';
10169          x_delivery_actions_tab(i).status_code := 'IT';
10170          x_delivery_actions_tab(i).action_not_allowed := p_action;
10171          i := i + 1;
10172          x_delivery_actions_tab(i).shipment_direction := 'IO';
10173          x_delivery_actions_tab(i).status_code := 'IT';
10174          x_delivery_actions_tab(i).action_not_allowed := p_action;
10175      --}
10176      ELSE
10177      -- J-IB-NPARIKH-}
10178          i := i + 1;
10179          x_delivery_actions_tab(i).status_code := 'CL';
10180          x_delivery_actions_tab(i).action_not_allowed := p_action;
10181 
10182          i := i + 1;
10183          x_delivery_actions_tab(i).status_code := 'IT';
10184          x_delivery_actions_tab(i).action_not_allowed := p_action;
10185      END IF;
10186      --
10187      -- Bug fix 2657615
10188      -- Allow Assign-Trip, Unassign-Trip, Autocreate-Trip for Confirmed deliveries
10189      IF p_action NOT IN ('ASSIGN-TRIP', 'UNASSIGN-TRIP', 'AUTOCREATE-TRIP') THEN
10190         i := i + 1;
10191         x_delivery_actions_tab(i).status_code := 'CO';
10192         x_delivery_actions_tab(i).action_not_allowed := p_action;
10193      END IF;
10194      IF p_action NOT IN ('ASSIGN-TRIP', 'UNASSIGN-TRIP', 'AUTOCREATE-TRIP', 'WT-VOL','DELETE') THEN
10195 /*J add disallowed actions for shipment_direction jckwok */
10196        i := i + 1;
10197        x_delivery_actions_tab(i).shipment_direction := 'I';
10198        x_delivery_actions_tab(i).action_not_allowed := p_action;
10199        i := i + 1;
10200        x_delivery_actions_tab(i).shipment_direction := 'D';
10201        x_delivery_actions_tab(i).action_not_allowed := p_action;
10202      END IF;
10203      -- End of Bug fix 2657615
10204   -- J-IB-NPARIKH-{
10205   ELSIF p_action = 'INCLUDE_PLAN' THEN
10206      --
10207      -- Include plan action not allowed for status code = XX
10208      -- status code XX is dummy status and will have this value only
10209      -- For in-transit/closed inbound deliveries (not O/IO), if
10210      --  - supplier is managing transportation
10211      -- OR
10212      --  - routing request was not received for all delivery lines
10213      --
10214      i := i + 1;
10215      x_delivery_actions_tab(i).status_code := 'XX';
10216      x_delivery_actions_tab(i).action_not_allowed := p_action;
10217      --OTM R12
10218      IF l_gc3_is_installed = 'Y' THEN
10219        -- 5746110: enforce this condition only when OTM is installed.
10220        i := i + 1;
10221        x_delivery_actions_tab(i).action_not_allowed := p_action;
10222        x_delivery_actions_tab(i).otm_enabled := 'N';
10223      END IF;
10224 
10225   -- J-IB-NPARIKH-}
10226 
10227   ELSIF p_action = 'FREIGHT-COSTS-UI' THEN
10228 /*J add disallowed actions for shipment_direction jckwok */
10229        i := i + 1;
10230        x_delivery_actions_tab(i).shipment_direction := 'I';
10231        x_delivery_actions_tab(i).action_not_allowed := p_action;
10232        i := i + 1;
10233        x_delivery_actions_tab(i).shipment_direction := 'D';
10234        x_delivery_actions_tab(i).action_not_allowed := p_action;
10235        -- OTM R12 - Org specific changes - Bug#5399341
10236        x_delivery_actions_tab(i).otm_enabled := 'N';
10237   ELSIF p_action IN ('UNPLAN', 'AUTO-PACK', 'AUTO-PACK-MASTER','PACK',
10238                      'SELECT-CARRIER','GEN-LOAD-SEQ')   THEN
10239      --order of i := i + 1; changed to be before and not after addition of new record
10240      IF (NOT p_action='UNPLAN') THEN
10241         i := i + 1;
10242         x_delivery_actions_tab(i).status_code := 'CL';
10243         x_delivery_actions_tab(i).action_not_allowed := p_action;
10244         i := i + 1;
10245         x_delivery_actions_tab(i).status_code := 'CO';
10246         x_delivery_actions_tab(i).action_not_allowed := p_action;
10247         i := i + 1;
10248         x_delivery_actions_tab(i).status_code := 'IT';
10249         x_delivery_actions_tab(i).action_not_allowed := p_action;
10250      END IF;
10251      i := i + 1;
10252      x_delivery_actions_tab(i).status_code := 'SR';
10253      x_delivery_actions_tab(i).action_not_allowed := p_action;
10254      i := i + 1;
10255      x_delivery_actions_tab(i).status_code := 'SC';
10256      x_delivery_actions_tab(i).action_not_allowed := p_action;
10257      --order of i := i + 1; changed to be before and not after addition of new record
10258      IF p_action IN ('AUTO-PACK', 'AUTO-PACK-MASTER', 'PACK') THEN
10259        i := i+1;
10260        x_delivery_actions_tab(i).org_type := 'WMS';
10261        x_delivery_actions_tab(i).action_not_allowed := p_action;
10262 /*J add disallowed actions for shipment_direction jckwok */
10263        i := i + 1;
10264        x_delivery_actions_tab(i).shipment_direction := 'I';
10265        x_delivery_actions_tab(i).action_not_allowed := p_action;
10266        i := i + 1;
10267        x_delivery_actions_tab(i).shipment_direction := 'D';
10268        x_delivery_actions_tab(i).action_not_allowed := p_action;
10269      END IF;
10270      IF p_action = 'GEN-LOAD-SEQ' THEN
10271 /*J add disallowed actions for shipment_direction jckwok */
10272        i := i + 1;
10273        x_delivery_actions_tab(i).shipment_direction := 'I';
10274        x_delivery_actions_tab(i).action_not_allowed := p_action;
10275        i := i + 1;
10276        x_delivery_actions_tab(i).shipment_direction := 'D';
10277        x_delivery_actions_tab(i).action_not_allowed := p_action;
10278      END IF;
10279   ELSIF p_action IN (  'PICK-RELEASE','CONFIRM','PLAN', 'FIRM') THEN
10280 
10281      --order of i := i + 1; changed to be before and not after addition of new record
10282      IF (NOT p_action IN ('PLAN', 'FIRM')) THEN
10283         i := i + 1;
10284         x_delivery_actions_tab(i).status_code := 'CL';
10285         x_delivery_actions_tab(i).action_not_allowed := p_action;
10286         i := i + 1;
10287         x_delivery_actions_tab(i).status_code := 'CO';
10288         x_delivery_actions_tab(i).action_not_allowed := p_action;
10289         i := i + 1;
10290         x_delivery_actions_tab(i).status_code := 'IT';
10291         x_delivery_actions_tab(i).action_not_allowed := p_action;
10292      END IF;
10293 
10294      i := i + 1;
10295      x_delivery_actions_tab(i).status_code := 'SR';
10296      x_delivery_actions_tab(i).action_not_allowed := p_action;
10297      i := i + 1;
10298      x_delivery_actions_tab(i).status_code := 'SC';
10299      x_delivery_actions_tab(i).action_not_allowed := p_action;
10300      --order of i := i + 1; changed to be before and not after addition of new record
10301 
10302      IF p_action IN ('PICK-RELEASE','CONFIRM') THEN
10303 /*J add disallowed actions for shipment_direction jckwok */
10304        i := i + 1;
10305        x_delivery_actions_tab(i).shipment_direction := 'I';
10306        x_delivery_actions_tab(i).action_not_allowed := p_action;
10307        i := i + 1;
10308        x_delivery_actions_tab(i).shipment_direction := 'D';
10309        x_delivery_actions_tab(i).action_not_allowed := p_action;
10310      END IF;
10311   ELSIF p_action IN  ('GENERATE-BOL','PRINT-BOL') THEN
10312      --order of i := i + 1; changed to be before and not after addition of new record
10313      i := i + 1;
10314      x_delivery_actions_tab(i).status_code := 'SR';
10315      x_delivery_actions_tab(i).action_not_allowed := p_action;
10316      i := i + 1;
10317      x_delivery_actions_tab(i).status_code := 'SC';
10318      x_delivery_actions_tab(i).action_not_allowed := p_action;
10319 /*J add disallowed actions for shipment_direction jckwok */
10320      i := i + 1;
10321      x_delivery_actions_tab(i).shipment_direction := 'I';
10322      x_delivery_actions_tab(i).action_not_allowed := p_action;
10323      i := i + 1;
10324      x_delivery_actions_tab(i).shipment_direction := 'D';
10325      x_delivery_actions_tab(i).action_not_allowed := p_action;
10326   ELSIF p_action =     'ASSIGN' THEN
10327      i := i + 1;
10328      x_delivery_actions_tab(i).status_code := 'SR';
10329      x_delivery_actions_tab(i).action_not_allowed := p_action;
10330      i := i + 1;
10331      x_delivery_actions_tab(i).status_code := 'SC';
10332      x_delivery_actions_tab(i).action_not_allowed := p_action;
10333      i := i + 1;
10334      x_delivery_actions_tab(i).status_code := 'CO';
10335      x_delivery_actions_tab(i).action_not_allowed := p_action;
10336      i := i + 1;
10337      x_delivery_actions_tab(i).status_code := 'IT';
10338      x_delivery_actions_tab(i).action_not_allowed := p_action;
10339      i := i + 1;
10340      x_delivery_actions_tab(i).status_code := 'CL';
10341      x_delivery_actions_tab(i).action_not_allowed := p_action;
10342      i := i + 1;
10343      x_delivery_actions_tab(i).status_code := 'SA';
10344      x_delivery_actions_tab(i).action_not_allowed := p_action;
10345    ELSIF p_action IN( 'UNASSIGN', 'SPLIT-LINE', 'UNPACK', 'PACKING-WORKBENCH','CYCLE-COUNT') THEN
10346      /* These Actions are for delivery lines. They are added here because,
10347        Delivery Detail's Is_Action_Enabled API calls Delivery's Is_Action_Enabled
10348        to check the status of the delivery.
10349        These Actions are not allowed if the delivery has been sent in outbound or if the
10350        delivery is awaiting a response for shipment cancellation request.
10351        Other actions applicable to delivery lines , like AUTO-PACK, AUTO-PACK-MASTER,
10352        ASSIGN, PACK are covered under the previous ELSIFs */
10353      i := i + 1;
10354      x_delivery_actions_tab(i).status_code := 'SR';
10355      x_delivery_actions_tab(i).action_not_allowed := p_action;
10356      i := i + 1;
10357      x_delivery_actions_tab(i).status_code := 'SC';
10358      x_delivery_actions_tab(i).action_not_allowed := p_action;
10359      --order of i := i + 1; changed to be before and not after addition of new record
10360 
10361      IF (p_action ='SPLIT-LINE') THEN
10362         i := i + 1;
10363         x_delivery_actions_tab(i).status_code := 'CO';
10364         x_delivery_actions_tab(i).action_not_allowed := p_action;
10365      END IF;
10366    ELSIF (p_action in ('GET-FREIGHT-COSTS', 'CANCEL-SHIP-METHOD') ) THEN
10367      IF WSH_UTIL_CORE.FTE_Is_Installed <> 'Y' THEN
10368        --order of i := i + 1; changed to be before and not after addition of new record
10369         i := i + 1;
10370         x_delivery_actions_tab(i).action_not_allowed := p_action;
10371      ELSE
10372        i := i + 1;
10373        x_delivery_actions_tab(i).status_code := 'IT';
10374        x_delivery_actions_tab(i).action_not_allowed := p_action;
10375        i := i + 1;
10376        x_delivery_actions_tab(i).status_code := 'CO';
10377        x_delivery_actions_tab(i).action_not_allowed := p_action;
10378        i := i + 1;
10379        x_delivery_actions_tab(i).status_code := 'CL';
10380        x_delivery_actions_tab(i).action_not_allowed := p_action;
10381        i := i+1;
10382        x_delivery_actions_tab(i).org_type := 'TPW';
10383        x_delivery_actions_tab(i).action_not_allowed := p_action;
10384 /*J add disallowed actions for shipment_direction jckwok */
10385        i := i + 1;
10386        x_delivery_actions_tab(i).shipment_direction := 'I';
10387        x_delivery_actions_tab(i).action_not_allowed := p_action;
10388        i := i + 1;
10389        x_delivery_actions_tab(i).shipment_direction := 'D';
10390        x_delivery_actions_tab(i).action_not_allowed := p_action;
10391        --order of i := i + 1; changed to be before and not after addition of new record
10392 
10393        IF p_action = 'CANCEL-SHIP-METHOD' THEN
10394          i := i + 1;
10395          x_delivery_actions_tab(i).status_code := 'OP';
10396          x_delivery_actions_tab(i).planned_flag:= 'F';
10397          x_delivery_actions_tab(i).action_not_allowed := p_action;
10398        END IF;
10399 
10400      END IF;
10401 -- Patchset J, add Print Pack Slip
10402    ELSIF (p_action in ('PRINT-DOC-SET', 'OUTBOUND-DOCUMENT', 'GENERATE-PACK-SLIP','PRINT-PACK-SLIP', 'ASSIGN-FREIGHT-COSTS') ) THEN
10403 /*J add disallowed actions for shipment_direction jckwok */
10404        i := i + 1;
10405        x_delivery_actions_tab(i).shipment_direction := 'I';
10406        x_delivery_actions_tab(i).action_not_allowed := p_action;
10407        i := i + 1;
10408        x_delivery_actions_tab(i).shipment_direction := 'D';
10409        x_delivery_actions_tab(i).action_not_allowed := p_action;
10410   --
10411   -- rlanka : Pack J
10412   -- Disallow trip consolidation for inbound deliveries
10413   --
10414   ELSIF p_action = 'TRIP-CONSOLIDATION' THEN
10415     --
10416     i := i + 1;
10417     x_delivery_actions_tab(i).shipment_direction := 'I';
10418     x_delivery_actions_tab(i).action_not_allowed := p_action;
10419     i := i + 1;
10420     x_delivery_actions_tab(i).shipment_direction := 'D';
10421     x_delivery_actions_tab(i).action_not_allowed := p_action;
10422     --
10423   --{ IB-Phase-2
10424   ELSIF p_action = 'CREATE-CONSOL-DEL' THEN
10425     --
10426     i := i + 1;
10427     x_delivery_actions_tab(i).shipment_direction := 'I';
10428     x_delivery_actions_tab(i).action_not_allowed := p_action;
10429     i := i + 1;
10430     x_delivery_actions_tab(i).shipment_direction := 'D';
10431     x_delivery_actions_tab(i).action_not_allowed := p_action;
10432     --
10433   --} IB-Phase-2
10434   END IF;
10435 
10436   IF l_debug_on THEN
10437       WSH_DEBUG_SV.pop(l_module_name);
10438   END IF;
10439   EXCEPTION
10440   WHEN OTHERS THEN
10441     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10442     wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.get_disabled_list', l_module_name);
10443     IF l_debug_on THEN
10444         WSH_DEBUG_SV.log(l_module_name,'Error:',SUBSTR(SQLERRM,1,200));
10445         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10446     END IF;
10447 
10448 END Init_Delivery_Actions_Tbl;
10449 
10450 
10451 PROCEDURE Derive_Delivery_Uom (
10452   p_delivery_id         IN  NUMBER,
10453   p_organization_id     IN  NUMBER,
10454   x_volume_uom_code     IN OUT NOCOPY VARCHAR2,
10455   x_weight_uom_code     IN OUT NOCOPY VARCHAR2,
10456   x_wt_nullify_flag     OUT NOCOPY BOOLEAN, -- Default FALSE
10457   x_vol_nullify_flag    OUT NOCOPY BOOLEAN, -- Default FALSE
10458   x_return_status       OUT NOCOPY VARCHAR2)
10459 IS
10460 --
10461 l_debug_on BOOLEAN;
10462 --
10463 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DERIVE_DELIVERY_UOM';
10464 --
10465 cursor l_del_org_csr is
10466 select organization_id,
10467        weight_uom_code,
10468        volume_uom_code
10469 from   wsh_new_deliveries
10470 where  delivery_id = p_delivery_id;
10471 --
10472 -- Bug# 8446283 : Added weight and volume UOM codes
10473 CURSOR l_get_classes_csr(p_organization_id NUMBER) IS
10474 SELECT weight_uom_class,weight_uom_code,volume_uom_class,volume_uom_code
10475 FROM   wsh_shipping_parameters
10476 WHERE  organization_id = p_organization_id;
10477 --
10478 CURSOR l_check_uom_csr (p_class VARCHAR2, p_uom_code VARCHAR2) IS
10479 SELECT uom_code
10480 FROM   mtl_units_of_measure
10481 WHERE  uom_code = p_uom_code
10482 AND    uom_class = p_class
10483 AND    nvl(disable_date, sysdate) >= sysdate;
10484 
10485 cursor l_get_base_uom_csr(p_class VARCHAR2) IS
10486 select uom_code
10487 from   mtl_units_of_measure
10488 where  uom_class = p_class
10489 and    base_uom_flag = 'Y'
10490 AND    nvl(disable_date, sysdate) >= sysdate;
10491 
10492 l_organization_id NUMBER;
10493 l_wt_uom_code     VARCHAR2(3);
10494 l_vol_uom_code    VARCHAR2(3);
10495 l_wt_uom_class    VARCHAR2(10);
10496 l_vol_uom_class   VARCHAR2(10);
10497 --
10498 -- Bug# 8446283 :Begin
10499 l_parameter_wt_code  VARCHAR2(3);
10500 l_parameter_vol_code VARCHAR2(3);
10501 -- Bug# 8446283 : End
10502 BEGIN
10503   --
10504   --
10505   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10506   --
10507   IF l_debug_on IS NULL
10508   THEN
10509       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10510   END IF;
10511   --
10512   IF l_debug_on THEN
10513     WSH_DEBUG_SV.push(l_module_name);
10514     --
10515     WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
10516     WSH_DEBUG_SV.log(l_module_name,'p_organization_id',p_organization_id);
10517   END IF;
10518   --
10519   x_wt_nullify_flag   := FALSE;
10520   x_vol_nullify_flag  := FALSE;
10521   open l_del_org_csr;
10522   Fetch l_del_org_csr into l_organization_id, l_wt_uom_code, l_vol_uom_code;
10523   IF l_del_org_csr%NOTFOUND THEN
10524     FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_DELIVERY_ID');
10525     x_return_status := wsh_util_core.g_ret_sts_error;
10526     wsh_util_core.add_message(x_return_status,l_module_name);
10527     close l_del_org_csr;
10528     RAISE FND_API.G_EXC_ERROR;
10529   END IF;
10530   close l_del_org_csr;
10531   --
10532   IF l_organization_id <> p_organization_id THEN
10533     --
10534     -- Bug# 8446283 : Added weight and volume UOM codes
10535     open  l_get_classes_csr(p_organization_id);
10536     fetch l_get_classes_csr into l_wt_uom_class,l_parameter_wt_code,l_vol_uom_class,l_parameter_vol_code;
10537     close l_get_classes_csr;
10538     IF l_debug_on THEN
10539       WSH_DEBUG_SV.log(l_module_name,'l_wt_uom_class',l_wt_uom_class);
10540       WSH_DEBUG_SV.log(l_module_name,'l_vol_uom_class',l_vol_uom_class);
10541       WSH_DEBUG_SV.log(l_module_name,'l_parameter_wt_code',l_parameter_wt_code);
10542       WSH_DEBUG_SV.log(l_module_name,'l_parameter_vol_code',l_parameter_vol_code);
10543     END IF;
10544     --
10545     open  l_check_uom_csr(l_wt_uom_class, l_wt_uom_code);
10546     fetch l_check_uom_csr into l_wt_uom_code;
10547     close l_check_uom_csr;
10548     --
10549     open  l_check_uom_csr(l_vol_uom_class, l_vol_uom_code);
10550     fetch l_check_uom_csr into l_vol_uom_code;
10551     close l_check_uom_csr;
10552     --
10553     IF nvl(l_wt_uom_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
10554       x_weight_uom_code := l_wt_uom_code;
10555     ELSE
10556       --
10557       -- Bug# 8446283 : First consider the wt UOM code value on shipping parameters.
10558       IF l_parameter_wt_code IS NOT NULL THEN
10559           x_weight_uom_code := l_parameter_wt_code;
10560       ELSE
10561           open  l_get_base_uom_csr(l_wt_uom_class);
10562           fetch l_get_base_uom_csr into x_weight_uom_code;
10563           close l_get_base_uom_csr;
10564       END IF;
10565       --
10566       x_wt_nullify_flag  := TRUE;
10567       --
10568     END IF;
10569     --
10570     IF nvl(l_wt_uom_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR THEN
10571       x_volume_uom_code := l_vol_uom_code;
10572     ELSE
10573       --
10574       -- Bug# 8446283 : First consider the vol UOM code value on shipping parameters.
10575       IF l_parameter_vol_code IS NOT NULL THEN
10576           x_volume_uom_code := l_parameter_vol_code;
10577       ELSE
10578           open  l_get_base_uom_csr(l_vol_uom_class);
10579           fetch l_get_base_uom_csr into x_volume_uom_code;
10580           close l_get_base_uom_csr;
10581       END IF;
10582       --
10583       x_vol_nullify_flag  := TRUE;
10584       --
10585     END IF;
10586     --
10587   END IF;
10588   --
10589   IF l_debug_on THEN
10590     WSH_DEBUG_SV.log(l_module_name,'x_weight_uom_code',x_weight_uom_code);
10591     WSH_DEBUG_SV.log(l_module_name,'x_volume_uom_code',x_volume_uom_code);
10592   END IF;
10593   x_return_status := wsh_util_core.g_ret_sts_success;
10594   --
10595   IF l_debug_on THEN
10596       WSH_DEBUG_SV.pop(l_module_name);
10597   END IF;
10598   --
10599 EXCEPTION
10600     WHEN FND_API.G_EXC_ERROR THEN
10601       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10602       --
10603       IF l_debug_on THEN
10604         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10605         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10606       END IF;
10607       --
10608     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10609       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10610       --
10611       IF l_debug_on THEN
10612         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10613         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10614       END IF;
10615       --
10616     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10617       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10618       --
10619       IF l_debug_on THEN
10620         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10621         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10622       END IF;
10623       --
10624     WHEN OTHERS THEN
10625       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10626       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.DERIVE_DELIVERY_UOM');
10627       --
10628       IF l_debug_on THEN
10629         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10630         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10631       END IF;
10632       --
10633 END Derive_Delivery_Uom;
10634 
10635 PROCEDURE Validate_Routed_Export_Txn(
10636   x_rtd_expt_txn_code    IN OUT NOCOPY VARCHAR2,
10637   p_rtd_expt_txn_meaning IN VARCHAR2,
10638   x_return_status        OUT NOCOPY VARCHAR2)
10639 IS
10640 --
10641 l_debug_on BOOLEAN;
10642 --
10643 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_ROUTED_EXPORT_TXN';
10644 --
10645 l_num_errors NUMBER := 0;
10646 l_num_warnings NUMBER := 0;
10647 --
10648 BEGIN
10649   --
10650   --
10651   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10652   --
10653   IF l_debug_on IS NULL
10654   THEN
10655       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10656   END IF;
10657   --
10658   IF l_debug_on THEN
10659     WSH_DEBUG_SV.push(l_module_name);
10660     --
10661     WSH_DEBUG_SV.log(l_module_name,'x_rtd_expt_txn_code',x_rtd_expt_txn_code);
10662     WSH_DEBUG_SV.log(l_module_name,'p_rtd_expt_txn_meaning',p_rtd_expt_txn_meaning);
10663   END IF;
10664   --
10665   SAVEPOINT VALIDATE_ROUTED_EXPORT_TXN;
10666   --
10667   IF nvl(x_rtd_expt_txn_code,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR
10668   OR nvl(p_rtd_expt_txn_meaning,FND_API.G_MISS_CHAR) <> FND_API.G_MISS_CHAR
10669   THEN
10670     IF x_rtd_expt_txn_code = FND_API.G_MISS_CHAR THEN
10671       x_rtd_expt_txn_code := NULL;
10672     END IF;
10673     WSH_UTIL_VALIDATE.validate_lookup(
10674       p_lookup_type   => 'YES_NO',
10675       p_lookup_code   => x_rtd_expt_txn_code,
10676       p_meaning       => p_rtd_expt_txn_meaning,
10677       x_return_status => x_return_status);
10678     --
10679     IF l_debug_on THEN
10680       wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_lookup',x_return_status);
10681     END IF;
10682     --
10683     wsh_util_core.api_post_call(
10684       p_return_status => x_return_status,
10685       x_num_warnings  => l_num_warnings,
10686       x_num_errors    => l_num_errors);
10687     --
10688   END IF;
10689   --
10690   x_return_status := wsh_util_core.g_ret_sts_success;
10691   --
10692   IF l_debug_on THEN
10693       WSH_DEBUG_SV.pop(l_module_name);
10694   END IF;
10695   --
10696 EXCEPTION
10697     WHEN FND_API.G_EXC_ERROR THEN
10698       ROLLBACK TO VALIDATE_ROUTED_EXPORT_TXN;
10699       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10700       --
10701       IF l_debug_on THEN
10702         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10703         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10704       END IF;
10705       --
10706     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10707       ROLLBACK TO VALIDATE_ROUTED_EXPORT_TXN;
10708       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10709       --
10710       IF l_debug_on THEN
10711         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10712         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10713       END IF;
10714       --
10715     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10716       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10717       --
10718       IF l_debug_on THEN
10719         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10720         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10721       END IF;
10722       --
10723     WHEN OTHERS THEN
10724       ROLLBACK TO VALIDATE_ROUTED_EXPORT_TXN;
10725       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10726       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.VALIDATE_ROUTED_EXPORT_TXN');
10727       --
10728       IF l_debug_on THEN
10729         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10730         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10731       END IF;
10732       --
10733 END Validate_Routed_Export_Txn;
10734 
10735 
10736 PROCEDURE Derive_Number_Of_LPN(
10737   p_delivery_id   IN NUMBER,
10738   x_number_of_lpn IN OUT NOCOPY NUMBER,
10739   x_return_status OUT NOCOPY VARCHAR2)
10740 IS
10741 --
10742 l_debug_on BOOLEAN;
10743 --
10744 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DERIVE_NUMBER_OF_LPN';
10745 --
10746 cursor  lpn_cur is
10747 select  count (distinct wda.delivery_detail_id)
10748 from    wsh_delivery_assignments_v wda
10749 where   wda.parent_delivery_detail_id is null
10750 and     wda.delivery_id is NOT NULL
10751 and     level > 1
10752 connect by prior wda.parent_delivery_detail_id = wda.delivery_detail_id
10753 start   with wda.delivery_id =p_delivery_id;
10754 --
10755 BEGIN
10756   --
10757   --
10758   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10759   --
10760   IF l_debug_on IS NULL
10761   THEN
10762       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10763   END IF;
10764   --
10765   IF l_debug_on THEN
10766     --
10767     WSH_DEBUG_SV.push(l_module_name);
10768     WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
10769     WSH_DEBUG_SV.log(l_module_name,'x_number_of_lpn',x_number_of_lpn);
10770     --
10771   END IF;
10772   --
10773   SAVEPOINT DERIVE_NUMBER_OF_LPN;
10774   --
10775   IF nvl(x_number_of_lpn,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM THEN
10776     --
10777     open  lpn_cur;
10778     fetch lpn_cur into x_number_of_lpn;
10779     close lpn_cur;
10780     --
10781     IF x_number_of_lpn = 0 THEN
10782       x_number_of_lpn := NULL;
10783     END IF;
10784     --
10785   END IF;
10786 
10787   x_return_status := wsh_util_core.g_ret_sts_success;
10788   --
10789   IF l_debug_on THEN
10790       WSH_DEBUG_SV.pop(l_module_name);
10791   END IF;
10792   --
10793 EXCEPTION
10794     WHEN FND_API.G_EXC_ERROR THEN
10795       ROLLBACK TO DERIVE_NUMBER_OF_LPN;
10796       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10797       --
10798       IF l_debug_on THEN
10799         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10800         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10801       END IF;
10802       --
10803     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10804       ROLLBACK TO DERIVE_NUMBER_OF_LPN;
10805       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10806       --
10807       IF l_debug_on THEN
10808         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10809         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10810       END IF;
10811       --
10812     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10813       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10814       --
10815       IF l_debug_on THEN
10816         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10817         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10818       END IF;
10819       --
10820     WHEN OTHERS THEN
10821       ROLLBACK TO DERIVE_NUMBER_OF_LPN;
10822       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10823       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.DERIVE_NUMBER_OF_LPN');
10824       --
10825       IF l_debug_on THEN
10826         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10827         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10828       END IF;
10829       --
10830 END Derive_Number_Of_LPN;
10831 --Harmonization Project I
10832 
10833 -- This is new procedure to check for duplicate pickup locations or
10834 -- dropoff locations when a trip is being assigned to a delivery.
10835 PROCEDURE Chk_Dup_Pickup_Dropoff_Locns(
10836   p_delivery_id  IN NUMBER,
10837   p_pickup_location_id IN NUMBER,
10838   p_dropoff_location_id IN NUMBER,
10839   x_return_status OUT NOCOPY VARCHAR2)
10840 IS
10841   --
10842   l_debug_on BOOLEAN;
10843   --
10844   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHK_DUP_PICKUP_DROPOFF_LOCNS';
10845   --
10846   -- The below cursor tells whether the input pickup location is
10847   -- already assigned to one of the legs of the delivery.
10848   -- If it is already assigned, then we do not allow the assignment
10849   -- of Trip to this Delivery.
10850   cursor  l_pick_up_leg_csr( p_del_id IN VARCHAR2,
10851                              p_pickup_locn_id IN NUMBER) is
10852   select  wt.name, wnd.name
10853   from    wsh_new_deliveries wnd,
10854           wsh_delivery_legs wdl,
10855           wsh_trip_stops wts,
10856           wsh_trips wt
10857   where   wnd.delivery_id = p_del_id
10858   and     wnd.delivery_id = wdl.delivery_id
10859   and     wdl.pick_up_stop_id = wts.stop_id
10860   and     wts.stop_location_id = p_pickup_locn_id
10861   and     wts.trip_id   = wt.trip_id;
10862   --
10863   -- The below cursor tells whether the input dropoff location is
10864   -- already assigned to one of the legs of the delivery.
10865   -- If it is already assigned, then we do not allow the assignment
10866   -- of Trip to this Delivery.
10867   cursor  l_drop_off_leg_csr( p_del_id IN VARCHAR2,
10868                               p_dropoff_locn_id IN NUMBER) is
10869   select  wt.name, wnd.name
10870   from    wsh_new_deliveries wnd,
10871           wsh_delivery_legs wdl,
10872           wsh_trip_stops wts,
10873           wsh_trips wt
10874   where   wnd.delivery_id = p_del_id
10875   and     wnd.delivery_id = wdl.delivery_id
10876   and     wdl.drop_off_stop_id = wts.stop_id
10877   and     wts.stop_location_id = p_dropoff_locn_id
10878   and     wts.trip_id   = wt.trip_id;
10879   --
10880   l_pick_up_leg_count NUMBER := 0;
10881   l_drop_off_leg_count NUMBER := 0;
10882   --
10883   l_trip_name VARCHAR2(32767);
10884   l_del_name VARCHAR2(32767);
10885   --
10886   l_loc_description VARCHAR2(32767);
10887 BEGIN
10888   --
10889   --
10890   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10891   --
10892   IF l_debug_on IS NULL
10893   THEN
10894       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10895   END IF;
10896   --
10897   IF l_debug_on THEN
10898     --
10899     WSH_DEBUG_SV.push(l_module_name);
10900     WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
10901     WSH_DEBUG_SV.log(l_module_name,'p_pickup_location_id',p_pickup_location_id);
10902     WSH_DEBUG_SV.log(l_module_name,'p_dropoff_location_id',p_dropoff_location_id);
10903     --
10904   END IF;
10905   IF nvl(p_delivery_id,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
10906     --
10907     open  l_pick_up_leg_csr(p_delivery_id, p_pickup_location_id);
10908     fetch l_pick_up_leg_csr into l_trip_name, l_del_name;
10909     close l_pick_up_leg_csr;
10910     --
10911     IF l_trip_name IS NOT NULL THEN
10912       IF l_debug_on THEN
10913         WSH_DEBUG_SV.logmsg(l_module_name,'The Pickup Location is not a valid location for this Delivery');
10914       END IF;
10915       l_loc_description := wsh_util_core.get_location_description
10916                              (p_location_id  => p_pickup_location_id,
10917                               p_format       => 'NEW UI CODE');
10918       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DUP_PICKUP_LOCATION');
10919       FND_MESSAGE.SET_TOKEN('DEL_NAME',l_del_name);
10920       FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_trip_name);
10921       FND_MESSAGE.SET_TOKEN('PICKUP_LOC',l_loc_description);
10922       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10923       wsh_util_core.add_message(x_return_status);
10924       RAISE FND_API.G_EXC_ERROR;
10925     END IF;
10926     --
10927     l_trip_name := NULL;
10928     open  l_drop_off_leg_csr(p_delivery_id, p_dropoff_location_id);
10929     fetch l_drop_off_leg_csr into l_trip_name, l_del_name;
10930     close l_drop_off_leg_csr;
10931     --
10932     IF l_trip_name IS NOT NULL THEN
10933       IF l_debug_on THEN
10934         WSH_DEBUG_SV.logmsg(l_module_name,'The Dropoff Location is not a valid location for this Delivery');
10935       END IF;
10936       l_loc_description := wsh_util_core.get_location_description
10937                              (p_location_id  => p_dropoff_location_id,
10938                               p_format       => 'NEW UI CODE');
10939       FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DUP_DROPOFF_LOCATION');
10940       FND_MESSAGE.SET_TOKEN('DEL_NAME',l_del_name);
10941       FND_MESSAGE.SET_TOKEN('TRIP_NAME',l_trip_name);
10942       FND_MESSAGE.SET_TOKEN('DROPOFF_LOC',l_loc_description);
10943       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10944       wsh_util_core.add_message(x_return_status);
10945       RAISE FND_API.G_EXC_ERROR;
10946     END IF;
10947     --
10948   END IF;
10949 
10950   x_return_status := wsh_util_core.g_ret_sts_success;
10951   --
10952   IF l_debug_on THEN
10953     WSH_DEBUG_SV.logmsg(l_module_name,'These Pickup and Drop off Locations are valid for this Delivery');
10954     WSH_DEBUG_SV.pop(l_module_name);
10955   END IF;
10956   --
10957 EXCEPTION
10958     WHEN FND_API.G_EXC_ERROR THEN
10959       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10960       --
10961       IF l_debug_on THEN
10962         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10963         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10964       END IF;
10965       --
10966     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10967       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10968       --
10969       IF l_debug_on THEN
10970         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10971         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10972       END IF;
10973       --
10974     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10975       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10976       --
10977       IF l_debug_on THEN
10978         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10979         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10980       END IF;
10981       --
10982     WHEN OTHERS THEN
10983       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10984       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.CHK_DUP_PICKUP_DROPOFF_LOCNS');
10985       --
10986       IF l_debug_on THEN
10987         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10988         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10989       END IF;
10990       --
10991 END Chk_Dup_Pickup_Dropoff_Locns;
10992 
10993 -- PROCEDURE:   Check_ITM_Required (Pack J: ITM integration)
10994 -- DESCRIPTION: This procedure takes in a delivery_id, builds a query and
10995 --              calls the customizable API which appends additional criteria
10996 --              to the above query according to custom specification. Then it
10997 --              executes the query to check if the delivery requires to be
10998 --              marked for ITM screening. If it needs to be marked, return 'Y'.
10999 -- PARAMETERS:  p_delivery_id - delivery that needs to be checked for ITM.
11000 --
11001 
11002   FUNCTION Check_ITM_Required(p_delivery_id IN NUMBER,
11003                               x_return_status OUT NOCOPY VARCHAR2) RETURN VARCHAR2 IS
11004 
11005   l_strQuery VARCHAR2(12000);
11006   l_tempStr  VARCHAR2(12000);
11007   l_del_Table WSH_ITM_QUERY_CUSTOM.g_CondnValTableType;
11008   l_Item_Condn1Tab  WSH_ITM_QUERY_CUSTOM.g_ValueTableType;
11009 
11010   l_CursorID      NUMBER;
11011   l_ignore        NUMBER;
11012   v_delivery_id        NUMBER := 0;
11013   l_rows_fetched NUMBER := 0;
11014   l_exception_name varchar2(30);
11015   l_msg   varchar2(2000);
11016   l_exception_msg_count NUMBER;
11017   l_exception_msg_data varchar2(2000);
11018   l_dummy_exception_id NUMBER;
11019 
11020   --
11021   l_debug_on BOOLEAN;
11022   --
11023   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Check_ITM_Required';
11024   --
11025 
11026 
11027 BEGIN
11028   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11029   --
11030   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11031   --
11032   IF l_debug_on IS NULL
11033   THEN
11034       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11035   END IF;
11036   --
11037   IF l_debug_on THEN
11038     --
11039     WSH_DEBUG_SV.push(l_module_name);
11040     WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
11041     --
11042   END IF;
11043 
11044 
11045   -- Build query for this delivery
11046 
11047    --Bug 6676749  Modified the query to Mark the delivery for Export Compliance for Both Outbound transaction('O') and Internal Order ('IO')
11048 
11049   l_strQuery := 'select wnd.delivery_id from wsh_new_deliveries wnd ' ||
11050                 -- ' where wnd.shipment_direction = ''O'' ';
11051 	        ' where wnd.shipment_direction IN (''O'', ''IO'') ';
11052   l_Item_Condn1Tab(1).g_number_val := p_delivery_id;
11053   l_Item_Condn1Tab(1).g_Bind_Literal := ':b_delivery_id';
11054 
11055   IF l_debug_on THEN
11056      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_ITM_QUERY_CUSTOM.ADD_CONDITION',WSH_DEBUG_SV.C_PROC_LEVEL);
11057   END IF;
11058   WSH_ITM_QUERY_CUSTOM.ADD_CONDITION(l_del_Table, '  AND WND.delivery_id  = :b_delivery_id', l_Item_Condn1Tab, 'NUMBER');
11059 
11060 
11061 
11062   --Call the customized API
11063 
11064   IF l_debug_on THEN
11065      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_ITM_CUSTOMIZE.ALTER_DELIVERY_MARK',WSH_DEBUG_SV.C_PROC_LEVEL);
11066   END IF;
11067   WSH_ITM_CUSTOMIZE.ALTER_DELIVERY_MARK(l_del_Table, x_return_status);
11068 
11069   IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11070      IF l_debug_on THEN
11071         WSH_DEBUG_SV.pop(l_module_name);
11072      END IF;
11073      RETURN 'N';
11074   END IF;
11075 
11076   FOR i IN 1..l_del_Table.COUNT
11077   LOOP
11078     l_tempStr := l_tempStr || ' ' || l_del_table(i).g_Condn_Qry;
11079   END LOOP;
11080 
11081   --Concatenating Main SQL with Condition SQL
11082 
11083   l_strQuery := l_strQuery || l_tempStr;
11084 
11085   -- Parse cursor
11086 
11087   l_CursorID := DBMS_SQL.Open_Cursor;
11088   DBMS_SQL.PARSE(l_CursorID, l_strQuery,  DBMS_SQL.v7);
11089   DBMS_SQL.DEFINE_COLUMN(l_CursorID, 1, v_delivery_id);
11090 
11091   IF l_debug_on THEN
11092      WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_ITM_QUERY_CUSTOM.BIND_VALUES',WSH_DEBUG_SV.C_PROC_LEVEL);
11093   END IF;
11094   WSH_ITM_QUERY_CUSTOM.BIND_VALUES(l_del_Table, l_CursorID);
11095 
11096   l_ignore := DBMS_SQL.EXECUTE(l_CursorID);
11097 
11098   l_rows_fetched := dbms_sql.fetch_rows(l_CursorID);
11099   DBMS_SQL.CLOSE_CURSOR(l_CursorID);
11100 
11101   IF (l_rows_fetched = 0) THEN
11102 
11103      IF l_debug_on THEN
11104         WSH_DEBUG_SV.log(l_module_name,'Return','N');
11105         WSH_DEBUG_SV.pop(l_module_name);
11106      END IF;
11107 
11108      RETURN 'N';
11109 
11110   END IF;
11111 
11112   IF l_debug_on THEN
11113      WSH_DEBUG_SV.log(l_module_name,'Return','Y');
11114      WSH_DEBUG_SV.pop(l_module_name);
11115   END IF;
11116 
11117   RETURN 'Y';
11118 
11119 EXCEPTION
11120 
11121   WHEN OTHERS THEN
11122          x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11123          WSH_UTIL_CORE.add_message (x_return_status);
11124          WSH_UTIL_CORE.default_handler('WSH_DELIVERY_VALIDATIONS.Check_ITM_REQD');
11125          --
11126          IF l_debug_on THEN
11127             WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11128             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11129          END IF;
11130 END Check_ITM_REQUIRED;
11131 
11132 
11133 
11134 
11135 
11136 
11137 -- PROCEDURE:   Log_ITM_Exception (Pack J: ITM integration)
11138 -- DESCRIPTION: If the delivery need to be marked for ITM screening, log an
11139 --              exception against the delivery.
11140 -- PARAMETERS:  p_delivery_id - delivery that needs to be checked for ITM.
11141 --              p_location_id - ship from location of delivery, required when
11142 --                              loggin exceptions.
11143 --              p_action_type - Whether the check is made at 'SHIP_CONFIRM'
11144 --                              time or at 'CREATION' of delivery.
11145 
11146 PROCEDURE Log_ITM_Exception(p_delivery_id in NUMBER,
11147                             p_ship_from_location_id in NUMBER,
11148                             p_action_type in VARCHAR2,
11149                             x_return_status out nocopy VARCHAR2) IS
11150 
11151   l_exception_name varchar2(30);
11152   l_msg   varchar2(2000);
11153   l_exception_msg_count NUMBER;
11154   l_exception_msg_data varchar2(2000);
11155   l_dummy_exception_id NUMBER := NULL;
11156 
11157   --
11158   l_debug_on BOOLEAN;
11159   --
11160   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Log_ITM_Exception';
11161 
11162 BEGIN
11163 
11164     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11165     --
11166     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11167     --
11168     IF l_debug_on IS NULL
11169     THEN
11170       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11171     END IF;
11172     --
11173     IF l_debug_on THEN
11174       --
11175       WSH_DEBUG_SV.push(l_module_name);
11176       WSH_DEBUG_SV.log(l_module_name,'p_delivery_id',p_delivery_id);
11177       WSH_DEBUG_SV.log(l_module_name,'p_ship_from_location_id',p_ship_from_location_id);
11178       WSH_DEBUG_SV.log(l_module_name,'p_action_type',p_action_type);
11179       --
11180     END IF;
11181 
11182     IF p_action_type = 'SHIP_CONFIRM' THEN
11183       l_exception_name := 'WSH_SC_REQ_EXPORT_COMPL';
11184       l_msg := FND_MESSAGE.Get_String('WSH', 'WSH_SC_ITM_REQD');
11185     ELSE
11186       l_exception_name := 'WSH_PR_REQ_EXPORT_COMPL';
11187       l_msg := FND_MESSAGE.Get_String('WSH', 'WSH_PR_ITM_REQD');
11188     END IF;
11189 
11190     IF l_debug_on THEN
11191        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_xc_util.log_exception',WSH_DEBUG_SV.C_PROC_LEVEL);
11192     END IF;
11193     wsh_xc_util.log_exception(
11194                      p_api_version             => 1.0,
11195                      x_return_status           => x_return_status,
11196                      x_msg_count               => l_exception_msg_count,
11197                      x_msg_data                => l_exception_msg_data,
11198                      x_exception_id            => l_dummy_exception_id ,
11199                      p_logged_at_location_id   => p_ship_from_location_id,
11200                      p_exception_location_id   => p_ship_from_location_id,
11201                      p_logging_entity          => 'SHIPPER',
11202                      p_logging_entity_id       => FND_GLOBAL.USER_ID,
11203                      p_exception_name          => l_exception_name,
11204                      p_message                 => l_msg,
11205                      p_delivery_id             => p_delivery_id
11206                      );
11207 
11208   IF l_debug_on THEN
11209      WSH_DEBUG_SV.pop(l_module_name);
11210   END IF;
11211 
11212   EXCEPTION
11213 
11214   WHEN OTHERS THEN
11215          x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11216          WSH_UTIL_CORE.add_message (x_return_status);
11217          WSH_UTIL_CORE.default_handler('WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception');
11218          --
11219          IF l_debug_on THEN
11220             WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11221             WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11222          END IF;
11223 END Log_ITM_Exception;
11224 
11225 
11226 PROCEDURE check_exception(
11227   p_deliveries_tab           IN wsh_util_core.id_tab_type
11228 , x_exceptions_exist          OUT NOCOPY  VARCHAR2
11229 , x_exceptions_tab           OUT NOCOPY  wsh_delivery_validations.exception_rec_Tab_type
11230 , x_return_status            OUT NOCOPY  VARCHAR2)
11231 IS
11232   --
11233   l_debug_on BOOLEAN;
11234   --
11235   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'check_exception';
11236 
11237   CURSOR c_check_exception (p_delivery_id in number) IS
11238   SELECT severity, delivery_id, exception_id
11239   FROM   wsh_exceptions
11240   WHERE  delivery_id = p_delivery_id
11241   AND    status not in ('NOT_HANDLED' , 'NO_ACTION_REQUIRED' , 'CLOSED')
11242   ORDER BY decode (severity,  'HIGH',   1,
11243                               'MEDIUM', 2,
11244                                3);
11245 l_exception_rec   c_check_exception%rowtype;
11246 l_count NUMBER := 0;
11247 
11248 BEGIN
11249     --
11250     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11251     --
11252     IF l_debug_on IS NULL
11253     THEN
11254       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11255     END IF;
11256     --
11257     IF l_debug_on THEN
11258       --
11259       WSH_DEBUG_SV.push(l_module_name);
11260       --
11261     END IF;
11262 
11263     x_exceptions_exist := 'N';
11264     x_return_Status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11265 
11266     For i in 1 .. p_deliveries_tab.count LOOP
11267 
11268          Open c_check_exception(p_deliveries_Tab(i));
11269          FETCH c_check_exception into l_exception_rec;
11270          IF c_check_exception%FOUND THEN
11271 
11272             l_count := l_count + 1;
11273             x_exceptions_tab(l_count).delivery_id := l_exception_rec.delivery_id;
11274             x_exceptions_tab(l_count).severity := l_exception_rec.severity;
11275             x_exceptions_tab(l_count).exception_id := l_exception_rec.exception_id;
11276             x_exceptions_exist := 'Y';
11277 
11278          END IF;
11279          CLOSE c_check_exception;
11280 
11281      END LOOP;
11282 
11283      IF l_debug_on THEN
11284        WSH_DEBUG_SV.pop(l_module_name);
11285      END IF;
11286 
11287 EXCEPTION
11288    WHEN others THEN
11289         IF c_check_exception%isopen then
11290            Close c_check_exception;
11291         END IF;
11292         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11293         WSH_UTIL_CORE.default_handler('WSH_DELIVERY_VALIDATIONS.check_exception','WSH_DELIVERY_VALIDATIONS');
11294         IF l_debug_on THEN
11295           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11296           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11297         END IF;
11298 --
11299 END check_exception;
11300 
11301 -- J-IB-NPARIKH-{
11302 --
11303 --
11304 -- ----------------------------------------------------------------------
11305 -- Function :   has_lines
11306 -- Parameters:  p_delivery_id in  number
11307 --              returns varchar2
11308 --                  'Y' -- Has non-container lines
11309 --                  'N' -- Does not have any non-container lines
11310 -- Description: Checks if delivery has any non-container lines
11311 --  ----------------------------------------------------------------------
11312 FUNCTION has_lines
11313             (
11314                p_delivery_id      IN              NUMBER
11315             )
11316 RETURN VARCHAR2
11317 IS
11318 --{
11319     -- Check if delivery has any lines with container flag = 'N'
11320     --
11321     CURSOR line_csr (p_delivery_id IN NUMBER)
11322     IS
11323         SELECT 'Y'
11324         FROM   wsh_delivery_details wdd,
11325                wsh_delivery_assignments_v wda
11326         WHERE  wdd.delivery_detail_id      = wda.delivery_detail_id
11327         AND    wda.delivery_id             = p_delivery_id
11328         AND    NVL(wdd.container_flag,'N') = 'N'
11329         AND    rownum                      = 1;
11330     --
11331     --
11332     l_debug_on                    BOOLEAN;
11333     --
11334     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'has_lines';
11335     --
11336     l_has_lines  VARCHAR2(1);
11337 --}
11338 BEGIN
11339 --{
11340     --
11341     l_debug_on := wsh_debug_interface.g_debug;
11342     --
11343     IF l_debug_on IS NULL THEN
11344       l_debug_on := wsh_debug_sv.is_debug_enabled;
11345     END IF;
11346     --
11347     IF l_debug_on THEN
11348       wsh_debug_sv.push(l_module_name);
11349       --
11350       wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
11351     END IF;
11352     --
11353     --
11354     l_has_lines := 'N';
11355     --
11356     OPEN  line_csr (p_delivery_id);
11357     FETCH line_csr INTO l_has_lines;
11358     CLOSE line_csr;
11359     --
11360     --
11361     IF l_debug_on THEN
11362       wsh_debug_sv.pop(l_module_name);
11363     END IF;
11364     --
11365     RETURN(l_has_lines);
11366 --}
11367 EXCEPTION
11368    WHEN OTHERS THEN
11369       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.has_lines',l_module_name);
11370       --
11371       IF l_debug_on THEN
11372         wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
11373       END IF;
11374       --
11375       RAISE;
11376 --
11377 END has_lines;
11378 --
11379 --
11380 --
11381 --========================================================================
11382 -- PROCEDURE : check_inTransit
11383 --
11384 -- PARAMETERS: p_in_rec          Delivery information record
11385 --                x_allowed      Set to In-transit operation is allowed or not
11386 --                                    'Y' : Allowed
11387 --                                    'YW': Allowed with warnings
11388 --                                    'N' : Not Allowed
11389 --                                    'NW': Not Allowed with warnings
11390 --             x_return_status   Return status of the API
11391 --
11392 --
11393 -- COMMENT   : Check if delivery can be set to in-transit.
11394 --
11395 --             It performs the following steps:
11396 --             01. Check that delivery status is CO/IT
11397 --             02. Check for delivery exceptions (Pack J)
11398 --
11399 --========================================================================
11400 --
11401 PROCEDURE check_inTransit
11402             (
11403                p_in_rec             IN         ChgStatus_in_rec_type,
11404                x_return_status      OUT NOCOPY VARCHAR2,
11405                x_allowed            OUT NOCOPY VARCHAR2
11406             )
11407 IS
11408 --{
11409     l_num_warnings          NUMBER;
11410     l_num_errors            NUMBER;
11411 
11412     -- Exception variables
11413     l_exceptions_tab  wsh_xc_util.XC_TAB_TYPE;
11414     l_exp_logged      BOOLEAN := FALSE;
11415     l_msg_count       NUMBER;
11416     l_msg_data        VARCHAR2(4000);
11417     l_return_status   VARCHAR2(1);
11418     l_exp_warning     BOOLEAN := FALSE;
11419 
11420     --
11421     l_debug_on                    BOOLEAN;
11422     --
11423     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'check_inTransit';
11424 --}
11425 BEGIN
11426 --{
11427     --
11428     l_debug_on := wsh_debug_interface.g_debug;
11429     --
11430     IF l_debug_on IS NULL THEN
11431       l_debug_on := wsh_debug_sv.is_debug_enabled;
11432     END IF;
11433     --
11434     IF l_debug_on THEN
11435       wsh_debug_sv.push(l_module_name);
11436       --
11437       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
11438       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name        ', p_in_rec.name        );
11439       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
11440       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
11441       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
11442       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller      ', p_in_rec.caller      );
11443       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
11444       wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id     ', p_in_rec.stop_id     );
11445     END IF;
11446     --
11447     --
11448     l_num_warnings  := 0;
11449     l_num_errors    := 0;
11450     --
11451     IF NVL(p_in_rec.status_code,'!!') NOT IN ('CO','IT')
11452     THEN
11453     --{
11454         IF p_in_rec.put_messages
11455         THEN
11456         --{
11457              FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INTRANSIT_ERROR');
11458              FND_MESSAGE.SET_TOKEN('DEL_NAME',p_in_rec.name);
11459              wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
11460         --}
11461         END IF;
11462         --
11463         RAISE wsh_util_core.e_not_allowed;
11464     --}
11465     END IF;
11466     --
11467     --
11468 
11469     -- Check for Exceptions against Delivery and its Contents
11470     IF l_debug_on THEN
11471        WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);    END IF;
11472     l_exceptions_tab.delete;
11473     l_exp_logged      := FALSE;
11474     l_exp_warning     := FALSE;
11475     WSH_XC_UTIL.Check_Exceptions (
11476                                      p_api_version           => 1.0,
11477                                      x_return_status         => l_return_status,
11478                                      x_msg_count             => l_msg_count,
11479                                      x_msg_data              => l_msg_data,
11480                                      p_logging_entity_id     => p_in_rec.delivery_id,
11481                                      p_logging_entity_name   => 'DELIVERY',
11482                                      p_consider_content      => 'Y',
11483                                      x_exceptions_tab        => l_exceptions_tab
11484                                    );
11485     IF ( l_return_status <>  WSH_UTIL_CORE.G_RET_STS_SUCCESS )  THEN
11486          x_return_status := l_return_status;
11487          wsh_util_core.add_message(x_return_status);
11488          RAISE FND_API.G_EXC_ERROR;
11489     END IF;
11490     FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
11491          IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
11492             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
11493                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
11494             ELSE
11495                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
11496             END IF;
11497             FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
11498             FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
11499             FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Error');
11500             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11501             wsh_util_core.add_message(x_return_status);
11502             l_num_warnings := l_num_warnings + 1 ;
11503             RAISE wsh_util_core.e_not_allowed;
11504          ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
11505             IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
11506                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
11507                FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
11508                FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
11509                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
11510                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
11511                wsh_util_core.add_message(x_return_status);
11512                l_num_warnings := l_num_warnings + 1 ;
11513                l_exp_warning := TRUE;
11514             ELSIF NOT (l_exp_logged) THEN
11515                FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
11516                FND_MESSAGE.SET_TOKEN('ENTITY_NAME','Delivery');
11517                FND_MESSAGE.SET_TOKEN('ENTITY_ID',l_exceptions_tab(exp_cnt).entity_id);
11518                FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR','Warning');
11519                x_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
11520                l_exp_logged := TRUE;
11521                wsh_util_core.add_message(x_return_status);
11522                l_num_warnings := l_num_warnings + 1 ;
11523                l_exp_warning := TRUE;
11524             END IF;
11525          END IF;
11526     END LOOP;
11527 
11528    --
11529    --
11530    IF l_num_errors > 0
11531    THEN
11532         x_return_status         := WSH_UTIL_CORE.G_RET_STS_ERROR;
11533         x_allowed               := 'N';
11534    ELSIF l_num_warnings > 0
11535    THEN
11536         x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11537    ELSE
11538         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11539    END IF;
11540    --
11541    --
11542    -- If Exceptions have warnings, then display warnings but allow to proceed
11543    IF l_exp_warning THEN
11544       x_allowed := 'YW';
11545    ELSE
11546       x_allowed := 'Y';
11547    END IF;
11548     --
11549     -- Debug Statements
11550     --
11551     IF l_debug_on THEN
11552         WSH_DEBUG_SV.pop(l_module_name);
11553     END IF;
11554     --
11555 --
11556 EXCEPTION
11557 --{
11558     WHEN wsh_util_core.e_not_allowed THEN
11559       IF l_num_warnings > 0
11560       THEN
11561           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11562       ELSE
11563           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11564       END IF;
11565       --
11566       x_allowed       := 'N';
11567       --
11568       --
11569       IF l_debug_on THEN
11570         WSH_DEBUG_SV.logmsg(l_module_name,'wsh_util_core.e_not_allowed exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11571         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:wsh_util_core.e_not_allowed');
11572       END IF;
11573       --
11574     WHEN wsh_util_core.e_not_allowed_warning THEN
11575       IF l_num_warnings > 0
11576       THEN
11577           x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11578       ELSE
11579           x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11580       END IF;
11581       --
11582       x_allowed := 'NW';
11583       --
11584       --
11585       IF l_debug_on THEN
11586         WSH_DEBUG_SV.logmsg(l_module_name,'wsh_util_core.e_not_allowed_warning exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11587         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:wsh_util_core.e_not_allowed_warning');
11588       END IF;
11589       --
11590     WHEN FND_API.G_EXC_ERROR THEN
11591 
11592       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11593       --
11594       IF l_debug_on THEN
11595         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11596         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
11597       END IF;
11598       --
11599     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11600 
11601       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
11602       --
11603       IF l_debug_on THEN
11604         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11605         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11606       END IF;
11607       --
11608     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
11609       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11610       --
11611       IF l_debug_on THEN
11612         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11613         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
11614       END IF;
11615       --
11616     WHEN OTHERS THEN
11617 
11618       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
11619       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.check_inTransit',l_module_name);
11620       --
11621       IF l_debug_on THEN
11622         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11623       END IF;
11624       --
11625 --}
11626 END check_inTransit;
11627 --
11628 --
11629 --
11630 --========================================================================
11631 -- PROCEDURE : get_shipping_control
11632 --
11633 -- PARAMETERS: p_delivery_id           Delivery ID
11634 --             x_shipping_control      Shipping control for delivery
11635 --             x_routing_response_id   Routing response ID for delivery
11636 --             x_routing_request_flag  Indicates if routing request was received for delivery lines(Y/N)
11637 --             x_return_status         Return status of the API
11638 --
11639 --
11640 -- COMMENT   : This procedure returns inbound-specific attributes for the delivery.
11641 --
11642 --========================================================================
11643 --
11644 PROCEDURE get_shipping_control
11645             (
11646                p_delivery_id            IN         NUMBER,
11647                x_shipping_control       OUT NOCOPY VARCHAR2,
11648                x_routing_response_id    OUT NOCOPY NUMBER,
11649                x_routing_request_flag   OUT NOCOPY VARCHAR2,
11650                x_return_status          OUT NOCOPY VARCHAR2
11651             )
11652 IS
11653 --{
11654     -- Get delivery info.
11655     CURSOR dlvy_csr (p_delivery_id NUMBER)
11656     IS
11657         SELECT shipping_control, routing_response_id
11658         FROM   WSH_NEW_DELIVERIES
11659         WHERE  delivery_id = p_delivery_id;
11660     --
11661     l_dlvy_rec              dlvy_csr%ROWTYPE;
11662     --
11663     -- Check if any routing request id is not null for any delivery line.
11664     --
11665     CURSOR line_csr(p_delivery_id NUMBER)
11666     IS
11667         SELECT 'Y'
11668         FROM   wsh_delivery_details wdd,
11669                wsh_delivery_assignments_v wda
11670         WHERE  wda.delivery_id             = p_delivery_id
11671         AND    wdd.delivery_detail_id      = wda.delivery_detail_id
11672         AND    NVL(wdd.container_flag,'N') = 'N'
11673         AND    routing_req_id              IS NOT NULL
11674         AND    rownum                      = 1;
11675     --
11676     l_num_warnings          NUMBER;
11677     l_num_errors            NUMBER;
11678     --
11679     l_debug_on                    BOOLEAN;
11680     --
11681     l_module_name        CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'get_shipping_control';
11682 --}
11683 BEGIN
11684 --{
11685     --
11686     l_debug_on := wsh_debug_interface.g_debug;
11687     --
11688     IF l_debug_on IS NULL THEN
11689       l_debug_on := wsh_debug_sv.is_debug_enabled;
11690     END IF;
11691     --
11692     IF l_debug_on THEN
11693       wsh_debug_sv.push(l_module_name);
11694       --
11695       wsh_debug_sv.LOG(l_module_name, 'p_DELIVERY_ID ', p_delivery_id );
11696     END IF;
11697     --
11698     --
11699     l_num_warnings  := 0;
11700     l_num_errors    := 0;
11701     --
11702     OPEN dlvy_csr (p_delivery_id);
11703     --
11704     FETCH dlvy_csr INTO l_dlvy_rec;
11705     --
11706     IF dlvy_csr%NOTFOUND
11707     THEN
11708     --{
11709         FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_DELIVERY');
11710         FND_MESSAGE.SET_TOKEN('DELIVERY_ID',p_delivery_id);
11711         wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
11712         --CLOSE dlvy_csr;
11713         RAISE FND_API.G_EXC_ERROR;
11714     --}
11715     END IF;
11716     --
11717     CLOSE dlvy_csr;
11718     --
11719     IF l_debug_on THEN
11720       wsh_debug_sv.LOG(l_module_name, 'l_dlvy_rec.shipping_control ', l_dlvy_rec.shipping_control );
11721       wsh_debug_sv.LOG(l_module_name, 'l_dlvy_rec.routing_response_id ', l_dlvy_rec.routing_response_id );
11722     END IF;
11723     --
11724     --
11725     x_shipping_control       := l_dlvy_rec.shipping_control;
11726     x_routing_response_id    := l_dlvy_rec.routing_response_id;
11727     --
11728     IF l_dlvy_rec.shipping_control = 'SUPPLIER'
11729     THEN
11730         x_routing_request_flag   := 'N';
11731     ELSE
11732     --{
11733         -- Check if any routing request id is not null for any delivery line.
11734         -- If No, routing request was not received for delivery lines.
11735         --
11736         OPEN line_csr(p_delivery_id);
11737         --
11738         FETCH line_csr INTO x_routing_request_flag;
11739         --
11740         IF line_csr%NOTFOUND
11741         THEN
11742             x_routing_request_flag   := 'N';
11743             --
11744             IF l_debug_on THEN
11745               wsh_debug_sv.LOGMSG(l_module_name, 'No Lines with Routing request' );
11746             END IF;
11747         ELSE
11748             x_routing_request_flag   := 'Y';
11749             --
11750             IF l_debug_on THEN
11751               wsh_debug_sv.LOGMSG(l_module_name, 'At least one Line with Routing request' );
11752             END IF;
11753         END IF;
11754         --
11755         CLOSE line_csr;
11756     --}
11757     END IF;
11758     --
11759     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11760     --
11761     -- Debug Statements
11762     --
11763     IF l_debug_on THEN
11764         WSH_DEBUG_SV.pop(l_module_name);
11765     END IF;
11766     --
11767 --}
11768 EXCEPTION
11769 --{
11770     WHEN FND_API.G_EXC_ERROR THEN
11771 
11772       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11773       --
11774       IF l_debug_on THEN
11775         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11776         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
11777       END IF;
11778       --
11779     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11780 
11781       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
11782       --
11783       IF l_debug_on THEN
11784         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11785         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11786       END IF;
11787       --
11788     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
11789       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
11790       --
11791       IF l_debug_on THEN
11792         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11793         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
11794       END IF;
11795       --
11796     WHEN OTHERS THEN
11797 
11798       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
11799       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.get_shipping_control',l_module_name);
11800       --
11801       IF l_debug_on THEN
11802         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11803       END IF;
11804       --
11805 --}
11806 END get_shipping_control;
11807 --
11808 --
11809 -- J-IB-NPARIKH-}
11810 
11811 --3509004:public api change
11812 PROCEDURE   user_non_updatable_columns
11813      (p_user_in_rec     IN WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type,
11814       p_out_rec         IN WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type,
11815       p_in_rec          IN WSH_DELIVERIES_GRP.Del_In_Rec_Type,
11816       x_return_status   OUT NOCOPY    VARCHAR2)
11817 
11818 IS
11819 l_attributes VARCHAR2(2500) ;
11820 k         number;
11821 l_return_status VARCHAR2(1);
11822 l_debug_on BOOLEAN;
11823 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'user_non_updatable_columns';
11824 
11825 BEGIN
11826 
11827   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11828   --
11829   IF l_debug_on IS NULL
11830   THEN
11831       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11832   END IF;
11833   --
11834   IF l_debug_on THEN
11835     --
11836     WSH_DEBUG_SV.push(l_module_name);
11837     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.caller',p_in_rec.caller);
11838     --
11839   END IF;
11840   --
11841   x_return_status := FND_API.G_RET_STS_SUCCESS;
11842   --
11843   IF     p_user_in_rec.DELIVERY_ID <> FND_API.G_MISS_NUM
11844       AND NVL(p_user_in_rec.DELIVERY_ID,-99) <> NVL(p_out_rec.DELIVERY_ID,-99)
11845   THEN
11846        l_attributes := l_attributes || 'DELIVERY_ID, ';
11847   END IF;
11848 
11849   IF     p_user_in_rec.NAME <> FND_API.G_MISS_CHAR
11850       AND NVL(p_user_in_rec.NAME,'!!!') <> NVL(p_out_rec.NAME,'!!!')
11851   THEN
11852        l_attributes := l_attributes || 'NAME, ';
11853   END IF;
11854 
11855   IF     p_user_in_rec.PLANNED_FLAG <> FND_API.G_MISS_CHAR
11856       AND NVL(p_user_in_rec.PLANNED_FLAG,'!!!') <> NVL(p_out_rec.PLANNED_FLAG,'!!!')
11857   THEN
11858        l_attributes := l_attributes || 'PLANNED_FLAG, ';
11859   END IF;
11860 
11861   IF     p_user_in_rec.STATUS_CODE <> FND_API.G_MISS_CHAR
11862       AND NVL(p_user_in_rec.STATUS_CODE,'!!!') <> NVL(p_out_rec.STATUS_CODE,'!!!')
11863   THEN
11864        l_attributes := l_attributes || 'STATUS_CODE, ';
11865   END IF;
11866 
11867   IF     p_user_in_rec.DELIVERY_TYPE <> FND_API.G_MISS_CHAR
11868       AND NVL(p_user_in_rec.DELIVERY_TYPE,'!!!') <> NVL(p_out_rec.DELIVERY_TYPE,'!!!')
11869   THEN
11870        l_attributes := l_attributes || 'DELIVERY_TYPE, ';
11871   END IF;
11872 
11873   IF     p_user_in_rec.LOADING_SEQUENCE <> FND_API.G_MISS_NUM
11874       AND NVL(p_user_in_rec.LOADING_SEQUENCE,-99) <> NVL(p_out_rec.LOADING_SEQUENCE,-99)
11875   THEN
11876        l_attributes := l_attributes || 'LOADING_SEQUENCE, ';
11877   END IF;
11878 
11879   IF     p_user_in_rec.LOADING_ORDER_FLAG <> FND_API.G_MISS_CHAR
11880       AND NVL(p_user_in_rec.LOADING_ORDER_FLAG,'!!!') <> NVL(p_out_rec.LOADING_ORDER_FLAG,'!!!')
11881   THEN
11882        l_attributes := l_attributes || 'LOADING_ORDER_FLAG, ';
11883   END IF;
11884 
11885   IF     p_user_in_rec.INITIAL_PICKUP_DATE <> FND_API.G_MISS_DATE
11886       AND NVL(p_user_in_rec.INITIAL_PICKUP_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.INITIAL_PICKUP_DATE,TO_DATE('2','j'))
11887   THEN
11888        l_attributes := l_attributes || 'INITIAL_PICKUP_DATE, ';
11889   END IF;
11890 
11891   IF     p_user_in_rec.INITIAL_PICKUP_LOCATION_ID <> FND_API.G_MISS_NUM
11892       AND NVL(p_user_in_rec.INITIAL_PICKUP_LOCATION_ID,-99) <> NVL(p_out_rec.INITIAL_PICKUP_LOCATION_ID,-99)
11893   THEN
11894        l_attributes := l_attributes || 'INITIAL_PICKUP_LOCATION_ID, ';
11895   END IF;
11896 
11897   IF     p_user_in_rec.ORGANIZATION_ID <> FND_API.G_MISS_NUM
11898       AND NVL(p_user_in_rec.ORGANIZATION_ID,-99) <> NVL(p_out_rec.ORGANIZATION_ID,-99)
11899   THEN
11900        l_attributes := l_attributes || 'ORGANIZATION_ID, ';
11901   END IF;
11902 
11903   IF     p_user_in_rec.ULTIMATE_DROPOFF_LOCATION_ID <> FND_API.G_MISS_NUM
11904       AND NVL(p_user_in_rec.ULTIMATE_DROPOFF_LOCATION_ID,-99) <> NVL(p_out_rec.ULTIMATE_DROPOFF_LOCATION_ID,-99)
11905   THEN
11906        l_attributes := l_attributes || 'ULTIMATE_DROPOFF_LOCATION_ID, ';
11907   END IF;
11908 
11909   IF     p_user_in_rec.ULTIMATE_DROPOFF_DATE <> FND_API.G_MISS_DATE
11910       AND NVL(p_user_in_rec.ULTIMATE_DROPOFF_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.ULTIMATE_DROPOFF_DATE,TO_DATE('2','j'))
11911   THEN
11912        l_attributes := l_attributes || 'ULTIMATE_DROPOFF_DATE, ';
11913   END IF;
11914 
11915   IF     p_user_in_rec.CUSTOMER_ID <> FND_API.G_MISS_NUM
11916       AND NVL(p_user_in_rec.CUSTOMER_ID,-99) <> NVL(p_out_rec.CUSTOMER_ID,-99)
11917   THEN
11918        l_attributes := l_attributes || 'CUSTOMER_ID, ';
11919   END IF;
11920 
11921   IF     p_user_in_rec.INTMED_SHIP_TO_LOCATION_ID <> FND_API.G_MISS_NUM
11922       AND NVL(p_user_in_rec.INTMED_SHIP_TO_LOCATION_ID,-99) <> NVL(p_out_rec.INTMED_SHIP_TO_LOCATION_ID,-99)
11923   THEN
11924        l_attributes := l_attributes || 'INTMED_SHIP_TO_LOCATION_ID, ';
11925   END IF;
11926 
11927   IF     p_user_in_rec.POOLED_SHIP_TO_LOCATION_ID <> FND_API.G_MISS_NUM
11928       AND NVL(p_user_in_rec.POOLED_SHIP_TO_LOCATION_ID,-99) <> NVL(p_out_rec.POOLED_SHIP_TO_LOCATION_ID,-99)
11929   THEN
11930        l_attributes := l_attributes || 'POOLED_SHIP_TO_LOCATION_ID, ';
11931   END IF;
11932 
11933   IF     p_user_in_rec.CARRIER_ID <> FND_API.G_MISS_NUM
11934       AND NVL(p_user_in_rec.CARRIER_ID,-99) <> NVL(p_out_rec.CARRIER_ID,-99)
11935   THEN
11936        l_attributes := l_attributes || 'CARRIER_ID, ';
11937   END IF;
11938 
11939   IF     p_user_in_rec.SHIP_METHOD_CODE <> FND_API.G_MISS_CHAR
11940       AND NVL(p_user_in_rec.SHIP_METHOD_CODE,'!!!') <> NVL(p_out_rec.SHIP_METHOD_CODE,'!!!')
11941   THEN
11942        l_attributes := l_attributes || 'SHIP_METHOD_CODE, ';
11943   END IF;
11944 
11945   IF     p_user_in_rec.FREIGHT_TERMS_CODE <> FND_API.G_MISS_CHAR
11946       AND NVL(p_user_in_rec.FREIGHT_TERMS_CODE,'!!!') <> NVL(p_out_rec.FREIGHT_TERMS_CODE,'!!!')
11947   THEN
11948        l_attributes := l_attributes || 'FREIGHT_TERMS_CODE, ';
11949   END IF;
11950 
11951   IF     p_user_in_rec.FOB_CODE <> FND_API.G_MISS_CHAR
11952       AND NVL(p_user_in_rec.FOB_CODE,'!!!') <> NVL(p_out_rec.FOB_CODE,'!!!')
11953   THEN
11954        l_attributes := l_attributes || 'FOB_CODE, ';
11955   END IF;
11956 
11957   IF     p_user_in_rec.FOB_LOCATION_ID <> FND_API.G_MISS_NUM
11958       AND NVL(p_user_in_rec.FOB_LOCATION_ID,-99) <> NVL(p_out_rec.FOB_LOCATION_ID,-99)
11959   THEN
11960        l_attributes := l_attributes || 'FOB_LOCATION_ID, ';
11961   END IF;
11962 
11963   IF     p_user_in_rec.WAYBILL <> FND_API.G_MISS_CHAR
11964       AND NVL(p_user_in_rec.WAYBILL,'!!!') <> NVL(p_out_rec.WAYBILL,'!!!')
11965   THEN
11966        l_attributes := l_attributes || 'WAYBILL, ';
11967   END IF;
11968 
11969   IF     p_user_in_rec.DOCK_CODE <> FND_API.G_MISS_CHAR
11970       AND NVL(p_user_in_rec.DOCK_CODE,'!!!') <> NVL(p_out_rec.DOCK_CODE,'!!!')
11971   THEN
11972        l_attributes := l_attributes || 'DOCK_CODE, ';
11973   END IF;
11974 
11975   IF     p_user_in_rec.ACCEPTANCE_FLAG <> FND_API.G_MISS_CHAR
11976       AND NVL(p_user_in_rec.ACCEPTANCE_FLAG,'!!!') <> NVL(p_out_rec.ACCEPTANCE_FLAG,'!!!')
11977   THEN
11978        l_attributes := l_attributes || 'ACCEPTANCE_FLAG, ';
11979   END IF;
11980 
11981   IF     p_user_in_rec.ACCEPTED_BY <> FND_API.G_MISS_CHAR
11982       AND NVL(p_user_in_rec.ACCEPTED_BY,'!!!') <> NVL(p_out_rec.ACCEPTED_BY,'!!!')
11983   THEN
11984        l_attributes := l_attributes || 'ACCEPTED_BY, ';
11985   END IF;
11986 
11987   IF     p_user_in_rec.ACCEPTED_DATE <> FND_API.G_MISS_DATE
11988       AND NVL(p_user_in_rec.ACCEPTED_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.ACCEPTED_DATE,TO_DATE('2','j'))
11989   THEN
11990        l_attributes := l_attributes || 'ACCEPTED_DATE, ';
11991   END IF;
11992 
11993   IF     p_user_in_rec.ACKNOWLEDGED_BY <> FND_API.G_MISS_CHAR
11994       AND NVL(p_user_in_rec.ACKNOWLEDGED_BY,'!!!') <> NVL(p_out_rec.ACKNOWLEDGED_BY,'!!!')
11995   THEN
11996        l_attributes := l_attributes || 'ACKNOWLEDGED_BY, ';
11997   END IF;
11998 
11999   IF     p_user_in_rec.CONFIRMED_BY <> FND_API.G_MISS_CHAR
12000       AND NVL(p_user_in_rec.CONFIRMED_BY,'!!!') <> NVL(p_out_rec.CONFIRMED_BY,'!!!')
12001   THEN
12002        l_attributes := l_attributes || 'CONFIRMED_BY, ';
12003   END IF;
12004 
12005   IF     p_user_in_rec.CONFIRM_DATE <> FND_API.G_MISS_DATE
12006       AND NVL(p_user_in_rec.CONFIRM_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.CONFIRM_DATE,TO_DATE('2','j'))
12007   THEN
12008        l_attributes := l_attributes || 'CONFIRM_DATE, ';
12009   END IF;
12010 
12011   IF     p_user_in_rec.ASN_DATE_SENT <> FND_API.G_MISS_DATE
12012       AND NVL(p_user_in_rec.ASN_DATE_SENT,TO_DATE('2','j')) <> NVL(p_out_rec.ASN_DATE_SENT,TO_DATE('2','j'))
12013   THEN
12014        l_attributes := l_attributes || 'ASN_DATE_SENT, ';
12015   END IF;
12016 
12017   IF     p_user_in_rec.ASN_STATUS_CODE <> FND_API.G_MISS_CHAR
12018       AND NVL(p_user_in_rec.ASN_STATUS_CODE,'!!!') <> NVL(p_out_rec.ASN_STATUS_CODE,'!!!')
12019   THEN
12020        l_attributes := l_attributes || 'ASN_STATUS_CODE, ';
12021   END IF;
12022 
12023   IF     p_user_in_rec.ASN_SEQ_NUMBER <> FND_API.G_MISS_NUM
12024       AND NVL(p_user_in_rec.ASN_SEQ_NUMBER,-99) <> NVL(p_out_rec.ASN_SEQ_NUMBER,-99)
12025   THEN
12026        l_attributes := l_attributes || 'ASN_SEQ_NUMBER, ';
12027   END IF;
12028 
12029   IF     p_user_in_rec.GROSS_WEIGHT <> FND_API.G_MISS_NUM
12030       AND NVL(p_user_in_rec.GROSS_WEIGHT,-99) <> NVL(p_out_rec.GROSS_WEIGHT,-99)
12031   THEN
12032        l_attributes := l_attributes || 'GROSS_WEIGHT, ';
12033   END IF;
12034 
12035   IF     p_user_in_rec.NET_WEIGHT <> FND_API.G_MISS_NUM
12036       AND NVL(p_user_in_rec.NET_WEIGHT,-99) <> NVL(p_out_rec.NET_WEIGHT,-99)
12037   THEN
12038        l_attributes := l_attributes || 'NET_WEIGHT, ';
12039   END IF;
12040   -- Non Database field prorate_wt_flag added for "Proration of weight from Delivery to delivery lines" Project(Bug#4254552).
12041   IF     p_user_in_rec.PRORATE_WT_FLAG <> FND_API.G_MISS_CHAR
12042       AND NVL(p_user_in_rec.PRORATE_WT_FLAG,'!!!') <> NVL(p_out_rec.PRORATE_WT_FLAG,'!!!')
12043   THEN
12044        l_attributes := l_attributes || 'PRORATE_WT_FLAG, ';
12045   END IF;
12046   --
12047   IF     p_user_in_rec.WEIGHT_UOM_CODE <> FND_API.G_MISS_CHAR
12048       AND NVL(p_user_in_rec.WEIGHT_UOM_CODE,'!!!') <> NVL(p_out_rec.WEIGHT_UOM_CODE,'!!!')
12049   THEN
12050        l_attributes := l_attributes || 'WEIGHT_UOM_CODE, ';
12051   END IF;
12052 
12053   IF     p_user_in_rec.VOLUME <> FND_API.G_MISS_NUM
12054       AND NVL(p_user_in_rec.VOLUME,-99) <> NVL(p_out_rec.VOLUME,-99)
12055   THEN
12056        l_attributes := l_attributes || 'VOLUME, ';
12057   END IF;
12058 
12059   IF     p_user_in_rec.VOLUME_UOM_CODE <> FND_API.G_MISS_CHAR
12060       AND NVL(p_user_in_rec.VOLUME_UOM_CODE,'!!!') <> NVL(p_out_rec.VOLUME_UOM_CODE,'!!!')
12061   THEN
12062        l_attributes := l_attributes || 'VOLUME_UOM_CODE, ';
12063   END IF;
12064 
12065   IF     p_user_in_rec.ADDITIONAL_SHIPMENT_INFO <> FND_API.G_MISS_CHAR
12066       AND NVL(p_user_in_rec.ADDITIONAL_SHIPMENT_INFO,'!!!') <> NVL(p_out_rec.ADDITIONAL_SHIPMENT_INFO,'!!!')
12067   THEN
12068        l_attributes := l_attributes || 'ADDITIONAL_SHIPMENT_INFO, ';
12069   END IF;
12070 
12071   IF     p_user_in_rec.CURRENCY_CODE <> FND_API.G_MISS_CHAR
12072       AND NVL(p_user_in_rec.CURRENCY_CODE,'!!!') <> NVL(p_out_rec.CURRENCY_CODE,'!!!')
12073   THEN
12074        l_attributes := l_attributes || 'CURRENCY_CODE, ';
12075   END IF;
12076 
12077   IF     p_user_in_rec.ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
12078       AND NVL(p_user_in_rec.ATTRIBUTE_CATEGORY,'!!!') <> NVL(p_out_rec.ATTRIBUTE_CATEGORY,'!!!')
12079   THEN
12080        l_attributes := l_attributes || 'ATTRIBUTE_CATEGORY, ';
12081   END IF;
12082 
12083   IF     p_user_in_rec.ATTRIBUTE1 <> FND_API.G_MISS_CHAR
12084       AND NVL(p_user_in_rec.ATTRIBUTE1,'!!!') <> NVL(p_out_rec.ATTRIBUTE1,'!!!')
12085   THEN
12086        l_attributes := l_attributes || 'ATTRIBUTE1, ';
12087   END IF;
12088 
12089   IF     p_user_in_rec.ATTRIBUTE2 <> FND_API.G_MISS_CHAR
12090       AND NVL(p_user_in_rec.ATTRIBUTE2,'!!!') <> NVL(p_out_rec.ATTRIBUTE2,'!!!')
12091   THEN
12092        l_attributes := l_attributes || 'ATTRIBUTE2, ';
12093   END IF;
12094 
12095   IF     p_user_in_rec.ATTRIBUTE3 <> FND_API.G_MISS_CHAR
12096       AND NVL(p_user_in_rec.ATTRIBUTE3,'!!!') <> NVL(p_out_rec.ATTRIBUTE3,'!!!')
12097   THEN
12098        l_attributes := l_attributes || 'ATTRIBUTE3, ';
12099   END IF;
12100 
12101   IF     p_user_in_rec.ATTRIBUTE4 <> FND_API.G_MISS_CHAR
12102       AND NVL(p_user_in_rec.ATTRIBUTE4,'!!!') <> NVL(p_out_rec.ATTRIBUTE4,'!!!')
12103   THEN
12104        l_attributes := l_attributes || 'ATTRIBUTE4, ';
12105   END IF;
12106 
12107   IF     p_user_in_rec.ATTRIBUTE5 <> FND_API.G_MISS_CHAR
12108       AND NVL(p_user_in_rec.ATTRIBUTE5,'!!!') <> NVL(p_out_rec.ATTRIBUTE5,'!!!')
12109   THEN
12110        l_attributes := l_attributes || 'ATTRIBUTE5, ';
12111   END IF;
12112 
12113   IF     p_user_in_rec.ATTRIBUTE6 <> FND_API.G_MISS_CHAR
12114       AND NVL(p_user_in_rec.ATTRIBUTE6,'!!!') <> NVL(p_out_rec.ATTRIBUTE6,'!!!')
12115   THEN
12116        l_attributes := l_attributes || 'ATTRIBUTE6, ';
12117   END IF;
12118 
12119   IF     p_user_in_rec.ATTRIBUTE7 <> FND_API.G_MISS_CHAR
12120       AND NVL(p_user_in_rec.ATTRIBUTE7,'!!!') <> NVL(p_out_rec.ATTRIBUTE7,'!!!')
12121   THEN
12122        l_attributes := l_attributes || 'ATTRIBUTE7, ';
12123   END IF;
12124 
12125   IF     p_user_in_rec.ATTRIBUTE8 <> FND_API.G_MISS_CHAR
12126       AND NVL(p_user_in_rec.ATTRIBUTE8,'!!!') <> NVL(p_out_rec.ATTRIBUTE8,'!!!')
12127   THEN
12128        l_attributes := l_attributes || 'ATTRIBUTE8, ';
12129   END IF;
12130 
12131   IF     p_user_in_rec.ATTRIBUTE9 <> FND_API.G_MISS_CHAR
12132       AND NVL(p_user_in_rec.ATTRIBUTE9,'!!!') <> NVL(p_out_rec.ATTRIBUTE9,'!!!')
12133   THEN
12134        l_attributes := l_attributes || 'ATTRIBUTE9, ';
12135   END IF;
12136 
12137   IF     p_user_in_rec.ATTRIBUTE10 <> FND_API.G_MISS_CHAR
12138       AND NVL(p_user_in_rec.ATTRIBUTE10,'!!!') <> NVL(p_out_rec.ATTRIBUTE10,'!!!')
12139   THEN
12140        l_attributes := l_attributes || 'ATTRIBUTE10, ';
12141   END IF;
12142 
12143   IF     p_user_in_rec.ATTRIBUTE11 <> FND_API.G_MISS_CHAR
12144       AND NVL(p_user_in_rec.ATTRIBUTE11,'!!!') <> NVL(p_out_rec.ATTRIBUTE11,'!!!')
12145   THEN
12146        l_attributes := l_attributes || 'ATTRIBUTE11, ';
12147   END IF;
12148 
12149   IF     p_user_in_rec.ATTRIBUTE12 <> FND_API.G_MISS_CHAR
12150       AND NVL(p_user_in_rec.ATTRIBUTE12,'!!!') <> NVL(p_out_rec.ATTRIBUTE12,'!!!')
12151   THEN
12152        l_attributes := l_attributes || 'ATTRIBUTE12, ';
12153   END IF;
12154 
12155   IF     p_user_in_rec.ATTRIBUTE13 <> FND_API.G_MISS_CHAR
12156       AND NVL(p_user_in_rec.ATTRIBUTE13,'!!!') <> NVL(p_out_rec.ATTRIBUTE13,'!!!')
12157   THEN
12158        l_attributes := l_attributes || 'ATTRIBUTE13, ';
12159   END IF;
12160 
12161   IF     p_user_in_rec.ATTRIBUTE14 <> FND_API.G_MISS_CHAR
12162       AND NVL(p_user_in_rec.ATTRIBUTE14,'!!!') <> NVL(p_out_rec.ATTRIBUTE14,'!!!')
12163   THEN
12164        l_attributes := l_attributes || 'ATTRIBUTE14, ';
12165   END IF;
12166 
12167   IF     p_user_in_rec.ATTRIBUTE15 <> FND_API.G_MISS_CHAR
12168       AND NVL(p_user_in_rec.ATTRIBUTE15,'!!!') <> NVL(p_out_rec.ATTRIBUTE15,'!!!')
12169   THEN
12170        l_attributes := l_attributes || 'ATTRIBUTE15, ';
12171   END IF;
12172 
12173   IF     p_user_in_rec.TP_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
12174       AND NVL(p_user_in_rec.TP_ATTRIBUTE_CATEGORY,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE_CATEGORY,'!!!')
12175   THEN
12176        l_attributes := l_attributes || 'TP_ATTRIBUTE_CATEGORY, ';
12177   END IF;
12178 
12179   IF     p_user_in_rec.TP_ATTRIBUTE1 <> FND_API.G_MISS_CHAR
12180       AND NVL(p_user_in_rec.TP_ATTRIBUTE1,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE1,'!!!')
12181   THEN
12182        l_attributes := l_attributes || 'TP_ATTRIBUTE1, ';
12183   END IF;
12184 
12185   IF     p_user_in_rec.TP_ATTRIBUTE2 <> FND_API.G_MISS_CHAR
12186       AND NVL(p_user_in_rec.TP_ATTRIBUTE2,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE2,'!!!')
12187   THEN
12188        l_attributes := l_attributes || 'TP_ATTRIBUTE2, ';
12189   END IF;
12190 
12191   IF     p_user_in_rec.TP_ATTRIBUTE3 <> FND_API.G_MISS_CHAR
12192       AND NVL(p_user_in_rec.TP_ATTRIBUTE3,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE3,'!!!')
12193   THEN
12194        l_attributes := l_attributes || 'TP_ATTRIBUTE3, ';
12195   END IF;
12196 
12197   IF     p_user_in_rec.TP_ATTRIBUTE4 <> FND_API.G_MISS_CHAR
12198       AND NVL(p_user_in_rec.TP_ATTRIBUTE4,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE4,'!!!')
12199   THEN
12200        l_attributes := l_attributes || 'TP_ATTRIBUTE4, ';
12201   END IF;
12202 
12203   IF     p_user_in_rec.TP_ATTRIBUTE5 <> FND_API.G_MISS_CHAR
12204       AND NVL(p_user_in_rec.TP_ATTRIBUTE5,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE5,'!!!')
12205   THEN
12206        l_attributes := l_attributes || 'TP_ATTRIBUTE5, ';
12207   END IF;
12208 
12209   IF     p_user_in_rec.TP_ATTRIBUTE6 <> FND_API.G_MISS_CHAR
12210       AND NVL(p_user_in_rec.TP_ATTRIBUTE6,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE6,'!!!')
12211   THEN
12212        l_attributes := l_attributes || 'TP_ATTRIBUTE6, ';
12213   END IF;
12214 
12215   IF     p_user_in_rec.TP_ATTRIBUTE7 <> FND_API.G_MISS_CHAR
12216       AND NVL(p_user_in_rec.TP_ATTRIBUTE7,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE7,'!!!')
12217   THEN
12218        l_attributes := l_attributes || 'TP_ATTRIBUTE7, ';
12219   END IF;
12220 
12221   IF     p_user_in_rec.TP_ATTRIBUTE8 <> FND_API.G_MISS_CHAR
12222       AND NVL(p_user_in_rec.TP_ATTRIBUTE8,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE8,'!!!')
12223   THEN
12224        l_attributes := l_attributes || 'TP_ATTRIBUTE8, ';
12225   END IF;
12226 
12227   IF     p_user_in_rec.TP_ATTRIBUTE9 <> FND_API.G_MISS_CHAR
12228       AND NVL(p_user_in_rec.TP_ATTRIBUTE9,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE9,'!!!')
12229   THEN
12230        l_attributes := l_attributes || 'TP_ATTRIBUTE9, ';
12231   END IF;
12232 
12233   IF     p_user_in_rec.TP_ATTRIBUTE10 <> FND_API.G_MISS_CHAR
12234       AND NVL(p_user_in_rec.TP_ATTRIBUTE10,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE10,'!!!')
12235   THEN
12236        l_attributes := l_attributes || 'TP_ATTRIBUTE10, ';
12237   END IF;
12238 
12239   IF     p_user_in_rec.TP_ATTRIBUTE11 <> FND_API.G_MISS_CHAR
12240       AND NVL(p_user_in_rec.TP_ATTRIBUTE11,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE11,'!!!')
12241   THEN
12242        l_attributes := l_attributes || 'TP_ATTRIBUTE11, ';
12243   END IF;
12244 
12245   IF     p_user_in_rec.TP_ATTRIBUTE12 <> FND_API.G_MISS_CHAR
12246       AND NVL(p_user_in_rec.TP_ATTRIBUTE12,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE12,'!!!')
12247   THEN
12248        l_attributes := l_attributes || 'TP_ATTRIBUTE12, ';
12249   END IF;
12250 
12251   IF     p_user_in_rec.TP_ATTRIBUTE13 <> FND_API.G_MISS_CHAR
12252       AND NVL(p_user_in_rec.TP_ATTRIBUTE13,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE13,'!!!')
12253   THEN
12254        l_attributes := l_attributes || 'TP_ATTRIBUTE13, ';
12255   END IF;
12256 
12257   IF     p_user_in_rec.TP_ATTRIBUTE14 <> FND_API.G_MISS_CHAR
12258       AND NVL(p_user_in_rec.TP_ATTRIBUTE14,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE14,'!!!')
12259   THEN
12260        l_attributes := l_attributes || 'TP_ATTRIBUTE14, ';
12261   END IF;
12262 
12263   IF     p_user_in_rec.TP_ATTRIBUTE15 <> FND_API.G_MISS_CHAR
12264       AND NVL(p_user_in_rec.TP_ATTRIBUTE15,'!!!') <> NVL(p_out_rec.TP_ATTRIBUTE15,'!!!')
12265   THEN
12266        l_attributes := l_attributes || 'TP_ATTRIBUTE15, ';
12267   END IF;
12268 
12269   IF     p_user_in_rec.GLOBAL_ATTRIBUTE_CATEGORY <> FND_API.G_MISS_CHAR
12270       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE_CATEGORY,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE_CATEGORY,'!!!')
12271   THEN
12272        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE_CATEGORY, ';
12273   END IF;
12274 
12275   IF     p_user_in_rec.GLOBAL_ATTRIBUTE1 <> FND_API.G_MISS_CHAR
12276       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE1,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE1,'!!!')
12277   THEN
12278        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE1, ';
12279   END IF;
12280 
12281   IF     p_user_in_rec.GLOBAL_ATTRIBUTE2 <> FND_API.G_MISS_CHAR
12282       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE2,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE2,'!!!')
12283   THEN
12284        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE2, ';
12285   END IF;
12286 
12287   IF     p_user_in_rec.GLOBAL_ATTRIBUTE3 <> FND_API.G_MISS_CHAR
12288       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE3,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE3,'!!!')
12289   THEN
12290        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE3, ';
12291   END IF;
12292 
12293   IF     p_user_in_rec.GLOBAL_ATTRIBUTE4 <> FND_API.G_MISS_CHAR
12294       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE4,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE4,'!!!')
12295   THEN
12296        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE4, ';
12297   END IF;
12298 
12299   IF     p_user_in_rec.GLOBAL_ATTRIBUTE5 <> FND_API.G_MISS_CHAR
12300       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE5,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE5,'!!!')
12301   THEN
12302        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE5, ';
12303   END IF;
12304 
12305   IF     p_user_in_rec.GLOBAL_ATTRIBUTE6 <> FND_API.G_MISS_CHAR
12306       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE6,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE6,'!!!')
12307   THEN
12308        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE6, ';
12309   END IF;
12310 
12311   IF     p_user_in_rec.GLOBAL_ATTRIBUTE7 <> FND_API.G_MISS_CHAR
12312       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE7,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE7,'!!!')
12313   THEN
12314        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE7, ';
12315   END IF;
12316 
12317   IF     p_user_in_rec.GLOBAL_ATTRIBUTE8 <> FND_API.G_MISS_CHAR
12318       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE8,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE8,'!!!')
12319   THEN
12320        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE8, ';
12321   END IF;
12322 
12323   IF     p_user_in_rec.GLOBAL_ATTRIBUTE9 <> FND_API.G_MISS_CHAR
12324       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE9,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE9,'!!!')
12325   THEN
12326        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE9, ';
12327   END IF;
12328 
12329   IF     p_user_in_rec.GLOBAL_ATTRIBUTE10 <> FND_API.G_MISS_CHAR
12330       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE10,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE10,'!!!')
12331   THEN
12332        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE10, ';
12333   END IF;
12334 
12335   IF     p_user_in_rec.GLOBAL_ATTRIBUTE11 <> FND_API.G_MISS_CHAR
12336       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE11,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE11,'!!!')
12337   THEN
12338        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE11, ';
12339   END IF;
12340 
12341   IF     p_user_in_rec.GLOBAL_ATTRIBUTE12 <> FND_API.G_MISS_CHAR
12342       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE12,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE12,'!!!')
12343   THEN
12344        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE12, ';
12345   END IF;
12346 
12347   IF     p_user_in_rec.GLOBAL_ATTRIBUTE13 <> FND_API.G_MISS_CHAR
12348       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE13,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE13,'!!!')
12349   THEN
12350        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE13, ';
12351   END IF;
12352 
12353   IF     p_user_in_rec.GLOBAL_ATTRIBUTE14 <> FND_API.G_MISS_CHAR
12354       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE14,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE14,'!!!')
12355   THEN
12356        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE14, ';
12357   END IF;
12358 
12359   IF     p_user_in_rec.GLOBAL_ATTRIBUTE15 <> FND_API.G_MISS_CHAR
12360       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE15,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE15,'!!!')
12361   THEN
12362        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE15, ';
12363   END IF;
12364 
12365   IF     p_user_in_rec.GLOBAL_ATTRIBUTE16 <> FND_API.G_MISS_CHAR
12366       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE16,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE16,'!!!')
12367   THEN
12368        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE16, ';
12369   END IF;
12370 
12371   IF     p_user_in_rec.GLOBAL_ATTRIBUTE17 <> FND_API.G_MISS_CHAR
12372       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE17,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE17,'!!!')
12373   THEN
12374        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE17, ';
12375   END IF;
12376 
12377   IF     p_user_in_rec.GLOBAL_ATTRIBUTE18 <> FND_API.G_MISS_CHAR
12378       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE18,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE18,'!!!')
12379   THEN
12380        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE18, ';
12381   END IF;
12382 
12383   IF     p_user_in_rec.GLOBAL_ATTRIBUTE19 <> FND_API.G_MISS_CHAR
12384       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE19,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE19,'!!!')
12385   THEN
12386        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE19, ';
12387   END IF;
12388 
12389   IF     p_user_in_rec.GLOBAL_ATTRIBUTE20 <> FND_API.G_MISS_CHAR
12390       AND NVL(p_user_in_rec.GLOBAL_ATTRIBUTE20,'!!!') <> NVL(p_out_rec.GLOBAL_ATTRIBUTE20,'!!!')
12391   THEN
12392        l_attributes := l_attributes || 'GLOBAL_ATTRIBUTE20, ';
12393   END IF;
12394 
12395  /**
12396   -- Bug 3613650 - Need not compare standard WHO columns
12397   --
12398   IF     p_user_in_rec.CREATION_DATE <> FND_API.G_MISS_DATE
12399       AND NVL(p_user_in_rec.CREATION_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.CREATION_DATE,TO_DATE('2','j'))
12400   THEN
12401        l_attributes := l_attributes || 'CREATION_DATE, ';
12402   END IF;
12403 
12404   IF     p_user_in_rec.CREATED_BY <> FND_API.G_MISS_NUM
12405       AND NVL(p_user_in_rec.CREATED_BY,-99) <> NVL(p_out_rec.CREATED_BY,-99)
12406   THEN
12407        l_attributes := l_attributes || 'CREATED_BY, ';
12408   END IF;
12409 
12410   IF     p_user_in_rec.LAST_UPDATE_DATE <> FND_API.G_MISS_DATE
12411       AND NVL(p_user_in_rec.LAST_UPDATE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.LAST_UPDATE_DATE,TO_DATE('2','j'))
12412   THEN
12413        l_attributes := l_attributes || 'LAST_UPDATE_DATE, ';
12414   END IF;
12415 
12416   IF     p_user_in_rec.LAST_UPDATED_BY <> FND_API.G_MISS_NUM
12417       AND NVL(p_user_in_rec.LAST_UPDATED_BY,-99) <> NVL(p_out_rec.LAST_UPDATED_BY,-99)
12418   THEN
12419        l_attributes := l_attributes || 'LAST_UPDATED_BY, ';
12420   END IF;
12421 
12422   IF     p_user_in_rec.LAST_UPDATE_LOGIN <> FND_API.G_MISS_NUM
12423       AND NVL(p_user_in_rec.LAST_UPDATE_LOGIN,-99) <> NVL(p_out_rec.LAST_UPDATE_LOGIN,-99)
12424   THEN
12425        l_attributes := l_attributes || 'LAST_UPDATE_LOGIN, ';
12426   END IF;
12427 
12428   IF     p_user_in_rec.PROGRAM_APPLICATION_ID <> FND_API.G_MISS_NUM
12429       AND NVL(p_user_in_rec.PROGRAM_APPLICATION_ID,-99) <> NVL(p_out_rec.PROGRAM_APPLICATION_ID,-99)
12430   THEN
12431        l_attributes := l_attributes || 'PROGRAM_APPLICATION_ID, ';
12432   END IF;
12433 
12434   IF     p_user_in_rec.PROGRAM_ID <> FND_API.G_MISS_NUM
12435       AND NVL(p_user_in_rec.PROGRAM_ID,-99) <> NVL(p_out_rec.PROGRAM_ID,-99)
12436   THEN
12437        l_attributes := l_attributes || 'PROGRAM_ID, ';
12438   END IF;
12439 
12440   IF     p_user_in_rec.PROGRAM_UPDATE_DATE <> FND_API.G_MISS_DATE
12441       AND NVL(p_user_in_rec.PROGRAM_UPDATE_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.PROGRAM_UPDATE_DATE,TO_DATE('2','j'))
12442   THEN
12443        l_attributes := l_attributes || 'PROGRAM_UPDATE_DATE, ';
12444   END IF;
12445 
12446   IF     p_user_in_rec.REQUEST_ID <> FND_API.G_MISS_NUM
12447       AND NVL(p_user_in_rec.REQUEST_ID,-99) <> NVL(p_out_rec.REQUEST_ID,-99)
12448   THEN
12449        l_attributes := l_attributes || 'REQUEST_ID, ';
12450   END IF;
12451   **/
12452 
12453   IF     p_user_in_rec.BATCH_ID <> FND_API.G_MISS_NUM
12454       AND NVL(p_user_in_rec.BATCH_ID,-99) <> NVL(p_out_rec.BATCH_ID,-99)
12455   THEN
12456        l_attributes := l_attributes || 'BATCH_ID, ';
12457   END IF;
12458 
12459   IF     p_user_in_rec.HASH_VALUE <> FND_API.G_MISS_NUM
12460       AND NVL(p_user_in_rec.HASH_VALUE,-99) <> NVL(p_out_rec.HASH_VALUE,-99)
12461   THEN
12462        l_attributes := l_attributes || 'HASH_VALUE, ';
12463   END IF;
12464 
12465   IF     p_user_in_rec.SOURCE_HEADER_ID <> FND_API.G_MISS_NUM
12466       AND NVL(p_user_in_rec.SOURCE_HEADER_ID,-99) <> NVL(p_out_rec.SOURCE_HEADER_ID,-99)
12467   THEN
12468        l_attributes := l_attributes || 'SOURCE_HEADER_ID, ';
12469   END IF;
12470 
12471   IF     p_user_in_rec.NUMBER_OF_LPN <> FND_API.G_MISS_NUM
12472       AND NVL(p_user_in_rec.NUMBER_OF_LPN,-99) <> NVL(p_out_rec.NUMBER_OF_LPN,-99)
12473   THEN
12474        l_attributes := l_attributes || 'NUMBER_OF_LPN, ';
12475   END IF;
12476 
12477   IF     p_user_in_rec.COD_AMOUNT <> FND_API.G_MISS_NUM
12478       AND NVL(p_user_in_rec.COD_AMOUNT,-99) <> NVL(p_out_rec.COD_AMOUNT,-99)
12479   THEN
12480        l_attributes := l_attributes || 'COD_AMOUNT, ';
12481   END IF;
12482 
12483   IF     p_user_in_rec.COD_CURRENCY_CODE <> FND_API.G_MISS_CHAR
12484       AND NVL(p_user_in_rec.COD_CURRENCY_CODE,'!!!') <> NVL(p_out_rec.COD_CURRENCY_CODE,'!!!')
12485   THEN
12486        l_attributes := l_attributes || 'COD_CURRENCY_CODE, ';
12487   END IF;
12488 
12489   IF     p_user_in_rec.COD_REMIT_TO <> FND_API.G_MISS_CHAR
12490       AND NVL(p_user_in_rec.COD_REMIT_TO,'!!!') <> NVL(p_out_rec.COD_REMIT_TO,'!!!')
12491   THEN
12492        l_attributes := l_attributes || 'COD_REMIT_TO, ';
12493   END IF;
12494 
12495   IF     p_user_in_rec.COD_CHARGE_PAID_BY <> FND_API.G_MISS_CHAR
12496       AND NVL(p_user_in_rec.COD_CHARGE_PAID_BY,'!!!') <> NVL(p_out_rec.COD_CHARGE_PAID_BY,'!!!')
12497   THEN
12498        l_attributes := l_attributes || 'COD_CHARGE_PAID_BY, ';
12499   END IF;
12500 
12501   IF     p_user_in_rec.PROBLEM_CONTACT_REFERENCE <> FND_API.G_MISS_CHAR
12502       AND NVL(p_user_in_rec.PROBLEM_CONTACT_REFERENCE,'!!!') <> NVL(p_out_rec.PROBLEM_CONTACT_REFERENCE,'!!!')
12503   THEN
12504        l_attributes := l_attributes || 'PROBLEM_CONTACT_REFERENCE, ';
12505   END IF;
12506 
12507   IF     p_user_in_rec.PORT_OF_LOADING <> FND_API.G_MISS_CHAR
12508       AND NVL(p_user_in_rec.PORT_OF_LOADING,'!!!') <> NVL(p_out_rec.PORT_OF_LOADING,'!!!')
12509   THEN
12510        l_attributes := l_attributes || 'PORT_OF_LOADING, ';
12511   END IF;
12512 
12513   IF     p_user_in_rec.PORT_OF_DISCHARGE <> FND_API.G_MISS_CHAR
12514       AND NVL(p_user_in_rec.PORT_OF_DISCHARGE,'!!!') <> NVL(p_out_rec.PORT_OF_DISCHARGE,'!!!')
12515   THEN
12516        l_attributes := l_attributes || 'PORT_OF_DISCHARGE, ';
12517   END IF;
12518 
12519   IF     p_user_in_rec.FTZ_NUMBER <> FND_API.G_MISS_CHAR
12520       AND NVL(p_user_in_rec.FTZ_NUMBER,'!!!') <> NVL(p_out_rec.FTZ_NUMBER,'!!!')
12521   THEN
12522        l_attributes := l_attributes || 'FTZ_NUMBER, ';
12523   END IF;
12524 
12525   IF     p_user_in_rec.ROUTED_EXPORT_TXN <> FND_API.G_MISS_CHAR
12526       AND NVL(p_user_in_rec.ROUTED_EXPORT_TXN,'!!!') <> NVL(p_out_rec.ROUTED_EXPORT_TXN,'!!!')
12527   THEN
12528        l_attributes := l_attributes || 'ROUTED_EXPORT_TXN, ';
12529   END IF;
12530 
12531   IF     p_user_in_rec.ENTRY_NUMBER <> FND_API.G_MISS_CHAR
12532       AND NVL(p_user_in_rec.ENTRY_NUMBER,'!!!') <> NVL(p_out_rec.ENTRY_NUMBER,'!!!')
12533   THEN
12534        l_attributes := l_attributes || 'ENTRY_NUMBER, ';
12535   END IF;
12536 
12537   IF     p_user_in_rec.ROUTING_INSTRUCTIONS <> FND_API.G_MISS_CHAR
12538       AND NVL(p_user_in_rec.ROUTING_INSTRUCTIONS,'!!!') <> NVL(p_out_rec.ROUTING_INSTRUCTIONS,'!!!')
12539   THEN
12540        l_attributes := l_attributes || 'ROUTING_INSTRUCTIONS, ';
12541   END IF;
12542 
12543   IF     p_user_in_rec.IN_BOND_CODE <> FND_API.G_MISS_CHAR
12544       AND NVL(p_user_in_rec.IN_BOND_CODE,'!!!') <> NVL(p_out_rec.IN_BOND_CODE,'!!!')
12545   THEN
12546        l_attributes := l_attributes || 'IN_BOND_CODE, ';
12547   END IF;
12548 
12549   IF     p_user_in_rec.SHIPPING_MARKS <> FND_API.G_MISS_CHAR
12550       AND NVL(p_user_in_rec.SHIPPING_MARKS,'!!!') <> NVL(p_out_rec.SHIPPING_MARKS,'!!!')
12551   THEN
12552        l_attributes := l_attributes || 'SHIPPING_MARKS, ';
12553   END IF;
12554 
12555   IF     p_user_in_rec.SERVICE_LEVEL <> FND_API.G_MISS_CHAR
12556       AND NVL(p_user_in_rec.SERVICE_LEVEL,'!!!') <> NVL(p_out_rec.SERVICE_LEVEL,'!!!')
12557   THEN
12558        l_attributes := l_attributes || 'SERVICE_LEVEL, ';
12559   END IF;
12560 
12561   IF     p_user_in_rec.MODE_OF_TRANSPORT <> FND_API.G_MISS_CHAR
12562       AND NVL(p_user_in_rec.MODE_OF_TRANSPORT,'!!!') <> NVL(p_out_rec.MODE_OF_TRANSPORT,'!!!')
12563   THEN
12564        l_attributes := l_attributes || 'MODE_OF_TRANSPORT, ';
12565   END IF;
12566 
12567   IF     p_user_in_rec.ASSIGNED_TO_FTE_TRIPS <> FND_API.G_MISS_CHAR
12568       AND NVL(p_user_in_rec.ASSIGNED_TO_FTE_TRIPS,'!!!') <> NVL(p_out_rec.ASSIGNED_TO_FTE_TRIPS,'!!!')
12569   THEN
12570        l_attributes := l_attributes || 'ASSIGNED_TO_FTE_TRIPS, ';
12571   END IF;
12572 
12573   IF     p_user_in_rec.AUTO_SC_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
12574       AND NVL(p_user_in_rec.AUTO_SC_EXCLUDE_FLAG,'!!!') <> NVL(p_out_rec.AUTO_SC_EXCLUDE_FLAG,'!!!')
12575   THEN
12576        l_attributes := l_attributes || 'AUTO_SC_EXCLUDE_FLAG, ';
12577   END IF;
12578 
12579   IF     p_user_in_rec.AUTO_AP_EXCLUDE_FLAG <> FND_API.G_MISS_CHAR
12580       AND NVL(p_user_in_rec.AUTO_AP_EXCLUDE_FLAG,'!!!') <> NVL(p_out_rec.AUTO_AP_EXCLUDE_FLAG,'!!!')
12581   THEN
12582        l_attributes := l_attributes || 'AUTO_AP_EXCLUDE_FLAG, ';
12583   END IF;
12584 
12585   IF     p_user_in_rec.AP_BATCH_ID <> FND_API.G_MISS_NUM
12586       AND NVL(p_user_in_rec.AP_BATCH_ID,-99) <> NVL(p_out_rec.AP_BATCH_ID,-99)
12587   THEN
12588        l_attributes := l_attributes || 'AP_BATCH_ID, ';
12589   END IF;
12590 
12591   IF     p_user_in_rec.ROWID <> FND_API.G_MISS_CHAR
12592       AND NVL(p_user_in_rec.ROWID,'!!!') <> NVL(p_out_rec.ROWID,'!!!')
12593   THEN
12594        l_attributes := l_attributes || 'ROWID, ';
12595   END IF;
12596 
12597   IF     p_user_in_rec.LOADING_ORDER_DESC <> FND_API.G_MISS_CHAR
12598       AND NVL(p_user_in_rec.LOADING_ORDER_DESC,'!!!') <> NVL(p_out_rec.LOADING_ORDER_DESC,'!!!')
12599   THEN
12600        l_attributes := l_attributes || 'LOADING_ORDER_DESC, ';
12601   END IF;
12602 
12603   IF     p_user_in_rec.ORGANIZATION_CODE <> FND_API.G_MISS_CHAR
12604       AND NVL(p_user_in_rec.ORGANIZATION_CODE,'!!!') <> NVL(p_out_rec.ORGANIZATION_CODE,'!!!')
12605   THEN
12606        l_attributes := l_attributes || 'ORGANIZATION_CODE, ';
12607   END IF;
12608 
12609   IF     p_user_in_rec.ULTIMATE_DROPOFF_LOCATION_CODE <> FND_API.G_MISS_CHAR
12610       AND NVL(p_user_in_rec.ULTIMATE_DROPOFF_LOCATION_CODE,'!!!') <> NVL(p_out_rec.ULTIMATE_DROPOFF_LOCATION_CODE,'!!!')
12611   THEN
12612        l_attributes := l_attributes || 'ULTIMATE_DROPOFF_LOCATION_CODE, ';
12613   END IF;
12614 
12615   IF     p_user_in_rec.INITIAL_PICKUP_LOCATION_CODE <> FND_API.G_MISS_CHAR
12616       AND NVL(p_user_in_rec.INITIAL_PICKUP_LOCATION_CODE,'!!!') <> NVL(p_out_rec.INITIAL_PICKUP_LOCATION_CODE,'!!!')
12617   THEN
12618        l_attributes := l_attributes || 'INITIAL_PICKUP_LOCATION_CODE, ';
12619   END IF;
12620 
12621   IF     p_user_in_rec.CUSTOMER_NUMBER <> FND_API.G_MISS_CHAR
12622       AND NVL(p_user_in_rec.CUSTOMER_NUMBER,'!!!') <> NVL(p_out_rec.CUSTOMER_NUMBER,'!!!')
12623   THEN
12624        l_attributes := l_attributes || 'CUSTOMER_NUMBER, ';
12625   END IF;
12626   -- LSP PROJECT
12627   IF     p_user_in_rec.CLIENT_CODE <> FND_API.G_MISS_CHAR
12628       AND NVL(p_user_in_rec.CLIENT_CODE,'!!!') <> NVL(p_out_rec.CLIENT_CODE,'!!!')
12629   THEN
12630        l_attributes := l_attributes || 'CLIENT_CODE, ';
12631   END IF;
12632   -- LSP PROJECT.
12633 
12634   IF     p_user_in_rec.INTMED_SHIP_TO_LOCATION_CODE <> FND_API.G_MISS_CHAR
12635       AND NVL(p_user_in_rec.INTMED_SHIP_TO_LOCATION_CODE,'!!!') <> NVL(p_out_rec.INTMED_SHIP_TO_LOCATION_CODE,'!!!')
12636   THEN
12637        l_attributes := l_attributes || 'INTMED_SHIP_TO_LOCATION_CODE, ';
12638   END IF;
12639 
12640   IF     p_user_in_rec.POOLED_SHIP_TO_LOCATION_CODE <> FND_API.G_MISS_CHAR
12641       AND NVL(p_user_in_rec.POOLED_SHIP_TO_LOCATION_CODE,'!!!') <> NVL(p_out_rec.POOLED_SHIP_TO_LOCATION_CODE,'!!!')
12642   THEN
12643        l_attributes := l_attributes || 'POOLED_SHIP_TO_LOCATION_CODE, ';
12644   END IF;
12645 
12646   IF     p_user_in_rec.CARRIER_CODE <> FND_API.G_MISS_CHAR
12647       AND NVL(p_user_in_rec.CARRIER_CODE,'!!!') <> NVL(p_out_rec.CARRIER_CODE,'!!!')
12648   THEN
12649        l_attributes := l_attributes || 'CARRIER_CODE, ';
12650   END IF;
12651 
12652   IF     p_user_in_rec.SHIP_METHOD_NAME <> FND_API.G_MISS_CHAR
12653       AND NVL(p_user_in_rec.SHIP_METHOD_NAME,'!!!') <> NVL(p_out_rec.SHIP_METHOD_NAME,'!!!')
12654   THEN
12655        l_attributes := l_attributes || 'SHIP_METHOD_NAME, ';
12656   END IF;
12657 
12658   IF     p_user_in_rec.FREIGHT_TERMS_NAME <> FND_API.G_MISS_CHAR
12659       AND NVL(p_user_in_rec.FREIGHT_TERMS_NAME,'!!!') <> NVL(p_out_rec.FREIGHT_TERMS_NAME,'!!!')
12660   THEN
12661        l_attributes := l_attributes || 'FREIGHT_TERMS_NAME, ';
12662   END IF;
12663 
12664   IF     p_user_in_rec.FOB_NAME <> FND_API.G_MISS_CHAR
12665       AND NVL(p_user_in_rec.FOB_NAME,'!!!') <> NVL(p_out_rec.FOB_NAME,'!!!')
12666   THEN
12667        l_attributes := l_attributes || 'FOB_NAME, ';
12668   END IF;
12669 
12670   IF     p_user_in_rec.FOB_LOCATION_CODE <> FND_API.G_MISS_CHAR
12671       AND NVL(p_user_in_rec.FOB_LOCATION_CODE,'!!!') <> NVL(p_out_rec.FOB_LOCATION_CODE,'!!!')
12672   THEN
12673        l_attributes := l_attributes || 'FOB_LOCATION_CODE, ';
12674   END IF;
12675 
12676   IF     p_user_in_rec.WEIGHT_UOM_DESC <> FND_API.G_MISS_CHAR
12677       AND NVL(p_user_in_rec.WEIGHT_UOM_DESC,'!!!') <> NVL(p_out_rec.WEIGHT_UOM_DESC,'!!!')
12678   THEN
12679        l_attributes := l_attributes || 'WEIGHT_UOM_DESC, ';
12680   END IF;
12681 
12682   IF     p_user_in_rec.VOLUME_UOM_DESC <> FND_API.G_MISS_CHAR
12683       AND NVL(p_user_in_rec.VOLUME_UOM_DESC,'!!!') <> NVL(p_out_rec.VOLUME_UOM_DESC,'!!!')
12684   THEN
12685        l_attributes := l_attributes || 'VOLUME_UOM_DESC, ';
12686   END IF;
12687 
12688   IF     p_user_in_rec.CURRENCY_NAME <> FND_API.G_MISS_CHAR
12689       AND NVL(p_user_in_rec.CURRENCY_NAME,'!!!') <> NVL(p_out_rec.CURRENCY_NAME,'!!!')
12690   THEN
12691        l_attributes := l_attributes || 'CURRENCY_NAME, ';
12692   END IF;
12693 
12694   IF     p_user_in_rec.SHIPMENT_DIRECTION <> FND_API.G_MISS_CHAR
12695       AND NVL(p_user_in_rec.SHIPMENT_DIRECTION,'!!!') <> NVL(p_out_rec.SHIPMENT_DIRECTION,'!!!')
12696   THEN
12697        l_attributes := l_attributes || 'SHIPMENT_DIRECTION, ';
12698   END IF;
12699 
12700   IF     p_user_in_rec.VENDOR_ID <> FND_API.G_MISS_NUM
12701       AND NVL(p_user_in_rec.VENDOR_ID,-99) <> NVL(p_out_rec.VENDOR_ID,-99)
12702   THEN
12703        l_attributes := l_attributes || 'VENDOR_ID, ';
12704   END IF;
12705 
12706   IF     p_user_in_rec.PARTY_ID <> FND_API.G_MISS_NUM
12707       AND NVL(p_user_in_rec.PARTY_ID,-99) <> NVL(p_out_rec.PARTY_ID,-99)
12708   THEN
12709        l_attributes := l_attributes || 'PARTY_ID, ';
12710   END IF;
12711 
12712   IF     p_user_in_rec.ROUTING_RESPONSE_ID <> FND_API.G_MISS_NUM
12713       AND NVL(p_user_in_rec.ROUTING_RESPONSE_ID,-99) <> NVL(p_out_rec.ROUTING_RESPONSE_ID,-99)
12714   THEN
12715        l_attributes := l_attributes || 'ROUTING_RESPONSE_ID, ';
12716   END IF;
12717 
12718   IF     p_user_in_rec.RCV_SHIPMENT_HEADER_ID <> FND_API.G_MISS_NUM
12719       AND NVL(p_user_in_rec.RCV_SHIPMENT_HEADER_ID,-99) <> NVL(p_out_rec.RCV_SHIPMENT_HEADER_ID,-99)
12720   THEN
12721        l_attributes := l_attributes || 'RCV_SHIPMENT_HEADER_ID, ';
12722   END IF;
12723 
12724   IF     p_user_in_rec.ASN_SHIPMENT_HEADER_ID <> FND_API.G_MISS_NUM
12725       AND NVL(p_user_in_rec.ASN_SHIPMENT_HEADER_ID,-99) <> NVL(p_out_rec.ASN_SHIPMENT_HEADER_ID,-99)
12726   THEN
12727        l_attributes := l_attributes || 'ASN_SHIPMENT_HEADER_ID, ';
12728   END IF;
12729 
12730   IF     p_user_in_rec.SHIPPING_CONTROL <> FND_API.G_MISS_CHAR
12731       AND NVL(p_user_in_rec.SHIPPING_CONTROL,'!!!') <> NVL(p_out_rec.SHIPPING_CONTROL,'!!!')
12732   THEN
12733        l_attributes := l_attributes || 'SHIPPING_CONTROL, ';
12734   END IF;
12735 
12736   IF     p_user_in_rec.TP_DELIVERY_NUMBER <> FND_API.G_MISS_NUM
12737       AND NVL(p_user_in_rec.TP_DELIVERY_NUMBER,-99) <> NVL(p_out_rec.TP_DELIVERY_NUMBER,-99)
12738   THEN
12739        l_attributes := l_attributes || 'TP_DELIVERY_NUMBER, ';
12740   END IF;
12741 
12742   IF     p_user_in_rec.EARLIEST_PICKUP_DATE <> FND_API.G_MISS_DATE
12743       AND NVL(p_user_in_rec.EARLIEST_PICKUP_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.EARLIEST_PICKUP_DATE,TO_DATE('2','j'))
12744   THEN
12745        l_attributes := l_attributes || 'EARLIEST_PICKUP_DATE, ';
12746   END IF;
12747 
12748   IF     p_user_in_rec.LATEST_PICKUP_DATE <> FND_API.G_MISS_DATE
12749       AND NVL(p_user_in_rec.LATEST_PICKUP_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.LATEST_PICKUP_DATE,TO_DATE('2','j'))
12750   THEN
12751        l_attributes := l_attributes || 'LATEST_PICKUP_DATE, ';
12752   END IF;
12753 
12754   IF     p_user_in_rec.EARLIEST_DROPOFF_DATE <> FND_API.G_MISS_DATE
12755       AND NVL(p_user_in_rec.EARLIEST_DROPOFF_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.EARLIEST_DROPOFF_DATE,TO_DATE('2','j'))
12756   THEN
12757        l_attributes := l_attributes || 'EARLIEST_DROPOFF_DATE, ';
12758   END IF;
12759 
12760   IF     p_user_in_rec.LATEST_DROPOFF_DATE <> FND_API.G_MISS_DATE
12761       AND NVL(p_user_in_rec.LATEST_DROPOFF_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.LATEST_DROPOFF_DATE,TO_DATE('2','j'))
12762   THEN
12763        l_attributes := l_attributes || 'LATEST_DROPOFF_DATE, ';
12764   END IF;
12765 
12766   IF     p_user_in_rec.IGNORE_FOR_PLANNING <> FND_API.G_MISS_CHAR
12767       AND NVL(p_user_in_rec.IGNORE_FOR_PLANNING,'!!!') <> NVL(p_out_rec.IGNORE_FOR_PLANNING,'!!!')
12768   THEN
12769        l_attributes := l_attributes || 'IGNORE_FOR_PLANNING, ';
12770   END IF;
12771 
12772   IF     p_user_in_rec.TP_PLAN_NAME <> FND_API.G_MISS_CHAR
12773       AND NVL(p_user_in_rec.TP_PLAN_NAME,'!!!') <> NVL(p_out_rec.TP_PLAN_NAME,'!!!')
12774   THEN
12775        l_attributes := l_attributes || 'TP_PLAN_NAME, ';
12776   END IF;
12777 
12778   IF     p_user_in_rec.WV_FROZEN_FLAG <> FND_API.G_MISS_CHAR
12779       AND NVL(p_user_in_rec.WV_FROZEN_FLAG,'!!!') <> NVL(p_out_rec.WV_FROZEN_FLAG,'!!!')
12780   THEN
12781        l_attributes := l_attributes || 'WV_FROZEN_FLAG, ';
12782   END IF;
12783 
12784   IF     p_user_in_rec.HASH_STRING <> FND_API.G_MISS_CHAR
12785       AND NVL(p_user_in_rec.HASH_STRING,'!!!') <> NVL(p_out_rec.HASH_STRING,'!!!')
12786   THEN
12787        l_attributes := l_attributes || 'HASH_STRING, ';
12788   END IF;
12789 
12790   IF     p_user_in_rec.DELIVERED_DATE <> FND_API.G_MISS_DATE
12791       AND NVL(p_user_in_rec.DELIVERED_DATE,TO_DATE('2','j')) <> NVL(p_out_rec.DELIVERED_DATE,TO_DATE('2','j'))
12792   THEN
12793        l_attributes := l_attributes || 'DELIVERED_DATE, ';
12794   END IF;
12795 
12796   IF     p_user_in_rec.PACKING_SLIP <> FND_API.G_MISS_CHAR
12797       AND NVL(p_user_in_rec.PACKING_SLIP,'!!!') <> NVL(p_out_rec.PACKING_SLIP,'!!!')
12798   THEN
12799        l_attributes := l_attributes || 'PACKING_SLIP, ';
12800   END IF;
12801 
12802   IF l_debug_on THEN
12803        WSH_DEBUG_SV.log(l_module_name,'l_attributes',l_attributes);
12804        WSH_DEBUG_SV.log(l_module_name,'length(l_attributes)',length(l_attributes));
12805   END IF;
12806 
12807 
12808   IF l_attributes IS NULL    THEN
12809      --no message to be shown to the user
12810      IF l_debug_on THEN
12811       WSH_DEBUG_SV.pop(l_module_name);
12812      END IF;
12813      --
12814      RETURN;
12815   ELSE
12816      Wsh_Utilities.process_message(
12817                                     p_entity => 'DLVY',
12818                                     p_entity_name => NVL(p_out_rec.NAME,p_out_rec.DELIVERY_ID),
12819                                     p_attributes => l_attributes,
12820                                     x_return_status => l_return_status
12821 				  );
12822 
12823      IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
12824      THEN
12825        x_return_status := l_return_status;
12826        IF l_debug_on THEN
12827          wsh_debug_sv.logmsg(l_module_name,'Error returned by wsh_utilities.process_message',WSH_DEBUG_SV.C_PROC_LEVEL);
12828          WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12829          wsh_debug_sv.pop(l_module_name);
12830        END IF;
12831        return;
12832      ELSE
12833        x_return_status := wsh_util_core.G_RET_STS_WARNING;
12834      END IF;
12835   END IF;
12836 
12837 
12838 
12839   IF l_debug_on THEN
12840     WSH_DEBUG_SV.pop(l_module_name);
12841   END IF;
12842   --
12843 
12844 
12845 EXCEPTION
12846     WHEN OTHERS THEN
12847         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
12848         --
12849         IF l_debug_on THEN
12850            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12851         END IF;
12852         --
12853 END user_non_updatable_columns;
12854 
12855 --Function added for Bugfix 3562492
12856 --========================================================================
12857 -- FUNCTION : Is_del_eligible_pick
12858 --
12859 -- PARAMETERS:
12860 --             x_return_status         return status
12861 --             p_delivery_id             Delivery ID
12862 -- VERSION   : current version         1.0
12863 --             initial version         1.0
12864 -- COMMENT   : This Function checks whether a Delivery id is eligible for Pick Release
12865 --             , if a Delivery is eligible it returns TRUE else it returns FALSE.
12866 --             The return status of this Function is always Success except in case
12867 --             of unexpected error.
12868 --========================================================================
12869 FUNCTION  Is_del_eligible_pick(
12870                       p_delivery_id  IN NUMBER,
12871                       x_return_status OUT NOCOPY VARCHAR2)
12872 RETURN BOOLEAN
12873 IS
12874 
12875     cursor c_detail (p_delivery_id NUMBER) is
12876     select 1
12877     from wsh_delivery_details wdd,
12878     wsh_delivery_assignments_v wda
12879     where wdd.delivery_detail_id = wda.delivery_detail_id
12880     and wdd.released_status in ('R','B','X')
12881     and nvl(wdd.replenishment_status,'C') = 'C'   --bug# 6719369 (replenishment project)
12882     and wdd.source_code = 'OE'
12883     and wda.delivery_id = p_delivery_id
12884     and rownum =1;
12885 
12886     l_del_det_exists  NUMBER;
12887     l_debug_on BOOLEAN;
12888     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_DEL_ELIGIBLE_PICK';
12889     l_is_del_eligible BOOLEAN;
12890 
12891 BEGIN
12892       --
12893       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12894       --
12895       IF l_debug_on IS NULL
12896       THEN
12897            l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12898       END IF;
12899         --
12900       x_return_status := wsh_util_core.G_RET_STS_SUCCESS;
12901       l_is_del_eligible := FALSE;
12902 
12903       IF l_debug_on THEN
12904           WSH_DEBUG_SV.push(l_module_name);
12905           WSH_DEBUG_SV.log(l_module_name,'p_delivery_id', p_delivery_id);
12906       END IF;
12907 
12908       OPEN c_detail(p_delivery_id);
12909       FETCH c_detail into l_del_det_exists;
12910 
12911       IF c_detail%FOUND THEN
12912           l_is_del_eligible := TRUE;
12913       END IF;
12914 
12915       CLOSE c_detail;
12916       RETURN l_is_del_eligible;
12917 
12918 EXCEPTION
12919      WHEN OTHERS THEN
12920         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12921         WSH_UTIL_CORE.default_handler('WSH_DELIVERIES_GRP.is_del_eligible_pick');
12922         IF l_debug_on THEN
12923            WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12924            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
12925         END IF;
12926 	RETURN FALSE;
12927 
12928 END Is_del_eligible_pick;
12929 
12930   --OTM R12
12931   --------------------------------------------------------
12932   -- PROCEDURE GET_TRIP_INFORMATION
12933   --
12934   -- parameters:	p_delivery_id	delivery id to search for trip
12935   --			x_trip_info_rec record of trip information for the delivery
12936   --			x_return_status	return status
12937   --
12938   -- Description: Find trip information for the Input delivery
12939   -- Added for EBS-OTM Integration
12940   --------------------------------------------------------
12941   PROCEDURE GET_TRIP_INFORMATION
12942   (p_delivery_id     	         IN         NUMBER,
12943    x_trip_info_rec               OUT NOCOPY TRIP_INFO_REC_TYPE,
12944    x_return_status               OUT NOCOPY VARCHAR2
12945   ) IS
12946 
12947   --this query returns first trip for the delivery.
12948   CURSOR c_get_trip_info(p_del_id IN NUMBER) IS
12949     SELECT wt.trip_id,
12950            wt.name,
12951            wt.status_code
12952     FROM   wsh_trip_stops wts,
12953            wsh_delivery_legs wdl,
12954            wsh_trips wt,
12955            wsh_new_deliveries wnd
12956     WHERE  wnd.delivery_id = p_del_id
12957     AND    wdl.delivery_id = wnd.delivery_id
12958     AND    wdl.pick_up_stop_id = wts.stop_id
12959     AND    wnd.initial_pickup_location_id = wts.stop_location_id
12960     AND    wts.trip_id = wt.trip_id;
12961 
12962   l_debug_on BOOLEAN;
12963   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_TRIP_INFORMATION';
12964 
12965   BEGIN
12966 
12967     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12968     --
12969     IF l_debug_on IS NULL THEN
12970       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12971     END IF;
12972     --
12973     IF l_debug_on THEN
12974       WSH_DEBUG_SV.push(l_module_name);
12975       WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
12976     END IF;
12977 
12978     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12979 
12980     -- Need to validate the input.
12981     IF p_delivery_id IS NOT NULL THEN
12982 
12983       OPEN c_get_trip_info(p_delivery_id);
12984       FETCH c_get_trip_info INTO x_trip_info_rec.trip_id,
12985                                  x_trip_info_rec.name,
12986                                  x_trip_info_rec.status_code;
12987       CLOSE c_get_trip_info;
12988 
12989     END IF;
12990 
12991 
12992     IF l_debug_on THEN
12993       WSH_DEBUG_SV.log(l_module_name, 'trip id', x_trip_info_rec.trip_id);
12994       WSH_DEBUG_SV.log(l_module_name, 'trip name', x_trip_info_rec.name);
12995       WSH_DEBUG_SV.log(l_module_name, 'trip status code', x_trip_info_rec.status_code);
12996       WSH_DEBUG_SV.pop(l_module_name);
12997     END IF;
12998   EXCEPTION
12999 
13000     WHEN Others THEN
13001       IF (c_get_trip_info%ISOPEN) THEN
13002         CLOSE c_get_trip_info;
13003       END IF;
13004       WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_VALIDATIONS.GET_TRIP_INFORMATION', l_module_name);
13005       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13006 
13007       IF l_debug_on THEN
13008         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13009         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13010       END IF;
13011   END GET_TRIP_INFORMATION;
13012 
13013   -------------------------------------------------------------------------------
13014   --  Procedure:   GET_DELIVERY_INFORMATION
13015   --  Parameters:  x_delivery_rec: A record of all attributes of a Delivery Record
13016   --               p_delivery_id : delivery_id of the delivery that is to be copied
13017   --  Description: This procedure will copy the attributes of a delivery in wsh_new_deliveries
13018   --               and copy it to a record.
13019   -------------------------------------------------------------------------------
13020 
13021   PROCEDURE GET_DELIVERY_INFORMATION
13022   (p_delivery_id   IN         NUMBER,
13023    x_delivery_rec  OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type,
13024    x_return_status OUT NOCOPY VARCHAR2) IS
13025 
13026   CURSOR c_get_delivery_info (p_delivery_id IN NUMBER) IS
13027   SELECT DELIVERY_ID
13028         ,NAME
13029         ,PLANNED_FLAG
13030         ,STATUS_CODE
13031         ,DELIVERY_TYPE
13032         ,INITIAL_PICKUP_LOCATION_ID
13033         ,ORGANIZATION_ID
13034         ,ULTIMATE_DROPOFF_LOCATION_ID
13035         ,CARRIER_ID
13036         ,SHIP_METHOD_CODE
13037         ,FREIGHT_TERMS_CODE
13038         ,FOB_CODE
13039         ,CURRENCY_CODE
13040         ,SERVICE_LEVEL
13041         ,MODE_OF_TRANSPORT
13042         ,EARLIEST_PICKUP_DATE
13043         ,LATEST_PICKUP_DATE
13044         ,EARLIEST_DROPOFF_DATE
13045         ,LATEST_DROPOFF_DATE
13046         ,NVL(IGNORE_FOR_PLANNING, 'N')
13047         ,TP_PLAN_NAME
13048         ,WV_FROZEN_FLAG
13049         ,TMS_INTERFACE_FLAG
13050         ,TMS_VERSION_NUMBER
13051         ,client_id    -- LSP PROJECT (used in wshddacb. assign_dd_to_del
13052   FROM wsh_new_deliveries
13053   WHERE delivery_id = p_delivery_id;
13054 
13055   l_debug_on BOOLEAN;
13056   --
13057   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_INFORMATION';
13058 
13059   BEGIN
13060 
13061     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13062     --
13063     IF l_debug_on IS NULL
13064     THEN
13065       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13066     END IF;
13067     --
13068     IF l_debug_on THEN
13069       WSH_DEBUG_SV.push(l_module_name);
13070       WSH_DEBUG_SV.log(l_module_name,'p_delivery_id', p_delivery_id);
13071     END IF;
13072     --
13073 
13074     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13075 
13076     OPEN c_get_delivery_info (p_delivery_id);
13077     FETCH c_get_delivery_info INTO x_delivery_rec.delivery_id,
13078                                    x_delivery_rec.name,
13079                                    x_delivery_rec.planned_flag,
13080                                    x_delivery_rec.status_code,
13081                                    x_delivery_rec.delivery_type,
13082                                    x_delivery_rec.initial_pickup_location_id,
13083                                    x_delivery_rec.organization_id,
13084                                    x_delivery_rec.ultimate_dropoff_location_id,
13085                                    x_delivery_rec.carrier_id,
13086                                    x_delivery_rec.ship_method_code,
13087                                    x_delivery_rec.freight_terms_code,
13088                                    x_delivery_rec.fob_code,
13089                                    x_delivery_rec.currency_code,
13090                                    x_delivery_rec.service_level,
13091                                    x_delivery_rec.mode_of_transport,
13092                                    x_delivery_rec.earliest_pickup_date,
13093                                    x_delivery_rec.latest_pickup_date,
13094                                    x_delivery_rec.earliest_dropoff_date,
13095                                    x_delivery_rec.latest_dropoff_date,
13096                                    x_delivery_rec.ignore_for_planning,
13097                                    x_delivery_rec.tp_plan_name,
13098                                    x_delivery_rec.wv_frozen_flag,
13099                                    x_delivery_rec.tms_interface_flag,
13100                                    x_delivery_rec.tms_version_number,
13101                                    x_delivery_rec.client_id; -- LSP PROJECT.
13102 
13103     IF c_get_delivery_info%NOTFOUND THEN
13104 
13105       CLOSE c_get_delivery_info;
13106       RAISE no_data_found;
13107 
13108     END IF;
13109     CLOSE c_get_delivery_info;
13110 
13111     IF l_debug_on THEN
13112       WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
13113       WSH_DEBUG_SV.pop(l_module_name);
13114     END IF;
13115 
13116   EXCEPTION
13117     WHEN NO_DATA_FOUND THEN
13118       IF c_get_delivery_info%ISOPEN THEN
13119         CLOSE c_get_delivery_info;
13120       END IF;
13121 
13122       FND_MESSAGE.Set_Name('WSH','WSH_DEL_NOT_FOUND');
13123       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13124       WSH_UTIL_CORE.ADD_MESSAGE(x_return_status,l_module_name);
13125       --
13126       IF l_debug_on THEN
13127         WSH_DEBUG_SV.logmsg(l_module_name,'NO_DATA_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13128         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NO_DATA_FOUND');
13129       END IF;
13130       --
13131     WHEN OTHERS THEN
13132       IF c_get_delivery_info%ISOPEN THEN
13133         CLOSE c_get_delivery_info;
13134       END IF;
13135       --
13136       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13137       --
13138       wsh_util_core.default_handler('WSH_DELIVERY_VALIDATION.get_delivery_information',l_module_name);
13139       --
13140       IF l_debug_on THEN
13141         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13142         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13143       END IF;
13144       --
13145   END GET_DELIVERY_INFORMATION;
13146 
13147   --END OTM R12
13148 
13149 END WSH_DELIVERY_VALIDATIONS;