DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_PURGE

Source


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