[Home] [Help]
PACKAGE BODY: APPS.WSH_DELIVERY_DETAILS_ACTIONS
Source
1 PACKAGE BODY WSH_DELIVERY_DETAILS_ACTIONS as
2 /* $Header: WSHDDACB.pls 120.50.12020000.14 2013/05/30 13:27:00 skanduku ship $ */
3
4 -- odaboval : Begin of OPM Changes (Pick_Confirm)
5 G_PACKAGE_NAME CONSTANT VARCHAR2(50) := 'WSH_DELIVERY_DETAILS_ACTIONS';
6
7 G_MAX_DECIMAL_DIGITS CONSTANT NUMBER := 9 ;
8 G_MAX_REAL_DIGITS CONSTANT NUMBER := 10 ;
9 G_RET_WARNING CONSTANT VARCHAR2(1):= 'W';
10
11 -- 2587777
12 G_ATO_RSV_PROFILE VARCHAR2(240);
13 G_CODE_RELEASE_LEVEL VARCHAR2(6);
14 g_header_id number;
15 -- 2587777
16
17 -- J: W/V Changes
18 cursor g_get_detail_info(detail_id in number) is
19 select released_status,
20 gross_weight,
21 net_weight,
22 volume,
23 container_flag,
24 delivery_id
25 from wsh_Delivery_details wdd,
26 wsh_delivery_assignments_v wda
27 where wdd.delivery_detail_id = detail_id
28 and wdd.delivery_detail_id = wda.delivery_detail_id;
29
30 -- odaboval : End of OPM Changes (Pick_Confirm)
31 /*2442099*/
32 -- Forward declaration for the procedure Log_Exceptions
33
34 PROCEDURE Log_Exceptions(p_old_delivery_detail_id IN NUMBER,
35 p_new_delivery_detail_id IN NUMBER,
36 p_delivery_id IN NUMBER,
37 p_action IN VARCHAR2 DEFAULT NULL);
38
39 -- Forward declaration
40 -- Procedure: Split_Serial_Numbers_INT
41 --
42 -- x_old_detail_rec original delivery detail information for splitting
43 -- x_new_delivery_detail_rec new delivery detail to copy
44 -- p_old_shipped_quantity shipped quantity to be updated on original detail
45 -- p_new_shipped_quantity shipped quantity to be updated on new detail
46 --
47 -- Description: Splits the serial number records for
48 -- the original delivery line
49 -- and its newly split delivery line.
50 -- x_old_detail_recand x_new_delivery_detail_rec will be updated with
51 -- new serial number information as needed (for serial_number, to_serial_number,
52 -- and transaction_temp_id).
53 PROCEDURE Split_Serial_Numbers_INT(
54 x_old_detail_rec IN OUT NOCOPY SplitDetailRecType,
55 x_new_delivery_detail_rec IN OUT NOCOPY WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type,
56 p_old_shipped_quantity IN NUMBER,
57 p_new_shipped_quantity IN NUMBER,
58 x_return_status OUT NOCOPY VARCHAR2);
59
60
61 /*---------------------------------------------------------------------------------------------------
62 Procedure Name : Unreserve_delivery_detail
63 Description : This API calls Inventory's APIs to Unreserve. It first
64 queries the reservation records, and then calls
65 delete_reservations until the p_quantity_to_unreserve
66 is satisfied.
67 Parameters : p_delivery_detail_id -> WSH_DELIVERY_DETAILS.delivery_detail_id corresponding to
68 which the reservations are to be Unreserved
69 p_quantity_to_unreserve -> Quantity to Unreserve / Cycle Count
70 p_unreserve_mode -> p_unreserve_mode -> Either 'UNRESERVE' or 'CYCLE_COUNT' or 'RETAIN_RSV'
71 Added 'RETAIN_RSV' for bug 4721577. WMS wants
72 reservations to be retained while Backordering
73 delivery detail lines.'
74 p_override_retain_ato_rsv -> A 'Y' for this parameter will indicate to override the
75 Retain ATO REservations profile (yes). In short, this
76 will indicate that the Unreservation has to take place.
77 This is Passed as 'Y' from WSH_INTERFACE.delete_details,
78 an instance where the Reservations have to be reduced.
79 Brief Logic of Underlying IFs :
80 Loop Until All Resevation Records are Read; Classify the Rsvn. into Staged and UnStaged Rsvtns.
81 IF ( LineType = 'Unstaged' and p_unreserve_mode = 'UNRESERVE' and Reservation is not staged) THEN
82 IF ( Ato Line with Retain Rsvtn.) Don't Update or Delete the REservations
83 Otherwise -- Reduce Detailed Qty and Prim.Rsvtn Qty and Call [Update Rsvn] OR [Delete Rsvtn]
84 ELSIF ( LineType = 'staged' and unreserve_mode = 'UNRESERVE' and Reservation is staged)
85 OR ( unreserve_mode <> 'UNRESERVE' , e.g. Cycle Count ) THEN
86 Handle: ( rsv.Qty <= Qty. to UnReserve)
87 IF ( ATO line ) then Update Staged Flag to UnStaged Otherwise (Delete REservation )
88 OR Cycle_Count depending on the unreserve_mode
89 Handle: ( rsv.Qty > Qty. to UnReserve)
90 IF ( ATO Line ) THEN (Transfer Reservation and Update Rsvntn. Staged Flag to UnStaged for the
91 Split or Transferred Rsvtn.) Otherwise (Update Rsvtn.)
92 OR (Cycle Count Process) depending on the unreserve_mode
93 End Loop;
94 ------------------------------------------------------------------------------------------------------- */
95 -- HW 3121616 Added p_quantity2_to_unreserve
96 Procedure Unreserve_delivery_detail
97 ( p_delivery_detail_id IN NUMBER
98 , p_quantity_to_unreserve IN NUMBER
99 , p_quantity2_to_unreserve IN NUMBER default NULL
100 , p_unreserve_mode IN VARCHAR2
101 , p_override_retain_ato_rsv IN VARCHAR2 -- 2747520
102 , x_return_status OUT NOCOPY VARCHAR2
103 )
104
105
106 IS
107 l_rsv_rec inv_reservation_global.mtl_reservation_rec_type;
108 l_rsv_new_rec inv_reservation_global.mtl_reservation_rec_type;
109 l_msg_count NUMBER;
110 l_msg_data VARCHAR2(3000);
111 l_rsv_id NUMBER;
112 l_return_status VARCHAR2(1);
113 l_reserve_msg_count NUMBER := 0;
114 l_reserve_msg_data VARCHAR2(4000) := NULL;
115 l_reserve_message VARCHAR2(4000) := NULL;
116 l_reserve_status VARCHAR2(1);
117 l_rsv_tbl inv_reservation_global.mtl_reservation_tbl_type;
118 l_count NUMBER;
119 l_dummy_sn inv_reservation_global.serial_number_tbl_type;
120 l_qty_to_unreserve NUMBER;
121 l_sales_order_id NUMBER := NULL;
122 l_x_error_code NUMBER;
123 l_lock_records VARCHAR2(1);
124 l_sort_by_req_date NUMBER ;
125 -- HW BUG#:2005977 for OPM
126 -- HW OPMCONV - Removed OPM variables
127
128 l_buffer VARCHAR2(2000);
129
130 x_msg_count NUMBER;
131 x_msg_data VARCHAR2(3000);
132 l_trans_qty NUMBER;
133 l_trans_qty2 NUMBER;
134 l_lock_status BOOLEAN;
135 -- 2587777
136 l_staged_flag VARCHAR2(1);
137 l_new_rsv_id NUMBER;
138 -- 2587777
139 l_unreserve_mode VARCHAR2(20);
140 l_lpn_id NUMBER;
141
142
143
144 Cursor c_line_details is
145 select o.source_document_type_id ,
146 o.line_id ,
147 o.header_id ,
148 o.preferred_grade ,
149 o.ordered_quantity_uom2 ,
150 o.ordered_quantity2 ,
151 o.ato_line_id, -- 2587777
152 wdd.organization_id,
153 -- HW 4178299 - Get Item_id and uom
154 wdd.inventory_item_id,
155 wdd.requested_quantity_uom,
156 wdd.subinventory,
157 wdd.revision,
158 wdd.locator_id,
159 -- X-dock changes, add 2 fields
160 wdd.requested_quantity,
161 wdd.requested_quantity2,
162 -- HW OPMCONV - Changed length from 30 to 80
163 substr(wdd.lot_number,1,80) lot_number ,
164 wdd.move_order_line_id,
165 wdd.released_status, -- 2747520
166 wdd.date_scheduled, -- 2847687
167 wda.parent_delivery_detail_id --4721577
168 from wsh_delivery_details wdd ,
169 oe_order_lines_all o,
170 wsh_delivery_assignments_v wda
171 where wdd.delivery_detail_id = p_delivery_Detail_id
172 and wdd.delivery_detail_id = wda.delivery_detail_id
173 and wdd.source_code = 'OE'
174 and wdd.source_line_id = o.line_id ;
175
176 l_line_rec c_line_details%ROWTYPE ;
177 -- Bug 4721577
178 CURSOR c_lpn_id (c_delivery_detail_id NUMBER) IS
179 SELECT wdd.lpn_id
180 FROM wsh_delivery_details wdd
181 WHERE wdd.delivery_detail_id = c_delivery_detail_id;
182
183 -- HW BUG#:2005977 for OPM
184
185 --
186 l_debug_on BOOLEAN;
187 --
188 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNRESERVE_DELIVERY_DETAIL';
189 --
190 l_cancel_rsv_type VARCHAR2(1); -- 2747520: 'S'taged or 'U'nstaged
191 -- HW OPMCONV - Added Qty2
192 CURSOR c_nonstaged_qty is
193 SELECT nvl(sum(requested_quantity),0),nvl(sum(requested_quantity2),0)
194 FROM wsh_delivery_details
195 WHERE
196 source_line_id = l_line_rec.line_id
197 and source_header_id = l_line_rec.header_id
198 and organization_id = l_line_rec.organization_id
199 and released_status in ('R','B','N','S');
200
201 l_nonstaged_qty NUMBER;
202 l_nonstaged_rsv_qty NUMBER;
203 l_remaining_nonstaged_qty NUMBER;
204 l_cancelled_reservation_qty NUMBER;
205 -- HW OPMCONV - Added Qty2 variables
206 l_nonstaged_qty2 NUMBER;
207 l_nonstaged_rsv_qty2 NUMBER;
208 l_remaining_nonstaged_qty2 NUMBER;
209 l_dtld_qty2_to_unreserve NUMBER;
210 l_qty2_to_unreserve NUMBER;
211 -- 2747520
212 --
213 l_trolin_rec INV_MOVE_ORDER_PUB.Trolin_Rec_Type;
214 l_dtld_qty_to_unreserve NUMBER;
215 l_chk_direct_ship BOOLEAN;
216 --muom
217 l_fulfillment_base VARCHAR2(1);
218
219 BEGIN
220
221
222 -- If the quantity to reserve is passed and null or missing, we do not
223 -- need to go through this procedure.
224 --
225 --
226 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
227 --
228 IF l_debug_on IS NULL
229 THEN
230 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
231 END IF;
232 --
233 IF l_debug_on THEN
234 WSH_DEBUG_SV.push(l_module_name);
235 --
236 -- 2587777
237
238 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY2_TO_UNRESERVE',P_QUANTITY2_TO_UNRESERVE);
239 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID:P_QUANTITY_TO_UNRESERVE:P_QUANTITY2_TO_UNRESERVE: P_UNRESERVE_MODE:
240 P_OVERRIDE_RETAIN_ATO_RSV ;',
241 P_DELIVERY_DETAIL_ID
242 ||':'||P_QUANTITY_TO_UNRESERVE
243 ||':'||P_QUANTITY2_TO_UNRESERVE
244 ||':'||P_UNRESERVE_MODE
245 ||':'||P_OVERRIDE_RETAIN_ATO_RSV);
246 END IF;
247 --
248 IF p_quantity_to_unreserve is null OR
249 p_quantity_to_unreserve = FND_API.G_MISS_NUM THEN
250 goto end_of_loop;
251 END IF;
252
253 --
254 IF l_debug_on THEN
255 WSH_DEBUG_SV.logmsg(l_module_name, 'P_DELIVERY_DETAIL_ID : G_CODE_RELEASE_LEVEL ;'
256 || P_DELIVERY_DETAIL_ID ||': '|| G_CODE_RELEASE_LEVEL );
257 END IF;
258 --
259
260 IF ( G_CODE_RELEASE_LEVEL is NULL ) THEN
261 G_CODE_RELEASE_LEVEL := WSH_CODE_CONTROL.Get_Code_Release_Level;
262 END IF;
263
264 --
265 IF l_debug_on THEN
266 WSH_DEBUG_SV.logmsg(l_module_name, 'G_CODE_RELEASE_LEVEL ' || G_CODE_RELEASE_LEVEL );
267 END IF;
268 --
269
270 OPEN c_line_details;
271 FETCH c_line_details INTO l_line_rec ;
272
273 IF c_line_details%NOTFOUND THEN
274 CLOSE c_line_details;
275 goto end_of_loop;
276 END IF;
277 CLOSE c_line_details;
278
279 -- muom
280 l_fulfillment_base := WSH_UTIL_CORE.Get_Line_Fulfillment_Base('OE', l_line_rec.line_id);
281
282 -- HW BUG#:2005977
283 --
284 IF l_debug_on THEN
285 -- 2747520
286 WSH_DEBUG_SV.log(l_module_name,'Ln_id:Hdr_id:Org_id:Src-doc-id:SubInv:Rev:Lot#:Locat-id ; ',
287 l_line_rec.line_id
288 ||':'|| l_line_rec.header_id
289 ||':'|| l_line_rec.organization_id
290 ||':'|| l_line_rec.source_document_type_id
291 ||':'|| l_line_rec.subinventory
292 ||':'|| l_line_rec.revision
293 ||':'|| l_line_rec.lot_number
294 -- HW 4178299 - Added inventory_item_id, uom and uom2
295 ||':'|| l_line_rec.inventory_item_id
296 ||':'|| l_line_rec.requested_quantity_uom
297 ||':'|| l_line_rec.ordered_quantity_uom2
298 ||':'|| l_line_rec.locator_id);
299 WSH_DEBUG_SV.log(l_module_name,'ATO-Ln-id : Rel-Stat : Dt-Sched HH24:MI:SS ; ',
300 l_line_rec.ato_line_id
301 ||':'|| l_line_rec.released_status
302 ||':'|| to_char(l_line_rec.date_scheduled,'MM/DD/YYYY HH24:MI:SS'));
303 -- muom
304 WSH_DEBUG_SV.log(l_module_name,'l_fulfillment_base ',l_fulfillment_base);
305
306 -- 2587777
307
308 END IF;
309 --
310 --HW OPMCONV - Removed checking for process org
311
312 -- end of BUG#:2005977
313 IF l_line_rec.source_document_type_id = 10 THEN
314 -- This is an internal order line. We need to give
315 -- a different demand source type for these lines.
316 l_rsv_rec.demand_source_type_id :=
317 INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INTERNAL_ORD;
318 -- intenal order
319 ELSE
320 l_rsv_rec.demand_source_type_id :=
321 INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_OE; -- order entry
322 END IF;
323
324 -- Get demand_source_header_id from mtl_sales_orders
325
326 --
327 IF l_debug_on THEN
328 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_SALESORDER.GET_SALESORDER_FOR_OEHEADER',WSH_DEBUG_SV.C_PROC_LEVEL);
329 END IF;
330 --
331 -- caching the sales_order_id : 2807093-2747520
332 IF ( l_sales_order_id is NULL OR l_line_rec.header_id <> nvl(g_header_id, 0) ) THEN
333 l_sales_order_id := inv_salesorder.get_salesorder_for_oeheader(
334 l_line_rec.header_id);
335 g_header_id := l_line_rec.header_id;
336 END IF;
337 --
338 IF l_debug_on THEN
339 WSH_DEBUG_SV.logmsg(l_module_name, 'L_SALES_ORDER_ID' || L_SALES_ORDER_ID );
340 END IF;
341 --
342
343 l_rsv_rec.demand_source_header_id := l_sales_order_id;
344 l_rsv_rec.demand_source_line_id := l_line_rec.line_id;
345
346 -- Bug 1842613 : Initializing inventory controls present in wsh_delivery_details
347 IF ( l_line_rec.organization_id IS NOT NULL ) THEN
348 l_rsv_rec.organization_id := l_line_rec.organization_id;
349 END IF;
350 IF ( l_line_rec.subinventory IS NOT NULL) THEN
351 l_rsv_rec.subinventory_code := l_line_rec.subinventory;
352 END IF;
353 IF ( l_line_rec.revision IS NOT NULL ) THEN
354 l_rsv_rec.revision := l_line_rec.revision;
355 END IF;
356 IF ( l_line_rec.lot_number IS NOT NULL ) THEN
357 l_rsv_rec.lot_number := l_line_rec.lot_number;
358 END IF;
359 IF ( l_line_rec.locator_id IS NOT NULL ) THEN
360 l_rsv_rec.locator_id := l_line_rec.locator_id;
361 END IF;
362 --Added condition p_unreserve_mode = 'RETAIN_RSV' for bug 4721577
363 --Added condition p_unreserve_mode = 'UNRESERVE' for bug 11828449
364 IF (NVL(p_unreserve_mode, 'UNRESERVE') in ('UNRESERVE', 'RETAIN_RSV')) AND
365 l_line_rec.parent_delivery_detail_id IS NOT NULL AND
366 (wsh_util_validate.Check_Wms_Org(l_line_rec.organization_id)='Y') THEN
367 OPEN c_lpn_id(l_line_rec.parent_delivery_detail_id);
368 FETCH c_lpn_id INTO l_lpn_id;
369 --
370 IF (c_lpn_id%FOUND) THEN
371
372 IF l_lpn_id is not null THEN
373 --
374 IF WMS_DIRECT_SHIP_PVT.check_direct_ship_for_lpn(l_lpn_id) THEN
375 l_chk_direct_ship:=TRUE;
376 --
377 IF l_debug_on THEN
378 WSH_DEBUG_SV.log(l_module_name,' Direct Ship l_lpn_id', l_lpn_id);
379 END IF;
380 --
381 ELSE
382 l_chk_direct_ship:=FALSE;
383 END IF;
384 --
385 IF (NVL(p_unreserve_mode,'UNRESERVE') in ('RETAIN_RSV')) OR (l_chk_direct_ship) THEN
386
387 l_rsv_rec.lpn_id := l_lpn_id;
388 --
389 IF l_debug_on THEN
390 WSH_DEBUG_SV.log(l_module_name,' l_rsv_rec.lpn_id', l_lpn_id);
391 END IF;
392 --
393 END IF;
394 --
395 END IF;
396 --
397 END IF;
398 --
399 CLOSE c_lpn_id;
400
401 END IF;
402 --
403 --bug 4950329: query only staged reservations for cycle-count
404 IF (p_unreserve_mode = 'CYCLE_COUNT') THEN
405 l_rsv_rec.staged_flag := 'Y';
406 END IF;
407
408
409 -- HW BUG#:2005977 for OPM. Need to branch
410 -- HW OPMCONV - No need to branch code
411 --
412 IF l_debug_on THEN
413 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.QUERY_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
414 END IF;
415 --
416 -- Bug 3431358(Moved this code from top to here)
417 -- 2747520 : Set reservation_type to 'U'nstaged or 'S'taged
418 IF (l_line_rec.released_status in ('R','B','N') ) THEN
419 l_cancel_rsv_type := 'U';
420 OPEN c_nonstaged_qty;
421 FETCH c_nonstaged_qty
422 INTO l_nonstaged_qty, l_nonstaged_qty2;
423 CLOSE c_nonstaged_qty;
424 ELSIF (l_line_rec.released_status in ('C','Y')) THEN
425 l_cancel_rsv_type := 'S';
426 ELSIF (l_line_rec.released_status = 'S') THEN
427 l_cancel_rsv_type := 'U';
428 --X-dock
429 IF l_line_rec.move_order_line_id IS NOT NULL THEN
430 l_trolin_rec := INV_TROLIN_UTIL.Query_Row(p_line_id => l_line_rec.move_order_line_id);
431 ELSE -- MOL is null for X-dock case
432 l_trolin_rec.quantity_detailed := l_line_rec.requested_quantity;
433 l_trolin_rec.secondary_quantity_detailed := l_line_rec.requested_quantity2;
434 END IF;
435 -- end of X-dock changes
436
437 IF (l_trolin_rec.quantity_detailed > 0) THEN
438 l_dtld_qty_to_unreserve := l_trolin_rec.quantity_detailed;
439 -- HW OPMCONV - Added Qty2
440 l_dtld_qty2_to_unreserve := l_trolin_rec.secondary_quantity_detailed;
441 ELSE
442 -- HW OPMCONV - Added Qty2
443 l_dtld_qty_to_unreserve := 0;
444 l_dtld_qty2_to_unreserve := 0;
445 END IF;
446 ELSE
447 l_cancel_rsv_type := 'X'; -- ignoring if not in above released status
448 END IF;
449 -- 2747520
450 -- End Bug3431358
451
452 --2587777
453 IF ( G_ATO_RSV_PROFILE IS NULL ) THEN
454 fnd_profile.get('WSH_RETAIN_ATO_RESERVATIONS', G_ATO_RSV_PROFILE);
455 if ( G_ATO_RSV_PROFILE is NULL ) THEN -- By Default this Profile is 'N'
456 G_ATO_RSV_PROFILE := 'N';
457 end if;
458 END IF;
459 IF l_debug_on THEN
460 WSH_DEBUG_SV.log(l_module_name,'g_ato_rsv_profile',G_ATO_RSV_PROFILE);
461 END IF;
462 --2587777
463
464 --X-dock
465 IF l_line_rec.released_status = WSH_DELIVERY_DETAILS_PKG.C_RELEASED_TO_WAREHOUSE THEN
466 WSH_USA_INV_PVT.get_putaway_detail_id
467 (p_detail_id => p_delivery_detail_id,
468 p_released_status => l_line_rec.released_status,
469 p_move_order_line_id => l_line_rec.move_order_line_id,
470 x_detail_id => l_rsv_rec.demand_source_line_detail,
471 x_return_status => l_return_status);
472
473 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
474 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
475 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
476 RAISE FND_API.G_EXC_ERROR;
477 END IF;
478 END IF;
479 --end of X-dock
480
481 inv_reservation_pub.query_reservation
482 (p_api_version_number => 1.0,
483 p_init_msg_lst => fnd_api.g_true,
484 x_return_status => l_return_status,
485 x_msg_count => l_msg_count,
486 x_msg_data => l_msg_data,
487 p_query_input => l_rsv_rec,
488 p_cancel_order_mode => INV_RESERVATION_GLOBAL.G_CANCEL_ORDER_YES,
489 x_mtl_reservation_tbl => l_rsv_tbl,
490 x_mtl_reservation_tbl_count => l_count,
491 x_error_code => l_x_error_code,
492 p_lock_records => l_lock_records,
493 p_sort_by_req_date => l_sort_by_req_date
494 );
495
496
497 -- 2747520: for Non-Staged
498 IF ( l_cancel_rsv_type = 'U') THEN
499 l_nonstaged_rsv_qty := 0;
500
501 FOR l_counter in 1..l_count
502 LOOP
503 IF l_debug_on THEN
504 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.QUERY_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
505 END IF;
506
507 INV_STAGED_RESERVATION_UTIL.query_staged_flag(
508 x_return_status => x_return_status,
509 x_msg_count => l_msg_count,
510 x_msg_data => l_msg_data,
511 x_staged_flag => l_staged_flag,
512 p_reservation_id => l_rsv_tbl(l_counter).reservation_id);
513
514 IF l_staged_flag <> 'Y' THEN
515 -- HW OPMCONV - Added Qty2
516 l_nonstaged_rsv_qty := l_nonstaged_rsv_qty + (l_rsv_tbl(l_counter).primary_reservation_quantity - nvl(l_rsv_tbl(l_counter).detailed_quantity,0));
517 /* muom: Incorrect subtraction of primary quantity from secondary quantity
518 l_nonstaged_rsv_qty2 := l_nonstaged_rsv_qty2 + (l_rsv_tbl(l_counter).secondary_reservation_quantity - nvl(l_rsv_tbl(l_counter).detailed_quantity,0));
519 */
520 l_nonstaged_rsv_qty2 := l_nonstaged_rsv_qty2 + (l_rsv_tbl(l_counter).secondary_reservation_quantity - nvl(l_rsv_tbl(l_counter).secondary_detailed_quantity,0));
521 END IF;
522
523 END LOOP;
524 END IF;
525 -- 2747520
526
527 l_qty_to_unreserve := p_quantity_to_unreserve;
528 -- HW OPMCONV - Added Qty2
529 l_qty2_to_unreserve := p_quantity2_to_unreserve;
530
531
532 -- HW 4178299 - Need to convert Qty2 to get correct value
533 IF l_fulfillment_base = 'P' THEN
534 IF l_debug_on THEN
535 WSH_DEBUG_SV.log(l_module_name,'Value of Qty2_to_Unreserve before conversion is ',
536 l_qty2_to_unreserve);
537
538 END IF;
539
540 IF ( l_qty2_to_unreserve is NOT NULL OR
541 l_qty2_to_unreserve <> FND_API.G_MISS_NUM ) THEN
542
543 l_qty2_to_unreserve := WSH_WV_UTILS.convert_uom
544 (
545 item_id => l_line_rec.inventory_item_id
546 ,org_id => l_line_rec.organization_id
547 ,from_uom => l_line_rec.requested_quantity_uom
548 ,to_uom => l_line_rec.ordered_quantity_uom2
549 ,quantity => l_qty_to_unreserve
550 ,lot_number => l_line_rec.lot_number);
551
552 IF l_debug_on THEN
553 WSH_DEBUG_SV.log(l_module_name,'Value of Qty2_to_Unreserve AFTER conversion is ',
554 l_qty2_to_unreserve);
555
556 END IF;
557
558 END IF;
559 /*
560 ELSE
561 IF l_debug_on THEN
562 WSH_DEBUG_SV.log(l_module_name,'Value of Qty_to_Unreserve before conversion is ',
563 l_qty_to_unreserve);
564 END IF;
565
566 IF ( l_qty_to_unreserve is NOT NULL OR
567 l_qty_to_unreserve <> FND_API.G_MISS_NUM ) THEN
568
569 l_qty_to_unreserve := WSH_WV_UTILS.convert_uom
570 (
571 item_id => l_line_rec.inventory_item_id
572 ,org_id => l_line_rec.organization_id
573 ,from_uom => l_line_rec.ordered_quantity_uom2
574 ,to_uom => l_line_rec.requested_quantity_uom
575 ,quantity => l_qty2_to_unreserve
576 ,lot_number => l_line_rec.lot_number);
577
578 IF l_debug_on THEN
579 WSH_DEBUG_SV.log(l_module_name,'Value of Qty_to_Unreserve AFTER conversion is ',
580 l_qty_to_unreserve);
581
582 END IF;
583
584 END IF;
585 */
586 END IF;
587
588 -- HW end of 4178299
589
590
591
592 -- 2747520 -- if rsv_type = U
593 IF ( l_cancel_rsv_type = 'U') THEN
594 l_remaining_nonstaged_qty := l_nonstaged_qty - l_qty_to_unreserve;
595 -- HW OPMCONV - Added Qty2
596 l_remaining_nonstaged_qty2 := l_nonstaged_qty2 - l_qty2_to_unreserve;
597 IF l_debug_on THEN
598 WSH_DEBUG_SV.log(l_module_name,'l_nonstaged_rsv_qty:l_nonstaged_qty:l_dtld_qty_to_unreserve:l_remaining_nonstaged_qty ;',
599 l_nonstaged_rsv_qty
600 ||':'||l_nonstaged_qty
601 ||':'||l_dtld_qty_to_unreserve
602 ||':'||l_remaining_nonstaged_qty );
603 -- HW OPMCONV - Added Qty2
604 WSH_DEBUG_SV.log(l_module_name,'l_nonstaged_rsv_qty2:l_nonstaged_qty:l_dtld_qty2_to_unreserve:l_remaining_nonstaged_qty2 ;',
605 l_nonstaged_rsv_qty2
606 ||':'||l_nonstaged_qty2
607 ||':'||l_dtld_qty2_to_unreserve
608 ||':'||l_remaining_nonstaged_qty2 );
609
610 END IF;
611 -- Only Unreserve the Excess Unstgd. Rsvtns.
612 -- muom
613 IF (l_fulfillment_base = 'P' and l_nonstaged_rsv_qty > l_remaining_nonstaged_qty) OR (l_fulfillment_base = 'S' and l_nonstaged_rsv_qty2 > l_remaining_nonstaged_qty2) THEN
614 l_qty_to_unreserve := l_nonstaged_rsv_qty - l_remaining_nonstaged_qty;
615 -- HW OPMCONV - Added Qty2
616 l_qty2_to_unreserve := l_nonstaged_rsv_qty2 - l_remaining_nonstaged_qty2;
617 ELSE
618 l_qty_to_unreserve := 0;
619 -- HW OPMCONV - Added Qty2
620 l_qty2_to_unreserve := 0;
621 END IF;
622 END IF; -- if rsv_type = U
623 -- 2747520
624
625 IF l_debug_on THEN
626 WSH_DEBUG_SV.log(l_module_name,'l_rsv_tbl.COUNT:l_x_error_code :: ',
627 l_rsv_tbl.COUNT||':'||l_x_error_code);
628 END IF;
629
630 FOR I IN 1..l_rsv_tbl.COUNT LOOP
631
632 l_rsv_rec := l_rsv_tbl(I);
633 --
634 IF l_debug_on THEN
635 -- 2587777
636 WSH_DEBUG_SV.log(l_module_name,'rsv.id:inv-item-id:Rsvtn-Qty:Org-id:SubInv-Code:Locator-id:Rev:Lot# ; ',
637 l_rsv_rec.reservation_id
638 ||':'||l_rsv_rec.inventory_item_id
639 ||':'||l_rsv_rec.reservation_quantity
640 ||':'||l_rsv_rec.secondary_reservation_quantity
641 ||':'||L_RSV_REC.ORGANIZATION_ID
642 ||':'||L_RSV_REC.SUBINVENTORY_CODE
643 ||':'||L_RSV_REC.LOCATOR_ID
644 ||':'||L_RSV_REC.REVISION
645 ||':'||L_RSV_REC.LOT_NUMBER );
646 -- 2587777
647 END IF;
648 --
649 -- 2747520 : Query Staged Reservation
650 IF l_debug_on THEN
651 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.QUERY_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
652 END IF;
653 --
654 inv_staged_reservation_util.query_staged_flag(
655 x_return_status => l_return_status
656 , x_msg_count => l_msg_count
657 , x_msg_data => l_msg_data
658 , x_staged_flag => l_staged_flag
659 , p_reservation_id => l_rsv_rec.reservation_id);
660 --
661 IF l_debug_on THEN
662
663 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS QUERY STAGED FLAG: ' || L_RETURN_STATUS );
664 END IF;
665 --
666
667 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
668 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
669 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
670 RAISE FND_API.G_EXC_ERROR;
671 END IF;
672
673 IF l_debug_on THEN
674 WSH_DEBUG_SV.log(l_module_name, 'RES QTY : QTY TO UNRESVRVE : l_staged_flag ; ',
675 L_RSV_REC.RESERVATION_QUANTITY
676 ||':'||L_QTY_TO_UNRESERVE
677 ||':'||l_staged_flag );
678
679 WSH_DEBUG_SV.log(l_module_name, 'PRIM RES QTY : l_staged_flag ; ',
680 L_RSV_REC.PRIMARY_RESERVATION_QUANTITY
681 ||':'||l_staged_flag );
682
683 -- HW OPMCONV - Added Qty2
684 WSH_DEBUG_SV.log(l_module_name, 'RES QTY2 : QTY2 TO UNRESVRVE : l_staged_flag ; ',
685 L_RSV_REC.SECONDARY_RESERVATION_QUANTITY
686 ||':'||L_QTY2_TO_UNRESERVE
687 ||':'||l_staged_flag );
688
689 END IF;
690 --Bug 13995543
691 -- muom
692 IF l_fulfillment_base = 'P' THEN
693 if l_rsv_rec.secondary_reservation_quantity = 0 or l_rsv_rec.secondary_reservation_quantity < L_QTY2_TO_UNRESERVE THEN
694 IF l_debug_on THEN
695 WSH_DEBUG_SV.logmsg(l_module_name, 'Making secondary quantitiy to be unreserved to be equal to secondary reservation vailable, when ' );
696 WSH_DEBUG_SV.logmsg(l_module_name, 'secondary reservation quantity is less than quantity2 to be unreserved ' );
697 END IF;
698 L_QTY2_TO_UNRESERVE := l_rsv_rec.secondary_reservation_quantity ;
699 END IF; --
700 ELSE
701 if l_rsv_rec.primary_reservation_quantity = 0 or l_rsv_rec.primary_reservation_quantity < L_QTY_TO_UNRESERVE THEN
702 IF l_debug_on THEN
703 WSH_DEBUG_SV.logmsg(l_module_name, 'Making primary quantitiy to be unreserved to be equal to primary reservation vailable, when ' );
704 WSH_DEBUG_SV.logmsg(l_module_name, 'primary reservation quantity is less than quantity to be unreserved ' );
705 END IF;
706 L_QTY_TO_UNRESERVE := l_rsv_rec.primary_reservation_quantity ;
707 END IF; --
708 END IF;
709 --
710 -- 2747520 : This will also ensure that Only Non-Staged Staged line UnReserves Non-Stged Rsvtns.
711 -- and Staged Rsvtns. UnReserves Staged Rsvtns.
712 --
713 -- cancel Non-Staged Reservations by non-stged lines
714 IF (l_cancel_rsv_type = 'U' and p_unreserve_mode = 'UNRESERVE' and l_staged_flag <> 'Y') THEN
715
716 -- Check if Retain ATO Profile
717 IF ( l_line_rec.ato_line_id IS NOT NULL AND
718 nvl(p_override_retain_ato_rsv, 'N') = 'N' AND
719 G_ATO_RSV_PROFILE = 'Y' AND
720 G_CODE_RELEASE_LEVEL > '110508' ) THEN
721 NULL; -- Don't Update or Delete the REservations if the above criteria (ATO -Unstgd. Rsvn)is met
722 ELSE
723
724 IF l_debug_on THEN
725 WSH_DEBUG_SV.log(l_module_name,'BEFORE l_prim_rsv_qty: tbl_detailed_qty ; ',
726 l_rsv_tbl(I).primary_reservation_quantity ||':'||
727 l_rsv_tbl(I).detailed_quantity);
728 -- HW OPMCONV - Added Qty2
729 WSH_DEBUG_SV.log(l_module_name,'BEFORE l_secondary_rsv_qty: tbl_detailed_qty2 ; ',
730 l_rsv_tbl(I).secondary_reservation_quantity ||':'||
731 l_rsv_tbl(I).secondary_detailed_quantity);
732 END IF;
733
734 -- Start with orginal primary_reservation_quantity and detailed_quantity
735 l_rsv_new_rec.primary_reservation_quantity := l_rsv_tbl(I).primary_reservation_quantity;
736 l_rsv_new_rec.detailed_quantity := nvl(l_rsv_tbl(I).detailed_quantity,0);
737
738 -- HW OPMCONV - Added Qty2
739 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_tbl(I).secondary_reservation_quantity;
740 l_rsv_new_rec.secondary_detailed_quantity := nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
741
742 -- Tackle Detailed Quantity
743 IF nvl(l_rsv_tbl(I).detailed_quantity,0) <> 0 THEN
744
745 IF (l_dtld_qty_to_unreserve > 0) THEN
746 IF (nvl(l_rsv_tbl(I).detailed_quantity,0) <= l_dtld_qty_to_unreserve) THEN
747 l_dtld_qty_to_unreserve := l_dtld_qty_to_unreserve - nvl(l_rsv_tbl(I).detailed_quantity,0);
748 -- HW OPMCONV - Added Qty2
749 l_dtld_qty2_to_unreserve := l_dtld_qty2_to_unreserve - nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
750
751 l_rsv_new_rec.detailed_quantity := 0;
752 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - nvl(l_rsv_tbl(I).detailed_quantity,0);
753 -- HW OPMCONV - Added Qty2
754 l_rsv_new_rec.secondary_detailed_quantity := 0;
755 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
756 ELSE
757 l_rsv_new_rec.detailed_quantity := l_rsv_new_rec.detailed_quantity - l_dtld_qty_to_unreserve;
758 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - l_dtld_qty_to_unreserve;
759 l_dtld_qty_to_unreserve := 0;
760 -- HW OPMCONV - Added Qty2
761 l_rsv_new_rec.secondary_detailed_quantity := l_rsv_new_rec.secondary_detailed_quantity - l_dtld_qty_to_unreserve;
762 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - l_dtld_qty2_to_unreserve;
763 l_dtld_qty2_to_unreserve := 0;
764 END IF;
765 END IF;
766
767 END IF;
768
769 -- Tackle Primary Reservation Quantity
770 IF (l_qty_to_unreserve > 0) THEN
771 IF ((l_rsv_new_rec.primary_reservation_quantity - l_rsv_new_rec.detailed_quantity) <= l_qty_to_unreserve) THEN
772 IF l_debug_on THEN
773 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
774
775 END IF;
776 l_qty_to_unreserve := l_qty_to_unreserve - (l_rsv_new_rec.primary_reservation_quantity - l_rsv_new_rec.detailed_quantity);
777 -- HW OPMCONV - Added Qty2
778 l_qty2_to_unreserve := l_qty2_to_unreserve - (l_rsv_new_rec.secondary_reservation_quantity - l_rsv_new_rec.secondary_detailed_quantity);
779 IF l_debug_on THEN
780 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
781
782 END IF;
783
784 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.detailed_quantity;
785 -- HW OPMCONV - Added Qty2
786 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_detailed_quantity;
787 ELSE
788 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - l_qty_to_unreserve;
789 l_qty_to_unreserve := 0;
790 -- HW OPMCONV - Added Qty2
791 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - l_qty2_to_unreserve;
792 l_qty2_to_unreserve := 0;
793 END IF;
794 END IF;
795
796 IF l_debug_on THEN
797 WSH_DEBUG_SV.log(l_module_name,'NEW l_prim_rsv_qty: new tbl_detailed_qty ; ',
798 l_rsv_new_rec.primary_reservation_quantity ||':'||
799 l_rsv_new_rec.detailed_quantity);
800 -- HW OPMCONV - Added Qty2
801 WSH_DEBUG_SV.log(l_module_name,'NEW l_seccondary_rsv_qty: new tbl_detailed_qty2 ; ',
802 l_rsv_new_rec.secondary_reservation_quantity ||':'||
803 l_rsv_new_rec.secondary_detailed_quantity);
804 END IF;
805
806 IF l_debug_on THEN
807 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_pub.update_resevation 1',WSH_DEBUG_SV.C_PROC_LEVEL);
808 END IF;
809
810 -- HW OPMCONV - NULL Qty2 if they are not presents
811 IF ( ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
812 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM )
813 OR ( l_rsv_new_rec.secondary_detailed_quantity = 0 OR
814 l_rsv_new_rec.secondary_detailed_quantity = FND_API.G_MISS_NUM ) ) THEN
815 l_rsv_new_rec.secondary_reservation_quantity := NULL;
816 l_rsv_new_rec.secondary_detailed_quantity := NULL;
817 END IF;
818
819
820 IF (l_rsv_new_rec.primary_reservation_quantity > 0) THEN
821
822
823
824 inv_reservation_pub.update_reservation
825 (p_api_version_number => 1.0,
826 p_init_msg_lst => fnd_api.g_true,
827 x_return_status => l_return_status,
828 x_msg_count => l_msg_count,
829 x_msg_data => l_msg_data,
830 p_original_rsv_rec => l_rsv_rec,
831 p_to_rsv_rec => l_rsv_new_rec,
832 p_original_serial_number => l_dummy_sn, -- no serial contorl
833 p_to_serial_number => l_dummy_sn, -- no serial control
834 p_validation_flag => fnd_api.g_true,
835 -- Bug 5099694
836 p_over_reservation_flag =>3
837 );
838
839 IF l_debug_on THEN
840 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE REservation 1: ' || L_RETURN_STATUS );
841 WSH_DEBUG_SV.log(l_module_name,'l_new_prim_rsv_qty: tbl_detailed_qty ; ',
842 l_rsv_new_rec.primary_reservation_quantity ||':'||
843 l_rsv_tbl(I).detailed_quantity);
844 -- HW OPMCONV - Added Qty2
845 WSH_DEBUG_SV.log(l_module_name,'l_new_secondary_rsv_qty: tbl_detailed_qty2 ; ',
846 l_rsv_new_rec.secondary_reservation_quantity ||':'||
847 l_rsv_tbl(I).secondary_detailed_quantity);
848 END IF;
849
850 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
851 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
852 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
853 RAISE FND_API.G_EXC_ERROR;
854 END IF;
855
856 ELSE
857
858 IF l_debug_on THEN
859 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_pub.delete_resevation 1',WSH_DEBUG_SV.C_PROC_LEVEL);
860 END IF;
861
862 inv_reservation_pub.delete_reservation
863 ( p_api_version_number => 1.0
864 , p_init_msg_lst => fnd_api.g_true
865 , x_return_status => l_return_status
866 , x_msg_count => l_msg_count
867 , x_msg_data => l_msg_data
868 , p_rsv_rec => l_rsv_rec
869 , p_serial_number => l_dummy_sn
870 );
871
872 IF l_debug_on THEN
873 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS DELETE REservation 1: ' || L_RETURN_STATUS );
874 END IF;
875
876 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
877 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
878 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
879 RAISE FND_API.G_EXC_ERROR;
880 END IF;
881
882 END IF;
883
884 IF l_debug_on THEN
885 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_unreserve:l_dtld_qty_to_unreserve ; ',
886 l_qty_to_unreserve ||':'||
887 l_dtld_qty_to_unreserve);
888 -- HW OPMCONV - Added Qty2
889 WSH_DEBUG_SV.log(l_module_name,'l_qty2_to_unreserve:l_dtld_qty2_to_unreserve ; ',
890 l_qty2_to_unreserve ||':'||
891 l_dtld_qty2_to_unreserve);
892 END IF;
893
894
895 -- muom
896 IF (l_fulfillment_base = 'P' and (l_qty_to_unreserve <= 0) AND (l_dtld_qty_to_unreserve <= 0)) OR
897 (l_fulfillment_base = 'S' and (l_qty2_to_unreserve <= 0) AND (l_dtld_qty2_to_unreserve <= 0)) THEN
898 goto end_of_loop;
899 END IF;
900
901 END IF; -- check ATO Profile
902
903 -- Added 'RETAIN_RSV' for bug 4721577
904 ELSIF ( (l_cancel_rsv_type = 'S' and l_staged_flag = 'Y' and p_unreserve_mode in ( 'UNRESERVE', 'RETAIN_RSV' ) ) OR
905 (p_unreserve_mode not in ( 'UNRESERVE', 'RETAIN_RSV' ) ) ) THEN
906
907 -- muom: We should no longer be using reservation_quantity as it will not be in primary uom always
908 IF (l_rsv_rec.primary_reservation_quantity <= l_qty_to_unreserve) THEN -- rsv. Qty <=
909 -- Added 'RETAIN_RSV' for bug 4721577
910 IF ( NVL(p_unreserve_mode, 'UNRESERVE') in ( 'UNRESERVE', 'RETAIN_RSV' ) ) THEN
911 -- 2587777 : -- Ato Item and for Patchset level higher than 'H' , i.e. from 'I' onwards
912 IF ( ( ( l_line_rec.ato_line_id IS NOT NULL AND G_ATO_RSV_PROFILE = 'Y'AND nvl(p_override_retain_ato_rsv, 'N') = 'N' ) OR
913 ( p_unreserve_mode = 'RETAIN_RSV' ) ) AND
914 G_CODE_RELEASE_LEVEL > '110508' )
915
916 THEN
917 --
918 -- Bug # 9583775 : begin
919 -- Calling the API INV_RESERVATION_PUB.transfer_reservation instead of
920 -- just updating staged flag value. This is req. incase if there are
921 -- other reservation record which is eligible for consolidation with
922 -- the current res. record. If there is no other res. record then INV
923 -- updates the current res. record (old behavior).
924 IF l_debug_on THEN
925 WSH_DEBUG_SV.log(l_module_name,'l_staged_flag: ',l_staged_flag);
926 END IF;
927 --
928 IF ( nvl(l_staged_flag, 'N') = 'Y') THEN
929 --{ transfer/update reservation.
930 l_rsv_new_rec := l_rsv_rec;
931 l_rsv_new_rec.attribute1 := l_line_rec.preferred_grade;
932 l_rsv_new_rec.attribute2 := l_line_rec.ordered_quantity2;
933 l_rsv_new_rec.attribute3 := l_line_rec.ordered_quantity_uom2;
934 l_rsv_new_rec.requirement_date := l_line_rec.date_scheduled;
935 l_rsv_new_rec.ship_ready_flag := 2;
936 l_rsv_new_rec.staged_flag := 'N';
937 IF ( ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
938 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM )
939 OR ( l_rsv_new_rec.secondary_detailed_quantity = 0 OR
940 l_rsv_new_rec.secondary_detailed_quantity = FND_API.G_MISS_NUM ) ) THEN
941 l_rsv_new_rec.secondary_reservation_quantity := NULL;
942 l_rsv_new_rec.secondary_detailed_quantity := NULL;
943 END IF;
944 --
945 IF l_debug_on THEN
946 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.TRANSFER_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
947 END IF;
948 --
949 INV_RESERVATION_PUB.transfer_reservation
950 (
951 p_api_version_number => 1.0
952 , p_init_msg_lst => fnd_api.g_true
953 , x_return_status => l_return_status
954 , x_msg_count => l_msg_count
955 , x_msg_data => l_msg_data
956 , p_original_rsv_rec => l_rsv_rec
957 , p_to_rsv_rec => l_rsv_new_rec
958 , p_original_serial_number => l_dummy_sn -- no serial contorl
959 , p_to_serial_number => l_dummy_sn -- no serial control
960 , p_validation_flag => fnd_api.g_true
961 , x_to_reservation_id => l_new_rsv_id
962 );
963 --
964 IF l_debug_on THEN
965 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS TRANSFER RESERVATION: ' || L_RETURN_STATUS );
966 WSH_DEBUG_SV.log(l_module_name,'New Rec: reservation id: ', l_new_rsv_id);
967 END IF;
968 --
969 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
970 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
971 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
972 RAISE FND_API.G_EXC_ERROR;
973 END IF;
974 --} transfer/update reservation.
975 END IF;
976 --- Bug # 9583775 : End
977 ELSE -- Non- ATO Item
978 -- 2587777
979 --
980 IF l_debug_on THEN
981 WSH_DEBUG_SV.logmsg(l_module_name, 'CALLING INVS DELETE_RESERVATION' );
982 END IF;
983 --
984 IF l_debug_on THEN
985 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.DELETE_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
986 END IF;
987 --
988
989 inv_reservation_pub.delete_reservation
990 (p_api_version_number => 1.0,
991 p_init_msg_lst => fnd_api.g_true,
992 x_return_status => l_return_status,
993 x_msg_count => l_msg_count,
994 x_msg_data => l_msg_data,
995 p_rsv_rec => l_rsv_rec,
996 p_serial_number => l_dummy_sn
997 );
998 --
999 IF l_debug_on THEN
1000 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS DELETE_RESERVATION: ' || L_RETURN_STATUS );
1001 END IF;
1002 --
1003
1004 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1005 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1006 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1007 RAISE FND_API.G_EXC_ERROR;
1008 END IF;
1009 END IF; -- ATO line
1010 else -- p_unreserve_mode = 'CYCLE_COUNT'
1011 --
1012 IF l_debug_on THEN
1013 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit ONE INV_PICK_RELEASE_PUB.RESERVE_UNCONFIRMED_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
1014 WSH_DEBUG_SV.log(l_module_name, 'l_rsv_rec.reservation_quantity: ' || l_rsv_rec.reservation_quantity );
1015 -- muom
1016 WSH_DEBUG_SV.log(l_module_name, 'l_rsv_rec.primary_reservation_quantity: ' || l_rsv_rec.primary_reservation_quantity );
1017 WSH_DEBUG_SV.log(l_module_name, ' l_rsv_rec.reservation_quantity2: ' || l_rsv_rec.secondary_reservation_quantity );
1018 END IF;
1019 --
1020 IF ( l_rsv_rec.secondary_reservation_quantity = 0 OR
1021 l_rsv_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM ) THEN
1022 l_rsv_rec.secondary_reservation_quantity := NULL;
1023 END IF;
1024 -- HW INVCONV - Added Qty2
1025 Inv_Pick_Release_Pub.Reserve_Unconfirmed_Quantity(
1026 p_api_version => 1.0,
1027 p_init_msg_list => FND_API.G_FALSE,
1028 p_commit => FND_API.G_FALSE,
1029 x_return_status => l_reserve_status,
1030 x_msg_count => l_reserve_msg_count,
1031 x_msg_data => l_reserve_msg_data,
1032 -- muom: We should no longer be using reservation_quantity as it will not be in primary uom always
1033 p_missing_quantity => l_rsv_rec.primary_reservation_quantity ,
1034 p_missing_quantity2 => l_rsv_rec.secondary_reservation_quantity ,
1035 p_reservation_id => l_rsv_rec.reservation_id,
1036 p_demand_source_header_id => l_sales_order_id,
1037 p_demand_source_line_id => l_line_rec.line_id,
1038 p_organization_id => l_rsv_rec.organization_id,
1039 p_inventory_item_id => l_rsv_rec.inventory_item_id,
1040 p_subinventory_code => l_rsv_rec.subinventory_code ,
1041 p_locator_id => l_rsv_rec.locator_id,
1042 p_revision => l_rsv_rec.revision,
1043 p_lot_number => l_rsv_rec.lot_number);
1044
1045 IF ((l_reserve_status = WSH_UTIL_CORE.G_RET_STS_ERROR) or
1046 (l_reserve_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN -- rsv.status
1047 --
1048 IF l_debug_on THEN
1049 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE UNCONFIRMED QUANTITY FAILED' );
1050 WSH_DEBUG_SV.logmsg(l_module_name, 'MESSAGE COUNT: '|| TO_CHAR ( L_RESERVE_MSG_COUNT ) );
1051 END IF;
1052 --
1053 IF (l_reserve_msg_count = 0) or (l_reserve_msg_count is NULL) THEN -- rsv.msg.count
1054 null;
1055 ELSE
1056 FOR i in 1 ..l_reserve_msg_count
1057 LOOP
1058 l_reserve_message := fnd_msg_pub.get(i,'T');
1059 l_reserve_message := replace(l_reserve_message,chr(0), ' ');
1060 --
1061 IF l_debug_on THEN
1062 WSH_DEBUG_SV.logmsg(l_module_name, L_RESERVE_MESSAGE );
1063 END IF;
1064 --
1065 END LOOP;
1066 END if; -- rsv.msg.count
1067 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1068 --
1069 IF l_debug_on THEN
1070 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE_UNCONFIRMED_QUANTITY FAILED.. GOING ON... ' );
1071 END IF;
1072 --
1073 END IF;
1074 end if; -- rsv.status
1075
1076 IF l_debug_on THEN
1077 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_unreserve',
1078 l_qty_to_unreserve);
1079 -- muom
1080 WSH_DEBUG_SV.log(l_module_name,'reservation_quantity',
1081 l_rsv_rec.primary_reservation_quantity);
1082 END IF;
1083 IF l_debug_on THEN
1084 WSH_DEBUG_SV.logmsg(l_module_name, 'Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
1085
1086 END IF;
1087
1088 -- muom: We should no longer be using reservation_quantity as it will not be in primary uom always
1089 l_qty_to_unreserve := l_qty_to_unreserve -
1090 l_rsv_rec.primary_reservation_quantity;
1091
1092 -- HW OPMCONV- Added Qty2
1093 l_qty2_to_unreserve := l_qty2_to_unreserve -
1094 l_rsv_rec.secondary_reservation_quantity;
1095 IF l_debug_on THEN
1096
1097 WSH_DEBUG_SV.logmsg(l_module_name, 'After calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
1098 WSH_DEBUG_SV.logmsg(l_module_name, 'After calculation l_qty2_to_unreserve: ' || l_qty2_to_unreserve );
1099
1100 END IF;
1101
1102 -- muom
1103 IF (l_fulfillment_base = 'P' and l_qty_to_unreserve <= 0) OR (l_fulfillment_base = 'S' and l_qty2_to_unreserve <= 0) THEN
1104 goto end_of_loop;
1105 END IF;
1106
1107 ELSE -- rsv. qty >
1108
1109 l_rsv_new_rec := l_rsv_rec;
1110
1111 --
1112 IF l_debug_on THEN
1113 WSH_DEBUG_SV.logmsg(l_module_name, 'OLD QTY : NEW QTY :: ' || L_RSV_REC.RESERVATION_QUANTITY
1114 ||': '|| L_RSV_NEW_REC.RESERVATION_QUANTITY );
1115
1116 WSH_DEBUG_SV.logmsg(l_module_name, 'OLD PRIM QTY : NEW PRIM QTY :: ' || L_RSV_REC.PRIMARY_RESERVATION_QUANTITY
1117 ||': '|| L_RSV_NEW_REC.PRIMARY_RESERVATION_QUANTITY );
1118
1119 -- HW OPMCONV - Added Qty2
1120 WSH_DEBUG_SV.logmsg(l_module_name, 'OLD QTY2 : NEW QTY2 :: ' || L_RSV_REC.SECONDARY_RESERVATION_QUANTITY
1121 ||': '|| L_RSV_NEW_REC.SECONDARY_RESERVATION_QUANTITY );
1122 END IF;
1123 --
1124 l_rsv_new_rec.attribute1 := l_line_rec.preferred_grade;
1125 l_rsv_new_rec.attribute2 := l_line_rec.ordered_quantity2;
1126 l_rsv_new_rec.attribute3 := l_line_rec.ordered_quantity_uom2;
1127
1128 -- Added 'RETAIN_RSV' for bug 4721577
1129 if ( NVL(p_unreserve_mode,'UNRESERVE') in ( 'RETAIN_RSV', 'UNRESERVE' ) ) then
1130 -- 2587777 -- Ato Item and Patchset level higher than 'H', i.e. from 'I' onwards
1131 IF ( ( ( l_line_rec.ato_line_id IS NOT NULL AND
1132 G_ATO_RSV_PROFILE = 'Y' AND
1133 nvl(p_override_retain_ato_rsv, 'N') = 'N' ) OR
1134 ( p_unreserve_mode = 'RETAIN_RSV' ) ) AND
1135 G_CODE_RELEASE_LEVEL > '110508' ) THEN
1136
1137 -- transfer reservation for ATOs
1138 -- 2747520: At this point, it is assumed that the Rsv. records are Staged Only (filtered above) and
1139 -- the detailed_qty. for such staged recs. will be always 0
1140
1141 -- muom: We should no longer be using reservation_quantity as it will not be in primary uom always
1142 --l_rsv_new_rec.reservation_quantity := l_qty_to_unreserve ;
1143 l_rsv_new_rec.primary_reservation_quantity := l_qty_to_unreserve ;
1144 -- HW OPMCONV- Added Qty2
1145 l_rsv_new_rec.secondary_reservation_quantity := l_qty2_to_unreserve ;
1146 l_rsv_new_rec.detailed_quantity := least(nvl(l_rsv_rec.detailed_quantity, 0), l_qty_to_unreserve);
1147 -- HW OPMCONV- Added Qty2
1148 l_rsv_new_rec.secondary_detailed_quantity := least(nvl(l_rsv_rec.secondary_detailed_quantity, 0), l_qty2_to_unreserve);
1149 -- 2847687 : after discussion with INV the Req.date will now be passed on as date_sched instead of sysdate
1150 l_rsv_new_rec.requirement_date := l_line_rec.date_scheduled;
1151 l_rsv_new_rec.ship_ready_flag := 2;
1152 -- BUG # 9583775: Pass staged flag as 'N' to match and consolidate
1153 -- with the other reservation records.
1154 -- Removed the code which queries and updates staged flag to 'N'
1155 l_rsv_new_rec.staged_flag := 'N';
1156 -- R12, X-dock
1157 l_rsv_new_rec.demand_source_line_detail := null;
1158
1159 --
1160 IF l_debug_on THEN
1161 WSH_DEBUG_SV.logmsg(l_module_name, 'NEW Split Record QTY : Dtld QTY :: ' ||
1162 L_RSV_NEW_REC.PRIMARY_RESERVATION_QUANTITY ||': '||
1163 L_RSV_NEW_REC.DETAILED_QUANTITY );
1164 -- HW OPMCONV - Added Qty2
1165 WSH_DEBUG_SV.logmsg(l_module_name, 'NEW Split Record QTY2 : Dtld QTY2 :: ' ||
1166 L_RSV_NEW_REC.SECONDARY_RESERVATION_QUANTITY ||': '||
1167 L_RSV_NEW_REC.SECONDARY_DETAILED_QUANTITY );
1168 END IF;
1169 --
1170 IF l_debug_on THEN
1171 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.TRANSFER_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
1172 END IF;
1173 --
1174 --
1175
1176 -- HW OPMCONV - NULL Qty2 if they are not presents
1177 IF ( ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
1178 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM )
1179 OR ( l_rsv_new_rec.secondary_detailed_quantity = 0 OR
1180 l_rsv_new_rec.secondary_detailed_quantity = FND_API.G_MISS_NUM ) ) THEN
1181 l_rsv_new_rec.secondary_reservation_quantity := NULL;
1182 l_rsv_new_rec.secondary_detailed_quantity := NULL;
1183 END IF;
1184
1185
1186 INV_RESERVATION_PUB.transfer_reservation
1187 (p_api_version_number => 1.0,
1188 p_init_msg_lst => fnd_api.g_true,
1189 x_return_status => l_return_status,
1190 x_msg_count => l_msg_count,
1191 x_msg_data => l_msg_data,
1192 p_original_rsv_rec => l_rsv_rec,
1193 p_to_rsv_rec => l_rsv_new_rec,
1194 p_original_serial_number => l_dummy_sn, -- no serial contorl
1195 p_to_serial_number => l_dummy_sn, -- no serial control
1196 p_validation_flag => fnd_api.g_true,
1197 -- Bug 5099694
1198 p_over_reservation_flag =>3,
1199 x_to_reservation_id => l_new_rsv_id
1200 );
1201 --
1202 IF l_debug_on THEN
1203 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS TRANSFER RESERVATION: ' || L_RETURN_STATUS );
1204 WSH_DEBUG_SV.log(l_module_name,'New Rec: reservation id: ', l_new_rsv_id);
1205 END IF;
1206 --
1207
1208 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1209 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1210 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1211 RAISE FND_API.G_EXC_ERROR;
1212 END IF;
1213
1214 ELSE -- (i.e. Not an ATO )
1215 -- 2587777
1216 IF l_debug_on THEN
1217 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
1218 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation _rsv_new_rec.primary_reservation_quantity: ' || l_rsv_new_rec.primary_reservation_quantity );
1219
1220 END IF;
1221
1222 --l_rsv_new_rec.reservation_quantity := l_rsv_rec.reservation_quantity - l_qty_to_unreserve ; --commented bug 14149784
1223 -- HW OPMCONV - Added Qty2
1224 l_rsv_new_rec.primary_reservation_quantity := l_rsv_rec.primary_reservation_quantity - l_qty_to_unreserve ; --added bug 14149784
1225 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_rec.secondary_reservation_quantity - l_qty2_to_unreserve ;
1226 IF l_debug_on THEN
1227 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_rsv_new_rec.reservation_quantity: ' || l_rsv_new_rec.reservation_quantity );
1228 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1229 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation ll_rsv_new_rec.primary_reservation_quantity: ' || l_rsv_new_rec.primary_reservation_quantity );
1230 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_rsv_rec.reservation_quantity: ' || l_rsv_rec.reservation_quantity );
1231 -- HW OPMCONV - Added Qty2
1232 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation ll_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1233 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_rsv_rec.secondary_reservation_quantity: ' || l_rsv_rec.secondary_reservation_quantity );
1234
1235 END IF;
1236
1237 --l_rsv_new_rec.primary_reservation_quantity := l_rsv_rec.reservation_quantity - l_qty_to_unreserve ; --commented bug 14149784
1238 -- HW OPMCONV - Added Qty2
1239 --l_rsv_new_rec.secondary_reservation_quantity := l_rsv_rec.secondary_reservation_quantity - l_qty2_to_unreserve ;--commented bug 14149784 redundant code
1240
1241 IF l_debug_on THEN
1242 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO After calculation ll_rsv_new_rec.primary_reservation_quantity: ' || l_rsv_new_rec.primary_reservation_quantity );
1243 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO After calculation ll_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1244 END IF;
1245
1246 --
1247 IF l_debug_on THEN
1248 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.UPDATE_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
1249 END IF;
1250 --
1251 -- HW OPMCONV - NULL Qty2 if they are not presents
1252 IF ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
1253 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM ) THEN
1254
1255 l_rsv_new_rec.secondary_reservation_quantity := NULL;
1256
1257 END IF;
1258
1259 inv_reservation_pub.update_reservation
1260 (p_api_version_number => 1.0,
1261 p_init_msg_lst => fnd_api.g_true,
1262 x_return_status => l_return_status,
1263 x_msg_count => l_msg_count,
1264 x_msg_data => l_msg_data,
1265 p_original_rsv_rec => l_rsv_rec,
1266 p_to_rsv_rec => l_rsv_new_rec,
1267 p_original_serial_number => l_dummy_sn, -- no serial contorl
1268 p_to_serial_number => l_dummy_sn, -- no serial control
1269 p_validation_flag => fnd_api.g_true,
1270 -- Bug 5099694
1271 p_over_reservation_flag =>3
1272 );
1273 --
1274 IF l_debug_on THEN
1275 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE_RESERVATION: ' || L_RETURN_STATUS );
1276 END IF;
1277 --
1278 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN -- UnExp Erro
1279 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1280 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN -- STS Error
1281 IF l_msg_data is not null THEN -- msg.data not null
1282 fnd_message.set_encoded(l_msg_data);
1283 l_buffer := fnd_message.get;
1284 --
1285 IF l_debug_on THEN
1286 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit OE_MSG_PUB.ADD_TEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
1287 END IF;
1288 --
1289 oe_msg_pub.add_text(p_message_text => l_buffer);
1290 --
1291 IF l_debug_on THEN
1292 WSH_DEBUG_SV.logmsg(l_module_name, 'ERROR : '|| L_BUFFER );
1293 END IF;
1294 --
1295 END IF; -- msg.data not null
1296 RAISE FND_API.G_EXC_ERROR;
1297 END IF; -- UnExp Error
1298 END IF; -- (if ATO ..)
1299 else -- p_unreserve_mode = 'CYCLE_COUNT'
1300 --
1301 IF l_debug_on THEN
1302 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit TWO INV_PICK_RELEASE_PUB.RESERVE_UNCONFIRMED_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
1303 WSH_DEBUG_SV.log(l_module_name, 'p_missing_quantity: ' || l_qty_to_unreserve );
1304 WSH_DEBUG_SV.log(l_module_name, 'p_missing_quantity2: '|| l_qty2_to_unreserve );
1305
1306 END IF;
1307 --
1308
1309 IF ( l_qty2_to_unreserve = 0 or l_qty2_to_unreserve = FND_API.G_MISS_NUM) THEN
1310 l_qty2_to_unreserve := NULL;
1311 END IF;
1312
1313 Inv_Pick_Release_Pub.Reserve_Unconfirmed_Quantity(
1314 p_api_version => 1.0,
1315 p_init_msg_list => FND_API.G_FALSE,
1316 p_commit => FND_API.G_FALSE,
1317 x_return_status => l_reserve_status,
1318 x_msg_count => l_reserve_msg_count,
1319 x_msg_data => l_reserve_msg_data,
1320 p_missing_quantity => l_qty_to_unreserve ,
1321 p_missing_quantity2 => l_qty2_to_unreserve ,
1322 p_reservation_id => l_rsv_rec.reservation_id ,
1323 p_demand_source_header_id => l_sales_order_id,
1324 p_demand_source_line_id => l_line_rec.line_id,
1325 p_organization_id => l_rsv_rec.organization_id,
1326 p_inventory_item_id => l_rsv_rec.inventory_item_id,
1327 p_subinventory_code => l_rsv_rec.subinventory_code ,
1328 p_locator_id => l_rsv_rec.locator_id,
1329 p_revision => l_rsv_rec.revision,
1330 p_lot_number => l_rsv_rec.lot_number);
1331 IF ((l_reserve_status = WSH_UTIL_CORE.G_RET_STS_ERROR) or
1332 (l_reserve_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN -- Sts or UnExp. Error
1333 --
1334 IF l_debug_on THEN
1335 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE UNCONFIRMED QUANTITY FAILED' );
1336 END IF;
1337 --
1338 --
1339 IF l_debug_on THEN
1340 WSH_DEBUG_SV.logmsg(l_module_name, 'MESSAGE COUNT: '|| TO_CHAR ( L_RESERVE_MSG_COUNT ) );
1341 END IF;
1342 --
1343 IF (l_reserve_msg_count = 0) or (l_reserve_msg_count is NULL) THEN -- Msg. Count
1344 null;
1345 ELSE
1346 FOR i in 1 ..l_reserve_msg_count
1347 LOOP
1348 l_reserve_message := fnd_msg_pub.get(i,'T');
1349 l_reserve_message := replace(l_reserve_message,chr(0), ' ');
1350 --
1351 IF l_debug_on THEN
1352 WSH_DEBUG_SV.logmsg(l_module_name, L_RESERVE_MESSAGE );
1353 END IF;
1354 --
1355 END LOOP;
1356 END if; -- If Msg. Count
1357 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1358 --
1359 IF l_debug_on THEN
1360 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE_UNCONFIRMED_QUANTITY FAILED.. GOING ON... ' );
1361 END IF;
1362 --
1363 END IF; -- Sts or UnExp. Error
1364 END IF; -- UnReserve Mode
1365 goto end_of_loop; -- Bug 2100800: Get out of the loop as there should be nothing more to unreserve.
1366 END IF; -- Staged and Cycle-Count
1367 END IF; -- 2747520: Cancel Unstaged
1368 END LOOP;
1369 null;
1370
1371 -- HW OPMCONV - Removed brnaching the code
1372
1373 <<end_of_loop>>
1374
1375 --
1376 IF l_debug_on THEN
1377 WSH_DEBUG_SV.logmsg(l_module_name, 'EXITING UNRESERVE_DELIVERY_DETAIL ' );
1378 END IF;
1379 --
1380
1381 --
1382 IF l_debug_on THEN
1383 WSH_DEBUG_SV.pop(l_module_name);
1384 END IF;
1385 --
1386 EXCEPTION
1387 -- bug 2442178: added expected exceptions to appropriately set return status
1388 WHEN FND_API.G_EXC_ERROR THEN
1389 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1390 --
1391 IF l_debug_on THEN
1392 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1393 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
1394 END IF;
1395 --
1396 return;
1397 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1398 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1399 --
1400 IF l_debug_on THEN
1401 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1402 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
1403 END IF;
1404 --
1405 return;
1406
1407 WHEN OTHERS THEN
1408 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1409 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UNRESERVE_DELIVERY_DETAIL',l_module_name);
1410 --
1411 IF l_debug_on THEN
1412 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1413 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1414 END IF;
1415 --
1416 END Unreserve_delivery_detail ;
1417
1418
1419 --
1420 --Procedure: Assign_Detail_to_Delivery
1421 --Parameters: p_detail_id,
1422 -- p_delivery_id,
1423 -- x_return_status
1424 -- x_dlvy_has_lines : 'Y' :delivery has non-container lines.
1425 -- 'N' : delivery does not have non-container lines
1426 -- x_dlvy_freight_Terms_code : Delivery's freight term code
1427 --Description: This procedure will assign the specified
1428 -- delivery_detail to the specIFied delivery
1429 -- and return the status
1430
1431 PROCEDURE Assign_Detail_to_Delivery(
1432 P_DETAIL_ID IN number,
1433 P_DELIVERY_ID IN number,
1434 X_RETURN_STATUS OUT NOCOPY varchar2,
1435 x_dlvy_has_lines IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
1436 x_dlvy_freight_terms_code IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
1437 p_caller IN VARCHAR2 --bug 5100229
1438 ) IS
1439
1440 CURSOR c_topmost_container IS
1441 SELECT delivery_detail_id
1442 FROM wsh_delivery_assignments_v
1443 WHERE parent_delivery_detail_id is null
1444 START WITH delivery_detail_id =p_detail_id
1445 CONNECT BY prior parent_delivery_detail_id = delivery_detail_id
1446 and rownum < 10;
1447 --restricting to 10 levels (performance)
1448
1449 -- /== Workflow Changes
1450 --WF: CMR
1451 CURSOR c_get_del_lines_count(p_delv_id NUMBER) IS
1452 SELECT 1
1453 FROM dual
1454 WHERE EXISTS
1455 ( SELECT 'x'
1456 FROM wsh_delivery_assignments wda
1457 , wsh_delivery_details wdd
1458 WHERE wda.delivery_id = p_delv_id
1459 AND (wda.type IN ('S', 'O') OR
1460 wda.type IS NULL)
1461 AND wda.delivery_detail_id = wdd.delivery_detail_id
1462 AND wdd.container_flag = 'N'
1463 );
1464
1465 CURSOR c_get_picked_lines_count(p_delv_id NUMBER) IS
1466 SELECT 1
1467 FROM dual
1468 WHERE EXISTS
1469 ( SELECT 'x'
1470 FROM wsh_delivery_assignments wda
1471 , wsh_delivery_details wdd
1472 WHERE wda.delivery_id = p_delv_id
1473 AND (wda.type IN ('S', 'O') OR
1474 wda.type IS NULL)
1475 AND wda.delivery_detail_id = wdd.delivery_detail_id
1476 AND wdd.container_flag = 'N'
1477 AND wdd.pickable_flag = 'Y'
1478 AND wdd.released_status NOT IN ('R','X','N')
1479 );
1480
1481 CURSOR c_get_org_id ( p_delv_id NUMBER) IS
1482 SELECT organization_id
1483 FROM wsh_new_deliveries
1484 WHERE delivery_id=p_delv_id;
1485
1486 l_org_id NUMBER;
1487 l_del_lines_count NUMBER;
1488 l_process_started VARCHAR2(1);
1489 l_return_status VARCHAR2(1);
1490 l_wf_rs VARCHAR2(1);
1491 l_start_wf BOOLEAN;
1492 l_raise_pickinitiated_event BOOLEAN;
1493 l_count_picked_lines Number;
1494 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
1495 l_purged_count NUMBER;
1496 --WF: CMR
1497 l_raise_carrierselect_event BOOLEAN;
1498 l_del_ids WSH_UTIL_CORE.ID_tab_type;
1499 l_del_old_carrier_ids WSH_UTIL_CORE.ID_tab_type;
1500 -- Workflow Changes ==/
1501
1502
1503 l_topmost_delivery_detail_id NUMBER;
1504
1505 assign_fail exception;
1506
1507 --
1508 l_debug_on BOOLEAN;
1509 --
1510 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_DETAIL_TO_DELIVERY';
1511 --
1512 BEGIN
1513 --
1514 --
1515 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1516 --
1517 IF l_debug_on IS NULL
1518 THEN
1519 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1520 END IF;
1521 --
1522 IF l_debug_on THEN
1523 WSH_DEBUG_SV.push(l_module_name);
1524 --
1525 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
1526 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1527 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_has_lines',x_dlvy_has_lines);
1528 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_freight_terms_code',x_dlvy_freight_terms_code);
1529 END IF;
1530 --
1531 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1532
1533 /* if detail is not assigned to a container, update WDA. else find topmost container
1534 in the hierarchy (this can be a detail in case of loose details), iterate thru each
1535 level and assign each level to delivery any error in any level => rollback changes*/
1536
1537 SAVEPOINT before_assign_topmost_cont;
1538 OPEN c_topmost_container;
1539 FETCH c_topmost_container INTO l_topmost_delivery_detail_id;
1540 IF (c_topmost_container%FOUND) THEN
1541
1542 --/== Workflow Changes
1543 l_start_wf :=FALSE;
1544 l_raise_pickinitiated_event :=FALSE;
1545
1546 OPEN c_get_del_lines_count(p_delivery_id);
1547 FETCH c_get_del_lines_count INTO l_del_lines_count;
1548 CLOSE c_get_del_lines_count;
1549 l_del_lines_count := NVL(l_del_lines_count,0);
1550
1551 OPEN c_get_picked_lines_count(p_delivery_id);
1552 FETCH c_get_picked_lines_count INTO l_count_picked_lines;
1553 CLOSE c_get_picked_lines_count;
1554 l_count_picked_lines := NVL(l_count_picked_lines,0);
1555
1556 IF (l_del_lines_count = 0) THEN
1557 l_start_wf := TRUE;
1558 l_raise_pickinitiated_event :=TRUE;
1559 --WF: CMR CURRENTLY NOT IN USE
1560 --l_raise_carrierselect_event :=TRUE;
1561 ELSIF (l_count_picked_lines =0) THEN
1562 l_raise_pickinitiated_event :=TRUE;
1563 END IF;
1564 -- Workflow Changes ==/
1565 --
1566 IF l_debug_on THEN
1567 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_TOP_DETAIL_TO_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
1568 END IF;
1569 --
1570
1571 wsh_delivery_details_actions.assign_top_detail_to_delivery(
1572 P_DETAIL_ID => l_topmost_delivery_detail_id,
1573 P_DELIVERY_ID => p_delivery_id,
1574 X_RETURN_STATUS => x_return_status,
1575 x_dlvy_has_lines => x_dlvy_has_lines, -- J-IB-NPARIKH
1576 x_dlvy_freight_terms_code => x_dlvy_freight_terms_code, -- J-IB-NPARIKHS
1577 p_caller => p_caller --bug 5100229
1578 );
1579
1580 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1581 RAISE assign_fail;
1582 END IF;
1583
1584 --/== Workflow Changes
1585 IF (l_start_wf OR l_raise_pickinitiated_event ) THEN
1586 OPEN c_get_del_lines_count(p_delivery_id);
1587 FETCH c_get_del_lines_count INTO l_del_lines_count;
1588 CLOSE c_get_del_lines_count;
1589 l_del_lines_count := NVL(l_del_lines_count,0);
1590
1591 OPEN c_get_picked_lines_count(p_delivery_id);
1592 FETCH c_get_picked_lines_count INTO l_count_picked_lines;
1593 CLOSE c_get_picked_lines_count;
1594 l_count_picked_lines := NVL(l_count_picked_lines,0);
1595
1596 OPEN c_get_org_id ( p_delivery_id );
1597 FETCH c_get_org_id INTO l_org_id;
1598 CLOSE c_get_org_id;
1599 END IF;
1600
1601 IF ( l_start_wf AND l_del_lines_count > 0 )THEN
1602 -- Check for existing WF process and if it exists Call Purge Workflow
1603 -- After Purge, start a new workflow Process.
1604 -- Purging is required since a New Delivery Workflow will be selected according
1605 -- to the Delivery Detail Assigned to it
1606 IF l_debug_on THEN
1607 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.CHECK_WF_EXISTS',WSH_DEBUG_SV.C_PROC_LEVEL);
1608 END IF;
1609 WSH_WF_STD. Check_Wf_Exists(
1610 p_entity_type => 'DELIVERY',
1611 p_entity_id => p_delivery_id,
1612 x_wf_process_exists => l_process_started,
1613 x_return_status => l_return_status);
1614 IF l_debug_on THEN
1615 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
1616 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1617 END IF;
1618
1619 IF(l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS AND l_process_started='Y' ) THEN
1620 IF l_debug_on THEN
1621 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
1622 END IF;
1623 l_del_entity_ids(1) := p_delivery_id;
1624 WSH_WF_STD.Purge_Entity(
1625 p_entity_type => 'DELIVERY',
1626 p_entity_ids => l_del_entity_ids,
1627 x_success_count => l_purged_count,
1628 x_return_status => l_return_status);
1629 IF l_debug_on THEN
1630 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
1631 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1632 END IF;
1633 END IF; -- If WorkFlow Exists
1634
1635 IF(l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1636 IF l_debug_on THEN
1637 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_WF_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
1638 END IF;
1639
1640 WSH_WF_STD.start_wf_process(
1641 p_entity_type => 'DELIVERY',
1642 p_entity_id => p_delivery_id,
1643 p_organization_id =>l_org_id,
1644 x_process_started =>l_process_started,
1645 x_return_status =>l_return_status
1646 );
1647 IF l_debug_on THEN
1648 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
1649 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1650 END IF;
1651 END IF;
1652
1653 END IF;-- If Start Workflow
1654
1655 --Raise Event: Pick To Pod Workflow
1656 IF ( l_raise_pickinitiated_event AND l_count_picked_lines > 0 ) THEN
1657 IF l_debug_on THEN
1658 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
1659 END IF;
1660 WSH_WF_STD.Raise_Event(
1661 p_entity_type => 'DELIVERY',
1662 p_entity_id => p_delivery_id,
1663 p_event => 'oracle.apps.wsh.delivery.pik.pickinitiated' ,
1664 p_organization_id => l_org_id,
1665 x_return_status => l_wf_rs ) ;
1666 IF l_debug_on THEN
1667 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', p_delivery_id );
1668 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
1669 END IF;
1670 END IF;
1671 -- Done Raise Event: Pick To Pod Workflow
1672 /* CURRENTLY NOT IN USE
1673 --WF: CMR
1674 IF (l_raise_carrierselect_event) THEN
1675 l_del_ids(1) := p_delivery_id;
1676 WSH_WF_STD.Get_Carrier(p_del_ids => l_del_ids,
1677 x_del_old_carrier_ids => l_del_old_carrier_ids,
1678 x_return_status => l_wf_rs);
1679
1680 IF (l_del_old_carrier_ids(1) IS NOT NULL) THEN
1681
1682 WSH_WF_STD.Assign_Unassign_Carrier(p_delivery_id => l_del_ids(1),
1683 p_old_carrier_id => NULL,
1684 p_new_carrier_id => l_del_old_carrier_ids(1),
1685 x_return_status => l_wf_rs);
1686 END IF;
1687
1688 END IF;
1689 */
1690 -- Workflow Changes ==/
1691
1692 END IF;--for topmost container
1693 CLOSE c_topmost_container;
1694 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1695 --
1696 IF l_debug_on THEN
1697 WSH_DEBUG_SV.pop(l_module_name);
1698 END IF;
1699 --
1700 return;
1701 --
1702 exception
1703 WHEN assign_fail THEN
1704 ROLLBACK TO before_assign_topmost_cont;
1705 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1706 wsh_util_core.add_message(x_return_status,l_module_name);
1707 --
1708 IF l_debug_on THEN
1709 WSH_DEBUG_SV.logmsg(l_module_name,'ASSIGN_FAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1710 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ASSIGN_FAIL');
1711 END IF;
1712 --
1713 WHEN others THEN
1714 ROLLBACK TO before_assign_topmost_cont;
1715 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1716 wsh_util_core.add_message(x_return_status,l_module_name);
1717 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DELIVERY_DETAIL',l_module_name);
1718
1719 --
1720 IF l_debug_on THEN
1721 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1722 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1723 END IF;
1724 --
1725 END Assign_Detail_to_Delivery;
1726
1727 -------------------------------------------------------------------
1728 -- This procedure is only for backward compatibility. No one should call
1729 -- this procedure.
1730 -------------------------------------------------------------------
1731
1732 PROCEDURE Assign_Detail_to_Delivery(
1733 P_DETAIL_ID IN NUMBER,
1734 P_DELIVERY_ID IN NUMBER,
1735 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1736 p_caller IN VARCHAR2 --bug 5100229
1737 ) IS
1738
1739 --
1740 l_debug_on BOOLEAN;
1741 --
1742 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'Assign_Detail_to_Delivery';
1743 --
1744 l_has_lines VARCHAR2(1);
1745 l_dlvy_freight_terms_code VARCHAR2(30);
1746 --
1747 BEGIN
1748 --
1749 --
1750 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1751 --
1752 IF l_debug_on IS NULL
1753 THEN
1754 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1755 END IF;
1756 --
1757 IF l_debug_on THEN
1758 WSH_DEBUG_SV.push(l_module_name);
1759 --
1760 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
1761 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1762 END IF;
1763 --
1764 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1765 --
1766 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
1767 (
1768 p_delivery_id => p_delivery_id
1769 );
1770 --
1771 Assign_Detail_to_Delivery
1772 (
1773 p_detail_id => p_detail_id,
1774 p_delivery_id => p_delivery_id,
1775 X_RETURN_STATUS => X_RETURN_STATUS,
1776 x_dlvy_has_lines => l_has_lines,
1777 x_dlvy_freight_Terms_code => l_dlvy_freight_Terms_code,
1778 p_caller => p_caller --bug 5100229
1779 );
1780 --
1781 IF l_debug_on THEN
1782 WSH_DEBUG_SV.pop(l_module_name);
1783 END IF;
1784 --
1785 EXCEPTION
1786 WHEN others THEN
1787 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1788 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.Assign_Detail_to_Delivery',l_module_name);
1789 --
1790 IF l_debug_on THEN
1791 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1792 END IF;
1793 END Assign_Detail_to_Delivery;
1794
1795 -- OTM R12 : assign delivery detail
1796
1797 --========================================================================
1798 -- PROCEDURE : Pre_Otm_Assign_Del_Detail
1799 --
1800 -- API added for R12 Glog Integration
1801 --
1802 -- PURPOSE : To check whether the delivery was empty(no actual details)
1803 -- before any delivery_detail is assigned. Also checks if
1804 -- if detail and containers are already on the same delivery
1805 --
1806 -- PARAMETERS:
1807 -- p_delivery_id delivery id
1808 -- p_detail_id delivery detail id
1809 -- p_container1_id container 1's id
1810 -- p_container2_id container 2's id
1811 -- p_assignment_type assignment types can be DD2D, DD2C, C2C.
1812 -- this covers detail to delivery, detail to container,
1813 -- container to container, and container to delivery will
1814 -- be same as DD2D.
1815 -- x_delivery_was_empty TRUE if it was empty, FALSE if it was not empty
1816 -- x_tms_update TRUE if tms update needed, FALSE if detail and
1817 -- containers already on the same delivery
1818 -- x_gross_weight1 the gross weight of the detail or container getting assigned
1819 -- x_gross_weight2 the gross weight of the container being assigned to.
1820 -- x_return status SUCCESS or ERROR
1821 --========================================================================
1822
1823
1824 PROCEDURE Pre_Otm_Assign_Del_Detail
1825 (p_delivery_id IN NUMBER,
1826 p_detail_id IN NUMBER,
1827 p_container1_id IN NUMBER,
1828 p_container2_id IN NUMBER,
1829 p_assignment_type IN VARCHAR2,
1830 x_delivery_was_empty OUT NOCOPY BOOLEAN,
1831 x_assign_update OUT NOCOPY BOOLEAN,
1832 x_gross_weight1 OUT NOCOPY NUMBER,
1833 x_gross_weight2 OUT NOCOPY NUMBER,
1834 x_return_status OUT NOCOPY VARCHAR2) IS
1835
1836 CURSOR c_get_delivery_id(p_id IN NUMBER) IS
1837 SELECT delivery_id
1838 FROM wsh_delivery_assignments
1839 WHERE delivery_detail_id = p_id;
1840
1841 CURSOR c_get_gross_weight (p_id NUMBER) IS
1842 SELECT nvl(gross_weight, 0)
1843 FROM wsh_delivery_details
1844 WHERE delivery_detail_id = p_id;
1845
1846 l_is_delivery_empty VARCHAR2(1);
1847 l_delivery1 NUMBER;
1848 l_delivery2 NUMBER;
1849 l_debug_on BOOLEAN;
1850 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||G_PACKAGE_NAME||'.'||'Pre_Otm_Assign_Del_Detail';
1851
1852
1853 BEGIN
1854
1855 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1856 --
1857 IF l_debug_on IS NULL
1858 THEN
1859 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1860 END IF;
1861 --
1862 IF l_debug_on THEN
1863 WSH_DEBUG_SV.push(l_module_name);
1864 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
1865 WSH_DEBUG_SV.log(l_module_name, 'P_DETAIL_ID', p_detail_id);
1866 WSH_DEBUG_SV.log(l_module_name, 'P_CONTAINER1_ID', p_container1_id);
1867 WSH_DEBUG_SV.log(l_module_name, 'P_CONTAINER2_ID', p_container2_id);
1868 WSH_DEBUG_SV.log(l_module_name, 'P_ASSIGNMENT_TYPE', p_assignment_type);
1869 END IF;
1870
1871 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1872 x_delivery_was_empty := FALSE;
1873 x_assign_update := TRUE; -- default to true unless everything on the same delivery.
1874
1875 IF (p_assignment_type = 'DD2D') THEN --detail to delivery, delivery id provided
1876
1877 OPEN c_get_delivery_id(p_detail_id);
1878 FETCH c_get_delivery_id INTO l_delivery1;
1879 CLOSE c_get_delivery_id;
1880
1881 OPEN c_get_gross_weight(p_detail_id);
1882 FETCH c_get_gross_weight INTO x_gross_weight1;
1883 CLOSE c_get_gross_weight;
1884
1885 IF (l_delivery1 = p_delivery_id) THEN --already assigned to the delivery
1886 x_assign_update := FALSE; --same delivery, no need to update
1887 ELSE
1888
1889 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(p_delivery_id);
1890 IF (l_is_delivery_empty = 'Y') THEN
1891 x_delivery_was_empty := TRUE;
1892 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1893 IF l_debug_on THEN
1894 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1895 END IF;
1896 raise FND_API.G_EXC_ERROR;
1897 END IF;
1898 END IF;
1899
1900 ELSIF (p_assignment_type IN ('DD2C', 'C2C')) THEN
1901
1902 IF (p_assignment_type = 'DD2C') THEN
1903 --detail to container, check delivery id of p_detail_id and p_container1_id
1904 OPEN c_get_delivery_id(p_detail_id);
1905 FETCH c_get_delivery_id INTO l_delivery1;
1906 CLOSE c_get_delivery_id;
1907
1908 OPEN c_get_delivery_id(p_container1_id);
1909 FETCH c_get_delivery_id INTO l_delivery2;
1910 CLOSE c_get_delivery_id;
1911
1912 OPEN c_get_gross_weight(p_detail_id);
1913 FETCH c_get_gross_weight INTO x_gross_weight1;
1914 CLOSE c_get_gross_weight;
1915
1916 OPEN c_get_gross_weight(p_container1_id);
1917 FETCH c_get_gross_weight INTO x_gross_weight2;
1918 CLOSE c_get_gross_weight;
1919
1920 ELSE
1921 --container to container, check delivery id of p_container1_id and p_container2_id
1922 OPEN c_get_delivery_id(p_container1_id);
1923 FETCH c_get_delivery_id INTO l_delivery1;
1924 CLOSE c_get_delivery_id;
1925
1926 OPEN c_get_delivery_id(p_container2_id);
1927 FETCH c_get_delivery_id INTO l_delivery2;
1928 CLOSE c_get_delivery_id;
1929
1930 OPEN c_get_gross_weight(p_container1_id);
1931 FETCH c_get_gross_weight INTO x_gross_weight1;
1932 CLOSE c_get_gross_weight;
1933
1934 OPEN c_get_gross_weight(p_container2_id);
1935 FETCH c_get_gross_weight INTO x_gross_weight2;
1936 CLOSE c_get_gross_weight;
1937
1938 END IF;
1939
1940 IF (l_delivery1 = l_delivery2) THEN --both belong to same delivery and not NULL
1941 x_assign_update := FALSE; --same delivery, no need to update
1942 ELSIF (l_delivery1 IS NOT NULL) THEN --cannot have both NOT NULL
1943
1944 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_delivery1);
1945 IF (l_is_delivery_empty = 'Y') THEN
1946 x_delivery_was_empty := TRUE;
1947 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1948 IF l_debug_on THEN
1949 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1950 END IF;
1951 raise FND_API.G_EXC_ERROR;
1952 END IF;
1953 ELSIF (l_delivery2 IS NOT NULL) THEN
1954
1955 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_delivery2);
1956 IF (l_is_delivery_empty = 'Y') THEN
1957 x_delivery_was_empty := TRUE;
1958 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1959 IF l_debug_on THEN
1960 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1961 END IF;
1962 raise FND_API.G_EXC_ERROR;
1963 END IF;
1964 END IF;
1965
1966 ELSE
1967 IF l_debug_on THEN
1968 WSH_DEBUG_SV.log(l_module_name,'Error in wrong assignment_type', p_assignment_type);
1969 END IF;
1970 raise FND_API.G_EXC_ERROR;
1971 END IF;
1972
1973 IF l_debug_on THEN
1974 WSH_DEBUG_SV.log(l_module_name, 'x_delivery_was_empty', x_delivery_was_empty);
1975 WSH_DEBUG_SV.log(l_module_name, 'x_assign_update', x_assign_update);
1976 WSH_DEBUG_SV.log(l_module_name, 'x_gross_weight1', x_gross_weight1);
1977 WSH_DEBUG_SV.log(l_module_name, 'x_gross_weight2', x_gross_weight2);
1978 END IF;
1979
1980 IF l_debug_on THEN
1981 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
1982 WSH_DEBUG_SV.pop(l_module_name);
1983 END IF;
1984
1985 EXCEPTION
1986 WHEN FND_API.G_EXC_ERROR THEN
1987 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1988
1989 IF c_get_gross_weight%ISOPEN THEN
1990 CLOSE c_get_gross_weight;
1991 END IF;
1992
1993 IF c_get_delivery_id%ISOPEN THEN
1994 CLOSE c_get_delivery_id;
1995 END IF;
1996
1997 --
1998 IF l_debug_on THEN
1999 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2000 WSH_DEBUG_SV.pop(l_module_name);
2001 END IF;
2002 --
2003 RETURN;
2004 WHEN OTHERS THEN
2005 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2006
2007 IF c_get_gross_weight%ISOPEN THEN
2008 CLOSE c_get_gross_weight;
2009 END IF;
2010
2011 IF c_get_delivery_id%ISOPEN THEN
2012 CLOSE c_get_delivery_id;
2013 END IF;
2014
2015 --
2016 IF l_debug_on THEN
2017 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2018 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION OTHERS');
2019 END IF;
2020 --
2021 RETURN;
2022
2023 END Pre_Otm_Assign_Del_Detail;
2024
2025 --========================================================================
2026 -- PROCEDURE : Post_Otm_Assign_Del_Detail
2027 --
2028 -- API added for R12 Glog Integration
2029 --
2030 -- PURPOSE : updates delivery's tms_interface_flag via API
2031 -- based on the changes of detail assignments to the delivery
2032 --
2033 -- PARAMETERS:
2034 -- p_delivery_id delivery_id
2035 -- p_delivery_was_empty whether the delivery was empty before the new
2036 -- assignment
2037 -- p_tms_interface_flag delivery's latest tms_interface_flag if available
2038 -- p_gross_weight delivery detail's gross weight if avilable
2039 -- p_delivery_detail_ids table of delivery detail ids to get gross weight
2040 -- x_return status SUCCESS or ERROR
2041 --========================================================================
2042
2043 PROCEDURE Post_Otm_Assign_Del_Detail
2044 (p_delivery_id IN NUMBER,
2045 p_delivery_was_empty IN BOOLEAN,
2046 p_tms_interface_flag IN VARCHAR2,
2047 p_gross_weight IN NUMBER,
2048 x_return_status OUT NOCOPY VARCHAR2) IS
2049
2050
2051 l_call_update VARCHAR2(1);
2052 l_return_status VARCHAR2(1);
2053 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
2054 l_is_delivery_empty VARCHAR2(1);
2055 l_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
2056 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
2057 l_delivery_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
2058 l_num_warnings NUMBER;
2059 l_debug_on BOOLEAN;
2060 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||G_PACKAGE_NAME||'.'||'Post_Otm_Assign_Del_Detail';
2061
2062 BEGIN
2063
2064 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2065 --
2066 IF l_debug_on IS NULL
2067 THEN
2068 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2069 END IF;
2070 --
2071 IF l_debug_on THEN
2072 WSH_DEBUG_SV.push(l_module_name);
2073 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
2074 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_WAS_EMPTY', p_delivery_was_empty);
2075 WSH_DEBUG_SV.log(l_module_name, 'P_TMS_INTERFACE_FLAG', p_tms_interface_flag);
2076 WSH_DEBUG_SV.log(l_module_name, 'P_GROSS_WEIGHT', p_gross_weight);
2077 END IF;
2078
2079 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2080
2081 l_call_update := 'Y';
2082 l_delivery_id_tab(1) := p_delivery_id;
2083
2084 IF (p_delivery_was_empty) THEN
2085 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(p_delivery_id);
2086
2087 IF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
2088 IF l_debug_on THEN
2089 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
2090 END IF;
2091 raise FND_API.G_EXC_ERROR;
2092 ELSIF (l_is_delivery_empty = 'Y') THEN
2093 l_call_update := 'N';
2094 ELSIF (l_is_delivery_empty = 'N') THEN
2095 IF (p_tms_interface_flag IS NOT NULL) THEN
2096 l_tms_interface_flag := p_tms_interface_flag;
2097 ELSE
2098 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
2099 p_delivery_id => p_delivery_id,
2100 x_delivery_rec => l_delivery_info,
2101 x_return_status => l_return_status);
2102
2103 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
2104 IF l_debug_on THEN
2105 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
2106 END IF;
2107 raise FND_API.G_EXC_ERROR;
2108 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
2109 l_num_warnings := l_num_warnings + 1;
2110 END IF;
2111 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
2112
2113 END IF;
2114
2115 IF l_debug_on THEN
2116 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_WAS_EMPTY - L_TMS_INTERFACE_FLAG', l_tms_interface_flag);
2117 END IF;
2118
2119 IF (l_tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT) THEN
2120 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED;
2121 ELSIF (l_tms_interface_flag in
2122 (WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
2123 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS)) THEN
2124 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
2125 ELSE
2126 l_call_update := 'N';
2127 END IF;
2128 END IF;
2129 ELSE -- (NOT p_delivery_was_empty)
2130 l_interface_flag_tab(1) := NULL;
2131 --Bug7608629
2132 --removed code which checked for gross weight
2133 --now irrespective of gross weight UPDATE_TMS_INTERFACE_FLAG will be called
2134 END IF;
2135
2136 IF (l_call_update = 'Y') THEN
2137 WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG(
2138 p_delivery_id_tab => l_delivery_id_tab,
2139 p_tms_interface_flag_tab => l_interface_flag_tab,
2140 x_return_status => l_return_status);
2141
2142 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
2143 IF l_debug_on THEN
2144 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG '||l_return_status);
2145 END IF;
2146 raise FND_API.G_EXC_ERROR;
2147 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
2148 l_num_warnings := l_num_warnings + 1;
2149 END IF;
2150 END IF;
2151
2152
2153 IF (l_num_warnings > 0) THEN
2154 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2155 END IF;
2156
2157 IF l_debug_on THEN
2158 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2159 WSH_DEBUG_SV.pop(l_module_name);
2160 END IF;
2161
2162 EXCEPTION
2163 WHEN FND_API.G_EXC_ERROR THEN
2164 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2165 --
2166 IF l_debug_on THEN
2167 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2168 WSH_DEBUG_SV.pop(l_module_name);
2169 END IF;
2170 --
2171 RETURN;
2172 WHEN OTHERS THEN
2173 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2174 --
2175 IF l_debug_on THEN
2176 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2177 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION OTHERS');
2178 END IF;
2179 --
2180 RETURN;
2181 END Post_Otm_Assign_Del_Detail;
2182
2183 -- End of OTM R12 : assign delivery detail
2184
2185
2186 --
2187 --Procedure: Assign_Detail_to_Cont
2188 --Parameters: p_detail_id,
2189 -- p_parent_detail_id,
2190 -- x_return_status
2191 --Description: This procedure will assign the specified
2192 -- delivery_detail to the specIFied container
2193 -- and return the status
2194
2195 -- if container is already assigned to a delivery,
2196 -- its parent containers and child containers must
2197 -- be also assigned to the same delivery already.
2198 -- So all it needs to do IS just get the delivery_id
2199 -- from the current container and assign it to the detail also.
2200
2201 -- if the detail is already assigned to a delivery,
2202 -- then drill up and down to update the delivery id for all the
2203 -- parent and chile containers
2204
2205
2206
2207 PROCEDURE Assign_Detail_To_Cont(
2208 p_detail_id IN NUMBER,
2209 p_parent_detail_id IN NUMBER,
2210 x_return_status OUT NOCOPY VARCHAR2)
2211 IS
2212
2213 l_del_id_for_container c_del_id_for_cont_or_detail%ROWTYPE;
2214 l_del_id_for_detail c_del_id_for_cont_or_detail%ROWTYPE;
2215
2216 l_group_by_flags WSH_DELIVERY_AUTOCREATE.group_by_flags_rec_type;
2217
2218 invalid_detail exception;
2219 l_plan_flag varchar2(1);
2220 l_content_count NUMBER;
2221
2222 /* H projects: pricing integration csun */
2223 m NUMBER := 0;
2224 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
2225 l_return_status VARCHAR2(1);
2226 mark_reprice_error EXCEPTION;
2227 l_ship_to NUMBER;
2228 l_container_has_content BOOLEAN;
2229 l_mdc_detail_tab WSH_UTIL_CORE.Id_Tab_Type;
2230 l_ignore_det_tab WSH_UTIL_CORE.Id_Tab_Type;
2231
2232 --
2233 l_debug_on BOOLEAN;
2234 --
2235 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_DETAIL_TO_CONT';
2236 --
2237 l_display_error BOOLEAN;
2238
2239 CURSOR c_get_shipto (v_container_id NUMBER) IS
2240 SELECT ship_to_location_id
2241 FROM wsh_delivery_details
2242 WHERE delivery_detail_id = v_container_id;
2243
2244 -- Bug 3715176
2245 CURSOR c_get_plan_flag (v_delivery_id NUMBER) IS
2246 SELECT nvl(planned_flag,'N')
2247 FROM wsh_new_deliveries
2248 WHERE delivery_id = v_delivery_id;
2249
2250 CURSOR c_get_content_count(v_delivery_detail_id NUMBER) IS
2251 SELECT count(*)
2252 FROM wsh_delivery_assignments_v wda
2253 WHERE wda.parent_delivery_detail_id = v_delivery_detail_id And rownum = 1;
2254 -- Bug 3715176
2255
2256 -- Bug 4452930
2257 CURSOR c_topmost_container(p_detail_id NUMBER) IS
2258 SELECT delivery_detail_id
2259 FROM wsh_delivery_assignments_v
2260 WHERE parent_delivery_detail_id is null
2261 START WITH delivery_detail_id =p_detail_id
2262 CONNECT BY prior parent_delivery_detail_id = delivery_detail_id
2263 and rownum < 10;
2264 --restricting to 10 levels (performance)
2265 l_topmost_cont NUMBER;
2266
2267 -- Bug 4452930
2268
2269 l_attr_tab wsh_delivery_autocreate.grp_attr_tab_type;
2270 l_group_tab wsh_delivery_autocreate.grp_attr_tab_type;
2271 l_action_rec wsh_delivery_autocreate.action_rec_type;
2272 l_target_rec wsh_delivery_autocreate.grp_attr_rec_type;
2273 l_matched_entities wsh_util_core.id_tab_type;
2274 l_out_rec wsh_delivery_autocreate.out_rec_type;
2275 l_group_index NUMBER;
2276
2277 l_num_warnings number := 0;
2278
2279 -- K LPN CONV. rv
2280 l_wms_org VARCHAR2(10) := 'N';
2281 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
2282 l_sync_tmp_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
2283 l_operation_type VARCHAR2(100);
2284 -- K LPN CONV. rv
2285
2286 -- OTM R12 : update delivery
2287 l_delivery_info_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2288 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
2289 l_new_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
2290 l_tms_update VARCHAR2(1);
2291 l_trip_not_found VARCHAR2(1);
2292 l_trip_info_rec WSH_DELIVERY_VALIDATIONS.trip_info_rec_type;
2293 l_tms_version_number WSH_NEW_DELIVERIES.TMS_VERSION_NUMBER%TYPE;
2294 l_gc3_is_installed VARCHAR2(1);
2295
2296 -- End of OTM R12 : update delivery
2297
2298 -- OTM R12 : assign delivery detail
2299 l_delivery_was_empty BOOLEAN;
2300 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
2301 l_gross_weight1 WSH_NEW_DELIVERIES.GROSS_WEIGHT%TYPE;
2302 l_gross_weight2 WSH_NEW_DELIVERIES.GROSS_WEIGHT%TYPE;
2303 l_delivery_detail_ids WSH_GLBL_VAR_STRCT_GRP.NUM_TBL_TYPE;
2304 l_assign_update BOOLEAN;
2305
2306 -- End of OTM R12 : assign delivery detail
2307
2308 BEGIN
2309 --
2310 --
2311 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2312 --
2313 IF l_debug_on IS NULL
2314 THEN
2315 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2316 END IF;
2317 --
2318 IF l_debug_on THEN
2319 WSH_DEBUG_SV.push(l_module_name);
2320 --
2321 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
2322 WSH_DEBUG_SV.log(l_module_name,'P_PARENT_DETAIL_ID',P_PARENT_DETAIL_ID);
2323 END IF;
2324 --
2325 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2326
2327 -- OTM R12
2328 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
2329
2330 IF (l_gc3_is_installed IS NULL) THEN
2331 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
2332 END IF;
2333 l_assign_update := FALSE; --default assignment tms update to false
2334 -- End of OTM R12
2335
2336
2337 OPEN c_del_id_for_cont_or_detail(p_parent_detail_id);
2338 FETCH c_del_id_for_cont_or_detail into l_del_id_FOR_container;
2339 CLOSE c_del_id_for_cont_or_detail;
2340
2341 OPEN c_del_id_for_cont_or_detail(p_detail_id);
2342 FETCH c_del_id_for_cont_or_detail into l_del_id_for_detail;
2343 CLOSE c_del_id_for_cont_or_detail;
2344
2345 -- K LPN CONV. rv
2346 l_wms_org := wsh_util_validate.check_wms_org(l_del_id_FOR_container.organization_id);
2347 -- K LPN CONV. rv
2348
2349 -- J: W/V Changes
2350 -- Return if the dd is already assigned to the specified container
2351 IF l_del_id_for_detail.parent_delivery_detail_id = p_parent_detail_id THEN
2352 IF l_debug_on THEN
2353 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already assigned to '||p_parent_detail_id||'. Returning');
2354 WSH_DEBUG_SV.pop(l_module_name);
2355 END IF;
2356 return;
2357 END IF;
2358
2359
2360 OPEN c_get_shipto(p_parent_detail_id);
2361 FETCH c_get_shipto into l_ship_to;
2362 IF c_get_shipto%NOTFOUND THEN
2363 l_ship_to := NULL;
2364 END IF;
2365 CLOSE c_get_shipto;
2366
2367 l_container_has_content := l_ship_to IS NOT NULL;
2368
2369 IF l_debug_on THEN
2370 WSH_DEBUG_SV.log(l_module_name,'l_del_id_FOR_container',
2371 l_del_id_FOR_container.delivery_id);
2372 WSH_DEBUG_SV.log(l_module_name,'l_del_id_FOR_detail',
2373 l_del_id_for_detail.delivery_id);
2374 WSH_DEBUG_SV.log(l_module_name,'l_ship_to', l_ship_to);
2375 END IF;
2376 /* Added code to check for grouping attributes */
2377 IF (l_del_id_for_detail.organization_id <>
2378 l_del_id_for_container.organization_id) THEN
2379 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_ASSG_ORG_DIFF');
2380 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2381 --
2382 IF l_debug_on THEN
2383 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2384 END IF;
2385 --
2386 FND_MESSAGE.SET_TOKEN('ENTITY2',
2387 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2388 p_parent_detail_id));
2389 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2390 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2391 --
2392 IF l_debug_on THEN
2393 WSH_DEBUG_SV.pop(l_module_name);
2394 END IF;
2395 --
2396 RETURN;
2397 END IF;
2398 IF (l_del_id_for_detail.ship_from_location_id <>
2399 l_del_id_for_container.ship_from_location_id) THEN
2400 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2401 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2402 --
2403 IF l_debug_on THEN
2404 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2405 END IF;
2406 --
2407 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2408 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2409 p_parent_detail_id));
2410 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2411 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2412 --
2413 IF l_debug_on THEN
2414 WSH_DEBUG_SV.pop(l_module_name);
2415 END IF;
2416 --
2417 RETURN;
2418 END IF;
2419
2420 --J TP Release
2421 IF (l_del_id_for_detail.ignore_for_planning <>
2422 l_del_id_for_container.ignore_for_planning) THEN
2423
2424 -- R12: MDC
2425 -- If called by WMS, and line is part of a consol delivery,
2426 -- then the ignore for planning flag is always 'Y'. For WMS,
2427 -- we need to set the parent consol's ignore for planning status
2428 -- to be 'Y' before we attempt to pack.
2429
2430 IF (l_wms_org = 'Y') AND
2431 ((l_del_id_for_detail.wda_type = 'O') OR (l_del_id_for_container.wda_type = 'O'))
2432 THEN --{
2433 IF l_del_id_for_detail.wda_type = 'O' THEN
2434 l_ignore_det_tab(1) := p_parent_detail_id;
2435 ELSE
2436 l_ignore_det_tab(1) := p_detail_id;
2437 END IF;
2438
2439 WSH_TP_RELEASE.change_ignoreplan_status
2440 (p_entity => 'DLVB',
2441 p_in_ids => l_ignore_det_tab,
2442 p_action_code => 'IGNORE_PLAN',
2443 x_return_status => x_return_status);
2444
2445 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2446
2447 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
2448 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2449 --
2450 IF l_debug_on THEN
2451 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2452 END IF;
2453 --
2454 FND_MESSAGE.SET_TOKEN('ENTITY2',
2455 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2456 p_parent_detail_id));
2457 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2458 --
2459 IF l_debug_on THEN
2460 WSH_DEBUG_SV.pop(l_module_name);
2461 END IF;
2462 --
2463 RETURN;
2464
2465
2466 END IF;
2467
2468 ELSE --}
2469 l_display_error := TRUE;
2470 IF (l_wms_org = 'Y') AND (NOT l_container_has_content) THEN--{
2471 --
2472 l_ignore_det_tab(1) := p_parent_detail_id;
2473 WSH_TP_RELEASE.change_ignoreplan_status
2474 (p_entity => 'DLVB',
2475 p_in_ids => l_ignore_det_tab,
2476 p_action_code => 'IGNORE_PLAN',
2477 x_return_status => l_return_status);
2478
2479 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN --{
2480 l_display_error := TRUE;
2481 ELSE
2482 l_display_error := FALSE;
2483 END IF;--}
2484 END IF ; --}
2485
2486 IF l_display_error THEN --{
2487 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
2488 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2489 --
2490 IF l_debug_on THEN
2491 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2492 END IF;
2493 --
2494 FND_MESSAGE.SET_TOKEN('ENTITY2',
2495 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2496 p_parent_detail_id));
2497 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2498 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2499 --
2500 IF l_debug_on THEN
2501 WSH_DEBUG_SV.pop(l_module_name);
2502 END IF;
2503 --
2504 RETURN;
2505 END IF; --}
2506 END IF;
2507 END IF;
2508
2509 --
2510 -- J-IB-NPARIKH-{
2511 --
2512 IF (l_del_id_for_detail.line_direction <> l_del_id_for_container.line_direction)
2513 THEN
2514 --{
2515 --
2516 -- O line can be assigned to empty IO container
2517 -- IO line can be assigned to empty O container
2518 -- Otherwise, line and container's line direction must match
2519 --
2520 IF l_del_id_for_detail.line_direction IN ('O','IO')
2521 AND l_del_id_for_container.line_direction IN ('O','IO')
2522 THEN
2523 --{
2524 NULL;
2525 --}
2526 ELSE
2527 --{
2528 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2529 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2530 --
2531 IF l_debug_on THEN
2532 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2533 END IF;
2534 --
2535 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2536 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2537 p_parent_detail_id));
2538 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2539 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2540 --
2541 IF l_debug_on THEN
2542 WSH_DEBUG_SV.pop(l_module_name);
2543 END IF;
2544 --
2545 RETURN;
2546 --}
2547 END IF;
2548 --}
2549 END IF;
2550 --
2551 -- J-IB-NPARIKH-}
2552 --
2553 --
2554 IF l_debug_on THEN
2555 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
2556 END IF;
2557 --
2558 WSH_DELIVERY_AUTOCREATE.get_group_by_attr(
2559 p_organization_id => l_del_id_for_detail.organization_id,
2560 p_client_id => l_del_id_for_detail.client_id, -- LSP PROJECT :
2561 x_group_by_flags => l_group_by_flags,
2562 x_return_status => x_return_status);
2563
2564 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2565 x_return_status := x_return_status;
2566 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2567 --
2568 IF l_debug_on THEN
2569 WSH_DEBUG_SV.pop(l_module_name);
2570 END IF;
2571 --
2572 RETURN;
2573 END IF;
2574
2575 /*---------
2576 When the container has no content then do not do these checks
2577 since all these attributes on the container will be null.
2578 ----------*/
2579
2580 IF l_container_has_content THEN
2581 IF l_debug_on THEN
2582 WSH_DEBUG_SV.log(l_module_name,'l_group_by_flags.customer',
2583 l_group_by_flags.customer);
2584 WSH_DEBUG_SV.log(l_module_name,'del_id_for_detail.customer',
2585 l_del_id_for_detail.customer_id);
2586 WSH_DEBUG_SV.log(l_module_name,'id_for_container.customer',
2587 l_del_id_for_container.customer_id);
2588 END IF;
2589
2590 --- Bug 3715176
2591 -- If delivery is same for container and line then it should not check firm status.
2592 IF l_del_id_for_detail.delivery_id = l_del_id_for_container.delivery_id then
2593 NULL;
2594
2595 Elsif l_del_id_for_detail.delivery_id is NOT NULL OR
2596 l_del_id_for_container.delivery_id is NOT NULL then
2597 Open c_get_content_count(p_parent_detail_id);
2598 Fetch c_get_content_count into l_content_count;
2599 Close c_get_content_count;
2600
2601 IF l_content_count > 0 THEN
2602 IF l_del_id_for_detail.delivery_id IS NOT NULL then
2603 OPEN c_get_plan_flag(l_del_id_for_detail.delivery_id);
2604 FETCH c_get_plan_flag into l_plan_flag;
2605 CLOSE c_get_plan_flag;
2606
2607 if l_plan_flag <> 'N' then
2608 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
2609
2610 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2611
2612 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2613 --
2614 IF l_debug_on THEN
2615 WSH_DEBUG_SV.pop(l_module_name);
2616 END IF;
2617 --
2618 return;
2619 end if;
2620 END IF;
2621
2622 IF l_del_id_for_container.delivery_id IS NOT NULL then
2623 OPEN c_get_plan_flag(l_del_id_for_container.delivery_id);
2624 FETCH c_get_plan_flag into l_plan_flag;
2625 CLOSE c_get_plan_flag;
2626
2627 if l_plan_flag <> 'N' then
2628 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
2629
2630 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2631
2632 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2633 --
2634 IF l_debug_on THEN
2635 WSH_DEBUG_SV.pop(l_module_name);
2636 END IF;
2637 --
2638 return;
2639 end if;
2640 END IF;
2641 END IF;
2642 END IF;
2643 -- Bug 3715176
2644
2645 /* bug 2677298 frontport from bug 2655474: issue #1:
2646 ** set x_return_status to error if grouping attributes do not match
2647 */
2648
2649
2650 IF l_group_by_flags.customer = 'Y' THEN
2651 IF ((NVL(l_del_id_for_detail.customer_id,-1) <>
2652 NVL(l_del_id_for_container.customer_id,-1))
2653 OR (NVL(l_del_id_for_detail.consignee_flag,'C') <> --RTV changes
2654 NVL(l_del_id_for_container.consignee_flag,'C'))
2655 ) THEN
2656
2657 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2658 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2659 --
2660 IF l_debug_on THEN
2661 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2662 END IF;
2663 --
2664 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2665 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2666 p_parent_detail_id));
2667 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2668 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2669 --
2670 IF l_debug_on THEN
2671 WSH_DEBUG_SV.pop(l_module_name);
2672 END IF;
2673 --
2674 return;
2675 END IF;
2676 END IF;
2677 IF l_group_by_flags.intmed = 'Y' THEN
2678 IF (NVL(l_del_id_for_detail.intmed_ship_to_location_id,-1)<>
2679 NVL(l_del_id_for_container.intmed_ship_to_location_id,-1))
2680 THEN
2681
2682 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2683 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2684 --
2685 IF l_debug_on THEN
2686 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2687 END IF;
2688 --
2689 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2690 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2691 p_parent_detail_id));
2692 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2693 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2694 --
2695 IF l_debug_on THEN
2696 WSH_DEBUG_SV.pop(l_module_name);
2697 END IF;
2698 --
2699 return;
2700 END IF;
2701 END IF;
2702
2703 IF l_debug_on THEN
2704 WSH_DEBUG_SV.log(l_module_name,'fob_code',
2705 l_del_id_for_detail.fob_code);
2706 WSH_DEBUG_SV.log(l_module_name,'container fob_code',
2707 l_del_id_for_container.fob_code);
2708 WSH_DEBUG_SV.log(l_module_name,'fob',
2709 l_group_by_flags.fob);
2710 END IF;
2711
2712 IF l_group_by_flags.fob = 'Y' THEN
2713 IF (NVL(l_del_id_for_detail.fob_code,'#')<>
2714 NVL(l_del_id_for_container.fob_code,'#')) THEN
2715
2716 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2717 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2718 --
2719 IF l_debug_on THEN
2720 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2721 END IF;
2722 --
2723 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2724 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2725 p_parent_detail_id));
2726 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2727 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2728 --
2729 IF l_debug_on THEN
2730 WSH_DEBUG_SV.pop(l_module_name);
2731 END IF;
2732 --
2733 return;
2734 END IF;
2735 END IF;
2736 IF l_debug_on THEN
2737 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code',
2738 l_del_id_for_detail.freight_terms_code);
2739 WSH_DEBUG_SV.log(l_module_name,
2740 'container freight_terms_code',
2741 l_del_id_for_container.freight_terms_code);
2742 WSH_DEBUG_SV.log(l_module_name,'freight_terms',
2743 l_group_by_flags.freight_terms);
2744 END IF;
2745
2746 IF l_group_by_flags.freight_terms = 'Y' THEN
2747 IF (NVL(l_del_id_for_detail.freight_terms_code,'#')<>
2748 NVL(l_del_id_for_container.freight_terms_code,'#')) THEN
2749
2750 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2751 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2752 --
2753 IF l_debug_on THEN
2754 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2755 END IF;
2756 --
2757 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2758 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2759 p_parent_detail_id));
2760 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2761 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2762 --
2763 IF l_debug_on THEN
2764 WSH_DEBUG_SV.pop(l_module_name);
2765 END IF;
2766 --
2767 return;
2768 END IF;
2769 END IF;
2770
2771 IF l_debug_on THEN
2772 WSH_DEBUG_SV.log(l_module_name,'ship_method_code',
2773 l_del_id_for_detail.ship_method_code);
2774 WSH_DEBUG_SV.log(l_module_name, 'container ship_method_code',
2775 l_del_id_for_container.ship_method_code);
2776 WSH_DEBUG_SV.log(l_module_name,'ship_method',
2777 l_group_by_flags.ship_method);
2778 END IF;
2779
2780 IF l_group_by_flags.ship_method = 'Y' THEN
2781 IF (NVL(NVL(l_del_id_for_detail.mode_of_transport,l_del_id_for_container.mode_of_transport),'#')<>
2782 NVL(NVL(l_del_id_for_container.mode_of_transport,l_del_id_for_detail.mode_of_transport),'#'))
2783 OR (NVL(NVL(l_del_id_for_detail.service_level,l_del_id_for_container.service_level),'#')<>
2784 NVL(NVL(l_del_id_for_container.service_level,l_del_id_for_detail.service_level),'#'))
2785 OR (NVL(NVL(l_del_id_for_detail.carrier_id,l_del_id_for_container.carrier_id),-1)<>
2786 NVL(NVL(l_del_id_for_container.carrier_id,l_del_id_for_detail.carrier_id),-1)) THEN
2787
2788 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2789 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2790 --
2791 IF l_debug_on THEN
2792 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2793 END IF;
2794 --
2795 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2796 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2797 p_parent_detail_id));
2798 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2799 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2800 --
2801 IF l_debug_on THEN
2802 WSH_DEBUG_SV.pop(l_module_name);
2803 END IF;
2804 --
2805 return;
2806 END IF;
2807 END IF;
2808 --
2809 -- LSP PROJECT : Verify client id value on DD as well as Cont.
2810 -- DD with x Client can be packed into a container with same client or NULL client
2811 IF WMS_DEPLOY.wms_deployment_mode = 'L' THEN
2812 --{
2813 IF l_debug_on THEN
2814 WSH_DEBUG_SV.log(l_module_name,'Client_id', l_del_id_for_detail.client_id);
2815 WSH_DEBUG_SV.log(l_module_name, 'container Client_id',l_del_id_for_container.client_id);
2816 WSH_DEBUG_SV.log(l_module_name,'WMS_DEPLOY.wms_deployment_mode', WMS_DEPLOY.wms_deployment_mode);
2817 END IF;
2818 IF ( NVL(l_del_id_for_detail.client_id,-1) <> NVL(l_del_id_for_container.client_id,NVL(l_del_id_for_detail.client_id,-1))) THEN
2819 --{
2820 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2821 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2822 --
2823 IF l_debug_on THEN
2824 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2825 END IF;
2826 --
2827 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2828 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2829 p_parent_detail_id));
2830 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2831 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2832 --
2833 IF l_debug_on THEN
2834 WSH_DEBUG_SV.pop(l_module_name);
2835 END IF;
2836 --
2837 return;
2838 --}
2839 END IF;
2840 --}
2841 END IF;
2842 -- LSP PROJECT : End
2843 END IF;
2844 /* End of Check for grouping attributes */
2845
2846 IF l_debug_on THEN
2847 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id',
2848 l_del_id_for_detail.parent_delivery_detail_id);
2849 WSH_DEBUG_SV.log(l_module_name,
2850 'container parent_delivery_detail_id',
2851 l_del_id_for_container.parent_delivery_detail_id);
2852 END IF;
2853
2854 /* Check to see if the line is already packed */
2855 IF (l_del_id_for_detail.parent_delivery_detail_id IS NOT NULL
2856 AND l_del_id_for_detail.parent_delivery_detail_id <>
2857 p_parent_detail_id
2858 ) THEN
2859 FND_MESSAGE.SET_NAME('WSH','WSH_DET_PACK_ERROR');
2860 FND_MESSAGE.SET_TOKEN('DET_LINE',p_detail_id);
2861 --
2862 IF l_debug_on THEN
2863 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2864 END IF;
2865 --
2866 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2867 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2868 p_parent_detail_id));
2869 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2870 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2871 --
2872 IF l_debug_on THEN
2873 WSH_DEBUG_SV.pop(l_module_name);
2874 END IF;
2875 --
2876 return;
2877 END IF;
2878 /* End of Check to see if the line is already packed */
2879
2880
2881 -- J: W/V Changes
2882 IF l_debug_on THEN
2883 WSH_DEBUG_SV.log(l_module_name,'l_del_id_for_detail.released_status',
2884 l_del_id_for_detail.released_status);
2885 END IF;
2886
2887 IF l_del_id_for_detail.released_status = 'C' THEN
2888 Raise invalid_detail;
2889 END IF;
2890
2891
2892 /* bug 2677298 frontport from bug 2655474: issue #2:
2893 ** set x_return_status to error if line and container are in different deliveries.
2894 */
2895 IF (l_del_id_for_detail.delivery_id <> l_del_id_for_container.delivery_id) THEN
2896 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_DELIVERIES');
2897 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2898 --
2899 IF l_debug_on THEN
2900 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2901 END IF;
2902 --
2903 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2904 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2905 p_parent_detail_id));
2906 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2907 WSH_UTIL_CORE.Add_Message(x_return_status);
2908 --
2909 IF l_debug_on THEN
2910 WSH_DEBUG_SV.pop(l_module_name);
2911 END IF;
2912 --
2913 return;
2914 END IF;
2915
2916 -- J: W/V Changes
2917 -- The first DD_WV_Post_Process call will decrement the DD W/V from delivery
2918 -- The second DD_WV_Post_Process call will increment the delivery W/V with container W/V (since container has to be
2919 -- assigned to the delivery if the detail being assigned to container is already assigned to delivery)
2920 -- The third DD_WV_Post_Process will will increment the container W/V with DD W/V which in turn will adjust the
2921 -- delivery W/V, if the container is in a delivery.
2922 IF (l_del_id_for_detail.delivery_id is not null) THEN
2923 IF l_debug_on THEN
2924 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
2925 END IF;
2926
2927 WSH_WV_UTILS.DD_WV_Post_Process(
2928 p_delivery_detail_id => p_detail_id,
2929 p_diff_gross_wt => -1 * l_del_id_for_detail.gross_weight,
2930 p_diff_net_wt => -1 * l_del_id_for_detail.net_weight,
2931 p_diff_volume => -1 * l_del_id_for_detail.volume,
2932 p_diff_fill_volume => -1 * l_del_id_for_detail.volume,
2933 x_return_status => l_return_status);
2934
2935 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2936 --
2937 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2938 WSH_UTIL_CORE.Add_Message(x_return_status);
2939 IF l_debug_on THEN
2940 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
2941 WSH_DEBUG_SV.pop(l_module_name);
2942 END IF;
2943 return;
2944 END IF;
2945
2946 END IF;
2947
2948 /* container is already assigned to a delivery */
2949
2950 /* bug 2691385 and 2655474: avoid unnecessary update if line is already in delivery. */
2951 /****
2952 !!!!! We should NOT assume that the delivery grouping attributes of the delivery match
2953 !!!!! with that of the delivery details.
2954 !!!!! Bugs 2794866, 2397552.
2955 ****/
2956
2957
2958 IF (l_del_id_for_container.delivery_id IS not null) and (l_del_id_for_detail.delivery_id is null) THEN
2959
2960
2961 -- OTM R12 : assign delivery detail, this is the case where detail is assigned to the delivery
2962
2963 IF (l_gc3_is_installed = 'Y' AND
2964 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
2965
2966 Pre_Otm_Assign_Del_Detail
2967 (p_delivery_id => NULL,
2968 p_detail_id => p_detail_id,
2969 p_container1_id => p_parent_detail_id,
2970 p_container2_id => NULL,
2971 p_assignment_type => 'DD2C',
2972 x_delivery_was_empty => l_delivery_was_empty,
2973 x_assign_update => l_assign_update,
2974 x_gross_weight1 => l_gross_weight1,
2975 x_gross_weight2 => l_gross_weight2,
2976 x_return_status => l_return_status);
2977
2978 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
2979 IF l_debug_on THEN
2980 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
2981 END IF;
2982 raise FND_API.G_EXC_ERROR;
2983 END IF;
2984 END IF;
2985 -- End of OTM R12 : assign delivery detail
2986
2987
2988 IF l_debug_on THEN
2989 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.CHECK_ASSIGN_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
2990 END IF;
2991
2992 l_attr_tab(1).entity_id := l_del_id_for_container.delivery_id;
2993 l_attr_tab(1).entity_type := 'DELIVERY';
2994 l_attr_tab(2).entity_id := p_detail_id;
2995 l_attr_tab(2).entity_type := 'DELIVERY_DETAIL';
2996
2997 l_action_rec.action := 'MATCH_GROUPS';
2998 l_action_rec.check_single_grp := 'Y';
2999
3000 WSH_DELIVERY_AUTOCREATE.Find_Matching_Groups(p_attr_tab => l_attr_tab,
3001 p_action_rec => l_action_rec,
3002 p_target_rec => l_target_rec,
3003 p_group_tab => l_group_tab,
3004 x_matched_entities => l_matched_entities,
3005 x_out_rec => l_out_rec,
3006 x_return_status => x_return_status);
3007
3008 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3009 --
3010 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3011 WSH_UTIL_CORE.Add_Message(x_return_status);
3012 IF l_debug_on THEN
3013 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3014 WSH_DEBUG_SV.pop(l_module_name);
3015 END IF;
3016 return;
3017 END IF;
3018
3019
3020
3021 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3022 --
3023 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3024 WSH_UTIL_CORE.Add_Message(x_return_status);
3025 IF l_debug_on THEN
3026 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3027 WSH_DEBUG_SV.pop(l_module_name);
3028 END IF;
3029 return;
3030 END IF;
3031
3032 -- Update the delivery with the line's line direction
3033
3034 -- Lock the delivery before update.
3035
3036 BEGIN
3037
3038 wsh_new_deliveries_pvt.lock_dlvy_no_compare(p_delivery_id => l_del_id_for_container.delivery_id);
3039
3040 EXCEPTION
3041
3042 WHEN OTHERS THEN
3043 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3044 FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
3045 WSH_UTIL_CORE.add_message (WSH_UTIL_CORE.G_RET_STS_ERROR);
3046 IF l_debug_on THEN
3047 WSH_DEBUG_SV.log(l_module_name,'Could not lock delivery: ',l_del_id_for_container.delivery_id);
3048 WSH_DEBUG_SV.pop(l_module_name);
3049 END IF;
3050 RETURN;
3051 END;
3052
3053 l_group_index := l_group_tab.FIRST;
3054
3055 -- OTM R12 : update delivery
3056 l_tms_update := 'N';
3057 l_new_interface_flag_tab(1) := NULL;
3058
3059 IF (l_gc3_is_installed = 'Y' AND
3060 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
3061 l_trip_not_found := 'N';
3062
3063 --get trip information for delivery, no update when trip not OPEN
3064 WSH_DELIVERY_VALIDATIONS.get_trip_information
3065 (p_delivery_id => l_del_id_for_container.delivery_id,
3066 x_trip_info_rec => l_trip_info_rec,
3067 x_return_status => l_return_status);
3068
3069 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3070 x_return_status := l_return_status;
3071 IF l_debug_on THEN
3072 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_trip_information');
3073 WSH_DEBUG_SV.pop(l_module_name);
3074 END IF;
3075 RETURN;
3076 END IF;
3077
3078 IF (l_trip_info_rec.trip_id IS NULL) THEN
3079 l_trip_not_found := 'Y';
3080 END IF;
3081
3082 -- only do changes when there's no trip or trip status is OPEN
3083 IF (l_trip_info_rec.status_code = 'OP' OR
3084 l_trip_not_found = 'Y') THEN
3085
3086 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
3087 p_delivery_id => l_del_id_for_container.delivery_id,
3088 x_delivery_rec => l_delivery_info,
3089 x_return_status => l_return_status);
3090
3091 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3092 x_return_status := l_return_status;
3093 IF l_debug_on THEN
3094 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
3095 WSH_DEBUG_SV.pop(l_module_name);
3096 END IF;
3097 RETURN;
3098 END IF;
3099
3100 -- if service level, mode of transport, or carrier id is changed
3101 -- with the nvl updates, then update is needed
3102
3103 IF (nvl(l_delivery_info.service_level,
3104 nvl(l_group_tab(l_group_index).service_level, '@@')) <>
3105 nvl(l_delivery_info.service_level, '@@') OR
3106 nvl(l_delivery_info.mode_of_transport,
3107 nvl(l_group_tab(l_group_index).mode_of_transport, '@@')) <>
3108 nvl(l_delivery_info.mode_of_transport, '@@') OR
3109 nvl(l_delivery_info.carrier_id,
3110 nvl(l_group_tab(l_group_index).carrier_id, -1)) <>
3111 nvl(l_delivery_info.carrier_id, -1)) THEN
3112
3113 IF (l_delivery_info.tms_interface_flag NOT IN
3114 (WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT,
3115 WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
3116 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
3117 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
3118 WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED)) THEN
3119 l_tms_update := 'Y';
3120 l_delivery_info_tab(1) := l_delivery_info;
3121 l_new_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
3122 l_tms_version_number := nvl(l_delivery_info.tms_version_number, 1) + 1;
3123 END IF;
3124 END IF; -- checking the value differences
3125 END IF; -- IF ((l_trip_not_found = 'N' AND
3126 END IF; -- IF (l_gc3_is_installed = 'Y'
3127
3128 IF l_debug_on THEN
3129 WSH_DEBUG_SV.log(l_module_name, 'l_gc3_is_installed', l_gc3_is_installed);
3130 WSH_DEBUG_SV.log(l_module_name, 'l_tms_update', l_tms_update);
3131 IF (l_tms_update = 'Y') THEN
3132 WSH_DEBUG_SV.log(l_module_name, 'l_new_interface_flag_tab', l_new_interface_flag_tab(1));
3133 WSH_DEBUG_SV.log(l_module_name, 'l_tms_version_number', l_tms_version_number);
3134 END IF;
3135 END IF;
3136
3137 -- End of OTM R12 : update delivery
3138
3139 UPDATE wsh_new_deliveries
3140 SET shipment_direction = l_del_id_for_detail.line_direction,
3141 service_level = NVL(service_level,l_group_tab(l_group_index).service_level),
3142 mode_of_transport = NVL(mode_of_transport, l_group_tab(l_group_index).mode_of_transport),
3143 carrier_id = NVL(carrier_id, l_group_tab(l_group_index).carrier_id),
3144 -- OTM R12
3145 TMS_INTERFACE_FLAG = decode(l_tms_update, 'Y', l_new_interface_flag_tab(1), nvl(TMS_INTERFACE_FLAG, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
3146 TMS_VERSION_NUMBER = decode(l_tms_update, 'Y', l_tms_version_number, nvl(tms_version_number, 1)),
3147 -- End of OTM R12
3148 last_update_date = SYSDATE,
3149 last_updated_by = FND_GLOBAL.USER_ID,
3150 last_update_login = FND_GLOBAL.LOGIN_ID
3151 where delivery_id = l_del_id_for_container.delivery_id;
3152
3153 -- OTM R12 : update delivery
3154 IF (l_gc3_is_installed = 'Y' AND l_tms_update = 'Y') THEN
3155 WSH_XC_UTIL.LOG_OTM_EXCEPTION(
3156 p_delivery_info_tab => l_delivery_info_tab,
3157 p_new_interface_flag_tab => l_new_interface_flag_tab,
3158 x_return_status => l_return_status);
3159
3160 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3161 x_return_status := l_return_status;
3162 IF l_debug_on THEN
3163 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_XC_UTIL.log_otm_exception');
3164 WSH_DEBUG_SV.pop(l_module_name);
3165 END IF;
3166 RETURN;
3167 END IF;
3168 END IF;
3169 -- End of OTM R12 : update delivery
3170
3171 -- K LPN CONV. rv
3172 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3173 AND nvl(l_del_id_FOR_container.line_direction,'O') IN ('O', 'IO')
3174 AND
3175 (
3176 ((WSH_WMS_LPN_GRP.GK_WMS_PACK or WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY) and l_wms_org = 'Y')
3177 OR
3178 ((WSH_WMS_LPN_GRP.GK_INV_PACK or WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY) and l_wms_org = 'N')
3179 )
3180 THEN
3181 --{
3182 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3183 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_for_detail.parent_delivery_detail_id;
3184 l_sync_tmp_rec.delivery_id := l_del_id_for_detail.delivery_id;
3185 l_sync_tmp_rec.operation_type := 'PRIOR';
3186 --
3187 IF l_debug_on THEN
3188 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3189 END IF;
3190 --
3191 WSH_WMS_SYNC_TMP_PKG.MERGE
3192 (
3193 p_sync_tmp_rec => l_sync_tmp_rec,
3194 x_return_status => l_return_status
3195 );
3196 --
3197 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3198 --
3199 x_return_status := l_return_status;
3200 --
3201 IF l_debug_on THEN
3202 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3203 WSH_DEBUG_SV.pop(l_module_name);
3204 END IF;
3205 --
3206 return;
3207 --
3208 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3209 --
3210 l_num_warnings := l_num_warnings + 1;
3211 --
3212 END IF;
3213 --
3214 --}
3215 END IF;
3216 -- K LPN CONV. rv
3217 --
3218
3219 UPDATE wsh_delivery_assignments_v
3220 SET parent_delivery_detail_id = p_parent_detail_id,
3221 delivery_id = l_del_id_for_container.delivery_id,
3222 last_update_date = SYSDATE,
3223 last_updated_by = FND_GLOBAL.USER_ID,
3224 last_update_login = FND_GLOBAL.LOGIN_ID
3225 WHERE delivery_detail_id = p_detail_id;
3226
3227 -- OTM R12 : assign delivery detail
3228 IF (l_assign_update AND
3229 l_gc3_is_installed = 'Y' AND
3230 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
3231
3232 IF (l_tms_update = 'Y') THEN
3233 l_tms_interface_flag := l_new_interface_flag_tab(1);
3234 ELSIF (l_trip_info_rec.status_code = 'OP' OR
3235 l_trip_not_found = 'Y') THEN
3236 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
3237 ELSE
3238 l_tms_interface_flag := NULL;
3239 END IF;
3240
3241 Post_Otm_Assign_Del_Detail
3242 (p_delivery_id => l_del_id_for_container.delivery_id,
3243 p_delivery_was_empty => l_delivery_was_empty,
3244 p_tms_interface_flag => l_tms_interface_flag,
3245 p_gross_weight => l_gross_weight1, --using the gross weight of the detail
3246 x_return_status => l_return_status);
3247
3248 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3249 IF l_debug_on THEN
3250 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
3251 END IF;
3252 raise FND_API.G_EXC_ERROR;
3253 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3254 l_num_warnings := l_num_warnings + 1;
3255 END IF;
3256 END IF;
3257 -- End of OTM R12 : assign delivery detail
3258
3259 -- K: MDC delete consolidation record of it exists
3260 l_mdc_detail_tab(1) := p_detail_id;
3261 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
3262 p_detail_id_tab => l_mdc_detail_tab,
3263 x_return_status => x_return_status);
3264
3265 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3266 IF l_debug_on THEN
3267 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3268 WSH_DEBUG_SV.pop(l_module_name);
3269 END IF;
3270 return;
3271 END IF;
3272
3273
3274 /* H integration: Pricing integration csun , marking the delivery */
3275 m := m + 1;
3276 l_del_tab(m) := l_del_id_for_detail.delivery_id;
3277 ELSIF (l_del_id_for_container.delivery_id is null)
3278 OR (l_del_id_for_container.delivery_id = l_del_id_for_detail.delivery_id )THEN
3279 --
3280 -- K LPN CONV. rv
3281 -- Only packing.
3282 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3283 AND nvl(l_del_id_FOR_container.line_direction,'O') IN ('O', 'IO')
3284 AND
3285 (
3286 (WSH_WMS_LPN_GRP.GK_WMS_PACK and l_wms_org = 'Y')
3287 OR
3288 (WSH_WMS_LPN_GRP.GK_INV_PACK and l_wms_org = 'N')
3289 )
3290 THEN
3291 --{
3292 --
3293 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3294 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_for_detail.parent_delivery_detail_id;
3295 l_sync_tmp_rec.delivery_id := l_del_id_for_detail.delivery_id;
3296 l_sync_tmp_rec.operation_type := 'PRIOR';
3297 --
3298 IF l_debug_on THEN
3299 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3300 END IF;
3301 --
3302 WSH_WMS_SYNC_TMP_PKG.MERGE
3303 (
3304 p_sync_tmp_rec => l_sync_tmp_rec,
3305 x_return_status => l_return_status
3306 );
3307 --
3308 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3309 --
3310 x_return_status := l_return_status;
3311 --
3312 IF l_debug_on THEN
3313 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3314 WSH_DEBUG_SV.pop(l_module_name);
3315 END IF;
3316 --
3317 return;
3318 --
3319 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3320 --
3321 l_num_warnings := l_num_warnings + 1;
3322 --
3323 END IF;
3324 --
3325 --}
3326 END IF;
3327 -- K LPN CONV. rv
3328 --
3329
3330 UPDATE wsh_delivery_assignments_v
3331 SET parent_delivery_detail_id = p_parent_detail_id,
3332 last_update_date = SYSDATE,
3333 last_updated_by = FND_GLOBAL.USER_ID,
3334 last_update_login = FND_GLOBAL.LOGIN_ID
3335 WHERE delivery_detail_id = p_detail_id;
3336
3337 l_mdc_detail_tab(1) := p_detail_id;
3338 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
3339 p_detail_id_tab => l_mdc_detail_tab,
3340 x_return_status => x_return_status);
3341
3342 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3343 IF l_debug_on THEN
3344 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3345 WSH_DEBUG_SV.pop(l_module_name);
3346 END IF;
3347 return;
3348 END IF;
3349 END IF;
3350
3351 /* detail is already assigned to a delivery */
3352 /* updating delivery_id for all containers and details inside
3353 of the container AND updating delivery_id FOR all containers outside of the
3354 container */
3355 /* Bug 1571143 */
3356 /* bug 2677298 frontport from bug 2655474: update container only if it is not in delivery */
3357 IF ( (l_del_id_for_detail.delivery_id is not null)
3358 AND (l_del_id_for_container.delivery_id is null) ) THEN
3359
3360 -- K LPN CONV. rv
3361 -- Based on assumption that we are using wsh_delivery_assignments_v,
3362 -- delivery and its contents will belong to same organization.
3363 -- Similarly, container and its contents will belong to same organization.
3364 -- Hence, we are checking for WMS org or non-WMS org. at the
3365 -- parent level (i.e. delivery/container)
3366 -- rather than at line-level for performance reasons.
3367
3368 -- If this assumptions were to be violated in anyway
3369 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
3370 -- wsh_delivery_assignments_v
3371 -- or
3372 -- if existing query were to somehow return/fetch records where
3373 -- delivery and its contents may belong to diff. org.
3374 -- container and its contents may belong to diff. org.
3375 -- then
3376 -- Calls to check_wms_org needs to be re-adjusted at
3377 -- appropriate level (line/delivery/container).
3378 -- K LPN CONV. rv
3379
3380 -- Bug 4452930
3381 OPEN c_topmost_container(p_parent_detail_id);
3382 FETCH c_topmost_container INTO l_topmost_cont;
3383 CLOSE c_topmost_container;
3384
3385 IF l_topmost_cont IS NULL THEN
3386 l_topmost_cont := p_parent_detail_id;
3387 END IF;
3388
3389
3390 -- OTM R12 : assign delivery detail,
3391 -- this is the case where container is assigned to delivery, had to get topmost container
3392
3393 IF (l_gc3_is_installed = 'Y' AND
3394 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
3395
3396 Pre_Otm_Assign_Del_Detail
3397 (p_delivery_id => NULL,
3398 p_detail_id => p_detail_id,
3399 p_container1_id => l_topmost_cont,
3400 p_container2_id => NULL,
3401 p_assignment_type => 'DD2C',
3402 x_delivery_was_empty => l_delivery_was_empty,
3403 x_assign_update => l_assign_update,
3404 x_gross_weight1 => l_gross_weight1,
3405 x_gross_weight2 => l_gross_weight2,
3406 x_return_status => l_return_status);
3407
3408 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3409 IF l_debug_on THEN
3410 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
3411 END IF;
3412 raise FND_API.G_EXC_ERROR;
3413 END IF;
3414 END IF;
3415 -- End of OTM R12 : assign delivery detail
3416
3417
3418 OPEN c_inside_outside_of_container(l_topmost_cont);
3419 -- Bug 4452930
3420 FETCH c_inside_outside_of_container bulk collect into
3421 l_sync_tmp_recTbl.delivery_detail_id_tbl,
3422 l_sync_tmp_recTbl.parent_detail_id_tbl,
3423 l_sync_tmp_recTbl.delivery_id_tbl;
3424
3425 CLOSE c_inside_outside_of_container;
3426 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
3427 --{
3428
3429 --
3430 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
3431 l_operation_type := 'PRIOR';
3432 --
3433 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3434 AND nvl(l_del_id_for_detail.line_direction,'O') IN ('O', 'IO')
3435 AND
3436 (
3437 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
3438 OR
3439 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
3440 )
3441 THEN
3442 --{
3443 --
3444 IF l_debug_on THEN
3445 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
3446 END IF;
3447 --
3448 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
3449 (
3450 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
3451 x_return_status => l_return_status,
3452 p_operation_type => l_operation_type
3453 );
3454 --
3455 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3456 --
3457 x_return_status := l_return_status;
3458 --
3459 IF l_debug_on THEN
3460 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3461 WSH_DEBUG_SV.pop(l_module_name);
3462 END IF;
3463 --
3464 return;
3465 --
3466 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3467 --
3468 l_num_warnings := l_num_warnings + 1;
3469 --
3470 END IF;
3471 --
3472
3473 --}
3474 END IF;
3475 --
3476
3477 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
3478 UPDATE wsh_delivery_assignments_v
3479 SET delivery_id = l_del_id_FOR_detail.delivery_id,
3480 last_update_date = SYSDATE,
3481 last_updated_by = FND_GLOBAL.USER_ID,
3482 last_update_login = FND_GLOBAL.LOGIN_ID
3483 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
3484
3485 -- OTM R12 : assign delivery detail
3486 -- executed only once since it's for the same delivery
3487 IF (l_assign_update AND
3488 l_gc3_is_installed = 'Y' AND
3489 nvl(l_del_id_for_detail.ignore_for_planning, 'N') = 'N') THEN
3490
3491 -- when it comes here, OTM R12 update delivery is not called before
3492 -- inside the same procedure, so can't use those variables
3493
3494 l_tms_interface_flag := NULL;
3495
3496 Post_Otm_Assign_Del_Detail
3497 (p_delivery_id => l_del_id_for_detail.delivery_id,
3498 p_delivery_was_empty => l_delivery_was_empty,
3499 p_tms_interface_flag => l_tms_interface_flag,
3500 p_gross_weight => l_gross_weight2, --using the container gross weight
3501 x_return_status => l_return_status);
3502
3503 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3504 IF l_debug_on THEN
3505 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
3506 END IF;
3507 raise FND_API.G_EXC_ERROR;
3508 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3509 l_num_warnings := l_num_warnings + 1;
3510 END IF;
3511 END IF;
3512 -- End of OTM R12 : assign delivery detail
3513
3514 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
3515 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
3516 END LOOP;
3517 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
3518 p_detail_id_tab => l_mdc_detail_tab,
3519 x_return_status => x_return_status);
3520
3521 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3522 IF l_debug_on THEN
3523 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3524 WSH_DEBUG_SV.pop(l_module_name);
3525 END IF;
3526 return;
3527 END IF;
3528 l_mdc_detail_tab.delete;
3529 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
3530 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
3531 l_sync_tmp_recTbl.delivery_id_tbl.delete;
3532 l_sync_tmp_recTbl.operation_type_tbl.delete;
3533
3534 --}
3535 END IF;
3536 -- K LPN CONV. rv
3537
3538 -- J: W/V Changes
3539 -- Container is being assigned to delivery. Call DD_WV_Post_Process to adjust the W/V of the parent
3540 IF l_debug_on THEN
3541 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning Container to Delivery');
3542 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3543 END IF;
3544
3545 WSH_WV_UTILS.DD_WV_Post_Process(
3546 p_delivery_detail_id => p_parent_detail_id,
3547 p_diff_gross_wt => l_del_id_for_container.gross_weight,
3548 p_diff_net_wt => l_del_id_for_container.net_weight,
3549 p_diff_volume => l_del_id_for_container.volume,
3550 p_diff_fill_volume => l_del_id_for_container.volume,
3551 x_return_status => l_return_status);
3552
3553 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3554 --
3555 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3556 WSH_UTIL_CORE.Add_Message(x_return_status);
3557 IF l_debug_on THEN
3558 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3559 WSH_DEBUG_SV.pop(l_module_name);
3560 END IF;
3561 return;
3562 END IF;
3563
3564
3565 /* H integration: Pricing integration csun , marking the delivery */
3566 m := m + 1;
3567 l_del_tab(m) := l_del_id_for_detail.delivery_id;
3568
3569 END IF;
3570
3571
3572 -- K LPN CONV. rv
3573 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3574 THEN
3575 --{
3576 -- J: W/V Changes
3577 IF l_debug_on THEN
3578 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3579 END IF;
3580
3581 WSH_WV_UTILS.DD_WV_Post_Process(
3582 p_delivery_detail_id => p_detail_id,
3583 p_diff_gross_wt => l_del_id_for_detail.gross_weight,
3584 p_diff_net_wt => l_del_id_for_detail.net_weight,
3585 p_diff_volume => l_del_id_for_detail.volume,
3586 p_diff_fill_volume => l_del_id_for_detail.volume,
3587 x_return_status => l_return_status);
3588
3589 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3590 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3591 l_num_warnings := l_num_warnings + 1;
3592 ELSE
3593 --
3594 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3595 WSH_UTIL_CORE.Add_Message(x_return_status);
3596 IF l_debug_on THEN
3597 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3598 WSH_DEBUG_SV.pop(l_module_name);
3599 END IF;
3600 return;
3601 END IF;
3602 END IF;
3603 --}
3604 END IF;
3605 -- K LPN CONV. rv
3606
3607 /* H integration: Pricing integration csun */
3608 IF l_del_tab.count > 0 THEN
3609 --
3610 IF l_debug_on THEN
3611 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
3612 END IF;
3613 --
3614 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
3615 p_entity_type => 'DELIVERY',
3616 p_entity_ids => l_del_tab,
3617 x_return_status => l_return_status);
3618 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3619 raise mark_reprice_error;
3620 END IF;
3621 END IF;
3622
3623 IF l_num_warnings > 0 THEN
3624 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3625 END IF;
3626
3627 --
3628 IF l_debug_on THEN
3629 WSH_DEBUG_SV.pop(l_module_name);
3630 END IF;
3631 --
3632 exception
3633
3634 -- OTM R12 : assign delivery detail
3635 WHEN FND_API.G_EXC_ERROR then
3636 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3637 --
3638 IF l_debug_on THEN
3639 WSH_DEBUG_SV.pop(l_module_name);
3640 END IF;
3641 --
3642 RETURN;
3643 -- End of OTM R12 : assign delivery detail
3644
3645 WHEN mark_reprice_error then
3646 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
3647 x_return_status := l_return_status;
3648 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
3649 --
3650 IF l_debug_on THEN
3651 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3652 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
3653 END IF;
3654 --
3655 WHEN invalid_detail then
3656 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3657 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
3658 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
3659 wsh_util_core.add_message(x_return_status,l_module_name);
3660 --
3661 IF l_debug_on THEN
3662 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3663 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DETAIL');
3664 END IF;
3665 --
3666 RETURN;
3667 WHEN others THEN
3668 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3669 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DETAIL_TO_CONT',l_module_name);
3670 --
3671 IF l_debug_on THEN
3672 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3673 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3674 END IF;
3675 --
3676 END Assign_Detail_To_Cont;
3677 -- -------------------------------------------------------------------------------
3678 --Procedure: Unssign_Detail_from_Cont
3679 --Parameters: p_detail_id,
3680 -- p_parent_detail_id,
3681 -- x_return_status
3682 --Description: if detail is already assigned to a delivery which means
3683 -- the container must be assigned to the same delivery too,
3684 -- in this case even though the detail is getting removed
3685 -- from the container, it will still stay assigned to the
3686 -- delivery
3687 -- if the container is already assigned to a delivery,
3688 -- the detail must also be assigned to the same delivery
3689
3690
3691 PROCEDURE Unassign_Detail_from_Cont(
3692 p_detail_id IN NUMBER,
3693 x_return_status OUT NOCOPY VARCHAR2,
3694 p_validate_flag IN VARCHAR2)
3695 IS
3696
3697 invalid_detail exception;
3698 -- J: W/V Changes
3699 e_abort exception;
3700 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
3701 l_cont_fill_pc NUMBER;
3702
3703 /* H projects: pricing integration csun */
3704 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
3705 l_return_status VARCHAR2(1);
3706 l_del_rec C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
3707 mark_reprice_error EXCEPTION;
3708
3709 l_num_warnings number := 0;
3710 -- K LPN CONV. rv
3711 l_wms_org VARCHAR2(10) := 'N';
3712 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
3713 l_mdc_detail_tab wsh_util_core.id_tab_type;
3714
3715 cursor l_parent_cnt_csr (p_cnt_inst_id IN NUMBER) is
3716 select organization_id,
3717 nvl(line_direction,'O')
3718 from wsh_delivery_details
3719 where delivery_detail_id = p_cnt_inst_id
3720 and container_flag = 'Y'
3721 and source_code = 'WSH';
3722
3723 l_parent_cnt_orgn_id NUMBER;
3724 l_parent_cnt_line_dir VARCHAR2(10);
3725 -- K LPN CONV. rv
3726
3727 --
3728 l_debug_on BOOLEAN;
3729 --
3730 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_CONT';
3731 --
3732 BEGIN
3733 --
3734 --
3735 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3736 --
3737 IF l_debug_on IS NULL
3738 THEN
3739 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3740 END IF;
3741 --
3742 IF l_debug_on THEN
3743 WSH_DEBUG_SV.push(l_module_name);
3744 --
3745 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
3746 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
3747 END IF;
3748 --
3749 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3750
3751 -- J: W/V Changes
3752 OPEN C_DEL_ID_FOR_CONT_OR_DETAIL(p_detail_id);
3753 FETCH C_DEL_ID_FOR_CONT_OR_DETAIL INTO l_del_rec;
3754 CLOSE C_DEL_ID_FOR_CONT_OR_DETAIL;
3755
3756
3757 IF l_del_rec.parent_delivery_detail_id is NULL THEN
3758 IF l_debug_on THEN
3759 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already unassigned. Returning');
3760 WSH_DEBUG_SV.pop(l_module_name);
3761 END IF;
3762 return;
3763
3764 -- LPN CONV. rv
3765 ELSE
3766 --
3767 open l_parent_cnt_csr(l_del_rec.parent_delivery_detail_id);
3768 fetch l_parent_cnt_csr into l_parent_cnt_orgn_id, l_parent_cnt_line_dir;
3769 close l_parent_cnt_csr;
3770 --
3771 IF l_debug_on THEN
3772 WSH_DEBUG_SV.log(l_module_name,' parent cnt orgn id is', l_parent_cnt_orgn_id);
3773 WSH_DEBUG_SV.log(l_module_name,' parent cnt line dir is', l_parent_cnt_line_dir);
3774 END IF;
3775 --
3776 l_wms_org := wsh_util_validate.check_wms_org(l_parent_cnt_orgn_id);
3777 --
3778 -- LPN CONV. rv
3779 --
3780 END IF;
3781
3782 --
3783 IF l_debug_on THEN
3784 WSH_DEBUG_SV.log(l_module_name,'l_del_rec.released_status',l_del_rec.released_status);
3785 END IF;
3786 --
3787
3788 IF l_del_rec.released_status = 'C' THEN
3789 Raise invalid_detail;
3790 END IF;
3791
3792 -- K LPN CONV. rv
3793
3794 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3795 THEN
3796 --{
3797
3798 -- J: W/V Changes
3799 -- Decrement the DD W/V from container
3800 IF l_debug_on THEN
3801 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3802 END IF;
3803
3804 WSH_WV_UTILS.DD_WV_Post_Process(
3805 p_delivery_detail_id => p_detail_id,
3806 p_diff_gross_wt => -1 * l_del_rec.gross_weight,
3807 p_diff_net_wt => -1 * l_del_rec.net_weight,
3808 p_diff_volume => -1 * l_del_rec.volume,
3809 p_diff_fill_volume => -1 * l_del_rec.volume,
3810 p_check_for_empty => 'Y',
3811 x_return_status => l_return_status);
3812
3813 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3814 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3815 l_num_warnings := l_num_warnings + 1;
3816 ELSE
3817 --
3818 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3819 WSH_UTIL_CORE.Add_Message(x_return_status);
3820 IF l_debug_on THEN
3821 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3822 WSH_DEBUG_SV.pop(l_module_name);
3823 END IF;
3824 return;
3825 END IF;
3826 END IF;
3827 --}
3828 END IF;
3829
3830 -- K LPN CONV. rv
3831 --
3832 -- K LPN CONV. rv
3833 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3834 AND nvl(l_parent_cnt_line_dir,'O') IN ('O', 'IO')
3835 AND
3836 (
3837 (WSH_WMS_LPN_GRP.GK_WMS_UNPACK and l_wms_org = 'Y')
3838 OR
3839 (WSH_WMS_LPN_GRP.GK_INV_UNPACK and l_wms_org = 'N')
3840 )
3841 THEN
3842 --{
3843 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3844 l_sync_tmp_rec.parent_delivery_detail_id := l_del_rec.parent_delivery_detail_id;
3845 l_sync_tmp_rec.delivery_id := l_del_rec.delivery_id;
3846 l_sync_tmp_rec.operation_type := 'PRIOR';
3847 --
3848 IF l_debug_on THEN
3849 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3850 END IF;
3851 --
3852 WSH_WMS_SYNC_TMP_PKG.MERGE
3853 (
3854 p_sync_tmp_rec => l_sync_tmp_rec,
3855 x_return_status => l_return_status
3856 );
3857
3858 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
3859 THEN
3860 IF l_debug_on THEN
3861 WSH_DEBUG_SV.log(l_module_name,'WSH_WMS_SYNC_TMP_PKG.MERGE returned ',l_return_status);
3862 END IF;
3863 RAISE e_abort;
3864 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3865 l_num_warnings := l_num_warnings + 1;
3866 END IF;
3867 --}
3868 END IF;
3869 -- K LPN CONV. rv
3870 --
3871 UPDATE wsh_delivery_assignments_v
3872 SET parent_delivery_detail_id = NULL,
3873 last_update_date = SYSDATE,
3874 last_updated_by = FND_GLOBAL.USER_ID,
3875 last_update_login = FND_GLOBAL.LOGIN_ID
3876 WHERE delivery_detail_id = p_detail_id;
3877 l_mdc_detail_tab(1) := p_detail_id;
3878 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
3879 p_detail_id_tab => l_mdc_detail_tab,
3880 x_return_status => x_return_status);
3881
3882 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3883 IF l_debug_on THEN
3884 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3885 WSH_DEBUG_SV.pop(l_module_name);
3886 END IF;
3887 return;
3888 END IF;
3889 -- J: W/V Changes
3890 -- Need to recalculate the fill% if 'Percent Fill Basis' is Quantity
3891 -- Reason: DD_WV_Post_Process would have calculated the fill% but the delivery detail is not unassigned at
3892 -- that point of time. So the fill% will be wrong if 'Percent Fill Basis' is Quantity since the fill%
3893 -- calculation considers the delivery detail which is not yet unassigned
3894 IF l_debug_on THEN
3895 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.Get',WSH_DEBUG_SV.C_PROC_LEVEL);
3896 END IF;
3897
3898 WSH_SHIPPING_PARAMS_PVT.Get(
3899 p_organization_id => l_del_rec.organization_id,
3900 x_param_info => l_param_info,
3901 x_return_status => l_return_status);
3902
3903 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
3904 IF l_debug_on THEN
3905 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SHIPPING_PARAMS_PVT.Get returned '||l_return_status);
3906 END IF;
3907 raise e_abort;
3908 END IF;
3909
3910 IF (l_param_info.percent_fill_basis_flag = 'Q') THEN
3911
3912 -- K LPN CONV. rv
3913 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3914 THEN
3915 --{
3916 IF l_debug_on THEN
3917 WSH_DEBUG_SV.logmsg(l_module_name,'Need to recalculate the fill% for container');
3918 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_CONTAINER_PKG.CALC_CONT_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
3919 END IF;
3920
3921 WSH_WV_UTILS.ADJUST_PARENT_WV(
3922 p_entity_type => 'CONTAINER',
3923 p_entity_id => l_del_rec.parent_delivery_detail_id,
3924 p_gross_weight => 0,
3925 p_net_weight => 0,
3926 p_volume => 0,
3927 p_filled_volume => 0,
3928 p_wt_uom_code => l_del_rec.weight_uom_code,
3929 p_vol_uom_code => l_del_rec.volume_uom_code,
3930 p_inv_item_id => l_del_rec.inventory_item_id,
3931 x_return_status => l_return_status);
3932
3933 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
3934 THEN
3935 IF l_debug_on THEN
3936 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.ADJUST_PARENT_WV returned '||l_return_status);
3937 END IF;
3938 RAISE e_abort;
3939 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3940 l_num_warnings := l_num_warnings + 1;
3941 END IF;
3942
3943 --}
3944 END IF;
3945 -- K LPN CONV. rv
3946 END IF;
3947
3948 --
3949 IF l_debug_on THEN
3950 WSH_DEBUG_SV.log(l_module_name,'Delivery Id for l_del_rec',l_del_rec.delivery_id);
3951 END IF;
3952 --
3953
3954 -- J: W/V Changes
3955 -- Assign the DD W/V back to delivery
3956 IF l_del_rec.delivery_id IS NOT NULL THEN
3957 IF l_debug_on THEN
3958 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3959 END IF;
3960
3961 WSH_WV_UTILS.DD_WV_Post_Process(
3962 p_delivery_detail_id => p_detail_id,
3963 p_diff_gross_wt => l_del_rec.gross_weight,
3964 p_diff_net_wt => l_del_rec.net_weight,
3965 p_diff_volume => l_del_rec.volume,
3966 p_diff_fill_volume => l_del_rec.volume,
3967 x_return_status => l_return_status);
3968 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3969 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3970 l_num_warnings := l_num_warnings + 1;
3971 ELSE
3972 --
3973 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3974 WSH_UTIL_CORE.Add_Message(x_return_status);
3975 IF l_debug_on THEN
3976 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3977 WSH_DEBUG_SV.pop(l_module_name);
3978 END IF;
3979 return;
3980 END IF;
3981 END IF;
3982
3983 END IF;
3984
3985 /* H integration: Pricing integration csun */
3986 IF l_del_rec.delivery_id IS not NULL THEN
3987 l_del_tab.delete;
3988 l_del_tab(1) := l_del_rec.delivery_id;
3989 --
3990 IF l_debug_on THEN
3991 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
3992 END IF;
3993 --
3994 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
3995 p_entity_type => 'DELIVERY',
3996 p_entity_ids => l_del_tab,
3997 x_return_status => l_return_status);
3998 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3999 raise mark_reprice_error;
4000 END IF;
4001 END IF;
4002
4003 IF l_num_warnings > 0 THEN
4004 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4005 END IF;
4006
4007 --
4008 IF l_debug_on THEN
4009 WSH_DEBUG_SV.pop(l_module_name);
4010 END IF;
4011 --
4012 exception
4013 -- J: W/V Changes
4014 WHEN e_abort THEN
4015 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4016 IF l_debug_on THEN
4017 WSH_DEBUG_SV.pop(l_module_name);
4018 END IF;
4019
4020 WHEN mark_reprice_error THEN
4021 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
4022 x_return_status := l_return_status;
4023 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
4024
4025 --
4026 IF l_debug_on THEN
4027 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4028 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
4029 END IF;
4030 --
4031 WHEN invalid_detail then
4032 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4033 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
4034 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
4035 wsh_util_core.add_message(x_return_status,l_module_name);
4036 --
4037 IF l_debug_on THEN
4038 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4039 WSH_DEBUG_SV.pop(l_module_name);
4040 END IF;
4041 --
4042 RETURN;
4043 WHEN others THEN
4044 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_CONT',l_module_name);
4045 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4046
4047 --
4048 IF l_debug_on THEN
4049 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4050 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4051 END IF;
4052 --
4053 END Unassign_Detail_FROM_Cont;
4054
4055
4056 -- THIS PROCEDURE IS OBSOLETE
4057 --
4058 --Procedure: Assign_Cont_To_Delivery
4059 --Parameters: p_detail_id,
4060 -- p_delivery_id,
4061 -- x_return_status
4062 --Description: This procedure is called when assigning a container to
4063 -- a delivery.
4064 -- It assigns all delivery lines and child containers to
4065 -- the delivery as well.
4066 --changing to just call assign_detail_to_delivery
4067
4068 PROCEDURE Assign_Cont_To_Delivery(
4069 P_DETAIL_ID IN NUMBER,
4070 P_DELIVERY_ID IN NUMBER,
4071 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
4072 assign_cont_del exception;
4073 --
4074 l_debug_on BOOLEAN;
4075 --
4076 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_CONT_TO_DELIVERY';
4077 --
4078 BEGIN
4079 --
4080 --
4081 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4082 --
4083 --
4084 END Assign_Cont_To_Delivery;
4085
4086
4087 -------------------------------------------------------------------
4088 --Assign_Top_Detail_To_Delivery should only be called for the topmost
4089 --container in a hierarchy/detail (if it is a loose detail) assigns
4090 --all the details below (including containers) to delivery
4091 -- x_dlvy_has_lines : 'Y' :delivery has non-container lines.
4092 -- 'N' : delivery does not have non-container lines
4093 -- x_dlvy_freight_Terms_code : Delivery's freight term code
4094 -------------------------------------------------------------------
4095
4096
4097 PROCEDURE Assign_Top_Detail_To_Delivery(
4098 P_DETAIL_ID IN NUMBER,
4099 P_DELIVERY_ID IN NUMBER,
4100 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
4101 x_dlvy_has_lines IN OUT NOCOPY VARCHAR2, --
4102 x_dlvy_freight_terms_code IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
4103 p_caller IN VARCHAR2 --bug 5100229
4104 ) IS
4105
4106 TYPE del_det_id_tab_type IS TABLE OF wsh_delivery_details.delivery_detail_id%TYPE INDEX BY BINARY_INTEGER;
4107
4108 l_rowid varchar2(150);
4109 l_delivery_assignment_id NUMBER;
4110 -- cont_id NUMBER;
4111 del_id NUMBER;
4112 l_summary varchar2(3000);
4113 l_details varchar2(3000);
4114 l_get_msg_count number;
4115
4116 l_cr_assn_status varchar2(30);
4117 l_group_status varchar2(30);
4118 l_arrival_status varchar2(30);
4119 l_ship_method_match BOOLEAN;
4120
4121 l_attr_flag VARCHAR2(1) := 'N';
4122 l_cont_name VARCHAR2(30);
4123
4124 invalid_del exception;
4125 invalid_detail exception;
4126 del_not_updatable exception;
4127 grouping_attributes_not_match exception;
4128 arrival_SET_failed exception;
4129 ship_method_not_match exception;
4130 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
4131 l_mdc_detail_tab wsh_util_core.id_tab_type;
4132 DETAIL_DEL_FROM_to_not_SAME exception;
4133 det_confirmed exception;
4134 update_mol_carton_group_error exception;
4135
4136
4137 CURSOR c_delivery IS
4138 SELECT status_code,planned_flag, initial_pickup_location_id,ultimate_dropoff_location_id,
4139 customer_id, intmed_ship_to_location_id, fob_code, freight_terms_code, ship_method_code,
4140 carrier_id, mode_of_transport, service_level,
4141 -- deliveryMerge
4142 batch_id,
4143 NVL(shipment_direction,'O') shipment_direction, -- J-IB-NPARIKH
4144 shipping_control, -- J-IB-NPARIKH
4145 vendor_id, -- J-IB-NPARIKH
4146 party_id, -- J-IB-NPARIKH
4147 NVL(ignore_for_planning,'N') ignore_for_planning, --J TP Release ttrichy
4148 organization_id, -- K LPN CONV. rv
4149 client_id -- LSP PROJECT
4150 FROM wsh_new_deliveries
4151 WHERE delivery_id = p_delivery_id;
4152 l_del c_delivery%ROWTYPE;
4153
4154 CURSOR c_detail(c_detail_id NUMBER) IS
4155 SELECT wdd.delivery_detail_id, wdd.released_status, wdd.container_flag, wdd.ship_from_location_id, wdd.ship_to_location_id, wda.delivery_id, wdd.move_order_line_id, wdd.organization_id,
4156 wdd.freight_terms_code, -- J-IB-NPARIKH
4157 NVL(line_direction,'O') line_direction, -- J-IB-NPARIKH
4158 shipping_control, -- J-IB-NPARIKH
4159 vendor_id, -- J-IB-NPARIKH
4160 party_id, -- J-IB-NPARIKH
4161 NVL(ignore_for_planning,'N') ignore_for_planning,--J TP Release ttrichy
4162 mode_of_transport, carrier_id, service_level,
4163 wda.parent_delivery_detail_id, -- K LPN CONV. rv
4164 wdd.gross_weight, -- OTM R12 : assign delivery detail
4165 wdd.client_id -- LSP PROJECT
4166 FROM wsh_delivery_details wdd, wsh_delivery_assignments_v wda
4167 WHERE wdd.delivery_detail_id = wda.delivery_detail_id and wdd.delivery_detail_id = c_detail_id;
4168
4169
4170 l_detail c_detail%ROWTYPE;
4171
4172 l_del_assign NUMBER;
4173
4174 CURSOR c_all_details_below IS
4175 SELECT delivery_detail_id
4176 FROM wsh_delivery_assignments_v
4177 START WITH delivery_detail_id = p_detail_id
4178 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
4179
4180 CURSOR c_getdet_ignore IS
4181 select NVL(ignore_for_planning, 'N') ignore_for_planning
4182 from wsh_delivery_details
4183 where delivery_detail_id=p_detail_id;
4184
4185 -- J: W/V Changes
4186 l_detail_status VARCHAR2(1);
4187 l_gross_wt NUMBER;
4188 l_net_wt NUMBER;
4189 l_vol NUMBER;
4190 l_container_flag VARCHAR2(1);
4191 l_delivery_id NUMBER;
4192
4193 l_service_level VARCHAR2(30);
4194 l_mode_of_transport VARCHAR2(30);
4195 l_ship_method VARCHAR2(30);
4196 l_carrier_id NUMBER;
4197
4198 l_dd_id del_det_id_tab_type;
4199 i BINARY_INTEGER := 0;
4200 j BINARY_INTEGER :=0;
4201
4202 l_dummy_del_det_id NUMBER;
4203
4204 /* H projects: pricing integration csun */
4205 l_scc_unassign_from_del NUMBER := 0;
4206 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
4207 l_status WSH_LOOKUPS.meaning%TYPE;
4208 l_return_status VARCHAR2(1);
4209
4210 CURSOR get_lookup (l_code VARCHAR2) IS
4211 SELECT meaning
4212 FROM wsh_lookups
4213 WHERE lookup_type = 'DELIVERY_STATUS'
4214 AND lookup_code = l_code;
4215
4216 mark_reprice_error EXCEPTION;
4217 l_dlvy_freight_terms_code VARCHAR2(30);
4218 l_update_dlvy BOOLEAN;
4219
4220
4221 l_msg_count NUMBER;
4222 l_msg_data VARCHAR2(4000);
4223
4224 -- bug 2691385
4225 l_detail_is_empty_cont VARCHAR2(1) := 'N';
4226
4227 l_attr_tab wsh_delivery_autocreate.grp_attr_tab_type;
4228 l_group_tab wsh_delivery_autocreate.grp_attr_tab_type;
4229 l_action_rec wsh_delivery_autocreate.action_rec_type;
4230 l_target_rec wsh_delivery_autocreate.grp_attr_rec_type;
4231 l_matched_entities wsh_util_core.id_tab_type;
4232 l_out_rec wsh_delivery_autocreate.out_rec_type;
4233
4234 -- K LPN CONV. rv
4235 l_detail_wms_org VARCHAR2(10) := 'N';
4236 l_line_dir VARCHAR2(10);
4237 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
4238 l_num_warnings NUMBER := 0;
4239 -- K LPN CONV. rv
4240
4241 -- OTM R12 : update delivery
4242 l_delivery_info_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
4243 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
4244 l_new_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
4245 l_tms_update VARCHAR2(1);
4246 l_trip_not_found VARCHAR2(1);
4247 l_trip_info_rec WSH_DELIVERY_VALIDATIONS.trip_info_rec_type;
4248 l_tms_version_number WSH_NEW_DELIVERIES.TMS_VERSION_NUMBER%TYPE;
4249 l_gc3_is_installed VARCHAR2(1);
4250
4251 -- End of OTM R12 : update delivery
4252
4253 -- OTM R12 : assign delivery detail
4254 l_delivery_was_empty BOOLEAN;
4255 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
4256 l_gross_weight1 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
4257 l_gross_weight2 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
4258 l_delivery_detail_ids WSH_GLBL_VAR_STRCT_GRP.NUM_TBL_TYPE;
4259 l_assign_update BOOLEAN;
4260 -- End of OTM R12 : assign delivery detail
4261 --
4262 l_client_id NUMBER; -- LSP PROJECT
4263 --
4264 l_debug_on BOOLEAN;
4265 --
4266 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_TOP_DETAIL_TO_DELIVERY';
4267 --
4268 BEGIN
4269 --
4270 --
4271 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4272 --
4273 IF l_debug_on IS NULL
4274 THEN
4275 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4276 END IF;
4277 --
4278 IF l_debug_on THEN
4279 WSH_DEBUG_SV.push(l_module_name);
4280 --
4281 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
4282 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
4283 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_has_lines',x_dlvy_has_lines);
4284 WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
4285 END IF;
4286 --
4287 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4288
4289 -- OTM R12
4290 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
4291
4292 IF (l_gc3_is_installed IS NULL) THEN
4293 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
4294 END IF;
4295 l_assign_update := FALSE; --default assignment tms update to false
4296 -- End of OTM R12
4297
4298 -- J: W/V Changes
4299 open g_get_detail_info(p_detail_id);
4300 fetch g_get_detail_info
4301 into l_detail_status,l_gross_wt, l_net_wt, l_vol, l_container_flag, l_delivery_id;
4302 close g_get_detail_info;
4303
4304 IF l_delivery_id is NOT NULL THEN
4305 IF l_delivery_id <> p_delivery_id THEN
4306 FND_MESSAGE.SET_NAME('WSH','WSH_DET_ASSIGNED_DEL');
4307 FND_MESSAGE.SET_TOKEN('DET_NAME',p_detail_id);
4308 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_id);
4309 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4310 wsh_util_core.add_message(x_return_status,l_module_name);
4311 --
4312 IF l_debug_on THEN
4313 WSH_DEBUG_SV.pop(l_module_name);
4314 END IF;
4315 --
4316 RETURN;
4317 ELSE
4318 IF l_debug_on THEN
4319 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already assigned to '||l_delivery_id||'. Returning');
4320 WSH_DEBUG_SV.pop(l_module_name);
4321 END IF;
4322 return;
4323 END IF;
4324 END IF;
4325
4326
4327 --
4328 -- J-IB-NPARIKH-{
4329 IF x_dlvy_has_lines IS NULL
4330 THEN
4331 --{
4332 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
4333 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'x_dlvy_has_lines');
4334 RAISE FND_API.G_EXC_ERROR;
4335 --}
4336 END IF;
4337 -- J-IB-NPARIKH-}
4338 --
4339 --
4340 OPEN c_delivery;
4341 FETCH c_delivery into l_del;
4342 IF (c_delivery%NOTFOUND) THEN
4343 CLOSE c_delivery;
4344 RAISE INVALID_DEL;
4345 END IF;
4346
4347 CLOSE c_delivery;
4348
4349 --
4350 IF l_debug_on THEN
4351 WSH_DEBUG_SV.log(l_module_name,'status_code',l_del.status_code);
4352 WSH_DEBUG_SV.log(l_module_name,'Delivery Freight Terms',l_del.freight_Terms_code);
4353 END IF;
4354 --
4355 /* security rule, delivery status should be open or packed and not planned */
4356 /* the value for the flag can be Y or N updated with Bug 1559785*/
4357 IF ((l_del.status_code = 'CO') OR
4358 (l_del.status_code = 'IT') OR
4359 (l_del.status_code = 'CL') OR
4360 (l_del.status_code = 'SR') OR -- sperera 940/945
4361 (l_del.status_code = 'SC') OR
4362 (l_del.planned_flag IN ('Y','F')))
4363 AND l_del.shipment_direction IN ('O','IO') -- J-IB-NPARIKH
4364 THEN
4365 IF l_del.planned_flag IN ('Y','F') THEN
4366 fnd_message.SET_name('WSH', 'WSH_PLAN_DEL_NOT_UPDATABLE');
4367 ELSE
4368 OPEN get_lookup(l_del.status_code);
4369 FETCH get_lookup INTO l_status;
4370 CLOSE get_lookup;
4371 fnd_message.SET_name('WSH', 'WSH_DET_DEL_NOT_UPDATABLE');
4372 FND_MESSAGE.SET_TOKEN('STATUS',l_status);
4373 END IF;
4374 RAISE DEL_NOT_UPDATABLE;
4375 END IF;
4376
4377
4378 -- OTM R12 : assign delivery detail
4379 IF (l_gc3_is_installed = 'Y' AND
4380 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
4381
4382 Pre_Otm_Assign_Del_Detail
4383 (p_delivery_id => p_delivery_id,
4384 p_detail_id => p_detail_id,
4385 p_container1_id => NULL,
4386 p_container2_id => NULL,
4387 p_assignment_type => 'DD2D',
4388 x_delivery_was_empty => l_delivery_was_empty,
4389 x_assign_update => l_assign_update,
4390 x_gross_weight1 => l_gross_weight1,
4391 x_gross_weight2 => l_gross_weight2,
4392 x_return_status => l_return_status);
4393
4394 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
4395 IF l_debug_on THEN
4396 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
4397 END IF;
4398 raise FND_API.G_EXC_ERROR;
4399 END IF;
4400 END IF;
4401 -- End of OTM R12 : assign delivery detail
4402
4403 --J TP Release ttrichy
4404 FOR cur in c_getdet_ignore LOOP
4405 IF l_del.ignore_for_planning <> cur.ignore_for_planning THEN
4406 fnd_message.set_name('WSH', 'WSH_DET_DEL_DIFF_IGNOREPLAN');
4407 IF l_debug_on THEN
4408 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4409 END IF;
4410 fnd_message.set_token('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id), p_detail_id));
4411 IF l_debug_on THEN
4412 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4413 END IF;
4414 fnd_message.set_token('ENTITY2',wsh_new_deliveries_pvt.get_name(p_delivery_id));
4415 END IF;
4416 END LOOP;
4417
4418 OPEN c_all_details_below;
4419 --for locking all details
4420 LOOP
4421 FETCH c_all_details_below into l_dd_id(i);
4422 EXIT WHEN c_all_details_below%notfound;
4423 SELECT l_dd_id(i) into l_dummy_del_det_id
4424 FROM wsh_delivery_details
4425 WHERE delivery_detail_id=l_dd_id(i)
4426 FOR UPDATE NOWAIT;
4427 i:=i+1;
4428 END LOOP;
4429 CLOSE c_all_details_below;
4430
4431 FOR j IN 0..(l_dd_id.COUNT-1) LOOP
4432 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4433 /* For each detail */
4434 IF (l_dd_id(j) < 0) THEN
4435 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4436 fnd_message.SET_name('WSH', 'WSH_DET_DETAIL_NOT_ASSIGNED');
4437 wsh_util_core.add_message(x_return_status,l_module_name);
4438 --
4439 IF l_debug_on THEN
4440 WSH_DEBUG_SV.pop(l_module_name);
4441 END IF;
4442 --
4443 RETURN;
4444 END IF;
4445
4446
4447
4448
4449 OPEN c_detail(l_dd_id(j));
4450 FETCH c_detail into l_detail;
4451 CLOSE c_detail;
4452
4453 --
4454 IF l_debug_on THEN
4455 WSH_DEBUG_SV.log(l_module_name,'Released Status',l_detail.released_status);
4456 WSH_DEBUG_SV.log(l_module_name,'Delivery Id',l_detail.delivery_id);
4457 WSH_DEBUG_SV.log(l_module_name,'p_Delivery Id',p_delivery_id);
4458 WSH_DEBUG_SV.log(l_module_name,'Line Freight Terms',l_detail.freight_Terms_code);
4459 END IF;
4460 --
4461 --
4462 -- Bypass this check for inbound lines as a they can be assigned to delivery
4463 -- during ASN/Receipt integration, (line status is C)
4464 --
4465 IF l_detail.released_status = 'C'
4466 AND l_detail.line_direction IN ('O','IO') -- J-IB-NPARIKH
4467 THEN
4468 RAISE DET_CONFIRMED;
4469 END IF;
4470
4471
4472 IF ((l_detail.delivery_id IS NOT NULL) AND (l_detail.delivery_id <> p_delivery_id)) THEN
4473 FND_MESSAGE.SET_NAME('WSH','WSH_DET_ASSIGNED_DEL');
4474 FND_MESSAGE.SET_TOKEN('DET_NAME',l_detail.delivery_detail_id);
4475 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_detail.delivery_id);
4476 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4477 wsh_util_core.add_message(x_return_status,l_module_name);
4478 --
4479 IF l_debug_on THEN
4480 WSH_DEBUG_SV.pop(l_module_name);
4481 END IF;
4482 --
4483 RETURN;
4484 END IF;
4485
4486 IF l_detail.container_flag = 'Y' THEN --{ Bug 5100229
4487 -- bug 2691385 - check to see if the container is empty
4488 WSH_CONTAINER_UTILITIES.Is_Empty (p_container_instance_id => l_dd_id(j),
4489 x_empty_flag => l_detail_is_empty_cont,
4490 x_return_status => x_return_status);
4491 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4492 return;
4493 END IF;
4494 ELSE --}{
4495 l_detail_is_empty_cont := 'E';
4496 END IF; --}
4497
4498 -- If the container is empty, update the delivery grouping attributes for the container
4499 -- to be the delivery grouping attributes of the delivery.
4500 IF (l_detail_is_empty_cont = 'Y')
4501 THEN
4502 --{
4503 IF l_detail.line_direction IN ('O','IO')
4504 AND l_del.shipment_direction IN ('O','IO')
4505 THEN
4506 l_detail.line_direction := l_del.shipment_direction;
4507 END IF;
4508 --
4509 /*
4510 IF l_detail.line_direction NOT IN ('O','IO')
4511 AND l_del.shipment_direction NOT IN ('O','IO')
4512 THEN
4513 l_detail.line_direction := l_del.shipment_direction;
4514 END IF;
4515 */
4516 --
4517 -- K LPN CONV. rv
4518 --
4519 l_detail_wms_org := wsh_util_validate.check_wms_org(l_detail.organization_id);
4520 --
4521 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
4522 AND l_detail.line_direction IN ('O','IO')
4523 AND
4524 (
4525 (WSH_WMS_LPN_GRP.GK_WMS_UPD_GRP and l_detail_wms_org = 'Y')
4526 OR
4527 (WSH_WMS_LPN_GRP.GK_INV_UPD_GRP and l_detail_wms_org = 'N')
4528 )
4529 THEN
4530 --{
4531 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
4532 l_sync_tmp_rec.operation_type := 'UPDATE';
4533 --
4534 IF l_debug_on THEN
4535 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
4536 END IF;
4537 --
4538 WSH_WMS_SYNC_TMP_PKG.MERGE
4539 (
4540 p_sync_tmp_rec => l_sync_tmp_rec,
4541 x_return_status => l_return_status
4542 );
4543
4544 IF l_debug_on THEN
4545 WSH_DEBUG_SV.log(l_module_name,'Return Status is ',l_return_status);
4546 END IF;
4547 --
4548 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4549 --
4550 x_return_status := l_return_status;
4551 --
4552 IF l_debug_on THEN
4553 WSH_DEBUG_SV.pop(l_module_name);
4554 END IF;
4555 --
4556 return;
4557 --
4558 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
4559 --
4560 l_num_warnings := l_num_warnings + 1;
4561 --
4562 END IF;
4563 --
4564 --}
4565 END IF;
4566 -- K LPN CONV. rv
4567
4568 UPDATE WSH_DELIVERY_DETAILS
4569 SET ship_from_location_id = l_del.initial_pickup_location_id,
4570 ship_to_location_id = l_del.ultimate_dropoff_location_id,
4571 customer_id = l_del.customer_id,
4572 intmed_ship_to_location_id = l_del.intmed_ship_to_location_id,
4573 fob_code = l_del.fob_code,
4574 freight_terms_code = l_del.freight_terms_code,
4575 ship_method_code = l_del.ship_method_code,
4576 service_level = l_del.service_level,
4577 carrier_id = l_del.carrier_id,
4578 mode_of_transport = l_del.mode_of_transport,
4579 line_direction = l_detail.line_direction , -- J-IB-NPARIKH
4580 shipping_control = l_del.shipping_control, -- J-IB-NPARIKH
4581 client_id = l_del.client_id -- LSP PROJECT
4582 WHERE delivery_detail_id = l_dd_id(j);
4583
4584 IF (SQL%NOTFOUND) THEN
4585 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4586 RAISE NO_DATA_FOUND;
4587 END IF;
4588
4589 --Bug 3383843
4590 -- Need to open and fetch again because of previous updates
4591 OPEN c_detail(l_dd_id(j));
4592 FETCH c_detail into l_detail;
4593 CLOSE c_detail;
4594 -- Bug 3383843
4595
4596 --}
4597 END IF;
4598 -- end 2691385
4599
4600
4601 IF l_detail.container_flag='Y' THEN
4602 --
4603 IF l_debug_on THEN
4604 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.CHECK_CONT_ATTRIBUTES',WSH_DEBUG_SV.C_PROC_LEVEL);
4605 END IF;
4606 --
4607 WSH_CONTAINER_ACTIONS.Check_Cont_Attributes (
4608 l_detail.delivery_detail_id,
4609 l_attr_flag,
4610 x_return_status);
4611
4612 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4613 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4614 fnd_message.SET_name('WSH', 'WSH_CONT_ATTR_ERROR');
4615 FND_MESSAGE.SET_TOKEN('DETAIL_ID',l_detail.delivery_detail_id);
4616 wsh_util_core.add_message(x_return_status,l_module_name);
4617 --
4618 IF l_debug_on THEN
4619 WSH_DEBUG_SV.pop(l_module_name);
4620 END IF;
4621 --
4622 return;
4623 END IF;
4624 END IF;
4625
4626 /* security rule, group by attributes must be the same as the delivery's */
4627 /* Error */
4628 --
4629 IF l_debug_on THEN
4630 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.CHECK_ASSIGN_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
4631 END IF;
4632 --
4633
4634 l_attr_tab(1).entity_id := p_delivery_id;
4635 l_attr_tab(1).entity_type := 'DELIVERY';
4636 l_attr_tab(2).entity_id := l_detail.delivery_detail_id;
4637 l_attr_tab(2).entity_type := 'DELIVERY_DETAIL';
4638
4639 l_action_rec.action := 'MATCH_GROUPS';
4640 l_action_rec.check_single_grp := 'Y';
4641
4642 -- IF this procedure is called from autocreate-delivery then
4643 -- the matching is already done.
4644
4645 IF NVL(p_caller , 'WSH') <> 'AUTOCREATE' THEN --{ bug 5100229
4646 WSH_DELIVERY_AUTOCREATE.Find_Matching_Groups(p_attr_tab => l_attr_tab,
4647 p_action_rec => l_action_rec,
4648 p_target_rec => l_target_rec,
4649 p_group_tab => l_group_tab,
4650 x_matched_entities => l_matched_entities,
4651 x_out_rec => l_out_rec,
4652 x_return_status => l_group_status);
4653
4654 IF (l_group_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4655 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4656 --
4657 IF l_debug_on THEN
4658 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
4659 WSH_DEBUG_SV.pop(l_module_name);
4660 END IF;
4661 --
4662 RETURN;
4663 END IF;
4664 END IF; --}
4665
4666 -- Pack J: Generic Carrier
4667 -- Update the ship method components in the delivery
4668 -- to match the assigned delivery_detail.
4669 -- Also update the line direction.
4670
4671 IF NVL(p_caller, 'WSH') <> 'AUTOCREATE' THEN --{ bug 5100229
4672
4673 -- if this is called from autocreate delivery then the ship
4674 -- method componants are already set there for the delivery.
4675
4676 l_service_level := l_group_tab(l_group_tab.first).service_level;
4677 l_mode_of_transport := l_group_tab(l_group_tab.first).mode_of_transport;
4678 l_carrier_id := l_group_tab(l_group_tab.first).carrier_id;
4679 l_ship_method := l_group_tab(l_group_tab.first).ship_method_code;
4680 l_client_id := l_group_tab(l_group_tab.first).client_id; -- LSP PROJECT
4681 END IF; --}
4682
4683 -- OTM R12 : update delivery
4684 l_tms_update := 'N';
4685 l_new_interface_flag_tab(1) := NULL;
4686
4687 IF (l_gc3_is_installed = 'Y' AND
4688 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
4689 l_trip_not_found := 'N';
4690
4691 --get trip information for delivery, no update when trip not OPEN
4692 WSH_DELIVERY_VALIDATIONS.get_trip_information
4693 (p_delivery_id => p_delivery_id,
4694 x_trip_info_rec => l_trip_info_rec,
4695 x_return_status => l_return_status);
4696
4697 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4698 x_return_status := l_return_status;
4699 IF l_debug_on THEN
4700 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_trip_information');
4701 WSH_DEBUG_SV.pop(l_module_name);
4702 END IF;
4703 RETURN;
4704 END IF;
4705
4706 IF (l_trip_info_rec.trip_id IS NULL) THEN
4707 l_trip_not_found := 'Y';
4708 END IF;
4709
4710 -- only do changes when there's no trip or trip status is OPEN
4711 IF (l_trip_info_rec.status_code = 'OP' OR
4712 l_trip_not_found = 'Y') THEN
4713
4714 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
4715 p_delivery_id => p_delivery_id,
4716 x_delivery_rec => l_delivery_info,
4717 x_return_status => l_return_status);
4718
4719 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4720 x_return_status := l_return_status;
4721 IF l_debug_on THEN
4722 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
4723 WSH_DEBUG_SV.pop(l_module_name);
4724 END IF;
4725 RETURN;
4726 END IF;
4727
4728 -- if delivery is include for planning and service level, mode of
4729 -- transport, carrier id, or ship mdethod is changed with the nvl
4730 -- updates, then update is needed
4731
4732 IF (nvl(l_delivery_info.service_level,
4733 nvl(l_service_level, '@@')) <>
4734 nvl(l_delivery_info.service_level, '@@') OR
4735 nvl(l_delivery_info.mode_of_transport,
4736 nvl(l_mode_of_transport, '@@')) <>
4737 nvl(l_delivery_info.mode_of_transport, '@@') OR
4738 nvl(l_delivery_info.carrier_id, nvl(l_carrier_id, -1)) <>
4739 nvl(l_delivery_info.carrier_id, -1) OR
4740 nvl(l_delivery_info.ship_method_code,
4741 nvl(l_ship_method, '@@')) <>
4742 nvl(l_delivery_info.ship_method_code, '@@')) THEN
4743
4744 IF (l_delivery_info.tms_interface_flag NOT IN
4745 (WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT,
4746 WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
4747 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
4748 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
4749 WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED)) THEN
4750 l_tms_update := 'Y';
4751 l_delivery_info_tab(1) := l_delivery_info;
4752 l_new_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
4753 l_tms_version_number := nvl(l_delivery_info.tms_version_number, 1) + 1;
4754 END IF;
4755 END IF; -- checking the value differences
4756 END IF; -- IF ((l_trip_not_found = 'N' AND
4757 END IF; -- IF (l_gc3_is_installed = 'Y'
4758
4759 IF l_debug_on THEN
4760 WSH_DEBUG_SV.log(l_module_name, 'l_gc3_is_installed', l_gc3_is_installed);
4761 WSH_DEBUG_SV.log(l_module_name, 'l_tms_update', l_tms_update);
4762 IF (l_tms_update = 'Y') THEN
4763 WSH_DEBUG_SV.log(l_module_name, 'l_new_interface_flag_tab', l_new_interface_flag_tab(1));
4764 WSH_DEBUG_SV.log(l_module_name, 'l_tms_version_number', l_tms_version_number);
4765 END IF;
4766 END IF;
4767
4768 -- End of OTM R12 : update delivery
4769
4770 UPDATE WSH_NEW_DELIVERIES
4771 SET MODE_OF_TRANSPORT = decode(mode_of_transport, NULL, l_mode_of_transport, mode_of_transport),
4772 SERVICE_LEVEL = decode(service_level, NULL, l_service_level, service_level),
4773 CARRIER_ID = decode(carrier_id, NULL, l_carrier_id, carrier_id),
4774 SHIP_METHOD_CODE = decode(ship_method_code, NULL, l_ship_method, ship_method_code),
4775 SHIPMENT_DIRECTION = l_detail.line_direction,
4776 -- OTM R12
4777 TMS_INTERFACE_FLAG = decode(l_tms_update, 'Y', l_new_interface_flag_tab(1), nvl(TMS_INTERFACE_FLAG, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
4778 TMS_VERSION_NUMBER = decode(l_tms_update, 'Y', l_tms_version_number, nvl(tms_version_number, 1)),
4779 -- End of OTM R12
4780 client_id = decode(client_id,NULL,l_client_id,client_id) -- LSP PROJECT
4781 WHERE delivery_id = p_delivery_id;
4782
4783 -- OTM R12 : update delivery
4784 IF (l_gc3_is_installed = 'Y' AND l_tms_update = 'Y') THEN
4785 WSH_XC_UTIL.LOG_OTM_EXCEPTION(
4786 p_delivery_info_tab => l_delivery_info_tab,
4787 p_new_interface_flag_tab => l_new_interface_flag_tab,
4788 x_return_status => l_return_status);
4789
4790 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4791 x_return_status := l_return_status;
4792 IF l_debug_on THEN
4793 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_XC_UTIL.log_otm_exception');
4794 WSH_DEBUG_SV.pop(l_module_name);
4795 END IF;
4796 RETURN;
4797 END IF;
4798 END IF;
4799 -- End of OTM R12 : update delivery
4800
4801 /* security rule, ship-to-location and ship-FROM-location must be the
4802 same as the delivery's */
4803 /* Error */
4804
4805 IF l_debug_on THEN
4806 WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id'
4807 ,l_del.initial_pickup_location_id);
4808 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id',
4809 l_detail.ship_from_location_id);
4810 WSH_DEBUG_SV.log(l_module_name,
4811 'ultimate_dropoff_location_id',
4812 l_del.ultimate_dropoff_location_id);
4813 WSH_DEBUG_SV.log(l_module_name,'ship_to_location_id',
4814 l_detail.ship_to_location_id);
4815 END IF;
4816 IF ((l_del.initial_pickup_location_id <> l_detail.ship_from_location_id)
4817 or (l_del.ultimate_dropoff_location_id <> l_detail.ship_to_location_id)
4818 or (l_detail.ship_to_location_id IS null)) THEN
4819 RAISE DETAIL_DEL_FROM_to_not_SAME ;
4820 END IF;
4821 --
4822 -- K LPN CONV. rv
4823 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
4824 AND l_detail.line_direction IN ('O', 'IO')
4825 AND l_detail.container_flag='Y'
4826 AND
4827 (
4828 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_detail_wms_org = 'Y')
4829 OR
4830 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_detail_wms_org = 'N')
4831 )
4832 THEN
4833 --{
4834 l_sync_tmp_rec.delivery_detail_id := l_detail.delivery_detail_id;
4835 l_sync_tmp_rec.parent_delivery_detail_id := l_detail.parent_delivery_detail_id;
4836 l_sync_tmp_rec.delivery_id := l_detail.delivery_id;
4837 l_sync_tmp_rec.operation_type := 'PRIOR';
4838 --
4839 IF l_debug_on THEN
4840 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
4841 END IF;
4842 --
4843 WSH_WMS_SYNC_TMP_PKG.MERGE
4844 (
4845 p_sync_tmp_rec => l_sync_tmp_rec,
4846 x_return_status => l_return_status
4847 );
4848
4849 --
4850 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4851 --
4852 x_return_status := l_return_status;
4853 --
4854 IF l_debug_on THEN
4855 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
4856 WSH_DEBUG_SV.pop(l_module_name);
4857 END IF;
4858 --
4859 return;
4860 --
4861 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
4862 --
4863 l_num_warnings := l_num_warnings + 1;
4864 --
4865 END IF;
4866 --
4867 --}
4868 END IF;
4869 -- K LPN CONV. rv
4870 --
4871
4872 UPDATE wsh_delivery_assignments
4873 SET delivery_id = p_delivery_id,
4874 last_update_date = SYSDATE,
4875 last_updated_by = FND_GLOBAL.USER_ID,
4876 last_update_login = FND_GLOBAL.LOGIN_ID
4877 WHERE delivery_detail_id = l_detail.delivery_detail_id
4878 AND (type IN ('S', 'O') OR type IS NULL);
4879
4880 IF (SQL%NOTFOUND) THEN
4881 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4882 RAISE NO_DATA_FOUND;
4883 END IF;
4884
4885 l_mdc_detail_tab(1) := l_detail.delivery_detail_id;
4886 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
4887 p_detail_id_tab => l_mdc_detail_tab,
4888 x_return_status => x_return_status);
4889
4890 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4891 IF l_debug_on THEN
4892 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
4893 WSH_DEBUG_SV.pop(l_module_name);
4894 END IF;
4895 return;
4896 END IF;
4897
4898
4899 -- J-IB-NPARIKH-{
4900 --
4901 --
4902 -- Set freight terms for inbound/drop-ship delivery
4903 -- For non-empty delivery, set freight term to null,
4904 -- if line's freight term is different
4905 -- For an empty delivery, set freight term to line's value
4906 --
4907 x_dlvy_freight_terms_code := l_del.freight_terms_code;
4908 --
4909 IF NVL(l_detail.container_flag,'N') = 'N'
4910 AND l_detail.line_direction NOT IN ('O','IO')
4911 THEN
4912 --{
4913 IF x_dlvy_has_lines = 'Y'
4914 AND x_dlvy_freight_terms_code IS NOT NULL
4915 AND NVL(l_detail.freight_terms_code,'!!!!!') <> x_dlvy_freight_terms_code
4916 THEN
4917 --
4918 -- Non-empty delivery has different freight term than line's
4919 -- So, we need to update delivery freight term to NULL
4920 --
4921 x_dlvy_freight_terms_code := NULL;
4922 ELSIF x_dlvy_has_lines = 'N'
4923 AND NVL(l_detail.freight_terms_code,'!!!!!') <> NVL(x_dlvy_freight_terms_code,'!!!!!')
4924 THEN
4925 x_dlvy_freight_terms_code := l_detail.freight_terms_code;
4926 END IF;
4927 --
4928 --
4929 IF NVL(l_del.freight_terms_code,'!!!!!') <> NVL(x_dlvy_freight_terms_code,'!!!!!')
4930 THEN
4931 --{
4932 --
4933 IF l_debug_on THEN
4934 WSH_DEBUG_SV.log(l_module_name,'Delivery updated Freight Terms',x_dlvy_freight_terms_code);
4935 END IF;
4936 --
4937
4938 -- OTM R12 : update delivery
4939 -- no code changes are needed for the following update
4940 -- since this routine is only for Inbound/drop-ship
4941 -- deliveries, OTM flow will never reach here
4942
4943 UPDATE wsh_new_deliveries
4944 SET freight_terms_code = x_dlvy_freight_terms_code,
4945 last_update_date = SYSDATE,
4946 last_updated_by = FND_GLOBAL.USER_ID,
4947 last_update_login = FND_GLOBAL.LOGIN_ID
4948 WHERE delivery_id = p_delivery_id;
4949 --
4950 IF (SQL%NOTFOUND)
4951 THEN
4952 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4953 RAISE INVALID_DEL;
4954 END IF;
4955 --}
4956 END IF;
4957 --}
4958 END IF;
4959 --
4960 x_dlvy_has_lines := 'Y';
4961 --
4962 -- J-IB-NPARIKH-}
4963
4964
4965 IF (l_detail.released_status = WSH_DELIVERY_DETAILS_PKG.C_RELEASED_TO_WAREHOUSE) THEN
4966 --{
4967 IF (wsh_util_validate.Check_Wms_Org(l_detail.organization_id)='Y') AND
4968 (l_detail.move_order_line_id IS NOT NULL AND
4969 (WSH_USA_INV_PVT.is_mo_type_putaway
4970 (p_move_order_line_id => l_detail.move_order_line_id) = 'N') -- X-dock
4971 ) THEN -- check if wms org
4972
4973 -- Update Cartonization ID.
4974 IF l_debug_on THEN
4975 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_MO_CANCEL_PVT.update_mol_carton_group',WSH_DEBUG_SV.C_PROC_LEVEL);
4976 END IF;
4977
4978 INV_MO_Cancel_PVT.update_mol_carton_group
4979 (p_line_id => l_detail.move_order_line_id,
4980 p_carton_grouping_id => p_delivery_id,
4981 x_return_status => x_return_status,
4982 x_msg_cnt => l_msg_count,
4983 x_msg_data => l_msg_data);
4984
4985 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
4986 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4987 RAISE update_mol_carton_group_error;
4988 END IF;
4989 END IF;
4990 --}
4991 END IF;
4992
4993 --if container check attr flag, update container hierarchy
4994 IF l_detail.container_flag='Y' THEN
4995 IF l_attr_flag = 'N' THEN
4996 --
4997 IF l_debug_on THEN
4998 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.UPDATE_CONT_HIERARCHY',WSH_DEBUG_SV.C_PROC_LEVEL);
4999 END IF;
5000 --
5001 WSH_CONTAINER_ACTIONS.Update_Cont_Hierarchy (
5002 NULL,
5003 p_delivery_id,
5004 l_detail.delivery_detail_id,
5005 x_return_status);
5006 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5007 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_UPD_ATTR_ERROR');
5008 --
5009 IF l_debug_on THEN
5010 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5011 END IF;
5012 --
5013 l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_detail.delivery_detail_id);
5014 FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
5015 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5016 --
5017 IF l_debug_on THEN
5018 WSH_DEBUG_SV.pop(l_module_name);
5019 END IF;
5020 --
5021 return;
5022 END IF;
5023 END IF;
5024 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5025 END IF;--for container
5026 /* H projects: pricing integration csun , if any lines are
5027 successfully unassign from the delivery, the delivery needs to be marked
5028 for repricing */
5029 l_scc_unassign_from_del := l_scc_unassign_from_del + 1;
5030 END LOOP;
5031 /* For each detail*/
5032
5033
5034 -- OTM R12 : assign delivery detail
5035 IF (l_assign_update AND
5036 l_gc3_is_installed = 'Y' AND
5037 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
5038
5039 IF (l_tms_update = 'Y') THEN
5040 l_tms_interface_flag := l_new_interface_flag_tab(1);
5041 ELSIF (l_trip_info_rec.status_code = 'OP' OR
5042 l_trip_not_found = 'Y') THEN
5043 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
5044 ELSE
5045 l_tms_interface_flag := NULL;
5046 END IF;
5047
5048 Post_Otm_Assign_Del_Detail
5049 (p_delivery_id => p_delivery_id,
5050 p_delivery_was_empty => l_delivery_was_empty,
5051 p_tms_interface_flag => l_tms_interface_flag,
5052 p_gross_weight => l_gross_weight1,
5053 x_return_status => l_return_status);
5054
5055 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
5056 IF l_debug_on THEN
5057 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
5058 END IF;
5059 raise FND_API.G_EXC_ERROR;
5060 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5061 l_num_warnings := l_num_warnings + 1;
5062 END IF;
5063 END IF;
5064 -- End of OTM R12 : assign delivery detail
5065
5066 -- J: W/V Changes
5067 -- Increment the delivery W/V by DD W/V
5068 IF l_debug_on THEN
5069 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
5070 END IF;
5071 WSH_WV_UTILS.DD_WV_Post_Process(
5072 p_delivery_detail_id => p_detail_id,
5073 p_diff_gross_wt => l_gross_wt,
5074 p_diff_net_wt => l_net_wt,
5075 p_diff_volume => l_vol,
5076 p_diff_fill_volume => l_vol,
5077 x_return_status => l_return_status);
5078
5079 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5080 --
5081 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5082 WSH_UTIL_CORE.Add_Message(x_return_status);
5083 IF l_debug_on THEN
5084 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
5085 WSH_DEBUG_SV.pop(l_module_name);
5086 END IF;
5087 return;
5088 END IF;
5089
5090 --
5091 IF l_debug_on THEN
5092 WSH_DEBUG_SV.log(l_module_name,'l_scc_unassign_from_del',
5093 l_scc_unassign_from_del);
5094 END IF;
5095
5096 /* H integration: Pricing integration csun */
5097 IF l_scc_unassign_from_del > 0 THEN
5098 l_del_tab.delete;
5099 l_del_tab(1) := p_delivery_id;
5100
5101 --
5102 IF l_debug_on THEN
5103 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
5104 END IF;
5105 --
5106 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
5107 p_entity_type => 'DELIVERY',
5108 p_entity_ids => l_del_tab,
5109 x_return_status => l_return_status);
5110 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5111 raise mark_reprice_error;
5112 END IF;
5113 END IF;
5114
5115 -- LPN CONV. rv
5116 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5117 --
5118 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5119 --
5120 ELSE
5121 --
5122 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5123 --
5124 END IF;
5125 -- LPN CONV. rv
5126
5127
5128 --
5129 IF l_debug_on THEN
5130 WSH_DEBUG_SV.pop(l_module_name);
5131 END IF;
5132 --
5133 EXCEPTION
5134 -- J-IB-NPARIKH-{
5135 WHEN FND_API.G_EXC_ERROR THEN
5136 x_return_status := WSH_UTIL_CORE.g_ret_sts_error;
5137 WSH_UTIL_CORE.add_message (WSH_UTIL_CORE.g_ret_sts_error,l_module_name);
5138 --
5139 IF l_debug_on
5140 THEN
5141 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
5142 END IF;
5143 -- J-IB-NPARIKH-}
5144
5145 WHEN mark_reprice_error THEN
5146 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
5147 x_return_status := l_return_status;
5148 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
5149
5150 --
5151 IF l_debug_on THEN
5152 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5153 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
5154 END IF;
5155 --
5156 WHEN update_mol_carton_group_error THEN
5157 fnd_message.SET_name('WSH', 'WSH_MOL_CARTON_GROUP_ERROR');
5158 x_return_status := l_return_status;
5159 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
5160
5161 --
5162 IF l_debug_on THEN
5163 WSH_DEBUG_SV.logmsg(l_module_name,'update_mol_carton_group_error exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5164 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:update_mol_carton_group_error');
5165 END IF;
5166
5167
5168 WHEN INVALID_DEL THEN
5169 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5170 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
5171 wsh_util_core.add_message(x_return_status,l_module_name);
5172 --
5173 IF l_debug_on THEN
5174 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DEL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5175 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DEL');
5176 END IF;
5177 RETURN;
5178 --
5179 WHEN DEL_NOT_UPDATABLE THEN
5180 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5181 wsh_util_core.add_message(x_return_status,l_module_name);
5182 --
5183 IF l_debug_on THEN
5184 WSH_DEBUG_SV.logmsg(l_module_name,'DEL_NOT_UPDATABLE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5185 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DEL_NOT_UPDATABLE');
5186 END IF;
5187 --
5188 RETURN;
5189 WHEN INVALID_DETAIL THEN
5190 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5191 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DETAIL');
5192 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
5193 wsh_util_core.add_message(x_return_status,l_module_name);
5194 --
5195 IF l_debug_on THEN
5196 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5197 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DETAIL');
5198 END IF;
5199 --
5200 RETURN;
5201 WHEN DET_CONFIRMED THEN
5202 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5203 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
5204 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
5205 wsh_util_core.add_message(x_return_status,l_module_name);
5206 --
5207 IF l_debug_on THEN
5208 WSH_DEBUG_SV.logmsg(l_module_name,'DET_CONFIRMED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5209 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DET_CONFIRMED');
5210 END IF;
5211 --
5212 RETURN;
5213 WHEN detail_del_FROM_to_not_same THEN
5214 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5215 fnd_message.SET_name('WSH', 'WSH_DET_SHIP_F_T_N_MATCH');
5216 wsh_util_core.add_message(x_return_status,l_module_name);
5217
5218
5219
5220 --
5221 IF l_debug_on THEN
5222 WSH_DEBUG_SV.logmsg(l_module_name,'DETAIL_DEL_FROM_TO_NOT_SAME exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5223 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DETAIL_DEL_FROM_TO_NOT_SAME');
5224 END IF;
5225 --
5226 RETURN;
5227 WHEN ship_method_not_match THEN
5228 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5229 fnd_message.SET_name('WSH', 'WSH_DET_SHIP_METHOD_NOT_MATCH');
5230 wsh_util_core.add_message(x_return_status,l_module_name);
5231 --
5232 IF l_debug_on THEN
5233 WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_METHOD_NOT_MATCH exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5234 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_METHOD_NOT_MATCH');
5235 END IF;
5236 --
5237 RETURN;
5238 WHEN others THEN
5239 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5240 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_TOP_DETAIL_TO_DELIVERY',l_module_name);
5241 --
5242 IF l_debug_on THEN
5243 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5244 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5245 END IF;
5246 --
5247 RETURN;
5248 END Assign_Top_Detail_To_Delivery;
5249 -------------------------------------------------------------------
5250 -- This procedure is only for backward compatibility. No one should call
5251 -- this procedure.
5252 -------------------------------------------------------------------
5253
5254 PROCEDURE Assign_Top_Detail_To_Delivery(
5255 P_DETAIL_ID IN NUMBER,
5256 P_DELIVERY_ID IN NUMBER,
5257 X_RETURN_STATUS OUT NOCOPY VARCHAR2
5258 ) IS
5259
5260 --
5261 l_debug_on BOOLEAN;
5262 --
5263 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_TOP_DETAIL_TO_DELIVERY';
5264 --
5265 l_has_lines VARCHAR2(1);
5266 l_dlvy_freight_terms_code VARCHAR2(30);
5267 --
5268 BEGIN
5269 --
5270 --
5271 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5272 --
5273 IF l_debug_on IS NULL
5274 THEN
5275 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5276 END IF;
5277 --
5278 IF l_debug_on THEN
5279 WSH_DEBUG_SV.push(l_module_name);
5280 --
5281 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
5282 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
5283 END IF;
5284 --
5285 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5286 --
5287 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
5288 (
5289 p_delivery_id => p_delivery_id
5290 );
5291 --
5292 ASSIGN_TOP_DETAIL_TO_DELIVERY
5293 (
5294 p_detail_id => p_detail_id,
5295 p_delivery_id => p_delivery_id,
5296 X_RETURN_STATUS => X_RETURN_STATUS,
5297 x_dlvy_has_lines => l_has_lines,
5298 x_dlvy_freight_Terms_code => l_dlvy_freight_Terms_code
5299 );
5300 --
5301 IF l_debug_on THEN
5302 WSH_DEBUG_SV.pop(l_module_name);
5303 END IF;
5304 --
5305 EXCEPTION
5306 WHEN others THEN
5307 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5308 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_TOP_DETAIL_TO_DELIVERY',l_module_name);
5309 --
5310 IF l_debug_on THEN
5311 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5312 END IF;
5313 END Assign_Top_Detail_To_Delivery;
5314
5315 -- THIS PROCEDURE IS OBSOLETE
5316 --
5317 --Procedure: Unassign_Cont_from_Delivery
5318 --Parameters: p_detail_id,
5319 -- x_return_status
5320 --Desription: Unassign an container FROM a delivery
5321 -- Note: need to drill up down to UPDATE delivery_id to NULL
5322
5323 PROCEDURE Unassign_Cont_from_Delivery(
5324 p_detail_id IN NUMBER,
5325 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
5326 p_validate_flag IN VARCHAR2) IS
5327
5328 --
5329 l_debug_on BOOLEAN;
5330 --
5331 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_CONT_FROM_DELIVERY';
5332 --
5333 BEGIN
5334 --
5335 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5336 --
5337 END Unassign_Cont_FROM_Delivery;
5338
5339 --
5340 --Procedure: Assign_Cont_to_Cont
5341 --Parameters: p_detail_id1
5342 -- p_detail_id2
5343 -- x_return_status
5344 --Desription: Assigns a container to another container
5345
5346 -- it is called when assigning container1 to container2
5347 -- if container1 is already assigned to a delivery, then drill up and down
5348 -- of the container2 and assign delivery_id to all the parent and child
5349 -- containers of the container2.
5350
5351 -- if container2 is already assigned to a delivery, then drill up and down
5352 -- of container1 and assign delivery_id to all parent and child containers
5353 -- of the container1
5354
5355
5356 PROCEDURE Assign_Cont_To_Cont(
5357 p_detail_id1 IN NUMBER,
5358 p_detail_id2 IN NUMBER,
5359 x_return_status OUT NOCOPY VARCHAR2)
5360 IS
5361
5362 --Bug 3522687 : OMFST:J:R2:RG:APPLN HANGS WHILE PERFORMING MANUAL PACKING ACTION
5363 --Modified cursor check_loop
5364 /*
5365 CURSOR check_loop(x_delivery_detail_id NUMBER) IS
5366 SELECT delivery_detail_id
5367 FROM wsh_delivery_assignments_v
5368 START WITH delivery_detail_id = x_delivery_detail_id
5369 CONNECT BY PRIOR delivery_detail_id = parent_delivery_detail_id;
5370 */
5371
5372 CURSOR c_get_shipto (p_container_id NUMBER) IS
5373 SELECT ship_to_location_id
5374 FROM wsh_delivery_details
5375 WHERE delivery_detail_id = p_container_id;
5376
5377 l_container_is_empty BOOLEAN;
5378 l_ship_to_loc NUMBER;
5379 l_display_error BOOLEAN;
5380
5381
5382 CURSOR check_loop(p_inner_cont_id NUMBER,p_outer_cont_id NUMBER) IS
5383 SELECT delivery_detail_id
5384 FROM wsh_delivery_assignments_v
5385 WHERE delivery_detail_id = p_outer_cont_id
5386 START WITH delivery_detail_id = p_inner_cont_id
5387 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
5388
5389 -- Bug 3715176
5390 CURSOR c_get_plan_flag (v_delivery_id NUMBER) IS
5391 SELECT nvl(planned_flag,'N')
5392 FROM wsh_new_deliveries
5393 WHERE delivery_id = v_delivery_id;
5394
5395 CURSOR c_get_content_count(v_delivery_detail_id NUMBER) IS
5396 SELECT count(*)
5397 FROM wsh_delivery_assignments_v wda
5398 WHERE wda.parent_delivery_detail_id = v_delivery_detail_id and rownum = 1;
5399 -- Bug 3715176
5400
5401 /* Commenting this out - Bug 2457558
5402 -- Bug 2167042-added to check fill percentage for a container
5403 -- when packing a container
5404
5405 CURSOR Get_Min_Fill(v_cont_id NUMBER) IS
5406 SELECT nvl(minimum_fill_percent,0)
5407 FROM WSH_DELIVERY_DETAILS
5408 WHERE delivery_detail_id = v_cont_id
5409 AND container_flag = 'Y';
5410
5411 l_min_fill NUMBER;
5412 l_fill NUMBER;
5413 l_gross NUMBER;
5414 l_net NUMBER;
5415 l_volume NUMBER;
5416 l_cont_name VARCHAR2(30);
5417 x_pack_status VARCHAR2(30);
5418
5419 End of adding cursor for fill percentage
5420 */
5421 l_return_status VARCHAR2(1) := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5422 l_del_id_for_container1 C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
5423 l_del_id_for_container2 C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
5424
5425 detail_cont_name WSH_DELIVERY_DETAILS.CONTAINER_NAME%TYPE;
5426 parent_cont_name WSH_DELIVERY_DETAILS.CONTAINER_NAME%TYPE;
5427
5428 l_group_by_flags WSH_DELIVERY_AUTOCREATE.group_by_flags_rec_type;
5429 /* H projects: pricing integration csun */
5430 m NUMBER := 0;
5431 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
5432 mark_reprice_error EXCEPTION;
5433 l_plan_flag varchar2(1);
5434 l_content_count NUMBER;
5435
5436 l_out_container NUMBER := 0 ;
5437 --
5438 -- K LPN CONV. rv
5439 l_wms_org VARCHAR2(10) := 'N';
5440 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
5441 l_sync_tmp_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
5442 l_num_warnings NUMBER := 0;
5443 l_operation_type VARCHAR2(100);
5444 -- K LPN CONV. rv
5445 l_mdc_detail_tab WSH_UTIL_CORE.Id_Tab_Type;
5446 l_ignore_det_tab WSH_UTIL_CORE.Id_Tab_Type;
5447
5448 -- OTM R12 : assign delivery detail
5449 l_delivery_was_empty BOOLEAN;
5450 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
5451 l_gross_weight1 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
5452 l_gross_weight2 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
5453 l_gc3_is_installed VARCHAR2(1);
5454 l_assign_update BOOLEAN;
5455 -- End of OTM R12 : assign delivery detail
5456
5457 l_debug_on BOOLEAN;
5458 --
5459 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_CONT_TO_CONT';
5460 --
5461 BEGIN
5462 -- assumption: IF both container1 and container2 are already
5463 -- assigned to deliveries. Both deliveries must be the same
5464 --
5465 --
5466 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5467 --
5468 IF l_debug_on IS NULL
5469 THEN
5470 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5471 END IF;
5472 --
5473 IF l_debug_on THEN
5474 WSH_DEBUG_SV.push(l_module_name);
5475 --
5476 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID1',P_DETAIL_ID1);
5477 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID2',P_DETAIL_ID2);
5478 END IF;
5479 --
5480 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5481
5482 -- OTM R12
5483 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
5484
5485 IF (l_gc3_is_installed IS NULL) THEN
5486 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
5487 END IF;
5488 l_assign_update := FALSE; --default assignment tms update to false
5489 -- End of OTM R12
5490
5491 OPEN c_del_id_FOR_cont_or_detail(p_detail_id1);
5492 FETCH c_del_id_for_cont_or_detail into l_del_id_for_container1;
5493 CLOSE c_del_id_for_cont_or_detail;
5494
5495 -- J: W/V Changes
5496 IF l_del_id_for_container1.parent_delivery_detail_id = p_detail_id2 THEN
5497 IF l_debug_on THEN
5498 WSH_DEBUG_SV.logmsg(l_module_name,'Cont '||p_detail_id1||' is already assigned to '||p_detail_id2||'. Returning');
5499 WSH_DEBUG_SV.pop(l_module_name);
5500 END IF;
5501 return;
5502 END IF;
5503
5504 OPEN c_del_id_for_cont_or_detail(p_detail_id2);
5505 FETCH c_del_id_for_cont_or_detail into l_del_id_for_container2;
5506 CLOSE c_del_id_for_cont_or_detail;
5507
5508 -- K LPN CONV. rv
5509 --
5510 l_wms_org := wsh_util_validate.check_wms_org(l_del_id_for_container2.organization_id);
5511 --
5512 -- K LPN CONV. rv
5513 IF l_debug_on THEN
5514 WSH_DEBUG_SV.log(l_module_name,'delivery_id 1',
5515 l_del_id_for_container1.delivery_id);
5516 WSH_DEBUG_SV.log(l_module_name,'organization_id 1',
5517 l_del_id_for_container1.organization_id);
5518 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id 1',
5519 l_del_id_for_container1.ship_from_location_id);
5520 WSH_DEBUG_SV.log(l_module_name,'customer_id 1',
5521 l_del_id_for_container1.customer_id);
5522 WSH_DEBUG_SV.log(l_module_name,'intmed_ship_to_location_id 1',
5523 l_del_id_for_container1.intmed_ship_to_location_id);
5524 WSH_DEBUG_SV.log(l_module_name,'fob_code 1',
5525 l_del_id_for_container1.fob_code);
5526 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code 1',
5527 l_del_id_for_container1.freight_terms_code);
5528 WSH_DEBUG_SV.log(l_module_name,'ship_method_code 1',
5529 l_del_id_for_container1.ship_method_code);
5530 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id 1',
5531 l_del_id_for_container1.parent_delivery_detail_id);
5532
5533 WSH_DEBUG_SV.log(l_module_name,'delivery_id 2',
5534 l_del_id_for_container2.delivery_id);
5535 WSH_DEBUG_SV.log(l_module_name,'organization_id 2',
5536 l_del_id_for_container2.organization_id);
5537 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id 2',
5538 l_del_id_for_container2.ship_from_location_id);
5539 WSH_DEBUG_SV.log(l_module_name,'customer_id 2',
5540 l_del_id_for_container2.customer_id);
5541 WSH_DEBUG_SV.log(l_module_name,'intmed_ship_to_location_id 2', l_del_id_for_container2.intmed_ship_to_location_id);
5542 WSH_DEBUG_SV.log(l_module_name,'fob_code 2',
5543 l_del_id_for_container2.fob_code);
5544 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code 2',
5545 l_del_id_for_container2.freight_terms_code);
5546 WSH_DEBUG_SV.log(l_module_name,'ship_method_code 2',
5547 l_del_id_for_container2.ship_method_code);
5548 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id 2',
5549 l_del_id_for_container2.parent_delivery_detail_id);
5550 WSH_DEBUG_SV.log(l_module_name,'customer',
5551 l_group_by_flags.customer);
5552 WSH_DEBUG_SV.log(l_module_name,'intmed',
5553 l_group_by_flags.intmed);
5554 WSH_DEBUG_SV.log(l_module_name,'fob', l_group_by_flags.fob);
5555 WSH_DEBUG_SV.log(l_module_name,'freight_terms',
5556 l_group_by_flags.freight_terms);
5557 WSH_DEBUG_SV.log(l_module_name,'ship_method',
5558 l_group_by_flags.ship_method);
5559
5560 END IF;
5561
5562
5563 /* Check to see if the line is already packed */
5564 IF (l_del_id_for_container1.parent_delivery_detail_id IS NOT NULL
5565 AND l_del_id_for_container1.parent_delivery_detail_id <>
5566 p_detail_id2
5567 ) THEN
5568 FND_MESSAGE.SET_NAME('WSH','WSH_DET_PACK_ERROR');
5569 --
5570 IF l_debug_on THEN
5571 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5572 END IF;
5573 --
5574 FND_MESSAGE.SET_TOKEN('DET_LINE',
5575 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5576 --
5577 IF l_debug_on THEN
5578 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5579 END IF;
5580 --
5581 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5582 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5583 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5584 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5585 --
5586 IF l_debug_on THEN
5587 WSH_DEBUG_SV.pop(l_module_name);
5588 END IF;
5589 --
5590 return;
5591 END IF;
5592
5593 -- OTM R12 : assign delivery detail
5594 IF (l_gc3_is_installed = 'Y' AND
5595 nvl(l_del_id_for_container1.ignore_for_planning, 'N') = 'N') THEN
5596
5597 Pre_Otm_Assign_Del_Detail
5598 (p_delivery_id => NULL,
5599 p_detail_id => NULL,
5600 p_container1_id => p_detail_id1,
5601 p_container2_id => p_detail_id2,
5602 p_assignment_type => 'C2C',
5603 x_delivery_was_empty => l_delivery_was_empty,
5604 x_assign_update => l_assign_update,
5605 x_gross_weight1 => l_gross_weight1,
5606 x_gross_weight2 => l_gross_weight2,
5607 x_return_status => l_return_status);
5608
5609 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5610 --handle the error approriately to the procedure this code is in
5611 IF l_debug_on THEN
5612 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
5613 END IF;
5614 raise FND_API.G_EXC_ERROR;
5615 END IF;
5616 END IF;
5617 -- End of OTM R12 : assign delivery detail
5618
5619 --Bug 3522687 : OMFST:J:R2:RG:APPLN HANGS WHILE PERFORMING MANUAL PACKING ACTION
5620 --Cursor check_loop returns delivery_detail_id of the
5621 --outer container if outer container is packed in the inner container.
5622
5623 OPEN check_loop(p_detail_id1,p_detail_id2);
5624 FETCH check_loop into l_out_container;
5625
5626 -- If cursor returns then we have self nesting in containers
5627
5628 IF (check_loop%FOUND) THEN
5629
5630 CLOSE check_loop;
5631 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_LOOP_NO_PACK');
5632 --
5633 IF l_debug_on THEN
5634 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5635 END IF;
5636 --
5637 FND_MESSAGE.SET_TOKEN('DETAIL_CONTAINER',
5638 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5639 --
5640 IF l_debug_on THEN
5641 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5642 END IF;
5643 --
5644 FND_MESSAGE.SET_TOKEN('PARENT_CONTAINER',
5645 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5646 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5647 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5648 --
5649 IF l_debug_on THEN
5650 WSH_DEBUG_SV.pop(l_module_name);
5651 END IF;
5652 --
5653 return;
5654 END IF;
5655 CLOSE check_loop;
5656 -- End of fix for bug 3522687
5657
5658 /* Added code to validate grouping attributes for Child Container and master
5659 Container */
5660 IF (l_del_id_for_container1.organization_id <>
5661 l_del_id_for_container2.organization_id) THEN
5662 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_ASSG_ORG_DIFF');
5663 --
5664 IF l_debug_on THEN
5665 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5666 END IF;
5667 --
5668 FND_MESSAGE.SET_TOKEN('ENTITY1',
5669 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5670 --
5671 IF l_debug_on THEN
5672 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5673 END IF;
5674 --
5675 FND_MESSAGE.SET_TOKEN('ENTITY2',
5676 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5677 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5678 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5679 --
5680 IF l_debug_on THEN
5681 WSH_DEBUG_SV.pop(l_module_name);
5682 END IF;
5683 --
5684 RETURN;
5685 END IF;
5686
5687 IF (l_del_id_for_container1.ship_from_location_id <>
5688 l_del_id_for_container2.ship_from_location_id) THEN
5689 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5690 --
5691 IF l_debug_on THEN
5692 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5693 END IF;
5694 --
5695 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5696 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5697 --
5698 IF l_debug_on THEN
5699 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5700 END IF;
5701 --
5702 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5703 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5704 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5705 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5706 --
5707 IF l_debug_on THEN
5708 WSH_DEBUG_SV.pop(l_module_name);
5709 END IF;
5710 --
5711 RETURN;
5712 END IF;
5713
5714 --J TP Release
5715 IF (l_del_id_for_container1.ignore_for_planning <>
5716 l_del_id_for_container2.ignore_for_planning) THEN
5717
5718
5719 -- R12: MDC
5720 -- If called by WMS, and line is part of a consol delivery,
5721 -- then the ignore for planning flag is always 'Y'. For WMS,
5722 -- we need to set the child detail's ignore for planning status
5723 -- to be 'Y' before we attempt to pack.
5724
5725 IF (l_wms_org = 'Y') AND
5726 ((l_del_id_for_container1.wda_type = 'O') OR (l_del_id_for_container2.wda_type = 'O')) --{
5727 THEN
5728 IF l_del_id_for_container1.wda_type = 'O' THEN
5729 l_ignore_det_tab(1) := p_detail_id2;
5730 ELSE
5731 l_ignore_det_tab(1) := p_detail_id1;
5732 END IF;
5733
5734 WSH_TP_RELEASE.change_ignoreplan_status
5735 (p_entity => 'DLVB',
5736 p_in_ids => l_ignore_det_tab,
5737 p_action_code => 'IGNORE_PLAN',
5738 x_return_status => x_return_status);
5739
5740 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5741
5742 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
5743 FND_MESSAGE.SET_TOKEN('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5744 --
5745 IF l_debug_on THEN
5746 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5747 END IF;
5748 --
5749 FND_MESSAGE.SET_TOKEN('ENTITY2',nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5750 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5751 --
5752 IF l_debug_on THEN
5753 WSH_DEBUG_SV.pop(l_module_name);
5754 END IF;
5755 --
5756 RETURN;
5757
5758 END IF;
5759
5760
5761 ELSE --}
5762 l_display_error := TRUE;
5763 IF (l_wms_org = 'Y') THEN--{
5764 OPEN c_get_shipto(p_detail_id2);
5765 FETCH c_get_shipto INTO l_ship_to_loc;
5766 CLOSE c_get_shipto;
5767 --
5768 l_container_is_empty := l_ship_to_loc IS NULL;
5769 --
5770 IF l_container_is_empty THEN --{
5771
5772
5773 l_ignore_det_tab(1) := p_detail_id2;
5774 WSH_TP_RELEASE.change_ignoreplan_status
5775 (p_entity => 'DLVB',
5776 p_in_ids => l_ignore_det_tab,
5777 p_action_code => 'IGNORE_PLAN',
5778 x_return_status => l_return_status);
5779
5780 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN --{
5781 l_display_error := TRUE;
5782 ELSE
5783 l_display_error := FALSE;
5784 END IF;--}
5785 END IF; --}
5786 END IF ; --}
5787
5788 IF l_display_error THEN --{
5789 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
5790 --
5791 IF l_debug_on THEN
5792 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5793 END IF;
5794 FND_MESSAGE.SET_TOKEN('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5795 --
5796 IF l_debug_on THEN
5797 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5798 END IF;
5799 --
5800 FND_MESSAGE.SET_TOKEN('ENTITY2',nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5801 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5802 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5803 --
5804 IF l_debug_on THEN
5805 WSH_DEBUG_SV.pop(l_module_name);
5806 END IF;
5807 --
5808 RETURN;
5809 END IF; --}
5810 END IF;
5811 END IF;
5812
5813 --
5814 -- J-IB-NPARIKH-{
5815 --
5816 --
5817 -- O container can be assigned to empty IO container
5818 -- IO container can be assigned to empty O container
5819 -- Otherwise, both containers' line direction must match
5820 --
5821 IF (l_del_id_for_container1.line_direction <> l_del_id_for_container2.line_direction)
5822 THEN
5823 --{
5824 IF l_del_id_for_container1.line_direction IN ('O','IO')
5825 AND l_del_id_for_container2.line_direction IN ('O','IO')
5826 THEN
5827 --{
5828 NULL;
5829 --}
5830 ELSE
5831 --{
5832 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5833 --
5834 IF l_debug_on THEN
5835 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5836 END IF;
5837 --
5838 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5839 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5840 --
5841 IF l_debug_on THEN
5842 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5843 END IF;
5844 --
5845 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5846 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5847 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5848 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5849 --
5850 IF l_debug_on THEN
5851 WSH_DEBUG_SV.pop(l_module_name);
5852 END IF;
5853 --
5854 RETURN;
5855 --}
5856 END IF;
5857 --}
5858 END IF;
5859 --
5860 -- J-IB-NPARIKH-}
5861 --
5862 --
5863 IF l_debug_on THEN
5864 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
5865 END IF;
5866 --
5867 WSH_DELIVERY_AUTOCREATE.get_group_by_attr(
5868 p_organization_id => l_del_id_for_container1.organization_id,
5869 p_client_id => l_del_id_for_container1.client_id, -- LSP PROJECT
5870 x_group_by_flags => l_group_by_flags,
5871 x_return_status => x_return_status);
5872
5873 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5874 x_return_status := x_return_status;
5875 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5876 --
5877 IF l_debug_on THEN
5878 WSH_DEBUG_SV.pop(l_module_name);
5879 END IF;
5880 --
5881 RETURN;
5882 END IF;
5883
5884 --- Bug 3715176
5885 -- If delivery is same for container to pack and to be packed then it should not check firm status.
5886 IF l_del_id_for_container1.delivery_id = l_del_id_for_container2.delivery_id then
5887 NULL;
5888
5889 Elsif l_del_id_for_container1.delivery_id is NOT NULL OR
5890 l_del_id_for_container2.delivery_id is NOT NULL then
5891
5892 Open c_get_content_count(p_detail_id2);
5893 Fetch c_get_content_count into l_content_count;
5894 Close c_get_content_count;
5895
5896 IF l_content_count > 0 THEN
5897 IF l_del_id_for_container1.delivery_id IS NOT NULL then
5898 OPEN c_get_plan_flag(l_del_id_for_container1.delivery_id);
5899 FETCH c_get_plan_flag into l_plan_flag;
5900 CLOSE c_get_plan_flag;
5901
5902 if l_plan_flag <> 'N' then
5903 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
5904
5905 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5906
5907 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5908 --
5909 IF l_debug_on THEN
5910 WSH_DEBUG_SV.pop(l_module_name);
5911 END IF;
5912 --
5913 return;
5914 end if;
5915 END IF;
5916
5917 IF l_del_id_for_container2.delivery_id IS NOT NULL then
5918 OPEN c_get_plan_flag(l_del_id_for_container2.delivery_id);
5919 FETCH c_get_plan_flag into l_plan_flag;
5920 CLOSE c_get_plan_flag;
5921
5922 if l_plan_flag <> 'N' then
5923 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
5924
5925 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5926
5927 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5928 --
5929 IF l_debug_on THEN
5930 WSH_DEBUG_SV.pop(l_module_name);
5931 END IF;
5932 --
5933 return;
5934 end if;
5935 END IF;
5936 END IF;
5937 END IF;
5938 -- Bug 3715176
5939
5940
5941 IF l_group_by_flags.customer = 'Y' THEN
5942 IF (l_del_id_for_container1.customer_id <>
5943 l_del_id_for_container2.customer_id) THEN
5944 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5945 --
5946 IF l_debug_on THEN
5947 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5948 END IF;
5949 --
5950 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5951 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5952 --
5953 IF l_debug_on THEN
5954 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5955 END IF;
5956 --
5957 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5958 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5959 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5960 --
5961 IF l_debug_on THEN
5962 WSH_DEBUG_SV.pop(l_module_name);
5963 END IF;
5964 --
5965 return;
5966 END IF;
5967 END IF;
5968 IF l_group_by_flags.intmed = 'Y' THEN
5969 IF (l_del_id_for_container1.intmed_ship_to_location_id <>
5970 l_del_id_for_container2.intmed_ship_to_location_id) THEN
5971 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5972 --
5973 IF l_debug_on THEN
5974 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5975 END IF;
5976 --
5977 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5978 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5979 --
5980 IF l_debug_on THEN
5981 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5982 END IF;
5983 --
5984 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5985 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5986 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5987 --
5988 IF l_debug_on THEN
5989 WSH_DEBUG_SV.pop(l_module_name);
5990 END IF;
5991 --
5992 return;
5993 END IF;
5994 END IF;
5995 IF l_group_by_flags.fob = 'Y' THEN
5996 IF (l_del_id_for_container1.fob_code <>
5997 l_del_id_for_container2.fob_code) THEN
5998 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5999 --
6000 IF l_debug_on THEN
6001 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6002 END IF;
6003 --
6004 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
6005 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
6006 --
6007 IF l_debug_on THEN
6008 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6009 END IF;
6010 --
6011 FND_MESSAGE.SET_TOKEN('CONT_NAME',
6012 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
6013 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
6014 --
6015 IF l_debug_on THEN
6016 WSH_DEBUG_SV.pop(l_module_name);
6017 END IF;
6018 --
6019 return;
6020 END IF;
6021 END IF;
6022 IF l_group_by_flags.freight_terms = 'Y' THEN
6023 IF (l_del_id_for_container1.freight_terms_code <>
6024 l_del_id_for_container2.freight_terms_code) THEN
6025 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
6026 --
6027 IF l_debug_on THEN
6028 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6029 END IF;
6030 --
6031 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
6032 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
6033 --
6034 IF l_debug_on THEN
6035 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6036 END IF;
6037 --
6038 FND_MESSAGE.SET_TOKEN('CONT_NAME',
6039 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
6040 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
6041 --
6042 IF l_debug_on THEN
6043 WSH_DEBUG_SV.pop(l_module_name);
6044 END IF;
6045 --
6046 return;
6047 END IF;
6048 END IF;
6049 IF l_group_by_flags.ship_method = 'Y' THEN
6050 IF (NVL(l_del_id_for_container1.mode_of_transport, l_del_id_for_container2.mode_of_transport) <>
6051 NVL(l_del_id_for_container2.mode_of_transport, l_del_id_for_container1.mode_of_transport))
6052 OR (NVL(l_del_id_for_container1.service_level, l_del_id_for_container2.service_level) <>
6053 NVL(l_del_id_for_container2.service_level, l_del_id_for_container1.service_level))
6054 OR (NVL(l_del_id_for_container1.carrier_id, l_del_id_for_container2.carrier_id) <>
6055 NVL(l_del_id_for_container2.carrier_id, l_del_id_for_container1.carrier_id))
6056 THEN
6057 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
6058 --
6059 IF l_debug_on THEN
6060 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6061 END IF;
6062 --
6063 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
6064 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
6065 --
6066 IF l_debug_on THEN
6067 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6068 END IF;
6069 --
6070 FND_MESSAGE.SET_TOKEN('CONT_NAME',
6071 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
6072 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
6073 --
6074 IF l_debug_on THEN
6075 WSH_DEBUG_SV.pop(l_module_name);
6076 END IF;
6077 --
6078 return;
6079 END IF;
6080 END IF;
6081 /* End of check for grouping attributes */
6082
6083
6084 /* End of Check to see if the line is already packed */
6085
6086
6087 -- for bug 1336858 fix
6088
6089 -- No need for savepoint
6090 -- savepoint before_cont_assignment;
6091
6092 -- J: W/V Changes
6093 -- The first DD_WV_Post_Process call will decrement the cont1 W/V from delivery
6094 -- The second DD_WV_Post_Process call will increment the delivery W/V with cont2 W/V (since cont2 has to be
6095 -- assigned to the delivery if the cont1 being assigned to cont2 is already assigned to delivery)
6096 -- The third DD_WV_Post_Process cll will increment the cont2 W/V with cont1 W/V which in turn will adjust the
6097 -- delivery W/V, if the cont2 is in a delivery.
6098 IF (l_del_id_for_container1.delivery_id is not null) THEN
6099 IF l_debug_on THEN
6100 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6101 END IF;
6102
6103 WSH_WV_UTILS.DD_WV_Post_Process(
6104 p_delivery_detail_id => p_detail_id1,
6105 p_diff_gross_wt => -1 * l_del_id_for_container1.gross_weight,
6106 p_diff_net_wt => -1 * l_del_id_for_container1.net_weight,
6107 p_diff_volume => -1 * l_del_id_for_container1.volume,
6108 p_diff_fill_volume => -1 * l_del_id_for_container1.volume,
6109 x_return_status => l_return_status);
6110
6111 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6112 --
6113 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6114 WSH_UTIL_CORE.Add_Message(x_return_status);
6115 IF l_debug_on THEN
6116 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6117 WSH_DEBUG_SV.pop(l_module_name);
6118 END IF;
6119 return;
6120 END IF;
6121
6122 END IF;
6123
6124 IF (l_del_id_for_container1.delivery_id IS not NULL) THEN
6125
6126 IF (l_del_id_for_container2.delivery_id IS NULL) THEN
6127 /* Bug 1571143,Combining the 2 cursors */
6128 -- K LPN CONV. rv
6129 -- Based on assumption that we are using wsh_delivery_assignments_v,
6130 -- delivery and its contents will belong to same organization.
6131 -- Similarly, container and its contents will belong to same organization.
6132 -- Hence, we are checking for WMS org or non-WMS org. at the
6133 -- parent level (i.e. delivery/container)
6134 -- rather than at line-level for performance reasons.
6135
6136 -- If this assumptions were to be violated in anyway
6137 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
6138 -- wsh_delivery_assignments_v
6139 -- or
6140 -- if existing query were to somehow return/fetch records where
6141 -- delivery and its contents may belong to diff. org.
6142 -- container and its contents may belong to diff. org.
6143 -- then
6144 -- Calls to check_wms_org needs to be re-adjusted at
6145 OPEN c_inside_outside_of_container(p_detail_id2);
6146 FETCH c_inside_outside_of_container BULK COLLECT INTO
6147 l_sync_tmp_recTbl.delivery_detail_id_tbl,
6148 l_sync_tmp_recTbl.parent_detail_id_tbl,
6149 l_sync_tmp_recTbl.delivery_id_Tbl;
6150 CLOSE c_inside_outside_of_container;
6151 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
6152 --{
6153 --
6154 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
6155 l_operation_type := 'PRIOR';
6156 --
6157 --
6158 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6159 AND nvl(l_del_id_for_container2.line_direction,'O') IN ('O', 'IO')
6160 AND
6161 (
6162 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
6163 OR
6164 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
6165 )
6166 THEN
6167 --{
6168 --
6169 IF l_debug_on THEN
6170 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
6171 END IF;
6172 --
6173 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
6174 (
6175 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
6176 x_return_status => l_return_status,
6177 p_operation_type => l_operation_type
6178 );
6179 --
6180 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6181 --
6182 x_return_status := l_return_status;
6183 --
6184 IF l_debug_on THEN
6185 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6186 WSH_DEBUG_SV.pop(l_module_name);
6187 END IF;
6188 --
6189 return;
6190 --
6191 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6192 --
6193 l_num_warnings := l_num_warnings + 1;
6194 --
6195 END IF;
6196 --
6197 --}
6198 END IF;
6199 --
6200
6201 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
6202 UPDATE wsh_delivery_assignments_v
6203 SET delivery_id = l_del_id_for_container1.delivery_id,
6204 last_update_date = SYSDATE,
6205 last_updated_by = FND_GLOBAL.USER_ID,
6206 last_update_login = FND_GLOBAL.LOGIN_ID
6207 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6208
6209 -- OTM R12 : assign delivery detail
6210 IF (l_assign_update AND
6211 l_gc3_is_installed = 'Y' AND
6212 nvl(l_del_id_for_container1.ignore_for_planning, 'N') = 'N') THEN
6213
6214 l_tms_interface_flag := NULL;
6215
6216 Post_Otm_Assign_Del_Detail
6217 (p_delivery_id => l_del_id_for_container1.delivery_id,
6218 p_delivery_was_empty => l_delivery_was_empty,
6219 p_tms_interface_flag => l_tms_interface_flag,
6220 p_gross_weight => l_gross_weight2, --using the gross weight of container2
6221 x_return_status => l_return_status);
6222
6223 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6224 IF l_debug_on THEN
6225 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
6226 END IF;
6227 raise FND_API.G_EXC_ERROR;
6228 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6229 l_num_warnings := l_num_warnings + 1;
6230 END IF;
6231
6232 END IF;
6233 -- End of OTM R12 : assign delivery detail
6234
6235 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
6236 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6237 END LOOP;
6238 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
6239 p_detail_id_tab => l_mdc_detail_tab,
6240 x_return_status => x_return_status);
6241
6242 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6243 IF l_debug_on THEN
6244 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6245 WSH_DEBUG_SV.pop(l_module_name);
6246 END IF;
6247 return;
6248 END IF;
6249 l_mdc_detail_tab.delete;
6250 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
6251 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
6252 l_sync_tmp_recTbl.delivery_id_tbl.delete;
6253 l_sync_tmp_recTbl.operation_type_tbl.delete;
6254 --}
6255 END IF;
6256 -- K LPN CONV. rv
6257
6258 -- J: W/V Changes
6259 IF l_debug_on THEN
6260 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning Container to Delivery');
6261 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6262 END IF;
6263
6264 WSH_WV_UTILS.DD_WV_Post_Process(
6265 p_delivery_detail_id => p_detail_id2,
6266 p_diff_gross_wt => l_del_id_for_container2.gross_weight,
6267 p_diff_net_wt => l_del_id_for_container2.net_weight,
6268 p_diff_volume => l_del_id_for_container2.volume,
6269 p_diff_fill_volume => l_del_id_for_container2.volume,
6270 x_return_status => l_return_status);
6271
6272 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6273 --
6274 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6275 WSH_UTIL_CORE.Add_Message(x_return_status);
6276 IF l_debug_on THEN
6277 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6278 WSH_DEBUG_SV.pop(l_module_name);
6279 END IF;
6280 return;
6281 END IF;
6282
6283 /* H projects: pricing integration csun , adding delivery */
6284 m := m+1;
6285 l_del_tab(m) := l_del_id_for_container1.delivery_id;
6286 END IF;
6287
6288 ELSIF (l_del_id_FOR_container2.delivery_id IS NOT NULL) THEN
6289
6290 /* Bug 1571143 ,Combining the 2 cursors */
6291 -- K LPN CONV. rv
6292 -- Based on assumption that we are using wsh_delivery_assignments_v,
6293 -- delivery and its contents will belong to same organization.
6294 -- Similarly, container and its contents will belong to same organization.
6295 -- Hence, we are checking for WMS org or non-WMS org. at the
6296 -- parent level (i.e. delivery/container)
6297 -- rather than at line-level for performance reasons.
6298
6299 -- If this assumptions were to be violated in anyway
6300 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
6301 -- wsh_delivery_assignments_v
6302 -- or
6303 -- if existing query were to somehow return/fetch records where
6304 -- delivery and its contents may belong to diff. org.
6305 -- container and its contents may belong to diff. org.
6306 -- then
6307 -- Calls to check_wms_org needs to be re-adjusted at
6308 OPEN c_inside_outside_of_container(p_detail_id1);
6309 FETCH c_inside_outside_of_container bulk collect into
6310 l_sync_tmp_recTbl.delivery_detail_id_tbl,
6311 l_sync_tmp_recTbl.parent_detail_id_tbl,
6312 l_sync_tmp_recTbl.delivery_id_tbl;
6313
6314 CLOSE c_inside_outside_of_container;
6315 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
6316 --{
6317 --
6318 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
6319 l_operation_type := 'PRIOR';
6320 --
6321 --
6322 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6323 AND nvl(l_del_id_FOR_container2.line_direction,'O') IN ('O', 'IO')
6324 AND
6325 (
6326 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
6327 OR
6328 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
6329 )
6330 THEN
6331 --{
6332 --
6333 IF l_debug_on THEN
6334 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
6335 END IF;
6336 --
6337 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
6338 (
6339 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
6340 x_return_status => l_return_status,
6341 p_operation_type => l_operation_type
6342 );
6343 --
6344 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6345 --
6346 x_return_status := l_return_status;
6347 --
6348 IF l_debug_on THEN
6349 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6350 WSH_DEBUG_SV.pop(l_module_name);
6351 END IF;
6352 --
6353 return;
6354 --
6355 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6356 --
6357 l_num_warnings := l_num_warnings + 1;
6358 --
6359 END IF;
6360 --
6361 --}
6362 END IF;
6363 --
6364
6365 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
6366 UPDATE wsh_delivery_assignments_v
6367 SET delivery_id = l_del_id_for_container2.delivery_id,
6368 last_update_date = SYSDATE,
6369 last_updated_by = FND_GLOBAL.USER_ID,
6370 last_update_login = FND_GLOBAL.LOGIN_ID
6371 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6372
6373 -- OTM R12 : assign delivery detail
6374 IF (l_assign_update AND
6375 l_gc3_is_installed = 'Y' AND
6376 nvl(l_del_id_for_container2.ignore_for_planning, 'N') = 'N') THEN
6377
6378 l_tms_interface_flag := NULL;
6379
6380 Post_Otm_Assign_Del_Detail
6381 (p_delivery_id => l_del_id_for_container2.delivery_id,
6382 p_delivery_was_empty => l_delivery_was_empty,
6383 p_tms_interface_flag => l_tms_interface_flag,
6384 p_gross_weight => l_gross_weight1, --using the gross weight of container1
6385 x_return_status => l_return_status);
6386
6387 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6388 IF l_debug_on THEN
6389 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
6390 END IF;
6391 raise FND_API.G_EXC_ERROR;
6392 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6393 l_num_warnings := l_num_warnings + 1;
6394 END IF;
6395 END IF;
6396 -- End of OTM R12 : assign delivery detail
6397
6398
6399 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
6400 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6401 END LOOP;
6402 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
6403 p_detail_id_tab => l_mdc_detail_tab,
6404 x_return_status => x_return_status);
6405 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6406 IF l_debug_on THEN
6407 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6408 WSH_DEBUG_SV.pop(l_module_name);
6409 END IF;
6410 return;
6411 END IF;
6412 l_mdc_detail_tab.delete;
6413 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
6414 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
6415 l_sync_tmp_recTbl.delivery_id_tbl.delete;
6416 l_sync_tmp_recTbl.operation_type_tbl.delete;
6417 --}
6418 END IF;
6419 -- K LPN CONV. rv
6420 /* H projects: pricing integration csun , adding delivery */
6421 m := m+1;
6422 l_del_tab(m) := l_del_id_FOR_container2.delivery_id;
6423 END IF;
6424
6425
6426 --
6427 -- K LPN CONV. rv
6428 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6429 AND nvl(l_del_id_FOR_container2.line_direction,'O') IN ('O', 'IO')
6430 AND
6431 (
6432 (WSH_WMS_LPN_GRP.GK_WMS_PACK and l_wms_org = 'Y')
6433 OR
6434 (WSH_WMS_LPN_GRP.GK_INV_PACK and l_wms_org = 'N')
6435 )
6436 THEN
6437 --{
6438
6439 l_sync_tmp_rec.delivery_detail_id := p_detail_id1;
6440 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_FOR_container1.parent_delivery_detail_id;
6441 l_sync_tmp_rec.delivery_id := l_del_id_FOR_container1.delivery_id;
6442 l_sync_tmp_rec.operation_type := 'PRIOR';
6443 --
6444 IF l_debug_on THEN
6445 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
6446 END IF;
6447 --
6448 WSH_WMS_SYNC_TMP_PKG.MERGE
6449 (
6450 p_sync_tmp_rec => l_sync_tmp_rec,
6451 x_return_status => l_return_status
6452 );
6453 --
6454 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6455 --
6456 x_return_status := l_return_status;
6457 --
6458 IF l_debug_on THEN
6459 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6460 WSH_DEBUG_SV.pop(l_module_name);
6461 END IF;
6462 --
6463 return;
6464 --
6465 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6466 --
6467 l_num_warnings := l_num_warnings + 1;
6468 --
6469 END IF;
6470 --
6471
6472 --}
6473 END IF;
6474 -- K LPN CONV. rv
6475 --
6476 UPDATE wsh_delivery_assignments_v
6477 SET parent_delivery_detail_id = p_detail_id2,
6478 last_update_date = SYSDATE,
6479 last_updated_by = FND_GLOBAL.USER_ID,
6480 last_update_login = FND_GLOBAL.LOGIN_ID
6481 WHERE delivery_detail_id = p_detail_id1;
6482 l_mdc_detail_tab(1) := p_detail_id1;
6483 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
6484 p_detail_id_tab => l_mdc_detail_tab,
6485 x_return_status => x_return_status);
6486
6487 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6488 IF l_debug_on THEN
6489 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6490 WSH_DEBUG_SV.pop(l_module_name);
6491 END IF;
6492 return;
6493 END IF;
6494
6495 -- K LPN CONV. rv
6496 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
6497 THEN
6498 --{
6499 -- J: W/V Changes
6500 IF l_debug_on THEN
6501 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6502 END IF;
6503 WSH_WV_UTILS.DD_WV_Post_Process(
6504 p_delivery_detail_id => p_detail_id1,
6505 p_diff_gross_wt => l_del_id_for_container1.gross_weight,
6506 p_diff_net_wt => l_del_id_for_container1.net_weight,
6507 p_diff_volume => l_del_id_for_container1.volume,
6508 p_diff_fill_volume => l_del_id_for_container1.volume,
6509 x_return_status => l_return_status);
6510
6511 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6512 --
6513 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6514 WSH_UTIL_CORE.Add_Message(x_return_status);
6515 IF l_debug_on THEN
6516 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6517 WSH_DEBUG_SV.pop(l_module_name);
6518 END IF;
6519 return;
6520 END IF;
6521 --}
6522 END IF;
6523 -- K LPN CONV. rv
6524
6525
6526 /*
6527 -- bug 1336858 fix: don't allow the user to pack a container in itself
6528 -- or create a loop of containers packed inside each other.
6529 -- We need to check if this assignment now creates a loop
6530 declare
6531 i NUMBER := 0;
6532 begin
6533
6534 select container_name into detail_cont_name
6535 from wsh_delivery_details where delivery_detail_id = p_detail_id1;
6536 if SQL%NOTFOUND then
6537 detail_cont_name := '(' || p_detail_id1 || ')';
6538 end if;
6539
6540 IF l_debug_on THEN
6541 WSH_DEBUG_SV.log(l_module_name,'detail_cont_name',
6542 detail_cont_name);
6543 END IF;
6544
6545 select container_name into parent_cont_name
6546 from wsh_delivery_details where delivery_detail_id = p_detail_id2;
6547 if SQL%NOTFOUND then
6548 detail_cont_name := '(' || p_detail_id2 || ')';
6549 end if;
6550 IF l_debug_on THEN
6551 WSH_DEBUG_SV.log(l_module_name,'parent_cont_name',
6552 parent_cont_name);
6553 END IF;
6554
6555 for c IN check_loop(p_detail_id1) loop
6556 i := i + 1; -- do nothing...
6557 end loop;
6558
6559 exception
6560 WHEN others THEN
6561 rollback to before_cont_assignment;
6562 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6563 fnd_message.SET_name('WSH', 'WSH_CONT_LOOP_NO_PACK');
6564 fnd_message.set_token('DETAIL_CONTAINER', detail_cont_name);
6565 fnd_message.set_token('PARENT_CONTAINER', parent_cont_name);
6566 wsh_util_core.add_message(x_return_status,l_module_name);
6567 --
6568 IF l_debug_on THEN
6569 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected Error has occured. Oracle Err Mesg is'||SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6570 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION1 : OTHERS');
6571 END IF;
6572 --
6573 return;
6574 end;
6575 -- end of check for assignment loop
6576 */
6577
6578 IF l_del_tab.count > 0 THEN
6579 /* H integration: Pricing integration csun
6580 when plan a delivery
6581 */
6582 --
6583 IF l_debug_on THEN
6584 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
6585 WSH_DEBUG_SV.log(l_module_name,'Count of l_del_tab',l_del_tab.count);
6586 END IF;
6587 --
6588 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
6589 p_entity_type => 'DELIVERY',
6590 p_entity_ids => l_del_tab,
6591 x_return_status => l_return_status);
6592 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6593 raise mark_reprice_error;
6594 END IF;
6595 END IF;
6596
6597 -- LPN CONV. rv
6598 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6599 --
6600 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6601 --
6602 ELSE
6603 --
6604 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6605 --
6606 END IF;
6607 -- LPN CONV. rv
6608
6609
6610 --
6611 IF l_debug_on THEN
6612 WSH_DEBUG_SV.pop(l_module_name);
6613 END IF;
6614 --
6615 exception
6616
6617 -- OTM R12 : assign delivery detail
6618 WHEN FND_API.G_EXC_ERROR then
6619 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6620 --
6621 IF l_debug_on THEN
6622 WSH_DEBUG_SV.pop(l_module_name);
6623 END IF;
6624 --
6625 RETURN;
6626 -- End of OTM R12 : assign delivery detail
6627
6628 WHEN mark_reprice_error THEN
6629 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
6630 x_return_status := l_return_status;
6631 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
6632 --
6633 IF l_debug_on THEN
6634 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6635 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
6636 END IF;
6637 --
6638 WHEN others THEN
6639 if c_del_id_for_cont_or_detail%ISOPEN THEN
6640 close c_del_id_for_cont_or_detail;
6641 end if;
6642 if c_del_id_for_cont_or_detail%ISOPEN THEN
6643 close c_del_id_for_cont_or_detail;
6644 end if;
6645 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6646 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_CONT_TO_CONT',l_module_name);
6647 --
6648 IF l_debug_on THEN
6649 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6650 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6651 END IF;
6652 --
6653 END Assign_Cont_To_Cont;
6654
6655 -- THIS API IS OBSOLETED.
6656 --
6657 --Procedure: Unassign_Cont_From_Cont
6658 --Parameters: p_detail_id,
6659 -- x_return_status
6660 --Desription: Unassign a container FROM another container
6661 -- the assumption here IS that you are take the container
6662 -- out of the immediate parent container ;
6663 -- only need to null out the parent_detail_id.
6664 -- if containers are assigned to any delivery, the assignment
6665 -- will remain
6666
6667 PROCEDURE Unassign_Cont_FROM_Cont(
6668 p_detail_id IN NUMBER,
6669 x_return_status OUT NOCOPY VARCHAR2)
6670 IS
6671
6672 l_del_rec C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
6673 l_return_status VARCHAR2(1);
6674 -- J: W/V Changes
6675 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
6676 l_cont_fill_pc NUMBER;
6677 e_abort exception;
6678
6679 --
6680 l_debug_on BOOLEAN;
6681 --
6682 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_CONT_FROM_CONT';
6683 --
6684 BEGIN
6685
6686 --
6687 --
6688 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6689 --
6690 --
6691 END Unassign_Cont_from_Cont;
6692
6693
6694
6695
6696 --
6697 --Procedure: Unassign_detail_from_Delivery
6698 --Parameters: p_detail_id,
6699 -- x_return_status
6700 --Desription: Unassigns a detail from a delivery
6701
6702 PROCEDURE Unassign_Detail_from_Delivery(
6703 p_detail_id IN NUMBER
6704 , x_return_status OUT NOCOPY VARCHAR2
6705 , p_validate_flag IN VARCHAR2,
6706 p_action_prms IN WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type -- J-IB-NPARIKH
6707 )
6708
6709 IS
6710 detail_not_assigned exception;
6711 check_ship_SET_failed exception;
6712 check_smc_failed exception;
6713 del_not_updatable exception;
6714 l_cost_count number;
6715 l_return_status varchar2(30);
6716 l_shp_SET BOOLEAN;
6717 l_smc BOOLEAN;
6718 l_packed number;
6719 l_dummy_record number;
6720 --added for Bug 2209035
6721 CURSOR c_delivery1(p_del_id number)
6722 IS
6723 SELECT status_code, planned_flag,name,
6724 nvl(shipment_direction,'O') shipment_direction, -- J-IB-NPARIKH
6725 ignore_for_planning -- OTM R12 : unassign delivery detail
6726 FROM wsh_new_deliveries
6727 WHERE delivery_id = p_del_id;
6728
6729 l_del1 c_delivery1%ROWTYPE;
6730
6731 l_shipping_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
6732 get_shipping_param_err EXCEPTION;
6733 adjust_parent_wv_err EXCEPTION;
6734
6735 CURSOR c_assign_rec
6736 IS
6737 SELECT wda.delivery_id, wda.parent_delivery_detail_id,
6738 wdd.organization_id,
6739 wdd.weight_uom_code,
6740 wdd.volume_uom_code,
6741 wdd.inventory_item_id
6742 FROM wsh_delivery_assignments_v wda,
6743 wsh_delivery_details wdd
6744 WHERE wda.delivery_detail_id = p_detail_id
6745 and wdd.delivery_detail_id = wda.delivery_detail_id
6746 and ((wda.delivery_id IS not null) or (wda.parent_delivery_detail_id IS not null));
6747
6748 l_assign c_assign_rec%ROWTYPE;
6749 l_mdc_detail_tab wsh_util_core.id_tab_type;
6750 /** We just need a Warning when ever we Unassign a Detail from a Delivery and
6751 if that Detail is part of a Ship Set */
6752 l_delivery_detail_id NUMBER;
6753 invalid_detail exception;
6754 -- Update Cartonization if released warehouse and WMS org.
6755
6756 update_mol_carton_group_error exception;
6757
6758 cursor get_mo_line_id (p_del_det_id IN NUMBER) is
6759 select move_order_line_id, organization_id
6760 from wsh_delivery_details
6761 where delivery_detail_id = p_del_det_id
6762 and released_status = 'S';
6763
6764 cursor c_grouping_id is
6765 select wsh_delivery_group_s.nextval from dual;
6766
6767 l_msg_count NUMBER;
6768 l_msg_data VARCHAR2(4000);
6769 l_det_org NUMBER;
6770 l_mo_line_id NUMBER;
6771 l_carton_grouping_id NUMBER;
6772
6773 CURSOR c_all_details_below IS
6774 SELECT delivery_detail_id,
6775 parent_delivery_detail_id, -- LPN CONV. rv
6776 delivery_id -- LPN CONV. rv
6777 FROM wsh_delivery_assignments_v
6778 START WITH delivery_detail_id = p_detail_id
6779 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
6780
6781 -- J: W/V Changes
6782 l_detail_status VARCHAR2(1);
6783 l_gross_wt NUMBER;
6784 l_net_wt NUMBER;
6785 l_vol NUMBER;
6786 l_container_flag VARCHAR2(1);
6787 l_delivery_id NUMBER;
6788
6789 l_dd_id WSH_UTIL_CORE.Id_Tab_Type;
6790 l_del_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6791 l_parent_dd_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6792 l_line_dir_tbl WSH_GLBL_VAR_STRCT_GRP.v3_Tbl_Type; -- LPN CONV. rv
6793 l_cnt_flag_tbl WSH_GLBL_VAR_STRCT_GRP.v3_Tbl_Type; -- LPN CONV. rv
6794 l_det_org_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6795 i BINARY_INTEGER := 0;
6796 j BINARY_INTEGER :=0;
6797
6798 l_dummy_del_det_id NUMBER;
6799 l_del_det_id NUMBER;
6800
6801 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
6802 l_status WSH_LOOKUPS.meaning%TYPE;
6803
6804 CURSOR get_lookup (l_code VARCHAR2) IS
6805 SELECT meaning
6806 FROM wsh_lookups
6807 WHERE lookup_type = 'DELIVERY_STATUS'
6808 AND lookup_code = l_code;
6809
6810
6811 mark_reprice_error EXCEPTION;
6812 remove_FC_error EXCEPTION;
6813 l_detail_is_empty_cont VARCHAR2(1);
6814
6815 l_ib_upd_flag VARCHAR2(1);
6816 l_rel_status VARCHAR2(32767);
6817
6818 l_null_delivery_id NUMBER; -- Bugfix 3768823
6819
6820 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
6821 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
6822
6823 -- K LPN CONV. rv
6824 l_wms_org VARCHAR2(10) := 'N';
6825 l_loop_wms_org VARCHAR2(10) := 'N';
6826 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
6827 l_line_dir VARCHAR2(10);
6828 l_num_warnings NUMBER := 0;
6829
6830 cursor l_parent_cnt_csr (p_cnt_inst_id IN NUMBER) is
6831 select organization_id,
6832 nvl(line_direction,'O')
6833 from wsh_delivery_details
6834 where delivery_detail_id = p_cnt_inst_id
6835 and container_flag = 'Y'
6836 and source_code = 'WSH';
6837
6838 l_parent_cnt_orgn_id NUMBER;
6839 l_parent_cnt_line_dir VARCHAR2(10);
6840 -- K LPN CONV. rv
6841 --
6842
6843 -- OTM R12 : unassign delivery detail
6844 l_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
6845 l_delivery_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
6846 l_is_delivery_empty VARCHAR2(1);
6847 l_gc3_is_installed VARCHAR2(1);
6848 l_call_update VARCHAR2(1);
6849 l_gross_weight WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
6850 l_gross_weight_tbl WSH_UTIL_CORE.ID_TAB_TYPE;
6851 -- End of OTM R12 : unassign delivery detail
6852 l_chk_wms_org VARCHAR2(10) := 'N';
6853 l_debug_on BOOLEAN;
6854 --
6855 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_DELIVERY';
6856 --
6857 BEGIN
6858
6859 /*changing as per discussion with PM -- if detail is in a container, unassign from container as well. if detail itself is a container, unassign all children from delivery as well*/
6860
6861 --
6862 --
6863 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6864 --
6865 IF l_debug_on IS NULL
6866 THEN
6867 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6868 END IF;
6869 --
6870 IF l_debug_on THEN
6871 WSH_DEBUG_SV.push(l_module_name);
6872 --
6873 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
6874 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
6875 WSH_DEBUG_SV.log(l_module_name,'p_action_prms.caller',p_action_prms.caller);
6876 END IF;
6877 --
6878 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6879 -- OTM R12
6880 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
6881
6882 IF (l_gc3_is_installed IS NULL) THEN
6883 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
6884 END IF;
6885 -- End of OTM R12
6886
6887 SAVEPOINT before_unassign;
6888
6889 OPEN c_assign_rec;
6890 FETCH c_assign_rec into l_assign;
6891 IF ((c_assign_rec%NOTFOUND) OR (l_assign.delivery_id IS null)) THEN
6892 CLOSE c_assign_rec;
6893 RAISE DETAIL_NOT_ASSIGNED ;
6894
6895 END IF;
6896 CLOSE c_assign_rec;
6897
6898
6899
6900 OPEN c_delivery1(l_assign.delivery_id);
6901 FETCH c_delivery1 into l_del1;
6902 CLOSE c_delivery1;
6903
6904 open g_get_detail_info(p_detail_id);
6905 fetch g_get_detail_info into l_detail_status,l_gross_wt, l_net_wt, l_vol, l_container_flag, l_delivery_id;
6906 close g_get_detail_info;
6907
6908 --
6909 -- Unassign lines is allowed during ASN/Receipt integration
6910 -- even though lines are shipped, so bypassing checks for those callers.
6911 --
6912 IF l_detail_status = 'C'
6913 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX -- J-IB-NPARIKH
6914 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_ASN_PREFIX || '%' -- J-IB-NPARIKH
6915 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
6916 THEN
6917 Raise invalid_detail;
6918 END IF;
6919
6920
6921 IF l_debug_on THEN
6922 WSH_DEBUG_SV.log(l_module_name,'l_detail_status',
6923 l_detail_status);
6924 WSH_DEBUG_SV.log(l_module_name,'l_del1.status_code',
6925 l_del1.status_code);
6926 WSH_DEBUG_SV.log(l_module_name,'l_del1.planned_flag',
6927 l_del1.planned_flag);
6928 WSH_DEBUG_SV.log(l_module_name,'l_del1.name',
6929 l_del1.name);
6930 WSH_DEBUG_SV.log(l_module_name,'l_del1.ignore_for_planning',
6931 l_del1.ignore_for_planning);
6932 WSH_DEBUG_SV.log(l_module_name,'l_assign.delivery_id',
6933 l_assign.delivery_id);
6934 WSH_DEBUG_SV.log(l_module_name,'l_assign.parent_delivery_detail_id',
6935 l_assign.parent_delivery_detail_id);
6936 WSH_DEBUG_SV.log(l_module_name,'l_assign.organization_id',
6937 l_assign.organization_id);
6938
6939 END IF;
6940
6941 /* security rule: delivery status has to be open and not planned */
6942 /* Error */
6943 --
6944 -- Unassign lines is allowed during ASN/Receipt integration
6945 -- even though deliveries are shipped/planned, so bypassing checks
6946 -- for those callers.
6947 --bugfix 13083282
6948 --
6949 l_chk_wms_org :=wsh_util_validate.check_wms_org(l_assign.organization_id);
6950 --
6951 IF l_container_flag = 'Y' THEN --{ --bug 5100229
6952 IF l_debug_on THEN
6953 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.Is_Empty',WSH_DEBUG_SV.C_PROC_LEVEL);
6954 END IF;
6955 WSH_CONTAINER_UTILITIES.Is_Empty (p_container_instance_id => p_detail_id,
6956 x_empty_flag => l_detail_is_empty_cont,
6957 x_return_status => l_return_status);
6958 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6959 Raise invalid_detail;
6960 END IF;
6961 ELSE --}{
6962 l_detail_is_empty_cont := 'E';
6963 END IF; --}
6964
6965 --
6966 IF l_debug_on THEN
6967 WSH_DEBUG_SV.log(l_module_name,'l_chk_wms_org', l_chk_wms_org);
6968 WSH_DEBUG_SV.log(l_module_name,'l_detail_is_empty_cont',l_detail_is_empty_cont);
6969
6970 END IF;
6971 --
6972
6973 IF (NVL(p_validate_flag, 'Y') = 'Y') THEN
6974 IF ((l_del1.status_code = 'CL') or
6975 (l_del1.status_code = 'IT') or
6976 (l_del1.status_code = 'CO') or
6977 (l_del1.status_code = 'SC') or --sperera 940/945
6978 (l_del1.status_code = 'SR') or
6979 (l_del1.planned_flag IN ('Y','F') AND l_detail_status <> 'D' AND l_chk_wms_org <> 'Y' ) or
6980 (l_del1.planned_flag IN ('Y','F') AND l_detail_status <> 'D' AND l_chk_wms_org = 'Y' AND l_detail_is_empty_cont <> 'Y' )) /*Bug7025876 added AND condition*/
6981 --Bug 3543772 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX -- J-IB-NPARIKH
6982 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_ASN_PREFIX || '%' -- J-IB-NPARIKH
6983 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
6984 THEN
6985 IF l_del1.planned_flag IN ('Y','F') THEN
6986 fnd_message.SET_name('WSH', 'WSH_DET_UNASSIGN_FIRMDEL');
6987 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_del1.name);
6988 ELSE
6989 OPEN get_lookup(l_del1.status_code);
6990 FETCH get_lookup INTO l_status;
6991 CLOSE get_lookup;
6992 fnd_message.SET_name('WSH',
6993 'WSH_DET_DEL_NOT_UPDATABLE');
6994 FND_MESSAGE.SET_TOKEN('STATUS',l_status);
6995 END IF;
6996 RAISE DEL_NOT_UPDATABLE;
6997 END IF;
6998
6999 END IF; -- validate flag IS Y
7000
7001
7002 /* H projects: pricing integration csun */
7003 l_del_tab.delete;
7004 l_del_tab(1) := l_assign.delivery_id;
7005
7006 --
7007 IF l_debug_on THEN
7008 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
7009 END IF;
7010 --
7011 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
7012 p_entity_type => 'DELIVERY',
7013 p_entity_ids => l_del_tab,
7014 x_return_status => l_return_status);
7015 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS AND
7016 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7017 RAISE mark_reprice_error;
7018 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7019 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7020 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7021 IF l_debug_on THEN
7022 WSH_DEBUG_SV.log(l_module_name,'Mark_Reprice_Required completed with warnings.');
7023 END IF;
7024
7025 END IF;
7026 END IF;
7027
7028
7029 -- J: W/V Changes
7030 -- Decrement the parent W/V by DD W/V
7031 IF l_debug_on THEN
7032 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
7033 END IF;
7034 WSH_WV_UTILS.DD_WV_Post_Process(
7035 p_delivery_detail_id => p_detail_id,
7036 p_diff_gross_wt => -1 * l_gross_wt,
7037 p_diff_net_wt => -1 * l_net_wt,
7038 p_diff_volume => -1 * l_vol,
7039 p_diff_fill_volume => -1 * l_vol,
7040 p_check_for_empty => 'Y',
7041 x_return_status => l_return_status);
7042
7043 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7044 --
7045 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7046 WSH_UTIL_CORE.Add_Message(x_return_status);
7047 IF l_debug_on THEN
7048 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
7049 WSH_DEBUG_SV.pop(l_module_name);
7050 END IF;
7051 return;
7052 END IF;
7053
7054 -- OTM R12 : unassign delivery detail
7055 -- l_gross_weight <> 0 means that any of the unassigned detail has
7056 -- gross_weight <> 0, which will be used later
7057 IF (l_gc3_is_installed = 'Y' AND
7058 NVL(l_del1.ignore_for_planning, 'N') = 'N') THEN
7059 l_gross_weight := 0;
7060 END IF;
7061 -- End of OTM R12 : unassign delivery detail
7062
7063 --loop thru each lower detail and unassign from del
7064 OPEN c_all_details_below;
7065 --for locking all details
7066 LOOP
7067 -- OTM R12 : unassign delivery detail, legacy issue
7068 -- l_del_id_tbl and l_parent_dd_id_tbl need to be switched
7069 FETCH c_all_details_below into l_dd_id(i), l_parent_dd_id_tbl(i), l_del_id_tbl(i);
7070 EXIT WHEN c_all_details_below%notfound;
7071 SELECT delivery_detail_id, nvl(line_direction, 'O'), container_flag,
7072 organization_id,
7073 gross_weight -- OTM R12 : unassign delivery detail
7074 INTO l_dummy_del_det_id, l_line_dir_tbl(i), l_cnt_flag_tbl(i),
7075 l_det_org_id_tbl(i),
7076 l_gross_weight_tbl(i) -- OTM R12 : unassign delivery detail
7077 FROM wsh_delivery_details
7078 WHERE delivery_detail_id=l_dd_id(i)
7079 FOR UPDATE NOWAIT;
7080
7081 -- OTM R12 : unassign delivery detail
7082 IF (l_gc3_is_installed = 'Y' AND
7083 NVL(l_del1.ignore_for_planning, 'N') = 'N' AND
7084 l_gross_weight = 0) THEN
7085 l_gross_weight := l_gross_weight + NVL(l_gross_weight_tbl(i),0);
7086 END IF;
7087 -- End of OTM R12 : unassign delivery detail
7088
7089 IF l_debug_on THEN
7090 WSH_DEBUG_SV.log(l_module_name,'l_dd_id',l_dd_id(i));
7091 -- OTM R12 : unassign delivery detail
7092 WSH_DEBUG_SV.log(l_module_name,'l_del_id',l_del_id_tbl(i));
7093 WSH_DEBUG_SV.log(l_module_name,'l_gross_weight',l_gross_weight_tbl(i));
7094 -- End of OTM R12 : unassign delivery detail
7095 END IF;
7096 i := i+1;
7097 END LOOP;
7098 CLOSE c_all_details_below;
7099
7100 l_null_delivery_id := null; --bugfix 3768823
7101 FOR j IN 0..(l_dd_id.COUNT-1) LOOP
7102 --
7103 -- K LPN CONV. rv
7104 --
7105 l_loop_wms_org := wsh_util_validate.check_wms_org(l_det_org_id_tbl(j));
7106 --
7107 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7108 AND l_line_dir_tbl(j) IN ('O', 'IO')
7109 AND l_cnt_flag_tbl(j) = 'Y'
7110 AND
7111 (
7112 (WSH_WMS_LPN_GRP.GK_WMS_UNASSIGN_DLVY and l_loop_wms_org = 'Y')
7113 OR
7114 (WSH_WMS_LPN_GRP.GK_INV_UNASSIGN_DLVY and l_loop_wms_org = 'N')
7115 )
7116 THEN
7117 --{
7118 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
7119 l_sync_tmp_rec.parent_delivery_detail_id := l_parent_dd_id_tbl(j);
7120 l_sync_tmp_rec.delivery_id := l_del_id_tbl(j);
7121 l_sync_tmp_rec.operation_type := 'PRIOR';
7122 --
7123 IF l_debug_on THEN
7124 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
7125 END IF;
7126 --
7127 WSH_WMS_SYNC_TMP_PKG.MERGE
7128 (
7129 p_sync_tmp_rec => l_sync_tmp_rec,
7130 x_return_status => l_return_status
7131 );
7132 --
7133 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7134 --
7135 x_return_status := l_return_status;
7136 --
7137 IF l_debug_on THEN
7138 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7139 WSH_DEBUG_SV.pop(l_module_name);
7140 END IF;
7141 --
7142 return;
7143 --
7144 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7145 --
7146 l_num_warnings := l_num_warnings + 1;
7147 --
7148 END IF;
7149 --
7150 --}
7151 END IF;
7152 -- K LPN CONV. rv
7153 --
7154 UPDATE wsh_delivery_assignments_v
7155 SET delivery_id = l_null_delivery_id, --bugfix 3768823
7156 last_update_date = SYSDATE,
7157 last_updated_by = FND_GLOBAL.USER_ID,
7158 last_update_login = FND_GLOBAL.LOGIN_ID
7159 WHERE delivery_detail_id = l_dd_id(j);
7160
7161 -- bug 6700792: OTM Dock Door Appt Sched Proj
7162 --Upadating the loading sequence of the delivery detail to NULL while unassigning from delivery
7163 UPDATE wsh_delivery_details
7164 SET load_seq_number = NULL,
7165 last_update_date = SYSDATE,
7166 last_updated_by = FND_GLOBAL.USER_ID,
7167 last_update_login = FND_GLOBAL.LOGIN_ID
7168 WHERE delivery_detail_id = l_dd_id(j);
7169
7170 IF (SQL%NOTFOUND) THEN
7171 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7172 RAISE NO_DATA_FOUND;
7173 END IF;
7174
7175 l_mdc_detail_tab(1) := l_dd_id(j);
7176 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
7177 p_detail_id_tab => l_mdc_detail_tab,
7178 x_return_status => x_return_status);
7179
7180 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7181 IF l_debug_on THEN
7182 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7183 WSH_DEBUG_SV.pop(l_module_name);
7184 END IF;
7185 return;
7186 END IF;
7187
7188 IF l_debug_on THEN
7189 WSH_DEBUG_SV.log(l_module_name,'Updating for detail id',l_dd_id(j));
7190 END IF;
7191
7192
7193 -- J-IB-NPARIKH-{
7194 IF l_del1.shipment_Direction NOT IN ('O','IO')
7195 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX
7196 THEN
7197 l_ib_upd_flag := 'Y';
7198 ELSE
7199 l_ib_upd_flag := 'N';
7200 END IF;
7201 --
7202 IF l_debug_on THEN
7203 WSH_DEBUG_SV.log(l_module_name,'l_ib_upd_flag',l_ib_upd_flag);
7204 END IF;
7205 --
7206 -- J-IB-NPARIKH-}
7207
7208
7209
7210 IF l_detail_is_empty_cont ='Y' THEN
7211 --
7212 -- K LPN CONV. rv
7213 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7214 AND l_line_dir_tbl(j) IN ('O', 'IO')
7215 AND
7216 (
7217 (WSH_WMS_LPN_GRP.GK_WMS_UPD_GRP and l_loop_wms_org = 'Y')
7218 OR
7219 (WSH_WMS_LPN_GRP.GK_INV_UPD_GRP and l_loop_wms_org = 'N')
7220 )
7221 THEN
7222 --{
7223 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
7224 l_sync_tmp_rec.operation_type := 'UPDATE';
7225 --
7226 IF l_debug_on THEN
7227 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
7228 END IF;
7229 --
7230 WSH_WMS_SYNC_TMP_PKG.MERGE
7231 (
7232 p_sync_tmp_rec => l_sync_tmp_rec,
7233 x_return_status => l_return_status
7234 );
7235 --
7236 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7237 --
7238 x_return_status := l_return_status;
7239 --
7240 IF l_debug_on THEN
7241 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7242 WSH_DEBUG_SV.pop(l_module_name);
7243 END IF;
7244 --
7245 return;
7246 --
7247 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7248 --
7249 l_num_warnings := l_num_warnings + 1;
7250 --
7251 END IF;
7252 --
7253 --}
7254 END IF;
7255 -- K LPN CONV. rv
7256 --
7257 UPDATE wsh_delivery_details
7258 SET customer_id = NULL,
7259 ship_to_location_id = NULL,
7260 intmed_ship_to_location_id = NULL,
7261 fob_code = NULL,
7262 freight_terms_code = NULL,
7263 ship_method_code = NULL,
7264 mode_of_transport = NULL,
7265 service_level = NULL,
7266 carrier_id = NULL,
7267 deliver_to_location_id = NULL,
7268 -- tracking_number = NULL, Bug# 3632485
7269 line_direction = DECODE(line_direction,'IO','O',line_direction), -- J-IB-NPARIKH
7270 last_update_date = SYSDATE,
7271 last_updated_by = FND_GLOBAL.USER_ID,
7272 last_update_login = FND_GLOBAL.LOGIN_ID
7273 WHERE delivery_detail_id = l_dd_id(j);
7274 IF (SQL%NOTFOUND) THEN
7275 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7276 RAISE NO_DATA_FOUND;
7277 END IF;
7278 --
7279
7280 END IF;
7281 IF l_ib_upd_flag ='Y' THEN
7282 UPDATE wsh_delivery_details
7283 SET ship_from_location_id = -1, -- J-IB-NPARIKH
7284 routing_req_id = NULL, -- J-IB-NPARIKH
7285 rcv_shipment_line_id = NULL, -- J-IB-NPARIKH
7286 shipped_quantity = NULL, -- J-IB-NPARIKH
7287 shipped_quantity2 = NULL, -- J-IB-NPARIKH
7288 picked_quantity = NULL, -- J-IB-NPARIKH
7289 picked_quantity2 = NULL, -- J-IB-NPARIKH
7290 received_quantity = NULL, -- J-IB-NPARIKH
7291 received_quantity2 = NULL, -- J-IB-NPARIKH
7292 returned_quantity = NULL, -- J-IB-NPARIKH
7293 returned_quantity2 = NULL, -- J-IB-NPARIKH
7294 earliest_pickup_date = NULL, -- J-IB-NPARIKH
7295 latest_pickup_date = NULL, -- J-IB-NPARIKH
7296 released_status = DECODE(nvl(requested_quantity,0),0,
7297 'D',
7298 'X'), -- J-IB-NPARIKH
7299 ignore_for_planning = 'Y', -- J-IB-NPARIKH
7300 --wv_frozen_flag = DECODE(l_ib_upd_flag,'Y','N',wv_frozen_flag), -- J-IB-NPARIKH
7301 last_update_date = SYSDATE,
7302 last_updated_by = FND_GLOBAL.USER_ID,
7303 last_update_login = FND_GLOBAL.LOGIN_ID
7304 WHERE delivery_detail_id = l_dd_id(j)
7305 returning released_status into l_rel_status;
7306 --bugfix 4530813
7307 IF (SQL%NOTFOUND) THEN
7308 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7309 RAISE NO_DATA_FOUND;
7310 END IF;
7311 IF l_debug_on THEN
7312 WSH_DEBUG_SV.log(l_module_name,'Rel Status after the update is ', l_rel_status);
7313 END IF;
7314
7315 -- released_status = DECODE(released_status,'D','D',
7316 -- nvl(shipped_quantity,picked_quantity,requested_quantity),0,'D',
7317 -- decode(p_action_prms.caller,'WSH_IB_RROQ',0,-1),requested_quantity,'D',
7318 -- 'X'), -- J-IB-NPARIKH
7319 -- DBI API needs to be called for update in released_status/requested_qty
7320 -- So cannot call for l_dd_id completely, since selected few of those are
7321 -- getting processed here.So keep the ids in a local table and call DBI API
7322 -- after the loop for l_dd_id table.
7323 l_detail_tab(l_detail_tab.count + 1) := l_dd_id(j);
7324 END IF;
7325
7326
7327 -- Update Cartonization id
7328 OPEN get_mo_line_id(l_dd_id(j));
7329 FETCH get_mo_line_id INTO l_mo_line_id, l_det_org;
7330 CLOSE get_mo_line_id;
7331
7332 IF l_mo_line_id IS NOT NULL AND
7333 (WSH_USA_INV_PVT.is_mo_type_putaway(p_move_order_line_id => l_mo_line_id)='N') AND --X-dock
7334 (WSH_UTIL_VALIDATE.Check_Wms_Org(l_det_org)='Y')
7335 THEN
7336
7337 OPEN c_grouping_id;
7338 FETCH c_grouping_id into l_carton_grouping_id;
7339 CLOSE c_grouping_id;
7340
7341 IF l_debug_on THEN
7342 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_MO_CANCEL_PVT.update_mol_carton_group',WSH_DEBUG_SV.C_PROC_LEVEL);
7343 END IF;
7344
7345 INV_MO_Cancel_PVT.update_mol_carton_group(
7346 x_return_status => x_return_status,
7347 x_msg_cnt => l_msg_count,
7348 x_msg_data => l_msg_data,
7349 p_line_id => l_mo_line_id,
7350 p_carton_grouping_id => l_carton_grouping_id);
7351
7352 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7353 THEN
7354
7355 RAISE update_mol_carton_group_error;
7356
7357 END IF;
7358
7359
7360 END IF; -- IF (l_mo_line_id IS NOT NULL)...
7361
7362
7363
7364 END LOOP;
7365
7366 -- OTM R12 : unassign delivery detail
7367 -- executed only once after the loop assuming that all the
7368 -- delivery details fetched from cursor c_all_details_below belong
7369 -- to the same delivery
7370 IF (l_gc3_is_installed = 'Y' AND
7371 nvl(l_del1.ignore_for_planning, 'N') = 'N') THEN
7372
7373 l_call_update := 'Y';
7374 l_delivery_id_tab(1) := l_assign.delivery_id;
7375 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_assign.delivery_id);
7376
7377 IF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
7378 --handle the error approriately to the procedure this code is in
7379 IF l_debug_on THEN
7380 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
7381 END IF;
7382 raise FND_API.G_EXC_ERROR;
7383 ELSIF (l_is_delivery_empty = 'Y') THEN
7384 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED;
7385 ELSIF (l_is_delivery_empty = 'N') THEN
7386 l_interface_flag_tab(1) := NULL;
7387 --Bug7608629
7388 --removed code which checked for gross weight
7389 --now irrespective of gross weight UPDATE_TMS_INTERFACE_FLAG will be called
7390 END IF;
7391
7392 IF l_call_update = 'Y' THEN
7393 WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG(
7394 p_delivery_id_tab => l_delivery_id_tab,
7395 p_tms_interface_flag_tab => l_interface_flag_tab,
7396 x_return_status => l_return_status);
7397
7398 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
7399 x_return_status := l_return_status;
7400 IF l_debug_on THEN
7401 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG '||l_return_status);
7402 WSH_DEBUG_SV.pop(l_module_name);
7403 END IF;
7404 RETURN;
7405 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7406 l_num_warnings := l_num_warnings + 1;
7407 END IF;
7408 END IF;
7409 END IF;
7410 -- End of OTM R12 : unassign delivery detail
7411
7412 -- Call DBI api after the loop
7413 -- DBI Project
7414 -- Update of wsh_delivery_details, call DBI API after the action.
7415 -- This API will also check for DBI Installed or not
7416 IF l_debug_on THEN
7417 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail count-',l_detail_tab.count);
7418 END IF;
7419 WSH_INTEGRATION.DBI_Update_Detail_Log
7420 (p_delivery_detail_id_tab => l_detail_tab,
7421 p_dml_type => 'UPDATE',
7422 x_return_status => l_dbi_rs);
7423
7424 IF l_debug_on THEN
7425 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7426 END IF;
7427 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7428 x_return_status := l_dbi_rs;
7429 -- just pass this return status to caller API
7430 ROLLBACK TO before_unassign;
7431 --
7432 IF l_debug_on THEN
7433 WSH_DEBUG_SV.logmsg(l_module_name,'DBI API call failed',x_return_status);
7434 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DBI API FAILED');
7435 END IF;
7436 RETURN;
7437 END IF;
7438 -- End of Code for DBI Project
7439 --
7440
7441 --also unassign from container
7442 IF (l_assign.parent_delivery_detail_id IS NOT null) THEN
7443 -- K LPN CONV. rv
7444 --
7445 open l_parent_cnt_csr(l_assign.parent_delivery_detail_id);
7446 fetch l_parent_cnt_csr into l_parent_cnt_orgn_id, l_parent_cnt_line_dir;
7447 close l_parent_cnt_csr;
7448 --
7449 IF l_debug_on THEN
7450 WSH_DEBUG_SV.log(l_module_name,' parent cnt orgn id is', l_parent_cnt_orgn_id);
7451 WSH_DEBUG_SV.log(l_module_name,' parent cnt line dir is', l_parent_cnt_line_dir);
7452 END IF;
7453 --
7454 l_wms_org := wsh_util_validate.check_wms_org(l_parent_cnt_orgn_id);
7455 --
7456 -- K LPN CONV. rv
7457 --
7458 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7459 AND nvl(l_parent_cnt_line_dir,'O') IN ('O', 'IO')
7460 AND
7461 (
7462 (WSH_WMS_LPN_GRP.GK_WMS_UNPACK and l_wms_org = 'Y')
7463 OR
7464 (WSH_WMS_LPN_GRP.GK_INV_UNPACK and l_wms_org = 'N')
7465 )
7466 THEN
7467 --{
7468 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
7469 l_sync_tmp_rec.parent_delivery_detail_id := l_assign.parent_delivery_detail_id;
7470 l_sync_tmp_rec.delivery_id := l_assign.delivery_id;
7471 l_sync_tmp_rec.operation_type := 'PRIOR';
7472 --
7473 IF l_debug_on THEN
7474 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
7475 END IF;
7476 --
7477 WSH_WMS_SYNC_TMP_PKG.MERGE
7478 (
7479 p_sync_tmp_rec => l_sync_tmp_rec,
7480 x_return_status => l_return_status
7481 );
7482 --
7483 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7484 --
7485 x_return_status := l_return_status;
7486 --
7487 IF l_debug_on THEN
7488 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7489 WSH_DEBUG_SV.pop(l_module_name);
7490 END IF;
7491 --
7492 return;
7493 --
7494 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7495 --
7496 l_num_warnings := l_num_warnings + 1;
7497 --
7498 END IF;
7499 --
7500 --}
7501 END IF;
7502 -- K LPN CONV. rv
7503 --
7504 UPDATE wsh_delivery_assignments_v
7505 SET parent_delivery_detail_id=NULL
7506 WHERE delivery_detail_id = p_detail_id;
7507
7508 --OTM Dock Door Appt Sched Proj
7509 --Upadating the loading sequence of the delivery detail to NULL while unassigning from delivery
7510 UPDATE wsh_delivery_details
7511 SET load_seq_number = NULL,
7512 last_update_date = SYSDATE,
7513 last_updated_by = FND_GLOBAL.USER_ID,
7514 last_update_login = FND_GLOBAL.LOGIN_ID
7515 WHERE delivery_detail_id = p_detail_id;
7516
7517 IF (SQL%NOTFOUND) THEN
7518 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7519 RAISE NO_DATA_FOUND;
7520 END IF;
7521
7522 l_mdc_detail_tab(1) := p_detail_id;
7523 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
7524 p_detail_id_tab => l_mdc_detail_tab,
7525 x_return_status => x_return_status);
7526
7527 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7528 IF l_debug_on THEN
7529 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7530 WSH_DEBUG_SV.pop(l_module_name);
7531 END IF;
7532 return;
7533 END IF;
7534
7535 WSH_SHIPPING_PARAMS_PVT.Get(
7536 p_organization_id => l_assign.organization_id,
7537 x_param_info => l_shipping_param_info,
7538 x_return_status => l_return_status);
7539
7540
7541 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7542 THEN
7543 IF l_debug_on THEN
7544 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SHIPPING_PARAMS_PVT.Get returned '||l_return_status);
7545 END IF;
7546 RAISE get_shipping_param_err;
7547 END IF;
7548
7549
7550 IF l_shipping_param_info.PERCENT_FILL_BASIS_FLAG = 'Q' THEN
7551
7552 WSH_WV_UTILS.ADJUST_PARENT_WV(
7553 p_entity_type => 'CONTAINER',
7554 p_entity_id => l_assign.parent_delivery_detail_id,
7555 p_gross_weight => 0,
7556 p_net_weight => 0,
7557 p_volume => 0,
7558 p_filled_volume => 0,
7559 p_wt_uom_code => l_assign.weight_uom_code,
7560 p_vol_uom_code => l_assign.volume_uom_code,
7561 p_inv_item_id => l_assign.inventory_item_id,
7562 x_return_status => l_return_status);
7563
7564 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7565 THEN
7566 IF l_debug_on THEN
7567 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.ADJUST_PARENT_WV returned '||l_return_status);
7568 END IF;
7569 RAISE adjust_parent_wv_err;
7570 END IF;
7571
7572
7573 END IF;
7574
7575 END IF;
7576
7577 /* Bug 2769639, remove FTE generated FC for the delivery detail and all the delivery details below it */
7578
7579 IF WSH_UTIL_CORE.FTE_Is_Installed = 'Y' AND l_dd_id.count > 0
7580 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX
7581 THEN
7582 WSH_FREIGHT_COSTS_PVT.Remove_FTE_Freight_Costs(
7583 p_delivery_details_tab => l_dd_id,
7584 x_return_status => l_return_status) ;
7585 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS AND
7586 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7587 raise remove_FC_error;
7588 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7589 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7590 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7591 END IF;
7592 END IF;
7593 IF l_debug_on THEN
7594 WSH_DEBUG_SV.log(l_module_name,'Remove_FTE_Freight_Costs completed returns with status: ' ||
7595 l_return_status);
7596 END IF;
7597
7598 NULL;
7599 END IF;
7600
7601 -- LPN CONV. rv
7602 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7603 --
7604 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7605 --
7606 ELSE
7607 --
7608 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7609 --
7610 END IF;
7611 -- LPN CONV. rv
7612
7613
7614
7615 --
7616 IF l_debug_on THEN
7617 WSH_DEBUG_SV.pop(l_module_name);
7618 END IF;
7619 --
7620 EXCEPTION
7621 WHEN mark_reprice_error THEN
7622 x_return_status := l_return_status;
7623 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
7624 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7625 ROLLBACK TO before_unassign;
7626 --
7627 IF l_debug_on THEN
7628 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7629 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
7630 END IF;
7631 --
7632 WHEN detail_not_assigned THEN
7633 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7634 fnd_message.set_name('WSH', 'WSH_DET_DETAIL_NOT_ASSIGNED');
7635 wsh_util_core.add_message(x_return_status,l_module_name);
7636 ROLLBACK TO before_unassign;
7637 --
7638 IF l_debug_on THEN
7639 WSH_DEBUG_SV.logmsg(l_module_name,'DETAIL_NOT_ASSIGNED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7640 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DETAIL_NOT_ASSIGNED');
7641 END IF;
7642 --
7643 WHEN del_not_updatable THEN
7644 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7645 wsh_util_core.add_message(x_return_status,l_module_name);
7646 ROLLBACK TO before_unassign;
7647 --
7648 IF l_debug_on THEN
7649 WSH_DEBUG_SV.logmsg(l_module_name,'DEL_NOT_UPDATABLE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7650 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DEL_NOT_UPDATABLE');
7651 END IF;
7652 --
7653 WHEN update_mol_carton_group_error THEN
7654 fnd_message.SET_name('WSH', 'WSH_MOL_CARTON_GROUP_ERROR');
7655 x_return_status := l_return_status;
7656 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7657
7658 --
7659 IF l_debug_on THEN
7660 WSH_DEBUG_SV.logmsg(l_module_name,'update_mol_carton_group_error exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7661 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:update_mol_carton_group_error');
7662 END IF;
7663
7664 WHEN check_ship_set_failed THEN
7665 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7666
7667 --
7668 IF l_debug_on THEN
7669 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SHIP_SET_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7670 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SHIP_SET_FAILED');
7671 END IF;
7672 --
7673 WHEN check_smc_failed THEN
7674 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7675 --
7676 IF l_debug_on THEN
7677 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SMC_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7678 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SMC_FAILED');
7679 END IF;
7680 --
7681 WHEN remove_FC_error THEN
7682 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7683 --
7684 IF l_debug_on THEN
7685 WSH_DEBUG_SV.logmsg(l_module_name,'Remove_FTE_Freight_Costs failed.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7686 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REMOVE_FC_ERROR');
7687 END IF;
7688 --
7689 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
7690 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7691 ROLLBACK TO before_unassign;
7692
7693 WHEN get_shipping_param_err THEN
7694 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7695 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
7696 FND_MESSAGE.Set_Token('ORGANIZATION_CODE',
7697 wsh_util_core.get_org_name(l_assign.organization_id));
7698 wsh_util_core.add_message(x_return_status,l_module_name);
7699 ROLLBACK TO before_unassign;
7700 --
7701 IF l_debug_on THEN
7702 WSH_DEBUG_SV.logmsg(l_module_name,'Failed to get Shipping Parameters',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7703 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:GET_SHIPPING_PARAM_ERR');
7704 END IF;
7705
7706 WHEN adjust_parent_wv_err THEN
7707 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7708 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_WT_VOL_FAILED');
7709 FND_MESSAGE.SET_TOKEN('CONT_NAME',WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_assign.parent_delivery_detail_id));
7710 WSH_UTIL_CORE.ADD_MESSAGE(x_return_status,l_module_name);
7711
7712 ROLLBACK TO before_unassign;
7713 --
7714 IF l_debug_on THEN
7715 WSH_DEBUG_SV.logmsg(l_module_name,'Failed to adjust the weight and volume of parent container '||to_char(l_assign.parent_delivery_detail_id),WSH_DEBUG_SV.C_EXCEP_LEVEL);
7716 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ADJUST_PARENT_WV_ERR');
7717 END IF;
7718
7719 WHEN others THEN
7720 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7721 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',l_module_name);
7722 ROLLBACK TO before_unassign;
7723
7724
7725 --
7726 IF l_debug_on THEN
7727 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7728 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7729 END IF;
7730 --
7731 END Unassign_Detail_FROM_Delivery;
7732
7733
7734 -------------------------------------------------------------------
7735 -- This procedure is only for backward compatibility. No one should call
7736 -- this procedure.
7737 -------------------------------------------------------------------
7738
7739 PROCEDURE Unassign_Detail_from_Delivery(
7740 p_detail_id IN NUMBER
7741 , x_return_status OUT NOCOPY VARCHAR2
7742 , p_validate_flag IN VARCHAR2)
7743
7744 IS
7745
7746 --
7747 l_debug_on BOOLEAN;
7748 --
7749 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_DELIVERY';
7750 --
7751 l_action_prms WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type; -- J-IB-NPARIKH
7752 BEGIN
7753
7754 /*changing as per discussion with PM -- if detail is in a container, unassign from container as well. if detail itself is a container, unassign all children from delivery as well*/
7755
7756 --
7757 --
7758 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7759 --
7760 IF l_debug_on IS NULL
7761 THEN
7762 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7763 END IF;
7764 --
7765 IF l_debug_on THEN
7766 WSH_DEBUG_SV.push(l_module_name);
7767 --
7768 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
7769 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
7770 END IF;
7771 --
7772 IF l_debug_on THEN
7773 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
7774 END IF;
7775 UNASSIGN_DETAIL_FROM_DELIVERY (p_detail_id,
7776 x_return_status,
7777 p_validate_flag,
7778 l_action_prms);
7779 --
7780 IF l_debug_on THEN
7781 WSH_DEBUG_SV.pop(l_module_name);
7782 END IF;
7783 --
7784 EXCEPTION
7785 WHEN others THEN
7786 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7787 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',l_module_name);
7788 --
7789 IF l_debug_on THEN
7790 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7791 END IF;
7792 --
7793 END Unassign_Detail_FROM_Delivery;
7794
7795
7796
7797
7798 --
7799 --Procedure: Unassign_multiple_details
7800 --Parameters: P_REC_OF_DETAIL_IDS
7801 -- P_from_delivery
7802 -- P_from_container
7803 -- x_return_status
7804 --Desription: Unasigns multiple details FROM a delivery or a container
7805 PROCEDURE Unassign_Multiple_Details(
7806 P_REC_OF_DETAIL_IDS IN WSH_UTIL_CORE.ID_TAB_TYPE
7807 , P_FROM_delivery IN VARCHAR2
7808 , P_FROM_container IN VARCHAR2
7809 , x_return_status out NOCOPY varchar2
7810 , p_validate_flag IN VARCHAR2
7811 , p_action_prms IN WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type -- J-IB-NPARIKH
7812 )
7813 IS
7814
7815 CURSOR c_multi_assign_rec(c_delivery_detail_id number)
7816 IS
7817 SELECT delivery_id, parent_delivery_detail_id
7818 FROM wsh_delivery_assignments_v
7819 WHERE delivery_detail_id = c_delivery_Detail_id
7820 AND ((delivery_id IS not null) or (parent_delivery_detail_id IS not null));
7821 l_multi_assign_rec c_multi_assign_rec%ROWTYPE;
7822
7823 CURSOR c_multi_delivery(c_del_id number)
7824 IS
7825 SELECT *
7826 FROM wsh_new_deliveries
7827 WHERE delivery_id = c_del_id;
7828 l_multi_delivery c_multi_delivery%ROWTYPE;
7829
7830 l_multi_cost_count number;
7831 l_ship_set BOOLEAN;
7832 l_smc_set BOOLEAN;
7833 l_return_status varchar2(30);
7834 check_ship_SET_failed exception;
7835 check_smc_failed exception;
7836 l_num_errors NUMBER;
7837 l_num_warnings NUMBER;
7838 /*Bug 2136603- added variables */
7839 l_gross NUMBER;
7840 l_net NUMBER;
7841 l_volume NUMBER;
7842 l_fill NUMBER;
7843 l_cont_name VARCHAR2(30);
7844 --
7845 l_dlvy_tbl WSH_UTIL_CORE.key_value_tab_type; -- J-IB-NPARIKH
7846 l_dlvy_ext_tbl WSH_UTIL_CORE.key_value_tab_type; -- J-IB-NPARIKH
7847 l_del_tab WSH_UTIL_CORE.ID_TAB_TYPE;
7848 l_index NUMBER;
7849 L_DLVY_FREIGHT_TERMS_CODE VARCHAR2(30);
7850
7851 Cursor c_empty_delivery ( p_del_id number) --Pick To POD WF : Raise PO Cancellation for empty Inbound delivery
7852 IS
7853 SELECT wnd.delivery_id, wnd.organization_id
7854 FROM wsh_new_deliveries wnd
7855 WHERE wnd.delivery_id = p_del_id and wnd.shipment_direction='I'
7856 and not exists ( SELECT wda.delivery_id
7857 FROM wsh_delivery_assignments_v wda
7858 WHERE wda.delivery_id =wnd.delivery_id );
7859 l_del_id NUMBER;
7860 l_org_id NUMBER;
7861 l_wf_rs VARCHAR2(1);
7862
7863 -- K LPN CONV. rv
7864 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
7865 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
7866 l_msg_count NUMBER;
7867 l_msg_data VARCHAR2(32767);
7868 -- K LPN CONV. rv
7869
7870 --
7871 l_debug_on BOOLEAN;
7872 --
7873 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_MULTIPLE_DETAILS';
7874 --
7875 BEGIN
7876 --
7877 --
7878 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7879 --
7880 IF l_debug_on IS NULL
7881 THEN
7882 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7883 END IF;
7884 --
7885 IF l_debug_on THEN
7886 WSH_DEBUG_SV.push(l_module_name);
7887 --
7888 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DELIVERY',P_FROM_DELIVERY);
7889 WSH_DEBUG_SV.log(l_module_name,'P_FROM_CONTAINER',P_FROM_CONTAINER);
7890 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
7891 END IF;
7892 --
7893 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7894
7895 -- initialize summary variables
7896 l_num_warnings := 0;
7897 l_num_errors := 0;
7898
7899 IF (p_from_delivery = 'Y') THEN
7900 FOR i in p_rec_of_detail_ids.FIRST .. p_rec_of_detail_ids.LAST
7901 LOOP
7902 OPEN c_multi_assign_rec(p_rec_of_detail_ids(i));
7903 FETCH c_multi_assign_rec INTO l_multi_assign_rec;
7904
7905 IF l_debug_on THEN
7906 WSH_DEBUG_SV.log(l_module_name,'p_rec_of_detail_ids',
7907 p_rec_of_detail_ids(i));
7908 END IF;
7909
7910 IF (c_multi_assign_rec%NOTFOUND) THEN
7911 l_num_warnings := l_num_warnings + 1;
7912 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7913 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
7914 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
7915 wsh_util_core.add_message(x_return_status,l_module_name);
7916 /* go ahead and process the next line */
7917 CLOSE c_multi_assign_rec;
7918 GOTO start_over_1;
7919 END IF;
7920 CLOSE c_multi_assign_rec;
7921
7922 IF (l_multi_assign_rec.delivery_id IS null) THEN
7923 l_num_warnings := l_num_warnings + 1;
7924 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7925 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
7926 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
7927 wsh_util_core.add_message(x_return_status,l_module_name);
7928 /* go ahead and process the next line */
7929 GOTO start_over_1;
7930 END IF;
7931
7932 -- J-IB-NPARIKH-{
7933 --
7934 --
7935 IF l_debug_on THEN
7936 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_Cached_value',WSH_DEBUG_SV.C_PROC_LEVEL);
7937 END IF;
7938 --
7939 -- Build a cache of uniqye delivery IDs , from which lines are being unassigned
7940 --
7941 --
7942 WSH_UTIL_CORE.get_Cached_value
7943 (
7944 p_cache_tbl => l_dlvy_tbl,
7945 p_cache_ext_tbl => l_dlvy_ext_tbl,
7946 p_key => l_multi_assign_rec.delivery_id,
7947 p_value => l_multi_assign_rec.delivery_id,
7948 p_action => 'PUT',
7949 x_return_status => l_return_status
7950 );
7951 --
7952 --
7953 wsh_util_core.api_post_call
7954 (
7955 p_return_status => l_return_status,
7956 x_num_warnings => l_num_warnings,
7957 x_num_errors => l_num_errors
7958 );
7959 --
7960 -- J-IB-NPARIKH-}
7961
7962
7963 Unassign_detail_from_delivery(
7964 p_detail_id => p_rec_of_detail_ids(i),
7965 p_validate_flag => p_validate_flag,
7966 x_return_status => l_return_status,
7967 p_action_prms => p_action_prms -- J-IB-NPARIKH
7968 );
7969 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
7970 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7971 l_num_errors := l_num_errors + 1;
7972 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7973 l_num_warnings := l_num_warnings + 1;
7974 END IF;
7975
7976
7977 <<start_over_1>>
7978 NULL;
7979 END LOOP;
7980 --
7981 --
7982 -- J-IB-NPARIKH-{
7983 --
7984 l_index := l_dlvy_tbl.FIRST;
7985 --
7986 WHILE l_index IS NOT NULL
7987 LOOP
7988 --{
7989
7990 IF NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
7991 THEN
7992 --{
7993 IF l_debug_on THEN
7994 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
7995 END IF;
7996
7997 l_del_tab(1) := l_dlvy_tbl(l_index).value;
7998 WSH_TP_RELEASE.calculate_cont_del_tpdates(
7999 p_entity => 'DLVY',
8000 p_entity_ids =>l_del_tab,
8001 x_return_status => l_return_status);
8002 --}
8003 /*CURRENTLY NOT IN USE
8004 IF ( p_action_prms.caller = WSH_UTIL_CORE.C_IB_PO_PREFIX ) -- Added for Pick to POD WF
8005 THEN --PO cancellation unassigns DD from delivery, we check if delivery gets emptied out then we raise a event
8006 OPEN c_empty_delivery( l_dlvy_tbl(l_index).value ) ;
8007 Fetch c_empty_delivery into l_del_id, l_org_id;
8008 If (c_empty_delivery%FOUND )
8009 THEN
8010 --Raise Event: Pick To Pod Workflow
8011 WSH_WF_STD.Raise_Event(
8012 p_entity_type => 'DELIVERY',
8013 p_entity_id => l_del_id,
8014 p_event => 'oracle.apps.fte.delivery.ib.pocancelled' ,
8015 p_organization_id => l_org_id,
8016 x_return_status => l_wf_rs ) ;
8017 IF l_debug_on THEN
8018 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', l_del_id );
8019 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
8020 END IF;
8021 --Done Raise Event: Pick To Pod Workflow
8022 END IF;
8023 CLOSE c_empty_delivery;
8024 END IF;
8025 */
8026 END IF;
8027
8028 --
8029 IF l_debug_on THEN
8030 WSH_DEBUG_SV.log(l_module_name,'l_dlvy_tbl(l_index).value',l_dlvy_tbl(l_index).value);
8031 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',WSH_DEBUG_SV.C_PROC_LEVEL);
8032 END IF;
8033 --
8034 WSH_NEW_DELIVERY_ACTIONS.update_freight_terms
8035 (
8036 p_delivery_id => l_dlvy_tbl(l_index).value,
8037 p_action_code => 'UNASSIGN',
8038 x_return_status => l_return_status,
8039 x_freight_terms_code => l_dlvy_freight_terms_code
8040 );
8041 --
8042 --
8043 wsh_util_core.api_post_call
8044 (
8045 p_return_status => l_return_status,
8046 x_num_warnings => l_num_warnings,
8047 x_num_errors => l_num_errors
8048 );
8049 --
8050 --
8051 l_index := l_dlvy_tbl.NEXT(l_index);
8052 --}
8053 END LOOP;
8054 --
8055 --
8056 l_index := l_dlvy_ext_tbl.FIRST;
8057 --
8058 WHILE l_index IS NOT NULL
8059 LOOP
8060 --{
8061 --
8062 IF NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
8063 THEN
8064 --{
8065
8066 IF l_debug_on THEN
8067 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
8068 END IF;
8069 l_del_tab(1) := l_dlvy_ext_tbl(l_index).value;
8070 WSH_TP_RELEASE.calculate_cont_del_tpdates(
8071 p_entity => 'DLVY',
8072 p_entity_ids =>l_del_tab,
8073 x_return_status => l_return_status);
8074 --}
8075 /*IF ( p_action_prms.caller = WSH_UTIL_CORE.C_IB_PO_PREFIX ) -- Added for Pick to POD WF
8076 THEN --PO cancellation unassigns DD from delivery, we check if delivery gets emptied out then we raise a event
8077 OPEN c_empty_delivery( l_dlvy_ext_tbl(l_index).value ) ;
8078 Fetch c_empty_delivery into l_del_id, l_org_id;
8079 If (c_empty_delivery%FOUND )
8080 THEN
8081 --Raise Event: Pick To Pod Workflow
8082 WSH_WF_STD.Raise_Event(
8083 p_entity_type => 'DELIVERY',
8084 p_entity_id => l_del_id,
8085 p_event => 'oracle.apps.fte.delivery.ib.pocancelled' ,
8086 p_organization_id => l_org_id,
8087 x_return_status => l_wf_rs ) ;
8088 IF l_debug_on THEN
8089 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', l_del_id );
8090 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
8091 END IF;
8092 --Done Raise Event: Pick To Pod Workflow
8093 END IF;
8094 CLOSE c_empty_delivery;
8095 END IF;*/
8096 END IF;
8097
8098 IF l_debug_on THEN
8099 WSH_DEBUG_SV.log(l_module_name,'l_dlvy_ext_tbl(l_index).value',l_dlvy_ext_tbl(l_index).value);
8100 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',WSH_DEBUG_SV.C_PROC_LEVEL);
8101 END IF;
8102 --
8103 WSH_NEW_DELIVERY_ACTIONS.update_freight_terms
8104 (
8105 p_delivery_id => l_dlvy_ext_tbl(l_index).value,
8106 p_action_code => 'UNASSIGN',
8107 x_return_status => l_return_status,
8108 x_freight_terms_code => l_dlvy_freight_terms_code
8109 );
8110 --
8111 --
8112 wsh_util_core.api_post_call
8113 (
8114 p_return_status => l_return_status,
8115 x_num_warnings => l_num_warnings,
8116 x_num_errors => l_num_errors
8117 );
8118 --
8119 --
8120 l_index := l_dlvy_ext_tbl.NEXT(l_index);
8121 --}
8122 END LOOP;
8123 --
8124 -- J-IB-NPARIKH-}
8125
8126 END IF;
8127 IF l_debug_on THEN
8128 WSH_DEBUG_SV.log(l_module_name,'l_num_errors', l_num_errors);
8129 WSH_DEBUG_SV.log(l_module_name,'l_num_warnings', l_num_warnings);
8130 END IF;
8131
8132 IF (p_from_container = 'Y') THEN
8133 FOR i in p_rec_of_detail_ids.FIRST .. p_rec_of_detail_ids.LAST
8134 LOOP
8135 OPEN c_multi_assign_rec(p_rec_of_detail_ids(i));
8136 FETCH c_multi_assign_rec INTO l_multi_assign_rec;
8137 IF l_debug_on THEN
8138 WSH_DEBUG_SV.log(l_module_name,'p_rec_of_detail_ids'
8139 ,p_rec_of_detail_ids(i));
8140 WSH_DEBUG_SV.log(l_module_name,'l_multi_assign_rec',
8141 l_multi_assign_rec.delivery_id);
8142 END IF;
8143 IF (c_multi_assign_rec%NOTFOUND) THEN
8144 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8145 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
8146 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
8147 wsh_util_core.add_message(x_return_status,l_module_name);
8148 /* go ahead and process the next line */
8149 CLOSE c_multi_assign_rec;
8150 GOTO start_over_2;
8151 END IF;
8152 CLOSE c_multi_assign_rec;
8153
8154 /* Bug 2166715 - check if line was actually packed or not */
8155 IF l_multi_assign_rec.parent_delivery_detail_id IS NULL THEN l_num_warnings := l_num_warnings + 1;
8156 fnd_message.SET_name('WSH','WSH_CONT_UNASSG_NULL');
8157 wsh_util_core.add_message(x_return_status,l_module_name);
8158 END IF;
8159
8160 Unassign_detail_FROM_cont(
8161 p_detail_id => p_rec_of_detail_ids(i),
8162 p_validate_flag => p_validate_flag,
8163 x_return_status => l_return_status
8164 );
8165 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
8166 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8167 l_num_errors := l_num_errors + 1;
8168 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8169 l_num_warnings := l_num_warnings + 1;
8170
8171 END IF;
8172
8173 IF l_debug_on THEN
8174 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
8175 END IF;
8176 l_del_tab(1) := l_multi_assign_rec.parent_delivery_detail_id;
8177 WSH_TP_RELEASE.calculate_cont_del_tpdates(
8178 p_entity => 'DLVB',
8179 p_entity_ids =>l_del_tab,
8180 x_return_status => l_return_status);
8181
8182 <<start_over_2>>
8183 NULL;
8184 END LOOP;
8185 END IF;
8186 --
8187 -- K LPN CONV. rv
8188 --
8189 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8190 THEN
8191 --{
8192 IF l_debug_on THEN
8193 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8194 END IF;
8195
8196 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8197 (
8198 p_in_rec => l_lpn_in_sync_comm_rec,
8199 x_return_status => l_return_status,
8200 x_out_rec => l_lpn_out_sync_comm_rec
8201 );
8202 --
8203 --
8204 IF l_debug_on THEN
8205 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8206 END IF;
8207 --
8208 --
8209 WSH_UTIL_CORE.API_POST_CALL
8210 (
8211 p_return_status => l_return_status,
8212 x_num_warnings => l_num_warnings,
8213 x_num_errors => l_num_errors,
8214 p_raise_error_flag => false
8215 );
8216 --}
8217 END IF;
8218 --
8219 -- K LPN CONV. rv
8220 --
8221 --
8222 IF (l_num_errors >= p_rec_of_detail_ids.COUNT) THEN
8223 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8224 ELSIF (l_num_warnings > 0 OR l_num_errors>0) THEN
8225 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8226 END IF;
8227 IF l_debug_on THEN
8228 WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
8229 WSH_DEBUG_SV.log(l_module_name,'l_num_warnings',l_num_warnings);
8230 WSH_DEBUG_SV.log(l_module_name,'l_num_errors',l_num_errors);
8231 WSH_DEBUG_SV.pop(l_module_name);
8232 END IF;
8233
8234 EXCEPTION
8235 -- J-IB-NPARIKH-{
8236 WHEN fnd_api.g_exc_error THEN
8237 x_return_status := fnd_api.g_ret_sts_error;
8238 --
8239 -- K LPN CONV. rv
8240 --
8241 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8242 THEN
8243 --{
8244 IF l_debug_on THEN
8245 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8246 END IF;
8247 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8248 (
8249 p_in_rec => l_lpn_in_sync_comm_rec,
8250 x_return_status => l_return_status,
8251 x_out_rec => l_lpn_out_sync_comm_rec
8252 );
8253 --
8254 --
8255 IF l_debug_on THEN
8256 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8257 END IF;
8258 --
8259 --
8260 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8261 x_return_status := l_return_status;
8262 END IF;
8263 --
8264 --}
8265 END IF;
8266 --
8267 -- K LPN CONV. rv
8268 --
8269 --
8270 IF l_debug_on THEN
8271 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
8272 END IF;
8273 --
8274 WHEN fnd_api.g_exc_unexpected_error THEN
8275 x_return_status := fnd_api.g_ret_sts_unexp_error;
8276 --
8277 --
8278 -- K LPN CONV. rv
8279 --
8280 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8281 THEN
8282 --{
8283 IF l_debug_on THEN
8284 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8285 END IF;
8286
8287 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8288 (
8289 p_in_rec => l_lpn_in_sync_comm_rec,
8290 x_return_status => l_return_status,
8291 x_out_rec => l_lpn_out_sync_comm_rec
8292 );
8293 --
8294 --
8295 IF l_debug_on THEN
8296 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8297 END IF;
8298 --
8299 --
8300 --
8301 --}
8302 END IF;
8303 --
8304 -- K LPN CONV. rv
8305 --
8306 IF l_debug_on THEN
8307 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8308 END IF;
8309 --
8310
8311 -- J-IB-NPARIKH-}
8312 WHEN CHECK_SHIP_SET_FAILED THEN
8313 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8314 --
8315 --
8316 -- K LPN CONV. rv
8317 --
8318 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8319 THEN
8320 --{
8321 IF l_debug_on THEN
8322 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8323 END IF;
8324
8325 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8326 (
8327 p_in_rec => l_lpn_in_sync_comm_rec,
8328 x_return_status => l_return_status,
8329 x_out_rec => l_lpn_out_sync_comm_rec
8330 );
8331 --
8332 --
8333 IF l_debug_on THEN
8334 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8335 END IF;
8336 --
8337 --
8338 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8339 x_return_status := l_return_status;
8340 END IF;
8341 --
8342 --}
8343 END IF;
8344 --
8345 -- K LPN CONV. rv
8346 --
8347 IF l_debug_on THEN
8348 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SHIP_SET_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8349 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SHIP_SET_FAILED');
8350 END IF;
8351 --
8352 WHEN check_smc_failed THEN
8353 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8354 --
8355 -- K LPN CONV. rv
8356 --
8357 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8358 THEN
8359 --{
8360 IF l_debug_on THEN
8361 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8362 END IF;
8363
8364 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8365 (
8366 p_in_rec => l_lpn_in_sync_comm_rec,
8367 x_return_status => l_return_status,
8368 x_out_rec => l_lpn_out_sync_comm_rec
8369 );
8370 --
8371 --
8372 IF l_debug_on THEN
8373 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8374 END IF;
8375 --
8376 --
8377 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8378 x_return_status := l_return_status;
8379 END IF;
8380 --
8381 --}
8382 END IF;
8383 --
8384 -- K LPN CONV. rv
8385 --
8386 --
8387 IF l_debug_on THEN
8388 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SMC_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8389 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SMC_FAILED');
8390 END IF;
8391 --
8392 WHEN others THEN
8393 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8394 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',l_module_name);
8395 --
8396 IF l_debug_on THEN
8397 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8398 END IF;
8399 --
8400 --
8401 -- K LPN CONV. rv
8402 --
8403 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8404 THEN
8405 --{
8406 IF l_debug_on THEN
8407 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
8408 END IF;
8409
8410 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8411 (
8412 p_in_rec => l_lpn_in_sync_comm_rec,
8413 x_return_status => l_return_status,
8414 x_out_rec => l_lpn_out_sync_comm_rec
8415 );
8416 --
8417 --
8418 IF l_debug_on THEN
8419 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8420 END IF;
8421 --
8422 --
8423 --}
8424 END IF;
8425 --
8426 -- K LPN CONV. rv
8427 --
8428
8429 --
8430 IF l_debug_on THEN
8431 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8432 END IF;
8433 --
8434 END Unassign_Multiple_Details;
8435
8436 -------------------------------------------------------------------
8437 -- This procedure is only for backward compatibility. No one should call
8438 -- this procedure.
8439 -------------------------------------------------------------------
8440
8441 PROCEDURE Unassign_Multiple_Details(
8442 P_REC_OF_DETAIL_IDS IN WSH_UTIL_CORE.ID_TAB_TYPE
8443 , P_FROM_delivery IN VARCHAR2
8444 , P_FROM_container IN VARCHAR2
8445 , x_return_status out NOCOPY varchar2
8446 , p_validate_flag IN VARCHAR2
8447 )
8448 IS
8449
8450
8451 l_debug_on BOOLEAN;
8452 --
8453 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_MULTIPLE_DETAILS';
8454 --
8455 l_action_prms WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type; -- J-IB-NPARIKH
8456 BEGIN
8457 --
8458 --
8459 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8460 --
8461 IF l_debug_on IS NULL
8462 THEN
8463 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8464 END IF;
8465 --
8466 IF l_debug_on THEN
8467 WSH_DEBUG_SV.push(l_module_name);
8468 --
8469 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DELIVERY',P_FROM_DELIVERY);
8470 WSH_DEBUG_SV.log(l_module_name,'P_FROM_CONTAINER',P_FROM_CONTAINER);
8471 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
8472 END IF;
8473 --
8474 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8475 --
8476 IF l_debug_on THEN
8477 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
8478 END IF;
8479 --
8480 UNASSIGN_MULTIPLE_DETAILS
8481 (
8482 P_REC_OF_DETAIL_IDS
8483 , P_FROM_delivery
8484 , P_FROM_container
8485 , x_return_status
8486 , p_validate_flag
8487 , l_action_prms
8488 );
8489
8490 IF l_debug_on THEN
8491 WSH_DEBUG_SV.pop(l_module_name);
8492 END IF;
8493
8494 EXCEPTION
8495 WHEN others THEN
8496 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8497 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',l_module_name);
8498 --
8499 IF l_debug_on THEN
8500 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8501 END IF;
8502 --
8503 END Unassign_Multiple_Details;
8504
8505 --
8506 --Procedure: Assign_multiple_details
8507 --Parameters: P_REC_OF_DETAIL_IDS
8508 -- P_delivery_id,
8509 -- P_cont_ins_id,
8510 -- x_return_status
8511 --Desription: Assings multiple details to a delivery or a container
8512
8513 PROCEDURE Assign_Multiple_Details(
8514 p_rec_of_detail_ids IN WSH_UTIL_CORE.ID_TAB_TYPE,
8515 p_delivery_id NUMBER,
8516 P_cont_ins_id number,
8517 x_return_status OUT NOCOPY varchar2)
8518 IS
8519 l_rowid varchar2(150);
8520 l_group_status varchar2(30);
8521 l_ship_method_match boolean;
8522 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_TYPE;
8523 l_cr_assg_status varchar2(30);
8524 l_delivery_assignment_id NUMBER;
8525 del_id number;
8526 cont_id number;
8527
8528
8529 CURSOR c_get_del_from_container(c_container_id number) IS
8530 SELECT delivery_id
8531 FROM wsh_delivery_assignments_v
8532 WHERE delivery_detail_id = c_container_id;
8533
8534 l_num_errors NUMBER;
8535 l_num_warnings NUMBER;
8536
8537
8538 l_scc_unassign_from_del NUMBER := 0;
8539 l_scc_unassign_from_con NUMBER := 0;
8540 l_delivery_id NUMBER := 0;
8541 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
8542 l_return_status VARCHAR2(1);
8543 m NUMBER := 0;
8544
8545
8546 mark_reprice_error EXCEPTION;
8547
8548 /* Bug 2276586 */
8549 l_delivery_id1 NUMBER;
8550 delivery_id_locked exception ;
8551 PRAGMA EXCEPTION_INIT(delivery_id_locked, -54);
8552
8553
8554
8555 l_has_lines VARCHAR2(1);
8556 l_dlvy_freight_terms_code VARCHAR2(30);
8557 --
8558 --
8559 l_debug_on BOOLEAN;
8560 --
8561 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_MULTIPLE_DETAILS';
8562 --
8563 BEGIN
8564 --
8565 --
8566 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8567 --
8568 IF l_debug_on IS NULL
8569 THEN
8570 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8571 END IF;
8572 --
8573 IF l_debug_on THEN
8574 WSH_DEBUG_SV.push(l_module_name);
8575 --
8576 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8577 WSH_DEBUG_SV.log(l_module_name,'P_CONT_INS_ID',P_CONT_INS_ID);
8578 END IF;
8579 --
8580 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8581 l_del_tab.delete;
8582 l_num_errors := 0;
8583 l_num_warnings := 0;
8584
8585 IF ((p_delivery_id = -9999) AND (p_cont_ins_id = -9999 )) THEN
8586 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8587 --
8588 IF l_debug_on THEN
8589 WSH_DEBUG_SV.pop(l_module_name);
8590 END IF;
8591 --
8592 return;
8593 END IF;
8594
8595 -- Bug 2276586
8596 SELECT delivery_id, freight_Terms_code -- J-IB-NPARIKH
8597 INTO l_delivery_id1, l_dlvy_freight_Terms_code
8598 FROM wsh_new_deliveries
8599 WHERE delivery_id = p_delivery_id
8600 FOR UPDATE NOWAIT;
8601
8602 IF l_debug_on THEN
8603 WSH_DEBUG_SV.log(l_module_name,'Locking for Delivery id ',l_delivery_id1);
8604 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
8605 END IF;
8606
8607 -- J-IB-NPARIKH-{
8608 --
8609 -- Determine if delivery has any non-container lines
8610 --
8611 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
8612 (
8613 p_delivery_id => p_delivery_id
8614 );
8615 --
8616 -- J-IB-NPARIKH-}
8617
8618
8619 FOR i IN P_REC_OF_DETAIL_IDS.FIRST .. P_REC_OF_DETAIL_IDS.LAST
8620 LOOP
8621
8622 IF (p_delivery_id <> -9999) THEN
8623 /* assigning it to a delivery */
8624 --
8625 IF l_debug_on THEN
8626 WSH_DEBUG_SV.log(l_module_name,'Delivery id ',p_rec_of_detail_ids(i));
8627
8628 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DETAIL_TO_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
8629 END IF;
8630 --
8631 wsh_delivery_details_actions.assign_detail_to_delivery(
8632 p_detail_id => P_REC_OF_DETAIL_IDS(i),
8633 p_delivery_id => p_delivery_id,
8634 x_return_status => x_return_status,
8635 x_dlvy_has_lines => l_has_lines, -- J-IB-NPARIKH
8636 x_dlvy_freight_terms_code => l_dlvy_freight_terms_code -- J-IB-NPARIKH
8637 );
8638
8639 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8640 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
8641 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8642 l_num_errors := l_num_errors + 1;
8643 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8644 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8645 l_num_warnings := l_num_warnings + 1;
8646 END IF;
8647 goto start_over;
8648 /* H project : pricing integration csun , need to mark the reprice
8649 flag if any of the delivery detail is assigned */
8650 ELSE
8651 l_scc_unassign_from_del := l_scc_unassign_from_del + 1;
8652 END IF;
8653 END IF;
8654
8655 IF (p_cont_ins_id <> -9999) THEN
8656 -- J: W/V Changes
8657 -- replaced the direct update with Assign_Detail_To_Cont API
8658 wsh_delivery_details_actions.Assign_Detail_To_Cont(
8659 p_detail_id => P_REC_OF_DETAIL_IDS(i),
8660 p_parent_detail_id => p_cont_ins_id,
8661 x_return_status => x_return_status);
8662
8663 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8664 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
8665 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8666 l_num_errors := l_num_errors + 1;
8667 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8668 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8669 l_num_warnings := l_num_warnings + 1;
8670 END IF;
8671 goto start_over;
8672 /* H project : pricing integration csun , need to mark the reprice
8673 flag if any of the delivery detail is assigned */
8674 ELSE
8675 l_scc_unassign_from_con := l_scc_unassign_from_con + 1;
8676 END IF;
8677
8678 END IF;
8679 <<start_over>>
8680 NULL;
8681 END LOOP;
8682
8683 IF l_debug_on THEN
8684 WSH_DEBUG_SV.log(l_module_name,
8685 'l_scc_unassign_from_del',
8686 l_scc_unassign_from_del);
8687 WSH_DEBUG_SV.log(l_module_name,
8688 'l_scc_unassign_from_con',
8689 l_scc_unassign_from_con);
8690 END IF;
8691
8692 IF (l_num_errors > 0) THEN
8693 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8694 --
8695 IF l_debug_on THEN
8696 WSH_DEBUG_SV.log(l_module_name,'Ret status is error',l_num_errors);
8697 WSH_DEBUG_SV.pop(l_module_name);
8698 END IF;
8699 --
8700 return;
8701 ELSIF (l_num_warnings > 0) THEN
8702 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8703 END IF;
8704
8705
8706 /* H projects: pricing integration csun get the delivery id the container is
8707 assigned to and mark the delivery */
8708 IF l_scc_unassign_from_del > 0 THEN
8709 m := m + 1;
8710 l_del_tab(m) := p_delivery_id;
8711 END IF;
8712 IF l_scc_unassign_from_con > 0 THEN
8713 OPEN c_get_del_from_container(p_cont_ins_id) ;
8714 FETCH c_get_del_from_container INTO l_delivery_id;
8715 CLOSE c_get_del_from_container;
8716 IF l_delivery_id <> 0 and l_delivery_id IS NOT NULL THEN
8717 m := m + 1;
8718 l_del_tab(m) := l_delivery_id;
8719 END IF;
8720 END IF;
8721 IF l_del_tab.count > 0 THEN
8722 --
8723 IF l_debug_on THEN
8724 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
8725 END IF;
8726 --
8727 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
8728 p_entity_type => 'DELIVERY',
8729 p_entity_ids => l_del_tab,
8730 x_return_status => l_return_status);
8731 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
8732 raise mark_reprice_error;
8733 END IF;
8734 END IF;
8735
8736
8737 --
8738 IF l_debug_on THEN
8739 WSH_DEBUG_SV.pop(l_module_name);
8740 END IF;
8741 --
8742 exception
8743 WHEN mark_reprice_error THEN
8744 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8745 fnd_message.SET_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
8746 wsh_util_core.add_message(x_return_status,l_module_name);
8747
8748 --
8749 IF l_debug_on THEN
8750 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8751 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
8752 END IF;
8753 --
8754 WHEN delivery_id_locked THEN
8755 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8756 fnd_message.SET_name('WSH', 'WSH_NO_LOCK');
8757 wsh_util_core.add_message(x_return_status,l_module_name);
8758 --
8759 IF l_debug_on THEN
8760 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Id Locked exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8761 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION : DELIVERY_ID_LOCKED');
8762 END IF;
8763 --
8764 return;
8765
8766 --
8767 IF l_debug_on THEN
8768 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY_ID_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8769 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DELIVERY_ID_LOCKED');
8770 END IF;
8771 --
8772 WHEN others THEN
8773 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8774 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_MULTIPLE_DETAILS',l_module_name);
8775
8776 --
8777 IF l_debug_on THEN
8778 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8779 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8780 END IF;
8781 --
8782 END Assign_Multiple_Details;
8783
8784
8785
8786 /*************************/
8787 /* CODE FOR AUTO PACKING */
8788 -- This API has been created to be called
8789 -- from Auto Pack Lines
8790 -- Purpose is to split a delivery line as many times
8791 -- as required by just one call , rather than calling
8792 -- Split API multiple times
8793
8794 --
8795 --Procedure:
8796 --Parameters: p_from_detail_id
8797 -- p_req_quantity
8798 -- p_new_detail_id
8799 -- x_return_status
8800 --Desription:
8801 -- Splits a delivery detail according the new requested
8802 -- quantity. The newly created the detail has the requested
8803 -- quantity as p_req_quantity and the old detail has the
8804 --
8805 -- fabdi start : PICK CONFIRM
8806 --added a new parameter called p_req_quantity2 requested quantity as requested_quantity - p_requested_quantity
8807 -- fabdi end : PICK CONFIRM
8808 -- HW BUG#:1636578 added a new parameter p_converted_flag
8809
8810 /*****************************************************
8811 SPLIT_DELIVERY_DETAILS_BULK api
8812 *****************************************************/
8813 PROCEDURE Split_Delivery_Details_Bulk (
8814 p_from_detail_id IN NUMBER,
8815 p_req_quantity IN OUT NOCOPY NUMBER,
8816 p_unassign_flag IN VARCHAR2 ,
8817 p_req_quantity2 IN NUMBER ,
8818 p_converted_flag IN VARCHAR2,
8819 p_manual_split IN VARCHAR2 ,
8820 p_num_of_split IN NUMBER , -- for empty container cases
8821 x_new_detail_id OUT NOCOPY NUMBER,
8822 x_dd_id_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
8823 x_return_status OUT NOCOPY VARCHAR2
8824 )
8825 IS
8826
8827 l_new_delivery_detail_id number;
8828 -- HW OPMCONV. Removed OPM variables
8829
8830 -- HW OPMCONV - Removed Format of qty2
8831 l_qty2 NUMBER;
8832 l_split_shipped_qty2 NUMBER(19,9):= NULL;
8833 -- HW BUG#:1636578 variable to calculate new qty2
8834 l_new_req_qty2 NUMBER;
8835 l_original_shipped_qty2 NUMBER(19,9):= NULL;
8836
8837
8838 l_new_req_qty NUMBER;
8839 l_new_pick_qty NUMBER;
8840
8841 l_new_pick_qty2 NUMBER;
8842
8843 l_delivery_id number;
8844 l_parent_delivery_detail_id number;
8845 assignment number;
8846 l_delivery_assignment_id number;
8847 detail_rowid VARCHAR2(30);
8848 assignment_rowid VARCHAR2(30);
8849 total number;
8850 l_cr_dt_status varchar2(30);
8851 l_cr_assg_status varchar2(30);
8852 l_output_quantity number;
8853 l_return_status varchar2(1);
8854 l_qty_return_status varchar2(30);
8855
8856 chk_decimal_qty_failed exception;
8857 quantity_over EXCEPTION;
8858 negative_qty EXCEPTION;
8859 zero_qty EXCEPTION;
8860 /* H integration: Pricing integration csun
8861 mark reprice required flag when split_delivery_details
8862 */
8863 l_entity_ids WSH_UTIL_CORE.id_tab_type;
8864 reprice_required_err EXCEPTION;
8865 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
8866 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
8867 l_split_weight number;
8868 l_split_volume number;
8869 l_split_return_status varchar2(30);
8870 l_shipped_quantity NUMBER := NULL;
8871 l_old_stage_qty NUMBER := NULL;
8872 l_ser_qty NUMBER := NULL;
8873
8874
8875 l_dd_id_tab WSH_UTIL_CORE.id_tab_type;
8876 l_num_of_split NUMBER;
8877
8878 old_delivery_detail_rec SplitDetailRecType;
8879
8880 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
8881
8882
8883 -- Bug 2637876
8884 l_original_shipped_qty NUMBER;
8885 l_split_shipped_qty NUMBER;
8886 l_serial_tab WSH_DELIVERY_DETAILS_ACTIONS.serial_tab;
8887 i NUMBER;
8888 j NUMBER;
8889 l_serial_orig_rec WSH_DELIVERY_DETAILS_ACTIONS.SplitDetailRecType;
8890 l_new_serial_rec WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
8891 l_transaction_id_tab WSH_UTIL_CORE.id_tab_type;
8892 l_serial_number WSH_DELIVERY_DETAILS.serial_number%TYPE;
8893 TYPE l_sr_no_tab IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
8894 l_serial_number_tab l_sr_no_tab;
8895 l_id1 NUMBER;
8896 l_s1 VARCHAR2(30);
8897
8898 --
8899 l_debug_on BOOLEAN;
8900 --
8901 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DELIVERY_DETAILS_BULK';
8902 --
8903 BEGIN
8904 --
8905 --
8906 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8907 --
8908 IF l_debug_on IS NULL
8909 THEN
8910 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8911 END IF;
8912 --
8913 IF l_debug_on THEN
8914 WSH_DEBUG_SV.push(l_module_name);
8915 --
8916 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DETAIL_ID',P_FROM_DETAIL_ID);
8917 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY',P_REQ_QUANTITY);
8918 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
8919 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY2',P_REQ_QUANTITY2);
8920 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
8921 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
8922 END IF;
8923 --
8924 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8925
8926 OPEN c_split_detail_info(p_from_detail_id);
8927 FETCH c_split_detail_info into old_delivery_detail_rec;
8928 CLOSE c_split_detail_info;
8929
8930 IF l_debug_on THEN
8931 WSH_DEBUG_SV.log(l_module_name,'delivery_detail_id',
8932 old_delivery_detail_rec.delivery_detail_id);
8933 WSH_DEBUG_SV.log(l_module_name,'picked_quantity',
8934 old_delivery_detail_rec.picked_quantity);
8935 WSH_DEBUG_SV.log(l_module_name,'organization_id',
8936 old_delivery_detail_rec.organization_id);
8937 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',
8938 old_delivery_detail_rec.inventory_item_id);
8939 WSH_DEBUG_SV.log(l_module_name,'requested_quantity_uom',
8940 old_delivery_detail_rec.requested_quantity_uom);
8941 END IF;
8942
8943 -- Bug 2419301 : Set oe_interfaced_flag to MISS CHAR so that create_new_detail_from_old API
8944 -- determines the value of oe_interfaced_flag for newly created dd
8945 old_delivery_detail_rec.oe_interfaced_flag:= NULL;
8946
8947
8948 -- Bug 1289812
8949 -- check if this split is valid operation
8950 IF (p_req_quantity >= NVL(old_delivery_detail_rec.picked_quantity,
8951 old_delivery_detail_rec.requested_quantity)) THEN
8952 RAISE quantity_over;
8953 END IF;
8954 -- Bug 1299636
8955 -- check if this quantity to split is positive
8956 IF (p_req_quantity = 0) THEN
8957 RAISE zero_qty;
8958 ELSIF (p_req_quantity < 0) THEN
8959 RAISE negative_qty;
8960 END IF;
8961 l_qty2 := p_req_quantity2 ;
8962
8963 /* need to validate the quantity passed meets the decimal quantity
8964 standard */
8965
8966 --Check if org is a process one or not for the current record
8967 --
8968 -- HW OPMCONV - Removed checking for process org
8969
8970 -- Patch J: Catch Weights
8971 -- Need to split the secondary quantity in proportion to the primary quantity.
8972 -- Catch weight support currently only for non-opm lines.
8973
8974 IF old_delivery_detail_rec.picked_quantity2 IS NOT NULL and p_req_quantity2 IS NULL
8975 and (NVL(old_delivery_detail_rec.picked_quantity,0) <> 0) THEN
8976
8977 l_qty2 := old_delivery_detail_rec.picked_quantity2 * (p_req_quantity/old_delivery_detail_rec.picked_quantity);
8978 l_qty2 := round(l_qty2, 5);
8979
8980 ELSE
8981
8982 l_qty2 := p_req_quantity2 ;
8983
8984 END IF;
8985
8986
8987 --
8988 IF l_debug_on THEN
8989 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_DECIMAL_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
8990 END IF;
8991 --
8992 WSH_DETAILS_VALIDATIONS.check_decimal_quantity(
8993 p_item_id => old_delivery_detail_rec.inventory_item_id,
8994 p_organization_id => old_delivery_detail_rec.organization_id,
8995 p_input_quantity => p_req_quantity,
8996 p_uom_code => old_delivery_detail_rec.requested_quantity_UOM,
8997 x_output_quantity => l_output_quantity,
8998 x_return_status => l_qty_return_status);
8999
9000 IF (l_qty_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
9001 RAISE chk_decimal_qty_failed;
9002 END IF;
9003 IF (l_output_quantity IS not NULL) THEN
9004 p_req_quantity := l_output_quantity;
9005 END IF;
9006
9007 --
9008 IF l_debug_on THEN
9009 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT_BULK AND P_REQ_QUANTITY IS '||P_REQ_QUANTITY );
9010 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT_BULK AND P_QUANTITY_TO_SPLIT2 IS '||L_QTY2 );
9011 END IF;
9012 --
9013
9014
9015
9016 -- HW 2735317. Need to branch
9017 -- HW OPMCONV - Removed branching
9018
9019 -- Fix for Bug 2637876 begins here
9020 -- to split serial numbers while auto packing
9021
9022 -- Delete the PL SQL tables
9023 l_serial_tab.delete;
9024 l_dd_id_tab.delete;
9025 l_transaction_id_tab.delete;
9026 l_serial_number_tab.delete;
9027
9028 -- Only for cases where transaction temp id is not null
9029 IF old_delivery_detail_rec.transaction_temp_id IS NOT NULL THEN
9030
9031 l_serial_orig_rec := old_delivery_detail_rec; -- use old record
9032 l_original_shipped_qty := old_delivery_detail_rec.shipped_quantity;
9033 l_split_shipped_qty := p_req_quantity;
9034
9035 j := 0;
9036
9037 FOR i IN 1..p_num_of_split
9038 LOOP
9039 -- recalculate the shipped quantity
9040 l_original_shipped_qty := l_original_shipped_qty - l_split_shipped_qty;
9041 Split_Serial_Numbers_INT(x_old_detail_rec => l_serial_orig_rec,
9042 x_new_delivery_detail_rec => l_new_serial_rec,
9043 p_old_shipped_quantity=> l_original_shipped_qty,
9044 p_new_shipped_quantity=> l_split_shipped_qty,
9045 x_return_status => l_split_return_status);
9046
9047 j := j + 1;
9048
9049 l_transaction_id_tab(j) := l_new_serial_rec.transaction_temp_id;
9050 l_serial_number_tab(j) := l_new_serial_rec.serial_number;
9051
9052 l_serial_tab(j).transaction_temp_id := l_new_serial_rec.transaction_temp_id;
9053 l_serial_tab(j).serial_number := l_new_serial_rec.serial_number;
9054 l_serial_tab(j).to_serial_number := l_new_serial_rec.to_serial_number;
9055
9056 END LOOP;
9057
9058 old_delivery_detail_rec.serial_number := l_serial_orig_rec.serial_number;
9059 old_delivery_detail_rec.transaction_temp_id := l_serial_orig_rec.transaction_temp_id;
9060
9061 IF l_debug_on THEN
9062 WSH_DEBUG_SV.log(l_module_name,'Old DD id',old_delivery_detail_rec.delivery_detail_id);
9063 WSH_DEBUG_SV.log(l_module_name,'Old serial Number',old_delivery_detail_rec.serial_number);
9064 WSH_DEBUG_SV.log(l_module_name,'Old Temp id',old_delivery_detail_rec.transaction_temp_id);
9065 WSH_DEBUG_SV.log(l_module_name,'l_transaction_id_tab.COUNT',l_transaction_id_tab.count);
9066 WSH_DEBUG_SV.log(l_module_name,'l_serial_number_tab.COUNT',l_serial_number_tab.count);
9067 WSH_DEBUG_SV.log(l_module_name,'l_serial_tab.COUNT',l_serial_tab.count);
9068 END IF;
9069
9070 END IF;
9071
9072 -- HW OPMCONV. Removed parameter l_process_flag
9073 Split_Detail_INT_Bulk(
9074 p_old_delivery_detail_rec => old_delivery_detail_rec,
9075 p_quantity_to_split => p_req_quantity,
9076 p_quantity_to_split2 => l_qty2,
9077 p_unassign_flag => p_unassign_flag,
9078 p_converted_flag => p_converted_flag,
9079 p_manual_split => p_manual_split,
9080 p_num_of_split => p_num_of_split,
9081 x_split_detail_id => x_new_detail_id,
9082 x_return_status => x_return_status,
9083 x_dd_id_tab => l_dd_id_tab
9084 );
9085
9086 -- Message will be set in split_detail_int_bulk
9087 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
9088 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
9089 ) THEN
9090 return;
9091 END IF;
9092
9093 x_dd_id_tab := l_dd_id_tab;
9094
9095 -- HW 2735317. Need to branch
9096 -- HW OPMCONV - Removed branching
9097 IF (old_delivery_detail_rec.transaction_temp_id IS NOT NULL
9098 OR old_delivery_detail_rec.serial_number IS NOT NULL) THEN
9099
9100 -- Bug 4455732 : Combining transaction_temp_id and serial_number update into single cursor
9101 -- since single quantity detail can have transaction_temp_id also.
9102 FORALL i IN 1..l_dd_id_tab.count
9103 UPDATE wsh_delivery_details
9104 SET serial_number = decode(l_serial_number_tab(i),FND_API.G_MISS_CHAR,NULL,
9105 NULL,serial_number,l_serial_number_tab(i)) ,
9106 transaction_temp_id = decode(l_transaction_id_tab(i),FND_API.G_MISS_NUM,NULL,
9107 NULL,transaction_temp_id,l_transaction_id_tab(i))
9108 WHERE delivery_detail_id = l_dd_id_tab(i);
9109
9110 END IF; -- end of transaction temp id is not null
9111
9112
9113 /* H integration: Pricing integration csun
9114 mark repirce required flag when split delivery details
9115 */
9116 l_entity_ids(1) := old_delivery_detail_rec.delivery_detail_id;
9117 --
9118 IF l_debug_on THEN
9119 WSH_DEBUG_SV.log(l_module_name,'entity id 1-',l_entity_ids(1));
9120 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
9121 END IF;
9122 --
9123 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
9124 p_entity_type => 'DELIVERY_DETAIL',
9125 p_entity_ids => l_entity_ids,
9126 x_return_status => l_return_status);
9127 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
9128 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
9129 ) THEN
9130 raise reprice_required_err;
9131 END IF;
9132
9133 --
9134 IF l_debug_on THEN
9135 WSH_DEBUG_SV.pop(l_module_name);
9136 END IF;
9137 --
9138 EXCEPTION
9139 WHEN chk_decimal_qty_failed THEN
9140 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9141 fnd_message.set_name('WSH', 'WSH_DET_DECIMAL_QTY_NOT_VALID');
9142 wsh_util_core.add_message(x_return_status,l_module_name);
9143 --
9144 IF l_debug_on THEN
9145 WSH_DEBUG_SV.logmsg(l_module_name,'CHK_DECIMAL_QTY_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9146 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHK_DECIMAL_QTY_FAILED');
9147 END IF;
9148 --
9149 WHEN quantity_over THEN
9150 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9151 fnd_message.set_name('WSH', 'WSH_DET_SPLIT_EXCEED');
9152 wsh_util_core.add_message(x_return_status,l_module_name);
9153 --
9154 IF l_debug_on THEN
9155 WSH_DEBUG_SV.logmsg(l_module_name,'QUANTITY_OVER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9156 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:QUANTITY_OVER');
9157 END IF;
9158 --
9159 WHEN zero_qty THEN
9160 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9161 fnd_message.set_name('WSH', 'WSH_NO_ZERO_NUM');
9162 wsh_util_core.add_message(x_return_status,l_module_name);
9163 --
9164 IF l_debug_on THEN
9165 WSH_DEBUG_SV.logmsg(l_module_name,'ZERO_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9166 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ZERO_QTY');
9167 END IF;
9168 --
9169 WHEN negative_qty THEN
9170 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9171 fnd_message.set_name('WSH', 'WSH_NO_NEG_NUM');
9172 wsh_util_core.add_message(x_return_status,l_module_name);
9173 --
9174 IF l_debug_on THEN
9175 WSH_DEBUG_SV.logmsg(l_module_name,'NEGATIVE_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9176 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEGATIVE_QTY');
9177 END IF;
9178 --
9179 WHEN reprice_required_err THEN
9180 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9181 fnd_message.set_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
9182 wsh_util_core.add_message(x_return_status,l_module_name);
9183 --
9184 IF l_debug_on THEN
9185 WSH_DEBUG_SV.logmsg(l_module_name,'REPRICE_REQUIRED_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9186 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REPRICE_REQUIRED_ERR');
9187 END IF;
9188 --
9189 WHEN others THEN
9190 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9191 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS_BULK',l_module_name);
9192 --
9193 IF l_debug_on THEN
9194 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9195 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9196 END IF;
9197 --
9198 END SPLIT_DELIVERY_DETAILS_BULK;
9199
9200 /*****************************************************************
9201 Description :-
9202
9203 Currently being used values of p_manual_split are
9204
9205 NULL - default, normal mode of splitting backordered quantity
9206 then shipped quantity
9207 Y - split staged quantity
9208 C - split shipped quantity then backordered quantity (from packing code)
9209 B - called from update_inventory_info for OPM's use
9210 M - called from update_inventory_info for OPM's use
9211 S - called from update_inventory_info for OPM's use
9212 U - called from update_inventory_info for OPM's use
9213
9214 *******************************************************************/
9215
9216 -- This API is called from split_delivery_details_bulk with
9217 -- new parameters and functionality of Bulk creation of records
9218
9219 /*****************************************************
9220 ----- SPLIT_DETAIL_INT_BULK api
9221 *****************************************************/
9222 -- HW OPMCONV - Removed parameter p_process_flag
9223 PROCEDURE Split_Detail_INT_bulk(
9224 p_old_delivery_detail_rec IN SplitDetailRecType,
9225 p_new_source_line_id IN NUMBER,
9226 p_quantity_to_split IN NUMBER,
9227 p_quantity_to_split2 IN NUMBER ,
9228 p_unassign_flag IN VARCHAR2 ,
9229 p_converted_flag IN VARCHAR2 ,
9230 p_manual_split IN VARCHAR2 ,
9231 p_split_sn IN VARCHAR2 ,
9232 p_num_of_split IN NUMBER, -- for empty container cases
9233 x_split_detail_id OUT NOCOPY NUMBER,
9234 x_return_status OUT NOCOPY VARCHAR2,
9235 x_dd_id_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type
9236 ) IS
9237
9238 l_new_delivery_detail_id number;
9239
9240 --HW OPMCONV - Removed OPM variables
9241
9242 -- HW OPMCONV. Removed format of 19,9
9243 l_qty2 NUMBER;
9244 -- HW OPMCONV. Removed format of 19,9
9245 l_split_shipped_qty2 NUMBER := NULL;
9246 -- HW BUG#:1636578 variable to calculate new qty2
9247 l_new_req_qty2 NUMBER;
9248 -- HW OPMCONV. Removed format of 19,9
9249 l_original_shipped_qty2 NUMBER := NULL;
9250
9251 l_new_req_qty NUMBER;
9252 l_new_pick_qty NUMBER;
9253 -- HW OPMCONV. No need for this variable anymore
9254 --l_new_pick_qty2 NUMBER;
9255
9256 l_delivery_id number;
9257 l_parent_delivery_detail_id number;
9258 assignment number;
9259 l_delivery_assignment_id number;
9260 assignment_rowid VARCHAR2(30);
9261 total number;
9262 l_cr_dt_status varchar2(30);
9263 l_cr_assg_status varchar2(30);
9264 l_output_quantity number;
9265 l_qty_return_status varchar2(30);
9266 new_det_wt_vol_failed exception;
9267 old_det_wt_vol_failed exception;
9268 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
9269 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
9270 l_split_weight number;
9271 l_split_volume number;
9272 l_split_return_status varchar2(30);
9273 l_shipped_quantity NUMBER := NULL;
9274 l_old_stage_qty NUMBER := NULL;
9275 l_ser_qty NUMBER := NULL;
9276
9277 l_original_shipped_qty NUMBER := NULL;
9278 l_original_cc_qty NUMBER := NULL;
9279 l_split_shipped_qty NUMBER := NULL;
9280 l_split_cc_qty NUMBER := NULL;
9281 -- HW OPMCONV. Removed format of 19,9
9282 l_split_cc_qty2 NUMBER := NULL;
9283 -- HW OPMCONV. Removed format of 19,9
9284 l_original_cc_qty2 NUMBER := NULL;
9285 l_return_status VARCHAR2(30);
9286 -- HW OPMCONV - Removed OPM excpetion
9287
9288 -- J: W/V Changes
9289 l_total_gross_wt NUMBER;
9290 l_total_net_wt NUMBER;
9291 l_total_vol NUMBER;
9292 l_org_wv_qty NUMBER;
9293 l_new_wv_qty NUMBER;
9294 l_final_req_qty NUMBER; --bug# 6689448 (replenishment project)
9295
9296 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
9297
9298
9299 WSH_SN_SPLIT_ERR EXCEPTION;
9300 WSH_NO_DATA_FOUND EXCEPTION;
9301
9302 l_num_of_split NUMBER; -- added for BULK Auto packing
9303 l_dd_id_tab WSH_UTIL_CORE.id_tab_type;
9304 l_da_id_tab WSH_UTIL_CORE.id_tab_type;
9305
9306 l_updated_delivery_detail_rec SplitDetailRecType;
9307
9308 l_req_qty_update_index NUMBER;
9309 -- HW Added qty2
9310 l_req_qty2_update_index NUMBER;
9311
9312 CURSOR c_get_req_pick_qty(p_del_det IN NUMBER) IS
9313 SELECT requested_quantity, picked_quantity,requested_quantity2
9314 FROM wsh_delivery_details
9315 WHERE delivery_detail_id = p_del_det;
9316
9317
9318
9319 -- Bug 2734868
9320 l_requested_quantity WSH_DELIVERY_DETAILS.requested_quantity%TYPE;
9321 -- HW 12345 Added qty2
9322 l_requested_quantity2 WSH_DELIVERY_DETAILS.requested_quantity%TYPE;
9323 l_picked_quantity WSH_DELIVERY_DETAILS.picked_quantity%TYPE;
9324 wsh_split_error EXCEPTION;
9325
9326 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
9327 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
9328
9329 --
9330 l_action VARCHAR2(100) := 'SPLIT-LINE';
9331 --
9332 l_debug_on BOOLEAN;
9333 --
9334 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DETAIL_INT_BULK';
9335 --
9336 BEGIN
9337 --
9338 --
9339 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9340 --
9341 IF l_debug_on IS NULL
9342 THEN
9343 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9344 END IF;
9345 --
9346 IF l_debug_on THEN
9347 WSH_DEBUG_SV.push(l_module_name);
9348 --
9349 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SOURCE_LINE_ID',P_NEW_SOURCE_LINE_ID);
9350 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT',P_QUANTITY_TO_SPLIT);
9351 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT2',P_QUANTITY_TO_SPLIT2);
9352 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
9353 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
9354 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
9355 WSH_DEBUG_SV.log(l_module_name,'P_SPLIT_SN',P_SPLIT_SN);
9356 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity',
9357 p_old_delivery_detail_rec.shipped_quantity);
9358 WSH_DEBUG_SV.log(l_module_name,'old cycle_count_quantity',
9359 p_old_delivery_detail_rec.cycle_count_quantity);
9360 WSH_DEBUG_SV.log(l_module_name,'old cycle_count_quantity2',
9361 p_old_delivery_detail_rec.cycle_count_quantity2);
9362 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity2',
9363 p_old_delivery_detail_rec.shipped_quantity2);
9364 WSH_DEBUG_SV.log(l_module_name,'old picked_quantity',
9365 p_old_delivery_detail_rec.picked_quantity);
9366 WSH_DEBUG_SV.log(l_module_name,'old net_weight',
9367 p_old_delivery_detail_rec.net_weight);
9368 WSH_DEBUG_SV.log(l_module_name,'old requested_quantity',
9369 p_old_delivery_detail_rec.requested_quantity);
9370 WSH_DEBUG_SV.log(l_module_name,'old inventory_item_id',
9371 p_old_delivery_detail_rec.inventory_item_id);
9372 WSH_DEBUG_SV.log(l_module_name,'old volume',
9373 p_old_delivery_detail_rec.volume);
9374 WSH_DEBUG_SV.log(l_module_name,'old weight_uom_code',
9375 p_old_delivery_detail_rec.weight_uom_code);
9376 WSH_DEBUG_SV.log(l_module_name,'old volume_uom_code',
9377 p_old_delivery_detail_rec.volume_uom_code);
9378 WSH_DEBUG_SV.log(l_module_name,'old delivery_detail_id',
9379 p_old_delivery_detail_rec.delivery_detail_id);
9380 WSH_DEBUG_SV.log(l_module_name,'old container_flag',
9381 p_old_delivery_detail_rec.container_flag);
9382 END IF;
9383 --
9384 SAVEPOINT split_savepoint;
9385 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9386
9387 /* need to validate the quantity passed meets the decimal quantity
9388 standard */
9389
9390
9391 -- HW OPMCONV - Removed branching
9392
9393 l_qty2 := p_quantity_to_split2;
9394
9395 -- For bug 1307771. If shipped quantity is NULL. Then leave the new
9396 -- shipped quantity to be NULL
9397 IF (p_old_delivery_detail_rec.shipped_quantity IS NULL AND p_old_delivery_detail_rec.cycle_count_quantity IS NULL) THEN
9398 l_split_shipped_qty := NULL;
9399 l_split_cc_qty := NULL;
9400 l_split_shipped_qty2 :=NULL;
9401 l_split_cc_qty2 := NULL;
9402 IF l_debug_on THEN
9403 WSH_DEBUG_SV.log(l_module_name,' p_old_delivery_detail_rec.shipped_quantity ',p_old_delivery_detail_rec.shipped_quantity);
9404 WSH_DEBUG_SV.log(l_module_name,' p_old_delivery_detail_rec.cycle_count_quantity ',p_old_delivery_detail_rec.cycle_count_quantity );
9405 END IF;
9406
9407 ELSIF (p_manual_split = 'C') THEN
9408
9409 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity,
9410 p_quantity_to_split);
9411 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2,
9412 p_quantity_to_split2);
9413 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity,
9414 (p_quantity_to_split - nvl(l_split_shipped_qty,0)));
9415 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2,
9416 (p_quantity_to_split2 - NVL(l_split_shipped_qty2,0)));
9417
9418 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity -
9419 l_split_shipped_qty;
9420 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity -
9421 l_split_cc_qty;
9422 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 -
9423 l_split_shipped_qty2;
9424 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 -
9425 l_split_cc_qty2;
9426
9427 ELSIF (p_manual_split = 'Y') THEN
9428
9429 /* bug 1983460
9430 if the call is from ship confirm to split only the stage quantity
9431 the split delivery detail has null shipped and cc quantities.
9432 */
9433
9434 l_split_shipped_qty := NULL;
9435 l_split_cc_qty := NULL;
9436 l_split_shipped_qty2 :=NULL;
9437 l_split_cc_qty2 := NULL;
9438
9439 /* bug 1983460
9440 since the split shipped and split cc quantities are null, we should
9441 leave the original shipped and original cc quantities as they are.
9442 */
9443
9444 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity;
9445 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity;
9446 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2;
9447
9448 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2;
9449
9450
9451 ELSE
9452 -- use cc qty to split p_quantity_to_split before we use shipped qty to complete the quantity split
9453 -- (This takes care of splitting lines to backorder/cycle-count, for example.)
9454 -- assumption: the quantities' relationships are valid
9455
9456 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity, p_quantity_to_split);
9457 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2, p_quantity_to_split2);
9458
9459 -- fail-safe: NVL to ensure that shipped qtys can still be split even if cc qtys are NULL
9460 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity, (p_quantity_to_split - NVL(l_split_cc_qty,0)));
9461 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2, (p_quantity_to_split2 - NVL(l_split_cc_qty2,0)));
9462
9463 -- update original line's quantities accordingly
9464 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity - l_split_shipped_qty;
9465 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity - l_split_cc_qty;
9466
9467 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 - l_split_shipped_qty2;
9468 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 - l_split_cc_qty2;
9469 END IF;
9470 IF l_debug_on THEN
9471 WSH_DEBUG_SV.log(l_module_name,' l_split_cc_qty ',l_split_cc_qty);
9472 WSH_DEBUG_SV.log(l_module_name,' l_split_cc_qty2 ',l_split_cc_qty2 );
9473 END IF;
9474
9475 --
9476 /*
9477 IF l_debug_on THEN
9478 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.INITIALIZE_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
9479 END IF;
9480 --
9481 WSH_DELIVERY_DETAILS_PKG.initialize_detail(
9482 p_delivery_detail_rec => l_delivery_details_info);
9483 END IF;
9484 */
9485 IF p_old_delivery_detail_rec.picked_quantity IS NULL THEN
9486 l_delivery_details_info.requested_quantity := p_quantity_to_split;
9487 ELSE
9488 l_delivery_details_info.requested_quantity := LEAST(p_old_delivery_detail_rec.requested_quantity, p_quantity_to_split);
9489 l_delivery_details_info.picked_quantity := p_quantity_to_split;
9490 -- HW OPM for OM changes
9491 -- HW OPMCONV. No need to use l_new_pick_qty2
9492 --l_delivery_details_info.picked_quantity2 := nvl(nvl(l_qty2,l_new_pick_qty2),FND_API.G_MISS_NUM);
9493 l_delivery_details_info.picked_quantity2 := nvl(l_qty2,FND_API.G_MISS_NUM);
9494
9495 END IF;
9496
9497 IF l_debug_on THEN
9498 WSH_DEBUG_SV.log(l_module_name, ' l_delivery_details_info.requested_quantity2',l_delivery_details_info.requested_quantity2);
9499 END IF;
9500
9501 --Bug 7291415. 0 to be considered as valid value. Following IF condition modified.
9502 --IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
9503 IF ( NVL(l_qty2, -999) = -999 OR l_qty2 < 0 ) THEN
9504
9505 l_delivery_details_info.requested_quantity2 := FND_API.G_MISS_NUM;
9506 ELSE
9507 l_delivery_details_info.requested_quantity2 := l_qty2;
9508 END IF;
9509
9510 -- Bug 2181132 in Bulk API
9511 -- pass the value which is input
9512 l_delivery_details_info.source_line_set_id :=
9513 p_old_delivery_detail_rec.source_line_set_id;
9514
9515 IF p_new_source_line_id IS NOT NULL THEN
9516 l_delivery_details_info.source_line_id := p_new_source_line_id;
9517 END IF;
9518
9519
9520 -- J: W/V Changes
9521 IF p_old_delivery_detail_rec.wv_frozen_flag = 'Y' THEN
9522 l_org_wv_qty := NVL(NVL(p_old_delivery_detail_rec.shipped_quantity,p_old_delivery_detail_rec.picked_quantity), p_old_delivery_detail_rec.requested_quantity);
9523
9524 IF (p_manual_split = 'Y') THEN
9525 -- p_manual_split is 'Y' only when splitting for staged delivery details during ship confirm
9526 -- Staged delivery details W/V should always be reset back to original W/V
9527 l_new_wv_qty := 0;
9528 ELSE
9529 SELECT NVL(decode(l_split_shipped_qty,FND_API.G_MISS_NUM,null,l_split_shipped_qty),
9530 NVL(decode(l_delivery_details_info.picked_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.picked_quantity),
9531 decode(l_delivery_details_info.requested_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.requested_quantity)))
9532 INTO l_new_wv_qty
9533 FROM dual;
9534 END IF;
9535
9536 IF l_org_wv_qty <> 0 THEN
9537 l_delivery_details_info.gross_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.gross_weight ,5);
9538 l_delivery_details_info.net_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.net_weight ,5);
9539 l_delivery_details_info.volume := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.volume ,5);
9540 ELSE
9541 l_delivery_details_info.gross_weight := 0;
9542 l_delivery_details_info.net_weight := 0;
9543 l_delivery_details_info.volume := 0;
9544 END IF;
9545
9546 END IF;
9547
9548 IF (l_split_shipped_qty is not null and l_split_shipped_qty = 0) or (p_manual_split = 'Y') THEN
9549 l_delivery_details_info.wv_frozen_flag := 'N';
9550 ELSE
9551 l_delivery_details_info.wv_frozen_flag := p_old_delivery_detail_rec.wv_frozen_flag;
9552 END IF;
9553 l_delivery_details_info.weight_uom_code := p_old_delivery_detail_rec.weight_uom_code;
9554 l_delivery_details_info.volume_uom_code := p_old_delivery_detail_rec.volume_uom_code;
9555
9556 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty,FND_API.G_MISS_NUM);
9557 IF l_debug_on THEN
9558 WSH_DEBUG_SV.log(l_module_name,'l_split_shipped_qty2',l_split_shipped_qty2);
9559 END IF;
9560 IF ( NVL(l_split_shipped_qty2, 0) = 0 ) THEN
9561 l_delivery_details_info.shipped_quantity2 := FND_API.G_MISS_NUM;
9562 ELSE
9563 l_delivery_details_info.shipped_quantity2 := l_split_shipped_qty2;
9564 END IF;
9565 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
9566 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
9567 ELSE
9568 -- Bug 2116595
9569 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
9570 END IF;
9571
9572 l_delivery_details_info.cycle_count_quantity := nvl(l_split_cc_qty,FND_API.G_MISS_NUM);
9573 -- HW OPMCONV - No need to branch
9574 -- IF ( p_process_flag = FND_API.G_TRUE ) THEN
9575 l_delivery_details_info.cycle_count_quantity2 := nvl(l_split_cc_qty2,FND_API.G_MISS_NUM);
9576 -- END IF;
9577
9578 -- Bug 2116595
9579 l_delivery_details_info.cancelled_quantity := FND_API.G_MISS_NUM;
9580 l_delivery_details_info.split_from_detail_id := p_old_delivery_detail_rec.delivery_detail_id;
9581
9582 l_delivery_details_info.container_flag := p_old_delivery_detail_rec.container_flag;
9583 l_delivery_details_info.master_serial_number := FND_API.G_MISS_CHAR;
9584 l_delivery_details_info.serial_number := FND_API.G_MISS_CHAR;
9585 l_delivery_details_info.to_serial_number := FND_API.G_MISS_CHAR;
9586 l_delivery_details_info.transaction_temp_id := FND_API.G_MISS_NUM;
9587 l_delivery_details_info.last_update_date := SYSDATE;
9588 l_delivery_details_info.last_updated_by := FND_GLOBAL.USER_ID;
9589 l_delivery_details_info.last_update_login := FND_GLOBAL.LOGIN_ID;
9590 -- Bug 2419301
9591 l_delivery_details_info.oe_interfaced_flag := p_old_delivery_detail_rec.oe_interfaced_flag;
9592 --
9593 IF l_debug_on THEN
9594 WSH_DEBUG_SV.logmsg(l_module_name, 'SPLIT_DETAIL_INT_BULK: OE_INTERFACED_FLAG '||L_DELIVERY_DETAILS_INFO.OE_INTERFACED_FLAG );
9595 END IF;
9596 --
9597 l_delivery_details_info.consignee_flag := p_old_delivery_detail_rec.consignee_flag; --RTV changes
9598
9599 l_new_delivery_detail_id := NULL;
9600
9601
9602 l_updated_delivery_detail_rec := p_old_delivery_detail_rec;
9603
9604 -- The Split Serial Number has not been tested
9605 -- this needs to be modified for Bulk split
9606
9607 -- HW OPMCONV - Remove the whole branch since the code was commented
9608
9609 l_num_of_split := p_num_of_split;
9610
9611 --
9612 IF l_debug_on THEN
9613 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_DD_FROM_OLD_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
9614 END IF;
9615 --
9616 -- call to new API
9617 -- with a value for p_num_of_rec
9618 WSH_DELIVERY_DETAILS_PKG.create_dd_from_old_bulk(
9619 p_delivery_detail_rec => l_delivery_details_info,
9620 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9621 p_num_of_rec => l_num_of_split,
9622 x_dd_id_tab => l_dd_id_tab,
9623 x_return_status => l_cr_dt_status);
9624
9625 -- Bug 2870267
9626 -- The bulk API above creates delivery details with a requested qty
9627 -- of l_delivery_details_info.requested_quantity for each of the new details created.
9628 -- However if we overpick, the sum of these requested qtys would add up to
9629 -- the picked qty and not the requested qty of the original line.
9630 -- We need to make sure that the sum of the requested quantities add up to the requested quantity
9631 -- of the original line, and that the extra requested quantities that add up to the
9632 -- original picked quantity are zeroed out.
9633
9634 OPEN c_get_req_pick_qty (p_old_delivery_detail_rec.delivery_detail_id);
9635
9636 FETCH c_get_req_pick_qty INTO l_requested_quantity, l_picked_quantity,
9637 l_requested_quantity2;
9638
9639 IF c_get_req_pick_qty%NOTFOUND THEN
9640
9641 RAISE WSH_NO_DATA_FOUND;
9642
9643 END IF;
9644
9645 CLOSE c_get_req_pick_qty;
9646
9647 --bug# 6689448 (replenishment project) (begin) : call WMS for whenever there is split on replenishment requested
9648 -- delivery detail lines with the new quantity for the old delivery detail line on p_primary_quantity parameter.
9649 -- Inturn WMS creates a new replenishment record for p_split_delivery_detail_id with old delivery detail line old qty - old delivery detail line
9650 -- new quantity (p_primary_quantity).
9651 IF ( p_old_delivery_detail_rec.replenishment_status = 'R' and p_old_delivery_detail_rec.released_status in ('R','B')) THEN
9652 --{
9653 l_final_req_qty := l_requested_quantity;
9654 FOR i IN 1..l_dd_id_tab.count LOOP
9655 --{
9656 l_final_req_qty := l_final_req_qty - l_delivery_details_info.requested_quantity;
9657 IF ((l_final_req_qty = l_requested_quantity) OR (l_final_req_qty < 0)) THEN
9658 EXIT;
9659 END IF;
9660 IF l_debug_on THEN
9661 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL' ,WSH_DEBUG_SV.C_PROC_LEVEL);
9662 END IF;
9663 WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL(
9664 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9665 p_primary_quantity => l_final_req_qty,
9666 p_split_delivery_detail_id => l_dd_id_tab(i),
9667 x_return_status => x_return_status );
9668 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9669 --{
9670 rollback to split_savepoint;
9671 IF l_debug_on THEN
9672 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR FROM WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL');
9673 WSH_DEBUG_SV.pop(l_module_name);
9674 END IF;
9675 RETURN;
9676 --}
9677 END IF;
9678 --}
9679 END LOOP;
9680 --}
9681 END IF;
9682 --bug# 6689448 (replenishment project):end
9683
9684 IF (l_picked_quantity > l_requested_quantity) AND (l_delivery_details_info.requested_quantity <> 0) THEN --{
9685
9686
9687 -- Calculate the index of the delivery detail from the created table at which the sum of the new
9688 -- requested quantities would equal (or exceed) the requested quantity of the original line.
9689
9690 l_req_qty_update_index := CEIL(l_requested_quantity/l_delivery_details_info.requested_quantity);
9691 -- HW 12345 Added qty2
9692 IF ( l_delivery_details_info.requested_quantity2 <> 0 ) THEN
9693 l_req_qty2_update_index := CEIL(l_requested_quantity2/l_delivery_details_info.requested_quantity2);
9694 ELSE
9695 l_req_qty2_update_index := NULL;
9696 END IF;
9697
9698 -- If not a clean split, we need to update the requested quantity of the delivery detail at this
9699 -- index such that the sum of the requested quantities of all the new delivery details before this index
9700 -- plus the requested qty at this index add up to the original requested quantity.
9701
9702 IF l_req_qty_update_index > (l_requested_quantity/l_delivery_details_info.requested_quantity) THEN
9703
9704 -- Bug 3178233 - Need to add the IF condition because the update will fail in the following example:
9705 -- requested_quantity = 3, picked_quantity = 4, and split quantity is 2
9706 -- l_req_qty_update_index = CEIL(3/2) = 2
9707 -- Update at l_dd_id_tab(l_req_qty_update_index) = l_dd_id_tab(2) is a non-exist value which will fail.
9708 IF l_req_qty_update_index <= l_dd_id_tab.count THEN
9709 -- 12345 HW added qty2
9710 update wsh_delivery_details
9711 set requested_quantity = l_requested_quantity - ((l_req_qty_update_index - 1) * l_delivery_details_info.requested_quantity),
9712 requested_quantity2 = decode(l_delivery_details_info.requested_quantity2, fnd_api.g_miss_num, NULL, l_requested_quantity2 - ((l_req_qty2_update_index - 1) * l_delivery_details_info.requested_quantity2))
9713 where delivery_detail_id = l_dd_id_tab(l_req_qty_update_index);
9714 END IF;
9715 END IF;
9716
9717 -- Set the requested quantity to zero in all the newly created lines after the above index.
9718
9719 FORALL i in (l_req_qty_update_index + 1) .. l_dd_id_tab.count
9720 -- HW added qty2
9721 update wsh_delivery_details
9722 set requested_quantity = 0,
9723 requested_quantity2 = 0
9724 where delivery_detail_id = l_dd_id_tab(i);
9725
9726 --
9727 -- DBI Project,Above 2 updates for requested quantity need to be tracked for DBI Call
9728 -- These can be combined since both use l_dd_id_tab
9729 -- DBI Project
9730 -- Update of wsh_delivery_details where requested_quantity/released_status
9731 -- are changed, call DBI API after the update.
9732 -- DBI API will check if DBI is installed
9733 IF l_debug_on THEN
9734 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_dd_id_tab.count);
9735 END IF;
9736 WSH_INTEGRATION.DBI_Update_Detail_Log
9737 (p_delivery_detail_id_tab => l_dd_id_tab,
9738 p_dml_type => 'UPDATE',
9739 x_return_status => l_dbi_rs);
9740
9741 IF l_debug_on THEN
9742 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
9743 END IF;
9744 -- Only Handle Unexpected error
9745 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
9746 x_return_status := l_dbi_rs;
9747 rollback to split_savepoint;
9748 --
9749 IF l_debug_on THEN
9750 WSH_DEBUG_SV.pop(l_module_name);
9751 END IF;
9752 --
9753 RETURN;
9754 END IF;
9755 -- End of Code for DBI Project
9756 --
9757
9758 END IF; --}
9759
9760 -- END Bug 2870267
9761
9762 -- J: W/V Changes
9763 IF p_old_delivery_detail_rec.wv_frozen_flag = 'N' THEN
9764 -- Bug 4416863
9765 -- During Partial Shipping with the remain qty as staged, w/v value should not be
9766 -- deducted again from the original line since during entering shipped_quantity
9767 -- w/v has been calculated for the original line.
9768 IF (p_manual_split = 'Y') THEN
9769 l_total_net_wt := 0;
9770 l_total_gross_wt := 0;
9771 l_total_vol := 0;
9772 ELSE
9773 -- end bug 4416863
9774 IF l_debug_on THEN
9775 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
9776 END IF;
9777
9778 l_total_net_wt := 0;
9779 l_total_gross_wt := 0;
9780 l_total_vol := 0;
9781 FOR i in 1..l_dd_id_tab.count LOOP
9782
9783 WSH_WV_UTILS.Detail_Weight_Volume(
9784 p_delivery_detail_id => l_dd_id_tab(i),
9785 p_update_flag => 'Y',
9786 x_net_weight => l_split_weight,
9787 x_volume => l_split_volume,
9788 x_return_status => l_split_return_status);
9789 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9790 RAISE new_det_wt_vol_failed;
9791 END IF;
9792
9793 l_total_net_wt := l_total_net_wt + l_split_weight;
9794 l_total_vol := l_total_vol + l_split_volume;
9795
9796 END LOOP;
9797 l_total_gross_wt := l_total_net_wt;
9798 END IF;
9799 ELSE
9800 l_total_net_wt := p_num_of_split * l_delivery_details_info.net_weight;
9801 l_total_gross_wt := p_num_of_split * l_delivery_details_info.gross_weight;
9802 l_total_vol := p_num_of_split * l_delivery_details_info.volume;
9803 END IF;
9804
9805 l_delivery_assignments_info.type := 'S';
9806
9807 IF (p_unassign_flag = 'N') THEN
9808 l_delivery_assignments_info.delivery_id := p_old_delivery_detail_rec.delivery_id;
9809 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
9810 IF p_old_delivery_detail_rec.wda_type = 'C' THEN
9811 l_delivery_assignments_info.type := 'O';
9812 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
9813 END IF;
9814 ELSE
9815 l_delivery_assignments_info.delivery_id := NULL;
9816 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
9817 END IF;
9818
9819 l_delivery_assignments_info.delivery_detail_id := l_new_delivery_detail_id;
9820 --
9821 IF l_debug_on THEN
9822 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_DELIV_ASSIGNMENT_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
9823 END IF;
9824 --
9825
9826 -- this is a bulk call
9827 -- with new parameter of p_num_of_rec
9828 -- and pass l_dd_id_tab which will pass the delivery detail id
9829 wsh_delivery_details_pkg.create_deliv_assignment_bulk(
9830 p_delivery_assignments_info => l_delivery_assignments_info,
9831 p_num_of_rec => l_num_of_split,
9832 p_dd_id_tab => l_dd_id_tab,
9833 x_da_id_tab => l_da_id_tab,
9834 x_return_status => l_cr_assg_status
9835 );
9836
9837 -- K: MDC: We need to create the consolidation records as well
9838 -- If necessary.
9839 IF (p_unassign_flag = 'N') AND (p_old_delivery_detail_rec.wda_type = 'C') THEN
9840
9841 l_delivery_assignments_info.type := 'C';
9842 l_delivery_assignments_info.parent_delivery_id := p_old_delivery_detail_rec.parent_delivery_id;
9843 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
9844
9845 wsh_delivery_details_pkg.create_deliv_assignment_bulk(
9846 p_delivery_assignments_info => l_delivery_assignments_info,
9847 p_num_of_rec => l_num_of_split,
9848 p_dd_id_tab => l_dd_id_tab,
9849 x_da_id_tab => l_da_id_tab,
9850 x_return_status => l_cr_assg_status
9851 );
9852 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
9853 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
9854 ) THEN
9855 x_return_status := l_cr_assg_status;
9856 return;
9857 END IF;
9858
9859
9860 END IF;
9861
9862 /*2442099*/
9863 FOR i in 1..l_dd_id_tab.count
9864 LOOP
9865 Log_Exceptions(p_old_delivery_detail_rec.delivery_detail_id,l_dd_id_tab(i),l_delivery_assignments_info.delivery_id,l_action);
9866 END LOOP;
9867
9868 -- this is FOR RETURN variable
9869 x_dd_id_tab := l_dd_id_tab;
9870
9871 /* NC - Added the following for OPM BUG#1675561 */
9872 /* LG BUG#:2005977 */
9873 /* LG new */
9874
9875 --
9876 -- HW OPMCONV - Removed branching
9877
9878 /* Bug 2177410, also update net_weight and volume of original delivery detail
9879 because non item does not use WSH_WV_UTILS.Detail_Weight_Volume to
9880 adjust the net_weight and volume */
9881
9882 x_split_detail_id := l_new_delivery_detail_id;
9883
9884 -- update original shipped qty since this was not decremented correctly before.
9885 -- now decrement it with proper split number
9886
9887 -- Bug 2734868
9888 -- If nvl(picked,requested) quantity is set to zero, error
9889 -- should not be allowed
9890 -- example in case of 12(req) - 12(pic) - 15(ship) when l_num_of_split = 7
9891
9892 IF (nvl(GREATEST(l_picked_quantity - (l_num_of_split*p_quantity_to_split),0
9893 ),
9894 GREATEST(l_requested_quantity - (l_num_of_split*l_delivery_details_info.requested_quantity),0
9895 )
9896 ) <= 0
9897 )THEN
9898 IF l_debug_on THEN
9899 WSH_DEBUG_SV.log(l_module_name, 'CANNOT SPLIT, NEED TO REVISIT THE QUANTITIES');
9900 END IF;
9901
9902 RAISE wsh_split_error;
9903
9904 END IF;
9905
9906 -- End of Bug 2734868
9907
9908 -- OPM HW Included this fix in 3011758
9909 -- Modified requested_quantity2,picked_quantity2 and shipped_quantity2
9910 -- to be the same as quantity1s
9911
9912 UPDATE wsh_delivery_details
9913 SET requested_quantity = GREATEST(requested_quantity - (l_num_of_split*l_delivery_details_info.requested_quantity), 0),
9914 requested_quantity2 = GREATEST(requested_quantity2 -(l_num_of_split*l_qty2), 0),
9915 picked_quantity = GREATEST(picked_quantity - (l_num_of_split*p_quantity_to_split),0),
9916 -- HW OPMCONV. No need to use l_new_pick_qty2
9917 -- picked_quantity2 = GREATEST(picked_quantity2 - (l_num_of_split* nvl(l_qty2,l_new_pick_qty2)),0),
9918 picked_quantity2 = GREATEST(picked_quantity2 - (l_num_of_split* l_qty2) ,0),
9919 --shipped_quantity = l_original_shipped_qty - p_quantity_to_split,
9920 shipped_quantity = l_original_shipped_qty - GREATEST((l_num_of_split -1) * p_quantity_to_split,0),
9921 shipped_quantity2 = l_original_shipped_qty2 - GREATEST((l_num_of_split -1) * nvl(l_qty2,0),0),
9922 --shipped_quantity2 = l_original_shipped_qty2 - ((greatest(l_num_of_split -1),0) * p_quantity_to_split),
9923 cycle_count_quantity = l_original_cc_qty,
9924 cycle_count_quantity2 = l_original_cc_qty2,
9925 serial_number = decode(l_updated_delivery_detail_rec.serial_number,FND_API.G_MISS_CHAR,NULL,
9926 NULL,serial_number,l_updated_delivery_detail_rec.serial_number),
9927 to_serial_number = decode(l_updated_delivery_detail_rec.to_serial_number,FND_API.G_MISS_CHAR,NULL,
9928 NULL,to_serial_number,l_updated_delivery_detail_rec.to_serial_number),
9929 transaction_temp_id = decode(l_updated_delivery_detail_rec.transaction_temp_id,FND_API.G_MISS_NUM,NULL,
9930 NULL,transaction_temp_id,l_updated_delivery_detail_rec.transaction_temp_id),
9931 -- J: W/V Changes
9932 gross_weight = gross_weight - l_total_gross_wt,
9933 net_weight = net_weight - l_total_net_wt,
9934 volume = volume - l_total_vol,
9935 -- End J: W/V Changes
9936 last_update_date = SYSDATE,
9937 last_updated_by = FND_GLOBAL.USER_ID,
9938 last_update_login = FND_GLOBAL.LOGIN_ID
9939 WHERE delivery_detail_id = p_old_delivery_detail_rec.delivery_detail_id;
9940
9941 /* call the wv util to calculate the wv for the original detail too */
9942 --
9943 IF l_debug_on THEN
9944 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.requested_quantity'
9945 ,l_delivery_details_info.requested_quantity);
9946 WSH_DEBUG_SV.log(l_module_name,'l_qty2',l_qty2);
9947 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty',
9948 l_original_shipped_qty);
9949 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty2',l_original_cc_qty2);
9950 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty',l_original_cc_qty);
9951 END IF;
9952 --
9953
9954 --
9955 -- DBI Project
9956 -- Update of wsh_delivery_details where requested_quantity/released_status
9957 -- are changed, call DBI API after the update.
9958 -- This API will also check for DBI Installed or not
9959 IF l_debug_on THEN
9960 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail id-',p_old_delivery_detail_rec.delivery_detail_id);
9961 END IF;
9962 l_detail_tab(1) := p_old_delivery_detail_rec.delivery_detail_id;
9963 WSH_INTEGRATION.DBI_Update_Detail_Log
9964 (p_delivery_detail_id_tab => l_detail_tab,
9965 p_dml_type => 'UPDATE',
9966 x_return_status => l_dbi_rs);
9967
9968 IF l_debug_on THEN
9969 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
9970 END IF;
9971 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
9972 x_return_status := l_dbi_rs;
9973 -- just pass this return status to caller API
9974 rollback to split_savepoint;
9975 --
9976 IF l_debug_on THEN
9977 WSH_DEBUG_SV.pop(l_module_name);
9978 END IF;
9979 --
9980 RETURN;
9981 END IF;
9982 -- End of Code for DBI Project
9983 --
9984
9985
9986 -- J: W/V Changes
9987 -- Decrement the DD W/V from parent if p_unassign_flag is 'Y'
9988 IF (p_unassign_flag = 'Y') THEN
9989 IF l_debug_on THEN
9990 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
9991 END IF;
9992 --
9993 WSH_WV_UTILS.DD_WV_Post_Process(
9994 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9995 p_diff_gross_wt => -1 * l_total_gross_wt,
9996 p_diff_net_wt => -1 * l_total_net_wt,
9997 p_diff_fill_volume => -1 * l_total_vol,
9998 x_return_status => l_return_status);
9999
10000 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
10001 --
10002 rollback to split_savepoint;
10003 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10004 WSH_UTIL_CORE.Add_Message(x_return_status);
10005 IF l_debug_on THEN
10006 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
10007 WSH_DEBUG_SV.pop(l_module_name);
10008 END IF;
10009 return;
10010 END IF;
10011 END IF;
10012
10013 --
10014 IF l_debug_on THEN
10015 WSH_DEBUG_SV.pop(l_module_name);
10016
10017 END IF;
10018 --
10019
10020 EXCEPTION
10021 -- HW OPMCONV. Removed OPM excpetion
10022
10023 WHEN old_det_wt_vol_failed THEN
10024 rollback to split_savepoint;
10025 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10026 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
10027 FND_MESSAGE.SET_TOKEN('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
10028 wsh_util_core.add_message(x_return_status,l_module_name);
10029 --
10030 IF l_debug_on THEN
10031 WSH_DEBUG_SV.logmsg(l_module_name,'OLD_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10032 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OLD_DET_WT_VOL_FAILED');
10033 END IF;
10034 --
10035 WHEN new_det_wt_vol_failed THEN
10036 rollback to split_savepoint;
10037 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10038 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
10039 FND_MESSAGE.SET_TOKEN('DETAIL_ID', l_new_DELIVERY_DETAIL_ID);
10040 wsh_util_core.add_message(x_return_status,l_module_name);
10041 --
10042 IF l_debug_on THEN
10043 WSH_DEBUG_SV.logmsg(l_module_name,'NEW_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10044 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEW_DET_WT_VOL_FAILED');
10045 END IF;
10046 --
10047 WHEN WSH_SPLIT_ERROR THEN
10048 rollback to split_savepoint;
10049 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10050 fnd_message.set_name('WSH', 'WSH_SPLIT_ERROR');
10051 fnd_message.set_token('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
10052 wsh_util_core.add_message(x_return_status,l_module_name);
10053 --
10054 IF l_debug_on THEN
10055 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SPLIT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10056 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SPLIT_ERROR');
10057 END IF;
10058 WHEN WSH_SN_SPLIT_ERR THEN
10059 rollback to split_savepoint;
10060 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10061 fnd_message.set_name('WSH', 'WSH_SN_SPLIT_ERR');
10062 wsh_util_core.add_message(x_return_status,l_module_name);
10063 --
10064 IF l_debug_on THEN
10065 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10066 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SN_SPLIT_ERR');
10067 END IF;
10068
10069 WHEN WSH_NO_DATA_FOUND THEN
10070 IF c_get_req_pick_qty%ISOPEN THEN
10071 CLOSE c_get_req_pick_qty;
10072 END IF;
10073 rollback to split_savepoint;
10074 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10075 fnd_message.set_name('WSH', 'WSH_NO_DATA_FOUND');
10076 IF l_debug_on THEN
10077 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_DATA_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10078 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_DATA_FOUND');
10079 END IF;
10080 --
10081 WHEN others THEN
10082 IF c_get_req_pick_qty%ISOPEN THEN
10083 CLOSE c_get_req_pick_qty;
10084 END IF;
10085 rollback to split_savepoint;
10086 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10087 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DETAIL_INT_BULK',l_module_name);
10088 --
10089 IF l_debug_on THEN
10090 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10091 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10092 END IF;
10093 --
10094 END SPLIT_DETAIL_INT_BULK;
10095
10096 /*************************/
10097 --
10098 --Procedure:
10099 --Parameters: p_from_detail_id
10100 -- p_req_quantity
10101 -- p_new_detail_id
10102 -- x_return_status
10103 --Desription:
10104 -- Splits a delivery detail according the new requested
10105 -- quantity. The newly created the detail has the requested
10106 -- quantity as p_req_quantity and the old detail has the
10107 --
10108 -- fabdi start : PICK CONFIRM
10109 --added a new parameter called p_req_quantity2 requested quantity as requested_quantity - p_requested_quantity
10110 -- fabdi end : PICK CONFIRM
10111 -- HW BUG#:1636578 added a new parameter p_converted_flag
10112
10113 /*****************************************************
10114 ----- SPLIT_DELIVERY_DETAILS api
10115 *****************************************************/
10116 PROCEDURE Split_Delivery_Details (
10117 p_from_detail_id IN NUMBER,
10118 p_req_quantity IN OUT NOCOPY NUMBER,
10119 x_new_detail_id OUT NOCOPY NUMBER,
10120 x_return_status OUT NOCOPY VARCHAR2,
10121 p_unassign_flag IN VARCHAR2 ,
10122 p_req_quantity2 IN NUMBER ,
10123 p_converted_flag IN VARCHAR2,
10124 p_manual_split IN VARCHAR2 )
10125 IS
10126
10127 l_new_delivery_detail_id number;
10128
10129 -- HW OPMCONV - Removed OPM variables
10130
10131 -- HW OPMCONV. Remove format 19,9
10132 -- muom
10133 l_qty NUMBER;
10134 l_qty2 NUMBER;
10135 l_split_shipped_qty2 NUMBER(19,9):= NULL;
10136 -- HW BUG#:1636578 variable to calculate new qty2
10137 l_new_req_qty2 NUMBER;
10138 l_original_shipped_qty2 NUMBER(19,9):= NULL;
10139
10140 l_new_req_qty NUMBER;
10141 l_new_pick_qty NUMBER;
10142 -- HW OPMCONV. No need to use l_new_pick_qty2
10143 --l_new_pick_qty2 NUMBER;
10144
10145 -- STOPPED HERE --
10146
10147 l_delivery_id number;
10148 l_parent_delivery_detail_id number;
10149 assignment number;
10150 l_delivery_assignment_id number;
10151 detail_rowid VARCHAR2(30);
10152 assignment_rowid VARCHAR2(30);
10153 total number;
10154 l_cr_dt_status varchar2(30);
10155 l_cr_assg_status varchar2(30);
10156 l_output_quantity number;
10157 l_return_status varchar2(1);
10158 l_qty_return_status varchar2(30);
10159
10160 chk_decimal_qty_failed exception;
10161 quantity_over EXCEPTION;
10162 negative_qty EXCEPTION;
10163 zero_qty EXCEPTION;
10164 fail_create_detail EXCEPTION;
10165 /* H integration: Pricing integration csun
10166 mark reprice required flag when split_delivery_details
10167 */
10168 l_entity_ids WSH_UTIL_CORE.id_tab_type;
10169 reprice_required_err EXCEPTION;
10170 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
10171 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
10172 l_split_weight number;
10173 l_split_volume number;
10174 l_split_return_status varchar2(30);
10175 l_shipped_quantity NUMBER := NULL;
10176 l_old_stage_qty NUMBER := NULL;
10177 l_ser_qty NUMBER := NULL;
10178
10179
10180 old_delivery_detail_rec SplitDetailRecType;
10181
10182 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
10183 -- muom
10184 l_fulfillment_base VARCHAR2(1);
10185 l_dummy NUMBER;
10186
10187
10188 --
10189 l_debug_on BOOLEAN;
10190 --
10191 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DELIVERY_DETAILS';
10192 --
10193 BEGIN
10194 --
10195 --
10196 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10197 --
10198 IF l_debug_on IS NULL
10199 THEN
10200 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10201 END IF;
10202 --
10203 IF l_debug_on THEN
10204 WSH_DEBUG_SV.push(l_module_name);
10205 --
10206 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DETAIL_ID',P_FROM_DETAIL_ID);
10207 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY',P_REQ_QUANTITY);
10208 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
10209 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY2',P_REQ_QUANTITY2);
10210 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
10211 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
10212 END IF;
10213 --
10214 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10215
10216 OPEN c_split_detail_info(p_from_detail_id);
10217 FETCH c_split_detail_info into old_delivery_detail_rec;
10218 CLOSE c_split_detail_info;
10219
10220 -- Bug 2419301 : Set oe_interfaced_flag to MISS CHAR so that create_new_detail_from_old API
10221 -- determines the value of oe_interfaced_flag for newly created dd
10222 old_delivery_detail_rec.oe_interfaced_flag:= NULL;
10223
10224 -- muom
10225 l_fulfillment_base := WSH_UTIL_CORE.Get_Line_Fulfillment_Base(old_delivery_detail_rec.source_code, old_delivery_detail_rec.source_line_id);
10226
10227 -- muom
10228 IF l_fulfillment_base = 'P' THEN
10229 -- Bug 1289812
10230 -- check if this split is valid operation
10231 IF (
10232 p_req_quantity >= NVL(old_delivery_detail_rec.picked_quantity,old_delivery_detail_rec.requested_quantity)
10233 AND NVL(old_delivery_detail_rec.line_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
10234 )
10235 OR
10236 (
10237 p_req_quantity >= NVL(
10238 old_delivery_detail_rec.received_quantity,
10239 NVL(old_delivery_detail_rec.shipped_quantity,
10240 NVL(old_delivery_detail_rec.picked_quantity,
10241 old_delivery_detail_rec.requested_quantity))
10242 ) -- J-IB-NPARIKH
10243 AND NVL(old_delivery_detail_rec.line_direction,'O') NOT IN ('O','IO') -- J-IB-NPARIKH
10244 )
10245 THEN
10246 RAISE quantity_over;
10247 END IF;
10248 -- Bug 1299636
10249 -- check if this quantity to split is positive
10250 IF (p_req_quantity = 0) THEN
10251 RAISE zero_qty;
10252 ELSIF (p_req_quantity < 0) THEN
10253 RAISE negative_qty;
10254 END IF;
10255 ELSE
10256 IF (
10257 p_req_quantity2 >= NVL(old_delivery_detail_rec.picked_quantity2,old_delivery_detail_rec.requested_quantity2)
10258 AND NVL(old_delivery_detail_rec.line_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
10259 )
10260 OR
10261 (
10262 p_req_quantity2 >= NVL(
10263 old_delivery_detail_rec.received_quantity2,
10264 NVL(old_delivery_detail_rec.shipped_quantity2,
10265 NVL(old_delivery_detail_rec.picked_quantity2,
10266 old_delivery_detail_rec.requested_quantity2))
10267 ) -- J-IB-NPARIKH
10268 AND NVL(old_delivery_detail_rec.line_direction,'O') NOT IN ('O','IO') -- J-IB-NPARIKH
10269 )
10270 THEN
10271 RAISE quantity_over;
10272 END IF;
10273 IF (p_req_quantity2 = 0) THEN
10274 RAISE zero_qty;
10275 ELSIF (p_req_quantity2 < 0) THEN
10276 RAISE negative_qty;
10277 END IF;
10278 END IF;
10279
10280 -- muom
10281 l_qty := p_req_quantity ;
10282 l_qty2 := p_req_quantity2 ;
10283
10284 -- muom: IN Prior Reservations Case, if the Primary and Secondary are not in standard conversion and if the
10285 -- primary reservation is more the primary requested and secondary reservation is less than the secondary requested
10286 -- then you will get a call to this api when -ve p_req_quantity
10287 IF l_fulfillment_base = 'S' and l_qty <= 0 THEN
10288 l_qty :=
10289 wsh_wv_utils.convert_uom(
10290 from_uom => old_delivery_detail_rec.requested_quantity_uom2,
10291 to_uom => old_delivery_detail_rec.requested_quantity_uom,
10292 quantity => l_qty2,
10293 item_id => old_delivery_detail_rec.inventory_item_id,
10294 org_id => old_delivery_detail_rec.organization_id);
10295 IF l_debug_on THEN
10296 WSH_DEBUG_SV.logmsg(l_module_name,'new l_qty '||l_qty);
10297 END IF;
10298 END IF;
10299
10300 /* need to validate the quantity passed meets the decimal quantity
10301 standard */
10302
10303 -- Patch J: Catch Weights
10304 -- Need to split the secondary quantity in proportion to the primary quantity.
10305 -- Catch weight support currently only for non-opm lines.
10306 -- muom
10307 IF l_fulfillment_base = 'P' THEN
10308
10309 IF old_delivery_detail_rec.picked_quantity2 IS NOT NULL and p_req_quantity2 IS NULL
10310 and (NVL(old_delivery_detail_rec.picked_quantity,0) <> 0)
10311 AND NVL(old_delivery_detail_rec.line_direction,'O') in ('O','IO') -- J-IB-NPARIKH
10312 THEN
10313
10314 l_qty2 := old_delivery_detail_rec.picked_quantity2 * (p_req_quantity/old_delivery_detail_rec.picked_quantity);
10315 l_qty2 := round(l_qty2,5);
10316 IF l_debug_on THEN
10317 wsh_debug_sv.log(l_module_name,' l_qty2 ',l_qty2);
10318 END IF;
10319 ELSE
10320
10321 l_qty2 := p_req_quantity2 ;
10322
10323 END IF;
10324 END IF;
10325
10326 --
10327 IF l_debug_on THEN
10328 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_DECIMAL_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
10329 END IF;
10330 --
10331 WSH_DETAILS_VALIDATIONS.check_decimal_quantity(
10332 p_item_id => old_delivery_detail_rec.inventory_item_id,
10333 p_organization_id => old_delivery_detail_rec.organization_id,
10334 p_input_quantity => l_qty,
10335 p_uom_code => old_delivery_detail_rec.requested_quantity_UOM,
10336 x_output_quantity => l_output_quantity,
10337 x_return_status => l_qty_return_status);
10338
10339 IF (l_qty_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
10340 RAISE chk_decimal_qty_failed;
10341 END IF;
10342 IF (l_output_quantity IS not NULL) THEN
10343 p_req_quantity := l_output_quantity;
10344 END IF;
10345
10346 -- muom
10347 IF l_debug_on THEN
10348 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT, l_qty IS '||l_qty||' l_qty2 is '||l_qty2);
10349 END IF;
10350
10351 -- HW OPMCONV - Removed l_process_flag parameter
10352 Split_Detail_INT(
10353 p_old_delivery_detail_rec => old_delivery_detail_rec,
10354 -- muom
10355 p_quantity_to_split => l_qty,
10356 p_quantity_to_split2 => l_qty2,
10357 p_unassign_flag => p_unassign_flag,
10358 p_converted_flag => p_converted_flag,
10359 p_manual_split => p_manual_split,
10360 -- muom
10361 p_fulfillment_base => l_fulfillment_base,
10362 x_split_detail_id => x_new_detail_id,
10363 -- Bug 16722851
10364 x_rsv_to_split => l_dummy,
10365 x_rsv_to_split2 => l_dummy,
10366 x_return_status => x_return_status);
10367
10368 -- Bug 3724578 : Return back to the caller if any error occurs
10369 -- while splitting the delivery detail line
10370 --- Message will be set in Split_Detail_INT
10371 IF x_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
10372 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
10373 ) THEN
10374 return;
10375 END IF;
10376
10377 --bug# 6689448 (replenishment project) (begin) : call WMS for whenever there is split on replenishment requested
10378 -- delivery detail lines with the new quantity for the old delivery detail line on p_primary_quantity parameter.
10379 -- Inturn WMS creates a new replenishment record for p_split_delivery_detail_id with old delivery detail line old qty - old delivery detail line
10380 -- new quantity (p_primary_quantity).
10381 IF ( old_delivery_detail_rec.replenishment_status = 'R' and old_delivery_detail_rec.released_status in ('R','B')) THEN
10382 --{
10383 IF l_debug_on THEN
10384 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL' ,WSH_DEBUG_SV.C_PROC_LEVEL);
10385 END IF;
10386 WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL(
10387 p_delivery_detail_id => old_delivery_detail_rec.delivery_detail_id,
10388 -- muom
10389 p_primary_quantity => old_delivery_detail_rec.requested_quantity - l_qty,
10390 p_split_delivery_detail_id => x_new_detail_id,
10391 x_return_status => x_return_status);
10392 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10393 --{
10394 IF l_debug_on THEN
10395 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR FROM WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL');
10396 WSH_DEBUG_SV.pop(l_module_name);
10397 END IF;
10398 RETURN;
10399 --}
10400 END IF;
10401 --}
10402 END IF;
10403 --bug# 6689448 (replenishment project): end
10404
10405 /* H integration: Pricing integration csun
10406 mark repirce required flag when split delivery details
10407 */
10408 l_entity_ids(1) := old_delivery_detail_rec.delivery_detail_id;
10409 --
10410 IF l_debug_on THEN
10411 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
10412 END IF;
10413 --
10414 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
10415 p_entity_type => 'DELIVERY_DETAIL',
10416 p_entity_ids => l_entity_ids,
10417 x_return_status => l_return_status);
10418 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10419 raise reprice_required_err;
10420 END IF;
10421
10422 --
10423 IF l_debug_on THEN
10424 WSH_DEBUG_SV.pop(l_module_name);
10425 END IF;
10426 --
10427 EXCEPTION
10428 WHEN chk_decimal_qty_failed THEN
10429 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10430 fnd_message.set_name('WSH', 'WSH_DET_DECIMAL_QTY_NOT_VALID');
10431 wsh_util_core.add_message(x_return_status,l_module_name);
10432 --
10433 IF l_debug_on THEN
10434 WSH_DEBUG_SV.logmsg(l_module_name,'CHK_DECIMAL_QTY_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10435 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHK_DECIMAL_QTY_FAILED');
10436 END IF;
10437 --
10438 WHEN quantity_over THEN
10439 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10440 fnd_message.set_name('WSH', 'WSH_DET_SPLIT_EXCEED');
10441 wsh_util_core.add_message(x_return_status,l_module_name);
10442 --
10443 IF l_debug_on THEN
10444 WSH_DEBUG_SV.logmsg(l_module_name,'QUANTITY_OVER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10445 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:QUANTITY_OVER');
10446 END IF;
10447 --
10448 WHEN zero_qty THEN
10449 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10450 fnd_message.set_name('WSH', 'WSH_NO_ZERO_NUM');
10451 wsh_util_core.add_message(x_return_status,l_module_name);
10452 --
10453 IF l_debug_on THEN
10454 WSH_DEBUG_SV.logmsg(l_module_name,'ZERO_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10455 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ZERO_QTY');
10456 END IF;
10457 --
10458 WHEN negative_qty THEN
10459 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10460 fnd_message.set_name('WSH', 'WSH_NO_NEG_NUM');
10461 wsh_util_core.add_message(x_return_status,l_module_name);
10462 --
10463 IF l_debug_on THEN
10464 WSH_DEBUG_SV.logmsg(l_module_name,'NEGATIVE_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10465 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEGATIVE_QTY');
10466 END IF;
10467 --
10468 WHEN reprice_required_err THEN
10469 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10470 fnd_message.set_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
10471 wsh_util_core.add_message(x_return_status,l_module_name);
10472 --
10473 IF l_debug_on THEN
10474 WSH_DEBUG_SV.logmsg(l_module_name,'REPRICE_REQUIRED_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10475 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REPRICE_REQUIRED_ERR');
10476 END IF;
10477 --
10478 WHEN others THEN
10479 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10480 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',l_module_name);
10481 --
10482 IF l_debug_on THEN
10483 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10484 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10485 END IF;
10486 --
10487 END SPLIT_DELIVERY_DETAILS;
10488 PROCEDURE Split_Detail_INT(
10489 p_old_delivery_detail_rec IN SplitDetailRecType,
10490 p_new_source_line_id IN NUMBER ,
10491 p_quantity_to_split IN NUMBER,
10492 p_quantity_to_split2 IN NUMBER ,
10493 p_unassign_flag IN VARCHAR2 ,
10494 p_converted_flag IN VARCHAR2 ,
10495 p_manual_split IN VARCHAR2 ,
10496 p_split_sn IN VARCHAR2 ,
10497 -- muom
10498 p_fulfillment_base IN VARCHAR2,
10499 x_split_detail_id OUT NOCOPY NUMBER,
10500 -- Bug 16722851
10501 x_rsv_to_split OUT NOCOPY NUMBER,
10502 x_rsv_to_split2 OUT NOCOPY NUMBER,
10503 x_return_status OUT NOCOPY VARCHAR2) IS
10504 BEGIN
10505 Split_Detail_INT(
10506 p_old_delivery_detail_rec => p_old_delivery_detail_rec,
10507 p_new_source_line_id => p_new_source_line_id,
10508 p_quantity_to_split => p_quantity_to_split,
10509 p_quantity_to_split2 => p_quantity_to_split2,
10510 p_unassign_flag => p_unassign_flag,
10511 p_converted_flag => p_converted_flag,
10512 p_manual_split => p_manual_split,
10513 p_split_sn => p_split_sn,
10514 p_source_code => NULL,
10515 p_fulfillment_base => p_fulfillment_base,
10516 x_split_detail_id => x_split_detail_id,
10517 x_rsv_to_split => x_rsv_to_split,
10518 x_rsv_to_split2 => x_rsv_to_split2,
10519 x_return_status => x_return_status);
10520
10521 END Split_Detail_INT;
10522
10523
10524
10525 /*****************************************************************
10526 Description :-
10527
10528 Currently being used values of p_manual_split are
10529
10530 NULL - default, normal mode of splitting backordered quantity
10531 then shipped quantity
10532 Y - split staged quantity
10533 C - split shipped quantity then backordered quantity (from packing code)
10534 B - called from update_inventory_info for OPM's use
10535 M - called from update_inventory_info for OPM's use
10536 S - called from update_inventory_info for OPM's use
10537 U - called from update_inventory_info for OPM's use
10538
10539 *******************************************************************/
10540
10541 /*****************************************************
10542 ----- SPLIT_DETAIL_INT api
10543 *****************************************************/
10544 -- HW OPMCONV. Removed p_process_flag
10545 PROCEDURE Split_Detail_INT(
10546 p_old_delivery_detail_rec IN SplitDetailRecType,
10547 p_new_source_line_id IN NUMBER ,
10548 p_quantity_to_split IN NUMBER,
10549 p_quantity_to_split2 IN NUMBER ,
10550 p_unassign_flag IN VARCHAR2 ,
10551 p_converted_flag IN VARCHAR2 ,
10552 p_manual_split IN VARCHAR2 ,
10553 p_split_sn IN VARCHAR2 ,
10554 -- muom
10555 --Added for bug 16833534
10556 p_source_code IN VARCHAR2,
10557 p_fulfillment_base IN VARCHAR2,
10558 x_split_detail_id OUT NOCOPY NUMBER,
10559 -- Bug 16722851
10560 x_rsv_to_split OUT NOCOPY NUMBER,
10561 x_rsv_to_split2 OUT NOCOPY NUMBER,
10562 x_return_status OUT NOCOPY VARCHAR2)
10563 IS
10564 l_new_delivery_detail_id number;
10565 -- HW OPMCONV. Removed OPM variables
10566
10567 -- HW OPMCONV. Removed format of 19,9
10568 l_qty2 NUMBER;
10569 l_split_shipped_qty2 NUMBER(19,9):= NULL;
10570 -- HW BUG#:1636578 variable to calculate new qty2
10571 l_new_req_qty2 NUMBER;
10572 -- HW OPMCONV. Removed format of 19,9
10573 l_original_shipped_qty2 NUMBER := NULL;
10574
10575 l_new_req_qty NUMBER;
10576 l_new_pick_qty NUMBER;
10577 -- HW OPMCONV. No need to use l_new_pick_qty2
10578 --l_new_pick_qty2 NUMBER;
10579
10580 l_delivery_id number;
10581 l_parent_delivery_detail_id number;
10582 assignment number;
10583 l_delivery_assignment_id number;
10584 detail_rowid VARCHAR2(30);
10585 assignment_rowid VARCHAR2(30);
10586 total number;
10587 l_cr_dt_status varchar2(30);
10588 l_cr_assg_status varchar2(30);
10589 l_output_quantity number;
10590 l_qty_return_status varchar2(30);
10591 new_det_wt_vol_failed exception;
10592 old_det_wt_vol_failed exception;
10593 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
10594 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
10595 l_split_weight number;
10596 l_split_volume number;
10597 l_split_return_status varchar2(30);
10598 l_shipped_quantity NUMBER := NULL;
10599 l_old_stage_qty NUMBER := NULL;
10600 l_ser_qty NUMBER := NULL;
10601
10602 l_original_req_qty NUMBER := NULL;
10603 l_original_req_qty2 NUMBER := NULL;
10604 l_original_picked_qty NUMBER := NULL;
10605 l_original_picked_qty2 NUMBER := NULL;
10606 l_original_recvd_qty NUMBER := NULL;
10607 l_original_recvd_qty2 NUMBER := NULL;
10608 l_original_rtv_qty NUMBER := NULL;
10609 l_original_rtv_qty2 NUMBER := NULL;
10610 l_split_req_qty NUMBER := NULL;
10611 l_split_req_qty2 NUMBER := NULL;
10612 l_split_picked_qty NUMBER := NULL;
10613 l_split_picked_qty2 NUMBER := NULL;
10614 l_split_recvd_qty NUMBER := NULL;
10615 l_split_recvd_qty2 NUMBER := NULL;
10616 l_split_rtv_qty NUMBER := NULL;
10617 l_split_rtv_qty2 NUMBER := NULL;
10618 l_original_shipped_qty NUMBER := NULL;
10619 l_original_cc_qty NUMBER := NULL;
10620 l_split_shipped_qty NUMBER := NULL;
10621 l_split_cc_qty NUMBER := NULL;
10622 -- HW OPMCONV. Removed format of 19,9
10623 l_split_cc_qty2 NUMBER := NULL;
10624 -- HW OPMCONV. Removed format of 19,9
10625 l_original_cc_qty2 NUMBER := NULL;
10626 l_return_status VARCHAR2(30);
10627 -- J: W/V Changes
10628 l_total_gross_wt NUMBER;
10629 l_total_net_wt NUMBER;
10630 l_total_vol NUMBER;
10631 l_org_wv_qty NUMBER;
10632 l_new_wv_qty NUMBER;
10633
10634 -- HW OPMCONV. Removed OPM excpetion
10635
10636
10637 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
10638
10639 WSH_CREATE_DET_ERR EXCEPTION;
10640 WSH_SN_SPLIT_ERR EXCEPTION;
10641
10642 l_updated_delivery_detail_rec SplitDetailRecType;
10643
10644 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
10645 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
10646 --
10647 l_upd_wv_on_split_stg_dd VARCHAR2(1); -- bug #7580785.
10648 --
10649 l_debug_on BOOLEAN;
10650 --
10651 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DETAIL_INT';
10652 --
10653 l_action VARCHAR2(100) := 'SPLIT-LINE';
10654 BEGIN
10655 --
10656 --
10657 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10658 --
10659 IF l_debug_on IS NULL
10660 THEN
10661 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10662 END IF;
10663 --
10664 IF l_debug_on THEN
10665 WSH_DEBUG_SV.push(l_module_name);
10666 --
10667 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SOURCE_LINE_ID',P_NEW_SOURCE_LINE_ID);
10668 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT',P_QUANTITY_TO_SPLIT);
10669 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT2',P_QUANTITY_TO_SPLIT2);
10670 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
10671 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
10672 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
10673 WSH_DEBUG_SV.log(l_module_name,'P_SPLIT_SN',P_SPLIT_SN);
10674 -- muom
10675 WSH_DEBUG_SV.log(l_module_name,'P_FULFILLMENT_BASE',P_FULFILLMENT_BASE);
10676 END IF;
10677 --
10678 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10679
10680 /* need to validate the quantity passed meets the decimal quantity
10681 standard */
10682
10683
10684 -- HW OPMCONV. Removed branching
10685 l_qty2 := p_quantity_to_split2;
10686 --IF p_source_code = 'OE' THEN
10687 -- Bug 16722851
10688 l_original_picked_qty := p_old_delivery_detail_rec.picked_quantity - p_quantity_to_split;
10689 l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - l_qty2;
10690 x_rsv_to_split := p_quantity_to_split;
10691 x_rsv_to_split2 := p_quantity_to_split2;
10692 --END IF;
10693 IF NVL(p_old_delivery_detail_rec.line_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
10694 THEN
10695 --{
10696
10697 -- For bug 1307771. If shipped quantity is NULL. Then leave the new
10698 -- shipped quantity to be NULL
10699 IF (p_old_delivery_detail_rec.shipped_quantity IS NULL AND p_old_delivery_detail_rec.cycle_count_quantity IS NULL) THEN
10700 l_split_shipped_qty := NULL;
10701 l_split_cc_qty := NULL;
10702 l_split_shipped_qty2 :=NULL;
10703 l_split_cc_qty2 := NULL;
10704 IF l_debug_on THEN
10705 WSH_DEBUG_SV.log(l_module_name,' p_old_delivery_detail_rec.shipped_quantity ',p_old_delivery_detail_rec.shipped_quantity);
10706 WSH_DEBUG_SV.log(l_module_name,' p_old_delivery_detail_rec.cycle_count_quantity ',p_old_delivery_detail_rec.cycle_count_quantity );
10707 END IF;
10708 ELSIF (p_manual_split = 'C') THEN
10709
10710 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity,
10711 p_quantity_to_split);
10712 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2,
10713 p_quantity_to_split2);
10714 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity,
10715 (p_quantity_to_split - nvl(l_split_shipped_qty,0)));
10716 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2,
10717 (p_quantity_to_split2 - NVL(l_split_shipped_qty2,0)));
10718
10719 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity -
10720 l_split_shipped_qty;
10721 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity -
10722 l_split_cc_qty;
10723 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 -
10724 l_split_shipped_qty2;
10725 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 -
10726 l_split_cc_qty2;
10727
10728 ELSIF (p_manual_split = 'Y') THEN
10729
10730 /* bug 1983460
10731 if the call is from ship confirm to split only the stage quantity
10732 the split delivery detail has null shipped and cc quantities.
10733 */
10734
10735 l_split_shipped_qty := NULL;
10736 l_split_cc_qty := NULL;
10737 l_split_shipped_qty2 :=NULL;
10738 l_split_cc_qty2 := NULL;
10739
10740 /* bug 1983460
10741 since the split shipped and split cc quantities are null, we should
10742 leave the original shipped and original cc quantities as they are.
10743 */
10744
10745 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity;
10746 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity;
10747 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2;
10748
10749 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2;
10750 IF l_debug_on THEN
10751 WSH_DEBUG_SV.log(l_module_name,' l_split_cc_qty ',l_split_cc_qty);
10752 WSH_DEBUG_SV.log(l_module_name,' l_split_cc_qty2 ',l_split_cc_qty2 );
10753 END IF;
10754
10755 ELSE
10756 -- use cc qty to split p_quantity_to_split before we use shipped qty to complete the quantity split
10757 -- (This takes care of splitting lines to backorder/cycle-count, for example.)
10758 -- assumption: the quantities' relationships are valid
10759
10760 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity, p_quantity_to_split);
10761 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2, p_quantity_to_split2);
10762
10763 -- fail-safe: NVL to ensure that shipped qtys can still be split even if cc qtys are NULL
10764 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity, (p_quantity_to_split - NVL(l_split_cc_qty,0)));
10765 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2, (p_quantity_to_split2 - NVL(l_split_cc_qty2,0)));
10766
10767 -- update original line's quantities accordingly
10768 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity - l_split_shipped_qty;
10769 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity - l_split_cc_qty;
10770
10771 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 - l_split_shipped_qty2;
10772 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 - l_split_cc_qty2;
10773 END IF;
10774
10775 --
10776
10777 IF p_old_delivery_detail_rec.picked_quantity IS NULL THEN
10778 l_delivery_details_info.requested_quantity := p_quantity_to_split;
10779 -- muom
10780 l_delivery_details_info.requested_quantity2 := p_quantity_to_split2;
10781 ELSE
10782 l_delivery_details_info.requested_quantity := LEAST(p_old_delivery_detail_rec.requested_quantity, p_quantity_to_split);
10783 l_delivery_details_info.picked_quantity := p_quantity_to_split;
10784 l_delivery_details_info.requested_quantity2 := LEAST(p_old_delivery_detail_rec.requested_quantity2, p_quantity_to_split2);
10785
10786 -- muom: Always split the detail's Primary based on conversion from Secondary
10787 IF p_fulfillment_base = 'S' and l_delivery_details_info.requested_quantity2 > 0 THEN
10788 l_delivery_details_info.requested_quantity :=
10789 wsh_wv_utils.convert_uom(
10790 from_uom => p_old_delivery_detail_rec.requested_quantity_uom2,
10791 to_uom => p_old_delivery_detail_rec.requested_quantity_uom,
10792 quantity => l_delivery_details_info.requested_quantity2,
10793 item_id => p_old_delivery_detail_rec.inventory_item_id,
10794 org_id => p_old_delivery_detail_rec.organization_id);
10795 IF l_debug_on THEN
10796 WSH_DEBUG_SV.logmsg(l_module_name,'*** new l_delivery_details_info.requested_quantity '||l_delivery_details_info.requested_quantity);
10797 END IF;
10798 END IF;
10799 l_delivery_details_info.picked_quantity2 := nvl(l_qty2,FND_API.G_MISS_NUM);
10800
10801 -- Bug 16722851
10802 IF p_source_code = 'OE' THEN --Added for bug 16833534
10803 IF p_fulfillment_base = 'P' and nvl(l_delivery_details_info.picked_quantity2,FND_API.G_MISS_NUM) <> FND_API.G_MISS_NUM THEN
10804 IF l_debug_on THEN
10805 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.picked_quantity',p_old_delivery_detail_rec.picked_quantity);
10806 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.shipped_quantity',p_old_delivery_detail_rec.shipped_quantity);
10807 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.picked_quantity2',p_old_delivery_detail_rec.picked_quantity2);
10808 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.shipped_quantity2',p_old_delivery_detail_rec.shipped_quantity2);
10809 END IF;
10810
10811 -- Bug 16722851: Prorate the Secondary Picked/Shipped/Backordered quantities based on primary quantities
10812 l_delivery_details_info.picked_quantity2 := (p_old_delivery_detail_rec.picked_quantity2 * l_delivery_details_info.picked_quantity) / p_old_delivery_detail_rec.picked_quantity;
10813 IF p_old_delivery_detail_rec.shipped_quantity > 0 THEN
10814 l_split_shipped_qty2 := (p_old_delivery_detail_rec.shipped_quantity2 * l_split_shipped_qty) / p_old_delivery_detail_rec.shipped_quantity;
10815 ELSE
10816 l_split_shipped_qty2 := null;
10817 END IF;
10818 IF p_old_delivery_detail_rec.cycle_count_quantity > 0 THEN
10819 l_split_cc_qty2 := (p_old_delivery_detail_rec.cycle_count_quantity2 * l_split_cc_qty) / p_old_delivery_detail_rec.cycle_count_quantity;
10820 ELSE
10821 l_split_cc_qty2 := null;
10822 END IF;
10823
10824 l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - l_delivery_details_info.picked_quantity2;
10825 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 - l_split_shipped_qty2;
10826 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 - l_split_cc_qty2;
10827 x_rsv_to_split2 := l_delivery_details_info.picked_quantity2;
10828
10829 IF l_debug_on THEN
10830 WSH_DEBUG_SV.log(l_module_name, 'New l_split_shipped_qty2',l_split_shipped_qty2);
10831 WSH_DEBUG_SV.log(l_module_name, 'New l_split_cc_qty2',l_split_cc_qty2);
10832 WSH_DEBUG_SV.log(l_module_name, 'New l_original_shipped_qty2',l_original_shipped_qty2);
10833 WSH_DEBUG_SV.log(l_module_name, 'New l_original_cc_qty2',l_original_cc_qty2);
10834 WSH_DEBUG_SV.log(l_module_name, 'x_rsv_to_split2',x_rsv_to_split2);
10835 END IF;
10836 ELSIF p_fulfillment_base = 'S' and l_delivery_details_info.picked_quantity > 0 THEN
10837 IF l_debug_on THEN
10838 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.picked_quantity',p_old_delivery_detail_rec.picked_quantity);
10839 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.shipped_quantity',p_old_delivery_detail_rec.shipped_quantity);
10840 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.picked_quantity2',p_old_delivery_detail_rec.picked_quantity2);
10841 WSH_DEBUG_SV.log(l_module_name, '*** p_old_delivery_detail_rec.shipped_quantity2',p_old_delivery_detail_rec.shipped_quantity2);
10842 END IF;
10843
10844 -- Bug 16722851: Prorate the Primary Picked/Shipped/Backordered quantities based on secondary quantities
10845 l_delivery_details_info.picked_quantity := (p_old_delivery_detail_rec.picked_quantity * l_delivery_details_info.picked_quantity2) / p_old_delivery_detail_rec.picked_quantity2;
10846 IF p_old_delivery_detail_rec.shipped_quantity2 > 0 THEN
10847 l_split_shipped_qty := (p_old_delivery_detail_rec.shipped_quantity * l_split_shipped_qty2) / p_old_delivery_detail_rec.shipped_quantity2;
10848 ELSE
10849 l_split_shipped_qty := null;
10850 END IF;
10851 IF p_old_delivery_detail_rec.cycle_count_quantity2 > 0 THEN
10852 l_split_cc_qty := (p_old_delivery_detail_rec.cycle_count_quantity * l_split_cc_qty2) / p_old_delivery_detail_rec.cycle_count_quantity2;
10853 ELSE
10854 l_split_cc_qty := null;
10855 END IF;
10856
10857 l_original_picked_qty := p_old_delivery_detail_rec.picked_quantity - l_delivery_details_info.picked_quantity;
10858 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity - l_split_shipped_qty;
10859 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity - l_split_cc_qty;
10860 x_rsv_to_split := l_delivery_details_info.picked_quantity;
10861
10862 IF l_debug_on THEN
10863 WSH_DEBUG_SV.log(l_module_name, 'New l_split_shipped_qty',l_split_shipped_qty);
10864 WSH_DEBUG_SV.log(l_module_name, 'New l_split_cc_qty',l_split_cc_qty);
10865 WSH_DEBUG_SV.log(l_module_name, 'New l_original_shipped_qty',l_original_shipped_qty);
10866 WSH_DEBUG_SV.log(l_module_name, 'New l_original_cc_qty',l_original_cc_qty);
10867 WSH_DEBUG_SV.log(l_module_name, 'x_rsv_to_split',x_rsv_to_split);
10868 END IF;
10869 END IF;
10870 END IF;
10871 END IF;
10872
10873 IF l_debug_on THEN
10874 WSH_DEBUG_SV.log(l_module_name, ' l_delivery_details_info.requested_quantity2',l_delivery_details_info.requested_quantity2);
10875 END IF;
10876
10877 --Bug 7291415. 0 to be considered as valid value. Following IF condition modified.
10878 --IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
10879 -- muom
10880 IF p_fulfillment_base = 'P' THEN
10881 IF ( NVL(l_qty2, -999) = -999 OR l_qty2 < 0 ) THEN
10882 l_delivery_details_info.requested_quantity2 := FND_API.G_MISS_NUM;
10883 ELSE
10884 l_delivery_details_info.requested_quantity2 := l_qty2;
10885 END IF;
10886 END IF;
10887 --
10888 --
10889 -- J-IB-NPARIKH-{
10890 l_original_req_qty := GREATEST(p_old_delivery_detail_rec.requested_quantity
10891 - l_delivery_details_info.requested_quantity, 0);
10892 l_original_req_qty2 := GREATEST(p_old_delivery_detail_rec.requested_quantity2 - l_qty2, 0);
10893 IF NOT ( p_source_code = 'OE' ) THEN --Added for bug 16833534
10894 l_original_picked_qty := p_old_delivery_detail_rec.picked_quantity - p_quantity_to_split;
10895 --l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - nvl(l_qty2,l_new_pick_qty2);
10896 l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - l_qty2;
10897 END IF;
10898 --
10899 l_original_recvd_qty := p_old_delivery_detail_rec.received_quantity;
10900 l_original_recvd_qty2 := p_old_delivery_detail_rec.received_quantity2;
10901 l_split_recvd_qty := NULL;
10902 l_split_recvd_qty2 := NULL;
10903 -- J-IB-NPARIKH-}
10904
10905
10906 --}
10907 IF l_debug_on THEN
10908 WSH_DEBUG_SV.log(l_module_name, ' l_original_req_qty ',l_original_req_qty);
10909 WSH_DEBUG_SV.log(l_module_name, ' l_original_req_qty2 ',l_original_req_qty2);
10910 WSH_DEBUG_SV.log(l_module_name, ' l_original_picked_qty ',l_original_picked_qty);
10911 WSH_DEBUG_SV.log(l_module_name, ' l_original_picked_qty2 ',l_original_picked_qty2);
10912 WSH_DEBUG_SV.log(l_module_name, ' l_original_shipped_qty ',l_original_shipped_qty);
10913 WSH_DEBUG_SV.log(l_module_name, ' l_original_shipped_qty2 ',l_original_shipped_qty2);
10914 WSH_DEBUG_SV.log(l_module_name, ' l_original_recvd_qty ',l_original_recvd_qty);
10915 WSH_DEBUG_SV.log(l_module_name, ' l_original_recvd_qty2 ',l_original_recvd_qty2);
10916 END IF;
10917 ELSE -- -- J-IB-NPARIKH
10918 --{
10919 --
10920 -- For inbound and drop-ship lines,
10921 -- calculate quantities for new(child) line and original line
10922 -- For new line, quantities are
10923 -- LEAST( qty. on original line, input quantity to be split)
10924 -- For original line, quantities are
10925 -- GREATEST( qty. on original line - qty. on new line, 0 )
10926 -- For a line with picked=12, requested=10, if we split 11 then
10927 -- new line : picked=11, requested=10
10928 -- original line : picked=1, requested=0
10929 --
10930 --
10931 l_split_cc_qty := NULL;
10932 l_split_cc_qty2 := NULL;
10933 l_split_rtv_qty := least(p_old_delivery_detail_rec.returned_quantity, p_quantity_to_split);
10934 l_split_recvd_qty := least(p_old_delivery_detail_rec.received_quantity, p_quantity_to_split);
10935 l_split_shipped_qty := least(p_old_delivery_detail_rec.shipped_quantity, p_quantity_to_split);
10936 l_split_picked_qty := least(p_old_delivery_detail_rec.picked_quantity, p_quantity_to_split);
10937 l_split_req_qty := least(p_old_delivery_detail_rec.requested_quantity,p_quantity_to_split);
10938 --
10939 l_split_rtv_qty2 := least(p_old_delivery_detail_rec.returned_quantity2, l_qty2);
10940 l_split_recvd_qty2 := least(p_old_delivery_detail_rec.received_quantity2, l_qty2);
10941 l_split_shipped_qty2 := least(p_old_delivery_detail_rec.shipped_quantity2, l_qty2);
10942 l_split_picked_qty2 := least(p_old_delivery_detail_rec.picked_quantity2, l_qty2);
10943 l_split_req_qty2 := least(p_old_delivery_detail_rec.requested_quantity2,l_qty2);
10944 --
10945 --
10946 l_delivery_details_info.requested_quantity := nvl(l_split_req_qty, FND_API.G_MISS_NUM);
10947 l_delivery_details_info.requested_quantity2 := nvl(l_split_req_qty2,FND_API.G_MISS_NUM);
10948 l_delivery_details_info.picked_quantity := nvl(l_split_picked_qty, FND_API.G_MISS_NUM);
10949 l_delivery_details_info.picked_quantity2 := nvl(l_split_picked_qty2,FND_API.G_MISS_NUM);
10950 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty, FND_API.G_MISS_NUM);
10951 l_delivery_details_info.shipped_quantity2 := nvl(l_split_shipped_qty2,FND_API.G_MISS_NUM);
10952 l_delivery_details_info.received_quantity := nvl(l_split_recvd_qty, FND_API.G_MISS_NUM);
10953 l_delivery_details_info.received_quantity2 := nvl(l_split_recvd_qty2,FND_API.G_MISS_NUM);
10954 l_delivery_details_info.returned_quantity := nvl(l_split_rtv_qty, FND_API.G_MISS_NUM);
10955 l_delivery_details_info.returned_quantity2 := nvl(l_split_rtv_qty2,FND_API.G_MISS_NUM);
10956 --
10957 --
10958 l_original_shipped_qty := GREATEST(
10959 p_old_delivery_detail_rec.shipped_quantity
10960 - NVL(l_split_shipped_qty,0),
10961 0
10962 );
10963 l_original_cc_qty := GREATEST(
10964 p_old_delivery_detail_rec.cycle_count_quantity
10965 - NVL(l_split_cc_qty,0),
10966 0
10967 );
10968 l_original_shipped_qty2 := GREATEST(
10969 p_old_delivery_detail_rec.shipped_quantity2
10970 - NVL(l_split_shipped_qty2,0),
10971 0
10972 );
10973 l_original_cc_qty2 := GREATEST(
10974 p_old_delivery_detail_rec.cycle_count_quantity2
10975 - NVL(l_split_cc_qty2,0),
10976 0
10977 );
10978 --
10979 l_original_req_qty := GREATEST(
10980 p_old_delivery_detail_rec.requested_quantity
10981 - NVL(l_split_req_qty,0),
10982 0
10983 );
10984 l_original_req_qty2 := GREATEST(
10985 p_old_delivery_detail_rec.requested_quantity2
10986 - NVL(l_split_req_qty2,0),
10987 0
10988 );
10989 l_original_picked_qty := GREATEST(
10990 p_old_delivery_detail_rec.picked_quantity
10991 - NVL(l_split_picked_qty,0),
10992 0
10993 );
10994 l_original_picked_qty2 := GREATEST(
10995 p_old_delivery_detail_rec.picked_quantity2
10996 - NVL(l_split_picked_qty2,0),
10997 0
10998 );
10999 l_original_recvd_qty := GREATEST(
11000 p_old_delivery_detail_rec.received_quantity
11001 - NVL(l_split_recvd_qty,0),
11002 0
11003 );
11004 l_original_recvd_qty2 := GREATEST(
11005 p_old_delivery_detail_rec.received_quantity2
11006 - NVL(l_split_recvd_qty2,0),
11007 0
11008 );
11009
11010 IF l_debug_on THEN
11011 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.requested_quantity', l_delivery_details_info.requested_quantity);
11012 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.requested_quantity2',l_delivery_details_info.requested_quantity2);
11013 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.shipped_quantity', l_delivery_details_info.shipped_quantity);
11014 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.shipped_quantity2',l_delivery_details_info.shipped_quantity2);
11015 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.received_quantity', l_delivery_details_info.received_quantity);
11016 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.received_quantity2',l_delivery_details_info.received_quantity2);
11017 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.returned_quantity', l_delivery_details_info.returned_quantity);
11018 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.returned_quantity2',l_delivery_details_info.returned_quantity2);
11019 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.picked_quantity',l_delivery_details_info.picked_quantity);
11020 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.picked_quantity2',l_delivery_details_info.picked_quantity2);
11021 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty',l_original_shipped_qty);
11022 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty2',l_original_shipped_qty2);
11023 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty',l_original_cc_qty);
11024 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty2',l_original_cc_qty2);
11025 WSH_DEBUG_SV.log(l_module_name,'l_original_req_qty',l_original_req_qty);
11026 WSH_DEBUG_SV.log(l_module_name,'l_original_req_qty2',l_original_req_qty2);
11027 WSH_DEBUG_SV.log(l_module_name,'l_original_picked_qty',l_original_picked_qty);
11028 WSH_DEBUG_SV.log(l_module_name,'l_original_picked_qty2',l_original_picked_qty2);
11029 WSH_DEBUG_SV.log(l_module_name,'l_original_recvd_qty',l_original_recvd_qty);
11030 WSH_DEBUG_SV.log(l_module_name,'l_original_recvd_qty2',l_original_recvd_qty2);
11031 WSH_DEBUG_SV.log(l_module_name,'l_original_rtv_qty',l_original_rtv_qty);
11032 WSH_DEBUG_SV.log(l_module_name,'l_original_rtv_qty2',l_original_rtv_qty2);
11033 END IF;
11034
11035 --
11036 --}
11037 END IF;
11038
11039 -- Bug 2181132 in current code for single line
11040 -- donot need the check for null
11041 l_delivery_details_info.source_line_set_id :=
11042 p_old_delivery_detail_rec.source_line_set_id;
11043
11044 IF p_new_source_line_id IS NOT NULL THEN
11045 l_delivery_details_info.source_line_id := p_new_source_line_id;
11046 END IF;
11047
11048 -- J: W/V Changes
11049 IF p_old_delivery_detail_rec.wv_frozen_flag = 'Y' THEN
11050 l_org_wv_qty := NVL(p_old_delivery_detail_rec.received_quantity,NVL(p_old_delivery_detail_rec.shipped_quantity,NVL(p_old_delivery_detail_rec.picked_quantity, p_old_delivery_detail_rec.requested_quantity)));
11051
11052 IF l_debug_on THEN
11053 WSH_DEBUG_SV.logmsg(l_module_name, 'Frozen Y');
11054 END IF;
11055
11056 IF (p_manual_split = 'Y') THEN
11057 -- p_manual_split is 'Y' only when splitting for staged delivery details during ship confirm
11058 -- Staged delivery details W/V should always be reset back to original W/V
11059 l_new_wv_qty := 0;
11060 ELSE
11061 SELECT NVL(decode(l_split_recvd_qty,FND_API.G_MISS_NUM,null,l_split_recvd_qty),
11062 NVL(decode(l_split_shipped_qty,FND_API.G_MISS_NUM,null,l_split_shipped_qty),
11063 NVL(decode(l_delivery_details_info.picked_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.picked_quantity),
11064 decode(l_delivery_details_info.requested_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.requested_quantity))))
11065 INTO l_new_wv_qty
11066 FROM dual;
11067 END IF;
11068
11069 IF l_org_wv_qty <> 0 THEN
11070 l_delivery_details_info.gross_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.gross_weight, 5);
11071 l_delivery_details_info.net_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.net_weight, 5);
11072 l_delivery_details_info.volume := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.volume, 5);
11073 ELSE
11074 l_delivery_details_info.gross_weight := 0;
11075 l_delivery_details_info.net_weight := 0;
11076 l_delivery_details_info.volume := 0;
11077 END IF;
11078
11079
11080 END IF;
11081
11082 IF (l_split_shipped_qty is not null and l_split_shipped_qty = 0) OR (p_manual_split = 'Y') THEN
11083 l_delivery_details_info.wv_frozen_flag := 'N';
11084 ELSE
11085 l_delivery_details_info.wv_frozen_flag := p_old_delivery_detail_rec.wv_frozen_flag;
11086 END IF;
11087 l_delivery_details_info.weight_uom_code := p_old_delivery_detail_rec.weight_uom_code;
11088 l_delivery_details_info.volume_uom_code := p_old_delivery_detail_rec.volume_uom_code;
11089
11090 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty,FND_API.G_MISS_NUM);
11091 IF ( NVL(l_split_shipped_qty2, 0) = 0 ) THEN
11092 l_delivery_details_info.shipped_quantity2 := FND_API.G_MISS_NUM;
11093 ELSE
11094 l_delivery_details_info.shipped_quantity2 := l_split_shipped_qty2;
11095 END IF;
11096 --
11097 --
11098 l_delivery_details_info.received_quantity := nvl(l_split_recvd_qty, FND_API.G_MISS_NUM);
11099 l_delivery_details_info.received_quantity2 := nvl(l_split_recvd_qty2,FND_API.G_MISS_NUM);
11100 --
11101 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
11102 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
11103 ELSE
11104 -- Bug 2116595
11105 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
11106 END IF;
11107
11108 l_delivery_details_info.cycle_count_quantity := nvl(l_split_cc_qty,FND_API.G_MISS_NUM);
11109 -- HW OPMCONV. No need to fork code
11110 -- IF ( p_process_flag = FND_API.G_TRUE ) THEN
11111 l_delivery_details_info.cycle_count_quantity2 := nvl(l_split_cc_qty2,FND_API.G_MISS_NUM);
11112 -- END IF;
11113
11114 -- Bug 2116595
11115 l_delivery_details_info.cancelled_quantity := FND_API.G_MISS_NUM;
11116 l_delivery_details_info.split_from_detail_id := p_old_delivery_detail_rec.delivery_detail_id;
11117
11118 l_delivery_details_info.container_flag := p_old_delivery_detail_rec.container_flag;
11119 l_delivery_details_info.master_serial_number := FND_API.G_MISS_CHAR;
11120 l_delivery_details_info.serial_number := FND_API.G_MISS_CHAR;
11121 l_delivery_details_info.to_serial_number := FND_API.G_MISS_CHAR;
11122 l_delivery_details_info.transaction_temp_id := FND_API.G_MISS_NUM;
11123 l_delivery_details_info.last_update_date := SYSDATE;
11124 l_delivery_details_info.last_updated_by := FND_GLOBAL.USER_ID;
11125 l_delivery_details_info.last_update_login := FND_GLOBAL.LOGIN_ID;
11126 -- Bug 2419301
11127 l_delivery_details_info.oe_interfaced_flag := p_old_delivery_detail_rec.oe_interfaced_flag;
11128 l_delivery_details_info.consignee_flag := p_old_delivery_detail_rec.consignee_flag; --RTV changes
11129 l_new_delivery_detail_id := NULL;
11130
11131
11132 l_updated_delivery_detail_rec := p_old_delivery_detail_rec;
11133
11134 -- HW OPMCONV - Removed branching
11135 -- are there serial numbers to split?
11136
11137 /* bug 1983460
11138 if p_manual_split is 'Y', only stage quantity is involved.
11139 Staged quantities can't have serial numbers and hence no need to call
11140 */
11141
11142
11143 IF ( p_split_sn = 'Y'
11144 AND NVL(p_old_delivery_detail_rec.shipped_quantity, 0) > NVL(l_original_shipped_qty, 0)
11145 AND ( (p_old_delivery_detail_rec.transaction_temp_id IS NOT NULL)
11146 OR (p_old_delivery_detail_rec.serial_number IS NOT NULL)
11147 )
11148 AND (NVL(p_manual_split,'!') <> 'Y')
11149 ) THEN
11150
11151 Split_Serial_Numbers_INT(
11152 x_old_detail_rec => l_updated_delivery_detail_rec,
11153 x_new_delivery_detail_rec => l_delivery_details_info,
11154 p_old_shipped_quantity => l_original_shipped_qty,
11155 p_new_shipped_quantity => l_split_shipped_qty,
11156 x_return_status => l_split_return_status);
11157
11158 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
11159 RAISE wsh_sn_split_err;
11160 END IF;
11161
11162 END IF; -- are there serial numbers to split?
11163
11164 --
11165 IF l_debug_on THEN
11166 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_NEW_DETAIL_FROM_OLD',WSH_DEBUG_SV.C_PROC_LEVEL);
11167 END IF;
11168 --
11169 WSH_DELIVERY_DETAILS_PKG.create_new_detail_from_old(
11170 p_delivery_detail_rec => l_delivery_details_info,
11171 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
11172 x_row_id => detail_rowid,
11173 x_delivery_detail_id => l_new_delivery_detail_id,
11174 x_return_status => l_cr_dt_status);
11175
11176 IF l_cr_dt_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
11177 RAISE WSH_CREATE_DET_ERR;
11178 END IF;
11179
11180
11181 /* call wv util to calculate the weight and volume of the new detail */
11182 -- J: W/V Changes
11183 l_upd_wv_on_split_stg_dd := 'N'; -- bug # 7580785
11184 IF p_old_delivery_detail_rec.wv_frozen_flag = 'N' THEN
11185 --{
11186 -- bug # 7580785 :
11187 -- During Partial Shipping with the remain qty as staged, w/v value should not be
11188 -- deducted again from the original line since during entering shipped_quantity
11189 -- w/v has been calculated for the original line but W/V should be calculated on split staged DD.
11190 IF l_debug_on THEN
11191 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
11192 END IF;
11193 WSH_WV_UTILS.Detail_Weight_Volume(
11194 p_delivery_detail_id => l_new_delivery_detail_id,
11195 p_update_flag => 'Y',
11196 x_net_weight => l_split_weight,
11197 x_volume => l_split_volume,
11198 x_return_status => l_split_return_status);
11199 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
11200 RAISE new_det_wt_vol_failed;
11201 END IF;
11202 IF l_debug_on THEN
11203 WSH_DEBUG_SV.logmsg(l_module_name, ' After Update w/v');
11204 WSH_DEBUG_SV.log(l_module_name, 'l_split_weight',l_split_weight);
11205 WSH_DEBUG_SV.log(l_module_name, 'l_split_volume',l_split_volume);
11206 WSH_DEBUG_SV.log(l_module_name, 'p_manual_split',p_manual_split);
11207 END IF;
11208 -- Bug 4416863
11209 -- During Partial Shipping with the remain qty as staged, w/v value should not be
11210 -- deducted again from the original line since during entering shipped_quantity
11211 -- w/v has been calculated for the original line.
11212 IF (p_manual_split = 'Y') THEN
11213 l_total_net_wt := 0;
11214 l_total_gross_wt := 0;
11215 l_total_vol := 0;
11216 -- bug # 7580785: Needs to post the w/v changes to delivery after creating assignment records
11217 l_upd_wv_on_split_stg_dd := 'Y';
11218 ELSE
11219 -- end bug 4416863
11220 l_total_net_wt := l_split_weight;
11221 l_total_gross_wt := l_split_weight;
11222 l_total_vol := l_split_volume;
11223 END IF;
11224 ELSE
11225 l_total_net_wt := l_delivery_details_info.net_weight;
11226 l_total_gross_wt := l_delivery_details_info.gross_weight;
11227 l_total_vol := l_delivery_details_info.volume;
11228 END IF;
11229
11230 IF (p_unassign_flag = 'N') THEN
11231 l_delivery_assignments_info.type := 'S';
11232 l_delivery_assignments_info.delivery_id := p_old_delivery_detail_rec.delivery_id;
11233 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
11234 IF p_old_delivery_detail_rec.wda_type = 'C' THEN
11235 l_delivery_assignments_info.type := 'O';
11236 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
11237 END IF;
11238 ELSE
11239 l_delivery_assignments_info.delivery_id := NULL;
11240 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
11241 END IF;
11242
11243 l_delivery_assignments_info.delivery_detail_id := l_new_delivery_detail_id;
11244 --
11245 IF l_debug_on THEN
11246 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_DELIVERY_ASSIGNMENTS',WSH_DEBUG_SV.C_PROC_LEVEL);
11247 END IF;
11248 --
11249 wsh_delivery_details_pkg.create_delivery_assignments(
11250 l_delivery_assignments_info,
11251 assignment_rowid,
11252 l_delivery_assignment_id,
11253 l_cr_assg_status
11254 );
11255
11256 -- Bug 3724578 : Return back to the caller if any error occurs
11257 -- while creating the delivery detail assignments
11258 --- Message will be set in create_delivery_assignments
11259 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
11260 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
11261 ) THEN
11262 x_return_status := l_cr_assg_status;
11263 return;
11264 END IF;
11265
11266 -- K: MDC: We need to create consolidation records if necessary.
11267
11268 IF (p_unassign_flag = 'N') AND (p_old_delivery_detail_rec.wda_type = 'C') THEN
11269
11270 l_delivery_assignments_info.parent_delivery_id := p_old_delivery_detail_rec.parent_delivery_id;
11271 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
11272 l_delivery_assignments_info.type := 'C';
11273
11274 wsh_delivery_details_pkg.create_delivery_assignments(
11275 l_delivery_assignments_info,
11276 assignment_rowid,
11277 l_delivery_assignment_id,
11278 l_cr_assg_status
11279 );
11280
11281 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
11282 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
11283 ) THEN
11284 x_return_status := l_cr_assg_status;
11285 return;
11286 END IF;
11287
11288 END IF;
11289
11290
11291
11292 /*2442099*/
11293 Log_Exceptions(p_old_delivery_detail_rec.delivery_detail_id,l_new_delivery_detail_id,l_delivery_assignments_info.delivery_id,l_action);
11294
11295 /* NC - Added the following for OPM BUG#1675561 */
11296 /* LG BUG#:2005977 */
11297 /* LG new */
11298
11299 /* HW OPMCONV - Removed branching
11300 /* Bug 2177410, also update net_weight and volume of original delivery detail
11301 because non item does not use WSH_WV_UTILS.Detail_Weight_Volume to
11302 adjust the net_weight and volume */
11303
11304 x_split_detail_id := l_new_delivery_detail_id;
11305
11306 IF l_debug_on THEN
11307 WSH_DEBUG_SV.logmsg(l_module_name, 'Before Update wsh_delivery_details');
11308 WSH_DEBUG_SV.log(l_module_name, 'serial_number',l_updated_delivery_detail_rec.serial_number);
11309 WSH_DEBUG_SV.log(l_module_name, 'to_serial_number',l_updated_delivery_detail_rec.to_serial_number);
11310 WSH_DEBUG_SV.log(l_module_name, 'transaction_temp_id',l_updated_delivery_detail_rec.transaction_temp_id);
11311 WSH_DEBUG_SV.log(l_module_name, ' l_original_req_qty ',l_original_req_qty);
11312 WSH_DEBUG_SV.log(l_module_name, ' l_original_req_qty2 ',l_original_req_qty2);
11313 WSH_DEBUG_SV.log(l_module_name, ' l_original_picked_qty ',l_original_picked_qty);
11314 WSH_DEBUG_SV.log(l_module_name, ' l_original_picked_qty2 ',l_original_picked_qty2);
11315 WSH_DEBUG_SV.log(l_module_name, ' l_original_shipped_qty ',l_original_shipped_qty);
11316 WSH_DEBUG_SV.log(l_module_name, ' l_original_shipped_qty2 ',l_original_shipped_qty2);
11317 WSH_DEBUG_SV.log(l_module_name, ' l_original_recvd_qty ',l_original_recvd_qty);
11318 WSH_DEBUG_SV.log(l_module_name, ' l_original_recvd_qty2 ',l_original_recvd_qty2);--
11319 WSH_DEBUG_SV.log(l_module_name, ' l_original_rtv_qty ',l_original_rtv_qty);
11320 WSH_DEBUG_SV.log(l_module_name, ' l_original_rtv_qty2 ',l_original_rtv_qty2);
11321 WSH_DEBUG_SV.log(l_module_name, ' l_original_cc_qty ',l_original_cc_qty);
11322 WSH_DEBUG_SV.log(l_module_name, ' l_original_cc_qty2 ',l_original_cc_qty2);
11323 END IF;
11324
11325 UPDATE wsh_delivery_details
11326 SET requested_quantity = l_original_req_qty, -- J-IB-NPARIKH, GREATEST(requested_quantity - l_delivery_details_info.requested_quantity, 0),
11327 requested_quantity2 = l_original_req_qty2, -- J-IB-NPARIKH, GREATEST(requested_quantity2 - l_qty2, 0),
11328 picked_quantity = l_original_picked_qty, -- J-IB-NPARIKH, picked_quantity - p_quantity_to_split,
11329 picked_quantity2 = l_original_picked_qty2, -- J-IB-NPARIKH, picked_quantity2 - nvl(l_qty2,l_new_pick_qty2),
11330 shipped_quantity = l_original_shipped_qty,
11331 shipped_quantity2 = l_original_shipped_qty2,
11332 received_quantity = l_original_recvd_qty, -- J-IB-NPARIKH
11333 received_quantity2 = l_original_recvd_qty2, -- J-IB-NPARIKH
11334 --returned_quantity = l_original_rtv_qty, -- J-IB-NPARIKH
11335 --returned_quantity2 = l_original_rtv_qty2, -- J-IB-NPARIKH
11336 cycle_count_quantity = l_original_cc_qty,
11337 cycle_count_quantity2 = l_original_cc_qty2,
11338 serial_number = decode(l_updated_delivery_detail_rec.serial_number,FND_API.G_MISS_CHAR,NULL,
11339 NULL,serial_number,l_updated_delivery_detail_rec.serial_number),
11340 to_serial_number = decode(l_updated_delivery_detail_rec.to_serial_number,FND_API.G_MISS_CHAR,NULL,
11341 NULL,to_serial_number,l_updated_delivery_detail_rec.to_serial_number),
11342 transaction_temp_id = decode(l_updated_delivery_detail_rec.transaction_temp_id, FND_API.G_MISS_NUM,NULL,
11343 NULL,transaction_temp_id,l_updated_delivery_detail_rec.transaction_temp_id),
11344 -- J: W/V Changes
11345 gross_weight = gross_weight - l_total_gross_wt,
11346 net_weight = net_weight - l_total_net_wt,
11347 volume = volume - l_total_vol,
11348 -- End J: W/V Changes
11349 last_update_date = SYSDATE,
11350 last_updated_by = FND_GLOBAL.USER_ID,
11351 last_update_login = FND_GLOBAL.LOGIN_ID
11352 WHERE delivery_detail_id = p_old_delivery_detail_rec.delivery_detail_id;
11353
11354 -- DBI Project
11355 -- Update of wsh_delivery_details where requested_quantity/released_status
11356 -- are changed, call DBI API after the update.
11357 -- This API will also check for DBI Installed or not
11358 IF l_debug_on THEN
11359 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail id-',p_old_delivery_detail_rec.delivery_detail_id);
11360 END IF;
11361 l_detail_tab(1) := p_old_delivery_detail_rec.delivery_detail_id;
11362 WSH_INTEGRATION.DBI_Update_Detail_Log
11363 (p_delivery_detail_id_tab => l_detail_tab,
11364 p_dml_type => 'UPDATE',
11365 x_return_status => l_dbi_rs);
11366
11367 IF l_debug_on THEN
11368 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
11369 END IF;
11370 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
11371 x_return_status := l_dbi_rs;
11372 -- just pass this return status to caller API
11373 IF l_debug_on THEN
11374 WSH_DEBUG_SV.pop(l_module_name);
11375 END IF;
11376 return;
11377 END IF;
11378 -- End of Code for DBI Project
11379 --
11380 -- bug # 7580785 : W/V should be populated on delivery.
11381 IF l_debug_on THEN
11382 WSH_DEBUG_SV.log(l_module_name, 'l_upd_wv_on_split_stg_dd',l_upd_wv_on_split_stg_dd);
11383 END IF;
11384 IF (l_upd_wv_on_split_stg_dd = 'Y') THEN
11385 --{
11386 IF l_debug_on THEN
11387 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
11388 END IF;
11389 WSH_WV_UTILS.DD_WV_Post_Process(
11390 p_delivery_detail_id => l_new_delivery_detail_id,
11391 p_diff_gross_wt => l_split_weight,
11392 p_diff_net_wt => l_split_weight,
11393 p_diff_fill_volume => NULL,
11394 p_diff_volume => l_split_volume,
11395 x_return_status => l_split_return_status);
11396 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
11397 RAISE new_det_wt_vol_failed;
11398 END IF;
11399 --}
11400 END IF;
11401 -- Bug # 7580785 : end
11402 --
11403 -- J: W/V Changes
11404 -- Decrement the DD W/V from parent if p_unassign_flag is 'Y'
11405 IF (p_unassign_flag = 'Y') THEN
11406 IF l_debug_on THEN
11407 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
11408 END IF;
11409 --
11410 WSH_WV_UTILS.DD_WV_Post_Process(
11411 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
11412 p_diff_gross_wt => -1 * l_total_gross_wt,
11413 p_diff_net_wt => -1 * l_total_net_wt,
11414 p_diff_fill_volume => -1 * l_total_vol,
11415 x_return_status => l_return_status);
11416
11417 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
11418 --
11419 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11420 WSH_UTIL_CORE.Add_Message(x_return_status);
11421 IF l_debug_on THEN
11422 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
11423 WSH_DEBUG_SV.pop(l_module_name);
11424 END IF;
11425 return;
11426 END IF;
11427 END IF;
11428
11429 --
11430 IF l_debug_on THEN
11431 WSH_DEBUG_SV.pop(l_module_name);
11432 END IF;
11433 --
11434 EXCEPTION
11435 -- HW OPMCONV. Removed OPM exception
11436
11437 WHEN old_det_wt_vol_failed THEN
11438 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11439 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
11440 FND_MESSAGE.SET_TOKEN('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
11441 wsh_util_core.add_message(x_return_status,l_module_name);
11442 --
11443 IF l_debug_on THEN
11444 WSH_DEBUG_SV.logmsg(l_module_name,'OLD_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11445 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OLD_DET_WT_VOL_FAILED');
11446 END IF;
11447 --
11448 WHEN new_det_wt_vol_failed THEN
11449 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11450 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
11451 FND_MESSAGE.SET_TOKEN('DETAIL_ID', l_new_DELIVERY_DETAIL_ID);
11452 wsh_util_core.add_message(x_return_status,l_module_name);
11453 --
11454 IF l_debug_on THEN
11455 WSH_DEBUG_SV.logmsg(l_module_name,'NEW_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11456 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEW_DET_WT_VOL_FAILED');
11457 END IF;
11458 --
11459 WHEN WSH_SN_SPLIT_ERR THEN
11460 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11461 fnd_message.set_name('WSH', 'WSH_SN_SPLIT_ERR');
11462 wsh_util_core.add_message(x_return_status,l_module_name);
11463 --
11464 IF l_debug_on THEN
11465 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11466 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SN_SPLIT_ERR');
11467 END IF;
11468 --
11469 WHEN WSH_CREATE_DET_ERR THEN
11470 x_return_status := l_cr_dt_status;
11471 IF l_debug_on THEN
11472 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11473 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DET_ERR');
11474 END IF;
11475
11476 WHEN others THEN
11477 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11478 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DETAIL_INT',l_module_name);
11479 --
11480 IF l_debug_on THEN
11481 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11482 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11483 END IF;
11484 --
11485 END SPLIT_DETAIL_INT;
11486
11487 /*****************************************************
11488 ----- SPLIT_SERIAL_NUMBERS_INT api
11489 *****************************************************/
11490
11491 PROCEDURE Split_Serial_Numbers_INT(
11492 x_old_detail_rec IN OUT NOCOPY SplitDetailRecType,
11493 x_new_delivery_detail_rec IN OUT NOCOPY WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type,
11494 p_old_shipped_quantity IN NUMBER,
11495 p_new_shipped_quantity IN NUMBER,
11496 x_return_status OUT NOCOPY VARCHAR2) IS
11497
11498 l_ser_qty NUMBER;
11499
11500 l_real_serial_prefix WSH_DELIVERY_DETAILS.SERIAL_NUMBER%TYPE;
11501 l_prefix_length NUMBER;
11502 l_fm_numeric NUMBER;
11503 l_to_numeric NUMBER;
11504 l_range_count NUMBER;
11505 l_qty_to_split NUMBER;
11506 l_new_sn WSH_DELIVERY_DETAILS.SERIAL_NUMBER%TYPE;
11507 l_new_to_sn WSH_DELIVERY_DETAILS.TO_SERIAL_NUMBER%TYPE;
11508 l_old_to_sn WSH_DELIVERY_DETAILS.TO_SERIAL_NUMBER%TYPE;
11509 l_transaction_temp_id NUMBER := NULL;
11510 l_success NUMBER;
11511
11512 -- Bug 3782838
11513 CURSOR c_sn_ranges(x_tt_id IN NUMBER) IS
11514 SELECT msnt.rowid,
11515 msnt.transaction_temp_id,
11516 msnt.fm_serial_number,
11517 msnt.to_serial_number,
11518 msnt.attribute_category,
11519 msnt.attribute1,
11520 msnt.attribute2,
11521 msnt.attribute3,
11522 msnt.attribute4,
11523 msnt.attribute5,
11524 msnt.attribute6,
11525 msnt.attribute7,
11526 msnt.attribute8,
11527 msnt.attribute9,
11528 msnt.attribute10,
11529 msnt.attribute11,
11530 msnt.attribute12,
11531 msnt.attribute13,
11532 msnt.attribute14,
11533 msnt.attribute15,
11534 msnt.dff_updated_flag
11535 FROM mtl_serial_numbers_temp msnt
11536 WHERE msnt.transaction_temp_id = x_tt_id
11537 ORDER BY msnt.fm_serial_number DESC;
11538
11539 CURSOR c_temp_id IS
11540 select mtl_material_transactions_s.nextval
11541 from dual;
11542
11543 --
11544 l_debug_on BOOLEAN;
11545 --
11546 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_SERIAL_NUMBERS_INT';
11547 --
11548 BEGIN
11549
11550 --
11551 --
11552 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11553 --
11554 IF l_debug_on IS NULL
11555 THEN
11556 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11557 END IF;
11558 --
11559 IF l_debug_on THEN
11560 WSH_DEBUG_SV.push(l_module_name);
11561 --
11562 WSH_DEBUG_SV.log(l_module_name,'P_OLD_SHIPPED_QUANTITY',P_OLD_SHIPPED_QUANTITY);
11563 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SHIPPED_QUANTITY',P_NEW_SHIPPED_QUANTITY);
11564 WSH_DEBUG_SV.log(l_module_name,'old serial_number',
11565 x_old_detail_rec.serial_number);
11566 WSH_DEBUG_SV.log(l_module_name,'old to_serial_number',
11567 x_old_detail_rec.to_serial_number);
11568 WSH_DEBUG_SV.log(l_module_name,'old transaction_temp_id',
11569 x_old_detail_rec.transaction_temp_id);
11570 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity',
11571 x_old_detail_rec.shipped_quantity);
11572 WSH_DEBUG_SV.log(l_module_name,'old delivery_detail_id',
11573 x_old_detail_rec.delivery_detail_id);
11574 WSH_DEBUG_SV.log(l_module_name,'old organization_id',
11575 x_old_detail_rec.organization_id);
11576 WSH_DEBUG_SV.log(l_module_name,'old inventory_item_id',
11577 x_old_detail_rec.inventory_item_id);
11578
11579 END IF;
11580 --
11581 IF p_old_shipped_quantity = 0 THEN
11582 -- new delivery line has the full shipped quantity and gets all serial number info
11583
11584 x_new_delivery_detail_rec.serial_number := x_old_detail_rec.serial_number;
11585 x_new_delivery_detail_rec.to_serial_number := x_old_detail_rec.to_serial_number;
11586 x_new_delivery_detail_rec.transaction_temp_id := x_old_detail_rec.transaction_temp_id;
11587
11588 x_old_detail_rec.serial_number := FND_API.G_MISS_CHAR;
11589 x_old_detail_rec.to_serial_number := FND_API.G_MISS_CHAR;
11590 x_old_detail_rec.transaction_temp_id := FND_API.G_MISS_NUM;
11591
11592 ELSIF p_old_shipped_quantity < x_old_detail_rec.shipped_quantity THEN
11593 -- we are reducing old shipped quantity
11594
11595 IF x_old_detail_rec.transaction_temp_id IS NULL THEN
11596
11597 IF x_old_detail_rec.to_serial_number IS NOT NULL THEN
11598
11599 -- we have one range SERIAL_NUMBER - TO_SERIAL_NUMBER to split
11600 l_real_serial_prefix := RTRIM(x_old_detail_rec.serial_number,
11601 '0123456789');
11602 l_prefix_length := NVL(LENGTH(l_real_serial_prefix), 0);
11603 l_fm_numeric := TO_NUMBER(SUBSTR(x_old_detail_rec.serial_number,
11604 l_prefix_length + 1));
11605 l_to_numeric := TO_NUMBER(SUBSTR(x_old_detail_rec.to_serial_number,
11606 l_prefix_length + 1));
11607 l_range_count := l_to_numeric - l_fm_numeric + 1;
11608
11609 IF l_range_count > p_old_shipped_quantity THEN
11610 -- we need to split the serial number range.
11611 l_qty_to_split := l_range_count - p_old_shipped_quantity;
11612
11613 l_new_to_sn := x_old_detail_rec.to_serial_number;
11614 l_old_to_sn := l_real_serial_prefix
11615 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split),
11616 LENGTH(x_old_detail_rec.serial_number) - l_prefix_length,
11617 '0');
11618
11619 l_new_sn := l_real_serial_prefix
11620 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split+1),
11621 LENGTH(x_old_detail_rec.serial_number) - l_prefix_length,
11622 '0');
11623
11624 -- compress range of same serial numbers to individual serial number
11625 IF l_old_to_sn = x_old_detail_rec.serial_number THEN
11626 l_old_to_sn := FND_API.G_MISS_CHAR;
11627 END IF;
11628 IF l_new_to_sn = l_new_sn THEN
11629 l_new_to_sn := FND_API.G_MISS_CHAR;
11630 END IF;
11631
11632 x_old_detail_rec.to_serial_number := l_old_to_sn;
11633 x_new_delivery_detail_rec.serial_number := l_new_sn;
11634 x_new_delivery_detail_rec.to_serial_number := l_new_to_sn;
11635
11636 END IF; -- l_range_count > p_old_shipped_quantity
11637 IF l_debug_on THEN
11638 WSH_DEBUG_SV.log(l_module_name,'serial_number',
11639 x_new_delivery_detail_rec.serial_number);
11640 WSH_DEBUG_SV.log(l_module_name,'to_serial_number',
11641 x_new_delivery_detail_rec.to_serial_number);
11642 END IF;
11643
11644 END IF; -- x_old_detail_rec.to_serail_number IS NULL
11645
11646 ELSE
11647
11648 -- we have at least one record in MTL_SERIAL_NUMBERS_TEMP
11649 --
11650 IF l_debug_on THEN
11651 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_SERIAL_QTY',WSH_DEBUG_SV.C_PROC_LEVEL);
11652 END IF;
11653 --
11654 l_ser_qty := WSH_DELIVERY_DETAILS_INV.Get_Serial_Qty(
11655 p_organization_id => x_old_detail_rec.organization_id,
11656 p_delivery_detail_id => x_old_detail_rec.delivery_detail_id);
11657 l_qty_to_split := l_ser_qty - p_old_shipped_quantity;
11658 --
11659 IF l_debug_on THEN
11660 WSH_DEBUG_SV.log(l_module_name,'L_QTY_TO_SPLIT',l_qty_to_split);
11661 END IF;
11662 --
11663
11664 IF l_qty_to_split >= 1 THEN
11665
11666 IF p_new_shipped_quantity >= 1 THEN -- Bug 3782838, Generate id for Single also
11667 --IF l_qty_to_split > 1 THEN
11668 -- more than one serial number, we need new transaction_temp_id
11669 OPEN c_temp_id;
11670 FETCH c_temp_id INTO l_transaction_temp_id;
11671 IF c_temp_id%NOTFOUND THEN
11672 CLOSE c_temp_id;
11673 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11674 --
11675 IF l_debug_on THEN
11676 WSH_DEBUG_SV.log(l_module_name,'Return Status is error',x_return_status);
11677 WSH_DEBUG_SV.pop(l_module_name);
11678 END IF;
11679 --
11680 return;
11681 END IF;
11682 CLOSE c_temp_id;
11683 IF l_debug_on THEN
11684 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',
11685 l_transaction_temp_id);
11686 END IF;
11687 END IF;
11688 x_new_delivery_detail_rec.transaction_temp_id := nvl(l_transaction_temp_id,FND_API.G_MISS_NUM);
11689
11690 FOR c IN c_sn_ranges(x_old_detail_rec.transaction_temp_id) LOOP
11691
11692 -- Bug 3782838 : Retain transaction_temp_id for single serial number
11693 IF (l_qty_to_split <= 0) THEN
11694 EXIT; -- finished with splitting serial numbers
11695 END IF;
11696 IF l_debug_on THEN
11697 WSH_DEBUG_SV.log(l_module_name,'c.to_serial_number',
11698 c.to_serial_number);
11699 WSH_DEBUG_SV.log(l_module_name,'c.fm_serial_number',
11700 c.fm_serial_number);
11701 END IF;
11702
11703 -- OR condition added for bug 4424259, making l_range_count = 1 if from and to serial numbers are same.
11704 IF c.to_serial_number IS NULL OR ( c.fm_serial_number = c.to_serial_number ) THEN
11705 l_range_count := 1;
11706 ELSE
11707 -- serial number range
11708 l_real_serial_prefix := RTRIM(c.fm_serial_number,
11709 '0123456789');
11710 l_prefix_length := NVL(LENGTH(l_real_serial_prefix), 0);
11711 l_fm_numeric := TO_NUMBER(SUBSTR(c.fm_serial_number,
11712 l_prefix_length + 1));
11713 l_to_numeric := TO_NUMBER(SUBSTR(c.to_serial_number,
11714 l_prefix_length + 1));
11715 l_range_count := l_to_numeric - l_fm_numeric + 1;
11716 END IF; -- c.to_serial_number IS NULL
11717 IF l_debug_on THEN
11718 WSH_DEBUG_SV.log(l_module_name,'l_range_count',
11719 l_range_count);
11720 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_split',
11721 l_qty_to_split);
11722 END IF;
11723
11724 IF l_range_count > l_qty_to_split THEN
11725
11726 l_new_to_sn := c.to_serial_number;
11727 l_old_to_sn := l_real_serial_prefix
11728 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split),
11729 LENGTH(c.fm_serial_number) - l_prefix_length,
11730 '0');
11731 l_new_sn := l_real_serial_prefix
11732 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split+1),
11733 LENGTH(c.fm_serial_number) - l_prefix_length,
11734 '0');
11735
11736 IF p_old_shipped_quantity >= 1 THEN
11737 -- Bug 3782838 : Retain id for single serial number
11738 -- update record only if old delivery line still has at least 1 to ship.
11739 IF l_debug_on THEN
11740 WSH_DEBUG_SV.log(l_module_name,'l_old_to_sn',l_old_to_sn);
11741 END IF;
11742 UPDATE mtl_serial_numbers_temp
11743 SET to_serial_number = l_old_to_sn,
11744 serial_prefix = TO_CHAR(l_range_count - l_qty_to_split),
11745 last_update_date = SYSDATE,
11746 last_updated_by = FND_GLOBAL.USER_ID,
11747 last_update_login = FND_GLOBAL.LOGIN_ID
11748 WHERE rowid = c.rowid;
11749 END IF;
11750 IF l_debug_on THEN
11751 WSH_DEBUG_SV.log(l_module_name,
11752 'inserting into mtl_serial_numbers_temp'
11753 ,l_transaction_temp_id);
11754 END IF;
11755
11756 -- Changes for 3782838
11757 IF l_transaction_temp_id IS NOT NULL THEN
11758 INSERT INTO mtl_serial_numbers_temp
11759 (TRANSACTION_TEMP_ID,
11760 LAST_UPDATE_DATE,
11761 LAST_UPDATED_BY,
11762 LAST_UPDATE_LOGIN,
11763 CREATION_DATE,
11764 CREATED_BY,
11765 FM_SERIAL_NUMBER,
11766 TO_SERIAL_NUMBER,
11767 SERIAL_PREFIX,
11768 ATTRIBUTE_CATEGORY,
11769 ATTRIBUTE1,
11770 ATTRIBUTE2,
11771 ATTRIBUTE3,
11772 ATTRIBUTE4,
11773 ATTRIBUTE5,
11774 ATTRIBUTE6,
11775 ATTRIBUTE7,
11776 ATTRIBUTE8,
11777 ATTRIBUTE9,
11778 ATTRIBUTE10,
11779 ATTRIBUTE11,
11780 ATTRIBUTE12,
11781 ATTRIBUTE13,
11782 ATTRIBUTE14,
11783 ATTRIBUTE15,
11784 DFF_UPDATED_FLAG)
11785 VALUES
11786 (l_transaction_temp_id,
11787 SYSDATE,
11788 FND_GLOBAL.USER_ID,
11789 FND_GLOBAL.LOGIN_ID,
11790 SYSDATE,
11791 FND_GLOBAL.USER_ID,
11792 l_new_sn,
11793 l_new_to_sn,
11794 TO_CHAR(l_qty_to_split),
11795 c.attribute_category,
11796 c.attribute1,
11797 c.attribute2,
11798 c.attribute3,
11799 c.attribute4,
11800 c.attribute5,
11801 c.attribute6,
11802 c.attribute7,
11803 c.attribute8,
11804 c.attribute9,
11805 c.attribute10,
11806 c.attribute11,
11807 c.attribute12,
11808 c.attribute13,
11809 c.attribute14,
11810 c.attribute15,
11811 c.dff_updated_flag
11812 );
11813 -- End of changes for 3782838
11814
11815 -- bug 2740681
11816 IF l_debug_on THEN
11817 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_Unmark_Serial');
11818 WSH_DEBUG_SV.log(l_module_name,'l_new_sn,l_new_to_sn,inventory_item_id', l_new_sn
11819 ||','||l_new_to_sn
11820 ||','||x_old_detail_rec.inventory_item_id);
11821 END IF;
11822 Serial_Check.Inv_Unmark_Serial(
11823 l_new_sn,
11824 l_new_to_sn,
11825 NULL,
11826 NULL,
11827 NULL,
11828 NULL,
11829 x_old_detail_rec.inventory_item_id);
11830
11831 IF l_debug_on THEN
11832 WSH_DEBUG_SV.logmsg(l_module_name,'After Calling Serial_Check.Inv_Unmark_Serial');
11833 END IF;
11834 IF l_debug_on THEN
11835 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_mark_Serial');
11836 WSH_DEBUG_SV.log(l_module_name,'l_new_sn',l_new_sn);
11837 WSH_DEBUG_SV.log(l_module_name,'l_new_to_sn',l_new_to_sn);
11838 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',x_old_detail_rec.inventory_item_id);
11839 WSH_DEBUG_SV.log(l_module_name,'organization_id',x_old_detail_rec.organization_id);
11840 WSH_DEBUG_SV.log(l_module_name,'source_header_id',x_old_detail_rec.source_header_id);
11841 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',l_transaction_temp_id);
11842 WSH_DEBUG_SV.log(l_module_name,'source_line_id',x_old_detail_rec.source_line_id);
11843 END IF;
11844 --RTV Changes
11845 IF x_old_detail_rec.source_code = 'RTV' THEN
11846 Serial_Check.Inv_Mark_Serial(
11847 l_new_sn,
11848 l_new_to_sn,
11849 x_old_detail_rec.inventory_item_id,
11850 x_old_detail_rec.organization_id,
11851 x_old_detail_rec.source_header_id,
11852 l_transaction_temp_id,
11853 x_old_detail_rec.source_line_id,
11854 l_success);
11855 IF l_debug_on THEN
11856 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11857 END IF;
11858 ELSE
11859 Serial_Check.Inv_Mark_Serial(
11860 l_new_sn,
11861 l_new_to_sn,
11862 x_old_detail_rec.inventory_item_id,
11863 x_old_detail_rec.organization_id,
11864 l_transaction_temp_id,
11865 l_transaction_temp_id,
11866 l_transaction_temp_id,
11867 l_success);
11868 IF l_debug_on THEN
11869 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11870 END IF;
11871 END IF;
11872 --RTV Changes
11873 IF l_success < 0 THEN
11874 FND_MESSAGE.SET_NAME('WSH','WSH_SER_RANGE_MK_ERROR');
11875 FND_MESSAGE.SET_TOKEN('FM_SERIAL',l_new_sn);
11876 FND_MESSAGE.SET_TOKEN('TO_SERIAL',l_new_to_sn);
11877 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11878 WSH_UTIL_CORE.Add_Message(x_return_status);
11879 END IF;
11880 -- bug 2740681
11881
11882 ELSE
11883 x_new_delivery_detail_rec.serial_number := c.to_serial_number;
11884 END IF;
11885
11886 l_qty_to_split := 0;
11887
11888 IF l_debug_on THEN
11889 WSH_DEBUG_SV.log(l_module_name,'new serial_number',
11890 x_new_delivery_detail_rec.serial_number);
11891 END IF;
11892 ELSE
11893 IF l_debug_on THEN
11894 WSH_DEBUG_SV.logmsg(l_module_name,'Split qty is grater than range');
11895 END IF;
11896
11897 IF l_transaction_temp_id IS NOT NULL THEN
11898 IF l_debug_on THEN
11899 WSH_DEBUG_SV.log(l_module_name,
11900 'Updating mtl_serial_numbers_temp',
11901 l_transaction_temp_id);
11902 END IF;
11903 -- we need to assign the full serial number range to the new line
11904 UPDATE mtl_serial_numbers_temp
11905 SET transaction_temp_id = l_transaction_temp_id,
11906 last_update_date = SYSDATE,
11907 last_updated_by = FND_GLOBAL.USER_ID,
11908 last_update_login = FND_GLOBAL.LOGIN_ID
11909 WHERE rowid = c.rowid;
11910
11911 --Bug 2740681
11912 IF l_debug_on THEN
11913 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_Unmark_Serial');
11914 WSH_DEBUG_SV.log(l_module_name,'fm_serial_number,to_serial_number,inventory_item_id', c.fm_serial_number ||','||c.to_serial_number ||','||x_old_detail_rec.inventory_item_id);
11915 END IF;
11916 Serial_Check.Inv_Unmark_Serial(
11917 c.fm_serial_number,
11918 c.to_serial_number,
11919 NULL,
11920 NULL,
11921 NULL,
11922 NULL,
11923 x_old_detail_rec.inventory_item_id);
11924 IF l_debug_on THEN
11925 WSH_DEBUG_SV.logmsg(l_module_name,'After Calling Serial_Check.Inv_Unmark_Serial');
11926 END IF;
11927 IF l_debug_on THEN
11928 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_mark_Serial');
11929 WSH_DEBUG_SV.log(l_module_name,'fm_serial_number',c.fm_serial_number);
11930 WSH_DEBUG_SV.log(l_module_name,'to_serial_number',c.to_serial_number);
11931 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',x_old_detail_rec.inventory_item_id);
11932 WSH_DEBUG_SV.log(l_module_name,'organization_id',x_old_detail_rec.organization_id);
11933 WSH_DEBUG_SV.log(l_module_name,'source_header_id',x_old_detail_rec.source_header_id);
11934 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',l_transaction_temp_id);
11935 WSH_DEBUG_SV.log(l_module_name,'source_line_id',x_old_detail_rec.source_line_id);
11936 END IF;
11937 --RTV Changes
11938 IF x_old_detail_rec.source_code = 'RTV' THEN
11939 Serial_Check.Inv_Mark_Serial(
11940 c.fm_serial_number,
11941 c.to_serial_number,
11942 x_old_detail_rec.inventory_item_id,
11943 x_old_detail_rec.organization_id,
11944 x_old_detail_rec.source_header_id,
11945 l_transaction_temp_id,
11946 x_old_detail_rec.source_line_id,
11947 l_success);
11948 IF l_debug_on THEN
11949 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11950 END IF;
11951 ELSE
11952 Serial_Check.Inv_Mark_Serial(
11953 c.fm_serial_number,
11954 c.to_serial_number,
11955 x_old_detail_rec.inventory_item_id,
11956 x_old_detail_rec.organization_id,
11957 l_transaction_temp_id,
11958 l_transaction_temp_id,
11959 l_transaction_temp_id,
11960 l_success);
11961 IF l_debug_on THEN
11962 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11963 END IF;
11964 END IF;
11965 --RTV changes
11966 IF l_success < 0 THEN
11967 FND_MESSAGE.SET_NAME('WSH','WSH_SER_RANGE_MK_ERROR');
11968 FND_MESSAGE.SET_TOKEN('FM_SERIAL', c.fm_serial_number);
11969 FND_MESSAGE.SET_TOKEN('TO_SERIAL', c.to_serial_number);
11970 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11971 WSH_UTIL_CORE.Add_Message(x_return_status);
11972 END IF;
11973 --bug 2740681
11974 ELSE
11975 -- we need to remove this serial number range (which has count of 1)
11976 x_new_delivery_detail_rec.serial_number := c.fm_serial_number;
11977 DELETE mtl_serial_numbers_temp
11978 WHERE rowid = c.rowid;
11979 END IF;
11980
11981 l_qty_to_split := l_qty_to_split - l_range_count;
11982
11983 END IF; -- l_range_count > l_qty_to_split
11984 IF l_debug_on THEN
11985 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_split',
11986 l_qty_to_split);
11987 END IF;
11988
11989 IF (l_qty_to_split <= 0) AND (p_old_shipped_quantity > 1) THEN
11990 -- finished with splitting serial numbers
11991 EXIT;
11992 END IF;
11993
11994 END LOOP; -- c_sn_ranges
11995
11996 END IF; -- l_qty_to_split >= 1
11997
11998 END IF; -- x_old_detail_rec.transaction_temp_id IS NULL
11999
12000 END IF; -- p_old_shipped_quantity < x_old_detail_rec.shipped_quantity
12001
12002 --
12003 IF l_debug_on THEN
12004 WSH_DEBUG_SV.pop(l_module_name);
12005 END IF;
12006 --
12007 EXCEPTION
12008 WHEN others THEN
12009 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12010 wsh_util_core.default_handler('WSH_USA_ACTIONS_PVT.SPLIT_SERIAL_NUMBERS_INT',l_module_name);
12011
12012 --
12013 IF l_debug_on THEN
12014 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12015 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12016 END IF;
12017 --
12018 END Split_Serial_Numbers_INT;
12019
12020 -- THIS PROCEDURE IS OBSOLETE
12021 --
12022 -- Name
12023 -- Explode_Delivery_Details
12024 -- Purpose
12025 -- Takes individual lines FROM MTL_SERIAL_NUMBERS_TEMP that
12026 -- are under serial number control and explodes them into multiple
12027 -- lines based on the serial numbers entered.
12028 --
12029 -- Bug 1752809: rewritten to explode into serial number ranges.
12030 -- This improves interface performance by minimizing
12031 -- number of delivery lines needed to interface serial numbers.
12032 --
12033 -- Arguments
12034 -- P_Delivery_Detail_Id FOR which IS under Serial number
12035 -- control and hence must do the explosion
12036 -- P_Return_Status
12037 --
12038 --
12039 PROCEDURE EXPLODE_DELIVERY_DETAILS(
12040 p_delivery_detail_id number,
12041 x_return_status out NOCOPY varchar2)
12042 IS
12043
12044 l_debug_on BOOLEAN;
12045 --
12046 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'EXPLODE_DELIVERY_DETAILS';
12047 --
12048 BEGIN
12049 --
12050 --
12051 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12052 --
12053 --
12054 END explode_delivery_Details;
12055
12056
12057 /*
12058 REM This API will unassign a line ( delivery_detail or container) from the Delivery and unapck it.
12059 REM If the unpack results in the container ( holding the line/container) becoming empty
12060 REM then it would unpack the container and unassign it from Delivery too.
12061 REM the unpack/unassign is done recursively, till all empty containers resulting from the initial
12062 REM unpacked line are unassigned/unpacked.
12063 REM If there is an empty container already packed inside another container, and did not
12064 REM become empty because of the current line was unpacked, those containers are left
12065 REM packed/assigned to the Delivery.
12066 */
12067 PROCEDURE unassign_unpack_empty_cont (
12068 p_ids_tobe_unassigned IN wsh_util_core.id_tab_type,
12069 p_validate_flag IN VARCHAR2,
12070 x_return_status OUT NOCOPY VARCHAR2
12071 )
12072 IS
12073
12074 CURSOR get_container(detail_id NUMBER) IS
12075 SELECT parent_delivery_detail_id,
12076 delivery_id -- Bug#3542095
12077 FROM wsh_delivery_assignments_v
12078 WHERE delivery_detail_id = detail_id;
12079
12080 CURSOR get_lines (cont_id NUMBER, detail_id NUMBER) IS
12081 SELECT delivery_detail_id
12082 FROM wsh_delivery_assignments_v
12083 WHERE parent_delivery_detail_id = cont_id
12084 AND delivery_detail_id <> detail_id;
12085
12086 l_parent_container_id wsh_util_core.id_tab_type ;
12087 l_delivery_id wsh_delivery_assignments_v.delivery_id%type;
12088 l_return_status VARCHAR2(1):=NULL ;
12089 l_line_id NUMBER := NULL;
12090
12091 -- K LPN CONV. rv
12092 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
12093 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
12094 l_msg_count NUMBER;
12095 l_msg_data VARCHAR2(32767);
12096 e_return_excp EXCEPTION;
12097
12098 cursor l_get_cnt_org_csr(p_detail_id IN NUMBER) is
12099 select organization_id,
12100 nvl(line_direction,'O')
12101 from wsh_delivery_details
12102 where delivery_detail_id = p_detail_id;
12103
12104 l_orgn_id NUMBER;
12105 l_line_dir VARCHAR2(10);
12106 l_wms_org VARCHAR2(10) := 'N';
12107 -- K LPN CONV. rv
12108
12109 --
12110 l_debug_on BOOLEAN;
12111 --
12112 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_UNPACK_EMPTY_CONT';
12113 --
12114
12115 BEGIN
12116
12117 --
12118 --
12119 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12120 --
12121 IF l_debug_on IS NULL
12122 THEN
12123 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12124 END IF;
12125 --
12126 IF l_debug_on THEN
12127 WSH_DEBUG_SV.push(l_module_name);
12128 --
12129 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
12130 END IF;
12131
12132 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12133
12134 IF ( p_ids_tobe_unassigned.COUNT = 0 ) THEN
12135 --
12136 IF l_debug_on THEN
12137 WSH_DEBUG_SV.pop(l_module_name);
12138 END IF;
12139 --
12140 RETURN;
12141 END IF;
12142
12143 FOR i in 1..p_ids_tobe_unassigned.COUNT LOOP
12144 IF l_debug_on THEN
12145 WSH_DEBUG_SV.log(l_module_name,'detail to be unassigned ',p_ids_tobe_unassigned(i));
12146 END IF;
12147 -- Get the parent container, if it exists
12148 OPEN get_container(p_ids_tobe_unassigned(i));
12149 FETCH get_container
12150 INTO l_parent_container_id(1)
12151 , l_delivery_id; -- Bug#3542095
12152 IF get_container%NOTFOUND THEN
12153 l_parent_container_id(1) := NULL;
12154 END IF;
12155 CLOSE get_container;
12156
12157 IF l_debug_on THEN
12158 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
12159 END IF;
12160
12161 -- Unassign the Line or Container
12162 -- because this
12163 wsh_delivery_details_actions.unassign_detail_from_delivery(
12164 p_detail_id => p_ids_tobe_unassigned(i),
12165 p_validate_flag => p_validate_flag,
12166 x_return_status => l_return_status
12167 );
12168
12169 --
12170 IF l_debug_on THEN
12171 WSH_DEBUG_SV.log(l_module_name, 'AFTER CALLING UNASSIGN_DETAIL_FROM_DELIVERY: ', L_RETURN_STATUS);
12172 END IF;
12173 --
12174 -- Check if the Parent Container is empty, if yes, recursivelly call this API
12175 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
12176 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_DET_ERROR');
12177 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id)); -- Bug#3542095
12178 FND_MESSAGE.SET_TOKEN('DET_NAME',p_ids_tobe_unassigned(i));
12179 x_return_status := l_return_status;
12180 WSH_UTIL_CORE.ADD_MESSAGE(x_return_status,l_module_name);
12181 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12182 --
12183 --IF l_debug_on THEN
12184 --WSH_DEBUG_SV.pop(l_module_name);
12185 --END IF;
12186 --
12187 --RETURN; LPN CONV. rv
12188 raise e_return_excp; -- LPN CONV. rv
12189 END IF;
12190 END IF;
12191
12192 IF l_parent_container_id(1) IS NOT NULL THEN
12193 OPEN get_lines(l_parent_container_id(1), p_ids_tobe_unassigned(i));
12194 FETCH get_lines INTO l_line_id;
12195 IF get_lines%NOTFOUND THEN
12196 l_line_id := NULL;
12197 END IF;
12198 CLOSE get_lines;
12199
12200 IF l_debug_on THEN
12201 WSH_DEBUG_SV.log(l_module_name, 'L_LINE_ID ', L_LINE_ID);
12202 END IF;
12203
12204 IF l_line_id IS NULL THEN
12205 IF l_debug_on THEN
12206 WSH_DEBUG_SV.log(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT
12207 recursively for ',l_parent_container_id(1));
12208 END IF;
12209
12210 -- lpn conv
12211 -- This needs to be done so that the WMS enabled LPNs that become empty
12212 -- need to be deleted at a later stage through Confirm_Delivery
12213 open l_get_cnt_org_csr(l_parent_container_id(1));
12214 fetch l_get_cnt_org_csr into l_orgn_id, l_line_dir;
12215 close l_get_cnt_org_csr;
12216 l_wms_org := wsh_util_validate.check_wms_org(l_orgn_id);
12217 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
12218 AND l_line_dir IN ('O', 'IO')
12219 AND l_wms_org = 'Y' THEN
12220 --{
12221 insert into wsh_wms_sync_tmp
12222 (delivery_detail_id,
12223 operation_type,
12224 creation_date)
12225 values (l_parent_container_id(1),
12226 'DELETE',
12227 WSH_WMS_LPN_GRP.G_HW_TIME_STAMP);
12228 --}
12229 END IF;
12230 -- lpn conv
12231
12232 unassign_unpack_empty_cont ( p_ids_tobe_unassigned => l_parent_container_id,
12233 p_validate_flag => p_validate_flag,
12234 x_return_status => l_return_status);
12235 IF l_debug_on THEN
12236 WSH_DEBUG_SV.log(l_module_name, 'After calling UNASSIGN_UNPACK_EMPTY_CONT: ', L_RETURN_STATUS);
12237 END IF;
12238 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
12239 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12240 x_return_status := l_return_status ;
12241 ELSIF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
12242 x_return_status := l_return_status ;
12243 END IF;
12244 END IF;
12245 IF x_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
12246 --IF l_debug_on THEN
12247 --WSH_DEBUG_SV.pop(l_module_name);
12248 --END IF;
12249 --RETURN; LPN CONV. rv
12250 raise e_return_excp; -- LPN CONV. rv
12251 END IF;
12252 END IF; -- end of l_line_id is null
12253
12254 END IF;
12255
12256 END LOOP;
12257
12258 --
12259 -- K LPN CONV. rv
12260 --
12261 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
12262 THEN
12263 --{
12264 IF l_debug_on THEN
12265 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
12266 END IF;
12267
12268 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
12269 (
12270 p_in_rec => l_lpn_in_sync_comm_rec,
12271 x_return_status => l_return_status,
12272 x_out_rec => l_lpn_out_sync_comm_rec
12273 );
12274 --
12275 --
12276 IF l_debug_on THEN
12277 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
12278 END IF;
12279 --
12280 --
12281 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
12282 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12283 x_return_status := l_return_status ;
12284 ELSIF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) and x_return_status <> WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12285 x_return_status := l_return_status ;
12286 END IF;
12287 END IF;
12288
12289 --}
12290 END IF;
12291 --
12292 -- K LPN CONV. rv
12293 --
12294 -- Added a pop as it was missing.
12295 IF l_debug_on THEN
12296 WSH_DEBUG_SV.pop(l_module_name);
12297 END IF;
12298
12299 EXCEPTION
12300 WHEN e_return_excp THEN
12301 --
12302 -- K LPN CONV. rv
12303 --
12304 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
12305 THEN
12306 --{
12307 IF l_debug_on THEN
12308 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
12309 END IF;
12310
12311 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
12312 (
12313 p_in_rec => l_lpn_in_sync_comm_rec,
12314 x_return_status => l_return_status,
12315 x_out_rec => l_lpn_out_sync_comm_rec
12316 );
12317 --
12318 --
12319 IF l_debug_on THEN
12320 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
12321 END IF;
12322 --
12323 --
12324 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR) AND x_return_status <> WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
12325 x_return_status := l_return_status;
12326 END IF;
12327 --
12328 --}
12329 END IF;
12330 --
12331 -- K LPN CONV. rv
12332 --
12333 IF l_debug_on THEN
12334 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:e_return_excp');
12335 END IF;
12336
12337 WHEN OTHERS THEN
12338 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.unassign_unpack_empty_cont');
12339 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12340 --
12341 IF l_debug_on THEN
12342 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12343 END IF;
12344 --
12345 --
12346 -- K LPN CONV. rv
12347 --
12348 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
12349 THEN
12350 --{
12351 IF l_debug_on THEN
12352 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',WSH_DEBUG_SV.C_PROC_LEVEL);
12353 END IF;
12354
12355 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
12356 (
12357 p_in_rec => l_lpn_in_sync_comm_rec,
12358 x_return_status => l_return_status,
12359 x_out_rec => l_lpn_out_sync_comm_rec
12360 );
12361 --
12362 --
12363 IF l_debug_on THEN
12364 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
12365 END IF;
12366 --
12367 --
12368 --}
12369 END IF;
12370 --
12371 -- K LPN CONV. rv
12372 --
12373 --
12374 -- Debug Statements
12375 --
12376 IF l_debug_on THEN
12377 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12378 END IF;
12379 --
12380
12381 END unassign_unpack_empty_cont;
12382
12383 /*2442099*/
12384
12385 PROCEDURE Log_Exceptions(p_old_delivery_detail_id IN NUMBER,
12386 p_new_delivery_detail_id IN NUMBER,
12387 p_delivery_id IN NUMBER,
12388 p_action IN VARCHAR2 DEFAULT NULL)
12389
12390 IS
12391
12392 cursor parent_del_exception is
12393 --Changed for BUG#3330869
12394 --SELECT *
12395 SELECT message,
12396 exception_name,
12397 trip_id,
12398 trip_name,
12399 trip_stop_id,
12400 delivery_id,
12401 delivery_name,
12402 delivery_assignment_id,
12403 container_name,
12404 inventory_item_id,
12405 lot_number,
12406 -- HW OPMCONV - No need for sublot_number
12407 -- sublot_number,
12408 revision,
12409 serial_number,
12410 unit_of_measure,
12411 unit_of_measure2,
12412 subinventory,
12413 locator_id,
12414 arrival_date,
12415 departure_date,
12416 error_message,
12417 attribute_category,
12418 attribute1,
12419 attribute2,
12420 attribute3,
12421 attribute4,
12422 attribute5,
12423 attribute6,
12424 attribute7,
12425 attribute8,
12426 attribute9,
12427 attribute10,
12428 attribute11,
12429 attribute12,
12430 attribute13,
12431 attribute14,
12432 attribute15,
12433 request_id,
12434 logged_at_location_id,
12435 logging_entity,
12436 logging_entity_id,
12437 exception_location_id,
12438 manually_logged,
12439 batch_id,
12440 status
12441 --select *
12442 from wsh_exceptions
12443 where delivery_detail_id = p_old_delivery_detail_id;
12444
12445 l_exception_return_status VARCHAR2(30);
12446 l_exception_msg_count NUMBER;
12447 l_exception_msg_data VARCHAR2(4000) := NULL;
12448 l_dummy_exception_id NUMBER;
12449 l_exception_error_message VARCHAR2(2000) := NULL;
12450 l_qty1 NUMBER;
12451 l_qty2 NUMBER;
12452 l_trip_id NUMBER;
12453 l_trip_name VARCHAR2(30);
12454 l_trip_stop_id NUMBER;
12455 l_delivery_id NUMBER;
12456 l_delivery_name VARCHAR2(30);
12457 l_departure_date DATE;
12458 l_arrival_date DATE;
12459 --
12460 l_debug_on BOOLEAN;
12461 --
12462 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'Log_Exceptions';
12463 --
12464
12465 BEGIN
12466 --
12467 --
12468 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12469 --
12470 IF l_debug_on IS NULL THEN
12471 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12472 END IF;
12473 --
12474 IF l_debug_on THEN
12475 WSH_DEBUG_SV.push(l_module_name);
12476 --
12477 WSH_DEBUG_SV.log(l_module_name,'P_OLD_DELIVERY_DETAIL_ID',P_OLD_DELIVERY_DETAIL_ID);
12478 WSH_DEBUG_SV.log(l_module_name,'P_NEW_DELIVERY_DETAIL_ID',P_NEW_DELIVERY_DETAIL_ID);
12479 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
12480 --
12481 END IF;
12482
12483 select requested_quantity,requested_quantity2 into l_qty1,l_qty2
12484 from wsh_delivery_details
12485 where delivery_detail_id = p_new_delivery_detail_id;
12486
12487 IF l_debug_on THEN
12488 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.LOG_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
12489 END IF;
12490 --
12491 FOR pexceptions in parent_del_exception
12492 LOOP
12493 IF p_delivery_id is NOT NULL THEN
12494 l_trip_id := pexceptions.trip_id;
12495 l_trip_name := pexceptions.trip_name;
12496 l_trip_stop_id := pexceptions.trip_stop_id;
12497 l_delivery_id := pexceptions.delivery_id;
12498 l_delivery_name := pexceptions.delivery_name;
12499 l_departure_date := pexceptions.departure_date;
12500 l_arrival_date := pexceptions.arrival_date;
12501 ELSE
12502 l_trip_id := NULL;
12503 l_trip_name := NULL;
12504 l_trip_stop_id := NULL;
12505 l_delivery_id := NULL;
12506 l_delivery_name := NULL;
12507 l_departure_date := NULL;
12508 l_arrival_date := NULL;
12509 END IF;
12510
12511 -- Bug 4481016,During Split, Exceptions will not be updated
12512 -- To ensure exceptions are logged against split delivery detail, its required
12513 -- to pass null to l_dummy_exception_id which is used to determine, when to INSERT
12514 -- and when to UPDATE exceptions
12515 IF l_debug_on THEN
12516 WSH_DEBUG_SV.log(l_module_name,'EXCEPTION NAME-',pexceptions.exception_name);
12517 WSH_DEBUG_SV.log(l_module_name,'p_action -',p_action);
12518
12519 END IF;
12520
12521 l_dummy_exception_id := NULL;
12522
12523 wsh_xc_util.log_exception(
12524 p_api_version => 1.0,
12525 x_return_status => l_exception_return_status,
12526 x_msg_count => l_exception_msg_count,
12527 x_msg_data => l_exception_msg_data,
12528 x_exception_id => l_dummy_exception_id ,
12529 p_exception_location_id => pexceptions.exception_location_id,
12530 p_logged_at_location_id => pexceptions.logged_at_location_id,
12531 p_logging_entity => pexceptions.logging_entity,
12532 p_logging_entity_id => pexceptions.logging_entity_id,
12533 p_exception_name => pexceptions.exception_name,
12534 p_message => pexceptions.message,
12535 -- p_severity => pexceptions.severity,
12536 p_manually_logged => pexceptions.manually_logged,
12537 -- p_exception_handling => pexceptions.status,
12538 p_trip_id => l_trip_id,
12539 p_trip_name => l_trip_name,
12540 p_trip_stop_id => l_trip_stop_id,
12541 p_delivery_id => l_delivery_id,
12542 p_delivery_name => l_delivery_name,
12543 p_delivery_detail_id => p_new_delivery_detail_id,
12544 p_delivery_assignment_id => pexceptions.delivery_assignment_id,
12545 p_container_name => pexceptions.container_name,
12546 p_inventory_item_id => pexceptions.inventory_item_id,
12547 p_lot_number => pexceptions.lot_number,
12548 -- HW OPMCONV - No need for sublot_number
12549 -- p_sublot_number => pexceptions.sublot_number,
12550 p_revision => pexceptions.revision,
12551 p_serial_number => pexceptions.serial_number,
12552 p_unit_of_measure => pexceptions.unit_of_measure,
12553 p_quantity => l_qty1,
12554 p_unit_of_measure2 => pexceptions.unit_of_measure2,
12555 p_quantity2 => l_qty2,
12556 p_subinventory => pexceptions.subinventory,
12557 p_locator_id => pexceptions.locator_id,
12558 p_arrival_date => l_arrival_date,
12559 p_departure_date => l_departure_date,
12560 p_error_message => pexceptions.error_message,
12561 p_attribute_category => pexceptions.attribute_category,
12562 p_attribute1 => pexceptions.attribute1,
12563 p_attribute2 => pexceptions.attribute2,
12564 p_attribute3 => pexceptions.attribute3,
12565 p_attribute4 => pexceptions.attribute4,
12566 p_attribute5 => pexceptions.attribute5,
12567 p_attribute6 => pexceptions.attribute6,
12568 p_attribute7 => pexceptions.attribute7,
12569 p_attribute8 => pexceptions.attribute8,
12570 p_attribute9 => pexceptions.attribute9,
12571 p_attribute10 => pexceptions.attribute10,
12572 p_attribute11 => pexceptions.attribute11,
12573 p_attribute12 => pexceptions.attribute12,
12574 p_attribute13 => pexceptions.attribute13,
12575 p_attribute14 => pexceptions.attribute14,
12576 p_attribute15 => pexceptions.attribute15,
12577 p_request_id => pexceptions.request_id,
12578 p_batch_id => pexceptions.batch_id,
12579 p_status => pexceptions.status,
12580 p_action => p_action);
12581
12582 END LOOP;
12583 IF (l_exception_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12584 --
12585 -- Debug Statements
12586 --
12587 IF l_debug_on THEN
12588 WSH_DEBUG_SV.logmsg(l_module_name, 'WSH_XC_UTIL.LOG_EXCEPTION DID NOTRETURN SUCCESS' );
12589 END IF;
12590 --
12591 END IF;
12592
12593 IF l_debug_on THEN
12594 WSH_DEBUG_SV.pop(l_module_name);
12595 END IF;
12596
12597 EXCEPTION
12598 WHEN OTHERS THEN
12599 IF l_debug_on THEN
12600 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12601 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12602 END IF;
12603
12604 END Log_Exceptions;
12605 /*2442099*/
12606
12607 -- Procedure: Consolidate_Source_Line
12608 --
12609 -- Parameters: p_Cons_Source_Line_Rec_Tab -> List of delivery details and its corresponding req qtys,
12610 -- bo qtys, source line ids and delivery ids.
12611 -- x_consolidate_ids -> Contains the list of existing BO dd_ids, into which the dd_ids passed
12612 -- in the parameter p_Cons_Source_Line_Rec_Tab got consolidated.
12613 --
12614 -- Description: This is an internal API.
12615 -- Consolidates all the unpacked and unassigned back order delivery detail lines
12616 -- into one delivery detail Line for the given source_line_id. x_consolidate_ids(i)
12617 -- contains final consolidated delivery detail id corresponding to the ith record
12618 -- in p_Cons_Source_Line_Rec_Tab.
12619 --
12620 -- HW OPM BUG#:3121616 added requested_quantity2
12621 PROCEDURE Consolidate_Source_Line(
12622 p_Cons_Source_Line_Rec_Tab IN WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
12623 x_consolidate_ids OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
12624 x_return_status OUT NOCOPY VARCHAR2 ) IS
12625
12626 CURSOR get_bo_dds_cur(p_delivery_detail_id IN NUMBER, p_source_line_id IN NUMBER,p_delivery_id IN NUMBER) is
12627 SELECT wdd.delivery_detail_id, wdd.requested_quantity,wdd.requested_quantity2
12628 FROM wsh_delivery_details wdd,
12629 wsh_delivery_assignments_v wda
12630 WHERE wdd.source_line_id = p_source_line_id
12631 AND wdd.delivery_detail_id <> p_delivery_detail_id
12632 AND wdd.released_status = 'B'
12633 AND wdd.replenishment_status IS NULL --bug# 6749200 (replenishment project)
12634 AND wdd.delivery_detail_id = wda.delivery_detail_id
12635 AND wdd.container_flag = 'N'
12636 AND wdd.source_code = 'OE' -- Enables the Consolidation ONLY for the lines imported from Order Management.
12637 AND (( wda.delivery_id is NULL AND wda.parent_delivery_detail_id is NULL )
12638 OR ( wda.delivery_id = nvl(p_delivery_id,-99)))
12639 FOR UPDATE NOWAIT;
12640
12641 CURSOR get_line_info_cur(p_line_id IN NUMBER) is
12642 SELECT shipping_instructions,
12643 packing_instructions
12644 FROM oe_order_lines_all
12645 WHERE line_id = p_line_id;
12646
12647
12648 -- Tables to store delivery detail id's
12649
12650 l_cons_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store the final delivery details
12651 l_cons_qtys WSH_UTIL_CORE.Id_Tab_Type;
12652 -- HW OPM BUG#:3121616 added qty2s
12653 l_cons_qty2s WSH_UTIL_CORE.Id_Tab_Type;
12654 l_partial_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store partial Back Order Del Det
12655 l_partial_org_req_qtys WSH_UTIL_CORE.Id_Tab_Type;
12656 l_partial_req_qtys WSH_UTIL_CORE.Id_Tab_Type;
12657 -- HW OPM BUG#:3121616 added qty2s
12658 l_partial_req_qty2s WSH_UTIL_CORE.Id_Tab_Type;
12659 l_delete_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store the Del Det to be deleted
12660 -- Bug#3399109 :Changed the Data Type from Id_Tab_Type to tbl_varchar
12661 l_ship_instructions WSH_UTIL_CORE.tbl_varchar; -- To store shipping instructions
12662 l_pack_instructions WSH_UTIL_CORE.tbl_varchar; -- To store packing instructions
12663
12664
12665
12666 l_del_det_Id NUMBER;
12667 l_req_qty NUMBER;
12668 -- HW OPM BUG#:3121616 added qty2s
12669 l_req_qty2 NUMBER;
12670 l_total_req_qty NUMBER := 0;
12671 -- HW OPM BUG#:3121616 added qty2s
12672 l_total_req_qty2 NUMBER := 0;
12673 l_temp_cnt NUMBER;
12674
12675
12676 l_user_id NUMBER;
12677 l_login_id NUMBER;
12678 l_return_status VARCHAR2(30);
12679 -- J: W/V Changes
12680 l_tmp_weight NUMBER;
12681 l_tmp_volume NUMBER;
12682 l_new_gross_wt NUMBER;
12683 l_new_net_wt NUMBER;
12684 l_new_vol NUMBER;
12685 l_gross_weight NUMBER;
12686 l_net_weight NUMBER;
12687 l_volume NUMBER;
12688 l_wv_frozen_flag VARCHAR2(1);
12689
12690 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
12691 l_dd_txn_id NUMBER;
12692 l_txn_return_status VARCHAR2(1);
12693
12694 -- muom
12695 l_fulfill_base varchar2(1);
12696
12697 --
12698 l_debug_on BOOLEAN;
12699 --
12700 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'CONSOLIDATE_SOURCE_LINE';
12701 --
12702
12703 BEGIN
12704 --
12705 -- Debug Statements
12706 --
12707 --
12708 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12709 --
12710 IF l_debug_on IS NULL THEN
12711
12712 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12713 END IF;
12714 --
12715 IF l_debug_on THEN
12716
12717 WSH_DEBUG_SV.push(l_module_name);
12718 END IF;
12719 --
12720
12721 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12722 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12723 l_user_id := FND_GLOBAL.user_id;
12724 l_login_id := FND_GLOBAL.login_id;
12725
12726 FOR i IN 1..p_Cons_Source_Line_Rec_Tab.count --{ Looping thru' the input params
12727 LOOP
12728 --
12729 -- Debug Statements
12730 --
12731 IF l_debug_on THEN
12732 WSH_DEBUG_SV.log(l_module_name,'********* Processing the Delivery Detail Id:',p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id);
12733 END IF;
12734 --
12735 l_temp_cnt := l_delete_dd_ids.COUNT;
12736 l_total_req_qty := 0;
12737
12738 OPEN get_bo_dds_cur(p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id,p_Cons_Source_Line_Rec_Tab(i).source_line_id,p_Cons_Source_Line_Rec_Tab(i).delivery_id);
12739
12740 LOOP --{ Fetch all the unassigned unpacked Backordered Delivery Details for the same source line id
12741
12742 -- HW OPM BUG#:3121616 added qty2
12743 FETCH get_bo_dds_cur INTO l_del_det_Id,l_req_qty,l_req_qty2;
12744 EXIT WHEN (get_bo_dds_cur%NOTFOUND);
12745 --
12746 -- Debug Statements
12747 --
12748 IF l_debug_on THEN
12749 --
12750 WSH_DEBUG_SV.log(l_module_name,'Found Existing Back Order Del Det line: ',l_del_det_Id);
12751 END IF;
12752 --
12753 l_delete_dd_ids(l_delete_dd_ids.COUNT + 1) :=l_del_det_Id;
12754 l_total_req_qty := l_total_req_qty + l_req_qty;
12755 -- HW OPM BUG#:3121616 added qty2
12756 l_total_req_qty2 := l_total_req_qty2 + l_req_qty2;
12757
12758 END LOOP; --} done fetching the existing unasssigned unpacked Backorder lines
12759 CLOSE get_bo_dds_cur;
12760
12761 IF ( l_delete_dd_ids.COUNT > l_temp_cnt ) --{ Consolidation is possible or not
12762 THEN
12763 -- Use the last Deliver Detail found for the consolidation purpose, accordingly
12764 -- delete the delivery details id from l_delete_dd_ids table.
12765 l_cons_dd_ids (l_cons_dd_ids.COUNT + 1) := l_delete_dd_ids(l_delete_dd_ids.COUNT);
12766 l_delete_dd_ids.delete(l_delete_dd_ids.COUNT);
12767 l_cons_qtys(l_cons_qtys.COUNT + 1) := l_total_req_qty + p_Cons_Source_Line_Rec_Tab(i).bo_qty;
12768 -- HW OPM BUG#:3121616 added qty2s
12769 l_cons_qty2s(l_cons_qty2s.COUNT + 1) := l_total_req_qty2 + p_Cons_Source_Line_Rec_Tab(i).bo_qty2;
12770 -- end of 3121616
12771
12772
12773 --
12774 -- Debug Statements
12775 --
12776 IF l_debug_on THEN
12777 WSH_DEBUG_SV.log(l_module_name,'Consolidated Into Delivery Detail Id ',l_cons_dd_ids(l_cons_dd_ids.COUNT));
12778 END IF;
12779
12780 -- Getting the shipping and packing instructions from the source line id. which are to be assigned
12781 -- to final delivery detail for the given source line id.
12782 open get_line_info_cur(p_Cons_Source_Line_Rec_Tab(i).source_line_id);
12783 fetch get_line_info_cur into l_ship_instructions(l_ship_instructions.COUNT + 1),l_pack_instructions(l_pack_instructions.COUNT + 1);
12784 close get_line_info_cur;
12785
12786 -- muom
12787 l_fulfill_base := NVL(p_Cons_Source_Line_Rec_Tab(i).fulfillment_base,'P');
12788 IF l_debug_on THEN
12789 WSH_DEBUG_SV.logmsg(l_module_name,'Fulfillment Base is '||l_fulfill_base);
12790 WSH_DEBUG_SV.logmsg(l_module_name,'p_Cons_Source_Line_Rec_Tab(i).bo_qty '||p_Cons_Source_Line_Rec_Tab(i).bo_qty||' p_Cons_Source_Line_Rec_Tab(i).req_qty '||p_Cons_Source_Line_Rec_Tab(i).req_qty);
12791 WSH_DEBUG_SV.logmsg(l_module_name,'p_Cons_Source_Line_Rec_Tab(i).bo_qty2 '||p_Cons_Source_Line_Rec_Tab(i).bo_qty2||' p_Cons_Source_Line_Rec_Tab(i).req_qty2 '||p_Cons_Source_Line_Rec_Tab(i).req_qty2);
12792 END IF;
12793
12794 -- Storing the final delivery detail id in the out parameter
12795 x_consolidate_ids(i):= l_cons_dd_ids(l_cons_dd_ids.COUNT);
12796
12797 -- If it is partial back ordering then don't delete it, update the existing delivery detail
12798 -- Qty otherwise delete the delivery detail being processing.
12799 -- muom
12800 IF (l_fulfill_base = 'P' and p_Cons_Source_Line_Rec_Tab(i).bo_qty < p_Cons_Source_Line_Rec_Tab(i).req_qty) OR
12801 (l_fulfill_base = 'S' and p_Cons_Source_Line_Rec_Tab(i).bo_qty2 < p_Cons_Source_Line_Rec_Tab(i).req_qty2)
12802 THEN
12803 l_partial_dd_ids (l_partial_dd_ids.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12804 l_partial_org_req_qtys(l_partial_req_qtys.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).req_qty;
12805 l_partial_req_qtys (l_partial_req_qtys.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).req_qty - p_Cons_Source_Line_Rec_Tab(i).bo_qty;
12806 l_partial_req_qty2s (l_partial_req_qty2s.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).req_qty2 - p_Cons_Source_Line_Rec_Tab(i).bo_qty2;
12807 --
12808 -- Debug Statements
12809 --
12810 IF l_debug_on THEN
12811 WSH_DEBUG_SV.log(l_module_name,'Updating Req Qty for the Del Det Id (Bo Qty < Req. Qty) ',l_partial_dd_ids (l_partial_dd_ids.COUNT));
12812 END IF;
12813 --
12814 ELSE
12815 l_delete_dd_ids(l_delete_dd_ids.COUNT+1):= p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12816 --
12817 -- Debug Statements
12818 --
12819 IF l_debug_on THEN
12820 WSH_DEBUG_SV.log(l_module_name,'Deleting the Del Det Id (Bo Qty = Req qty)',l_delete_dd_ids(l_delete_dd_ids.COUNT));
12821 END IF;
12822 --
12823 END IF; --} Is it Partial BO
12824 ELSE -- No consolidation if possible for the delivery Detail id
12825 --
12826 -- Debug Statements
12827 --
12828 IF l_debug_on THEN
12829 WSH_DEBUG_SV.log(l_module_name,'No Existing Back Order Del Det Lines found');
12830 END IF;
12831 --
12832 x_consolidate_ids (i) := p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12833 END IF; --} Check for existing back order lines
12834
12835 END LOOP; --} End of the Delivery Detail Table
12836
12837 IF (get_bo_dds_cur%ISOPEN) THEN
12838 CLOSE get_bo_dds_cur;
12839 END IF;
12840
12841
12842 -- Handling the Tables created in the above process (BULK Collect)
12843 -- Deleting all the Delivery Detail in the Delete table
12844 FOR i IN 1..l_delete_dd_ids.COUNT
12845 LOOP -- {
12846 -- deleting the delivery detail line
12847 --
12848 -- Debug Statements
12849 --
12850 IF l_debug_on THEN
12851 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.DELETE_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
12852 END IF;
12853 --
12854 WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details(
12855 p_delivery_detail_id => l_delete_dd_ids(i),
12856 x_return_status => l_return_status );
12857
12858 --
12859 IF l_debug_on THEN
12860 WSH_DEBUG_SV.logmsg(l_module_name, 'After calling DELETE_DELIVERY_DETAILS: ' || l_return_status );
12861 END IF;
12862 --
12863 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12864 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12865 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12866 RAISE FND_API.G_EXC_ERROR;
12867 END IF;
12868
12869 END LOOP; -- }
12870
12871 IF l_debug_on THEN
12872 WSH_DEBUG_SV.log(l_module_name,'Updating details for consolidation.Detail Count-',l_cons_dd_ids.count);
12873 END IF;
12874 -- Updating the selected Delivery Details for the consolidation with corresponding total Qty
12875 FOR i IN 1..l_cons_dd_ids.COUNT LOOP
12876 -- HW OPM BUG#:3121616 added qty2s
12877 UPDATE wsh_delivery_details
12878 SET requested_quantity = l_cons_qtys(i),
12879 requested_quantity2 = l_cons_qty2s(i),
12880 tracking_number = null,
12881 master_container_item_id = null,
12882 detail_container_item_id = null,
12883 seal_code = null,
12884 shipping_instructions = l_ship_instructions(i),
12885 packing_instructions = l_pack_instructions(i)
12886 WHERE delivery_detail_id = l_cons_dd_ids (i);
12887
12888 WSH_DD_TXNS_PVT.create_dd_txn_from_dd (p_delivery_detail_id => l_cons_dd_ids(i),
12889 x_dd_txn_id => l_dd_txn_id,
12890 x_return_status =>l_txn_return_status);
12891
12892 IF (l_txn_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12893 x_return_status := l_txn_return_status;
12894 RETURN;
12895 END IF;
12896 END LOOP;
12897
12898 --
12899 -- DBI Project
12900 -- Update of wsh_delivery_details where requested_quantity/released_status
12901 -- are changed, call DBI API after the update.
12902 -- DBI API will check if DBI is installed
12903 IF l_debug_on THEN
12904 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_cons_dd_ids.count);
12905 END IF;
12906 WSH_INTEGRATION.DBI_Update_Detail_Log
12907 (p_delivery_detail_id_tab => l_cons_dd_ids,
12908 p_dml_type => 'UPDATE',
12909 x_return_status => l_dbi_rs);
12910
12911 IF l_debug_on THEN
12912 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
12913 END IF;
12914 -- Only Handle Unexpected error
12915 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12916 --
12917 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12918 END IF;
12919 -- End of Code for DBI Project
12920 --
12921
12922 -- Bug#3670261
12923 -- Deleting the Freight Costs associated with the delivery details selected for Consolidation
12924 FORALL i IN 1..l_cons_dd_ids.COUNT
12925 DELETE FROM WSH_FREIGHT_COSTS
12926 WHERE delivery_detail_id = l_cons_dd_ids(i);
12927 IF l_debug_on THEN
12928 WSH_DEBUG_SV.log(l_module_name,'Freight Cost Rows deleted',SQL%ROWCOUNT);
12929 END IF;
12930
12931 -- J: W/V Changes
12932 IF l_debug_on THEN
12933 WSH_DEBUG_SV.logmsg(l_module_name,'l_cons_dd_ids.COUNT '||l_cons_dd_ids.COUNT);
12934 END IF;
12935
12936 IF l_cons_dd_ids.COUNT > 0 THEN
12937
12938 FOR l_index in l_cons_dd_ids.FIRST..l_cons_dd_ids.LAST LOOP
12939
12940 IF l_debug_on THEN
12941 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
12942 END IF;
12943 --
12944 WSH_WV_UTILS.Detail_Weight_Volume(
12945 p_delivery_detail_id => l_cons_dd_ids(l_index),
12946 p_update_flag => 'Y',
12947 p_post_process_flag => 'Y',
12948 p_calc_wv_if_frozen => 'Y',
12949 x_net_weight => l_tmp_weight,
12950 x_volume => l_tmp_volume,
12951 x_return_status => l_return_status);
12952 IF l_debug_on THEN
12953 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
12954 END IF;
12955 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12956 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12957 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12958 RAISE FND_API.G_EXC_ERROR;
12959 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12960 x_return_status := l_return_status;
12961 END IF;
12962
12963 END LOOP;
12964 END IF;
12965
12966 IF l_debug_on THEN
12967 WSH_DEBUG_SV.log(l_module_name,'Updating partial bkorder cases.Detail Count-',l_partial_dd_ids.count);
12968 END IF;
12969 -- Updating the partial Back order cases. Qty should be subtracted for the partial case
12970 FORALL i IN 1..l_partial_dd_ids.COUNT
12971 -- HW OPM BUG#:3121616 added qty2s
12972 UPDATE wsh_delivery_details
12973 SET requested_quantity = l_partial_req_qtys(i),
12974 requested_quantity2 = l_partial_req_qty2s(i)
12975 WHERE delivery_detail_id = l_partial_dd_ids (i);
12976
12977 --
12978 -- DBI Project
12979 -- Update of wsh_delivery_details where requested_quantity/released_status
12980 -- are changed, call DBI API after the update.
12981 -- DBI API will check if DBI is installed
12982 IF l_debug_on THEN
12983 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_partial_dd_ids.count);
12984 END IF;
12985 WSH_INTEGRATION.DBI_Update_Detail_Log
12986 (p_delivery_detail_id_tab => l_partial_dd_ids,
12987 p_dml_type => 'UPDATE',
12988 x_return_status => l_dbi_rs);
12989
12990 IF l_debug_on THEN
12991 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
12992 END IF;
12993 -- Only Handle Unexpected error
12994 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12995 --
12996 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12997 END IF;
12998 -- End of Code for DBI Project
12999 --
13000
13001 -- We need to adjust the W/V if DDs W/V is frozen
13002 IF l_partial_dd_ids.COUNT > 0 THEN
13003
13004 IF l_debug_on THEN
13005 WSH_DEBUG_SV.logmsg(l_module_name,'l_partial_dd_ids.COUNT '||l_partial_dd_ids.COUNT);
13006 END IF;
13007
13008 FOR l_index in l_partial_dd_ids.FIRST..l_partial_dd_ids.LAST LOOP
13009
13010 SELECT gross_weight,
13011 net_weight,
13012 volume,
13013 nvl(wv_frozen_flag,'Y')
13014 INTO l_gross_weight,
13015 l_net_weight,
13016 l_volume,
13017 l_wv_frozen_flag
13018 FROM wsh_delivery_details
13019 WHERE delivery_detail_id = l_partial_dd_ids(l_index);
13020
13021 IF l_wv_frozen_flag = 'Y' THEN
13022
13023 IF l_debug_on THEN
13024 WSH_DEBUG_SV.logmsg(l_module_name,'W/V Frozen flag is Y for DD '||l_partial_dd_ids(l_index));
13025 END IF;
13026
13027 l_new_gross_wt := round(l_gross_weight * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
13028 l_new_net_wt := round(l_net_weight * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
13029 l_new_vol := round(l_volume * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
13030
13031 IF l_debug_on THEN
13032 WSH_DEBUG_SV.logmsg(l_module_name,'Updating DD '||l_partial_dd_ids(l_index)||' with Gross '||l_new_gross_wt||' Net '||l_new_net_wt||' Vol '||l_new_vol);
13033 END IF;
13034
13035 UPDATE wsh_delivery_details
13036 set gross_weight = l_new_gross_wt,
13037 net_weight = l_new_net_wt,
13038 volume = l_new_vol
13039 WHERE delivery_detail_id = l_partial_dd_ids(l_index);
13040
13041 IF l_debug_on THEN
13042 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
13043 END IF;
13044
13045 WSH_WV_UTILS.DD_WV_Post_Process(
13046 p_delivery_detail_id => l_partial_dd_ids(l_index),
13047 p_diff_gross_wt => -1 * (l_gross_weight - l_new_gross_wt),
13048 p_diff_net_wt => -1 * (l_net_weight - l_new_net_wt),
13049 p_diff_fill_volume => -1 * (l_volume - l_new_vol),
13050 x_return_status => l_return_status);
13051
13052 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
13053 --
13054 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13055 WSH_UTIL_CORE.Add_Message(x_return_status);
13056 IF l_debug_on THEN
13057 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
13058 WSH_DEBUG_SV.pop(l_module_name);
13059 END IF;
13060 return;
13061 END IF;
13062
13063 END IF;
13064 END LOOP;
13065 END IF;
13066
13067 --
13068 -- Debug Statements
13069 --
13070 IF l_debug_on THEN
13071 WSH_DEBUG_SV.pop(l_module_name);
13072 END IF;
13073 --
13074 EXCEPTION
13075
13076 WHEN FND_API.G_EXC_ERROR THEN
13077 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13078
13079 --
13080 IF l_debug_on THEN
13081 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13082 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
13083 END IF;
13084 --
13085 return;
13086 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13087 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13088 --
13089 IF l_debug_on THEN
13090 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13091 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
13092 END IF;
13093 --
13094 return;
13095
13096
13097 WHEN OTHERS THEN
13098 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13099 WSH_UTIL_CORE.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.Consolidate_Source_Lines ' );
13100 --
13101 -- Debug Statements
13102 --
13103 IF l_debug_on THEN
13104 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13105 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13106 END IF;
13107 --
13108 END Consolidate_Source_Line;
13109
13110
13111 --
13112 -- Procedure: Process_Delivery_Details
13113 -- Parameters:
13114 -- p_delivery_detail_id: delivery detail id need to be processed
13115 -- p_bo_qty : backordered quantity to unreserve
13116 -- p_overpick_qty : overpicked quantity to unreserve
13117 -- p_bo_mode : either UNRESERVE/CYCLE_COUNT
13118 -- p_delete_flag : 'Y' will delete the delivery detail passed
13119 -- 'N' doesnot delete.
13120 -- Description: This procedure will do unreservation, unpack/unassign
13121 -- for the passed delivery detail id. It deletes the delivery detail
13122 -- if p_delete_flag is passed as 'Y'.
13123 -- Added this procedure as part of code changes for the Bug#3317692
13124 PROCEDURE Process_Delivery_Details (
13125 p_delivery_detail_id IN NUMBER,
13126 p_bo_qty IN NUMBER,
13127 p_bo_qty2s IN NUMBER,
13128 p_overpick_qty IN NUMBER,
13129 -- muom
13130 p_overpick_qty2s IN NUMBER,
13131 p_bo_mode IN VARCHAR2,
13132 p_delete_flag IN VARCHAR2 DEFAULT NULL,
13133 x_return_status OUT NOCOPY VARCHAR2
13134 ) IS
13135
13136 l_delivery_detail_ids WSH_UTIL_CORE.Id_Tab_Type;
13137 l_idx NUMBER;
13138
13139 l_inventory_item_id NUMBER := NULL;
13140 l_organization_id NUMBER := NULL;
13141 l_subinventory VARCHAR2(10) := NULL;
13142 l_serial_number VARCHAR2(30) := NULL;
13143 l_transaction_temp_id NUMBER := NULL;
13144 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
13145 l_return_status VARCHAR2(5) := NULL;
13146 --Added for bug 10062808
13147 CURSOR c_detail(c_detail_id NUMBER) IS
13148 SELECT organization_id,
13149 inventory_item_id,
13150 WSH_UTIL_CORE.Get_Line_Fulfillment_Base('OE',source_line_id) fulfillment_base
13151 FROM wsh_delivery_details
13152 WHERE delivery_detail_id = c_detail_id AND
13153 NVL(container_flag, 'N') = 'N';
13154 l_qty_unres NUMBER;
13155 l_item_info WSH_DELIVERY_DETAILS_INV.mtl_system_items_rec;
13156 l_bo_mode VARCHAR2(30);
13157 -- muom
13158 l_qty2_unres NUMBER;
13159 l_fulfillment_base VARCHAR2(1);
13160
13161 --
13162 l_debug_on BOOLEAN;
13163 --
13164 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'PROCESS_DELIVERY_DETAILS';
13165 --
13166 BEGIN
13167 --
13168 --
13169 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13170 --
13171 IF l_debug_on IS NULL
13172 THEN
13173 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13174 END IF;
13175 --
13176 IF l_debug_on THEN
13177 WSH_DEBUG_SV.push(l_module_name);
13178 --
13179 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID',p_delivery_detail_id);
13180 WSH_DEBUG_SV.log(l_module_name,'P_BO_QTY',p_bo_qty);
13181 WSH_DEBUG_SV.log(l_module_name,'P_OVERPICK_QTY',p_overpick_qty);
13182 -- muom
13183 WSH_DEBUG_SV.log(l_module_name,'P_BO_QTY2S',p_bo_qty2s);
13184 WSH_DEBUG_SV.log(l_module_name,'P_OVERPICK_QTY2S',p_overpick_qty2s);
13185 WSH_DEBUG_SV.log(l_module_name,'P_BO_MODE',P_BO_MODE);
13186 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_FLAG',P_DELETE_FLAG);
13187 END IF;
13188 --
13189 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13190
13191 --
13192 -- Debug Statements
13193 --
13194 IF l_debug_on THEN
13195 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont',WSH_DEBUG_SV.C_PROC_LEVEL);
13196 END IF;
13197 --
13198 l_delivery_detail_ids(1) := p_delivery_detail_id;
13199 IF (p_delete_flag = 'Y') THEN --{
13200 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont (
13201 p_ids_tobe_unassigned => l_delivery_detail_ids ,
13202 p_validate_flag => 'N',
13203 x_return_status => l_return_status
13204 );
13205 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13206 raise FND_API.G_EXC_ERROR;
13207 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13208 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13209 END IF;
13210 END IF; --}
13211 --Added for bug 10062808
13212 OPEN c_detail(p_delivery_detail_id );
13213 FETCH c_detail INTO l_organization_id,l_inventory_item_id,l_fulfillment_base; --muom
13214 CLOSE c_detail;
13215
13216 WSH_DELIVERY_DETAILS_INV.Get_item_information(
13217 p_organization_id => l_organization_id,
13218 p_inventory_item_id => l_inventory_item_id,
13219 x_mtl_system_items_rec => l_item_info,
13220 x_return_status => l_return_status
13221 );
13222 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13223 raise FND_API.G_EXC_ERROR;
13224 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13225 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13226 END IF;
13227 IF l_debug_on THEN
13228 WSH_DEBUG_SV.LOG(l_module_name, 'Is item lot divisible?', l_item_info.lot_divisible_flag);
13229 -- muom
13230 WSH_DEBUG_SV.LOG(l_module_name, 'l_fulfillment_base', l_fulfillment_base);
13231 END IF;
13232
13233 IF l_item_info.lot_divisible_flag = 'Y' OR l_item_info.lot_control_code <> 2 THEN --{
13234 -- muom
13235 IF (l_fulfillment_base = 'P' and p_bo_qty > 0) OR (l_fulfillment_base = 'S' and p_bo_qty2s > 0) THEN --{
13236 --
13237 -- Debug Statements
13238 --
13239 IF l_debug_on THEN
13240 WSH_DEBUG_SV.logmsg(l_module_name,'Unreserving the Backordered quantity ');
13241 WSH_DEBUG_SV.logmsg(l_module_name,'... delivery_detail_id '|| p_delivery_detail_id);
13242 -- muom
13243 WSH_DEBUG_SV.logmsg(l_module_name,'... backordered quantity '||p_bo_qty||' backordered quantity2 '||p_bo_qty2s );
13244 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNRESERVE_DELIVERY_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
13245 END IF;
13246 --
13247 IF (l_fulfillment_base='S' AND p_overpick_qty2s= 0 AND p_overpick_qty>0 ) THEN
13248 WSH_DEBUG_SV.logmsg(l_module_name,'..with . backordered quantity+overpicked quantity '||p_bo_qty||'+'||p_overpick_qty||' backordered quantity2 '||p_bo_qty2s );
13249 wsh_delivery_details_actions.unreserve_delivery_detail(
13250 p_delivery_Detail_id => p_delivery_detail_id,
13251 p_unreserve_mode => p_bo_mode ,
13252 p_quantity_to_unreserve => p_bo_qty+p_overpick_qty,
13253 p_override_retain_ato_rsv => 'N',
13254 p_quantity2_to_unreserve => p_bo_qty2s,
13255 x_return_status => l_return_status
13256 );
13257
13258 ELSE
13259 wsh_delivery_details_actions.unreserve_delivery_detail(
13260 p_delivery_Detail_id => p_delivery_detail_id,
13261 p_unreserve_mode => p_bo_mode ,
13262 p_quantity_to_unreserve => p_bo_qty,
13263 p_override_retain_ato_rsv => 'N',
13264 p_quantity2_to_unreserve => p_bo_qty2s,
13265 x_return_status => l_return_status
13266 );
13267 END IF;
13268 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13269 raise FND_API.G_EXC_ERROR;
13270 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13271 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13272 END IF;
13273 END IF; --}
13274
13275 -- muom
13276 IF (l_fulfillment_base = 'P' and p_overpick_qty > 0) OR (l_fulfillment_base = 'S' and p_overpick_qty2s > 0) THEN --{
13277 --
13278 -- Debug Statements
13279 --
13280 IF l_debug_on THEN
13281 WSH_DEBUG_SV.logmsg(l_module_name,'Unreserving the Backordered quantity ');
13282 WSH_DEBUG_SV.logmsg(l_module_name,'... delivery_detail_id '|| p_delivery_detail_id);
13283 WSH_DEBUG_SV.logmsg(l_module_name,'... overpicked quantity '||p_overpick_qty||' overpicked quantity2 '||p_overpick_qty2s );
13284 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNRESERVE_DELIVERY_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
13285 END IF;
13286 --
13287
13288 --Bug 4721577 Do not retain reservation for overpicked quantities
13289 -- muom
13290 IF l_fulfillment_base = 'P' THEN
13291 IF p_bo_mode = 'RETAIN_RSV' THEN
13292 wsh_delivery_details_actions.unreserve_delivery_detail(
13293 p_delivery_Detail_id => p_delivery_detail_id,
13294 p_unreserve_mode => 'UNRESERVE' ,
13295 p_quantity_to_unreserve => p_overpick_qty,
13296 p_override_retain_ato_rsv => 'Y',
13297 p_quantity2_to_unreserve => p_bo_qty2s,
13298 x_return_status => l_return_status
13299 );
13300 ELSE
13301 wsh_delivery_details_actions.unreserve_delivery_detail(
13302 p_delivery_Detail_id => p_delivery_detail_id,
13303 p_unreserve_mode => p_bo_mode ,
13304 p_quantity_to_unreserve => p_overpick_qty,
13305 p_override_retain_ato_rsv => 'Y',
13306 p_quantity2_to_unreserve => p_bo_qty2s,
13307 x_return_status => l_return_status
13308 );
13309 END IF;
13310 ELSE
13311 IF p_bo_mode = 'RETAIN_RSV' THEN
13312 wsh_delivery_details_actions.unreserve_delivery_detail(
13313 p_delivery_Detail_id => p_delivery_detail_id,
13314 p_unreserve_mode => 'UNRESERVE' ,
13315 p_quantity_to_unreserve => p_overpick_qty,
13316 p_override_retain_ato_rsv => 'Y',
13317 p_quantity2_to_unreserve => p_overpick_qty2s,
13318 x_return_status => l_return_status
13319 );
13320 ELSE
13321 wsh_delivery_details_actions.unreserve_delivery_detail(
13322 p_delivery_Detail_id => p_delivery_detail_id,
13323 p_unreserve_mode => p_bo_mode ,
13324 p_quantity_to_unreserve => p_overpick_qty,
13325 p_override_retain_ato_rsv => 'Y',
13326 p_quantity2_to_unreserve => p_overpick_qty2s,
13327 x_return_status => l_return_status
13328 );
13329 END IF;
13330 END IF;
13331 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13332 raise FND_API.G_EXC_ERROR;
13333 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13334 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13335 END IF;
13336 END IF; --}
13337 ELSE
13338 -- muom
13339 IF (l_fulfillment_base = 'P' and p_bo_qty > 0) OR (l_fulfillment_base = 'S' and p_bo_qty2s > 0) THEN --{
13340 --
13341 --For Lot Indivisible items, when bo mode is 'RETAIN_RSV'
13342 --complete reservation sould be blown off.
13343 -- This concurs with the API WSH_SHIP_CONFIRM_ACTIONS2.Backorder
13344 --
13345 l_bo_mode := p_bo_mode;
13346 IF l_bo_mode = 'RETAIN_RSV' THEN
13347 l_bo_mode := 'UNRESERVE';
13348 END IF;
13349
13350 l_qty_unres :=p_bo_qty + p_overpick_qty;
13351 -- muom
13352 l_qty2_unres :=p_bo_qty2s + p_overpick_qty2s;
13353 ------
13354 --This change should not be done in WSH_SHIP_CONFIRM_ACTIONS2.Backorder before calling
13355 --WSH_DELIVERY_DETAILS_ACTIONS.Consolidate_Delivery_Details because
13356 ------
13357 --When backorder quantity is not equal to requested
13358 --Consolidate_Delivery_Details API calls Process_Delivery_Details with 'delete_flag' as 'N'
13359
13360 --So the delivery detail would not be canceled after unreserving the quantity and requested quantity
13361 --on the would be updated to 'requested quantity - backorder quantity(which also includes overpicked)'
13362 --resulting in negative value.
13363 -----
13364
13365 IF l_debug_on THEN
13366 WSH_DEBUG_SV.logmsg(l_module_name,'Unreserving the Backordered quantity ');
13367 WSH_DEBUG_SV.logmsg(l_module_name,'... delivery_detail_id '|| p_delivery_detail_id);
13368 WSH_DEBUG_SV.logmsg(l_module_name,'... backordered quantity '||l_qty_unres );
13369 -- muom
13370 WSH_DEBUG_SV.logmsg(l_module_name,'... backordered quantity2 '||l_qty2_unres );
13371 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNRESERVE_DELIVERY_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
13372 END IF;
13373 --
13374 -- muom
13375 IF l_fulfillment_base = 'P' THEN
13376 wsh_delivery_details_actions.unreserve_delivery_detail(
13377 p_delivery_Detail_id => p_delivery_detail_id,
13378 p_unreserve_mode => l_bo_mode ,
13379 p_quantity_to_unreserve => l_qty_unres ,
13380 p_override_retain_ato_rsv => 'N',
13381 p_quantity2_to_unreserve => p_bo_qty2s,
13382 x_return_status => l_return_status
13383 );
13384 ELSE
13385 wsh_delivery_details_actions.unreserve_delivery_detail(
13386 p_delivery_Detail_id => p_delivery_detail_id,
13387 p_unreserve_mode => l_bo_mode ,
13388 p_quantity_to_unreserve => l_qty_unres ,
13389 p_override_retain_ato_rsv => 'N',
13390 p_quantity2_to_unreserve => l_qty2_unres ,
13391 x_return_status => l_return_status
13392 );
13393 END IF;
13394 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13395 raise FND_API.G_EXC_ERROR;
13396 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13397 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13398 END IF;
13399
13400 END IF; --}
13401
13402 END IF;--}Item is lot Indivisible
13403
13404
13405 IF (p_delete_flag = 'Y') THEN --{
13406 --
13407 -- Debug Statements
13408 --
13409 IF l_debug_on THEN
13410 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
13411 END IF;
13412 --
13413
13414 WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details(
13415 p_delivery_detail_id => p_delivery_detail_id,
13416 p_cancel_flag => 'N',
13417 x_return_status => l_return_status);
13418 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13419 raise FND_API.G_EXC_ERROR;
13420 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13421 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13422 END IF;
13423 END IF; --}
13424
13425 IF l_debug_on THEN
13426 WSH_DEBUG_SV.pop(l_module_name);
13427 END IF;
13428
13429 EXCEPTION
13430 WHEN FND_API.G_EXC_ERROR then
13431 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13432 IF c_detail%ISOPEN THEN
13433 CLOSE c_detail;
13434 END IF;
13435 IF l_debug_on THEN
13436 WSH_DEBUG_SV.pop(l_module_name);
13437 END IF;
13438 WHEN FND_API.G_EXC_UNEXPECTED_ERROR then
13439 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13440 IF c_detail%ISOPEN THEN
13441 CLOSE c_detail;
13442 END IF;
13443 IF l_debug_on THEN
13444 WSH_DEBUG_SV.pop(l_module_name);
13445 END IF;
13446 WHEN others THEN
13447 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
13448 IF c_detail%ISOPEN THEN
13449 CLOSE c_detail;
13450 END IF;
13451 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_PKG.Process_Delivery_Details',l_module_name);
13452 --
13453 IF l_debug_on THEN
13454 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13455 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13456 END IF;
13457 --
13458 END Process_Delivery_Details;
13459
13460 -- Procedure: Consolidate_Delivery_Details
13461 --
13462 -- Parameters: p_delivery_details_tab -> list of delivery details and its corresponding req qtys, bo qtys,
13463 -- source line ids and delivery ids
13464 -- p_bo_mode -> Either 'UNRESERVE' or 'CYCLE_COUNT' or 'RETAIN_RSV'
13465 -- 'RETAIN_RSV' added for bug 4721577, however this API is not affected
13466 -- beacuse of this change.
13467 -- x_cons_delivery_details_tab -> This is a filtered table of p_delivery_details_tab.
13468 -- This contains the list of dd_ids into which the dd_ids passed
13469 -- in the parameter p_delivery_details_tab get consolidated.
13470 -- This also contains the corresponding req qtys, bo qyts and
13471 -- source line ids. Corresponding delivery_id field will be NULL.
13472 -- x_remain_bo_qtys -> Contains the sum of backorder quantities of delivery details(except
13473 -- for the dd_id in x_cons_delivery_details_tab) for each source line.
13474 -- x_remain_bo_qtys has a quantity for each dd_id in
13475 -- x_cons_delivery_details_tab.
13476 -- Description: This API is Internally used by ShipConfirm to
13477 -- consolidate the delivery details going to be BackOrdered.
13478 -- This Procedure takes the list of delivery details
13479 -- under a Delivery and consolidates them into one
13480 -- delivery detail for each source line id.
13481 --
13482 -- HW OPM BUG#:3121616 Added x_remain_bo_qty2s
13483 PROCEDURE Consolidate_Delivery_Details(
13484 p_delivery_details_tab IN WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
13485 p_bo_mode IN VARCHAR2,
13486 x_cons_delivery_details_tab OUT NOCOPY WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
13487 x_remain_bo_qtys OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
13488 x_remain_bo_qty2s OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
13489 x_return_status OUT NOCOPY VARCHAR2
13490 ) IS
13491 l_line_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the source line ids passed as parameter
13492 l_detail_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the delivery detail ids passed as parameter
13493 l_delivery_details_tab WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab; -- Stores the delivery detail records with req-qty >0
13494 l_freight_detail_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the delivery details for which the freight costs need to be deleted.
13495 l_req_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the requested quantities passed as parameter
13496 l_bo_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the BO quantities passed as parameter
13497 l_overpick_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the Overpicked quantities passed as parameter
13498 -- HW OPM BUG#:3121616 added qty2s
13499 -- muom
13500 l_req_qty2s WSH_UTIL_CORE.Id_Tab_Type;
13501 l_overpick_qty2s WSH_UTIL_CORE.Id_Tab_Type;
13502 l_bo_qty2s WSH_UTIL_CORE.Id_Tab_Type; -- Stores the BO quantities2 passed as parameter
13503 l_cons_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores consolidate dd_id for line_id at l_cons_dd_ids(line_id)
13504 l_cons_dd_flags WSH_UTIL_CORE.Column_Tab_Type;
13505 l_cons_bo_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores bo qty of consolidate dd_id for line_id at l_cons_bo_ids(line_id)
13506 l_cons_overpick_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores overpicked qty of consolidate dd_id for line_id at l_cons_bo_ids(line_id)
13507 -- HW OPM BUG#:3121616 added qty2s
13508 l_cons_bo_qty2s WSH_UTIL_CORE.Id_Tab_Type; -- Stores bo qty2 of consolidate dd_id for line_id at l_cons_bo2_ids(line_id)
13509 l_cons_req_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores req qty of consolidate dd_id for line_id at l_cons_req_ids(line_id)
13510 l_delete_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the all delivery details need to be deleted(that are getting
13511 -- completely BackOrdered), except one delivery detail for each source line.
13512
13513 l_curr_line_id NUMBER; -- This temporary variable stores the current line_id in a loop.
13514 l_cons_dd_id NUMBER; -- This contains the delivery_detail_id that gets consolidation into
13515 l_found_complete_bo VARCHAR2(1);
13516 l_total_bo_qty NUMBER;
13517 -- HW OPM BUG#:3121616 added qty2s
13518 l_total_bo_qty2 NUMBER;
13519 l_return_status VARCHAR2(1);
13520
13521 l_idx NUMBER := 1;
13522 l_cmp_idx NUMBER := 1;
13523 l_next_idx NUMBER := 1;
13524
13525 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
13526 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
13527 -- muom
13528 l_fulfillment_base WSH_UTIL_CORE.Column_Tab_Type;
13529
13530 --
13531 l_debug_on BOOLEAN;
13532 --
13533 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'CONSOLIDATE_DELIVERY_DETAILS';
13534 --
13535 BEGIN
13536 --
13537 --
13538 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13539 --
13540 IF l_debug_on IS NULL
13541 THEN
13542 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13543 END IF;
13544 --
13545 IF l_debug_on THEN
13546 WSH_DEBUG_SV.push(l_module_name);
13547
13548 WSH_DEBUG_SV.log(l_module_name,'P_BO_MODE',p_bo_mode);
13549 END IF;
13550 --
13551
13552 l_return_status := FND_API.G_RET_STS_SUCCESS;
13553 x_return_status := FND_API.G_RET_STS_SUCCESS;
13554
13555 -- Store the passed parameter values into local pl/sql tables
13556 FOR i IN p_delivery_details_tab.FIRST .. p_delivery_details_tab.LAST LOOP --{
13557 -- RTV BO Cons Changes
13558 IF p_delivery_details_tab(i).source in ('OE','OKE','WSH') THEN
13559 l_detail_ids(i) := p_delivery_details_tab(i).delivery_detail_id;
13560 l_line_ids(i) := p_delivery_details_tab(i).source_line_id;
13561 l_req_qtys(i) := p_delivery_details_tab(i).req_qty;
13562 l_bo_qtys(i) := p_delivery_details_tab(i).bo_qty;
13563 l_overpick_qtys(i) := p_delivery_details_tab(i).overpick_qty; -- Bug#3263952
13564 -- HW OPM BUG#:3121616 added qty2s
13565 -- muom
13566 l_req_qty2s(i) := p_delivery_details_tab(i).req_qty2;
13567 l_overpick_qty2s(i) := p_delivery_details_tab(i).overpick_qty2;
13568 l_bo_qty2s(i) := p_delivery_details_tab(i).bo_qty2;
13569
13570 l_fulfillment_base(i) := p_delivery_details_tab(i).fulfillment_base;
13571
13572
13573 -- muom
13574 IF (l_fulfillment_base(i) = 'P' and p_delivery_details_tab(i).req_qty = 0) OR
13575 (l_fulfillment_base(i) = 'S' and p_delivery_details_tab(i).req_qty2 = 0) THEN
13576 l_cons_dd_flags(i) := 'Y';
13577 ELSE
13578 l_cons_dd_flags(i) := 'N';
13579 END IF;
13580 ELSE
13581 l_cons_dd_flags(i) := 'Y'; -- Do not allow consolidation of wdds with source other than OE/OKE/WSH
13582 END IF;
13583
13584 END LOOP; --}
13585
13586 -- Following Code gets the dd_id for each source_line, that will be used for consolidation
13587 -- from the passed list of delivery details.
13588 l_idx := p_delivery_details_tab.FIRST;
13589 WHILE l_idx IS NOT NULL
13590 LOOP -- {
13591
13592 -- Do not consider dd's with requested_quantity = 0 , for consolidation now . These are already
13593 -- marked earlier.
13594 -- RTV BO Cons Changes
13595 -- muom
13596 IF ((l_fulfillment_base(l_idx) = 'P' and p_delivery_details_tab(l_idx).req_qty > 0) OR
13597 (l_fulfillment_base(l_idx) = 'S' and p_delivery_details_tab(l_idx).req_qty2 > 0)) AND
13598 p_delivery_details_tab(l_idx).source in ('OE','OKE','WSH') THEN
13599 l_delivery_details_tab(l_idx) := p_delivery_details_tab(l_idx);
13600 END IF;
13601 l_idx := p_delivery_details_tab.NEXT(l_idx);
13602 END LOOP; --}
13603
13604 IF l_debug_on THEN
13605 WSH_DEBUG_SV.logmsg(l_module_name,'Finding the delivery detail to Consolidate into, from the input list',WSH_DEBUG_SV.C_PROC_LEVEL);
13606 END IF;
13607
13608 -- Mark the corresponding entry in l_cons_dd_flags(i) to 'Y', if l_detail_ids(i) is
13609 -- the consolidated delivery detail. Mark l_cons_dd_flags(i) to 'N' otherwise.
13610 -- Logic: Parse thru the entire list for a source line and set the first found completely backordered
13611 -- delivery detail as the consolidate delivery detail.
13612 -- If we don't find the completely backordered delivery detail under the source line,
13613 -- then set the first delivery detail in the list for the source line as the consolidate delivery detail.
13614 --
13615 l_idx := l_delivery_details_tab.FIRST;
13616 WHILE l_idx IS NOT NULL
13617 LOOP -- {
13618 l_found_complete_bo := 'N';
13619 -- muom
13620 IF (l_fulfillment_base(l_idx) = 'P' and l_delivery_details_tab(l_idx).bo_qty = l_delivery_details_tab(l_idx).req_qty ) OR
13621 (l_fulfillment_base(l_idx) = 'S' and l_delivery_details_tab(l_idx).bo_qty2 = l_delivery_details_tab(l_idx).req_qty2 ) THEN --{
13622 l_found_complete_bo := 'Y';
13623 l_cons_dd_flags(l_idx) := 'Y';
13624 END IF; --}
13625
13626 l_next_idx := l_delivery_details_tab.NEXT(l_idx);
13627 WHILE l_next_idx IS NOT NULL
13628 LOOP --{
13629 IF l_delivery_details_tab(l_next_idx).source_line_id = l_delivery_details_tab(l_idx).source_line_id THEN
13630 IF l_found_complete_bo = 'N' AND
13631 -- muom
13632 ((l_fulfillment_base(l_next_idx) = 'P' and l_delivery_details_tab(l_next_idx).bo_qty = l_delivery_details_tab(l_next_idx).req_qty) OR
13633 (l_fulfillment_base(l_next_idx) = 'S' and l_delivery_details_tab(l_next_idx).bo_qty2 = l_delivery_details_tab(l_next_idx).req_qty2)) THEN
13634 l_found_complete_bo := 'Y';
13635 l_cons_dd_flags(l_next_idx) := 'Y';
13636 END IF;
13637 l_delivery_details_tab.DELETE(l_next_idx);
13638 END IF;
13639 l_next_idx := l_delivery_details_tab.NEXT(l_next_idx);
13640 END LOOP; --}
13641
13642 IF l_found_complete_bo = 'N' THEN
13643 l_cons_dd_flags(l_idx) := 'Y';
13644 END IF;
13645 l_delivery_details_tab.DELETE(l_idx);
13646
13647 l_idx := l_delivery_details_tab.NEXT(l_idx);
13648 END LOOP; --}
13649 --
13650
13651 -- Keep the delivery_detail_ids used for consolidation and the corresponding quantities
13652 -- to pass them back to the Caller.
13653 l_idx := p_delivery_details_tab.FIRST;
13654 WHILE l_idx IS NOT NULL
13655 LOOP --{
13656 IF l_cons_dd_flags(l_idx) = 'Y' THEN --{
13657 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT+1).delivery_detail_id := p_delivery_details_tab(l_idx).delivery_detail_id;
13658 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).req_qty := p_delivery_details_tab(l_idx).req_qty;
13659 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).bo_qty := p_delivery_details_tab(l_idx).bo_qty;
13660 -- HW OPM BUG#:3121616 added qty2s
13661 -- muom
13662 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).req_qty2 := p_delivery_details_tab(l_idx).req_qty2;
13663 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).bo_qty2 := p_delivery_details_tab(l_idx).bo_qty2;
13664 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).source_line_id := p_delivery_details_tab(l_idx).source_line_id;
13665 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).overpick_qty := p_delivery_details_tab(l_idx).overpick_qty;
13666 -- muom
13667 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).overpick_qty2 := p_delivery_details_tab(l_idx).overpick_qty2;
13668 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).fulfillment_base := p_delivery_details_tab(l_idx).fulfillment_base;
13669 -- Bug#3263952
13670 -- RTV BO Cons Changes
13671 x_remain_bo_qtys(x_cons_delivery_details_tab.COUNT) := 0;
13672 x_remain_bo_qty2s(x_cons_delivery_details_tab.COUNT) := 0;
13673
13674 IF l_debug_on THEN
13675 IF p_delivery_details_tab(l_idx).req_qty > 0 THEN
13676 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery details of the Source Line '||p_delivery_details_tab(l_idx).source_line_id ||
13677 ' are getting consolidated into dd_id :'||p_delivery_details_tab(l_idx).delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
13678 END IF;
13679 END IF;
13680 END IF; --}
13681 l_idx := p_delivery_details_tab.NEXT(l_idx);
13682 END LOOP; --}
13683
13684 -- loop thru' input delivery details using the index variable l_idx.
13685 -- add the backordered quantities of the all the delivery details under the same line_id
13686 -- and delete those delivery details from the pl/sql table l_detail_ids.
13687 l_idx := l_detail_ids.FIRST;
13688 WHILE l_idx IS NOT NULL
13689 LOOP --{ loop thru' l_detail_ids
13690 l_curr_line_id := l_line_ids(l_idx);
13691
13692 -- Calculating the consolidate backorder quantity for l_curr_line_id.
13693 -- Loop thru' the list and sum up the backorder quantities of the delivery details for l_curr_line_id.
13694 -- Delete the delivery_details of l_curr_line_id from the pl/sql table l_detail_ids,
13695 -- after getting the corresponding backorder quantity.
13696 l_total_bo_qty := 0; -- Used to store the Consolidated BO qty.
13697 -- HW OPM BUG#:3121616 added qty2s
13698 l_total_bo_qty2 := 0; -- Used to store the Consolidated BO qty2
13699 l_cmp_idx := l_idx; -- Starting from l_idx, find all dds from l_detail_ids which belong to the
13700 -- current line id
13701 WHILE l_cmp_idx IS NOT NULL
13702 LOOP --{
13703 IF ( (l_curr_line_id = l_line_ids(l_cmp_idx)) AND (l_cons_dd_flags(l_cmp_idx) <> 'Y') ) THEN
13704 --{
13705 l_total_bo_qty := l_total_bo_qty + l_bo_qtys(l_cmp_idx);
13706 -- HW OPM BUG#:3121616 added qty2s
13707 l_total_bo_qty2 := l_total_bo_qty2 + l_bo_qty2s(l_cmp_idx);
13708
13709 -- If a delivery detail is completely backorderd, delete it physically(pass p_delete_flag as 'Y'
13710 -- to process_delivery_details).
13711 -- muom
13712 IF (l_fulfillment_base(l_cmp_idx) = 'P' and l_bo_qtys(l_cmp_idx) = l_req_qtys(l_cmp_idx)) OR
13713 (l_fulfillment_base(l_cmp_idx) = 'S' and l_bo_qty2s(l_cmp_idx) = l_req_qty2s(l_cmp_idx)) THEN
13714 --{
13715 --
13716 IF l_debug_on THEN
13717 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit Process_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
13718 WSH_DEBUG_SV.logmsg(l_module_name,'.. to process completely backordered delivery detail '||l_detail_ids(l_cmp_idx),WSH_DEBUG_SV.C_PROC_LEVEL);
13719 END IF;
13720 --
13721 Process_Delivery_Details (
13722 p_delivery_detail_id => l_detail_ids(l_cmp_idx),
13723 p_bo_qty => l_bo_qtys(l_cmp_idx),
13724 p_overpick_qty => l_overpick_qtys(l_cmp_idx),
13725 p_bo_mode => p_bo_mode,
13726 p_delete_flag => 'Y',
13727 p_bo_qty2s => l_bo_qty2s(l_cmp_idx),
13728 -- muom
13729 p_overpick_qty2s => l_overpick_qty2s(l_cmp_idx),
13730 x_return_status => l_return_status
13731 );
13732 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13733 raise FND_API.G_EXC_ERROR;
13734 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13735 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13736 END IF;
13737
13738 -- If a delivery detail is partially backordered , unreserve the backordered
13739 -- quantity and later update its requested quantity. This delivery detail should not be
13740 -- deleted ( pass p_delete_flag as 'N' to process_delivery_details).
13741 -- muom
13742 ELSIF (l_fulfillment_base(l_cmp_idx) = 'P' AND (l_bo_qtys(l_cmp_idx) > 0 OR l_overpick_qtys(l_cmp_idx) > 0)) OR
13743 (l_fulfillment_base(l_cmp_idx) = 'S' AND (l_bo_qty2s(l_cmp_idx) > 0 OR l_overpick_qty2s(l_cmp_idx) > 0)) THEN
13744 --
13745 IF l_debug_on THEN
13746 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit Process_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
13747 WSH_DEBUG_SV.logmsg(l_module_name,'.. to process partially backordered delivery detail '||l_detail_ids(l_cmp_idx),WSH_DEBUG_SV.C_PROC_LEVEL);
13748 END IF;
13749 --
13750 Process_Delivery_Details (
13751 p_delivery_detail_id => l_detail_ids(l_cmp_idx),
13752 p_bo_qty => l_bo_qtys(l_cmp_idx),
13753 p_overpick_qty => l_overpick_qtys(l_cmp_idx),
13754 p_bo_mode => p_bo_mode,
13755 p_delete_flag => 'N',
13756 p_bo_qty2s => l_bo_qty2s(l_cmp_idx),
13757 -- muom
13758 p_overpick_qty2s => l_overpick_qty2s(l_cmp_idx),
13759 x_return_status => l_return_status
13760 );
13761 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13762 raise FND_API.G_EXC_ERROR;
13763 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13764 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13765 END IF;
13766
13767 -- HW OPM BUG#:3121616 added qty2s
13768 update wsh_delivery_details
13769 set requested_quantity = requested_quantity - l_bo_qtys(l_cmp_idx),
13770 requested_quantity2 = requested_quantity2 - l_bo_qty2s(l_cmp_idx),
13771 picked_quantity = picked_quantity - l_bo_qtys(l_cmp_idx) - l_overpick_qtys(l_cmp_idx),
13772 picked_quantity2 = picked_quantity2 - l_bo_qty2s(l_cmp_idx),
13773 cycle_count_quantity = 0,
13774 cycle_count_quantity2 = 0
13775 where delivery_detail_id = l_detail_ids(l_cmp_idx);
13776 -- DBI needs to track the delivery details whose requested_qty or released_status changes
13777 -- Populate the delivery details involved here and then make a single call after the
13778 -- loop ends
13779 l_detail_tab(l_detail_tab.count + 1) := l_detail_ids(l_cmp_idx);
13780 END IF; --}
13781 --}
13782 l_detail_ids.DELETE(l_cmp_idx);
13783
13784 -- delivery detail with l_cons_dd_flags(l_cmp_idx)='Y' should be deleted from l_detail_ids.
13785 ELSIF ( l_line_ids(l_cmp_idx) = l_curr_line_id ) THEN
13786 l_detail_ids.DELETE(l_cmp_idx);
13787 END IF;
13788 l_cmp_idx := l_detail_ids.NEXT(l_cmp_idx);
13789 END LOOP; --} inner Loop(l_cmp_idx)
13790
13791 -- DBI Project
13792 -- Update of wsh_delivery_details where requested_quantity/released_status
13793 -- are changed, call DBI API after the update.
13794 -- This API will also check for DBI Installed or not
13795 IF l_debug_on THEN
13796 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail count-',l_detail_tab.count);
13797 END IF;
13798 WSH_INTEGRATION.DBI_Update_Detail_Log
13799 (p_delivery_detail_id_tab => l_detail_tab,
13800 p_dml_type => 'UPDATE',
13801 x_return_status => l_dbi_rs);
13802
13803 IF l_debug_on THEN
13804 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
13805 END IF;
13806 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13807 -- just pass this return status to caller API
13808 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13809 END IF;
13810 -- End of Code for DBI Project
13811 --
13812
13813 -- Assign the Consolidate BO qtys to the OUT parameter
13814 --Bug 7257451 now storing the remain bo qty's in x_remain_bo_qtys/x_remain_bo_qty2s at same index(l_next_idx)
13815 --as in x_cons_delivery_details_tab so that both table are in sync
13816 l_next_idx := x_cons_delivery_details_tab.FIRST;
13817 WHILE l_next_idx IS NOT NULL
13818 LOOP --{
13819 IF x_cons_delivery_details_tab(l_next_idx).source_line_id = l_curr_line_id THEN
13820 -- muom
13821 IF (x_cons_delivery_details_tab(l_next_idx).fulfillment_base = 'P' and x_cons_delivery_details_tab(l_next_idx).req_qty = 0) OR
13822 (x_cons_delivery_details_tab(l_next_idx).fulfillment_base = 'S' and x_cons_delivery_details_tab(l_next_idx).req_qty2 = 0) THEN
13823 x_remain_bo_qtys(l_next_idx) := 0;
13824 x_remain_bo_qty2s(l_next_idx) := 0;
13825 ELSE
13826 x_remain_bo_qtys(l_next_idx) := l_total_bo_qty;
13827 -- Bug#3670261
13828 -- Delete the Freight Costs only if Consolidation happens and
13829 -- if delivery detail is going to be completely backordered.
13830 -- muom
13831 IF (x_cons_delivery_details_tab(l_next_idx).fulfillment_base = 'P' and l_total_bo_qty > 0 AND
13832 x_cons_delivery_details_tab(l_next_idx).req_qty = x_cons_delivery_details_tab(l_next_idx).bo_qty) OR
13833 (x_cons_delivery_details_tab(l_next_idx).fulfillment_base = 'S' and l_total_bo_qty2 > 0 AND
13834 x_cons_delivery_details_tab(l_next_idx).req_qty2 = x_cons_delivery_details_tab(l_next_idx).bo_qty2)
13835 THEN
13836 l_freight_detail_ids(l_freight_detail_ids.COUNT+1) := x_cons_delivery_details_tab(l_next_idx).delivery_detail_id;
13837 END IF;
13838 --
13839 -- HW OPM BUG#:3121616 added qty2s. Added NVL since x_remain_bo_qtys2 is
13840 -- an OUT parameter and for discrete and OPM single UOM lines returning NULL
13841 -- will cause a problem
13842 x_remain_bo_qty2s(l_next_idx) := nvl(l_total_bo_qty2,0);
13843 END IF;
13844 END IF;
13845 l_next_idx := x_cons_delivery_details_tab.NEXT(l_next_idx);
13846 END LOOP; --}
13847 --
13848 IF l_debug_on THEN
13849 WSH_DEBUG_SV.logmsg(l_module_name,'Consolidated Backordered Quantity of the Source Line '||l_curr_line_id||' is '||l_total_bo_qty,WSH_DEBUG_SV.C_PROC_LEVEL);
13850 -- HW OPM BUG#:3121616 added qty2s
13851 WSH_DEBUG_SV.logmsg(l_module_name,'Consolidated Backordered Quantity2 of the Source Line '||l_curr_line_id||' is '||l_total_bo_qty2,WSH_DEBUG_SV.C_PROC_LEVEL);
13852 END IF;
13853 l_idx := l_detail_ids.NEXT(l_idx);
13854 END LOOP; -- } Outer Loop(l_idx)
13855
13856 -- Bug#3670261
13857 -- Deleting the Freight Costs associated with the delivery details selected for Consolidation
13858 FORALL i IN 1..l_freight_detail_ids.COUNT
13859 DELETE FROM WSH_FREIGHT_COSTS
13860 WHERE delivery_detail_id = l_freight_detail_ids(i);
13861 IF l_debug_on THEN
13862 WSH_DEBUG_SV.log(l_module_name,'Freight Cost Rows deleted',SQL%ROWCOUNT);
13863 END IF;
13864
13865 l_req_qtys.DELETE;
13866 l_bo_qtys.DELETE;
13867 -- HW OPM BUG#:3121616 added qty2s
13868 l_bo_qty2s.DELETE;
13869
13870 --
13871 -- Debug Statements
13872 --
13873 IF l_debug_on THEN
13874 WSH_DEBUG_SV.pop(l_module_name);
13875 END IF;
13876 --
13877
13878 EXCEPTION
13879 WHEN FND_API.G_EXC_ERROR THEN
13880 x_return_status := FND_API.G_RET_STS_ERROR;
13881 --
13882 IF l_debug_on THEN
13883 wsh_debug_sv.logmsg(l_module_name, 'FND_API.G_EXC_ERROR exception has occired.',wsh_debug_sv.c_excep_level);
13884 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
13885 END IF;
13886 --
13887
13888 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13889 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13890 --
13891 IF l_debug_on THEN
13892 wsh_debug_sv.logmsg(l_module_name, 'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.', wsh_debug_sv.c_excep_level);
13893 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
13894 END IF;
13895 --
13896
13897 WHEN OTHERS THEN
13898 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13899 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Consolidate_Delivery_Details',l_module_name);
13900 --
13901 -- Debug Statements
13902 --
13903 IF l_debug_on THEN
13904 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13905 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13906 END IF;
13907 --
13908
13909 END Consolidate_Delivery_Details;
13910
13911
13912 -- K: MDC
13913 PROCEDURE Delete_Consol_Record(
13914 p_detail_id_tab IN wsh_util_core.id_tab_type,
13915 x_return_status OUT NOCOPY VARCHAR2) IS
13916
13917 l_debug_on BOOLEAN;
13918 --
13919 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'delete_consol_record';
13920 BEGIN
13921 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13922 --
13923 IF l_debug_on IS NULL
13924 THEN
13925 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13926 END IF;
13927 IF l_debug_on THEN
13928 WSH_DEBUG_SV.push(l_module_name);
13929 END IF;
13930
13931 x_return_status := FND_API.G_RET_STS_SUCCESS;
13932
13933 FORALL i in p_detail_id_tab.first..p_detail_id_tab.LAST
13934 update wsh_delivery_assignments
13935 set type = 'S'
13936 where type = 'O'
13937 and delivery_detail_id = p_detail_id_tab(i);
13938
13939 IF sql%found THEN
13940
13941 FORALL i in p_detail_id_tab.first..p_detail_id_tab.LAST
13942 delete from wsh_delivery_assignments
13943 where delivery_detail_id = p_detail_id_tab(i)
13944 and type = 'C';
13945
13946 END IF;
13947 IF l_debug_on THEN
13948 WSH_DEBUG_SV.pop(l_module_name);
13949 END IF;
13950 EXCEPTION
13951 WHEN OTHERS THEN
13952 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13953 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Unassign_Top_Detail_from_Delivery',l_module_name);
13954 --
13955 -- Debug Statements
13956 --
13957 IF l_debug_on THEN
13958 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13959 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13960 END IF;
13961 --
13962 END Delete_Consol_Record;
13963
13964 PROCEDURE Create_Consol_Record(
13965 p_detail_id_tab IN wsh_util_core.id_tab_type,
13966 x_return_status OUT NOCOPY VARCHAR2) IS
13967
13968 cursor c_get_consolidation_delivery (p_det_id IN NUMBER) is
13969 select l1.delivery_id, l2.delivery_id
13970 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_delivery_assignments a
13971 where a.delivery_detail_id = p_det_id
13972 and l1.delivery_id = a.delivery_id
13973 and l1.parent_delivery_leg_id = l2.delivery_leg_id
13974 and a.parent_delivery_detail_id is NULL
13975 and NVL(a.type, 'S') = 'S';
13976
13977 l_consol_delivery_id_tab wsh_util_core.id_tab_type;
13978 l_delivery_id_tab wsh_util_core.id_tab_type;
13979 l_detail_id_tab wsh_util_core.id_tab_type;
13980 l_delivery_id NUMBER;
13981 l_consol_delivery_id NUMBER;
13982 i NUMBER;
13983 j NUMBER := 0;
13984
13985 l_debug_on BOOLEAN;
13986 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'create_consol_record';
13987
13988 BEGIN
13989 --
13990 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13991 --
13992 IF l_debug_on IS NULL
13993 THEN
13994 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13995 END IF;
13996 IF l_debug_on THEN
13997 WSH_DEBUG_SV.push(l_module_name);
13998 WSH_DEBUG_SV.log(l_module_name, 'p_detail_id_tab.count',p_detail_id_tab.count );
13999 END IF;
14000
14001 x_return_status := FND_API.G_RET_STS_SUCCESS;
14002
14003 i := p_detail_id_tab.FIRST;
14004
14005 WHILE i is NOT NULL LOOP
14006
14007 IF l_debug_on THEN
14008 WSH_DEBUG_SV.log(l_module_name, 'p_detail_id_tab(i)', p_detail_id_tab(i) );
14009 END IF;
14010 OPEN c_get_consolidation_delivery(p_detail_id_tab(i));
14011 FETCH c_get_consolidation_delivery
14012 INTO l_delivery_id, l_consol_delivery_id;
14013 IF c_get_consolidation_delivery%FOUND THEN
14014 j := j + 1;
14015 l_consol_delivery_id_tab(j) := l_consol_delivery_id;
14016 l_delivery_id_tab(j) := l_delivery_id;
14017 l_detail_id_tab(j) := p_detail_id_tab(i);
14018 END IF;
14019 CLOSE c_get_consolidation_delivery;
14020 i := p_detail_id_tab.next(i);
14021
14022 END LOOP;
14023
14024 IF l_detail_id_tab.count > 0 THEN
14025
14026 IF l_debug_on THEN
14027 WSH_DEBUG_SV.logmsg(l_module_name, 'updating tabcount', l_detail_id_tab.count);
14028 END IF;
14029 FORALL i in l_detail_id_tab.first..l_detail_id_tab.count
14030 update wsh_delivery_assignments
14031 set type = 'O',
14032 parent_delivery_detail_id = NULL
14033 where NVL(type, 'S') = 'S'
14034 and delivery_detail_id = l_detail_id_tab(i);
14035
14036 FORALL i in l_detail_id_tab.first..l_detail_id_tab.count
14037 INSERT INTO wsh_delivery_assignments (
14038 delivery_id,
14039 parent_delivery_id,
14040 delivery_detail_id,
14041 parent_delivery_detail_id,
14042 creation_date,
14043 created_by,
14044 last_update_date,
14045 last_updated_by,
14046 last_update_login,
14047 program_application_id,
14048 program_id,
14049 program_update_date,
14050 request_id,
14051 active_flag,
14052 delivery_assignment_id,
14053 type
14054 ) VALUES (
14055 l_delivery_id_tab(i),
14056 l_consol_delivery_id_tab(i),
14057 l_detail_id_tab(i),
14058 NULL,
14059 SYSDATE,
14060 FND_GLOBAL.USER_ID,
14061 SYSDATE,
14062 FND_GLOBAL.USER_ID,
14063 FND_GLOBAL.USER_ID,
14064 NULL,
14065 NULL,
14066 NULL,
14067 NULL,
14068 NULL,
14069 wsh_delivery_assignments_s.nextval,
14070 'C'
14071 );
14072
14073
14074 END IF;
14075
14076
14077 IF l_debug_on THEN
14078 WSH_DEBUG_SV.pop(l_module_name);
14079 END IF;
14080
14081 EXCEPTION
14082
14083 WHEN OTHERS THEN
14084 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
14085 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record',l_module_name);
14086 --
14087 -- Debug Statements
14088 --
14089 IF l_debug_on THEN
14090 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
14091 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
14092 END IF;
14093 --
14094 END Create_Consol_Record;
14095
14096 END WSH_DELIVERY_DETAILS_ACTIONS;