1 PACKAGE BODY WSH_OTM_OUTBOUND as
2 /* $Header: WSHOTOIB.pls 120.8.12010000.3 2008/11/10 06:42:36 anvarshn ship $ */
3
4 --===================
5 -- CONSTANTS
6 --===================
7 -- declare debug variables
8 l_debug_on BOOLEAN;
9 l_debugfile varchar2(2000);
10
11
12
13 PROCEDURE GET_DEL_DETAILS( p_all_details IN WSH_OTM_DET_TAB,
14 p_delivery_id IN NUMBER,
15 x_del_details IN OUT NOCOPY WSH_OTM_DET_TAB) IS
16
17 l_sub_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DEL_DETAILS';
18
19 BEGIN
20 -- Debug
21 --
22 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
23 --
24 IF l_debug_on IS NULL
25 THEN
26 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
27 END IF;
28 --
29 -- Debug Statements
30 --
31 IF l_debug_on THEN
32 WSH_DEBUG_SV.push(l_sub_module_name);
33 END IF;
34
35 FOR i in 1..p_all_details.COUNT LOOP
36 --{
37 IF p_all_details(i).delivery_id = p_delivery_id THEN
38 x_del_details.extend;
39 x_del_details(x_del_details.COUNT) := p_all_details(i);
40 END IF;
41 IF x_del_details.COUNT >0 AND p_all_details(i).delivery_id <> p_delivery_id THEN
42 EXIT;
43 END IF;
44 --}
45 END LOOP;
46
47 IF l_debug_on THEN
48 WSH_DEBUG_SV.pop(l_sub_module_name);
49 END IF;
50
51 EXCEPTION
52
53 WHEN FND_API.G_EXC_ERROR THEN
54 IF l_debug_on THEN
55 WSH_DEBUG_SV.log(l_sub_module_name,' FND_API.G_EXC_ERROR',sqlerrm);
56 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
57 END IF;
58 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
59 IF l_debug_on THEN
60 WSH_DEBUG_SV.log(l_sub_module_name,' FND_API.G_EXC_UNEXPECTED_ERROR',sqlerrm);
61 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
62 END IF;
63 WHEN OTHERS THEN
64 wsh_util_core.default_handler('WSH_OTM_OUTBOUND.GET_DEL_DETAILS',l_sub_module_name);
65 IF l_debug_on THEN
66 WSH_DEBUG_SV.log(l_sub_module_name,' OTHERS',sqlerrm);
67 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:OTHERS');
68 END IF;
69 END;
70
71
72
73 -- +==========================================================================================+
74 -- Procedure : GET_TRIP_OBJECTS
75 -- Description:
76 -- Procedure to get the Trip, Trip Stop, delivery,delivery details and Lpn info
77 -- in the form of objects (WSH_OTM_TRIP_TAB)
78
79 -- Inputs/Outputs:
80 -- p_trip_id_tab - id table (list of Trip Ids)
81 -- p_user_id - User Id to set the context
82 -- p_resp_id - Resp Id to set the context
83 -- p_resp_appl_id - Resp Appl Id to set the context
84 -- Output:
85 -- x_domain_name - domain name
86 -- x_otm_user_name - otm User Name
87 -- x_otm_pwd - otm Password
88 -- x_otm_pwd - otm Password
89 -- x_trip_tab - Nested Table which contains the trip info
90 -- x_error_trip_id_tab - List of ids for which the data could not be retrieved
91 -- x_return_status
92 -- +==========================================================================================+
93
94 PROCEDURE GET_TRIP_OBJECTS(p_trip_id_tab IN OUT NOCOPY WSH_OTM_ID_TAB,
95 p_user_id IN NUMBER,
96 p_resp_id IN NUMBER,
97 p_resp_appl_id IN NUMBER,
98 x_domain_name OUT NOCOPY VARCHAR2,
99 x_otm_user_name OUT NOCOPY VARCHAR2,
100 x_otm_pwd OUT NOCOPY VARCHAR2,
101 x_server_tz_code OUT NOCOPY VARCHAR2,
102 x_trip_tab OUT NOCOPY WSH_OTM_TRIP_TAB,
103 x_dlv_tab OUT NOCOPY WSH_OTM_DLV_TAB,
104 x_error_trip_id_tab OUT NOCOPY WSH_OTM_ID_TAB,
105 x_return_status OUT NOCOPY VARCHAR2)IS
106
107 -- Declare local variables
108
109 l_sub_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_TRIP_OBJECTS';
110
111 l_trip_tab WSH_OTM_TRIP_TAB;
112 l_stops_tab WSH_OTM_STOP_TAB;
113 --lpn_tab WSH_OTM_LPN_TAB;
114 l_dlv_tab WSH_OTM_DLV_TAB;
115 l_dlv_ids WSH_OTM_ID_TAB;
116 l_vol NUMBER;
117 l_gross_weight NUMBER;
118 l_net_weight NUMBER;
119 l_total_gross_wt NUMBER;
120 l_total_net_wt NUMBER;
121 l_total_vol NUMBER;
122 l_delivery_id NUMBER;
123 l_vol_uom VARCHAR2(150);
124 l_weight_uom VARCHAR2(150);
125 x_base_wt_uom VARCHAR2(150);
126 x_base_vol_uom VARCHAR2(150);
127 l_lpn_count NUMBER;
128 l_stop_details WSH_OTM_STOP_DET_TAB;
129 l_new_stop_details WSH_OTM_STOP_DET_TAB;
130 l_lpns WSH_OTM_LPN_TAB;
131 l_pick_up_flag VARCHAR2(1);
132 l_drop_off_flag VARCHAR2(1);
133 l_trips_sql VARCHAR2(2000);
134 l_trip_obj WSH_OTM_TRIP_OBJ;
135 l_stop_obj WSH_OTM_STOP_OBJ;
136 c_trips WSH_UTIL_CORE.RefCurType;
137 bind_col_tab WSH_UTIL_CORE.tbl_varchar;
138 i NUMBER;
139 i1 NUMBER;
140 l_lpn_tab WSH_OTM_LPN_TAB;
141 l_organization_id NUMBER;
142 l_return_status VARCHAr2(10);
143 l_all_dlv_tab WSH_OTM_DLV_TAB;
144 l_total_freight_cost NUMBER;
145 l_currency_code VARCHAR2(15);
146 l_sob_id NUMBER;
147 l_car_type VARCHAR2(5) := 'CAR-';
148
149 -- Define cursor to get the deliveries picked at a stop
150 CURSOR get_deliveries_picked (p_stop_id NUMBER) IS
151 select delivery_id
152 from
153 wsh_delivery_legs
154 where pick_up_stop_id = p_stop_id;
155
156 -- Define cursor to get the deliveries dropped at a stop
157 CURSOR get_deliveries_dropped (p_stop_id NUMBER) IS
158 select delivery_id
159 from
160 wsh_delivery_legs
161 where drop_off_stop_id = p_stop_id;
162
163 --bug# 6497991 (begin) : Update tms_interface_flag for error trip stops back to 'ASR'.
164 CURSOR get_trip_stops(c_trip_id NUMBER) IS
165 SELECT stop_id,'ASR' tms_iface_new_status
166 FROM wsh_trip_stops
167 WHERE trip_id = c_trip_id;
168
169 x_error_dlv_id_tab WSH_OTM_ID_TAB;
170 l_upd_trip_stops WSH_UTIL_CORE.ID_TAB_TYPE;
171 l_upd_tms_interface_flags WSH_UTIL_CORE.COLUMN_TAB_TYPE;
172 l_old_trip_id NUMBER;
173 l_del_trip_rec NUMBER := NULL;
174 l_num_error NUMBER;
175 --bug# 6497991 (end)
176
177 TYPE dlv_in_tab_type is TABLE Of wsh_otm_dlv_obj INDEX BY BINARY_INTEGER;
178 dlv_in_tab dlv_in_tab_type;
179
180 GET_DELIVERY_OBJECTS_FALIED EXCEPTION;
181 GET_DEAFULT_UOMS_FALIED EXCEPTION;
182 GET_FREIGHT_COST_ERROR EXCEPTION;
183
184 BEGIN
185
186
187 -- Initialize API return status to success
188
189 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
190
191 -- Debug
192 --
193 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
194 --
195 IF l_debug_on IS NULL
196 THEN
197 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
198 END IF;
199 --
200 -- Debug Statements
201 --
202 IF l_debug_on THEN
203 WSH_DEBUG_SV.push(l_sub_module_name);
204 END IF;
205
206 -- Setting the apps context
207 FND_GLOBAL.apps_initialize(user_id => p_user_id,
208 resp_id =>p_resp_id,
209 resp_appl_id => p_resp_appl_id);
210
211 IF l_debug_on THEN
212 WSH_DEBUG_SV.log(l_sub_module_name,'Building the dymanic sql to fetch Trips');
213 END IF;
214
215 --dbms_output.put_line('Building the sql');
216 -- Bug 6732184: Added null values for dock_dook_xid, start_time and end_time of WSH_OTM_STOP_OBJ
217 l_trips_sql :=
218 'select '||
219 'WSH_OTM_TRIP_OBJ(WT.TP_PLAN_NAME, '||
220 'NAME ,'||
221 'null,'||
222 '''RC'','||
223 'WT.carrier_id,'||
224 'null,'||
225 'WT.MODE_OF_TRANSPORT,'||
226 'null,'||
227 'null,'|| --weight_uom
228 'null,'|| --Volume
229 'null,'|| -- volume_uom
230 'null,'|| --lpn count
231 'WT.FREIGHT_TERMS_CODE,'||
232 'null,'|| -- stop count
233 'null,'|| -- release count
234 'null,'||
235 'null,'||
236 'WT.VEHICLE_ITEM_ID,'||
237 'WT.VEHICLE_NUM_PREFIX,'||
238 'WT.VEHICLE_NUMBER,'||
239 'null,'||
240 'WT.VEHICLE_ORGANIZATION_ID,'||
241 'null,'||
242 'WT.SEAL_CODE,'||
243 'sequence_number,'|| -- master_bol_number
244 'WT.PLANNED_FLAG,'||
245 'WT.ROUTING_INSTRUCTIONS,'||
246 'null, '||-- gross weight
247 'null, '||-- net_weight
248 'wt.BOOKING_NUMBER , '||
249 'null,'||
250 'WT.TRIP_ID,'||
251 'nvl(WT.IGNORE_FOR_PLANNING,''N''),'||
252 'WT.OPERATOR,'||
253 'null,'|| -- Manual Freight cost
254 'null,'|| -- Currency Code
255 'null, '||
256 '''TRIP_ID'','||
257 '''MBOL_NUMBER'','||
258 '''PLANNED_TRIP'','||
259 '''MANUAL_FREIGHT_COSTS'','||
260 '''MAN_FREIGHT_COST_CUR'','||
261 '''OPERATOR'','||
262 '''ROUTING_INSTR'','||
263 'null,'|| -- Stops
264 'null ,null,null,null,null), '||
265 'WSH_OTM_STOP_OBJ(wts.STOP_ID , '||
266 'WTS.STOP_SEQUENCE_NUMBER,null,null,'||
267 'TO_CHAR(WTS.PLANNED_ARRIVAL_DATE,''YYYYMMDDHH24MISS''),'||
268 'TO_CHAR(WTS.PLANNED_DEPARTURE_DATE,''YYYYMMDDHH24MISS''),'||
269 'TO_CHAR(WTS.ACTUAL_ARRIVAL_DATE,''YYYYMMDDHH24MISS''),'||
270 'TO_CHAR(WTS.ACTUAL_DEPARTURE_DATE,''YYYYMMDDHH24MISS''),'||
271 -- 'TO_CHAR(WTS.PLANNED_ARRIVAL_DATE,''DD-MON-YYYY HH24:MI:SS''),'||
272 -- 'TO_CHAR(WTS.PLANNED_DEPARTURE_DATE,''DD-MON-YYYY HH24:MI:SS''),'||
273 -- 'TO_CHAR(WTS.ACTUAL_ARRIVAL_DATE,''DD-MON-YYYY HH24:MI:SS''),'||
274 -- 'TO_CHAR(WTS.ACTUAL_DEPARTURE_DATE,''DD-MON-YYYY HH24:MI:SS''),'||
275 'WTS.loading_end_datetime - WTS.loading_start_datetime,'||
276 'WTS.DEPARTURE_SEAL_CODE,''DEPARTURE_SEAL_CODE'', null, null, null, null, null), '||
277 'nvl(WTS.DEPARTURE_GROSS_WEIGHT,0),'||
278 'nvl(WTS.DEPARTURE_NET_WEIGHT,0),'||
279 'nvl(WTS.DEPARTURE_VOLUME,0), '||
280 'WTS.WEIGHT_UOM_CODE,'||
281 'WTS.VOLUME_UOM_CODE '||
282 ' from wsh_trips wt , wsh_document_instances wdi, wsh_trip_stops wts '||
283 ' where wt.trip_id = wts.trip_id '||
284 ' and wdi.entity_name(+) = ''WSH_TRIPS'''||
285 ' and wdi.entity_id(+) = wt.trip_id '||
286 ' and wts.physical_stop_id is null '||
287 ' and wts.tms_interface_flag = ''ASP'''||
288 ' and wt.trip_id in (';
289
290
291 FOR i in 1..p_trip_id_tab.COUNT LOOP
292 --{
293 if i <> 1 then
294 l_trips_sql := l_trips_sql || ',';
295 end if;
296 l_trips_sql := l_trips_sql || ':' || i;
297 bind_col_tab(bind_col_tab.COUNT+1) := to_char(p_trip_id_tab(i));
298 --}
299 END LOOP;
300 l_trips_sql := l_trips_sql || ')';
301 l_trips_sql := l_trips_sql || ' ORDER BY WT.TRIP_ID,WTS.STOP_SEQUENCE_NUMBER'; --bug#5975661 : order by sequence num.
302
303 i:=1;
304
305 WSH_UTIL_CORE.OpenDynamicCursor(c_trips, l_trips_sql, bind_col_tab);
306 x_trip_tab := WSH_OTM_TRIP_TAB();
307 l_trip_tab := WSH_OTM_TRIP_TAB();
308 l_stops_tab := WSH_OTM_STOP_TAB();
309 l_stop_details := WSH_OTM_STOP_DET_TAB();
310 l_all_dlv_tab := WSH_OTM_DLV_TAB();
311 -- Bug 6497991: Populating error trips
312 x_error_trip_id_tab := WSH_OTM_ID_TAB();
313 l_old_trip_id := -1;
314 -- Bug 6497991:end
315 LOOP
316 --{
317 -- Bug 6497991: The Defined exception for a trip should not stop processing of other trips
318 BEGIN
319 --{
320 FETCH c_trips INTO l_trip_obj,l_stop_obj,l_gross_weight,l_net_weight, l_vol, l_weight_uom, l_vol_uom;
321 EXIT WHEN (c_trips%NOTFOUND);
322 IF ( l_old_trip_id <> l_trip_obj.trip_id ) THEN
323 --{
324 l_old_trip_id := l_trip_obj.trip_id;
325 l_trip_tab.extend;
326 l_trip_tab(l_trip_tab.COUNT) := l_trip_obj;
327 l_trip_tab(l_trip_tab.COUNT).shipment_stops := WSH_OTM_STOP_TAB();
328
329 IF l_debug_on
330 THEN
331 WSH_DEBUG_SV.log(l_sub_module_name,'Fetch Trip Id', l_trip_obj.trip_id);
332 END IF;
333
334
335 -- Get the OrganizationId of Trip
336 l_organization_id := WSH_UTIL_CORE.GET_TRIP_ORGANIZATION_ID(l_trip_obj.trip_id);
337 IF l_debug_on
338 THEN
339 WSH_DEBUG_SV.log(l_sub_module_name,' Organization Id after calling GET_TRIP_ORGANIZATION_ID ' ,
340 l_organization_id);
341 END IF;
342 --If Vehicle_organization_id is null then take the trip Organization_id
343 IF l_trip_tab(l_trip_tab.COUNT).EQUIPMENT_GROUP_XID IS NULL THEN
344 l_trip_tab(l_trip_tab.COUNT).EQUIPMENT_GROUP_XID := l_organization_id;
345 END IF;
346
347
348 -- Get the Default UOMS based on the Organization Id
349 wsh_wv_utils.get_default_uoms(l_organization_id, x_base_wt_uom, x_base_vol_uom, x_return_status);
350 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
351 --{
352 -- Bug 6497991: Deleting the trip record before raising exception
353 IF l_debug_on THEN
354 WSH_DEBUG_SV.log(l_sub_module_name,'failed in get_default_uoms' ,x_return_status);
355 END IF;
356 l_del_trip_rec := l_trip_tab(l_trip_tab.COUNT).trip_id;
357 x_error_trip_id_tab.extend;
358 x_error_trip_id_tab(x_error_trip_id_tab.COUNT) := l_trip_tab(l_trip_tab.COUNT).trip_id;
359 l_trip_tab.TRIM;
360 raise GET_DEAFULT_UOMS_FALIED;
361 --}
362 END IF;
363 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
364 p_uom=>x_base_wt_uom,
365 x_uom=>l_trip_tab(l_trip_tab.COUNT).WEIGHT_UOM_XID ,
366 x_return_status=>l_return_status);
367
368 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
369 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
370 --{
371 IF l_debug_on THEN
372 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
373 END IF;
374 -- Bug 6497991: Deleting the trip record before raising exception
375 l_del_trip_rec := l_trip_tab(l_trip_tab.COUNT).trip_id;
376 x_error_trip_id_tab.extend;
377 x_error_trip_id_tab(x_error_trip_id_tab.COUNT) := l_trip_tab(l_trip_tab.COUNT).trip_id;
378 l_trip_tab.TRIM;
379 raise FND_API.G_EXC_ERROR;
380 --}
381 END IF;
382
383 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
384 p_uom=>x_base_vol_uom,
385 x_uom=>l_trip_tab(l_trip_tab.COUNT).VOLUME_UOM_XID ,
386 x_return_status=>l_return_status);
387
388 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
389 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
390 IF l_debug_on THEN
391 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
392 END IF;
393 -- Bug 6497991: Deleting the trip record before raising exception
394 --l_trip_tab.delete(l_trip_tab.COUNT);
395 l_del_trip_rec := l_trip_tab(l_trip_tab.COUNT).trip_id;
396 x_error_trip_id_tab.extend;
397 x_error_trip_id_tab(x_error_trip_id_tab.COUNT) := l_trip_tab(l_trip_tab.COUNT).trip_id;
398 l_trip_tab.TRIM;
399 raise FND_API.G_EXC_ERROR;
400 END IF;
401
402 l_total_gross_wt := 0;
403 l_total_net_wt := 0;
404 l_total_vol := 0;
405 --}
406 END IF;
407
408 --Bug 6497991: Need to add stop details ONLY IF the trip is not having any error.
409 IF (NVL(l_del_trip_rec,-1) <> l_trip_obj.trip_id) THEN
410 l_trip_tab(l_trip_tab.COUNT).shipment_stops.extend;
411 l_trip_tab(l_trip_tab.COUNT).shipment_stops(l_trip_tab(l_trip_tab.COUNT).shipment_stops.COUNT) := l_stop_obj;
412
413 IF x_base_wt_uom <> l_weight_uom THEN
414 --{
415 l_total_gross_wt := l_total_gross_wt + WSH_WV_UTILS.CONVERT_UOM(l_weight_uom,
416 x_base_wt_uom,
417 l_gross_weight,null);
418 l_total_net_wt := l_total_net_wt + WSH_WV_UTILS.CONVERT_UOM(l_weight_uom,
419 x_base_wt_uom,
420 l_net_weight,null);
421 --}
422 ELSE
423 --{
424 l_total_gross_wt := l_total_gross_wt + l_gross_weight;
425 l_total_net_wt := l_total_net_wt + l_net_weight;
426 --}
427 END IF;
428
429 IF x_base_vol_uom <> l_vol_uom THEN
430 l_total_vol := l_total_vol + WSH_WV_UTILS.CONVERT_UOM(l_vol_uom,
431 x_base_vol_uom,
432 l_vol,null);
433 ELSE
434 l_total_vol := l_total_vol + l_vol;
435 END IF;
436
437 l_trip_tab(l_trip_tab.COUNT).GROSS_WEIGHT := l_total_gross_wt;
438 l_trip_tab(l_trip_tab.COUNT).NET_WEIGHT := l_total_net_wt;
439 l_trip_tab(l_trip_tab.COUNT).VOLUME := l_total_vol;
440 END IF;
441
442 EXCEPTION
443 WHEN GET_DEAFULT_UOMS_FALIED THEN
444 l_num_error := l_num_error + 1;
445 IF l_debug_on THEN
446 WSH_DEBUG_SV.log(l_sub_module_name,' GET_DEAFULT_UOMS_FALIED',sqlerrm);
447 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:GET_DEAFULT_UOMS_FALIED');
448 END IF;
449
450 WHEN FND_API.G_EXC_ERROR THEN
451 l_num_error := l_num_error + 1;
452 IF l_debug_on THEN
453 WSH_DEBUG_SV.log(l_sub_module_name,' FND_API.G_EXC_ERROR',sqlerrm);
454 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
455 END IF;
456
457 END;
458 --}
459 END LOOP;
460
461 IF l_debug_on THEN
462 WSH_DEBUG_SV.log(l_sub_module_name,'Number of Trips Fetched' , l_trip_tab.COUNT);
463 FOR i in 1..l_trip_tab.COUNT LOOP
464 WSH_DEBUG_SV.log(l_sub_module_name,'Fetched Trips' , l_trip_tab(i).trip_id);
465 END LOOP;
466 END IF;
467
468 IF l_trip_tab.COUNT >0 THEN
469 --{
470 FOR i in 1..l_trip_tab.COUNT LOOP
471 --{
472 --bug 6497991 Added iF l_trip_tab.EXISTS(i): if trip errors in this loop.
473 IF l_trip_tab.EXISTS(i) THEN
474 BEGIN
475 --{
476 IF l_debug_on THEN
477 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Trip with Id ' , l_trip_tab(i).trip_id);
478 END IF;
479
480 l_dlv_ids := WSH_OTM_ID_TAB();
481 l_stops_tab := l_trip_tab(i).shipment_stops;
482
483
484
485 IF l_trip_tab(i).ignore_for_planning = 'Y' THEN
486 l_trip_tab(i).SHIPMENT_XID := 'WSH-' || l_trip_tab(i).TRIP_ID ;
487 l_trip_tab(i).STOP_COUNT := l_stops_tab.COUNT;
488 ELSE
489 l_trip_tab(i).SERVICE_PROVIDER_XID := '';
490 l_trip_tab(i).TRANSPORT_MODE_XID := '';
491 l_trip_tab(i).PAYMENT_CODE_XID := '';
492 l_trip_tab(i).BOOKING_NUMBER := '';
493 END IF;
494
495
496 IF l_trip_tab(i).SERVICE_PROVIDER_XID IS NOT NULL THEN
497 l_trip_tab(i).SERVICE_PROVIDER_XID := l_car_type || l_trip_tab(i).SERVICE_PROVIDER_XID;
498 END IF;
499
500 IF l_trip_tab(i).EQUIPMENT_XID IS NOT NULL THEN
501 l_trip_tab(i).EQUIPMENT_XID := wsh_util_core.get_item_name(
502 p_item_id =>to_number(l_trip_tab(i).EQUIPMENT_XID),
503 p_organization_id =>l_trip_tab(i).EQUIPMENT_GROUP_XID);
504 END IF;
505
506
507 -- Get the curreny code from GL_SETS_OF_BOOKS
508 l_sob_id := FND_PROFILE.VALUE('GL_SET_OF_BKS_ID');
509 SELECT currency_code INTO l_currency_code
510 FROM GL_SETS_OF_BOOKS
511 WHERE set_of_books_id = l_sob_id;
512
513 WSH_FREIGHT_COSTS_PVT.Get_Trip_Manual_Freight_Cost(l_trip_tab(i).TRIP_ID,
514 l_currency_code,
515 l_total_freight_cost,
516 l_return_status);
517
518 IF l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
519 --{
520 -- Bug 6497991: Deleting the trip record before raising exception
521 IF l_debug_on THEN
522 WSH_DEBUG_SV.log(l_sub_module_name,'Get_Trip_Manual_Freight_Cost Failed');
523 END IF;
524 x_error_trip_id_tab.extend;
525 x_error_trip_id_tab(x_error_trip_id_tab.COUNT) := l_trip_tab(i).trip_id;
526 l_trip_tab.delete(i);
527 raise GET_FREIGHT_COST_ERROR;
528 ELSIF l_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
529 x_return_status:=l_return_status;
530 --}
531 END IF;
532
533 l_trip_tab(i).MANUAL_FREIGHT_COSTS := l_total_freight_cost;
534 l_trip_tab(i).CURRENCY_CODE := l_currency_code;
535
536
537
538 FOR i1 in 1..l_stops_tab.COUNT LOOP
539 --{
540
541 IF l_debug_on THEN
542 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Stop with Id ' , l_stops_tab(i1).STOP_LOCATION_XID);
543 END IF;
544
545 l_stop_details := WSH_OTM_STOP_DET_TAB();
546
547
548
549 OPEN get_deliveries_picked(l_stops_tab(i1).STOP_LOCATION_XID);
550 LOOP
551 --{
552 fetch get_deliveries_picked into l_delivery_id;
553 EXIT WHEN (get_deliveries_picked%NOTFOUND);
554 IF l_debug_on THEN
555 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery being Picked up ' , l_delivery_id);
556 END IF;
557 l_dlv_ids.extend;
558 l_dlv_ids(l_dlv_ids.COUNT) := l_delivery_id;
559 -- Pick Up Stop
560 l_pick_up_flag := 'Y';
561 l_stop_details.extend;
562 l_stop_details(l_stop_details.COUNT) := WSH_OTM_STOP_DET_OBJ('P',l_delivery_id);
563 --}
564 END LOOP;
565
566 OPEN get_deliveries_dropped(l_stops_tab(i1).STOP_LOCATION_XID);
567 LOOP
568 --{
569 fetch get_deliveries_dropped into l_delivery_id;
570 EXIT WHEN (get_deliveries_dropped%NOTFOUND);
571 IF l_debug_on THEN
572 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery being Dropped off ' , l_delivery_id);
573 END IF;
574
575 -- Drop Off Stop
576 l_drop_off_flag := 'Y';
577 l_stop_details.extend;
578 l_stop_details(l_stop_details.COUNT) := WSH_OTM_STOP_DET_OBJ('D',l_delivery_id);
579 --}
580 END LOOP;
581
582
583 IF l_trip_tab(i).IGNORE_FOR_PLANNING = 'N' THEN
584 l_stops_tab(i1).stop_duration := null;
585 END IF;
586
587 --bug#5975661: Changing the stop sequence numbers for non planned trips as OTM expects sequence
588 -- numbers starting from 1 (instead of stop sequence number (WTS.STOP_SEQUENCE_NUMBER)).
589 IF l_trip_tab(i).IGNORE_FOR_PLANNING = 'Y' THEN
590 l_stops_tab(i1).stop_sequence_number := i1;
591 END IF;
592 --bug#597566:end
593 -- Drop off Stop
594 IF l_drop_off_flag = 'Y' THEN
595 --{
596 l_stops_tab(i1).stop_duration := null;
597 IF l_trip_tab(i).IGNORE_FOR_PLANNING = 'Y' THEN
598 l_stops_tab(i1).ACTUAL_ARRIVAL_TIME := nvl(l_stops_tab(i1).ACTUAL_ARRIVAL_TIME,l_stops_tab(i1).PLANNED_ARRIVAL_TIME) ;
599 l_stops_tab(i1).ACTUAL_DEPARTURE_TIME := nvl(l_stops_tab(i1).ACTUAL_DEPARTURE_TIME,l_stops_tab(i1).PLANNED_DEPARTURE_TIME);
600 END IF;
601 --}
602 END IF;
603
604 CLOSE get_deliveries_picked;
605 CLOSE get_deliveries_dropped;
606 IF l_debug_on THEN
607 WSH_DEBUG_SV.log(l_sub_module_name,'Assigning the stop Details');
608 END IF;
609 l_stops_tab(i1).stop_details := l_stop_details;
610
611 l_stops_tab(i1).STOP_LOCATION_XID := WSH_OTM_REF_DATA_GEN_PKG.GET_STOP_LOCATION_XID(l_stops_tab(i1).STOP_LOCATION_XID);
612 --}
613 END LOOP;
614
615
616
617
618 IF l_debug_on THEN
619 WSH_DEBUG_SV.log(l_sub_module_name,'List of delivery Ids passed to GET_DELIVERY_OBJECTS');
620 END IF;
621 FOR i in 1..l_dlv_ids.COUNT LOOP
622 --{
623 IF l_debug_on THEN
624 WSH_DEBUG_SV.log(l_sub_module_name,'dlv_ids' ,l_dlv_ids(i));
625 END IF;
626 --}
627 END LOOP;
628
629 -- Bug 6497991: Changed the parameter from x_error_trip_id_tab to x_error_dlv_id_tab
630 -- After the call, deleting the trip record before raising exception
631 --Bug 7408338 Added trip_id parameter
632 Get_Delivery_objects(l_dlv_ids,p_user_id,p_resp_id, p_resp_appl_id,'A',l_trip_tab(i).trip_id,x_domain_name,x_otm_user_name,
633 x_otm_pwd,x_server_tz_code, l_dlv_tab,x_error_dlv_id_tab,x_return_status);
634
635 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
636 --{
637 IF l_debug_on THEN
638 WSH_DEBUG_SV.log(l_sub_module_name,'failed in Get_Delivery_objects' ,x_return_status);
639 END IF;
640 x_error_trip_id_tab.extend;
641 x_error_trip_id_tab(x_error_trip_id_tab.COUNT) := l_trip_tab(i).trip_id;
642 l_trip_tab.delete(i);
643 raise GET_DELIVERY_OBJECTS_FALIED;
644 --}
645 END IF;
646
647 l_lpn_tab := WSH_OTM_LPN_TAB();
648
649 FOR i2 in 1..l_dlv_tab.COUNT LOOP
650 --{
651 l_lpn_count := l_lpn_count + l_dlv_tab(i2).lpn.COUNT;
652 FOR j in 1..l_dlv_tab(i2).lpn.COUNT LOOP
653 --{
654 l_lpn_tab.extend;
655 l_lpn_tab(l_lpn_tab.COUNT) := l_dlv_tab(i2).lpn(j);
656 l_lpn_tab(l_lpn_tab.COUNT).EQUIPMENT_XID := l_trip_tab(i).EQUIPMENT_XID;
657 --}
658 END LOOP;
659 dlv_in_tab(l_dlv_tab(i2).delivery_id) := l_dlv_tab(i2);
660 l_all_dlv_tab.extend;
661 l_all_dlv_tab(l_all_dlv_tab.COUNT) := l_dlv_tab(i2);
662 --}
663 END LOOP;
664
665 -- Populating the Stop Details
666 FOR i in 1..l_stops_tab.COUNT LOOP
667 --{
668 l_stop_details := l_stops_tab(i).stop_details;
669 l_stops_tab(i).stop_details := null;
670 l_new_stop_details := WSH_OTM_STOP_DET_TAB();
671 for j in 1..l_stop_details.COUNT loop
672 --{
673 l_lpns := dlv_in_tab(l_stop_details(j).lpn_id).lpn;
674 for k in 1..l_lpns.COUNT LOOP
675 --{
676 l_new_stop_details.extend;
677 l_new_stop_details(l_new_stop_details.COUNT) := WSH_OTM_STOP_DET_OBJ(l_stop_details(j).activity,l_lpns(k).lpn_id);
678 --}
679 end loop;
680 --}
681 end loop;
682 l_stops_tab(i).stop_details := l_new_stop_details;
683 --}
684 end loop;
685
686 l_trip_tab(i).LPNS := l_lpn_tab;
687 l_trip_tab(i).SHIPMENT_STOPS := l_stops_tab;
688 l_trip_tab(i).shipunit_count := l_lpn_count ;
689 --l_trip_tab(i).shipment_deliveries:= l_dlv_tab;
690 --}
691 --Bug 6497991: The Exceptions need to be handled inside the loop.
692 --Exception for 1 trip should not affect other trips.
693 EXCEPTION
694 WHEN GET_FREIGHT_COST_ERROR THEN
695 l_num_error := l_num_error + 1;
696 IF l_debug_on THEN
697 WSH_DEBUG_SV.log(l_sub_module_name,' GET_FREIGHT_COST_ERROR',sqlerrm);
698 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:GET_FREIGHT_COST_ERROR');
699 END IF;
700
701 WHEN GET_DELIVERY_OBJECTS_FALIED THEN
702 l_num_error := l_num_error + 1;
703 IF l_debug_on THEN
704 WSH_DEBUG_SV.log(l_sub_module_name,' GET_DELIVERY_OBJECTS_FALIED',sqlerrm);
705 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:GET_DELIVERY_OBJECTS_FALIED');
706 END IF;
707
708 END;
709 END IF;
710 --}
711 END LOOP;
712 -- Bug 6497991: the cursor needs to be closed if the last trip in the above loop throws any exception.
713 IF get_deliveries_picked%ISOPEN THEN
714 CLOSE get_deliveries_picked;
715 END IF;
716
717 IF get_deliveries_dropped%ISOPEN THEN
718 CLOSE get_deliveries_dropped;
719 END IF;
720 x_trip_tab := l_trip_tab;
721 x_dlv_tab := l_all_dlv_tab;
722 -- Bug 6497991(begin): Only Trips sucessfully processed to be sent.
723 -- for error trips, update tms_interface_flag back to 'ASR'
724 IF (l_trip_tab.count > 0) THEN
725 --{
726 p_trip_id_tab.TRIM(p_trip_id_tab.count);
727 i := l_trip_tab.first;
728 WHILE (i is NOT NULL) LOOP
729 --{
730 p_trip_id_tab.extend;
731 p_trip_id_tab(p_trip_id_tab.COUNT) := l_trip_tab(i).trip_id;
732 i := l_trip_tab.NEXT(i);
733 --}
734 END LOOP;
735 --}
736 END IF;
737 -- Bug 6497991(end):
738
739 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
740 --}
741 ELSE
742 --{
743 x_return_status := FND_API.G_RET_STS_ERROR;
744 --}
745 END IF;
746 --
747 -- Bug 6497991(begin): for error trips, update tms_interface_flag back to 'ASR'
748 --
749 IF l_debug_on THEN
750 WSH_DEBUG_SV.log(l_sub_module_name,'ERROR TRIP ids Count',x_error_trip_id_tab.count);
751 END IF;
752 IF ( x_error_trip_id_tab.count > 0 ) THEN
753 --{
754 i := x_error_trip_id_tab.first;
755 WHILE (i is not NULL) LOOP
756 --{
757 OPEN get_trip_stops(x_error_trip_id_tab(i));
758 FETCH get_trip_stops BULK COLLECT INTO l_upd_trip_stops,l_upd_tms_interface_flags;
759 CLOSE get_trip_stops;
760 IF l_upd_trip_stops.COUNT > 0 THEN
761 --{
762 IF l_debug_on THEN
763 WSH_DEBUG_SV.log(l_sub_module_name,'Calling WSH_TRIP_STOPS_PVT.UPDATE_TMS_INTERFACE_FLAG Total stops ids',l_upd_trip_stops.COUNT);
764 END IF;
765 --
766 WSH_TRIP_STOPS_PVT.UPDATE_TMS_INTERFACE_FLAG
767 (P_STOP_ID_TAB=>l_upd_trip_stops,
768 P_TMS_INTERFACE_FLAG_TAB =>l_upd_tms_interface_flags,
769 X_RETURN_STATUS =>l_return_status);
770 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
771 IF l_debug_on THEN
772 WSH_DEBUG_SV.log(l_sub_module_name,'failed in UPDATE_TMS_INTERFACE_FLAG');
773 END IF;
774 raise FND_API.G_EXC_ERROR;
775 END IF;
776 --}
777 END IF;
778 i := x_error_trip_id_tab.NEXT(i);
779 --}
780 END LOOP;
781 --}
782 END IF;
783 -- Bug 6497991(end)
784 --
785 -- Debug Statements
786 --
787 IF l_debug_on THEN
788 WSH_DEBUG_SV.pop(l_sub_module_name);
789 END IF;
790 --
791 EXCEPTION
792 -- Bug 6497991: Defined exceptions to be handled inside the LOOP
793 WHEN OTHERS THEN
794 wsh_util_core.default_handler('WSH_OTM_OUTBOUND.GET_TRIP_OBJECTS',l_sub_module_name);
795 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
796 IF get_deliveries_picked%ISOPEN THEN
797 CLOSE get_deliveries_picked;
798 END IF;
799 IF get_deliveries_dropped%ISOPEN THEN
800 CLOSE get_deliveries_dropped;
801 END IF;
802 IF l_debug_on THEN
803 WSH_DEBUG_SV.log(l_sub_module_name,' OTHERS',sqlerrm);
804 WSH_DEBUG_SV.pop(l_sub_module_name,'EXCEPTION:OTHERS');
805 END IF;
806 END GET_TRIP_OBJECTS;
807
808
809
810 -- +==================================================================================================+
811 -- Procedure : GET_DELIVERY_OBJECTS
812 -- Description:
813 -- Procedure to get the delivery,delivery details and Lpn info
814 -- in the form of objects (WSH_OTM_DLV_TAB)
815
816 -- Inputs/Outputs:
817 -- p_dlv_id_tab - id table (list of delivery Ids)
818 -- p_user_id - User Id to set the context
819 -- p_resp_id - Resp Id to set the context
820 -- p_resp_appl_id - Resp Appl Id to set the context
821 -- p_caller - When passed from GET_TRIP_OBJECTS this will have a
822 -- value of 'A' else default 'D'
823 -- p_trip_id - When passed from GET_TRIP_OBJECTS this will have trip_id else dafault -1
824 --
825 -- Output:
826 -- x_domain_name - domain name
827 -- x_otm_user_name - otm User Name
828 -- x_otm_pwd - otm Password
829 -- x_otm_pwd - otm Password
830 -- x_dlv_tab - Nested Table which contains the delivery info
831 -- x_error_dlv_id_tab - List of ids for which the data could not be retrieved
832 -- x_return_status
833 -- +==================================================================================================+
834
835
836
837 PROCEDURE GET_DELIVERY_OBJECTS(p_dlv_id_tab IN OUT NOCOPY WSH_OTM_ID_TAB,
838 p_user_id IN NUMBER,
839 p_resp_id IN NUMBER,
840 p_resp_appl_id IN NUMBER,
841 p_caller IN VARCHAR2 DEFAULT 'D',
842 p_trip_id IN NUMBER DEFAULT -1, --Bug7408338
843 x_domain_name OUT NOCOPY VARCHAR2,
844 x_otm_user_name OUT NOCOPY VARCHAR2,
845 x_otm_pwd OUT NOCOPY VARCHAR2,
846 x_server_tz_code OUT NOCOPY VARCHAR2,
847 x_dlv_tab OUT NOCOPY WSH_OTM_DLV_TAB,
848 x_error_dlv_id_tab OUT NOCOPY WSH_OTM_ID_TAB,
849 x_return_status OUT NOCOPY VARCHAR2 ) IS
850
851 -- Declare local variables
852
853 l_sub_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_OBJECTS';
854 l_dlv_tab wsh_otm_dlv_tab;
855 l_all_details wsh_otm_det_tab;
856 l_del_details wsh_otm_det_tab;
857 l_rl_details wsh_otm_det_tab;
858 l_lpn_tab wsh_otm_lpn_tab;
859 l_packed_items WSH_OTM_LPN_CONT_TAB;
860 l_loose_items_ids WSH_OTM_ID_TAB;
861 l_dlv_obj wsh_otm_dlv_obj;
862 l_det_obj wsh_otm_det_obj;
863 l_weight NUMBER;
864 l_dlv_id_tab WSH_OTM_ID_TAB;
865 l_error_dlv_id_tab WSH_OTM_ID_TAB;
866
867
868 c_deliveries WSH_UTIL_CORE.RefCurType;
869 bind_col_tab WSH_UTIL_CORE.tbl_varchar;
870 otm_uom_tab WSH_UTIL_CORE.tbl_varchar;
871 l_deliveries_sql VARCHAR2(2000);
872 l_count NUMBER;
873 l_customer_id NUMBER;
874 l_cnt NUMBER;
875 i NUMBER;
876 l NUMBER;
877 x NUMBER;
878 l_total_quantity NUMBER;
879 l_cont_type VARCHAR2(30);
880 l_length NUMBER;
881 l_height NUMBER;
882 l_width NUMBER;
883 l_uom VARCHAR2(150);
884 l_organization_code VARCHAR2(30);
885 l_internal_org_location_id VARCHAR2(150);
886 l_dropoff_location_id NUMBER;
887 l_return_status VARCHAR2(10);
888 position NUMBER;
889 l_found BOOLEAN;
890 l_quantity NUMBER;
891 l_delivery_id NUMBER;
892 l_inventory_item VARCHAR2(30);
893 l_otm_dimen_uom VARCHAR2(150);
894 l_cust_type VARCHAR2(5) := 'CUS-';
895 l_org_type VARCHAR2(5) := 'ORG-';
896 l_car_type VARCHAR2(5) := 'CAR-';
897 l_organization_id NUMBER;
898 x_base_wt_uom VARCHAR2(150);
899 x_base_vol_uom VARCHAR2(150);
900
901 CONVERT_INT_LOC_FALIED EXCEPTION;
902 GET_DEAFULT_UOMS_FAILED EXCEPTION;
903
904 TYPE All_LPNS is TABLE of wsh_otm_lpn_obj INDEX BY BINARY_INTEGER;
905 l_all_lpn_tab All_LPNS;
906 l_dummy_lpn_tab All_LPNS;
907
908 TYPE all_lpn_rec_type IS RECORD(
909 lpn_id NUMBER,
910 lpn_type VARCHAR2(100),
911 gross_weight NUMBER,
912 net_weight NUMBER,
913 weight_uom_code varchar2(150),
914 volume_uom_code varchar2(150),
915 seal_code varchar2(30),
916 packed_items WSH_OTM_LPN_CONT_TAB,
917 parent_delivery_detail_id NUMBER);
918
919 -- Bug 7207835
920 l_p_caller VARCHAR2(10);
921 -- 6922924
922 l_good_dlv_tab wsh_otm_dlv_tab;
923 l_upd_tms_interface_flags WSH_UTIL_CORE.COLUMN_TAB_TYPE;
924 l_upd_err_dlvys WSH_UTIL_CORE.ID_TAB_TYPE;
925
926
927 CURSOR get_customer_id (p_delivery_id NUMBER) IS
928 SELECT wdd.customer_id, count(*) cnt
929 FROM wsh_delivery_assignments wda,
930 wsh_delivery_details wdd
931 WHERE wdd.delivery_detail_id = wda.delivery_detail_id
932 AND wda.delivery_id = p_delivery_id
933 AND wdd.container_flag = 'N'
934 GROUP BY customer_id
935 ORDER BY cnt DESC;
936
937 CURSOR get_organization_code( p_location_id NUMBER) IS
938 SELECT organization_code
939 FROM mtl_parameters mp, hr_organization_units hou
940 WHERE mp.organization_id = hou.organization_id
941 AND hou.location_id = p_location_id;
942
943
944 -- Bug#5746380 Added p_organization_id in the Cursor.
945 CURSOR get_container_details ( p_inventory_item_id NUMBER, p_organization_id NUMBER) IS
946 SELECT CONTAINER_TYPE_CODE,
947 UNIT_LENGTH ,
948 UNIT_HEIGHT ,
949 UNIT_WIDTH ,
950 DIMENSION_UOM_CODE
951 FROM mtl_system_items
952 WHERE inventory_item_id = p_inventory_item_id
953 AND organization_id = p_organization_id;
954
955 --6922924 : (begin) : Update tms_interface_flag for error Deliveries
956 CURSOR get_errored_dlvys(c_dlvy_id NUMBER) IS
957 SELECT delivery_id, decode(tms_interface_flag, 'CP', 'CR', 'UP', 'UR', 'DP',
958 'DR', tms_interface_flag ) tms_iface_new_status
959 FROM wsh_new_deliveries
960 WHERE delivery_id = c_dlvy_id
961 FOR UPDATE OF tms_interface_flag NOWAIT;
962
963 begin
964 --{
965 -- Initialize API return status to success
966
967 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
968
969 -- Debug
970 --
971 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
972 --
973 IF l_debug_on IS NULL
974 THEN
975 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
976 END IF;
977 --
978 -- Debug Statements
979 --
980 IF l_debug_on THEN
981 WSH_DEBUG_SV.push(l_sub_module_name);
982 END IF;
983
984 IF l_debug_on THEN
985 FOR i in 1..p_dlv_id_tab.COUNT LOOP
986 WSH_DEBUG_SV.log(l_sub_module_name,'Dlv Id : ' , p_dlv_id_tab(i));
987 END LOOP;
988 WSH_DEBUG_SV.log(l_sub_module_name,'p_user_id' , p_user_id);
989 WSH_DEBUG_SV.log(l_sub_module_name,'p_resp_id' , p_resp_id);
990 WSH_DEBUG_SV.log(l_sub_module_name,'p_resp_appl_id' , p_resp_appl_id);
991 WSH_DEBUG_SV.log(l_sub_module_name,'p_caller' , p_caller);
992 END IF ;
993 -- Bug 7207835 p_caller value not defaulting to 'D' when passed as NULL.
994 l_p_caller := NVL(p_caller,'D');
995 -- End Bug 7207835
996 -- Setting the apps context
997 FND_GLOBAL.APPS_INITIALIZE(user_id => p_user_id,
998 resp_id =>p_resp_id,
999 resp_appl_id => p_resp_appl_id);
1000
1001
1002 -- Getting the profile values
1003 fnd_profile.get('WSH_OTM_DOMAIN_NAME',x_domain_name);
1004 fnd_profile.get('WSH_OTM_USER_ID',x_otm_user_name);
1005 fnd_profile.get('WSH_OTM_PASSWORD',x_otm_pwd);
1006 x_server_tz_code := FND_TIMEZONES.get_server_timezone_code();
1007
1008 IF l_debug_on THEN
1009 WSH_DEBUG_SV.log(l_sub_module_name,'Building the dymanic sql to fetch Deliveries');
1010 END IF;
1011
1012 l_deliveries_sql :=
1013 'select '
1014 ||'wsh_otm_dlv_obj( '
1015 ||'decode(wnd.tms_interface_flag,''CP'',''RC'',''UP'',''RC'',''DP'',''D''),'
1016 --||'''RC'','
1017 ||'wnd.delivery_id,'
1018 ||'wnd.name,'
1019 ||'wnd.freight_terms_code,'
1020 ||'wnd.fob_code,'
1021 ||'wnd.carrier_id,'
1022 ||'wnd.service_level,'
1023 ||'wnd.mode_of_transport,'
1024 ||'wnd.organization_id||''-''|| wnd.INITIAL_PICKUP_LOCATION_ID,'
1025 ||'wnd.customer_id ||''-''||wnd.ULTIMATE_DROPOFF_LOCATION_ID,'
1026 ||'wnd.EARLIEST_PICKUP_DATE,'
1027 ||'wnd.LATEST_PICKUP_DATE,'
1028 ||'wnd.EARLIEST_DROPOFF_DATE,'
1029 ||'wnd.LATEST_DROPOFF_DATE,'
1030 ||'nvl(wnd.GROSS_WEIGHT,0),'
1031 ||'wnd.WEIGHT_UOM_CODE,'
1032 ||'nvl(wnd.VOLUME,0),'
1033 ||'wnd.VOLUME_UOM_CODE,'
1034 ||'nvl(wnd.NET_WEIGHT,0),'
1035 ||'wnd.TMS_VERSION_NUMBER,' -- revision number
1036 ||'wnd.REASON_OF_TRANSPORT,'
1037 ||'wnd.DESCRIPTION,'
1038 ||'wnd.ADDITIONAL_SHIPMENT_INFO,'
1039 ||'wnd.ROUTING_INSTRUCTIONS,'
1040 ||'null,''REVNUM'',''TRSP_REASON'',''DEL_DESCRIPTION'',''ADD_INFOS'',''ROUTING_INSTR'',null,null),'
1041 ||' wsh_otm_det_obj(wdd.delivery_detail_id,'
1042 ||'wdd.lot_number,'
1043 ||'wdd.serial_number,'
1044 ||'wdd.to_serial_number,'
1045 ||'nvl(wdd.GROSS_WEIGHT,0),'
1046 ||'wdd.WEIGHT_UOM_CODE ,'
1047 ||'nvl(wdd.VOLUME,0) ,'
1048 ||'wdd.VOLUME_UOM_CODE,'
1049 ||'wdd.REQUESTED_QUANTITY,'
1050 ||'wdd.SHIPPED_QUANTITY,'
1051 ||'wdd.organization_id || ''-'' || wdd.INVENTORY_ITEM_ID,'
1052 ||'wdd.container_flag,'
1053 ||'wda.parent_delivery_detail_id,'
1054 ||'wdd.cust_po_number,'
1055 ||'wdd.source_header_number,''CUST_PO'',''SO_NUM'', wda.delivery_id,nvl(wdd.NET_WEIGHT,0))'
1056 ||' from wsh_new_deliveries wnd, wsh_delivery_details wdd , wsh_delivery_assignments wda'
1057 ||' where wdd.delivery_detail_id(+) = wda.delivery_detail_id '
1058 ||' and wnd.delivery_id = wda.delivery_id(+) '
1059 ||' and wnd.delivery_id in (';
1060 --Bug 7408338
1061 IF (l_p_caller = 'A') THEN
1062 --{
1063 l_deliveries_sql := l_deliveries_sql ||' select wdl.delivery_id from wsh_delivery_legs wdl, wsh_trip_stops wts where wdl.pick_up_stop_id = wts.stop_id and wts.trip_id = :1 ' ;
1064 bind_col_tab(bind_col_tab.COUNT+1) := to_char(p_trip_id);
1065 ELSE
1066 FOR i in 1..p_dlv_id_tab.COUNT LOOP
1067 --{
1068 IF i <> 1 THEN
1069 l_deliveries_sql := l_deliveries_sql || ',';
1070 END IF;
1071 l_deliveries_sql := l_deliveries_sql || ':' || i;
1072 bind_col_tab(bind_col_tab.COUNT+1) := to_char(p_dlv_id_tab(i));
1073 --}
1074 END LOOP;
1075 --}
1076 END IF;
1077
1078 l_deliveries_sql := l_deliveries_sql || ')';
1079 IF l_p_caller <> 'A' THEN
1080 l_deliveries_sql := l_deliveries_sql || ' and wnd.tms_interface_flag in (''CP'',''DP'',''UP'') ';
1081 END IF;
1082 --bug # 7150082: Deliveries need to be passed in the order of delete,update and create to OTM
1083 l_deliveries_sql := l_deliveries_sql || 'order by decode(wnd.tms_interface_flag,''CP'',''3'',''UP'',''2'',''DP'',''1''),wda.delivery_id, wdd.container_flag desc';
1084
1085 i:=1;
1086
1087 WSH_UTIL_CORE.OpenDynamicCursor(c_deliveries, l_deliveries_sql, bind_col_tab);
1088 l_count := 1;
1089 l_dlv_tab := wsh_otm_dlv_tab();
1090 --l_all_details - contains the delivery details of all the deliveries queried.
1091 l_all_details := wsh_otm_det_tab();
1092 -- 6922924
1093 l_good_dlv_tab := wsh_otm_dlv_tab();
1094
1095 --l_dlv_obj := wsh_otm_dlv_obj();
1096 l_dlv_id_tab := WSH_OTM_ID_TAB();
1097 LOOP
1098 --{
1099 FETCH c_deliveries INTO l_dlv_obj,l_det_obj;
1100 EXIT WHEN (c_deliveries%NOTFOUND);
1101 IF ( l_dlv_tab.COUNT = 0 OR l_dlv_tab(l_dlv_tab.COUNT).delivery_id <> l_dlv_obj.delivery_id) THEN
1102 l_dlv_tab.extend;
1103 l_dlv_tab(l_dlv_tab.COUNT) := l_dlv_obj;
1104 END IF;
1105 l_all_details.extend;
1106 l_all_details(l_all_details.COUNT) := l_det_obj;
1107 l_count := l_count+1;
1108 --}
1109 END LOOP;
1110
1111 IF l_debug_on THEN
1112 WSH_DEBUG_SV.log(l_sub_module_name,'count of deliveries ' , l_dlv_tab.COUNT);
1113 END IF;
1114
1115
1116 IF l_dlv_tab.COUNT >0 THEN
1117 --{ when l_dlv_tab count > 0
1118
1119 l_error_dlv_id_tab := WSH_OTM_ID_TAB();
1120 FOR i in 1..l_dlv_tab.COUNT LOOP
1121 --{ -- 6922924 Loop Start
1122 BEGIN
1123
1124 l_delivery_id := l_dlv_tab(i).delivery_id;
1125
1126 IF l_p_caller = 'A' THEN
1127 l_dlv_tab(i).transaction_code := 'RC';
1128 END IF;
1129
1130
1131 IF l_dlv_tab(i).CARRIER_ID IS NOT NULL THEN
1132 l_dlv_tab(i).CARRIER_ID := l_car_type || l_dlv_tab(i).CARRIER_ID;
1133 END IF;
1134
1135 -- Getting the organization_id
1136 position := instr(l_dlv_tab(i).INITIAL_PICKUP_LOCATION_ID,'-');
1137 l_organization_id := substr(l_dlv_tab(i).INITIAL_PICKUP_LOCATION_ID,1, position-1);
1138
1139
1140 IF l_dlv_tab(i).INITIAL_PICKUP_LOCATION_ID IS NOT NULL THEN
1141 l_dlv_tab(i).INITIAL_PICKUP_LOCATION_ID := l_org_type || l_dlv_tab(i).INITIAL_PICKUP_LOCATION_ID;
1142 END IF;
1143
1144 -- Populating the ULTIMATE_DROPOFF_LOCATION_ID based on whether it is internal or external location.
1145 position := instr(l_dlv_tab(i).ULTIMATE_DROPOFF_LOCATION_ID,'-');
1146 l_customer_id := substr(l_dlv_tab(i).ULTIMATE_DROPOFF_LOCATION_ID,1, position-1);
1147 l_dropoff_location_id := substr(l_dlv_tab(i).ULTIMATE_DROPOFF_LOCATION_ID,position+1);
1148
1149 WSH_OTM_REF_DATA_GEN_PKG.GET_INT_LOCATION_XID(
1150 p_location_id => l_dropoff_location_id,
1151 x_location_xid => l_internal_org_location_id,
1152 x_return_status =>l_return_status);
1153
1154 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
1155 raise CONVERT_INT_LOC_FALIED;
1156 END IF;
1157 IF l_internal_org_location_id is NOT NULL THEN
1158 l_dlv_tab(i).ULTIMATE_DROPOFF_LOCATION_ID := l_internal_org_location_id;
1159 ELSE
1160 --{
1161 -- If customer_id is null in wsh_new_deliveries
1162 IF l_customer_id is NULL THEN
1163 open get_customer_id(l_dlv_tab(i).delivery_id);
1164 fetch get_customer_id into l_customer_id,l_cnt;
1165 close get_customer_id;
1166 END IF;
1167 l_dlv_tab(i).ULTIMATE_DROPOFF_LOCATION_ID := l_cust_type
1168 || l_customer_id || '-'
1169 || l_dropoff_location_id;
1170 --}
1171 END IF;
1172
1173 WSH_WV_UTILS.GET_DEFAULT_UOMS(l_organization_id, x_base_wt_uom, x_base_vol_uom, x_return_status);
1174 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
1175 raise GET_DEAFULT_UOMS_FAILED;
1176 END IF;
1177
1178 IF l_dlv_tab(i).WEIGHT_UOM_CODE is null THEN
1179 l_dlv_tab(i).WEIGHT_UOM_CODE := x_base_wt_uom;
1180 END IF;
1181 IF l_dlv_tab(i).VOLUME_UOM_CODE is null THEN
1182 l_dlv_tab(i).VOLUME_UOM_CODE := x_base_vol_uom;
1183 END IF;
1184
1185 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1186 p_uom=>l_dlv_tab(i).WEIGHT_UOM_CODE,
1187 x_uom=>l_dlv_tab(i).WEIGHT_UOM_CODE,
1188 x_return_status=>l_return_status);
1189 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1190 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1191 IF l_debug_on
1192 THEN
1193 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
1194 END IF;
1195 raise FND_API.G_EXC_ERROR;
1196 END IF;
1197
1198 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1199 p_uom=>l_dlv_tab(i).VOLUME_UOM_CODE,
1200 x_uom=>l_dlv_tab(i).VOLUME_UOM_CODE,
1201 x_return_status=>l_return_status);
1202 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1203 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1204 IF l_debug_on
1205 THEN
1206 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
1207 END IF;
1208 raise FND_API.G_EXC_ERROR;
1209 END IF;
1210
1211
1212
1213
1214
1215 --l_del_details - contains the delivery details of the delivery l_dlv_tab(i).delivery_id
1216
1217 l_del_details := wsh_otm_det_tab();
1218 get_del_details(l_all_details,l_dlv_tab(i).delivery_id,l_del_details);
1219
1220
1221
1222
1223 l_rl_details := wsh_otm_det_tab();
1224 l_lpn_tab := wsh_otm_lpn_tab();
1225 l_all_lpn_tab := l_dummy_lpn_tab;
1226 l_total_quantity := 0;
1227
1228 -- Loop through l_del_details to create the following
1229 -- l_rl_details -- Basically all the release lines of this delivery
1230 -- l_loose_items -- All the loose items in l_del_details
1231 -- lpn_tab -- All the Outmost lpns in l_del_details + Lpns for Loose Items
1232 -- l_all_lpn_tab -- All the lpns in l_del_details
1233 FOR i in 1..l_del_details.COUNT LOOP
1234 --{
1235 IF l_del_details(i).WEIGHT_UOM_CODE is null THEN
1236 l_del_details(i).WEIGHT_UOM_CODE := x_base_wt_uom;
1237 END IF;
1238 IF l_del_details(i).VOLUME_UOM_CODE is null THEN
1239 l_del_details(i).VOLUME_UOM_CODE := x_base_vol_uom;
1240 END IF;
1241
1242
1243 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1244 p_uom=>l_del_details(i).WEIGHT_UOM_CODE,
1245 x_uom=>l_del_details(i).WEIGHT_UOM_CODE,
1246 x_return_status=>l_return_status);
1247 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1248 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1249 IF l_debug_on
1250 THEN
1251 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
1252 END IF;
1253 raise FND_API.G_EXC_ERROR;
1254 END IF;
1255
1256 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1257 p_uom=>l_del_details(i).VOLUME_UOM_CODE,
1258 x_uom=>l_del_details(i).VOLUME_UOM_CODE,
1259 x_return_status=>l_return_status);
1260 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1261 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1262 IF l_debug_on
1263 THEN
1264 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
1265 END IF;
1266 raise FND_API.G_EXC_ERROR;
1267 END IF;
1268
1269
1270
1271
1272
1273 IF l_del_details(i).container_flag = 'N'THEN
1274 --{
1275 l_rl_details.extend;
1276 l_rl_details(l_rl_details.COUNT ) := l_del_details(i);
1277 IF l_p_caller = 'A' THEN
1278 l_quantity := l_del_details(i).SHIPPED_QUANTITY;
1279 ELSE
1280 l_quantity := l_del_details(i).REQUESTED_QUANTITY;
1281 END IF;
1282 l_total_quantity := l_total_quantity + l_quantity;
1283
1284 IF l_del_details(i).parent_delivery_detail_id is null THEN
1285 --{
1286
1287 l_packed_items := WSH_OTM_LPN_CONT_TAB();
1288 l_packed_items.extend;
1289 l_packed_items(l_packed_items.COUNT) := WSH_OTM_LPN_CONT_OBJ(l_del_details(i).delivery_detail_id,1,
1290 l_del_details(i).inventory_item_id,
1291 CEIL(l_quantity),
1292 l_del_details(i).delivery_detail_id,
1293 l_delivery_id,
1294 l_del_details(i).gross_weight,
1295 l_del_details(i).net_weight,
1296 l_del_details(i).weight_uom_code,
1297 l_del_details(i).volume,
1298 l_del_details(i).volume_uom_code
1299 );
1300 -- Creating a dummy lpn for the loose item
1301 l_lpn_tab.extend;
1302
1303 -- Getting Item Dimensions for Loose Item
1304 l_inventory_item := l_del_details(i).inventory_item_id;
1305 --Bug 5746380
1306 open get_container_details(substr(l_inventory_item,instr(l_inventory_item,'-') + 1),
1307 l_organization_id);
1308 fetch get_container_details into l_cont_type, l_length, l_height, l_width, l_uom;
1309 close get_container_details;
1310 IF l_debug_on THEN
1311 WSH_DEBUG_SV.log(l_sub_module_name,'Calling Get_EBS_To_OTM_UOM Weight for Loose Item : '||substr(l_inventory_item,instr(l_inventory_item,'-') + 1));
1312 END IF;
1313 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1314 p_uom=>l_uom,
1315 x_uom=>l_otm_dimen_uom ,
1316 x_return_status=>l_return_status);
1317 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1318 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1319 IF l_debug_on
1320 THEN
1321 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed for Loose Item');
1322 END IF;
1323 raise FND_API.G_EXC_ERROR;
1324 END IF;
1325
1326 l_lpn_tab(l_lpn_tab.COUNT) := wsh_otm_lpn_obj(l_del_details(i).delivery_detail_id,null,l_del_details(i).gross_weight,l_del_details(i).net_weight,
1327 l_del_details(i).weight_uom_code,l_del_details(i).volume_uom_code,
1328 null,l_packed_items,null,
1329 null,l_length,l_height,l_width,l_otm_dimen_uom,l_del_details(i).volume,null);
1330 --}
1331 ELSE
1332 --{
1333 x := l_del_details(i).parent_delivery_detail_id;
1334 LOOP
1335 --{
1336 IF l_all_lpn_tab(x).parent_delivery_detail_id is null then
1337 l_all_lpn_tab(x).packed_items.extend;
1338 l_all_lpn_tab(x).packed_items(l_all_lpn_tab(x).packed_items.COUNT)
1339 := WSH_OTM_LPN_CONT_OBJ(
1340 l_del_details(i).delivery_detail_id,
1341 l_all_lpn_tab(x).packed_items.COUNT,
1342 l_del_details(i).inventory_item_id,
1343 CEIL(l_quantity),
1344 l_all_lpn_tab(x).lpn_id,
1345 l_delivery_id,
1346 l_del_details(i).gross_weight,
1347 l_del_details(i).net_weight,
1348 l_del_details(i).weight_uom_code,
1349 l_del_details(i).volume,
1350 l_del_details(i).volume_uom_code
1351 );
1352 exit;
1353 ELSE
1354 x:= l_all_lpn_tab(x).parent_delivery_detail_id;
1355 END IF;
1356 --}
1357 END LOOP;
1358 --}
1359 END IF;
1360 --}
1361 ELSE
1362 --{
1363 IF l_del_details(i).parent_delivery_detail_id is null THEN
1364 l_inventory_item := l_del_details(i).inventory_item_id;
1365 --Bug 5746380
1366 open get_container_details(substr(l_inventory_item,instr(l_inventory_item,'-') + 1),
1367 l_organization_id);
1368 fetch get_container_details into l_cont_type, l_length, l_height, l_width, l_uom;
1369 close get_container_details;
1370 END IF;
1371
1372 WSH_OTM_RIQ_XML.Get_EBS_To_OTM_UOM(
1373 p_uom=>l_uom,
1374 x_uom=>l_otm_dimen_uom ,
1375 x_return_status=>l_return_status);
1376 IF((l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) AND
1377 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
1378 IF l_debug_on
1379 THEN
1380 WSH_DEBUG_SV.log(l_sub_module_name,'Get_EBS_To_OTM_UOM Weight Failed');
1381 END IF;
1382 raise FND_API.G_EXC_ERROR;
1383 END IF;
1384
1385
1386 l_all_lpn_tab(l_del_details(i).delivery_detail_id) :=
1387 wsh_otm_lpn_obj(l_del_details(i).delivery_detail_id,
1388 null,
1389 l_del_details(i).gross_weight,
1390 l_del_details(i).net_weight,
1391 l_del_details(i).weight_uom_code,
1392 l_del_details(i).volume_uom_code,
1393 null,
1394 null,
1395 l_del_details(i).parent_delivery_detail_id,
1396 l_cont_type, l_length, l_height, l_width, l_otm_dimen_uom,l_del_details(i).volume,null);
1397 l_all_lpn_tab(l_del_details(i).delivery_detail_id).packed_items := WSH_OTM_LPN_CONT_TAB();
1398 --}
1399 END IF;
1400 --}
1401 END LOOP;
1402
1403 -- ECO 5768287
1404 -- Populating the lpn_tab with only non-empty outermost Lpns in l_all_lpn_tab
1405
1406 IF l_all_lpn_tab.COUNT >0 THEN
1407 --{
1408 l := l_all_lpn_tab.FIRST;
1409 WHILE l is not NULL
1410 LOOP
1411 --{
1412 IF l_all_lpn_tab(l).parent_delivery_detail_id is null AND l_all_lpn_tab(l).packed_items.count > 0 THEN
1413 l_lpn_tab.EXTEND;
1414 l_lpn_tab(l_lpn_tab.COUNT) := l_all_lpn_tab(l);
1415
1416 END IF;
1417 l := l_all_lpn_tab.NEXT(l);
1418 --}
1419 END LOOP;
1420 --}
1421 END IF;
1422
1423 l_dlv_tab(i).lpn := l_lpn_tab;
1424 l_dlv_tab(i).rl_details := l_rl_details;
1425 l_dlv_tab(i).TOTAL_ITEM_COUNT := CEIL(l_total_quantity);
1426
1427 -- 6922924
1428 l_dlv_id_tab.extend;
1429 l_dlv_id_tab(l_dlv_id_tab.COUNT) := l_dlv_tab(i).delivery_id;
1430 l_good_dlv_tab.extend;
1431 l_good_dlv_tab(l_good_dlv_tab.COUNT) := l_dlv_tab(i);
1432 --
1433 EXCEPTION
1434 WHEN GET_DEAFULT_UOMS_FAILED THEN
1435 -- 6830854
1436 IF l_debug_on
1437 THEN
1438 WSH_DEBUG_SV.log(l_sub_module_name,'GET_DEAFULT_UOMS_FALIED',sqlerrm);
1439 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery id: '||l_delivery_id);
1440 END IF;
1441
1442 WHEN CONVERT_INT_LOC_FALIED THEN
1443 -- 6830854
1444 IF l_debug_on
1445 THEN
1446 WSH_DEBUG_SV.log(l_sub_module_name,'CONVERT_INT_LOC_FALIED',sqlerrm);
1447 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery id: '||l_delivery_id);
1448 END IF;
1449
1450 WHEN FND_API.G_EXC_ERROR THEN
1451 -- 6830854
1452 IF l_debug_on
1453 THEN
1454 WSH_DEBUG_SV.log(l_sub_module_name,' FND_API.G_EXC_ERROR',sqlerrm);
1455 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery id: '||l_delivery_id);
1456 END IF;
1457
1458 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1459 -- 6830854
1460 IF l_debug_on
1461 THEN
1462 WSH_DEBUG_SV.log(l_sub_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR',sqlerrm);
1463 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery id: '||l_delivery_id);
1464 END IF;
1465
1466 WHEN OTHERS THEN
1467 wsh_util_core.default_handler('WSH_OTM_OUTBOUND.GET_DELIVERY_OBJECTS',l_sub_module_name);
1468 -- 6922924 Note : Removed all ref: to x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1469 -- in this Exception and above Exceptions
1470 IF l_debug_on
1471 THEN
1472 WSH_DEBUG_SV.log(l_sub_module_name,'WHEN OTHERS inside Get Delivery Loop',sqlerrm);
1473 WSH_DEBUG_SV.log(l_sub_module_name,'Delivery id: '||l_delivery_id);
1474 END IF;
1475 END;
1476
1477 -- 6922924
1478 IF get_customer_id%ISOPEN THEN
1479 CLOSE get_customer_id;
1480 END IF;
1481 IF get_container_details%ISOPEN THEN
1482 CLOSE get_container_details;
1483 END IF;
1484 --} --- 6922924 End Loop
1485 END LOOP;
1486
1487 -- If all the deliveries in the input parameter p_dlv_id_tab where not queried
1488 -- Put those id's in the error_dlv_id_list
1489 IF l_dlv_id_tab.COUNT <> p_dlv_id_tab.COUNT THEN
1490 --{
1491 FOR i in 1..p_dlv_id_tab.COUNT LOOP
1492 --{
1493 l_found := FALSE;
1494 FOR j in 1..l_dlv_id_tab.COUNT LOOP
1495 --{
1496 IF l_dlv_id_tab(j) = p_dlv_id_tab(i) THEN
1497 l_found := TRUE;
1498 EXIT;
1499 END IF;
1500 IF l_dlv_id_tab(j) > p_dlv_id_tab(i) THEN
1501 EXIT;
1502 END IF;
1503 --}
1504 END LOOP;
1505 IF l_found = FALSE THEN
1506 l_error_dlv_id_tab.extend;
1507 l_error_dlv_id_tab(l_error_dlv_id_tab.COUNT) := p_dlv_id_tab(i);
1508 IF l_debug_on THEN
1509 WSH_DEBUG_SV.log(l_sub_module_name,'Errored Delivery id: ' , p_dlv_id_tab(i) );
1510 WSH_DEBUG_SV.log(l_sub_module_name,'Count of i' , i);
1511 END IF;
1512 END IF;
1513 --}
1514 END LOOP;
1515 --}
1516 END IF;
1517
1518 -- 6922924
1519 x_dlv_tab := l_good_dlv_tab;
1520 p_dlv_id_tab := l_dlv_id_tab;
1521 x_error_dlv_id_tab := l_error_dlv_id_tab;
1522
1523
1524 --6922924
1525 -- Update the tms_interface_flag to 'CR' and Print the List of Errored Delivery Ids
1526 IF ( x_error_dlv_id_tab.count > 0 ) THEN
1527 IF l_debug_on THEN
1528 WSH_DEBUG_SV.log(l_sub_module_name,'ERROR DELIVERY ids Count',x_error_dlv_id_tab.count);
1529 END IF;
1530 --{
1531 i := x_error_dlv_id_tab.first;
1532 WHILE (i is not NULL) LOOP
1533 --{
1534 OPEN get_errored_dlvys(x_error_dlv_id_tab(i));
1535 FETCH get_errored_dlvys INTO l_upd_err_dlvys(1), l_upd_tms_interface_flags(1);
1536 CLOSE get_errored_dlvys;
1537 IF l_upd_err_dlvys.COUNT > 0 THEN
1538 --{
1539 IF l_debug_on THEN
1540 WSH_DEBUG_SV.log(l_sub_module_name,'Calling WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG');
1541 END IF;
1542 --
1543 WSH_NEW_DELIVERIES_PVT.Update_Tms_interface_flag
1544 ( p_delivery_id_tab => l_upd_err_dlvys,
1545 p_tms_interface_flag_tab => l_upd_tms_interface_flags,
1546 x_return_status => l_return_status );
1547 --
1548 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
1549 IF l_debug_on THEN
1550 WSH_DEBUG_SV.log(l_sub_module_name,'failed in WND_PVT.UPDATE_TMS_INTERFACE_FLAG');
1551 END IF;
1552 -- 6830854 raise FND_API.G_EXC_ERROR;
1553 -- removing the above as Error can occur in Validation again
1554 END IF;
1555 --}
1556 END IF;
1557 i := x_error_dlv_id_tab.NEXT(i);
1558 --}
1559 END LOOP;
1560 -- }
1561 END IF;
1562
1563
1564 --------- Printing the complete structure------------
1565 IF l_debug_on THEN
1566 --{
1567 FOR k in 1..x_dlv_tab.COUNT LOOP
1568 --{
1569 WSH_DEBUG_SV.log(l_sub_module_name,'dlv_id' , x_dlv_tab(k).delivery_id);
1570 FOR i in 1..x_dlv_tab(k).rl_details.COUNT LOOP
1571 WSH_DEBUG_SV.log(l_sub_module_name,'DD ' , x_dlv_tab(k).rl_details(i).delivery_detail_id);
1572 END LOOP;
1573 WSH_DEBUG_SV.log(l_sub_module_name,'Ship Units Count' , x_dlv_tab(k).lpn.COUNT);
1574 FOR i in 1..x_dlv_tab(k).lpn.COUNT LOOP
1575 --{
1576 WSH_DEBUG_SV.log(l_sub_module_name,'Lpn Id ' , x_dlv_tab(k).lpn(i).lpn_id);
1577 FOR j in 1..x_dlv_tab(k).lpn(i).packed_items.COUNT LOOP
1578 WSH_DEBUG_SV.log(l_sub_module_name,'Content ' ,x_dlv_tab(k).lpn(i).packed_items(j).content_id);
1579 WSH_DEBUG_SV.log(l_sub_module_name,'Content ' ,x_dlv_tab(k).lpn(i).packed_items(j).line_number);
1580 END LOOP;
1581 --}
1582 END LOOP;
1583 --}
1584 END LOOP;
1585 --}
1586 END IF;
1587 --------- End of Printing the complete structure------------
1588 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1589 --
1590 ELSE
1591 IF l_debug_on THEN
1592 WSH_DEBUG_SV.log(l_sub_module_name,'Else error');
1593 END IF;
1594 x_error_dlv_id_tab := p_dlv_id_tab;
1595 p_dlv_id_tab := l_dlv_id_tab;
1596 x_dlv_tab := l_dlv_tab;
1597 x_return_status := FND_API.G_RET_STS_ERROR;
1598 END IF;
1599 -- } Main IF - when l_dlv_tab count > 0
1600 --
1601 -- Debug Statements
1602 --
1603 IF l_debug_on THEN
1604 WSH_DEBUG_SV.pop(l_sub_module_name);
1605 END IF;
1606 --
1607 EXCEPTION
1608 -- 6922924 removeing all Exceptions to Inside the Loop as in above
1609 WHEN OTHERS THEN
1610 wsh_util_core.default_handler('WSH_OTM_OUTBOUND.GET_DELIVERY_OBJECTS',l_sub_module_name);
1611 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1612 IF get_customer_id%ISOPEN THEN
1613 CLOSE get_customer_id;
1614 END IF;
1615 IF get_container_details%ISOPEN THEN
1616 CLOSE get_container_details;
1617 END IF;
1618 IF l_debug_on THEN
1619 WSH_DEBUG_SV.pop(l_sub_module_name,'When Others');
1620 END IF;
1621 end GET_DELIVERY_OBJECTS;
1622
1623
1624
1625 -- +======================================================================+
1626 -- Procedure : UPDATE_ENTITY_INTF_STATUS
1627 -- Description:
1628 -- This procedure will be used to upate the interface flag status on the delivery or trip stop.
1629 --
1630 -- Inputs/Outputs:
1631 -- p_entity_type - Valid values are "DELIVERY", "TRIP"
1632 -- p_entity_id_tab - id table (IN / OUT) -- List of Delivery id or Trip id
1633 -- p_new_intf_status - Delivery or Trip Stop Status
1634 -- Valid values of this parameter are "IN_PROCESS", "COMPLETE"
1635 --
1636 -- Trip Stop Interface Flag values (internal):
1637 -- ASR - ACTUAL_SHIP_REQUIRED
1638 -- ASP - ACTUAL_IN_PROCESS
1639 -- CMP - COMPLETE
1640 --
1641 -- Delivery Interface Flag values (internal):
1642 -- NS - NOT TO BE SENT
1643 -- CR - CREATE_REQUIRED
1644 -- UR - UPDATE_REQUIRED
1645 -- DR - DELETE_REQUIRED
1646 -- CP - CREATE_IN_PROCESS
1647 -- UP- UPDATE_IN_PROCESS
1648 -- DP - DELETE_IN_PROCESS
1649 -- AW - AWAITING_ANSWER
1650 -- AR - ANSWER_RECEIVED
1651 -- CMP - COMPLETE
1652 -- p_user_Id - user id ( application user id )
1653 -- p_resp_Id - responsibility id
1654 -- p_resp_appl_Id - resp application id ( Application Responsibility Id)
1655 -- Output:
1656 -- p_error_id_tab - erred entity id table -- list of ERRORed delivery id or tripd id
1657 -- p_entity_id_tab - id table (IN / OUT) - list of SUCCESS delivery id or trip id
1658 -- x_return_status - "S"-Success, "E"-Error, "U"-Unexpected Error
1659 -- API is called from the following phases / API
1660 /*
1661 1.Concurrent Request --TripStop and Delivery TMS_INTERFACE_FLAG is updated to newStatus = X_IN_PROCESS.
1662 2.WSH_GLOG_OUTBOUND.GET_TRIP_OBJECTS - TripStop and Delivery TMS_INTERFACE_FLAG is updated to newStatus = AWAITING_ANSWER.
1663 3.WSH_GLOG_OUTBOUND.GET_DELIVERY_OBJECTS - TripStop and Delivery TMS_INTERFACE_FLAG is updated to newStatus = AWAITING_ANSWER.
1664 */
1665
1666
1667
1668 -- +======================================================================+
1669 PROCEDURE UPDATE_ENTITY_INTF_STATUS(
1670 x_return_status OUT NOCOPY VARCHAR2,
1671 p_entity_type IN VARCHAR2,
1672 p_new_intf_status IN VARCHAR2,
1673 p_userId IN NUMBER DEFAULT NULL,
1674 p_respId IN NUMBER DEFAULT NULL,
1675 p_resp_appl_Id IN NUMBER DEFAULT NULL,
1676 p_entity_id_tab IN OUT NOCOPY WSH_OTM_ID_TAB,
1677 p_error_id_tab IN OUT NOCOPY WSH_OTM_ID_TAB
1678 ) IS
1679
1680 -- Declare local variables
1681
1682 l_sub_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_ENTITY_INTF_STATUS';
1683 l_entity_id_out_tab WSH_OTM_ID_TAB :=WSH_OTM_ID_TAB();
1684 l_error_id_out_tab WSH_OTM_ID_TAB := WSH_OTM_ID_TAB();
1685 l_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
1686 l_status_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
1687 l_del_current_status varchar2(3);
1688 l_del_id_error_flag VARCHAR2(1) := 'N';
1689 l_stop_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
1690 l_stop_status_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
1691 l_return_status VARCHAR2(1);
1692 l_del_status_code varchar2(30);
1693 l_ignore_for_planning VARCHAR2(1);
1694 l_is_delivery_empty VARCHAR2(1);
1695 i NUMBER;
1696 j NUMBER;
1697 k NUMBER;
1698 -- Define Exception variables
1699 UPD_DEL_INTF_FLAG_API_FALIED EXCEPTION;
1700 UPD_STOP_INTF_FLAG_API_FALIED EXCEPTION;
1701 INVALID_ENTITY_TYPE EXCEPTION;
1702 INVALID_NEW_INTF_STATUS EXCEPTION;
1703
1704 -- define the cursor to get the current TMS_INTERFACE_FLAG status of delivery
1705 cursor get_del_tms_interface_flag(c_delivery_id NUMBER) IS
1706 select TMS_INTERFACE_FLAG,status_code,nvl(ignore_for_planning,'N') from wsh_new_deliveries
1707 where delivery_id = c_delivery_id;
1708
1709 -- define the cursor to get all trip stops for the given trip id.
1710 cursor get_trip_stops(c_trip_id NUMBER) IS
1711 select stop_id,TMS_INTERFACE_FLAG from wsh_trip_stops
1712 where trip_id = c_trip_id;
1713 -- and (TMS_INTERFACE_FLAG ='ASR' or TMS_INTERFACE_FLAG ='ASP');
1714 BEGIN
1715 -- save point
1716 SAVEPOINT UPDATE_ENTITY_INTF_STATUS;
1717
1718 -- Initialize API return status to success
1719 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1720
1721 -- Debug
1722 --
1723 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1724 --
1725 IF l_debug_on IS NULL
1726 THEN
1727 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1728 END IF;
1729 --
1730 -- initialize Apps variables
1731 IF p_userid is NOT NULL THEN
1732 fnd_global.apps_initialize(user_id => p_userid,
1733 resp_id => p_respid,
1734 resp_appl_id => p_resp_appl_Id
1735 );
1736 END IF;
1737 --
1738 -- Debug Statements
1739 --
1740 IF l_debug_on THEN
1741 --{
1742 fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',l_debugfile);
1743 l_debugfile := l_debugfile||'/'||WSH_DEBUG_SV.g_file;
1744
1745 WSH_DEBUG_SV.push(l_sub_module_name);
1746 WSH_DEBUG_SV.log(l_sub_module_name,'Begin of the process ',l_debugfile);
1747 WSH_DEBUG_SV.log(l_sub_module_name,'p_entity_type ',p_entity_type);
1748 WSH_DEBUG_SV.log(l_sub_module_name,'p_new_intf_status ',p_new_intf_status);
1749 --}
1750 END IF;
1751 --
1752 --Validations
1753 IF p_new_intf_status NOT IN ('IN_PROCESS','COMPLETE') THEN
1754 IF l_debug_on THEN
1755 WSH_DEBUG_SV.log(l_sub_module_name,'Invalid p_new_intf_status',p_new_intf_status);
1756 END IF;
1757 RAISE INVALID_NEW_INTF_STATUS;
1758 END IF;
1759 -- General Process
1760 -- Move all entity id ( trip / delivery ) to Error id table, if there is any error in "U" or "E"
1761 -- Process for DELIVERY
1762 -- if the input - p_new_intf_status is "IN_PROCESS"
1763 -- Query the delivery for the give delivery id
1764 -- if the current interface flag 'CR', need to update the status as "CP"
1765 -- if the current interface flag 'UR', need to update the status as "UP"
1766 -- if the current interface flag 'DR', need to update the status as "DP"
1767 -- if the current interface flag is 'CP,UP,DP', no update required,
1768 -- For all other cases, move the delivery id to error id table.
1769 -- if the input - p_new_intf_status is "COMPLETE"
1770 -- if the current interface flag is CP, DP, or UP -> update to status AW
1771 -- if the current interface flag not in CP, DP, UP , add to ErrorId List
1772 k := 0;
1773 IF p_entity_type = 'DELIVERY' THEN
1774 --{
1775 IF l_debug_on THEN
1776 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery Count',p_entity_id_tab.COUNT);
1777 END IF;
1778 --
1779 FOR i IN 1..p_entity_id_tab.COUNT
1780 LOOP
1781 l_del_id_error_flag := 'N';
1782 open get_del_tms_interface_flag(p_entity_id_tab(i));
1783 fetch get_del_tms_interface_flag into l_del_current_status,l_del_status_code,l_ignore_for_planning;
1784 --
1785 IF get_del_tms_interface_flag%NOTFOUND then
1786 IF l_debug_on THEN
1787 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery Not found',p_entity_id_tab(i));
1788 END IF;
1789 -- Move delivery id to error table - p_error_id_tab
1790 l_del_id_error_flag := 'Y';
1791 END IF;
1792 --
1793 close get_del_tms_interface_flag;
1794 --
1795 IF p_new_intf_status = 'IN_PROCESS' then
1796 IF l_debug_on THEN
1797 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery - Status',p_new_intf_status);
1798 END IF;
1799 --{
1800 -- Query the delivery for the given delivery id list and
1801 -- if the current interface flag is not in 'CR,UR,DR',
1802 -- no update required, move the delivery id to error id table.
1803 --
1804 IF l_del_current_status = 'CR' then
1805 IF l_debug_on THEN
1806 WSH_DEBUG_SV.log(l_sub_module_name,'value of k1 '|| k);
1807 END IF;
1808 l_status_tab(k) := 'CP' ;
1809 l_id_tab(k) := p_entity_id_tab(i);
1810 k := k+ 1;
1811 ELSIF l_del_current_status = 'UR' then
1812 l_status_tab(k) := 'UP';
1813 l_id_tab(k) := p_entity_id_tab(i);
1814 k := k+ 1;
1815 ELSIF l_del_current_status = 'DR' then
1816 l_status_tab(k) := 'DP';
1817 l_id_tab(k) := p_entity_id_tab(i);
1818 k := k+ 1;
1819 elsif l_del_current_status in ('CP','DP','UP') then
1820 -- no change to the status since the delivery is in process
1821 null;
1822 else
1823 IF l_debug_on THEN
1824 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery - Error ',p_entity_id_tab(i));
1825 END IF;
1826 -- set l_del_id_error_flag to "YES" to move this del-id to error table.
1827 l_del_id_error_flag := 'Y';
1828 end if;
1829 --
1830 --}End of p_new_intf_status = 'IN_PROCESS'
1831 --
1832 ELSIF p_new_intf_status = 'COMPLETE' then
1833 --{
1834 -- if the current interface flag is CP, or UP -> update to status AW
1835 -- if the current interface flag is DP -> update to status 'CMP' ( if del-status is "CL")
1836 -- if the current interface flag is DP -> update to status 'CR' (if del-status is "OP"
1837 -- and Include for Planning and the del is not empty)
1838 -- if the current interface flag is DP -> update to status 'NS' ( if del-status is not "CL")
1839 -- if the current interface flag not in CP, DP, UP , add to ErrorId List
1840 if l_del_current_status in ('CP', 'UP') then
1841 l_status_tab(k) := 'AW';
1842 l_id_tab(k) := p_entity_id_tab(i);
1843 k := k+ 1;
1844 elsif l_del_current_status = 'DP' then
1845 if l_del_status_code = 'CL' then
1846 l_status_tab(k) := 'CMP';
1847 -- Added new validation in R12
1848 -- If delivery is Open and Include for planning, and the delivery is not empty
1849 -- set status to "CR"
1850 elsif (l_del_status_code = 'OP' and l_ignore_for_planning = 'N') then
1851 -- check if the delivery is empty or not. If it not empty, set the status to "CR"
1852 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(p_entity_id_tab(i));
1853 IF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1854 IF l_debug_on THEN
1855 WSH_DEBUG_SV.log(l_sub_module_name,'Error from wsh_new_delivery_actions.is_delivery_empty API for Delivery '||p_entity_id_tab(i));
1856 END IF;
1857 -- Setting this delivery to Error List since it is failed to process
1858 l_del_id_error_flag := 'Y';
1859 END IF;
1860 --
1861 -- if the delivery is not empty, set the status to "CR"
1862 IF (l_is_delivery_empty = 'N') THEN
1863 l_status_tab(k) := 'CR';
1864 else
1865 l_status_tab(k) := 'NS';
1866 end if;
1867 else
1868 l_status_tab(k) := 'NS';
1869 end if;
1870 --
1871 l_id_tab(k) := p_entity_id_tab(i);
1872 k := k+ 1;
1873 else
1874 l_del_id_error_flag := 'Y';
1875 end if;
1876 --}
1877 END IF;
1878 IF l_del_id_error_flag = 'Y' THEN
1879 --{
1880 -- Move delivery id to error table - p_error_id_tab
1881 IF l_debug_on THEN
1882 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery ID-Moving to error table ');
1883 END IF;
1884 l_error_id_out_tab.extend;
1885 l_error_id_out_tab(l_error_id_out_tab.COUNT):=p_entity_id_tab(i);
1886 --
1887 --}
1888 ELSE
1889 IF l_debug_on THEN
1890 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery ID-Success to table ',p_entity_id_tab(i));
1891 END IF;
1892
1893 -- Move delivery id to success table - l_entity_id_out_tab
1894 l_entity_id_out_tab.extend;
1895 l_entity_id_out_tab(l_entity_id_out_tab.COUNT):=p_entity_id_tab(i);
1896 END IF;
1897 --
1898 END LOOP;
1899 IF l_id_tab.COUNT > 0 THEN
1900 IF l_debug_on THEN
1901 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery Calling WSH API to update status-Del-Count',l_id_tab.COUNT);
1902 END IF;
1903 --{
1904 --Call WSH API to update the new status
1905 WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG
1906 (P_DELIVERY_ID_TAB=>l_id_tab,
1907 P_TMS_INTERFACE_FLAG_TAB =>l_status_tab,
1908 X_RETURN_STATUS =>l_return_status);
1909 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
1910 raise UPD_DEL_INTF_FLAG_API_FALIED;
1911 END IF;
1912 IF l_debug_on THEN
1913 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Delivery Calling WSH API to update status-Success-Del-Count',l_id_tab.COUNT);
1914 END IF;
1915 --}
1916 END IF;
1917 --}
1918 ELSIF p_entity_type = 'TRIP' THEN
1919 --{
1920 -- Process for TRIP
1921 -- For each Trip ID, need to query the trip stops
1922 -- IF p_new_intf_status is 'IN_PROCESS' and the current status is "ASR"
1923 -- update the status to "ASP"
1924 -- Otherwise no change.
1925 -- IF p_new_intf_status is 'COMPLETE' and the current status is "ASP"
1926 -- update the status to "CMP"
1927 -- Otherwise no change.
1928 -- if there is no trip stops for the give trip id, move the trip id to error id table.
1929 k := 0;
1930 IF l_debug_on THEN
1931 WSH_DEBUG_SV.log(l_sub_module_name,'Trip Count ',p_entity_id_tab.COUNT);
1932 END IF;
1933 --{
1934 FOR i IN 1..p_entity_id_tab.COUNT
1935 LOOP
1936 --{
1937 IF l_debug_on THEN
1938 WSH_DEBUG_SV.log(l_sub_module_name,'Trip Stop ID ',p_entity_id_tab(i));
1939 END IF;
1940 OPEN get_trip_stops(p_entity_id_tab(i));
1941 FETCH get_trip_stops BULK COLLECT into l_stop_id_tab,l_stop_status_tab;
1942 CLOSE get_trip_stops;
1943 --
1944 IF l_debug_on THEN
1945 WSH_DEBUG_SV.log(l_sub_module_name,'Trip Stps count ',l_stop_id_tab.COUNT);
1946 END IF;
1947 IF l_stop_id_tab.COUNT > 0 THEN
1948 --{
1949 j := l_stop_id_tab.FIRST;
1950 WHILE j IS NOT NULL
1951 LOOP
1952 --{
1953 IF l_debug_on THEN
1954 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Trip STOP ID ',l_stop_id_tab(j) ||'-'||l_stop_status_tab(j));
1955 END IF;
1956 --
1957 IF p_new_intf_status = 'IN_PROCESS' THEN
1958 --
1959 --IF l_stop_status_tab(j) = 'ASR' then
1960 l_status_tab(k) := 'ASP' ;
1961 IF l_debug_on THEN
1962 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Trip STOP ID -New Status ',l_status_tab(k));
1963 END IF;
1964 l_id_tab(k) := l_stop_id_tab(j);
1965 k := k + 1;
1966 --end if ;
1967 --
1968 ELSIF p_new_intf_status = 'COMPLETE' THEN
1969 --
1970 --IF l_stop_status_tab(j) = 'ASP' then
1971 l_status_tab(k) := 'CMP';
1972 IF l_debug_on THEN
1973 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Trip STOP ID -New Status ',l_status_tab(k));
1974 END IF;
1975 l_id_tab(k) := l_stop_id_tab(j);
1976 k := k + 1;
1977 --END IF;
1978 --
1979 END IF;
1980 --
1981 j := l_stop_id_tab.NEXT(j);
1982 --}
1983 END LOOP;
1984 -- Move delivery id to success table - l_entity_id_out_tab
1985 l_entity_id_out_tab.extend;
1986 l_entity_id_out_tab(l_entity_id_out_tab.COUNT):=p_entity_id_tab(i);
1987 --}
1988 ELSE
1989 --{
1990 IF l_debug_on THEN
1991 WSH_DEBUG_SV.log(l_sub_module_name,'Moving to Error table for Trip id',p_entity_id_tab(i));
1992 END IF;
1993 -- Move the Trip Id into error table
1994 l_error_id_out_tab.extend;
1995 l_error_id_out_tab(l_error_id_out_tab.COUNT):=p_entity_id_tab(i);
1996 --}
1997 END IF;
1998 --}
1999 END LOOP;
2000 --Call WSH API to update the new status in Trip Stops
2001 IF l_id_tab.COUNT > 0 THEN
2002 --{
2003 IF l_debug_on THEN
2004 WSH_DEBUG_SV.log(l_sub_module_name,'Calling WSH API-UPDATE_TMS_INTERFACE_FLAG Total stops ids',l_id_tab.COUNT);
2005 END IF;
2006 --
2007 WSH_TRIP_STOPS_PVT.UPDATE_TMS_INTERFACE_FLAG
2008 (P_STOP_ID_TAB=>l_id_tab,
2009 P_TMS_INTERFACE_FLAG_TAB =>l_status_tab,
2010 X_RETURN_STATUS =>l_return_status);
2011 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS then
2012 raise UPD_STOP_INTF_FLAG_API_FALIED;
2013 END IF;
2014 IF l_debug_on THEN
2015 WSH_DEBUG_SV.log(l_sub_module_name,'Processing Trip Calling WSH API to update status-Success-Trip-Stops-Count',l_id_tab.COUNT);
2016 END IF;
2017 --}
2018 END IF;
2019 --}
2020 ELSE
2021 RAISE INVALID_ENTITY_TYPE;
2022 END IF;
2023 -- store the success deliveries/trips back to p_entity_id_tab table
2024 -- store the error deliveries/trips tp_error_id_tab table
2025 p_entity_id_tab := l_entity_id_out_tab;
2026 p_error_id_tab := l_error_id_out_tab;
2027 IF l_debug_on THEN
2028 WSH_DEBUG_SV.log(l_sub_module_name,'End of Process - Delivery/Trip Success',p_entity_id_tab.COUNT);
2029 WSH_DEBUG_SV.log(l_sub_module_name,'End of Process - Delivery/Trip Error',p_error_id_tab.COUNT);
2030 END IF;
2031 --
2032 EXCEPTION
2033 WHEN UPD_DEL_INTF_FLAG_API_FALIED THEN
2034 IF l_debug_on THEN
2035 WSH_DEBUG_SV.log(l_sub_module_name,'UPD_DEL_INTF_FLAG_API_FALIED',sqlerrm);
2036 END IF;
2037 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2038 -- returning all entitiy id to error id table
2039 p_error_id_tab := p_entity_id_tab;
2040 x_return_status := FND_API.G_RET_STS_ERROR;
2041 WHEN UPD_STOP_INTF_FLAG_API_FALIED THEN
2042 IF l_debug_on THEN
2043 WSH_DEBUG_SV.log(l_sub_module_name,'UPD_STOP_INTF_FLAG_API_FALIED',sqlerrm);
2044 END IF;
2045 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2046 -- returning all entitiy id to error id table
2047 p_error_id_tab := p_entity_id_tab;
2048 x_return_status := FND_API.G_RET_STS_ERROR;
2049 WHEN INVALID_ENTITY_TYPE THEN
2050 IF l_debug_on THEN
2051 WSH_DEBUG_SV.log(l_sub_module_name,'INVALID_ENTITY_TYPE',sqlerrm);
2052 END IF;
2053 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2054 -- returning all entitiy id to error id table
2055 p_error_id_tab := p_entity_id_tab;
2056 x_return_status := FND_API.G_RET_STS_ERROR;
2057 WHEN INVALID_NEW_INTF_STATUS THEN
2058 IF l_debug_on THEN
2059 WSH_DEBUG_SV.log(l_sub_module_name,'INVALID_NEW_INTF_STATUS',sqlerrm);
2060 END IF;
2061 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2062 -- returning all entitiy id to error id table
2063 p_error_id_tab := p_entity_id_tab;
2064 x_return_status := FND_API.G_RET_STS_ERROR;
2065 WHEN FND_API.G_EXC_ERROR THEN
2066 IF l_debug_on THEN
2067 WSH_DEBUG_SV.log(l_sub_module_name,' FND_API.G_EXC_ERROR',sqlerrm);
2068 END IF;
2069 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2070 -- returning all entitiy id to error id table
2071 p_error_id_tab := p_entity_id_tab;
2072 x_return_status := FND_API.G_RET_STS_ERROR;
2073 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2074 IF l_debug_on THEN
2075 WSH_DEBUG_SV.log(l_sub_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR',sqlerrm);
2076 END IF;
2077 ROLLBACK TO UPDATE_ENTITY_INTF_STATUS;
2078 -- returning all entitiy id to error id table
2079 p_error_id_tab := p_entity_id_tab;
2080 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2081 WHEN OTHERS then
2082 IF l_debug_on THEN
2083 WSH_DEBUG_SV.log(l_sub_module_name,'OTHERS - ERROR',sqlerrm);
2084 END IF;
2085 -- returning all entitiy id to error id table
2086 p_error_id_tab := p_entity_id_tab;
2087 x_return_status := FND_API.G_RET_STS_ERROR;
2088 wsh_util_core.default_handler('WSH_OTM_OUTBOUND.UPDATE_ENTITY_INTF_STATUS');
2089 END;
2090
2091
2092
2093 END WSH_OTM_OUTBOUND;
2094