DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_PO_INTEGRATION_GRP

Source


1 PACKAGE BODY WSH_PO_INTEGRATION_GRP AS
2 /* $Header: WSHPOGPB.pls 120.6 2005/08/22 11:43:13 rlanka noship $ */
3 --
4  G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_PO_INTEGRATION_GRP';
5 --
6 
7 
8 -- Start of comments
9 -- API name : check_purge
10 -- Type     : Public
11 -- Pre-reqs : None.
12 -- Function : This API on receiving a set of header IDs,determines
13 --	      whether they are eligible for purging or not by checking
14 --	      for pending transactions against them and appropriately
15 --	      sets a flag.
16 -- Parameters :
17 -- IN:
18 --	p_api_version_number   IN NUMBER
19 --	p_init_msg_list	       IN VARCHAR2
20 --	p_commit	       IN VARCHAR2
21 --	p_in_rec	       IN  WSH_PO_INTG_TYPES_GRP.purge_in_rectype
22 --         A table of records which conatins Header Ids of lines as one of its field.
23 -- IN OUT:
24 --
25 -- OUT:
26 --	x_msg_count	OUT NOCOPY NUMBER
27 --	x_msg_data	OUT NOCOPY VARCHAR2
28 --	x_out_rec	OUT NOCOPY WSH_PO_INTG_TYPES_GRP.purge_out_rectype
29 --         A table of records which contains the flag field. For each record of the i/p
30 --         p_in_rec there is a corresponding entry in this table of records.
31 --         This field is set to 'Y' if there are no pending transactions against the
32 --         header ID and set to 'N' if there are pending transactions against this
33 --         header ID .
34 --	x_return_status OUT NOCOPY VARCHAR2
35 -- Version : 1.0
36 -- Previous version 1.0
37 -- Initial version 1.0
38 -- End of comments
39 
40 
41 PROCEDURE check_purge(
42 	---- Standard parameters
43 	p_api_version_number   IN NUMBER,
44 	p_init_msg_list	       IN VARCHAR2,
45 	p_commit	       IN VARCHAR2,
46 	x_return_status OUT NOCOPY VARCHAR2,
47 	x_msg_count	OUT NOCOPY NUMBER,
48 	x_msg_data	OUT NOCOPY VARCHAR2,
49         -- procedure specific parameters
50 	p_in_rec	       IN  WSH_PO_INTG_TYPES_GRP.purge_in_rectype,
51 	x_out_rec	OUT NOCOPY WSH_PO_INTG_TYPES_GRP.purge_out_rectype
52 	) AS
53 
54 l_purge NUMBER := 0;
55 l_api_version_number NUMBER := 1.0;
56 l_api_name      CONSTANT VARCHAR2(30) := 'check_purge';
57 l_return_status	       VARCHAR2(1);
58 l_extend_count	NUMBER;
59 --
60 l_debug_on BOOLEAN;
61 --
62 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHECK_PURGE';
63 --
64 BEGIN
65 
66 
67 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
68 --
69 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
70 --
71 IF l_debug_on IS NULL
72 THEN
73     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
74 END IF;
75 --
76 --
77 -- Debug Statements
78 --
79 IF l_debug_on THEN
80     WSH_DEBUG_SV.push(l_module_name);
81     --
82     WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION_NUMBER',P_API_VERSION_NUMBER);
83     WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
84     WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
85     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.header_ids.COUNT',p_in_rec.header_ids.COUNT);
86 END IF;
87 --
88 IF NOT FND_API.compatible_api_call(
89   l_api_version_number,
90   p_api_version_number,
91   l_api_name,
92   G_PKG_NAME) THEN
93   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
94 END IF;
95 
96 IF FND_API.to_boolean(p_init_msg_list)  THEN
97   FND_MSG_PUB.initialize;
98 END IF;
99 
100 
101 -- Loop goes through all the header IDs present in p_in_rec.
102 FOR i IN 1..p_in_rec.header_ids.COUNT LOOP
103   --
104   -- Debug Statements
105   --
106   IF l_debug_on THEN
107       WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_PO_CMG_PVT.CHECK_PENDING_TXNS',WSH_DEBUG_SV.C_PROC_LEVEL);
108   END IF;
109   --
110 
111   -- A function call to determine for checking pending transactions.
112   -- If the function returns
113   --    0 -> implies no pending transactions.
114   --    1 -> implies pending transactions.
115   l_purge := WSH_PO_CMG_PVT.check_pending_txns(p_in_rec.header_ids(i),NULL,NULL,NULL);
116   IF l_purge = 0 THEN
117     x_out_rec.purge_allowed(i) := 'Y';
118   ELSIF  l_purge = 1 THEN
119     x_out_rec.purge_allowed(i) := 'N';
120   END IF;
121 END LOOP;
122 
123 
124 FND_MSG_PUB.Count_And_Get(
125   p_count  => x_msg_count,
126   p_data  =>  x_msg_data,
127   p_encoded => FND_API.G_FALSE);
128 
129 IF FND_API.TO_BOOLEAN(p_commit) THEN
130   COMMIT WORK;
131 END IF;
132 
133 
134 
135 --
136 -- Debug Statements
137 --
138 IF l_debug_on THEN
139     WSH_DEBUG_SV.pop(l_module_name);
140 END IF;
141 --
142 EXCEPTION
143   WHEN OTHERS THEN
144     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
145     WSH_UTIL_CORE.Default_Handler('WSH_PO_INTEGRATION_GRP.check_purge',l_module_name);
146     --
147     -- Debug Statements
148     --
149     IF l_debug_on THEN
150         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
151         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
152     END IF;
153     --
154 END check_purge;
155 
156 
157 
158 -- Start of comments
159 -- API name : purge
160 -- Type     : Public
161 -- Pre-reqs : None.
162 -- Function : This API receives a set of header IDs, the API changes
163 --    	      the status of the corresponding delivery detail IDs to
164 --	      'Purge(P)' status after unassigning them from their
165 --	      respective deliveries.
166 -- Parameters :
167 -- IN:
168 --	p_api_version_number   IN NUMBER
169 --	p_init_msg_list	       IN VARCHAR2
170 --	p_commit	       IN VARCHAR2
171 --      p_in_rec               IN  WSH_PO_INTG_TYPES_GRP.purge_in_rectype
172 --        A table of records which contains the header ID to be purged.
173 -- IN OUT:
174 --
175 -- OUT:
176 --	x_return_status OUT NOCOPY VARCHAR2
177 --	x_msg_count	OUT NOCOPY NUMBER
178 --	x_msg_data	OUT NOCOPY VARCHAR2
179 -- Version : 1.0
180 -- Previous version 1.0
181 -- Initial version 1.0
182 -- End of comments
183 
184 
185 PROCEDURE purge(
186 	---- Standard parameters
187 	p_api_version_number   IN NUMBER,
188 	p_init_msg_list	       IN VARCHAR2,
189 	p_commit	       IN VARCHAR2,
190 	x_return_status OUT NOCOPY VARCHAR2,
191 	x_msg_count	OUT NOCOPY NUMBER,
192 	x_msg_data	OUT NOCOPY VARCHAR2,
193         -- procedure specific parameters
194         p_in_rec               IN  WSH_PO_INTG_TYPES_GRP.purge_in_rectype
195         ) IS
196 
197 l_api_version_number NUMBER := 1.0;
198 l_api_name      CONSTANT VARCHAR2(30) := 'purge';
199 l_return_status  VARCHAR2(1);
200 
201 l_detail_tab WSH_UTIL_CORE.id_tab_type;  -- DBI Project
202 l_dbi_rs            VARCHAR2(1);         -- DBI Project
203 
204 --
205 l_debug_on BOOLEAN;
206 --
207 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PURGE';
208 --
209 BEGIN
210 
211 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
212 --
213 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
214 --
215 IF l_debug_on IS NULL
216 THEN
217     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
218 END IF;
219 --
220 --
221 -- Debug Statements
222 --
223 IF l_debug_on THEN
224     WSH_DEBUG_SV.push(l_module_name);
225     --
226     WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION_NUMBER',P_API_VERSION_NUMBER);
227     WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
228     WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
229     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.header_ids.count',p_in_rec.header_ids.count);
230 END IF;
231 --
232 SAVEPOINT PURGE_PVT;
233 
234 IF NOT FND_API.compatible_api_call(
235   l_api_version_number,
236   p_api_version_number,
237   l_api_name,
238   G_PKG_NAME) THEN
239   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
240 END IF;
241 
242 IF FND_API.to_boolean(p_init_msg_list)  THEN
243   FND_MSG_PUB.initialize;
244 END IF;
245 
246 
247 --updates the status of all i/p lines to 'P' (purge).
248 FORALL i IN p_in_rec.header_ids.FIRST..p_in_rec.header_ids.LAST
249   UPDATE wsh_delivery_details
250   SET released_status = 'P'
251   where source_header_id = p_in_rec.header_ids(i)
252         AND source_code = 'PO'
253   RETURNING delivery_detail_id BULK COLLECT INTO l_detail_tab;
254 
255   --
256   -- DBI Project
257   -- Update of wsh_delivery_details where released_status
258   -- are changed, call DBI API after the update.
259   -- This API will also check for DBI Installed or not
260   IF l_debug_on THEN
261    WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Delivery Details l_detail_tab count : ',l_detail_tab.COUNT);
262   END IF;
263   WSH_INTEGRATION.DBI_Update_Detail_Log
264    (p_delivery_detail_id_tab => l_detail_tab,
265     p_dml_type               => 'UPDATE',
266     x_return_status          => l_dbi_rs);
267 
268   IF l_debug_on THEN
269    WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
270   END IF;
271   IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
272   x_return_status := l_dbi_rs;
273   Rollback to PURGE_PVT;
274   -- just pass this return status to caller API
275     IF l_debug_on THEN
276       WSH_DEBUG_SV.logmsg(l_module_name,'DBI API Returned Unexpected error '||x_return_status);
277       WSH_DEBUG_SV.pop(l_module_name);
278     END IF;
279     return;
280   END IF;
281   -- End of Code for DBI Project
282   --
283 
284 FND_MSG_PUB.Count_And_Get(
285   p_count  => x_msg_count,
286   p_data  =>  x_msg_data,
287   p_encoded => FND_API.G_FALSE);
288 
289  IF FND_API.TO_BOOLEAN(p_commit) THEN
290    COMMIT WORK;
291  END IF;
292 
293 
294 --
295 -- Debug Statements
296 --
297 IF l_debug_on THEN
298     WSH_DEBUG_SV.pop(l_module_name);
299 END IF;
300 --
301 EXCEPTION
302 
303   WHEN OTHERS THEN
304     ROLLBACK TO PURGE_PVT;
305     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
306     WSH_UTIL_CORE.ADD_MESSAGE(l_return_status,l_module_name);
307     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_PO_INTEGRATION_GRP.Purge',l_module_name);
308 
309 	     --
310 	     -- Debug Statements
311 	     --
312 	     IF l_debug_on THEN
313 	         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
314 	         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
315 	     END IF;
316 	     --
317 END purge;
318 
319 
320 --======================================================================
321 -- PROCEDURE : vendor_merge
322 --
323 -- COMMENT   :
324 -- HISTORY   : Created the API.
325 --======================================================================
326 
327 PROCEDURE vendor_merge(
328   P_api_version_number   IN NUMBER,
329   P_init_msg_list IN VARCHAR2,
330   P_commit IN VARCHAR2,
331   X_return_status OUT NOCOPY VARCHAR2,
332   X_msg_count OUT NOCOPY NUMBER,
333   X_msg_data OUT NOCOPY VARCHAR2,
334   P_in_rec IN WSH_PO_INTG_TYPES_GRP.merge_in_rectype,
335   X_out_rec OUT NOCOPY WSH_PO_INTG_TYPES_GRP.merge_out_rectype) IS
336 
337 l_api_version_number NUMBER := 1.0;
338 l_api_name      CONSTANT VARCHAR2(30) := 'vendor_merge';
339 l_return_status  VARCHAR2(1);
340 --
341 l_debug_on BOOLEAN;
342 --
343 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VENDOR_MERGE';
344 --
345 BEGIN
346   --
347   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
348   --
349   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
350   --
351   IF l_debug_on IS NULL
352   THEN
353       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
354   END IF;
355   --
356   IF l_debug_on THEN
357       WSH_DEBUG_SV.push(l_module_name);
358       WSH_DEBUG_SV.log(l_module_name,'P_API_VERSION_NUMBER',P_API_VERSION_NUMBER);
359       WSH_DEBUG_SV.log(l_module_name,'P_INIT_MSG_LIST',P_INIT_MSG_LIST);
360       WSH_DEBUG_SV.log(l_module_name,'P_COMMIT',P_COMMIT);
361   END IF;
362   --
363   IF NOT FND_API.compatible_api_call(
364     l_api_version_number,
365     p_api_version_number,
366     l_api_name,
367     G_PKG_NAME) THEN
368     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
369   END IF;
370   --
371   IF FND_API.to_boolean(p_init_msg_list)  THEN
372     FND_MSG_PUB.initialize;
373   END IF;
374   --
375   FND_MSG_PUB.Count_And_Get(
376    p_count  => x_msg_count,
377    p_data  =>  x_msg_data,
378    p_encoded => FND_API.G_FALSE);
379   --
380   IF FND_API.TO_BOOLEAN(p_commit) THEN
381    COMMIT WORK;
382   END IF;
383   --
384   IF l_debug_on THEN
385     WSH_DEBUG_SV.pop(l_module_name);
386   END IF;
387   --
388 EXCEPTION
389   --
390   WHEN OTHERS THEN
391     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
392     WSH_UTIL_CORE.ADD_MESSAGE(l_return_status,l_module_name);
393     WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_PO_INTEGRATION_GRP.VENDOR_MERGE',l_module_name);
394     --
395     IF l_debug_on THEN
396      WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
397      WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
398     END IF;
399     --
400 END vendor_merge;
401 
402 
403 --
404 -- Pre-reqs	: None
405 --
406 -- Parameters
407 --	p_api_version_number    known api version error number
408 --      p_init_msg_list         FND_API.G_TRUE to reset list
409 --	p_commit		indicates whether to commit or not.
410 --      x_return_status         return status
411 --      x_msg_count             number of messages in the list
412 --      x_msg_data              text of messages
413 --	p_in_rec 		Input record structure that holds the
414 --			        routing response number
415 --	x_out_rec 		Output record structure that holds info.
416 --			        whether delivery info. has changed or not.
417 --
418 -- Purpose	: This procedure is used to determine whether delivery characteristics have
419 --		  changed since the time the routing response was generated.
420 --		  This API checks the last_update_date on all the tables related to the
421 --		  routing response and if any of the dates is greater than the
422 --		  last_update_date from WSH_INBOUND_TXN_HISTORY, this API
423 --		  returns TRUE, else it returns FALSE
424 --
425 -- Version : 1.0
426 --
427 PROCEDURE HasDeliveryInfoChanged(
428   P_api_version_number   IN NUMBER,
429   P_init_msg_list 	 IN VARCHAR2,
430   P_commit 		 IN VARCHAR2,
431   x_return_status 	 OUT NOCOPY VARCHAR2,
432   x_msg_count 		 OUT NOCOPY NUMBER,
433   x_msg_data 		 OUT NOCOPY VARCHAR2,
434   P_in_rec 		 IN WSH_PO_INTG_TYPES_GRP.delInfo_in_rectype,
435   x_out_rec 		 OUT NOCOPY WSH_PO_INTG_TYPES_GRP.delInfo_out_rectype)
436 IS
437   --
438   CURSOR c_GetDelId(p_respNum VARCHAR2) IS
439   SELECT wth.shipment_header_id, wth.last_update_date, wnd.last_update_date
440   FROM   wsh_inbound_txn_history wth, wsh_new_deliveries wnd
441   WHERE  receipt_number like p_respNum
442   AND    shipment_header_id = wnd.delivery_id
443   AND    transaction_type = 'ROUTING_RESPONSE'
444   ORDER BY NVL(revision_number, -99) DESC;
445   --
446   CURSOR c_GetLastUpdateDates(p_delId NUMBER) IS
447   SELECT MAX(wda.last_update_date), MAX(wdd.last_update_date)
448   FROM wsh_delivery_assignments_v wda,wsh_delivery_details wdd
449   WHERE wdd.delivery_detail_id = wda.delivery_detail_id
450   AND   wda.delivery_id = p_delId;
451   --
452   -- This cursor gets the dates for the initial pickup location
453   --
454   CURSOR c_GetPTripLastUpdateDate(p_delId NUMBER) IS
455   SELECT wts.last_update_date, wdl.last_update_date, wt.last_update_date
456   FROM   wsh_new_deliveries wnd,
457          wsh_delivery_legs wdl,
458          wsh_trip_stops wts,
459          wsh_trips wt
460   WHERE  wnd.delivery_id = p_delId
461   AND    wnd.delivery_id = wdl.delivery_id
462   AND    wdl.pick_up_stop_id = wts.stop_id
463   AND    wnd.initial_pickup_location_id = wts.stop_location_id
464   AND    wts.trip_id = wt.trip_id
465   AND    wnd.shipping_control='BUYER';
466   --
467   -- This cursor gets the dates for the ultimate dropoff location
468   --
469   CURSOR c_GetDTripLastUpdateDate(p_delId NUMBER) IS
470   SELECT wts.last_update_date, wdl.last_update_date, wt.last_update_date
471   FROM   wsh_new_deliveries wnd,
472          wsh_delivery_legs wdl,
473          wsh_trip_stops wts,
474          wsh_trips wt
475   WHERE  wnd.delivery_id = p_delId
476   AND    wnd.delivery_id = wdl.delivery_id
477   AND    wdl.pick_up_stop_id = wts.stop_id
478   AND    wnd.ultimate_dropoff_location_id = wts.stop_location_id
479   AND    wts.trip_id = wt.trip_id
480   AND    wnd.shipping_control='BUYER';
481   --
482   CURSOR c_GetCarrierLastUpdateDate(p_delId NUMBER) IS
483   SELECT MAX(wcs.last_update_date), MAX(wocs.last_update_date)
484   FROM   wsh_new_deliveries wnd, wsh_carrier_sites wcs,
485          wsh_org_carrier_sites wocs
486   WHERE wnd.organization_id = wocs.organization_id
487   AND   wcs.carrier_id = wnd.carrier_id
488   AND   wnd.delivery_id = p_delId;
489   --
490   l_deliveryId		WSH_INBOUND_TXN_HISTORY.shipment_header_id%TYPE;
491   l_wndUpdateDate	DATE;
492   l_wdaUpdateDate	DATE;
493   l_wddUpdateDate	DATE;
494   l_wdlUpdateDate	DATE;
495   l_wtsUpdateDate	DATE;
496   l_wtUpdateDate	DATE;
497   l_wdlUpdateDate1	DATE;
498   l_wtsUpdateDate1	DATE;
499   l_wtUpdateDate1	DATE;
500   l_ibUpdateDate	DATE;
501   l_wcsUpdateDate	DATE;
502   l_wocsUpdateDate	DATE;
503   l_changed		BOOLEAN := FALSE;
504   --
505   l_api_version_number	CONSTANT NUMBER := 1.0;
506   l_api_name      	CONSTANT VARCHAR2(30) := 'HasDeliveryInfoChanged';
507   l_return_status	VARCHAR2(1);
508   --
509   l_debug_on 	BOOLEAN;
510   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'HasDeliveryInfoChanged';
511   --
512 BEGIN
513   --
514   l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
515   x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
516   --
517   IF l_debug_on IS NULL THEN
518       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
519   END IF;
520   --
521   IF l_debug_on THEN
522     WSH_DEBUG_SV.push(l_module_name);
523     WSH_DEBUG_SV.log(l_module_name,'p_api_version_number',P_API_VERSION_NUMBER);
524     WSH_DEBUG_SV.log(l_module_name,'p_init_msg_list',P_INIT_MSG_LIST);
525     WSH_DEBUG_SV.log(l_module_name,'p_commit',P_COMMIT);
526     WSH_DEBUG_SV.log(l_module_name,'Routing Response Number', p_in_rec.routingRespNum);
527   END IF;
528   --
529   IF NOT FND_API.compatible_api_call(
530     l_api_version_number,
531     p_api_version_number,
532     l_api_name,
533     G_PKG_NAME) THEN
534     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
535   END IF;
536   --
537   IF FND_API.to_boolean(p_init_msg_list)  THEN
538     FND_MSG_PUB.initialize;
539   END IF;
540   --
541   -- Get last_update_date from WND and WTH
542   --
543   OPEN c_GetDelId(p_in_rec.routingRespNum);
544   FETCH c_GetDelId INTO l_deliveryId, l_ibUpdateDate, l_wndUpdateDate;
545   CLOSE c_GetDelId;
546   --
547   IF l_debug_on THEN
548     wsh_debug_sv.log(l_module_name, 'Delivery Id', l_deliveryId);
549     wsh_debug_sv.log(l_module_name, 'last update date in IB TXN history', l_ibUpdateDate);
550     wsh_debug_sv.log(l_module_name, 'WND Last Update Date', l_wndUpdateDate);
551   END IF;
552   --
553   -- Get last_update_dates of various entities tied to delivery
554   --
555   OPEN c_GetLastUpdateDates(l_deliveryId);
556   FETCH c_GetLastUpdateDates INTO l_wdaUpdateDate, l_wddUpdateDate;
557   CLOSE c_GetLastUpdateDates;
558   --
559   OPEN c_GetPTripLastUpdateDate(l_deliveryId);
560   FETCH c_GetPTripLastUpdateDate INTO l_wtsUpdateDate, l_wdlUpdateDate, l_wtUpdateDate;
561   CLOSE c_GetPTripLastUpdateDate;
562   --
563   OPEN c_GetDTripLastUpdateDate(l_deliveryId);
564   FETCH c_GetDTripLastUpdateDate INTO l_wtsUpdateDate1, l_wdlUpdateDate1, l_wtUpdateDate1;
565   CLOSE c_GetDTripLastUpdateDate;
566   --
567   OPEN c_GetCarrierLastUpdateDate(l_deliveryId);
568   FETCH c_GetCarrierLastUpdateDate INTO l_wcsUpdateDate, l_wocsUpdateDate;
569   CLOSE c_GetCarrierLastUpdateDate;
570   --
571   IF l_debug_on THEN
572    wsh_debug_sv.log(l_module_name, 'WND Update Date', l_wndUpdateDate);
573    wsh_debug_sv.log(l_module_name, 'WDA Update Date', l_wdaUpdateDate);
574    wsh_debug_sv.log(l_module_name, 'WDD Update Date', l_wddUpdateDate);
575    wsh_debug_sv.log(l_module_name, 'WTS Update Date using Pickup Stop', l_wtsUpdateDate);
576    wsh_debug_sv.log(l_module_name, 'WDL Update Date using Pickup Stop', l_wdlUpdateDate);
577    wsh_debug_sv.log(l_module_name, 'WT  Update Date using Pickup Stop',  l_wtUpdateDate);
578    wsh_debug_sv.log(l_module_name, 'WTS Update Date using Dropoff Stop', l_wtsUpdateDate1);
579    wsh_debug_sv.log(l_module_name, 'WDL Update Date using Dropoff Stop', l_wdlUpdateDate1);
580    wsh_debug_sv.log(l_module_name, 'WT  Update Date using Dropoff Stop',  l_wtUpdateDate1);
581    wsh_debug_sv.log(l_module_name, 'WCS  Update Date',  l_wcsUpdateDate);
582    wsh_debug_sv.log(l_module_name, 'WOCS Update Date',  l_wocsUpdateDate);
583   END IF;
584   --
585   -- Compare the last_update_dates
586   --
587   IF l_ibUpdateDate < l_wndUpdateDate  OR
588      l_ibUpdateDate < l_wdaUpdateDate  OR
589      l_ibUpdateDate < l_wddUpdateDate  OR
590      l_ibUpdateDate < l_wtsUpdateDate  OR
591      l_ibUpdateDate < l_wdlUpdateDate  OR
592      l_ibUpdateDate < l_wtUpdateDate   OR
593      l_ibUpdateDate < l_wtsUpdateDate1 OR
594      l_ibUpdateDate < l_wdlUpdateDate1 OR
595      l_ibUpdateDate < l_wtUpdateDate1  OR
596      l_ibUpdateDate < l_wcsUpdateDate  OR
597      l_ibUpdateDate < l_wocsUpdateDate THEN
598     l_changed := TRUE;
599   END IF;
600   --
601   x_out_rec.hasChanged := l_changed;
602   --
603   FND_MSG_PUB.Count_And_Get(
604     p_count  => x_msg_count,
605     p_data  =>  x_msg_data,
606     p_encoded => FND_API.G_FALSE);
607   --
608   IF l_debug_on THEN
609     wsh_debug_sv.log(l_module_name, 'l_changed', l_changed);
610     wsh_debug_sv.pop(l_module_name);
611   END IF;
612   --
613   EXCEPTION
614     --
615     WHEN FND_API.G_EXC_ERROR THEN
616       --
617       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
618       --
619       FND_MSG_PUB.Count_And_Get
620         (
621          p_count  => x_msg_count,
622          p_data  =>  x_msg_data,
623          p_encoded => FND_API.G_FALSE
624         );
625       --
626       IF l_debug_on THEN
627         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR',WSH_DEBUG_SV.C_EXCEP_LEVEL);
628         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
629       END IF;
630       --
631     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
632       --
633       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
634       --
635       FND_MSG_PUB.Count_And_Get
636         (
637          p_count  => x_msg_count,
638          p_data  =>  x_msg_data,
639          p_encoded => FND_API.G_FALSE
640         );
641       --
642       IF l_debug_on THEN
643         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXP_ERROR',
644 				WSH_DEBUG_SV.C_EXCEP_LEVEL);
645         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
646       END IF;
647       --
648     WHEN OTHERS THEN
649       --
650       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
651       --
652       WSH_UTIL_CORE.ADD_MESSAGE(l_return_status,l_module_name);
653       WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_PO_INTEGRATION_GRP.HasDeliveryInfoChanged',l_module_name);
654       --
655       IF l_debug_on THEN
656 	WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. '
657 			|| ' Oracle error message is '
658 			|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
659 	WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
660       END IF;
661       --
662 END HasDeliveryInfoChanged;
663 
664 -- { IB-Phase-2
665 --=============================================================================
666 --      API name        : validateASNReceiptShipFrom
667 --      Type            : public.
668 --      Function        :
669 --      Pre-reqs        : None.
670 --      Parameters      :
671 --			 p_api_version_number   IN NUMBER
672 --			 p_init_msg_list IN VARCHAR2
673 --                       p_in_rec  IN WSH_PO_INTEGRATION_GRP.validateSF_in_rec_type
674 --			 p_commit IN VARCHAR2
675 --			 x_return_status OUT NOCOPY VARCHAR2
676 --                       x_out_rec OUT WSH_PO_INTEGRATION_GRP.validateSF_out_rec_type
677 --			 x_msg_count OUT NOCOPY NUMBER
678 --			 x_msg_data OUT NOCOPY VARCHAR2
679 --      Comment         :This API will be called whenever a ASN is created with a
680 --                       ShipFromLocation on the IssupplierPortal Page. This API
681 --                       determines whether the ASN can be created for the given
682 --                       ShipFromLocation based on the following points. It returns
683 --                       TRUE or FALSE to indicate this
684 --                               TRUE - ASN can be created.
685 --                               FALSE - ASN cannot be created.
686 --                        a) IS the ShipFromLocationId passed through input parameter
687 --                            p_in_rec a valid WSH Location.
688 --                                    AND
689 --                        b) There is a open Delivery Line (for the input PO line and PO
690 --                           Shipment Line) with the ShipFromLocation
691 --                           as the one specified as the input parameter or has a
692 --                           value of -1 as its ShipFromLocation. Return TRUE.
693 --                        c) IF (b) above is false (no Delivery lines satisfy (b) ), then
694 --                           check if there are open Delivery Lines for the input PO line
695 --                           and PO Shipment Line). If so return FALSE, other wise return
696 --                           TRUE.
697 --=============================================================================
698 PROCEDURE validateASNReceiptShipFrom
699          (
700                         p_api_version_number   IN NUMBER,
701                         p_init_msg_list        IN VARCHAR2,
702                         p_in_rec  IN WSH_PO_INTEGRATION_GRP.validateSF_in_rec_type,
703 			p_commit               IN VARCHAR2,
704                         x_return_status OUT NOCOPY VARCHAR2,
705                         x_out_rec  OUT NOCOPY WSH_PO_INTEGRATION_GRP.validateSF_out_rec_type,
706 			x_msg_count     OUT NOCOPY NUMBER,
707                         x_msg_data      OUT NOCOPY VARCHAR2
708            )
709 IS
710 
711 Cursor valid_wsh_sf_loc_csr(p_location_id NUMBER)
712 IS
713 Select wsh_location_id
714 from wsh_locations
715 where
716       source_location_id   = p_location_id
717   and location_source_code = 'HZ';
718 
719 
720 Cursor open_line_with_sf_csr (p_shipment_line_id NUMBER,
721                                      p_po_line_id NUMBER,
722 				     p_location_id NUMBER)
723 				     IS
724 Select 1
725 from wsh_delivery_details
726 where
727 po_shipment_line_id = p_shipment_line_id
728 and (ship_from_location_id = p_location_id  or  ship_from_location_id = -1 )
729 and released_status = 'X'
730 and source_code = 'PO'
731 and source_line_id = p_po_line_id
732 and rownum=1;
733 
734 Cursor open_line_without_sf_csr (p_shipment_line_id NUMBER,
735                                         p_po_line_id NUMBER)
736 IS
737 Select 1
738 from wsh_delivery_details
739 where
740 po_shipment_line_id = p_shipment_line_id
741 and released_status = 'X'
742 and source_code = 'PO'
743 and source_line_id = p_po_line_id
744 and rownum =1;
745 
746 
747 l_api_version_number NUMBER := 1.0;
748 l_api_name      CONSTANT VARCHAR2(30) := 'validateASNReceiptShipFrom';
749 l_return_status  VARCHAR2(1);
750 
751 l_index             NUMBER;
752 l_temp              NUMBER;
753 l_wsh_location_id   NUMBER;
754 
755 --
756 l_debug_on BOOLEAN;
757 --
758 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATEASNRECEIPTSHIPFROM';
759 --
760 
761 BEGIN
762 
763 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
764 --
765 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
766 --
767 IF l_debug_on IS NULL
768 THEN
769     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
770 END IF;
771 --
772 --
773 -- Debug Statements
774 --
775 IF l_debug_on THEN
776     WSH_DEBUG_SV.push(l_module_name);
777     WSH_DEBUG_SV.log(l_module_name,'p_api_version_number',p_api_version_number);
778     WSH_DEBUG_SV.log(l_module_name,'p_init_msg_list',p_init_msg_list);
779     WSH_DEBUG_SV.log(l_module_name,'p_commit',p_commit);
780     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.po_line_id_tbl.count',p_in_rec.po_line_id_tbl.count);
781     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.po_shipment_line_id_tbl.count',p_in_rec.po_shipment_line_id_tbl.count);
782     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.ship_from_location_id',p_in_rec.ship_from_location_id);
783 END IF;
784 --
785 IF NOT FND_API.compatible_api_call(
786   l_api_version_number,
787   p_api_version_number,
788   l_api_name,
789   G_PKG_NAME) THEN
790   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
791 END IF;
792 --
793 IF FND_API.to_boolean(p_init_msg_list)  THEN
794   FND_MSG_PUB.initialize;
795 END IF;
796 --
797 x_out_rec.is_valid := TRUE;
798 --
799 IF  p_in_rec.po_line_id_tbl.count = 0 or p_in_rec.po_shipment_line_id_tbl.count = 0
800 THEN
801   IF l_debug_on THEN
802      WSH_DEBUG_SV.logmsg(l_module_name,' Table count of Shipment Line IDs or PO Line IDs are not equal is/are Zero');
803   END IF;
804   raise FND_API.G_EXC_ERROR;
805 END IF;
806 --
807 IF p_in_rec.po_line_id_tbl.count <> p_in_rec.po_shipment_line_id_tbl.count THEN
808    IF l_debug_on THEN
809      WSH_DEBUG_SV.logmsg(l_module_name,' Table count of Shipment Line IDs and PO Line IDs are not equal');
810    END IF;
811    raise FND_API.G_EXC_ERROR;
812 END IF;
813 --
814 --
815 OPEN  valid_wsh_sf_loc_csr(p_in_rec.ship_from_location_id);
816 FETCH valid_wsh_sf_loc_csr INTO l_wsh_location_id;
817 CLOSE valid_wsh_sf_loc_csr;
818 --
819 IF l_debug_on THEN
820     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.ship_from_location_id',p_in_rec.ship_from_location_id);
821     WSH_DEBUG_SV.log(l_module_name,'l_wsh_location_id',l_wsh_location_id);
822 END IF;
823 --
824 IF l_wsh_location_id is NULL THEN
825    IF l_debug_on THEN
826      WSH_DEBUG_SV.logmsg(l_module_name,' Invalid ShipFromLocation ID from PO');
827    END IF;
828    --
829    FND_MESSAGE.SET_NAME('WSH', 'WSH_IB_INVALID_WSH_LOC');
830    WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
831    --
832    RAISE FND_API.G_EXC_ERROR;
833 END IF;
834 --
835 l_index := p_in_rec.po_line_id_tbl.FIRST;
836 WHILE l_index is not null LOOP
837   IF l_debug_on THEN
838     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.po_shipment_line_id_tbl(l_index)',p_in_rec.po_shipment_line_id_tbl(l_index));
839     WSH_DEBUG_SV.log(l_module_name,'p_in_rec.po_line_id_tbl(l_index)',p_in_rec.po_line_id_tbl(l_index));
840   END IF;
841   --
842   OPEN open_line_with_sf_csr (p_in_rec.po_shipment_line_id_tbl(l_index),
843                               p_in_rec.po_line_id_tbl(l_index),
844 			      l_wsh_location_id);
845   FETCH open_line_with_sf_csr INTO l_temp;
846   --
847   IF open_line_with_sf_csr%NOTFOUND THEN
848      OPEN open_line_without_sf_csr(p_in_rec.po_shipment_line_id_tbl(l_index),
849                                           p_in_rec.po_line_id_tbl(l_index));
850      FETCH open_line_without_sf_csr INTO l_temp;
851      --
852      IF open_line_without_sf_csr%FOUND THEN
853         -- raise an error , no suitable open lines found
854 	CLOSE open_line_without_sf_csr;
855         CLOSE open_line_with_sf_csr;
856         --
857 	FND_MESSAGE.SET_NAME('WSH', 'WSH_IB_NO_OPEN_LINES');
858         WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
859         --
860 	RAISE FND_API.G_EXC_ERROR;
861      END IF;
862      CLOSE open_line_without_sf_csr;
863   END IF;
864   CLOSE open_line_with_sf_csr;
865   l_index := p_in_rec.po_line_id_tbl.NEXT(l_index);
866 END LOOP;
867 
868 
869 FND_MSG_PUB.Count_And_Get(
870   p_count  => x_msg_count,
871   p_data  =>  x_msg_data,
872   p_encoded => FND_API.G_FALSE);
873 
874 IF FND_API.TO_BOOLEAN(p_commit) THEN
875    COMMIT WORK;
876 END IF;
877 --
878 -- Debug Statements
879 --
880 IF l_debug_on THEN
881     WSH_DEBUG_SV.pop(l_module_name);
882 END IF;
883 --
884 
885 EXCEPTION
886     WHEN FND_API.G_EXC_ERROR THEN
887       --
888       x_out_rec.is_valid := FALSE;
889       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
890       --
891       FND_MSG_PUB.Count_And_Get
892         (
893          p_count  => x_msg_count,
894          p_data  =>  x_msg_data,
895          p_encoded => FND_API.G_FALSE
896         );
897       --
898       IF l_debug_on THEN
899         WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR',WSH_DEBUG_SV.C_EXCEP_LEVEL);
900         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
901       END IF;
902       --
903     WHEN OTHERS THEN
904       --
905       x_out_rec.is_valid := FALSE;
906       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
907       --
908       WSH_UTIL_CORE.DEFAULT_HANDLER('WSH_PO_INTEGRATION_GRP.validateASNReceiptShipFrom',l_module_name);
909       --
910       IF l_debug_on THEN
911 	WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. '
912 			|| ' Oracle error message is '
913 			|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
914 	WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
915       END IF;
916       --
917 END validateASNReceiptShipFrom;
918 --IB-Phase-2
919 
920 END WSH_PO_INTEGRATION_GRP;