[Home] [Help]
PACKAGE BODY: APPS.WMS_SHIPPING_INTERFACE_GRP
Source
1 PACKAGE BODY WMS_SHIPPING_INTERFACE_GRP AS
2 /* $Header: WMSGINTB.pls 120.9.12020000.2 2012/09/20 15:55:59 abasheer ship $ */
3
4 g_pkg_name CONSTANT VARCHAR2(30) := 'WMS_SHIPPING_INTERFACE_GRP';
5 g_pkg_version CONSTANT VARCHAR2(100) := '$Header: WMSGINTB.pls 120.9.12020000.2 2012/09/20 15:55:59 abasheer ship $';
6 g_debug_on CONSTANT NUMBER := NVL(FND_PROFILE.VALUE('INV_DEBUG_TRACE'),0);
7 g_ret_status_success CONSTANT VARCHAR2(1) := fnd_api.g_ret_sts_success;
8 g_ret_status_error CONSTANT VARCHAR2(1) := fnd_api.g_ret_sts_error;
9 g_ret_status_unexp_error CONSTANT VARCHAR2(1) := fnd_api.g_ret_sts_unexp_error;
10
11 G_WMS_RELEASE_LEVEL CONSTANT NUMBER := WMS_CONTROL.GET_CURRENT_RELEASE_LEVEL;
12 G_J_RELEASE_LEVEL CONSTANT NUMBER := INV_RELEASE.G_J_RELEASE_LEVEL;
13
14 g_exc_unexpected_error EXCEPTION ;
15
16
17
18 PROCEDURE print_debug(p_message in VARCHAR2) IS
19 BEGIN
20 -- dbms_output.put_line(p_message);
21 IF g_debug_on = 1 then
22 inv_log_util.trace(p_message, g_pkg_name,9);
23 END IF;
24 EXCEPTION
25 WHEN OTHERS THEN
26 print_debug('Proc: print_debug .. UNEXPECTED Exception : '|| sqlerrm );
27 END;
28
29
30 FUNCTION get_lpn_context
31 (p_lpn_id IN NUMBER,
32 x_outermost_lpn_id OUT NOCOPY NUMBER,
33 x_license_plate_number OUT NOCOPY VARCHAR2,
34 x_return_status OUT NOCOPY VARCHAR2)
35 RETURN NUMBER
36 IS
37 l_procname CONSTANT VARCHAR2(100) := 'get_lpn_context- ';
38 l_lpn_context NUMBER := NULL;
39 l_outermost_lpn_id NUMBER := NULL;
40 l_license_plate_number VARCHAR2(30);
41 BEGIN
42
43 IF g_debug_on = 1 THEN
44 print_debug (l_procname || 'p_lpn_id: ' || p_lpn_id );
45 END IF;
46
47 SELECT lpn_context ,
48 outermost_lpn_id,
49 license_plate_number
50 INTO l_lpn_context ,
51 x_outermost_lpn_id,
52 x_license_plate_number
53 FROM wms_license_plate_numbers
54 WHERE lpn_id = p_lpn_id;
55
56 x_return_status := g_ret_status_success;
57
58 IF g_debug_on = 1 THEN
59 print_debug (l_procname || 'x_lpn_context:' || l_lpn_context ||': OuterMostLPN:' || x_outermost_lpn_id || ': LPN:' || x_license_plate_number);
60 END IF;
61 RETURN l_lpn_context;
62
63 EXCEPTION
64 WHEN OTHERS THEN
65 x_return_status := g_ret_status_unexp_error ;
66 IF g_debug_on = 1 THEN
67 print_debug(l_procname || 'Exception OTHERS : ' ||sqlerrm );
68 END IF;
69 RETURN NULL;
70
71 END get_lpn_context;
72
73
74 PROCEDURE proc_action_unassign_delivery
75 (p_delivery_detail_tbl IN OUT NOCOPY wms_shipping_interface_grp.g_delivery_detail_tbl,
76 x_return_status OUT NOCOPY VARCHAR2)
77 IS
78 l_procname CONSTANT VARCHAR2(100) := 'proc_action_unassign_delivery- ';
79 l_lpn_context NUMBER := NULL;
80 l_outermost_lpn_id NUMBER := NULL;
81 l_license_plate_number VARCHAR2(30);
82 BEGIN
83 FOR i IN 1..p_delivery_detail_tbl.COUNT
84 LOOP
85 l_lpn_context := NULL;
86 l_lpn_context := get_lpn_context (p_lpn_id => p_delivery_detail_tbl(i).lpn_id ,
87 x_outermost_lpn_id => l_outermost_lpn_id,
88 x_license_plate_number => l_license_plate_number,
89 x_return_status => x_return_status);
90 IF x_return_status <> g_ret_status_success THEN
91 p_delivery_detail_tbl(i).return_status := 'E';
92 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
93 p_delivery_detail_tbl(i).r_message_code := 'WMS_ERROR_LPN_CONTEXT' ;
94 p_delivery_detail_tbl(i).r_message_token := l_license_plate_number ;
95 p_delivery_detail_tbl(i).r_message_type := 'E';
96 p_delivery_detail_tbl(i).r_message_text := '';
97 -- Error selecting LPN Context
98 ELSE
99 IF l_lpn_context = 9 THEN
100 p_delivery_detail_tbl(i).return_status := 'E';
101 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
102 p_delivery_detail_tbl(i).r_message_code := 'WMS_LPN_LOADED_TO_DOCK' ;
103 p_delivery_detail_tbl(i).r_message_token := l_license_plate_number ;
104 p_delivery_detail_tbl(i).r_message_type := 'E';
105 p_delivery_detail_tbl(i).r_message_text := '';
106 -- Already loaded to Dock.. Cannot unassign delivery;
107 ELSIF (l_lpn_context = 11) AND (l_outermost_lpn_id <> p_delivery_detail_tbl(i).lpn_id ) THEN
108 p_delivery_detail_tbl(i).return_status := 'E';
109 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
110 p_delivery_detail_tbl(i).r_message_code := 'WMS_STAGED_LPN_IS_NESTED' ;
111 p_delivery_detail_tbl(i).r_message_token := l_license_plate_number ;
112 p_delivery_detail_tbl(i).r_message_type := 'E';
113 p_delivery_detail_tbl(i).r_message_text := '';
114 ELSE
115 p_delivery_detail_tbl(i).return_status := 'S';
116 END IF;
117 END IF;
118 IF g_debug_on = 1 THEN
119 print_debug (l_procname || 'Table Index: ' || i );
120 print_debug (l_procname || 'p_lpn_id: ' || p_delivery_detail_tbl(i).lpn_id );
121 print_debug (l_procname || 'return_status:' || p_delivery_detail_tbl(i).return_status);
122 print_debug (l_procname || 'return_message_text:' || p_delivery_detail_tbl(i).r_message_text);
123 END IF;
124 END LOOP;
125 EXCEPTION
126 WHEN OTHERS THEN
127 x_return_status := g_ret_status_unexp_error ;
128 IF g_debug_on = 1 THEN
129 print_debug(l_procname || 'Exception OTHERS : ' ||sqlerrm );
130 END IF;
131
132 END proc_action_unassign_delivery;
133
134 PROCEDURE Proc_unassign_released_lines
135 (p_delivery_detail_tbl IN OUT NOCOPY wms_shipping_interface_grp.g_delivery_detail_tbl,
136 x_return_status OUT NOCOPY VARCHAR2)
137 IS
138 l_procname CONSTANT VARCHAR2(100) := 'Proc_unassign_for_released_lines- ';
139
140 l_exists NUMBER:=0;
141 l_cd_exists NUMBER:=0;
142
143 BEGIN
144 x_return_status := g_ret_status_success;
145
146 IF g_debug_on = 1 THEN print_debug('starting to copy the PL/SQL records to the temp table'); end if;
147 delete wms_wsh_wdd_gtemp;
148
149 FOR i IN 1..p_delivery_detail_tbl.COUNT
150 LOOP
151 if p_delivery_detail_tbl(i).move_order_line_id is null then
152 IF g_debug_on = 1 THEN
153 print_debug (l_procname || 'move order line id is not passed from shipping for delivery detail id '
154 ||p_delivery_detail_tbl(i).delivery_detail_id);
155 END IF;
156 RAISE g_exc_unexpected_error;
157 END IF;
158 insert into wms_wsh_wdd_gtemp
159 (delivery_detail_id,move_order_line_id)
163 END LOOP;
160 values
161 ( p_delivery_detail_tbl(i).delivery_detail_id,p_delivery_detail_tbl(i).move_order_line_id);
162
164
165 -- Adding the following check for Planned Crossdocking project in R12. Maneesh
166 IF (g_debug_on =1 ) THEN
167 print_debug('Checking to see if there is a crossdock task');
168 END IF;
169
170 BEGIN
171 SELECT 1
172 INTO l_cd_exists
173 FROM dual
174 WHERE exists (
175 SELECT mtrl.line_id
176 FROM mtl_txn_request_lines mtrl
177 , mtl_material_transactions_temp mmtt
178 , wms_wsh_wdd_gtemp wwwg
179 , mtl_txn_request_headers mtrh
180 WHERE mmtt.move_order_line_id =
181 wwwg.move_order_line_id
182 AND mtrl.line_id = mmtt.move_order_line_id
183 AND mtrl.header_id = mtrh.header_id
184 AND mtrh.move_order_type = 6
185 AND mtrl.backorder_delivery_detail_id IS NOT NULL
186 AND mtrl.line_status = 7);
187
188 x_return_status := 'E';
189 EXCEPTION
190 WHEN OTHERS THEN
191 print_debug('No Crossdock Tasks!');
192 END;
193
194 IF g_debug_on = 1 THEN
195 print_debug('Return Status after Crossdock Check:'||x_return_status);
196 END IF;
197
198 IF x_return_status = g_ret_status_success THEN
199
200 IF g_debug_on = 1 THEN
201 print_debug('starting query');
202 print_debug('checking the transfer lpn first');
203 END IF;
204
205 BEGIN
206 select 1
207 into l_exists
208 from dual
209 where exists(
210 select move_order_line_id
211 from mtl_material_transactions_temp mmtt
212 where -- first case, line is loaded into same lpn or has the same carton
213 mmtt.transfer_lpn_id is not null and -- the line is loaded
214 mmtt.transfer_lpn_id in -- loaded into a LPN which is included in the inputted lines
215 (Select nvl(transfer_lpn_id,cartonization_id)
216 From mtl_material_transactions_temp mmtt1,WMS_WSH_WDD_GTEMP wwwg
217 Where mmtt1.move_order_line_id = wwwg.move_order_line_id
218 and nvl(mmtt1.transfer_lpn_id,mmtt1.cartonization_id) is not null)
219 and not exists( select 1
220 from WMS_WSH_WDD_GTEMP www
221 where www.move_order_line_id = mmtt.move_order_line_id)
222 and mmtt.parent_line_id is null -- excluding the bulk tasks
223 and mmtt.move_order_line_id is not null
224 );
225
226 IF g_debug_on = 1 THEN
227 print_debug('complete querying on transfer lpn');
228 print_debug (l_procname || 'Packing violations exist on transfer lpn!');
229 END IF;
230
231 x_return_status := 'E';
232 EXCEPTION
233 WHEN NO_DATA_FOUND THEN
234 IF g_debug_on = 1 THEN
235 print_debug(l_procname || 'No packing violation for transfer lpns');
236 print_debug(l_procname || 'Checking the cartonization id...');
237 END IF;
238 BEGIN
239 select 1
240 into l_exists
241 from dual
242 where exists(
243 select move_order_line_id
244 from mtl_material_transactions_temp mmtt
245 where mmtt.transfer_lpn_id is null
246 and mmtt.cartonization_id in
247 (Select nvl(transfer_lpn_id,cartonization_id)
248 From mtl_material_transactions_temp mmtt1,WMS_WSH_WDD_GTEMP wwwg
249 Where mmtt1.move_order_line_id = wwwg.move_order_line_id
250 and nvl(mmtt1.transfer_lpn_id,mmtt1.cartonization_id) is not null)
251 and not exists( select 1
252 from WMS_WSH_WDD_GTEMP www
253 where www.move_order_line_id = mmtt.move_order_line_id)
254 and mmtt.parent_line_id is null -- excluding the bulk tasks
255 and mmtt.move_order_line_id is not null
256 );
257
258 IF g_debug_on = 1 THEN
259 print_debug('complete querying on cartonization_id');
260 print_debug (l_procname || 'Packing violations exist on cartonization id!');
261 END IF;
262
263 x_return_status := 'E';
264 EXCEPTION
265 WHEN NO_DATA_FOUND THEN
266 IF g_debug_on = 1 THEN
267 print_debug(l_procname || 'No packing violation');
268 END IF;
269 WHEN OTHERS THEN
270 x_return_status := g_ret_status_unexp_error ;
271 IF g_debug_on = 1 THEN
272 print_debug(l_procname || 'Exception OTHERS : ' ||sqlerrm );
273 END IF;
274 END;
275 WHEN OTHERS THEN
276 x_return_status := g_ret_status_unexp_error ;
277 IF g_debug_on = 1 THEN
278 print_debug(l_procname || 'Exception OTHERS : ' ||sqlerrm );
279 END IF;
280 END;
281 END IF; --IF x_return_status = g_ret_status_success THEN
282 END Proc_unassign_released_lines;
283
284 PROCEDURE process_delivery_details (
285 p_api_version IN NUMBER,
286 p_init_msg_list IN VARCHAR2 := wms_shipping_interface_grp.g_false,
287 p_commit IN VARCHAR2 := wms_shipping_interface_grp.g_false,
288 p_validation_level IN NUMBER := wms_shipping_interface_grp.g_full_validation,
289 p_action IN VARCHAR2,
290 p_delivery_detail_tbl IN OUT NOCOPY wms_shipping_interface_grp.g_delivery_detail_tbl,
291 x_return_status OUT NOCOPY VARCHAR2,
292 x_msg_count OUT NOCOPY NUMBER,
293 x_msg_data OUT NOCOPY VARCHAR2)
294 IS
295 l_procname CONSTANT VARCHAR2(100) := 'process_delivery_details- ';
296 l_api_version CONSTANT NUMBER := 1.0;
297 l_progress VARCHAR2(10) := '0';
298
299 l_shipping_attr WSH_INTERFACE_EXT_GRP.delivery_details_Attr_tbl_Type;
300 l_shipping_in_rec WSH_INTERFACE_EXT_GRP.detailInRecType;
301 l_shipping_out_rec WSH_INTERFACE_EXT_GRP.detailOutRecType;
302 l_attr_counter NUMBER := 1;
303
304 x_msg_details VARCHAR2(3000);
305 l_pricing_ind VARCHAR2(30);
306 l_tolerance NUMBER;
307 l_source_type_id NUMBER;
308 BEGIN
309 IF NOT FND_API.compatible_api_call(l_api_version,
310 p_api_version,
311 l_procname,
312 G_PKG_NAME) THEN
313 RAISE g_exc_unexpected_error;
314 END IF;
315
316
317 IF fnd_api.to_boolean(p_init_msg_list) THEN
318 fnd_msg_pub.initialize;
319 END IF;
320
321 x_return_status := fnd_api.g_ret_sts_success;
322
323 print_debug(l_procname || ' Entered ' || g_pkg_version);
324 print_debug('action='||p_action||' deltblcnt='||p_delivery_detail_tbl.COUNT|| ' relvl='||G_WMS_RELEASE_LEVEL);
325
326 IF p_action = wms_shipping_interface_grp.g_action_unassign_delivery
327 THEN
328 IF p_delivery_detail_tbl(1).released_Status = 'X' and p_delivery_detail_tbl(1).container_flag = 'Y' THEN -- for staged LPNs
329 IF g_debug_on = 1 THEN
330 print_debug (l_procname || 'calling API to handle the staged LPN.');
331 END IF;
332 Proc_action_unassign_delivery
333 (p_delivery_detail_tbl => p_delivery_detail_tbl,
334 x_return_status => x_return_status);
335 IF x_return_status <> g_ret_status_success THEN
336 RAISE g_exc_unexpected_error;
337 END IF;
338 ELSIF p_delivery_detail_tbl(1).released_status = 'S' THEN
339 IF g_debug_on = 1 THEN
340 print_debug (l_procname || 'calling API to handle the released lines.');
341 END IF;
342 Proc_unassign_released_lines
343 (p_delivery_detail_tbl => p_delivery_detail_tbl,
344 x_return_status => x_return_status);
345 IF g_debug_on = 1 THEN
346 print_debug (l_procname || 'proc_unassign_released_lines returns:'||x_return_status);
347 END IF;
348 IF x_return_status <> g_ret_status_success THEN
349 p_delivery_detail_tbl(1).return_status := 'E';
350 p_delivery_detail_tbl(1).r_message_appl := 'WMS';
351 p_delivery_detail_tbl(1).r_message_code := 'WMS_PACKING_VIOLATION';
352 p_delivery_detail_tbl(1).r_message_type := 'E';
353 p_delivery_detail_tbl(1).r_message_text := '';
354
355 fnd_message.set_name('WMS', 'WMS_PACKING_VIOLATION');
356 fnd_msg_pub.add;
357 END IF;
358 ELSE
359 IF g_debug_on = 1 THEN
360 print_debug (l_procname || 'released_status is not correct:'||p_delivery_detail_tbl(1).released_status);
361 END IF;
362 RAISE g_exc_unexpected_error;
363 END IF;
364 ELSIF ( p_action = WMS_SHIPPING_INTERFACE_GRP.G_ACTION_VALIDATE_SEC_QTY AND
365 G_WMS_RELEASE_LEVEL >= G_J_RELEASE_LEVEL ) THEN
366 l_progress := '000';
367 FOR i IN 1..p_delivery_detail_tbl.COUNT LOOP
368 -- Only check for catch weights if Delivery Detail is for a Sales Order
369 IF ( p_delivery_detail_tbl(i).line_direction = 'O' ) THEN
370 IF ( p_delivery_detail_tbl(i).picked_quantity2 IS NOT NULL AND
371 p_delivery_detail_tbl(i).requested_quantity_uom2 IS NOT NULL ) THEN
372
373 l_tolerance := WMS_CATCH_WEIGHT_PVT.Check_Secondary_Qty_Tolerance (
374 p_api_version => 1.0
375 , x_return_status => x_return_status
376 , x_msg_count => x_msg_count
377 , x_msg_data => x_msg_data
378 , p_organization_id => p_delivery_detail_tbl(i).organization_id
379 , p_inventory_item_id => p_delivery_detail_tbl(i).inventory_item_id
380 , p_quantity => p_delivery_detail_tbl(i).picked_quantity
381 , p_uom_code => p_delivery_detail_tbl(i).requested_quantity_uom
382 , p_secondary_quantity => p_delivery_detail_tbl(i).picked_quantity2 );
383
384 IF ( x_return_status <> fnd_api.g_ret_sts_success ) THEN
385 print_debug('Check_Secondary_Qty_Tolerance failed');
386
387 fnd_message.set_name('WMS','WMS_CATCH_WT_API_ERR' );
388 fnd_msg_pub.add;
389 raise fnd_api.g_exc_unexpected_error;
390 END IF;
391
392 IF ( l_tolerance <> 0 ) THEN
393 p_delivery_detail_tbl(i).return_status := 'E';
394 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
395 p_delivery_detail_tbl(i).r_message_code := 'WMS_CTWT_TOLERANCE_ERROR';
396 p_delivery_detail_tbl(i).r_message_type := 'E';
397 p_delivery_detail_tbl(i).r_message_text := '';
398 END IF;
399 ELSE -- need to try and defualt secondary quantities.
400 l_pricing_ind := NULL;
401
402 WMS_CATCH_WEIGHT_PVT.Get_Default_Secondary_Quantity (
403 p_api_version => 1.0
404 , x_return_status => x_return_status
405 , x_msg_count => x_msg_count
406 , x_msg_data => x_msg_data
407 , p_organization_id => p_delivery_detail_tbl(i).organization_id
408 , p_inventory_item_id => p_delivery_detail_tbl(i).inventory_item_id
409 , p_quantity => p_delivery_detail_tbl(i).picked_quantity
410 , p_uom_code => p_delivery_detail_tbl(i).requested_quantity_uom
411 , x_ont_pricing_qty_source => l_pricing_ind
412 , x_secondary_uom_code => p_delivery_detail_tbl(i).requested_quantity_uom2
413 , x_secondary_quantity => p_delivery_detail_tbl(i).picked_quantity2 );
414
415 IF ( x_return_status <> fnd_api.g_ret_sts_success ) THEN
416 print_debug('Get_Default_Secondary_Quantity failed priceind='||l_pricing_ind||' msg='|| x_msg_data||' cnt='||x_msg_count);
417
418 IF ( l_pricing_ind = WMS_CATCH_WEIGHT_PVT.G_PRICE_SECONDARY ) THEN
419 p_delivery_detail_tbl(i).return_status := 'E';
420 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
421 p_delivery_detail_tbl(i).r_message_type := 'E';
422 p_delivery_detail_tbl(i).r_message_text := '';
423
424 IF ( x_msg_count <= 1 ) THEN
425 p_delivery_detail_tbl(i).r_message_code := x_msg_data;
426 ELSE
427 p_delivery_detail_tbl(i).r_message_code := fnd_msg_pub.get(1,'F');
428 END IF;
429 -- do not need to fail batch reset to success
430 x_return_status := fnd_api.g_ret_sts_success;
431 ELSE -- General failure fail batch
432 fnd_message.set_name('WMS','WMS_CATCH_WT_API_ERR');
433 fnd_msg_pub.add;
434 raise fnd_api.g_exc_unexpected_error;
435 END IF;
436 ELSIF ( l_pricing_ind = WMS_CATCH_WEIGHT_PVT.G_PRICE_SECONDARY ) THEN
437 IF ( p_delivery_detail_tbl(i).picked_quantity2 IS NULL OR
438 p_delivery_detail_tbl(i).requested_quantity_uom2 IS NULL ) THEN
439 -- Item is catch weight enabled, but could not default
440 p_delivery_detail_tbl(i).return_status := 'E';
441 p_delivery_detail_tbl(i).r_message_appl := 'WMS';
442 p_delivery_detail_tbl(i).r_message_code := 'WMS_CTWT_DEFAULT_ERROR';
443 p_delivery_detail_tbl(i).r_message_type := 'E';
444 p_delivery_detail_tbl(i).r_message_text := '';
445 ELSE
446 -- Got defaults, call shipping api to update picked_quantity2 with weights
447 -- If everything checks out, update wdd.picked_quantity2 with catch weight.
448 l_shipping_attr(l_attr_counter).delivery_detail_id := p_delivery_detail_tbl(i).delivery_detail_id;
449 l_shipping_attr(l_attr_counter).picked_quantity2 := p_delivery_detail_tbl(i).picked_quantity2;
450 l_shipping_attr(l_attr_counter).requested_quantity_uom2 := p_delivery_detail_tbl(i).requested_quantity_uom2;
451 l_attr_counter := l_attr_counter + 1;
452 END IF;
453 END IF;
454 END IF;
455 END IF;
456 END LOOP;
457
458 l_progress := '700';
459 IF ( l_shipping_attr.COUNT > 0 ) THEN
460 l_shipping_in_rec.caller := 'WMS';
461 l_shipping_in_rec.action_code := 'UPDATE';
462
463 print_debug('Calling Create_Update_Delivery_Detail deldet count='||l_shipping_attr.COUNT );
464
465 WSH_INTERFACE_EXT_GRP.Create_Update_Delivery_Detail (
466 p_api_version_number => 1.0
467 , p_init_msg_list => fnd_api.g_false
468 , p_commit => fnd_api.g_false
469 , x_return_status => x_return_status
470 , x_msg_count => x_msg_count
471 , x_msg_data => x_msg_data
472 , p_detail_info_tab => l_shipping_attr
473 , p_IN_rec => l_shipping_in_rec
474 , x_OUT_rec => l_shipping_out_rec );
475
476 IF ( x_return_status <> fnd_api.g_ret_sts_success ) THEN
477 wsh_util_core.get_messages('Y', x_msg_data, x_msg_details, x_msg_count);
478
479 if x_msg_count > 1 then
480 x_msg_data := x_msg_data || x_msg_details;
481 else
482 x_msg_data := x_msg_data;
483 end if;
484
485 print_debug('Error calling Create_Update_Delivery_Detail');
486 print_debug('Error Msg: ' || x_msg_data);
487 FND_MESSAGE.SET_NAME('WMS','WMS_UPD_DELIVERY_ERROR' );
488 FND_MESSAGE.SET_TOKEN('MSG1', x_msg_data);
489 FND_MSG_PUB.ADD;
490 raise fnd_api.g_exc_unexpected_error;
491 END IF;
492 END IF;
493 END IF;
494
495 fnd_msg_pub.count_and_get
496 ( p_encoded => wms_shipping_interface_grp.g_false,
497 p_count => x_msg_count,
498 p_data => x_msg_data
499 );
500
501 IF (g_debug_on = 1) THEN
502 print_debug ('get message stack, count='||x_msg_count);
503 END IF;
504 IF x_msg_count = 0 THEN
505 x_msg_data := '';
506 ELSIF x_msg_count =1 THEN
507 null;
508 ELSE
509 x_msg_data := fnd_msg_pub.get(x_msg_count,wms_shipping_interface_grp.g_false);
510 END IF;
511
512
513 EXCEPTION
514 WHEN OTHERS THEN
515 x_return_status := g_ret_status_unexp_error;
516 fnd_message.set_name('WMS', 'ERR_PROC_UNASSIGN_DEL');
517 fnd_msg_pub.add;
518
519 fnd_msg_pub.count_and_get
520 ( p_encoded => wms_shipping_interface_grp.g_false,
521 p_count => x_msg_count,
522 p_data => x_msg_data
523 );
524
525 IF g_debug_on = 1 THEN
526 print_debug(l_procname||' progress= '||l_progress||' Exception OTHERS : '||sqlerrm );
527 END IF;
528
529 END process_delivery_details;
530
531
532 --This procedure is called by Shipping whenever there is
533 --trip-delivery assignment or unassignment. Places where this procedure can be invoked:
534 --1. Shipping's ship confirm API
535 --2. Direct Ship (Right before calling Shipping's ship confirm API)
536 --3. Desktop
537 --This procedure should only return error in case 3.
538 PROCEDURE process_delivery_trip
539 (p_api_version IN NUMBER
540 ,p_init_msg_list IN VARCHAR2 := wms_shipping_interface_grp.g_false
541 ,p_commit IN VARCHAR2 := wms_shipping_interface_grp.g_false
542 ,p_validation_level IN NUMBER := wms_shipping_interface_grp.g_full_validation
543 ,p_action IN VARCHAR2
544 ,p_dlvy_trip_tbl IN OUT nocopy wms_shipping_interface_grp.g_dlvy_trip_tbl
545 ,x_return_status OUT nocopy VARCHAR2
546 ,x_msg_count OUT nocopy NUMBER
547 ,x_msg_data OUT nocopy VARCHAR2) IS
548
549 l_api_version CONSTANT NUMBER := 1.0;
550 l_procname CONSTANT VARCHAR2(100) := 'process_delivery_trip - ';
551 l_trip_id NUMBER;
552 BEGIN
553 x_return_status := g_ret_status_success;
554 x_msg_count := 0;
555 x_msg_data := '';
556
557 --Trip-delivery association happening in case 2 mentioned above
558 --Thus, do nothing
559 IF wms_globals.g_ship_confirm_method = 'DIRECT' THEN
560 RETURN;
561 END IF;
562
563 IF NOT fnd_api.compatible_api_call(l_api_version
564 ,p_api_version
565 ,l_procname
566 ,g_pkg_name) THEN
567 IF g_debug_on = 1 THEN
568 print_debug (l_procname || 'Incompatible API call' );
569 END IF;
570 RAISE g_exc_unexpected_error;
571 END IF;
572
573 IF p_action NOT IN (wms_shipping_interface_grp.g_action_assign_dlvy_trip,
574 wms_shipping_interface_grp.g_action_unassign_dlvy_trip) THEN
575 IF g_debug_on = 1 THEN
576 print_debug(l_procname || 'Invalid action passed in');
577 END IF;
578 RAISE g_exc_unexpected_error;
579 END IF;
580
581 IF fnd_api.to_boolean(p_init_msg_list) THEN
582 fnd_msg_pub.initialize;
583 END IF;
584
585 IF g_debug_on = 1 THEN
586 print_debug(l_procname || 'start to process_delivery_trip');
587 print_debug(l_procname || 'Num records passed in: ' || p_dlvy_trip_tbl.COUNT);
588 END IF;
589
590 --no org_id because delivery_id is the primary key
591 FOR i IN 1..p_dlvy_trip_tbl.COUNT LOOP
592 IF g_debug_on = 1 THEN
593 print_debug(l_procname || 'At record: ' || i);
594 print_debug(l_procname || 'delivery id: '|| p_dlvy_trip_tbl(i).delivery_id);
595 print_debug(l_procname || 'trip id: ' || p_dlvy_trip_tbl(i).trip_id);
596 END IF;
597
598 IF p_dlvy_trip_tbl(i).delivery_id IS NOT NULL
599 AND p_dlvy_trip_tbl(i).trip_id IS NOT NULL THEN
600
601 BEGIN
602
603 --Shipping ship confirm API calls our
604 --WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID before reaching this API.
605 --Therefore, entries will have been deleted from the temp table, and this
606 --procedure will not fail.
607 -- MRANA : 4576909: The above is not true anymore.. we are now going to
608 -- update WSTT with the new Trip id or null depending on the action code.
609 SELECT DISTINCT trip_id
610 INTO l_trip_id
611 FROM wms_shipping_transaction_temp
612 WHERE delivery_id = p_dlvy_trip_tbl(i).delivery_id;
613
614 IF g_debug_on = 1 THEN
615 print_debug(l_procname || ': wstt.l_trip_id: '|| l_trip_id);
616 END IF;
617 --get to here means the delivery is loaded to dock
618 IF p_action = wms_shipping_interface_grp.g_action_assign_dlvy_trip THEN
619 IF l_trip_id = p_dlvy_trip_tbl(i).trip_id THEN
620 IF g_debug_on = 1 THEN
621 print_debug(l_procname || ': wstt.l_trip_id: is same as the trip passed in ');
622 END IF;
623 --assigning to same trip again
624 p_dlvy_trip_tbl(i).return_status := 'S';
625 ELSE
626 /* NCR Bug : 4576909 : Instead of returning error, update WSTT
627 * p_dlvy_trip_tbl(i).return_status := 'E';
628 p_dlvy_trip_tbl(i).r_message_appl := 'WMS';
629 p_dlvy_trip_tbl(i).r_message_code := 'WMS_DLVY_LOADED_TO_DOCK';
630 p_dlvy_trip_tbl(i).r_message_token := p_dlvy_trip_tbl(i).delivery_id;
631 p_dlvy_trip_tbl(i).r_message_token_name := 'DELIVERY_ID';
632 p_dlvy_trip_tbl(i).r_message_type := 'E';
633
634 FND_MESSAGE.SET_NAME('WMS','WMS_DLVY_LOADED_TO_DOCK' );
635 FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_dlvy_trip_tbl(i).delivery_id);
636
637 p_dlvy_trip_tbl(i).r_message_text := fnd_message.get; */
638
639 BEGIN
640 UPDATE wms_shipping_transaction_temp
641 SET trip_id = p_dlvy_trip_tbl(i).trip_id
642 WHERE delivery_id = p_dlvy_trip_tbl(i).delivery_id;
643 IF g_debug_on = 1 THEN
644 print_debug(l_procname || ': wstt.l_trip_id: updated ' );
645 END IF;
646 p_dlvy_trip_tbl(i).return_status := 'S';
647 EXCEPTION
648 WHEN OTHERS THEN
649 x_return_status := g_ret_status_unexp_error;
650 IF g_debug_on = 1 THEN
651 print_debug(l_procname || ': wstt could not be updated: ' || SQLCODE ||':' || SQLERRM);
652 END IF;
653 END ;
654 END IF;
655 ELSIF p_action = wms_shipping_interface_grp.g_action_unassign_dlvy_trip THEN
656 --need a different error message?
657 /* NCR Bug : 4576909 : Instead of returning error, update WSTT
658 p_dlvy_trip_tbl(i).return_status := 'E';
659 p_dlvy_trip_tbl(i).r_message_appl := 'WMS';
660 p_dlvy_trip_tbl(i).r_message_code := 'WMS_DLVY_LOADED_TO_DOCK';
661 p_dlvy_trip_tbl(i).r_message_token := p_dlvy_trip_tbl(i).delivery_id;
662 p_dlvy_trip_tbl(i).r_message_token_name := 'DELIVERY_ID';
663 p_dlvy_trip_tbl(i).r_message_type := 'E';
664
665 FND_MESSAGE.SET_NAME('WMS','WMS_DLVY_LOADED_TO_DOCK' );
666 FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_dlvy_trip_tbl(i).delivery_id);
667
668 p_dlvy_trip_tbl(i).r_message_text := fnd_message.get; */
669
670 BEGIN
671 UPDATE wms_shipping_transaction_temp
672 SET trip_id = NULL
673 WHERE delivery_id = p_dlvy_trip_tbl(i).delivery_id;
674 IF g_debug_on = 1 THEN
675 print_debug(l_procname || ': wstt.l_trip_id: updated ' );
676 END IF;
677 p_dlvy_trip_tbl(i).return_status := 'S';
678 EXCEPTION
679 WHEN OTHERS THEN
680 x_return_status := g_ret_status_unexp_error;
681 IF g_debug_on = 1 THEN
682 print_debug(l_procname || ': wstt could not be updated: ' || SQLCODE ||':' || SQLERRM);
683 END IF;
684 END ;
685
686 END IF;
687 EXCEPTION
688 WHEN no_data_found THEN
689 p_dlvy_trip_tbl(i).return_status := 'S';
690 WHEN OTHERS THEN
691 p_dlvy_trip_tbl(i).return_status := 'U';
692 IF g_debug_on = 1 THEN
693 print_debug(l_procname || SQLERRM);
694 END IF;
695 END;
696 ELSE
697 p_dlvy_trip_tbl(i).return_status := 'U';
698 IF g_debug_on = 1 THEN
699 print_debug(l_procname || 'Either delivery id or trip id is not passed in');
700 END IF;
701 END IF;
702 END LOOP;
703
704
705 EXCEPTION
706 WHEN OTHERS THEN
707 x_return_status := g_ret_status_unexp_error;
708 END process_delivery_trip;
709
710 PROCEDURE process_serial_number
711 (p_api_version IN NUMBER
712 ,p_init_msg_list IN VARCHAR2 := wms_shipping_interface_grp.g_false
713 ,p_commit IN VARCHAR2 := wms_shipping_interface_grp.g_false
714 ,p_validation_level IN NUMBER := wms_shipping_interface_grp.g_full_validation
715 ,p_action IN VARCHAR2
716 ,p_serial_number_tbl IN OUT nocopy wms_shipping_interface_grp.g_serial_number_tbl
717 ,x_return_status OUT nocopy VARCHAR2
718 ,x_msg_count OUT nocopy NUMBER
719 ,x_msg_data OUT nocopy VARCHAR2) IS
720
721 TYPE inventory_item_id_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
722 TYPE organization_id_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
723 TYPE serial_number_tbl IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
724 TYPE lpn_id_tbl IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
725
726 l_inventory_item_id_tbl inventory_item_id_tbl;
727 l_serial_number_tbl serial_number_tbl;
728 l_lpn_id_tbl lpn_id_tbl;
729 l_current_org_id_tbl organization_id_tbl;
730 l_user_id NUMBER := fnd_global.user_id;
731 BEGIN
732 print_debug('PROCESS_SERIAL_NUMBER: Entered');
733 x_return_status := g_ret_status_success;
734 x_msg_count := 0;
735 x_msg_data := '';
736
737 IF p_action = wms_shipping_interface_grp.g_action_update THEN
738 IF NOT fnd_api.compatible_api_call(1.0
739 ,p_api_version
740 ,'PROCESS_SERIAL_NUMBER'
741 ,g_pkg_name) THEN
742 print_debug('PROCESS_SERIAL_NUMBER: Incompatible API call');
743 RAISE g_exc_unexpected_error;
744 END IF;
745
746 IF p_init_msg_list = 'T' THEN
747 fnd_msg_pub.initialize;
748 END IF;
749
750 print_debug('PROCESS_SERIAL_NUMBER: Start processing serial numbers');
751
752 print_debug('PROCESS_SERIAL_NUMBER: Start populating local tables');
753 FOR i IN p_serial_number_tbl.first..p_serial_number_tbl.last LOOP
754 l_inventory_item_id_tbl(i) := p_serial_number_tbl(i).inventory_item_id;
755 l_serial_number_tbl(i) := p_serial_number_tbl(i).serial_number;
759 print_debug('PROCESS_SERIAL_NUMBER: index: ' || i);
756 l_lpn_id_tbl(i) := p_serial_number_tbl(i).lpn_id;
757 l_current_org_id_tbl(i) := p_serial_number_tbl(i).current_organization_id;
758
760 print_debug('PROCESS_SERIAL_NUMBER: inventory_item_id: ' || l_inventory_item_id_tbl(i));
761 print_debug('PROCESS_SERIAL_NUMBER: serial_number: ' || l_serial_number_tbl(i));
762 print_debug('PROCESS_SERIAL_NUMBER: lpn_id: ' || l_lpn_id_tbl(i));
763 print_debug('PROCESS_SERIAL_NUMBER: current_org_id: ' || l_current_org_id_tbl(i));
764 END LOOP;
765 print_debug('PROCESS_SERIAL_NUMBER: Finished populating local tables. Count: ' || l_lpn_id_tbl.COUNT);
766
767 print_debug('PROCESS_SERIAL_NUMBER: Update MSN table');
768 forall i IN l_lpn_id_tbl.first..l_lpn_id_tbl.last
769 UPDATE mtl_serial_numbers
770 SET lpn_id = l_lpn_id_tbl(i)
771 ,last_update_date = Sysdate
772 ,last_updated_by = l_user_id
773 WHERE inventory_item_id = l_inventory_item_id_tbl(i)
774 AND serial_number = l_serial_number_tbl(i)
775 AND current_organization_id = l_current_org_id_tbl(i);
776
777 print_debug('PROCESS_SERIAL_NUMBER: Finished updating');
778 print_debug('PROCES_SERIAL_NUMBER: Total rows updated: ' || SQL%ROWCOUNT);
779 IF g_debug_on = 1 THEN
780 FOR i IN l_lpn_id_tbl.first..l_lpn_id_tbl.last LOOP
781 print_debug('PROCESS_SERIAL_NUMBER: Row ' || i || ' updated ' || SQL%bulk_rowcount(i) || ' rows.');
782 END LOOP;
783 END IF;
784 ELSE
785 print_debug('PROCESS_SERIAL_NUMBER: Invalid action passed in');
786 RAISE g_exc_unexpected_error;
787 END IF;
788
789 IF p_commit = 'T' THEN
790 COMMIT;
791 print_debug('PROCESS_SERIAL_NUMBER: Committed change');
792 END IF;
793 print_debug('PROCESS_SERIAL_NUMBER: Ended');
794 EXCEPTION
795 WHEN OTHERS THEN
796 x_return_status := g_ret_status_unexp_error;
797 print_debug('PROCESS_SERIAL_NUMBER: Exception raised!');
798 END process_serial_number;
799
800
801 /* Added the following API, which will be called by WSH
802 with p_action as 'INCLUDE_DELIVERY_FOR_PLANNING', when
803 the delivery is not assigned to any trip, to validate whether
804 any LPN associated with this delivery is already loaded to dock door
805 */
806 PROCEDURE process_deliveries
807 (p_api_version IN NUMBER
808 ,p_init_msg_list IN VARCHAR2 := Wms_Shipping_Interface_Grp.g_false
809 ,p_commit IN VARCHAR2 := Wms_Shipping_Interface_Grp.g_false
810 ,p_validation_level IN NUMBER := Wms_Shipping_Interface_Grp.g_full_validation
811 ,p_action IN VARCHAR2
812 ,x_dlvy_trip_tbl IN OUT nocopy Wms_Shipping_Interface_Grp.g_dlvy_trip_tbl
813 ,x_return_status OUT nocopy VARCHAR2
814 ,x_msg_count OUT nocopy NUMBER
815 ,x_msg_data OUT nocopy VARCHAR2) IS
816
817 l_delivery_status NUMBER(1);
818
819 BEGIN
820 x_return_status := 'S';
821 print_debug('In ....PROCESS_DELIVERIES ' );
822 print_debug('p_api_version: ' || p_api_version );
823 print_debug('p_init_msg_list: ' || p_init_msg_list );
824 print_debug('p_commit: ' || p_commit );
825 print_debug('p_validation_level: ' || p_validation_level );
826 print_debug('p_action: ' || p_action );
827 print_debug('x_dlvy_trip_tbl: ' || x_dlvy_trip_tbl.COUNT );
828
829 x_msg_count := 0;
830 x_msg_data := '';
831 IF p_action = Wms_Shipping_Interface_Grp.g_action_plan_delivery THEN
832 FOR i IN x_dlvy_trip_tbl.first..x_dlvy_trip_tbl.last LOOP
833 l_delivery_status := 0;
834 print_debug('x_dlvy_trip_tbl(i).delivery_id : ' || x_dlvy_trip_tbl(i).delivery_id);
835
836 BEGIN
837 SELECT 1
838 INTO l_delivery_status
839 FROM dual
840 WHERE EXISTS ( SELECT lpn_context
841 FROM wms_license_plate_numbers wlpn
842 , wms_shipping_transaction_temp wstt
843 WHERE wlpn.lpn_id = wstt.outermost_lpn_id
844 AND wstt.delivery_id = x_dlvy_trip_tbl(i).delivery_id
845 AND wlpn.lpn_context = 9 );
846
847 IF l_delivery_status = 1 THEN
848 x_dlvy_trip_tbl(i).return_status := 'E';
849 x_dlvy_trip_tbl(i).r_message_appl := 'WMS';
850 x_dlvy_trip_tbl(i).r_message_code := 'WMS_DELIVERY_LOADED_TO_DOCK';
851 x_dlvy_trip_tbl(i).r_message_token := x_dlvy_trip_tbl(i).delivery_id;
852 x_dlvy_trip_tbl(i).r_message_token_name := 'DELIVERY_ID';
853 x_dlvy_trip_tbl(i).r_message_type := 'E';
854 print_debug('r_message_code : WMS_DELIVERY_LOADED_TO_DOCK');
855 END IF;
856 print_debug('l_delivery_status :' || l_delivery_status);
857
858 EXCEPTION
859 WHEN NO_DATA_FOUND THEN
860 x_dlvy_trip_tbl(i).return_status := 'S';
861 x_dlvy_trip_tbl(i).r_message_appl := 'WMS';
862 x_dlvy_trip_tbl(i).r_message_code := '';
863 x_dlvy_trip_tbl(i).r_message_token := x_dlvy_trip_tbl(i).delivery_id;
864 x_dlvy_trip_tbl(i).r_message_token_name := 'DELIVERY_ID';
865 x_dlvy_trip_tbl(i).r_message_type := 'S';
866 print_debug('NO_DATA_FOUND :' || x_dlvy_trip_tbl(i).delivery_id);
867 END;
868
869 IF g_debug_on = 1 THEN
870 print_debug('WMS_SHIPPING_INTERFACE_GRP.PROCESS_DELIVERIES : ' || ' Record No : ' || i );
871 print_debug('WMS_SHIPPING_INTERFACE_GRP.PROCESS_DELIVERIES : ' || ' Delivery ID : ' || x_dlvy_trip_tbl(i).delivery_id );
872 print_debug('WMS_SHIPPING_INTERFACE_GRP.PROCESS_DELIVERIES : ' || ' r_message_code : ' || x_dlvy_trip_tbl(i).r_message_code );
873 END IF;
874
875 END LOOP;
876 END IF;
877 EXCEPTION
878 WHEN OTHERS THEN
879 x_return_status := 'E';
880 x_msg_count := 1;
881 x_msg_data := 'Unexpected exception in PROCESS_DELIVERIES';
882
883 END process_deliveries;
884
885 function wave_line_exists(p_delivery_detail_id in number) return varchar2
886 is
887 l_return varchar2(1):='N';
888 begin
889 begin
890 select 'Y' into l_return from dual where exists
891 (select 1 from wms_wp_wave_lines
892 where delivery_detail_id = p_delivery_detail_id
893 and nvl(remove_from_wave_flag, 'N') <> 'Y');
894 exception
895 when no_data_found then
896 l_return := 'N';
897 end;
898 return l_return;
899
900 end wave_line_exists;
901
902
903 procedure split_wave_line(p_orig_delivery_detail_id in number,
904 p_new_delivery_detail_id in number default null,
905 x_return_status out nocopy varchar2,
906 x_msg_count out nocopy number,
907 x_msg_data out nocopy varchar2)
908 is
909 l_new_wave_line_id number;
910 l_new_crossdock_quantity number;
911
912 cursor c_orig_wave_lines is
913 select wwl.wave_header_id
914 ,wwl.wave_line_id
915 ,wwl.wave_line_source
916 ,wwl.wave_line_status
917 ,wwl.organization_id
918 ,wwl.demand_source_header_id
919 ,wwl.remove_from_wave_flag
920 ,wwl.planned_fill_rate
921 ,wwl.crossdock_quantity
922 ,wwl.crossdock_uom
923 ,wdd.requested_quantity --needed to calculate new crossdock quantity...
924 from wms_wp_wave_lines wwl, wsh_delivery_details wdd
925 where wdd.delivery_detail_id = p_orig_delivery_detail_id
926 and wdd.delivery_detail_id = wwl.delivery_detail_id
927 and wwl.organization_id = wdd.organization_id
928 and nvl(remove_from_wave_flag, 'N') <> 'Y';
929
930 begin
931 x_return_status:=fnd_api.g_ret_sts_success;
932
933 for l_split_from_wave_line in c_orig_wave_lines loop
934
935 --keep as much xdock qty on original wave line; only put some on new line if old line requestd quantity is less than old line xdock quantity
936 l_new_crossdock_quantity:=0;
937 if nvl(l_split_from_wave_line.crossdock_quantity,0)>l_split_from_wave_line.crossdock_quantity then
938 l_new_crossdock_quantity := l_split_from_wave_line.crossdock_quantity - l_split_from_wave_line.requested_quantity;
939 update wms_wp_wave_lines
940 set crossdock_quantity = requested_quantity
941 where wave_line_id = l_split_from_wave_line.wave_line_id;
942 end if;
943
944 --copy relevant information into new wave line
945 insert into wms_wp_wave_lines
946 (WAVE_HEADER_ID,
947 WAVE_LINE_ID,
948 WAVE_LINE_SOURCE,
949 WAVE_LINE_STATUS,
950 CREATED_BY,
951 CREATION_DATE,
952 LAST_UPDATED_BY,
953 LAST_UPDATE_DATE,
954 LAST_UPDATE_LOGIN,
955 DELIVERY_DETAIL_ID,
956 ORGANIZATION_ID,
957 demand_source_header_id,
958 REMOVE_FROM_WAVE_FLAG,
959 planned_fill_rate,
960 crossdock_quantity,
961 crossdock_uom)
962 values
963 (l_split_from_wave_line.wave_header_id,
964 WMS_WP_WAVE_LINES_S.NEXTVAL,
965 l_split_from_wave_line.WAVE_LINE_SOURCE,
966 l_split_from_wave_line.WAVE_LINE_STATUS,
967 fnd_global.user_id,
968 sysdate,
969 fnd_global.user_id,
970 sysdate,
971 fnd_global.login_id,
972 p_new_delivery_detail_id,
973 l_split_from_wave_line.organization_id,
974 l_split_from_wave_line.demand_source_header_id, --???????? Demand Source Header Id
975 l_split_from_wave_line.remove_from_wave_flag,
976 l_split_from_wave_line.planned_fill_rate,
977 l_new_crossdock_quantity,
978 l_split_from_wave_line.crossdock_uom)
979 returning WAVE_LINE_ID into l_new_wave_line_id;
980
981 --call APIs to re-calculate actual_fill_rate and pick_fill_rate
982 wms_wave_planning_pvt.update_line_pick_fill_rate(l_new_wave_line_id);
983 wms_wave_planning_pvt.update_line_pick_fill_rate(l_split_from_wave_line.wave_line_id);
984 wms_wave_planning_pvt.update_line_actual_fill_rate(l_new_wave_line_id);
985 wms_wave_planning_pvt.update_line_actual_fill_rate(l_split_from_wave_line.wave_line_id);
986
987 end loop;
988 exception
989 when others then
990 --need to use print method
991 print_debug('Unexpected error in split_wave_line: '||SQLCODE || ' : '||SQLERRM);
992 x_return_status := 'U';
993 end split_wave_line;
994 END wms_shipping_interface_grp;