DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_DELIVERIES_GRP

Source


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