DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_LPN_SYNC_COMM_PKG

Source


1 PACKAGE BODY WSH_LPN_SYNC_COMM_PKG as
2 /* $Header: WSHLSCMB.pls 120.5 2005/11/16 11:15:21 rvishnuv noship $ */
3 
4 
5 
6   --
7   G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_LPN_SYNC_COMM_PKG';
8   --
9   PROCEDURE SYNC_LPNS_TO_WMS
10   (
11     p_in_rec             IN             WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type,
12     x_return_status      OUT NOCOPY     VARCHAR2,
13     x_out_rec            OUT NOCOPY     WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type
14   )
15   IS
16   --{
17       l_return_status VARCHAR2(10);
18       l_msg_count NUMBER;
19       l_msg_data VARCHAR2(32767);
20       l_num_warnings NUMBER :=0;
21       l_num_errors NUMBER :=0;
22 
23       l_current_hw_time_stamp DATE;
24       l_original_call_grp_api VARCHAR2(2);
25       l_original_update_to_cnt VARCHAR2(2);
26 
27       cursor l_unpack_csr (p_hw_time_stamp IN DATE) is
28       select wddc.lpn_id,
29              wddp.lpn_id old_parent_lpn_id
30       from   wsh_delivery_details wddc,
31              wsh_delivery_details wddp,
32              wsh_delivery_assignments_v wda,
33              wsh_wms_sync_tmp wlst
34       where  wlst.delivery_detail_id = wda.delivery_detail_id
35       and    wddc.delivery_detail_id = wda.delivery_detail_id
36       and    wlst.parent_delivery_detail_id = wddp.delivery_detail_id
37       and    nvl(wda.parent_delivery_detail_id, -1) <> nvl(wlst.parent_delivery_detail_id,-1)
38       and    wlst.parent_delivery_detail_id is not null
39       and    wlst.operation_type = 'PRIOR'
40       and    wddc.lpn_id is not null
41       and    wddp.lpn_id is not null
42       and    wlst.creation_date = p_hw_time_stamp
43       order by
44              wlst.parent_delivery_detail_id;
45 
46       l_curr_unpack_parent_lpn_id NUMBER;
47       l_prev_unpack_parent_lpn_id NUMBER;
48       l_unpack_lpn_id_tbl    wsh_util_core.id_tab_type;
49 
50       cursor l_pack_csr (p_hw_time_stamp IN DATE) is
51       select wddc.lpn_id,
52              wddp.lpn_id parent_lpn_id
53       from   wsh_delivery_details wddc,
54              wsh_delivery_details wddp,
55              wsh_delivery_assignments_v wda,
56              wsh_wms_sync_tmp wlst
57       where  wlst.delivery_detail_id = wda.delivery_detail_id
58       and    wddc.delivery_detail_id = wda.delivery_detail_id
59       and    wda.parent_delivery_detail_id = wddp.delivery_detail_id
60       and    nvl(wda.parent_delivery_detail_id, -1) <> nvl(wlst.parent_delivery_detail_id,-1)
61       and    wda.parent_delivery_detail_id is not null
62       and    wddc.lpn_id is not null
63       and    wddp.lpn_id is not null
64       and    wlst.operation_type = 'PRIOR'
65       and    wlst.creation_date = p_hw_time_stamp
66       order by
67              wda.parent_delivery_detail_id;
68 
69       l_curr_pack_parent_lpn_id NUMBER;
70       l_prev_pack_parent_lpn_id NUMBER;
71       l_pack_lpn_id_tbl    wsh_util_core.id_tab_type;
72 
73       cursor l_unassign_csr (p_hw_time_stamp IN DATE) is
74       select wdd.lpn_id,
75              wlst.delivery_id old_delivery_id
76       from   wsh_delivery_details wdd,
77              wsh_delivery_assignments_v wda,
78              wsh_wms_sync_tmp wlst
79       where  wlst.delivery_detail_id = wda.delivery_detail_id
80       and    wdd.delivery_detail_id = wda.delivery_detail_id
81       and    nvl(wda.delivery_id, -1) <> nvl(wlst.delivery_id,-1)
82       and    wlst.delivery_id is not null
83       and    wdd.lpn_id is not null
84       and    wlst.operation_type = 'PRIOR'
85       and    wlst.creation_date = p_hw_time_stamp
86       order by
87              wlst.delivery_id;
88 
89 
90       l_curr_unasgn_del_id NUMBER;
91       l_prev_unasgn_del_id NUMBER;
92       l_unasgn_lpn_id_tbl    wsh_util_core.id_tab_type;
93 
94       cursor l_assign_csr (p_hw_time_stamp IN DATE) is
95       select wdd.lpn_id,
96              wda.delivery_id new_delivery_id
97       from   wsh_delivery_details wdd,
98              wsh_delivery_assignments_v wda,
99              wsh_wms_sync_tmp wlst
100       where  wlst.delivery_detail_id = wda.delivery_detail_id
101       and    wdd.delivery_detail_id = wda.delivery_detail_id
102       and    nvl(wda.delivery_id, -1) <> nvl(wlst.delivery_id,-1)
103       and    wda.delivery_id is not null
104       and    wdd.lpn_id is not null
105       and    wlst.operation_type = 'PRIOR'
106       and    wlst.creation_date = p_hw_time_stamp
107       order by
108              wda.delivery_id;
109 
110       l_curr_asgn_del_id NUMBER;
111       l_prev_asgn_del_id NUMBER;
112       l_asgn_lpn_id_tbl    wsh_util_core.id_tab_type;
113 
114       cursor l_update_csr (p_hw_time_stamp IN DATE) is
115       select wdd.lpn_id,
116              wlst.delivery_detail_id,
117              wdd.container_name,
118              wdd.inventory_item_id,
119              wdd.organization_id,
120              wdd.subinventory,
121              wdd.locator_id,
122              wdd.gross_weight,
123              wdd.volume_uom_code,
124              wdd.filled_volume,
125              wdd.volume,
126              wdd.weight_uom_code,
127              wdd.net_weight
128       from   wsh_delivery_details wdd,
129              wsh_wms_sync_tmp wlst
130       where  wlst.delivery_detail_id = wdd.delivery_detail_id
131       and    wdd.lpn_id is not null
132       and    wlst.operation_type = 'UPDATE'
133       and    wlst.creation_date = p_hw_time_stamp;
134 
135       l_current_parent_detail_id NUMBER;
136       i NUMBER;
137       l_prev_parent_detail_id NUMBER;
138       l_wms_lpn_tbl WMS_DATA_TYPE_DEFINITIONS_PUB.LPNTableType;
139       l_old_date_wm constant date := to_date('01-01-1901 00:00:00', 'DD-MM-YYYY HH24:MI:SS');
140 
141       l_tmp_tbl_size NUMBER;
142   --}
143   --
144   l_debug_on BOOLEAN;
145   --
146   l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SYNC_LPNS_TO_WMS';
147   --
148   BEGIN
149   --{
150       --
151       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
152       --
153       IF l_debug_on IS NULL
154       THEN
155           l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
156       END IF;
157       --
158       --
159       -- Debug Statements
160       --
161       IF l_debug_on THEN
162           WSH_DEBUG_SV.push(l_module_name);
163       END IF;
164       --
165       -- Setting the return status in the begining
166       x_return_status := wsh_util_core.g_ret_sts_success;
167       --
168       IF l_debug_on THEN
169         WSH_DEBUG_SV.log(l_module_name,'wsh_wms_lpn_grp.g_hw_time_stamp', wsh_wms_lpn_grp.g_hw_time_stamp);
170       END IF;
171       --
172       IF ( wsh_wms_lpn_grp.g_hw_time_stamp is null ) THEN
173         wsh_wms_lpn_grp.g_hw_time_stamp := sysdate;
174       END IF;
175       --
176       l_current_hw_time_stamp := wsh_wms_lpn_grp.g_hw_time_stamp;
177       l_original_call_grp_api := wsh_wms_lpn_grp.g_call_group_api;
178 
179       -- This is not required any more as g_hw_time_stamp will always be initialized
180       --IF (l_current_hw_time_stamp IS NULL) THEN
181       --{
182       --    l_current_hw_time_stamp := l_old_date_wm;
183       --}
184       --END IF;
185       -- Logic for 'UNPACK'
186       i := 1;
187       --
188       IF l_debug_on THEN
189         WSH_DEBUG_SV.log(l_module_name,'l_current_hw_time_stamp', l_current_hw_time_stamp);
190       END IF;
191       --
192       IF l_debug_on THEN
193         select count(*)  into l_tmp_tbl_size from wsh_wms_sync_tmp
194         where creation_date = l_current_hw_time_stamp;
195         WSH_DEBUG_SV.log(l_module_name,'Count of wsh_wms_sync_tmp table is', l_tmp_tbl_size);
196       END IF;
197 
198       -- We are doing the following update because, if a particular went through various
199       -- steps of for example, update, assign, unassign, and was finally deleted, then
200       -- we do not want to call WMS for these operations
201       update wsh_wms_sync_tmp
202       set    operation_type = 'DELETE'
203       where  delivery_detail_id in (select delivery_detail_id
204                                     from wsh_wms_sync_tmp
205                                     where operation_type = 'DELETE'
206                                     and creation_date = l_current_hw_time_stamp)
207       and    operation_type = 'UPDATE'
208       and    creation_date = l_current_hw_time_stamp;
209 
210       IF l_debug_on THEN
211         WSH_DEBUG_SV.log(l_module_name,'Count of rows updated is', SQL%ROWCOUNT);
212       END IF;
213 
214       FOR unpack_rec in l_unpack_csr(l_current_hw_time_stamp) LOOP
215       --{
216           --
217           l_curr_unpack_parent_lpn_id := unpack_rec.old_parent_lpn_id;
218 
219           IF (i = 1 OR
220               nvl(l_prev_unpack_parent_lpn_id,-99) = nvl(l_curr_unpack_parent_lpn_id,-99)
221              )
222           THEN
223             --
224             l_unpack_lpn_id_tbl(i) := unpack_rec.lpn_id;
225             --
226           ELSE
227             --
228             IF l_debug_on THEN
229                 WSH_DEBUG_SV.log(l_module_name,'Count of l_unpack_lpn_id_tbl is', l_unpack_lpn_id_tbl.count);
230                 WSH_DEBUG_SV.log(l_module_name,'old parent lpn id is', l_prev_unpack_parent_lpn_id);
231             END IF;
232             -- This infrastructure is built for future so that when
233             -- WMS is interested in getting this information, we
234             -- need to make a call at this point
235             -- need to set the WSH_WMS_LPN_GRP.g_call_group_api := 'N';
236             -- before calling WMS
237             l_unpack_lpn_id_tbl.delete;
238             i := 1;
239             --
240           END IF;
241           l_prev_unpack_parent_lpn_id := l_curr_unpack_parent_lpn_id;
242           i := i + 1;
243           --
244       --}
245       END LOOP;
246       --
247       -- Need to make one extra call to WMS for UNPACK to take care of the last set of lpns
248       -- in the l_unpack_lpn_id_tbl after teh loop
249       --
250       IF l_debug_on THEN
251         WSH_DEBUG_SV.log(l_module_name,'Count of l_unpack_lpn_id_tbl is', l_unpack_lpn_id_tbl.count);
252         WSH_DEBUG_SV.log(l_module_name,'new parent lpn id is', l_prev_unpack_parent_lpn_id);
253       END IF;
254 
255       -- Logic for 'PACK'
256       i := 1;
257 
258       FOR pack_rec in l_pack_csr(l_current_hw_time_stamp) LOOP
259       --{
260           --
261           l_curr_pack_parent_lpn_id := pack_rec.parent_lpn_id;
262 
263           IF (i = 1 OR
264               nvl(l_prev_pack_parent_lpn_id,-99) = nvl(l_curr_pack_parent_lpn_id,-99)
265              )
266           THEN
267             --
268             l_pack_lpn_id_tbl(i) := pack_rec.lpn_id;
269             --
270           ELSE
271             --
272             IF l_debug_on THEN
273                 WSH_DEBUG_SV.log(l_module_name,'Count of l_pack_lpn_id_tbl is', l_pack_lpn_id_tbl.count);
274                 WSH_DEBUG_SV.log(l_module_name,'new parent lpn id is', l_prev_pack_parent_lpn_id);
275             END IF;
276             -- This infrastructure is built for future so that when
277             -- WMS is interested in getting this information, we
278             -- need to make a call at this point
279             -- need to set the WSH_WMS_LPN_GRP.g_call_group_api := 'N';
280             -- before calling WMS
281             l_pack_lpn_id_tbl.delete;
282             i := 1;
283             --
284           END IF;
285           l_prev_pack_parent_lpn_id := l_curr_pack_parent_lpn_id;
286           i := i + 1;
287           --
288       --}
289       END LOOP;
290       --
291       -- Need to make one extra call to WMS for PACK to take care of the last set of lpns
292       -- in the l_pack_lpn_id_tbl after teh loop
293       --
294       IF l_debug_on THEN
295         WSH_DEBUG_SV.log(l_module_name,'Count of l_pack_lpn_id_tbl is', l_pack_lpn_id_tbl.count);
296         WSH_DEBUG_SV.log(l_module_name,'new parent lpn id is', l_prev_pack_parent_lpn_id);
297       END IF;
298 
299       -- Logic for 'UNASSIGN'
300       i := 1;
301       FOR unasgn_rec in l_unassign_csr(l_current_hw_time_stamp) LOOP
302       --{
303           --
304           l_curr_unasgn_del_id := unasgn_rec.old_delivery_id;
305 
306           IF (i = 1 OR
307               nvl(l_prev_unasgn_del_id,-99) = nvl(l_curr_unasgn_del_id,-99)
308              )
309           THEN
310             --
311             l_unasgn_lpn_id_tbl(i) := unasgn_rec.lpn_id;
312             --
313           ELSE
314             --
315             IF l_debug_on THEN
316                 WSH_DEBUG_SV.log(l_module_name,'Count of l_unasgn_lpn_id_tbl is', l_unasgn_lpn_id_tbl.count);
317                 WSH_DEBUG_SV.log(l_module_name,'old delivery id is', l_prev_unasgn_del_id);
318             END IF;
319             -- This infrastructure is built for future so that when
320             -- WMS is interested in getting this information, we
321             -- need to make a call at this point
322             -- need to set the WSH_WMS_LPN_GRP.g_call_group_api := 'N';
323             -- before calling WMS
324             l_unasgn_lpn_id_tbl.delete;
325             i := 1;
326             --
327           END IF;
328           l_prev_unasgn_del_id := l_curr_unasgn_del_id;
329           i := i + 1;
330           --
331       --}
332       END LOOP;
333       --
334       -- Need to make one extra call to WMS for UNASSIGN to take care of the last set of lpns
335       -- in the l_unasgn_lpn_id_tbl after the loop
336       --
337       IF l_debug_on THEN
338         WSH_DEBUG_SV.log(l_module_name,'Count of l_unasgn_lpn_id_tbl is', l_unasgn_lpn_id_tbl.count);
339         WSH_DEBUG_SV.log(l_module_name,'new parent lpn id is', l_prev_unasgn_del_id);
340       END IF;
341 
342       -- Logic for 'UNASSIGN'
343       i := 1;
344 
345       FOR assign_rec in l_assign_csr(l_current_hw_time_stamp) LOOP
346       --{
347           --
348           l_curr_asgn_del_id := assign_rec.new_delivery_id;
349 
350           IF (i = 1 OR
351               nvl(l_prev_asgn_del_id,-99) = nvl(l_curr_asgn_del_id,-99)
352              )
353           THEN
354             --
355             l_asgn_lpn_id_tbl(i) := assign_rec.lpn_id;
356             --
357           ELSE
358             --
359             IF l_debug_on THEN
360                 WSH_DEBUG_SV.log(l_module_name,'Count of l_asgn_lpn_id_tbl is', l_asgn_lpn_id_tbl.count);
361                 WSH_DEBUG_SV.log(l_module_name,'new delivery id is', l_prev_asgn_del_id);
362             END IF;
363             -- This infrastructure is built for future so that when
364             -- WMS is interested in getting this information, we
365             -- need to make a call at this point
366             -- need to set the WSH_WMS_LPN_GRP.g_call_group_api := 'N';
367             -- before calling WMS
368             l_asgn_lpn_id_tbl.delete;
369             i := 1;
370             --
371           END IF;
372           l_prev_asgn_del_id := l_curr_asgn_del_id;
373           i := i + 1;
374           --
375       --}
376       END LOOP;
377       --
378       -- Need to make one extra call to WMS for ASSIGN to take care of the last set of lpns
379       -- in the l_asgn_lpn_id_tbl after the loop
380       --
381       IF l_debug_on THEN
382         WSH_DEBUG_SV.log(l_module_name,'Count of l_asgn_lpn_id_tbl is', l_asgn_lpn_id_tbl.count);
383         WSH_DEBUG_SV.log(l_module_name,'new parent lpn id is', l_prev_asgn_del_id);
384       END IF;
385 
386       i := 1;
387       FOR update_rec in l_update_csr(l_current_hw_time_stamp) LOOP
388       --{
389           IF l_debug_on THEN
390             WSH_DEBUG_SV.log(l_module_name,'Inside the loop i is', i);
391             WSH_DEBUG_SV.log(l_module_name,'Inside the loop delivery_detail_id is', update_rec.delivery_detail_id);
392             WSH_DEBUG_SV.log(l_module_name,'Inside the loop lpn_id is', update_rec.lpn_id);
393           END IF;
394 
395           IF (update_rec.lpn_id IS NOT NULL) THEN
396             l_wms_lpn_tbl(i).LPN_ID                  := update_rec.lpn_id;
397             l_wms_lpn_tbl(i).LICENSE_PLATE_NUMBER    := update_rec.container_name;
398             l_wms_lpn_tbl(i).INVENTORY_ITEM_ID       := update_rec.inventory_item_id;
399             l_wms_lpn_tbl(i).ORGANIZATION_ID         := update_rec.ORGANIZATION_ID;
400             l_wms_lpn_tbl(i).SUBINVENTORY_CODE       := update_rec.SUBINVENTORY;
401             l_wms_lpn_tbl(i).LOCATOR_ID              := update_rec.LOCATOR_ID;
402             l_wms_lpn_tbl(i).GROSS_WEIGHT_UOM_CODE   := update_rec.weight_uom_code;
403             l_wms_lpn_tbl(i).GROSS_WEIGHT            := update_rec.gross_weight;
404             l_wms_lpn_tbl(i).CONTAINER_VOLUME_UOM    := update_rec.volume_uom_code;
405             l_wms_lpn_tbl(i).CONTAINER_VOLUME        := update_rec.volume;
406             l_wms_lpn_tbl(i).CONTENT_VOLUME_UOM_CODE := update_rec.volume_uom_code;
407             l_wms_lpn_tbl(i).CONTENT_VOLUME          := update_rec.filled_volume;
408             l_wms_lpn_tbl(i).TARE_WEIGHT_UOM_CODE    := update_rec.weight_uom_code;
409             l_wms_lpn_tbl(i).TARE_WEIGHT             := (update_rec.gross_weight - update_rec.net_weight);
410             i := i + 1;
411           END IF;
412       --}
413       END LOOP;
414       --
415       IF l_debug_on THEN
416         WSH_DEBUG_SV.log(l_module_name,'count of plsql table l_wms_lpn_tbl is', l_wms_lpn_tbl.count);
417       END IF;
418       --
419       IF ( l_wms_lpn_tbl.count > 0 ) THEN
420       --{
421           -- setting the globals appropriately before calling WMS.
422           WSH_WMS_LPN_GRP.g_call_group_api := 'N';
423 
424           IF l_debug_on THEN
425              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_CONTAINER_GRP.MODIFY_LPNS',WSH_DEBUG_SV.C_PROC_LEVEL);
426           END IF;
427 
428           WMS_Container_GRP.Modify_LPNs (
429             p_api_version   => 1.0,
430             p_init_msg_list => FND_API.G_FALSE,
431             p_commit        => FND_API.G_FALSE,
432             x_return_status => l_return_status,
433             x_msg_count     => l_msg_count,
434             x_msg_data      => l_msg_data,
435             p_caller        => 'WSH_WMS_SYNC_TMP_PKG',
436             p_lpn_table     => l_wms_lpn_tbl
437            );
438            -- resetting the values back to the original values
439            WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
440 
441            IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
442              wsh_wms_lpn_grp.g_update_to_containers := 'N';
443            END IF;
444 
445          --
446          -- Debug Statements
447          --
448          IF l_debug_on THEN
449              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
450          END IF;
451          --
452          wsh_util_core.api_post_call(
453            p_return_status => l_return_status,
454            x_num_warnings  => l_num_warnings,
455            x_num_errors    => l_num_errors,
456            p_msg_data      => l_msg_data
457            );
458 
459       --}
460       END IF;
461 
462       wsh_wms_lpn_grp.g_hw_time_stamp := wsh_wms_lpn_grp.g_hw_time_stamp + 1/86400;
463 
464     IF l_num_errors > 0 THEN
465       RAISE FND_API.G_EXC_ERROR;
466     ELSIF l_num_warnings > 0 THEN
467       x_return_status := wsh_util_core.g_ret_sts_warning;
468     END IF;
469 
470   --}
471   --
472   -- Debug Statements
473   --
474   IF l_debug_on THEN
475       WSH_DEBUG_SV.pop(l_module_name);
476   END IF;
477   --
478   EXCEPTION
479   --{
480     WHEN FND_API.G_EXC_ERROR THEN
481       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
482       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
483       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
484         wsh_wms_lpn_grp.g_update_to_containers := 'N';
485       END IF;
486       --
487       --
488       --
489       -- Debug Statements
490       --
491       IF l_debug_on THEN
492           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
493           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
494       END IF;
495       --
496     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
497       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
498       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
499       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
500         wsh_wms_lpn_grp.g_update_to_containers := 'N';
501       END IF;
502       --
503       --
504       --
505       -- Debug Statements
506       --
507       IF l_debug_on THEN
508           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
509           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
510       END IF;
511       --
512     WHEN OTHERS THEN
513       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
514       wsh_util_core.default_handler('WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_module_name);
515       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
516       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
517         wsh_wms_lpn_grp.g_update_to_containers := 'N';
518       END IF;
519       --
520       -- Debug Statements
521       --
522       IF l_debug_on THEN
523           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
524           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
525       END IF;
526       --
527   --}
528   END SYNC_LPNS_TO_WMS;
529 
530   -- This procedure is used to synchronize the updates on LPNs in WSH
531   -- to WMS due to proration logic
532   PROCEDURE SYNC_PRORATED_LPNS_TO_WMS
533   (
534     p_in_rec             IN             WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type,
535     x_return_status      OUT NOCOPY     VARCHAR2,
536     x_out_rec            OUT NOCOPY     WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type
537   )
538   IS
539   --{
540       --
541       cursor l_pr_update_csr (p_hw_time_stamp IN DATE) is
542       select wdd.lpn_id,
543              wlst.delivery_detail_id,
544              wdd.container_name,
545              wdd.inventory_item_id,
546              wdd.organization_id,
547              wdd.subinventory,
548              wdd.locator_id,
549              wdd.gross_weight,
550              wdd.volume_uom_code,
551              wdd.filled_volume,
552              wdd.volume,
553              wdd.weight_uom_code,
554              wdd.net_weight,
555              wlst.call_level
556       from   wsh_delivery_details wdd,
557              wsh_wms_sync_tmp wlst
558       where  wlst.delivery_detail_id = wdd.delivery_detail_id
559       and    wdd.lpn_id is not null
560       and    wlst.operation_type = 'UPDATE'
561       and    wlst.creation_date = p_hw_time_stamp
562       order  by nvl(wlst.call_level,0) desc;
563 
564       l_current_hw_time_stamp DATE;
565       l_original_call_grp_api VARCHAR2(2);
566       l_call_level NUMBER := 0;
567       l_prev_call_level NUMBER := 0;
568       l_wms_lpn_tbl WMS_DATA_TYPE_DEFINITIONS_PUB.LPNTableType;
569       l_return_status VARCHAR2(10);
570       l_msg_count NUMBER;
571       l_msg_data VARCHAR2(32767);
572       l_num_warnings NUMBER :=0;
573       l_num_errors NUMBER :=0;
574 
575       i NUMBER;
576       l_loopCounter NUMBER;
577       --
578       l_debug_on BOOLEAN;
579       --
580       l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SYNC_PRORATED_LPNS_TO_WMS';
581       --
582   --}
583   BEGIN
584   --{
585       --
586       l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
587       --
588       IF l_debug_on IS NULL
589       THEN
590           l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
591       END IF;
592       --
593       --
594       -- Debug Statements
595       --
596       IF l_debug_on THEN
597           WSH_DEBUG_SV.push(l_module_name);
598       END IF;
599       --
600       -- Setting the return status in the begining
601       x_return_status := wsh_util_core.g_ret_sts_success;
602       --
603       IF ( wsh_wms_lpn_grp.g_hw_time_stamp is null ) THEN
604         wsh_wms_lpn_grp.g_hw_time_stamp := sysdate;
605       END IF;
606 
607       l_current_hw_time_stamp := wsh_wms_lpn_grp.g_hw_time_stamp;
608       l_original_call_grp_api := wsh_wms_lpn_grp.g_call_group_api;
609 
610       IF l_debug_on THEN
611         WSH_DEBUG_SV.log(l_module_name,'wsh_wms_lpn_grp.g_hw_time_stamp', wsh_wms_lpn_grp.g_hw_time_stamp);
612         WSH_DEBUG_SV.log(l_module_name,'l_original_call_grp_api', l_original_call_grp_api);
613       END IF;
614       --
615       i := 1;
616       l_loopCounter := 1;
617       --
618       --
619       FOR update_rec in l_pr_update_csr(l_current_hw_time_stamp) LOOP
620       --{
621           --
622           IF l_debug_on THEN
623             WSH_DEBUG_SV.log(l_module_name,'count of plsql table l_wms_lpn_tbl is', l_wms_lpn_tbl.count);
624             WSH_DEBUG_SV.log(l_module_name,'l_call_level',l_call_level);
625             WSH_DEBUG_SV.log(l_module_name,'l_prev_call_level',l_prev_call_level);
626           END IF;
627           --
628           l_call_level := nvl(update_rec.call_level,0);
629           --
630           IF ( l_wms_lpn_tbl.count > 0
631           AND  l_loopCounter > 1 AND  l_call_level <> l_prev_call_level) THEN
632           --{
633               -- setting the globals appropriately before calling WMS.
634               WSH_WMS_LPN_GRP.g_call_group_api := 'N';
635 
636               IF l_debug_on THEN
637                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_CONTAINER_GRP.MODIFY_LPNS',WSH_DEBUG_SV.C_PROC_LEVEL);
638               END IF;
639 
640               WMS_Container_GRP.Modify_LPNs (
641                 p_api_version   => 1.0,
642                 p_init_msg_list => FND_API.G_FALSE,
643                 p_commit        => FND_API.G_FALSE,
644                 x_return_status => l_return_status,
645                 x_msg_count     => l_msg_count,
646                 x_msg_data      => l_msg_data,
647                 p_caller        => 'WSH_WMS_SYNC_TMP_PKG',
648                 p_lpn_table     => l_wms_lpn_tbl
649                );
650                -- resetting the values back to the original values
651                WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
652 
653                IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
654                  wsh_wms_lpn_grp.g_update_to_containers := 'N';
655                END IF;
656 
657              --
658              -- Debug Statements
659              --
660              IF l_debug_on THEN
661                  WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
662              END IF;
663              --
664              wsh_util_core.api_post_call(
665                p_return_status => l_return_status,
666                x_num_warnings  => l_num_warnings,
667                x_num_errors    => l_num_errors,
668                p_msg_data      => l_msg_data
669                );
670 
671              l_wms_lpn_tbl.delete;
672 
673              i := 1;
674 
675           --}
676           END IF;
677           --
678           IF l_debug_on THEN
679             WSH_DEBUG_SV.log(l_module_name,'Inside the loop i is', i);
680             WSH_DEBUG_SV.log(l_module_name,'Inside the loop delivery_detail_id is', update_rec.delivery_detail_id);
681             WSH_DEBUG_SV.log(l_module_name,'Inside the loop lpn_id is', update_rec.lpn_id);
682           END IF;
683 
684           l_wms_lpn_tbl(i).LPN_ID                  := update_rec.lpn_id;
685           l_wms_lpn_tbl(i).LICENSE_PLATE_NUMBER    := update_rec.container_name;
686           l_wms_lpn_tbl(i).INVENTORY_ITEM_ID       := update_rec.inventory_item_id;
687           l_wms_lpn_tbl(i).ORGANIZATION_ID         := update_rec.ORGANIZATION_ID;
688           l_wms_lpn_tbl(i).SUBINVENTORY_CODE       := update_rec.SUBINVENTORY;
689           l_wms_lpn_tbl(i).LOCATOR_ID              := update_rec.LOCATOR_ID;
690           l_wms_lpn_tbl(i).GROSS_WEIGHT_UOM_CODE   := update_rec.weight_uom_code;
691           l_wms_lpn_tbl(i).GROSS_WEIGHT            := update_rec.gross_weight;
692           l_wms_lpn_tbl(i).CONTAINER_VOLUME_UOM    := update_rec.volume_uom_code;
693           l_wms_lpn_tbl(i).CONTAINER_VOLUME        := update_rec.volume;
694           l_wms_lpn_tbl(i).CONTENT_VOLUME_UOM_CODE := update_rec.volume_uom_code;
695           l_wms_lpn_tbl(i).CONTENT_VOLUME          := update_rec.filled_volume;
696           l_wms_lpn_tbl(i).TARE_WEIGHT_UOM_CODE    := update_rec.weight_uom_code;
697           l_wms_lpn_tbl(i).TARE_WEIGHT             := (update_rec.gross_weight - update_rec.net_weight);
698           i := i + 1;
699           l_loopCounter := l_loopCounter + 1;
700           l_prev_call_level := l_call_level;
701 
702       --}
703       END LOOP;
704       --
705       IF l_debug_on THEN
706         WSH_DEBUG_SV.log(l_module_name,'count of plsql table l_wms_lpn_tbl is', l_wms_lpn_tbl.count);
707       END IF;
708       --
709       IF ( l_wms_lpn_tbl.count > 0 ) THEN
710       --{
711           -- setting the globals appropriately before calling WMS.
712           WSH_WMS_LPN_GRP.g_call_group_api := 'N';
713 
714           IF l_debug_on THEN
715              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_CONTAINER_GRP.MODIFY_LPNS',WSH_DEBUG_SV.C_PROC_LEVEL);
716           END IF;
717 
718           WMS_Container_GRP.Modify_LPNs (
719             p_api_version   => 1.0,
720             p_init_msg_list => FND_API.G_FALSE,
721             p_commit        => FND_API.G_FALSE,
722             x_return_status => l_return_status,
723             x_msg_count     => l_msg_count,
724             x_msg_data      => l_msg_data,
725             p_caller        => 'WSH_WMS_SYNC_TMP_PKG',
726             p_lpn_table     => l_wms_lpn_tbl
727            );
728            -- resetting the values back to the original values
729            WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
730 
731            IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
732              wsh_wms_lpn_grp.g_update_to_containers := 'N';
733            END IF;
734 
735          --
736          -- Debug Statements
737          --
738          IF l_debug_on THEN
739              WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
740          END IF;
741          --
742          wsh_util_core.api_post_call(
743            p_return_status => l_return_status,
744            x_num_warnings  => l_num_warnings,
745            x_num_errors    => l_num_errors,
746            p_msg_data      => l_msg_data
747            );
748       --}
749       END IF;
750 
751 
752       wsh_wms_lpn_grp.g_hw_time_stamp := wsh_wms_lpn_grp.g_hw_time_stamp + 1/86400;
753 
754     IF l_num_errors > 0 THEN
755       RAISE FND_API.G_EXC_ERROR;
756     ELSIF l_num_warnings > 0 THEN
757       x_return_status := wsh_util_core.g_ret_sts_warning;
758     END IF;
759 
760   --}
761   --
762   -- Debug Statements
763   --
764   IF l_debug_on THEN
765       WSH_DEBUG_SV.pop(l_module_name);
766   END IF;
767   --
768   EXCEPTION
769   --{
770     WHEN FND_API.G_EXC_ERROR THEN
771       x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
772       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
773       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
774         wsh_wms_lpn_grp.g_update_to_containers := 'N';
775       END IF;
776       --
777       --
778       --
779       -- Debug Statements
780       --
781       IF l_debug_on THEN
782           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
783           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
784       END IF;
785       --
786     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
787       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
788       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
789       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
790         wsh_wms_lpn_grp.g_update_to_containers := 'N';
791       END IF;
792       --
793       --
794       --
795       -- Debug Statements
796       --
797       IF l_debug_on THEN
798           WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
799           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
800       END IF;
801       --
802     WHEN OTHERS THEN
803       x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
804       wsh_util_core.default_handler('WSH_LPN_SYNC_COMM_PKG.SYNC_PRORATED_LPNS_TO_WMS',l_module_name);
805       WSH_WMS_LPN_GRP.g_call_group_api := l_original_call_grp_api;
806       IF (nvl(wsh_wms_lpn_grp.g_update_to_containers,'N') = 'Y') THEN
807         wsh_wms_lpn_grp.g_update_to_containers := 'N';
808       END IF;
809       --
810       -- Debug Statements
811       --
812       IF l_debug_on THEN
813           WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
814           WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
815       END IF;
816       --
817   --}
818   END SYNC_PRORATED_LPNS_TO_WMS;
819 
820 
821 
822 
823 END WSH_LPN_SYNC_COMM_PKG;