DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_DELIVERIES_GRP

Source


1 PACKAGE BODY WSH_DELIVERIES_GRP as
2 /* $Header: WSHDEGPB.pls 120.31 2010/08/06 16:09:01 anvarshn ship $ */
3 
4 --===================
5 -- CONSTANTS
6 --===================
7 G_PKG_NAME CONSTANT VARCHAR2(30) := 'WSH_DELIVERIES_GRP';
8 -- add your constants here if any
9 
10 -- Forward declaration
11 PROCEDURE Lock_Related_Entities(
12          p_rec_attr_tab     IN  WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
13          p_action_prms      IN  action_parameters_rectype,
14          x_valid_ids_tab    OUT NOCOPY WSH_UTIL_CORE.ID_TAB_TYPE,
15          x_return_status    OUT NOCOPY VARCHAR2
16           );
17 
18 --===================
19 -- PROCEDURES
20 --===================
21 -- I Harmonization: rvishnuv ******* Actions ******
22 --========================================================================
23 -- PROCEDURE : Delivery_Action         Must be called only by the Form
24 --                                     and the Wrapper Group API.
25 --
26 -- PARAMETERS: p_api_version_number    known api version error number
27 --             p_init_msg_list         FND_API.G_TRUE to reset list
28 --             x_return_status         return status
29 --             x_msg_count             number of messages in the list
30 --             x_msg_data              text of messages
31 --             p_action_prms           Record of caller, phase, action_code and other
32 --                                     parameters specific to the actions.
33 --         p_rec_attr_tab          Table of attributes for the delivery entity
34 --             x_result_id_tab         Table of result ids for the actions 'AUTO-PACK',
35 --                                     'AUTO-PACK-MASTER' and 'PICK-RELEASE'
36 --             x_valid_ids_tab         Table of valid indexes or ids.  If the caller is STF,
37 --                                     it contains table of valid indexes, else it contains
38 --                                     table of valid ids.
39 --             x_selection_issue_flag  It is a form specific out parameter. It set to 'Y', if
40 --                                     the Validations in phase 1 return a 'warning'.
41 --             x_defaults_rec          Record of Default Parameters that passed for the actions
42 --                                     'CONFIRM', 'UNASSIGN-TRIP'.
43 --             x_delivery_out_rec      Record of output parameters based on the actions.
44 -- VERSION   : current version         1.0
45 --             initial version         1.0
46 -- COMMENT   : This procedure is used to perform an action specified
47 --             in p_action_prms.action_code on an existing delivery identified
48 --             by p_rec_attr.delivery_id.
49 --========================================================================
50 
51   PROCEDURE Delivery_Action
52   ( p_api_version_number     IN   NUMBER,
53     p_init_msg_list          IN   VARCHAR2,
54     p_commit         IN   VARCHAR2,
55     p_action_prms      IN   action_parameters_rectype,
56     p_rec_attr_tab       IN   WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type ,
57     x_delivery_out_rec       OUT  NOCOPY Delivery_Action_Out_Rec_Type,
58     x_defaults_rec       OUT  NOCOPY default_parameters_rectype,
59     x_return_status          OUT  NOCOPY VARCHAR2,
60     x_msg_count              OUT  NOCOPY NUMBER,
61     x_msg_data               OUT  NOCOPY VARCHAR2
62   )
63   IS
64 
65   CURSOR trip_cur(p_trip_id NUMBER) IS
66     SELECT SHIP_METHOD_CODE
67     FROM wsh_trips
68     WHERE trip_id = p_trip_id;
69 
70 
71   -- Bug 3346237 : Defer interface and enforce ship method to be taken from global parameters
72 
73   cursor get_defer_interface is
74     select defer_interface,
75            enforce_ship_method
76     from wsh_global_parameters;
77 
78 
79   CURSOR c_dlvy_pack_slip_cur(p_delivery_id NUMBER) IS
80      SELECT sequence_number
81      FROM wsh_document_instances
82      WHERE entity_name = 'WSH_NEW_DELIVERIES'
83      AND entity_id = p_delivery_id
84      AND document_type = 'PACK_TYPE';
85 
86   -- Cursors c_pack_slip_doc_set and c_delv_trip_id_cursor added for bug 4493263
87   CURSOR c_pack_slip_doc_set IS
88     SELECT WRS.Report_Set_Id
89     FROM   Wsh_Report_Sets Wrs,
90            Wsh_Report_Set_Lines Wrsl
91     WHERE  Wrsl.Report_Set_Id = Wrs.Report_Set_Id
92     AND    Wrs.Name = 'Packing Slip Report';
93 
94   CURSOR c_delv_trip_id_cursor( t_delivery_id NUMBER ) IS
95     select distinct trip_id from wsh_trip_stops
96     where stop_id in
97       ( select distinct pick_up_stop_id
98         from   wsh_delivery_legs
99         where  delivery_id = t_delivery_id );
100 
101 
102   CURSOR c_dlvy_leg_cur(p_delivery_id NUMBER) IS
103     SELECT b.delivery_leg_id,
104     b.pick_up_location_id,
105     b.drop_off_location_id,
106     b.ship_method,
107     b.carrier_id,
108     b.trip_id,
109     b.trip_name,
110     l.parent_delivery_leg_id
111     FROM wsh_bols_db_v b, wsh_delivery_legs l
112     WHERE b.delivery_id = p_delivery_id
113     AND l.delivery_leg_id = b.delivery_leg_id;
114 
115   CURSOR c_child_deliveries(p_delivery_id IN NUMBER) IS
116     select child.delivery_id
117     from wsh_delivery_legs parent,
118          wsh_delivery_legs child
119     where parent.delivery_id = p_delivery_id
120     and   parent.delivery_leg_id = child.parent_delivery_leg_id;
121 
122 
123   Cursor c_get_delivery_org(c_delivery_id number) is
124       SELECT initial_pickup_location_id
125       FROM wsh_new_deliveries
126       WHERE delivery_id = c_delivery_id;
127 
128   Cursor c_del_assign_to_trip(c_delivery_id number) is
129 	SELECT distinct t.trip_id, t.ship_method_code, t.lane_id
130 	FROM   wsh_new_deliveries dl,
131 	       wsh_delivery_legs dg,
132 	       wsh_trip_stops st,
133 	       wsh_trips t
134 	WHERE  dl.delivery_id = c_delivery_id AND
135 	       dl.delivery_id = dg.delivery_id AND
136 	       (dg.pick_up_stop_id = st.stop_id
137 		OR
138 		dg.DROP_OFF_STOP_ID = st.stop_id) AND
139 	       st.trip_id = t.trip_id;
140 
141   --Bug 7418439 : The cursor selects the trip_id if the delivery is not the last unconfirmed delivery in the trip.
142   Cursor c_unconfirmed_del_exist(c_delivery_id number) is
143          SELECT s1.trip_id
144          FROM wsh_trip_stops s1,
145               wsh_delivery_legs dl1,
146               wsh_new_deliveries d1,
147               wsh_trip_stops s2,
148               wsh_delivery_legs dl2
149           WHERE d1.delivery_id <> c_delivery_id
150           AND s1.stop_id = dl1.pick_up_stop_id
151           AND d1.delivery_id = dl1.delivery_id
152           AND d1.status_code = 'OP'
153           AND d1.delivery_type = 'STANDARD'
154           AND s2.trip_id = s1.trip_id
155           AND s2.stop_id = dl2.pick_up_stop_id
156           AND dl2.delivery_id = c_delivery_id
157           AND rownum = 1;
158 
159      l_unconfirmed_del_exist NUMBER;
160 
161   --OTM R12
162   --selecting deliveries that has 'AR' status on a trip
163   CURSOR c_get_delivery_id(p_trip_id IN NUMBER) IS
164     SELECT wdl.delivery_id,
165            WSH_NEW_DELIVERIES_PVT.C_TMS_AWAITING_ANSWER interface_flag
166     FROM   wsh_delivery_legs wdl,
167            wsh_trip_stops wts,
168            wsh_new_deliveries wnd,
169            wsh_trips wt
170     WHERE  wt.trip_id = p_trip_id
171     AND    wts.trip_id = wt.trip_id
172     AND    wt.status_code = 'OP'
173     AND    wdl.pick_up_stop_id = wts.stop_id
174     AND    wnd.delivery_id = wdl.delivery_id
175     AND    wnd.tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_ANSWER_RECEIVED;
176   --END OTM R12
177   --
178   -- LSP PROJECT :
179   CURSOR c_get_client(p_delivery_id NUMBER) IS
180     SELECT client_id
181     FROM   wsh_new_deliveries
182     WHERE  delivery_id = p_delivery_id;
183   --
184   l_client_id               NUMBER;
185   l_standalone_mode         VARCHAR2(1);
186   -- LSP PROJECT : end
187   l_first                   NUMBER;
188   l_last                    NUMBER;
189   l_return_status           VARCHAR2(1);
190   l_num_errors              NUMBER := 0;
191   l_num_warnings            NUMBER := 0;
192   l_api_version_number      CONSTANT NUMBER := 1.0;
193   l_api_name                CONSTANT VARCHAR2(30):= 'Delivery_Action';
194   l_msg_count               NUMBER;
195   l_msg_data                VARCHAR2(32767);
196   l_counter                 NUMBER;
197   l_index                   NUMBER;
198   --
199   l_report_set_id           NUMBER := p_action_prms.report_set_id;
200   l_form_flag               VARCHAR2(1);
201   l_trip_id                 NUMBER := p_action_prms.trip_id;
202   l_pickup_loc_id           NUMBER := p_action_prms.pickup_loc_id;
203   l_dropoff_loc_id          NUMBER := p_action_prms.dropoff_loc_id;
204   --
205   l_debug_on                BOOLEAN;
206   l_module_name             CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DELIVERY_ACTION';
207   --
208   l_delivery_id_tab         wsh_util_core.id_tab_type;
209   l_valid_ids_tab           wsh_util_core.id_tab_type;
210   l_valid_index_tab         wsh_util_core.id_tab_type;
211   l_error_ids               wsh_util_core.id_tab_type;
212   l_org_id_tab              wsh_util_core.id_tab_type;
213   l_Client_id_tab		    wsh_util_core.id_tab_type;  -- Modified R12.1.1 LSP PROJECT
214   l_rec_attr_tab            wsh_new_deliveries_pvt.Delivery_Attr_Tbl_Type;
215   l_ship_method_code_tab    WSH_NEW_DELIVERY_ACTIONS.ship_method_type;
216   l_delivery_rec_tab        wsh_delivery_validations.dlvy_rec_tab_type;
217   l_dummy_id_tab            wsh_util_core.id_tab_type;
218   l_dummy_doc_set_params    wsh_document_sets.document_set_tab_type;
219   l_param_name              VARCHAR2(100);
220   l_isWshLocation           BOOLEAN DEFAULT FALSE;
221   --
222   --Compatibility Changes
223   l_cc_validate_result      VARCHAR2(1);
224   l_caller_module           VARCHAR2(3);
225   l_cc_failed_records       WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
226   l_cc_line_groups          WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
227   l_cc_group_info           WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
228   b_cc_linefailed           boolean;
229   b_cc_groupidexists        boolean;
230   l_delivery_id_tab_temp    wsh_util_core.id_tab_type;
231   l_delivery_id_tab_t       wsh_util_core.id_tab_type;
232   l_rec_attr_tab_temp       WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
233   l_cc_count_success        NUMBER;
234   l_cc_count_group_ids      NUMBER;
235   l_cc_count_rec            NUMBER;
236   l_cc_group_ids            wsh_util_core.id_tab_type;
237   l_cc_upd_dlvy_intmed_ship_to  VARCHAR2(1);
238   l_cc_upd_dlvy_ship_method VARCHAR2(1);
239   l_cc_dlvy_intmed_ship_to  NUMBER;
240   l_cc_dlvy_ship_method     VARCHAR2(30);
241   l_cc_del_rows             wsh_util_core.id_tab_type;
242   l_cc_grouping_rows        wsh_util_core.id_tab_type;
243   l_cc_return_status        VARCHAR2(1);
244   l_cc_count_del_rows       NUMBER;
245   l_cc_count_trip_rows      NUMBER;
246   l_cc_count_grouping_rows  NUMBER;
247   l_cc_trip_id              wsh_util_core.id_tab_type;
248   l_cc_trip_id_tab          wsh_util_core.id_tab_type;
249   --dummy tables for calling validate_constraint_mainper
250   l_cc_del_attr_tab         WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
251   l_cc_det_attr_tab         wsh_glbl_var_strct_grp.Delivery_Details_Attr_Tbl_Type;
252   l_cc_trip_attr_tab        WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
253   l_cc_stop_attr_tab        WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
254   l_cc_in_ids               wsh_util_core.id_tab_type;
255   l_cc_fail_ids             wsh_util_core.id_tab_type;
256   --
257 
258   --Compatibility Changes
259   --
260   l_tripindex               NUMBER;
261   l_trip_names              wsh_util_core.column_tab_type;
262 
263   --
264   -- l_trip_name VARCHAR2(30) := NULL;
265   l_action_code             VARCHAR2(32767);
266   i                         NUMBER;
267   j		            NUMBER;
268   l_DelivGrpRec	            WSH_TRIP_CONSOLIDATION.t_DelivGrpRec;
269   l_tripID		    NUMBER;
270   l_defer_interface_flag    VARCHAR2(1);
271   --
272 
273   -- PACK J: QS: KVENKATE
274   l_dlvy_doc_seq_num        VARCHAR2(50);
275   l_application_id          NUMBER;
276   l_request_id              NUMBER;
277 
278   -- Added for bug 4493263
279   l_doc_set_id              NUMBER;
280   l_doc_delivery_id_tab     wsh_util_core.id_tab_type;
281   l_doc_valid_ids_tab       wsh_util_core.id_tab_type;
282 
283   l_dleg_prms               WSH_DELIVERY_LEGS_GRP.action_parameters_rectype;
284   l_dleg_action_out_rec     WSH_DELIVERY_LEGS_GRP.action_out_rec_type;
285   l_dleg_tab                WSH_DELIVERY_LEGS_GRP.dlvy_leg_tab_type;
286 
287   l_action_prms             action_parameters_rectype;
288   l_delivery_out_rec        Delivery_Action_Out_Rec_Type;
289   l_defaults_rec            default_parameters_rectype;
290   l_loop_num_warn           NUMBER := 0;
291   l_loop_num_err            NUMBER := 0;
292   l_submitted_docs          NUMBER :=0;
293   l_req_id_str              VARCHAR2(2000);
294   -- PACK J: KVENKATE
295   l_routingRespIdTab	    wsh_util_core.id_tab_type;
296 
297   -- csun deliveryMerge
298   l_exception_id            NUMBER;
299   l_initial_pickup_location_id  NUMBER;
300   l_exception_message       VARCHAR2(2000);
301   l_in_param_rec            WSH_FTE_INTEGRATION.rate_del_in_param_rec;
302   l_out_param_rec           WSH_FTE_INTEGRATION.rate_del_out_param_rec;
303 
304   -- J-Stop Sequence Change-CSUN
305   l_stop_details_rec        WSH_TRIP_STOPS_VALIDATIONS.stop_details;
306 
307   -- Bug 3311273
308   l_dleg_found              VARCHAR2(1) := 'N';
309   --
310   --dcp
311   l_check_dcp               NUMBER;
312   l_stop_id                 NUMBER;
313 
314   -- Bug 3877951
315   l_intransit_flag          varchar2(1);
316 
317   l_ship_method_code        VARCHAR2(30);
318   l_ship_method_name        VARCHAR2(240);  -- Bug#3880569
319 
320   -- Bug 4100661 (FP: 4103129)
321   l_temp_trip_id            NUMBER;
322   l_temp_lane_id            NUMBER;
323   l_temp_ship_method_code   WSH_TRIPS.SHIP_METHOD_CODE%TYPE;
324 
325   l_temp                    NUMBER;
326   l_is_del_assign_trip      BOOLEAN;
327   --Bugfix 4070732
328   l_api_session_name        CONSTANT VARCHAR2(150) := G_PKG_NAME ||'.' || l_module_name;
329   l_reset_flags             BOOLEAN;
330 
331 
332   -- K LPN CONV. rv
333   l_lpn_in_sync_comm_rec    WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
334   l_lpn_out_sync_comm_rec   WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
335   -- K LPN CONV. rv
336 
337   l_child_deliveries_tab    wsh_util_core.id_tab_type;
338 
339   --OTM R12
340   l_new_delivery_id_tab	    WSH_UTIL_CORE.ID_TAB_TYPE;
341   l_new_interface_flag_tab  WSH_UTIL_CORE.COLUMN_TAB_TYPE;
342   l_gc3_is_installed        VARCHAR2(1);
343   --
344 
345   BEGIN
346     <<api_start>>
347     --
348     -- Bug 4070732
349     IF WSH_UTIL_CORE.G_START_OF_SESSION_API is null THEN
350       WSH_UTIL_CORE.G_START_OF_SESSION_API     := l_api_session_name;
351       WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API := FALSE;
352     END IF;
353     --
354     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
355     --
356     IF l_debug_on IS NULL
357     THEN
358         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
359     END IF;
360     --
361     SAVEPOINT DELIVERY_ACTION_GRP;
362     --
363     l_check_dcp := WSH_DCP_PVT.G_CHECK_DCP;
364 
365     IF l_check_dcp IS NULL THEN
366        l_check_dcp := wsh_dcp_pvt.is_dcp_enabled;
367     END IF;
368 
369 
370 
371     IF NOT FND_API.Compatible_API_Call
372       ( l_api_version_number,
373         p_api_version_number,
374         l_api_name,
375         G_PKG_NAME
376        )
377     THEN
378       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
379     END IF;
380     --
381     IF FND_API.to_Boolean(p_init_msg_list) THEN
382       FND_MSG_PUB.initialize;
383     ELSE
384      IF nvl(l_check_dcp, '-99') IN (1,2) THEN
385       WSH_DCP_PVT.G_INIT_MSG_COUNT := fnd_msg_pub.count_msg;
386      END IF;
387     END IF;
388     --
389     IF l_debug_on THEN
390       wsh_debug_sv.push (l_module_name);
391       wsh_debug_sv.log (l_module_name,'action_code',p_action_prms.action_code);
392       wsh_debug_sv.log (l_module_name,'caller',p_action_prms.caller);
393       wsh_debug_sv.log (l_module_name,'COUNT',p_rec_attr_tab.COUNT);
394     END IF;
395 
396     --Fix for bug 3636800
397     --Initialize l_num_warning, l_num_error so that when dcp code re-runs this procedure,
398     --these variables are reinitialized.
399     l_num_warnings := 0;
400     l_num_errors := 0;
401 
402     IF p_action_prms.action_code IS NULL THEN
403       l_param_name := 'p_action_prms.action_code';
404     ELSIF p_action_prms.caller IS NULL  THEN
405       l_param_name := 'p_action_prms.caller';
406     ELSIF p_action_prms.caller = 'WSH_FSTRX' THEN
407       IF p_action_prms.phase IS NULL THEN
408         l_param_name := 'p_action_prms.phase';
409       END IF;
410     ELSIF p_rec_attr_tab.COUNT = 0  THEN
411       l_param_name := 'p_rec_attr_tab.COUNT';
412     END IF;
413 
414     IF l_param_name is not null THEN
415       FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
416       FND_MESSAGE.SET_TOKEN('FIELD_NAME',l_param_name);
417       x_return_status := wsh_util_core.g_ret_sts_error;
418       wsh_util_core.add_message(x_return_status,l_module_name);
419       RAISE FND_API.G_EXC_ERROR;
420     END IF;
421 
422     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
423 
424     --OTM R12
425     l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
426 
427     IF l_gc3_is_installed IS NULL THEN
428       l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
429     END IF;
430     --
431 
432     IF p_action_prms.caller IN ( 'WSH_FSTRX' , 'WSH_TPW_INBOUND')
433      OR p_action_prms.caller LIKE 'FTE%' THEN
434        l_isWshLocation := TRUE;
435     END IF;
436 
437     i := p_rec_attr_tab.FIRST;
438     --l_last := p_rec_attr_tab.LAST;
439 
440     --
441     WHILE i is not null LOOP
442     --
443       l_delivery_id_tab(i) := p_rec_attr_tab(i).delivery_id;
444       IF nvl(p_action_prms.phase,1) = 1 THEN
445         l_delivery_rec_tab(i).delivery_id := p_rec_attr_tab(i).delivery_id;
446         l_delivery_rec_tab(i).status_code := p_rec_attr_tab(i).status_code;
447         l_delivery_rec_tab(i).planned_flag := p_rec_attr_tab(i).planned_flag;
448         l_delivery_rec_tab(i).organization_id := p_rec_attr_tab(i).organization_id;
449         l_delivery_rec_tab(i).shipment_direction := p_rec_attr_tab(i).shipment_direction;
450         --OTM R12
451         l_delivery_rec_tab(i).ignore_for_planning := p_rec_attr_tab(i).ignore_for_planning;
452         l_delivery_rec_tab(i).tms_interface_flag := p_rec_attr_tab(i).tms_interface_flag;
453         --
454         l_delivery_rec_tab(i).client_id := p_rec_attr_tab(i).client_id; -- LSP PROJECT
455         --
456         IF l_debug_on THEN
457           wsh_debug_sv.log (l_module_name,'client_id',p_rec_attr_tab(i).client_id); -- LSP PROJECT
458         END IF;
459         --
460         IF p_action_prms.action_code = 'CONFIRM' THEN
461           --
462           -- bug 6369687: Setting G_ACTION as 'CONFIRM'
463           G_ACTION := 'CONFIRM';
464           l_org_id_tab(i) := p_rec_attr_tab(i).organization_id;
465           l_ship_method_code_tab(i) := p_rec_attr_tab(i).ship_method_code;
466           l_client_id_tab(i) := p_rec_attr_tab(i).client_id; -- Modified R12.1.1 LSP PROJECT
467           --
468           IF l_debug_on THEN
469             wsh_debug_sv.log (l_module_name,' Ship Method Code ' || p_rec_attr_tab(i).ship_method_code );
470           END IF;
471           --
472         END IF;
473         --
474         IF l_debug_on THEN
475           wsh_debug_sv.log (l_module_name,'delivery_id',p_rec_attr_tab(i).delivery_id);
476           wsh_debug_sv.log (l_module_name,'status_code',p_rec_attr_tab(i).status_code);
477           wsh_debug_sv.log (l_module_name,'planned_flag',p_rec_attr_tab(i).planned_flag);
478           wsh_debug_sv.log (l_module_name,'organization_id',p_rec_attr_tab(i).organization_id);
479           wsh_debug_sv.log (l_module_name,'shipment_direction',p_rec_attr_tab(i).shipment_direction);
480           --OTM R12
481           wsh_debug_sv.log (l_module_name,'ignore_for_planning',p_rec_attr_tab(i).ignore_for_planning);
482           wsh_debug_sv.log (l_module_name,'tms_interface_flag',p_rec_attr_tab(i).tms_interface_flag);
483           --
484           wsh_debug_sv.log (l_module_name,'client_id',p_rec_attr_tab(i).client_id); -- Modified R12.1.1 LSP PROJECT
485         END IF;
486         --
487       END IF;
488       --
489       IF l_debug_on THEN
490         wsh_debug_sv.log (l_module_name,'delivery_id tab( ' || i || ')' ,l_delivery_id_tab(i));
491       END IF;
492     --
493       i := p_rec_attr_tab.NEXT(i);
494     END LOOP;
495     --
496     --
497     i := 0;
498     --
499     -- bug 2789821
500     -- This condition is added so that we treat these actions
501     -- as equivalent to "PICK-RELEASE" ONLY during
502     -- setting the levels and validating the eligibility of the action
503     IF p_action_prms.action_code IN ('PICK-SHIP', 'PICK-PACK-SHIP') THEN
504       l_action_code := 'PICK-RELEASE';
505     ELSIF p_action_prms.action_code IN ('AUTOCREATE-TRIP', 'TRIP-CONSOLIDATION') THEN
506       l_action_code := 'AUTOCREATE-TRIP';
507     ELSE
508       l_action_code := p_action_prms.action_code;
509     END IF;
510     --
511     WSH_ACTIONS_LEVELS.set_validation_level (
512       p_entity        => 'DLVY',
513       p_caller        => p_action_prms.caller,
514       p_phase         => nvl(p_action_prms.phase,1), -- phase should not be null
515       p_action        => l_action_code,
516       x_return_status => l_return_status);
517     --
518     IF l_debug_on THEN
519       wsh_debug_sv.log(l_module_name,'Return Status After Calling set_validation_level',l_return_status);
520     END IF;
521     --
522     wsh_util_core.api_post_call(
523       p_return_status    => l_return_status,
524       x_num_warnings     => l_num_warnings,
525       x_num_errors       => l_num_errors);
526     --
527     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_ACTION_ENABLED_LVL) = 1 THEN
528       IF l_debug_on THEN
529         wsh_debug_sv.logmsg(l_module_name,'Calling IS_Action_Enabled');
530       END IF;
531 
532       WSH_DELIVERY_VALIDATIONS.Is_Action_Enabled(
533         p_dlvy_rec_tab            => l_delivery_rec_tab,
534         p_action                  => l_action_code,
535         p_caller                  => p_action_prms.caller,
536         p_tripid                  => p_action_prms.trip_id,--J TP Release
537         x_return_status           => l_return_status,
538         x_valid_ids               => l_valid_ids_tab ,
539         x_error_ids               => l_error_ids ,
540         x_valid_index_tab         => l_valid_index_tab);
541 
542       IF l_debug_on THEN
543         wsh_debug_sv.log(l_module_name,'Return Status After Calling IS_Action_Enabled',l_return_status);
544       END IF;
545       --
546       wsh_util_core.api_post_call(
547         p_return_status    => l_return_status,
548         x_num_warnings     => l_num_warnings,
549         x_num_errors       => l_num_errors,
550         p_msg_data         => NULL,
551         p_raise_error_flag => FALSE);
552       --
553       IF p_action_prms.caller IN ('WSH_FSTRX', 'WSH_TRCON') THEN
554          x_delivery_out_rec.valid_ids_tab := l_valid_index_tab;
555       ELSE
556          x_delivery_out_rec.valid_ids_tab := l_valid_ids_tab;
557       END IF;
558       --
559     END IF;
560     --
561     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_LOCK_RECORDS_LVL) = 1 THEN
562       --
563      IF  NOT (    p_action_prms.caller = 'WSH_FSTRX'
564               AND p_action_prms.action_code =  'DELETE'
565              )  THEN --BUG 4354579
566       WSH_NEW_DELIVERIES_PVT.Lock_Delivery(
567         p_rec_attr_tab          => p_rec_attr_tab,
568         p_caller                => p_action_prms.caller,
569         p_valid_index_tab       => l_valid_index_tab,
570         x_valid_ids_tab         => l_valid_ids_tab,
571         x_return_status         => l_return_status,
572         p_action                => p_action_prms.action_code);
573       --
574       IF l_debug_on THEN
575         wsh_debug_sv.log(l_module_name,'Return Status After Calling Lock_Delivery',l_return_status);
576       END IF;
577       --
578       wsh_util_core.api_post_call(
579         p_return_status    => l_return_status,
580         x_num_warnings     => l_num_warnings,
581         x_num_errors       => l_num_errors,
582         p_msg_data         => NULL,
583         p_raise_error_flag => FALSE);
584       --
585       x_delivery_out_rec.valid_ids_tab := l_valid_ids_tab;
586       --
587      END IF;
588     END IF;
589 
590     --
591     IF(l_num_errors >0 ) THEN
592       --{
593       x_return_status := wsh_util_core.g_ret_sts_error;
594       --
595       IF p_action_prms.caller = 'WSH_FSTRX' THEN
596         FND_MESSAGE.SET_NAME('WSH', 'WSH_DISABLE_ACTION');
597         wsh_util_core.add_message(x_return_status,l_module_name);
598       END IF;
599       --
600       IF l_debug_on THEN
601         wsh_debug_sv.logmsg(l_module_name, 'WSH_DISABLE_ACTION');
602       END IF;
603       --
604       RAISE FND_API.G_EXC_ERROR;
605       --}
606     END IF;
607     --
608     -- bug 2651859.  Refreshing the table of ids.
609     -- before defaulting the parameters.
610     IF l_num_warnings > 0 and l_valid_ids_tab.count > 0
611     AND p_action_prms.action_code IN ('UNASSIGN-TRIP', 'CONFIRM')
612     THEN
613       --
614       l_delivery_id_tab.delete;
615       l_org_id_tab.delete;
616       l_ship_method_code_tab.delete;
617       FOR i in l_valid_ids_tab.first..l_valid_ids_tab.last LOOP
618       --
619         l_delivery_id_tab(i) := p_rec_attr_tab(i).delivery_id;
620         --
621         IF l_debug_on THEN
622           wsh_debug_sv.log (l_module_name,'delivery_id',l_delivery_id_tab(i));
623         END IF;
624         --
625         IF p_action_prms.action_code = 'CONFIRM' THEN
626           --
627           l_org_id_tab(i) := p_rec_attr_tab(i).organization_id;
628           l_ship_method_code_tab(i) := p_rec_attr_tab(i).ship_method_code;
629           l_client_id_tab(i) := p_rec_attr_tab(i).client_id; -- Modified R12.1.1 LSP PROJECT
630           --
631           IF l_debug_on THEN
632             wsh_debug_sv.log (l_module_name,' Ship Method Code ' || p_rec_attr_tab(i).ship_method_code );
633             wsh_debug_sv.log (l_module_name,' Organization_Id ' || p_rec_attr_tab(i).organization_id );
634             wsh_debug_sv.log (l_module_name,' Client_Id ' || p_rec_attr_tab(i).client_id); -- Modified R12.1.1 LSP PROJECT
635 
636           END IF;
637           --
638         END IF;
639         --
640       --
641       END LOOP;
642       --
643     END IF;
644       --
645     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DLVY_DEFAULTS_LVL) = 1 THEN
646       --
647       WSH_NEW_DELIVERY_ACTIONS.Get_Delivery_Defaults(
648         p_del_rows              => l_delivery_id_tab,
649         p_org_ids               => l_org_id_tab,
650         p_client_ids		        => l_client_id_tab, -- Modified R12.1.1 LSP PROJECT
651         p_ship_method_code_vals => l_ship_method_code_tab,
652         x_autointransit_flag    => x_defaults_rec.autointransit_flag,
653         x_autoclose_flag        => x_defaults_rec.autoclose_flag,
654         x_report_set_id         => x_defaults_rec.report_set_id,
655         x_report_set_name       => x_defaults_rec.report_set_name,
656         x_ship_method_name      => x_defaults_rec.ship_method_name,
657         x_return_status         => l_return_status,
658         x_sc_rule_id            => x_defaults_rec.sc_rule_id,
659         x_ac_bol_flag           => x_defaults_rec.ac_bol_flag,
660         x_defer_interface_flag  => x_defaults_rec.defer_interface_flag,
661         x_sc_rule_name          => x_defaults_rec.sc_rule_name
662         );
663       --
664       IF l_debug_on THEN
665         wsh_debug_sv.log(l_module_name,'Return Status After Calling Get_Delivery_Defaults',l_return_status);
666         wsh_debug_sv.log(l_module_name,' Default AutoIntransit_Flag ',x_defaults_rec.autointransit_flag);
667         wsh_debug_sv.log(l_module_name,' Default Autoclose_flag ',x_defaults_rec.autoclose_flag);
668         wsh_debug_sv.log(l_module_name,' Default report_set_id ',x_defaults_rec.report_set_id);
669         wsh_debug_sv.log(l_module_name,' Default report_set_name ',x_defaults_rec.report_set_name);
670         wsh_debug_sv.log(l_module_name,' Default ship_method_name ',x_defaults_rec.ship_method_name);
671         wsh_debug_sv.log(l_module_name,' Sc Rule ',x_defaults_rec.sc_rule_id);
672         wsh_debug_sv.log(l_module_name,' Sc RuleName ',x_defaults_rec.sc_rule_name);
673         wsh_debug_sv.log(l_module_name,' BOL ',x_defaults_rec.ac_bol_flag);
674         wsh_debug_sv.log(l_module_name,' DI flag ',x_defaults_rec.defer_interface_flag);
675 
676       END IF;
677       --
678       wsh_util_core.api_post_call(
679         p_return_status    => l_return_status,
680         x_num_warnings     => l_num_warnings,
681         x_num_errors       => l_num_errors);
682       --
683       open get_defer_interface;
684       fetch get_defer_interface into l_defer_interface_flag, x_defaults_rec.enforce_ship_method;
685       close get_defer_interface;
686    -- END IF;
687 -- Ship Confirm Rule is Null, then use defer interface flag for 1st record
688       IF x_defaults_rec.sc_rule_id IS NULL THEN
689         x_defaults_rec.defer_interface_flag := l_defer_interface_flag;
690       END IF;
691     END IF;
692     --
693     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_CHECK_UNASSIGN_LVL) = 1 THEN
694       --
695       WSH_TRIPS_ACTIONS.check_unassign_trip (
696         p_del_rows      => l_delivery_id_tab,
697         x_trip_rows     => x_defaults_rec.trip_id_tab,
698         x_return_status => l_return_status);
699       --
700       IF l_debug_on THEN
701         wsh_debug_sv.log(l_module_name,'Return Status After Calling check_unassign_trip',l_return_status);
702       END IF;
703       --
704       wsh_util_core.api_post_call(
705         p_return_status    => l_return_status,
706         x_num_warnings     => l_num_warnings,
707         x_num_errors       => l_num_errors);
708       --
709     END IF;
710     --
711     IF l_num_warnings > 0 THEN
712       --
713       FND_MESSAGE.SET_NAME('WSH', 'WSH_DISABLE_ACTION_WARN');
714       x_return_status := wsh_util_core.g_ret_sts_warning;
715       wsh_util_core.add_message(x_return_status,l_module_name);
716       IF l_debug_on THEN
717         wsh_debug_sv.logmsg(l_module_name, 'WSH_DISABLE_ACTION_WARN');
718         wsh_debug_sv.log(l_module_name, 'x_delivery_out_rec.valid_ids_tab count is', l_valid_ids_tab.count);
719       END IF;
720       --
721       IF p_action_prms.caller IN ('WSH_FSTRX', 'WSH_TRCON') THEN
722         x_delivery_out_rec.selection_issue_flag := 'Y';
723         RAISE WSH_UTIL_CORE.G_EXC_WARNING;
724       ELSE
725         RAISE FND_API.G_EXC_ERROR;
726       END IF;
727       --
728     END IF;
729     --
730    IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_VALIDATE_CONSTRAINTS_LVL) = 1  THEN --{
731     --Compatiblity Changes
732     --for autocreatetrip or if assign trip and caller is STF, phase=2
733 
734     IF wsh_util_core.fte_is_installed='Y'  THEN
735 
736     l_caller_module := SUBSTR(p_action_prms.caller,1,3);
737     --
738     IF l_debug_on THEN
739         wsh_debug_sv.log (l_module_name,'l_caller_module : '||l_caller_module);
740         wsh_debug_sv.log (l_module_name,'p_action_prms.pickup_loc_id : '||p_action_prms.pickup_loc_id);
741         wsh_debug_sv.log (l_module_name,'p_action_prms.dropoff_loc_id : '||p_action_prms.dropoff_loc_id);
742         wsh_debug_sv.log (l_module_name,'p_action_prms.ship_method_code : '||p_action_prms.ship_method_code);
743     END IF;
744     --
745 
746     i := p_rec_attr_tab.FIRST;
747     WHILE i is not null LOOP
748     --
749         l_rec_attr_tab_temp(i) := p_rec_attr_tab(i);
750 
751         IF l_caller_module = 'FTE' THEN
752            IF p_action_prms.ship_method_code IS NOT NULL AND p_action_prms.ship_method_code <> p_rec_attr_tab(i).ship_method_code THEN
753               l_rec_attr_tab_temp(i).ship_method_code := p_action_prms.ship_method_code;
754            END IF;
755 
756         END IF;
757       --
758       IF l_debug_on THEN
759         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp index '|| i);
760         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp delivery_id '|| l_rec_attr_tab_temp(i).delivery_id);
761         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp name '|| l_rec_attr_tab_temp(i).name);
762         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp status_code '|| l_rec_attr_tab_temp(i).status_code);
763         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp planned_flag '|| l_rec_attr_tab_temp(i).planned_flag);
764         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp organization_id '|| l_rec_attr_tab_temp(i).organization_id);
765         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp customer_id '|| l_rec_attr_tab_temp(i).customer_id);
766         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp delivery_type '|| l_rec_attr_tab_temp(i).delivery_type);
767         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp initial_pickup_location_id '|| l_rec_attr_tab_temp(i).initial_pickup_location_id);
768         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp ultimate_dropoff_location_id '|| l_rec_attr_tab_temp(i).ultimate_dropoff_location_id);
769         wsh_debug_sv.log (l_module_name,'l_rec_attr_tab_temp ship_method_code '|| l_rec_attr_tab_temp(i).ship_method_code);
770       END IF;
771       --
772       i := p_rec_attr_tab.NEXT(i);
773     END LOOP;
774     i := 0;
775     --
776     IF l_debug_on THEN
777         wsh_debug_sv.log (l_module_name,'Calling validate_constraint_main ');
778     END IF;
779     --
780 
781      WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
782        p_api_version_number =>  p_api_version_number,
783        p_init_msg_list      =>  FND_API.G_FALSE,
784        p_entity_type        =>  'D',
785        p_target_id          =>  p_action_prms.TRIP_ID,
786        p_action_code        =>  l_action_code,
787        --p_del_attr_tab       =>  p_rec_attr_tab,
788        p_del_attr_tab       =>  l_rec_attr_tab_temp,
789        p_det_attr_tab       =>  l_cc_det_attr_tab,
790        p_trip_attr_tab      =>  l_cc_trip_attr_tab,
791        p_stop_attr_tab      =>  l_cc_stop_attr_tab,
792        p_in_ids             =>  l_cc_in_ids,
793        p_pickup_stop_id     => p_action_prms.pickup_stop_id,
794        p_pickup_loc_id      => p_action_prms.pickup_loc_id,
795        p_pickup_stop_seq    => p_action_prms.pickup_stop_seq,
796        p_dropoff_stop_id    => p_action_prms.dropoff_stop_id,
797        p_dropoff_loc_id     => p_action_prms.dropoff_loc_id,
798        p_dropoff_stop_seq   => p_action_prms.dropoff_stop_seq,
799        p_pickup_arr_date    => p_action_prms.pickup_arr_date,
800        p_pickup_dep_date    => p_action_prms.pickup_dep_date,
801        p_dropoff_arr_date   => p_action_prms.dropoff_arr_date,
802        p_dropoff_dep_date   => p_action_prms.dropoff_dep_date,
803        x_fail_ids           =>  l_cc_fail_ids,
804        x_validate_result          =>  l_cc_validate_result,
805        x_failed_lines             =>  l_cc_failed_records,
806        x_line_groups              =>  l_cc_line_groups,
807        x_group_info               =>  l_cc_group_info,
808        x_msg_count                =>  l_msg_count,
809        x_msg_data                 =>  l_msg_data,
810        x_return_status            =>  l_return_status);
811 
812 
813       IF l_debug_on THEN
814         wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
815         wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
816         wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
817         wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
818         wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
819         wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
820         wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
821       END IF;
822       --
823 
824     IF l_return_status=wsh_util_core.g_ret_sts_error THEN
825       --fix l_rec_attr_tab to have only successful records
826       l_cc_count_success:=1;
827 
828       IF l_debug_on THEN
829          wsh_debug_sv.log(l_module_name,'p_rec_attr_tab.count before removing failed lines',p_rec_attr_tab.COUNT);
830       END IF;
831 
832       IF l_cc_failed_records.COUNT = 0 AND p_rec_attr_tab.COUNT>0 THEN
833          l_return_status := wsh_util_core.g_ret_sts_success;
834       END IF;
835 
836 
837       IF l_cc_failed_records.COUNT>0 AND p_rec_attr_tab.COUNT>0 THEN
838 
839           --set return_status as warning
840           IF l_cc_failed_records.COUNT<>p_rec_attr_tab.COUNT THEN
841              l_return_status:=wsh_util_core.g_ret_sts_warning;
842           END IF;
843 
844        FOR i in p_rec_attr_tab.FIRST..p_rec_attr_tab.LAST LOOP
845         b_cc_linefailed:=FALSE;
846 
847          FOR j in l_cc_failed_records.FIRST..l_cc_failed_records.LAST LOOP
848           IF (p_rec_attr_tab(i).delivery_id=l_cc_failed_records(j).entity_line_id) THEN
849             b_cc_linefailed:=TRUE;
850             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
851             FND_MESSAGE.SET_TOKEN('DEL_ID',l_cc_failed_records(j).entity_line_id);
852             wsh_util_core.add_message(l_return_status);
853           END IF;
854          END LOOP;
855 
856         IF (NOT(b_cc_linefailed)) THEN
857           l_delivery_id_tab_t(l_cc_count_success):=p_rec_attr_tab(i).delivery_id;
858           l_cc_count_success:=l_cc_count_success+1;
859         END IF;
860       END LOOP;
861       --
862       IF l_debug_on
863       THEN
864         WSH_DEBUG_SV.logmsg(l_module_name,'Value of ctrl rec After constraints check');
865      END IF;
866 
867        --bsadri for assign-trip, if one line fails, then fail all lines {
868        IF l_action_code = 'ASSIGN-TRIP'
869           AND l_cc_failed_records.COUNT > 0 THEN
870           l_delivery_id_tab_t.DELETE;
871           l_return_status := wsh_util_core.g_ret_sts_error;
872        END IF;
873        --}
874 
875 
876       IF l_delivery_id_tab_t.COUNT>0 THEN
877         l_delivery_id_tab:=l_delivery_id_tab_t;
878       ELSE
879            IF l_debug_on THEN
880                wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
881            END IF;
882           wsh_util_core.api_post_call(
883            p_return_status    => l_return_status,
884            x_num_warnings     => l_num_warnings,
885            x_num_errors       => l_num_errors);
886 
887        END IF;
888 
889        IF l_debug_on THEN
890          wsh_debug_sv.log(l_module_name,'l_delivery_id_tab.count before removing failed lines',l_delivery_id_tab.COUNT);
891        END IF;
892     END IF;
893 
894    ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
895       wsh_util_core.api_post_call(
896            p_return_status    => l_return_status,
897            x_num_warnings     => l_num_warnings,
898            x_num_errors       => l_num_errors);
899    END IF;
900       --bug 3763800 : removed l_msg_data input so that message does not get added again
901       wsh_util_core.api_post_call(
902         p_return_status    => l_return_status,
903         x_num_warnings     => l_num_warnings,
904         x_num_errors       => l_num_errors,
905         p_raise_error_flag => FALSE);
906   END IF;
907     --Compatiblity Changes
908  END IF; --}
909 
910 
911 
912     IF p_action_prms.action_code IN ('CONFIRM', 'UNASSIGN-TRIP',
913                                      'ASSIGN-TRIP','OUTBOUND-DOCUMENT',
914                                      'PRINT-DOC-SETS')
915     AND nvl(p_action_prms.phase,1) = 1
916     AND p_action_prms.caller = 'WSH_FSTRX'
917     THEN
918       x_return_status := wsh_util_core.g_ret_sts_success;
919 
920       --Start of bug 4070732
921       --Calling Reset_stops_for_load_tender as it is returning successfully.
922 
923       --Bugfix 4070732 {
924       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
925          IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
926             IF l_debug_on THEN
927                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
928             END IF;
929 
930             WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
931                                                       x_return_status => x_return_status);
932 
933             IF l_debug_on THEN
934               WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
935             END IF;
936 
937          END IF;
938       END IF;
939       --}
940       -- End of bug 4070732
941 
942       IF l_debug_on THEN
943         wsh_debug_sv.logmsg(l_module_name, 'Returning back to the Form');
944         WSH_DEBUG_SV.pop(l_module_name);
945       END IF;
946       RETURN; -- Non-Generic Actions.
947     END IF;
948     --
949     -- Code added for Bug 2684692
950     -- Need to lock related entities where applicable
951     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_LOCK_RELATED_ENTITIES_LVL) = 1
952     THEN
953     -- {
954          Lock_Related_Entities(
955             p_rec_attr_tab     => p_rec_attr_tab,
956             p_action_prms      => p_action_prms,
957             x_valid_ids_tab    => l_delivery_id_tab,
958             x_return_status    => l_return_status
959          );
960 
961          wsh_util_core.api_post_call(
962          p_return_status    => l_return_status,
963          x_num_warnings     => l_num_warnings,
964          x_num_errors       => l_num_errors);
965       --
966     -- }
967     END IF;
968 
969 
970     --jckwok. Bug 3426434
971     IF p_action_prms.action_code IN ('UNASSIGN-TRIP',
972 					 'ASSIGN-TRIP')
973     THEN
974      IF (nvl(p_action_prms.trip_id, FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM
975      AND nvl(p_action_prms.trip_name, FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR)
976      THEN
977 	  FND_MESSAGE.SET_NAME('WSH', 'WSH_TRIP_ID_OR_NAME_REQUIRED');
978 	  FND_MESSAGE.SET_TOKEN('ACTION_CODE' , p_action_prms.action_code);
979 	  l_return_status := wsh_util_core.g_ret_sts_error;
980 	  wsh_util_core.add_message(l_return_status,l_module_name);
981 	  IF l_debug_on THEN
982 		 wsh_debug_sv.log (l_module_name,'Trip_id or Trip_name is required for this action');
983 	  END IF;
984           RAISE FND_API.G_EXC_ERROR;
985      END IF;
986     END IF;
987     --
988 
989     -- J-IB-NPARIKH-{
990     IF p_action_prms.action_code = 'GENERATE-ROUTING-RESPONSE' THEN
991       --
992         --
993         IF l_debug_on THEN
994             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.generate_routing_response',WSH_DEBUG_SV.C_PROC_LEVEL);
995         END IF;
996         --
997       WSH_ROUTING_RESPONSE_PKG.GenerateRoutingResponse
998         (
999             p_deliveryIdTab      => l_delivery_id_tab,
1000             x_routingRespIdTab   => l_routingRespIdTab,
1001             x_RetStatus          => l_return_status
1002         );
1003 
1004       --
1005       IF l_debug_on THEN
1006         wsh_debug_sv.log(l_module_name,'Return Status After Calling generate_routing_response',l_return_status);
1007       END IF;
1008       --
1009       wsh_util_core.api_post_call(
1010         p_return_status    => l_return_status,
1011         x_num_warnings     => l_num_warnings,
1012         x_num_errors       => l_num_errors);
1013       --
1014       -- J-IB-NPARIKH-}
1015 
1016     ELSIF p_action_prms.action_code = 'PLAN' THEN
1017       --
1018       WSH_NEW_DELIVERY_ACTIONS.plan (
1019         p_del_rows      => l_delivery_id_tab,
1020         x_return_status => l_return_status);
1021       --
1022       IF l_debug_on THEN
1023         wsh_debug_sv.log(l_module_name,'Return Status After Calling Plan',l_return_status);
1024       END IF;
1025       --
1026       wsh_util_core.api_post_call(
1027         p_return_status    => l_return_status,
1028         x_num_warnings     => l_num_warnings,
1029         x_num_errors       => l_num_errors);
1030       --
1031 
1032     ELSIF p_action_prms.action_code = 'UNPLAN' THEN
1033       --
1034       WSH_NEW_DELIVERY_ACTIONS.unplan (
1035         p_del_rows      => l_delivery_id_tab,
1036         x_return_status => l_return_status);
1037       --
1038       IF l_debug_on THEN
1039         wsh_debug_sv.log(l_module_name,'Return Status After Calling Unplan',l_return_status);
1040       END IF;
1041       --
1042       wsh_util_core.api_post_call(
1043         p_return_status    => l_return_status,
1044         x_num_warnings     => l_num_warnings,
1045         x_num_errors       => l_num_errors);
1046       --
1047     /* J TP Release */
1048     ELSIF p_action_prms.action_code = 'FIRM' THEN
1049       --
1050       WSH_NEW_DELIVERY_ACTIONS.FIRM (
1051         p_del_rows      => l_delivery_id_tab,
1052         x_return_status => l_return_status);
1053       --
1054       IF l_debug_on THEN
1055         wsh_debug_sv.log(l_module_name,'Return Status After Calling firm',l_return_status);
1056       END IF;
1057       --
1058       wsh_util_core.api_post_call(
1059         p_return_status    => l_return_status,
1060         x_num_warnings     => l_num_warnings,
1061         x_num_errors       => l_num_errors);
1062       --
1063 
1064     ELSIF p_action_prms.action_code in ('IGNORE_PLAN', 'INCLUDE_PLAN') then
1065         Wsh_tp_release.change_ignoreplan_status
1066                    (p_entity        =>'DLVY',
1067                     p_in_ids        => l_delivery_id_tab,
1068                     p_action_code   => p_action_prms.action_code,
1069                     x_return_status => l_return_status);
1070         --
1071         IF l_debug_on THEN
1072             wsh_debug_sv.log(l_module_name,'Return Status After Calling change_ignoreplan_status ',l_return_status);
1073         END IF;
1074          --
1075         wsh_util_core.api_post_call(
1076            p_return_status    => l_return_status,
1077            x_num_warnings     => l_num_warnings,
1078            x_num_errors       => l_num_errors);
1079          --
1080 
1081     ELSIF p_action_prms.action_code = 'PICK-RELEASE' THEN
1082       --
1083       WSH_PICK_LIST.launch_pick_release (
1084         p_trip_ids      => l_dummy_id_tab,
1085         p_stop_ids      => l_dummy_id_tab,
1086         p_delivery_ids  => l_delivery_id_tab,
1087         p_detail_ids    => l_dummy_id_tab,
1088         x_request_ids   => x_delivery_out_rec.result_id_tab,
1089         x_return_status => l_return_status);
1090       --
1091       IF l_debug_on THEN
1092         wsh_debug_sv.log(l_module_name,'Return Status After Calling Launch_Pick_Release',l_return_status);
1093       END IF;
1094       --
1095       wsh_util_core.api_post_call(
1096         p_return_status    => l_return_status,
1097         x_num_warnings     => l_num_warnings,
1098         x_num_errors       => l_num_errors);
1099       --
1100     ELSIF p_action_prms.action_code = 'PICK-PACK-SHIP' THEN
1101       --
1102       WSH_PICK_LIST.launch_pick_release (
1103         p_trip_ids      => l_dummy_id_tab,
1104         p_stop_ids      => l_dummy_id_tab,
1105         p_delivery_ids  => l_delivery_id_tab,
1106         p_detail_ids    => l_dummy_id_tab,
1107         x_request_ids   => x_delivery_out_rec.result_id_tab,
1108         x_return_status => l_return_status,
1109         p_auto_pack_ship => 'PS');
1110       --
1111       IF l_debug_on THEN
1112         wsh_debug_sv.log(l_module_name,'Return Status After Calling Launch_Pick_Release',l_return_status);
1113       END IF;
1114       --
1115       wsh_util_core.api_post_call(
1116         p_return_status    => l_return_status,
1117         x_num_warnings     => l_num_warnings,
1118         x_num_errors       => l_num_errors);
1119       --
1120     ELSIF p_action_prms.action_code = 'PICK-SHIP' THEN
1121       --
1122       WSH_PICK_LIST.launch_pick_release (
1123         p_trip_ids      => l_dummy_id_tab,
1124         p_stop_ids      => l_dummy_id_tab,
1125         p_delivery_ids  => l_delivery_id_tab,
1126         p_detail_ids    => l_dummy_id_tab,
1127         x_request_ids   => x_delivery_out_rec.result_id_tab,
1128         x_return_status => l_return_status,
1129         p_auto_pack_ship => 'SC');
1130       --
1131       IF l_debug_on THEN
1132         wsh_debug_sv.log(l_module_name,'Return Status After Calling Launch_Pick_Release',l_return_status);
1133       END IF;
1134       --
1135       wsh_util_core.api_post_call(
1136         p_return_status    => l_return_status,
1137         x_num_warnings     => l_num_warnings,
1138         x_num_errors       => l_num_errors);
1139       --
1140     ELSIF p_action_prms.action_code = 'PRINT-DOC-SETS' THEN
1141       --
1142       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DOCUMENT_SETS_LVL) = 1 THEN
1143         --
1144         WSH_UTIL_VALIDATE.validate_report_set(
1145           p_report_set_id   => l_report_set_id,
1146           p_report_set_name => p_action_prms.report_set_name,
1147           x_return_status   => l_return_status);
1148         --
1149         IF l_debug_on THEN
1150           wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Report_Set',l_return_status);
1151         END IF;
1152         --
1153         wsh_util_core.api_post_call(
1154           p_return_status    => l_return_status,
1155           x_num_warnings     => l_num_warnings,
1156           x_num_errors       => l_num_errors);
1157         --
1158       END IF;
1159       --
1160 
1161       FOR i IN l_delivery_id_tab.FIRST..l_delivery_id_tab.LAST
1162       LOOP
1163         -- Start of bugfix 4493263
1164         OPEN c_delv_trip_id_cursor(l_delivery_id_tab(i));
1165         LOOP
1166            FETCH c_delv_trip_id_cursor INTO l_dummy_doc_set_params(i).p_trip_id;
1167            EXIT WHEN c_delv_trip_id_cursor%NOTFOUND;
1168            --
1169            IF l_debug_on THEN
1170               WSH_DEBUG_SV.log(l_module_name, 'Trip Id : ', l_dummy_doc_set_params(i).p_trip_id );
1171            END IF;
1172            --
1173         END LOOP;
1174         CLOSE c_delv_trip_id_cursor;
1175         -- End of bugfix 4493263
1176       END LOOP;
1177 
1178       WSH_DOCUMENT_SETS.print_document_sets(
1179         p_report_set_id         => l_report_set_id ,
1180         p_organization_id       => p_action_prms.organization_id,
1181         p_trip_ids              => l_dummy_id_tab,
1182         p_stop_ids              => l_dummy_id_tab,
1183         p_delivery_ids          => l_delivery_id_tab,
1184         p_document_param_info   => l_dummy_doc_set_params,
1185         x_return_status         => l_return_status);
1186       --
1187       IF l_debug_on THEN
1188         wsh_debug_sv.log(l_module_name,'Return Status After Calling Print_Document_Sets',l_return_status);
1189       END IF;
1190       --
1191       wsh_util_core.api_post_call(
1192         p_return_status    => l_return_status,
1193         x_num_warnings     => l_num_warnings,
1194         x_num_errors       => l_num_errors);
1195       --
1196     ELSIF p_action_prms.action_code = 'WT-VOL' THEN
1197       --
1198       -- OTM R12 : packing ECO
1199       -- This change was introduced to mark the G_RESET_WV flag
1200       -- before calling delivery_weight_volume so the procedure will know
1201       -- to invoke update tms_interface_flag process.
1202 
1203       IF l_gc3_is_installed = 'Y' THEN
1204         WSH_WV_UTILS.G_RESET_WV := 'Y'; -- set to Y to enable the update
1205       END IF;
1206       -- End of OTM R12 : packing ECO
1207 
1208       WSH_WV_UTILS.Delivery_Weight_Volume(
1209         p_del_rows      => l_delivery_id_tab,
1210         p_update_flag   => p_action_prms.override_flag,
1211         x_return_status => l_return_status);
1212       --
1213       IF l_debug_on THEN
1214         wsh_debug_sv.log(l_module_name,'Return Status After Calling Delivery_Weight_Volume',l_return_status);
1215       END IF;
1216       --
1217       wsh_util_core.api_post_call(
1218         p_return_status    => l_return_status,
1219         x_num_warnings     => l_num_warnings,
1220         x_num_errors       => l_num_errors);
1221 
1222       -- OTM R12 : packing ECO
1223       IF l_gc3_is_installed = 'Y' THEN
1224         WSH_WV_UTILS.G_RESET_WV := 'N'; -- after call, set it back to 'N'
1225       END IF;
1226       -- End of OTM R12 : packing ECO
1227 
1228     ELSIF p_action_prms.action_code = 'AUTO-PACK' THEN
1229 
1230       IF NVL(p_action_prms.caller, 'X') <> 'WSH_BHPS' THEN
1231 
1232          IF l_delivery_id_tab.count > 0 THEN
1233 
1234            FORALL i in 1..l_delivery_id_tab.count
1235            update wsh_new_deliveries
1236            set ap_batch_id = NULL
1237            where delivery_id = l_delivery_id_tab(i);
1238 
1239          END IF;
1240        END IF;
1241 
1242 
1243       --
1244       WSH_CONTAINER_GRP.Auto_Pack (
1245         p_api_version               => p_api_version_number,
1246         p_init_msg_list             => p_init_msg_list,
1247         p_commit                    => p_commit,
1248         p_validation_level          => NULL,
1249         x_return_status             => l_return_status,
1250         x_msg_count                 => l_msg_count,
1251         x_msg_data                  => l_msg_data,
1252         p_entity_tab                => l_delivery_id_tab,
1253         p_entity_type               => 'D',
1254         p_group_id_tab              => l_dummy_id_tab,
1255         p_pack_cont_flag            => 'N',
1256         x_cont_inst_tab             => x_delivery_out_rec.result_id_tab);
1257       --
1258       IF l_debug_on THEN
1259         wsh_debug_sv.log(l_module_name,'Return Status After Calling Auto_Pack for Action Auto_Pack',l_return_status);
1260       END IF;
1261       --
1262       wsh_util_core.api_post_call(
1263         p_return_status    => l_return_status,
1264         x_num_warnings     => l_num_warnings,
1265         x_num_errors       => l_num_errors,
1266         p_msg_data         => l_msg_data);
1267       --
1268 
1269     ELSIF p_action_prms.action_code = 'AUTO-PACK-MASTER' THEN
1270       --
1271 
1272       IF NVL(p_action_prms.caller, 'X') <> 'WSH_BHPS' THEN
1273 
1274          IF l_delivery_id_tab.count > 0 THEN
1275 
1276            FORALL i in 1..l_delivery_id_tab.count
1277            update wsh_new_deliveries
1278            set ap_batch_id = NULL
1279            where delivery_id = l_delivery_id_tab(i);
1280 
1281          END IF;
1282        END IF;
1283 
1284       WSH_CONTAINER_GRP.Auto_Pack (
1285         p_api_version               => p_api_version_number,
1286         p_init_msg_list             => p_init_msg_list,
1287         p_commit                    => p_commit,
1288         p_validation_level          => NULL,
1289         x_return_status             => l_return_status,
1290         x_msg_count                 => l_msg_count,
1291         x_msg_data                  => l_msg_data,
1292         p_entity_tab                => l_delivery_id_tab,
1293         p_entity_type               => 'D',
1294         p_group_id_tab              => l_dummy_id_tab,
1295         p_pack_cont_flag            => 'Y',
1296         x_cont_inst_tab             => x_delivery_out_rec.result_id_tab);
1297       --
1298       IF l_debug_on THEN
1299         wsh_debug_sv.log(l_module_name,'Return Status After Calling Auto_Pack for Action Auto_Pack_Master',l_return_status);
1300       END IF;
1301       --
1302       wsh_util_core.api_post_call(
1303         p_return_status    => l_return_status,
1304         x_num_warnings     => l_num_warnings,
1305         x_num_errors       => l_num_errors,
1306         p_msg_data         => l_msg_data);
1307       --
1308 
1309     ELSIF p_action_prms.action_code = 'GEN-LOAD-SEQ' THEN
1310       --
1311       WSH_NEW_DELIVERY_ACTIONS.Generate_Loading_Seq(
1312         p_del_rows      => l_delivery_id_tab,
1313         x_return_status => l_return_status);
1314       --
1315       IF l_debug_on THEN
1316         wsh_debug_sv.log(l_module_name,'Return Status After Calling Generate_Loading_Seq',l_return_status);
1317       END IF;
1318       --
1319       wsh_util_core.api_post_call(
1320         p_return_status    => l_return_status,
1321         x_num_warnings     => l_num_warnings,
1322         x_num_errors       => l_num_errors);
1323       --
1324     ELSIF p_action_prms.action_code = 'CREATE-CONSOL-DEL' THEN
1325        WSH_DELIVERY_AUTOCREATE.Autocreate_Consol_Delivery(
1326            p_del_attributes_tab => p_rec_attr_tab,
1327            p_caller  => p_action_prms.caller,
1328            p_trip_prefix => p_action_prms.trip_name,
1329            x_parent_del_id => x_delivery_out_rec.result_id_tab(1),
1330            x_parent_trip_id => x_delivery_out_rec.valid_ids_tab(1),
1331            x_return_status => l_return_status);
1332 
1333        IF l_debug_on THEN
1334         wsh_debug_sv.log(l_module_name,'Return Status After Calling  WSH_DELIVERY_AUTOCREATE.Autocreate_Consol_Delivery',l_return_status);
1335       END IF;
1336       --
1337       wsh_util_core.api_post_call(
1338         p_return_status    => l_return_status,
1339         x_num_warnings     => l_num_warnings,
1340         x_num_errors       => l_num_errors,
1341         p_msg_data         => l_msg_data);
1342 
1343     ELSIF p_action_prms.action_code = 'CONFIRM' THEN
1344 
1345       -- bug 4302048: if global parameter enforces ship method,
1346       -- the caller (e.g., Public API) must pass ship method code.
1347       --
1348       -- wsh_interface_grp will use the SC rule to derive it if required;
1349       -- direct callers of this API need to derive properly.
1350       --
1351       -- bug 5472722: DO NOT enforce shipmethod when cycle counting and
1352       -- back ordering all.
1353 
1354       --Bug 7418439: check if p_action_prms.ship_method_code is null only if the caller is Public API.
1355       --             When the Global parameter 'Enforce Ship Method' is enabled,a check is needed only
1356       --             when the caller is public API because UI (Forms) ensures that 'Ship Method' is a
1357       --             'Required' field whenever the last unconfirmed delivery in the trip is being confirmed.
1358       IF (p_action_prms.ship_method_code IS NULL) AND (p_action_prms.action_flag IN ('S', 'B', 'L', 'T', 'A')) AND (p_action_prms.caller = 'WSH_PUB') THEN
1359 
1360        OPEN c_unconfirmed_del_exist(l_delivery_id_tab(1));
1361        FETCH c_unconfirmed_del_exist into l_unconfirmed_del_exist;
1362 
1363        IF l_debug_on THEN
1364            wsh_debug_sv.log(l_module_name,'l_unconfirmed_del_exist : ',l_unconfirmed_del_exist);
1365        END IF;
1366        IF l_unconfirmed_del_exist IS NULL THEN
1367 
1368         DECLARE
1369          l_global_parameters WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
1370         BEGIN
1371           WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(
1372                   x_param_info    => l_global_parameters,
1373                   x_return_status => l_return_status);
1374           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
1375                                 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
1376             x_return_status := l_return_status;
1377             IF l_debug_on THEN
1378               WSH_DEBUG_SV.pop(l_module_name,'get_global_parameters failed');
1379             END IF;
1380             RETURN;
1381           END IF;
1382 
1383           IF l_global_parameters.enforce_ship_method = 'Y' THEN
1384             FND_MESSAGE.SET_NAME('WSH','WSH_SC_SM_REQUIRED');
1385             x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1386             wsh_util_core.add_message(x_return_status,l_module_name);
1387             IF l_debug_on THEN
1388               WSH_DEBUG_SV.pop(l_module_name,'ship method is required');
1389             END IF;
1390             RETURN;
1391           END IF;
1392         END;
1393        END IF;
1394       END IF;
1395 
1396 -- Bug#3880569: Validating the Ship Method Code.
1397 -- Do the Validation only if the Delivery is not associated with a Trip.
1398 l_ship_method_code   := p_action_prms.ship_method_code;
1399 l_is_del_assign_trip := FALSE;
1400 
1401 FOR i in l_delivery_id_tab.FIRST..l_delivery_id_tab.LAST LOOP
1402         -- Bug 4100661
1403         l_temp_trip_id := NULL;
1404         OPEN c_del_assign_to_trip(l_delivery_id_tab(i));
1405         LOOP
1406            FETCH c_del_assign_to_trip INTO l_temp_trip_id, l_temp_ship_method_code, l_temp_lane_id;
1407            EXIT WHEN c_del_assign_to_trip%NOTFOUND;
1408            IF l_temp_trip_id is not NULL THEN
1409               l_is_del_assign_trip := TRUE;
1410 
1411               IF WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y' AND l_temp_lane_id is not NULL AND
1412                  NVL(l_ship_method_code,l_temp_ship_method_code) <> l_temp_ship_method_code THEN
1413                  CLOSE c_del_assign_to_trip;
1414                  l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1415                  FND_MESSAGE.SET_NAME('FTE', 'FTE_SEGMENT_CSM_CHANGE_ERROR');
1416                  FND_MESSAGE.SET_TOKEN('TRIP_SEGMENT_NAME', wsh_trips_pvt.get_name(l_temp_trip_id));
1417                  WSH_UTIL_CORE.ADD_MESSAGE(WSH_UTIL_CORE.G_RET_STS_ERROR);
1418 
1419                  wsh_util_core.api_post_call(
1420                    p_return_status    => l_return_status,
1421                    x_num_warnings     => l_num_warnings,
1422                    x_num_errors       => l_num_errors);
1423               END IF;
1424            END IF;
1425         END LOOP;
1426         CLOSE c_del_assign_to_trip;
1427         /*
1428         IF c_del_assign_to_trip%FOUND THEN
1429             l_is_del_assign_trip := TRUE;
1430             CLOSE c_del_assign_to_trip;
1431             exit;
1432         END IF;
1433         CLOSE c_del_assign_to_trip;
1434         */
1435 END LOOP;
1436 
1437 IF NOT l_is_del_assign_trip AND l_ship_method_code IS NOT NULL AND p_action_prms.caller <> 'WSH_FSTRX' THEN
1438 	WSH_UTIL_VALIDATE.Validate_Active_SM
1439       ( p_ship_method_code => l_ship_method_code,
1440         p_ship_method_name => l_ship_method_name,
1441         x_return_status    => l_return_status
1442        );
1443        wsh_util_core.api_post_call(p_return_status  => l_return_status,
1444                                    x_num_warnings   => l_num_warnings,
1445                                    x_num_errors     => l_num_errors);
1446 END IF;
1447 
1448 -- End, Bug#3880569
1449 
1450       IF NVL(p_action_prms.caller, 'X') <> 'WSH_BHPS' THEN
1451 
1452          IF l_delivery_id_tab.count > 0 THEN
1453 
1454            FORALL i in 1..l_delivery_id_tab.count
1455            update wsh_new_deliveries
1456            set batch_id = NULL
1457            where delivery_id = l_delivery_id_tab(i);
1458 
1459          END IF;
1460       END IF;
1461       --
1462       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DOCUMENT_SETS_LVL) = 1 THEN
1463         --
1464         WSH_UTIL_VALIDATE.validate_report_set(
1465           p_report_set_id   => l_report_set_id,
1466           p_report_set_name => p_action_prms.report_set_name,
1467           x_return_status   => l_return_status);
1468         --
1469         IF l_debug_on THEN
1470           wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Report_Set',l_return_status);
1471         END IF;
1472         --
1473         wsh_util_core.api_post_call(
1474           p_return_status    => l_return_status,
1475           x_num_warnings     => l_num_warnings,
1476           x_num_errors       => l_num_errors);
1477         --
1478       END IF;
1479       --
1480 
1481       -- Bug 3877951
1482       IF p_action_prms.close_trip_flag = 'Y' THEN
1483          l_intransit_flag := 'Y';
1484       ELSE
1485          l_intransit_flag := p_action_prms.intransit_flag;
1486       END IF;
1487       --
1488       IF NVL(p_action_prms.caller, 'X') <> 'WSH_BHPS' THEN
1489 	      --
1490 	WSH_NEW_DELIVERY_ACTIONS.Confirm_Delivery(
1491 	   p_del_rows              => l_delivery_id_tab,
1492 	   p_action_flag           => p_action_prms.action_flag,
1493 	   p_intransit_flag        => l_intransit_flag,
1494 	   p_close_flag            => p_action_prms.close_trip_flag,
1495 	   p_stage_del_flag        => p_action_prms.stage_del_flag,
1496 	   p_report_set_id         => l_report_set_id,
1497 	   p_ship_method           => p_action_prms.ship_method_code,
1498 	   p_actual_dep_date       => p_action_prms.actual_dep_date,
1499 	   p_bol_flag              => p_action_prms.bill_of_lading_flag,
1500 	   p_mc_bol_flag           => p_action_prms.bill_of_lading_flag,
1501 	   p_defer_interface_flag  => p_action_prms.defer_interface_flag,
1502 	   p_send_945_flag         => p_action_prms.send_945_flag,
1503 	   x_return_status         => l_return_status);
1504       ELSE
1505 	WSH_NEW_DELIVERY_ACTIONS.Confirm_Delivery(
1506 	   p_del_rows              => l_delivery_id_tab,
1507 	   p_action_flag           => p_action_prms.action_flag,
1508 	   p_intransit_flag        => l_intransit_flag,
1509 	   p_close_flag            => p_action_prms.close_trip_flag,
1510 	   p_stage_del_flag        => p_action_prms.stage_del_flag,
1511 	   p_report_set_id         => l_report_set_id,
1512 	   p_ship_method           => p_action_prms.ship_method_code,
1513 	   p_actual_dep_date       => p_action_prms.actual_dep_date,
1514 	   p_bol_flag              => p_action_prms.bill_of_lading_flag,
1515 	   p_mc_bol_flag           => p_action_prms.mc_bill_of_lading_flag,
1516 	   p_defer_interface_flag  => p_action_prms.defer_interface_flag,
1517 	   p_send_945_flag         => p_action_prms.send_945_flag,
1518 	   x_return_status         => l_return_status);
1519       END IF;
1520       --
1521       IF l_debug_on THEN
1522         wsh_debug_sv.log(l_module_name,'Return Status After Calling Confirm_Delivery',l_return_status);
1523       END IF;
1524       --
1525       wsh_util_core.api_post_call(
1526         p_return_status    => l_return_status,
1527         x_num_warnings     => l_num_warnings,
1528         x_num_errors       => l_num_errors);
1529       --
1530       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_PRINT_LABEL_LVL) = 1 THEN
1531         --
1532         -- Bug#5864517: Needs to call Print_Label API irrespective of p_intransit_flag and p_close_flag
1533         --                flag values.
1534         --
1535         IF l_debug_on THEN
1536            WSH_DEBUG_SV.log(l_module_name,'Calling WSH_UTIL_CORE.Print_Label');
1537         END IF;
1538 
1539           WSH_UTIL_CORE.Print_Label(
1540             p_stop_ids      => l_dummy_id_tab,
1541             p_delivery_ids  => l_delivery_id_tab,
1542             x_return_status => l_return_status);
1543           --
1544           IF l_debug_on THEN
1545             wsh_debug_sv.log(l_module_name,'Return Status After Calling Print_Label',l_return_status);
1546           END IF;
1547           --
1548           wsh_util_core.api_post_call(
1549             p_return_status    => l_return_status,
1550             x_num_warnings     => l_num_warnings,
1551             x_num_errors       => l_num_errors);
1552           --
1553       --
1554       END IF;
1555       --
1556 
1557     ELSIF p_action_prms.action_code IN ('RE-OPEN','CLOSE') THEN
1558       --
1559       WSH_NEW_DELIVERY_ACTIONS.Change_Status (
1560         p_del_rows      => l_delivery_id_tab,
1561         p_action        => p_action_prms.action_code,
1562         p_actual_date   => NULL,
1563         x_return_status => l_return_status);
1564       --
1565       IF l_debug_on THEN
1566         wsh_debug_sv.log(l_module_name,'Return Status After Calling Change_Status',l_return_status);
1567       END IF;
1568       --
1569       wsh_util_core.api_post_call(
1570         p_return_status    => l_return_status,
1571         x_num_warnings     => l_num_warnings,
1572         x_num_errors       => l_num_errors);
1573       --
1574     ELSIF p_action_prms.action_code = 'ASSIGN-TRIP' THEN
1575       --
1576       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_TRIP_NAME_LVL) = 1 THEN
1577         --
1578         WSH_UTIL_VALIDATE.Validate_Trip_Name (
1579           p_trip_id       => l_trip_id,
1580           p_trip_name     => p_action_prms.trip_name,
1581           x_return_status => l_return_status);
1582         --
1583       IF l_debug_on THEN
1584         wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Trip_Name',l_return_status);
1585       END IF;
1586       --
1587         wsh_util_core.api_post_call(
1588           p_return_status    => l_return_status,
1589           x_num_warnings     => l_num_warnings,
1590           x_num_errors       => l_num_errors);
1591         --
1592       END IF;
1593       --
1594       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_TRIP_STATUS_LVL) = 1 THEN
1595         --
1596         --WSH_UTIL_VALIDATE.Validate_Trip_Status(   -- J-IB-NPARIKH
1597         WSH_TRIP_VALIDATIONS.Validate_Trip_Status(   -- J-IB-NPARIKH
1598           p_trip_id       => l_trip_id,
1599           p_action        => p_action_prms.action_code,
1600           x_return_status => l_return_status);
1601         --
1602       IF l_debug_on THEN
1603         wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Trip_Status',l_return_status);
1604       END IF;
1605       --
1606         wsh_util_core.api_post_call(
1607           p_return_status    => l_return_status,
1608           x_num_warnings     => l_num_warnings,
1609           x_num_errors       => l_num_errors);
1610         --
1611       END IF;
1612       --
1613       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_LOCATION_LVL) = 1 THEN
1614         --
1615         WSH_UTIL_VALIDATE.Validate_Location (
1616           p_location_id      => l_pickup_loc_id,
1617           p_location_code    => p_action_prms.pickup_loc_code,
1618           x_return_status    => l_return_status,
1619           p_isWshLocation    => l_isWshLocation);
1620         --
1621         IF l_debug_on THEN
1622           wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Location',l_return_status);
1623         END IF;
1624         --
1625         wsh_util_core.api_post_call(
1626           p_return_status    => l_return_status,
1627           x_num_warnings     => l_num_warnings,
1628           x_num_errors       => l_num_errors);
1629         --
1630         WSH_UTIL_VALIDATE.Validate_Location (
1631           p_location_id      => l_dropoff_loc_id,
1632           p_location_code    => p_action_prms.dropoff_loc_code,
1633           x_return_status    => l_return_status,
1634           p_isWshLocation    => l_isWshLocation);
1635         --
1636         IF l_debug_on THEN
1637           wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Location',l_return_status);
1638         END IF;
1639         --
1640         wsh_util_core.api_post_call(
1641           p_return_status    => l_return_status,
1642           x_num_warnings     => l_num_warnings,
1643           x_num_errors       => l_num_errors);
1644         --
1645       END IF;
1646       --
1647       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_STOP_NAME_LVL) = 1 THEN
1648         --
1649         -- If stops are specified, validate they are eligible.
1650         --
1651         IF p_action_prms.pickup_stop_id IS NOT NULL THEN
1652           l_stop_id := p_action_prms.pickup_stop_id;
1653           WSH_UTIL_VALIDATE.Validate_Stop_Name (
1654             p_stop_id          => l_stop_id,
1655             p_trip_id          => p_action_prms.trip_id,
1656             p_stop_location_id => NULL,  -- not needed
1657             p_planned_dep_date => NULL,  -- not needed
1658             x_return_status    => l_return_status);
1659           --
1660           IF l_debug_on THEN
1661             wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Stop_Name for pickup',l_return_status);
1662           END IF;
1663           --
1664           wsh_util_core.api_post_call(
1665              p_return_status    => l_return_status,
1666              x_num_warnings     => l_num_warnings,
1667              x_num_errors       => l_num_errors);
1668           --
1669         END IF;
1670         --
1671         IF p_action_prms.dropoff_stop_id IS NOT NULL THEN
1672           l_stop_id := p_action_prms.dropoff_stop_id;
1673           WSH_UTIL_VALIDATE.Validate_Stop_Name (
1674             p_stop_id          => l_stop_id,
1675             p_trip_id          => p_action_prms.trip_id,
1676             p_stop_location_id => NULL,  -- not needed
1677             p_planned_dep_date => NULL,  -- not needed
1678             x_return_status    => l_return_status);
1679           --
1680           IF l_debug_on THEN
1681             wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Stop_Name for drop off',l_return_status);
1682           END IF;
1683           --
1684           wsh_util_core.api_post_call(
1685              p_return_status    => l_return_status,
1686              x_num_warnings     => l_num_warnings,
1687              x_num_errors       => l_num_errors);
1688           --
1689         END IF;
1690         --
1691       END IF;
1692       --
1693       -- SSN change
1694       -- Validate stop_sequence_number if profile option is set to SSN
1695       IF (WSH_TRIPS_ACTIONS.GET_STOP_SEQ_MODE  = WSH_INTERFACE_GRP.G_STOP_SEQ_MODE_SSN) AND
1696               (WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_SEQ_NUM_LVL) = 1) THEN
1697                 --
1698                 -- in context of creating new stops, their status is
1699                 -- assumed to be NULL, so we need to pass 'OP'
1700                 -- to avoid getting error about invalid stop status.
1701                 --
1702                 WSH_TRIP_STOPS_VALIDATIONS.Validate_Sequence_Number (
1703                   p_stop_id              => p_action_prms.pickup_stop_id,
1704                   p_stop_sequence_number => p_action_prms.pickup_stop_seq,
1705                   p_trip_id              => l_trip_id,
1706                   p_status_code          => NVL(p_action_prms.pickup_stop_status, 'OP'),
1707                   x_return_status        => l_return_status);
1708                 --
1709                 IF l_debug_on THEN
1710                   wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Sequence_Number',l_return_status);
1711                 END IF;
1712                 --
1713                 wsh_util_core.api_post_call(
1714                   p_return_status    => l_return_status,
1715                   x_num_warnings     => l_num_warnings,
1716                   x_num_errors       => l_num_errors);
1717                 --
1718                 WSH_TRIP_STOPS_VALIDATIONS.Validate_Sequence_Number (
1719                   p_stop_id              => p_action_prms.dropoff_stop_id,
1720                   p_stop_sequence_number => p_action_prms.dropoff_stop_seq,
1721                   p_trip_id              => l_trip_id,
1722                   p_status_code          => NVL(p_action_prms.dropoff_stop_status, 'OP'),
1723                   x_return_status        => l_return_status);
1724                 --
1725                 IF l_debug_on THEN
1726                   wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Sequence_Number',l_return_status);
1727                 END IF;
1728                 --
1729                 wsh_util_core.api_post_call(
1730                   p_return_status    => l_return_status,
1731                   x_num_warnings     => l_num_warnings,
1732                   x_num_errors       => l_num_errors);
1733                 --
1734       END IF; -- If profile = SSN and level = 1
1735 
1736       --
1737       -- bug 3516052
1738       -- validate the planned date for pick up and drop off stop
1739 
1740       IF p_action_prms.pickup_dep_date is not NULL and
1741          p_action_prms.pickup_arr_date is not NULL and
1742          (p_action_prms.pickup_dep_date < p_action_prms.pickup_arr_date) THEN
1743          l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1744 
1745          l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1746          FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DEP_ARR_DATE');
1747          wsh_util_core.add_message(l_return_status, l_module_name);
1748 
1749          wsh_util_core.api_post_call(
1750            p_return_status    => l_return_status,
1751            x_num_warnings     => l_num_warnings,
1752            x_num_errors       => l_num_errors);
1753       END IF;
1754 
1755       IF p_action_prms.dropoff_dep_date is not NULL and
1756          p_action_prms.dropoff_arr_date is not NULL and
1757          (p_action_prms.dropoff_dep_date < p_action_prms.dropoff_arr_date) THEN
1758 
1759          l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1760          FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DEP_ARR_DATE');
1761          wsh_util_core.add_message(l_return_status, l_module_name);
1762 
1763          wsh_util_core.api_post_call(
1764             p_return_status    => l_return_status,
1765             x_num_warnings     => l_num_warnings,
1766             x_num_errors       => l_num_errors);
1767       END IF;
1768       --
1769       --OTM R12, check for allowed assign trip
1770       IF (l_gc3_is_installed = 'Y' AND p_action_prms.caller <> 'FTE_TMS_INTEGRATION') THEN
1771 
1772         IF l_debug_on THEN
1773           WSH_DEBUG_SV.logmsg(l_module_name,'checking for include for planning trip');
1774         END IF;
1775 
1776         --check for include for planning, delivery should have same ignore for planning flag as trip
1777         --if any delivery is include for planning, cannot assign to trip
1778         i := p_rec_attr_tab.FIRST;
1779         WHILE i IS NOT NULL LOOP
1780 
1781           IF l_debug_on THEN
1782             WSH_DEBUG_SV.log(l_module_name,'ignore for planning for delivery ' || i, p_rec_attr_tab(i).ignore_for_planning);
1783           END IF;
1784 
1785           IF (NVL(p_rec_attr_tab(i).ignore_for_planning, 'N') = 'N') THEN
1786 
1787             IF l_debug_on THEN
1788               WSH_DEBUG_SV.log(l_module_name,'GC3 IS INSTALLED, AND TRIP IS INCLUDE FOR PLANNING, CANNOT ASSIGN');
1789             END IF;
1790 
1791             FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_ASSIGN_TRIP');
1792 
1793             l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1794             WSH_UTIL_CORE.add_message(x_return_status, l_module_name);
1795 
1796             wsh_util_core.api_post_call(
1797               p_return_status    => l_return_status,
1798               x_num_warnings     => l_num_warnings,
1799               x_num_errors       => l_num_errors);
1800 
1801           END IF;
1802 
1803           i := p_rec_attr_tab.NEXT(i);
1804         END LOOP;
1805       END IF;
1806       --END OTM R12
1807 
1808       WSH_TRIPS_ACTIONS.Assign_Trip (
1809         p_del_rows              => l_delivery_id_tab,
1810         p_trip_id               => l_trip_id,
1811         p_pickup_stop_id        => p_action_prms.pickup_stop_id,
1812         p_pickup_stop_seq       => p_action_prms.pickup_stop_seq,
1813         p_dropoff_stop_id       => p_action_prms.dropoff_stop_id,
1814         p_dropoff_stop_seq      => p_action_prms.dropoff_stop_seq,
1815         p_pickup_location_id    => p_action_prms.pickup_loc_id,
1816         p_dropoff_location_id   => p_action_prms.dropoff_loc_id,
1817         p_pickup_arr_date       => p_action_prms.pickup_arr_date,
1818         p_pickup_dep_date       => p_action_prms.pickup_dep_date,
1819         p_dropoff_arr_date      => p_action_prms.dropoff_arr_date,
1820         p_dropoff_dep_date      => p_action_prms.dropoff_dep_date,
1821         p_caller                => p_action_prms.caller||'ASSIGNTRIP',
1822         x_return_status         => l_return_status
1823         );
1824       --
1825       IF l_debug_on THEN
1826         wsh_debug_sv.log(l_module_name,'Return Status After Calling Assign_Trip',l_return_status);
1827       END IF;
1828       --
1829       wsh_util_core.api_post_call(
1830         p_return_status    => l_return_status,
1831         x_num_warnings     => l_num_warnings,
1832         x_num_errors       => l_num_errors);
1833       --
1834 
1835     ELSIF p_action_prms.action_code = 'UNASSIGN-TRIP' THEN
1836       --
1837       IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_TRIP_NAME_LVL) = 1 THEN
1838         --
1839         WSH_UTIL_VALIDATE.Validate_Trip_Name (
1840           p_trip_id       => l_trip_id,
1841           p_trip_name     => p_action_prms.trip_name,
1842           x_return_status => l_return_status);
1843         --
1844         IF l_debug_on THEN
1845           wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Trip_Name',l_return_status);
1846         END IF;
1847         --
1848         wsh_util_core.api_post_call(
1849           p_return_status    => l_return_status,
1850           x_num_warnings     => l_num_warnings,
1851           x_num_errors       => l_num_errors);
1852         --
1853       END IF;
1854       --
1855       WSH_TRIPS_ACTIONS.Unassign_Trip (
1856         p_del_rows      => l_delivery_id_tab,
1857         p_trip_id       => l_trip_id,
1858         x_return_status => l_return_status);
1859       --
1860       IF l_debug_on THEN
1861         wsh_debug_sv.log(l_module_name,'Return Status After Calling Unassign_Trip',l_return_status);
1862       END IF;
1863       --
1864       wsh_util_core.api_post_call(
1865         p_return_status    => l_return_status,
1866         x_num_warnings     => l_num_warnings,
1867         x_num_errors       => l_num_errors);
1868       --
1869 
1870       --OTM R12, validate after unassign to set delivery status.
1871       IF (l_gc3_is_installed = 'Y') THEN
1872 
1873         --check for include for planning, delivery should have same ignore for planning flag as trip
1874         --in theory all delivery on that trip should have same ignore for planning flag, so if
1875         --any delivery is include for planning, assume trip is include for planning
1876         i := p_rec_attr_tab.FIRST;
1877 
1878         WHILE (i IS NOT NULL) LOOP
1879           IF (NVL(p_rec_attr_tab(i).ignore_for_planning, 'N') = 'N') THEN
1880 
1881             IF (p_action_prms.caller <> 'FTE_TMS_INTEGRATION') THEN
1882 
1883               IF l_debug_on THEN
1884                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TP_RELEASE.CHANGE_IGNOREPLAN_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
1885               END IF;
1886 
1887               WSH_TP_RELEASE.change_ignoreplan_status
1888                   (p_entity         => 'DLVY',
1889                    p_in_ids         => l_delivery_id_tab,
1890                    p_action_code    => 'IGNORE_PLAN',
1891                    x_return_status  => l_return_status);
1892 
1893               IF l_debug_on THEN
1894                 wsh_debug_sv.log(l_module_name,'Return Status After Calling change_ignoreplan_sttatus',l_return_status);
1895               END IF;
1896 
1897               WSH_UTIL_CORE.api_post_call(
1898                   p_return_status    => l_return_status,
1899                   x_num_warnings     => l_num_warnings,
1900                   x_num_errors       => l_num_errors);
1901 
1902               -- now have to set the other dels on this trip to AW if it's AR l_trip_id
1903               OPEN c_get_delivery_id(l_trip_id);
1904               FETCH c_get_delivery_id BULK COLLECT INTO l_new_delivery_id_tab, l_new_interface_flag_tab;
1905               --table is default NULL, so if no delivery found then the table stay empty
1906               CLOSE c_get_delivery_id;
1907 
1908               IF l_debug_on THEN
1909                 wsh_debug_sv.log(l_module_name,'l_trip_id', l_trip_id);
1910                 wsh_debug_sv.log(l_module_name,'delivery id count', l_new_delivery_id_tab.COUNT);
1911               END IF;
1912 
1913               IF (l_new_delivery_id_tab.COUNT > 0) THEN
1914 
1915                 IF l_debug_on THEN
1916                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
1917                 END IF;
1918 
1919                 WSH_NEW_DELIVERIES_PVT.update_tms_interface_flag(
1920                     p_delivery_id_tab        => l_new_delivery_id_tab,
1921                     p_tms_interface_flag_tab => l_new_interface_flag_tab,
1922                     x_return_status          => l_return_status);
1923 
1924                 IF l_debug_on THEN
1925                   wsh_debug_sv.log(l_module_name,'Return Status After Calling update_tms_interface_flag',l_return_status);
1926                 END IF;
1927 
1928                 WSH_UTIL_CORE.api_post_call(
1929                     p_return_status    => l_return_status,
1930                     x_num_warnings     => l_num_warnings,
1931                     x_num_errors       => l_num_errors);
1932 
1933               END IF;
1934 
1935             END IF;  --action prms check
1936 
1937             --delete freight cost record, delivery leg is deleted
1938             --when delivery unassigned from trip, no need to delete the leg's freight cost
1939             IF l_delivery_id_tab.COUNT > 0 THEN
1940               FORALL i IN l_delivery_id_tab.FIRST..l_delivery_id_tab.LAST
1941                 DELETE FROM WSH_FREIGHT_COSTS
1942                 WHERE delivery_id = l_delivery_id_tab(i);
1943             END IF;
1944             EXIT; --exit loop once an include for delivery is found because this trip will only need to be processed once
1945           END IF; --ignore for planning check
1946 
1947           i := p_rec_attr_tab.NEXT(i);
1948         END LOOP;
1949       END IF;
1950       --END OTM R12
1951 
1952     ELSIF p_action_prms.action_code = 'AUTOCREATE-TRIP' THEN
1953       --
1954        --Compatibility Changes
1955       IF wsh_util_core.fte_is_installed = 'Y' AND l_cc_line_groups.COUNT>0 THEN
1956 
1957        --1. get the group ids by which the constraints API has grouped the lines
1958        l_cc_count_group_ids:=1;
1959        FOR i in l_cc_line_groups.FIRST..l_cc_line_groups.LAST LOOP
1960          b_cc_groupidexists:=FALSE;
1961          IF l_cc_group_ids.COUNT>0 THEN
1962            FOR j in l_cc_group_ids.FIRST..l_cc_group_ids.LAST LOOP
1963              IF (l_cc_line_groups(i).line_group_id=l_cc_group_ids(j)) THEN
1964                b_cc_groupidexists:=TRUE;
1965              END IF;
1966            END LOOP;
1967          END IF;
1968 
1969          IF (NOT(b_cc_groupidexists)) THEN
1970            l_cc_group_ids(l_cc_count_group_ids):=l_cc_line_groups(i).line_group_id;
1971            l_cc_count_group_ids:=l_cc_count_group_ids+1;
1972          END IF;
1973       END LOOP;
1974 
1975       --2. from the group id table above, loop thru lines table to get the lines which belong
1976       --to each group and call autocreate_trip for each group
1977       FOR i in l_cc_group_ids.FIRST..l_cc_group_ids.LAST LOOP
1978         l_cc_count_rec:=1;
1979         FOR j in l_cc_line_groups.FIRST..l_cc_line_groups.LAST LOOP
1980           IF l_cc_line_groups(j).line_group_id=l_cc_group_ids(i) THEN
1981             l_delivery_id_tab_temp(l_cc_count_rec):=l_cc_line_groups(j).entity_line_id;
1982             l_cc_count_rec:=l_cc_count_rec+1;
1983           END IF;
1984         END LOOP;
1985 
1986         IF l_debug_on THEN
1987             wsh_debug_sv.log(l_module_name,'l_delivery_id_tab_temp count ',l_delivery_id_tab_temp.COUNT);
1988         END IF;
1989 
1990         /* J TP Release */
1991         WSH_TRIPS_ACTIONS.autocreate_trip_multi( p_del_rows      => l_delivery_id_tab_temp,
1992                              x_trip_ids      => x_delivery_out_rec.result_id_tab,
1993                              x_trip_names    => l_trip_names,
1994                              x_return_status => l_return_status);
1995 
1996         IF l_debug_on THEN
1997             wsh_debug_sv.log(l_module_name,'return from autocreate_trip_multi '
1998                                                              ,l_return_status);
1999         END IF;
2000 
2001         --set the ship method to null if group rec from constraint validation has this as 'N'
2002         l_cc_upd_dlvy_ship_method:='Y';
2003         IF l_cc_group_info.COUNT>0 THEN
2004           FOR j in l_cc_group_info.FIRST..l_cc_group_info.LAST LOOP
2005             IF l_cc_group_info(j).line_group_id=l_cc_group_ids(i) THEN
2006               l_cc_upd_dlvy_ship_method:=l_cc_group_info(j).upd_dlvy_ship_method;
2007             END IF;
2008           END LOOP;
2009         END IF;
2010 
2011         IF l_debug_on THEN
2012             wsh_debug_sv.log(l_module_name,'l_cc_upd_dlvy_ship_method ',l_cc_upd_dlvy_ship_method);
2013             IF (x_delivery_out_rec.result_id_tab.count > 0)  THEN
2014               wsh_debug_sv.log(l_module_name,'l_trip_id ', x_delivery_out_rec.result_id_tab(1));
2015             ELSE
2016               wsh_debug_sv.log(l_module_name,'l_trip_id ', 'not created');
2017             END IF;
2018             IF (l_trip_names.count > 0) THEN
2019               wsh_debug_sv.log(l_module_name,'l_trip_name ',l_trip_names(1));
2020             ELSE
2021               wsh_debug_sv.log(l_module_name,'l_trip_name ', 'not created');
2022             END IF;
2023             wsh_debug_sv.log(l_module_name,'l_return_status after calling autocreate_trip in comp ',l_return_status);
2024         END IF;
2025 
2026         /* J TP Release */
2027         IF x_delivery_out_rec.result_id_tab is not null AND x_delivery_out_rec.result_id_tab.COUNT>0 THEN
2028           FOR l_tripindex IN x_delivery_out_rec.result_id_tab.FIRST..x_delivery_out_rec.result_id_tab.LAST LOOP
2029             IF l_cc_upd_dlvy_ship_method='N' THEN
2030               FOR tripcurtemp in trip_cur(x_delivery_out_rec.result_id_tab(l_tripindex)) LOOP
2031                 l_cc_dlvy_ship_method:=tripcurtemp.SHIP_METHOD_CODE;
2032                 IF l_cc_upd_dlvy_ship_method='N' THEN
2033                   update wsh_trips
2034                   set SHIP_METHOD_CODE=null,
2035                     CARRIER_ID = null,
2036                     MODE_OF_TRANSPORT = null,
2037                     SERVICE_LEVEL = null
2038                   where trip_id= x_delivery_out_rec.result_id_tab(l_tripindex);
2039                 END IF;
2040               END LOOP;
2041             END IF;
2042             --set the intermediate ship to, ship method to null if group rec from constraint validation has these as 'N'
2043 
2044           l_cc_trip_id(l_cc_trip_id.COUNT+1):=x_delivery_out_rec.result_id_tab(l_tripindex);
2045           END LOOP;
2046         END IF;--x_delivery_out_rec.result_id_tab
2047         --
2048         IF (l_cc_return_status is not null AND l_cc_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
2049           l_return_status:=l_cc_return_status;
2050         ELSIF (l_cc_return_status is not null AND l_cc_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING AND l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2051           l_return_status:=l_cc_return_status;
2052         ELSE
2053           l_cc_return_status:=l_return_status;
2054         END IF;
2055 
2056       END LOOP;
2057       x_delivery_out_rec.result_id_tab := l_cc_trip_id;
2058       l_return_status:=l_cc_return_status;
2059 
2060       IF l_debug_on THEN
2061             wsh_debug_sv.log(l_module_name,'x_delivery_out_rec.result_id_tab.COUNT after loop ',x_delivery_out_rec.result_id_tab.COUNT);
2062       END IF;
2063 
2064      ELSE
2065         /* J TP Release */
2066         WSH_TRIPS_ACTIONS.autocreate_trip_multi( p_del_rows      => l_delivery_id_tab,
2067                              x_trip_ids      => x_delivery_out_rec.result_id_tab,
2068                              x_trip_names    => l_trip_names,
2069                              x_return_status => l_return_status);
2070 
2071      END IF;
2072         --
2073      IF l_debug_on THEN
2074           wsh_debug_sv.log(l_module_name,'Return Status After Calling Autocreate_Trip',l_return_status);
2075      END IF;
2076      --
2077      wsh_util_core.api_post_call(
2078           p_return_status    => l_return_status,
2079           x_num_warnings     => l_num_warnings,
2080           x_num_errors       => l_num_errors);
2081     --
2082     -- rlanka : Trip Consolidation Pack J
2083     --
2084     ELSIF p_action_prms.action_code = 'TRIP-CONSOLIDATION' THEN
2085       --
2086       IF wsh_util_core.fte_is_installed = 'Y' AND l_cc_line_groups.COUNT > 0 THEN
2087        --{
2088        -- 1. get the group ids by which the constraints API has grouped the lines
2089        --
2090        l_cc_count_group_ids:=1;
2091        FOR i in l_cc_line_groups.FIRST..l_cc_line_groups.LAST LOOP
2092          --{
2093          b_cc_groupidexists:=FALSE;
2094          IF l_cc_group_ids.COUNT>0 THEN
2095            FOR j in l_cc_group_ids.FIRST..l_cc_group_ids.LAST LOOP
2096              IF (l_cc_line_groups(i).line_group_id=l_cc_group_ids(j)) THEN
2097                b_cc_groupidexists:=TRUE;
2098              END IF;
2099            END LOOP;
2100          END IF;
2101 
2102          IF (NOT(b_cc_groupidexists)) THEN
2103            l_cc_group_ids(l_cc_count_group_ids):=l_cc_line_groups(i).line_group_id;
2104            l_cc_count_group_ids:=l_cc_count_group_ids+1;
2105          END IF;
2106          --}
2107        END LOOP;
2108        --
2109        -- 2. from the group id table above, loop thru lines table to get the lines which belong
2110        -- to each group and call autocreate_trip for each group
2111        FOR i in l_cc_group_ids.FIRST..l_cc_group_ids.LAST LOOP
2112          --{
2113          l_cc_count_rec:=1;
2114          l_delivery_id_tab_temp.DELETE;      -- added this line
2115          FOR j in l_cc_line_groups.FIRST..l_cc_line_groups.LAST LOOP
2116            IF l_cc_line_groups(j).line_group_id=l_cc_group_ids(i) THEN
2117              l_delivery_id_tab_temp(l_cc_count_rec):=l_cc_line_groups(j).entity_line_id;
2118              l_cc_count_rec:=l_cc_count_rec+1;
2119            END IF;
2120          END LOOP;
2121          --
2122          IF l_debug_on THEN
2123             wsh_debug_sv.log(l_module_name,'Number of delivs. in this group',l_delivery_id_tab_temp.COUNT);
2124          END IF;
2125 	 --
2126 	 l_DelivGrpRec.deliv_IDTab := l_delivery_id_tab_temp;
2127 	 l_delivGrpRec.max_Delivs  := p_action_prms.maxDelivs;
2128 	 --
2129          WSH_TRIP_CONSOLIDATION.GroupDelivsIntoTrips(
2130            p_delivGrpRec	=> l_delivGrpRec,
2131            x_delOutRec       	=> x_delivery_out_rec,
2132            x_return_status 	=> l_return_status);
2133          --
2134          l_cc_upd_dlvy_ship_method:='Y';
2135          --
2136          IF l_cc_group_info.COUNT > 0 THEN
2137            FOR j in l_cc_group_info.FIRST..l_cc_group_info.LAST LOOP
2138              IF l_cc_group_info(j).line_group_id=l_cc_group_ids(i) THEN
2139               l_cc_upd_dlvy_ship_method:=l_cc_group_info(j).upd_dlvy_ship_method;
2140              END IF;
2141            END LOOP;
2142          END IF;
2143          --
2144          IF l_debug_on THEN
2145             wsh_debug_sv.log(l_module_name,'l_cc_upd_dlvy_ship_method ',l_cc_upd_dlvy_ship_method);
2146             wsh_debug_sv.log(l_module_name, '# of trips', x_delivery_out_rec.result_id_tab.COUNT);
2147             wsh_debug_sv.log(l_module_name,'l_return_status after GroupDelivsIntoTrips',l_return_status);
2148          END IF;
2149          --
2150          j := x_delivery_out_rec.result_id_tab.FIRST;
2151          WHILE j IS NOT NULL LOOP
2152            --{
2153            IF l_debug_on THEN
2154              wsh_debug_sv.log(l_module_name, 'Trip Name', x_delivery_out_rec.result_id_tab(j));
2155            END IF;
2156            --
2157            l_tripID := x_delivery_out_rec.result_id_tab(j);
2158            --
2159            IF l_cc_upd_dlvy_ship_method='N' THEN
2160              FOR tripcurtemp in trip_cur(l_tripID) LOOP
2161                l_cc_dlvy_ship_method:=tripcurtemp.SHIP_METHOD_CODE;
2162                IF l_cc_upd_dlvy_ship_method='N' THEN
2163                  update wsh_trips
2164                  set SHIP_METHOD_CODE=null,
2165                     CARRIER_ID = null,
2166                     MODE_OF_TRANSPORT = null,
2167                     SERVICE_LEVEL = null
2168                  where trip_id= l_tripID;
2169                END IF;
2170              END LOOP;
2171            END IF;
2172            --}
2173            j := x_delivery_out_rec.result_id_tab.NEXT(j);
2174            --
2175          END LOOP;
2176          --
2177          IF (l_cc_return_status is not null AND
2178 	     l_cc_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
2179            l_return_status:=l_cc_return_status;
2180          ELSIF (l_cc_return_status is not null AND
2181 	        l_cc_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING AND
2182 	        l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2183            l_return_status:=l_cc_return_status;
2184          ELSE
2185            l_cc_return_status:=l_return_status;
2186          END IF;
2187         --}
2188        END LOOP;
2189        --
2190        l_return_status:=l_cc_return_status;
2191        --
2192        IF l_debug_on THEN
2193          wsh_debug_sv.log(l_module_name,'Total number of trips',x_delivery_out_rec.result_id_tab.COUNT);
2194        END IF;
2195        --}
2196      ELSE
2197       --{
2198       IF l_debug_on THEN
2199         wsh_debug_sv.logmsg(l_module_name, 'No constraints, calling GroupDelivsIntoTrips');
2200         wsh_debug_sv.log(l_module_name, 'Number of delivs', l_delivery_id_tab.COUNT);
2201       END IF;
2202       --
2203       l_delivGrpRec.deliv_IDTab := l_delivery_id_tab;
2204       l_delivGrpRec.max_Delivs  := p_action_prms.maxDelivs;
2205       --
2206       WSH_TRIP_CONSOLIDATION.GroupDelivsIntoTrips(
2207           p_delivGrpRec		=> l_delivGrpRec,
2208           x_delOutRec       	=> x_delivery_out_rec,
2209           x_return_status 	=> l_return_status);
2210       --
2211       IF l_debug_on THEN
2212         wsh_debug_sv.log(l_module_name,'Total number of trips',x_delivery_out_rec.result_id_tab.COUNT);
2213       END IF;
2214       --}
2215      END IF;
2216      --
2217      IF l_debug_on THEN
2218        wsh_debug_sv.log(l_module_name,'Return Status After GroupDelivsIntoTrips',l_return_status);
2219      END IF;
2220      --
2221      wsh_util_core.api_post_call(
2222           p_return_status    => l_return_status,
2223           x_num_warnings     => l_num_warnings,
2224           x_num_errors       => l_num_errors);
2225      --
2226     ELSIF p_action_prms.action_code = 'OUTBOUND-DOCUMENT' THEN
2227       --
2228       IF p_rec_attr_tab.COUNT > 1 THEN
2229         FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2230         x_return_status := wsh_util_core.g_ret_sts_error;
2231         wsh_util_core.add_message(x_return_status,l_module_name);
2232         IF l_debug_on THEN
2233           wsh_debug_sv.log (l_module_name,'WSH_UI_MULTI_SELECTION');
2234         END IF;
2235         RAISE FND_API.G_EXC_ERROR;
2236       END IF;
2237       --
2238       --Standalone changes
2239       -- LSP PROJECT :Populate local table if client info is there on dd.
2240       l_standalone_mode := WMS_DEPLOY.WMS_DEPLOYMENT_MODE;
2241       IF l_standalone_mode  = 'L' THEN
2242       --{
2243         OPEN  c_get_client(l_delivery_id_tab(1));
2244         FETCH c_get_client INTO l_client_id;
2245         CLOSE c_get_client;
2246       --}
2247       END IF;
2248       -- LSP PROJECT : end
2249       --
2250       IF ( (l_standalone_mode = 'D' OR (l_standalone_mode = 'L' AND l_client_id IS NOT NULL)) AND ( p_action_prms.caller = 'WSH_PUB' )) THEN
2251       --{
2252           IF l_debug_on THEN
2253             wsh_debug_sv.log (l_module_name,'Action_type is', 'A');
2254             wsh_debug_sv.log (l_module_name,'Document_type is', 'SA');
2255             wsh_debug_sv.log (l_module_name,'Organization_id is', p_rec_attr_tab(1).organization_id);
2256           END IF;
2257 
2258           WSH_TRANSACTIONS_UTIL.Send_Document(
2259             p_entity_id       => l_delivery_id_tab(1),
2260             p_entity_type     => 'DLVY',
2261             p_action_type     => 'A',
2262             p_document_type   => 'SA',
2263             p_organization_id => p_rec_attr_tab(1).organization_id,
2264             x_return_status   => l_return_status);
2265 
2266       --}
2267       ELSE
2268       --{
2269            WSH_TRANSACTIONS_UTIL.Send_Document(
2270              p_entity_id       => l_delivery_id_tab(1),
2271              p_entity_type     => 'DLVY',
2272              p_action_type     => p_action_prms.action_type,
2273              p_document_type   => p_action_prms.document_type ,
2274              p_organization_id => p_action_prms.organization_id,
2275              x_return_status   => l_return_status);
2276       --}
2277       END IF;
2278       --
2279       IF l_debug_on THEN
2280         wsh_debug_sv.log(l_module_name,'Return Status After Calling Send_Document',l_return_status);
2281       END IF;
2282       --
2283       wsh_util_core.api_post_call(
2284         p_return_status    => l_return_status,
2285         x_num_warnings     => l_num_warnings,
2286         x_num_errors       => l_num_errors);
2287       --
2288     ELSIF p_action_prms.action_code = 'SELECT-CARRIER' THEN
2289       --
2290       IF wsh_util_core.fte_is_installed = 'Y' THEN
2291         --
2292         IF p_rec_attr_tab.COUNT > 1 and p_action_prms.caller in('WSH_FSTRX', 'WSH_PUB') THEN
2293           FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2294           x_return_status := wsh_util_core.g_ret_sts_error;
2295           wsh_util_core.add_message(x_return_status,l_module_name);
2296           FND_MSG_PUB.ADD;
2297           IF l_debug_on THEN
2298             wsh_debug_sv.logmsg(l_module_name,'WSH_UI_MULTI_SELECTION');
2299           END IF;
2300           RAISE FND_API.G_EXC_ERROR;
2301         END IF;
2302 
2303         --Bug 2657875
2304         -- l_form_flag := 'Y';
2305 
2306         IF  p_action_prms.form_flag = 'N' THEN
2307            l_form_flag := 'N';
2308         ELSE
2309            l_form_flag := 'Y';
2310         END IF;
2311 
2312         IF p_action_prms.ignore_ineligible_dels = 'Y' and
2313            l_num_warnings > 0 and l_valid_ids_tab.count > 0 THEN
2314            l_delivery_id_tab.delete;
2315            FOR i in l_valid_ids_tab.FIRST .. l_valid_ids_tab.LAST LOOP
2316               l_delivery_id_tab(l_delivery_id_tab.count+1) := l_valid_ids_tab(i);
2317            END LOOP;
2318         END IF;
2319 
2320         IF l_delivery_id_tab.count > 0 THEN
2321            WSH_NEW_DELIVERY_ACTIONS.process_carrier_selection(
2322              p_delivery_id_tab => l_delivery_id_tab,
2323              p_batch_id        => NULL,
2324              p_form_flag       => l_form_flag,
2325              p_caller          => p_action_prms.caller,
2326              x_return_message  => l_msg_data,
2327              x_return_status   => l_return_status);
2328 
2329            IF l_debug_on THEN
2330              wsh_debug_sv.log(l_module_name,'Return Status After Calling Process_Carrier_Selection',l_return_status);
2331            END IF;
2332            --
2333         ELSE
2334            l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2335         END IF;
2336 
2337         wsh_util_core.api_post_call(
2338           p_return_status    => l_return_status,
2339           x_num_warnings     => l_num_warnings,
2340           x_num_errors       => l_num_errors);
2341 
2342 
2343         --
2344       ELSE
2345         FND_MESSAGE.SET_NAME('FTE', 'FTE_NOT_INSTALLED');
2346         x_return_status := wsh_util_core.g_ret_sts_error;
2347         wsh_util_core.add_message(x_return_status,l_module_name);
2348         IF l_debug_on THEN
2349           wsh_debug_sv.logmsg(l_module_name,'FTE_NOT_INSTALLED');
2350         END IF;
2351         RAISE FND_API.G_EXC_ERROR;
2352       END IF;
2353       --
2354     ELSIF p_action_prms.action_code = 'DELETE' THEN
2355 
2356       --OTM R12, prevent delete of delivery that's not empty and ignore for planning
2357       IF (l_gc3_is_installed = 'Y') THEN
2358 
2359         i := l_delivery_id_tab.FIRST;
2360         l_counter := 1;
2361 
2362         WHILE i IS NOT NULL LOOP
2363 
2364           --allow delete for all 'NS' deliveries
2365           IF (NVL(p_rec_attr_tab(i).tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)
2366               = WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT) THEN
2367             --generate allowed list of deliveries to be deleted
2368             l_new_delivery_id_tab(l_counter) := l_delivery_id_tab(i);
2369             l_counter := l_counter + 1;
2370           ELSE
2371             --add a message for the delivery that cannot be deleted.
2372             l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2373 
2374             IF l_debug_on THEN
2375               wsh_debug_sv.logmsg(l_module_name,'ERROR: delivery ' || l_delivery_id_tab(i) || ' cannot be deleted when it is not NS status');
2376             END IF;
2377 
2378             FND_MESSAGE.SET_NAME('WSH','WSH_OTM_DEL_DELETE_ERROR');
2379             FND_MESSAGE.SET_TOKEN('DEL_NAME',WSH_NEW_DELIVERIES_PVT.get_name(l_delivery_id_tab(i)));
2380 
2381             --we do not want the prefix error or warning for the message, so adding it with success
2382             --status will leave out the prefix.  Reason being this is an error message but could be
2383             --displayed as a warning if not all deliveries fail.
2384             WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS, l_module_name);
2385 
2386             l_num_warnings := l_num_warnings + 1;
2387 
2388           END IF;
2389           i := l_delivery_id_tab.NEXT(i);
2390         END LOOP;
2391 
2392         IF (l_new_delivery_id_tab.COUNT = 0) THEN
2393           l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2394 
2395           IF l_debug_on THEN
2396             WSH_DEBUG_SV.log(l_module_name,'0 deliveries to delete');
2397           END IF;
2398 
2399           wsh_util_core.api_post_call(
2400               p_return_status    => l_return_status,
2401               x_num_warnings     => l_num_warnings,
2402               x_num_errors       => l_num_errors);
2403 
2404         END IF;
2405 
2406         l_delivery_id_tab.DELETE;
2407         l_delivery_id_tab := l_new_delivery_id_tab;
2408       END IF;
2409       --END OTM R12
2410 
2411       WSH_UTIL_CORE.Delete(
2412         p_type          => 'DLVY',
2413         p_rows          => l_delivery_id_tab,
2414         x_return_status => l_return_status);
2415       --
2416       IF l_debug_on THEN
2417         wsh_debug_sv.log(l_module_name,'Return Status After Calling Delete',l_return_status);
2418       END IF;
2419       --
2420       wsh_util_core.api_post_call(
2421         p_return_status    => l_return_status,
2422         x_num_warnings     => l_num_warnings,
2423         x_num_errors       => l_num_errors);
2424       --
2425 -- Bug 4493263: This generate-pack-slip action is not needed as it is
2426 -- taken care a little down in the code line.
2427 /*    ELSIF p_action_prms.action_code = 'GENERATE-PACK-SLIP' THEN
2428       --
2429       IF p_rec_attr_tab.COUNT > 1 THEN
2430         FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2431         x_return_status := wsh_util_core.g_ret_sts_error;
2432         wsh_util_core.add_message(x_return_status,l_module_name);
2433         IF l_debug_on THEN
2434           wsh_debug_sv.log (l_module_name,'WSH_UI_MULTI_SELECTION');
2435         END IF;
2436         RAISE FND_API.G_EXC_ERROR;
2437       END IF;
2438       --
2439       WSH_PACKING_SLIPS_PVT.Insert_Row(
2440         x_return_status       => l_return_status,
2441         x_msg_count           => l_msg_count,
2442         x_msg_data            => l_msg_data,
2443         p_entity_name         => 'WSH_NEW_DELIVERIES',
2444         p_entity_id           => l_delivery_id_tab(1),
2445         p_application_id      => 665  --FND_GLOBAL.RESP_APPL_ID
2446         p_location_id         => l_pickup_loc_id,
2447         p_document_type       => 'PACK_TYPE',
2448         p_document_sub_type   => 'SALES_ORDER',
2449         p_reason_of_transport => p_action_prms.reason_of_transport,
2450         p_description         => p_action_prms.description,
2451         x_document_number     => x_delivery_out_rec.packing_slip_number);
2452       --
2453       IF l_debug_on THEN
2454         wsh_debug_sv.log(l_module_name,'Return Status After Calling Insert_Row',l_return_status);
2455       END IF;
2456       --
2457       wsh_util_core.api_post_call(
2458         p_return_status    => l_return_status,
2459         x_num_warnings     => l_num_warnings,
2460         x_num_errors       => l_num_errors,
2461         p_msg_data     => l_msg_data);
2462       --
2463    */--Bug 4493263
2464     ELSIF p_action_prms.action_code IN ('PICK-RELEASE-UI','RESOLVE-EXCEPTIONS-UI','TRANSACTION-HISTORY-UI','FREIGHT-COSTS-UI')
2465           AND p_action_prms.caller = 'WSH_FSTRX' THEN
2466       --
2467       IF p_rec_attr_tab.COUNT > 1 THEN
2468         FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2469         x_return_status := wsh_util_core.g_ret_sts_error;
2470         wsh_util_core.add_message(x_return_status,l_module_name);
2471         IF l_debug_on THEN
2472           wsh_debug_sv.log (l_module_name,'WSH_UI_MULTI_SELECTION');
2473         END IF;
2474         RAISE FND_API.G_EXC_ERROR;
2475       END IF;
2476       --
2477 
2478     ELSIF p_action_prms.action_code = 'GENERATE-PACK-SLIP' THEN
2479       --
2480       --Bug 4493263
2481       i := p_rec_attr_tab.first;
2482       WHILE i IS NOT NULL LOOP
2483       --{
2484         -- initialize loop_num_warning, loop_num_error
2485         l_loop_num_warn := 0;
2486         l_loop_num_err  := 0;
2487         l_dlvy_doc_seq_num := null;
2488 
2489         OPEN c_dlvy_pack_slip_cur(p_rec_attr_tab(i).delivery_id);
2490         FETCH c_dlvy_pack_slip_cur INTO l_dlvy_doc_seq_num;
2491         CLOSE c_dlvy_pack_slip_cur;
2492 
2493         IF l_debug_on THEN
2494             wsh_debug_sv.log(l_module_name, 'Delivery id', p_rec_attr_tab(i).delivery_id);
2495             wsh_debug_sv.log(l_module_name, 'Doc seq num', l_dlvy_doc_seq_num);
2496         END IF;
2497 
2498      /* IF p_rec_attr_tab.COUNT > 1 THEN
2499         FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2500         x_return_status := wsh_util_core.g_ret_sts_error;
2501         wsh_util_core.add_message(x_return_status,l_module_name);
2502         IF l_debug_on THEN
2503           wsh_debug_sv.log (l_module_name,'WSH_UI_MULTI_SELECTION');
2504         END IF;
2505         RAISE FND_API.G_EXC_ERROR;
2506        END IF;*/
2507 
2508       --
2509         IF ( l_dlvy_doc_seq_num IS NULL ) THEN
2510         --{
2511           WSH_PACKING_SLIPS_PVT.Insert_Row(
2512             x_return_status       => l_return_status,
2513             x_msg_count           => l_msg_count,
2514             x_msg_data            => l_msg_data,
2515             p_entity_name         => 'WSH_NEW_DELIVERIES',
2516             p_entity_id           => p_rec_attr_tab(i).delivery_id,
2517             p_application_id      => 665 /* FND_GLOBAL.RESP_APPL_ID */,
2518             --Bug 6625788 For all Iteration Same l_pickup_loc_id is passed, so sending pickup_location_id for corresponding Delivery
2519            -- p_location_id         => l_pickup_loc_id,
2520             p_location_id         =>  p_rec_attr_tab(i).INITIAL_PICKUP_LOCATION_ID,
2521             p_document_type       => 'PACK_TYPE',
2522             p_document_sub_type   => 'SALES_ORDER',
2523             --Bug 6625788 For all Iteration Same Reason of Transport and Description is passed, so sending corresponding info for Each Delivery
2524             --p_reason_of_transport => p_action_prms.reason_of_transport,
2525             --p_description         => p_action_prms.description,
2526             p_reason_of_transport => p_rec_attr_tab(i).REASON_OF_TRANSPORT,
2527             p_description         => p_rec_attr_tab(i).DESCRIPTION,
2528             x_document_number     => x_delivery_out_rec.packing_slip_number);
2529             --
2530           IF l_debug_on THEN
2531             wsh_debug_sv.log(l_module_name,'Return Status After Calling Insert_Row',l_return_status);
2532           END IF;
2533           --
2534           wsh_util_core.api_post_call(
2535             p_return_status    => l_return_status,
2536             x_num_warnings     => l_loop_num_warn,
2537             x_num_errors       => l_loop_num_err,
2538             p_msg_data         => l_msg_data);
2539 
2540         --}
2541         END IF;
2542 
2543         i := p_rec_attr_tab.next(i);
2544         l_num_warnings := l_num_warnings + l_loop_num_warn;
2545         l_num_errors   := l_num_errors   + l_loop_num_err;
2546         --
2547       --}
2548       END LOOP;
2549 
2550       --
2551       IF l_num_errors > 0 THEN
2552         IF l_num_errors  = p_rec_attr_tab.count THEN
2553            RAISE FND_API.G_EXC_ERROR;
2554         ELSE
2555            RAISE WSH_UTIL_CORE.G_EXC_WARNING;
2556         END IF;
2557       ELSIF l_num_warnings > 0 THEN
2558          RAISE WSH_UTIL_CORE.G_EXC_WARNING;
2559       END IF;
2560       --
2561 
2562     ELSIF p_action_prms.action_code IN ('PICK-RELEASE-UI','RESOLVE-EXCEPTIONS-UI','TRANSACTION-HISTORY-UI','FREIGHT-COSTS-UI')
2563           AND p_action_prms.caller = 'WSH_FSTRX' THEN
2564       --
2565       IF p_rec_attr_tab.COUNT > 1 THEN
2566         FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2567         x_return_status := wsh_util_core.g_ret_sts_error;
2568         wsh_util_core.add_message(x_return_status,l_module_name);
2569         IF l_debug_on THEN
2570           wsh_debug_sv.log (l_module_name,'WSH_UI_MULTI_SELECTION');
2571         END IF;
2572         RAISE FND_API.G_EXC_ERROR;
2573       END IF;
2574       --
2575 
2576     ELSIF p_action_prms.action_code = 'GET-FREIGHT-COSTS' THEN
2577        --
2578 
2579        IF wsh_util_core.fte_is_installed = 'Y' THEN
2580           --
2581           IF p_rec_attr_tab.COUNT > 1 and p_action_prms.caller in('WSH_FSTRX', 'WSH_PUB') THEN
2582             FND_MESSAGE.SET_NAME('WSH','WSH_UI_MULTI_SELECTION');
2583             x_return_status := wsh_util_core.g_ret_sts_error;
2584             wsh_util_core.add_message(x_return_status,l_module_name);
2585             FND_MSG_PUB.ADD;
2586             IF l_debug_on THEN
2587               wsh_debug_sv.logmsg(l_module_name,'WSH_UI_MULTI_SELECTION');
2588             END IF;
2589             RAISE FND_API.G_EXC_ERROR;
2590           END IF;
2591 
2592           IF p_action_prms.ignore_ineligible_dels = 'Y'  and
2593              l_num_warnings > 0 and l_valid_ids_tab.count > 0 THEN
2594              l_delivery_id_tab.delete;
2595              FOR i in l_valid_ids_tab.FIRST .. l_valid_ids_tab.LAST LOOP
2596                 l_delivery_id_tab(l_delivery_id_tab.count+1) := l_valid_ids_tab(i);
2597              END LOOP;
2598           END IF;
2599 
2600 
2601           l_in_param_rec.delivery_id_list := l_delivery_id_tab;
2602           l_in_param_rec.action := 'RATE';
2603           IF p_action_prms.caller = 'WSH_DLMG' THEN -- R12 Select Carrier
2604              l_in_param_rec.seq_tender_flag := 'Y';
2605           END IF;
2606 
2607           WSH_FTE_INTEGRATION.Rate_Delivery(
2608                p_api_version      => 1.0,
2609                p_init_msg_list    => FND_API.G_FALSE,
2610                p_commit           => p_commit,
2611                p_in_param_rec     => l_in_param_rec,
2612                x_out_param_rec    => l_out_param_rec,
2613                x_return_status    => l_return_status,
2614                x_msg_count        => l_msg_count,
2615                x_msg_data         => l_msg_data);
2616              --
2617           IF l_debug_on THEN
2618             wsh_debug_sv.log(l_module_name,'Return Status from WSH_FTE_INTEGRATION.Rate_Delivery' ,l_return_status);
2619           END IF;
2620 
2621 
2622          IF p_action_prms.caller = 'WSH_DLMG' AND
2623             l_return_status  in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
2624             -- csun deliveryMerge , log exception
2625 
2626             i := l_out_param_rec.failed_delivery_id_list.FIRST;
2627             WHILE i is not NULL LOOP
2628                FND_MESSAGE.SET_NAME('WSH', 'WSH_RATE_DELIVERY_FAIL');
2629 	       FND_MESSAGE.SET_TOKEN('DELIVERY_ID' , to_char(l_out_param_rec.failed_delivery_id_list(i)));
2630                l_exception_message := FND_MESSAGE.Get;
2631                l_exception_id := NULL;
2632                OPEN c_get_delivery_org(l_out_param_rec.failed_delivery_id_list(i));
2633                FETCH c_get_delivery_org INTO l_initial_pickup_location_id;
2634                IF c_get_delivery_org%NOTFOUND THEN
2635                  CLOSE c_get_delivery_org;
2636                  raise FND_API.G_EXC_UNEXPECTED_ERROR;
2637                END IF;
2638                CLOSE c_get_delivery_org;
2639                wsh_xc_util.log_exception(
2640                   p_api_version           => 1.0,
2641                   x_return_status         => l_return_status,
2642                   x_msg_count             => l_msg_count,
2643                   x_msg_data              => l_msg_data,
2644                   x_exception_id          => l_exception_id,
2645                   p_exception_location_id => l_initial_pickup_location_id,
2646                   p_logged_at_location_id => l_initial_pickup_location_id,
2647                   p_logging_entity        => 'SHIPPER',
2648                   p_logging_entity_id     => FND_GLOBAL.USER_ID,
2649                   p_exception_name        => 'WSH_RATE_DELIVERY_FAIL',
2650                   p_message               => substrb(l_exception_message,1,2000),
2651                   p_delivery_id           => l_out_param_rec.failed_delivery_id_list(i));
2652             i := l_out_param_rec.failed_delivery_id_list.next(i);
2653             END LOOP;
2654 
2655             l_return_status :=  WSH_UTIL_CORE.G_RET_STS_WARNING;
2656 
2657          END IF;
2658 
2659           wsh_util_core.api_post_call(
2660              p_return_status    => l_return_status,
2661              x_num_warnings     => l_num_warnings,
2662              x_num_errors       => l_num_errors,
2663              p_msg_data         => l_msg_data);
2664 
2665        ELSE
2666           -- FTE is not installed
2667           FND_MESSAGE.SET_NAME('FTE', 'FTE_NOT_INSTALLED');
2668              x_return_status := wsh_util_core.g_ret_sts_error;
2669              wsh_util_core.add_message(x_return_status,l_module_name);
2670           IF l_debug_on THEN
2671              wsh_debug_sv.logmsg(l_module_name,'FTE_NOT_INSTALLED');
2672           END IF;
2673           RAISE FND_API.G_EXC_ERROR;
2674        END IF;
2675 
2676 
2677 
2678     ELSIF p_action_prms.action_code = 'CANCEL-SHIP-METHOD' THEN
2679 
2680       WSH_FTE_INTEGRATION.Cancel_Service  (
2681         p_delivery_list  =>  l_delivery_id_tab,
2682         p_action         => 'CANCEL',
2683         p_commit         => p_commit,
2684         x_return_status  => l_return_status,
2685         x_msg_count      => l_msg_count,
2686         x_msg_data       => l_msg_data );
2687 
2688 
2689        IF l_debug_on THEN
2690           wsh_debug_sv.log(l_module_name,'Return Status After Cancel Ship Method',l_return_status);
2691        END IF;
2692 
2693        wsh_util_core.api_post_call(
2694          p_return_status    => l_return_status,
2695          x_num_warnings     => l_num_warnings,
2696          x_num_errors       => l_num_errors,
2697          p_msg_data         => l_msg_data);
2698 
2699     --deliveryMerge
2700     ELSIF p_action_prms.action_code = 'ADJUST-PLANNED-FLAG' THEN
2701 
2702        WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag(
2703           p_delivery_ids          => l_delivery_id_tab,
2704           p_caller                => p_action_prms.caller,
2705           p_force_appending_limit => 'N',
2706           p_call_lcss             => 'Y',
2707           p_event                 => p_action_prms.event,
2708           x_return_status         => l_return_status);
2709 
2710        IF l_debug_on THEN
2711           wsh_debug_sv.log(l_module_name,'Return Status from WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag',l_return_status);
2712        END IF;
2713 
2714        wsh_util_core.api_post_call(
2715          p_return_status    => l_return_status,
2716          x_num_warnings     => l_num_warnings,
2717          x_num_errors       => l_num_errors,
2718          p_msg_data         => l_msg_data);
2719 
2720     ELSIF p_action_prms.action_code = 'PRINT-PACK-SLIP' THEN
2721     --{ begin print pack slip
2722 
2723       i := p_rec_attr_tab.first;
2724       WHILE i IS NOT NULL LOOP
2725       --{
2726          -- initialize loop_num_warning, loop_num_error
2727          l_loop_num_warn := 0;
2728          l_loop_num_err  := 0;
2729 
2730          OPEN c_dlvy_pack_slip_cur(p_rec_attr_tab(i).delivery_id);
2731          FETCH c_dlvy_pack_slip_cur INTO l_dlvy_doc_seq_num;
2732          CLOSE c_dlvy_pack_slip_cur;
2733 
2734         if l_debug_on then
2735           wsh_debug_sv.log(l_module_name, 'Doc seq num', l_dlvy_doc_seq_num);
2736         end if;
2737         IF l_dlvy_doc_seq_num IS NULL THEN
2738          --{
2739          --Pack slip does not exist. Call Group API for action Generate Pack Slip
2740           l_action_prms := p_action_prms;
2741           l_action_prms.action_code := 'GENERATE-PACK-SLIP';
2742           l_rec_attr_tab.delete;
2743           l_rec_attr_tab(1) := p_rec_attr_tab(i);
2744 
2745         wsh_deliveries_grp.delivery_action(
2746           p_api_version_number     =>  p_api_version_number,
2747           p_init_msg_list          =>  FND_API.G_FALSE,
2748           p_commit                 =>  FND_API.G_FALSE,
2749           p_action_prms            =>  l_action_prms,
2750           p_rec_attr_tab           =>  l_rec_attr_tab,
2751           x_delivery_out_rec       =>  x_delivery_out_rec,
2752           x_defaults_rec           =>  x_defaults_rec,
2753           x_return_status          =>  l_return_status,
2754           x_msg_count              =>  l_msg_count,
2755           x_msg_data               =>  l_msg_data);
2756 
2757         -- Set raise error flag to false ,continue with next delivery in the loop
2758         -- after end of loop, check for l_num_errors
2759         wsh_util_core.api_post_call(
2760           p_return_status    => l_return_status,
2761           x_num_warnings     => l_loop_num_warn,
2762           x_num_errors       => l_loop_num_err,
2763           p_msg_data         => l_msg_data,
2764           p_raise_error_flag => FALSE);
2765 
2766         --}
2767         END IF;
2768         --Bug 4493263
2769         l_num_warnings := l_num_warnings + l_loop_num_warn;
2770         l_num_errors := l_num_errors + l_loop_num_err;
2771 
2772         IF ( l_loop_num_err = 0 ) THEN
2773             l_doc_delivery_id_tab(l_doc_delivery_id_tab.COUNT+1) := p_rec_attr_tab(i).delivery_id;
2774             l_doc_valid_ids_tab(l_doc_valid_ids_tab.COUNT+1) := i;
2775         END IF;
2776 
2777         i := p_rec_attr_tab.next(i);
2778       --}
2779       END LOOP;
2780 
2781       -- Bug 4493263
2782       -- Records in STF are refreshed based on this x_delivery_out_rec.valid_ids_tab count if
2783       -- multi-records are selected in STF while calling this API with action 'PRINT-PACK-SLIP'
2784       -- Prior to this fix, x_delivery_out_rec.valid_ids_tab will always have 1 record, if
2785       -- records selected from STF doesn't have packing slip number.
2786       x_delivery_out_rec.valid_ids_tab := l_doc_valid_ids_tab;
2787 
2788       OPEN  c_pack_slip_doc_set;
2789       FETCH c_pack_slip_doc_set into l_doc_set_id;
2790       CLOSE c_pack_slip_doc_set;
2791 
2792       IF ( l_doc_set_id IS NOT NULL AND
2793            l_doc_delivery_id_tab.COUNT > 0 )
2794       THEN
2795          -- initialize loop_num_warning, loop_num_error
2796          l_loop_num_warn := 0;
2797          l_loop_num_err  := 0;
2798 
2799          WSH_DOCUMENT_SETS.Print_Document_Sets(
2800                       p_report_set_id       => l_doc_set_id,
2801                       p_organization_id     => p_action_prms.organization_id,
2802                       p_trip_ids            => l_dummy_id_tab,
2803                       p_stop_ids            => l_dummy_id_tab,
2804                       p_delivery_ids        => l_doc_delivery_id_tab,
2805                       p_document_param_info => l_dummy_doc_set_params,
2806                       x_return_status       => l_return_status);
2807 
2808          wsh_util_core.api_post_call(
2809                   p_return_status    => l_return_status,
2810                   x_num_warnings     => l_loop_num_warn,
2811                   x_num_errors       => l_loop_num_err,
2812                   p_msg_data         => l_msg_data,
2813                   p_raise_error_flag => FALSE );
2814 
2815 
2816          l_num_warnings := l_num_warnings + l_loop_num_warn;
2817          l_num_errors := l_num_errors + l_loop_num_err;
2818       END IF;
2819 
2820       IF l_num_errors > 0 THEN
2821         IF l_num_errors  = p_rec_attr_tab.count THEN
2822            RAISE FND_API.G_EXC_ERROR;
2823         ELSE
2824            RAISE WSH_UTIL_CORE.G_EXC_WARNING;
2825         END IF;
2826       ELSIF l_num_warnings > 0 THEN
2827          RAISE WSH_UTIL_CORE.G_EXC_WARNING;
2828       END IF;
2829 
2830     --} end print pack slip
2831 --  Bug 4493263 : added action 'GENERATE-BOL'
2832     ELSIF p_action_prms.action_code in ( 'GENERATE-BOL', 'PRINT-BOL' ) THEN
2833     --{ begin print bol
2834 
2835       i := p_rec_attr_tab.first;
2836 
2837       <<dlvy_loop>>
2838       WHILE i IS NOT NULL
2839       LOOP
2840       --{ loop for delivery
2841        l_child_deliveries_tab.delete;
2842        OPEN c_child_deliveries(p_rec_attr_tab(i).delivery_id);
2843        FETCH c_child_deliveries BULK COLLECT INTO l_child_deliveries_tab;
2844        CLOSE c_child_deliveries;
2845 
2846        IF l_child_deliveries_tab.count =  0 THEN
2847           l_child_deliveries_tab(1) := p_rec_attr_tab(i).delivery_id;
2848        END IF;
2849 
2850        -- { child deliveries loop
2851        FOR child in 1 .. l_child_deliveries_tab.count LOOP
2852            <<leg_loop>>
2853            FOR dlvy_leg_rec IN c_dlvy_leg_cur(l_child_deliveries_tab(child))
2854            LOOP
2855            --{ loop for dleg
2856              -- initialize loop_num_warning, loop_num_error
2857              -- Need to address this later... We have two loops, one for delivery, another for delivery legs
2858              -- How should warnings, errors be tracked for cases where a single delivery has many legs
2859              l_loop_num_warn := 0;
2860              l_loop_num_err  := 0;
2861 
2862             -- Bug 3311273
2863              -- Flag to indicate there is atleast one delivery leg for the delivery
2864              l_dleg_found := 'Y';
2865              -- Validate if ship method exists or not
2866              IF dlvy_leg_rec.ship_method IS NULL THEN
2867 
2868                --l_num_errors   := l_num_errors + l_loop_num_err;
2869                l_num_errors   := l_num_errors + 1;
2870                FND_MESSAGE.SET_NAME('WSH','WSH_BOL_NULL_SHIP_METHOD_ERROR');
2871                FND_MESSAGE.SET_TOKEN('TRIP_NAME',wsh_trips_pvt.get_name(dlvy_leg_rec.trip_id));
2872                l_return_status := wsh_util_core.g_ret_sts_error;
2873                wsh_util_core.add_message(l_return_status,l_module_name);
2874                IF l_debug_on THEN
2875                  wsh_debug_sv.log (l_module_name,'No Ship Method for the trip'||dlvy_leg_rec.trip_id);
2876                END IF;
2877                exit leg_loop;
2878              END IF;
2879 -- End of Bug 3311273
2880 
2881              IF l_debug_on THEN
2882                 wsh_debug_sv.log(l_module_name, 'Processing delivery leg', dlvy_leg_rec.delivery_leg_id);
2883              END IF;
2884 
2885              l_dleg_tab.delete;
2886              wsh_delivery_legs_pvt.populate_record(
2887                   p_delivery_leg_id => NVL(dlvy_leg_rec.parent_delivery_leg_id, dlvy_leg_rec.delivery_leg_id),
2888                   x_delivery_leg_info => l_dleg_tab(1),
2889                   x_return_status    => l_return_status);
2890 
2891              wsh_util_core.api_post_call(
2892                 p_return_status    => l_return_status,
2893                 x_num_warnings     => l_loop_num_warn,
2894                 x_num_errors       => l_loop_num_err,
2895                 p_raise_error_flag => FALSE);
2896 
2897               -- if there is an error for current delivery leg,
2898               -- need to skip this and proceed with next leg
2899               -- l_num_error count will be checked towards the end
2900               if l_return_status in (wsh_util_core.g_ret_sts_error,
2901                                  wsh_util_core.g_ret_sts_unexp_error) then
2902                 l_num_warnings := l_num_warnings + l_loop_num_warn;
2903                 l_num_errors   := l_num_errors + l_loop_num_err;
2904                  exit leg_loop;
2905               end if;
2906 
2907              l_dleg_prms.caller := p_action_prms.caller;
2908              l_dleg_prms.action_code := p_action_prms.action_code;
2909              l_dleg_prms.phase := p_action_prms.phase;
2910              l_dleg_prms.p_Pick_Up_Location_Id := dlvy_leg_rec.pick_Up_Location_Id;
2911              l_dleg_prms.p_Ship_Method := dlvy_leg_rec.Ship_Method;
2912              l_dleg_prms.p_Drop_Off_Location_Id := dlvy_leg_rec.Drop_Off_Location_Id;
2913              l_dleg_prms.p_Carrier_Id := dlvy_leg_rec.Carrier_Id;
2914 
2915              l_dleg_action_out_rec.x_trip_id := dlvy_leg_rec.trip_id;
2916              l_dleg_action_out_rec.x_trip_name := dlvy_leg_rec.trip_name;
2917              l_dleg_action_out_rec.x_delivery_id := l_child_deliveries_tab(child);
2918              l_dleg_action_out_rec.result_id_tab.delete;
2919 
2920              wsh_delivery_legs_grp.Delivery_Leg_Action(
2921                 p_api_version_number  => 1.0,
2922                 p_init_msg_list       => FND_API.G_FALSE,
2923                 p_commit              => FND_API.G_FALSE,
2924                 p_rec_attr_tab        => l_dleg_tab,
2925                 p_action_prms         => l_dleg_prms,
2926                 x_action_out_rec      => l_dleg_action_out_rec,
2927                 x_return_status       => l_return_status,
2928                 x_msg_count           => l_msg_count,
2929                 x_msg_data            => l_msg_data);
2930 
2931 
2932               IF l_dleg_action_out_rec.result_id_tab.count > 0 THEN
2933                   l_request_id := l_dleg_action_out_rec.result_id_tab(l_dleg_action_out_rec.result_id_tab.first);
2934                   x_delivery_out_rec.result_id_tab(x_delivery_out_rec.result_id_tab.count +1) := l_request_id;
2935               END IF;
2936 
2937            -- increase the counter if successful
2938            IF l_request_id > 0 THEN --{
2939 
2940                l_submitted_docs := l_submitted_docs + 1;
2941 
2942                IF l_submitted_docs = 1 THEN --{
2943                   l_req_id_str := to_char(l_request_id);
2944                ELSE
2945                   l_req_id_str := l_req_id_str || ', ' || to_char(l_request_id);
2946                END IF; --}
2947 
2948            END IF;
2949 
2950 
2951            -- Set raise error flag to FALSE so that the loop can continue
2952            -- with other legs or deliveries
2953            -- After end of loop, checks for l_num_warning, l_num_errors should set the final return_status
2954 
2955            wsh_util_core.api_post_call(
2956              p_return_status    => l_return_status,
2957              x_num_warnings     => l_loop_num_warn,
2958              x_num_errors       => l_loop_num_err,
2959              p_msg_data         => l_msg_data,
2960              p_raise_error_flag => FALSE);
2961 
2962             l_num_warnings := l_num_warnings + l_loop_num_warn;
2963             l_num_errors   := l_num_errors + l_loop_num_err;
2964             --} loop for dleg
2965             END LOOP leg_loop;
2966 
2967         END LOOP; --} child deliveries loop
2968 
2969 -- Bug 3311273
2970         -- If no leg exist for this Delivery,there should be a ERROR/WARNING message here
2971         -- Indicates there is no associated trip for the delivery
2972         IF l_dleg_found = 'N' THEN
2973           FND_MESSAGE.SET_NAME('WSH','WSH_BOL_NO_TRIP_FOR_DLVY');
2974           FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_rec_attr_tab(i).delivery_id));
2975           l_num_errors   := l_num_errors + 1;
2976           l_return_status := wsh_util_core.g_ret_sts_error;
2977           wsh_util_core.add_message(l_return_status,l_module_name);
2978           IF l_debug_on THEN
2979             wsh_debug_sv.log (l_module_name,'WSH_NO_DELIVERY_LEG_FOUND');
2980           END IF;
2981         END IF;
2982 -- End of Bug 3311273
2983 
2984         i := p_rec_attr_tab.next(i);
2985       --} loop for delivery
2986       END LOOP dlvy_loop;
2987 
2988       IF l_debug_on THEN
2989          wsh_debug_sv.log(l_module_name, 'result id tab count', x_delivery_out_rec.result_id_tab.count);
2990       END IF;
2991 
2992       IF l_submitted_docs > 0 THEN
2993          fnd_message.set_name('WSH', 'WSH_PRINT_BOL_REQUEST');
2994          fnd_message.set_token('REQ_IDS', l_req_id_str);
2995          wsh_util_core.add_message(wsh_util_core.g_ret_sts_success);
2996       END IF;
2997 
2998       IF l_num_errors > 0 THEN
2999 -- 3311273
3000         FND_MESSAGE.SET_NAME('WSH','WSH_BOL_SUMMARY_MESG');
3001         FND_MESSAGE.SET_TOKEN('ERROR_COUNT',l_num_errors );
3002         FND_MESSAGE.SET_TOKEN('SUCC_COUNT',p_rec_attr_tab.count - l_num_errors );
3003         l_return_status := wsh_util_core.g_ret_sts_error;
3004         wsh_util_core.add_message(l_return_status,l_module_name);
3005         IF l_debug_on THEN
3006           wsh_debug_sv.log (l_module_name,'Error processing deliveries-'||l_num_errors);
3007         END IF;
3008 -- End of 3311273
3009         IF l_num_errors  = p_rec_attr_tab.count THEN
3010            RAISE FND_API.G_EXC_ERROR;
3011         ELSE
3012           RAISE WSH_UTIL_CORE.G_EXC_WARNING;
3013         END IF;
3014       ELSIF l_num_warnings > 0 THEN
3015          RAISE WSH_UTIL_CORE.G_EXC_WARNING;
3016       END IF;
3017 
3018     --} end print bol
3019    ELSE
3020       --
3021       FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_ACTION_CODE');
3022       FND_MESSAGE.SET_TOKEN('ACT_CODE',p_action_prms.action_code );
3023       x_return_status := wsh_util_core.g_ret_sts_error;
3024       wsh_util_core.add_message(x_return_status,l_module_name);
3025       IF l_debug_on THEN
3026          wsh_debug_sv.log (l_module_name,'WSH_INVALID_ACTION_CODE');
3027       END IF;
3028       RAISE FND_API.G_EXC_ERROR;
3029       --
3030     END IF;
3031     --
3032     IF l_debug_on THEN
3033        wsh_debug_sv.log(l_module_name, 'l_num_errors', l_num_errors);
3034        wsh_debug_sv.log(l_module_name, 'l_num_warnings', l_num_warnings);
3035     END IF;
3036 
3037 
3038    -- K LPN CONV. rv
3039    --
3040    IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3041    THEN
3042    --{
3043 
3044        IF l_debug_on THEN
3045          WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3046        END IF;
3047        --
3048        WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3049          (
3050            p_in_rec             => l_lpn_in_sync_comm_rec,
3051            x_return_status      => l_return_status,
3052            x_out_rec            => l_lpn_out_sync_comm_rec
3053          );
3054        --
3055        IF l_debug_on THEN
3056            WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
3057        END IF;
3058        --
3059        WSH_UTIL_CORE.API_POST_CALL
3060          (
3061            p_return_status    => l_return_status,
3062            x_num_warnings     => l_num_warnings,
3063            x_num_errors       => l_num_errors
3064          );
3065    --}
3066    END IF;
3067    -- K LPN CONV. rv
3068    --
3069 
3070         --Call to DCP
3071         --If profile is turned on.
3072    BEGIN
3073    --{
3074        IF l_debug_on THEN
3075           wsh_debug_sv.log(l_module_name, 'l_check_dcp', l_check_dcp);
3076           wsh_debug_sv.log(l_module_name, 'g_call_dcp_check', WSH_DCP_PVT.G_CALL_DCP_CHECK);
3077        END IF;
3078 
3079        IF NVL(l_check_dcp, -99) IN (1,2)
3080        AND NVL(WSH_DCP_PVT.G_CALL_DCP_CHECK, 'Y') = 'Y'
3081        THEN
3082        --{
3083           IF p_action_prms.action_code IN ('AUTO-PACK', 'CONFIRM') THEN
3084 
3085              IF l_debug_on THEN
3086                 WSH_DEBUG_SV.LOGMSG(L_MODULE_NAME, 'CALLING DCP ');
3087              END IF;
3088 
3089              wsh_dcp_pvt.check_delivery(
3090                      p_action_code => p_action_prms.action_code,
3091                      p_dlvy_table  => p_rec_attr_tab);
3092           END IF;
3093        --}
3094        END IF;
3095 
3096     EXCEPTION
3097       WHEN wsh_dcp_pvt.data_inconsistency_exception THEN
3098        if NOT l_debug_on OR l_debug_on is null then
3099           l_debug_on := wsh_debug_sv.is_debug_enabled;
3100        end if;
3101        IF l_debug_on THEN
3102           WSH_DEBUG_SV.logmsg(l_module_name,'data_inconsistency_exception');
3103        END IF;
3104        ROLLBACK TO DELIVERY_ACTION_GRP;
3105        GOTO api_start;
3106       WHEN OTHERS THEN
3107        IF l_debug_on THEN
3108           WSH_DEBUG_SV.logmsg(l_module_name,'When Others');
3109        END IF;
3110         null;
3111     --}
3112     END;
3113 
3114 
3115     IF l_debug_on THEN
3116            WSH_DEBUG_SV.log(l_module_name,  'Return status ', l_return_status);
3117            WSH_DEBUG_SV.log(l_module_name,  'l_num_warnings', l_num_warnings);
3118            WSH_DEBUG_SV.log(l_module_name,  'l_num_warnings', l_num_warnings);
3119     END IF;
3120 
3121 
3122     IF l_num_warnings > 0 THEN
3123     IF l_debug_on THEN
3124            WSH_DEBUG_SV.log(l_module_name,  'l_num_warnings', l_num_warnings);
3125     END IF;
3126         RAISE WSH_UTIL_CORE.G_EXC_WARNING;
3127     ELSE
3128         x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3129     END IF;
3130     --
3131     IF l_debug_on THEN
3132            WSH_DEBUG_SV.log(l_module_name,  'Return status ', l_return_status);
3133            WSH_DEBUG_SV.log(l_module_name,  'l_num_warnings', l_num_warnings);
3134            WSH_DEBUG_SV.log(l_module_name,  'l_num_warnings', l_num_warnings);
3135     END IF;
3136 
3137     -- Standard check of p_commit.
3138     IF FND_API.To_Boolean( p_commit ) THEN
3139 
3140       --bug 4070732
3141       IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3142       --{
3143 
3144           l_reset_flags := FALSE;
3145 
3146           IF l_debug_on THEN
3147             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3148           END IF;
3149 
3150           WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => l_reset_flags,
3151                                                       x_return_status => l_return_status);
3152 
3153           IF l_debug_on THEN
3154             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3155           END IF;
3156 
3157           IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
3158             RAISE FND_API.G_EXC_ERROR;
3159           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
3160             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3161           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3162             RAISE WSH_UTIL_CORE.G_EXC_WARNING;
3163           END IF;
3164 
3165       --}
3166       END IF;
3167       --bug 4070732
3168 
3169       COMMIT WORK;
3170     END IF;
3171     --
3172     --bug 4070732
3173     IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
3174     --{
3175         IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3176         --{
3177 
3178           IF FND_API.To_Boolean( p_commit ) THEN
3179             IF l_debug_on THEN
3180               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3181             END IF;
3182 
3183             WSH_UTIL_CORE.reset_stops_for_load_tender(p_reset_flags   => TRUE,
3184                                                         x_return_status => l_return_status);
3185 
3186 	  ELSE
3187 
3188 
3189             IF l_debug_on THEN
3190               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3191             END IF;
3192 
3193             WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => TRUE,
3194                                                         x_return_status => l_return_status);
3195 	  END IF;
3196 
3197             IF l_debug_on THEN
3198               WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3199             END IF;
3200 
3201             IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3202                                    WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,
3203                                    WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3204               x_return_status := l_return_status;
3205             END IF;
3206 
3207         --}
3208         END IF;
3209     --}
3210     END IF;
3211 
3212     --bug 4070732
3213     --
3214     IF l_debug_on THEN
3215            WSH_DEBUG_SV.log(l_module_name,  'before calling FND_MSG_PUB.Count_And_Get', l_num_warnings);
3216     END IF;
3217     FND_MSG_PUB.Count_And_Get
3218       (
3219        p_count  => x_msg_count,
3220        p_data  =>  x_msg_data,
3221        p_encoded => FND_API.G_FALSE
3222       );
3223     --
3224     IF l_debug_on THEN
3225            WSH_DEBUG_SV.log(l_module_name,  'FND_MSG_PUB.Count_And_Get, count: ', x_msg_count);
3226     END IF;
3227     IF l_debug_on THEN
3228       WSH_DEBUG_SV.pop(l_module_name);
3229     END IF;
3230     --
3231   EXCEPTION
3232     WHEN FND_API.G_EXC_ERROR THEN
3233       -- ROLLBACK TO DELIVERY_ACTION_GRP;
3234       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3235 
3236       --OTM R12
3237       IF (c_get_delivery_id%ISOPEN) THEN
3238         CLOSE c_get_delivery_id;
3239       END IF;
3240       --
3241 
3242       --
3243       -- K LPN CONV. rv
3244       --
3245       IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3246       THEN
3247       --{
3248 
3249           IF l_debug_on THEN
3250             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3251           END IF;
3252           --
3253           WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3254             (
3255               p_in_rec             => l_lpn_in_sync_comm_rec,
3256               x_return_status      => l_return_status,
3257               x_out_rec            => l_lpn_out_sync_comm_rec
3258             );
3259           --
3260           IF l_debug_on THEN
3261               WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
3262           END IF;
3263           --
3264           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3265             x_return_status := l_return_status;
3266           END IF;
3267       --}
3268       END IF;
3269       -- K LPN CONV. rv
3270       --
3271 
3272       --
3273       -- Start code for Bugfix 4070732
3274       --
3275       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
3276       --{
3277           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3278           --{
3279               IF l_debug_on THEN
3280                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3281               END IF;
3282 
3283               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
3284                                                         x_return_status => l_return_status);
3285 
3286 
3287               IF l_debug_on THEN
3288                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3289               END IF;
3290 
3291               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3292                 x_return_status := l_return_status;
3293               END IF;
3294           --}
3295           END IF;
3296       --}
3297       END IF;
3298       --
3299       -- End of Code Bugfix 4070732
3300       --
3301       --
3302       FND_MSG_PUB.Count_And_Get
3303         (
3304          p_count  => x_msg_count,
3305          p_data  =>  x_msg_data,
3306          p_encoded => FND_API.G_FALSE
3307         );
3308       IF l_debug_on THEN
3309         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3310         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3311       END IF;
3312       --
3313     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3314       -- ROLLBACK TO DELIVERY_ACTION_GRP;
3315       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
3316 
3317       --OTM R12
3318       IF (c_get_delivery_id%ISOPEN) THEN
3319         CLOSE c_get_delivery_id;
3320       END IF;
3321       --
3322 
3323       --
3324       -- K LPN CONV. rv
3325       --
3326       IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3327       THEN
3328       --{
3329 
3330           IF l_debug_on THEN
3331             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3332           END IF;
3333           --
3334           WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3335             (
3336               p_in_rec             => l_lpn_in_sync_comm_rec,
3337               x_return_status      => l_return_status,
3338               x_out_rec            => l_lpn_out_sync_comm_rec
3339             );
3340           --
3341           IF l_debug_on THEN
3342               WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
3343           END IF;
3344           --
3345       --}
3346       END IF;
3347       -- K LPN CONV. rv
3348       --
3349       --
3350       -- Start code for Bugfix 4070732
3351       --
3352       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
3353       --{
3354           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3355           --{
3356               IF l_debug_on THEN
3357                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3358               END IF;
3359 
3360               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
3361                                                         x_return_status => l_return_status);
3362 
3363 
3364               IF l_debug_on THEN
3365                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3366               END IF;
3367 
3368               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3369                 x_return_status := l_return_status;
3370               END IF;
3371           --}
3372           END IF;
3373       --}
3374       END IF;
3375       --
3376       -- End of Code Bugfix 4070732
3377       --
3378       FND_MSG_PUB.Count_And_Get
3379         (
3380          p_count  => x_msg_count,
3381          p_data  =>  x_msg_data,
3382          p_encoded => FND_API.G_FALSE
3383         );
3384 
3385       --
3386       IF l_debug_on THEN
3387         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3388         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
3389       END IF;
3390       --
3391     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
3392 
3393       --OTM R12
3394       IF (c_get_delivery_id%ISOPEN) THEN
3395         CLOSE c_get_delivery_id;
3396       END IF;
3397       --
3398 
3399       IF l_debug_on THEN
3400         WSH_DEBUG_SV.logmsg(l_module_name,' Raising: WSH_UTIL_CORE.G_EXC_WARNING');
3401       END IF;
3402       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3403       --
3404       -- K LPN CONV. rv
3405       --
3406       IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3407       THEN
3408       --{
3409 
3410           IF l_debug_on THEN
3411             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3412           END IF;
3413           --
3414           WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3415             (
3416               p_in_rec             => l_lpn_in_sync_comm_rec,
3417               x_return_status      => l_return_status,
3418               x_out_rec            => l_lpn_out_sync_comm_rec
3419             );
3420           --
3421           IF l_debug_on THEN
3422               WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
3423           END IF;
3424           --
3425           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3426             x_return_status := l_return_status;
3427           END IF;
3428       --}
3429       END IF;
3430       -- K LPN CONV. rv
3431       --
3432 
3433       --
3434       -- Start code for Bugfix 4070732
3435       --
3436       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
3437       --{
3438           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3439           --{
3440               IF l_debug_on THEN
3441                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3442               END IF;
3443 
3444               WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => TRUE,
3445                                                           x_return_status => l_return_status);
3446 
3447 
3448               IF l_debug_on THEN
3449                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3450               END IF;
3451 
3452               IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3453                                      WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,
3454                                      WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3455                 x_return_status := l_return_status;
3456               END IF;
3457 
3458           --}
3459           END IF;
3460       --}
3461       END IF;
3462       --
3463       -- End of Code Bugfix 4070732
3464       --
3465       IF l_debug_on THEN
3466         WSH_DEBUG_SV.logmsg(l_module_name,' calling: FND_MSG_PUB.Count_And_Get');
3467       END IF;
3468       FND_MSG_PUB.Count_And_Get
3469         (
3470          p_count  => x_msg_count,
3471          p_data  =>  x_msg_data,
3472          p_encoded => FND_API.G_FALSE
3473         );
3474       --
3475       IF l_debug_on THEN
3476         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3477         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
3478       END IF;
3479       --
3480     WHEN OTHERS THEN
3481 
3482       --OTM R12
3483       IF (c_get_delivery_id%ISOPEN) THEN
3484         CLOSE c_get_delivery_id;
3485       END IF;
3486       --
3487 
3488       -- ROLLBACK TO DELIVERY_ACTION_GRP;
3489       --
3490       -- K LPN CONV. rv
3491       --
3492       IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3493       THEN
3494       --{
3495 
3496           IF l_debug_on THEN
3497             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
3498           END IF;
3499           --
3500           WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
3501             (
3502               p_in_rec             => l_lpn_in_sync_comm_rec,
3503               x_return_status      => l_return_status,
3504               x_out_rec            => l_lpn_out_sync_comm_rec
3505             );
3506           --
3507           IF l_debug_on THEN
3508               WSH_DEBUG_SV.log(l_module_name,  'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS', l_return_status);
3509           END IF;
3510           --
3511       --}
3512       END IF;
3513       -- K LPN CONV. rv
3514       --
3515       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
3516       wsh_util_core.default_handler('WSH_DELIVERIES_GRP.DELIVERY_ACTION');
3517 
3518       --
3519       -- Start code for Bugfix 4070732
3520       --
3521       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
3522       --{
3523           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
3524           --{
3525               IF l_debug_on THEN
3526                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
3527               END IF;
3528 
3529               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
3530                                                         x_return_status => l_return_status);
3531 
3532 
3533               IF l_debug_on THEN
3534                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
3535               END IF;
3536 
3537               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3538                 x_return_status := l_return_status;
3539               END IF;
3540           --}
3541           END IF;
3542       --}
3543       END IF;
3544       --
3545       -- End of Code Bugfix 4070732
3546       --
3547       FND_MSG_PUB.Count_And_Get
3548         (
3549          p_count  => x_msg_count,
3550          p_data  =>  x_msg_data,
3551          p_encoded => FND_API.G_FALSE
3552         );
3553       --
3554       IF l_debug_on THEN
3555         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3556         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
3557       END IF;
3558       --
3559   END Delivery_Action;
3560 
3561 -- I Harmonization: rvishnuv ******* Actions ******
3562 
3563 -- I Harmonization: rvishnuv ******* Create/Update ******
3564 --Bug 5191354: For the action UPDATE, validating the delivery attributes only when the corresponding
3565 --             input parameter contains some value (other then fnd_api.g_miss_num/fnd_api.g_miss_char/fnd_api.g_miss_date).
3566   PROCEDURE Validate_Delivery
3567            (x_rec_attr_tab    IN OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
3568             p_in_rec_attr_tab IN   WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,  --Bug 5191354
3569             p_action_code     IN     VARCHAR2,
3570             p_caller          IN     VARCHAR2,
3571             x_valid_index_tab OUT    NOCOPY wsh_util_core.id_tab_type,
3572             x_return_status   OUT    NOCOPY VARCHAR2)
3573   IS
3574   --
3575 
3576   -- heali for bug 2771579
3577     CURSOR c_get_org_location(p_org_id NUMBER) IS
3578     select      location_id
3579     from        hr_organization_units
3580     where       organization_id = p_org_id;
3581   -- RTV Changes
3582     CURSOR c_check_vendor( p_vendor_id NUMBER) IS
3583     select vendor_name
3584     from  po_vendors
3585     where  vendor_id = p_vendor_id;
3586     l_vendor_name     VARCHAR2(300);
3587   --RTV changes
3588 
3589   l_org_location_id  NUMBER;
3590   -- heali for bug 2771579
3591 
3592   l_net_weight           WSH_NEW_DELIVERIES.NET_WEIGHT%TYPE;
3593   l_gross_weight         WSH_NEW_DELIVERIES.GROSS_WEIGHT%TYPE;
3594   l_volume               WSH_NEW_DELIVERIES.VOLUME%TYPE;
3595   l_volume_uom_code      WSH_NEW_DELIVERIES.VOLUME_UOM_CODE%TYPE;
3596   l_weight_uom_code      WSH_NEW_DELIVERIES.WEIGHT_UOM_CODE%TYPE;
3597   l_initial_pickup_location_id  WSH_NEW_DELIVERIES.initial_pickup_location_id%TYPE;
3598   --
3599 
3600 
3601   l_assigned_to_trip     VARCHAR2(1);
3602   l_return_status        VARCHAR2(1);
3603   l_num_errors           NUMBER;
3604   l_num_warnings         NUMBER;
3605   l_index                NUMBER;
3606   l_dummy_meaning        VARCHAR2(240);
3607   l_vol_nullify_flag     BOOLEAN := FALSE;
3608   l_wt_nullify_flag      BOOLEAN := FALSE;
3609   l_isWshLocation        BOOLEAN DEFAULT FALSE;
3610   --
3611 l_debug_on BOOLEAN;
3612   --
3613   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_DELIVERY';
3614   --
3615   l_shipping_control     VARCHAR2(30);
3616   l_routing_response_id  NUMBER;
3617   l_routing_request_flag VARCHAR2(30);
3618 
3619   --OTM R12
3620   l_adjusted_amount      NUMBER;
3621   --
3622   l_client_name          VARCHAR2(200);   -- LSP PROJECT
3623 
3624   BEGIN
3625     --
3626     --
3627     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3628     --
3629     IF l_debug_on IS NULL
3630     THEN
3631         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3632     END IF;
3633     --
3634 
3635     SAVEPOINT VALIDATE_DELIVERY_GRP;
3636     --
3637     IF l_debug_on THEN
3638         WSH_DEBUG_SV.push(l_module_name);
3639         WSH_DEBUG_SV.log(l_module_name,'p_action_code',p_action_code);
3640         WSH_DEBUG_SV.log(l_module_name,'Number of Delivery Records is', x_rec_attr_tab.COUNT);
3641     END IF;
3642     --
3643 
3644     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3645     --OTM R12
3646     l_adjusted_amount := 0;
3647     --
3648 
3649     --
3650     IF p_caller IN ( 'WSH_FSTRX' , 'WSH_TPW_INBOUND')
3651     OR p_caller LIKE 'FTE%' THEN
3652        l_isWshLocation := TRUE;
3653     END IF;
3654 
3655     l_index := x_rec_attr_tab.FIRST;
3656     WHILE l_index is not null LOOP
3657       BEGIN
3658         SAVEPOINT VALIDATE_DLVY_GRP_LOOP;
3659 
3660         --Bug 5191354
3661         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DELIVERY_NAME_LVL) = 1
3662         AND (p_action_code = 'CREATE' OR
3663                  (p_action_code = 'UPDATE' AND
3664                    ((p_in_rec_attr_tab(l_index).delivery_id IS NULL ) OR (p_in_rec_attr_tab(l_index).delivery_id <> fnd_api.g_miss_num)
3665                      OR (p_in_rec_attr_tab(l_index).name IS NULL ) OR (p_in_rec_attr_tab(l_index).name <> fnd_api.g_miss_char)
3666                    ))) THEN
3667           --
3668           wsh_util_validate.validate_delivery_name(
3669             p_delivery_id       => x_rec_attr_tab(l_index).delivery_id,
3670             p_delivery_name     => x_rec_attr_tab(l_index).name,
3671             x_return_status     => l_return_status);
3672           --
3673             IF l_debug_on THEN
3674             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_delivery_name',l_return_status);
3675           END IF;
3676           --
3677           WSH_UTIL_CORE.api_post_call(
3678             p_return_status     => l_return_status,
3679             x_num_warnings      => l_num_warnings,
3680             x_num_errors        => l_num_errors);
3681           --
3682         END IF;
3683         --
3684         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_ORGANIZATION_LVL) = 1 THEN
3685           --Bug 5191354
3686           IF p_action_code = 'CREATE'
3687           AND nvl(x_rec_attr_tab(l_index).organization_id,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM
3688           AND nvl(x_rec_attr_tab(l_index).organization_code,FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR
3689           THEN
3690             x_return_status := wsh_util_core.g_ret_sts_error;
3691             WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3692                                 x_num_warnings     =>l_num_warnings,
3693                                 x_num_errors       =>l_num_errors,
3694                                 p_module_name      =>l_module_name,
3695                                 p_msg_data         => 'WSH_DEL_ORG_NULL');
3696 
3697           ELSIF (p_action_code = 'CREATE' OR
3698                  (p_action_code = 'UPDATE' AND
3699                    ((p_in_rec_attr_tab(l_index).organization_id IS NULL ) OR (p_in_rec_attr_tab(l_index).organization_id <> fnd_api.g_miss_num)
3700                      OR (p_in_rec_attr_tab(l_index).organization_code IS NULL ) OR (p_in_rec_attr_tab(l_index).organization_code <> fnd_api.g_miss_char)
3701                    ))) THEN
3702           --{
3703 
3704             IF ( p_action_code = 'UPDATE'
3705                 AND x_rec_attr_tab(l_index).organization_id IS NULL
3706                 AND x_rec_attr_tab(l_index).organization_code IS NULL) THEN
3707             --{ NULL case
3708               x_return_status := wsh_util_core.g_ret_sts_error;
3709               WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3710                                 x_num_warnings     =>l_num_warnings,
3711                                 x_num_errors       =>l_num_errors,
3712                                 p_module_name      =>l_module_name,
3713                                 p_msg_data         => 'WSH_DEL_ORG_NULL');
3714 
3715             --} NULL case
3716             END IF;
3717             wsh_util_validate.validate_org(
3718               p_org_id            => x_rec_attr_tab(l_index).organization_id,
3719               p_org_code          => x_rec_attr_tab(l_index).organization_code,
3720               x_return_status     => l_return_status);
3721             --
3722             IF l_debug_on THEN
3723               wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_org',l_return_status);
3724             END IF;
3725             --
3726             WSH_UTIL_CORE.api_post_call(
3727               p_return_status     => l_return_status,
3728               x_num_warnings      => l_num_warnings,
3729               x_num_errors        => l_num_errors);
3730             --
3731           END IF;
3732           --
3733         END IF;
3734         --
3735         IF (nvl(x_rec_attr_tab(l_index).delivery_type,'STANDARD') NOT IN ('STANDARD','CONSOLIDATION')) THEN
3736           x_rec_attr_tab(l_index).delivery_type := 'STANDARD';
3737         END IF;
3738         --Bug 5191354
3739         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_LOADING_ORDER_LVL) = 1
3740            AND (p_action_code = 'CREATE' OR
3741                  (p_action_code = 'UPDATE' AND
3742                    ((p_in_rec_attr_tab(l_index).loading_order_flag IS NULL ) OR (p_in_rec_attr_tab(l_index).loading_order_flag <> fnd_api.g_miss_char)
3743                      OR (p_in_rec_attr_tab(l_index).loading_order_desc IS NULL ) OR (p_in_rec_attr_tab(l_index).loading_order_desc <> fnd_api.g_miss_char)
3744                    ))) THEN
3745           --
3746           wsh_util_validate.validate_loading_order(
3747             p_loading_order_flag => x_rec_attr_tab(l_index).loading_order_flag,
3748             p_loading_order_desc => x_rec_attr_tab(l_index).loading_order_desc,
3749             x_return_status      => l_return_status);
3750           --
3751           IF l_debug_on THEN
3752             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_loading_order',l_return_status);
3753           END IF;
3754           --
3755           WSH_UTIL_CORE.api_post_call(
3756             p_return_status     => l_return_status,
3757             x_num_warnings      => l_num_warnings,
3758             x_num_errors        => l_num_errors);
3759           --
3760         END IF;
3761         --
3762         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_SHIP_FROM_LOC_LVL) = 1
3763         THEN
3764           --
3765           IF p_action_code = 'CREATE'
3766           AND nvl(x_rec_attr_tab(l_index).initial_pickup_location_id,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM
3767           AND nvl(x_rec_attr_tab(l_index).initial_pickup_location_code,FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR
3768           THEN
3769             x_return_status := wsh_util_core.g_ret_sts_error;
3770             WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3771                                 x_num_warnings     =>l_num_warnings,
3772                                 x_num_errors       =>l_num_errors,
3773                                 p_module_name      =>l_module_name,
3774                                 p_msg_data         => 'WSH_DEL_PICKUP_LOC_NULL');
3775           --Bug 5191354
3776           ELSIF (p_action_code = 'CREATE' OR
3777                  (p_action_code = 'UPDATE' AND
3778                    ((p_in_rec_attr_tab(l_index).initial_pickup_location_id IS NULL ) OR (p_in_rec_attr_tab(l_index).initial_pickup_location_id <> fnd_api.g_miss_num)
3779                        OR (p_in_rec_attr_tab(l_index).initial_pickup_location_code IS NULL ) OR (p_in_rec_attr_tab(l_index).initial_pickup_location_code <> fnd_api.g_miss_char)
3780                    ))) THEN
3781           --{
3782 
3783             IF (p_action_code = 'UPDATE'
3784                 AND x_rec_attr_tab(l_index).initial_pickup_location_id IS NULL
3785                 AND x_rec_attr_tab(l_index).initial_pickup_location_code IS NULL) THEN
3786             --{ NULL case
3787                x_return_status := wsh_util_core.g_ret_sts_error;
3788                WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3789                                 x_num_warnings     =>l_num_warnings,
3790                                 x_num_errors       =>l_num_errors,
3791                                 p_module_name      =>l_module_name,
3792                                 p_msg_data         => 'WSH_DEL_PICKUP_LOC_NULL');
3793 
3794 
3795             --} NULL case
3796             END IF;
3797 
3798             -- J-IB-NPARIKH-{
3799             --
3800             IF  NVL(x_rec_attr_tab(l_index).shipment_direction,'O') NOT IN ('O','IO')
3801             --AND x_rec_attr_tab(l_index).initial_pickup_location_id  = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
3802             THEN
3803             --{
3804                 --
3805                 -- Check if delivery's transportation is arranged by supplier
3806                 -- or if routing request was not received for all delivery lines
3807                 --
3808                 IF l_debug_on THEN
3809                     WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.GET_SHIPPING_CONTROL',WSH_DEBUG_SV.C_PROC_LEVEL);
3810                 END IF;
3811                 --
3812                 WSH_DELIVERY_VALIDATIONS.GET_SHIPPING_CONTROL
3813                 (
3814                     p_delivery_id           => x_rec_attr_tab(l_index).delivery_id,
3815                     x_shipping_control      => l_shipping_control,
3816                     x_routing_response_id   => l_routing_response_id,
3817                     x_routing_request_flag  => l_routing_request_flag,
3818                     x_return_status         => l_return_status
3819                 );
3820                 --
3821                 --
3822                 IF l_debug_on THEN
3823                     wsh_debug_sv.log(l_module_name, 'l_return_status', l_return_status);
3824                     wsh_debug_sv.log(l_module_name, 'l_shipping_control', l_shipping_control);
3825                     wsh_debug_sv.log(l_module_name, 'l_routing_response_id', l_routing_response_id);
3826                     wsh_debug_sv.log(l_module_name, 'l_routing_request_flag', l_routing_request_flag);
3827                     --
3828                 END IF;
3829                 --
3830                 --
3831                 WSH_UTIL_CORE.api_post_call(
3832                   p_return_status     => l_return_status,
3833                   x_num_warnings      => l_num_warnings,
3834                   x_num_errors        => l_num_errors);
3835             --}
3836             END IF;
3837             --
3838             -- J-IB-NPARIKH-}
3839             --
3840             IF NVL(x_rec_attr_tab(l_index).shipment_direction,'O') IN ('O','IO')   -- J-IB-NPARIKH
3841             OR x_rec_attr_tab(l_index).initial_pickup_location_id  <> WSH_UTIL_CORE.C_NULL_SF_LOCN_ID   -- J-IB-NPARIKH
3842             --OR l_shipping_control                                  <> 'SUPPLIER'   -- J-IB-NPARIKH
3843             --OR l_routing_request_flag                              <> 'N'          -- J-IB-NPARIKH
3844             THEN
3845                 wsh_util_validate.validate_location(
3846                   p_location_id   => x_rec_attr_tab(l_index).initial_pickup_location_id,
3847                   p_location_code => x_rec_attr_tab(l_index).initial_pickup_location_code,
3848                   x_return_status => l_return_status,
3849                   p_isWshLocation => l_isWshLocation);
3850                 --
3851                 IF l_debug_on THEN
3852                   wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_location for Ship From',l_return_status);
3853                 END IF;
3854                 --
3855                 WSH_UTIL_CORE.api_post_call(
3856                   p_return_status     => l_return_status,
3857                   x_num_warnings      => l_num_warnings,
3858                   x_num_errors        => l_num_errors);
3859                 --
3860                 --
3861                 -- J-IB-NPARIKH-{
3862                 IF l_shipping_control     = 'SUPPLIER'
3863                 OR l_routing_request_flag = 'N'
3864                 THEN
3865                 --{
3866                     --
3867                     -- Check if delivery's transportation is arranged by supplier
3868                     -- or if routing request was not received for all delivery lines
3869                     -- If that's the case, validate that ship-from location is
3870                     -- a valid ship-from for the supplier
3871                     --
3872                     IF NVL(x_rec_attr_tab(l_index).shipment_direction,'O')
3873                        NOT IN ('O','IO')   -- J-IB-NPARIKH
3874                     THEN
3875                     --{
3876                     wsh_util_validate.validate_supplier_location
3877                         (
3878                             p_vendor_id     => x_rec_attr_tab(l_index).vendor_id,
3879                             p_party_id      => x_rec_attr_tab(l_index).party_id,
3880                             p_location_id   => x_rec_attr_tab(l_index).initial_pickup_location_id,
3881                             x_return_status => l_return_status
3882                         );
3883                     --
3884                     IF l_debug_on THEN
3885                       wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_supplier_location for Ship From',l_return_status);
3886                     END IF;
3887                     --
3888                     WSH_UTIL_CORE.api_post_call(
3889                       p_return_status     => l_return_status,
3890                       x_num_warnings      => l_num_warnings,
3891                       x_num_errors        => l_num_errors);
3892                     --}
3893                     END IF;
3894                 --}
3895                 END IF;
3896                 -- J-IB-NPARIKH-}
3897 
3898             END IF;
3899 
3900             IF NVL(x_rec_attr_tab(l_index).shipment_direction,'O') IN ('O','IO')   -- J-IB-NPARIKH
3901             THEN
3902                 -- Validation that ship-from organization corresponds to initial pickup
3903                 -- location is applicable only for outbound (O/IO) delivery.
3904                 --
3905                 -- heali for bug 2771579
3906                 OPEN c_get_org_location(x_rec_attr_tab(l_index).organization_id);
3907                 FETCH c_get_org_location INTO l_org_location_id;
3908                 CLOSE c_get_org_location;
3909 
3910                 IF l_debug_on THEN
3911                   wsh_debug_sv.log(l_module_name,'organization_id',x_rec_attr_tab(l_index).initial_pickup_location_id);
3912                   wsh_debug_sv.log(l_module_name,'l_org_location_id',l_org_location_id);
3913                 END IF;
3914 
3915                 IF (l_org_location_id <> x_rec_attr_tab(l_index).initial_pickup_location_id) THEN
3916                    x_return_status := wsh_util_core.g_ret_sts_error;
3917                    WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3918                                     x_num_warnings     =>l_num_warnings,
3919                                     x_num_errors       =>l_num_errors,
3920                                     p_module_name      =>l_module_name,
3921                                     p_msg_data         => 'WSH_DEL_PICK_LOC_NOT_MATCH');
3922 
3923                 END IF;
3924                 -- heali for bug 2771579
3925             END IF;
3926 
3927           END IF;
3928           --
3929         END IF;
3930           --
3931         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_SHIP_TO_LOC_LVL) = 1 THEN
3932           --
3933           IF p_action_code = 'CREATE'
3934           AND nvl(x_rec_attr_tab(l_index).ultimate_dropoff_location_id,FND_API.G_MISS_NUM) = FND_API.G_MISS_NUM
3935           AND nvl(x_rec_attr_tab(l_index).ultimate_dropoff_location_code,FND_API.G_MISS_CHAR) = FND_API.G_MISS_CHAR
3936           THEN
3937             x_return_status := wsh_util_core.g_ret_sts_error;
3938             WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3939                                 x_num_warnings     =>l_num_warnings,
3940                                 x_num_errors       =>l_num_errors,
3941                                 p_module_name      =>l_module_name,
3942                                 p_msg_data         => 'WSH_DEL_DROPOFF_LOC_NULL');
3943           --Bug 5191354
3944           ELSIF (p_action_code = 'CREATE' OR
3945                  (p_action_code = 'UPDATE' AND
3946                    ((p_in_rec_attr_tab(l_index).ultimate_dropoff_location_id IS NULL ) OR (p_in_rec_attr_tab(l_index).ultimate_dropoff_location_id <> fnd_api.g_miss_num)
3947                      OR (p_in_rec_attr_tab(l_index).ultimate_dropoff_location_code IS NULL ) OR (p_in_rec_attr_tab(l_index).ultimate_dropoff_location_code <> fnd_api.g_miss_char)
3948                    ))) THEN
3949           --{
3950 
3951             IF ( p_action_code = 'UPDATE'
3952                   AND x_rec_attr_tab(l_index).ultimate_dropoff_location_id IS NULL
3953                   AND x_rec_attr_tab(l_index).ultimate_dropoff_location_code IS NULL )  THEN
3954             --{ NULL case
3955                 x_return_status := wsh_util_core.g_ret_sts_error;
3956                 WSH_UTIL_CORE.api_post_call(p_return_status    => x_return_status,
3957                                 x_num_warnings     =>l_num_warnings,
3958                                 x_num_errors       =>l_num_errors,
3959                                 p_module_name      =>l_module_name,
3960                                 p_msg_data         => 'WSH_DEL_DROPOFF_LOC_NULL');
3961 
3962             --} NULL case
3963             END IF;
3964             wsh_util_validate.validate_location(
3965               p_location_id   => x_rec_attr_tab(l_index).ultimate_dropoff_location_id,
3966               p_location_code => x_rec_attr_tab(l_index).ultimate_dropoff_location_code,
3967               x_return_status => l_return_status,
3968               p_isWshLocation => l_isWshLocation);
3969             --
3970             IF l_debug_on THEN
3971               wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_location for Ship To',l_return_status);
3972             END IF;
3973             --
3974             WSH_UTIL_CORE.api_post_call(
3975               p_return_status     => l_return_status,
3976               x_num_warnings      => l_num_warnings,
3977               x_num_errors        => l_num_errors);
3978             --
3979           END IF;
3980           --
3981         END IF;
3982         --Bug 5191354
3983         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_INTMD_SHIPTO_LOC_LVL) = 1
3984            AND (p_action_code = 'CREATE' OR
3985                  (p_action_code = 'UPDATE' AND
3986                    ((p_in_rec_attr_tab(l_index).intmed_ship_to_location_id IS NULL ) OR (p_in_rec_attr_tab(l_index).intmed_ship_to_location_id <> fnd_api.g_miss_num)
3987                      OR (p_in_rec_attr_tab(l_index).intmed_ship_to_location_code IS NULL ) OR (p_in_rec_attr_tab(l_index).intmed_ship_to_location_code <> fnd_api.g_miss_char)
3988                    ))) THEN
3989             IF l_debug_on THEN
3990               wsh_debug_sv.log(l_module_name,'loc id ',x_rec_attr_tab(l_index).intmed_ship_to_location_id);
3991               wsh_debug_sv.log(l_module_name,'loc code ',x_rec_attr_tab(l_index).intmed_ship_to_location_code);
3992             END IF;
3993             --
3994           wsh_util_validate.validate_location(
3995             p_location_id   => x_rec_attr_tab(l_index).intmed_ship_to_location_id,
3996             p_location_code => x_rec_attr_tab(l_index).intmed_ship_to_location_code,
3997             x_return_status => l_return_status,
3998             p_isWshLocation => l_isWshLocation);
3999           --
4000           IF l_debug_on THEN
4001             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_location for Intmed Ship To',l_return_status);
4002           END IF;
4003           --
4004           WSH_UTIL_CORE.api_post_call(
4005             p_return_status     => l_return_status,
4006             x_num_warnings      => l_num_warnings,
4007             x_num_errors        => l_num_errors);
4008           --
4009         END IF;
4010         --Bug 5191354
4011         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_POOLED_SHIPTO_LOC_LVL) = 1
4012            AND (p_action_code = 'CREATE' OR
4013                  (p_action_code = 'UPDATE' AND
4014                    ((p_in_rec_attr_tab(l_index).pooled_ship_to_location_id IS NULL ) OR (p_in_rec_attr_tab(l_index).pooled_ship_to_location_id <> fnd_api.g_miss_num)
4015                      OR (p_in_rec_attr_tab(l_index).pooled_ship_to_location_code IS NULL ) OR (p_in_rec_attr_tab(l_index).pooled_ship_to_location_code <> fnd_api.g_miss_char)
4016                    ))) THEN
4017           --
4018           wsh_util_validate.validate_location(
4019             p_location_id   => x_rec_attr_tab(l_index).pooled_ship_to_location_id,
4020             p_location_code => x_rec_attr_tab(l_index).pooled_ship_to_location_code,
4021             x_return_status => l_return_status,
4022             p_isWshLocation => l_isWshLocation);
4023           --
4024           IF l_debug_on THEN
4025             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_location for Pooled Ship To',l_return_status);
4026           END IF;
4027           --
4028           WSH_UTIL_CORE.api_post_call(
4029             p_return_status     => l_return_status,
4030             x_num_warnings      => l_num_warnings,
4031             x_num_errors        => l_num_errors);
4032           --
4033         END IF;
4034         --Bug 5191354
4035         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_FOB_LOC_LVL) = 1
4036            AND (p_action_code = 'CREATE' OR
4037                  (p_action_code = 'UPDATE' AND
4038                    ((p_in_rec_attr_tab(l_index).fob_location_id IS NULL ) OR (p_in_rec_attr_tab(l_index).fob_location_id <> fnd_api.g_miss_num)
4039                      OR (p_in_rec_attr_tab(l_index).fob_location_code IS NULL ) OR (p_in_rec_attr_tab(l_index).fob_location_code <> fnd_api.g_miss_char)
4040                    ))) THEN
4041           --
4042           wsh_util_validate.validate_location(
4043             p_location_id   => x_rec_attr_tab(l_index).fob_location_id,
4044             p_location_code => x_rec_attr_tab(l_index).fob_location_code,
4045             x_return_status => l_return_status,
4046             p_isWshLocation => l_isWshLocation);
4047           --
4048           IF l_debug_on THEN
4049             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_location for fob location',l_return_status);
4050           END IF;
4051           --
4052           WSH_UTIL_CORE.api_post_call(
4053             p_return_status     => l_return_status,
4054             x_num_warnings      => l_num_warnings,
4055             x_num_errors        => l_num_errors);
4056           --
4057         END IF;
4058 
4059         --Bug 5191354
4060         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_CUSTOMER_LVL) = 1
4061            AND (p_action_code = 'CREATE' OR
4062                  (p_action_code = 'UPDATE' AND
4063                    ((p_in_rec_attr_tab(l_index).customer_id IS NULL ) OR (p_in_rec_attr_tab(l_index).customer_id <> fnd_api.g_miss_num)
4064                      OR (p_in_rec_attr_tab(l_index).customer_number IS NULL ) OR (p_in_rec_attr_tab(l_index).customer_number <> fnd_api.g_miss_char)
4065                    ))) THEN
4066           --RTV Changes
4067           if ( nvl(p_in_rec_attr_tab(l_index).consignee_flag, 'C') = 'C' OR p_in_rec_attr_tab(l_index).consignee_flag = fnd_api.g_miss_char)
4068           then
4069             wsh_util_validate.validate_customer(
4070               p_customer_id       => x_rec_attr_tab(l_index).customer_id,
4071               p_customer_number   => x_rec_attr_tab(l_index).customer_number,
4072               x_return_status     => l_return_status);
4073           end if;
4074           if ( nvl(p_in_rec_attr_tab(l_index).consignee_flag, 'C') = 'V'  and (x_rec_attr_tab(l_index).customer_id is NOT NULL OR
4075                 x_rec_attr_tab(l_index).customer_id <> fnd_api.g_miss_num)  ) then
4076              --{
4077              OPEN c_check_vendor( x_rec_attr_tab(l_index).customer_id);
4078              FETCH c_check_vendor INTO l_vendor_name;
4079                IF c_check_vendor%NOTFOUND THEN
4080                  CLOSE c_check_vendor;
4081                  l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4082                  raise FND_API.G_EXC_UNEXPECTED_ERROR;
4083                END IF;
4084              CLOSE c_check_vendor;
4085              --}
4086           end if;
4087           --RTV Changes
4088           --
4089           IF l_debug_on THEN
4090             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_customer',l_return_status);
4091           END IF;
4092           --
4093           WSH_UTIL_CORE.api_post_call(
4094             p_return_status     => l_return_status,
4095             x_num_warnings      => l_num_warnings,
4096             x_num_errors        => l_num_errors);
4097 
4098         END IF;
4099         --Bug 5191354
4100         -- LSP PROJECT : Validate client info
4101         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_CLIENT_LVL) = 1
4102            AND (p_action_code = 'CREATE' OR
4103                  (p_action_code = 'UPDATE' AND
4104                    ((p_in_rec_attr_tab(l_index).client_id IS NULL ) OR (p_in_rec_attr_tab(l_index).client_id <> fnd_api.g_miss_num)
4105                      OR (p_in_rec_attr_tab(l_index).client_code IS NULL ) OR (p_in_rec_attr_tab(l_index).client_code <> fnd_api.g_miss_char)
4106                    ))) THEN
4107           --
4108           IF ( Nvl(x_rec_attr_tab(l_index).client_id,fnd_api.g_miss_num) <> fnd_api.g_miss_num
4109               OR Nvl(x_rec_attr_tab(l_index).client_code,fnd_api.g_miss_char) <> fnd_api.g_miss_char ) THEN
4110           --{
4111             IF l_debug_on THEN
4112               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_DEPLOY.GET_CLIENT_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
4113             END IF;
4114             wms_deploy.get_client_details(
4115               x_client_id     => x_rec_attr_tab(l_index).client_id,
4116               x_client_name   => l_client_name,
4117               x_client_code   => x_rec_attr_tab(l_index).client_code,
4118               x_return_status => l_return_status);
4119             --
4120             IF l_debug_on THEN
4121               wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_client',l_return_status);
4122             END IF;
4123             --
4124             IF l_return_status <> 'S' THEN
4125             --{
4126               FND_MESSAGE.SET_NAME('WSH','WSH_OI_INVALID_ATTRIBUTE');
4127               FND_MESSAGE.SET_TOKEN('ATTRIBUTE','CLIENT');
4128 		      wsh_util_core.add_message(l_return_status,l_module_name);
4129             --}
4130             END IF;
4131             WSH_UTIL_CORE.api_post_call(
4132             p_return_status     => l_return_status,
4133             x_num_warnings      => l_num_warnings,
4134             x_num_errors        => l_num_errors);
4135           --}
4136           END IF;
4137         END IF;
4138         --LSP PROJECT: end
4139 
4140         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_FREIGHT_TERMS_LVL) = 1
4141            AND (p_action_code = 'CREATE' OR
4142                  (p_action_code = 'UPDATE' AND
4143                    ((p_in_rec_attr_tab(l_index).freight_terms_code IS NULL ) OR (p_in_rec_attr_tab(l_index).freight_terms_code <> fnd_api.g_miss_char)
4144                      OR (p_in_rec_attr_tab(l_index).freight_terms_name IS NULL ) OR (p_in_rec_attr_tab(l_index).freight_terms_name <> fnd_api.g_miss_char)
4145                    ))) THEN
4146           --
4147           wsh_util_validate.validate_freight_terms(
4148             p_freight_terms_code  => x_rec_attr_tab(l_index).freight_terms_code,
4149             p_freight_terms_name  => x_rec_attr_tab(l_index).freight_terms_name,
4150             x_return_status       => l_return_status);
4151           --
4152           IF l_debug_on THEN
4153             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_freight_terms',l_return_status);
4154           END IF;
4155           --
4156           WSH_UTIL_CORE.api_post_call(
4157             p_return_status     => l_return_status,
4158             x_num_warnings      => l_num_warnings,
4159             x_num_errors        => l_num_errors);
4160           --
4161         END IF;
4162         --Bug 5191354
4163         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_FOB_LVL) = 1
4164            AND (p_action_code = 'CREATE' OR
4165                  (p_action_code = 'UPDATE' AND
4166                    ((p_in_rec_attr_tab(l_index).fob_code IS NULL ) OR (p_in_rec_attr_tab(l_index).fob_code <> fnd_api.g_miss_char)
4167                      OR (p_in_rec_attr_tab(l_index).fob_name IS NULL ) OR (p_in_rec_attr_tab(l_index).fob_name <> fnd_api.g_miss_char)
4168                    ))) THEN
4169           --
4170           wsh_util_validate.validate_fob(
4171             p_fob_code          => x_rec_attr_tab(l_index).fob_code,
4172             p_fob_name          => x_rec_attr_tab(l_index).fob_name,
4173             x_return_status     => l_return_status);
4174           --
4175           IF l_debug_on THEN
4176             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_fob',l_return_status);
4177           END IF;
4178           --
4179           WSH_UTIL_CORE.api_post_call(
4180             p_return_status     => l_return_status,
4181             x_num_warnings      => l_num_warnings,
4182             x_num_errors        => l_num_errors);
4183           --
4184         END IF;
4185 
4186         --Bug 5191354
4187         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_WEIGHT_UOM_LVL) = 1
4188            AND (p_action_code = 'CREATE' OR
4189                  (p_action_code = 'UPDATE' AND
4190                    ((p_in_rec_attr_tab(l_index).weight_uom_code IS NULL ) OR (p_in_rec_attr_tab(l_index).weight_uom_code <> fnd_api.g_miss_char)
4191                    ))) THEN
4192           --
4193           IF x_rec_attr_tab(l_index).weight_uom_code is not null or x_rec_attr_tab(l_index).weight_uom_desc is not null THEN
4194             wsh_util_validate.validate_uom(
4195               p_type             => 'WEIGHT',
4196               p_organization_id  => x_rec_attr_tab(l_index).organization_id,
4197               p_uom_code         => x_rec_attr_tab(l_index).weight_uom_code,
4198               p_uom_desc         => x_rec_attr_tab(l_index).weight_uom_desc,
4199               x_return_status    => l_return_status);
4200             --
4201             IF l_debug_on THEN
4202               wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_uom for Weight',l_return_status);
4203             END IF;
4204             --
4205             WSH_UTIL_CORE.api_post_call(
4206               p_return_status     => l_return_status,
4207               x_num_warnings      => l_num_warnings,
4208               x_num_errors        => l_num_errors);
4209             --
4210           ELSE
4211             x_rec_attr_tab(l_index).net_weight := NULL;
4212             x_rec_attr_tab(l_index).gross_weight := NULL;
4213           END IF;
4214           --
4215         END IF;
4216         --Bug 5191354
4217         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_VOLUME_UOM_LVL) = 1
4218            AND (p_action_code = 'CREATE' OR
4219                  (p_action_code = 'UPDATE' AND
4220                    ((p_in_rec_attr_tab(l_index).volume_uom_code IS NULL ) OR (p_in_rec_attr_tab(l_index).volume_uom_code <> fnd_api.g_miss_char)
4221                    ))) THEN
4222           --
4223           IF x_rec_attr_tab(l_index).volume_uom_code is not null or x_rec_attr_tab(l_index).volume_uom_desc is not null THEN
4224             wsh_util_validate.validate_uom(
4225               p_type             => 'VOLUME',
4226               p_organization_id  => x_rec_attr_tab(l_index).organization_id,
4227               p_uom_code         => x_rec_attr_tab(l_index).volume_uom_code,
4228               p_uom_desc         => x_rec_attr_tab(l_index).volume_uom_desc,
4229               x_return_status    => l_return_status);
4230             --
4231             IF l_debug_on THEN
4232               wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_uom for Volume',l_return_status);
4233             END IF;
4234             --
4235             WSH_UTIL_CORE.api_post_call(
4236               p_return_status     => l_return_status,
4237               x_num_warnings      => l_num_warnings,
4238               x_num_errors        => l_num_errors);
4239             --
4240           ELSE
4241             x_rec_attr_tab(l_index).volume := NULL;
4242           END IF;
4243           --
4244         END IF;
4245         --Bug 5191354
4246         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_CURRENCY_LVL) = 1
4247            AND ((p_action_code = 'CREATE' OR p_action_code = 'UPDATE') AND
4248                    ((p_in_rec_attr_tab(l_index).currency_code <> fnd_api.g_miss_char)
4249                      OR (p_in_rec_attr_tab(l_index).currency_name <> fnd_api.g_miss_char)
4250                    )) THEN
4251           --
4252           --OTM R12, added parameter l_adjusted_amount
4253           IF l_debug_on THEN
4254             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.VALIDATE_CURRENCY',WSH_DEBUG_SV.C_PROC_LEVEL);
4255           END IF;
4256 
4257           wsh_util_validate.validate_currency(
4258             p_currency_code     => x_rec_attr_tab(l_index).currency_code,
4259             p_currency_name     => x_rec_attr_tab(l_index).currency_name,
4260             p_amount            => NULL,
4261             x_return_status     => l_return_status,
4262             x_adjusted_amount   => l_adjusted_amount);
4263           --
4264           IF l_debug_on THEN
4265             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_currency',l_return_status);
4266           END IF;
4267           --
4268           WSH_UTIL_CORE.api_post_call(
4269             p_return_status     => l_return_status,
4270             x_num_warnings      => l_num_warnings,
4271             x_num_errors        => l_num_errors);
4272           --
4273         END IF;
4274         --Bug 5191354
4275         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_ARR_DEP_DATES_LVL) = 1
4276            AND (p_action_code = 'CREATE' OR
4277                  (p_action_code = 'UPDATE' AND
4278                    ((p_in_rec_attr_tab(l_index).initial_pickup_date IS NULL ) OR (p_in_rec_attr_tab(l_index).initial_pickup_date <> fnd_api.g_miss_date)
4279                      OR (p_in_rec_attr_tab(l_index).ultimate_dropoff_date IS NULL ) OR (p_in_rec_attr_tab(l_index).ultimate_dropoff_date <> fnd_api.g_miss_date)
4280                    ))) THEN
4281           --
4282           wsh_util_validate.validate_from_to_dates(
4283             p_from_date         => x_rec_attr_tab(l_index).initial_pickup_date,
4284             p_to_date           => x_rec_attr_tab(l_index).ultimate_dropoff_date,
4285             x_return_status     => l_return_status);
4286           --
4287           IF l_debug_on THEN
4288             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_from_to_dates',l_return_status);
4289           END IF;
4290           --
4291           WSH_UTIL_CORE.api_post_call(
4292             p_return_status     => l_return_status,
4293             x_num_warnings      => l_num_warnings,
4294             x_num_errors        => l_num_errors);
4295           --
4296         END IF;
4297         --
4298 	--bug 4587399 commented out the code below
4299 	/**************************************************************************************
4300         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_NUMBER_OF_LPN_LVL) = 1 THEN
4301           --
4302           WSH_DELIVERY_VALIDATIONS.derive_number_of_lpn(
4303             p_delivery_id       => x_rec_attr_tab(l_index).delivery_id,
4304             x_number_of_lpn     => x_rec_attr_tab(l_index).number_of_lpn,
4305             x_return_status     => l_return_status);
4306           --
4307           IF l_debug_on THEN
4308             wsh_debug_sv.log(l_module_name,'Return Status After Calling derive_numer_of_lpn',l_return_status);
4309           END IF;
4310           --
4311           WSH_UTIL_CORE.api_post_call(
4312             p_return_status     => l_return_status,
4313             x_num_warnings      => l_num_warnings,
4314             x_num_errors        => l_num_errors);
4315           --
4316         END IF;
4317         --
4318 	****************************************************************************************/
4319         --Bug 5191354
4320         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_ROUTE_EXPORT_TXN_LVL) = 1
4321            AND (p_action_code = 'CREATE' OR
4322                  (p_action_code = 'UPDATE' AND
4323                    ((p_in_rec_attr_tab(l_index).ROUTED_EXPORT_TXN IS NULL ) OR (p_in_rec_attr_tab(l_index).ROUTED_EXPORT_TXN <> fnd_api.g_miss_char)
4324                 ))) THEN
4325           --
4326           WSH_DELIVERY_VALIDATIONS.Validate_Routed_Export_Txn(
4327             x_rtd_expt_txn_code       => x_rec_attr_tab(l_index).ROUTED_EXPORT_TXN,
4328             p_rtd_expt_txn_meaning    => l_dummy_meaning,
4329             x_return_status           => l_return_status);
4330           --
4331           IF l_debug_on THEN
4332             wsh_debug_sv.log(l_module_name,'Return Status After Calling Validate_Routed_Export_Txn',l_return_status);
4333           END IF;
4334           --
4335           WSH_UTIL_CORE.api_post_call(
4336             p_return_status     => l_return_status,
4337             x_num_warnings      => l_num_warnings,
4338             x_num_errors        => l_num_errors);
4339           --
4340         END IF;
4341         --Bug 5191354
4342         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_FREIGHT_CARRIER_LVL) = 1
4343            AND (p_action_code = 'CREATE' OR
4344                  (p_action_code = 'UPDATE' AND
4345                    ((p_in_rec_attr_tab(l_index).ship_method_name IS NULL ) OR (p_in_rec_attr_tab(l_index).ship_method_name <> fnd_api.g_miss_char)
4346                      OR (p_in_rec_attr_tab(l_index).ship_method_code IS NULL ) OR (p_in_rec_attr_tab(l_index).ship_method_code <> fnd_api.g_miss_char)
4347                      OR (p_in_rec_attr_tab(l_index).carrier_code IS NULL ) OR (p_in_rec_attr_tab(l_index).carrier_code <> fnd_api.g_miss_char)
4348                      OR (p_in_rec_attr_tab(l_index).carrier_id IS NULL ) OR (p_in_rec_attr_tab(l_index).carrier_id <> fnd_api.g_miss_num)
4349                      OR (p_in_rec_attr_tab(l_index).service_level IS NULL ) OR (p_in_rec_attr_tab(l_index).service_level <> fnd_api.g_miss_char)
4350                      OR (p_in_rec_attr_tab(l_index).mode_of_transport IS NULL ) OR (p_in_rec_attr_tab(l_index).mode_of_transport <> fnd_api.g_miss_char)
4351                    ))) THEN
4352           --
4353           wsh_util_validate.validate_freight_carrier(
4354             p_ship_method_name  => x_rec_attr_tab(l_index).ship_method_name,
4355             x_ship_method_code  => x_rec_attr_tab(l_index).ship_method_code,
4356             p_carrier_name      => x_rec_attr_tab(l_index).carrier_code,
4357             x_carrier_id        => x_rec_attr_tab(l_index).carrier_id,
4358             x_service_level     => x_rec_attr_tab(l_index).service_level,
4359             x_mode_of_transport => x_rec_attr_tab(l_index).mode_of_transport,
4360             p_entity_id         => x_rec_attr_tab(l_index).delivery_id,
4361             p_entity_type       => 'DLVY',
4362             p_organization_id   => x_rec_attr_tab(l_index).organization_id,
4363             x_return_status     => l_return_status,
4364             p_caller            => p_caller);
4365           --
4366           IF l_debug_on THEN
4367             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_freight_carrier',l_return_status);
4368           END IF;
4369           --
4370          /* Fix for Bug 2753330
4371           If caller is WSH_INBOUND, then need to convert warning to success
4372           for cases where  validate_freight_carrier returns warning
4373           so that Inbound processing does not error out */
4374           IF p_caller IN ('WSH_INBOUND', 'WSH_TPW_INBOUND')
4375              AND l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING
4376           THEN
4377           -- {
4378               IF l_debug_on THEN
4379                  wsh_debug_sv.logmsg(l_module_name, 'Setting success for Inbound');
4380               END IF;
4381               l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4382           -- }
4383           END IF;
4384           WSH_UTIL_CORE.api_post_call(
4385             p_return_status     => l_return_status,
4386             x_num_warnings      => l_num_warnings,
4387             x_num_errors        => l_num_errors);
4388           --
4389         END IF;
4390         --Bug 5191354
4391         IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DERIVE_DELIVERY_UOM_LVL) = 1
4392            AND (p_action_code = 'CREATE' OR
4393                  (p_action_code = 'UPDATE' AND
4394                    ( (p_in_rec_attr_tab(l_index).volume_uom_code IS NULL ) OR (p_in_rec_attr_tab(l_index).volume_uom_code <> fnd_api.g_miss_char)
4395                      OR (p_in_rec_attr_tab(l_index).weight_uom_code IS NULL ) OR (p_in_rec_attr_tab(l_index).weight_uom_code <> fnd_api.g_miss_char)
4396                     ))) THEN
4397           --
4398           wsh_delivery_validations.derive_delivery_uom(
4399             p_delivery_id         => x_rec_attr_tab(l_index).delivery_id,
4400             p_organization_id     => x_rec_attr_tab(l_index).organization_id,
4401             x_volume_uom_code     => x_rec_attr_tab(l_index).volume_uom_code,
4402             x_weight_uom_code     => x_rec_attr_tab(l_index).weight_uom_code,
4403             x_wt_nullify_flag     => l_wt_nullify_flag,
4404             x_vol_nullify_flag    => l_vol_nullify_flag,
4405             x_return_status       => l_return_status);
4406 
4407           --
4408           IF l_debug_on THEN
4409             wsh_debug_sv.log(l_module_name,'Return Status After Calling derive_delivery_uom',l_return_status);
4410           END IF;
4411           --
4412           WSH_UTIL_CORE.api_post_call(
4413             p_return_status     => l_return_status,
4414             x_num_warnings      => l_num_warnings,
4415             x_num_errors        => l_num_errors);
4416           --
4417           -- We need to nullify the Weight and Volumes if the organization is changed
4418           -- and if the existing uoms are not defined in the new organization.
4419           IF l_wt_nullify_flag THEN
4420             x_rec_attr_tab(l_index).net_weight := NULL;
4421             x_rec_attr_tab(l_index).gross_weight := NULL;
4422           END IF;
4423           IF l_vol_nullify_flag THEN
4424             x_rec_attr_tab(l_index).volume := NULL;
4425           END IF;
4426           --
4427         END IF;
4428         --
4429         --Bug 4140359
4430         IF NVL(p_caller,'-1') <> 'WSH_FSTRX' THEN --{
4431            IF NVL(x_rec_attr_tab(l_index).GROSS_WEIGHT,0) > 0
4432               OR NVL(x_rec_attr_tab(l_index).NET_WEIGHT,0) > 0 THEN
4433               IF x_rec_attr_tab(l_index).WEIGHT_UOM_CODE IS NULL THEN
4434                  FND_MESSAGE.SET_NAME('WSH','WSH_WTVOL_NULL');
4435                  wsh_util_core.add_message(wsh_util_core.g_ret_sts_error,l_module_name);
4436                  RAISE FND_API.G_EXC_ERROR;
4437               END IF;
4438            END IF;
4439            --Bug 4140359
4440            IF NVL(x_rec_attr_tab(l_index).VOLUME,0) > 0
4441              AND x_rec_attr_tab(l_index).VOLUME_UOM_CODE IS NULL THEN
4442               FND_MESSAGE.SET_NAME('WSH','WSH_WTVOL_NULL');
4443               wsh_util_core.add_message(wsh_util_core.g_ret_sts_error,l_module_name);
4444               RAISE FND_API.G_EXC_ERROR;
4445            END IF;
4446         END IF; --}
4447         x_valid_index_tab(l_index) := l_index;
4448         --
4449       EXCEPTION
4450         --
4451         WHEN FND_API.G_EXC_ERROR THEN
4452           ROLLBACK TO VALIDATE_DLVY_GRP_LOOP;
4453         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4454           ROLLBACK TO VALIDATE_DLVY_GRP_LOOP;
4455         WHEN OTHERS THEN
4456           ROLLBACK TO VALIDATE_DLVY_GRP_LOOP;
4457           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4458         --
4459       END;
4460       --
4461       l_index := x_rec_attr_tab.NEXT(l_index);
4462       --
4463     END LOOP;
4464     --
4465     IF l_num_errors = x_rec_attr_tab.COUNT THEN
4466       RAISE FND_API.G_EXC_ERROR;
4467     ELSIF l_num_errors > 0 THEN
4468       RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4469     ELSIF l_num_warnings > 0 THEN
4470       RAISE WSH_UTIL_CORE.G_EXC_WARNING;
4471     ELSE
4472       x_return_status := wsh_util_core.g_ret_sts_success;
4473     END IF;
4474 
4475 /* Assumption is this should be taken care of by get_disabled list.
4476           l_assigned_to_trip := WSH_Delivery_Validations.Del_Assigned_To_Trip
4477                                          (p_delivery_id =>  x_rec_attr_tab(l_index).delivery_id,
4478                                           x_return_status => x_return_status);
4479 */
4480     IF l_debug_on THEN
4481       WSH_DEBUG_SV.pop(l_module_name);
4482     END IF;
4483     --
4484   EXCEPTION
4485     WHEN FND_API.G_EXC_ERROR THEN
4486       ROLLBACK TO VALIDATE_DELIVERY_GRP;
4487       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4488       --
4489       IF l_debug_on THEN
4490         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4491         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4492       END IF;
4493       --
4494       --RTV changes
4495       IF c_check_vendor%ISOPEN THEN
4496         CLOSE c_check_vendor;
4497       END IF;
4498       --RTV changes
4499     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4500       ROLLBACK TO VALIDATE_DELIVERY_GRP;
4501       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4502       --
4503       IF l_debug_on THEN
4504         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4505         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
4506       END IF;
4507       --
4508       --RTV changes
4509       IF c_check_vendor%ISOPEN THEN
4510         CLOSE c_check_vendor;
4511       END IF;
4512       --RTV changes
4513     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
4514       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4515       --
4516       IF l_debug_on THEN
4517         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4518         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
4519       END IF;
4520       --
4521       --RTV changes
4522       IF c_check_vendor%ISOPEN THEN
4523         CLOSE c_check_vendor;
4524       END IF;
4525       --RTV changes
4526     WHEN OTHERS THEN
4527       ROLLBACK TO VALIDATE_DELIVERY_GRP;
4528       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
4529       wsh_util_core.default_handler('WSH_DELIVERIES_GRP.VALIDATE_DELIVERY');
4530       --
4531       IF l_debug_on THEN
4532         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4533         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4534       END IF;
4535       --
4536       --RTV changes
4537       IF c_check_vendor%ISOPEN THEN
4538         CLOSE c_check_vendor;
4539       END IF;
4540       --RTV changes
4541   END Validate_Delivery;
4542 
4543 --========================================================================
4544 -- PROCEDURE : Create_Update_Delivery  Must be called only by the Form
4545 --                                     and the Wrapper Group API.
4546 --
4547 -- PARAMETERS: p_api_version_number    known api version error buffer
4548 --             p_init_msg_list         FND_API.G_TRUE to reset list
4549 --             x_return_status         return status
4550 --             x_msg_count             number of messages in the list
4551 --             x_msg_data              text of messages
4552 --             p_in_rec                Record for caller, phase
4553 --                                     and action_code ( CREATE-UPDATE )
4554 --         p_rec_attr_tab          Table of attributes for the delivery entity
4555 --           x_del_out_rec_tab       Table of delivery_id, and name of new deliveries,
4556 -- VERSION   : current version         1.0
4557 --             initial version         1.0
4558 -- COMMENT   : Creates or updates a record in wsh_new_deliveries table with information
4559 --             specified in p_delivery_info
4560 --========================================================================
4561   PROCEDURE Create_Update_Delivery
4562   ( p_api_version_number     IN   NUMBER,
4563     p_init_msg_list          IN   VARCHAR2,
4564     p_commit         IN   VARCHAR2 DEFAULT FND_API.G_FALSE,
4565     p_in_rec                 IN   del_In_Rec_Type,
4566     p_rec_attr_tab       IN   WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
4567     x_del_out_rec_tab        OUT  NOCOPY Del_Out_Tbl_Type,
4568     x_return_status          OUT  NOCOPY VARCHAR2,
4569     x_msg_count              OUT  NOCOPY NUMBER,
4570     x_msg_data               OUT  NOCOPY VARCHAR2)
4571   IS
4572     --
4573 l_debug_on BOOLEAN;
4574     --
4575     l_module_name CONSTANT   VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_UPDATE_DELIVERY';
4576     --
4577     l_index                  NUMBER;
4578     l_num_warnings           NUMBER := 0;
4579     l_num_errors             NUMBER := 0;
4580     l_return_status          VARCHAR2(1);
4581     l_api_version_number     CONSTANT NUMBER := 1.0;
4582     l_api_name               CONSTANT VARCHAR2(30):= 'Create_Update_Delivery';
4583     l_msg_count        NUMBER;
4584     l_msg_data         VARCHAR2(32767);
4585 
4586     --
4587     l_rec_attr_tab           WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
4588     l_index_tab              wsh_util_core.id_tab_type;
4589     --
4590     l_input_param_flag      BOOLEAN := TRUE;
4591     --
4592     l_param_name            VARCHAR2(100);
4593     --
4594 --Compatibility Changes
4595     l_cc_validate_result    VARCHAR2(1);
4596     l_cc_failed_records     WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
4597     l_cc_line_groups      WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
4598     l_cc_group_info     WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
4599 
4600 
4601     l_cc_upd_dlvy_intmed_ship_to  VARCHAR2(1);
4602     l_cc_upd_dlvy_ship_method   VARCHAR2(1);
4603     l_cc_dlvy_intmed_ship_to    NUMBER;
4604     l_cc_dlvy_ship_method   VARCHAR2(30);
4605     l_cc_del_rows     wsh_util_core.id_tab_type;
4606     l_cc_grouping_rows      wsh_util_core.id_tab_type;
4607     l_cc_return_status      VARCHAR2(1);
4608     l_cc_count_trip_rows    NUMBER;
4609     l_cc_count_grouping_rows    NUMBER;
4610     l_cc_trip_id      wsh_util_core.id_tab_type;
4611     l_cc_trip_id_tab      wsh_util_core.id_tab_type;
4612     b_cc_linefailed     boolean;
4613     l_rec_attr_tab_temp     WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
4614     l_cc_count_success      NUMBER;
4615 
4616     --dummy tables for calling validate_constraint_mainper
4617     l_cc_del_attr_tab         WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
4618     l_cc_det_attr_tab         wsh_glbl_var_strct_grp.Delivery_Details_Attr_Tbl_Type;
4619     l_cc_trip_attr_tab          WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
4620     l_cc_stop_attr_tab          WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
4621     l_cc_in_ids           wsh_util_core.id_tab_type;
4622     l_cc_fail_ids   wsh_util_core.id_tab_type;
4623     l_param_info    WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
4624     l_log_itm_exc   VARCHAR2(1);
4625 
4626 --Compatibility Changes
4627 
4628     CURSOR c_getorgcarriersmc(p_delid NUMBER) IS
4629     SELECT organization_id, name, ship_method_code, carrier_id
4630     FROM wsh_new_deliveries
4631     WHERE  delivery_id = p_delid
4632     and ignore_for_planning<>'Y';
4633 
4634     l_wh_type VARCHAR2(3);
4635     l_organization_id     wsh_new_deliveries.organization_id%TYPE;
4636     l_smc                 wsh_new_deliveries.ship_method_code%TYPE;
4637     l_carrier_id          wsh_new_deliveries.carrier_id%TYPE;
4638     l_ignore_for_planning wsh_new_deliveries.ignore_for_planning%TYPE;
4639     l_tmp_ignore          wsh_new_deliveries.ignore_for_planning%TYPE;
4640     l_tmp_del_ids         wsh_util_core.id_tab_type;
4641 
4642     -- Pack J: LCSS Rate Delivery.
4643     l_exception_id     NUMBER;
4644     l_exception_message  VARCHAR2(2000);
4645     l_in_param_rec       WSH_FTE_INTEGRATION.rate_del_in_param_rec;
4646     l_out_param_rec      WSH_FTE_INTEGRATION.rate_del_out_param_rec;
4647     l_error_text         VARCHAR2(2000);
4648     l_delivery_rows       wsh_util_core.id_tab_type;
4649     --
4650 
4651     --OTM R12 Org-Specific Start.
4652     l_gc3_is_installed    VARCHAR2(1);
4653     --OTM R12 End.
4654 
4655     RECORD_LOCKED           EXCEPTION;
4656     PRAGMA EXCEPTION_INIT(RECORD_LOCKED, -54);
4657     --
4658     --Bugfix 4070732
4659     l_api_session_name CONSTANT VARCHAR2(150) := G_PKG_NAME ||'.' || l_module_name;
4660     l_reset_flags BOOLEAN;
4661 
4662   BEGIN
4663     -- Bug 4070732
4664     IF WSH_UTIL_CORE.G_START_OF_SESSION_API is null THEN  --Bugfix 4070732
4665       WSH_UTIL_CORE.G_START_OF_SESSION_API     := l_api_session_name;
4666       WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API := FALSE;
4667     END IF;
4668 
4669 
4670     --
4671     --
4672     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4673     --
4674     IF l_debug_on IS NULL
4675     THEN
4676         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4677     END IF;
4678     --
4679     SAVEPOINT CREATE_UPDATE_DELIVERY_GRP;
4680     --
4681     IF NOT FND_API.Compatible_API_Call
4682       ( l_api_version_number,
4683         p_api_version_number,
4684         l_api_name,
4685         G_PKG_NAME
4686        )
4687     THEN
4688       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4689     END IF;
4690     --
4691     IF FND_API.to_Boolean(p_init_msg_list) THEN
4692       FND_MSG_PUB.initialize;
4693     END IF;
4694     --
4695 
4696     --OMT R12 Org-Specific Start
4697     l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
4698     IF l_gc3_is_installed IS NULL THEN
4699       l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
4700     END IF;
4701     IF l_debug_on THEN
4702       WSH_DEBUG_SV.log(l_module_name,'l_gc3_is_installed ',
4703                                       l_gc3_is_installed);
4704     END IF;
4705     --OTM R12 End.
4706 
4707     IF l_debug_on THEN
4708       --
4709       wsh_debug_sv.push (l_module_name);
4710       wsh_debug_sv.log (l_module_name,'action_code',p_in_rec.action_code);
4711       wsh_debug_sv.log (l_module_name,'caller',p_in_rec.caller);
4712       wsh_debug_sv.log (l_module_name,'COUNT',p_rec_attr_tab.COUNT);
4713       --
4714     END IF;
4715     --
4716     IF p_in_rec.action_code IS NULL THEN
4717       l_param_name := 'p_in_rec.action_code';
4718       l_input_param_flag := FALSE;
4719     ELSIF p_in_rec.caller IS NULL  THEN
4720       l_param_name := 'p_in_rec.caller';
4721       l_input_param_flag := FALSE;
4722     ELSIF p_rec_attr_tab.COUNT = 0  THEN
4723       l_param_name := 'p_rec_attr_tab.COUNT';
4724       l_input_param_flag := FALSE;
4725     END IF;
4726 
4727     IF not l_input_param_flag THEN
4728       FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
4729       FND_MESSAGE.SET_TOKEN('FIELD_NAME',l_param_name);
4730       x_return_status := wsh_util_core.g_ret_sts_error;
4731       wsh_util_core.add_message(x_return_status,l_module_name);
4732       RAISE FND_API.G_EXC_ERROR;
4733     END IF;
4734     --
4735     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4736     --
4737     WSH_ACTIONS_LEVELS.set_validation_level (
4738       p_entity        => 'DLVY',
4739       p_caller        => p_in_rec.caller,
4740       p_phase         => nvl(p_in_rec.phase,1),
4741       p_action        => p_in_rec.action_code ,
4742       x_return_status => l_return_status);
4743     --
4744     IF l_debug_on THEN
4745       wsh_debug_sv.log(l_module_name,'Return Status After Calling set_validation_level',l_return_status);
4746     END IF;
4747     --
4748     wsh_util_core.api_post_call(
4749       p_return_status    => l_return_status,
4750       x_num_warnings     => l_num_warnings,
4751       x_num_errors       => l_num_errors);
4752     --
4753     IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_DISABLED_LIST_LVL) = 1 THEN
4754       --
4755       l_index := p_rec_attr_tab.FIRST;
4756       WHILE l_index is not null LOOP
4757         BEGIN
4758           SAVEPOINT DLVY_GRP_GET_DISAB_LIST_LOOP;
4759 
4760           WSH_DELIVERY_VALIDATIONS.get_disabled_list(
4761             p_delivery_rec     => p_rec_attr_tab(l_index),
4762             p_in_rec           => p_in_rec,
4763             x_return_status    => l_return_status,
4764             x_msg_count        => l_msg_count,
4765             x_msg_data         => l_msg_data,
4766             x_delivery_rec     => l_rec_attr_tab(l_index));
4767           --
4768           IF l_debug_on THEN
4769             wsh_debug_sv.log(l_module_name,'Return Status After Calling get_disabled_list',l_return_status);
4770           END IF;
4771           --
4772           WSH_UTIL_CORE.api_post_call(
4773             p_return_status    => l_return_status,
4774             x_num_warnings     => l_num_warnings,
4775             x_num_errors       => l_num_errors,
4776             p_msg_data         => l_msg_data);
4777           --
4778         EXCEPTION
4779           WHEN FND_API.G_EXC_ERROR THEN
4780             ROLLBACK TO DLVY_GRP_GET_DISAB_LIST_LOOP;
4781           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4782             ROLLBACK TO DLVY_GRP_GET_DISAB_LIST_LOOP;
4783             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4784           WHEN OTHERS THEN
4785             ROLLBACK TO DLVY_GRP_GET_DISAB_LIST_LOOP;
4786             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4787         END;
4788         --
4789         l_index := p_rec_attr_tab.NEXT(l_index);
4790         --
4791       END LOOP;
4792       --
4793     ELSE
4794       --
4795       l_rec_attr_tab := p_rec_attr_tab;
4796       --
4797     END IF;
4798     --
4799    IF WSH_ACTIONS_LEVELS.g_validation_level_tab(WSH_ACTIONS_LEVELS.C_VALIDATE_CONSTRAINTS_LVL) = 1  THEN --{
4800 --Compatibility Constraints
4801     --Compatiblity Changes
4802     IF wsh_util_core.fte_is_installed = 'Y' THEN
4803 
4804      WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
4805        p_api_version_number =>  p_api_version_number,
4806        p_init_msg_list      =>  FND_API.G_FALSE,
4807        p_entity_type        =>  'D',
4808        p_target_id          =>  null,
4809        p_action_code        =>  p_in_rec.action_code,
4810        p_del_attr_tab       =>  l_rec_attr_tab,
4811        p_det_attr_tab       =>  l_cc_det_attr_tab,
4812        p_trip_attr_tab      =>  l_cc_trip_attr_tab,
4813        p_stop_attr_tab      =>  l_cc_stop_attr_tab,
4814        p_in_ids             =>  l_cc_in_ids,
4815        x_fail_ids           =>  l_cc_fail_ids,
4816        x_validate_result          =>  l_cc_validate_result,
4817        x_failed_lines             =>  l_cc_failed_records,
4818        x_line_groups              =>  l_cc_line_groups,
4819        x_group_info               =>  l_cc_group_info,
4820        x_msg_count                =>  l_msg_count,
4821        x_msg_data                 =>  l_msg_data,
4822        x_return_status            =>  l_return_status);
4823 
4824 
4825       IF l_debug_on THEN
4826         wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_dlvy_wrap',l_return_status);
4827         wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
4828         wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
4829         wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
4830         wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
4831         wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
4832         wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
4833       END IF;
4834 
4835 
4836       IF l_return_status=wsh_util_core.g_ret_sts_error THEN
4837         --fix p_rec_attr_tab to have only successful records
4838         l_cc_count_success:=1;
4839 
4840         IF l_debug_on THEN
4841             wsh_debug_sv.log(l_module_name,'l_rec_attr_tab count before removing failed lines',l_rec_attr_tab.COUNT);
4842         END IF;
4843 
4844         IF l_cc_failed_records.COUNT>0 AND l_rec_attr_tab.COUNT>0 THEN
4845 
4846           IF l_cc_failed_records.COUNT=l_rec_attr_tab.COUNT THEN
4847             IF l_debug_on THEN
4848                wsh_debug_sv.logmsg(l_module_name,'all dels failed compatibility check');
4849             END IF;
4850             FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
4851             wsh_util_core.api_post_call(
4852               p_return_status    => l_return_status,
4853               x_num_warnings     => l_num_warnings,
4854               x_num_errors       => l_num_errors,
4855               p_msg_data         => l_msg_data);
4856           ELSE
4857             l_return_status:=wsh_util_core.g_ret_sts_warning;
4858           END IF;
4859 
4860 
4861           FOR i in l_rec_attr_tab.FIRST..l_rec_attr_tab.LAST LOOP
4862             b_cc_linefailed:=FALSE;
4863             FOR j in l_cc_failed_records.FIRST..l_cc_failed_records.LAST LOOP
4864               --for create, in WSHFTCCB, dummy delivery_id (index of l_rec_attr_tab)
4865               --is passed so use that to remove rec
4866               IF (p_in_rec.action_code='CREATE' AND l_rec_attr_tab(i).delivery_id is null
4867                   AND i=l_cc_failed_records(j).entity_line_id) THEN
4868                 b_cc_linefailed:=TRUE;
4869                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
4870                 FND_MESSAGE.SET_TOKEN('DEL_ID',l_rec_attr_tab(i).name);
4871               ELSIF (l_rec_attr_tab(i).delivery_id=l_cc_failed_records(j).entity_line_id) THEN
4872                 b_cc_linefailed:=TRUE;
4873                 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
4874                 FND_MESSAGE.SET_TOKEN('DEL_ID',l_cc_failed_records(j).entity_line_id);
4875               END IF;
4876             END LOOP;
4877             IF (NOT(b_cc_linefailed)) THEN
4878               l_rec_attr_tab_temp(l_cc_count_success):=l_rec_attr_tab(i);
4879               l_cc_count_success:=l_cc_count_success+1;
4880             END IF;
4881          END LOOP;
4882 
4883          IF l_rec_attr_tab_temp.COUNT>0 THEN
4884             l_rec_attr_tab:=l_rec_attr_tab_temp;
4885          END IF;
4886 
4887        ELSE
4888             l_return_status:=wsh_util_core.g_ret_sts_warning;
4889        END IF;--failed_records.count>0
4890 
4891 
4892        IF l_debug_on THEN
4893             wsh_debug_sv.log(l_module_name,'del rec_attr_tab count after removing failed lines',l_rec_attr_tab.COUNT);
4894        END IF;
4895        --fix p_rec_attr_tab to have only successful records
4896      END IF;--error
4897 
4898 
4899       IF l_return_status=wsh_util_core.g_ret_sts_error and l_cc_failed_records.COUNT<>l_rec_attr_tab.COUNT THEN
4900         l_return_status:=wsh_util_core.g_ret_sts_warning;
4901       END IF;
4902 
4903 
4904       --
4905       wsh_util_core.api_post_call(
4906         p_return_status    => l_return_status,
4907         x_num_warnings     => l_num_warnings,
4908         x_num_errors       => l_num_errors,
4909         p_msg_data         => l_msg_data);
4910 
4911     END IF;
4912 
4913 --Compatibility Constraints
4914    END IF; --}
4915 -- Bug# 5191354: Parameter p_in_rec_attr_tab has been added to the API.
4916     Validate_Delivery (
4917       x_rec_attr_tab        =>  l_rec_attr_tab ,
4918       p_in_rec_attr_tab     =>  p_rec_attr_tab, --Bug 5191354
4919       p_action_code         =>  p_in_rec.action_code,
4920       p_caller              =>  p_in_rec.caller,
4921       x_valid_index_tab     =>  l_index_tab,
4922       x_return_status       =>  l_return_status);
4923     --
4924     WSH_UTIL_CORE.api_post_call(
4925       p_return_status        => l_return_status,
4926       x_num_warnings         => l_num_warnings,
4927       x_num_errors           => l_num_errors);
4928     --
4929     IF l_debug_on THEN
4930       wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_delivery',l_return_status);
4931     END IF;
4932     --
4933     l_index := l_index_tab.FIRST;
4934     WHILE l_index is not null LOOP
4935       BEGIN
4936         --
4937         SAVEPOINT CREATE_UPDATE_DLVY_GRP_LOOP;
4938         --
4939         IF p_in_rec.action_code = 'CREATE' THEN
4940 
4941           /*** J changes TP release ****/
4942           l_tmp_ignore := l_rec_attr_tab(l_index).ignore_for_planning;
4943           IF (wsh_util_core.TP_is_installed ='Y' OR l_gc3_is_installed = 'Y' ) --OTM R12 Org-Specific . Added second OR condition
4944              AND (
4945                   (l_tmp_ignore is null OR l_tmp_ignore=FND_API.G_MISS_CHAR)
4946                    OR (l_tmp_ignore is not null AND l_tmp_ignore='N')-- need to check this as form always passes 'N'
4947                  ) THEN
4948 
4949                  l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
4950                            (p_organization_id	 => l_rec_attr_tab(l_index).organization_id,
4951                             p_carrier_id         => l_rec_attr_tab(l_index).carrier_id,
4952                             p_ship_method_code   => l_rec_attr_tab(l_index).ship_method_code,
4953                             p_msg_display        => 'N',
4954                             x_return_status  	 => l_return_status
4955                             );
4956 
4957                  IF l_debug_on THEN
4958                     WSH_DEBUG_SV.log(l_module_name,' Get_Warehouse_Type  l_wh_type,l_return_status',l_wh_type||l_return_status);
4959                  END IF;
4960                  WSH_UTIL_CORE.api_post_call(
4961                      p_return_status        => l_return_status,
4962                      x_num_warnings         => l_num_warnings,
4963                      x_num_errors           => l_num_errors);
4964 
4965 
4966                  -- TPW - Distributed changes
4967                  IF (nvl(l_wh_type, FND_API.G_MISS_CHAR) IN ('TPW','CMS','TW2')) THEN
4968 	             l_ignore_for_planning:='Y';
4969                  --OTM R12 Org-Specific Start
4970                  ELSIF (l_gc3_is_installed = 'Y') THEN
4971                      wsh_util_validate.calc_ignore_for_planning(
4972                      p_organization_id  => l_rec_attr_tab(l_index).organization_id
4973                     ,p_client_id        => l_rec_attr_tab(l_index).client_id -- LSP PROJECT
4974                     ,p_carrier_id       => NULL
4975                     ,p_ship_method_code => NULL
4976                     ,p_tp_installed     => NULL
4977                     ,p_caller           => NULL
4978                     ,x_ignore_for_planning => l_ignore_for_planning
4979                     ,x_return_status       => l_return_status
4980                     ,p_otm_installed       => 'Y');
4981                     IF l_debug_on THEN
4982                       WSH_DEBUG_SV.log(l_module_name,'After call to wsh_util_validate.ca'
4983                             ||'lc_ignore_for_planning l_return_status',l_return_status);
4984                       WSH_DEBUG_SV.log(l_module_name,'l_ignore_for_planning ',
4985                                                       l_ignore_for_planning );
4986                     END IF;
4987                     IF (l_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR,
4988                                             WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4989                        RAISE FND_API.G_EXC_ERROR;
4990                     END IF;
4991                  END IF;
4992                  --OTM R12 End.
4993           ELSIF (l_tmp_ignore='Y' and
4994                  (WSH_UTIL_CORE.TP_Is_Installed ='Y' OR
4995                   l_gc3_is_installed = 'Y')) THEN
4996               l_ignore_for_planning:=l_tmp_ignore;
4997           ELSE
4998               l_ignore_for_planning:='N';
4999           END IF;
5000 
5001           --OTM R12 Org-Specific Start
5002           IF l_debug_on THEN
5003             WSH_DEBUG_SV.log(l_module_name,'l_ignore_for_planning ',l_ignore_for_planning);
5004           END IF;
5005           --OTM R12 End.
5006           l_rec_attr_tab(l_index).ignore_for_planning:=l_ignore_for_planning;
5007           /*** J changes TP release ****/
5008 
5009 
5010          WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
5011                p_delivery_rec => l_rec_attr_tab(l_index),
5012                x_return_status => l_return_status);
5013 
5014          WSH_UTIL_CORE.api_post_call(
5015            p_return_status        => l_return_status,
5016            x_num_warnings         => l_num_warnings,
5017            x_num_errors           => l_num_errors);
5018 
5019 
5020 
5021           --
5022           WSH_NEW_DELIVERIES_PVT.Create_Delivery(
5023             p_delivery_info    => l_rec_attr_tab(l_index),
5024             x_rowid            => x_del_out_rec_tab(l_index).rowid,
5025             x_delivery_id      => x_del_out_rec_tab(l_index).delivery_id,
5026             x_name             => x_del_out_rec_tab(l_index).name,
5027             x_return_status    => l_return_status);
5028           --
5029           IF l_debug_on THEN
5030             wsh_debug_sv.log(l_module_name,'Return Status After Calling Create Delivery',l_return_status);
5031           END IF;
5032 
5033           IF l_debug_on THEN
5034              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.Get',WSH_DEBUG_SV.C_PROC_LEVEL);
5035           END IF;
5036 
5037           --
5038           WSH_UTIL_CORE.api_post_call(
5039             p_return_status    => l_return_status,
5040             x_num_warnings     => l_num_warnings,
5041             x_num_errors       => l_num_errors);
5042 
5043           WSH_SHIPPING_PARAMS_PVT.Get(
5044             p_organization_id => l_rec_attr_tab(l_index).organization_id,
5045             x_param_info    => l_param_info,
5046             x_return_status   => l_return_status
5047                               );
5048 
5049           IF l_debug_on THEN
5050             wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_SHIPPING_PARAMS_PVT.Get',l_return_status);
5051           END IF;
5052 
5053           WSH_UTIL_CORE.api_post_call(
5054             p_return_status        => l_return_status,
5055             x_num_warnings         => l_num_warnings,
5056             x_num_errors           => l_num_errors);
5057 
5058           IF l_param_info.export_screening_flag IN ('C', 'A')
5059           AND NVL(l_rec_attr_tab(l_index).shipment_Direction,'O') IN ('O','IO')   -- J-IB-NPARIKH
5060           THEN
5061 
5062             -- ITM Check applicable only for outbound (O/IO) delivery.
5063             --
5064             IF l_debug_on THEN
5065                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',WSH_DEBUG_SV.C_PROC_LEVEL);
5066             END IF;
5067 
5068             l_log_itm_exc :=  WSH_DELIVERY_VALIDATIONS.Check_ITM_Required
5069                                   (p_delivery_id => x_del_out_rec_tab(l_index).delivery_id,
5070                                    x_return_status => l_return_status);
5071             IF l_debug_on THEN
5072                wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',l_return_status);
5073             END IF;
5074 
5075             WSH_UTIL_CORE.api_post_call(
5076                   p_return_status        => l_return_status,
5077                   x_num_warnings         => l_num_warnings,
5078                   x_num_errors           => l_num_errors);
5079 
5080             IF l_log_itm_exc = 'Y' THEN
5081                IF l_debug_on THEN
5082                   WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',WSH_DEBUG_SV.C_PROC_LEVEL);
5083                END IF;
5084                WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception (
5085                                    p_delivery_id => x_del_out_rec_tab(l_index).delivery_id,
5086                                    p_action_type => 'CREATE_DELIVERY',
5087                                    p_ship_from_location_id =>  l_rec_attr_tab(l_index).initial_pickup_location_id,
5088                                    x_return_status => l_return_status);
5089                 IF l_debug_on THEN
5090                    wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',l_return_status);
5091                 END IF;
5092 
5093                 WSH_UTIL_CORE.api_post_call(
5094                   p_return_status        => l_return_status,
5095                   x_num_warnings         => l_num_warnings,
5096                   x_num_errors           => l_num_errors);
5097             END IF;
5098 
5099           END IF;
5100           --
5101           -- Pack J: Auto Select Carrier if the parameter is set.
5102           IF NVL(l_param_info.auto_apply_routing_rules, 'N') = 'D' THEN
5103 
5104              IF l_debug_on THEN
5105                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION',WSH_DEBUG_SV.C_PROC_LEVEL);
5106              END IF;
5107          --
5108              l_delivery_rows(1) := x_del_out_rec_tab(l_index).delivery_id;
5109 
5110              WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION(p_delivery_id_tab => l_delivery_rows,
5111                                                             p_batch_id        => null,
5112                                                             p_form_flag       => 'N',
5113                                                             x_return_message  => l_error_text,
5114                                                             x_return_status   => l_return_status);
5115 
5116 
5117              IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5118 
5119                IF l_debug_on THEN
5120                   WSH_DEBUG_SV.logmsg(l_module_name,  'ERROR OCCURRED WHILST PROCESSING CARRIER SELECTION'  );
5121                END IF;
5122 
5123                l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5124 
5125              END IF;
5126 
5127              WSH_UTIL_CORE.api_post_call(
5128                   p_return_status    => l_return_status,
5129                   x_num_warnings     => l_num_warnings,
5130                   x_num_errors       => l_num_errors);
5131 
5132           END IF;
5133 
5134           --
5135         ELSE
5136 
5137           -- J-IB-NPARIKH-{
5138           IF NVL(l_rec_attr_tab(l_index).shipment_direction,'O') NOT IN ('O','IO')
5139           THEN
5140           --{
5141               --
5142               -- Update ship-from location on delivery,lines and associated trip stops
5143               --
5144               WSH_NEW_DELIVERY_ACTIONS.update_ship_from_location
5145                 (
5146                     p_delivery_id                   => l_rec_attr_tab(l_index).delivery_id,
5147                     p_location_id                   => l_rec_attr_tab(l_index).initial_pickup_location_id,
5148                     x_return_status                 => l_return_status
5149                 );
5150               --
5151               IF l_debug_on THEN
5152                 wsh_debug_sv.log(l_module_name,'Return Status After Calling update_ship_from_location',l_return_status);
5153               END IF;
5154               --
5155               WSH_UTIL_CORE.api_post_call(
5156                   p_return_status    => l_return_status,
5157                   x_num_warnings     => l_num_warnings,
5158                   x_num_errors       => l_num_errors);
5159           --}
5160           END IF;
5161           --
5162           --
5163           -- J-IB-NPARIKH-}
5164 
5165          WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
5166                p_delivery_rec => l_rec_attr_tab(l_index),
5167                x_return_status => l_return_status);
5168 
5169          WSH_UTIL_CORE.api_post_call(
5170            p_return_status        => l_return_status,
5171            x_num_warnings         => l_num_warnings,
5172            x_num_errors           => l_num_errors);
5173 
5174 
5175 
5176           WSH_NEW_DELIVERIES_PVT.Update_Delivery(
5177             p_rowid            => l_rec_attr_tab(l_index).rowid,
5178             p_delivery_info    => l_rec_attr_tab(l_index),
5179             x_return_status    => l_return_status);
5180           --
5181           IF l_debug_on THEN
5182             wsh_debug_sv.log(l_module_name,'Return Status After Calling Update Delivery',l_return_status);
5183           END IF;
5184           --
5185           --
5186           WSH_UTIL_CORE.api_post_call(
5187             p_return_status    => l_return_status,
5188             x_num_warnings     => l_num_warnings,
5189             x_num_errors       => l_num_errors);
5190 
5191           /***TP Release**/
5192           --TP Release : if carrier or smc is changed, if they are CMS/TPW, call change_ignoreplan_status
5193           l_organization_id:=l_rec_attr_tab(l_index).organization_id;
5194           l_smc:=l_rec_attr_tab(l_index).ship_method_code;
5195           l_carrier_id:=l_rec_attr_tab(l_index).carrier_id;
5196 
5197           IF (l_carrier_id is not null
5198               OR l_smc is not null
5199               OR l_organization_id is not null
5200              ) AND (WSH_UTIL_CORE.TP_Is_Installed = 'Y'
5201                     OR l_gc3_is_installed = 'Y') THEN
5202 
5203              FOR cur in c_getorgcarriersmc (l_rec_attr_tab(l_index).delivery_id) LOOP
5204                    IF l_organization_id is null THEN
5205                        l_organization_id:=cur.organization_id;
5206                    END IF;
5207                    IF l_smc is null THEN
5208                        l_smc:=cur.ship_method_code;
5209                    END IF;
5210                    IF l_carrier_id is null THEN
5211                        l_carrier_id:=cur.carrier_id;
5212                    END IF;
5213                    l_wh_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type
5214 				(p_organization_id => l_organization_id,
5215 				 x_return_status   => l_return_status,
5216 				 p_carrier_id	   => l_carrier_id,
5217 				 p_ship_method_code=> l_smc,
5218 				 p_msg_display	   => 'N');
5219 
5220                    IF l_debug_on THEN
5221 		         WSH_DEBUG_SV.log(l_module_name,'Get_Warehouse_Type organization_id,l_wh_type,l_return_status',l_organization_id||l_wh_type||l_return_status);
5222 		         WSH_DEBUG_SV.log(l_module_name,'carrier_id',l_carrier_id);
5223 		         WSH_DEBUG_SV.log(l_module_name,'smc',l_smc);
5224                          WSH_DEBUG_SV.log(l_module_name,'l_ignore',l_ignore_for_planning);
5225           	   END IF;
5226 
5227                    WSH_UTIL_CORE.api_post_call(
5228                        p_return_status    => l_return_status,
5229                        x_num_warnings     => l_num_warnings,
5230                        x_num_errors       => l_num_errors);
5231 
5232                    --if org is a tpw/cms and current ignore plan is 'N', change ignore plan by
5233                    --calling api.
5234 
5235                    IF (nvl(l_wh_type, FND_API.G_MISS_CHAR) IN ('TPW','CMS')) THEN
5236                         l_tmp_del_ids.delete;
5237                         l_tmp_del_ids(1):=l_rec_attr_tab(l_index).delivery_id;
5238                         wsh_tp_release.change_ignoreplan_status
5239                                      (p_entity         => 'DLVY',
5240                                       p_in_ids         => l_tmp_del_ids,
5241                                       p_action_code    => 'IGNORE_PLAN',
5242                                       x_return_status  => l_return_status);
5243                        IF l_debug_on THEN
5244                             wsh_debug_sv.log(l_module_name,'Return Status After Calling change_ignoreplan_sttatus',l_return_status);
5245                        END IF;
5246                        WSH_UTIL_CORE.api_post_call(
5247                          p_return_status    => l_return_status,
5248                          x_num_warnings     => l_num_warnings,
5249                          x_num_errors       => l_num_errors);
5250                    END IF;
5251 
5252              END LOOP;
5253           END IF;
5254           /***TP Release**/
5255         END IF; -- End if For p_in_rec.action_code Check for CREATE or UDPATE.
5256         --
5257       EXCEPTION
5258         WHEN FND_API.G_EXC_ERROR THEN
5259           ROLLBACK TO CREATE_UPDATE_DLVY_GRP_LOOP;
5260         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5261           ROLLBACK TO CREATE_UPDATE_DLVY_GRP_LOOP;
5262           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5263         WHEN OTHERS THEN
5264           ROLLBACK TO CREATE_UPDATE_DLVY_GRP_LOOP;
5265           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5266       END;
5267       --
5268       l_index := l_index_tab.NEXT(l_index);
5269       --
5270     END LOOP;
5271     --
5272 
5273     IF (l_num_errors = l_rec_attr_tab.count ) THEN
5274       RAISE FND_API.G_EXC_ERROR;
5275     ELSIF (l_num_errors > 0 ) THEN
5276       RAISE WSH_UTIL_CORE.G_EXC_WARNING;
5277     ELSIF (l_num_warnings > 0 ) THEN
5278       RAISE WSH_UTIL_CORE.G_EXC_WARNING;
5279     ELSE
5280       x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5281     END IF;
5282 
5283     -- Standard check of p_commit.
5284     IF FND_API.To_Boolean( p_commit ) THEN
5285 
5286       --bug 4070732
5287       IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5288       --{
5289 
5290           l_reset_flags := FALSE;
5291 
5292           IF l_debug_on THEN
5293             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5294           END IF;
5295 
5296           WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => l_reset_flags,
5297                                                       x_return_status => l_return_status);
5298 
5299           IF l_debug_on THEN
5300             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5301           END IF;
5302 
5303           IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
5304             RAISE FND_API.G_EXC_ERROR;
5305           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
5306             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5307           ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5308             RAISE WSH_UTIL_CORE.G_EXC_WARNING;
5309           END IF;
5310 
5311       --}
5312       END IF;
5313       --bug 4070732
5314 
5315       COMMIT WORK;
5316     END IF;
5317     --
5318     --bug 4070732
5319     IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5320     --{
5321         IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5322         --{
5323 
5324            IF FND_API.To_Boolean( p_commit ) THEN
5325 
5326             IF l_debug_on THEN
5327               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5328             END IF;
5329 
5330             WSH_UTIL_CORE.reset_stops_for_load_tender(p_reset_flags   => TRUE,
5331                                                         x_return_status => l_return_status);
5332 	   ELSE
5333 
5334             IF l_debug_on THEN
5335               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5336             END IF;
5337 
5338             WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => TRUE,
5339                                                         x_return_status => l_return_status);
5340 
5341 	   END IF;
5342 
5343             IF l_debug_on THEN
5344               WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5345             END IF;
5346 
5347             IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5348                                    WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,
5349                                    WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5350               x_return_status := l_return_status;
5351             END IF;
5352 
5353             IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5354                                    WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5355               IF NOT FND_API.To_Boolean( p_commit ) THEN
5356                 ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5357               END IF;
5358             END IF;
5359 
5360         --}
5361         END IF;
5362     --}
5363     END IF;
5364 
5365     --bug 4070732
5366     --
5367     FND_MSG_PUB.Count_And_Get (
5368       p_count => x_msg_count,
5369       p_data  => x_msg_data,
5370       p_encoded => FND_API.G_FALSE);
5371     --
5372     IF l_debug_on THEN
5373       WSH_DEBUG_SV.pop(l_module_name);
5374     END IF;
5375     --
5376   EXCEPTION
5377     WHEN RECORD_LOCKED THEN
5378       ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5379       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5380       FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
5381       wsh_util_core.add_message(x_return_status,l_module_name);
5382       --
5383       -- Start code for Bugfix 4070732
5384       --
5385       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5386       --{
5387           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5388           --{
5389               IF l_debug_on THEN
5390                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5391               END IF;
5392 
5393               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
5394                                                         x_return_status => l_return_status);
5395 
5396 
5397               IF l_debug_on THEN
5398                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5399               END IF;
5400 
5401               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5402                 x_return_status := l_return_status;
5403               END IF;
5404           --}
5405           END IF;
5406       --}
5407       END IF;
5408       --
5409       -- End of Code Bugfix 4070732
5410       --
5411       FND_MSG_PUB.Count_And_Get (
5412                      p_count  => x_msg_count,
5413                      p_data  =>  x_msg_data,
5414                      p_encoded => FND_API.G_FALSE);
5415 
5416       IF l_debug_on THEN
5417         WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5418         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
5419       END IF;
5420 
5421     WHEN FND_API.G_EXC_ERROR THEN
5422       ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5423       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5424       --
5425       -- Start code for Bugfix 4070732
5426       --
5427       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5428       --{
5429           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5430           --{
5431               IF l_debug_on THEN
5432                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5433               END IF;
5434 
5435               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
5436                                                         x_return_status => l_return_status);
5437 
5438 
5439               IF l_debug_on THEN
5440                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5441               END IF;
5442 
5443               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5444                 x_return_status := l_return_status;
5445               END IF;
5446           --}
5447           END IF;
5448       --}
5449       END IF;
5450       --
5451       -- End of Code Bugfix 4070732
5452       --
5453       FND_MSG_PUB.Count_And_Get
5454         (
5455          p_count  => x_msg_count,
5456          p_data  =>  x_msg_data,
5457          p_encoded => FND_API.G_FALSE
5458         );
5459 
5460       IF l_debug_on THEN
5461         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5462         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
5463       END IF;
5464       --
5465     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5466       ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5467       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5468 
5469       --
5470       -- Start code for Bugfix 4070732
5471       --
5472       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5473       --{
5474           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5475           --{
5476               IF l_debug_on THEN
5477                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5478               END IF;
5479 
5480               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
5481                                                         x_return_status => l_return_status);
5482 
5483 
5484               IF l_debug_on THEN
5485                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5486               END IF;
5487 
5488               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5489                 x_return_status := l_return_status;
5490               END IF;
5491           --}
5492           END IF;
5493       --}
5494       END IF;
5495       --
5496       -- End of Code Bugfix 4070732
5497       --
5498       FND_MSG_PUB.Count_And_Get
5499         (
5500          p_count  => x_msg_count,
5501          p_data  =>  x_msg_data,
5502          p_encoded => FND_API.G_FALSE
5503         );
5504 
5505       --
5506       IF l_debug_on THEN
5507         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5508         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
5509       END IF;
5510       --
5511     WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
5512       x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5513       --
5514       -- Start code for Bugfix 4070732
5515       --
5516       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5517       --{
5518           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5519           --{
5520               IF l_debug_on THEN
5521                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5522               END IF;
5523 
5524               WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => TRUE,
5525                                                           x_return_status => l_return_status);
5526 
5527 
5528               IF l_debug_on THEN
5529                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5530               END IF;
5531 
5532               IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5533                                      WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,
5534                                      WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5535                 x_return_status := l_return_status;
5536               END IF;
5537 
5538               IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5539                                      WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5540                 ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5541               END IF;
5542           --}
5543           END IF;
5544       --}
5545       END IF;
5546       --
5547       -- End of Code Bugfix 4070732
5548       --
5549       FND_MSG_PUB.Count_And_Get
5550         (
5551          p_count  => x_msg_count,
5552          p_data  =>  x_msg_data,
5553          p_encoded => FND_API.G_FALSE
5554         );
5555 
5556       --
5557       IF l_debug_on THEN
5558         WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5559         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
5560       END IF;
5561       --
5562     WHEN OTHERS THEN
5563       ROLLBACK TO CREATE_UPDATE_DELIVERY_GRP;
5564       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
5565       wsh_util_core.default_handler('WSH_DELIVERIES_GRP.CREATE_UPDATE_DELIVERY');
5566       --
5567       -- Start code for Bugfix 4070732
5568       --
5569       IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
5570       --{
5571           IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
5572           --{
5573               IF l_debug_on THEN
5574                 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
5575               END IF;
5576 
5577               WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
5578                                                         x_return_status => l_return_status);
5579 
5580 
5581               IF l_debug_on THEN
5582                 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
5583               END IF;
5584 
5585               IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5586                 x_return_status := l_return_status;
5587               END IF;
5588           --}
5589           END IF;
5590       --}
5591       END IF;
5592       --
5593       -- End of Code Bugfix 4070732
5594       --
5595       FND_MSG_PUB.Count_And_Get
5596         (
5597          p_count  => x_msg_count,
5598          p_data  =>  x_msg_data,
5599          p_encoded => FND_API.G_FALSE
5600         );
5601 
5602       --
5603       IF l_debug_on THEN
5604         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5605         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5606       END IF;
5607       --
5608   END Create_Update_Delivery;
5609 
5610 
5611 -- The below procedue will be obsoleted after patchset I.
5612 --========================================================================
5613 -- PROCEDURE : Validate_Delivery         PRIVATE
5614 --
5615 -- PARAMETERS: p_delivery_info         Attributes for the delivery entity
5616 --             p_action_code           'CREATE', 'UPDATE'
5617 --             x_return_status         Return status of API
5618 -- COMMENT   : Validates p_delivery_info by calling column specific validations
5619 --========================================================================
5620 
5621   PROCEDURE Validate_Delivery
5622       (p_delivery_info         IN OUT NOCOPY  delivery_pub_rec_type,
5623        p_action_code           IN     VARCHAR2,
5624        x_return_status         OUT NOCOPY     VARCHAR2) IS
5625 
5626   l_assigned_to_trip VARCHAR2(1);
5627 
5628   --OTM R12
5629   l_adjusted_amount      NUMBER;
5630   --
5631 
5632 --
5633 l_debug_on BOOLEAN;
5634 --
5635 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_DELIVERY';
5636 --
5637   BEGIN
5638 
5639     --
5640     --
5641     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5642     --
5643     IF l_debug_on IS NULL
5644     THEN
5645         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5646     END IF;
5647     --
5648     IF l_debug_on THEN
5649         WSH_DEBUG_SV.push(l_module_name);
5650         --
5651         WSH_DEBUG_SV.log(l_module_name,'P_ACTION_CODE',P_ACTION_CODE);
5652         WSH_DEBUG_SV.log(l_module_name,'p_delivery_info.delivery_id',
5653                                          p_delivery_info.delivery_id);
5654         WSH_DEBUG_SV.log(l_module_name,'p_delivery_info.name',
5655                                          p_delivery_info.name);
5656     END IF;
5657     --
5658     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5659     --OTM R12
5660     l_adjusted_amount := 0;
5661     --
5662 
5663     IF (p_action_code <> 'CREATE') THEN
5664 
5665        IF (p_delivery_info.delivery_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.name <> FND_API.G_MISS_CHAR) THEN
5666 
5667             IF (p_delivery_info.name <> FND_API.G_MISS_CHAR) THEN
5668              p_delivery_info.delivery_id := NULL;
5669           END IF;
5670 
5671             wsh_util_validate.validate_delivery_name(
5672             p_delivery_info.delivery_id,
5673             p_delivery_info.name,
5674             x_return_status);
5675 
5676             IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5677                --
5678                IF l_debug_on THEN
5679                    WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5680                                                              x_return_status);
5681                    WSH_DEBUG_SV.pop(l_module_name);
5682                END IF;
5683                --
5684                RETURN;
5685           END IF;
5686 
5687          END IF;
5688 
5689       END IF;
5690 
5691     IF (p_delivery_info.organization_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.organization_code <> FND_API.G_MISS_CHAR) THEN
5692 
5693          IF (p_delivery_info.organization_code <> FND_API.G_MISS_CHAR) THEN
5694           p_delivery_info.organization_id := NULL;
5695        END IF;
5696          wsh_util_validate.validate_org(
5697          p_delivery_info.organization_id,
5698          p_delivery_info.organization_code,
5699          x_return_status);
5700 
5701          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5702             --
5703             IF l_debug_on THEN
5704                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5705                                                               x_return_status);
5706                 WSH_DEBUG_SV.pop(l_module_name);
5707             END IF;
5708             --
5709             RETURN;
5710        END IF;
5711     END IF;
5712 
5713     IF (nvl(p_delivery_info.delivery_type,'STANDARD') NOT IN ('STANDARD','CONSOLIDATED')) THEN
5714           p_delivery_info.delivery_type := 'STANDARD';
5715 
5716       END IF;
5717 
5718     IF (p_delivery_info.loading_order_flag <> FND_API.G_MISS_CHAR) OR (p_delivery_info.loading_order_desc <> FND_API.G_MISS_CHAR) THEN
5719 
5720          IF (p_delivery_info.loading_order_desc <> FND_API.G_MISS_CHAR) THEN
5721           p_delivery_info.loading_order_flag := NULL;
5722        END IF;
5723          wsh_util_validate.validate_loading_order(
5724          p_delivery_info.loading_order_flag,
5725          p_delivery_info.loading_order_desc,
5726          x_return_status);
5727 
5728          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5729             --
5730             IF l_debug_on THEN
5731                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5732                                                      x_return_status);
5733                 WSH_DEBUG_SV.pop(l_module_name);
5734             END IF;
5735             --
5736             RETURN;
5737        END IF;
5738       END IF;
5739 
5740     IF (p_delivery_info.initial_pickup_location_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.initial_pickup_location_code <> FND_API.G_MISS_CHAR) THEN
5741 
5742          IF (p_delivery_info.initial_pickup_location_code <> FND_API.G_MISS_CHAR) THEN
5743           p_delivery_info.initial_pickup_location_id := NULL;
5744        END IF;
5745          wsh_util_validate.validate_location(
5746          p_delivery_info.initial_pickup_location_id,
5747          p_delivery_info.initial_pickup_location_code,
5748          x_return_status);
5749 
5750          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5751             IF l_debug_on THEN
5752                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5753                                                               x_return_status);
5754                 WSH_DEBUG_SV.pop(l_module_name);
5755             END IF;
5756             --
5757             RETURN;
5758        END IF;
5759       END IF;
5760 
5761     IF (p_delivery_info.ultimate_dropoff_location_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.ultimate_dropoff_location_code <> FND_API.G_MISS_CHAR) THEN
5762 
5763          IF (p_delivery_info.ultimate_dropoff_location_code <> FND_API.G_MISS_CHAR) THEN
5764           p_delivery_info.ultimate_dropoff_location_id := NULL;
5765        END IF;
5766          wsh_util_validate.validate_location(
5767          p_delivery_info.ultimate_dropoff_location_id,
5768          p_delivery_info.ultimate_dropoff_location_code,
5769          x_return_status);
5770 
5771          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5772             IF l_debug_on THEN
5773                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5774                                                            x_return_status);
5775                 WSH_DEBUG_SV.pop(l_module_name);
5776             END IF;
5777             --
5778             RETURN;
5779        END IF;
5780       END IF;
5781 
5782     IF (p_delivery_info.intmed_ship_to_location_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.intmed_ship_to_location_code <> FND_API.G_MISS_CHAR) THEN
5783 
5784          IF (p_delivery_info.intmed_ship_to_location_code <> FND_API.G_MISS_CHAR) THEN
5785           p_delivery_info.intmed_ship_to_location_id := NULL;
5786        END IF;
5787          wsh_util_validate.validate_location(
5788          p_delivery_info.intmed_ship_to_location_id,
5789          p_delivery_info.intmed_ship_to_location_code,
5790          x_return_status);
5791 
5792          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5793             IF l_debug_on THEN
5794                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5795                                                            x_return_status);
5796                 WSH_DEBUG_SV.pop(l_module_name);
5797             END IF;
5798             --
5799             RETURN;
5800        END IF;
5801       END IF;
5802 
5803     IF (p_delivery_info.pooled_ship_to_location_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.pooled_ship_to_location_code <> FND_API.G_MISS_CHAR) THEN
5804 
5805          IF (p_delivery_info.pooled_ship_to_location_code <> FND_API.G_MISS_CHAR) THEN
5806           p_delivery_info.pooled_ship_to_location_id := NULL;
5807        END IF;
5808          wsh_util_validate.validate_location(
5809          p_delivery_info.pooled_ship_to_location_id,
5810          p_delivery_info.pooled_ship_to_location_code,
5811          x_return_status);
5812 
5813          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5814             --
5815             IF l_debug_on THEN
5816                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5817                                                            x_return_status);
5818                 WSH_DEBUG_SV.pop(l_module_name);
5819             END IF;
5820             --
5821             RETURN;
5822        END IF;
5823       END IF;
5824 
5825     IF (p_delivery_info.customer_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.customer_number <> FND_API.G_MISS_CHAR) THEN
5826 
5827          IF (p_delivery_info.customer_number <> FND_API.G_MISS_CHAR) THEN
5828           p_delivery_info.customer_id := NULL;
5829        END IF;
5830               wsh_util_validate.validate_customer(
5831               p_delivery_info.customer_id,
5832               p_delivery_info.customer_number,
5833               x_return_status);
5834           --
5835           IF l_debug_on THEN
5836             wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_customer',x_return_status);
5837           END IF;
5838           --
5839 
5840          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5841             --
5842             IF l_debug_on THEN
5843                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5844                                                            x_return_status);
5845                 WSH_DEBUG_SV.pop(l_module_name);
5846             END IF;
5847             --
5848             RETURN;
5849        END IF;
5850       END IF;
5851 
5852     -- Carrier ID is not validated as it is not used...Ship method is used instead.
5853 
5854     IF (p_delivery_info.ship_method_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.ship_method_name <> FND_API.G_MISS_CHAR) THEN
5855 
5856          IF (p_delivery_info.ship_method_code <> FND_API.G_MISS_CHAR) THEN
5857           p_delivery_info.ship_method_name := NULL;
5858        END IF;
5859          wsh_util_validate.validate_ship_method(
5860          p_delivery_info.ship_method_code,
5861          p_delivery_info.ship_method_name,
5862          x_return_status);
5863 
5864          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5865             --
5866             IF l_debug_on THEN
5867                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5868                                                            x_return_status);
5869                 WSH_DEBUG_SV.pop(l_module_name);
5870             END IF;
5871             --
5872             RETURN;
5873        END IF;
5874       END IF;
5875 
5876     IF (p_delivery_info.freight_terms_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.freight_terms_name <> FND_API.G_MISS_CHAR) THEN
5877 
5878          IF (p_delivery_info.freight_terms_name <> FND_API.G_MISS_CHAR) THEN
5879           p_delivery_info.freight_terms_name := NULL;
5880        END IF;
5881          wsh_util_validate.validate_freight_terms(
5882          p_delivery_info.freight_terms_code,
5883          p_delivery_info.freight_terms_name,
5884          x_return_status);
5885 
5886          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5887             --
5888             IF l_debug_on THEN
5889                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5890                                                            x_return_status);
5891                 WSH_DEBUG_SV.pop(l_module_name);
5892             END IF;
5893             --
5894             RETURN;
5895        END IF;
5896       END IF;
5897 
5898     IF (p_delivery_info.fob_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.fob_name <> FND_API.G_MISS_CHAR) THEN
5899 
5900          IF (p_delivery_info.fob_name <> FND_API.G_MISS_CHAR) THEN
5901           p_delivery_info.fob_code := NULL;
5902        END IF;
5903          wsh_util_validate.validate_fob(
5904          p_delivery_info.fob_code,
5905          p_delivery_info.fob_name,
5906          x_return_status);
5907 
5908          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5909             --
5910             IF l_debug_on THEN
5911                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5912                                                            x_return_status);
5913                 WSH_DEBUG_SV.pop(l_module_name);
5914             END IF;
5915             --
5916             RETURN;
5917        END IF;
5918       END IF;
5919 
5920     IF (p_delivery_info.fob_location_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.fob_location_code <> FND_API.G_MISS_CHAR) THEN
5921 
5922          IF (p_delivery_info.fob_location_code <> FND_API.G_MISS_CHAR) THEN
5923           p_delivery_info.fob_location_id := NULL;
5924        END IF;
5925          wsh_util_validate.validate_location(
5926          p_delivery_info.fob_location_id,
5927          p_delivery_info.fob_location_code,
5928          x_return_status);
5929 
5930          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5931             --
5932             IF l_debug_on THEN
5933                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5934                                                            x_return_status);
5935                 WSH_DEBUG_SV.pop(l_module_name);
5936             END IF;
5937             --
5938             RETURN;
5939        END IF;
5940       END IF;
5941 
5942     IF (p_delivery_info.weight_uom_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.weight_uom_desc <> FND_API.G_MISS_CHAR) THEN
5943 
5944          IF (p_delivery_info.weight_uom_desc <> FND_API.G_MISS_CHAR) THEN
5945           p_delivery_info.weight_uom_code := NULL;
5946        END IF;
5947 
5948          wsh_util_validate.validate_uom(
5949          'WEIGHT',
5950          p_delivery_info.organization_id,
5951          p_delivery_info.weight_uom_code,
5952          p_delivery_info.weight_uom_desc,
5953          x_return_status);
5954 
5955          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5956             IF l_debug_on THEN
5957                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5958                                                            x_return_status);
5959                 WSH_DEBUG_SV.pop(l_module_name);
5960             END IF;
5961             --
5962             RETURN;
5963        END IF;
5964       END IF;
5965 
5966     IF (p_delivery_info.volume_uom_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.volume_uom_desc <> FND_API.G_MISS_CHAR) THEN
5967 
5968          IF (p_delivery_info.volume_uom_desc <> FND_API.G_MISS_CHAR) THEN
5969           p_delivery_info.volume_uom_code := NULL;
5970        END IF;
5971          wsh_util_validate.validate_uom(
5972          'VOLUME',
5973          p_delivery_info.organization_id,
5974          p_delivery_info.volume_uom_code,
5975          p_delivery_info.volume_uom_desc,
5976          x_return_status);
5977 
5978          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5979             --
5980             IF l_debug_on THEN
5981                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
5982                                                            x_return_status);
5983                 WSH_DEBUG_SV.pop(l_module_name);
5984             END IF;
5985             --
5986             RETURN;
5987        END IF;
5988       END IF;
5989 
5990     IF (p_delivery_info.currency_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.currency_name <> FND_API.G_MISS_CHAR) THEN
5991 
5992          IF (p_delivery_info.currency_name <> FND_API.G_MISS_CHAR) THEN
5993           p_delivery_info.currency_code := NULL;
5994        END IF;
5995          --OTM R12, added parameter l_adjusted_amount
5996          wsh_util_validate.validate_currency(
5997             p_currency_code     => p_delivery_info.currency_code,
5998             p_currency_name     => p_delivery_info.currency_name,
5999             p_amount            => NULL,
6000             x_return_status     => x_return_status,
6001             x_adjusted_amount   => l_adjusted_amount);
6002 
6003          IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6004             IF l_debug_on THEN
6005                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
6006                                                            x_return_status);
6007                 WSH_DEBUG_SV.pop(l_module_name);
6008             END IF;
6009             --
6010             RETURN;
6011        END IF;
6012       END IF;
6013 
6014       --
6015       -- manifesting code changes
6016       -- disallow update of ship method or its components if the delivery is assigned to trip.
6017       --
6018 
6019       IF (p_delivery_info.ship_method_code <> FND_API.G_MISS_CHAR) OR (p_delivery_info.ship_method_code IS NULL) OR
6020          (p_delivery_info.carrier_id <> FND_API.G_MISS_NUM) OR (p_delivery_info.carrier_id IS NULL) OR
6021          (p_delivery_info.service_level  <> FND_API.G_MISS_CHAR) OR (p_delivery_info.service_level IS NULL) OR
6022          (p_delivery_info.mode_of_transport <> FND_API.G_MISS_CHAR) OR (p_delivery_info.mode_of_transport IS NULL) THEN
6023 
6024           l_assigned_to_trip := WSH_Delivery_Validations.Del_Assigned_To_Trip
6025                                          (p_delivery_id =>  p_delivery_info.delivery_id,
6026                                           x_return_status => x_return_status);
6027 
6028           IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6029             --
6030             IF l_debug_on THEN
6031                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
6032                                                            x_return_status);
6033                 WSH_DEBUG_SV.pop(l_module_name);
6034             END IF;
6035             --
6036             RETURN;
6037 
6038           ELSIF l_assigned_to_trip = 'Y' THEN
6039              FND_MESSAGE.SET_NAME('WSH','WSH_DEL_ASSIGNED_ERROR');
6040              --
6041              IF l_debug_on THEN
6042                  WSH_DEBUG_SV.log(l_module_name,'WSH_DEL_ASSIGNED_ERROR');
6043              END IF;
6044              --
6045              FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_info.delivery_id));
6046              x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6047              wsh_util_core.add_message(x_return_status,l_module_name);
6048              IF l_debug_on THEN
6049                 WSH_DEBUG_SV.log(l_module_name,'x_return_status',
6050                                                            x_return_status);
6051                  WSH_DEBUG_SV.pop(l_module_name);
6052              END IF;
6053              --
6054              RETURN;
6055           END IF;
6056        END IF;
6057 
6058   --
6059   IF l_debug_on THEN
6060       WSH_DEBUG_SV.pop(l_module_name);
6061   END IF;
6062   --
6063   EXCEPTION
6064        WHEN others THEN
6065           wsh_util_core.default_handler('WSH_DELIVERIES_GRP.Validate_Delivery',l_module_name);
6066           x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6067           --
6068           IF l_debug_on THEN
6069               WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6070               WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6071           END IF;
6072           --
6073   END Validate_Delivery;
6074 
6075 -- The below procedue will be obsoleted after patchset I.
6076 
6077   PROCEDURE map_grp_to_pvt(
6078     p_pub_rec IN delivery_pub_rec_type,
6079     x_pvt_rec OUT NOCOPY  wsh_new_deliveries_pvt.delivery_rec_type,
6080     x_return_status OUT NOCOPY  VARCHAR2)
6081   IS
6082     --
6083 l_debug_on BOOLEAN;
6084     l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'MAP_GRP_TO_PVT';
6085 
6086   BEGIN
6087     --
6088     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6089     --
6090     IF l_debug_on IS NULL
6091     THEN
6092         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6093     END IF;
6094     --
6095     IF l_debug_on THEN
6096       WSH_DEBUG_SV.push(l_module_name);
6097     END IF;
6098     x_return_status := wsh_util_core.g_ret_sts_success;
6099     --
6100     x_pvt_rec.DELIVERY_ID     := p_pub_rec.DELIVERY_ID;
6101     x_pvt_rec.NAME        := p_pub_rec.NAME;
6102     x_pvt_rec.DELIVERY_TYPE     := p_pub_rec.DELIVERY_TYPE;
6103     x_pvt_rec.LOADING_SEQUENCE      := p_pub_rec.LOADING_SEQUENCE;
6104     x_pvt_rec.LOADING_ORDER_FLAG    := p_pub_rec.LOADING_ORDER_FLAG;
6105     x_pvt_rec.LOADING_ORDER_DESC    := p_pub_rec.LOADING_ORDER_DESC;
6106     x_pvt_rec.INITIAL_PICKUP_DATE   := p_pub_rec.INITIAL_PICKUP_DATE;
6107     x_pvt_rec.INITIAL_PICKUP_LOCATION_ID  := p_pub_rec.INITIAL_PICKUP_LOCATION_ID;
6108     x_pvt_rec.INITIAL_PICKUP_LOCATION_CODE  := p_pub_rec.INITIAL_PICKUP_LOCATION_CODE;
6109     x_pvt_rec.ORGANIZATION_ID     := p_pub_rec.ORGANIZATION_ID;
6110     x_pvt_rec.ORGANIZATION_CODE     := p_pub_rec.ORGANIZATION_CODE;
6111     x_pvt_rec.ULTIMATE_DROPOFF_LOCATION_ID  := p_pub_rec.ULTIMATE_DROPOFF_LOCATION_ID;
6112     x_pvt_rec.ULTIMATE_DROPOFF_LOCATION_CODE  := p_pub_rec.ULTIMATE_DROPOFF_LOCATION_CODE;
6113     x_pvt_rec.ULTIMATE_DROPOFF_DATE   := p_pub_rec.ULTIMATE_DROPOFF_DATE;
6114     x_pvt_rec.CUSTOMER_ID     := p_pub_rec.CUSTOMER_ID;
6115     x_pvt_rec.CUSTOMER_NUMBER     := p_pub_rec.CUSTOMER_NUMBER;
6116     x_pvt_rec.INTMED_SHIP_TO_LOCATION_ID  := p_pub_rec.INTMED_SHIP_TO_LOCATION_ID;
6117     x_pvt_rec.INTMED_SHIP_TO_LOCATION_CODE  := p_pub_rec.INTMED_SHIP_TO_LOCATION_CODE;
6118     x_pvt_rec.POOLED_SHIP_TO_LOCATION_ID  := p_pub_rec.POOLED_SHIP_TO_LOCATION_ID;
6119     x_pvt_rec.POOLED_SHIP_TO_LOCATION_CODE  := p_pub_rec.POOLED_SHIP_TO_LOCATION_CODE;
6120     x_pvt_rec.CARRIER_ID      := p_pub_rec.CARRIER_ID;
6121     x_pvt_rec.CARRIER_CODE      := p_pub_rec.CARRIER_CODE;
6122     x_pvt_rec.SHIP_METHOD_CODE      := p_pub_rec.SHIP_METHOD_CODE;
6123     x_pvt_rec.SHIP_METHOD_NAME      := p_pub_rec.SHIP_METHOD_NAME;
6124     x_pvt_rec.FREIGHT_TERMS_CODE    := p_pub_rec.FREIGHT_TERMS_CODE;
6125     x_pvt_rec.FREIGHT_TERMS_NAME    := p_pub_rec.FREIGHT_TERMS_NAME;
6126     x_pvt_rec.FOB_CODE        := p_pub_rec.FOB_CODE;
6127     x_pvt_rec.FOB_NAME        := p_pub_rec.FOB_NAME;
6128     x_pvt_rec.FOB_LOCATION_ID     := p_pub_rec.FOB_LOCATION_ID;
6129     x_pvt_rec.FOB_LOCATION_CODE     := p_pub_rec.FOB_LOCATION_CODE;
6130     x_pvt_rec.WAYBILL       := p_pub_rec.WAYBILL;
6131     x_pvt_rec.DOCK_CODE       := p_pub_rec.DOCK_CODE;
6132     x_pvt_rec.ACCEPTANCE_FLAG     := p_pub_rec.ACCEPTANCE_FLAG;
6133     x_pvt_rec.ACCEPTED_BY     := p_pub_rec.ACCEPTED_BY;
6134     x_pvt_rec.ACCEPTED_DATE     := p_pub_rec.ACCEPTED_DATE;
6135     x_pvt_rec.ACKNOWLEDGED_BY     := p_pub_rec.ACKNOWLEDGED_BY;
6136     x_pvt_rec.CONFIRMED_BY      := p_pub_rec.CONFIRMED_BY;
6137     x_pvt_rec.CONFIRM_DATE      := p_pub_rec.CONFIRM_DATE;
6138     x_pvt_rec.ASN_DATE_SENT     := p_pub_rec.ASN_DATE_SENT;
6139     x_pvt_rec.ASN_STATUS_CODE     := p_pub_rec.ASN_STATUS_CODE;
6140     x_pvt_rec.ASN_SEQ_NUMBER      := p_pub_rec.ASN_SEQ_NUMBER;
6141     x_pvt_rec.GROSS_WEIGHT      := p_pub_rec.GROSS_WEIGHT;
6142     x_pvt_rec.NET_WEIGHT      := p_pub_rec.NET_WEIGHT;
6143     x_pvt_rec.WEIGHT_UOM_CODE     := p_pub_rec.WEIGHT_UOM_CODE;
6144     x_pvt_rec.WEIGHT_UOM_DESC     := p_pub_rec.WEIGHT_UOM_DESC;
6145     x_pvt_rec.VOLUME        := p_pub_rec.VOLUME;
6146     x_pvt_rec.VOLUME_UOM_CODE     := p_pub_rec.VOLUME_UOM_CODE;
6147     x_pvt_rec.VOLUME_UOM_DESC     := p_pub_rec.VOLUME_UOM_DESC;
6148     x_pvt_rec.ADDITIONAL_SHIPMENT_INFO    := p_pub_rec.ADDITIONAL_SHIPMENT_INFO;
6149     x_pvt_rec.CURRENCY_CODE     := p_pub_rec.CURRENCY_CODE;
6150     x_pvt_rec.CURRENCY_NAME     := p_pub_rec.CURRENCY_NAME;
6151     x_pvt_rec.ATTRIBUTE_CATEGORY    := p_pub_rec.ATTRIBUTE_CATEGORY;
6152     x_pvt_rec.ATTRIBUTE1      := p_pub_rec.ATTRIBUTE1;
6153     x_pvt_rec.ATTRIBUTE2      := p_pub_rec.ATTRIBUTE2;
6154     x_pvt_rec.ATTRIBUTE3      := p_pub_rec.ATTRIBUTE3;
6155     x_pvt_rec.ATTRIBUTE4      := p_pub_rec.ATTRIBUTE4;
6156     x_pvt_rec.ATTRIBUTE5      := p_pub_rec.ATTRIBUTE5;
6157     x_pvt_rec.ATTRIBUTE6      := p_pub_rec.ATTRIBUTE6;
6158     x_pvt_rec.ATTRIBUTE7      := p_pub_rec.ATTRIBUTE7;
6159     x_pvt_rec.ATTRIBUTE8      := p_pub_rec.ATTRIBUTE8;
6160     x_pvt_rec.ATTRIBUTE9      := p_pub_rec.ATTRIBUTE9;
6161     x_pvt_rec.ATTRIBUTE10     := p_pub_rec.ATTRIBUTE10;
6162     x_pvt_rec.ATTRIBUTE11     := p_pub_rec.ATTRIBUTE11;
6163     x_pvt_rec.ATTRIBUTE12     := p_pub_rec.ATTRIBUTE12;
6164     x_pvt_rec.ATTRIBUTE13     := p_pub_rec.ATTRIBUTE13;
6165     x_pvt_rec.ATTRIBUTE14     := p_pub_rec.ATTRIBUTE14;
6166     x_pvt_rec.ATTRIBUTE15     := p_pub_rec.ATTRIBUTE15;
6167     x_pvt_rec.TP_ATTRIBUTE_CATEGORY   := p_pub_rec.TP_ATTRIBUTE_CATEGORY;
6168     x_pvt_rec.TP_ATTRIBUTE1     := p_pub_rec.TP_ATTRIBUTE1;
6169     x_pvt_rec.TP_ATTRIBUTE2     := p_pub_rec.TP_ATTRIBUTE2;
6170     x_pvt_rec.TP_ATTRIBUTE3     := p_pub_rec.TP_ATTRIBUTE3;
6171     x_pvt_rec.TP_ATTRIBUTE4     := p_pub_rec.TP_ATTRIBUTE4;
6172     x_pvt_rec.TP_ATTRIBUTE5     := p_pub_rec.TP_ATTRIBUTE5;
6173     x_pvt_rec.TP_ATTRIBUTE6     := p_pub_rec.TP_ATTRIBUTE6;
6174     x_pvt_rec.TP_ATTRIBUTE7     := p_pub_rec.TP_ATTRIBUTE7;
6175     x_pvt_rec.TP_ATTRIBUTE8     := p_pub_rec.TP_ATTRIBUTE8;
6176     x_pvt_rec.TP_ATTRIBUTE9     := p_pub_rec.TP_ATTRIBUTE9;
6177     x_pvt_rec.TP_ATTRIBUTE10      := p_pub_rec.TP_ATTRIBUTE10;
6178     x_pvt_rec.TP_ATTRIBUTE11      := p_pub_rec.TP_ATTRIBUTE11;
6179     x_pvt_rec.TP_ATTRIBUTE12      := p_pub_rec.TP_ATTRIBUTE12;
6180     x_pvt_rec.TP_ATTRIBUTE13      := p_pub_rec.TP_ATTRIBUTE13;
6181     x_pvt_rec.TP_ATTRIBUTE14      := p_pub_rec.TP_ATTRIBUTE14;
6182     x_pvt_rec.TP_ATTRIBUTE15      := p_pub_rec.TP_ATTRIBUTE15;
6183     x_pvt_rec.GLOBAL_ATTRIBUTE_CATEGORY   := p_pub_rec.GLOBAL_ATTRIBUTE_CATEGORY;
6184     x_pvt_rec.GLOBAL_ATTRIBUTE1     := p_pub_rec.GLOBAL_ATTRIBUTE1;
6185     x_pvt_rec.GLOBAL_ATTRIBUTE2     := p_pub_rec.GLOBAL_ATTRIBUTE2;
6186     x_pvt_rec.GLOBAL_ATTRIBUTE3     := p_pub_rec.GLOBAL_ATTRIBUTE3;
6187     x_pvt_rec.GLOBAL_ATTRIBUTE4     := p_pub_rec.GLOBAL_ATTRIBUTE4;
6188     x_pvt_rec.GLOBAL_ATTRIBUTE5     := p_pub_rec.GLOBAL_ATTRIBUTE5;
6189     x_pvt_rec.GLOBAL_ATTRIBUTE6     := p_pub_rec.GLOBAL_ATTRIBUTE6;
6190     x_pvt_rec.GLOBAL_ATTRIBUTE7     := p_pub_rec.GLOBAL_ATTRIBUTE7;
6191     x_pvt_rec.GLOBAL_ATTRIBUTE8     := p_pub_rec.GLOBAL_ATTRIBUTE8;
6192     x_pvt_rec.GLOBAL_ATTRIBUTE9     := p_pub_rec.GLOBAL_ATTRIBUTE9;
6193     x_pvt_rec.GLOBAL_ATTRIBUTE10    := p_pub_rec.GLOBAL_ATTRIBUTE10;
6194     x_pvt_rec.GLOBAL_ATTRIBUTE11    := p_pub_rec.GLOBAL_ATTRIBUTE11;
6195     x_pvt_rec.GLOBAL_ATTRIBUTE12    := p_pub_rec.GLOBAL_ATTRIBUTE12;
6196     x_pvt_rec.GLOBAL_ATTRIBUTE13    := p_pub_rec.GLOBAL_ATTRIBUTE13;
6197     x_pvt_rec.GLOBAL_ATTRIBUTE14    := p_pub_rec.GLOBAL_ATTRIBUTE14;
6198     x_pvt_rec.GLOBAL_ATTRIBUTE15    := p_pub_rec.GLOBAL_ATTRIBUTE15;
6199     x_pvt_rec.GLOBAL_ATTRIBUTE16    := p_pub_rec.GLOBAL_ATTRIBUTE16;
6200     x_pvt_rec.GLOBAL_ATTRIBUTE17    := p_pub_rec.GLOBAL_ATTRIBUTE17;
6201     x_pvt_rec.GLOBAL_ATTRIBUTE18    := p_pub_rec.GLOBAL_ATTRIBUTE18;
6202     x_pvt_rec.GLOBAL_ATTRIBUTE19    := p_pub_rec.GLOBAL_ATTRIBUTE19;
6203     x_pvt_rec.GLOBAL_ATTRIBUTE20    := p_pub_rec.GLOBAL_ATTRIBUTE20;
6204     x_pvt_rec.CREATION_DATE     := p_pub_rec.CREATION_DATE;
6205     x_pvt_rec.CREATED_BY      := p_pub_rec.CREATED_BY;
6206     x_pvt_rec.LAST_UPDATE_DATE      := p_pub_rec.LAST_UPDATE_DATE;
6207     x_pvt_rec.LAST_UPDATED_BY     := p_pub_rec.LAST_UPDATED_BY;
6208     x_pvt_rec.LAST_UPDATE_LOGIN     := p_pub_rec.LAST_UPDATE_LOGIN;
6209     x_pvt_rec.PROGRAM_APPLICATION_ID    := p_pub_rec.PROGRAM_APPLICATION_ID;
6210     x_pvt_rec.PROGRAM_ID      := p_pub_rec.PROGRAM_ID;
6211     x_pvt_rec.PROGRAM_UPDATE_DATE   := p_pub_rec.PROGRAM_UPDATE_DATE;
6212     x_pvt_rec.REQUEST_ID      := p_pub_rec.REQUEST_ID;
6213     x_pvt_rec.COD_AMOUNT      := p_pub_rec.COD_AMOUNT;
6214     x_pvt_rec.COD_CURRENCY_CODE     := p_pub_rec.COD_CURRENCY_CODE;
6215     x_pvt_rec.COD_REMIT_TO      := p_pub_rec.COD_REMIT_TO;
6216     x_pvt_rec.COD_CHARGE_PAID_BY    := p_pub_rec.COD_CHARGE_PAID_BY;
6217     x_pvt_rec.PROBLEM_CONTACT_REFERENCE   := p_pub_rec.PROBLEM_CONTACT_REFERENCE;
6218     x_pvt_rec.PORT_OF_LOADING     := p_pub_rec.PORT_OF_LOADING;
6219     x_pvt_rec.PORT_OF_DISCHARGE     := p_pub_rec.PORT_OF_DISCHARGE;
6220     x_pvt_rec.FTZ_NUMBER      := p_pub_rec.FTZ_NUMBER;
6221     x_pvt_rec.ROUTED_EXPORT_TXN     := p_pub_rec.ROUTED_EXPORT_TXN;
6222     x_pvt_rec.ENTRY_NUMBER      := p_pub_rec.ENTRY_NUMBER;
6223     x_pvt_rec.ROUTING_INSTRUCTIONS    := p_pub_rec.ROUTING_INSTRUCTIONS;
6224     x_pvt_rec.IN_BOND_CODE      := p_pub_rec.IN_BOND_CODE;
6225     x_pvt_rec.SHIPPING_MARKS      := p_pub_rec.SHIPPING_MARKS;
6226     x_pvt_rec.SERVICE_LEVEL     := p_pub_rec.SERVICE_LEVEL;
6227     x_pvt_rec.MODE_OF_TRANSPORT     := p_pub_rec.MODE_OF_TRANSPORT;
6228     x_pvt_rec.ASSIGNED_TO_FTE_TRIPS   := p_pub_rec.ASSIGNED_TO_FTE_TRIPS;
6229     x_pvt_rec.PLANNED_FLAG              := FND_API.G_MISS_CHAR;
6230     x_pvt_rec.STATUS_CODE               := FND_API.G_MISS_CHAR;
6231     x_pvt_rec.BATCH_ID                  := FND_API.G_MISS_NUM;
6232     x_pvt_rec.HASH_VALUE                := FND_API.G_MISS_NUM;
6233     x_pvt_rec.SOURCE_HEADER_ID          := FND_API.G_MISS_NUM;
6234     --
6235     IF l_debug_on THEN
6236       WSH_DEBUG_SV.pop(l_module_name);
6237     END IF;
6238   EXCEPTION
6239     WHEN OTHERS THEN
6240       WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_DELIVERIES_GRP.map_grp_pvt',l_module_name);
6241       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6242       --
6243       IF l_debug_on THEN
6244         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6245         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6246       END IF;
6247       --
6248   END map_grp_to_pvt;
6249 
6250 -- The below procedue will be obsoleted after patchset I.
6251 --========================================================================
6252 -- PROCEDURE : Create_Update_Delivery         PUBLIC
6253 --
6254 -- PARAMETERS: p_api_version_number    known api versionerror buffer
6255 --             p_init_msg_list         FND_API.G_TRUE to reset list
6256 --             x_return_status         return status
6257 --             x_msg_count             number of messages in the list
6258 --             x_msg_data              text of messages
6259 --         p_delivery_info         Attributes for the delivery entity
6260 --             p_delivery_name         Delivery name for update
6261 --              x_delivery_id - delivery_Id of new delivery,
6262 --             x_name - Name of delivery
6263 -- VERSION   : current version         1.0
6264 --             initial version         1.0
6265 -- COMMENT   : Creates or updates a record in wsh_new_deliveries table
6266 --             with information specified in p_delivery_info
6267 --========================================================================
6268 
6269   PROCEDURE Create_Update_Delivery(
6270     p_api_version_number     IN   NUMBER,
6271     p_init_msg_list          IN   VARCHAR2,
6272     x_return_status          OUT NOCOPY   VARCHAR2,
6273     x_msg_count              OUT NOCOPY   NUMBER,
6274     x_msg_data               OUT NOCOPY   VARCHAR2,
6275     p_action_code            IN   VARCHAR2,
6276     p_delivery_info           IN OUT NOCOPY  Delivery_Pub_Rec_Type,
6277     p_delivery_name          IN   VARCHAR2 DEFAULT FND_API.G_MISS_CHAR,
6278     x_delivery_id            OUT NOCOPY   NUMBER,
6279     x_name                   OUT NOCOPY   VARCHAR2)
6280 
6281   IS
6282 
6283   l_api_version_number CONSTANT NUMBER := 1.0;
6284   l_api_name           CONSTANT VARCHAR2(30):= 'Create_Update_Delivery';
6285 
6286   -- <insert here your local variables declaration>
6287   l_message VARCHAR2(50);
6288   l_num_errors NUMBER;
6289   l_num_warnings NUMBER;
6290   l_rec_attr_tab      wsh_new_deliveries_pvt.delivery_attr_tbl_type;
6291   l_delivery_in_rec   Del_In_Rec_Type;
6292   l_del_out_rec_tab   Del_Out_Tbl_Type;
6293   l_return_status     VARCHAR2(1);
6294   l_commit            VARCHAR2(100) := FND_API.G_FALSE;
6295     --
6296 l_debug_on BOOLEAN;
6297     --
6298     l_module_name CONSTANT   VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_UPDATE_DELIVERY';
6299 
6300 
6301   BEGIN
6302     --
6303     --
6304     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6305     --
6306     IF l_debug_on IS NULL
6307     THEN
6308         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6309     END IF;
6310     --
6311     IF l_debug_on THEN
6312       wsh_debug_sv.push(l_module_name);
6313     END IF;
6314   -- Standard call to check for call compatibility
6315     IF NOT FND_API.Compatible_API_Call
6316       ( l_api_version_number
6317       , p_api_version_number
6318       , l_api_name
6319       , G_PKG_NAME
6320       )
6321     THEN
6322       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6323     END IF;
6324 
6325     --  Initialize message stack if required
6326     IF FND_API.to_Boolean(p_init_msg_list) THEN
6327       FND_MSG_PUB.initialize;
6328     END IF;
6329 
6330 
6331     IF (p_action_code = 'UPDATE') THEN
6332       IF (p_delivery_name IS NOT NULL) OR (p_delivery_name <> FND_API.G_MISS_CHAR) THEN
6333         p_delivery_info.name := p_delivery_name;
6334       END IF;
6335     ELSIF ( p_action_code <> 'CREATE' ) THEN
6336       FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_ACTION_CODE');
6337       FND_MESSAGE.SET_TOKEN('ACTION_CODE',p_action_code);
6338       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6339       wsh_util_core.add_message(x_return_status);
6340     END IF;
6341     --
6342     map_grp_to_pvt(
6343       p_pub_rec  => p_delivery_info,
6344       x_pvt_rec  => l_rec_attr_tab(1),
6345       x_return_status => l_return_status);
6346     --
6347     IF l_debug_on THEN
6348       wsh_debug_sv.log(l_module_name,'Return Status After Calling map_grp_to_pvt',l_return_status);
6349     END IF;
6350     --
6351     wsh_util_core.api_post_call(
6352       p_return_status => l_return_status,
6353       x_num_errors    => l_num_errors,
6354       x_num_warnings  => l_num_warnings);
6355     --
6356     l_delivery_in_rec.action_code := p_action_code;
6357     l_delivery_in_rec.caller := 'WSH_GRP';
6358     wsh_interface_grp.create_update_delivery(
6359       p_api_version_number     =>  p_api_version_number,
6360       p_init_msg_list          =>  p_init_msg_list,
6361       p_commit                 =>  l_commit,
6362       p_in_rec                 =>  l_delivery_in_rec,
6363       p_rec_attr_tab           =>  l_rec_attr_tab,
6364       x_del_out_rec_tab        =>  l_del_out_rec_tab,
6365       x_return_status          =>  l_return_status,
6366       x_msg_count              =>  x_msg_count,
6367       x_msg_data               =>  x_msg_data);
6368     --
6369     IF l_debug_on THEN
6370       wsh_debug_sv.log(l_module_name,'Return Status After Calling create_update_delivery',l_return_status);
6371     END IF;
6372     --
6373     wsh_util_core.api_post_call(
6374       p_return_status => l_return_status,
6375       x_num_errors    => l_num_errors,
6376       x_num_warnings  => l_num_warnings,
6377       p_msg_data      => x_msg_data);
6378     --
6379     IF l_del_out_rec_tab.COUNT <> 0 THEN
6380       --
6381       x_delivery_id    := l_del_out_rec_tab(l_del_out_rec_tab.COUNT).delivery_id;
6382       x_name           := l_del_out_rec_tab(l_del_out_rec_tab.COUNT).name;
6383       --
6384     END IF;
6385     --
6386     IF l_num_warnings > 0 THEN
6387       x_return_status := wsh_util_core.g_ret_sts_warning;
6388     ELSE
6389       x_return_status := wsh_util_core.g_ret_sts_success; --bug 2398628
6390     END IF;
6391     --
6392     FND_MSG_PUB.Count_And_Get
6393      ( p_count => x_msg_count
6394      , p_data  => x_msg_data
6395      ,  p_encoded => FND_API.G_FALSE
6396      );
6397     --
6398     IF l_debug_on THEN
6399       WSH_DEBUG_SV.pop(l_module_name);
6400     END IF;
6401     --
6402   EXCEPTION
6403      WHEN FND_API.G_EXC_ERROR THEN
6404         x_return_status := FND_API.G_RET_STS_ERROR;
6405         --  Get message count and data
6406         FND_MSG_PUB.Count_And_Get
6407         ( p_count => x_msg_count
6408         , p_data  => x_msg_data
6409         , p_encoded => FND_API.G_FALSE
6410         );
6411       --
6412       IF l_debug_on THEN
6413         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_EXCEP_LEVEL);
6414         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
6415       END IF;
6416       --
6417      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6418         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6419         --  Get message count and data
6420         FND_MSG_PUB.Count_And_Get
6421         ( p_count => x_msg_count
6422         , p_data  => x_msg_data
6423         , p_encoded => FND_API.G_FALSE
6424         );
6425       --
6426       IF l_debug_on THEN
6427         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6428         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6429       END IF;
6430       --
6431      WHEN OTHERS THEN
6432         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6433         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6434         THEN
6435            FND_MSG_PUB.Add_Exc_Msg
6436            ( G_PKG_NAME
6437            , '_x_'
6438            );
6439         END IF;
6440         --  Get message count and data
6441         FND_MSG_PUB.Count_And_Get
6442         ( p_count => x_msg_count
6443         , p_data  => x_msg_data
6444         , p_encoded => FND_API.G_FALSE
6445         );
6446       --
6447       IF l_debug_on THEN
6448         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6449         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6450       END IF;
6451       --
6452   END Create_Update_Delivery;
6453 
6454 -- The below procedue will be obsoleted after patchset I.
6455 --========================================================================
6456 -- PROCEDURE : Delivery_Action         PUBLIC
6457 --
6458 -- PARAMETERS: p_api_version_number    known api version error number
6459 --             p_init_msg_list         FND_API.G_TRUE to reset list
6460 --             x_return_status         return status
6461 --             x_msg_count             number of messages in the list
6462 --             x_msg_data              text of messages
6463 --             p_action_code           Delivery action code. Valid action codes are
6464 --                                     'PLAN','UNPLAN',
6465 --                                     'PACK','CONFIRM','RE-OPEN','IN-TRANSIT','CLOSE'
6466 --                                     'ASSIGN-TRIP','UNASSIGN-TRIP','AUTOCREATE-TRIP'
6467 --                                     'WT-VOL',
6468 --                                     'PICK-RELEASE',
6469 --                                     'DELETE'
6470 --             p_delivery_id           Delivery identifier
6471 --             p_delivery_name         Delivery name
6472 --             p_asg_trip_id           Trip identifier for assignment
6473 --             p_asg_trip_name         Trip name for assignment
6474 --             p_asg_pickup_stop_id    Stop id for pickup assignment
6475 --             p_asg_pickup_loc_id     Stop location for pickup assignment
6476 --             p_asg_pickup_loc_code   Stop location code for pickup assignment
6477 --             p_asg_pickup_arr_date   Stop location arrival date for pickup assignment
6478 --             p_asg_pickup_dep_date   Stop location departure date for pickup assignment
6479 --             p_asg_dropoff_stop_id   Stop id for dropoff assignment
6480 --             p_asg_dropoff_loc_id    Stop location for dropoff assignment
6481 --             p_asg_dropoff_loc_code  Stop location code for dropoff assignment
6482 --             p_asg_dropoff_arr_date  Stop location arrival date for dropoff assignment
6483 --             p_asg_dropoff_dep_date  Stop location departure date for dropoff assignment
6484 --             p_sc_action_flag        Ship Confirm option - 'S', 'B', 'T', 'A', 'C'
6485 --             p_sc_intransit_flag     Ship Confirm set in-transit flag
6486 --             p_sc_close_trip_flag    Ship Confirm close trip flag
6487 --             p_sc_create_bol_flag    Ship Confirm create BOL flag
6488 --             p_sc_stage_del_flag     Ship Confirm create delivery for stage qnt flag
6489 --             p_sc_trip_ship_method   Ship Confirm trip ship method
6490 --             p_sc_actual_dep_date    Ship Confirm actual departure date
6491 --             p_sc_report_set_id      Ship Confirm report set id
6492 --             p_sc_report_set_name    Ship Confirm report set name
6493 --             p_wv_override_flag      Override flag for weight/volume calc
6494 --             x_trip_rows             Autocreated trip ids
6495 --
6496 -- VERSION   : current version         1.0
6497 --             initial version         1.0
6498 -- COMMENT   : This procedure is used to perform an action specified in p_action_code
6499 --             on an existing delivery identified by p_delivery_id/p_delivery_name.
6500 --========================================================================
6501   PROCEDURE Delivery_Action
6502   ( p_api_version_number     IN   NUMBER,
6503     p_init_msg_list          IN   VARCHAR2,
6504     x_return_status          OUT NOCOPY   VARCHAR2,
6505     x_msg_count              OUT NOCOPY   NUMBER,
6506     x_msg_data               OUT NOCOPY   VARCHAR2,
6507     p_action_code            IN   VARCHAR2,
6508     p_delivery_id            IN   NUMBER DEFAULT NULL,
6509     p_delivery_name          IN   VARCHAR2 DEFAULT NULL,
6510     p_asg_trip_id            IN   NUMBER DEFAULT NULL,
6511     p_asg_trip_name          IN   VARCHAR2 DEFAULT NULL,
6512     p_asg_pickup_stop_id     IN   NUMBER DEFAULT NULL,
6513     p_asg_pickup_loc_id      IN   NUMBER DEFAULT NULL,
6514     p_asg_pickup_stop_seq    IN   NUMBER DEFAULT NULL,
6515     p_asg_pickup_loc_code    IN   VARCHAR2 DEFAULT NULL,
6516     p_asg_pickup_arr_date    IN   DATE   DEFAULT NULL,
6517     p_asg_pickup_dep_date    IN   DATE   DEFAULT NULL,
6518     p_asg_dropoff_stop_id    IN   NUMBER DEFAULT NULL,
6519     p_asg_dropoff_loc_id     IN   NUMBER DEFAULT NULL,
6520     p_asg_dropoff_stop_seq   IN   NUMBER DEFAULT NULL,
6521     p_asg_dropoff_loc_code   IN   VARCHAR2 DEFAULT NULL,
6522     p_asg_dropoff_arr_date   IN   DATE   DEFAULT NULL,
6523     p_asg_dropoff_dep_date   IN   DATE   DEFAULT NULL,
6524     p_sc_action_flag         IN   VARCHAR2 DEFAULT 'S',
6525     p_sc_intransit_flag      IN   VARCHAR2 DEFAULT 'N',
6526     p_sc_close_trip_flag     IN   VARCHAR2 DEFAULT 'N',
6527     p_sc_create_bol_flag     IN   VARCHAR2 DEFAULT 'N',
6528     p_sc_stage_del_flag      IN   VARCHAR2 DEFAULT 'Y',
6529     p_sc_trip_ship_method    IN   VARCHAR2 DEFAULT NULL,
6530     p_sc_actual_dep_date     IN   DATE     DEFAULT NULL,
6531     p_sc_report_set_id       IN   NUMBER DEFAULT NULL,
6532     p_sc_report_set_name     IN   VARCHAR2 DEFAULT NULL,
6533     p_sc_defer_interface_flag IN  VARCHAR2 DEFAULT 'Y',
6534     p_sc_send_945_flag       IN   VARCHAR2 DEFAULT NULL,
6535     p_wv_override_flag       IN   VARCHAR2 DEFAULT 'N',
6536     x_trip_rows              OUT  NOCOPY WSH_UTIL_CORE.id_tab_type)
6537     --
6538   IS
6539     --
6540     l_api_version_number CONSTANT NUMBER := 1.0;
6541     l_api_name           CONSTANT VARCHAR2(30):= 'Delivery_Action';
6542     --
6543 l_debug_on BOOLEAN;
6544     --
6545     l_module_name CONSTANT   VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'DELIVERY_ACTION';
6546     --
6547     --
6548     l_action_prms wsh_deliveries_grp.action_parameters_rectype;
6549     l_del_action_out_rec wsh_deliveries_grp.Delivery_Action_Out_Rec_Type;
6550     l_delivery_id_tab    wsh_util_core.id_tab_type;
6551     --
6552     l_delivery_id  NUMBER := p_delivery_id;
6553     --
6554     l_num_errors   NUMBER := 0;
6555     l_num_warnings NUMBER := 0;
6556     l_commit            VARCHAR2(100) := FND_API.G_FALSE;
6557     --
6558   BEGIN
6559     --
6560     --
6561     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6562     --
6563     IF l_debug_on IS NULL
6564     THEN
6565         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6566     END IF;
6567     --
6568     IF l_debug_on THEN
6569       wsh_debug_sv.push(l_module_name);
6570     END IF;
6571     --
6572   -- Standard call to check for call compatibility
6573     IF NOT FND_API.Compatible_API_Call
6574       ( l_api_version_number
6575       , p_api_version_number
6576       , l_api_name
6577       , G_PKG_NAME
6578       )
6579     THEN
6580       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6581     END IF;
6582 
6583     --  Initialize message stack if required
6584     IF FND_API.to_Boolean(p_init_msg_list) THEN
6585       FND_MSG_PUB.initialize;
6586     END IF;
6587 
6588    wsh_util_validate.validate_delivery_name(
6589      p_delivery_id   => l_delivery_id,
6590      p_delivery_name => p_delivery_name,
6591      x_return_status => x_return_status);
6592     --
6593     IF l_debug_on THEN
6594       wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_delivery_name',x_return_status);
6595     END IF;
6596     --
6597     wsh_util_core.api_post_call(
6598       p_return_status => x_return_status,
6599       x_num_errors    => l_num_errors,
6600       x_num_warnings  => l_num_warnings);
6601     --
6602     l_action_prms.caller    := 'WSH_GRP';
6603     l_action_prms.action_code     := p_action_code;
6604     --
6605     -- initializing the action specific parameters
6606     l_action_prms.trip_id   := p_asg_trip_id;
6607     l_action_prms.trip_name   := p_asg_trip_name;
6608     l_action_prms.pickup_stop_id  := p_asg_pickup_stop_id;
6609     l_action_prms.pickup_loc_id   := p_asg_pickup_loc_id;
6610     l_action_prms.pickup_stop_seq := p_asg_pickup_stop_seq;
6611     l_action_prms.pickup_loc_code := p_asg_pickup_loc_code;
6612     l_action_prms.pickup_arr_date := p_asg_pickup_arr_date;
6613     l_action_prms.pickup_dep_date := p_asg_pickup_dep_date;
6614     l_action_prms.dropoff_stop_id := p_asg_dropoff_stop_id;
6615     l_action_prms.dropoff_loc_id  := p_asg_dropoff_loc_id;
6616     l_action_prms.dropoff_stop_seq  := p_asg_dropoff_stop_seq;
6617     l_action_prms.dropoff_loc_code  := p_asg_dropoff_loc_code;
6618     l_action_prms.dropoff_arr_date  := p_asg_dropoff_arr_date;
6619     l_action_prms.dropoff_dep_date  := p_asg_dropoff_dep_date;
6620     l_action_prms.action_flag     := p_sc_action_flag;
6621     l_action_prms.intransit_flag  := p_sc_intransit_flag;
6622     l_action_prms.close_trip_flag     := p_sc_close_trip_flag;
6623     l_action_prms.bill_of_lading_flag     := p_sc_create_bol_flag;
6624     l_action_prms.stage_del_flag      := p_sc_stage_del_flag;
6625     l_action_prms.ship_method_code    := p_sc_trip_ship_method;
6626     l_action_prms.actual_dep_date     := p_sc_actual_dep_date;
6627     l_action_prms.report_set_id   := p_sc_report_set_id;
6628     l_action_prms.report_set_name := p_sc_report_set_name;
6629     l_action_prms.defer_interface_flag  := p_sc_defer_interface_flag;
6630     l_action_prms.send_945_flag   := p_sc_send_945_flag;
6631     l_action_prms.override_flag   := p_wv_override_flag;
6632     --
6633     l_delivery_id_tab(1)    := l_delivery_id;
6634     --
6635     wsh_interface_grp.Delivery_Action(
6636       p_api_version_number     =>  p_api_version_number,
6637       p_init_msg_list          =>  p_init_msg_list,
6638       p_commit                 =>  l_commit,
6639       p_action_prms            =>  l_action_prms,
6640       p_delivery_id_tab        =>  l_delivery_id_tab,
6641       x_delivery_out_rec       =>  l_del_action_out_rec,
6642       x_return_status          =>  x_return_status,
6643       x_msg_count              =>  x_msg_count,
6644       x_msg_data               =>  x_msg_data);
6645     --
6646     IF l_debug_on THEN
6647       wsh_debug_sv.log(l_module_name,'Return Status After Calling Delivery_Action',x_return_status);
6648     END IF;
6649     --
6650     wsh_util_core.api_post_call(
6651       p_return_status => x_return_status,
6652       x_num_errors    => l_num_errors,
6653       x_num_warnings  => l_num_warnings,
6654       p_msg_data      => x_msg_data);
6655     --
6656     IF l_debug_on THEN
6657       wsh_debug_sv.log(l_module_name,'Number of Warnings is ',l_num_warnings);
6658       wsh_debug_sv.log(l_module_name,'Number of Errors is ',l_num_errors);
6659     END IF;
6660     --
6661     x_trip_rows      := l_del_action_out_rec.result_id_tab;
6662 
6663     --
6664     IF l_num_warnings > 0 THEN
6665       x_return_status := wsh_util_core.g_ret_sts_warning;
6666     ELSE
6667       x_return_status := wsh_util_core.g_ret_sts_success; --bug 2398628
6668     END IF;
6669     --
6670     FND_MSG_PUB.Count_And_Get
6671       ( p_count => x_msg_count
6672       , p_data  => x_msg_data
6673       , p_encoded => FND_API.G_FALSE
6674       );
6675     --
6676     IF l_debug_on THEN
6677       WSH_DEBUG_SV.pop(l_module_name);
6678     END IF;
6679     --
6680   EXCEPTION
6681      WHEN FND_API.G_EXC_ERROR THEN
6682         x_return_status := FND_API.G_RET_STS_ERROR;
6683         --  Get message count and data
6684         FND_MSG_PUB.Count_And_Get
6685         ( p_count => x_msg_count
6686         , p_data  => x_msg_data
6687         , p_encoded => FND_API.G_FALSE
6688         );
6689       --
6690       IF l_debug_on THEN
6691         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_EXCEP_LEVEL);
6692         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
6693       END IF;
6694       --
6695      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6696         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6697         --  Get message count and data
6698         FND_MSG_PUB.Count_And_Get
6699         ( p_count => x_msg_count
6700         , p_data  => x_msg_data
6701         , p_encoded => FND_API.G_FALSE
6702         );
6703       --
6704       IF l_debug_on THEN
6705         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6706         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6707       END IF;
6708       --
6709      WHEN OTHERS THEN
6710         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6711         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6712         THEN
6713            FND_MSG_PUB.Add_Exc_Msg
6714            ( G_PKG_NAME
6715            , '_x_'
6716            );
6717         END IF;
6718         --  Get message count and data
6719         FND_MSG_PUB.Count_And_Get
6720         ( p_count => x_msg_count
6721         , p_data  => x_msg_data
6722         , p_encoded => FND_API.G_FALSE
6723         );
6724       --
6725       IF l_debug_on THEN
6726         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6727         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6728       END IF;
6729       --
6730 
6731   END Delivery_Action;
6732 
6733 /*    ---------------------------------------------------------------------
6734     Procedure: Lock_Related_Entities
6735 
6736     Parameters:
6737 
6738     Description:  This procedure is the new API for locking the related entities
6739                   like STOP or TRIP, depending on the action.
6740 
6741     Created :   Patchset I
6742     ----------------------------------------------------------------------- */
6743 
6744 PROCEDURE Lock_Related_Entities(
6745          p_rec_attr_tab     IN  WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
6746          p_action_prms      IN  action_parameters_rectype,
6747          x_valid_ids_tab    OUT NOCOPY WSH_UTIL_CORE.ID_TAB_TYPE,
6748          x_return_status    OUT NOCOPY VARCHAR2
6749           ) IS
6750 
6751   l_index   NUMBER;
6752   l_stop_index NUMBER;
6753   l_stop_rows wsh_util_core.id_tab_type;
6754   l_min_stop_seq NUMBER;
6755   l_max_stop_seq NUMBER;
6756   l_stop_seq     NUMBER;
6757   l_trip_id      NUMBER;
6758   l_dlvy_name    VARCHAR2(30);
6759   k      NUMBER := 0;
6760 
6761   CURSOR c_delivery_leg_stops(p_delivery_id NUMBER) IS
6762   SELECT dg.pick_up_stop_id,
6763      pu_stop.status_code  pu_status,
6764    dg.drop_off_stop_id,
6765      do_stop.status_code  do_status
6766   FROM   wsh_delivery_legs dg,
6767      wsh_trip_stops pu_stop,
6768      wsh_trip_stops do_stop
6769   WHERE  dg.delivery_id = p_delivery_id
6770   AND pu_stop.stop_id = dg.pick_up_stop_id
6771   AND do_stop.stop_id = dg.drop_off_stop_id;
6772 
6773   CURSOR c_stop_info(p_stop_id NUMBER) IS
6774   SELECT stop_sequence_number, trip_id
6775   FROM wsh_trip_stops
6776   WHERE stop_id = p_stop_id;
6777   --
6778   CURSOR c_min_max_seq(p_trip_id NUMBER) IS
6779   SELECT min(stop_sequence_number), max(stop_sequence_number)
6780   FROM wsh_trip_stops
6781   WHERE trip_id = p_trip_id;
6782 
6783   l_debug_on BOOLEAN;
6784   --
6785   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'LOCK_RELATED_ENTITIES';
6786   --
6787 
6788 BEGIN
6789       --
6790       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6791       --
6792       IF l_debug_on IS NULL
6793       THEN
6794            l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6795       END IF;
6796         --
6797       x_return_status := wsh_util_core.g_ret_sts_success;
6798 
6799         IF l_debug_on THEN
6800             WSH_DEBUG_SV.push(l_module_name);
6801             --
6802             WSH_DEBUG_SV.log(l_module_name, 'Action Code', p_action_prms.action_code);
6803             WSH_DEBUG_SV.log(l_module_name,'Input Table count', p_rec_attr_tab.count);
6804         END IF;
6805 
6806      l_index := p_rec_attr_tab.first;
6807      while l_index is not null
6808      loop
6809      -- {
6810          BEGIN
6811             SAVEPOINT lock_rel_ent_loop;
6812             k := 0;
6813             l_stop_rows.delete;
6814 
6815             IF p_rec_attr_tab(l_index).name is null
6816             THEN
6817                l_dlvy_name := wsh_new_deliveries_pvt.get_name(p_rec_attr_tab(l_index).delivery_id);
6818             ELSE
6819                l_dlvy_name := p_rec_attr_tab(l_index).name;
6820             END IF;
6821 
6822             FOR c_leg_rec IN c_delivery_leg_stops(p_rec_attr_tab(l_index).delivery_id)
6823             LOOP
6824             -- {
6825                IF c_leg_rec.pu_status <> 'CL' THEN
6826                   k:=k+1;  l_stop_rows(k) := c_leg_rec.pick_up_stop_id;
6827                END IF;
6828                IF c_leg_rec.do_status <> 'CL' THEN
6829                   k:=k+1;  l_stop_rows(k) := c_leg_rec.drop_off_stop_id;
6830                END IF;
6831             -- }
6832             END LOOP;
6833 
6834             l_stop_index := l_stop_rows.first;
6835             WHILE l_stop_index IS NOT NULL
6836             LOOP
6837             -- {
6838                 IF l_debug_on THEN
6839                    wsh_debug_sv.log(l_module_name, 'call lock for stop', l_stop_rows(l_stop_index));
6840                 END IF;
6841                 -- First lock the stop
6842                 wsh_trip_stops_pvt.lock_trip_stop_no_compare(
6843                         p_stop_id => l_stop_rows(l_stop_index)
6844                     );
6845 
6846                 OPEN c_stop_info(l_stop_rows(l_stop_index));
6847                 FETCH c_stop_info
6848                 INTO l_stop_seq, l_trip_id;
6849                 CLOSE c_stop_info;
6850 
6851                 OPEN c_min_max_seq(l_trip_id);
6852                 FETCH c_min_max_seq
6853                 INTO  l_min_stop_seq, l_max_stop_seq;
6854                 CLOSE c_min_max_seq;
6855 
6856                 IF l_debug_on THEN
6857                       wsh_debug_sv.log(l_module_name, 'Min stop seq', l_min_stop_seq);
6858                       wsh_debug_sv.log(l_module_name, 'Max stop seq', l_max_stop_seq);
6859                       wsh_debug_sv.log(l_module_name, 'Stop seq', l_stop_seq);
6860                       wsh_debug_sv.log(l_module_name, 'Trip Id', l_trip_id);
6861                 END IF;
6862 
6863                 IF l_stop_seq = l_min_stop_seq
6864                      OR l_stop_seq = l_max_stop_seq
6865                 THEN
6866                 -- {
6867                       wsh_trips_pvt.lock_trip_no_compare(
6868                         p_trip_id => l_trip_id
6869                         );
6870                 -- }
6871                 END IF;
6872                 --
6873                 l_stop_index := l_stop_rows.next(l_stop_index);
6874             -- }
6875             END LOOP;
6876 
6877                x_valid_ids_tab(x_valid_ids_tab.COUNT + 1) := p_rec_attr_tab(l_index).delivery_id;
6878 
6879         EXCEPTION
6880           WHEN app_exception.application_exception or app_exception.record_lock_exception THEN
6881              ROLLBACK TO lock_rel_ent_loop;
6882              IF l_debug_on THEN
6883                 wsh_debug_sv.log(l_module_name, 'Could not obtain lock of stop or trip for delivery', p_rec_attr_tab(l_index).delivery_id);
6884              END IF;
6885              FND_MESSAGE.SET_NAME('WSH', 'WSH_DLVY_STOP_TRIP_LOCK');
6886              FND_MESSAGE.SET_TOKEN('DLVY_NAME',l_dlvy_name);
6887                wsh_util_core.add_message(wsh_util_core.g_ret_sts_error,l_module_name);
6888                       --
6889          --
6890           WHEN others THEN
6891              IF l_debug_on THEN
6892                 wsh_debug_sv.logmsg(l_module_name, 'When others in local block');
6893              END IF;
6894              ROLLBACK TO lock_rel_ent_loop;
6895              raise FND_API.G_EXC_UNEXPECTED_ERROR;
6896 
6897         END;
6898         l_index := p_rec_attr_tab.next(l_index);
6899      -- }
6900      end loop;
6901 
6902       IF l_debug_on THEN
6903          WSH_DEBUG_SV.log(l_module_name, 'Valid ids tab count', x_valid_ids_tab.count);
6904       END IF;
6905       -- Check for valid_ids_tab count.
6906       -- If valid ids count > 0 ,but less than the input table count, then return warning
6907       -- If valid ids count = 0, then return error
6908       IF p_rec_attr_tab.count > 0
6909       THEN
6910       -- {
6911              IF x_valid_ids_tab.count = 0
6912              THEN
6913              -- {
6914                  RAISE FND_API.G_EXC_ERROR;
6915              ELSIF x_valid_ids_tab.count >0
6916                AND x_valid_ids_tab.count < p_rec_attr_tab.count
6917              THEN
6918                  RAISE WSH_UTIL_CORE.G_EXC_WARNING;
6919              -- }
6920             END IF;
6921       -- }
6922       END IF;
6923 
6924       IF l_debug_on THEN
6925          WSH_DEBUG_SV.pop(l_module_name);
6926       END IF;
6927       --
6928 
6929 EXCEPTION
6930         WHEN FND_API.G_EXC_ERROR THEN
6931                 x_return_status := FND_API.G_RET_STS_ERROR ;
6932                   --
6933                   IF l_debug_on THEN
6934                       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6935                       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
6936                   END IF;
6937                   --
6938         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6939                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6940                   --
6941                   IF l_debug_on THEN
6942                       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6943                       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6944                   END IF;
6945                   --
6946         WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
6947              x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6948         --
6949         IF l_debug_on THEN
6950             WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6951            WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
6952        END IF;
6953 --
6954         WHEN OTHERS THEN
6955           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6956           WSH_UTIL_CORE.default_handler('WSH_DELIVERIES_GRP.Lock_Related_Entities');
6957           IF l_debug_on THEN
6958              WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6959              WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
6960           END IF;
6961 
6962     --
6963 
6964 END Lock_Related_Entities;
6965 
6966 --========================================================================
6967 -- PROCEDURE : Get_Delivery_Status    PUBLIC
6968 --
6969 -- PARAMETERS:
6970 --     p_api_version_number  known api version error number
6971 --     p_init_msg_list       FND_API.G_TRUE to reset list
6972 --     p_entity_type         either DELIVERY/DELIVERY DETAIL/LPN
6973 --     p_entity_id           either delivery_id/delivery_detail_id/lpn_id
6974 --     x_status_code         Status of delivery for the entity_type and
6975 --                           entity id passed
6976 --     x_return_status       return status
6977 --     x_msg_count           number of messages in the list
6978 --     x_msg_data            text of messages
6979 --========================================================================
6980 -- API added for bug 4632726
6981 PROCEDURE Get_Delivery_Status (
6982           p_api_version_number   IN   NUMBER,
6983           p_init_msg_list        IN   VARCHAR2,
6984           p_entity_type          IN   VARCHAR2,
6985           p_entity_id            IN   NUMBER,
6986           x_status_code          OUT NOCOPY   VARCHAR2,
6987           x_return_status        OUT NOCOPY   VARCHAR2,
6988           x_msg_count            OUT NOCOPY   NUMBER,
6989           x_msg_data             OUT NOCOPY   VARCHAR2 )
6990 IS
6991     --
6992     l_api_version_number CONSTANT NUMBER := 1.0;
6993     l_api_name           CONSTANT VARCHAR2(30):= 'Get_Delivery_Status';
6994 
6995     l_num_errors         NUMBER;
6996     l_num_warnings       NUMBER;
6997     l_return_status      VARCHAR2(1);
6998     --
6999     l_debug_on BOOLEAN;
7000     --
7001     l_module_name CONSTANT   VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_STATUS';
7002     --
7003 BEGIN
7004     --
7005     --
7006     l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7007     --
7008     IF l_debug_on IS NULL
7009     THEN
7010         l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7011     END IF;
7012     --
7013     IF l_debug_on THEN
7014         wsh_debug_sv.push(l_module_name);
7015         wsh_debug_sv.log (l_module_name, 'Entity Type', p_entity_type );
7016         wsh_debug_sv.log (l_module_name, 'Entity Id', p_entity_id );
7017     END IF;
7018     --
7019     -- Standard call to check for call compatibility
7020     IF NOT FND_API.Compatible_API_Call
7021       ( l_api_version_number
7022       , p_api_version_number
7023       , l_api_name
7024       , G_PKG_NAME
7025       )
7026     THEN
7027       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7028     END IF;
7029     --
7030     IF FND_API.to_Boolean(p_init_msg_list) THEN
7031       FND_MSG_PUB.initialize;
7032     END IF;
7033     --
7034 
7035     IF ( p_entity_type is null or p_entity_id is null ) THEN
7036       FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
7037       IF ( p_entity_type is null ) THEN
7038           FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'P_ENTITY_TYPE');
7039       ELSIF ( p_entity_id is null ) THEN
7040           FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'P_ENTITY_ID');
7041       END IF;
7042       x_return_status := wsh_util_core.g_ret_sts_error;
7043       wsh_util_core.add_message(x_return_status, l_module_name);
7044       RAISE FND_API.G_EXC_ERROR;
7045     END IF;
7046 
7047     x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7048 
7049     --
7050     IF l_debug_on THEN
7051         wsh_debug_sv.logmsg(l_module_name, 'Calling Get_Delivery_Status', WSH_DEBUG_SV.C_PROC_LEVEL);
7052     END IF;
7053     --
7054     WSH_UTIL_CORE.Get_Delivery_Status (
7055                   p_entity_type    =>  p_entity_type,
7056                   p_entity_id      =>  p_entity_id,
7057                   x_status_code    =>  x_status_code,
7058                   x_return_status  =>  l_return_status );
7059     --
7060     IF l_debug_on THEN
7061         wsh_debug_sv.log(l_module_name, 'Return Status after Calling Get_Delivery_Status', l_return_status);
7062     END IF;
7063     --
7064     WSH_UTIL_CORE.api_post_call(
7065       p_return_status     => l_return_status,
7066       x_num_warnings      => l_num_warnings,
7067       x_num_errors        => l_num_errors);
7068     --
7069 
7070     --
7071     IF l_debug_on THEN
7072         wsh_debug_sv.log(l_module_name, 'Status Code', x_status_code);
7073         wsh_debug_sv.pop (l_module_name);
7074     END IF;
7075     --
7076 EXCEPTION
7077     WHEN FND_API.G_EXC_ERROR THEN
7078         x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7079         FND_MSG_PUB.Count_And_Get (
7080             p_count  => x_msg_count,
7081             p_data  =>  x_msg_data,
7082             p_encoded => FND_API.G_FALSE );
7083         --
7084         IF l_debug_on THEN
7085             WSH_DEBUG_SV.logmsg(l_module_name, 'FND_API.G_EXC_ERROR exception has occured', WSH_DEBUG_SV.C_EXCEP_LEVEL);
7086             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
7087         END IF;
7088         --
7089     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7090         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7091         FND_MSG_PUB.Count_And_Get (
7092             p_count  => x_msg_count,
7093             p_data  =>  x_msg_data,
7094             p_encoded => FND_API.G_FALSE );
7095         --
7096         IF l_debug_on THEN
7097             WSH_DEBUG_SV.logmsg(l_module_name, 'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured', WSH_DEBUG_SV.C_EXCEP_LEVEL);
7098             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7099         END IF;
7100         --
7101     WHEN OTHERS THEN
7102         x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7103         wsh_util_core.default_handler('WSH_DELIVERY_VALIDATIONS.Get_Delivery_Status');
7104         --
7105         IF l_debug_on THEN
7106             WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM, WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7107             WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:OTHERS');
7108         END IF;
7109         --
7110 END Get_Delivery_Status;
7111 
7112 
7113 
7114 
7115 END WSH_DELIVERIES_GRP;