1 PACKAGE BODY WSH_PURGE AS
2 /* $Header: WSHPURGB.pls 120.11.12020000.2 2012/09/25 11:31:27 sunilku ship $ */
3
4 -- Description: Constant to distinguish CONCURRENT request from
5 -- ONLINE request
6 G_CONC_REQ VARCHAR2(1) := FND_API.G_TRUE;
7
8 --Package Name
9 G_PKG_NAME CONSTANT VARCHAR2(50):='WSH_PURGE';
10
11 -----------------------------------------------------------------------------
12 --
13 -- Procedure: Process_Purge
14 -- Parameters: errbuf Parameter for the Concurrent Program to get the error.
15 -- retcode Parameter for the Concurrent Program to get the return code
16 -- p_execution_mode Specifies whether to Purge Data or View Purge Set
17 -- p_source_system Only the delivery details belonging to this Source System
18 -- would be considered eligible for Purge
19 -- p_ship_from_org Only the deliveries belonging to this Ship From Org
20 -- would be considered eligible for Purge
21 -- p_order_number_from Only the delivery details having source_header_number
22 -- greater than Order Number From would be considered eligible for Purge
23 -- p_order_number_to Only the delivery details having source_header_number
24 -- less than Order Number To would be considered eligible for Purge
25 -- p_order_type Only the delivery details belonging to this Order Type
26 -- would be considered eligible for Purge
27 -- p_ship_date_from Only the deliveries having initial_pickup_date greater
28 -- than Ship Date From would be considered eligible for Purge
29 -- p_ship_date_to Only the deliveries having initial_pickup_date less than
30 -- Ship Date To would be considered eligible for Purge
31 -- p_delete_beyond_x_ship_days Only the deliveries having initial_pickup_date less
32 -- than the specified date would be considered eligible for Purge
33 -- p_purge_intransit_trips Decides whether to purge In Transit Trips or not
34 -- p_delete_empty_records Decides whether to delete empty record or not.
35 -- The empty records can be Empty Trips, Orphaned Empty Deliveries,
36 -- Delivery with Empty containers, Empty Containers
37 -- p_create_date_from Only Empty records having creation_date greater than this
38 -- date would be purged
39 -- p_create_date_to Only Empty records having creation_date less than this
40 -- date would be purged
41 -- p_del_beyond_creation_days Only Empty records having creation_date less than
42 -- this date would be purged
43 -- p_sort_per_criteria Sorts the report output according to Trip,
44 -- Delivery or Order Number
45 -- p_print_detail If "Detail with LPN", the report would contain the parameters / summary
46 -- page and all detail pages with Trips, Deliveries and
47 -- Sales Orders with Container data eligible to purge or purged.
48 -- If "Detail", the report would contain the parameters / summary
49 -- page and all detail pages with Trips, Deliveries and
50 -- Sales Orders data eligible to purge or purged.
51 -- If "Summary", the report would contain only the parameters / summary page.
52
53 -- Description: This procedure is called by the concurrent program. The procedure has the following structure
54 -- calls Get_Purge_Set - To get the valid entities to be purged
55 -- calls Purge_Entities - To purge data in Shipping/FTE tables
56 -- calls Generate_Report - To generate the report through XML publisher
57 -----------------------------------------------------------------------------
58
59 PROCEDURE Process_Purge( errbuf OUT NOCOPY VARCHAR2,
60 retcode OUT NOCOPY VARCHAR2,
61 p_execution_mode varchar2,
62 p_source_system varchar2,
63 p_ship_from_org number,
64 p_order_number_from varchar2,
65 p_source_system_dummy varchar2,
66 p_order_number_to varchar2,
67 p_dummy_order varchar2,
68 p_order_type number,
69 p_ship_date_from varchar2,
70 p_ship_date_to varchar2,
71 p_dummy_ship_date varchar2,
72 p_delete_beyond_x_ship_days number,
73 p_dummy_x_ship_days varchar2,
74 p_purge_intransit_trips varchar2,
75 p_delete_empty_records varchar2,
76 p_create_date_from varchar2,
77 p_create_date_to varchar2,
78 p_dummy_create_date varchar2,
79 p_del_beyond_creation_days number,
80 p_dummy_x_create_days varchar2,
81 p_sort_per_criteria varchar2,
82 p_print_detail varchar2
83 )IS
84
85 l_return_status VARCHAR2(1);
86 l_debug_on BOOLEAN;
87
88 --PLSQL tables for the entities
89 l_tbl_trip_purge_set Trip_ID_Tbl_Type; --Trip
90 l_tbl_delivery_purge_set Delivery_ID_Tbl_Type; --Delivery
91 l_tbl_del_detail_purge_set Del_Detail_ID_Tbl_Type; -- Delivery Detail
92 l_tbl_del_leg_purge_set Del_Leg_ID_Tbl_Type; --Delivery Leg
93 l_tbl_trip_stop_purge_set Trip_Stop_ID_Tbl_Type; --Trip Stop
94 l_tbl_container_purge_set Container_ID_Tbl_Type; --Container
95
96 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PROCESS_PURGE';
97
98 BEGIN
99
100 -- Set for logging
101 IF G_CONC_REQ = FND_API.G_TRUE THEN
102 WSH_UTIL_CORE.Enable_Concurrent_Log_Print;
103 END IF;
104
105 -- Debug Statements
106 --
107 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
108 --
109 IF l_debug_on IS NULL THEN
110 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
111 END IF;
112 --
113 IF l_debug_on THEN
114 WSH_DEBUG_SV.push(l_module_name);
115 WSH_DEBUG_SV.log(l_module_name,'P_EXECUTION_MODE',p_execution_mode);
116 WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_SYSTEM',p_source_system);
117 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_FROM_ORG',p_ship_from_org);
118 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_FROM',p_order_number_from);
119 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_To',p_order_number_to);
120 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_TYPE',p_order_type);
121 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_FROM',p_ship_date_from);
122 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_TO',p_ship_date_to);
123 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_BEYOND_X_SHIP_DAYS',p_delete_beyond_x_ship_days);
124 WSH_DEBUG_SV.log(l_module_name,'P_PURGE_INTRANSIT_TRIPS',p_purge_intransit_trips);
125 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_EMPTY_Records',p_delete_empty_records);
126 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_FROM',p_create_date_from);
127 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_TO',p_create_date_to);
128 WSH_DEBUG_SV.log(l_module_name,'P_DEL_BEYOND_CREATION_DAYS',p_del_beyond_creation_days);
129 WSH_DEBUG_SV.log(l_module_name,'P_SORT_PER_CRITERIA',p_sort_per_criteria);
130 WSH_DEBUG_SV.log(l_module_name,'P_PRINT_DETAIL',p_print_detail);
131 END IF;
132
133 IF l_debug_on THEN
134 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.GET_PURGE_SET', WSH_DEBUG_SV.C_PROC_LEVEL);
135 END IF;
136
137 --call Get_Purge_Set
138 Get_Purge_Set( p_source_system => p_source_system ,
139 p_ship_from_org => p_ship_from_org ,
140 p_order_number_from => p_order_number_from ,
141 p_order_number_to => p_order_number_to ,
142 p_order_type => p_order_type ,
143 p_ship_date_from => p_ship_date_from ,
144 p_ship_date_to => p_ship_date_to ,
145 p_delete_beyond_x_ship_days => p_delete_beyond_x_ship_days ,
146 p_purge_intransit_trips => p_purge_intransit_trips ,
147 p_delete_empty_records => p_delete_empty_records ,
148 p_create_date_from => p_create_date_from ,
149 p_create_date_to => p_create_date_to ,
150 p_del_beyond_creation_days => p_del_beyond_creation_days ,
151 x_tbl_trip_purge_set => l_tbl_trip_purge_set ,
152 x_tbl_delivery_purge_set => l_tbl_delivery_purge_set,
153 x_tbl_del_details_purge_set => l_tbl_del_detail_purge_set,
154 x_tbl_del_legs_purge_set => l_tbl_del_leg_purge_set ,
155 x_tbl_trip_stops_purge_set => l_tbl_trip_stop_purge_set,
156 x_tbl_containers_purge_set => l_tbl_container_purge_set,
157 x_return_status => l_return_status
158 );
159
160 IF l_debug_on THEN
161 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
162 END IF;
163
164 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
165 IF G_CONC_REQ = FND_API.G_TRUE THEN
166 errbuf := 'Error occurred in WSH_PURGE.GET_PURGE_SET';
167 retcode := '2';
168 END IF;
169
170 IF l_debug_on THEN
171 WSH_DEBUG_SV.pop(l_module_name);
172 END IF;
173 RETURN;
174 END IF;
175
176 IF l_debug_on THEN
177 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.GENERATE_PURGE_REPORT', WSH_DEBUG_SV.C_PROC_LEVEL);
178 END IF;
179 --call Generate_Purge_Report
180 Generate_Purge_Report( p_execution_mode => p_execution_mode ,
181 p_source_system => p_source_system ,
182 p_ship_from_org => p_ship_from_org ,
183 p_order_number_from => p_order_number_from ,
184 p_order_number_to => p_order_number_to ,
185 p_order_type => p_order_type ,
186 p_ship_date_from => p_ship_date_from ,
187 p_ship_date_to => p_ship_date_to ,
188 p_delete_beyond_x_ship_days => p_delete_beyond_x_ship_days ,
189 p_purge_intransit_trips => p_purge_intransit_trips ,
190 p_delete_empty_records => p_delete_empty_records ,
191 p_create_date_from => p_create_date_from ,
192 p_create_date_to => p_create_date_to ,
193 p_del_beyond_creation_days => p_del_beyond_creation_days ,
194 p_sort_per_criteria => p_sort_per_criteria ,
195 p_print_detail => p_print_detail ,
196 p_tbl_trip_purge_set => l_tbl_trip_purge_set ,
197 p_tbl_delivery_purge_set => l_tbl_delivery_purge_set,
198 p_tbl_container_purge_set => l_tbl_container_purge_set,
199 p_count_legs => l_tbl_del_leg_purge_set.COUNT ,
200 p_count_stops => l_tbl_trip_stop_purge_set.COUNT,
201 p_count_details => l_tbl_del_detail_purge_set.COUNT,
202 p_count_containers => l_tbl_container_purge_set.COUNT,
203 x_return_status => l_return_status
204 );
205
206 IF l_debug_on THEN
207 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
208 END IF;
209
210 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
211 IF G_CONC_REQ = FND_API.G_TRUE THEN
212 errbuf := 'Error occurred in WSH_PURGE.GENERATE_PURGE_REPORT';
213 retcode := '2';
214 END IF;
215
216 IF l_debug_on THEN
217 WSH_DEBUG_SV.pop(l_module_name);
218 END IF;
219 RETURN;
220 END IF;
221
222 IF p_execution_mode = 'P' THEN
223 IF l_debug_on THEN
224 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_ENTITIES', WSH_DEBUG_SV.C_PROC_LEVEL);
225 END IF;
226
227 --call Purge_Entities
228 Purge_Entities(p_tbl_trip_purge_set => l_tbl_trip_purge_set ,
229 p_tbl_delivery_purge_set => l_tbl_delivery_purge_set ,
230 p_tbl_del_details_purge_set => l_tbl_del_detail_purge_set ,
231 p_tbl_del_legs_purge_set => l_tbl_del_leg_purge_set ,
232 p_tbl_trip_stops_purge_set => l_tbl_trip_stop_purge_set ,
233 p_tbl_containers_purge_set => l_tbl_container_purge_set ,
234 x_return_status => l_return_status
235 );
236
237 IF l_debug_on THEN
238 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
239 END IF;
240
241 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
242 IF G_CONC_REQ = FND_API.G_TRUE THEN
243 errbuf := 'Error occurred in WSH_PURGE.PURGE_ENTITIES';
244 retcode := '2';
245 END IF;
246
247 IF l_debug_on THEN
248 WSH_DEBUG_SV.pop(l_module_name);
249 END IF;
250 RETURN;
251 END IF;
252 END IF;
253
254 l_tbl_trip_purge_set.DELETE;
255 l_tbl_delivery_purge_set.DELETE;
256 l_tbl_del_detail_purge_set.DELETE;
257 l_tbl_del_leg_purge_set.DELETE;
258 l_tbl_trip_stop_purge_set.DELETE;
259 l_tbl_container_purge_set.DELETE;
260
261 IF l_debug_on THEN
262 WSH_DEBUG_SV.pop(l_module_name);
263 END IF;
264
265 END Process_Purge;
266
267
268 /*-----------------------------------------------------------------------------
269 Procedure: Get_Purge_Set
270 Parameters: p_source_system Only the delivery details belonging to this Source System
271 would be considered eligible for Purge
272 p_ship_from_org Only the deliveries belonging to this Ship From Org
273 would be considered eligible for Purge
274 p_order_number_from Only the delivery details having source_header_number
275 greater than Order Number From would be considered eligible for Purge
276 p_order_number_to Only the delivery details having source_header_number
277 less than Order Number To would be considered eligible for Purge
278 p_order_type Only the delivery details belonging to this Order Type
279 would be considered eligible for Purge
280 p_ship_date_from Only the deliveries having initial_pickup_date greater
281 than Ship Date From would be considered eligible for Purge
282 p_ship_date_to Only the deliveries having initial_pickup_date less than
283 Ship Date To would be considered eligible for Purge
284 p_delete_beyond_x_ship_days Only the deliveries having initial_pickup_date greater
285 than the specified date would be considered eligible for Purge
286 p_purge_intransit_trips Decides whether to purge In Transit Trips or not
287 p_delete_empty_records Decides whether to delete empty record or not.
288 The empty records can be Empty Trips, Orphaned Empty Deliveries,
289 Delivery with Empty containers, Empty Containers
290 p_create_date_from Only Empty records having creation_date greater than this
291 date would be purged
292 p_create_date_to Only Empty records having creation_date less than this
293 date would be purged
294 p_del_beyond_creation_days Only Empty records having creation_date greater than
295 this date would be purged
296 x_tbl_trip_purge_set - pl/sql table of trip id's eligible for purge
297 x_tbl_delivery_purge_set - pl/sql table of delivery id's eligible for purge
298 x_tbl_del_details_purge_set - pl/sql table of delivery detail id's eligible for purge
299 x_tbl_del_legs_purge_set - pl/sql table of delivery leg id's eligible for purge
300 x_tbl_trip_stops_purge_set - pl/sql table of trip stop id's eligible for purge
301 x_tbl_containers_purge_set - pl/sql table of container id's eligible for purge
302 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
303
304 Description: This API gets all the Shipping Data from the view WSH_PURGE_SET_V
305 and puts it into the plsql tables for respective entities after validating it
306 with the user given parameters
307 ==============================================================================
308 Input: Parameters as given in the FDD.
309 Output: Table of Record Types for Trips, Stops, Legs,
310 Deliveries, Containers, Details
311 ================================================================================
312 Logic: i) Build Trip SQL for purge set types:
313 NON_EMPTY - Complete Shipping Entities
314
315 ii) Build Delivery SQL for purge set type:
316 EMPTYDELS - Orphaned empty deliveries without any details
317
318 only Delete Empty Records, creation date from, to and delete beyond
319 x creation days will be honoured.
320
321 iii) Execute the Trip ,Delivery and Container dynamically built SQLs and populate the
322 Table of record types for trip,delivery and containers.
323
324 Add Trip IDs for purge set types :
325 EMPTYTRIPS - Orphaned Trips without any deliveries assigned to them
326
327 iv) For NON_EMPTY purge sets get the deliveries for all
328 trips and add delivery ids to the purge set for deliveries.
329
330 v) For a given trip get all the stops and create a stops purge set.
331
332 vi) For a given delivery get all the delivery legs and details and create
333 a purge set.
334
335 vii) From NON_EMPTY get all the container ids(wdd.container_flag='Y') and
336 populate them in container purge set
337 -----------------------------------------------------------------------------*/
338
339 PROCEDURE Get_Purge_Set(p_source_system varchar2,
340 p_ship_from_org number,
341 p_order_number_from varchar2,
342 p_order_number_to varchar2,
343 p_order_type number,
344 p_ship_date_from varchar2,
345 p_ship_date_to varchar2,
346 p_delete_beyond_x_ship_days number,
347 p_purge_intransit_trips varchar2,
348 p_delete_empty_records varchar2,
349 p_create_date_from varchar2,
350 p_create_date_to varchar2,
351 p_del_beyond_creation_days number,
352 x_tbl_trip_purge_set OUT NOCOPY Trip_ID_Tbl_Type ,
353 x_tbl_delivery_purge_set OUT NOCOPY Delivery_ID_Tbl_Type,
354 x_tbl_del_details_purge_set OUT NOCOPY Del_Detail_ID_Tbl_Type,
355 x_tbl_del_legs_purge_set OUT NOCOPY Del_Leg_ID_Tbl_Type,
356 x_tbl_trip_stops_purge_set OUT NOCOPY Trip_Stop_ID_Tbl_Type,
357 x_tbl_containers_purge_set OUT NOCOPY Container_ID_Tbl_Type,
358 x_return_status OUT NOCOPY VARCHAR2
359 )IS
360
361 l_debug_on BOOLEAN;
362 l_return_status VARCHAR2(1);
363
364 trip_sql VARCHAR2(4000);
365 delivery_sql VARCHAR2(4000);
366 empty_trip_sql VARCHAR2(4000);
367 empty_container_sql VARCHAR2(4000);
368 --Variable added for bug 12397111
369 cancel_wdd_sql VARCHAR2(4000);
370 l_delivery_detail_id Del_Detail_ID_Tbl_Type;
371
372
373
374 l_source_system VARCHAR2(20);
375 l_loop_index NUMBER;
376 i number;
377
378 l_trip_id NUMBER;
379 l_delivery_id NUMBER;
380 l_stop_id NUMBER;
381 l_leg_id NUMBER;
382 l_detail_id NUMBER;
383 l_container_id NUMBER;
384 l_container_flag VARCHAR2(1);
385
386 l_trip_name VARCHAR2(30);
387 l_delivery_name VARCHAR2(30);
388
389 l_trip_purge_row Trip_ID_Rec_Type;
390 l_del_purge_row Delivery_ID_Rec_Type;
391
392 l_tbl_trip_purge_set Trip_ID_Tbl_Type;
393
394 TYPE PurgeCurType IS REF CURSOR;
395 c_trip_purge_cur PurgeCurType;
396 c_del_purge_cur PurgeCurType;
397 c_empty_trip_cur PurgeCurType;
398 c_empty_containers PurgeCurType;
399 --Cursor variable added for bug 12397111
400 c_wdd_purge_cur PurgeCurType;
401
402 CURSOR c_dels_for_trip(p_tripid NUMBER) IS
403 SELECT distinct wnd.delivery_id, wnd.name
404 FROM wsh_trips wt,
405 wsh_trip_stops wts,
406 wsh_delivery_legs wdl,
407 wsh_new_deliveries wnd
408 WHERE wt.trip_id = wts.trip_id
409 AND wts.stop_id = wdl.pick_up_stop_id
410 AND wdl.delivery_id = wnd.delivery_id
411 AND wts.trip_id = p_tripid;
412
413 CURSOR c_stops_for_trip(p_tripid NUMBER) IS
414 SELECT stop_id
415 FROM wsh_trip_stops
416 WHERE trip_id= p_tripid;
417
418 CURSOR c_legs_for_del(p_deliveryid NUMBER) IS
419 SELECT delivery_leg_id
420 FROM wsh_delivery_legs
421 WHERE delivery_id = p_deliveryid;
422
423 --Bug 12397111 : Added union to fetch cancelled delivery lines while purging
424 CURSOR c_details_for_del(p_deliveryid NUMBER) IS
425 SELECT wda.delivery_detail_id,
426 wdd.container_flag
427 FROM wsh_delivery_assignments_v wda,
428 wsh_delivery_details wdd
429 WHERE wda.delivery_id = p_deliveryid
430 AND wda.delivery_detail_id = wdd.delivery_detail_id
431 UNION
432 SELECT wdd_can.delivery_detail_id,
433 'N'
434 FROM wsh_delivery_assignments_v wda,
435 wsh_delivery_details wdd,
436 wsh_delivery_details wdd_can
437 WHERE wda.delivery_id = p_deliveryid
438 AND wda.delivery_detail_id = wdd.delivery_detail_id
439 AND wdd_can.source_line_id = wdd.source_line_id
440 AND wdd.source_code = 'OE'
441 AND wdd_can.source_code = 'OE'
442 AND wdd_can.released_status = 'D';
443
444
445 --cursor to select empty trips would come from dynamic sql
446 --cursor to select empty dels would come from dynamic sql
447 --(based on create date from and to)
448
449 /*
450 --cursor to select orphaned deliveries with only empty containers
451 CURSOR c_delivery_empty_containers IS
452 SELECT wnd.delivery_id
453 --wda.delivery_detail_id
454 FROM wsh_new_deliveries wnd,
455 wsh_delivery_assignments_v wda,
456 wsh_delivery_legs wdl
457 WHERE wnd.delivery_id = wda.delivery_id
458 AND wnd.delivery_id = wdl.delivery_id(+)
459 AND wdl.delivery_leg_id IS NULL
460 AND NOT EXISTS (
461 SELECT 1
462 FROM wsh_delivery_details wdd,
463 wsh_delivery_assignments_v wda1
464 WHERE wdd.delivery_Detail_id = wda1.delivery_detail_id
465 AND wda1.delivery_id = wnd.delivery_id
466 AND wdd.container_flag = 'N'
467 ) ;
468 */
469
470 --cursor to select orphaned empty containers
471 /* CURSOR c_empty_containers IS
472 SELECT
473 wdd.delivery_detail_id,
474 'EMPTYLPNS'
475 --wdd.container_name dd_lpn_number,
476 FROM
477 wsh_delivery_assignments_v wda,
478 wsh_delivery_details wdd
479 WHERE
480 wda.delivery_detail_id = wdd.delivery_detail_id AND
481 wdd.container_flag = 'Y'AND
482 wda.delivery_id IS NULL AND
483 NOT EXISTS (
484 SELECT 1
485 FROM
486 wsh_delivery_assignments_v wda2
487 WHERE
488 wda2.parent_delivery_detail_id = wda.delivery_detail_id
489 ) ;
490 */
491
492 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_PURGE_SET';
493
494 BEGIN
495
496 -- Debug Statements
497 --
498 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
499 --
500 IF l_debug_on IS NULL THEN
501 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
502 END IF;
503
504 IF l_debug_on THEN
505 WSH_DEBUG_SV.push(l_module_name);
506 WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_SYSTEM',p_source_system);
507 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_FROM_ORG',p_ship_from_org);
508 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_FROM',p_order_number_from);
509 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_To',p_order_number_to);
510 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_TYPE',p_order_type);
511 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_FROM',p_ship_date_from);
512 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_TO',p_ship_date_to);
513 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_BEYOND_X_SHIP_DAYS',p_delete_beyond_x_ship_days);
514 WSH_DEBUG_SV.log(l_module_name,'P_PURGE_INTRANSIT_TRIPS',p_purge_intransit_trips);
515 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_EMPTY_Records',p_delete_empty_records);
516 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_FROM',p_create_date_from);
517 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_TO',p_create_date_to);
518 WSH_DEBUG_SV.log(l_module_name,'P_DEL_BEYOND_CREATION_DAYS',p_del_beyond_creation_days);
519 END IF;
520
521 x_return_status:=WSH_UTIL_CORE.G_RET_STS_SUCCESS;
522
523 --construct trip_sql
524 --modifed sql for bug 12615666
525 trip_sql := 'WITH trip_inner_query AS
526 (SELECT inner.trip_id trip_id,
527 COUNT ( inner.dd_id ) dd_cnt
528 FROM
529 wsh_purge_set_v inner ';
530 --check whether FTE is installed
531 IF (wsh_util_core.fte_is_installed='Y') THEN
532 trip_sql := trip_sql || ',fte_invoice_headers fih ' ;
533 END IF;
534
535 trip_sql :=trip_sql ||'WHERE ';
536
537 IF (p_ship_from_org IS NOT NULL) THEN
538 trip_sql := trip_sql || '
539 inner.del_ship_from_org = '
540 || p_ship_from_org || 'AND ' ;
541 END IF;
542
543 --added TRUNC function for bug 12605679
544 IF (p_ship_date_from IS NOT NULL) THEN
545 trip_sql := trip_sql ||
546 ' TRUNC(inner.del_pickup_date) BETWEEN ''' || FND_DATE.CANONICAL_TO_DATE(p_ship_date_from) ||
547 ''' AND ''' || FND_DATE.CANONICAL_TO_DATE(p_ship_date_to) || '''';
548 ELSE
549 trip_sql := trip_sql ||
550 ' inner.del_pickup_date < '''
551 || to_date(SYSDATE - p_delete_beyond_x_ship_days,'DD-MM-YYYY') ||'''' ;
552 END IF;
553 --RTV changes
554 IF p_source_system IS NULL THEN
555 RETURN;
556 END IF;
557 IF p_source_system = 'WSH' THEN
558 trip_sql := trip_sql || ' AND inner.dd_source_code = ''WSH'' ' ;
559 ELSIF p_source_system <> 'ALL' THEN
560 trip_sql := trip_sql || ' AND inner.dd_source_code IN ('''||p_source_system||''',''WSH'') ' ;
561 END IF;
562
563 /*
564 IF (p_source_system = 'ALL') THEN
565 trip_sql := trip_sql || '
566 AND inner.dd_source_code IN (''OE'',''PO'',''WSH'') ' ;
567 ELSIF (p_source_system = 'OE') THEN
568 trip_sql := trip_sql || '
569 AND inner.dd_source_code IN (''OE'',''WSH'') ' ;
570 ELSIF (p_source_system = 'PO') THEN
571 trip_sql := trip_sql || '
572 AND inner.dd_source_code IN (''PO'',''WSH'') ' ;
573 ELSIF (p_source_system = 'WSH') THEN
574 trip_sql := trip_sql || '
575 AND inner.dd_source_code = ''WSH'' ' ;
576 END IF;
577 */
578 --RTV changes
579 --check to take order type
580 IF (p_order_type IS NOT NULL) THEN
581 trip_sql := trip_sql ||
582 ' AND inner.dd_source_header_type_id = '
583 || p_order_type ;
584 END IF; --end check to take order type
585
586 --check to take order number range
587 IF (p_order_number_from IS NOT NULL) THEN
588 trip_sql := trip_sql ||
589 ' AND inner.dd_source_header_number BETWEEN '
590 || p_order_number_from ||
591 ' AND ' || p_order_number_to || ' ' ;
592 END IF;--end check to take order number range
593 --RTV changes Exclude the OKE lines since they are not eligible to be purged and we cannot purge it
594 trip_sql := trip_sql || ' AND inner.dd_source_code <> ''OKE'' ' ;
595
596 --check for deleting Intransit Trips
597 IF (p_purge_intransit_trips = 'Y') THEN
598 trip_sql := trip_sql ||
599 ' AND inner.trip_status IN (''CL'',''IT'') ' ;
600 ELSE
601 trip_sql := trip_sql ||
602 ' AND inner.trip_status IN (''CL'') ' ;
603 END IF;--end check for deleting Intransit Trips
604 --RTV changes
605 trip_sql := trip_sql ||
606 ' AND DECODE(inner.dd_source_code,
607 ''OE'',(DECODE((SELECT count(oe.order_number)
608 FROM oe_order_headers_all oe
609 WHERE oe.header_id= inner.dd_source_header_id),0,''FALSE'',''TRUE'')),
610 ''PO'',( DECODE((SELECT count(po.po_header_id)
611 FROM po_headers_all po
612 WHERE po.po_header_id= inner.dd_source_header_id),0,''FALSE'',''TRUE'')),
613 ''RTV'',(Decode(inner.dd_po_shipment_line_id,NULL,
614 decode((select count(mmt.transaction_id)
615 from mtl_material_transactions mmt
616 WHERE mmt.picking_line_id = inner.dd_id
617 ),0,''FALSE'',''TRUE''
618 ),
619 decode((select count(rt.interface_source_line_id)
620 from rcv_transactions rt
621 WHERE rt.interface_source_line_id= inner.dd_id
622 ),0,''FALSE'',''TRUE''
623 )
624 )
625 ),
626 ''FALSE'') = ''FALSE''
627 ';
628 --check whether FTE is installed
629 IF (wsh_util_core.fte_is_installed='Y') THEN
630 trip_sql := trip_sql ||
631 ' AND fih.bol(+) = inner.bol
632 AND DECODE(fih.bill_status,
633 ''PAID'', ''Y'',
634 ''OBSOLETE'' ,''Y'',
635 NULL, ''Y'',
636 ''N'') = ''Y''
637 ';
638 END IF;--end check whether FTE is installed
639 --end construct trip_sql
640
641 -- Bug 10184411
642 -- The following check is being added to ensure no un-shipped or un-interfaced
643 -- delivery lines are being purged.This check is mandatory for TPW shipments.
644 -- Don't prefer to use a sub-query here.But we dont have these columns in the purge view.
645 -- We can add these filtering columns to the view wsh_purge_set_v and scan directly and this sub-query can be flushed out.
646 trip_sql := trip_sql ||
647 ' AND NOT EXISTS
648 ( SELECT 1 FROM
649 wsh_delivery_details dd
650 WHERE
651 dd.delivery_detail_id = inner.dd_id AND
652 (
653 Nvl(dd.released_status,''N'') NOT IN (''C'',''L'') OR
654 dd.oe_interfaced_flag IN (''N'',''P'') OR
655 dd.inv_interfaced_flag IN (''N'',''P'')
656 )
657 ) ';
658 trip_sql := trip_sql ||
659 'GROUP BY inner.trip_id)' ;
660 trip_sql := trip_sql ||' SELECT outer.trip_id , outer.trip_name , ''NON_EMPTY'' purge_set_type
661 FROM wsh_purge_set_v outer ,trip_inner_query
662 where outer.trip_id = trip_inner_query.trip_id
663 GROUP BY outer.trip_id , outer.trip_name
664 HAVING count ( outer.dd_id ) = (select dd_cnt from trip_inner_query where trip_id = outer.trip_id)';
665
666 --end of trip_sql construct
667 IF l_debug_on THEN
668 WSH_DEBUG_SV.log(l_module_name,'trip_sql ==>',trip_sql);
669 END IF;
670 --check whether to delete empty records
671 IF (p_delete_empty_records ='Y') THEN
672 --construct delivery_sql for empty deliveries
673 delivery_sql := 'SELECT
674 wnd.delivery_id,wnd.name
675 FROM
676 wsh_new_deliveries wnd,
677 wsh_delivery_assignments_v wda,
678 wsh_delivery_legs wdl
679 WHERE
680 wda.delivery_id(+) = wnd.delivery_id AND
681 wnd.delivery_id = wdl.delivery_id(+) AND
682 wdl.delivery_leg_id IS NULL AND
683 wda.delivery_detail_id IS NULL ' ;
684
685 --check for taking creation dates
686 --added TRUNC function for bug 12605679
687 IF (p_create_date_from IS NOT NULL) THEN
688 delivery_sql := delivery_sql || '
689 AND TRUNC(wnd.creation_date)
690 BETWEEN '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_from) || '''
691 AND '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_to) || '''' ;
692 ELSE
693 delivery_sql := delivery_sql || '
694 AND wnd.creation_date < '''
695 || to_date(SYSDATE - p_del_beyond_creation_days,'DD-MM-YYYY') ||'''' ;
696 END IF; --end check for taking creation dates
697
698 --Bugfix 14578425 Start
699 --check for organization
700 IF (p_ship_from_org IS NOT NULL) THEN
701 delivery_sql := delivery_sql || '
702 AND wnd.organization_id ='|| p_ship_from_org ;
703 END IF; --end check for organization
704 --Bugfix 14578425 End
705
706 delivery_sql := delivery_sql || '
707 ORDER BY wnd.name ' ;
708 --end construct delivery_sql
709
710 --construct SQL for empty trips
711 empty_trip_sql := ' SELECT distinct wt.trip_id, wt.name
712 FROM wsh_trips wt,
713 wsh_trip_stops wts,
714 wsh_delivery_legs wdl1,
715 wsh_delivery_legs wdl2
716 WHERE ';
717
718 --check for taking creation dates
719 --added TRUNC function for bug 12605679
720 IF (p_create_date_from IS NOT NULL) THEN
721 empty_trip_sql := empty_trip_sql || '
722 TRUNC(wt.creation_date)
723 BETWEEN '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_from) || '''
724 AND '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_to) || '''' ;
725 ELSE
726 empty_trip_sql := empty_trip_sql || '
727 wt.creation_date < '''
728 || to_date(SYSDATE - p_del_beyond_creation_days,'DD-MM-YYYY') ||'''' ;
729 END IF; --end check for taking creation dates
730
731 empty_trip_sql := empty_trip_sql || '
732 AND wt.trip_id = wts.trip_id(+)
733 AND wdl1.pick_up_stop_id(+) = wts.stop_id
734 AND wdl2.drop_off_stop_id(+) = wts.stop_id
735 AND wdl1.delivery_leg_id IS NULL
736 AND wdl2.delivery_leg_id IS NULL
737 AND NOT EXISTS
738 ( SELECT 1
739 FROM wsh_trip_stops wtss,
740 wsh_delivery_legs wdl1s
741 WHERE wtss.trip_id = wt.trip_id
742 AND wdl1s.pick_up_stop_id = wtss.stop_id
743 )' ;
744 --end contructing SQL for empty trips
745
746 --construct SQL for empty containers
747 empty_container_sql := 'SELECT wdd.delivery_detail_id,
748 ''EMPTYLPNS''
749 --wdd.container_name dd_lpn_number,
750 FROM
751 wsh_delivery_assignments_v wda,
752 wsh_delivery_details wdd
753 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
754 AND wdd.container_flag = ''Y''
755 AND wda.delivery_id IS NULL ';
756
757 --check for taking creation dates
758 --added TRUNC function for bug 12605679
759 IF (p_create_date_from IS NOT NULL) THEN
760 empty_container_sql := empty_container_sql || '
761 AND TRUNC(wdd.creation_date)
762 BETWEEN '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_from) || '''
763 AND '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_to) || '''' ;
764 ELSE
765 empty_container_sql := empty_container_sql || '
766 AND wdd.creation_date < '''
767 || to_date(SYSDATE - p_del_beyond_creation_days,'DD-MM-YYYY') ||'''' ;
768 END IF; --end check for taking creation dates
769
770 empty_container_sql := empty_container_sql || '
771 AND NOT EXISTS (
772 SELECT 1
773 FROM
774 wsh_delivery_assignments_v wda2
775 WHERE
776 wda2.parent_delivery_detail_id = wda.delivery_detail_id
777 ) ' ;
778
779 END IF; --end check whether to delete empty records
780
781 --fetch trip ids for non empty trips and insert into PL/SQL table
782 OPEN c_trip_purge_cur FOR trip_sql;
783 FETCH c_trip_purge_cur BULK COLLECT into x_tbl_trip_purge_set;
784 CLOSE c_trip_purge_cur;
785
786 IF x_tbl_trip_purge_set.COUNT > 0 THEN --check for number of records in plsql table
787 IF l_debug_on THEN
788 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.VALIDATE_TRIPS', WSH_DEBUG_SV.C_PROC_LEVEL);
789 END IF;
790 --Check whether LPNs belonging to the trips are eligible to purge from WMS
791 Validate_Trips( p_tbl_trip_purge_set => x_tbl_trip_purge_set,
792 x_tbl_trip_purge_set => l_tbl_trip_purge_set,
793 x_return_status => l_return_status );
794
795 x_tbl_trip_purge_set := l_tbl_trip_purge_set;
796
797 IF l_debug_on THEN
798 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
799 END IF;
800
801 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
802 x_return_status := l_return_status;
803 IF l_debug_on THEN
804 WSH_DEBUG_SV.pop(l_module_name);
805 END IF;
806 RETURN;
807 END IF;
808 END IF;
809
810 --check whether to fetch empty records
811 IF (p_delete_empty_records ='Y') THEN
812 --fetch trip ids for empty trips and insert into PL/SQL table
813 OPEN c_empty_trip_cur FOR empty_trip_sql;
814 LOOP
815 FETCH c_empty_trip_cur into l_trip_id,l_trip_name;
816 EXIT WHEN c_empty_trip_cur%NOTFOUND;
817 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT+1).trip_id := l_trip_id;
818 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT).trip_name := l_trip_name;
819 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT).purge_set_type := 'EMPTYTRIPS';
820 END LOOP;
821 CLOSE c_empty_trip_cur;
822
823 --fetch delivery ids for empty deliveries
824 OPEN c_del_purge_cur FOR delivery_sql;
825 LOOP
826 FETCH c_del_purge_cur into l_delivery_id,l_delivery_name;
827 EXIT WHEN c_del_purge_cur%NOTFOUND;
828 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT+1).delivery_id := l_delivery_id;
829 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT).delivery_name := l_delivery_name;
830 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT).purge_set_type := 'EMPTYDELS';
831 END LOOP;
832 CLOSE c_del_purge_cur;
833
834 --fetch delivery ids for Deliveries having empty containers only
835 /* OPEN c_delivery_empty_containers;
836 LOOP
837 FETCH c_delivery_empty_containers into l_delivery_id;
838 EXIT WHEN c_delivery_empty_containers%NOTFOUND;
839 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT+1).delivery_id := l_delivery_id;
840 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT).purge_set_type := 'DEL_EMPTYLPNS';
841 END LOOP;
842 CLOSE c_delivery_empty_containers;
843 */
844 --fetch container id for orphaned empty containers
845 OPEN c_empty_containers FOR empty_container_sql;
846 FETCH c_empty_containers BULK COLLECT INTO x_tbl_containers_purge_set;
847 CLOSE c_empty_containers;
848 END IF; --end check whether to fetch empty records
849
850 --add the deliveries belonging to trips from the table x_tbl_trip_purge_set
851 --to the table x_delivery_tbl_trip_set
852 IF x_tbl_trip_purge_set.COUNT > 0 THEN
853 FOR l_loop_index in x_tbl_trip_purge_set.FIRST .. x_tbl_trip_purge_set.LAST
854 LOOP
855 l_trip_id := x_tbl_trip_purge_set(l_loop_index).trip_id;
856
857 IF (x_tbl_trip_purge_set(l_loop_index).purge_set_type = 'NON_EMPTY') THEN
858 OPEN c_dels_for_trip(l_trip_id);
859 LOOP
860 FETCH c_dels_for_trip into l_delivery_id,l_delivery_name;
861 EXIT WHEN c_dels_for_trip%NOTFOUND;
862 --x_tbl_delivery_purge_set.EXTEND;
863 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT+1).delivery_id := l_delivery_id;
864 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT).delivery_name := l_delivery_name;
865 x_tbl_delivery_purge_set(x_tbl_delivery_purge_set.COUNT).purge_set_type := 'NON_EMPTY';
866 END LOOP;
867 CLOSE c_dels_for_trip;
868 END IF;
869 --fetch trip stops for the trips
870 OPEN c_stops_for_trip(l_trip_id);
871 LOOP
872 FETCH c_stops_for_trip into l_stop_id;
873 EXIT WHEN c_stops_for_trip%NOTFOUND;
874 x_tbl_trip_stops_purge_set(x_tbl_trip_stops_purge_set.COUNT+1).stop_id := l_stop_id;
875 END LOOP;
876 CLOSE c_stops_for_trip;
877 END LOOP; -- end adding delivery ids to plsql table
878 END IF;
879
880 --fetch delivery legs and delivery details for Delivery Ids into PL/SQL table
881 IF x_tbl_delivery_purge_set.COUNT > 0 THEN
882 FOR l_loop_index in x_tbl_delivery_purge_set.FIRST .. x_tbl_delivery_purge_set.LAST
883 LOOP
884 l_delivery_id := x_tbl_delivery_purge_set(l_loop_index).delivery_id;
885 --fetch delivery legs
886 IF (x_tbl_delivery_purge_set(l_loop_index).purge_set_type = 'NON_EMPTY') THEN
887 OPEN c_legs_for_del(l_delivery_id);
888 LOOP
889 FETCH c_legs_for_del INTO l_leg_id;
890 EXIT WHEN c_legs_for_del%NOTFOUND;
891 x_tbl_del_legs_purge_set(x_tbl_del_legs_purge_set.COUNT+1).delivery_leg_id := l_leg_id;
892 END LOOP;
893 CLOSE c_legs_for_del;
894 END IF;
895 --fetch delivery details and containers for non empty deliveries
896 IF x_tbl_delivery_purge_set(l_loop_index).purge_set_type = 'NON_EMPTY' THEN
897 OPEN c_details_for_del(l_delivery_id);
898 LOOP
899 FETCH c_details_for_del INTO l_detail_id,l_container_flag;
900 EXIT WHEN c_details_for_del%NOTFOUND;
901 --l_container_flag = 'Y' would be Container
902 IF l_container_flag = 'N' THEN -- Delivery Detail
903 x_tbl_del_details_purge_set(x_tbl_del_details_purge_set.COUNT+1).delivery_detail_id := l_detail_id;
904 ELSE -- Container
905 x_tbl_containers_purge_set(x_tbl_containers_purge_set.COUNT+1).container_id := l_detail_id;
906 x_tbl_containers_purge_set(x_tbl_containers_purge_set.COUNT).purge_set_type := 'NON_EMPTY';
907 END IF;
908 END LOOP;
909 CLOSE c_details_for_del;
910 END IF;
911
912 --fetch empty containers for deliveries
913 /* IF x_tbl_delivery_purge_set(l_loop_index).purge_set_type = 'DEL_EMPTYLPNS' THEN
914 OPEN c_details_for_del(l_delivery_id);
915 LOOP
916 FETCH c_details_for_del INTO l_detail_id,l_container_flag;
917 EXIT WHEN c_details_for_del%NOTFOUND;
918 x_tbl_containers_purge_set(x_tbl_containers_purge_set.COUNT+1).container_id := l_detail_id;
919 x_tbl_containers_purge_set(x_tbl_containers_purge_set.COUNT).purge_set_type := 'EMPTYLPNS';
920 END LOOP;
921 CLOSE c_details_for_del;
922 END IF; */
923 END LOOP;
924 END IF;
925
926 --Bug 12397111 - Start
927 cancel_wdd_sql := 'SELECT wdd.delivery_detail_id
928 FROM wsh_delivery_details wdd
929 WHERE wdd.source_code = ''OE''
930 AND wdd.released_status = ''D''
931 AND NOT EXISTS
932 ( SELECT 1
933 FROM wsh_delivery_details det
934 WHERE det.source_code = ''OE''
935 AND det.source_line_id = wdd.source_line_id
936 AND det.released_status <> ''D'' )
937 AND NOT EXISTS
938 ( SELECT 1
939 FROM oe_order_headers_all oeh
940 WHERE oeh.header_id = wdd.source_header_id ) ';
941 --check for taking creation dates
942
943 IF (p_create_date_from IS NOT NULL) THEN
944 cancel_wdd_sql := cancel_wdd_sql || '
945 AND TRUNC(wdd.creation_date)
946 BETWEEN '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_from) || '''
947 AND '''|| FND_DATE.CANONICAL_TO_DATE(p_create_date_to) || '''' ;
948 ELSE
949 cancel_wdd_sql := cancel_wdd_sql || '
950 AND wdd.creation_date < '''
951 || to_date(SYSDATE - p_del_beyond_creation_days,'DD-MM-YYYY') ||'''' ;
952 END IF; --end check for taking creation dates
953
954 IF l_debug_on THEN
955 WSH_DEBUG_SV.log(l_module_name,'cancel_wdd_sql', cancel_wdd_sql);
956 END IF;
957
958 --fetch orphan canceled delivery detail ids
959 OPEN c_wdd_purge_cur FOR cancel_wdd_sql;
960 LOOP
961
962 FETCH c_wdd_purge_cur BULK COLLECT INTO l_delivery_detail_id LIMIT 5000;
963
964 EXIT WHEN l_delivery_detail_id.COUNT<=0;
965
966 FOR l_count in l_delivery_detail_id.FIRST..l_delivery_detail_id.LAST
967 LOOP
968 x_tbl_del_details_purge_set(x_tbl_del_details_purge_set.COUNT+1).delivery_detail_id := l_delivery_detail_id(l_count).delivery_detail_id;
969 END LOOP;
970
971 END LOOP;
972 CLOSE c_wdd_purge_cur;
973 --Bug 12397111 - Ends
974
975 IF l_debug_on THEN
976 WSH_DEBUG_SV.pop(l_module_name);
977 END IF;
978
979 EXCEPTION
980 WHEN OTHERS THEN
981 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
982 IF l_debug_on THEN
983 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
984 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
985 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
986 END IF;
987
988 END Get_Purge_Set;
989
990
991 /*-----------------------------------------------------------------------------
992
993 Procedure: Purge_Entities
994 Parameters: p_tbl_trip_purge_set - pl/sql table of trip id's eligible for purge
995 p_tbl_delivery_purge_set - pl/sql table of delivery id's eligible for purge
996 p_tbl_del_details_purge_set - pl/sql table of delivery detail id's eligible for purge
997 p_tbl_del_legs_purge_set - pl/sql table of delivery leg id's eligible for purge
998 p_tbl_trip_stops_purge_set - pl/sql table of trip stop id's eligible for purge
999 p_tbl_containers_purge_set pl/sql - table of container id's eligible for purge
1000 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1001
1002 Description: This API calls the individual APIs to delete the data in
1003 Shipping and Transportation tables
1004 =============================================================================
1005 Input: Table of Record Types for Trips, Stops, Legs, Deliveries, Containers, Details
1006 Output: Return Status - success or failure
1007 ==============================================================================
1008 Logic: i) Call Purge_Delivery_Details
1009 ii) Call Purge_Containers
1010 iii) Call Purge_Delivery_Legs
1011 iv) Call Purge_Trip_Stops
1012 v) Call Purge_Deliveries
1013 vi) Call Purge_Trips
1014 -----------------------------------------------------------------------------*/
1015
1016 PROCEDURE Purge_Entities( p_tbl_trip_purge_set Trip_ID_Tbl_Type ,
1017 p_tbl_delivery_purge_set Delivery_ID_Tbl_Type,
1018 p_tbl_del_details_purge_set Del_Detail_ID_Tbl_Type,
1019 p_tbl_del_legs_purge_set Del_Leg_ID_Tbl_Type,
1020 p_tbl_trip_stops_purge_set Trip_Stop_ID_Tbl_Type,
1021 p_tbl_containers_purge_set Container_ID_Tbl_Type,
1022 x_return_status OUT NOCOPY VARCHAR2
1023 )IS
1024 l_debug_on BOOLEAN;
1025 l_return_status VARCHAR2(1);
1026
1027 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_ENTITIES';
1028 BEGIN
1029
1030 -- Debug Statements
1031 --
1032 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1033 --
1034 IF l_debug_on IS NULL THEN
1035 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1036 END IF;
1037
1038 IF l_debug_on THEN
1039 WSH_DEBUG_SV.push(l_module_name);
1040 END IF;
1041
1042 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1043
1044 IF p_tbl_del_details_purge_set.COUNT > 0 THEN
1045 IF l_debug_on THEN
1046 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_DELIVERY_DETAILS', WSH_DEBUG_SV.C_PROC_LEVEL);
1047 END IF;
1048 --Purge Delivery Details
1049 Purge_Delivery_Details( p_tbl_del_detail_purge_set => p_tbl_del_details_purge_set,
1050 x_return_status => l_return_status);
1051
1052 IF l_debug_on THEN
1053 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1054 END IF;
1055
1056 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1057 x_return_status := l_return_status;
1058 IF l_debug_on THEN
1059 WSH_DEBUG_SV.pop(l_module_name);
1060 END IF;
1061 RETURN;
1062 END IF;
1063 END IF;
1064
1065 IF p_tbl_containers_purge_set.COUNT > 0 THEN
1066 IF l_debug_on THEN
1067 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_CONTAINERS', WSH_DEBUG_SV.C_PROC_LEVEL);
1068 END IF;
1069 --Purge Containers
1070 Purge_Containers(p_tbl_containers_purge_set => p_tbl_containers_purge_set,
1071 x_return_status => l_return_status);
1072
1073 IF l_debug_on THEN
1074 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1075 END IF;
1076
1077 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1078 x_return_status := l_return_status;
1079 IF l_debug_on THEN
1080 WSH_DEBUG_SV.pop(l_module_name);
1081 END IF;
1082 RETURN;
1083 END IF;
1084 END IF;
1085
1086 IF p_tbl_del_legs_purge_set.COUNT > 0 THEN
1087 IF l_debug_on THEN
1088 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_DELIVERY_LEGS', WSH_DEBUG_SV.C_PROC_LEVEL);
1089 END IF;
1090 --Purge Delivery Legs
1091 Purge_Delivery_Legs(p_tbl_del_leg_purge_set => p_tbl_del_legs_purge_set,
1092 x_return_status => l_return_status);
1093
1094 IF l_debug_on THEN
1095 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1096 END IF;
1097
1098 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1099 x_return_status := l_return_status;
1100 IF l_debug_on THEN
1101 WSH_DEBUG_SV.pop(l_module_name);
1102 END IF;
1103 RETURN;
1104 END IF;
1105 END IF;
1106
1107 IF p_tbl_trip_stops_purge_set.COUNT > 0 THEN
1108 IF l_debug_on THEN
1109 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_TRIP_STOPS', WSH_DEBUG_SV.C_PROC_LEVEL);
1110 END IF;
1111 --Purge Trip Stops
1112 Purge_Trip_Stops(p_tbl_trip_stop_purge_set => p_tbl_trip_stops_purge_set,
1113 x_return_status => l_return_status);
1114
1115 IF l_debug_on THEN
1116 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1117 END IF;
1118
1119 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1120 x_return_status := l_return_status;
1121 IF l_debug_on THEN
1122 WSH_DEBUG_SV.pop(l_module_name);
1123 END IF;
1124 RETURN;
1125 END IF;
1126 END IF;
1127
1128 IF (p_tbl_delivery_purge_set.COUNT > 0 OR p_tbl_trip_purge_set.COUNT > 0) THEN
1129
1130 IF l_debug_on THEN
1131 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_WORKFLOW', WSH_DEBUG_SV.C_PROC_LEVEL);
1132 END IF;
1133 --Purge workflows related to Trips and Deliveries
1134 Purge_Workflow( p_tbl_trip_purge_set => p_tbl_trip_purge_set,
1135 p_tbl_delivery_purge_set=> p_tbl_delivery_purge_set,
1136 x_return_status => l_return_status);
1137
1138 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1139 x_return_status := l_return_status;
1140 IF l_debug_on THEN
1141 WSH_DEBUG_SV.pop(l_module_name);
1142 END IF;
1143 RETURN;
1144 END IF;
1145 END IF;
1146
1147 IF p_tbl_delivery_purge_set.COUNT > 0 THEN
1148 IF l_debug_on THEN
1149 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_DELIVERIES', WSH_DEBUG_SV.C_PROC_LEVEL);
1150 END IF;
1151 --Purge Deliveries
1152 Purge_Deliveries(p_tbl_delivery_purge_set => p_tbl_delivery_purge_set,
1153 x_return_status => l_return_status);
1154
1155 IF l_debug_on THEN
1156 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1157 END IF;
1158
1159 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1160 x_return_status := l_return_status;
1161 IF l_debug_on THEN
1162 WSH_DEBUG_SV.pop(l_module_name);
1163 END IF;
1164 RETURN;
1165 END IF;
1166 END IF;
1167
1168 IF p_tbl_trip_purge_set.COUNT > 0 THEN
1169 IF l_debug_on THEN
1170 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PURGE.PURGE_TRIPS', WSH_DEBUG_SV.C_PROC_LEVEL);
1171 END IF;
1172 --Purge Trips
1173 Purge_Trips(p_tbl_trip_purge_set => p_tbl_trip_purge_set,
1174 x_return_status => l_return_status);
1175
1176 IF l_debug_on THEN
1177 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1178 END IF;
1179
1180 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1181 x_return_status := l_return_status;
1182 IF l_debug_on THEN
1183 WSH_DEBUG_SV.pop(l_module_name);
1184 END IF;
1185 RETURN;
1186 END IF;
1187 END IF;
1188
1189 IF l_debug_on THEN
1190 WSH_DEBUG_SV.pop(l_module_name);
1191 END IF;
1192
1193
1194 EXCEPTION
1195 WHEN OTHERS THEN
1196 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1197 IF l_debug_on THEN
1198 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1199 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1200 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1201 END IF;
1202
1203
1204 END Purge_Entities;
1205
1206
1207 /*-----------------------------------------------------------------------------
1208 Procedure: Purge_Trips
1209 Parameters: p_tbl_trip_purge_set pl/sql table of trip id's eligible for purge
1210 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1211
1212 Description: This API delete the data in Shipping and Transportation
1213 related to trip
1214 ==============================================================================
1215 Input: Table of Record Types for Trips
1216 Output: Return Status - success or failure
1217 ==============================================================================
1218 Logic: i) Delete records from the following tables:
1219 WSH_EXCEPTIONS, WSH_FREIGHT_COSTS, WSH_DOCUMENT_INSTANCES,WSH_TRIPS
1220 -----------------------------------------------------------------------------*/
1221
1222 PROCEDURE Purge_Trips( p_tbl_trip_purge_set Trip_ID_Tbl_Type,
1223 x_return_status OUT NOCOPY VARCHAR2
1224 )IS
1225
1226 l_debug_on BOOLEAN;
1227 l_loop_index NUMBER;
1228 l_trip_id NUMBER;
1229
1230 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_TRIPS';
1231 BEGIN
1232
1233 -- Debug Statements
1234 --
1235 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1236 --
1237 IF l_debug_on IS NULL THEN
1238 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1239 END IF;
1240
1241 IF l_debug_on THEN
1242 WSH_DEBUG_SV.push(l_module_name);
1243 END IF;
1244
1245 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1246
1247 FOR l_loop_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
1248 LOOP
1249 l_trip_id := p_tbl_trip_purge_set(l_loop_index).trip_id;
1250
1251 DELETE
1252 FROM wsh_exceptions
1253 WHERE trip_id = l_trip_id;
1254
1255 IF SQL%FOUND THEN
1256 IF l_debug_on THEN
1257 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_exceptions: TRIP_ID=' || l_trip_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1258 END IF;
1259 END IF;
1260
1261 DELETE
1262 FROM wsh_freight_costs
1263 WHERE trip_id = l_trip_id;
1264
1265 IF SQL%FOUND THEN
1266 IF l_debug_on THEN
1267 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: TRIP_ID=' || l_trip_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1268 END IF;
1269 END IF;
1270
1271 DELETE
1272 FROM wsh_document_instances
1273 WHERE entity_id = l_trip_id
1274 AND entity_name = 'WSH_TRIPS';
1275
1276 IF SQL%FOUND THEN
1277 IF l_debug_on THEN
1278 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_document_instances: TRIP_ID=' || l_trip_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1279 END IF;
1280 END IF;
1281
1282 DELETE
1283 FROM wsh_trips
1284 WHERE trip_id = l_trip_id;
1285
1286 IF SQL%FOUND THEN
1287 IF l_debug_on THEN
1288 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_trips: TRIP_ID=' || l_trip_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1289 END IF;
1290 END IF;
1291
1292 END LOOP;
1293
1294 IF l_debug_on THEN
1295 WSH_DEBUG_SV.pop(l_module_name);
1296 END IF;
1297
1298 EXCEPTION
1299 WHEN OTHERS THEN
1300 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1301 IF l_debug_on THEN
1302 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1303 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1304 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1305 END IF;
1306
1307 END Purge_Trips;
1308
1309
1310 /*-----------------------------------------------------------------------------
1311 Procedure: Purge_Deliveries
1312 Parameters: p_tbl_delivery_purge_set pl/sql table of delivery id's eligible for purge
1313 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1314
1315 Description: This API delete the data in Shipping and Transportation
1316 related to delivery
1317 =============================================================================+
1318 Input: Table of Record Types for Deliveries
1319 Output: Return Status - success or failure
1320 ==============================================================================
1321 Logic: i) Delete records from the following tables:
1322 WSH_EXCEPTIONS, WSH_TRANSACTIONS_HISTORY, WSH_DOCUMENT_INSTANCES,
1323 WSH_FREIGHT_COSTS
1324
1325 If FTE is installed,
1326 FTE_SHIPMENT_STATUS_DETAILS, FTE_SHIPMENT_STATUS_EXCEPTIONS,
1327 FTE_MESSAGE_PARTNER, FTE_MESSAGE_CONTACT, FTE_MESSAGE_LOCATION,
1328 FTE_DELIVERY_PROOF, FTE_SHIPMENT_STATUS_HEADERS
1329
1330 If ITM Screening is done,
1331 WSH_ITM_RESPONSE_LINES, WSH_ITM_RESPONSE_HEADERS, WSH_ITM_REQUEST_CONTROL,
1332 WSH_INBOUND_TXN_HISTORY
1333 and finally WSH_NEW_DELIVERIES.
1334 -----------------------------------------------------------------------------*/
1335
1336 PROCEDURE Purge_Deliveries( p_tbl_delivery_purge_set Delivery_ID_Tbl_Type,
1337 x_return_status OUT NOCOPY VARCHAR2
1338 )IS
1339 l_debug_on BOOLEAN;
1340 l_loop_index NUMBER;
1341 l_delivery_id NUMBER;
1342
1343 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_DELIVERIES';
1344 BEGIN
1345
1346 -- Debug Statements
1347 --
1348 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1349 --
1350 IF l_debug_on IS NULL THEN
1351 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1352 END IF;
1353
1354 IF l_debug_on THEN
1355 WSH_DEBUG_SV.push(l_module_name);
1356 END IF;
1357
1358 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1359
1360 FOR l_loop_index in p_tbl_delivery_purge_set.FIRST .. p_tbl_delivery_purge_set.LAST
1361 LOOP
1362
1363 l_delivery_id := p_tbl_delivery_purge_set(l_loop_index).delivery_id;
1364
1365 DELETE
1366 FROM wsh_exceptions
1367 WHERE delivery_id = l_delivery_id;
1368
1369 IF SQL%FOUND THEN
1370 IF l_debug_on THEN
1371 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_exceptions: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1372 END IF;
1373 END IF;
1374
1375 DELETE
1376 FROM wsh_transactions_history
1377 WHERE entity_number = to_char(l_delivery_id)
1378 AND entity_type = 'DLVY';
1379
1380 IF SQL%FOUND THEN
1381 IF l_debug_on THEN
1382 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_transactions_history: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1383 END IF;
1384 END IF;
1385
1386 DELETE
1387 FROM wsh_freight_costs
1388 WHERE delivery_id = l_delivery_id;
1389
1390 IF SQL%FOUND THEN
1391 IF l_debug_on THEN
1392 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1393 END IF;
1394 END IF;
1395
1396 DELETE
1397 FROM wsh_document_instances
1398 WHERE entity_id = l_delivery_id
1399 AND entity_name = 'WSH_NEW_DELIVERIES';
1400
1401 IF SQL%FOUND THEN
1402 IF l_debug_on THEN
1403 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_document_instances: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1404 END IF;
1405 END IF;
1406
1407 IF (wsh_util_core.fte_is_installed='Y') THEN
1408
1409 DELETE
1410 FROM fte_shipment_status_details
1411 WHERE transaction_id IN (SELECT transaction_id
1412 FROM fte_shipment_status_headers
1413 WHERE delivery_id = l_delivery_id);
1414
1415 IF SQL%FOUND THEN
1416 IF l_debug_on THEN
1417 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_shipment_status_details: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1418 END IF;
1419 END IF;
1420
1421 DELETE
1422 FROM fte_shipment_status_exceptions
1423 WHERE transaction_id IN (SELECT transaction_id
1424 FROM fte_shipment_status_headers
1425 WHERE delivery_id = l_delivery_id);
1426
1427 IF SQL%FOUND THEN
1428 IF l_debug_on THEN
1429 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_shipment_status_exceptions: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1430 END IF;
1431 END IF;
1432
1433 DELETE
1434 FROM fte_message_partner
1435 WHERE transaction_id IN (SELECT transaction_id
1436 FROM fte_shipment_status_headers
1437 WHERE delivery_id = l_delivery_id);
1438
1439 IF SQL%FOUND THEN
1440 IF l_debug_on THEN
1441 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_message_partner: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1442 END IF;
1443 END IF;
1444
1445 DELETE
1446 FROM fte_message_address
1447 WHERE transaction_id IN (SELECT transaction_id
1448 FROM fte_shipment_status_headers
1449 WHERE delivery_id = l_delivery_id);
1450
1451 IF SQL%FOUND THEN
1452 IF l_debug_on THEN
1453 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_message_address: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1454 END IF;
1455 END IF;
1456
1457 DELETE
1458 FROM fte_message_contact
1459 WHERE transaction_id IN (SELECT transaction_id
1460 FROM fte_shipment_status_headers
1461 WHERE delivery_id = l_delivery_id);
1462
1463 IF SQL%FOUND THEN
1464 IF l_debug_on THEN
1465 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_message_contact: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1466 END IF;
1467 END IF;
1468
1469 DELETE
1470 FROM fte_message_location
1471 WHERE transaction_id IN (SELECT transaction_id
1472 FROM fte_shipment_status_headers
1473 WHERE delivery_id = l_delivery_id);
1474
1475 IF SQL%FOUND THEN
1476 IF l_debug_on THEN
1477 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_message_location: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1478 END IF;
1479 END IF;
1480
1481
1482 DELETE
1483 FROM fte_delivery_proof
1484 WHERE transaction_id IN (SELECT transaction_id
1485 FROM fte_shipment_status_headers
1486 WHERE delivery_id = l_delivery_id);
1487
1488 IF SQL%FOUND THEN
1489 IF l_debug_on THEN
1490 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_delivery_proof: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1491 END IF;
1492 END IF;
1493
1494
1495 DELETE
1496 FROM fte_shipment_status_headers
1497 WHERE delivery_id = l_delivery_id;
1498
1499
1500 IF SQL%FOUND THEN
1501 IF l_debug_on THEN
1502 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_shipment_status_headers: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1503 END IF;
1504 END IF;
1505 END IF;
1506
1507 DELETE
1508 FROM wsh_itm_response_lines
1509 WHERE response_header_id IN ( SELECT wirh.response_header_id
1510 FROM wsh_itm_response_headers wirh,
1511 wsh_itm_request_control wirc
1512 WHERE wirc.original_system_reference = l_delivery_id
1513 AND wirc.request_control_id = wirh.request_control_id
1514 AND wirc.service_type_code = 'WSH_EXPORT_COMPLIANCE' );
1515
1516 IF SQL%FOUND THEN
1517 IF l_debug_on THEN
1518 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_itm_response_lines: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1519 END IF;
1520 END IF;
1521
1522 DELETE
1523 FROM wsh_itm_response_headers
1524 WHERE request_control_id IN ( SELECT request_control_id
1525 FROM wsh_itm_request_control
1526 WHERE original_system_reference = l_delivery_id
1527 AND service_type_code = 'WSH_EXPORT_COMPLIANCE' ) ;
1528
1529 IF SQL%FOUND THEN
1530 IF l_debug_on THEN
1531 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_itm_response_headers: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1532 END IF;
1533 END IF;
1534
1535 DELETE
1536 FROM wsh_itm_request_control
1537 WHERE original_system_reference = l_delivery_id
1538 AND service_type_code = 'WSH_EXPORT_COMPLIANCE';
1539
1540 IF SQL%FOUND THEN
1541 IF l_debug_on THEN
1542 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_itm_request_control: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1543 END IF;
1544 END IF;
1545
1546 DELETE
1547 FROM wsh_inbound_txn_history
1548 WHERE shipment_header_id IN ( SELECT rcv_shipment_header_id
1549 FROM wsh_new_deliveries
1550 WHERE delivery_id = l_delivery_id) ;
1551
1552 IF SQL%FOUND THEN
1553 IF l_debug_on THEN
1554 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_inbound_txn_history: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1555 END IF;
1556 END IF;
1557
1558 DELETE
1559 FROM wsh_new_deliveries
1560 WHERE delivery_id = l_delivery_id;
1561
1562 IF SQL%FOUND THEN
1563 IF l_debug_on THEN
1564 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_new_deliveries: DELIVERY_ID=' || l_delivery_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1565 END IF;
1566 END IF;
1567
1568 END LOOP;
1569
1570 IF l_debug_on THEN
1571 WSH_DEBUG_SV.pop(l_module_name);
1572 END IF;
1573
1574 EXCEPTION
1575 WHEN OTHERS THEN
1576 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1577 IF l_debug_on THEN
1578 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1579 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1580 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1581 END IF;
1582
1583 END Purge_Deliveries;
1584
1585
1586 /*-----------------------------------------------------------------------------
1587 Procedure: Purge_Trip_Stops
1588 Parameters: p_tbl_trip_stop_purge_set pl/sql table of trip stop id's
1589 eligible for purge
1590 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1591
1592 Description: This API delete the data in Shipping and Transportation
1593 related to trip stop
1594 ==============================================================================
1595 Input: Table of Record Types for Trip Stops
1596 Output: Return Status - success or failure
1597 ==============================================================================
1598 Logic: i) Delete records from the following tables:
1599 WSH_EXCEPTIONS, WSH_FREIGHT_COSTS, WSH_TRIP_STOPS
1600 -----------------------------------------------------------------------------*/
1601
1602 PROCEDURE Purge_Trip_Stops( p_tbl_trip_stop_purge_set Trip_Stop_ID_Tbl_Type,
1603 x_return_status OUT NOCOPY VARCHAR2
1604 )IS
1605 l_debug_on BOOLEAN;
1606 l_loop_index NUMBER;
1607 l_stop_id NUMBER;
1608
1609 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_TRIP_STOPS';
1610 BEGIN
1611
1612 -- Debug Statements
1613 --
1614 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1615 --
1616 IF l_debug_on IS NULL THEN
1617 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1618 END IF;
1619
1620 IF l_debug_on THEN
1621 WSH_DEBUG_SV.push(l_module_name);
1622 END IF;
1623
1624 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1625
1626 FOR l_loop_index in p_tbl_trip_stop_purge_set.FIRST .. p_tbl_trip_stop_purge_set.LAST
1627 LOOP
1628 l_stop_id := p_tbl_trip_stop_purge_set(l_loop_index).stop_id;
1629
1630 DELETE
1631 FROM wsh_exceptions
1632 WHERE trip_stop_id = l_stop_id;
1633
1634 IF SQL%FOUND THEN
1635 IF l_debug_on THEN
1636 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_exceptions: STOP_ID=' || l_stop_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1637 END IF;
1638 END IF;
1639
1640 DELETE
1641 FROM wsh_freight_costs
1642 WHERE stop_id = l_stop_id;
1643
1644 IF SQL%FOUND THEN
1645 IF l_debug_on THEN
1646 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: STOP_ID=' || l_stop_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1647 END IF;
1648 END IF;
1649
1650 DELETE
1651 FROM wsh_trip_stops
1652 WHERE stop_id = l_stop_id;
1653
1654 IF SQL%FOUND THEN
1655 IF l_debug_on THEN
1656 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_trip_stops: STOP_ID=' || l_stop_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1657 END IF;
1658 END IF;
1659
1660 END LOOP;
1661
1662 IF l_debug_on THEN
1663 WSH_DEBUG_SV.pop(l_module_name);
1664 END IF;
1665
1666 EXCEPTION
1667 WHEN OTHERS THEN
1668 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1669 IF l_debug_on THEN
1670 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1671 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1672 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1673 END IF;
1674
1675 END Purge_Trip_Stops;
1676
1677
1678 /*-----------------------------------------------------------------------------
1679 Procedure: Purge_Delivery_Legs
1680 Parameters: p_tbl_del_leg_purge_set pl/sql table of delivery leg id's eligible for purge
1681 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1682
1683 Description: This API delete the data in Shipping and Transportation
1684 related to delivery leg
1685 ==============================================================================
1686 Input: Table of Record Types for Delivery Legs
1687 Output: Return Status - success or failure
1688 ==============================================================================
1689 Logic: i) Delete records from the following tables:
1690 WSH_FREIGHT_COSTS, WSH_DOCUMENT_INSTANCES, WSH_DELIVERY_LEG_ACTIVITIES,
1691 WSH_DELIVERY_LEG_DETAILS, WSH_DELIVERY_LEGS
1692
1693 If FTE is installed,
1694 FTE_INVOICE_LINES, FTE_INVOICE_HISTORY, FTE_INVOICE_HEADERS,
1695 FTE_FAILURE_REASONS
1696 -----------------------------------------------------------------------------*/
1697
1698 PROCEDURE Purge_Delivery_Legs( p_tbl_del_leg_purge_set Del_Leg_ID_Tbl_Type,
1699 x_return_status OUT NOCOPY VARCHAR2
1700 )IS
1701 l_debug_on BOOLEAN;
1702 l_loop_index NUMBER;
1703 l_leg_id NUMBER;
1704
1705 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_DELIVERY_LEGS';
1706 BEGIN
1707 -- Debug Statements
1708 --
1709 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1710 --
1711 IF l_debug_on IS NULL THEN
1712 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1713 END IF;
1714
1715 IF l_debug_on THEN
1716 WSH_DEBUG_SV.push(l_module_name);
1717 END IF;
1718
1719 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1720
1721 FOR l_loop_index in p_tbl_del_leg_purge_set.FIRST .. p_tbl_del_leg_purge_set.LAST
1722 LOOP
1723 l_leg_id := p_tbl_del_leg_purge_set(l_loop_index).delivery_leg_id;
1724
1725 DELETE
1726 FROM wsh_freight_costs
1727 WHERE delivery_leg_id = l_leg_id;
1728
1729 IF SQL%FOUND THEN
1730 IF l_debug_on THEN
1731 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1732 END IF;
1733 END IF;
1734
1735 IF (wsh_util_core.fte_is_installed='Y') THEN
1736
1737 DELETE
1738 FROM fte_invoice_lines
1739 WHERE invoice_header_id IN ( SELECT fih.invoice_header_id
1740 FROM fte_invoice_headers fih,
1741 wsh_document_instances wdi
1742 WHERE wdi.entity_id = l_leg_id
1743 AND wdi.entity_name = 'WSH_DELIVERY_LEGS'
1744 AND wdi.sequence_number = fih.bol
1745 ) ;
1746 IF SQL%FOUND THEN
1747 IF l_debug_on THEN
1748 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_invoice_lines: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1749 END IF;
1750 END IF;
1751
1752 DELETE
1753 FROM fte_invoice_headers
1754 WHERE bol IN (SELECT sequence_number
1755 FROM wsh_document_instances
1756 WHERE entity_id = l_leg_id
1757 AND entity_name = 'WSH_DELIVERY_LEGS') ;
1758
1759 IF SQL%FOUND THEN
1760 IF l_debug_on THEN
1761 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_invoice_headers: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1762 END IF;
1763 END IF;
1764
1765 DELETE
1766 FROM fte_invoice_history
1767 WHERE bol IN (SELECT sequence_number
1768 FROM wsh_document_instances
1769 WHERE entity_id = l_leg_id
1770 AND entity_name = 'WSH_DELIVERY_LEGS') ;
1771
1772 IF SQL%FOUND THEN
1773 IF l_debug_on THEN
1774 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_invoice_history: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1775 END IF;
1776 END IF;
1777
1778 DELETE
1779 FROM fte_failure_reasons
1780 WHERE bol IN ( SELECT sequence_number
1781 FROM wsh_document_instances
1782 WHERE entity_id = l_leg_id
1783 AND entity_name = 'WSH_DELIVERY_LEGS') ;
1784
1785 IF SQL%FOUND THEN
1786 IF l_debug_on THEN
1787 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from fte_failure_reasons: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1788 END IF;
1789 END IF;
1790
1791 END IF;
1792
1793 DELETE
1794 FROM wsh_document_instances
1795 WHERE entity_id = l_leg_id
1796 AND entity_name = 'WSH_DELIVERY_LEGS';
1797
1798 IF SQL%FOUND THEN
1799 IF l_debug_on THEN
1800 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_document_instances: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1801 END IF;
1802 END IF;
1803
1804 DELETE
1805 FROM wsh_delivery_leg_activities
1806 WHERE delivery_leg_id = l_leg_id ;
1807
1808 IF SQL%FOUND THEN
1809 IF l_debug_on THEN
1810 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_leg_activities: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1811 END IF;
1812 END IF;
1813
1814 DELETE
1815 FROM wsh_delivery_leg_details
1816 WHERE delivery_leg_id = l_leg_id;
1817
1818 IF SQL%FOUND THEN
1819 IF l_debug_on THEN
1820 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_leg_details: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1821 END IF;
1822 END IF;
1823
1824
1825 DELETE
1826 FROM wsh_delivery_legs
1827 WHERE delivery_leg_id = l_leg_id ;
1828
1829 IF SQL%FOUND THEN
1830 IF l_debug_on THEN
1831 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_legs: LEG_ID=' || l_leg_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1832 END IF;
1833 END IF;
1834 END LOOP;
1835
1836 IF l_debug_on THEN
1837 WSH_DEBUG_SV.pop(l_module_name);
1838 END IF;
1839
1840 EXCEPTION
1841 WHEN OTHERS THEN
1842 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1843 IF l_debug_on THEN
1844 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1845 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1846 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1847 END IF;
1848
1849 END Purge_Delivery_Legs;
1850
1851
1852 /*-----------------------------------------------------------------------------
1853 Procedure: Purge_Delivery_Details
1854 Parameters: p_tbl_del_detail_purge_set pl/sql table of delivery detail id's
1855 eligible for purge
1856 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1857
1858 Description: This API delete the data in Shipping and Transportation
1859 related to delivery detail
1860 =============================================================================
1861 Input: Table of Record Types for Delivery Details
1862 Output: Return Status - success or failure
1863 ==============================================================================
1864 Logic: i) Delete records from the following tables:
1865 WSH_FREIGHT_COSTS, WSH_SERIAL_NUMBERS, WSH_EXCEPTIONS,
1866 wsh_delivery_assignments_v, WSH_DELIVERY_DETAILS
1867 -----------------------------------------------------------------------------*/
1868 PROCEDURE Purge_Delivery_Details(p_tbl_del_detail_purge_set Del_Detail_ID_Tbl_Type,
1869 x_return_status OUT NOCOPY VARCHAR2
1870 )IS
1871 l_debug_on BOOLEAN;
1872 l_loop_index NUMBER;
1873 l_detail_id NUMBER;
1874
1875 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_DELIVERY_DETAILS';
1876 BEGIN
1877 -- Debug Statements
1878 --
1879 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1880 --
1881 IF l_debug_on IS NULL THEN
1882 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1883 END IF;
1884
1885 IF l_debug_on THEN
1886 WSH_DEBUG_SV.push(l_module_name);
1887 END IF;
1888
1889 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1890
1891 FOR l_loop_index in p_tbl_del_detail_purge_set.FIRST .. p_tbl_del_detail_purge_set.LAST
1892 LOOP
1893 l_detail_id := p_tbl_del_detail_purge_set(l_loop_index).delivery_detail_id;
1894
1895 DELETE
1896 FROM wsh_serial_numbers
1897 WHERE delivery_detail_id = l_detail_id;
1898
1899 IF SQL%FOUND THEN
1900 IF l_debug_on THEN
1901 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_serial_numbers: DELIVERY_DETAIL_ID=' || l_detail_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1902 END IF;
1903 END IF;
1904
1905 DELETE
1906 FROM wsh_exceptions
1907 WHERE delivery_detail_id = l_detail_id;
1908
1909 IF SQL%FOUND THEN
1910 IF l_debug_on THEN
1911 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_exceptions: DELIVERY_DETAIL_ID=' || l_detail_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1912 END IF;
1913 END IF;
1914
1915 DELETE
1916 FROM wsh_freight_costs
1917 WHERE delivery_detail_id = l_detail_id;
1918
1919 IF SQL%FOUND THEN
1920 IF l_debug_on THEN
1921 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: DELIVERY_DETAIL_ID=' || l_detail_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1922 END IF;
1923 END IF;
1924
1925 DELETE
1926 FROM wsh_delivery_assignments_v
1927 WHERE delivery_detail_id = l_detail_id;
1928
1929 IF SQL%FOUND THEN
1930 IF l_debug_on THEN
1931 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_assignments_v: DELIVERY_DETAIL_ID=' || l_detail_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1932 END IF;
1933 END IF;
1934
1935 DELETE
1936 FROM wsh_delivery_details
1937 WHERE delivery_detail_id = l_detail_id;
1938
1939 IF SQL%FOUND THEN
1940 IF l_debug_on THEN
1941 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_details: DELIVERY_DETAIL_ID=' || l_detail_id, WSH_DEBUG_SV.C_PROC_LEVEL);
1942 END IF;
1943 END IF;
1944 END LOOP;
1945
1946 IF l_debug_on THEN
1947 WSH_DEBUG_SV.pop(l_module_name);
1948 END IF;
1949
1950 EXCEPTION
1951 WHEN OTHERS THEN
1952 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
1953 IF l_debug_on THEN
1954 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
1955 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1956 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1957 END IF;
1958
1959 END Purge_Delivery_Details;
1960
1961
1962 /*-----------------------------------------------------------------------------
1963 Procedure: Purge_Containers
1964 Parameters: p_tbl_containers_purge_set pl/sql table of container id's eligible for purge
1965 x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
1966
1967 Description: This API calls the WMS API to delete the data in WMS
1968 related to Containers
1969 ==============================================================================
1970 Input: Table of Record Types for Container Ids
1971 Output: Return Status - success or failure
1972 ==============================================================================
1973 Logic: i) Delete records from the following tables:
1974 wsh_delivery_assignments_v, WSH_DELIVERY_DETAILS
1975 -----------------------------------------------------------------------------*/
1976 PROCEDURE Purge_Containers(p_tbl_containers_purge_set Container_ID_Tbl_Type,
1977 x_return_status OUT NOCOPY VARCHAR2
1978 )IS
1979 l_debug_on BOOLEAN;
1980 l_loop_index NUMBER;
1981 l_container_id NUMBER;
1982 l_lpn_id NUMBER;
1983 l_return_status VARCHAR2(1);
1984
1985 l_msg_count NUMBER;
1986 l_msg_data VARCHAR2(32767);
1987
1988 l_wms_lpn_record WMS_Data_Type_Definitions_PUB.LPNPurgeRecordType;
1989
1990 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_CONTAINERS';
1991 BEGIN
1992 -- Debug Statements
1993 --
1994 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1995 --
1996 IF l_debug_on IS NULL THEN
1997 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1998 END IF;
1999
2000 IF l_debug_on THEN
2001 WSH_DEBUG_SV.push(l_module_name);
2002 END IF;
2003
2004 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2005
2006 FOR l_loop_index in p_tbl_containers_purge_set.FIRST .. p_tbl_containers_purge_set.LAST
2007 LOOP
2008 l_container_id := p_tbl_containers_purge_set(l_loop_index).container_id;
2009
2010
2011 DELETE
2012 FROM wsh_exceptions
2013 WHERE delivery_detail_id = l_container_id;
2014
2015 IF SQL%FOUND THEN
2016 IF l_debug_on THEN
2017 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_exceptions: CONTAINER_ID=' || l_container_id, WSH_DEBUG_SV.C_PROC_LEVEL);
2018 END IF;
2019 END IF;
2020
2021 DELETE
2022 FROM wsh_freight_costs
2023 WHERE delivery_detail_id = l_container_id;
2024
2025 IF SQL%FOUND THEN
2026 IF l_debug_on THEN
2027 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_freight_costs: CONTAINER_ID=' || l_container_id, WSH_DEBUG_SV.C_PROC_LEVEL);
2028 END IF;
2029 END IF;
2030
2031 DELETE
2032 FROM wsh_delivery_assignments_v
2033 WHERE delivery_detail_id = l_container_id;
2034
2035 IF SQL%FOUND THEN
2036 IF l_debug_on THEN
2037 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_assignments_v: CONTAINER_ID=' || l_container_id, WSH_DEBUG_SV.C_PROC_LEVEL);
2038 END IF;
2039 END IF;
2040
2041 DELETE
2042 FROM wsh_delivery_details
2043 WHERE delivery_detail_id = l_container_id
2044 RETURNING lpn_id INTO l_lpn_id;
2045
2046 IF SQL%FOUND THEN
2047 IF l_debug_on THEN
2048 WSH_DEBUG_SV.logmsg(l_module_name,'Deleted from wsh_delivery_details: CONTAINER_ID=' || l_container_id, WSH_DEBUG_SV.C_PROC_LEVEL);
2049 END IF;
2050 END IF;
2051
2052 IF l_lpn_id IS NOT NULL THEN -- Populate the LPN IDs in the table
2053 l_wms_lpn_record.LPN_IDs(l_wms_lpn_record.LPN_IDs.COUNT+1) := l_lpn_id;
2054 END IF;
2055 END LOOP;
2056
2057 --Call the WMS API to DELETE the LPNs
2058 IF l_debug_on THEN
2059 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_CONTAINER_GRP.LPN_PURGE_ACTIONS', WSH_DEBUG_SV.C_PROC_LEVEL);
2060 END IF;
2061
2062 WMS_Container_GRP.LPN_Purge_Actions( p_api_version =>1.0,
2063 p_init_msg_list =>FND_API.G_TRUE,
2064 p_commit =>'FALSE',
2065 x_return_status =>l_return_status,
2066 x_msg_count =>l_msg_count,
2067 x_msg_data =>l_msg_data,
2068 p_caller =>'WSH',
2069 p_action =>WMS_Container_GRP.G_LPN_PURGE_ACTION_DELETE,
2070 p_lpn_purge_rec => l_wms_lpn_record
2071 );
2072
2073 IF l_debug_on THEN
2074 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
2075 WSH_DEBUG_SV.log(l_module_name,'L_MSG_DATA',l_msg_data);
2076 END IF;
2077
2078 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2079 x_return_status := l_return_status;
2080 IF l_debug_on THEN
2081 WSH_DEBUG_SV.pop(l_module_name);
2082 END IF;
2083 RETURN;
2084 END IF;
2085
2086 IF l_debug_on THEN
2087 WSH_DEBUG_SV.pop(l_module_name);
2088 END IF;
2089
2090 EXCEPTION
2091 WHEN OTHERS THEN
2092 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2093 IF l_debug_on THEN
2094 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
2095 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2096 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2097 END IF;
2098
2099 END Purge_Containers;
2100
2101 -----------------------------------------------------------------------------
2102 --
2103 -- Procedure: Generate_Purge_Report
2104 -- Parameters: p_execution_mode Specifies whether to Purge Data or View Purge Set
2105 -- p_source_system Only the delivery details belonging to this Source System
2106 -- would be considered eligible for Purge
2107 -- p_ship_from_org Only the deliveries belonging to this Ship From Org
2108 -- would be considered eligible for Purge
2109 -- p_order_number_from Only the delivery details having source_header_number
2110 -- greater than Order Number From would be considered eligible for Purge
2111 -- p_order_number_to Only the delivery details having source_header_number
2112 -- less than Order Number To would be considered eligible for Purge
2113 -- p_order_type Only the delivery details belonging to this Order Type
2114 -- would be considered eligible for Purge
2115 -- p_ship_date_from Only the deliveries having initial_pickup_date greater
2116 -- than Ship Date From would be considered eligible for Purge
2117 -- p_ship_date_to Only the deliveries having initial_pickup_date less than
2118 -- Ship Date To would be considered eligible for Purge
2119 -- p_delete_beyond_x_ship_days Only the deliveries having initial_pickup_date greater
2120 -- than the specified date would be considered eligible for Purge
2121 -- p_purge_intransit_trips Decides whether to purge In Transit Trips or not
2122 -- p_delete_empty_records Decides whether to delete empty record or not.
2123 -- The empty records can be Empty Trips, Orphaned Empty Deliveries,
2124 -- Delivery with Empty containers, Empty Containers
2125 -- p_create_date_from Only Empty records having creation_date greater than this
2126 -- date would be purged
2127 -- p_create_date_to Only Empty records having creation_date less than this
2128 -- date would be purged
2129 -- p_del_beyond_creation_days Only Empty records having creation_date greater than
2130 -- this date would be purged
2131 -- p_sort_per_criteria Sorts the report output according to Trip,
2132 -- Delivery or Order Number
2133 -- p_print_detail If Low, the report would contain the parameters / summary
2134 -- page and all detail pages with Trips, Deliveries and
2135 -- Sales Orders data eligible to purge or purged.
2136 -- If No, the report would contain only the parameters / summary page.
2137 -- p_tbl_trip_purge_set pl/sql table of trip id's eligible for purge
2138 -- p_tbl_delivery_purge_set pl/sql table of delivery id's eligible for purge
2139 -- p_tbl_delivery_purge_set pl/sql table of container ids's eligible for purge
2140 -- p_count_legs count of delivery legs to be purged/eligible to be purged
2141 -- p_count_stops count of trip stops to be purged/eligible to be purged
2142 -- p_count_details count of delivery details to be purged/eligible to be purged
2143 -- p_count_containers count of containers to be purged/eligible to be purged
2144 -- x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
2145
2146 -- Description: This API generates the XML and writes it in output file
2147 -- of the concurrent program to be used by the XML Publisher
2148 -- to generate the XML report
2149 -----------------------------------------------------------------------------
2150
2151 PROCEDURE Generate_Purge_Report(p_execution_mode varchar2,
2152 p_source_system varchar2,
2153 p_ship_from_org number,
2154 p_order_number_from varchar2,
2155 p_order_number_to varchar2,
2156 p_order_type number,
2157 p_ship_date_from varchar2,
2158 p_ship_date_to varchar2,
2159 p_delete_beyond_x_ship_days number,
2160 p_purge_intransit_trips varchar2,
2161 p_delete_empty_records varchar2,
2162 p_create_date_from varchar2,
2163 p_create_date_to varchar2,
2164 p_del_beyond_creation_days number,
2165 p_sort_per_criteria varchar2,
2166 p_print_detail varchar2,
2167 p_tbl_trip_purge_set Trip_ID_Tbl_Type ,
2168 p_tbl_delivery_purge_set Delivery_ID_Tbl_Type,
2169 p_tbl_container_purge_set Container_ID_Tbl_Type,
2170 p_count_legs NUMBER,
2171 p_count_stops NUMBER,
2172 p_count_details NUMBER,
2173 p_count_containers NUMBER,
2174 x_return_status OUT NOCOPY VARCHAR2
2175 )IS
2176 l_debug_on BOOLEAN;
2177
2178 l_trip_id NUMBER;
2179 l_delivery_id NUMBER;
2180 l_delivery_name VARCHAR2(30);
2181 l_trip_name VARCHAR2(30);
2182 l_sales_order VARCHAR2(150);
2183 l_bol_number NUMBER;
2184 l_container_id NUMBER;
2185 l_waybill VARCHAR2(30);
2186 l_gross_weight NUMBER;
2187 l_ship_to VARCHAR2(500);
2188 l_customer_name VARCHAR2(50);
2189 l_pickup_date DATE;
2190 l_dropoff_date DATE;
2191 l_ship_date DATE;
2192 l_order_type VARCHAR2(240);
2193 l_create_date DATE;
2194
2195 l_trip_index NUMBER;
2196 l_delivery_index NUMBER;
2197 l_sales_order_index NUMBER;
2198 l_container_index NUMBER;
2199
2200 l_nonempty_count NUMBER;
2201 l_lpn_count NUMBER;
2202 l_empty_trip_count NUMBER;
2203 l_empty_del_count NUMBER;
2204 l_empty_lpn_count NUMBER;
2205 l_buff_size NUMBER;
2206 l_src_meaning wsh_lookups.meaning%TYPE; --RTV changes
2207 l_err varchar2(500);
2208
2209 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERATE_PURGE_REPORT';
2210
2211 --Get Deliveries for Trips
2212 CURSOR c_dels_for_trip(p_tripid NUMBER) IS
2213 SELECT distinct del_id,
2214 del_name,
2215 del_waybill,
2216 del_gross_weight,
2217 del_ui_location_code,
2218 del_customer_name,
2219 del_pickup_date,
2220 del_dropoff_date,
2221 del_ship_date,
2222 bol
2223 FROM wsh_purge_set_v
2224 WHERE trip_id = p_tripid;
2225
2226 --Added hints to the query for bug 4891951
2227 CURSOR c_bols_for_del(p_delivery_id NUMBER) IS
2228 SELECT /*+use_nl(v.wda, v.wnd, v.wdl)*/ distinct v.bol
2229 FROM wsh_purge_set_v v
2230 WHERE v.del_id = p_delivery_id
2231 AND v.bol is not null;
2232
2233 --Get Sales Order Details for Deliveries
2234 --Added hints to the query for bug 4891951
2235 CURSOR c_so_for_delivery(p_delivery_id NUMBER) IS
2236 SELECT /*+use_nl(v.wda, v.wnd, v.wdl)*/ DISTINCT v.dd_source_header_number,
2237 v.dd_source_header_type_name--,
2238 -- dd_creation_date
2239 FROM wsh_purge_set_v v
2240 WHERE v.del_id = p_delivery_id
2241 AND v.dd_source_header_number is not null;
2242
2243 CURSOR c_dels_trips_for_order(p_ordernumber VARCHAR2) IS
2244 SELECT distinct trip_id,
2245 trip_name,
2246 del_id,
2247 del_name,
2248 del_waybill,
2249 del_gross_weight,
2250 del_ui_location_code,
2251 del_customer_name,
2252 del_pickup_date,
2253 del_dropoff_date,
2254 del_ship_date,
2255 bol
2256 FROM wsh_purge_set_v
2257 WHERE dd_source_header_number= p_ordernumber;
2258
2259 --Get Containers for Sales Orders
2260 /*CURSOR c_containers_for_so(order_number varchar2) IS
2261 SELECT distinct wda.parent_delivery_detail_id
2262 FROM wsh_delivery_assignments_v wda,
2263 wsh_delivery_details wdd
2264 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
2265 AND wdd.source_header_number = order_number
2266 AND wda.parent_delivery_detail_id IS NOT NULL;
2267 */
2268
2269 /*CURSOR c_containers_for_so(order_number varchar2) IS
2270 SELECT DISTINCT wda.parent_delivery_detail_id
2271 FROM wsh_delivery_assignments_v wda ,wsh_Delivery_Details wdd
2272 WHERE wda.parent_delivery_detail_id is not null
2273 AND wdd.delivery_Detail_id = wda.delivery_detail_id
2274 CONNECT BY PRIOR wda.delivery_detail_id = wda.parent_delivery_detail_id
2275 START WITH wdd.source_header_number =order_number;
2276 */
2277
2278 CURSOR c_containers_for_so(p_order_number varchar2) IS
2279 SELECT DISTINCT wda.parent_delivery_detail_id
2280 FROM wsh_delivery_assignments_v wda
2281 WHERE wda.parent_delivery_detail_id is not null
2282 CONNECT BY PRIOR wda.delivery_detail_id = wda.parent_delivery_detail_id
2283 START WITH wda.delivery_id IN (select wda1.delivery_id from
2284 wsh_delivery_assignments_v wda1, wsh_delivery_Details wdd
2285 WHERE wda1.delivery_Detail_id = wdd.delivery_Detail_id
2286 and wdd.source_header_number = p_order_number);
2287
2288 BEGIN
2289 -- Debug Statements
2290 --
2291 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2292 --
2293 IF l_debug_on IS NULL THEN
2294 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2295 END IF;
2296
2297 IF l_debug_on THEN
2298 WSH_DEBUG_SV.push(l_module_name);
2299 END IF;
2300
2301 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2302
2303 l_nonempty_count := 0;
2304 l_lpn_count := 0;
2305 l_empty_trip_count := 0;
2306 l_empty_del_count := 0;
2307 l_empty_lpn_count := 0;
2308
2309 IF l_debug_on THEN
2310 WSH_DEBUG_SV.log(l_module_name,'P_EXECUTION_MODE',p_execution_mode);
2311 WSH_DEBUG_SV.log(l_module_name,'P_SOURCE_SYSTEM',p_source_system);
2312 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_FROM_ORG',p_ship_from_org);
2313 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_FROM',p_order_number_from);
2314 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_NUMBER_To',p_order_number_to);
2315 WSH_DEBUG_SV.log(l_module_name,'P_ORDER_TYPE',p_order_type);
2316 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_FROM',p_ship_date_from);
2317 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_DATE_TO',p_ship_date_to);
2318 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_BEYOND_X_SHIP_DAYS',p_delete_beyond_x_ship_days);
2319 WSH_DEBUG_SV.log(l_module_name,'P_PURGE_INTRANSIT_TRIPS',p_purge_intransit_trips);
2320 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_EMPTY_Records',p_delete_empty_records);
2321 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_FROM',p_create_date_from);
2322 WSH_DEBUG_SV.log(l_module_name,'P_CREATE_DATE_TO',p_create_date_to);
2323 WSH_DEBUG_SV.log(l_module_name,'P_DEL_BEYOND_CREATION_DAYS',p_del_beyond_creation_days);
2324 WSH_DEBUG_SV.log(l_module_name,'P_SORT_PER_CRITERIA',p_sort_per_criteria);
2325 WSH_DEBUG_SV.log(l_module_name,'P_PRINT_DETAIL',p_print_detail);
2326 WSH_DEBUG_SV.log(l_module_name,'P_COUNT_LEGS',p_count_legs);
2327 WSH_DEBUG_SV.log(l_module_name,'P_COUNT_STOPS',p_count_stops);
2328 WSH_DEBUG_SV.log(l_module_name,'P_COUNT_DETAILS',p_count_details);
2329 WSH_DEBUG_SV.log(l_module_name,'P_COUNT_ContainerS',p_count_containers);
2330 END IF;
2331
2332 -- FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<?xml version="1.0" ?>');
2333 --bug 12605679: Added encoding to UTF-8
2334 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<?xml version="1.0" encoding="UTF-8" ?>');
2335 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<ROWSET>');
2336 IF p_execution_mode = 'V' THEN
2337 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<EXEC_MODE>View Purge Selection</EXEC_MODE>');
2338 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<COUNT_HEADING>Eligible to Purge</COUNT_HEADING>');
2339 ELSE
2340 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<EXEC_MODE>Purge</EXEC_MODE>');
2341 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<COUNT_HEADING>Purged</COUNT_HEADING>)');
2342 END IF;
2343 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<CURR_DATE>'|| SYSDATE ||'</CURR_DATE>');
2344
2345 --RTV changes
2346 /*
2347 IF (p_source_system = 'ALL') THEN
2348 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SOURCE_SYSTEM>All</SOURCE_SYSTEM>');
2349 ELSIF (p_source_system = 'OE') THEN
2350 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SOURCE_SYSTEM>Order Management</SOURCE_SYSTEM>');
2351 ELSIF (p_source_system = 'PO') THEN
2352 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SOURCE_SYSTEM>Purchasing</SOURCE_SYSTEM>');
2353 ELSIF (p_source_system = 'WSH') THEN
2354 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SOURCE_SYSTEM>Shipping</SOURCE_SYSTEM>');
2355 END IF;
2356 */
2357
2358 SELECT meaning
2359 INTO l_src_meaning
2360 FROM wsh_lookups
2361 WHERE lookup_code = p_source_system
2362 AND lookup_type in ('WSH_PURGE_SOURCE_SYSTEMS','SOURCE_SYSTEM')
2363 AND LOOKUP_CODE <> 'OKE'
2364 AND enabled_flag = 'Y'
2365 AND Trunc(SYSDATE) BETWEEN Nvl(start_date_active, Trunc(SYSDATE)) AND Nvl
2366 (
2367 end_date_active, Trunc(SYSDATE))
2368 AND ROWNUM < 2;
2369 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SOURCE_SYSTEM>'||l_src_meaning||'</SOURCE_SYSTEM>');
2370 --RTV changes
2371
2372
2373 IF p_ship_from_org IS NOT NULL THEN
2374 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SHIP_ORG>' ||
2375 WSH_UTIL_CORE.GET_ORG_NAME(p_organization_id => to_number(p_ship_from_org)) ||
2376 '</SHIP_ORG>');
2377 ELSE
2378 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SHIP_ORG></SHIP_ORG>');
2379 END IF;
2380
2381 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<ORDER_NUM_FROM>' || p_order_number_from || '</ORDER_NUM_FROM>');
2382 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<ORDER_NUM_TO>' || p_order_number_to || '</ORDER_NUM_TO>');
2383 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<ORDER_TYPE>' || p_order_type || '</ORDER_TYPE>');
2384 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SHIP_DATE_FROM>' || FND_DATE.CANONICAL_TO_DATE(p_ship_date_from) || '</SHIP_DATE_FROM>');
2385 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SHIP_DATE_TO>' || FND_DATE.CANONICAL_TO_DATE(p_ship_date_to) || '</SHIP_DATE_TO>');
2386 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<DEL_SHIP_DAYS>' || p_delete_beyond_x_ship_days || '</DEL_SHIP_DAYS>');
2387
2388 IF p_purge_intransit_trips = 'Y' THEN
2389 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<CLOSE_IT_TRIPS>Yes</CLOSE_IT_TRIPS>');
2390 ELSE
2391 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<CLOSE_IT_TRIPS>No</CLOSE_IT_TRIPS>');
2392 END IF;
2393
2394 IF p_delete_empty_records = 'Y' THEN
2395 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<DEL_EMPTY>Yes</DEL_EMPTY>');
2396 ELSE
2397 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<DEL_EMPTY>No</DEL_EMPTY>');
2398 END IF;
2399
2400 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<CREATE_DATE_FROM>'|| FND_DATE.CANONICAL_TO_DATE(p_create_date_from) ||'</CREATE_DATE_FROM>');
2401 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<CREATE_DATE_TO>'|| FND_DATE.CANONICAL_TO_DATE(p_create_date_to) ||'</CREATE_DATE_TO>');
2402 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<DEL_CREATE_DAYS>' || p_del_beyond_creation_days || '</DEL_CREATE_DAYS>');
2403
2404 IF p_sort_per_criteria = 'T' THEN
2405 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_CRITERIA>Trip</SORT_CRITERIA>');
2406 ELSIF p_sort_per_criteria = 'D' THEN
2407 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_CRITERIA>Delivery</SORT_CRITERIA>');
2408 ELSIF p_sort_per_criteria = 'O' THEN
2409 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_CRITERIA>Order</SORT_CRITERIA>');
2410 END IF;
2411
2412 IF p_print_detail='L' THEN
2413 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<PRINT_DETAIL>Detail with LPN</PRINT_DETAIL>');
2414 ELSIF p_print_detail='D' THEN
2415 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<PRINT_DETAIL>Detail</PRINT_DETAIL>');
2416 ELSIF p_print_detail='S' THEN
2417 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<PRINT_DETAIL>Summary</PRINT_DETAIL>');
2418 END IF;
2419
2420 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<PURGED_BY>'|| FND_GLOBAL.USER_NAME ||'</PURGED_BY>');
2421 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<REQUEST_ID>' ||FND_GLOBAL.CONC_REQUEST_ID ||'</REQUEST_ID>');
2422 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<NO_OF_TRIPS>' || p_tbl_trip_purge_set.COUNT || '</NO_OF_TRIPS>');
2423 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<NO_OF_STOPS>' || p_count_stops || '</NO_OF_STOPS>');
2424 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<NO_OF_DELS>' || p_tbl_delivery_purge_set.COUNT || '</NO_OF_DELS>');
2425 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<NO_OF_LINES>' || p_count_details || '</NO_OF_LINES>');
2426
2427 IF p_print_detail <> 'S' THEN --check for print detail
2428 IF p_tbl_trip_purge_set.COUNT > 0 THEN
2429 FOR l_trip_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
2430 LOOP
2431 l_trip_id := p_tbl_trip_purge_set(l_trip_index).trip_id;
2432 l_trip_name := p_tbl_trip_purge_set(l_trip_index).trip_name;
2433 IF (p_tbl_trip_purge_set(l_trip_index).purge_set_type = 'NON_EMPTY') THEN
2434 --FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP>');
2435 --FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID>' || l_trip_id || '</TRIP_ID>');
2436 l_nonempty_count := l_nonempty_count +1;
2437 OPEN c_dels_for_trip(l_trip_id);
2438 LOOP
2439 FETCH c_dels_for_trip into l_delivery_id,l_delivery_name,l_waybill,l_gross_weight,
2440 l_ship_to,l_customer_name,l_pickup_date,l_dropoff_date,l_ship_date,l_bol_number ;
2441 EXIT WHEN c_dels_for_trip%NOTFOUND;
2442
2443 IF p_sort_per_criteria <> 'O' THEN --check for sort by order
2444 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<TRIP>');
2445 IF P_SORT_PER_CRITERIA = 'T' THEN
2446 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>' || l_trip_name || '</SORT_ID>');
2447 ELSIF P_SORT_PER_CRITERIA = 'D' THEN
2448 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>' || l_delivery_name || '</SORT_ID>');
2449 END IF ;
2450 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID>' || l_trip_name || '</TRIP_ID>');
2451 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DELIVERY_ID>' || l_delivery_name || '</DELIVERY_ID>');
2452 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<WAYBILL>' || l_waybill || '</WAYBILL>');
2453 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<BOL>' || l_bol_number || '</BOL>');
2454 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<GROSS_WEIGHT>' || l_gross_weight || '</GROSS_WEIGHT>');
2455 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SHIP_TO>' || l_ship_to || '</SHIP_TO>');
2456 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER><![CDATA[ ' || l_customer_name || ']]></CUSTOMER>');
2457 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<PICKUP_DATE>' || l_pickup_date || '</PICKUP_DATE>');
2458 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DROPOFF_DATE>' || l_dropoff_date || '</DROPOFF_DATE>');
2459 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SHIP_DATE>' || l_ship_date || '</SHIP_DATE>');
2460 END IF;--check for sort by order
2461
2462 OPEN c_so_for_delivery(l_delivery_id);
2463 LOOP
2464 FETCH c_so_for_delivery into l_sales_order,l_order_type;
2465 EXIT WHEN c_so_for_delivery%NOTFOUND;
2466 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SALES_ORDER>');
2467 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<ORDER_NUMBER>' || l_sales_order || '</ORDER_NUMBER>');
2468 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<ORDER_TYPE>' || l_order_type || '</ORDER_TYPE>');
2469 IF p_print_detail = 'L' THEN --check whether to print container details
2470 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CONTAINER>');
2471 OPEN c_containers_for_so(l_sales_order);
2472 LOOP
2473 l_lpn_count := l_lpn_count+1;
2474 FETCH c_containers_for_so into l_container_id;
2475 EXIT WHEN c_containers_for_so%NOTFOUND;
2476 IF l_lpn_count = 1 THEN
2477 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,l_container_id);
2478 ELSE
2479 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,' ,' || l_container_id);
2480 END IF;
2481 END LOOP;
2482 CLOSE c_containers_for_so;
2483 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</CONTAINER>');
2484 END IF; -- end check to print container details
2485
2486 IF p_sort_per_criteria = 'O' THEN --check for sort by order
2487 OPEN c_dels_trips_for_order(l_sales_order);
2488 LOOP
2489 FETCH c_dels_trips_for_order into l_trip_id,l_trip_name,l_delivery_id,
2490 l_delivery_name,l_waybill,l_gross_weight,l_ship_to,l_customer_name,
2491 l_pickup_date,l_dropoff_date,l_ship_date,l_bol_number ;
2492 EXIT WHEN c_dels_trips_for_order%NOTFOUND;
2493 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<TRIP>');
2494 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID>' || l_trip_name || '</TRIP_ID>');
2495 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DELIVERY_ID>' || l_delivery_name || '</DELIVERY_ID>');
2496 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<WAYBILL>' || l_waybill || '</WAYBILL>');
2497 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<BOL>' || l_bol_number || '</BOL>');
2498 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<GROSS_WEIGHT>' || l_gross_weight || '</GROSS_WEIGHT>');
2499 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SHIP_TO>' || l_ship_to || '</SHIP_TO>');
2500 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<CUSTOMER><![CDATA[ ' || l_customer_name || ']]></CUSTOMER>');
2501 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<PICKUP_DATE>' || l_pickup_date || '</PICKUP_DATE>');
2502 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DROPOFF_DATE>' || l_dropoff_date || '</DROPOFF_DATE>');
2503 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<SHIP_DATE>' || l_ship_date || '</SHIP_DATE>');
2504 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');
2505 END LOOP;
2506 CLOSE c_dels_trips_for_order;
2507 END IF; --check for sort by order
2508
2509 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</SALES_ORDER>');
2510 END LOOP;
2511 CLOSE c_so_for_delivery;
2512 IF p_sort_per_criteria <> 'O' THEN --check for sort by order
2513 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');
2514 END IF; --check for sort by order
2515 END LOOP;
2516 CLOSE c_dels_for_trip;
2517 --FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');
2518 END IF;
2519 END LOOP;
2520 END IF; --check for number of records in plsql table
2521
2522 -- print empty trips
2523 IF p_tbl_trip_purge_set.COUNT > 0 THEN --check for number of records in plsql table
2524 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_TRIPS>');
2525 l_buff_size := 0 ; -- Reset the buffer size to zero
2526 FOR l_trip_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
2527 LOOP
2528 l_trip_id := p_tbl_trip_purge_set(l_trip_index).trip_id;
2529 l_trip_name := p_tbl_trip_purge_set(l_trip_index).trip_name;
2530 IF (p_tbl_trip_purge_set(l_trip_index).purge_set_type = 'EMPTYTRIPS') THEN
2531 l_empty_trip_count := l_empty_trip_count+1;
2532 /*FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<TRIP>');
2533 IF P_SORT_PER_CRITERIA = 'T' THEN
2534 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>' || lpad(l_trip_id,10,'0') || '</SORT_ID>');
2535 ELSIF P_SORT_PER_CRITERIA = 'D' THEN
2536 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>999999999</SORT_ID>');
2537 END IF ;
2538 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID>' || l_trip_id || '</TRIP_ID>');
2539 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DELIVERY_ID></DELIVERY_ID>');
2540 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');*/
2541
2542 --Bug 8204644
2543 IF ( l_buff_size = 0 AND l_empty_trip_count=1 ) THEN
2544 l_buff_size := lengthb(l_trip_name);
2545 FND_FILE.PUT(FND_FILE.OUTPUT,l_trip_name);
2546 ELSIF ( l_buff_size = 0 AND l_empty_trip_count<>1 ) THEN
2547 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,',');
2548 l_buff_size := lengthb(l_trip_name);
2549 FND_FILE.PUT(FND_FILE.OUTPUT,l_trip_name);
2550 ELSIF l_buff_size < 30000 THEN
2551 l_buff_size := l_buff_size + lengthb(l_trip_name) + 2;
2552 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_trip_name);
2553 ELSIF l_buff_size >= 30000 THEN
2554 l_buff_size := 0;
2555 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_trip_name );
2556 END IF;
2557 --Bug 8204644
2558 END IF;
2559 END LOOP;
2560 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</EMPTY_TRIPS>');
2561 END IF; --check for number of records in plsql table
2562
2563 -- print empty deliveries
2564 IF p_tbl_delivery_purge_set.COUNT > 0 THEN --check for number of records in plsql table
2565 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_DELS>');
2566 l_buff_size := 0 ; -- Reset the buffer size to zero
2567 FOR l_delivery_index in p_tbl_delivery_purge_set.FIRST .. p_tbl_delivery_purge_set.LAST
2568 LOOP
2569 l_delivery_id := p_tbl_delivery_purge_set(l_delivery_index).delivery_id;
2570 l_delivery_name := p_tbl_delivery_purge_set(l_delivery_index).delivery_name;
2571 IF (p_tbl_delivery_purge_set(l_delivery_index).purge_set_type = 'EMPTYDELS') THEN
2572 l_empty_del_count := l_empty_del_count+1 ;
2573
2574 --Bug 8204644
2575 IF ( l_buff_size = 0 AND l_empty_del_count=1 ) THEN
2576 l_buff_size := lengthb(l_delivery_name);
2577 FND_FILE.PUT(FND_FILE.OUTPUT,l_delivery_name);
2578 ELSIF ( l_buff_size = 0 AND l_empty_del_count<>1 ) THEN
2579 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,',');
2580 l_buff_size := lengthb(l_delivery_name);
2581 FND_FILE.PUT(FND_FILE.OUTPUT,l_delivery_name);
2582 ELSIF l_buff_size < 30000 THEN
2583 l_buff_size := l_buff_size + lengthb(l_delivery_name) + 2;
2584 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_delivery_name);
2585 ELSIF l_buff_size >= 30000 THEN
2586 l_buff_size := 0;
2587 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_delivery_name );
2588 END IF;
2589 --Bug 8204644
2590
2591 /*FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<TRIP>');
2592 IF P_SORT_PER_CRITERIA = 'T' THEN
2593 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>999999999</SORT_ID>');
2594 ELSIF P_SORT_PER_CRITERIA = 'D' THEN
2595 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>' || lpad(l_delivery_id,10,'0') || '</SORT_ID>');
2596 END IF ;
2597 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID></TRIP_ID>');
2598 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DELIVERY_ID>' || l_delivery_id || '</DELIVERY_ID>');
2599 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');*/
2600
2601 END IF;
2602 END LOOP;
2603 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</EMPTY_DELS>');
2604 END IF; --check for number of records in plsql table
2605
2606 -- print empty containers
2607 IF p_tbl_container_purge_set.COUNT > 0 THEN --check for number of records in plsql table
2608 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_LPNS>');
2609 l_buff_size := 0 ; -- Reset the buffer size to zero
2610 FOR l_container_index in p_tbl_container_purge_set.FIRST .. p_tbl_container_purge_set.LAST
2611 LOOP
2612 l_container_id := p_tbl_container_purge_set(l_container_index).container_id;
2613 IF (p_tbl_container_purge_set(l_container_index).purge_set_type = 'EMPTYLPNS') THEN
2614 l_empty_lpn_count := l_empty_lpn_count+1 ;
2615
2616 --Bug 8204644
2617 IF ( l_buff_size = 0 AND l_empty_lpn_count=1 ) THEN
2618 l_buff_size := lengthb(l_container_id);
2619 FND_FILE.PUT(FND_FILE.OUTPUT,l_container_id);
2620 ELSIF ( l_buff_size = 0 AND l_empty_lpn_count<>1 ) THEN
2621 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,',');
2622 l_buff_size := lengthb(l_container_id);
2623 FND_FILE.PUT(FND_FILE.OUTPUT,l_container_id);
2624 ELSIF l_buff_size < 30000 THEN
2625 l_buff_size := l_buff_size + lengthb(l_container_id) + 2;
2626 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_container_id);
2627 ELSIF l_buff_size >= 30000 THEN
2628 l_buff_size := 0;
2629 FND_FILE.PUT(FND_FILE.OUTPUT, ', ' || l_container_id );
2630 END IF;
2631 --Bug 8204644
2632
2633 /*FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<TRIP>');
2634 IF P_SORT_PER_CRITERIA = 'T' THEN
2635 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>999999999</SORT_ID>');
2636 ELSIF P_SORT_PER_CRITERIA = 'D' THEN
2637 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<SORT_ID>' || lpad(l_delivery_id,10,'0') || '</SORT_ID>');
2638 END IF ;
2639 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '<TRIP_ID></TRIP_ID>');
2640 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<DELIVERY_ID>' || l_delivery_id || '</DELIVERY_ID>');
2641 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</TRIP>');*/
2642
2643 END IF;
2644 END LOOP;
2645 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'</EMPTY_LPNS>');
2646 END IF; --check for number of records in plsql table
2647
2648 END IF; --check for print detail
2649 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<NON_EMPTY_COUNT>' || l_nonempty_count || '</NON_EMPTY_COUNT>');
2650 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_TRIP_COUNT>' || l_empty_trip_count || '</EMPTY_TRIP_COUNT>');
2651 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_DEL_COUNT>' || l_empty_del_count || '</EMPTY_DEL_COUNT>');
2652 FND_FILE.PUT_LINE(FND_FILE.OUTPUT,'<EMPTY_LPN_COUNT>' || l_empty_lpn_count || '</EMPTY_LPN_COUNT>');
2653 FND_FILE.PUT_LINE(FND_FILE.OUTPUT, '</ROWSET>');
2654
2655 IF l_debug_on THEN
2656 WSH_DEBUG_SV.pop(l_module_name);
2657 END IF;
2658
2659 EXCEPTION
2660 WHEN OTHERS THEN
2661 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
2662 l_err := SQLERRM;
2663
2664 IF l_debug_on THEN
2665 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
2666 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2667 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2668 END IF;
2669
2670 END Generate_Purge_Report;
2671
2672
2673 -----------------------------------------------------------------------------
2674 --
2675 -- Procedure: Purge_Workflow
2676 -- Parameters: p_tbl_trip_purge_set pl/sql table of trip id's eligible for purge
2677 -- p_tbl_delivery_purge_set pl/sql table of delivery id's eligible for purge
2678 -- x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
2679
2680 -- Description: This API deletes the workflows for Trip and Delivery.
2681 -----------------------------------------------------------------------------
2682
2683 PROCEDURE Purge_Workflow(p_tbl_trip_purge_set Trip_ID_Tbl_Type ,
2684 p_tbl_delivery_purge_set Delivery_ID_Tbl_Type,
2685 x_return_status OUT NOCOPY VARCHAR2) IS
2686
2687 l_debug_on BOOLEAN;
2688 l_return_status VARCHAR2(1);
2689
2690 l_delivery_ids_tab WSH_UTIL_CORE.column_tab_type;
2691 l_trip_ids_tab WSH_UTIL_CORE.column_tab_type;
2692
2693 l_success_count NUMBER;
2694
2695 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE_WORKFLOW';
2696
2697 BEGIN
2698
2699 -- Debug Statements
2700 --
2701 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2702 --
2703 IF l_debug_on IS NULL THEN
2704 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2705 END IF;
2706
2707 IF l_debug_on THEN
2708 WSH_DEBUG_SV.push(l_module_name);
2709 END IF;
2710
2711 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2712
2713 --Check for number of ids in delivery table
2714 IF p_tbl_delivery_purge_set.COUNT > 0 THEN
2715 FOR l_delivery_index in p_tbl_delivery_purge_set.FIRST .. p_tbl_delivery_purge_set.LAST
2716 LOOP
2717 l_delivery_ids_tab(l_delivery_index) := p_tbl_delivery_purge_set(l_delivery_index).delivery_id;
2718 END LOOP;
2719
2720 IF l_debug_on THEN
2721 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
2722 WSH_DEBUG_SV.logmsg(l_module_name,'no of delivery ids =' || l_delivery_ids_tab.count, WSH_DEBUG_SV.C_PROC_LEVEL);
2723 END IF;
2724
2725 WSH_WF_STD.Purge_Entity(
2726 p_entity_type => 'DELIVERY',
2727 p_entity_ids =>l_delivery_ids_tab,
2728 --p_action IN VARCHAR2 DEFAULT 'PURGE',
2729 --p_docommit IN BOOLEAN DEFAULT FALSE,
2730 x_success_count => l_success_count,
2731 x_return_status => l_return_status) ;
2732
2733 IF l_debug_on THEN
2734 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
2735 WSH_DEBUG_SV.log(l_module_name,'L_SUCCESS_COUNT',l_success_count);
2736 END IF;
2737
2738 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2739 x_return_status := l_return_status;
2740 IF l_debug_on THEN
2741 WSH_DEBUG_SV.pop(l_module_name);
2742 END IF;
2743 RETURN;
2744 END IF;
2745 END IF; --Check for number of ids in delivery table
2746
2747 --Check for number of ids in trip table
2748 IF p_tbl_trip_purge_set.COUNT > 0 THEN
2749 FOR l_trip_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
2750 LOOP
2751 l_trip_ids_tab(l_trip_index) := p_tbl_trip_purge_set(l_trip_index).trip_id;
2752 END LOOP;
2753
2754 IF l_debug_on THEN
2755 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
2756 END IF;
2757
2758 WSH_WF_STD.Purge_Entity(
2759 p_entity_type => 'TRIP',
2760 p_entity_ids =>l_trip_ids_tab,
2761 --p_action IN VARCHAR2 DEFAULT 'PURGE',
2762 --p_docommit IN BOOLEAN DEFAULT FALSE,
2763 x_success_count => l_success_count,
2764 x_return_status => l_return_status) ;
2765
2766 IF l_debug_on THEN
2767 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
2768 WSH_DEBUG_SV.log(l_module_name,'L_SUCCESS_COUNT',l_success_count);
2769 END IF;
2770
2771 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2772 x_return_status := l_return_status;
2773 IF l_debug_on THEN
2774 WSH_DEBUG_SV.pop(l_module_name);
2775 END IF;
2776 RETURN;
2777 END IF;
2778 END IF; --Check for number of ids in trip table
2779
2780 IF l_debug_on THEN
2781 WSH_DEBUG_SV.pop(l_module_name);
2782 END IF;
2783
2784 END Purge_Workflow;
2785
2786
2787 -----------------------------------------------------------------------------
2788 --
2789 -- Procedure: Validate_Trips
2790 -- Parameters: p_tbl_trip_purge_set pl/sql table of trip id's eligible for purge
2791 -- x_tbl_trip_purge_set pl/sql table of trip id's eligible for purge
2792 -- after validating all the LPNs belonging to the trip with WMS API
2793 -- x_return_status - Returns WSH_UTIL_CORE.G_RET_STS_SUCCESS if Success
2794
2795 -- Description: This API call the WMS_Container_Grp API for checking the validity of
2796 -- each LPN belonging to a particular trip.
2797 -- The WMS LPN Purge API returns the list of LPN Ids that are eligible to
2798 -- be purged from WMS side. If the number of LPNs returned by WMS
2799 -- is same as the number of LPNs passed by this API that means that
2800 -- all the LPNs within the trip are eligible to be purged and the
2801 -- further validations for MDC/Moves can be performed on the trip.
2802 -- If the count is not same then the trip is marked as in eligible for
2803 -- purge and is excluded from the list of trips to be purged.
2804 -- This API also checks whether the trip is a part of valid Continuous
2805 -- Move(CM). A valid CM is one in which all the the trips are eligible
2806 -- for purge. If not then the Trip is not eligible to be purged.
2807 -- This API also checks whether the trip is a part of valid MDC
2808 -- configuration. A valid MDC configurationis one in which all
2809 -- the the trips are eligible for purge. If not then the Trip is
2810 -- not eligible to be purged.
2811 -----------------------------------------------------------------------------
2812 PROCEDURE Validate_Trips( p_tbl_trip_purge_set Trip_ID_Tbl_Type ,
2813 x_tbl_trip_purge_set OUT NOCOPY Trip_ID_Tbl_Type ,
2814 x_return_status OUT NOCOPY VARCHAR2) IS
2815
2816 l_debug_on BOOLEAN;
2817 l_return_status VARCHAR2(1);
2818
2819 l_trip_id NUMBER;
2820 l_move_id NUMBER;
2821 l_lpn_id NUMBER;
2822 l_trip_index NUMBER;
2823 l_loop_index NUMBER;
2824 l_old_move NUMBER;
2825 l_new_move NUMBER;
2826 l_mdc_trip NUMBER;
2827 l_lpn_count NUMBER;
2828
2829 l_lpn_valid BOOLEAN;
2830 l_move_valid BOOLEAN;
2831 l_trip_valid BOOLEAN;
2832 l_move_found BOOLEAN;
2833 l_trip_found BOOLEAN;
2834
2835 l_err VARCHAR2(500);
2836 sql_tripmove VARCHAR2(4000);
2837
2838 l_msg_count NUMBER;
2839 l_msg_data VARCHAR2(32767);
2840
2841 l_wms_lpn_record WMS_Data_Type_Definitions_PUB.LPNPurgeRecordType;
2842
2843 --TYPE IDTableType IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2844 --l_lpn_ids IDTableType;
2845
2846 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_TRIPS';
2847
2848 TYPE PurgeCurType IS REF CURSOR;
2849 c_trip_moves PurgeCurType; --The cursor gets all the moves their trips
2850 --wherever the move has more than 1 trip
2851 l_tbl_trip_moves Trip_moves_Tbl_Type;
2852 l_tbl_trip_mdc WSH_UTIL_CORE.ID_TAB_TYPE;
2853
2854 CURSOR c_lpns_for_trip(p_tripid NUMBER) IS
2855 SELECT wdd.lpn_id
2856 FROM wsh_trips wt,
2857 wsh_trip_stops wts,
2858 wsh_delivery_legs wdl,
2859 wsh_new_deliveries wnd,
2860 wsh_delivery_assignments_v wda,
2861 wsh_delivery_details wdd
2862 WHERE wt.trip_id = wts.trip_id
2863 AND wts.stop_id = wdl.pick_up_stop_id
2864 AND wdl.delivery_id = wnd.delivery_id
2865 AND wda.delivery_id = wnd.delivery_id
2866 AND wda.delivery_detail_id = wdd.delivery_detail_id
2867 AND wdd.container_flag = 'Y'
2868 AND wdd.lpn_id IS NOT NULL
2869 AND wts.trip_id = p_tripid;
2870
2871 -- Bug 5084113
2872 /* Replaced the query below with a non recursive query
2873 The query below was fetching,
2874 1. All the deliveries of consolidation type( wnd.delivery_type = 'CONSOLIDATION' or wdl.parent_delivery_leg_id IS NULL )
2875 2. Search for possible consolidations within the above list.
2876 3. Build the list of deliveries under consolidation deliveries in step2 and identify the list of trips.
2877
2878 CURSOR c_get_mdc_trips(p_tripid NUMBER) IS
2879 SELECT
2880 DISTINCT wt1.trip_id
2881 FROM
2882 wsh_trips wt1,
2883 wsh_trip_stops pickup_stop1,
2884 wsh_trip_stops dropoff_stop1,
2885 wsh_delivery_legs wdl1
2886 WHERE
2887 wdl1.pick_up_stop_id = pickup_stop1.stop_id AND
2888 wdl1.drop_off_stop_id = dropoff_stop1.stop_id AND
2889 wt1.trip_id = pickup_stop1.trip_id AND
2890 wt1.trip_id = dropoff_stop1.trip_id AND
2891 wdl1.delivery_id IN (SELECT delivery_id
2892 FROM wsh_delivery_legs
2893 START WITH delivery_id IN (SELECT delivery_id
2894 FROM wsh_delivery_legs
2895 WHERE parent_delivery_leg_id IS NULL
2896 START WITH delivery_id IN (SELECT wdl.delivery_id
2897 FROM
2898 wsh_new_deliveries wnd,
2899 wsh_delivery_legs wdl,
2900 wsh_trip_stops pickup_stop,
2901 wsh_trip_stops dropoff_stop,
2902 wsh_trips wt
2903 WHERE
2904 wnd.delivery_id = wdl.delivery_id AND
2905 wdl.pick_up_stop_id = pickup_stop.stop_id AND
2906 wdl.drop_off_stop_id = dropoff_stop.stop_id AND
2907 wt.trip_id = pickup_stop.trip_id AND
2908 wt.trip_id = dropoff_stop.trip_id AND
2909 ((wnd.delivery_type = 'CONSOLIDATION')
2910 OR
2911 (wdl.parent_delivery_leg_id IS NULL)
2912 ) AND
2913 wt.trip_id = p_tripid)
2914 CONNECT BY delivery_leg_id = PRIOR parent_delivery_leg_id )
2915 CONNECT BY parent_delivery_leg_id = PRIOR delivery_leg_id)
2916 ORDER BY wt1.trip_id;
2917 */
2918
2919 CURSOR c_get_mdc_trips(p_tripid NUMBER) IS
2920 SELECT
2921 DISTINCT wt1.trip_id
2922 FROM
2923 wsh_trips wt1,
2924 wsh_trip_stops wts,
2925 wsh_delivery_legs wdl1
2926 WHERE
2927 (wdl1.pick_up_stop_id = wts.stop_id OR
2928 wdl1.drop_off_stop_id = wts.stop_id) AND
2929 wt1.trip_id = wts.trip_id AND
2930 wdl1.delivery_id IN
2931 (
2932 SELECT delivery_id
2933 FROM wsh_delivery_legs
2934 WHERE parent_delivery_leg_id
2935 IN
2936 (
2937 SELECT wdl.delivery_leg_id
2938 FROM
2939 wsh_delivery_legs wdl,
2940 wsh_trip_stops wts,
2941 wsh_trips wt
2942 WHERE
2943 (wdl.pick_up_stop_id = wts.stop_id OR
2944 wdl.drop_off_stop_id = wts.stop_id) AND
2945 wt.trip_id = wts.trip_id AND
2946 wdl.parent_delivery_leg_id IS NULL AND
2947 wt.trip_id = p_tripid
2948 )
2949 )
2950 ORDER BY wt1.trip_id;
2951
2952 BEGIN
2953 -- Debug Statements
2954 --
2955 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2956 --
2957 IF l_debug_on IS NULL THEN
2958 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2959 END IF;
2960
2961 IF l_debug_on THEN
2962 WSH_DEBUG_SV.push(l_module_name);
2963 END IF;
2964
2965 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2966 l_lpn_valid := TRUE;
2967
2968 IF (wsh_util_core.fte_is_installed='Y') THEN
2969 sql_tripmove := 'SELECT move_id, trip_id
2970 FROM fte_trip_moves
2971 WHERE move_id IN
2972 (SELECT move_id
2973 FROM fte_trip_moves
2974 GROUP BY move_id
2975 HAVING count(trip_id) >1 )
2976 ORDER BY move_id';
2977
2978 OPEN c_trip_moves FOR sql_tripmove;
2979 FETCH c_trip_moves BULK COLLECT into l_tbl_trip_moves;
2980 CLOSE c_trip_moves;
2981 END IF;
2982
2983 FOR l_trip_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
2984 LOOP
2985 l_lpn_valid := TRUE;
2986 l_trip_id := p_tbl_trip_purge_set(l_trip_index).trip_id;
2987 --Get all the LPNs for the Trip
2988 OPEN c_lpns_for_trip(l_trip_id);
2989 FETCH c_lpns_for_trip BULK COLLECT into l_wms_lpn_record.LPN_IDs;
2990 CLOSE c_lpns_for_trip;
2991
2992 l_lpn_count := l_wms_lpn_record.LPN_IDs.COUNT;
2993
2994 --call WMS API to check whether the LPN is eligible for purge
2995 IF l_debug_on THEN
2996 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_CONTAINER_GRP.LPN_PURGE_ACTIONS', WSH_DEBUG_SV.C_PROC_LEVEL);
2997 END IF;
2998
2999 WMS_Container_GRP.LPN_Purge_Actions( p_api_version =>1.0,
3000 p_init_msg_list =>FND_API.G_TRUE,
3001 p_commit =>'FALSE',
3002 x_return_status =>l_return_status,
3003 x_msg_count =>l_msg_count,
3004 x_msg_data =>l_msg_data,
3005 p_caller =>'WSH',
3006 p_action =>WMS_Container_GRP.G_LPN_PURGE_ACTION_VALIDATE,
3007 p_lpn_purge_rec => l_wms_lpn_record
3008 );
3009
3010 IF l_debug_on THEN
3011 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
3012 WSH_DEBUG_SV.log(l_module_name,'L_MSG_DATA',l_msg_data);
3013 END IF;
3014
3015 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3016 x_return_status := l_return_status;
3017 IF l_debug_on THEN
3018 WSH_DEBUG_SV.pop(l_module_name);
3019 END IF;
3020 RETURN;
3021 END IF;
3022
3023 IF l_lpn_count <> l_wms_lpn_record.LPN_IDs.COUNT THEN
3024 l_lpn_valid := FALSE;
3025 END IF;
3026
3027 --Check for Trip Moves/MDC related validations only when LPN check returns TRUE
3028 IF l_lpn_valid THEN -- is there some other way to stop the loop here and
3029 -- and continue the loop with the next value ?
3030 l_trip_valid := TRUE;
3031 l_move_found := FALSE;
3032 --Check for Trip Moves related validations
3033 IF l_tbl_trip_moves.COUNT > 0 THEN
3034 FOR l_loop_index in l_tbl_trip_moves.FIRST .. l_tbl_trip_moves.LAST
3035 LOOP
3036 IF l_tbl_trip_moves(l_loop_index).trip_id = l_trip_id THEN
3037 l_move_id := l_tbl_trip_moves(l_loop_index).move_id;
3038 l_move_found := TRUE;
3039 FOR l_move_index in l_tbl_trip_moves.FIRST .. l_tbl_trip_moves.LAST
3040 LOOP
3041 l_old_move := l_new_move;
3042 l_new_move :=l_tbl_trip_moves(l_move_index).move_id;
3043 IF (l_old_move IS NOT NULL AND l_old_move <> l_new_move) THEN
3044 EXIT;
3045 END IF;
3046
3047 IF l_tbl_trip_moves(l_move_index).move_id = l_move_id THEN
3048 l_trip_id := l_tbl_trip_moves(l_move_index).trip_id;
3049 l_trip_valid := FALSE;
3050 FOR l_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
3051 LOOP
3052 IF p_tbl_trip_purge_set(l_index).trip_id = l_trip_id THEN
3053 l_trip_valid := TRUE;
3054 END IF;
3055 EXIT WHEN l_trip_valid;
3056 END LOOP;
3057
3058 IF NOT l_trip_valid THEN
3059 EXIT;
3060 END IF;
3061 END IF;
3062 END LOOP;
3063 END IF;
3064 EXIT WHEN l_move_found;
3065 END LOOP;
3066 END IF;
3067 --End Check for Trip Moves related validations
3068
3069 --Check for MDC related validations only if Trip Move related validation returns TRUE
3070 IF l_trip_valid THEN
3071 OPEN c_get_mdc_trips(l_trip_id);
3072 FETCH c_get_mdc_trips BULK COLLECT into l_tbl_trip_mdc;
3073 CLOSE c_get_mdc_trips;
3074 --Check for MDC related validations
3075 IF l_tbl_trip_mdc.COUNT > 1 THEN
3076 FOR l_loop_index in l_tbl_trip_mdc.FIRST .. l_tbl_trip_mdc.LAST
3077 LOOP
3078 l_mdc_trip := l_tbl_trip_mdc(l_loop_index);
3079 l_trip_valid := FALSE;
3080 FOR l_index in p_tbl_trip_purge_set.FIRST .. p_tbl_trip_purge_set.LAST
3081 LOOP
3082 IF p_tbl_trip_purge_set(l_index).trip_id = l_mdc_trip THEN
3083 l_trip_valid := TRUE;
3084 END IF;
3085 EXIT WHEN l_trip_valid;
3086 END LOOP;
3087 EXIT WHEN NOT l_trip_valid;
3088 END LOOP;
3089 END IF; --End check for MDC related validations
3090 END IF;--Check for MDC related validations only if Trip Move related validation returns TRUE
3091 END IF; --End Check for Trip Moves/MDC related validations only when LPN check returns TRUE
3092
3093 IF l_lpn_valid AND l_trip_valid THEN
3094 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT+1).trip_id := p_tbl_trip_purge_set(l_trip_index).trip_id;
3095 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT).trip_name := p_tbl_trip_purge_set(l_trip_index).trip_name;
3096 x_tbl_trip_purge_set(x_tbl_trip_purge_set.COUNT).purge_set_type := p_tbl_trip_purge_set(l_trip_index).purge_set_type;
3097 END IF ;
3098 END LOOP;
3099
3100 IF l_debug_on THEN
3101 WSH_DEBUG_SV.pop(l_module_name);
3102 END IF;
3103
3104 EXCEPTION
3105 WHEN OTHERS THEN
3106 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
3107 l_err := SQLERRM;
3108
3109 IF l_debug_on THEN
3110 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '||
3111 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3112 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3113 END IF;
3114 END Validate_Trips ;
3115
3116 END WSH_PURGE;