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