DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_DELIVERY_VALIDATIONS

Source


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