[Home] [Help]
PACKAGE BODY: APPS.WSH_DELIVERY_DETAILS_ACTIONS
Source
1 PACKAGE BODY WSH_DELIVERY_DETAILS_ACTIONS as
2 /* $Header: WSHDDACB.pls 120.36.12010000.3 2008/11/06 11:53:07 anvarshn 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
216 BEGIN
217
218
219 -- If the quantity to reserve is passed and null or missing, we do not
220 -- need to go through this procedure.
221 --
222 --
223 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
224 --
225 IF l_debug_on IS NULL
226 THEN
227 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
228 END IF;
229 --
230 IF l_debug_on THEN
231 WSH_DEBUG_SV.push(l_module_name);
232 --
233 -- 2587777
234
235 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY2_TO_UNRESERVE',P_QUANTITY2_TO_UNRESERVE);
236 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID:P_QUANTITY_TO_UNRESERVE:P_QUANTITY2_TO_UNRESERVE: P_UNRESERVE_MODE:
237 P_OVERRIDE_RETAIN_ATO_RSV ;',
238 P_DELIVERY_DETAIL_ID
239 ||':'||P_QUANTITY_TO_UNRESERVE
240 ||':'||P_QUANTITY2_TO_UNRESERVE
241 ||':'||P_UNRESERVE_MODE
242 ||':'||P_OVERRIDE_RETAIN_ATO_RSV);
243 END IF;
244 --
245 IF p_quantity_to_unreserve is null OR
246 p_quantity_to_unreserve = FND_API.G_MISS_NUM THEN
247 goto end_of_loop;
248 END IF;
249
250 --
251 IF l_debug_on THEN
252 WSH_DEBUG_SV.logmsg(l_module_name, 'P_DELIVERY_DETAIL_ID : G_CODE_RELEASE_LEVEL ;'
253 || P_DELIVERY_DETAIL_ID ||': '|| G_CODE_RELEASE_LEVEL );
254 END IF;
255 --
256
257 IF ( G_CODE_RELEASE_LEVEL is NULL ) THEN
258 G_CODE_RELEASE_LEVEL := WSH_CODE_CONTROL.Get_Code_Release_Level;
259 END IF;
260
261 --
262 IF l_debug_on THEN
263 WSH_DEBUG_SV.logmsg(l_module_name, 'G_CODE_RELEASE_LEVEL ' || G_CODE_RELEASE_LEVEL );
264 END IF;
265 --
266
267 OPEN c_line_details;
268 FETCH c_line_details INTO l_line_rec ;
269
270 IF c_line_details%NOTFOUND THEN
271 CLOSE c_line_details;
272 goto end_of_loop;
273 END IF;
274 CLOSE c_line_details;
275
276 -- HW BUG#:2005977
277 --
278 IF l_debug_on THEN
279 -- 2747520
280 WSH_DEBUG_SV.log(l_module_name,'Ln_id:Hdr_id:Org_id:Src-doc-id:SubInv:Rev:Lot#:Locat-id ; ',
281 l_line_rec.line_id
282 ||':'|| l_line_rec.header_id
283 ||':'|| l_line_rec.organization_id
284 ||':'|| l_line_rec.source_document_type_id
285 ||':'|| l_line_rec.subinventory
286 ||':'|| l_line_rec.revision
287 ||':'|| l_line_rec.lot_number
288 -- HW 4178299 - Added inventory_item_id, uom and uom2
289 ||':'|| l_line_rec.inventory_item_id
290 ||':'|| l_line_rec.requested_quantity_uom
291 ||':'|| l_line_rec.ordered_quantity_uom2
292 ||':'|| l_line_rec.locator_id);
293 WSH_DEBUG_SV.log(l_module_name,'ATO-Ln-id : Rel-Stat : Dt-Sched HH24:MI:SS ; ',
294 l_line_rec.ato_line_id
295 ||':'|| l_line_rec.released_status
296 ||':'|| to_char(l_line_rec.date_scheduled,'MM/DD/YYYY HH24:MI:SS'));
297
298 -- 2587777
299
300 END IF;
301 --
302 --HW OPMCONV - Removed checking for process org
303
304 -- end of BUG#:2005977
305 IF l_line_rec.source_document_type_id = 10 THEN
306 -- This is an internal order line. We need to give
307 -- a different demand source type for these lines.
308 l_rsv_rec.demand_source_type_id :=
309 INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_INTERNAL_ORD;
310 -- intenal order
311 ELSE
312 l_rsv_rec.demand_source_type_id :=
313 INV_RESERVATION_GLOBAL.G_SOURCE_TYPE_OE; -- order entry
314 END IF;
315
316 -- Get demand_source_header_id from mtl_sales_orders
317
318 --
319 IF l_debug_on THEN
320 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_SALESORDER.GET_SALESORDER_FOR_OEHEADER',WSH_DEBUG_SV.C_PROC_LEVEL);
321 END IF;
322 --
323 -- caching the sales_order_id : 2807093-2747520
324 IF ( l_sales_order_id is NULL OR l_line_rec.header_id <> nvl(g_header_id, 0) ) THEN
325 l_sales_order_id := inv_salesorder.get_salesorder_for_oeheader(
326 l_line_rec.header_id);
327 g_header_id := l_line_rec.header_id;
328 END IF;
329 --
330 IF l_debug_on THEN
331 WSH_DEBUG_SV.logmsg(l_module_name, 'L_SALES_ORDER_ID' || L_SALES_ORDER_ID );
332 END IF;
333 --
334
335 l_rsv_rec.demand_source_header_id := l_sales_order_id;
336 l_rsv_rec.demand_source_line_id := l_line_rec.line_id;
337
338 -- Bug 1842613 : Initializing inventory controls present in wsh_delivery_details
339 IF ( l_line_rec.organization_id IS NOT NULL ) THEN
340 l_rsv_rec.organization_id := l_line_rec.organization_id;
341 END IF;
342 IF ( l_line_rec.subinventory IS NOT NULL) THEN
343 l_rsv_rec.subinventory_code := l_line_rec.subinventory;
344 END IF;
345 IF ( l_line_rec.revision IS NOT NULL ) THEN
346 l_rsv_rec.revision := l_line_rec.revision;
347 END IF;
348 IF ( l_line_rec.lot_number IS NOT NULL ) THEN
349 l_rsv_rec.lot_number := l_line_rec.lot_number;
350 END IF;
351 IF ( l_line_rec.locator_id IS NOT NULL ) THEN
352 l_rsv_rec.locator_id := l_line_rec.locator_id;
353 END IF;
354 --Added condition p_unreserve_mode = 'RETAIN_RSV' for bug 4721577
355 IF ( p_unreserve_mode = 'RETAIN_RSV' AND
356 l_line_rec.parent_delivery_detail_id IS NOT NULL AND
357 wsh_util_validate.Check_Wms_Org(l_line_rec.organization_id)='Y') THEN
358 OPEN c_lpn_id(l_line_rec.parent_delivery_detail_id);
359 FETCH c_lpn_id INTO l_lpn_id;
360 IF (c_lpn_id%FOUND) THEN
361 IF l_lpn_id is not null THEN
362 l_rsv_rec.lpn_id := l_lpn_id;
363 END IF;
364 END IF;
365 CLOSE c_lpn_id;
366 END IF;
367 --
368
369 --bug 4950329: query only staged reservations for cycle-count
370 IF (p_unreserve_mode = 'CYCLE_COUNT') THEN
371 l_rsv_rec.staged_flag := 'Y';
372 END IF;
373
374
375 -- HW BUG#:2005977 for OPM. Need to branch
376 -- HW OPMCONV - No need to branch code
377 --
378 IF l_debug_on THEN
379 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.QUERY_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
380 END IF;
381 --
382 -- Bug 3431358(Moved this code from top to here)
383 -- 2747520 : Set reservation_type to 'U'nstaged or 'S'taged
384 IF (l_line_rec.released_status in ('R','B','N') ) THEN
385 l_cancel_rsv_type := 'U';
386 OPEN c_nonstaged_qty;
387 FETCH c_nonstaged_qty
388 INTO l_nonstaged_qty, l_nonstaged_qty2;
389 CLOSE c_nonstaged_qty;
390 ELSIF (l_line_rec.released_status in ('C','Y')) THEN
391 l_cancel_rsv_type := 'S';
392 ELSIF (l_line_rec.released_status = 'S') THEN
393 l_cancel_rsv_type := 'U';
394 --X-dock
395 IF l_line_rec.move_order_line_id IS NOT NULL THEN
396 l_trolin_rec := INV_TROLIN_UTIL.Query_Row(p_line_id => l_line_rec.move_order_line_id);
397 ELSE -- MOL is null for X-dock case
398 l_trolin_rec.quantity_detailed := l_line_rec.requested_quantity;
399 l_trolin_rec.secondary_quantity_detailed := l_line_rec.requested_quantity2;
400 END IF;
401 -- end of X-dock changes
402
403 IF (l_trolin_rec.quantity_detailed > 0) THEN
404 l_dtld_qty_to_unreserve := l_trolin_rec.quantity_detailed;
405 -- HW OPMCONV - Added Qty2
406 l_dtld_qty2_to_unreserve := l_trolin_rec.secondary_quantity_detailed;
407 ELSE
408 -- HW OPMCONV - Added Qty2
409 l_dtld_qty_to_unreserve := 0;
410 l_dtld_qty2_to_unreserve := 0;
411 END IF;
412 ELSE
413 l_cancel_rsv_type := 'X'; -- ignoring if not in above released status
414 END IF;
415 -- 2747520
416 -- End Bug3431358
417
418 --2587777
419 IF ( G_ATO_RSV_PROFILE IS NULL ) THEN
420 fnd_profile.get('WSH_RETAIN_ATO_RESERVATIONS', G_ATO_RSV_PROFILE);
421 if ( G_ATO_RSV_PROFILE is NULL ) THEN -- By Default this Profile is 'N'
422 G_ATO_RSV_PROFILE := 'N';
423 end if;
424 END IF;
425 IF l_debug_on THEN
426 WSH_DEBUG_SV.log(l_module_name,'g_ato_rsv_profile',G_ATO_RSV_PROFILE);
427 END IF;
428 --2587777
429
430 --X-dock
431 IF l_line_rec.released_status = WSH_DELIVERY_DETAILS_PKG.C_RELEASED_TO_WAREHOUSE THEN
432 WSH_USA_INV_PVT.get_putaway_detail_id
433 (p_detail_id => p_delivery_detail_id,
434 p_released_status => l_line_rec.released_status,
435 p_move_order_line_id => l_line_rec.move_order_line_id,
436 x_detail_id => l_rsv_rec.demand_source_line_detail,
437 x_return_status => l_return_status);
438
439 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
441 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
442 RAISE FND_API.G_EXC_ERROR;
443 END IF;
444 END IF;
445 --end of X-dock
446
447 inv_reservation_pub.query_reservation
448 (p_api_version_number => 1.0,
449 p_init_msg_lst => fnd_api.g_true,
450 x_return_status => l_return_status,
451 x_msg_count => l_msg_count,
452 x_msg_data => l_msg_data,
453 p_query_input => l_rsv_rec,
454 p_cancel_order_mode => INV_RESERVATION_GLOBAL.G_CANCEL_ORDER_YES,
455 x_mtl_reservation_tbl => l_rsv_tbl,
456 x_mtl_reservation_tbl_count => l_count,
457 x_error_code => l_x_error_code,
458 p_lock_records => l_lock_records,
459 p_sort_by_req_date => l_sort_by_req_date
460 );
461
462
463 -- 2747520: for Non-Staged
464 IF ( l_cancel_rsv_type = 'U') THEN
465 l_nonstaged_rsv_qty := 0;
466
467 FOR l_counter in 1..l_count
468 LOOP
469 IF l_debug_on THEN
470 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.QUERY_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
471 END IF;
472
473 INV_STAGED_RESERVATION_UTIL.query_staged_flag(
474 x_return_status => x_return_status,
475 x_msg_count => l_msg_count,
476 x_msg_data => l_msg_data,
477 x_staged_flag => l_staged_flag,
478 p_reservation_id => l_rsv_tbl(l_counter).reservation_id);
479
480 IF l_staged_flag <> 'Y' THEN
481 -- HW OPMCONV - Added Qty2
482 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));
483 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));
484 END IF;
485
486 END LOOP;
487 END IF;
488 -- 2747520
489
490 l_qty_to_unreserve := p_quantity_to_unreserve;
491 -- HW OPMCONV - Added Qty2
492 l_qty2_to_unreserve := p_quantity2_to_unreserve;
493
494
495 -- HW 4178299 - Need to convert Qty2 to get correct value
496 IF l_debug_on THEN
497 WSH_DEBUG_SV.log(l_module_name,'Value of Qty2_to_Unreserve before conversion is ',
498 l_qty2_to_unreserve);
499
500 END IF;
501
502 IF ( l_qty2_to_unreserve is NOT NULL OR
503 l_qty2_to_unreserve <> FND_API.G_MISS_NUM ) THEN
504
505 l_qty2_to_unreserve := WSH_WV_UTILS.convert_uom
506 (
507 item_id => l_line_rec.inventory_item_id
508 ,org_id => l_line_rec.organization_id
509 ,from_uom => l_line_rec.requested_quantity_uom
510 ,to_uom => l_line_rec.ordered_quantity_uom2
511 ,quantity => l_qty_to_unreserve
512 ,lot_number => l_line_rec.lot_number);
513
514 IF l_debug_on THEN
515 WSH_DEBUG_SV.log(l_module_name,'Value of Qty2_to_Unreserve AFTER conversion is ',
516 l_qty2_to_unreserve);
517
518 END IF;
519
520 END IF;
521
522 -- HW end of 4178299
523
524
525
526 -- 2747520 -- if rsv_type = U
527 IF ( l_cancel_rsv_type = 'U') THEN
528 l_remaining_nonstaged_qty := l_nonstaged_qty - l_qty_to_unreserve;
529 -- HW OPMCONV - Added Qty2
530 l_remaining_nonstaged_qty2 := l_nonstaged_qty2 - l_qty2_to_unreserve;
531 IF l_debug_on THEN
532 WSH_DEBUG_SV.log(l_module_name,'l_nonstaged_rsv_qty:l_nonstaged_qty:l_dtld_qty_to_unreserve:l_remaining_nonstaged_qty ;',
533 l_nonstaged_rsv_qty
534 ||':'||l_nonstaged_qty
535 ||':'||l_dtld_qty_to_unreserve
536 ||':'||l_remaining_nonstaged_qty );
537 -- HW OPMCONV - Added Qty2
538 WSH_DEBUG_SV.log(l_module_name,'l_nonstaged_rsv_qty2:l_nonstaged_qty:l_dtld_qty2_to_unreserve:l_remaining_nonstaged_qty2 ;',
539 l_nonstaged_rsv_qty2
540 ||':'||l_nonstaged_qty2
541 ||':'||l_dtld_qty2_to_unreserve
542 ||':'||l_remaining_nonstaged_qty2 );
543
544 END IF;
545 -- Only Unreserve the Excess Unstgd. Rsvtns.
546 IF (l_nonstaged_rsv_qty > l_remaining_nonstaged_qty) THEN
547 l_qty_to_unreserve := l_nonstaged_rsv_qty - l_remaining_nonstaged_qty;
548 -- HW OPMCONV - Added Qty2
549 l_qty2_to_unreserve := l_nonstaged_rsv_qty2 - l_remaining_nonstaged_qty2;
550 ELSE
551 l_qty_to_unreserve := 0;
552 -- HW OPMCONV - Added Qty2
553 l_qty2_to_unreserve := 0;
554 END IF;
555 END IF; -- if rsv_type = U
556 -- 2747520
557
558 IF l_debug_on THEN
559 WSH_DEBUG_SV.log(l_module_name,'l_rsv_tbl.COUNT:l_x_error_code :: ',
560 l_rsv_tbl.COUNT||':'||l_x_error_code);
561 END IF;
562
563 FOR I IN 1..l_rsv_tbl.COUNT LOOP
564
565 l_rsv_rec := l_rsv_tbl(I);
566 --
567 IF l_debug_on THEN
568 -- 2587777
569 WSH_DEBUG_SV.log(l_module_name,'rsv.id:inv-item-id:Rsvtn-Qty:Org-id:SubInv-Code:Locator-id:Rev:Lot# ; ',
570 l_rsv_rec.reservation_id
571 ||':'||l_rsv_rec.inventory_item_id
572 ||':'||l_rsv_rec.reservation_quantity
573 ||':'||l_rsv_rec.secondary_reservation_quantity
574 ||':'||L_RSV_REC.ORGANIZATION_ID
575 ||':'||L_RSV_REC.SUBINVENTORY_CODE
576 ||':'||L_RSV_REC.LOCATOR_ID
577 ||':'||L_RSV_REC.REVISION
578 ||':'||L_RSV_REC.LOT_NUMBER );
579 -- 2587777
580 END IF;
581 --
582 -- 2747520 : Query Staged Reservation
583 IF l_debug_on THEN
584 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.QUERY_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
585 END IF;
586 --
587 inv_staged_reservation_util.query_staged_flag(
588 x_return_status => l_return_status
589 , x_msg_count => l_msg_count
590 , x_msg_data => l_msg_data
591 , x_staged_flag => l_staged_flag
592 , p_reservation_id => l_rsv_rec.reservation_id);
593 --
594 IF l_debug_on THEN
595
596 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS QUERY STAGED FLAG: ' || L_RETURN_STATUS );
597 END IF;
598 --
599
600 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
601 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
602 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
603 RAISE FND_API.G_EXC_ERROR;
604 END IF;
605
606 IF l_debug_on THEN
607 WSH_DEBUG_SV.log(l_module_name, 'RES QTY : QTY TO UNRESVRVE : l_staged_flag ; ',
608 L_RSV_REC.RESERVATION_QUANTITY
609 ||':'||L_QTY_TO_UNRESERVE
610 ||':'||l_staged_flag );
611
612 -- HW OPMCONV - Added Qty2
613 WSH_DEBUG_SV.log(l_module_name, 'RES QTY2 : QTY2 TO UNRESVRVE : l_staged_flag ; ',
614 L_RSV_REC.SECONDARY_RESERVATION_QUANTITY
615 ||':'||L_QTY2_TO_UNRESERVE
616 ||':'||l_staged_flag );
617
618 END IF;
619
620 --
621 -- 2747520 : This will also ensure that Only Non-Staged Staged line UnReserves Non-Stged Rsvtns.
622 -- and Staged Rsvtns. UnReserves Staged Rsvtns.
623 --
624 -- cancel Non-Staged Reservations by non-stged lines
625 IF (l_cancel_rsv_type = 'U' and p_unreserve_mode = 'UNRESERVE' and l_staged_flag <> 'Y') THEN
626
627 -- Check if Retain ATO Profile
628 IF ( l_line_rec.ato_line_id IS NOT NULL AND
629 nvl(p_override_retain_ato_rsv, 'N') = 'N' AND
630 G_ATO_RSV_PROFILE = 'Y' AND
631 G_CODE_RELEASE_LEVEL > '110508' ) THEN
632 NULL; -- Don't Update or Delete the REservations if the above criteria (ATO -Unstgd. Rsvn)is met
633 ELSE
634
635 IF l_debug_on THEN
636 WSH_DEBUG_SV.log(l_module_name,'BEFORE l_prim_rsv_qty: tbl_detailed_qty ; ',
637 l_rsv_tbl(I).primary_reservation_quantity ||':'||
638 l_rsv_tbl(I).detailed_quantity);
639 -- HW OPMCONV - Added Qty2
640 WSH_DEBUG_SV.log(l_module_name,'BEFORE l_secondary_rsv_qty: tbl_detailed_qty2 ; ',
641 l_rsv_tbl(I).secondary_reservation_quantity ||':'||
642 l_rsv_tbl(I).secondary_detailed_quantity);
643 END IF;
644
645 -- Start with orginal primary_reservation_quantity and detailed_quantity
646 l_rsv_new_rec.primary_reservation_quantity := l_rsv_tbl(I).primary_reservation_quantity;
647 l_rsv_new_rec.detailed_quantity := nvl(l_rsv_tbl(I).detailed_quantity,0);
648
649 -- HW OPMCONV - Added Qty2
650 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_tbl(I).secondary_reservation_quantity;
651 l_rsv_new_rec.secondary_detailed_quantity := nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
652
653 -- Tackle Detailed Quantity
654 IF nvl(l_rsv_tbl(I).detailed_quantity,0) <> 0 THEN
655
656 IF (l_dtld_qty_to_unreserve > 0) THEN
657 IF (nvl(l_rsv_tbl(I).detailed_quantity,0) <= l_dtld_qty_to_unreserve) THEN
658 l_dtld_qty_to_unreserve := l_dtld_qty_to_unreserve - nvl(l_rsv_tbl(I).detailed_quantity,0);
659 -- HW OPMCONV - Added Qty2
660 l_dtld_qty2_to_unreserve := l_dtld_qty2_to_unreserve - nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
661
662 l_rsv_new_rec.detailed_quantity := 0;
663 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - nvl(l_rsv_tbl(I).detailed_quantity,0);
664 -- HW OPMCONV - Added Qty2
665 l_rsv_new_rec.secondary_detailed_quantity := 0;
666 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - nvl(l_rsv_tbl(I).secondary_detailed_quantity,0);
667 ELSE
668 l_rsv_new_rec.detailed_quantity := l_rsv_new_rec.detailed_quantity - l_dtld_qty_to_unreserve;
669 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - l_dtld_qty_to_unreserve;
670 l_dtld_qty_to_unreserve := 0;
671 -- HW OPMCONV - Added Qty2
672 l_rsv_new_rec.secondary_detailed_quantity := l_rsv_new_rec.secondary_detailed_quantity - l_dtld_qty_to_unreserve;
673 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - l_dtld_qty2_to_unreserve;
674 l_dtld_qty2_to_unreserve := 0;
675 END IF;
676 END IF;
677
678 END IF;
679
680 -- Tackle Primary Reservation Quantity
681 IF (l_qty_to_unreserve > 0) THEN
682 IF ((l_rsv_new_rec.primary_reservation_quantity - l_rsv_new_rec.detailed_quantity) <= l_qty_to_unreserve) THEN
683 IF l_debug_on THEN
684 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
685
686 END IF;
687 l_qty_to_unreserve := l_qty_to_unreserve - (l_rsv_new_rec.primary_reservation_quantity - l_rsv_new_rec.detailed_quantity);
688 -- HW OPMCONV - Added Qty2
689 l_qty2_to_unreserve := l_qty2_to_unreserve - (l_rsv_new_rec.secondary_reservation_quantity - l_rsv_new_rec.secondary_detailed_quantity);
690 IF l_debug_on THEN
691 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
692
693 END IF;
694
695 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.detailed_quantity;
696 -- HW OPMCONV - Added Qty2
697 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_detailed_quantity;
698 ELSE
699 l_rsv_new_rec.primary_reservation_quantity := l_rsv_new_rec.primary_reservation_quantity - l_qty_to_unreserve;
700 l_qty_to_unreserve := 0;
701 -- HW OPMCONV - Added Qty2
702 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_new_rec.secondary_reservation_quantity - l_qty2_to_unreserve;
703 l_qty2_to_unreserve := 0;
704 END IF;
705 END IF;
706
707 IF l_debug_on THEN
708 WSH_DEBUG_SV.log(l_module_name,'NEW l_prim_rsv_qty: new tbl_detailed_qty ; ',
709 l_rsv_new_rec.primary_reservation_quantity ||':'||
710 l_rsv_new_rec.detailed_quantity);
711 -- HW OPMCONV - Added Qty2
712 WSH_DEBUG_SV.log(l_module_name,'NEW l_seccondary_rsv_qty: new tbl_detailed_qty2 ; ',
713 l_rsv_new_rec.secondary_reservation_quantity ||':'||
714 l_rsv_new_rec.secondary_detailed_quantity);
715 END IF;
716
717 IF l_debug_on THEN
718 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_pub.update_resevation 1',WSH_DEBUG_SV.C_PROC_LEVEL);
719 END IF;
720
721 -- HW OPMCONV - NULL Qty2 if they are not presents
722 IF ( ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
723 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM )
724 OR ( l_rsv_new_rec.secondary_detailed_quantity = 0 OR
725 l_rsv_new_rec.secondary_detailed_quantity = FND_API.G_MISS_NUM ) ) THEN
726 l_rsv_new_rec.secondary_reservation_quantity := NULL;
727 l_rsv_new_rec.secondary_detailed_quantity := NULL;
728 END IF;
729
730
731 IF (l_rsv_new_rec.primary_reservation_quantity > 0) THEN
732
733
734
735 inv_reservation_pub.update_reservation
736 (p_api_version_number => 1.0,
737 p_init_msg_lst => fnd_api.g_true,
738 x_return_status => l_return_status,
739 x_msg_count => l_msg_count,
740 x_msg_data => l_msg_data,
741 p_original_rsv_rec => l_rsv_rec,
742 p_to_rsv_rec => l_rsv_new_rec,
743 p_original_serial_number => l_dummy_sn, -- no serial contorl
744 p_to_serial_number => l_dummy_sn, -- no serial control
745 p_validation_flag => fnd_api.g_true,
746 -- Bug 5099694
747 p_over_reservation_flag =>3
748 );
749
750 IF l_debug_on THEN
751 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE REservation 1: ' || L_RETURN_STATUS );
752 WSH_DEBUG_SV.log(l_module_name,'l_new_prim_rsv_qty: tbl_detailed_qty ; ',
753 l_rsv_new_rec.primary_reservation_quantity ||':'||
754 l_rsv_tbl(I).detailed_quantity);
755 -- HW OPMCONV - Added Qty2
756 WSH_DEBUG_SV.log(l_module_name,'l_new_secondary_rsv_qty: tbl_detailed_qty2 ; ',
757 l_rsv_new_rec.secondary_reservation_quantity ||':'||
758 l_rsv_tbl(I).secondary_detailed_quantity);
759 END IF;
760
761 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
762 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
763 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
764 RAISE FND_API.G_EXC_ERROR;
765 END IF;
766
767 ELSE
768
769 IF l_debug_on THEN
770 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_pub.delete_resevation 1',WSH_DEBUG_SV.C_PROC_LEVEL);
771 END IF;
772
773 inv_reservation_pub.delete_reservation
774 ( p_api_version_number => 1.0
775 , p_init_msg_lst => fnd_api.g_true
776 , x_return_status => l_return_status
777 , x_msg_count => l_msg_count
778 , x_msg_data => l_msg_data
779 , p_rsv_rec => l_rsv_rec
780 , p_serial_number => l_dummy_sn
781 );
782
783 IF l_debug_on THEN
784 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS DELETE REservation 1: ' || L_RETURN_STATUS );
785 END IF;
786
787 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
788 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
789 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
790 RAISE FND_API.G_EXC_ERROR;
791 END IF;
792
793 END IF;
794
795 IF l_debug_on THEN
796 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_unreserve:l_dtld_qty_to_unreserve ; ',
797 l_qty_to_unreserve ||':'||
798 l_dtld_qty_to_unreserve);
799 -- HW OPMCONV - Added Qty2
800 WSH_DEBUG_SV.log(l_module_name,'l_qty2_to_unreserve:l_dtld_qty2_to_unreserve ; ',
801 l_qty2_to_unreserve ||':'||
802 l_dtld_qty2_to_unreserve);
803 END IF;
804
805
806 IF ((l_qty_to_unreserve <= 0) AND (l_dtld_qty_to_unreserve <= 0)) THEN
807 goto end_of_loop;
808 END IF;
809
810 END IF; -- check ATO Profile
811
812 -- Added 'RETAIN_RSV' for bug 4721577
813 ELSIF ( (l_cancel_rsv_type = 'S' and l_staged_flag = 'Y' and p_unreserve_mode in ( 'UNRESERVE', 'RETAIN_RSV' ) ) OR
814 (p_unreserve_mode not in ( 'UNRESERVE', 'RETAIN_RSV' ) ) ) THEN
815
816 IF (l_rsv_rec.reservation_quantity <= l_qty_to_unreserve) THEN -- rsv. Qty <=
817 -- Added 'RETAIN_RSV' for bug 4721577
818 IF ( NVL(p_unreserve_mode, 'UNRESERVE') in ( 'UNRESERVE', 'RETAIN_RSV' ) ) THEN
819 -- 2587777 : -- Ato Item and for Patchset level higher than 'H' , i.e. from 'I' onwards
820 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
821 ( p_unreserve_mode = 'RETAIN_RSV' ) ) AND
822 G_CODE_RELEASE_LEVEL > '110508' )
823
824 THEN
825
826 --
827 IF l_debug_on THEN
828 WSH_DEBUG_SV.log(l_module_name,'l_staged_flag: ',l_staged_flag);
829 END IF;
830 --
831
832 IF ( nvl(l_staged_flag, 'N') = 'Y') THEN -- Staged Flag = Y
833
834 --
835 IF l_debug_on THEN
836 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.UPDATE_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
837 END IF;
838 --
839 inv_staged_reservation_util.update_staged_flag(
840 x_return_status => l_return_status
841 , x_msg_count => l_msg_count
842 , x_msg_data => l_msg_data
843 , p_staged_flag => 'N'
844 , p_reservation_id => l_rsv_rec.reservation_id);
845
846 --
847 IF l_debug_on THEN
848 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE STAGED FLAG: ' || L_RETURN_STATUS );
849 END IF;
850 --
851 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
852 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
853 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
854 RAISE FND_API.G_EXC_ERROR;
855 END IF;
856 END IF; -- Staged Flag
857
858 ELSE -- Non- ATO Item
859 -- 2587777
860 --
861 IF l_debug_on THEN
862 WSH_DEBUG_SV.logmsg(l_module_name, 'CALLING INVS DELETE_RESERVATION' );
863 END IF;
864 --
865 IF l_debug_on THEN
866 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.DELETE_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
867 END IF;
868 --
869
870 inv_reservation_pub.delete_reservation
871 (p_api_version_number => 1.0,
872 p_init_msg_lst => fnd_api.g_true,
873 x_return_status => l_return_status,
874 x_msg_count => l_msg_count,
875 x_msg_data => l_msg_data,
876 p_rsv_rec => l_rsv_rec,
877 p_serial_number => l_dummy_sn
878 );
879 --
880 IF l_debug_on THEN
881 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS DELETE_RESERVATION: ' || L_RETURN_STATUS );
882 END IF;
883 --
884
885 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
886 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
887 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
888 RAISE FND_API.G_EXC_ERROR;
889 END IF;
890 END IF; -- ATO line
891 else -- p_unreserve_mode = 'CYCLE_COUNT'
892 --
893 IF l_debug_on THEN
894 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit ONE INV_PICK_RELEASE_PUB.RESERVE_UNCONFIRMED_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
895 WSH_DEBUG_SV.log(l_module_name, 'l_rsv_rec.reservation_quantity: ' || l_rsv_rec.reservation_quantity );
896 WSH_DEBUG_SV.log(l_module_name, ' l_rsv_rec.reservation_quantity2: ' || l_rsv_rec.secondary_reservation_quantity );
897 END IF;
898 --
899 IF ( l_rsv_rec.secondary_reservation_quantity = 0 OR
900 l_rsv_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM ) THEN
901 l_rsv_rec.secondary_reservation_quantity := NULL;
902 END IF;
903 -- HW INVCONV - Added Qty2
904 Inv_Pick_Release_Pub.Reserve_Unconfirmed_Quantity(
905 p_api_version => 1.0,
906 p_init_msg_list => FND_API.G_FALSE,
907 p_commit => FND_API.G_FALSE,
908 x_return_status => l_reserve_status,
909 x_msg_count => l_reserve_msg_count,
910 x_msg_data => l_reserve_msg_data,
911 p_missing_quantity => l_rsv_rec.reservation_quantity ,
912 p_missing_quantity2 => l_rsv_rec.secondary_reservation_quantity ,
913 p_reservation_id => l_rsv_rec.reservation_id,
914 p_demand_source_header_id => l_sales_order_id,
915 p_demand_source_line_id => l_line_rec.line_id,
916 p_organization_id => l_rsv_rec.organization_id,
917 p_inventory_item_id => l_rsv_rec.inventory_item_id,
918 p_subinventory_code => l_rsv_rec.subinventory_code ,
919 p_locator_id => l_rsv_rec.locator_id,
920 p_revision => l_rsv_rec.revision,
921 p_lot_number => l_rsv_rec.lot_number);
922
923 IF ((l_reserve_status = WSH_UTIL_CORE.G_RET_STS_ERROR) or
924 (l_reserve_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN -- rsv.status
925 --
926 IF l_debug_on THEN
927 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE UNCONFIRMED QUANTITY FAILED' );
928 WSH_DEBUG_SV.logmsg(l_module_name, 'MESSAGE COUNT: '|| TO_CHAR ( L_RESERVE_MSG_COUNT ) );
929 END IF;
930 --
931 IF (l_reserve_msg_count = 0) or (l_reserve_msg_count is NULL) THEN -- rsv.msg.count
932 null;
933 ELSE
934 FOR i in 1 ..l_reserve_msg_count
935 LOOP
936 l_reserve_message := fnd_msg_pub.get(i,'T');
937 l_reserve_message := replace(l_reserve_message,chr(0), ' ');
938 --
939 IF l_debug_on THEN
940 WSH_DEBUG_SV.logmsg(l_module_name, L_RESERVE_MESSAGE );
941 END IF;
942 --
943 END LOOP;
944 END if; -- rsv.msg.count
945 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
946 --
947 IF l_debug_on THEN
948 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE_UNCONFIRMED_QUANTITY FAILED.. GOING ON... ' );
949 END IF;
950 --
951 END IF;
952 end if; -- rsv.status
953
954 IF l_debug_on THEN
955 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_unreserve',
956 l_qty_to_unreserve);
957 WSH_DEBUG_SV.log(l_module_name,'reservation_quantity',
958 l_rsv_rec.reservation_quantity);
959 END IF;
960 IF l_debug_on THEN
961 WSH_DEBUG_SV.logmsg(l_module_name, 'Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
962
963 END IF;
964
965 l_qty_to_unreserve := l_qty_to_unreserve -
966 l_rsv_rec.reservation_quantity;
967 -- HW OPMCONV- Added Qty2
968 l_qty2_to_unreserve := l_qty2_to_unreserve -
969 l_rsv_rec.secondary_reservation_quantity;
970 IF l_debug_on THEN
971
972 WSH_DEBUG_SV.logmsg(l_module_name, 'After calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
973 WSH_DEBUG_SV.logmsg(l_module_name, 'After calculation l_qty2_to_unreserve: ' || l_qty2_to_unreserve );
974
975 END IF;
976
977 IF (l_qty_to_unreserve <= 0) THEN
978 goto end_of_loop;
979 END IF;
980
981 ELSE -- rsv. qty >
982
983 l_rsv_new_rec := l_rsv_rec;
984
985 --
986 IF l_debug_on THEN
987 WSH_DEBUG_SV.logmsg(l_module_name, 'OLD QTY : NEW QTY :: ' || L_RSV_REC.RESERVATION_QUANTITY
988 ||': '|| L_RSV_NEW_REC.RESERVATION_QUANTITY );
989
990 -- HW OPMCONV - Added Qty2
991 WSH_DEBUG_SV.logmsg(l_module_name, 'OLD QTY2 : NEW QTY2 :: ' || L_RSV_REC.SECONDARY_RESERVATION_QUANTITY
992 ||': '|| L_RSV_NEW_REC.SECONDARY_RESERVATION_QUANTITY );
993 END IF;
994 --
995 l_rsv_new_rec.attribute1 := l_line_rec.preferred_grade;
996 l_rsv_new_rec.attribute2 := l_line_rec.ordered_quantity2;
997 l_rsv_new_rec.attribute3 := l_line_rec.ordered_quantity_uom2;
998
999 -- Added 'RETAIN_RSV' for bug 4721577
1000 if ( NVL(p_unreserve_mode,'UNRESERVE') in ( 'RETAIN_RSV', 'UNRESERVE' ) ) then
1001 -- 2587777 -- Ato Item and Patchset level higher than 'H', i.e. from 'I' onwards
1002 IF ( ( ( l_line_rec.ato_line_id IS NOT NULL AND
1003 G_ATO_RSV_PROFILE = 'Y' AND
1004 nvl(p_override_retain_ato_rsv, 'N') = 'N' ) OR
1005 ( p_unreserve_mode = 'RETAIN_RSV' ) ) AND
1006 G_CODE_RELEASE_LEVEL > '110508' ) THEN
1007
1008 -- transfer reservation for ATOs
1009 -- 2747520: At this point, it is assumed that the Rsv. records are Staged Only (filtered above) and
1010 -- the detailed_qty. for such staged recs. will be always 0
1011
1012 l_rsv_new_rec.reservation_quantity := l_qty_to_unreserve ;
1013 l_rsv_new_rec.primary_reservation_quantity := l_qty_to_unreserve ;
1014 -- HW OPMCONV- Added Qty2
1015 l_rsv_new_rec.secondary_reservation_quantity := l_qty2_to_unreserve ;
1016 l_rsv_new_rec.detailed_quantity := least(nvl(l_rsv_rec.detailed_quantity, 0), l_qty_to_unreserve);
1017 -- HW OPMCONV- Added Qty2
1018 l_rsv_new_rec.secondary_detailed_quantity := least(nvl(l_rsv_rec.secondary_detailed_quantity, 0), l_qty2_to_unreserve);
1019 -- 2847687 : after discussion with INV the Req.date will now be passed on as date_sched instead of sysdate
1020 l_rsv_new_rec.requirement_date := l_line_rec.date_scheduled;
1021 l_rsv_new_rec.ship_ready_flag := 2;
1022 -- R12, X-dock
1023 l_rsv_new_rec.demand_source_line_detail := null;
1024
1025 --
1026 IF l_debug_on THEN
1027 WSH_DEBUG_SV.logmsg(l_module_name, 'NEW Split Record QTY : Dtld QTY :: ' ||
1028 L_RSV_NEW_REC.RESERVATION_QUANTITY ||': '||
1029 L_RSV_NEW_REC.DETAILED_QUANTITY );
1030 -- HW OPMCONV - Added Qty2
1031 WSH_DEBUG_SV.logmsg(l_module_name, 'NEW Split Record QTY2 : Dtld QTY2 :: ' ||
1032 L_RSV_NEW_REC.SECONDARY_RESERVATION_QUANTITY ||': '||
1033 L_RSV_NEW_REC.SECONDARY_DETAILED_QUANTITY );
1034 END IF;
1035 --
1036 IF l_debug_on THEN
1037 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.TRANSFER_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
1038 END IF;
1039 --
1040 --
1041
1042 -- HW OPMCONV - NULL Qty2 if they are not presents
1043 IF ( ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
1044 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM )
1045 OR ( l_rsv_new_rec.secondary_detailed_quantity = 0 OR
1046 l_rsv_new_rec.secondary_detailed_quantity = FND_API.G_MISS_NUM ) ) THEN
1047 l_rsv_new_rec.secondary_reservation_quantity := NULL;
1048 l_rsv_new_rec.secondary_detailed_quantity := NULL;
1049 END IF;
1050
1051
1052 INV_RESERVATION_PUB.transfer_reservation
1053 (p_api_version_number => 1.0,
1054 p_init_msg_lst => fnd_api.g_true,
1055 x_return_status => l_return_status,
1056 x_msg_count => l_msg_count,
1057 x_msg_data => l_msg_data,
1058 p_original_rsv_rec => l_rsv_rec,
1059 p_to_rsv_rec => l_rsv_new_rec,
1060 p_original_serial_number => l_dummy_sn, -- no serial contorl
1061 p_to_serial_number => l_dummy_sn, -- no serial control
1062 p_validation_flag => fnd_api.g_true,
1063 -- Bug 5099694
1064 p_over_reservation_flag =>3,
1065 x_to_reservation_id => l_new_rsv_id
1066 );
1067 --
1068 IF l_debug_on THEN
1069 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS TRANSFER RESERVATION: ' || L_RETURN_STATUS );
1070 WSH_DEBUG_SV.log(l_module_name,'New Rec: reservation id: ', l_new_rsv_id);
1071 END IF;
1072 --
1073
1074 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1075 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1076 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1077 RAISE FND_API.G_EXC_ERROR;
1078 END IF;
1079
1080 --
1081 IF l_debug_on THEN
1082 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.QUERY_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
1083 END IF;
1084 --
1085
1086 inv_staged_reservation_util.query_staged_flag(
1087 x_return_status => l_return_status
1088 , x_msg_count => l_msg_count
1089 , x_msg_data => l_msg_data
1090 , x_staged_flag => l_staged_flag
1091 , p_reservation_id => l_new_rsv_id);
1092 --
1093 IF l_debug_on THEN
1094 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS QUERY STAGED FLAG: ' || L_RETURN_STATUS );
1095 WSH_DEBUG_SV.log(l_module_name,'l_staged_flag: ',l_staged_flag);
1096 END IF;
1097 --
1098
1099 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1100 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1101 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1102 RAISE FND_API.G_EXC_ERROR;
1103 END IF;
1104
1105 If ( nvl(l_staged_flag, 'N') = 'Y') then -- Staged
1106 --
1107 IF l_debug_on THEN
1108 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_STAGED_RESERVATION_UTIL.UPDATE_STAGED_FLAG',WSH_DEBUG_SV.C_PROC_LEVEL);
1109 END IF;
1110 --
1111 inv_staged_reservation_util.update_staged_flag(
1112 x_return_status => l_return_status
1113 , x_msg_count => l_msg_count
1114 , x_msg_data => l_msg_data
1115 , p_staged_flag => 'N'
1116 , p_reservation_id => l_new_rsv_id);
1117 --
1118 IF l_debug_on THEN
1119 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE STAGED FLAG: ' || L_RETURN_STATUS );
1120 END IF;
1121 --
1122 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1123 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1124 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1125 RAISE FND_API.G_EXC_ERROR;
1126 END IF;
1127 End if; -- Staged_flag = Y
1128
1129 ELSE -- (i.e. Not an ATO )
1130 -- 2587777
1131 IF l_debug_on THEN
1132 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_qty_to_unreserve: ' || l_qty_to_unreserve );
1133 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation _rsv_new_rec.reservation_quantity: ' || l_rsv_new_rec.reservation_quantity );
1134
1135 END IF;
1136
1137 l_rsv_new_rec.reservation_quantity := l_rsv_rec.reservation_quantity - l_qty_to_unreserve ;
1138 -- HW OPMCONV - Added Qty2
1139 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_rec.secondary_reservation_quantity - l_qty2_to_unreserve ;
1140 IF l_debug_on THEN
1141 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_rsv_new_rec.reservation_quantity: ' || l_rsv_new_rec.reservation_quantity );
1142 WSH_DEBUG_SV.logmsg(l_module_name, 'ONE After calculation l_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1143 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation ll_rsv_new_rec.primary_reservation_quantity: ' || l_rsv_new_rec.primary_reservation_quantity );
1144 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_rsv_rec.reservation_quantity: ' || l_rsv_rec.reservation_quantity );
1145 -- HW OPMCONV - Added Qty2
1146 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation ll_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1147 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO Before calculation l_rsv_rec.secondary_reservation_quantity: ' || l_rsv_rec.secondary_reservation_quantity );
1148
1149 END IF;
1150
1151 l_rsv_new_rec.primary_reservation_quantity := l_rsv_rec.reservation_quantity - l_qty_to_unreserve ;
1152 -- HW OPMCONV - Added Qty2
1153 l_rsv_new_rec.secondary_reservation_quantity := l_rsv_rec.secondary_reservation_quantity - l_qty2_to_unreserve ;
1154
1155 IF l_debug_on THEN
1156 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO After calculation ll_rsv_new_rec.primary_reservation_quantity: ' || l_rsv_new_rec.primary_reservation_quantity );
1157 WSH_DEBUG_SV.logmsg(l_module_name, 'TWO After calculation ll_rsv_new_rec.secondary_reservation_quantity: ' || l_rsv_new_rec.secondary_reservation_quantity );
1158 END IF;
1159
1160 --
1161 IF l_debug_on THEN
1162 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_RESERVATION_PUB.UPDATE_RESERVATION',WSH_DEBUG_SV.C_PROC_LEVEL);
1163 END IF;
1164 --
1165 -- HW OPMCONV - NULL Qty2 if they are not presents
1166 IF ( l_rsv_new_rec.secondary_reservation_quantity = 0 OR
1167 l_rsv_new_rec.secondary_reservation_quantity = FND_API.G_MISS_NUM ) THEN
1168
1169 l_rsv_new_rec.secondary_reservation_quantity := NULL;
1170
1171 END IF;
1172
1173 inv_reservation_pub.update_reservation
1174 (p_api_version_number => 1.0,
1175 p_init_msg_lst => fnd_api.g_true,
1176 x_return_status => l_return_status,
1177 x_msg_count => l_msg_count,
1178 x_msg_data => l_msg_data,
1179 p_original_rsv_rec => l_rsv_rec,
1180 p_to_rsv_rec => l_rsv_new_rec,
1181 p_original_serial_number => l_dummy_sn, -- no serial contorl
1182 p_to_serial_number => l_dummy_sn, -- no serial control
1183 p_validation_flag => fnd_api.g_true,
1184 -- Bug 5099694
1185 p_over_reservation_flag =>3
1186 );
1187 --
1188 IF l_debug_on THEN
1189 WSH_DEBUG_SV.logmsg(l_module_name, 'AFTER CALLING INVS UPDATE_RESERVATION: ' || L_RETURN_STATUS );
1190 END IF;
1191 --
1192 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN -- UnExp Erro
1193 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1194 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN -- STS Error
1195 IF l_msg_data is not null THEN -- msg.data not null
1196 fnd_message.set_encoded(l_msg_data);
1197 l_buffer := fnd_message.get;
1198 --
1199 IF l_debug_on THEN
1200 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit OE_MSG_PUB.ADD_TEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
1201 END IF;
1202 --
1203 oe_msg_pub.add_text(p_message_text => l_buffer);
1204 --
1205 IF l_debug_on THEN
1206 WSH_DEBUG_SV.logmsg(l_module_name, 'ERROR : '|| L_BUFFER );
1207 END IF;
1208 --
1209 END IF; -- msg.data not null
1210 RAISE FND_API.G_EXC_ERROR;
1211 END IF; -- UnExp Error
1212 END IF; -- (if ATO ..)
1213 else -- p_unreserve_mode = 'CYCLE_COUNT'
1214 --
1215 IF l_debug_on THEN
1216 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit TWO INV_PICK_RELEASE_PUB.RESERVE_UNCONFIRMED_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
1217 WSH_DEBUG_SV.log(l_module_name, 'p_missing_quantity: ' || l_qty_to_unreserve );
1218 WSH_DEBUG_SV.log(l_module_name, 'p_missing_quantity2: '|| l_qty2_to_unreserve );
1219
1220 END IF;
1221 --
1222
1223 IF ( l_qty2_to_unreserve = 0 or l_qty2_to_unreserve = FND_API.G_MISS_NUM) THEN
1224 l_qty2_to_unreserve := NULL;
1225 END IF;
1226
1227 Inv_Pick_Release_Pub.Reserve_Unconfirmed_Quantity(
1228 p_api_version => 1.0,
1229 p_init_msg_list => FND_API.G_FALSE,
1230 p_commit => FND_API.G_FALSE,
1231 x_return_status => l_reserve_status,
1232 x_msg_count => l_reserve_msg_count,
1233 x_msg_data => l_reserve_msg_data,
1234 p_missing_quantity => l_qty_to_unreserve ,
1235 p_missing_quantity2 => l_qty2_to_unreserve ,
1236 p_reservation_id => l_rsv_rec.reservation_id ,
1237 p_demand_source_header_id => l_sales_order_id,
1238 p_demand_source_line_id => l_line_rec.line_id,
1239 p_organization_id => l_rsv_rec.organization_id,
1240 p_inventory_item_id => l_rsv_rec.inventory_item_id,
1241 p_subinventory_code => l_rsv_rec.subinventory_code ,
1242 p_locator_id => l_rsv_rec.locator_id,
1243 p_revision => l_rsv_rec.revision,
1244 p_lot_number => l_rsv_rec.lot_number);
1245 IF ((l_reserve_status = WSH_UTIL_CORE.G_RET_STS_ERROR) or
1246 (l_reserve_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN -- Sts or UnExp. Error
1247 --
1248 IF l_debug_on THEN
1249 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE UNCONFIRMED QUANTITY FAILED' );
1250 END IF;
1251 --
1252 --
1253 IF l_debug_on THEN
1254 WSH_DEBUG_SV.logmsg(l_module_name, 'MESSAGE COUNT: '|| TO_CHAR ( L_RESERVE_MSG_COUNT ) );
1255 END IF;
1256 --
1257 IF (l_reserve_msg_count = 0) or (l_reserve_msg_count is NULL) THEN -- Msg. Count
1258 null;
1259 ELSE
1260 FOR i in 1 ..l_reserve_msg_count
1261 LOOP
1262 l_reserve_message := fnd_msg_pub.get(i,'T');
1263 l_reserve_message := replace(l_reserve_message,chr(0), ' ');
1264 --
1265 IF l_debug_on THEN
1266 WSH_DEBUG_SV.logmsg(l_module_name, L_RESERVE_MESSAGE );
1267 END IF;
1268 --
1269 END LOOP;
1270 END if; -- If Msg. Count
1271 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1272 --
1273 IF l_debug_on THEN
1274 WSH_DEBUG_SV.logmsg(l_module_name, 'RESERVE_UNCONFIRMED_QUANTITY FAILED.. GOING ON... ' );
1275 END IF;
1276 --
1277 END IF; -- Sts or UnExp. Error
1278 END IF; -- UnReserve Mode
1279 goto end_of_loop; -- Bug 2100800: Get out of the loop as there should be nothing more to unreserve.
1280 END IF; -- Staged and Cycle-Count
1281 END IF; -- 2747520: Cancel Unstaged
1282 END LOOP;
1283 null;
1284
1285 -- HW OPMCONV - Removed brnaching the code
1286
1287 <<end_of_loop>>
1288
1289 --
1290 IF l_debug_on THEN
1291 WSH_DEBUG_SV.logmsg(l_module_name, 'EXITING UNRESERVE_DELIVERY_DETAIL ' );
1292 END IF;
1293 --
1294
1295 --
1296 IF l_debug_on THEN
1297 WSH_DEBUG_SV.pop(l_module_name);
1298 END IF;
1299 --
1300 EXCEPTION
1301 -- bug 2442178: added expected exceptions to appropriately set return status
1302 WHEN FND_API.G_EXC_ERROR THEN
1303 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1304 --
1305 IF l_debug_on THEN
1306 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1307 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
1308 END IF;
1309 --
1310 return;
1311 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1312 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1313 --
1314 IF l_debug_on THEN
1315 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1316 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
1317 END IF;
1318 --
1319 return;
1320
1321 WHEN OTHERS THEN
1322 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1323 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UNRESERVE_DELIVERY_DETAIL',l_module_name);
1324 --
1325 IF l_debug_on THEN
1326 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1327 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1328 END IF;
1329 --
1330 END Unreserve_delivery_detail ;
1331
1332
1333 --
1334 --Procedure: Assign_Detail_to_Delivery
1335 --Parameters: p_detail_id,
1336 -- p_delivery_id,
1337 -- x_return_status
1338 -- x_dlvy_has_lines : 'Y' :delivery has non-container lines.
1339 -- 'N' : delivery does not have non-container lines
1340 -- x_dlvy_freight_Terms_code : Delivery's freight term code
1341 --Description: This procedure will assign the specified
1342 -- delivery_detail to the specIFied delivery
1343 -- and return the status
1344
1345 PROCEDURE Assign_Detail_to_Delivery(
1346 P_DETAIL_ID IN number,
1347 P_DELIVERY_ID IN number,
1348 X_RETURN_STATUS OUT NOCOPY varchar2,
1349 x_dlvy_has_lines IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
1350 x_dlvy_freight_terms_code IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
1351 p_caller IN VARCHAR2 --bug 5100229
1352 ) IS
1353
1354 CURSOR c_topmost_container IS
1355 SELECT delivery_detail_id
1356 FROM wsh_delivery_assignments_v
1357 WHERE parent_delivery_detail_id is null
1358 START WITH delivery_detail_id =p_detail_id
1359 CONNECT BY prior parent_delivery_detail_id = delivery_detail_id
1360 and rownum < 10;
1361 --restricting to 10 levels (performance)
1362
1363 -- /== Workflow Changes
1364 --WF: CMR
1365 CURSOR c_get_del_lines_count(p_delv_id NUMBER) IS
1366 SELECT
1367 COUNT(1) lines_count,
1368 COUNT(DECODE(WDD.pickable_flag,'Y',DECODE(WDD.released_status,'R',NULL,
1369 'X',NULL,
1370 'N',NULL,
1371 1
1372 ),
1373 NULL
1374 )
1375 ) picked_lines_count
1376 FROM wsh_delivery_assignments_v wda,
1377 wsh_delivery_details wdd
1378 WHERE
1379 wda.delivery_detail_id= wdd.delivery_detail_id AND
1380 wdd.container_flag = 'N' AND
1381 wda.delivery_id = p_delv_id;
1382
1383 CURSOR c_get_org_id ( p_delv_id NUMBER) IS
1384 SELECT organization_id
1385 FROM wsh_new_deliveries
1386 WHERE delivery_id=p_delv_id;
1387
1388 l_org_id NUMBER;
1389 l_del_lines_count NUMBER;
1390 l_process_started VARCHAR2(1);
1391 l_return_status VARCHAR2(1);
1392 l_wf_rs VARCHAR2(1);
1393 l_start_wf BOOLEAN;
1394 l_raise_pickinitiated_event BOOLEAN;
1395 l_count_picked_lines Number;
1396 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
1397 l_purged_count NUMBER;
1398 --WF: CMR
1399 l_raise_carrierselect_event BOOLEAN;
1400 l_del_ids WSH_UTIL_CORE.ID_tab_type;
1401 l_del_old_carrier_ids WSH_UTIL_CORE.ID_tab_type;
1402 -- Workflow Changes ==/
1403
1404
1405 l_topmost_delivery_detail_id NUMBER;
1406
1407 assign_fail exception;
1408
1409 --
1410 l_debug_on BOOLEAN;
1411 --
1412 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_DETAIL_TO_DELIVERY';
1413 --
1414 BEGIN
1415 --
1416 --
1417 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1418 --
1419 IF l_debug_on IS NULL
1420 THEN
1421 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1422 END IF;
1423 --
1424 IF l_debug_on THEN
1425 WSH_DEBUG_SV.push(l_module_name);
1426 --
1427 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
1428 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1429 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_has_lines',x_dlvy_has_lines);
1430 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_freight_terms_code',x_dlvy_freight_terms_code);
1431 END IF;
1432 --
1433 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1434
1435 /* if detail is not assigned to a container, update WDA. else find topmost container
1436 in the hierarchy (this can be a detail in case of loose details), iterate thru each
1437 level and assign each level to delivery any error in any level => rollback changes*/
1438
1439 SAVEPOINT before_assign_topmost_cont;
1440 OPEN c_topmost_container;
1441 FETCH c_topmost_container INTO l_topmost_delivery_detail_id;
1442 IF (c_topmost_container%FOUND) THEN
1443
1444 --/== Workflow Changes
1445 l_start_wf :=FALSE;
1446 l_raise_pickinitiated_event :=FALSE;
1447
1448 OPEN c_get_del_lines_count(p_delivery_id);
1449 FETCH c_get_del_lines_count into l_del_lines_count,l_count_picked_lines ;
1450 CLOSE c_get_del_lines_count;
1451 IF (l_del_lines_count = 0) THEN
1452 l_start_wf := TRUE;
1453 l_raise_pickinitiated_event :=TRUE;
1454 --WF: CMR CURRENTLY NOT IN USE
1455 --l_raise_carrierselect_event :=TRUE;
1456 ELSIF (l_count_picked_lines =0) THEN
1457 l_raise_pickinitiated_event :=TRUE;
1458 END IF;
1459 -- Workflow Changes ==/
1460 --
1461 IF l_debug_on THEN
1462 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);
1463 END IF;
1464 --
1465
1466 wsh_delivery_details_actions.assign_top_detail_to_delivery(
1467 P_DETAIL_ID => l_topmost_delivery_detail_id,
1468 P_DELIVERY_ID => p_delivery_id,
1469 X_RETURN_STATUS => x_return_status,
1470 x_dlvy_has_lines => x_dlvy_has_lines, -- J-IB-NPARIKH
1471 x_dlvy_freight_terms_code => x_dlvy_freight_terms_code, -- J-IB-NPARIKHS
1472 p_caller => p_caller --bug 5100229
1473 );
1474
1475 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1476 RAISE assign_fail;
1477 END IF;
1478
1479 --/== Workflow Changes
1480 IF (l_start_wf OR l_raise_pickinitiated_event ) THEN
1481 OPEN c_get_del_lines_count(p_delivery_id );
1482 FETCH c_get_del_lines_count INTO l_del_lines_count, l_count_picked_lines;
1483 CLOSE c_get_del_lines_count;
1484
1485 OPEN c_get_org_id ( p_delivery_id );
1486 FETCH c_get_org_id INTO l_org_id;
1487 CLOSE c_get_org_id;
1488 END IF;
1489
1490 IF ( l_start_wf AND l_del_lines_count > 0 )THEN
1491 -- Check for existing WF process and if it exists Call Purge Workflow
1492 -- After Purge, start a new workflow Process.
1493 -- Purging is required since a New Delivery Workflow will be selected according
1494 -- to the Delivery Detail Assigned to it
1495 IF l_debug_on THEN
1496 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.CHECK_WF_EXISTS',WSH_DEBUG_SV.C_PROC_LEVEL);
1497 END IF;
1498 WSH_WF_STD. Check_Wf_Exists(
1499 p_entity_type => 'DELIVERY',
1500 p_entity_id => p_delivery_id,
1501 x_wf_process_exists => l_process_started,
1502 x_return_status => l_return_status);
1503 IF l_debug_on THEN
1504 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
1505 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1506 END IF;
1507
1508 IF(l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS AND l_process_started='Y' ) THEN
1509 IF l_debug_on THEN
1510 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
1511 END IF;
1512 l_del_entity_ids(1) := p_delivery_id;
1513 WSH_WF_STD.Purge_Entity(
1514 p_entity_type => 'DELIVERY',
1515 p_entity_ids => l_del_entity_ids,
1516 x_success_count => l_purged_count,
1517 x_return_status => l_return_status);
1518 IF l_debug_on THEN
1519 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
1520 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1521 END IF;
1522 END IF; -- If WorkFlow Exists
1523
1524 IF(l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1525 IF l_debug_on THEN
1526 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_WF_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
1527 END IF;
1528
1529 WSH_WF_STD.start_wf_process(
1530 p_entity_type => 'DELIVERY',
1531 p_entity_id => p_delivery_id,
1532 p_organization_id =>l_org_id,
1533 x_process_started =>l_process_started,
1534 x_return_status =>l_return_status
1535 );
1536 IF l_debug_on THEN
1537 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
1538 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
1539 END IF;
1540 END IF;
1541
1542 END IF;-- If Start Workflow
1543
1544 --Raise Event: Pick To Pod Workflow
1545 IF ( l_raise_pickinitiated_event AND l_count_picked_lines > 0 ) THEN
1546 IF l_debug_on THEN
1547 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
1548 END IF;
1549 WSH_WF_STD.Raise_Event(
1550 p_entity_type => 'DELIVERY',
1551 p_entity_id => p_delivery_id,
1552 p_event => 'oracle.apps.wsh.delivery.pik.pickinitiated' ,
1553 p_organization_id => l_org_id,
1554 x_return_status => l_wf_rs ) ;
1555 IF l_debug_on THEN
1556 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', p_delivery_id );
1557 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
1558 END IF;
1559 END IF;
1560 -- Done Raise Event: Pick To Pod Workflow
1561 /* CURRENTLY NOT IN USE
1562 --WF: CMR
1563 IF (l_raise_carrierselect_event) THEN
1564 l_del_ids(1) := p_delivery_id;
1565 WSH_WF_STD.Get_Carrier(p_del_ids => l_del_ids,
1566 x_del_old_carrier_ids => l_del_old_carrier_ids,
1567 x_return_status => l_wf_rs);
1568
1569 IF (l_del_old_carrier_ids(1) IS NOT NULL) THEN
1570
1571 WSH_WF_STD.Assign_Unassign_Carrier(p_delivery_id => l_del_ids(1),
1572 p_old_carrier_id => NULL,
1573 p_new_carrier_id => l_del_old_carrier_ids(1),
1574 x_return_status => l_wf_rs);
1575 END IF;
1576
1577 END IF;
1578 */
1579 -- Workflow Changes ==/
1580
1581 END IF;--for topmost container
1582 CLOSE c_topmost_container;
1583 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1584 --
1585 IF l_debug_on THEN
1586 WSH_DEBUG_SV.pop(l_module_name);
1587 END IF;
1588 --
1589 return;
1590 --
1591 exception
1592 WHEN assign_fail THEN
1593 ROLLBACK TO before_assign_topmost_cont;
1594 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1595 wsh_util_core.add_message(x_return_status,l_module_name);
1596 --
1597 IF l_debug_on THEN
1598 WSH_DEBUG_SV.logmsg(l_module_name,'ASSIGN_FAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1599 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ASSIGN_FAIL');
1600 END IF;
1601 --
1602 WHEN others THEN
1603 ROLLBACK TO before_assign_topmost_cont;
1604 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1605 wsh_util_core.add_message(x_return_status,l_module_name);
1606 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DELIVERY_DETAIL',l_module_name);
1607
1608 --
1609 IF l_debug_on THEN
1610 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1611 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1612 END IF;
1613 --
1614 END Assign_Detail_to_Delivery;
1615
1616 -------------------------------------------------------------------
1617 -- This procedure is only for backward compatibility. No one should call
1618 -- this procedure.
1619 -------------------------------------------------------------------
1620
1621 PROCEDURE Assign_Detail_to_Delivery(
1622 P_DETAIL_ID IN NUMBER,
1623 P_DELIVERY_ID IN NUMBER,
1624 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
1625 p_caller IN VARCHAR2 --bug 5100229
1626 ) IS
1627
1628 --
1629 l_debug_on BOOLEAN;
1630 --
1631 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'Assign_Detail_to_Delivery';
1632 --
1633 l_has_lines VARCHAR2(1);
1634 l_dlvy_freight_terms_code VARCHAR2(30);
1635 --
1636 BEGIN
1637 --
1638 --
1639 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1640 --
1641 IF l_debug_on IS NULL
1642 THEN
1643 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1644 END IF;
1645 --
1646 IF l_debug_on THEN
1647 WSH_DEBUG_SV.push(l_module_name);
1648 --
1649 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
1650 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1651 END IF;
1652 --
1653 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1654 --
1655 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
1656 (
1657 p_delivery_id => p_delivery_id
1658 );
1659 --
1660 Assign_Detail_to_Delivery
1661 (
1662 p_detail_id => p_detail_id,
1663 p_delivery_id => p_delivery_id,
1664 X_RETURN_STATUS => X_RETURN_STATUS,
1665 x_dlvy_has_lines => l_has_lines,
1666 x_dlvy_freight_Terms_code => l_dlvy_freight_Terms_code,
1667 p_caller => p_caller --bug 5100229
1668 );
1669 --
1670 IF l_debug_on THEN
1671 WSH_DEBUG_SV.pop(l_module_name);
1672 END IF;
1673 --
1674 EXCEPTION
1675 WHEN others THEN
1676 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1677 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.Assign_Detail_to_Delivery',l_module_name);
1678 --
1679 IF l_debug_on THEN
1680 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1681 END IF;
1682 END Assign_Detail_to_Delivery;
1683
1684 -- OTM R12 : assign delivery detail
1685
1686 --========================================================================
1687 -- PROCEDURE : Pre_Otm_Assign_Del_Detail
1688 --
1689 -- API added for R12 Glog Integration
1690 --
1691 -- PURPOSE : To check whether the delivery was empty(no actual details)
1692 -- before any delivery_detail is assigned. Also checks if
1693 -- if detail and containers are already on the same delivery
1694 --
1695 -- PARAMETERS:
1696 -- p_delivery_id delivery id
1697 -- p_detail_id delivery detail id
1698 -- p_container1_id container 1's id
1699 -- p_container2_id container 2's id
1700 -- p_assignment_type assignment types can be DD2D, DD2C, C2C.
1701 -- this covers detail to delivery, detail to container,
1702 -- container to container, and container to delivery will
1703 -- be same as DD2D.
1704 -- x_delivery_was_empty TRUE if it was empty, FALSE if it was not empty
1705 -- x_tms_update TRUE if tms update needed, FALSE if detail and
1706 -- containers already on the same delivery
1707 -- x_gross_weight1 the gross weight of the detail or container getting assigned
1708 -- x_gross_weight2 the gross weight of the container being assigned to.
1709 -- x_return status SUCCESS or ERROR
1710 --========================================================================
1711
1712
1713 PROCEDURE Pre_Otm_Assign_Del_Detail
1714 (p_delivery_id IN NUMBER,
1715 p_detail_id IN NUMBER,
1716 p_container1_id IN NUMBER,
1717 p_container2_id IN NUMBER,
1718 p_assignment_type IN VARCHAR2,
1719 x_delivery_was_empty OUT NOCOPY BOOLEAN,
1720 x_assign_update OUT NOCOPY BOOLEAN,
1721 x_gross_weight1 OUT NOCOPY NUMBER,
1722 x_gross_weight2 OUT NOCOPY NUMBER,
1723 x_return_status OUT NOCOPY VARCHAR2) IS
1724
1725 CURSOR c_get_delivery_id(p_id IN NUMBER) IS
1726 SELECT delivery_id
1727 FROM wsh_delivery_assignments
1728 WHERE delivery_detail_id = p_id;
1729
1730 CURSOR c_get_gross_weight (p_id NUMBER) IS
1731 SELECT nvl(gross_weight, 0)
1732 FROM wsh_delivery_details
1733 WHERE delivery_detail_id = p_id;
1734
1735 l_is_delivery_empty VARCHAR2(1);
1736 l_delivery1 NUMBER;
1737 l_delivery2 NUMBER;
1738 l_debug_on BOOLEAN;
1739 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||G_PACKAGE_NAME||'.'||'Pre_Otm_Assign_Del_Detail';
1740
1741
1742 BEGIN
1743
1744 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1745 --
1746 IF l_debug_on IS NULL
1747 THEN
1748 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1749 END IF;
1750 --
1751 IF l_debug_on THEN
1752 WSH_DEBUG_SV.push(l_module_name);
1753 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
1754 WSH_DEBUG_SV.log(l_module_name, 'P_DETAIL_ID', p_detail_id);
1755 WSH_DEBUG_SV.log(l_module_name, 'P_CONTAINER1_ID', p_container1_id);
1756 WSH_DEBUG_SV.log(l_module_name, 'P_CONTAINER2_ID', p_container2_id);
1757 WSH_DEBUG_SV.log(l_module_name, 'P_ASSIGNMENT_TYPE', p_assignment_type);
1758 END IF;
1759
1760 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1761 x_delivery_was_empty := FALSE;
1762 x_assign_update := TRUE; -- default to true unless everything on the same delivery.
1763
1764 IF (p_assignment_type = 'DD2D') THEN --detail to delivery, delivery id provided
1765
1766 OPEN c_get_delivery_id(p_detail_id);
1767 FETCH c_get_delivery_id INTO l_delivery1;
1768 CLOSE c_get_delivery_id;
1769
1770 OPEN c_get_gross_weight(p_detail_id);
1771 FETCH c_get_gross_weight INTO x_gross_weight1;
1772 CLOSE c_get_gross_weight;
1773
1774 IF (l_delivery1 = p_delivery_id) THEN --already assigned to the delivery
1775 x_assign_update := FALSE; --same delivery, no need to update
1776 ELSE
1777
1778 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(p_delivery_id);
1779 IF (l_is_delivery_empty = 'Y') THEN
1780 x_delivery_was_empty := TRUE;
1781 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1782 IF l_debug_on THEN
1783 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1784 END IF;
1785 raise FND_API.G_EXC_ERROR;
1786 END IF;
1787 END IF;
1788
1789 ELSIF (p_assignment_type IN ('DD2C', 'C2C')) THEN
1790
1791 IF (p_assignment_type = 'DD2C') THEN
1792 --detail to container, check delivery id of p_detail_id and p_container1_id
1793 OPEN c_get_delivery_id(p_detail_id);
1794 FETCH c_get_delivery_id INTO l_delivery1;
1795 CLOSE c_get_delivery_id;
1796
1797 OPEN c_get_delivery_id(p_container1_id);
1798 FETCH c_get_delivery_id INTO l_delivery2;
1799 CLOSE c_get_delivery_id;
1800
1801 OPEN c_get_gross_weight(p_detail_id);
1802 FETCH c_get_gross_weight INTO x_gross_weight1;
1803 CLOSE c_get_gross_weight;
1804
1805 OPEN c_get_gross_weight(p_container1_id);
1806 FETCH c_get_gross_weight INTO x_gross_weight2;
1807 CLOSE c_get_gross_weight;
1808
1809 ELSE
1810 --container to container, check delivery id of p_container1_id and p_container2_id
1811 OPEN c_get_delivery_id(p_container1_id);
1812 FETCH c_get_delivery_id INTO l_delivery1;
1813 CLOSE c_get_delivery_id;
1814
1815 OPEN c_get_delivery_id(p_container2_id);
1816 FETCH c_get_delivery_id INTO l_delivery2;
1817 CLOSE c_get_delivery_id;
1818
1819 OPEN c_get_gross_weight(p_container1_id);
1820 FETCH c_get_gross_weight INTO x_gross_weight1;
1821 CLOSE c_get_gross_weight;
1822
1823 OPEN c_get_gross_weight(p_container2_id);
1824 FETCH c_get_gross_weight INTO x_gross_weight2;
1825 CLOSE c_get_gross_weight;
1826
1827 END IF;
1828
1829 IF (l_delivery1 = l_delivery2) THEN --both belong to same delivery and not NULL
1830 x_assign_update := FALSE; --same delivery, no need to update
1831 ELSIF (l_delivery1 IS NOT NULL) THEN --cannot have both NOT NULL
1832
1833 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_delivery1);
1834 IF (l_is_delivery_empty = 'Y') THEN
1835 x_delivery_was_empty := TRUE;
1836 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1837 IF l_debug_on THEN
1838 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1839 END IF;
1840 raise FND_API.G_EXC_ERROR;
1841 END IF;
1842 ELSIF (l_delivery2 IS NOT NULL) THEN
1843
1844 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_delivery2);
1845 IF (l_is_delivery_empty = 'Y') THEN
1846 x_delivery_was_empty := TRUE;
1847 ELSIF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1848 IF l_debug_on THEN
1849 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1850 END IF;
1851 raise FND_API.G_EXC_ERROR;
1852 END IF;
1853 END IF;
1854
1855 ELSE
1856 IF l_debug_on THEN
1857 WSH_DEBUG_SV.log(l_module_name,'Error in wrong assignment_type', p_assignment_type);
1858 END IF;
1859 raise FND_API.G_EXC_ERROR;
1860 END IF;
1861
1862 IF l_debug_on THEN
1863 WSH_DEBUG_SV.log(l_module_name, 'x_delivery_was_empty', x_delivery_was_empty);
1864 WSH_DEBUG_SV.log(l_module_name, 'x_assign_update', x_assign_update);
1865 WSH_DEBUG_SV.log(l_module_name, 'x_gross_weight1', x_gross_weight1);
1866 WSH_DEBUG_SV.log(l_module_name, 'x_gross_weight2', x_gross_weight2);
1867 END IF;
1868
1869 IF l_debug_on THEN
1870 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
1871 WSH_DEBUG_SV.pop(l_module_name);
1872 END IF;
1873
1874 EXCEPTION
1875 WHEN FND_API.G_EXC_ERROR THEN
1876 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1877
1878 IF c_get_gross_weight%ISOPEN THEN
1879 CLOSE c_get_gross_weight;
1880 END IF;
1881
1882 IF c_get_delivery_id%ISOPEN THEN
1883 CLOSE c_get_delivery_id;
1884 END IF;
1885
1886 --
1887 IF l_debug_on THEN
1888 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
1889 WSH_DEBUG_SV.pop(l_module_name);
1890 END IF;
1891 --
1892 RETURN;
1893 WHEN OTHERS THEN
1894 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1895
1896 IF c_get_gross_weight%ISOPEN THEN
1897 CLOSE c_get_gross_weight;
1898 END IF;
1899
1900 IF c_get_delivery_id%ISOPEN THEN
1901 CLOSE c_get_delivery_id;
1902 END IF;
1903
1904 --
1905 IF l_debug_on THEN
1906 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
1907 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION OTHERS');
1908 END IF;
1909 --
1910 RETURN;
1911
1912 END Pre_Otm_Assign_Del_Detail;
1913
1914 --========================================================================
1915 -- PROCEDURE : Post_Otm_Assign_Del_Detail
1916 --
1917 -- API added for R12 Glog Integration
1918 --
1919 -- PURPOSE : updates delivery's tms_interface_flag via API
1920 -- based on the changes of detail assignments to the delivery
1921 --
1922 -- PARAMETERS:
1923 -- p_delivery_id delivery_id
1924 -- p_delivery_was_empty whether the delivery was empty before the new
1925 -- assignment
1926 -- p_tms_interface_flag delivery's latest tms_interface_flag if available
1927 -- p_gross_weight delivery detail's gross weight if avilable
1928 -- p_delivery_detail_ids table of delivery detail ids to get gross weight
1929 -- x_return status SUCCESS or ERROR
1930 --========================================================================
1931
1932 PROCEDURE Post_Otm_Assign_Del_Detail
1933 (p_delivery_id IN NUMBER,
1934 p_delivery_was_empty IN BOOLEAN,
1935 p_tms_interface_flag IN VARCHAR2,
1936 p_gross_weight IN NUMBER,
1937 x_return_status OUT NOCOPY VARCHAR2) IS
1938
1939
1940 l_call_update VARCHAR2(1);
1941 l_return_status VARCHAR2(1);
1942 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
1943 l_is_delivery_empty VARCHAR2(1);
1944 l_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
1945 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
1946 l_delivery_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
1947 l_num_warnings NUMBER;
1948 l_debug_on BOOLEAN;
1949 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||G_PACKAGE_NAME||'.'||'Post_Otm_Assign_Del_Detail';
1950
1951 BEGIN
1952
1953 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1954 --
1955 IF l_debug_on IS NULL
1956 THEN
1957 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1958 END IF;
1959 --
1960 IF l_debug_on THEN
1961 WSH_DEBUG_SV.push(l_module_name);
1962 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
1963 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_WAS_EMPTY', p_delivery_was_empty);
1964 WSH_DEBUG_SV.log(l_module_name, 'P_TMS_INTERFACE_FLAG', p_tms_interface_flag);
1965 WSH_DEBUG_SV.log(l_module_name, 'P_GROSS_WEIGHT', p_gross_weight);
1966 END IF;
1967
1968 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1969
1970 l_call_update := 'Y';
1971 l_delivery_id_tab(1) := p_delivery_id;
1972
1973 IF (p_delivery_was_empty) THEN
1974 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(p_delivery_id);
1975
1976 IF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
1977 IF l_debug_on THEN
1978 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
1979 END IF;
1980 raise FND_API.G_EXC_ERROR;
1981 ELSIF (l_is_delivery_empty = 'Y') THEN
1982 l_call_update := 'N';
1983 ELSIF (l_is_delivery_empty = 'N') THEN
1984 IF (p_tms_interface_flag IS NOT NULL) THEN
1985 l_tms_interface_flag := p_tms_interface_flag;
1986 ELSE
1987 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
1988 p_delivery_id => p_delivery_id,
1989 x_delivery_rec => l_delivery_info,
1990 x_return_status => l_return_status);
1991
1992 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
1993 IF l_debug_on THEN
1994 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
1995 END IF;
1996 raise FND_API.G_EXC_ERROR;
1997 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1998 l_num_warnings := l_num_warnings + 1;
1999 END IF;
2000 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
2001
2002 END IF;
2003
2004 IF l_debug_on THEN
2005 WSH_DEBUG_SV.log(l_module_name, 'P_DELIVERY_WAS_EMPTY - L_TMS_INTERFACE_FLAG', l_tms_interface_flag);
2006 END IF;
2007
2008 IF (l_tms_interface_flag = WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT) THEN
2009 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED;
2010 ELSIF (l_tms_interface_flag in
2011 (WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
2012 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS)) THEN
2013 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
2014 ELSE
2015 l_call_update := 'N';
2016 END IF;
2017 END IF;
2018 ELSE -- (NOT p_delivery_was_empty)
2019
2020 IF (p_gross_weight = 0) THEN
2021 l_call_update := 'N'; -- do not update if assign/unassign 0/NULL
2022 -- weight line/LPN to nonempty delivery
2023 ELSE
2024 l_interface_flag_tab(1) := NULL;
2025 -- setting this flag here to null so that
2026 -- the update_tms_interface_flag procedure will take care of it.
2027 END IF;
2028 END IF;
2029
2030 IF (l_call_update = 'Y') THEN
2031 WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG(
2032 p_delivery_id_tab => l_delivery_id_tab,
2033 p_tms_interface_flag_tab => l_interface_flag_tab,
2034 x_return_status => l_return_status);
2035
2036 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
2037 IF l_debug_on THEN
2038 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG '||l_return_status);
2039 END IF;
2040 raise FND_API.G_EXC_ERROR;
2041 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
2042 l_num_warnings := l_num_warnings + 1;
2043 END IF;
2044 END IF;
2045
2046
2047 IF (l_num_warnings > 0) THEN
2048 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2049 END IF;
2050
2051 IF l_debug_on THEN
2052 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2053 WSH_DEBUG_SV.pop(l_module_name);
2054 END IF;
2055
2056 EXCEPTION
2057 WHEN FND_API.G_EXC_ERROR THEN
2058 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2059 --
2060 IF l_debug_on THEN
2061 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2062 WSH_DEBUG_SV.pop(l_module_name);
2063 END IF;
2064 --
2065 RETURN;
2066 WHEN OTHERS THEN
2067 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2068 --
2069 IF l_debug_on THEN
2070 WSH_DEBUG_SV.log(l_module_name, 'x_return_status', x_return_status);
2071 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION OTHERS');
2072 END IF;
2073 --
2074 RETURN;
2075 END Post_Otm_Assign_Del_Detail;
2076
2077 -- End of OTM R12 : assign delivery detail
2078
2079
2080 --
2081 --Procedure: Assign_Detail_to_Cont
2082 --Parameters: p_detail_id,
2083 -- p_parent_detail_id,
2084 -- x_return_status
2085 --Description: This procedure will assign the specified
2086 -- delivery_detail to the specIFied container
2087 -- and return the status
2088
2089 -- if container is already assigned to a delivery,
2090 -- its parent containers and child containers must
2091 -- be also assigned to the same delivery already.
2092 -- So all it needs to do IS just get the delivery_id
2093 -- from the current container and assign it to the detail also.
2094
2095 -- if the detail is already assigned to a delivery,
2096 -- then drill up and down to update the delivery id for all the
2097 -- parent and chile containers
2098
2099
2100
2101 PROCEDURE Assign_Detail_To_Cont(
2102 p_detail_id IN NUMBER,
2103 p_parent_detail_id IN NUMBER,
2104 x_return_status OUT NOCOPY VARCHAR2)
2105 IS
2106
2107 l_del_id_for_container c_del_id_for_cont_or_detail%ROWTYPE;
2108 l_del_id_for_detail c_del_id_for_cont_or_detail%ROWTYPE;
2109
2110 l_group_by_flags WSH_DELIVERY_AUTOCREATE.group_by_flags_rec_type;
2111
2112 invalid_detail exception;
2113 l_plan_flag varchar2(1);
2114 l_content_count NUMBER;
2115
2116 /* H projects: pricing integration csun */
2117 m NUMBER := 0;
2118 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
2119 l_return_status VARCHAR2(1);
2120 mark_reprice_error EXCEPTION;
2121 l_ship_to NUMBER;
2122 l_container_has_content BOOLEAN;
2123 l_mdc_detail_tab WSH_UTIL_CORE.Id_Tab_Type;
2124 l_ignore_det_tab WSH_UTIL_CORE.Id_Tab_Type;
2125
2126 --
2127 l_debug_on BOOLEAN;
2128 --
2129 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_DETAIL_TO_CONT';
2130 --
2131 l_display_error BOOLEAN;
2132
2133 CURSOR c_get_shipto (v_container_id NUMBER) IS
2134 SELECT ship_to_location_id
2135 FROM wsh_delivery_details
2136 WHERE delivery_detail_id = v_container_id;
2137
2138 -- Bug 3715176
2139 CURSOR c_get_plan_flag (v_delivery_id NUMBER) IS
2140 SELECT nvl(planned_flag,'N')
2141 FROM wsh_new_deliveries
2142 WHERE delivery_id = v_delivery_id;
2143
2144 CURSOR c_get_content_count(v_delivery_detail_id NUMBER) IS
2145 SELECT count(*)
2146 FROM wsh_delivery_assignments_v wda
2147 WHERE wda.parent_delivery_detail_id = v_delivery_detail_id And rownum = 1;
2148 -- Bug 3715176
2149
2150 -- Bug 4452930
2151 CURSOR c_topmost_container(p_detail_id NUMBER) IS
2152 SELECT delivery_detail_id
2153 FROM wsh_delivery_assignments_v
2154 WHERE parent_delivery_detail_id is null
2155 START WITH delivery_detail_id =p_detail_id
2156 CONNECT BY prior parent_delivery_detail_id = delivery_detail_id
2157 and rownum < 10;
2158 --restricting to 10 levels (performance)
2159 l_topmost_cont NUMBER;
2160
2161 -- Bug 4452930
2162
2163 l_attr_tab wsh_delivery_autocreate.grp_attr_tab_type;
2164 l_group_tab wsh_delivery_autocreate.grp_attr_tab_type;
2165 l_action_rec wsh_delivery_autocreate.action_rec_type;
2166 l_target_rec wsh_delivery_autocreate.grp_attr_rec_type;
2167 l_matched_entities wsh_util_core.id_tab_type;
2168 l_out_rec wsh_delivery_autocreate.out_rec_type;
2169 l_group_index NUMBER;
2170
2171 l_num_warnings number := 0;
2172
2173 -- K LPN CONV. rv
2174 l_wms_org VARCHAR2(10) := 'N';
2175 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
2176 l_sync_tmp_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
2177 l_operation_type VARCHAR2(100);
2178 -- K LPN CONV. rv
2179
2180 -- OTM R12 : update delivery
2181 l_delivery_info_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2182 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
2183 l_new_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
2184 l_tms_update VARCHAR2(1);
2185 l_trip_not_found VARCHAR2(1);
2186 l_trip_info_rec WSH_DELIVERY_VALIDATIONS.trip_info_rec_type;
2187 l_tms_version_number WSH_NEW_DELIVERIES.TMS_VERSION_NUMBER%TYPE;
2188 l_gc3_is_installed VARCHAR2(1);
2189
2190 -- End of OTM R12 : update delivery
2191
2192 -- OTM R12 : assign delivery detail
2193 l_delivery_was_empty BOOLEAN;
2194 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
2195 l_gross_weight1 WSH_NEW_DELIVERIES.GROSS_WEIGHT%TYPE;
2196 l_gross_weight2 WSH_NEW_DELIVERIES.GROSS_WEIGHT%TYPE;
2197 l_delivery_detail_ids WSH_GLBL_VAR_STRCT_GRP.NUM_TBL_TYPE;
2198 l_assign_update BOOLEAN;
2199
2200 -- End of OTM R12 : assign delivery detail
2201
2202 BEGIN
2203 --
2204 --
2205 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2206 --
2207 IF l_debug_on IS NULL
2208 THEN
2209 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2210 END IF;
2211 --
2212 IF l_debug_on THEN
2213 WSH_DEBUG_SV.push(l_module_name);
2214 --
2215 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
2216 WSH_DEBUG_SV.log(l_module_name,'P_PARENT_DETAIL_ID',P_PARENT_DETAIL_ID);
2217 END IF;
2218 --
2219 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2220
2221 -- OTM R12
2222 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
2223
2224 IF (l_gc3_is_installed IS NULL) THEN
2225 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
2226 END IF;
2227 l_assign_update := FALSE; --default assignment tms update to false
2228 -- End of OTM R12
2229
2230
2231 OPEN c_del_id_for_cont_or_detail(p_parent_detail_id);
2232 FETCH c_del_id_for_cont_or_detail into l_del_id_FOR_container;
2233 CLOSE c_del_id_for_cont_or_detail;
2234
2235 OPEN c_del_id_for_cont_or_detail(p_detail_id);
2236 FETCH c_del_id_for_cont_or_detail into l_del_id_for_detail;
2237 CLOSE c_del_id_for_cont_or_detail;
2238
2239 -- K LPN CONV. rv
2240 l_wms_org := wsh_util_validate.check_wms_org(l_del_id_FOR_container.organization_id);
2241 -- K LPN CONV. rv
2242
2243 -- J: W/V Changes
2244 -- Return if the dd is already assigned to the specified container
2245 IF l_del_id_for_detail.parent_delivery_detail_id = p_parent_detail_id THEN
2246 IF l_debug_on THEN
2247 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already assigned to '||p_parent_detail_id||'. Returning');
2248 WSH_DEBUG_SV.pop(l_module_name);
2249 END IF;
2250 return;
2251 END IF;
2252
2253
2254 OPEN c_get_shipto(p_parent_detail_id);
2255 FETCH c_get_shipto into l_ship_to;
2256 IF c_get_shipto%NOTFOUND THEN
2257 l_ship_to := NULL;
2258 END IF;
2259 CLOSE c_get_shipto;
2260
2261 l_container_has_content := l_ship_to IS NOT NULL;
2262
2263 IF l_debug_on THEN
2264 WSH_DEBUG_SV.log(l_module_name,'l_del_id_FOR_container',
2265 l_del_id_FOR_container.delivery_id);
2266 WSH_DEBUG_SV.log(l_module_name,'l_del_id_FOR_detail',
2267 l_del_id_for_detail.delivery_id);
2268 WSH_DEBUG_SV.log(l_module_name,'l_ship_to', l_ship_to);
2269 END IF;
2270 /* Added code to check for grouping attributes */
2271 IF (l_del_id_for_detail.organization_id <>
2272 l_del_id_for_container.organization_id) THEN
2273 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_ASSG_ORG_DIFF');
2274 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2275 --
2276 IF l_debug_on THEN
2277 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2278 END IF;
2279 --
2280 FND_MESSAGE.SET_TOKEN('ENTITY2',
2281 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2282 p_parent_detail_id));
2283 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2284 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2285 --
2286 IF l_debug_on THEN
2287 WSH_DEBUG_SV.pop(l_module_name);
2288 END IF;
2289 --
2290 RETURN;
2291 END IF;
2292 IF (l_del_id_for_detail.ship_from_location_id <>
2293 l_del_id_for_container.ship_from_location_id) THEN
2294 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2295 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2296 --
2297 IF l_debug_on THEN
2298 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2299 END IF;
2300 --
2301 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2302 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2303 p_parent_detail_id));
2304 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2305 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2306 --
2307 IF l_debug_on THEN
2308 WSH_DEBUG_SV.pop(l_module_name);
2309 END IF;
2310 --
2311 RETURN;
2312 END IF;
2313
2314 --J TP Release
2315 IF (l_del_id_for_detail.ignore_for_planning <>
2316 l_del_id_for_container.ignore_for_planning) THEN
2317
2318 -- R12: MDC
2319 -- If called by WMS, and line is part of a consol delivery,
2320 -- then the ignore for planning flag is always 'Y'. For WMS,
2321 -- we need to set the parent consol's ignore for planning status
2322 -- to be 'Y' before we attempt to pack.
2323
2324 IF (l_wms_org = 'Y') AND
2325 ((l_del_id_for_detail.wda_type = 'O') OR (l_del_id_for_container.wda_type = 'O'))
2326 THEN --{
2327 IF l_del_id_for_detail.wda_type = 'O' THEN
2328 l_ignore_det_tab(1) := p_parent_detail_id;
2329 ELSE
2330 l_ignore_det_tab(1) := p_detail_id;
2331 END IF;
2332
2333 WSH_TP_RELEASE.change_ignoreplan_status
2334 (p_entity => 'DLVB',
2335 p_in_ids => l_ignore_det_tab,
2336 p_action_code => 'IGNORE_PLAN',
2337 x_return_status => x_return_status);
2338
2339 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
2340
2341 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
2342 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2343 --
2344 IF l_debug_on THEN
2345 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2346 END IF;
2347 --
2348 FND_MESSAGE.SET_TOKEN('ENTITY2',
2349 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2350 p_parent_detail_id));
2351 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2352 --
2353 IF l_debug_on THEN
2354 WSH_DEBUG_SV.pop(l_module_name);
2355 END IF;
2356 --
2357 RETURN;
2358
2359
2360 END IF;
2361
2362 ELSE --}
2363 l_display_error := TRUE;
2364 IF (l_wms_org = 'Y') AND (NOT l_container_has_content) THEN--{
2365 --
2366 l_ignore_det_tab(1) := p_parent_detail_id;
2367 WSH_TP_RELEASE.change_ignoreplan_status
2368 (p_entity => 'DLVB',
2369 p_in_ids => l_ignore_det_tab,
2370 p_action_code => 'IGNORE_PLAN',
2371 x_return_status => l_return_status);
2372
2373 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN --{
2374 l_display_error := TRUE;
2375 ELSE
2376 l_display_error := FALSE;
2377 END IF;--}
2378 END IF ; --}
2379
2380 IF l_display_error THEN --{
2381 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
2382 FND_MESSAGE.SET_TOKEN('ENTITY1',p_detail_id);
2383 --
2384 IF l_debug_on THEN
2385 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2386 END IF;
2387 --
2388 FND_MESSAGE.SET_TOKEN('ENTITY2',
2389 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2390 p_parent_detail_id));
2391 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2392 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2393 --
2394 IF l_debug_on THEN
2395 WSH_DEBUG_SV.pop(l_module_name);
2396 END IF;
2397 --
2398 RETURN;
2399 END IF; --}
2400 END IF;
2401 END IF;
2402
2403 --
2404 -- J-IB-NPARIKH-{
2405 --
2406 IF (l_del_id_for_detail.line_direction <> l_del_id_for_container.line_direction)
2407 THEN
2408 --{
2409 --
2410 -- O line can be assigned to empty IO container
2411 -- IO line can be assigned to empty O container
2412 -- Otherwise, line and container's line direction must match
2413 --
2414 IF l_del_id_for_detail.line_direction IN ('O','IO')
2415 AND l_del_id_for_container.line_direction IN ('O','IO')
2416 THEN
2417 --{
2418 NULL;
2419 --}
2420 ELSE
2421 --{
2422 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2423 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2424 --
2425 IF l_debug_on THEN
2426 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2427 END IF;
2428 --
2429 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2430 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2431 p_parent_detail_id));
2432 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2433 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2434 --
2435 IF l_debug_on THEN
2436 WSH_DEBUG_SV.pop(l_module_name);
2437 END IF;
2438 --
2439 RETURN;
2440 --}
2441 END IF;
2442 --}
2443 END IF;
2444 --
2445 -- J-IB-NPARIKH-}
2446 --
2447 --
2448 IF l_debug_on THEN
2449 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
2450 END IF;
2451 --
2452 WSH_DELIVERY_AUTOCREATE.get_group_by_attr(
2453 p_organization_id => l_del_id_for_detail.organization_id,
2454 x_group_by_flags => l_group_by_flags,
2455 x_return_status => x_return_status);
2456
2457 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2458 x_return_status := x_return_status;
2459 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2460 --
2461 IF l_debug_on THEN
2462 WSH_DEBUG_SV.pop(l_module_name);
2463 END IF;
2464 --
2465 RETURN;
2466 END IF;
2467
2468 /*---------
2469 When the container has no content then do not do these checks
2470 since all these attributes on the container will be null.
2471 ----------*/
2472
2473 IF l_container_has_content THEN
2474 IF l_debug_on THEN
2475 WSH_DEBUG_SV.log(l_module_name,'l_group_by_flags.customer',
2476 l_group_by_flags.customer);
2477 WSH_DEBUG_SV.log(l_module_name,'del_id_for_detail.customer',
2478 l_del_id_for_detail.customer_id);
2479 WSH_DEBUG_SV.log(l_module_name,'id_for_container.customer',
2480 l_del_id_for_container.customer_id);
2481 END IF;
2482
2483 --- Bug 3715176
2484 -- If delivery is same for container and line then it should not check firm status.
2485 IF l_del_id_for_detail.delivery_id = l_del_id_for_container.delivery_id then
2486 NULL;
2487
2488 Elsif l_del_id_for_detail.delivery_id is NOT NULL OR
2489 l_del_id_for_container.delivery_id is NOT NULL then
2490 Open c_get_content_count(p_parent_detail_id);
2491 Fetch c_get_content_count into l_content_count;
2492 Close c_get_content_count;
2493
2494 IF l_content_count > 0 THEN
2495 IF l_del_id_for_detail.delivery_id IS NOT NULL then
2496 OPEN c_get_plan_flag(l_del_id_for_detail.delivery_id);
2497 FETCH c_get_plan_flag into l_plan_flag;
2498 CLOSE c_get_plan_flag;
2499
2500 if l_plan_flag <> 'N' then
2501 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
2502
2503 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2504
2505 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2506 --
2507 IF l_debug_on THEN
2508 WSH_DEBUG_SV.pop(l_module_name);
2509 END IF;
2510 --
2511 return;
2512 end if;
2513 END IF;
2514
2515 IF l_del_id_for_container.delivery_id IS NOT NULL then
2516 OPEN c_get_plan_flag(l_del_id_for_container.delivery_id);
2517 FETCH c_get_plan_flag into l_plan_flag;
2518 CLOSE c_get_plan_flag;
2519
2520 if l_plan_flag <> 'N' then
2521 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
2522
2523 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2524
2525 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2526 --
2527 IF l_debug_on THEN
2528 WSH_DEBUG_SV.pop(l_module_name);
2529 END IF;
2530 --
2531 return;
2532 end if;
2533 END IF;
2534 END IF;
2535 END IF;
2536 -- Bug 3715176
2537
2538 /* bug 2677298 frontport from bug 2655474: issue #1:
2539 ** set x_return_status to error if grouping attributes do not match
2540 */
2541
2542
2543 IF l_group_by_flags.customer = 'Y' THEN
2544 IF (NVL(l_del_id_for_detail.customer_id,-1) <>
2545 NVL(l_del_id_for_container.customer_id,-1)) THEN
2546
2547 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2548 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2549 --
2550 IF l_debug_on THEN
2551 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2552 END IF;
2553 --
2554 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2555 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2556 p_parent_detail_id));
2557 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2558 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2559 --
2560 IF l_debug_on THEN
2561 WSH_DEBUG_SV.pop(l_module_name);
2562 END IF;
2563 --
2564 return;
2565 END IF;
2566 END IF;
2567 IF l_group_by_flags.intmed = 'Y' THEN
2568 IF (NVL(l_del_id_for_detail.intmed_ship_to_location_id,-1)<>
2569 NVL(l_del_id_for_container.intmed_ship_to_location_id,-1))
2570 THEN
2571
2572 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2573 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2574 --
2575 IF l_debug_on THEN
2576 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2577 END IF;
2578 --
2579 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2580 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2581 p_parent_detail_id));
2582 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2583 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2584 --
2585 IF l_debug_on THEN
2586 WSH_DEBUG_SV.pop(l_module_name);
2587 END IF;
2588 --
2589 return;
2590 END IF;
2591 END IF;
2592
2593 IF l_debug_on THEN
2594 WSH_DEBUG_SV.log(l_module_name,'fob_code',
2595 l_del_id_for_detail.fob_code);
2596 WSH_DEBUG_SV.log(l_module_name,'container fob_code',
2597 l_del_id_for_container.fob_code);
2598 WSH_DEBUG_SV.log(l_module_name,'fob',
2599 l_group_by_flags.fob);
2600 END IF;
2601
2602 IF l_group_by_flags.fob = 'Y' THEN
2603 IF (NVL(l_del_id_for_detail.fob_code,'#')<>
2604 NVL(l_del_id_for_container.fob_code,'#')) THEN
2605
2606 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2607 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2608 --
2609 IF l_debug_on THEN
2610 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2611 END IF;
2612 --
2613 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2614 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2615 p_parent_detail_id));
2616 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2617 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2618 --
2619 IF l_debug_on THEN
2620 WSH_DEBUG_SV.pop(l_module_name);
2621 END IF;
2622 --
2623 return;
2624 END IF;
2625 END IF;
2626 IF l_debug_on THEN
2627 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code',
2628 l_del_id_for_detail.freight_terms_code);
2629 WSH_DEBUG_SV.log(l_module_name,
2630 'container freight_terms_code',
2631 l_del_id_for_container.freight_terms_code);
2632 WSH_DEBUG_SV.log(l_module_name,'freight_terms',
2633 l_group_by_flags.freight_terms);
2634 END IF;
2635
2636 IF l_group_by_flags.freight_terms = 'Y' THEN
2637 IF (NVL(l_del_id_for_detail.freight_terms_code,'#')<>
2638 NVL(l_del_id_for_container.freight_terms_code,'#')) THEN
2639
2640 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2641 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2642 --
2643 IF l_debug_on THEN
2644 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2645 END IF;
2646 --
2647 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2648 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2649 p_parent_detail_id));
2650 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2651 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2652 --
2653 IF l_debug_on THEN
2654 WSH_DEBUG_SV.pop(l_module_name);
2655 END IF;
2656 --
2657 return;
2658 END IF;
2659 END IF;
2660
2661 IF l_debug_on THEN
2662 WSH_DEBUG_SV.log(l_module_name,'ship_method_code',
2663 l_del_id_for_detail.ship_method_code);
2664 WSH_DEBUG_SV.log(l_module_name, 'container ship_method_code',
2665 l_del_id_for_container.ship_method_code);
2666 WSH_DEBUG_SV.log(l_module_name,'ship_method',
2667 l_group_by_flags.ship_method);
2668 END IF;
2669
2670 IF l_group_by_flags.ship_method = 'Y' THEN
2671 IF (NVL(NVL(l_del_id_for_detail.mode_of_transport,l_del_id_for_container.mode_of_transport),'#')<>
2672 NVL(NVL(l_del_id_for_container.mode_of_transport,l_del_id_for_detail.mode_of_transport),'#'))
2673 OR (NVL(NVL(l_del_id_for_detail.service_level,l_del_id_for_container.service_level),'#')<>
2674 NVL(NVL(l_del_id_for_container.service_level,l_del_id_for_detail.service_level),'#'))
2675 OR (NVL(NVL(l_del_id_for_detail.carrier_id,l_del_id_for_container.carrier_id),-1)<>
2676 NVL(NVL(l_del_id_for_container.carrier_id,l_del_id_for_detail.carrier_id),-1)) THEN
2677
2678 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
2679 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2680 --
2681 IF l_debug_on THEN
2682 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2683 END IF;
2684 --
2685 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2686 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2687 p_parent_detail_id));
2688 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2689 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2690 --
2691 IF l_debug_on THEN
2692 WSH_DEBUG_SV.pop(l_module_name);
2693 END IF;
2694 --
2695 return;
2696 END IF;
2697 END IF;
2698 END IF;
2699 /* End of Check for grouping attributes */
2700
2701 IF l_debug_on THEN
2702 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id',
2703 l_del_id_for_detail.parent_delivery_detail_id);
2704 WSH_DEBUG_SV.log(l_module_name,
2705 'container parent_delivery_detail_id',
2706 l_del_id_for_container.parent_delivery_detail_id);
2707 END IF;
2708
2709 /* Check to see if the line is already packed */
2710 IF (l_del_id_for_detail.parent_delivery_detail_id IS NOT NULL
2711 AND l_del_id_for_detail.parent_delivery_detail_id <>
2712 p_parent_detail_id
2713 ) THEN
2714 FND_MESSAGE.SET_NAME('WSH','WSH_DET_PACK_ERROR');
2715 FND_MESSAGE.SET_TOKEN('DET_LINE',p_detail_id);
2716 --
2717 IF l_debug_on THEN
2718 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2719 END IF;
2720 --
2721 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2722 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2723 p_parent_detail_id));
2724 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2725 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
2726 --
2727 IF l_debug_on THEN
2728 WSH_DEBUG_SV.pop(l_module_name);
2729 END IF;
2730 --
2731 return;
2732 END IF;
2733 /* End of Check to see if the line is already packed */
2734
2735
2736 -- J: W/V Changes
2737 IF l_debug_on THEN
2738 WSH_DEBUG_SV.log(l_module_name,'l_del_id_for_detail.released_status',
2739 l_del_id_for_detail.released_status);
2740 END IF;
2741
2742 IF l_del_id_for_detail.released_status = 'C' THEN
2743 Raise invalid_detail;
2744 END IF;
2745
2746
2747 /* bug 2677298 frontport from bug 2655474: issue #2:
2748 ** set x_return_status to error if line and container are in different deliveries.
2749 */
2750 IF (l_del_id_for_detail.delivery_id <> l_del_id_for_container.delivery_id) THEN
2751 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_DELIVERIES');
2752 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
2753 --
2754 IF l_debug_on THEN
2755 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
2756 END IF;
2757 --
2758 FND_MESSAGE.SET_TOKEN('CONT_NAME',
2759 nvl(wsh_container_utilities.get_cont_name(p_parent_detail_id),
2760 p_parent_detail_id));
2761 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2762 WSH_UTIL_CORE.Add_Message(x_return_status);
2763 --
2764 IF l_debug_on THEN
2765 WSH_DEBUG_SV.pop(l_module_name);
2766 END IF;
2767 --
2768 return;
2769 END IF;
2770
2771 -- J: W/V Changes
2772 -- The first DD_WV_Post_Process call will decrement the DD W/V from delivery
2773 -- The second DD_WV_Post_Process call will increment the delivery W/V with container W/V (since container has to be
2774 -- assigned to the delivery if the detail being assigned to container is already assigned to delivery)
2775 -- The third DD_WV_Post_Process will will increment the container W/V with DD W/V which in turn will adjust the
2776 -- delivery W/V, if the container is in a delivery.
2777 IF (l_del_id_for_detail.delivery_id is not null) THEN
2778 IF l_debug_on THEN
2779 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
2780 END IF;
2781
2782 WSH_WV_UTILS.DD_WV_Post_Process(
2783 p_delivery_detail_id => p_detail_id,
2784 p_diff_gross_wt => -1 * l_del_id_for_detail.gross_weight,
2785 p_diff_net_wt => -1 * l_del_id_for_detail.net_weight,
2786 p_diff_volume => -1 * l_del_id_for_detail.volume,
2787 p_diff_fill_volume => -1 * l_del_id_for_detail.volume,
2788 x_return_status => l_return_status);
2789
2790 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2791 --
2792 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2793 WSH_UTIL_CORE.Add_Message(x_return_status);
2794 IF l_debug_on THEN
2795 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
2796 WSH_DEBUG_SV.pop(l_module_name);
2797 END IF;
2798 return;
2799 END IF;
2800
2801 END IF;
2802
2803 /* container is already assigned to a delivery */
2804
2805 /* bug 2691385 and 2655474: avoid unnecessary update if line is already in delivery. */
2806 /****
2807 !!!!! We should NOT assume that the delivery grouping attributes of the delivery match
2808 !!!!! with that of the delivery details.
2809 !!!!! Bugs 2794866, 2397552.
2810 ****/
2811
2812
2813 IF (l_del_id_for_container.delivery_id IS not null) and (l_del_id_for_detail.delivery_id is null) THEN
2814
2815
2816 -- OTM R12 : assign delivery detail, this is the case where detail is assigned to the delivery
2817
2818 IF (l_gc3_is_installed = 'Y' AND
2819 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
2820
2821 Pre_Otm_Assign_Del_Detail
2822 (p_delivery_id => NULL,
2823 p_detail_id => p_detail_id,
2824 p_container1_id => p_parent_detail_id,
2825 p_container2_id => NULL,
2826 p_assignment_type => 'DD2C',
2827 x_delivery_was_empty => l_delivery_was_empty,
2828 x_assign_update => l_assign_update,
2829 x_gross_weight1 => l_gross_weight1,
2830 x_gross_weight2 => l_gross_weight2,
2831 x_return_status => l_return_status);
2832
2833 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
2834 IF l_debug_on THEN
2835 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
2836 END IF;
2837 raise FND_API.G_EXC_ERROR;
2838 END IF;
2839 END IF;
2840 -- End of OTM R12 : assign delivery detail
2841
2842
2843 IF l_debug_on THEN
2844 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.CHECK_ASSIGN_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
2845 END IF;
2846
2847 l_attr_tab(1).entity_id := l_del_id_for_container.delivery_id;
2848 l_attr_tab(1).entity_type := 'DELIVERY';
2849 l_attr_tab(2).entity_id := p_detail_id;
2850 l_attr_tab(2).entity_type := 'DELIVERY_DETAIL';
2851
2852 l_action_rec.action := 'MATCH_GROUPS';
2853 l_action_rec.check_single_grp := 'Y';
2854
2855 WSH_DELIVERY_AUTOCREATE.Find_Matching_Groups(p_attr_tab => l_attr_tab,
2856 p_action_rec => l_action_rec,
2857 p_target_rec => l_target_rec,
2858 p_group_tab => l_group_tab,
2859 x_matched_entities => l_matched_entities,
2860 x_out_rec => l_out_rec,
2861 x_return_status => x_return_status);
2862
2863 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2864 --
2865 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2866 WSH_UTIL_CORE.Add_Message(x_return_status);
2867 IF l_debug_on THEN
2868 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
2869 WSH_DEBUG_SV.pop(l_module_name);
2870 END IF;
2871 return;
2872 END IF;
2873
2874
2875
2876 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
2877 --
2878 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2879 WSH_UTIL_CORE.Add_Message(x_return_status);
2880 IF l_debug_on THEN
2881 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
2882 WSH_DEBUG_SV.pop(l_module_name);
2883 END IF;
2884 return;
2885 END IF;
2886
2887 -- Update the delivery with the line's line direction
2888
2889 -- Lock the delivery before update.
2890
2891 BEGIN
2892
2893 wsh_new_deliveries_pvt.lock_dlvy_no_compare(p_delivery_id => l_del_id_for_container.delivery_id);
2894
2895 EXCEPTION
2896
2897 WHEN OTHERS THEN
2898 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2899 FND_MESSAGE.Set_Name('WSH', 'WSH_NO_LOCK');
2900 WSH_UTIL_CORE.add_message (WSH_UTIL_CORE.G_RET_STS_ERROR);
2901 IF l_debug_on THEN
2902 WSH_DEBUG_SV.log(l_module_name,'Could not lock delivery: ',l_del_id_for_container.delivery_id);
2903 WSH_DEBUG_SV.pop(l_module_name);
2904 END IF;
2905 RETURN;
2906 END;
2907
2908 l_group_index := l_group_tab.FIRST;
2909
2910 -- OTM R12 : update delivery
2911 l_tms_update := 'N';
2912 l_new_interface_flag_tab(1) := NULL;
2913
2914 IF (l_gc3_is_installed = 'Y' AND
2915 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
2916 l_trip_not_found := 'N';
2917
2918 --get trip information for delivery, no update when trip not OPEN
2919 WSH_DELIVERY_VALIDATIONS.get_trip_information
2920 (p_delivery_id => l_del_id_for_container.delivery_id,
2921 x_trip_info_rec => l_trip_info_rec,
2922 x_return_status => l_return_status);
2923
2924 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
2925 x_return_status := l_return_status;
2926 IF l_debug_on THEN
2927 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_trip_information');
2928 WSH_DEBUG_SV.pop(l_module_name);
2929 END IF;
2930 RETURN;
2931 END IF;
2932
2933 IF (l_trip_info_rec.trip_id IS NULL) THEN
2934 l_trip_not_found := 'Y';
2935 END IF;
2936
2937 -- only do changes when there's no trip or trip status is OPEN
2938 IF (l_trip_info_rec.status_code = 'OP' OR
2939 l_trip_not_found = 'Y') THEN
2940
2941 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
2942 p_delivery_id => l_del_id_for_container.delivery_id,
2943 x_delivery_rec => l_delivery_info,
2944 x_return_status => l_return_status);
2945
2946 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
2947 x_return_status := l_return_status;
2948 IF l_debug_on THEN
2949 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
2950 WSH_DEBUG_SV.pop(l_module_name);
2951 END IF;
2952 RETURN;
2953 END IF;
2954
2955 -- if service level, mode of transport, or carrier id is changed
2956 -- with the nvl updates, then update is needed
2957
2958 IF (nvl(l_delivery_info.service_level,
2959 nvl(l_group_tab(l_group_index).service_level, '@@')) <>
2960 nvl(l_delivery_info.service_level, '@@') OR
2961 nvl(l_delivery_info.mode_of_transport,
2962 nvl(l_group_tab(l_group_index).mode_of_transport, '@@')) <>
2963 nvl(l_delivery_info.mode_of_transport, '@@') OR
2964 nvl(l_delivery_info.carrier_id,
2965 nvl(l_group_tab(l_group_index).carrier_id, -1)) <>
2966 nvl(l_delivery_info.carrier_id, -1)) THEN
2967
2968 IF (l_delivery_info.tms_interface_flag NOT IN
2969 (WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT,
2970 WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
2971 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
2972 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
2973 WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED)) THEN
2974 l_tms_update := 'Y';
2975 l_delivery_info_tab(1) := l_delivery_info;
2976 l_new_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
2977 l_tms_version_number := nvl(l_delivery_info.tms_version_number, 1) + 1;
2978 END IF;
2979 END IF; -- checking the value differences
2980 END IF; -- IF ((l_trip_not_found = 'N' AND
2981 END IF; -- IF (l_gc3_is_installed = 'Y'
2982
2983 IF l_debug_on THEN
2984 WSH_DEBUG_SV.log(l_module_name, 'l_gc3_is_installed', l_gc3_is_installed);
2985 WSH_DEBUG_SV.log(l_module_name, 'l_tms_update', l_tms_update);
2986 IF (l_tms_update = 'Y') THEN
2987 WSH_DEBUG_SV.log(l_module_name, 'l_new_interface_flag_tab', l_new_interface_flag_tab(1));
2988 WSH_DEBUG_SV.log(l_module_name, 'l_tms_version_number', l_tms_version_number);
2989 END IF;
2990 END IF;
2991
2992 -- End of OTM R12 : update delivery
2993
2994 UPDATE wsh_new_deliveries
2995 SET shipment_direction = l_del_id_for_detail.line_direction,
2996 service_level = NVL(service_level,l_group_tab(l_group_index).service_level),
2997 mode_of_transport = NVL(mode_of_transport, l_group_tab(l_group_index).mode_of_transport),
2998 carrier_id = NVL(carrier_id, l_group_tab(l_group_index).carrier_id),
2999 -- OTM R12
3000 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)),
3001 TMS_VERSION_NUMBER = decode(l_tms_update, 'Y', l_tms_version_number, nvl(tms_version_number, 1)),
3002 -- End of OTM R12
3003 last_update_date = SYSDATE,
3004 last_updated_by = FND_GLOBAL.USER_ID,
3005 last_update_login = FND_GLOBAL.LOGIN_ID
3006 where delivery_id = l_del_id_for_container.delivery_id;
3007
3008 -- OTM R12 : update delivery
3009 IF (l_gc3_is_installed = 'Y' AND l_tms_update = 'Y') THEN
3010 WSH_XC_UTIL.LOG_OTM_EXCEPTION(
3011 p_delivery_info_tab => l_delivery_info_tab,
3012 p_new_interface_flag_tab => l_new_interface_flag_tab,
3013 x_return_status => l_return_status);
3014
3015 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3016 x_return_status := l_return_status;
3017 IF l_debug_on THEN
3018 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_XC_UTIL.log_otm_exception');
3019 WSH_DEBUG_SV.pop(l_module_name);
3020 END IF;
3021 RETURN;
3022 END IF;
3023 END IF;
3024 -- End of OTM R12 : update delivery
3025
3026 -- K LPN CONV. rv
3027 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3028 AND nvl(l_del_id_FOR_container.line_direction,'O') IN ('O', 'IO')
3029 AND
3030 (
3031 ((WSH_WMS_LPN_GRP.GK_WMS_PACK or WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY) and l_wms_org = 'Y')
3032 OR
3033 ((WSH_WMS_LPN_GRP.GK_INV_PACK or WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY) and l_wms_org = 'N')
3034 )
3035 THEN
3036 --{
3037 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3038 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_for_detail.parent_delivery_detail_id;
3039 l_sync_tmp_rec.delivery_id := l_del_id_for_detail.delivery_id;
3040 l_sync_tmp_rec.operation_type := 'PRIOR';
3041 --
3042 IF l_debug_on THEN
3043 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3044 END IF;
3045 --
3046 WSH_WMS_SYNC_TMP_PKG.MERGE
3047 (
3048 p_sync_tmp_rec => l_sync_tmp_rec,
3049 x_return_status => l_return_status
3050 );
3051 --
3052 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3053 --
3054 x_return_status := l_return_status;
3055 --
3056 IF l_debug_on THEN
3057 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3058 WSH_DEBUG_SV.pop(l_module_name);
3059 END IF;
3060 --
3061 return;
3062 --
3063 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3064 --
3065 l_num_warnings := l_num_warnings + 1;
3066 --
3067 END IF;
3068 --
3069 --}
3070 END IF;
3071 -- K LPN CONV. rv
3072 --
3073
3074 UPDATE wsh_delivery_assignments_v
3075 SET parent_delivery_detail_id = p_parent_detail_id,
3076 delivery_id = l_del_id_for_container.delivery_id,
3077 last_update_date = SYSDATE,
3078 last_updated_by = FND_GLOBAL.USER_ID,
3079 last_update_login = FND_GLOBAL.LOGIN_ID
3080 WHERE delivery_detail_id = p_detail_id;
3081
3082 -- OTM R12 : assign delivery detail
3083 IF (l_assign_update AND
3084 l_gc3_is_installed = 'Y' AND
3085 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
3086
3087 IF (l_tms_update = 'Y') THEN
3088 l_tms_interface_flag := l_new_interface_flag_tab(1);
3089 ELSIF (l_trip_info_rec.status_code = 'OP' OR
3090 l_trip_not_found = 'Y') THEN
3091 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
3092 ELSE
3093 l_tms_interface_flag := NULL;
3094 END IF;
3095
3096 Post_Otm_Assign_Del_Detail
3097 (p_delivery_id => l_del_id_for_container.delivery_id,
3098 p_delivery_was_empty => l_delivery_was_empty,
3099 p_tms_interface_flag => l_tms_interface_flag,
3100 p_gross_weight => l_gross_weight1, --using the gross weight of the detail
3101 x_return_status => l_return_status);
3102
3103 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3104 IF l_debug_on THEN
3105 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
3106 END IF;
3107 raise FND_API.G_EXC_ERROR;
3108 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3109 l_num_warnings := l_num_warnings + 1;
3110 END IF;
3111 END IF;
3112 -- End of OTM R12 : assign delivery detail
3113
3114 -- K: MDC delete consolidation record of it exists
3115 l_mdc_detail_tab(1) := p_detail_id;
3116 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
3117 p_detail_id_tab => l_mdc_detail_tab,
3118 x_return_status => x_return_status);
3119
3120 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3121 IF l_debug_on THEN
3122 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3123 WSH_DEBUG_SV.pop(l_module_name);
3124 END IF;
3125 return;
3126 END IF;
3127
3128
3129 /* H integration: Pricing integration csun , marking the delivery */
3130 m := m + 1;
3131 l_del_tab(m) := l_del_id_for_detail.delivery_id;
3132 ELSIF (l_del_id_for_container.delivery_id is null)
3133 OR (l_del_id_for_container.delivery_id = l_del_id_for_detail.delivery_id )THEN
3134 --
3135 -- K LPN CONV. rv
3136 -- Only packing.
3137 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3138 AND nvl(l_del_id_FOR_container.line_direction,'O') IN ('O', 'IO')
3139 AND
3140 (
3141 (WSH_WMS_LPN_GRP.GK_WMS_PACK and l_wms_org = 'Y')
3142 OR
3143 (WSH_WMS_LPN_GRP.GK_INV_PACK and l_wms_org = 'N')
3144 )
3145 THEN
3146 --{
3147 --
3148 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3149 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_for_detail.parent_delivery_detail_id;
3150 l_sync_tmp_rec.delivery_id := l_del_id_for_detail.delivery_id;
3151 l_sync_tmp_rec.operation_type := 'PRIOR';
3152 --
3153 IF l_debug_on THEN
3154 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3155 END IF;
3156 --
3157 WSH_WMS_SYNC_TMP_PKG.MERGE
3158 (
3159 p_sync_tmp_rec => l_sync_tmp_rec,
3160 x_return_status => l_return_status
3161 );
3162 --
3163 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3164 --
3165 x_return_status := l_return_status;
3166 --
3167 IF l_debug_on THEN
3168 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3169 WSH_DEBUG_SV.pop(l_module_name);
3170 END IF;
3171 --
3172 return;
3173 --
3174 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3175 --
3176 l_num_warnings := l_num_warnings + 1;
3177 --
3178 END IF;
3179 --
3180 --}
3181 END IF;
3182 -- K LPN CONV. rv
3183 --
3184
3185 UPDATE wsh_delivery_assignments_v
3186 SET parent_delivery_detail_id = p_parent_detail_id,
3187 last_update_date = SYSDATE,
3188 last_updated_by = FND_GLOBAL.USER_ID,
3189 last_update_login = FND_GLOBAL.LOGIN_ID
3190 WHERE delivery_detail_id = p_detail_id;
3191
3192 l_mdc_detail_tab(1) := p_detail_id;
3193 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
3194 p_detail_id_tab => l_mdc_detail_tab,
3195 x_return_status => x_return_status);
3196
3197 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3198 IF l_debug_on THEN
3199 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3200 WSH_DEBUG_SV.pop(l_module_name);
3201 END IF;
3202 return;
3203 END IF;
3204 END IF;
3205
3206 /* detail is already assigned to a delivery */
3207 /* updating delivery_id for all containers and details inside
3208 of the container AND updating delivery_id FOR all containers outside of the
3209 container */
3210 /* Bug 1571143 */
3211 /* bug 2677298 frontport from bug 2655474: update container only if it is not in delivery */
3212 IF ( (l_del_id_for_detail.delivery_id is not null)
3213 AND (l_del_id_for_container.delivery_id is null) ) THEN
3214
3215 -- K LPN CONV. rv
3216 -- Based on assumption that we are using wsh_delivery_assignments_v,
3217 -- delivery and its contents will belong to same organization.
3218 -- Similarly, container and its contents will belong to same organization.
3219 -- Hence, we are checking for WMS org or non-WMS org. at the
3220 -- parent level (i.e. delivery/container)
3221 -- rather than at line-level for performance reasons.
3222
3223 -- If this assumptions were to be violated in anyway
3224 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
3225 -- wsh_delivery_assignments_v
3226 -- or
3227 -- if existing query were to somehow return/fetch records where
3228 -- delivery and its contents may belong to diff. org.
3229 -- container and its contents may belong to diff. org.
3230 -- then
3231 -- Calls to check_wms_org needs to be re-adjusted at
3232 -- appropriate level (line/delivery/container).
3233 -- K LPN CONV. rv
3234
3235 -- Bug 4452930
3236 OPEN c_topmost_container(p_parent_detail_id);
3237 FETCH c_topmost_container INTO l_topmost_cont;
3238 CLOSE c_topmost_container;
3239
3240 IF l_topmost_cont IS NULL THEN
3241 l_topmost_cont := p_parent_detail_id;
3242 END IF;
3243
3244
3245 -- OTM R12 : assign delivery detail,
3246 -- this is the case where container is assigned to delivery, had to get topmost container
3247
3248 IF (l_gc3_is_installed = 'Y' AND
3249 nvl(l_del_id_for_container.ignore_for_planning, 'N') = 'N') THEN
3250
3251 Pre_Otm_Assign_Del_Detail
3252 (p_delivery_id => NULL,
3253 p_detail_id => p_detail_id,
3254 p_container1_id => l_topmost_cont,
3255 p_container2_id => NULL,
3256 p_assignment_type => 'DD2C',
3257 x_delivery_was_empty => l_delivery_was_empty,
3258 x_assign_update => l_assign_update,
3259 x_gross_weight1 => l_gross_weight1,
3260 x_gross_weight2 => l_gross_weight2,
3261 x_return_status => l_return_status);
3262
3263 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3264 IF l_debug_on THEN
3265 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
3266 END IF;
3267 raise FND_API.G_EXC_ERROR;
3268 END IF;
3269 END IF;
3270 -- End of OTM R12 : assign delivery detail
3271
3272
3273 OPEN c_inside_outside_of_container(l_topmost_cont);
3274 -- Bug 4452930
3275 FETCH c_inside_outside_of_container bulk collect into
3276 l_sync_tmp_recTbl.delivery_detail_id_tbl,
3277 l_sync_tmp_recTbl.parent_detail_id_tbl,
3278 l_sync_tmp_recTbl.delivery_id_tbl;
3279
3280 CLOSE c_inside_outside_of_container;
3281 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
3282 --{
3283
3284 --
3285 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
3286 l_operation_type := 'PRIOR';
3287 --
3288 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3289 AND nvl(l_del_id_for_detail.line_direction,'O') IN ('O', 'IO')
3290 AND
3291 (
3292 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
3293 OR
3294 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
3295 )
3296 THEN
3297 --{
3298 --
3299 IF l_debug_on THEN
3300 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
3301 END IF;
3302 --
3303 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
3304 (
3305 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
3306 x_return_status => l_return_status,
3307 p_operation_type => l_operation_type
3308 );
3309 --
3310 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3311 --
3312 x_return_status := l_return_status;
3313 --
3314 IF l_debug_on THEN
3315 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3316 WSH_DEBUG_SV.pop(l_module_name);
3317 END IF;
3318 --
3319 return;
3320 --
3321 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3322 --
3323 l_num_warnings := l_num_warnings + 1;
3324 --
3325 END IF;
3326 --
3327
3328 --}
3329 END IF;
3330 --
3331
3332 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
3333 UPDATE wsh_delivery_assignments_v
3334 SET delivery_id = l_del_id_FOR_detail.delivery_id,
3335 last_update_date = SYSDATE,
3336 last_updated_by = FND_GLOBAL.USER_ID,
3337 last_update_login = FND_GLOBAL.LOGIN_ID
3338 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
3339
3340 -- OTM R12 : assign delivery detail
3341 -- executed only once since it's for the same delivery
3342 IF (l_assign_update AND
3343 l_gc3_is_installed = 'Y' AND
3344 nvl(l_del_id_for_detail.ignore_for_planning, 'N') = 'N') THEN
3345
3346 -- when it comes here, OTM R12 update delivery is not called before
3347 -- inside the same procedure, so can't use those variables
3348
3349 l_tms_interface_flag := NULL;
3350
3351 Post_Otm_Assign_Del_Detail
3352 (p_delivery_id => l_del_id_for_detail.delivery_id,
3353 p_delivery_was_empty => l_delivery_was_empty,
3354 p_tms_interface_flag => l_tms_interface_flag,
3355 p_gross_weight => l_gross_weight2, --using the container gross weight
3356 x_return_status => l_return_status);
3357
3358 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
3359 IF l_debug_on THEN
3360 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
3361 END IF;
3362 raise FND_API.G_EXC_ERROR;
3363 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3364 l_num_warnings := l_num_warnings + 1;
3365 END IF;
3366 END IF;
3367 -- End of OTM R12 : assign delivery detail
3368
3369 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
3370 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
3371 END LOOP;
3372 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
3373 p_detail_id_tab => l_mdc_detail_tab,
3374 x_return_status => x_return_status);
3375
3376 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3377 IF l_debug_on THEN
3378 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3379 WSH_DEBUG_SV.pop(l_module_name);
3380 END IF;
3381 return;
3382 END IF;
3383 l_mdc_detail_tab.delete;
3384 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
3385 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
3386 l_sync_tmp_recTbl.delivery_id_tbl.delete;
3387 l_sync_tmp_recTbl.operation_type_tbl.delete;
3388
3389 --}
3390 END IF;
3391 -- K LPN CONV. rv
3392
3393 -- J: W/V Changes
3394 -- Container is being assigned to delivery. Call DD_WV_Post_Process to adjust the W/V of the parent
3395 IF l_debug_on THEN
3396 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning Container to Delivery');
3397 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3398 END IF;
3399
3400 WSH_WV_UTILS.DD_WV_Post_Process(
3401 p_delivery_detail_id => p_parent_detail_id,
3402 p_diff_gross_wt => l_del_id_for_container.gross_weight,
3403 p_diff_net_wt => l_del_id_for_container.net_weight,
3404 p_diff_volume => l_del_id_for_container.volume,
3405 p_diff_fill_volume => l_del_id_for_container.volume,
3406 x_return_status => l_return_status);
3407
3408 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3409 --
3410 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3411 WSH_UTIL_CORE.Add_Message(x_return_status);
3412 IF l_debug_on THEN
3413 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3414 WSH_DEBUG_SV.pop(l_module_name);
3415 END IF;
3416 return;
3417 END IF;
3418
3419
3420 /* H integration: Pricing integration csun , marking the delivery */
3421 m := m + 1;
3422 l_del_tab(m) := l_del_id_for_detail.delivery_id;
3423
3424 END IF;
3425
3426
3427 -- K LPN CONV. rv
3428 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3429 THEN
3430 --{
3431 -- J: W/V Changes
3432 IF l_debug_on THEN
3433 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3434 END IF;
3435
3436 WSH_WV_UTILS.DD_WV_Post_Process(
3437 p_delivery_detail_id => p_detail_id,
3438 p_diff_gross_wt => l_del_id_for_detail.gross_weight,
3439 p_diff_net_wt => l_del_id_for_detail.net_weight,
3440 p_diff_volume => l_del_id_for_detail.volume,
3441 p_diff_fill_volume => l_del_id_for_detail.volume,
3442 x_return_status => l_return_status);
3443
3444 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3445 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3446 l_num_warnings := l_num_warnings + 1;
3447 ELSE
3448 --
3449 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3450 WSH_UTIL_CORE.Add_Message(x_return_status);
3451 IF l_debug_on THEN
3452 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3453 WSH_DEBUG_SV.pop(l_module_name);
3454 END IF;
3455 return;
3456 END IF;
3457 END IF;
3458 --}
3459 END IF;
3460 -- K LPN CONV. rv
3461
3462 /* H integration: Pricing integration csun */
3463 IF l_del_tab.count > 0 THEN
3464 --
3465 IF l_debug_on THEN
3466 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
3467 END IF;
3468 --
3469 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
3470 p_entity_type => 'DELIVERY',
3471 p_entity_ids => l_del_tab,
3472 x_return_status => l_return_status);
3473 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3474 raise mark_reprice_error;
3475 END IF;
3476 END IF;
3477
3478 IF l_num_warnings > 0 THEN
3479 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3480 END IF;
3481
3482 --
3483 IF l_debug_on THEN
3484 WSH_DEBUG_SV.pop(l_module_name);
3485 END IF;
3486 --
3487 exception
3488
3489 -- OTM R12 : assign delivery detail
3490 WHEN FND_API.G_EXC_ERROR then
3491 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3492 --
3493 IF l_debug_on THEN
3494 WSH_DEBUG_SV.pop(l_module_name);
3495 END IF;
3496 --
3497 RETURN;
3498 -- End of OTM R12 : assign delivery detail
3499
3500 WHEN mark_reprice_error then
3501 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
3502 x_return_status := l_return_status;
3503 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
3504 --
3505 IF l_debug_on THEN
3506 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3507 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
3508 END IF;
3509 --
3510 WHEN invalid_detail then
3511 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3512 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
3513 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
3514 wsh_util_core.add_message(x_return_status,l_module_name);
3515 --
3516 IF l_debug_on THEN
3517 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3518 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DETAIL');
3519 END IF;
3520 --
3521 RETURN;
3522 WHEN others THEN
3523 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3524 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DETAIL_TO_CONT',l_module_name);
3525 --
3526 IF l_debug_on THEN
3527 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3528 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3529 END IF;
3530 --
3531 END Assign_Detail_To_Cont;
3532 -- -------------------------------------------------------------------------------
3533 --Procedure: Unssign_Detail_from_Cont
3534 --Parameters: p_detail_id,
3535 -- p_parent_detail_id,
3536 -- x_return_status
3537 --Description: if detail is already assigned to a delivery which means
3538 -- the container must be assigned to the same delivery too,
3539 -- in this case even though the detail is getting removed
3540 -- from the container, it will still stay assigned to the
3541 -- delivery
3542 -- if the container is already assigned to a delivery,
3543 -- the detail must also be assigned to the same delivery
3544
3545
3546 PROCEDURE Unassign_Detail_from_Cont(
3547 p_detail_id IN NUMBER,
3548 x_return_status OUT NOCOPY VARCHAR2,
3549 p_validate_flag IN VARCHAR2)
3550 IS
3551
3552 invalid_detail exception;
3553 -- J: W/V Changes
3554 e_abort exception;
3555 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
3556 l_cont_fill_pc NUMBER;
3557
3558 /* H projects: pricing integration csun */
3559 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
3560 l_return_status VARCHAR2(1);
3561 l_del_rec C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
3562 mark_reprice_error EXCEPTION;
3563
3564 l_num_warnings number := 0;
3565 -- K LPN CONV. rv
3566 l_wms_org VARCHAR2(10) := 'N';
3567 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
3568 l_mdc_detail_tab wsh_util_core.id_tab_type;
3569
3570 cursor l_parent_cnt_csr (p_cnt_inst_id IN NUMBER) is
3571 select organization_id,
3572 nvl(line_direction,'O')
3573 from wsh_delivery_details
3574 where delivery_detail_id = p_cnt_inst_id
3575 and container_flag = 'Y'
3576 and source_code = 'WSH';
3577
3578 l_parent_cnt_orgn_id NUMBER;
3579 l_parent_cnt_line_dir VARCHAR2(10);
3580 -- K LPN CONV. rv
3581
3582 --
3583 l_debug_on BOOLEAN;
3584 --
3585 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_CONT';
3586 --
3587 BEGIN
3588 --
3589 --
3590 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3591 --
3592 IF l_debug_on IS NULL
3593 THEN
3594 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3595 END IF;
3596 --
3597 IF l_debug_on THEN
3598 WSH_DEBUG_SV.push(l_module_name);
3599 --
3600 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
3601 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
3602 END IF;
3603 --
3604 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3605
3606 -- J: W/V Changes
3607 OPEN C_DEL_ID_FOR_CONT_OR_DETAIL(p_detail_id);
3608 FETCH C_DEL_ID_FOR_CONT_OR_DETAIL INTO l_del_rec;
3609 CLOSE C_DEL_ID_FOR_CONT_OR_DETAIL;
3610
3611
3612 IF l_del_rec.parent_delivery_detail_id is NULL THEN
3613 IF l_debug_on THEN
3614 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already unassigned. Returning');
3615 WSH_DEBUG_SV.pop(l_module_name);
3616 END IF;
3617 return;
3618
3619 -- LPN CONV. rv
3620 ELSE
3621 --
3622 open l_parent_cnt_csr(l_del_rec.parent_delivery_detail_id);
3623 fetch l_parent_cnt_csr into l_parent_cnt_orgn_id, l_parent_cnt_line_dir;
3624 close l_parent_cnt_csr;
3625 --
3626 IF l_debug_on THEN
3627 WSH_DEBUG_SV.log(l_module_name,' parent cnt orgn id is', l_parent_cnt_orgn_id);
3628 WSH_DEBUG_SV.log(l_module_name,' parent cnt line dir is', l_parent_cnt_line_dir);
3629 END IF;
3630 --
3631 l_wms_org := wsh_util_validate.check_wms_org(l_parent_cnt_orgn_id);
3632 --
3633 -- LPN CONV. rv
3634 --
3635 END IF;
3636
3637 --
3638 IF l_debug_on THEN
3639 WSH_DEBUG_SV.log(l_module_name,'l_del_rec.released_status',l_del_rec.released_status);
3640 END IF;
3641 --
3642
3643 IF l_del_rec.released_status = 'C' THEN
3644 Raise invalid_detail;
3645 END IF;
3646
3647 -- K LPN CONV. rv
3648
3649 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3650 THEN
3651 --{
3652
3653 -- J: W/V Changes
3654 -- Decrement the DD W/V from container
3655 IF l_debug_on THEN
3656 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3657 END IF;
3658
3659 WSH_WV_UTILS.DD_WV_Post_Process(
3660 p_delivery_detail_id => p_detail_id,
3661 p_diff_gross_wt => -1 * l_del_rec.gross_weight,
3662 p_diff_net_wt => -1 * l_del_rec.net_weight,
3663 p_diff_volume => -1 * l_del_rec.volume,
3664 p_diff_fill_volume => -1 * l_del_rec.volume,
3665 p_check_for_empty => 'Y',
3666 x_return_status => l_return_status);
3667
3668 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3669 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3670 l_num_warnings := l_num_warnings + 1;
3671 ELSE
3672 --
3673 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3674 WSH_UTIL_CORE.Add_Message(x_return_status);
3675 IF l_debug_on THEN
3676 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3677 WSH_DEBUG_SV.pop(l_module_name);
3678 END IF;
3679 return;
3680 END IF;
3681 END IF;
3682 --}
3683 END IF;
3684
3685 -- K LPN CONV. rv
3686 --
3687 -- K LPN CONV. rv
3688 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
3689 AND nvl(l_parent_cnt_line_dir,'O') IN ('O', 'IO')
3690 AND
3691 (
3692 (WSH_WMS_LPN_GRP.GK_WMS_UNPACK and l_wms_org = 'Y')
3693 OR
3694 (WSH_WMS_LPN_GRP.GK_INV_UNPACK and l_wms_org = 'N')
3695 )
3696 THEN
3697 --{
3698 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
3699 l_sync_tmp_rec.parent_delivery_detail_id := l_del_rec.parent_delivery_detail_id;
3700 l_sync_tmp_rec.delivery_id := l_del_rec.delivery_id;
3701 l_sync_tmp_rec.operation_type := 'PRIOR';
3702 --
3703 IF l_debug_on THEN
3704 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
3705 END IF;
3706 --
3707 WSH_WMS_SYNC_TMP_PKG.MERGE
3708 (
3709 p_sync_tmp_rec => l_sync_tmp_rec,
3710 x_return_status => l_return_status
3711 );
3712
3713 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
3714 THEN
3715 IF l_debug_on THEN
3716 WSH_DEBUG_SV.log(l_module_name,'WSH_WMS_SYNC_TMP_PKG.MERGE returned ',l_return_status);
3717 END IF;
3718 RAISE e_abort;
3719 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3720 l_num_warnings := l_num_warnings + 1;
3721 END IF;
3722 --}
3723 END IF;
3724 -- K LPN CONV. rv
3725 --
3726 UPDATE wsh_delivery_assignments_v
3727 SET parent_delivery_detail_id = NULL,
3728 last_update_date = SYSDATE,
3729 last_updated_by = FND_GLOBAL.USER_ID,
3730 last_update_login = FND_GLOBAL.LOGIN_ID
3731 WHERE delivery_detail_id = p_detail_id;
3732 l_mdc_detail_tab(1) := p_detail_id;
3733 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
3734 p_detail_id_tab => l_mdc_detail_tab,
3735 x_return_status => x_return_status);
3736
3737 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3738 IF l_debug_on THEN
3739 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
3740 WSH_DEBUG_SV.pop(l_module_name);
3741 END IF;
3742 return;
3743 END IF;
3744 -- J: W/V Changes
3745 -- Need to recalculate the fill% if 'Percent Fill Basis' is Quantity
3746 -- Reason: DD_WV_Post_Process would have calculated the fill% but the delivery detail is not unassigned at
3747 -- that point of time. So the fill% will be wrong if 'Percent Fill Basis' is Quantity since the fill%
3748 -- calculation considers the delivery detail which is not yet unassigned
3749 IF l_debug_on THEN
3750 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.Get',WSH_DEBUG_SV.C_PROC_LEVEL);
3751 END IF;
3752
3753 WSH_SHIPPING_PARAMS_PVT.Get(
3754 p_organization_id => l_del_rec.organization_id,
3755 x_param_info => l_param_info,
3756 x_return_status => l_return_status);
3757
3758 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
3759 IF l_debug_on THEN
3760 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SHIPPING_PARAMS_PVT.Get returned '||l_return_status);
3761 END IF;
3762 raise e_abort;
3763 END IF;
3764
3765 IF (l_param_info.percent_fill_basis_flag = 'Q') THEN
3766
3767 -- K LPN CONV. rv
3768 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
3769 THEN
3770 --{
3771 IF l_debug_on THEN
3772 WSH_DEBUG_SV.logmsg(l_module_name,'Need to recalculate the fill% for container');
3773 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_CONTAINER_PKG.CALC_CONT_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
3774 END IF;
3775
3776 WSH_WV_UTILS.ADJUST_PARENT_WV(
3777 p_entity_type => 'CONTAINER',
3778 p_entity_id => l_del_rec.parent_delivery_detail_id,
3779 p_gross_weight => 0,
3780 p_net_weight => 0,
3781 p_volume => 0,
3782 p_filled_volume => 0,
3783 p_wt_uom_code => l_del_rec.weight_uom_code,
3784 p_vol_uom_code => l_del_rec.volume_uom_code,
3785 p_inv_item_id => l_del_rec.inventory_item_id,
3786 x_return_status => l_return_status);
3787
3788 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
3789 THEN
3790 IF l_debug_on THEN
3791 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.ADJUST_PARENT_WV returned '||l_return_status);
3792 END IF;
3793 RAISE e_abort;
3794 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3795 l_num_warnings := l_num_warnings + 1;
3796 END IF;
3797
3798 --}
3799 END IF;
3800 -- K LPN CONV. rv
3801 END IF;
3802
3803 --
3804 IF l_debug_on THEN
3805 WSH_DEBUG_SV.log(l_module_name,'Delivery Id for l_del_rec',l_del_rec.delivery_id);
3806 END IF;
3807 --
3808
3809 -- J: W/V Changes
3810 -- Assign the DD W/V back to delivery
3811 IF l_del_rec.delivery_id IS NOT NULL THEN
3812 IF l_debug_on THEN
3813 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
3814 END IF;
3815
3816 WSH_WV_UTILS.DD_WV_Post_Process(
3817 p_delivery_detail_id => p_detail_id,
3818 p_diff_gross_wt => l_del_rec.gross_weight,
3819 p_diff_net_wt => l_del_rec.net_weight,
3820 p_diff_volume => l_del_rec.volume,
3821 p_diff_fill_volume => l_del_rec.volume,
3822 x_return_status => l_return_status);
3823 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3824 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
3825 l_num_warnings := l_num_warnings + 1;
3826 ELSE
3827 --
3828 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3829 WSH_UTIL_CORE.Add_Message(x_return_status);
3830 IF l_debug_on THEN
3831 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
3832 WSH_DEBUG_SV.pop(l_module_name);
3833 END IF;
3834 return;
3835 END IF;
3836 END IF;
3837
3838 END IF;
3839
3840 /* H integration: Pricing integration csun */
3841 IF l_del_rec.delivery_id IS not NULL THEN
3842 l_del_tab.delete;
3843 l_del_tab(1) := l_del_rec.delivery_id;
3844 --
3845 IF l_debug_on THEN
3846 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
3847 END IF;
3848 --
3849 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
3850 p_entity_type => 'DELIVERY',
3851 p_entity_ids => l_del_tab,
3852 x_return_status => l_return_status);
3853 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
3854 raise mark_reprice_error;
3855 END IF;
3856 END IF;
3857
3858 IF l_num_warnings > 0 THEN
3859 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3860 END IF;
3861
3862 --
3863 IF l_debug_on THEN
3864 WSH_DEBUG_SV.pop(l_module_name);
3865 END IF;
3866 --
3867 exception
3868 -- J: W/V Changes
3869 WHEN e_abort THEN
3870 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3871 IF l_debug_on THEN
3872 WSH_DEBUG_SV.pop(l_module_name);
3873 END IF;
3874
3875 WHEN mark_reprice_error THEN
3876 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
3877 x_return_status := l_return_status;
3878 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
3879
3880 --
3881 IF l_debug_on THEN
3882 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3883 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
3884 END IF;
3885 --
3886 WHEN invalid_detail then
3887 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3888 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
3889 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
3890 wsh_util_core.add_message(x_return_status,l_module_name);
3891 --
3892 IF l_debug_on THEN
3893 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3894 WSH_DEBUG_SV.pop(l_module_name);
3895 END IF;
3896 --
3897 RETURN;
3898 WHEN others THEN
3899 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_CONT',l_module_name);
3900 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3901
3902 --
3903 IF l_debug_on THEN
3904 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3905 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3906 END IF;
3907 --
3908 END Unassign_Detail_FROM_Cont;
3909
3910
3911 -- THIS PROCEDURE IS OBSOLETE
3912 --
3913 --Procedure: Assign_Cont_To_Delivery
3914 --Parameters: p_detail_id,
3915 -- p_delivery_id,
3916 -- x_return_status
3917 --Description: This procedure is called when assigning a container to
3918 -- a delivery.
3919 -- It assigns all delivery lines and child containers to
3920 -- the delivery as well.
3921 --changing to just call assign_detail_to_delivery
3922
3923 PROCEDURE Assign_Cont_To_Delivery(
3924 P_DETAIL_ID IN NUMBER,
3925 P_DELIVERY_ID IN NUMBER,
3926 X_RETURN_STATUS OUT NOCOPY VARCHAR2) IS
3927 assign_cont_del exception;
3928 --
3929 l_debug_on BOOLEAN;
3930 --
3931 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_CONT_TO_DELIVERY';
3932 --
3933 BEGIN
3934 --
3935 --
3936 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3937 --
3938 --
3939 END Assign_Cont_To_Delivery;
3940
3941
3942 -------------------------------------------------------------------
3943 --Assign_Top_Detail_To_Delivery should only be called for the topmost
3944 --container in a hierarchy/detail (if it is a loose detail) assigns
3945 --all the details below (including containers) to delivery
3946 -- x_dlvy_has_lines : 'Y' :delivery has non-container lines.
3947 -- 'N' : delivery does not have non-container lines
3948 -- x_dlvy_freight_Terms_code : Delivery's freight term code
3949 -------------------------------------------------------------------
3950
3951
3952 PROCEDURE Assign_Top_Detail_To_Delivery(
3953 P_DETAIL_ID IN NUMBER,
3954 P_DELIVERY_ID IN NUMBER,
3955 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
3956 x_dlvy_has_lines IN OUT NOCOPY VARCHAR2, --
3957 x_dlvy_freight_terms_code IN OUT NOCOPY VARCHAR2, -- J-IB-NPARIKH
3958 p_caller IN VARCHAR2 --bug 5100229
3959 ) IS
3960
3961 TYPE del_det_id_tab_type IS TABLE OF wsh_delivery_details.delivery_detail_id%TYPE INDEX BY BINARY_INTEGER;
3962
3963 l_rowid varchar2(150);
3964 l_delivery_assignment_id NUMBER;
3965 -- cont_id NUMBER;
3966 del_id NUMBER;
3967 l_summary varchar2(3000);
3968 l_details varchar2(3000);
3969 l_get_msg_count number;
3970
3971 l_cr_assn_status varchar2(30);
3972 l_group_status varchar2(30);
3973 l_arrival_status varchar2(30);
3974 l_ship_method_match BOOLEAN;
3975
3976 l_attr_flag VARCHAR2(1) := 'N';
3977 l_cont_name VARCHAR2(30);
3978
3979 invalid_del exception;
3980 invalid_detail exception;
3981 del_not_updatable exception;
3982 grouping_attributes_not_match exception;
3983 arrival_SET_failed exception;
3984 ship_method_not_match exception;
3985 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
3986 l_mdc_detail_tab wsh_util_core.id_tab_type;
3987 DETAIL_DEL_FROM_to_not_SAME exception;
3988 det_confirmed exception;
3989 update_mol_carton_group_error exception;
3990
3991
3992 CURSOR c_delivery IS
3993 SELECT status_code,planned_flag, initial_pickup_location_id,ultimate_dropoff_location_id,
3994 customer_id, intmed_ship_to_location_id, fob_code, freight_terms_code, ship_method_code,
3995 carrier_id, mode_of_transport, service_level,
3996 -- deliveryMerge
3997 batch_id,
3998 NVL(shipment_direction,'O') shipment_direction, -- J-IB-NPARIKH
3999 shipping_control, -- J-IB-NPARIKH
4000 vendor_id, -- J-IB-NPARIKH
4001 party_id, -- J-IB-NPARIKH
4002 NVL(ignore_for_planning,'N') ignore_for_planning, --J TP Release ttrichy
4003 organization_id -- K LPN CONV. rv
4004 FROM wsh_new_deliveries
4005 WHERE delivery_id = p_delivery_id;
4006 l_del c_delivery%ROWTYPE;
4007
4008 CURSOR c_detail(c_detail_id NUMBER) IS
4009 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,
4010 wdd.freight_terms_code, -- J-IB-NPARIKH
4011 NVL(line_direction,'O') line_direction, -- J-IB-NPARIKH
4012 shipping_control, -- J-IB-NPARIKH
4013 vendor_id, -- J-IB-NPARIKH
4014 party_id, -- J-IB-NPARIKH
4015 NVL(ignore_for_planning,'N') ignore_for_planning,--J TP Release ttrichy
4016 mode_of_transport, carrier_id, service_level,
4017 wda.parent_delivery_detail_id, -- K LPN CONV. rv
4018 wdd.gross_weight -- OTM R12 : assign delivery detail
4019 FROM wsh_delivery_details wdd, wsh_delivery_assignments_v wda
4020 WHERE wdd.delivery_detail_id = wda.delivery_detail_id and wdd.delivery_detail_id = c_detail_id;
4021
4022
4023 l_detail c_detail%ROWTYPE;
4024
4025 l_del_assign NUMBER;
4026
4027 CURSOR c_all_details_below IS
4028 SELECT delivery_detail_id
4029 FROM wsh_delivery_assignments_v
4030 START WITH delivery_detail_id = p_detail_id
4031 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
4032
4033 CURSOR c_getdet_ignore IS
4034 select NVL(ignore_for_planning, 'N') ignore_for_planning
4035 from wsh_delivery_details
4036 where delivery_detail_id=p_detail_id;
4037
4038 -- J: W/V Changes
4039 l_detail_status VARCHAR2(1);
4040 l_gross_wt NUMBER;
4041 l_net_wt NUMBER;
4042 l_vol NUMBER;
4043 l_container_flag VARCHAR2(1);
4044 l_delivery_id NUMBER;
4045
4046 l_service_level VARCHAR2(30);
4047 l_mode_of_transport VARCHAR2(30);
4048 l_ship_method VARCHAR2(30);
4049 l_carrier_id NUMBER;
4050
4051 l_dd_id del_det_id_tab_type;
4052 i BINARY_INTEGER := 0;
4053 j BINARY_INTEGER :=0;
4054
4055 l_dummy_del_det_id NUMBER;
4056
4057 /* H projects: pricing integration csun */
4058 l_scc_unassign_from_del NUMBER := 0;
4059 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
4060 l_status WSH_LOOKUPS.meaning%TYPE;
4061 l_return_status VARCHAR2(1);
4062
4063 CURSOR get_lookup (l_code VARCHAR2) IS
4064 SELECT meaning
4065 FROM wsh_lookups
4066 WHERE lookup_type = 'DELIVERY_STATUS'
4067 AND lookup_code = l_code;
4068
4069 mark_reprice_error EXCEPTION;
4070 l_dlvy_freight_terms_code VARCHAR2(30);
4071 l_update_dlvy BOOLEAN;
4072
4073
4074 l_msg_count NUMBER;
4075 l_msg_data VARCHAR2(4000);
4076
4077 -- bug 2691385
4078 l_detail_is_empty_cont VARCHAR2(1) := 'N';
4079
4080 l_attr_tab wsh_delivery_autocreate.grp_attr_tab_type;
4081 l_group_tab wsh_delivery_autocreate.grp_attr_tab_type;
4082 l_action_rec wsh_delivery_autocreate.action_rec_type;
4083 l_target_rec wsh_delivery_autocreate.grp_attr_rec_type;
4084 l_matched_entities wsh_util_core.id_tab_type;
4085 l_out_rec wsh_delivery_autocreate.out_rec_type;
4086
4087 -- K LPN CONV. rv
4088 l_detail_wms_org VARCHAR2(10) := 'N';
4089 l_line_dir VARCHAR2(10);
4090 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
4091 l_num_warnings NUMBER := 0;
4092 -- K LPN CONV. rv
4093
4094 -- OTM R12 : update delivery
4095 l_delivery_info_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
4096 l_delivery_info WSH_NEW_DELIVERIES_PVT.Delivery_Rec_Type;
4097 l_new_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
4098 l_tms_update VARCHAR2(1);
4099 l_trip_not_found VARCHAR2(1);
4100 l_trip_info_rec WSH_DELIVERY_VALIDATIONS.trip_info_rec_type;
4101 l_tms_version_number WSH_NEW_DELIVERIES.TMS_VERSION_NUMBER%TYPE;
4102 l_gc3_is_installed VARCHAR2(1);
4103
4104 -- End of OTM R12 : update delivery
4105
4106 -- OTM R12 : assign delivery detail
4107 l_delivery_was_empty BOOLEAN;
4108 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
4109 l_gross_weight1 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
4110 l_gross_weight2 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
4111 l_delivery_detail_ids WSH_GLBL_VAR_STRCT_GRP.NUM_TBL_TYPE;
4112 l_assign_update BOOLEAN;
4113 -- End of OTM R12 : assign delivery detail
4114
4115 --
4116 l_debug_on BOOLEAN;
4117 --
4118 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_TOP_DETAIL_TO_DELIVERY';
4119 --
4120 BEGIN
4121 --
4122 --
4123 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4124 --
4125 IF l_debug_on IS NULL
4126 THEN
4127 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4128 END IF;
4129 --
4130 IF l_debug_on THEN
4131 WSH_DEBUG_SV.push(l_module_name);
4132 --
4133 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
4134 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
4135 WSH_DEBUG_SV.log(l_module_name,'x_dlvy_has_lines',x_dlvy_has_lines);
4136 WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
4137 END IF;
4138 --
4139 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4140
4141 -- OTM R12
4142 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
4143
4144 IF (l_gc3_is_installed IS NULL) THEN
4145 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
4146 END IF;
4147 l_assign_update := FALSE; --default assignment tms update to false
4148 -- End of OTM R12
4149
4150 -- J: W/V Changes
4151 open g_get_detail_info(p_detail_id);
4152 fetch g_get_detail_info
4153 into l_detail_status,l_gross_wt, l_net_wt, l_vol, l_container_flag, l_delivery_id;
4154 close g_get_detail_info;
4155
4156 IF l_delivery_id is NOT NULL THEN
4157 IF l_delivery_id <> p_delivery_id THEN
4158 FND_MESSAGE.SET_NAME('WSH','WSH_DET_ASSIGNED_DEL');
4159 FND_MESSAGE.SET_TOKEN('DET_NAME',p_detail_id);
4160 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_id);
4161 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4162 wsh_util_core.add_message(x_return_status,l_module_name);
4163 --
4164 IF l_debug_on THEN
4165 WSH_DEBUG_SV.pop(l_module_name);
4166 END IF;
4167 --
4168 RETURN;
4169 ELSE
4170 IF l_debug_on THEN
4171 WSH_DEBUG_SV.logmsg(l_module_name,'DD '||p_detail_id||' is already assigned to '||l_delivery_id||'. Returning');
4172 WSH_DEBUG_SV.pop(l_module_name);
4173 END IF;
4174 return;
4175 END IF;
4176 END IF;
4177
4178
4179 --
4180 -- J-IB-NPARIKH-{
4181 IF x_dlvy_has_lines IS NULL
4182 THEN
4183 --{
4184 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
4185 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'x_dlvy_has_lines');
4186 RAISE FND_API.G_EXC_ERROR;
4187 --}
4188 END IF;
4189 -- J-IB-NPARIKH-}
4190 --
4191 --
4192 OPEN c_delivery;
4193 FETCH c_delivery into l_del;
4194 IF (c_delivery%NOTFOUND) THEN
4195 CLOSE c_delivery;
4196 RAISE INVALID_DEL;
4197 END IF;
4198
4199 CLOSE c_delivery;
4200
4201 --
4202 IF l_debug_on THEN
4203 WSH_DEBUG_SV.log(l_module_name,'status_code',l_del.status_code);
4204 WSH_DEBUG_SV.log(l_module_name,'Delivery Freight Terms',l_del.freight_Terms_code);
4205 END IF;
4206 --
4207 /* security rule, delivery status should be open or packed and not planned */
4208 /* the value for the flag can be Y or N updated with Bug 1559785*/
4209 IF ((l_del.status_code = 'CO') OR
4210 (l_del.status_code = 'IT') OR
4211 (l_del.status_code = 'CL') OR
4212 (l_del.status_code = 'SR') OR -- sperera 940/945
4213 (l_del.status_code = 'SC') OR
4214 (l_del.planned_flag IN ('Y','F')))
4215 AND l_del.shipment_direction IN ('O','IO') -- J-IB-NPARIKH
4216 THEN
4217 IF l_del.planned_flag IN ('Y','F') THEN
4218 fnd_message.SET_name('WSH', 'WSH_PLAN_DEL_NOT_UPDATABLE');
4219 ELSE
4220 OPEN get_lookup(l_del.status_code);
4221 FETCH get_lookup INTO l_status;
4222 CLOSE get_lookup;
4223 fnd_message.SET_name('WSH', 'WSH_DET_DEL_NOT_UPDATABLE');
4224 FND_MESSAGE.SET_TOKEN('STATUS',l_status);
4225 END IF;
4226 RAISE DEL_NOT_UPDATABLE;
4227 END IF;
4228
4229
4230 -- OTM R12 : assign delivery detail
4231 IF (l_gc3_is_installed = 'Y' AND
4232 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
4233
4234 Pre_Otm_Assign_Del_Detail
4235 (p_delivery_id => p_delivery_id,
4236 p_detail_id => p_detail_id,
4237 p_container1_id => NULL,
4238 p_container2_id => NULL,
4239 p_assignment_type => 'DD2D',
4240 x_delivery_was_empty => l_delivery_was_empty,
4241 x_assign_update => l_assign_update,
4242 x_gross_weight1 => l_gross_weight1,
4243 x_gross_weight2 => l_gross_weight2,
4244 x_return_status => l_return_status);
4245
4246 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
4247 IF l_debug_on THEN
4248 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
4249 END IF;
4250 raise FND_API.G_EXC_ERROR;
4251 END IF;
4252 END IF;
4253 -- End of OTM R12 : assign delivery detail
4254
4255 --J TP Release ttrichy
4256 FOR cur in c_getdet_ignore LOOP
4257 IF l_del.ignore_for_planning <> cur.ignore_for_planning THEN
4258 fnd_message.set_name('WSH', 'WSH_DET_DEL_DIFF_IGNOREPLAN');
4259 IF l_debug_on THEN
4260 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4261 END IF;
4262 fnd_message.set_token('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id), p_detail_id));
4263 IF l_debug_on THEN
4264 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4265 END IF;
4266 fnd_message.set_token('ENTITY2',wsh_new_deliveries_pvt.get_name(p_delivery_id));
4267 END IF;
4268 END LOOP;
4269
4270 OPEN c_all_details_below;
4271 --for locking all details
4272 LOOP
4273 FETCH c_all_details_below into l_dd_id(i);
4274 EXIT WHEN c_all_details_below%notfound;
4275 SELECT l_dd_id(i) into l_dummy_del_det_id
4276 FROM wsh_delivery_details
4277 WHERE delivery_detail_id=l_dd_id(i)
4278 FOR UPDATE NOWAIT;
4279 i:=i+1;
4280 END LOOP;
4281 CLOSE c_all_details_below;
4282
4283 FOR j IN 0..(l_dd_id.COUNT-1) LOOP
4284 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4285 /* For each detail */
4286 IF (l_dd_id(j) < 0) THEN
4287 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4288 fnd_message.SET_name('WSH', 'WSH_DET_DETAIL_NOT_ASSIGNED');
4289 wsh_util_core.add_message(x_return_status,l_module_name);
4290 --
4291 IF l_debug_on THEN
4292 WSH_DEBUG_SV.pop(l_module_name);
4293 END IF;
4294 --
4295 RETURN;
4296 END IF;
4297
4298
4299
4300
4301 OPEN c_detail(l_dd_id(j));
4302 FETCH c_detail into l_detail;
4303 CLOSE c_detail;
4304
4305 --
4306 IF l_debug_on THEN
4307 WSH_DEBUG_SV.log(l_module_name,'Released Status',l_detail.released_status);
4308 WSH_DEBUG_SV.log(l_module_name,'Delivery Id',l_detail.delivery_id);
4309 WSH_DEBUG_SV.log(l_module_name,'p_Delivery Id',p_delivery_id);
4310 WSH_DEBUG_SV.log(l_module_name,'Line Freight Terms',l_detail.freight_Terms_code);
4311 END IF;
4312 --
4313 --
4314 -- Bypass this check for inbound lines as a they can be assigned to delivery
4315 -- during ASN/Receipt integration, (line status is C)
4316 --
4317 IF l_detail.released_status = 'C'
4318 AND l_detail.line_direction IN ('O','IO') -- J-IB-NPARIKH
4319 THEN
4320 RAISE DET_CONFIRMED;
4321 END IF;
4322
4323
4324 IF ((l_detail.delivery_id IS NOT NULL) AND (l_detail.delivery_id <> p_delivery_id)) THEN
4325 FND_MESSAGE.SET_NAME('WSH','WSH_DET_ASSIGNED_DEL');
4326 FND_MESSAGE.SET_TOKEN('DET_NAME',l_detail.delivery_detail_id);
4327 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_detail.delivery_id);
4328 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4329 wsh_util_core.add_message(x_return_status,l_module_name);
4330 --
4331 IF l_debug_on THEN
4332 WSH_DEBUG_SV.pop(l_module_name);
4333 END IF;
4334 --
4335 RETURN;
4336 END IF;
4337
4338 IF l_detail.container_flag = 'Y' THEN --{ Bug 5100229
4339 -- bug 2691385 - check to see if the container is empty
4340 WSH_CONTAINER_UTILITIES.Is_Empty (p_container_instance_id => l_dd_id(j),
4341 x_empty_flag => l_detail_is_empty_cont,
4342 x_return_status => x_return_status);
4343 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4344 return;
4345 END IF;
4346 ELSE --}{
4347 l_detail_is_empty_cont := 'E';
4348 END IF; --}
4349
4350 -- If the container is empty, update the delivery grouping attributes for the container
4351 -- to be the delivery grouping attributes of the delivery.
4352 IF (l_detail_is_empty_cont = 'Y')
4353 THEN
4354 --{
4355 IF l_detail.line_direction IN ('O','IO')
4356 AND l_del.shipment_direction IN ('O','IO')
4357 THEN
4358 l_detail.line_direction := l_del.shipment_direction;
4359 END IF;
4360 --
4361 /*
4362 IF l_detail.line_direction NOT IN ('O','IO')
4363 AND l_del.shipment_direction NOT IN ('O','IO')
4364 THEN
4365 l_detail.line_direction := l_del.shipment_direction;
4366 END IF;
4367 */
4368 --
4369 -- K LPN CONV. rv
4370 --
4371 l_detail_wms_org := wsh_util_validate.check_wms_org(l_detail.organization_id);
4372 --
4373 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
4374 AND l_detail.line_direction IN ('O','IO')
4375 AND
4376 (
4377 (WSH_WMS_LPN_GRP.GK_WMS_UPD_GRP and l_detail_wms_org = 'Y')
4378 OR
4379 (WSH_WMS_LPN_GRP.GK_INV_UPD_GRP and l_detail_wms_org = 'N')
4380 )
4381 THEN
4382 --{
4383 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
4384 l_sync_tmp_rec.operation_type := 'UPDATE';
4385 --
4386 IF l_debug_on THEN
4387 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
4388 END IF;
4389 --
4390 WSH_WMS_SYNC_TMP_PKG.MERGE
4391 (
4392 p_sync_tmp_rec => l_sync_tmp_rec,
4393 x_return_status => l_return_status
4394 );
4395
4396 IF l_debug_on THEN
4397 WSH_DEBUG_SV.log(l_module_name,'Return Status is ',l_return_status);
4398 END IF;
4399 --
4400 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4401 --
4402 x_return_status := l_return_status;
4403 --
4404 IF l_debug_on THEN
4405 WSH_DEBUG_SV.pop(l_module_name);
4406 END IF;
4407 --
4408 return;
4409 --
4410 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
4411 --
4412 l_num_warnings := l_num_warnings + 1;
4413 --
4414 END IF;
4415 --
4416 --}
4417 END IF;
4418 -- K LPN CONV. rv
4419
4420 UPDATE WSH_DELIVERY_DETAILS
4421 SET ship_from_location_id = l_del.initial_pickup_location_id,
4422 ship_to_location_id = l_del.ultimate_dropoff_location_id,
4423 customer_id = l_del.customer_id,
4424 intmed_ship_to_location_id = l_del.intmed_ship_to_location_id,
4425 fob_code = l_del.fob_code,
4426 freight_terms_code = l_del.freight_terms_code,
4427 ship_method_code = l_del.ship_method_code,
4428 service_level = l_del.service_level,
4429 carrier_id = l_del.carrier_id,
4430 mode_of_transport = l_del.mode_of_transport,
4431 line_direction = l_detail.line_direction , -- J-IB-NPARIKH
4432 shipping_control = l_del.shipping_control -- J-IB-NPARIKH
4433 WHERE delivery_detail_id = l_dd_id(j);
4434
4435 IF (SQL%NOTFOUND) THEN
4436 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4437 RAISE NO_DATA_FOUND;
4438 END IF;
4439
4440 --Bug 3383843
4441 -- Need to open and fetch again because of previous updates
4442 OPEN c_detail(l_dd_id(j));
4443 FETCH c_detail into l_detail;
4444 CLOSE c_detail;
4445 -- Bug 3383843
4446
4447 --}
4448 END IF;
4449 -- end 2691385
4450
4451
4452 IF l_detail.container_flag='Y' THEN
4453 --
4454 IF l_debug_on THEN
4455 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.CHECK_CONT_ATTRIBUTES',WSH_DEBUG_SV.C_PROC_LEVEL);
4456 END IF;
4457 --
4458 WSH_CONTAINER_ACTIONS.Check_Cont_Attributes (
4459 l_detail.delivery_detail_id,
4460 l_attr_flag,
4461 x_return_status);
4462
4463 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4464 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4465 fnd_message.SET_name('WSH', 'WSH_CONT_ATTR_ERROR');
4466 FND_MESSAGE.SET_TOKEN('DETAIL_ID',l_detail.delivery_detail_id);
4467 wsh_util_core.add_message(x_return_status,l_module_name);
4468 --
4469 IF l_debug_on THEN
4470 WSH_DEBUG_SV.pop(l_module_name);
4471 END IF;
4472 --
4473 return;
4474 END IF;
4475 END IF;
4476
4477 /* security rule, group by attributes must be the same as the delivery's */
4478 /* Error */
4479 --
4480 IF l_debug_on THEN
4481 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.CHECK_ASSIGN_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
4482 END IF;
4483 --
4484
4485 l_attr_tab(1).entity_id := p_delivery_id;
4486 l_attr_tab(1).entity_type := 'DELIVERY';
4487 l_attr_tab(2).entity_id := l_detail.delivery_detail_id;
4488 l_attr_tab(2).entity_type := 'DELIVERY_DETAIL';
4489
4490 l_action_rec.action := 'MATCH_GROUPS';
4491 l_action_rec.check_single_grp := 'Y';
4492
4493 -- IF this procedure is called from autocreate-delivery then
4494 -- the matching is already done.
4495
4496 IF NVL(p_caller , 'WSH') <> 'AUTOCREATE' THEN --{ bug 5100229
4497 WSH_DELIVERY_AUTOCREATE.Find_Matching_Groups(p_attr_tab => l_attr_tab,
4498 p_action_rec => l_action_rec,
4499 p_target_rec => l_target_rec,
4500 p_group_tab => l_group_tab,
4501 x_matched_entities => l_matched_entities,
4502 x_out_rec => l_out_rec,
4503 x_return_status => l_group_status);
4504
4505 IF (l_group_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4506 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4507 --
4508 IF l_debug_on THEN
4509 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
4510 WSH_DEBUG_SV.pop(l_module_name);
4511 END IF;
4512 --
4513 RETURN;
4514 END IF;
4515 END IF; --}
4516
4517 -- Pack J: Generic Carrier
4518 -- Update the ship method components in the delivery
4519 -- to match the assigned delivery_detail.
4520 -- Also update the line direction.
4521
4522 IF NVL(p_caller, 'WSH') <> 'AUTOCREATE' THEN --{ bug 5100229
4523
4524 -- if this is called from autocreate delivery then the ship
4525 -- method componants are already set there for the delivery.
4526
4527 l_service_level := l_group_tab(l_group_tab.first).service_level;
4528 l_mode_of_transport := l_group_tab(l_group_tab.first).mode_of_transport;
4529 l_carrier_id := l_group_tab(l_group_tab.first).carrier_id;
4530 l_ship_method := l_group_tab(l_group_tab.first).ship_method_code;
4531 END IF; --}
4532
4533 -- OTM R12 : update delivery
4534 l_tms_update := 'N';
4535 l_new_interface_flag_tab(1) := NULL;
4536
4537 IF (l_gc3_is_installed = 'Y' AND
4538 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
4539 l_trip_not_found := 'N';
4540
4541 --get trip information for delivery, no update when trip not OPEN
4542 WSH_DELIVERY_VALIDATIONS.get_trip_information
4543 (p_delivery_id => p_delivery_id,
4544 x_trip_info_rec => l_trip_info_rec,
4545 x_return_status => l_return_status);
4546
4547 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4548 x_return_status := l_return_status;
4549 IF l_debug_on THEN
4550 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_trip_information');
4551 WSH_DEBUG_SV.pop(l_module_name);
4552 END IF;
4553 RETURN;
4554 END IF;
4555
4556 IF (l_trip_info_rec.trip_id IS NULL) THEN
4557 l_trip_not_found := 'Y';
4558 END IF;
4559
4560 -- only do changes when there's no trip or trip status is OPEN
4561 IF (l_trip_info_rec.status_code = 'OP' OR
4562 l_trip_not_found = 'Y') THEN
4563
4564 WSH_DELIVERY_VALIDATIONS.get_delivery_information(
4565 p_delivery_id => p_delivery_id,
4566 x_delivery_rec => l_delivery_info,
4567 x_return_status => l_return_status);
4568
4569 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4570 x_return_status := l_return_status;
4571 IF l_debug_on THEN
4572 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_DELIVERY_VALIDATIONS.get_delivery_information');
4573 WSH_DEBUG_SV.pop(l_module_name);
4574 END IF;
4575 RETURN;
4576 END IF;
4577
4578 -- if delivery is include for planning and service level, mode of
4579 -- transport, carrier id, or ship mdethod is changed with the nvl
4580 -- updates, then update is needed
4581
4582 IF (nvl(l_delivery_info.service_level,
4583 nvl(l_service_level, '@@')) <>
4584 nvl(l_delivery_info.service_level, '@@') OR
4585 nvl(l_delivery_info.mode_of_transport,
4586 nvl(l_mode_of_transport, '@@')) <>
4587 nvl(l_delivery_info.mode_of_transport, '@@') OR
4588 nvl(l_delivery_info.carrier_id, nvl(l_carrier_id, -1)) <>
4589 nvl(l_delivery_info.carrier_id, -1) OR
4590 nvl(l_delivery_info.ship_method_code,
4591 nvl(l_ship_method, '@@')) <>
4592 nvl(l_delivery_info.ship_method_code, '@@')) THEN
4593
4594 IF (l_delivery_info.tms_interface_flag NOT IN
4595 (WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT,
4596 WSH_NEW_DELIVERIES_PVT.C_TMS_CREATE_REQUIRED,
4597 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
4598 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
4599 WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED)) THEN
4600 l_tms_update := 'Y';
4601 l_delivery_info_tab(1) := l_delivery_info;
4602 l_new_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_UPDATE_REQUIRED;
4603 l_tms_version_number := nvl(l_delivery_info.tms_version_number, 1) + 1;
4604 END IF;
4605 END IF; -- checking the value differences
4606 END IF; -- IF ((l_trip_not_found = 'N' AND
4607 END IF; -- IF (l_gc3_is_installed = 'Y'
4608
4609 IF l_debug_on THEN
4610 WSH_DEBUG_SV.log(l_module_name, 'l_gc3_is_installed', l_gc3_is_installed);
4611 WSH_DEBUG_SV.log(l_module_name, 'l_tms_update', l_tms_update);
4612 IF (l_tms_update = 'Y') THEN
4613 WSH_DEBUG_SV.log(l_module_name, 'l_new_interface_flag_tab', l_new_interface_flag_tab(1));
4614 WSH_DEBUG_SV.log(l_module_name, 'l_tms_version_number', l_tms_version_number);
4615 END IF;
4616 END IF;
4617
4618 -- End of OTM R12 : update delivery
4619
4620 UPDATE WSH_NEW_DELIVERIES
4621 SET MODE_OF_TRANSPORT = decode(mode_of_transport, NULL, l_mode_of_transport, mode_of_transport),
4622 SERVICE_LEVEL = decode(service_level, NULL, l_service_level, service_level),
4623 CARRIER_ID = decode(carrier_id, NULL, l_carrier_id, carrier_id),
4624 SHIP_METHOD_CODE = decode(ship_method_code, NULL, l_ship_method, ship_method_code),
4625 SHIPMENT_DIRECTION = l_detail.line_direction,
4626 -- OTM R12
4627 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)),
4628 TMS_VERSION_NUMBER = decode(l_tms_update, 'Y', l_tms_version_number, nvl(tms_version_number, 1))
4629 -- End of OTM R12
4630 WHERE delivery_id = p_delivery_id;
4631
4632 -- OTM R12 : update delivery
4633 IF (l_gc3_is_installed = 'Y' AND l_tms_update = 'Y') THEN
4634 WSH_XC_UTIL.LOG_OTM_EXCEPTION(
4635 p_delivery_info_tab => l_delivery_info_tab,
4636 p_new_interface_flag_tab => l_new_interface_flag_tab,
4637 x_return_status => l_return_status);
4638
4639 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4640 x_return_status := l_return_status;
4641 IF l_debug_on THEN
4642 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_XC_UTIL.log_otm_exception');
4643 WSH_DEBUG_SV.pop(l_module_name);
4644 END IF;
4645 RETURN;
4646 END IF;
4647 END IF;
4648 -- End of OTM R12 : update delivery
4649
4650 /* security rule, ship-to-location and ship-FROM-location must be the
4651 same as the delivery's */
4652 /* Error */
4653
4654 IF l_debug_on THEN
4655 WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id'
4656 ,l_del.initial_pickup_location_id);
4657 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id',
4658 l_detail.ship_from_location_id);
4659 WSH_DEBUG_SV.log(l_module_name,
4660 'ultimate_dropoff_location_id',
4661 l_del.ultimate_dropoff_location_id);
4662 WSH_DEBUG_SV.log(l_module_name,'ship_to_location_id',
4663 l_detail.ship_to_location_id);
4664 END IF;
4665 IF ((l_del.initial_pickup_location_id <> l_detail.ship_from_location_id)
4666 or (l_del.ultimate_dropoff_location_id <> l_detail.ship_to_location_id)
4667 or (l_detail.ship_to_location_id IS null)) THEN
4668 RAISE DETAIL_DEL_FROM_to_not_SAME ;
4669 END IF;
4670 --
4671 -- K LPN CONV. rv
4672 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
4673 AND l_detail.line_direction IN ('O', 'IO')
4674 AND l_detail.container_flag='Y'
4675 AND
4676 (
4677 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_detail_wms_org = 'Y')
4678 OR
4679 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_detail_wms_org = 'N')
4680 )
4681 THEN
4682 --{
4683 l_sync_tmp_rec.delivery_detail_id := l_detail.delivery_detail_id;
4684 l_sync_tmp_rec.parent_delivery_detail_id := l_detail.parent_delivery_detail_id;
4685 l_sync_tmp_rec.delivery_id := l_detail.delivery_id;
4686 l_sync_tmp_rec.operation_type := 'PRIOR';
4687 --
4688 IF l_debug_on THEN
4689 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
4690 END IF;
4691 --
4692 WSH_WMS_SYNC_TMP_PKG.MERGE
4693 (
4694 p_sync_tmp_rec => l_sync_tmp_rec,
4695 x_return_status => l_return_status
4696 );
4697
4698 --
4699 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4700 --
4701 x_return_status := l_return_status;
4702 --
4703 IF l_debug_on THEN
4704 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
4705 WSH_DEBUG_SV.pop(l_module_name);
4706 END IF;
4707 --
4708 return;
4709 --
4710 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
4711 --
4712 l_num_warnings := l_num_warnings + 1;
4713 --
4714 END IF;
4715 --
4716 --}
4717 END IF;
4718 -- K LPN CONV. rv
4719 --
4720
4721 UPDATE wsh_delivery_assignments_v
4722 SET delivery_id = p_delivery_id,
4723 last_update_date = SYSDATE,
4724 last_updated_by = FND_GLOBAL.USER_ID,
4725 last_update_login = FND_GLOBAL.LOGIN_ID
4726 WHERE delivery_detail_id = l_detail.delivery_detail_id;
4727 IF (SQL%NOTFOUND) THEN
4728 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4729 RAISE NO_DATA_FOUND;
4730 END IF;
4731
4732 l_mdc_detail_tab(1) := l_detail.delivery_detail_id;
4733 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
4734 p_detail_id_tab => l_mdc_detail_tab,
4735 x_return_status => x_return_status);
4736
4737 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4738 IF l_debug_on THEN
4739 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
4740 WSH_DEBUG_SV.pop(l_module_name);
4741 END IF;
4742 return;
4743 END IF;
4744
4745
4746 -- J-IB-NPARIKH-{
4747 --
4748 --
4749 -- Set freight terms for inbound/drop-ship delivery
4750 -- For non-empty delivery, set freight term to null,
4751 -- if line's freight term is different
4752 -- For an empty delivery, set freight term to line's value
4753 --
4754 x_dlvy_freight_terms_code := l_del.freight_terms_code;
4755 --
4756 IF NVL(l_detail.container_flag,'N') = 'N'
4757 AND l_detail.line_direction NOT IN ('O','IO')
4758 THEN
4759 --{
4760 IF x_dlvy_has_lines = 'Y'
4761 AND x_dlvy_freight_terms_code IS NOT NULL
4762 AND NVL(l_detail.freight_terms_code,'!!!!!') <> x_dlvy_freight_terms_code
4763 THEN
4764 --
4765 -- Non-empty delivery has different freight term than line's
4766 -- So, we need to update delivery freight term to NULL
4767 --
4768 x_dlvy_freight_terms_code := NULL;
4769 ELSIF x_dlvy_has_lines = 'N'
4770 AND NVL(l_detail.freight_terms_code,'!!!!!') <> NVL(x_dlvy_freight_terms_code,'!!!!!')
4771 THEN
4772 x_dlvy_freight_terms_code := l_detail.freight_terms_code;
4773 END IF;
4774 --
4775 --
4776 IF NVL(l_del.freight_terms_code,'!!!!!') <> NVL(x_dlvy_freight_terms_code,'!!!!!')
4777 THEN
4778 --{
4779 --
4780 IF l_debug_on THEN
4781 WSH_DEBUG_SV.log(l_module_name,'Delivery updated Freight Terms',x_dlvy_freight_terms_code);
4782 END IF;
4783 --
4784
4785 -- OTM R12 : update delivery
4786 -- no code changes are needed for the following update
4787 -- since this routine is only for Inbound/drop-ship
4788 -- deliveries, OTM flow will never reach here
4789
4790 UPDATE wsh_new_deliveries
4791 SET freight_terms_code = x_dlvy_freight_terms_code,
4792 last_update_date = SYSDATE,
4793 last_updated_by = FND_GLOBAL.USER_ID,
4794 last_update_login = FND_GLOBAL.LOGIN_ID
4795 WHERE delivery_id = p_delivery_id;
4796 --
4797 IF (SQL%NOTFOUND)
4798 THEN
4799 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4800 RAISE INVALID_DEL;
4801 END IF;
4802 --}
4803 END IF;
4804 --}
4805 END IF;
4806 --
4807 x_dlvy_has_lines := 'Y';
4808 --
4809 -- J-IB-NPARIKH-}
4810
4811
4812 IF (l_detail.released_status = WSH_DELIVERY_DETAILS_PKG.C_RELEASED_TO_WAREHOUSE) THEN
4813 --{
4814 IF (wsh_util_validate.Check_Wms_Org(l_detail.organization_id)='Y') AND
4815 (l_detail.move_order_line_id IS NOT NULL AND
4816 (WSH_USA_INV_PVT.is_mo_type_putaway
4817 (p_move_order_line_id => l_detail.move_order_line_id) = 'N') -- X-dock
4818 ) THEN -- check if wms org
4819
4820 -- Update Cartonization ID.
4821 IF l_debug_on THEN
4822 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_MO_CANCEL_PVT.update_mol_carton_group',WSH_DEBUG_SV.C_PROC_LEVEL);
4823 END IF;
4824
4825 INV_MO_Cancel_PVT.update_mol_carton_group
4826 (p_line_id => l_detail.move_order_line_id,
4827 p_carton_grouping_id => p_delivery_id,
4828 x_return_status => x_return_status,
4829 x_msg_cnt => l_msg_count,
4830 x_msg_data => l_msg_data);
4831
4832 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
4833 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
4834 RAISE update_mol_carton_group_error;
4835 END IF;
4836 END IF;
4837 --}
4838 END IF;
4839
4840 --if container check attr flag, update container hierarchy
4841 IF l_detail.container_flag='Y' THEN
4842 IF l_attr_flag = 'N' THEN
4843 --
4844 IF l_debug_on THEN
4845 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.UPDATE_CONT_HIERARCHY',WSH_DEBUG_SV.C_PROC_LEVEL);
4846 END IF;
4847 --
4848 WSH_CONTAINER_ACTIONS.Update_Cont_Hierarchy (
4849 NULL,
4850 p_delivery_id,
4851 l_detail.delivery_detail_id,
4852 x_return_status);
4853 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4854 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_UPD_ATTR_ERROR');
4855 --
4856 IF l_debug_on THEN
4857 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4858 END IF;
4859 --
4860 l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_detail.delivery_detail_id);
4861 FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
4862 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
4863 --
4864 IF l_debug_on THEN
4865 WSH_DEBUG_SV.pop(l_module_name);
4866 END IF;
4867 --
4868 return;
4869 END IF;
4870 END IF;
4871 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4872 END IF;--for container
4873 /* H projects: pricing integration csun , if any lines are
4874 successfully unassign from the delivery, the delivery needs to be marked
4875 for repricing */
4876 l_scc_unassign_from_del := l_scc_unassign_from_del + 1;
4877 END LOOP;
4878 /* For each detail*/
4879
4880
4881 -- OTM R12 : assign delivery detail
4882 IF (l_assign_update AND
4883 l_gc3_is_installed = 'Y' AND
4884 nvl(l_del.ignore_for_planning, 'N') = 'N') THEN
4885
4886 IF (l_tms_update = 'Y') THEN
4887 l_tms_interface_flag := l_new_interface_flag_tab(1);
4888 ELSIF (l_trip_info_rec.status_code = 'OP' OR
4889 l_trip_not_found = 'Y') THEN
4890 l_tms_interface_flag := nvl(l_delivery_info.tms_interface_flag, WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT);
4891 ELSE
4892 l_tms_interface_flag := NULL;
4893 END IF;
4894
4895 Post_Otm_Assign_Del_Detail
4896 (p_delivery_id => p_delivery_id,
4897 p_delivery_was_empty => l_delivery_was_empty,
4898 p_tms_interface_flag => l_tms_interface_flag,
4899 p_gross_weight => l_gross_weight1,
4900 x_return_status => l_return_status);
4901
4902 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
4903 IF l_debug_on THEN
4904 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
4905 END IF;
4906 raise FND_API.G_EXC_ERROR;
4907 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
4908 l_num_warnings := l_num_warnings + 1;
4909 END IF;
4910 END IF;
4911 -- End of OTM R12 : assign delivery detail
4912
4913 -- J: W/V Changes
4914 -- Increment the delivery W/V by DD W/V
4915 IF l_debug_on THEN
4916 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
4917 END IF;
4918 WSH_WV_UTILS.DD_WV_Post_Process(
4919 p_delivery_detail_id => p_detail_id,
4920 p_diff_gross_wt => l_gross_wt,
4921 p_diff_net_wt => l_net_wt,
4922 p_diff_volume => l_vol,
4923 p_diff_fill_volume => l_vol,
4924 x_return_status => l_return_status);
4925
4926 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4927 --
4928 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4929 WSH_UTIL_CORE.Add_Message(x_return_status);
4930 IF l_debug_on THEN
4931 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
4932 WSH_DEBUG_SV.pop(l_module_name);
4933 END IF;
4934 return;
4935 END IF;
4936
4937 --
4938 IF l_debug_on THEN
4939 WSH_DEBUG_SV.log(l_module_name,'l_scc_unassign_from_del',
4940 l_scc_unassign_from_del);
4941 END IF;
4942
4943 /* H integration: Pricing integration csun */
4944 IF l_scc_unassign_from_del > 0 THEN
4945 l_del_tab.delete;
4946 l_del_tab(1) := p_delivery_id;
4947
4948 --
4949 IF l_debug_on THEN
4950 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
4951 END IF;
4952 --
4953 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
4954 p_entity_type => 'DELIVERY',
4955 p_entity_ids => l_del_tab,
4956 x_return_status => l_return_status);
4957 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
4958 raise mark_reprice_error;
4959 END IF;
4960 END IF;
4961
4962 -- LPN CONV. rv
4963 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4964 --
4965 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4966 --
4967 ELSE
4968 --
4969 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4970 --
4971 END IF;
4972 -- LPN CONV. rv
4973
4974
4975 --
4976 IF l_debug_on THEN
4977 WSH_DEBUG_SV.pop(l_module_name);
4978 END IF;
4979 --
4980 EXCEPTION
4981 -- J-IB-NPARIKH-{
4982 WHEN FND_API.G_EXC_ERROR THEN
4983 x_return_status := WSH_UTIL_CORE.g_ret_sts_error;
4984 WSH_UTIL_CORE.add_message (WSH_UTIL_CORE.g_ret_sts_error,l_module_name);
4985 --
4986 IF l_debug_on
4987 THEN
4988 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
4989 END IF;
4990 -- J-IB-NPARIKH-}
4991
4992 WHEN mark_reprice_error THEN
4993 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
4994 x_return_status := l_return_status;
4995 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
4996
4997 --
4998 IF l_debug_on THEN
4999 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5000 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
5001 END IF;
5002 --
5003 WHEN update_mol_carton_group_error THEN
5004 fnd_message.SET_name('WSH', 'WSH_MOL_CARTON_GROUP_ERROR');
5005 x_return_status := l_return_status;
5006 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
5007
5008 --
5009 IF l_debug_on THEN
5010 WSH_DEBUG_SV.logmsg(l_module_name,'update_mol_carton_group_error exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5011 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:update_mol_carton_group_error');
5012 END IF;
5013
5014
5015 WHEN INVALID_DEL THEN
5016 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5017 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
5018 wsh_util_core.add_message(x_return_status,l_module_name);
5019 --
5020 IF l_debug_on THEN
5021 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DEL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5022 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DEL');
5023 END IF;
5024 RETURN;
5025 --
5026 WHEN DEL_NOT_UPDATABLE THEN
5027 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5028 wsh_util_core.add_message(x_return_status,l_module_name);
5029 --
5030 IF l_debug_on THEN
5031 WSH_DEBUG_SV.logmsg(l_module_name,'DEL_NOT_UPDATABLE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5032 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DEL_NOT_UPDATABLE');
5033 END IF;
5034 --
5035 RETURN;
5036 WHEN INVALID_DETAIL THEN
5037 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5038 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DETAIL');
5039 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
5040 wsh_util_core.add_message(x_return_status,l_module_name);
5041 --
5042 IF l_debug_on THEN
5043 WSH_DEBUG_SV.logmsg(l_module_name,'INVALID_DETAIL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5044 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:INVALID_DETAIL');
5045 END IF;
5046 --
5047 RETURN;
5048 WHEN DET_CONFIRMED THEN
5049 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5050 fnd_message.SET_name('WSH', 'WSH_DET_CONFIRMED_DETAIL');
5051 FND_MESSAGE.SET_TOKEN('DETAIL_ID',p_detail_id);
5052 wsh_util_core.add_message(x_return_status,l_module_name);
5053 --
5054 IF l_debug_on THEN
5055 WSH_DEBUG_SV.logmsg(l_module_name,'DET_CONFIRMED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5056 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DET_CONFIRMED');
5057 END IF;
5058 --
5059 RETURN;
5060 WHEN detail_del_FROM_to_not_same THEN
5061 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5062 fnd_message.SET_name('WSH', 'WSH_DET_SHIP_F_T_N_MATCH');
5063 wsh_util_core.add_message(x_return_status,l_module_name);
5064
5065
5066
5067 --
5068 IF l_debug_on THEN
5069 WSH_DEBUG_SV.logmsg(l_module_name,'DETAIL_DEL_FROM_TO_NOT_SAME exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5070 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DETAIL_DEL_FROM_TO_NOT_SAME');
5071 END IF;
5072 --
5073 RETURN;
5074 WHEN ship_method_not_match THEN
5075 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5076 fnd_message.SET_name('WSH', 'WSH_DET_SHIP_METHOD_NOT_MATCH');
5077 wsh_util_core.add_message(x_return_status,l_module_name);
5078 --
5079 IF l_debug_on THEN
5080 WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_METHOD_NOT_MATCH exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5081 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_METHOD_NOT_MATCH');
5082 END IF;
5083 --
5084 RETURN;
5085 WHEN others THEN
5086 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5087 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_TOP_DETAIL_TO_DELIVERY',l_module_name);
5088 --
5089 IF l_debug_on THEN
5090 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5091 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5092 END IF;
5093 --
5094 RETURN;
5095 END Assign_Top_Detail_To_Delivery;
5096 -------------------------------------------------------------------
5097 -- This procedure is only for backward compatibility. No one should call
5098 -- this procedure.
5099 -------------------------------------------------------------------
5100
5101 PROCEDURE Assign_Top_Detail_To_Delivery(
5102 P_DETAIL_ID IN NUMBER,
5103 P_DELIVERY_ID IN NUMBER,
5104 X_RETURN_STATUS OUT NOCOPY VARCHAR2
5105 ) IS
5106
5107 --
5108 l_debug_on BOOLEAN;
5109 --
5110 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_TOP_DETAIL_TO_DELIVERY';
5111 --
5112 l_has_lines VARCHAR2(1);
5113 l_dlvy_freight_terms_code VARCHAR2(30);
5114 --
5115 BEGIN
5116 --
5117 --
5118 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5119 --
5120 IF l_debug_on IS NULL
5121 THEN
5122 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5123 END IF;
5124 --
5125 IF l_debug_on THEN
5126 WSH_DEBUG_SV.push(l_module_name);
5127 --
5128 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
5129 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
5130 END IF;
5131 --
5132 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5133 --
5134 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
5135 (
5136 p_delivery_id => p_delivery_id
5137 );
5138 --
5139 ASSIGN_TOP_DETAIL_TO_DELIVERY
5140 (
5141 p_detail_id => p_detail_id,
5142 p_delivery_id => p_delivery_id,
5143 X_RETURN_STATUS => X_RETURN_STATUS,
5144 x_dlvy_has_lines => l_has_lines,
5145 x_dlvy_freight_Terms_code => l_dlvy_freight_Terms_code
5146 );
5147 --
5148 IF l_debug_on THEN
5149 WSH_DEBUG_SV.pop(l_module_name);
5150 END IF;
5151 --
5152 EXCEPTION
5153 WHEN others THEN
5154 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5155 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_TOP_DETAIL_TO_DELIVERY',l_module_name);
5156 --
5157 IF l_debug_on THEN
5158 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5159 END IF;
5160 END Assign_Top_Detail_To_Delivery;
5161
5162 -- THIS PROCEDURE IS OBSOLETE
5163 --
5164 --Procedure: Unassign_Cont_from_Delivery
5165 --Parameters: p_detail_id,
5166 -- x_return_status
5167 --Desription: Unassign an container FROM a delivery
5168 -- Note: need to drill up down to UPDATE delivery_id to NULL
5169
5170 PROCEDURE Unassign_Cont_from_Delivery(
5171 p_detail_id IN NUMBER,
5172 X_RETURN_STATUS OUT NOCOPY VARCHAR2,
5173 p_validate_flag IN VARCHAR2) IS
5174
5175 --
5176 l_debug_on BOOLEAN;
5177 --
5178 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_CONT_FROM_DELIVERY';
5179 --
5180 BEGIN
5181 --
5182 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5183 --
5184 END Unassign_Cont_FROM_Delivery;
5185
5186 --
5187 --Procedure: Assign_Cont_to_Cont
5188 --Parameters: p_detail_id1
5189 -- p_detail_id2
5190 -- x_return_status
5191 --Desription: Assigns a container to another container
5192
5193 -- it is called when assigning container1 to container2
5194 -- if container1 is already assigned to a delivery, then drill up and down
5195 -- of the container2 and assign delivery_id to all the parent and child
5196 -- containers of the container2.
5197
5198 -- if container2 is already assigned to a delivery, then drill up and down
5199 -- of container1 and assign delivery_id to all parent and child containers
5200 -- of the container1
5201
5202
5203 PROCEDURE Assign_Cont_To_Cont(
5204 p_detail_id1 IN NUMBER,
5205 p_detail_id2 IN NUMBER,
5206 x_return_status OUT NOCOPY VARCHAR2)
5207 IS
5208
5209 --Bug 3522687 : OMFST:J:R2:RG:APPLN HANGS WHILE PERFORMING MANUAL PACKING ACTION
5210 --Modified cursor check_loop
5211 /*
5212 CURSOR check_loop(x_delivery_detail_id NUMBER) IS
5213 SELECT delivery_detail_id
5214 FROM wsh_delivery_assignments_v
5215 START WITH delivery_detail_id = x_delivery_detail_id
5216 CONNECT BY PRIOR delivery_detail_id = parent_delivery_detail_id;
5217 */
5218
5219 CURSOR c_get_shipto (p_container_id NUMBER) IS
5220 SELECT ship_to_location_id
5221 FROM wsh_delivery_details
5222 WHERE delivery_detail_id = p_container_id;
5223
5224 l_container_is_empty BOOLEAN;
5225 l_ship_to_loc NUMBER;
5226 l_display_error BOOLEAN;
5227
5228
5229 CURSOR check_loop(p_inner_cont_id NUMBER,p_outer_cont_id NUMBER) IS
5230 SELECT delivery_detail_id
5231 FROM wsh_delivery_assignments_v
5232 WHERE delivery_detail_id = p_outer_cont_id
5233 START WITH delivery_detail_id = p_inner_cont_id
5234 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
5235
5236 -- Bug 3715176
5237 CURSOR c_get_plan_flag (v_delivery_id NUMBER) IS
5238 SELECT nvl(planned_flag,'N')
5239 FROM wsh_new_deliveries
5240 WHERE delivery_id = v_delivery_id;
5241
5242 CURSOR c_get_content_count(v_delivery_detail_id NUMBER) IS
5243 SELECT count(*)
5244 FROM wsh_delivery_assignments_v wda
5245 WHERE wda.parent_delivery_detail_id = v_delivery_detail_id and rownum = 1;
5246 -- Bug 3715176
5247
5248 /* Commenting this out - Bug 2457558
5249 -- Bug 2167042-added to check fill percentage for a container
5250 -- when packing a container
5251
5252 CURSOR Get_Min_Fill(v_cont_id NUMBER) IS
5253 SELECT nvl(minimum_fill_percent,0)
5254 FROM WSH_DELIVERY_DETAILS
5255 WHERE delivery_detail_id = v_cont_id
5256 AND container_flag = 'Y';
5257
5258 l_min_fill NUMBER;
5259 l_fill NUMBER;
5260 l_gross NUMBER;
5261 l_net NUMBER;
5262 l_volume NUMBER;
5263 l_cont_name VARCHAR2(30);
5264 x_pack_status VARCHAR2(30);
5265
5266 End of adding cursor for fill percentage
5267 */
5268 l_return_status VARCHAR2(1) := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5269 l_del_id_for_container1 C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
5270 l_del_id_for_container2 C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
5271
5272 detail_cont_name WSH_DELIVERY_DETAILS.CONTAINER_NAME%TYPE;
5273 parent_cont_name WSH_DELIVERY_DETAILS.CONTAINER_NAME%TYPE;
5274
5275 l_group_by_flags WSH_DELIVERY_AUTOCREATE.group_by_flags_rec_type;
5276 /* H projects: pricing integration csun */
5277 m NUMBER := 0;
5278 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
5279 mark_reprice_error EXCEPTION;
5280 l_plan_flag varchar2(1);
5281 l_content_count NUMBER;
5282
5283 l_out_container NUMBER := 0 ;
5284 --
5285 -- K LPN CONV. rv
5286 l_wms_org VARCHAR2(10) := 'N';
5287 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
5288 l_sync_tmp_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
5289 l_num_warnings NUMBER := 0;
5290 l_operation_type VARCHAR2(100);
5291 -- K LPN CONV. rv
5292 l_mdc_detail_tab WSH_UTIL_CORE.Id_Tab_Type;
5293 l_ignore_det_tab WSH_UTIL_CORE.Id_Tab_Type;
5294
5295 -- OTM R12 : assign delivery detail
5296 l_delivery_was_empty BOOLEAN;
5297 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
5298 l_gross_weight1 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
5299 l_gross_weight2 WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
5300 l_gc3_is_installed VARCHAR2(1);
5301 l_assign_update BOOLEAN;
5302 -- End of OTM R12 : assign delivery detail
5303
5304 l_debug_on BOOLEAN;
5305 --
5306 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_CONT_TO_CONT';
5307 --
5308 BEGIN
5309 -- assumption: IF both container1 and container2 are already
5310 -- assigned to deliveries. Both deliveries must be the same
5311 --
5312 --
5313 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5314 --
5315 IF l_debug_on IS NULL
5316 THEN
5317 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5318 END IF;
5319 --
5320 IF l_debug_on THEN
5321 WSH_DEBUG_SV.push(l_module_name);
5322 --
5323 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID1',P_DETAIL_ID1);
5324 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID2',P_DETAIL_ID2);
5325 END IF;
5326 --
5327 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5328
5329 -- OTM R12
5330 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
5331
5332 IF (l_gc3_is_installed IS NULL) THEN
5333 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
5334 END IF;
5335 l_assign_update := FALSE; --default assignment tms update to false
5336 -- End of OTM R12
5337
5338 OPEN c_del_id_FOR_cont_or_detail(p_detail_id1);
5339 FETCH c_del_id_for_cont_or_detail into l_del_id_for_container1;
5340 CLOSE c_del_id_for_cont_or_detail;
5341
5342 -- J: W/V Changes
5343 IF l_del_id_for_container1.parent_delivery_detail_id = p_detail_id2 THEN
5344 IF l_debug_on THEN
5345 WSH_DEBUG_SV.logmsg(l_module_name,'Cont '||p_detail_id1||' is already assigned to '||p_detail_id2||'. Returning');
5346 WSH_DEBUG_SV.pop(l_module_name);
5347 END IF;
5348 return;
5349 END IF;
5350
5351 OPEN c_del_id_for_cont_or_detail(p_detail_id2);
5352 FETCH c_del_id_for_cont_or_detail into l_del_id_for_container2;
5353 CLOSE c_del_id_for_cont_or_detail;
5354
5355 -- K LPN CONV. rv
5356 --
5357 l_wms_org := wsh_util_validate.check_wms_org(l_del_id_for_container2.organization_id);
5358 --
5359 -- K LPN CONV. rv
5360 IF l_debug_on THEN
5361 WSH_DEBUG_SV.log(l_module_name,'delivery_id 1',
5362 l_del_id_for_container1.delivery_id);
5363 WSH_DEBUG_SV.log(l_module_name,'organization_id 1',
5364 l_del_id_for_container1.organization_id);
5365 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id 1',
5366 l_del_id_for_container1.ship_from_location_id);
5367 WSH_DEBUG_SV.log(l_module_name,'customer_id 1',
5368 l_del_id_for_container1.customer_id);
5369 WSH_DEBUG_SV.log(l_module_name,'intmed_ship_to_location_id 1',
5370 l_del_id_for_container1.intmed_ship_to_location_id);
5371 WSH_DEBUG_SV.log(l_module_name,'fob_code 1',
5372 l_del_id_for_container1.fob_code);
5373 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code 1',
5374 l_del_id_for_container1.freight_terms_code);
5375 WSH_DEBUG_SV.log(l_module_name,'ship_method_code 1',
5376 l_del_id_for_container1.ship_method_code);
5377 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id 1',
5378 l_del_id_for_container1.parent_delivery_detail_id);
5379
5380 WSH_DEBUG_SV.log(l_module_name,'delivery_id 2',
5381 l_del_id_for_container2.delivery_id);
5382 WSH_DEBUG_SV.log(l_module_name,'organization_id 2',
5383 l_del_id_for_container2.organization_id);
5384 WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id 2',
5385 l_del_id_for_container2.ship_from_location_id);
5386 WSH_DEBUG_SV.log(l_module_name,'customer_id 2',
5387 l_del_id_for_container2.customer_id);
5388 WSH_DEBUG_SV.log(l_module_name,'intmed_ship_to_location_id 2', l_del_id_for_container2.intmed_ship_to_location_id);
5389 WSH_DEBUG_SV.log(l_module_name,'fob_code 2',
5390 l_del_id_for_container2.fob_code);
5391 WSH_DEBUG_SV.log(l_module_name,'freight_terms_code 2',
5392 l_del_id_for_container2.freight_terms_code);
5393 WSH_DEBUG_SV.log(l_module_name,'ship_method_code 2',
5394 l_del_id_for_container2.ship_method_code);
5395 WSH_DEBUG_SV.log(l_module_name,'parent_delivery_detail_id 2',
5396 l_del_id_for_container2.parent_delivery_detail_id);
5397 WSH_DEBUG_SV.log(l_module_name,'customer',
5398 l_group_by_flags.customer);
5399 WSH_DEBUG_SV.log(l_module_name,'intmed',
5400 l_group_by_flags.intmed);
5401 WSH_DEBUG_SV.log(l_module_name,'fob', l_group_by_flags.fob);
5402 WSH_DEBUG_SV.log(l_module_name,'freight_terms',
5403 l_group_by_flags.freight_terms);
5404 WSH_DEBUG_SV.log(l_module_name,'ship_method',
5405 l_group_by_flags.ship_method);
5406
5407 END IF;
5408
5409
5410 /* Check to see if the line is already packed */
5411 IF (l_del_id_for_container1.parent_delivery_detail_id IS NOT NULL
5412 AND l_del_id_for_container1.parent_delivery_detail_id <>
5413 p_detail_id2
5414 ) THEN
5415 FND_MESSAGE.SET_NAME('WSH','WSH_DET_PACK_ERROR');
5416 --
5417 IF l_debug_on THEN
5418 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5419 END IF;
5420 --
5421 FND_MESSAGE.SET_TOKEN('DET_LINE',
5422 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5423 --
5424 IF l_debug_on THEN
5425 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5426 END IF;
5427 --
5428 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5429 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5430 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5431 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5432 --
5433 IF l_debug_on THEN
5434 WSH_DEBUG_SV.pop(l_module_name);
5435 END IF;
5436 --
5437 return;
5438 END IF;
5439
5440 -- OTM R12 : assign delivery detail
5441 IF (l_gc3_is_installed = 'Y' AND
5442 nvl(l_del_id_for_container1.ignore_for_planning, 'N') = 'N') THEN
5443
5444 Pre_Otm_Assign_Del_Detail
5445 (p_delivery_id => NULL,
5446 p_detail_id => NULL,
5447 p_container1_id => p_detail_id1,
5448 p_container2_id => p_detail_id2,
5449 p_assignment_type => 'C2C',
5450 x_delivery_was_empty => l_delivery_was_empty,
5451 x_assign_update => l_assign_update,
5452 x_gross_weight1 => l_gross_weight1,
5453 x_gross_weight2 => l_gross_weight2,
5454 x_return_status => l_return_status);
5455
5456 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5457 --handle the error approriately to the procedure this code is in
5458 IF l_debug_on THEN
5459 WSH_DEBUG_SV.log(l_module_name,'error from Pre_Otm_Assign_Del_Detail');
5460 END IF;
5461 raise FND_API.G_EXC_ERROR;
5462 END IF;
5463 END IF;
5464 -- End of OTM R12 : assign delivery detail
5465
5466 --Bug 3522687 : OMFST:J:R2:RG:APPLN HANGS WHILE PERFORMING MANUAL PACKING ACTION
5467 --Cursor check_loop returns delivery_detail_id of the
5468 --outer container if outer container is packed in the inner container.
5469
5470 OPEN check_loop(p_detail_id1,p_detail_id2);
5471 FETCH check_loop into l_out_container;
5472
5473 -- If cursor returns then we have self nesting in containers
5474
5475 IF (check_loop%FOUND) THEN
5476
5477 CLOSE check_loop;
5478 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_LOOP_NO_PACK');
5479 --
5480 IF l_debug_on THEN
5481 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5482 END IF;
5483 --
5484 FND_MESSAGE.SET_TOKEN('DETAIL_CONTAINER',
5485 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5486 --
5487 IF l_debug_on THEN
5488 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5489 END IF;
5490 --
5491 FND_MESSAGE.SET_TOKEN('PARENT_CONTAINER',
5492 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5493 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5494 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5495 --
5496 IF l_debug_on THEN
5497 WSH_DEBUG_SV.pop(l_module_name);
5498 END IF;
5499 --
5500 return;
5501 END IF;
5502 CLOSE check_loop;
5503 -- End of fix for bug 3522687
5504
5505 /* Added code to validate grouping attributes for Child Container and master
5506 Container */
5507 IF (l_del_id_for_container1.organization_id <>
5508 l_del_id_for_container2.organization_id) THEN
5509 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_ASSG_ORG_DIFF');
5510 --
5511 IF l_debug_on THEN
5512 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5513 END IF;
5514 --
5515 FND_MESSAGE.SET_TOKEN('ENTITY1',
5516 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5517 --
5518 IF l_debug_on THEN
5519 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5520 END IF;
5521 --
5522 FND_MESSAGE.SET_TOKEN('ENTITY2',
5523 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5524 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5525 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5526 --
5527 IF l_debug_on THEN
5528 WSH_DEBUG_SV.pop(l_module_name);
5529 END IF;
5530 --
5531 RETURN;
5532 END IF;
5533
5534 IF (l_del_id_for_container1.ship_from_location_id <>
5535 l_del_id_for_container2.ship_from_location_id) THEN
5536 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5537 --
5538 IF l_debug_on THEN
5539 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5540 END IF;
5541 --
5542 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5543 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5544 --
5545 IF l_debug_on THEN
5546 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5547 END IF;
5548 --
5549 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5550 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5551 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5552 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5553 --
5554 IF l_debug_on THEN
5555 WSH_DEBUG_SV.pop(l_module_name);
5556 END IF;
5557 --
5558 RETURN;
5559 END IF;
5560
5561 --J TP Release
5562 IF (l_del_id_for_container1.ignore_for_planning <>
5563 l_del_id_for_container2.ignore_for_planning) THEN
5564
5565
5566 -- R12: MDC
5567 -- If called by WMS, and line is part of a consol delivery,
5568 -- then the ignore for planning flag is always 'Y'. For WMS,
5569 -- we need to set the child detail's ignore for planning status
5570 -- to be 'Y' before we attempt to pack.
5571
5572 IF (l_wms_org = 'Y') AND
5573 ((l_del_id_for_container1.wda_type = 'O') OR (l_del_id_for_container2.wda_type = 'O')) --{
5574 THEN
5575 IF l_del_id_for_container1.wda_type = 'O' THEN
5576 l_ignore_det_tab(1) := p_detail_id2;
5577 ELSE
5578 l_ignore_det_tab(1) := p_detail_id1;
5579 END IF;
5580
5581 WSH_TP_RELEASE.change_ignoreplan_status
5582 (p_entity => 'DLVB',
5583 p_in_ids => l_ignore_det_tab,
5584 p_action_code => 'IGNORE_PLAN',
5585 x_return_status => x_return_status);
5586
5587 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5588
5589 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
5590 FND_MESSAGE.SET_TOKEN('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5591 --
5592 IF l_debug_on THEN
5593 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5594 END IF;
5595 --
5596 FND_MESSAGE.SET_TOKEN('ENTITY2',nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5597 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5598 --
5599 IF l_debug_on THEN
5600 WSH_DEBUG_SV.pop(l_module_name);
5601 END IF;
5602 --
5603 RETURN;
5604
5605 END IF;
5606
5607
5608 ELSE --}
5609 l_display_error := TRUE;
5610 IF (l_wms_org = 'Y') THEN--{
5611 OPEN c_get_shipto(p_detail_id2);
5612 FETCH c_get_shipto INTO l_ship_to_loc;
5613 CLOSE c_get_shipto;
5614 --
5615 l_container_is_empty := l_ship_to_loc IS NULL;
5616 --
5617 IF l_container_is_empty THEN --{
5618
5619
5620 l_ignore_det_tab(1) := p_detail_id2;
5621 WSH_TP_RELEASE.change_ignoreplan_status
5622 (p_entity => 'DLVB',
5623 p_in_ids => l_ignore_det_tab,
5624 p_action_code => 'IGNORE_PLAN',
5625 x_return_status => l_return_status);
5626
5627 IF x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN --{
5628 l_display_error := TRUE;
5629 ELSE
5630 l_display_error := FALSE;
5631 END IF;--}
5632 END IF; --}
5633 END IF ; --}
5634
5635 IF l_display_error THEN --{
5636 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_DIFF_IGNOREPLAN');
5637 --
5638 IF l_debug_on THEN
5639 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5640 END IF;
5641 FND_MESSAGE.SET_TOKEN('ENTITY1',nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5642 --
5643 IF l_debug_on THEN
5644 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5645 END IF;
5646 --
5647 FND_MESSAGE.SET_TOKEN('ENTITY2',nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5648 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5649 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5650 --
5651 IF l_debug_on THEN
5652 WSH_DEBUG_SV.pop(l_module_name);
5653 END IF;
5654 --
5655 RETURN;
5656 END IF; --}
5657 END IF;
5658 END IF;
5659
5660 --
5661 -- J-IB-NPARIKH-{
5662 --
5663 --
5664 -- O container can be assigned to empty IO container
5665 -- IO container can be assigned to empty O container
5666 -- Otherwise, both containers' line direction must match
5667 --
5668 IF (l_del_id_for_container1.line_direction <> l_del_id_for_container2.line_direction)
5669 THEN
5670 --{
5671 IF l_del_id_for_container1.line_direction IN ('O','IO')
5672 AND l_del_id_for_container2.line_direction IN ('O','IO')
5673 THEN
5674 --{
5675 NULL;
5676 --}
5677 ELSE
5678 --{
5679 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5680 --
5681 IF l_debug_on THEN
5682 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5683 END IF;
5684 --
5685 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5686 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5687 --
5688 IF l_debug_on THEN
5689 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5690 END IF;
5691 --
5692 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5693 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5694 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5695 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5696 --
5697 IF l_debug_on THEN
5698 WSH_DEBUG_SV.pop(l_module_name);
5699 END IF;
5700 --
5701 RETURN;
5702 --}
5703 END IF;
5704 --}
5705 END IF;
5706 --
5707 -- J-IB-NPARIKH-}
5708 --
5709 --
5710 IF l_debug_on THEN
5711 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.GET_GROUP_BY_ATTR',WSH_DEBUG_SV.C_PROC_LEVEL);
5712 END IF;
5713 --
5714 WSH_DELIVERY_AUTOCREATE.get_group_by_attr(
5715 p_organization_id => l_del_id_for_container1.organization_id,
5716 x_group_by_flags => l_group_by_flags,
5717 x_return_status => x_return_status);
5718
5719 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5720 x_return_status := x_return_status;
5721 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5722 --
5723 IF l_debug_on THEN
5724 WSH_DEBUG_SV.pop(l_module_name);
5725 END IF;
5726 --
5727 RETURN;
5728 END IF;
5729
5730 --- Bug 3715176
5731 -- If delivery is same for container to pack and to be packed then it should not check firm status.
5732 IF l_del_id_for_container1.delivery_id = l_del_id_for_container2.delivery_id then
5733 NULL;
5734
5735 Elsif l_del_id_for_container1.delivery_id is NOT NULL OR
5736 l_del_id_for_container2.delivery_id is NOT NULL then
5737
5738 Open c_get_content_count(p_detail_id2);
5739 Fetch c_get_content_count into l_content_count;
5740 Close c_get_content_count;
5741
5742 IF l_content_count > 0 THEN
5743 IF l_del_id_for_container1.delivery_id IS NOT NULL then
5744 OPEN c_get_plan_flag(l_del_id_for_container1.delivery_id);
5745 FETCH c_get_plan_flag into l_plan_flag;
5746 CLOSE c_get_plan_flag;
5747
5748 if l_plan_flag <> 'N' then
5749 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
5750
5751 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5752
5753 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5754 --
5755 IF l_debug_on THEN
5756 WSH_DEBUG_SV.pop(l_module_name);
5757 END IF;
5758 --
5759 return;
5760 end if;
5761 END IF;
5762
5763 IF l_del_id_for_container2.delivery_id IS NOT NULL then
5764 OPEN c_get_plan_flag(l_del_id_for_container2.delivery_id);
5765 FETCH c_get_plan_flag into l_plan_flag;
5766 CLOSE c_get_plan_flag;
5767
5768 if l_plan_flag <> 'N' then
5769 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_STATUS_NOT_PROPER');
5770
5771 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5772
5773 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5774 --
5775 IF l_debug_on THEN
5776 WSH_DEBUG_SV.pop(l_module_name);
5777 END IF;
5778 --
5779 return;
5780 end if;
5781 END IF;
5782 END IF;
5783 END IF;
5784 -- Bug 3715176
5785
5786
5787 IF l_group_by_flags.customer = 'Y' THEN
5788 IF (l_del_id_for_container1.customer_id <>
5789 l_del_id_for_container2.customer_id) THEN
5790 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5791 --
5792 IF l_debug_on THEN
5793 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5794 END IF;
5795 --
5796 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5797 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5798 --
5799 IF l_debug_on THEN
5800 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5801 END IF;
5802 --
5803 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5804 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5805 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5806 --
5807 IF l_debug_on THEN
5808 WSH_DEBUG_SV.pop(l_module_name);
5809 END IF;
5810 --
5811 return;
5812 END IF;
5813 END IF;
5814 IF l_group_by_flags.intmed = 'Y' THEN
5815 IF (l_del_id_for_container1.intmed_ship_to_location_id <>
5816 l_del_id_for_container2.intmed_ship_to_location_id) THEN
5817 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5818 --
5819 IF l_debug_on THEN
5820 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5821 END IF;
5822 --
5823 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5824 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5825 --
5826 IF l_debug_on THEN
5827 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5828 END IF;
5829 --
5830 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5831 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5832 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5833 --
5834 IF l_debug_on THEN
5835 WSH_DEBUG_SV.pop(l_module_name);
5836 END IF;
5837 --
5838 return;
5839 END IF;
5840 END IF;
5841 IF l_group_by_flags.fob = 'Y' THEN
5842 IF (l_del_id_for_container1.fob_code <>
5843 l_del_id_for_container2.fob_code) THEN
5844 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5845 --
5846 IF l_debug_on THEN
5847 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5848 END IF;
5849 --
5850 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5851 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5852 --
5853 IF l_debug_on THEN
5854 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5855 END IF;
5856 --
5857 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5858 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5859 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5860 --
5861 IF l_debug_on THEN
5862 WSH_DEBUG_SV.pop(l_module_name);
5863 END IF;
5864 --
5865 return;
5866 END IF;
5867 END IF;
5868 IF l_group_by_flags.freight_terms = 'Y' THEN
5869 IF (l_del_id_for_container1.freight_terms_code <>
5870 l_del_id_for_container2.freight_terms_code) THEN
5871 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5872 --
5873 IF l_debug_on THEN
5874 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5875 END IF;
5876 --
5877 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5878 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5879 --
5880 IF l_debug_on THEN
5881 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5882 END IF;
5883 --
5884 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5885 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5886 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5887 --
5888 IF l_debug_on THEN
5889 WSH_DEBUG_SV.pop(l_module_name);
5890 END IF;
5891 --
5892 return;
5893 END IF;
5894 END IF;
5895 IF l_group_by_flags.ship_method = 'Y' THEN
5896 IF (NVL(l_del_id_for_container1.mode_of_transport, l_del_id_for_container2.mode_of_transport) <>
5897 NVL(l_del_id_for_container2.mode_of_transport, l_del_id_for_container1.mode_of_transport))
5898 OR (NVL(l_del_id_for_container1.service_level, l_del_id_for_container2.service_level) <>
5899 NVL(l_del_id_for_container2.service_level, l_del_id_for_container1.service_level))
5900 OR (NVL(l_del_id_for_container1.carrier_id, l_del_id_for_container2.carrier_id) <>
5901 NVL(l_del_id_for_container2.carrier_id, l_del_id_for_container1.carrier_id))
5902 THEN
5903 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_DET_NOT_MATCH');
5904 --
5905 IF l_debug_on THEN
5906 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5907 END IF;
5908 --
5909 FND_MESSAGE.SET_TOKEN('DETAIL_ID',
5910 nvl(wsh_container_utilities.get_cont_name(p_detail_id1), p_detail_id1));
5911 --
5912 IF l_debug_on THEN
5913 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.GET_CONT_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5914 END IF;
5915 --
5916 FND_MESSAGE.SET_TOKEN('CONT_NAME',
5917 nvl(wsh_container_utilities.get_cont_name(p_detail_id2), p_detail_id2));
5918 WSH_UTIL_CORE.Add_Message(x_return_status,l_module_name);
5919 --
5920 IF l_debug_on THEN
5921 WSH_DEBUG_SV.pop(l_module_name);
5922 END IF;
5923 --
5924 return;
5925 END IF;
5926 END IF;
5927 /* End of check for grouping attributes */
5928
5929
5930 /* End of Check to see if the line is already packed */
5931
5932
5933 -- for bug 1336858 fix
5934
5935 -- No need for savepoint
5936 -- savepoint before_cont_assignment;
5937
5938 -- J: W/V Changes
5939 -- The first DD_WV_Post_Process call will decrement the cont1 W/V from delivery
5940 -- The second DD_WV_Post_Process call will increment the delivery W/V with cont2 W/V (since cont2 has to be
5941 -- assigned to the delivery if the cont1 being assigned to cont2 is already assigned to delivery)
5942 -- The third DD_WV_Post_Process cll will increment the cont2 W/V with cont1 W/V which in turn will adjust the
5943 -- delivery W/V, if the cont2 is in a delivery.
5944 IF (l_del_id_for_container1.delivery_id is not null) THEN
5945 IF l_debug_on THEN
5946 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
5947 END IF;
5948
5949 WSH_WV_UTILS.DD_WV_Post_Process(
5950 p_delivery_detail_id => p_detail_id1,
5951 p_diff_gross_wt => -1 * l_del_id_for_container1.gross_weight,
5952 p_diff_net_wt => -1 * l_del_id_for_container1.net_weight,
5953 p_diff_volume => -1 * l_del_id_for_container1.volume,
5954 p_diff_fill_volume => -1 * l_del_id_for_container1.volume,
5955 x_return_status => l_return_status);
5956
5957 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5958 --
5959 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5960 WSH_UTIL_CORE.Add_Message(x_return_status);
5961 IF l_debug_on THEN
5962 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
5963 WSH_DEBUG_SV.pop(l_module_name);
5964 END IF;
5965 return;
5966 END IF;
5967
5968 END IF;
5969
5970 IF (l_del_id_for_container1.delivery_id IS not NULL) THEN
5971
5972 IF (l_del_id_for_container2.delivery_id IS NULL) THEN
5973 /* Bug 1571143,Combining the 2 cursors */
5974 -- K LPN CONV. rv
5975 -- Based on assumption that we are using wsh_delivery_assignments_v,
5976 -- delivery and its contents will belong to same organization.
5977 -- Similarly, container and its contents will belong to same organization.
5978 -- Hence, we are checking for WMS org or non-WMS org. at the
5979 -- parent level (i.e. delivery/container)
5980 -- rather than at line-level for performance reasons.
5981
5982 -- If this assumptions were to be violated in anyway
5983 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
5984 -- wsh_delivery_assignments_v
5985 -- or
5986 -- if existing query were to somehow return/fetch records where
5987 -- delivery and its contents may belong to diff. org.
5988 -- container and its contents may belong to diff. org.
5989 -- then
5990 -- Calls to check_wms_org needs to be re-adjusted at
5991 OPEN c_inside_outside_of_container(p_detail_id2);
5992 FETCH c_inside_outside_of_container BULK COLLECT INTO
5993 l_sync_tmp_recTbl.delivery_detail_id_tbl,
5994 l_sync_tmp_recTbl.parent_detail_id_tbl,
5995 l_sync_tmp_recTbl.delivery_id_Tbl;
5996 CLOSE c_inside_outside_of_container;
5997 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
5998 --{
5999 --
6000 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
6001 l_operation_type := 'PRIOR';
6002 --
6003 --
6004 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6005 AND nvl(l_del_id_for_container2.line_direction,'O') IN ('O', 'IO')
6006 AND
6007 (
6008 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
6009 OR
6010 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
6011 )
6012 THEN
6013 --{
6014 --
6015 IF l_debug_on THEN
6016 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
6017 END IF;
6018 --
6019 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
6020 (
6021 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
6022 x_return_status => l_return_status,
6023 p_operation_type => l_operation_type
6024 );
6025 --
6026 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6027 --
6028 x_return_status := l_return_status;
6029 --
6030 IF l_debug_on THEN
6031 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6032 WSH_DEBUG_SV.pop(l_module_name);
6033 END IF;
6034 --
6035 return;
6036 --
6037 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6038 --
6039 l_num_warnings := l_num_warnings + 1;
6040 --
6041 END IF;
6042 --
6043 --}
6044 END IF;
6045 --
6046
6047 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
6048 UPDATE wsh_delivery_assignments_v
6049 SET delivery_id = l_del_id_for_container1.delivery_id,
6050 last_update_date = SYSDATE,
6051 last_updated_by = FND_GLOBAL.USER_ID,
6052 last_update_login = FND_GLOBAL.LOGIN_ID
6053 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6054
6055 -- OTM R12 : assign delivery detail
6056 IF (l_assign_update AND
6057 l_gc3_is_installed = 'Y' AND
6058 nvl(l_del_id_for_container1.ignore_for_planning, 'N') = 'N') THEN
6059
6060 l_tms_interface_flag := NULL;
6061
6062 Post_Otm_Assign_Del_Detail
6063 (p_delivery_id => l_del_id_for_container1.delivery_id,
6064 p_delivery_was_empty => l_delivery_was_empty,
6065 p_tms_interface_flag => l_tms_interface_flag,
6066 p_gross_weight => l_gross_weight2, --using the gross weight of container2
6067 x_return_status => l_return_status);
6068
6069 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6070 IF l_debug_on THEN
6071 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
6072 END IF;
6073 raise FND_API.G_EXC_ERROR;
6074 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6075 l_num_warnings := l_num_warnings + 1;
6076 END IF;
6077
6078 END IF;
6079 -- End of OTM R12 : assign delivery detail
6080
6081 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
6082 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6083 END LOOP;
6084 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
6085 p_detail_id_tab => l_mdc_detail_tab,
6086 x_return_status => x_return_status);
6087
6088 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6089 IF l_debug_on THEN
6090 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6091 WSH_DEBUG_SV.pop(l_module_name);
6092 END IF;
6093 return;
6094 END IF;
6095 l_mdc_detail_tab.delete;
6096 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
6097 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
6098 l_sync_tmp_recTbl.delivery_id_tbl.delete;
6099 l_sync_tmp_recTbl.operation_type_tbl.delete;
6100 --}
6101 END IF;
6102 -- K LPN CONV. rv
6103
6104 -- J: W/V Changes
6105 IF l_debug_on THEN
6106 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning Container to Delivery');
6107 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6108 END IF;
6109
6110 WSH_WV_UTILS.DD_WV_Post_Process(
6111 p_delivery_detail_id => p_detail_id2,
6112 p_diff_gross_wt => l_del_id_for_container2.gross_weight,
6113 p_diff_net_wt => l_del_id_for_container2.net_weight,
6114 p_diff_volume => l_del_id_for_container2.volume,
6115 p_diff_fill_volume => l_del_id_for_container2.volume,
6116 x_return_status => l_return_status);
6117
6118 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6119 --
6120 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6121 WSH_UTIL_CORE.Add_Message(x_return_status);
6122 IF l_debug_on THEN
6123 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6124 WSH_DEBUG_SV.pop(l_module_name);
6125 END IF;
6126 return;
6127 END IF;
6128
6129 /* H projects: pricing integration csun , adding delivery */
6130 m := m+1;
6131 l_del_tab(m) := l_del_id_for_container1.delivery_id;
6132 END IF;
6133
6134 ELSIF (l_del_id_FOR_container2.delivery_id IS NOT NULL) THEN
6135
6136 /* Bug 1571143 ,Combining the 2 cursors */
6137 -- K LPN CONV. rv
6138 -- Based on assumption that we are using wsh_delivery_assignments_v,
6139 -- delivery and its contents will belong to same organization.
6140 -- Similarly, container and its contents will belong to same organization.
6141 -- Hence, we are checking for WMS org or non-WMS org. at the
6142 -- parent level (i.e. delivery/container)
6143 -- rather than at line-level for performance reasons.
6144
6145 -- If this assumptions were to be violated in anyway
6146 -- i.e Query was changed to refer to base table wsh_delivery_assignments instead of
6147 -- wsh_delivery_assignments_v
6148 -- or
6149 -- if existing query were to somehow return/fetch records where
6150 -- delivery and its contents may belong to diff. org.
6151 -- container and its contents may belong to diff. org.
6152 -- then
6153 -- Calls to check_wms_org needs to be re-adjusted at
6154 OPEN c_inside_outside_of_container(p_detail_id1);
6155 FETCH c_inside_outside_of_container bulk collect into
6156 l_sync_tmp_recTbl.delivery_detail_id_tbl,
6157 l_sync_tmp_recTbl.parent_detail_id_tbl,
6158 l_sync_tmp_recTbl.delivery_id_tbl;
6159
6160 CLOSE c_inside_outside_of_container;
6161 IF (l_sync_tmp_recTbl.delivery_detail_id_tbl.count > 0 ) THEN
6162 --{
6163 --
6164 l_sync_tmp_recTbl.operation_type_tbl(1) := 'PRIOR';
6165 l_operation_type := 'PRIOR';
6166 --
6167 --
6168 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6169 AND nvl(l_del_id_FOR_container2.line_direction,'O') IN ('O', 'IO')
6170 AND
6171 (
6172 (WSH_WMS_LPN_GRP.GK_WMS_ASSIGN_DLVY and l_wms_org = 'Y')
6173 OR
6174 (WSH_WMS_LPN_GRP.GK_INV_ASSIGN_DLVY and l_wms_org = 'N')
6175 )
6176 THEN
6177 --{
6178 --
6179 IF l_debug_on THEN
6180 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
6181 END IF;
6182 --
6183 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
6184 (
6185 p_sync_tmp_recTbl => l_sync_tmp_recTbl,
6186 x_return_status => l_return_status,
6187 p_operation_type => l_operation_type
6188 );
6189 --
6190 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6191 --
6192 x_return_status := l_return_status;
6193 --
6194 IF l_debug_on THEN
6195 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6196 WSH_DEBUG_SV.pop(l_module_name);
6197 END IF;
6198 --
6199 return;
6200 --
6201 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6202 --
6203 l_num_warnings := l_num_warnings + 1;
6204 --
6205 END IF;
6206 --
6207 --}
6208 END IF;
6209 --
6210
6211 FORALL i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last
6212 UPDATE wsh_delivery_assignments_v
6213 SET delivery_id = l_del_id_for_container2.delivery_id,
6214 last_update_date = SYSDATE,
6215 last_updated_by = FND_GLOBAL.USER_ID,
6216 last_update_login = FND_GLOBAL.LOGIN_ID
6217 WHERE delivery_detail_id = l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6218
6219 -- OTM R12 : assign delivery detail
6220 IF (l_assign_update AND
6221 l_gc3_is_installed = 'Y' AND
6222 nvl(l_del_id_for_container2.ignore_for_planning, 'N') = 'N') THEN
6223
6224 l_tms_interface_flag := NULL;
6225
6226 Post_Otm_Assign_Del_Detail
6227 (p_delivery_id => l_del_id_for_container2.delivery_id,
6228 p_delivery_was_empty => l_delivery_was_empty,
6229 p_tms_interface_flag => l_tms_interface_flag,
6230 p_gross_weight => l_gross_weight1, --using the gross weight of container1
6231 x_return_status => l_return_status);
6232
6233 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6234 IF l_debug_on THEN
6235 WSH_DEBUG_SV.log(l_module_name,'error from Post_Otm_Assign_Del_Detail');
6236 END IF;
6237 raise FND_API.G_EXC_ERROR;
6238 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6239 l_num_warnings := l_num_warnings + 1;
6240 END IF;
6241 END IF;
6242 -- End of OTM R12 : assign delivery detail
6243
6244
6245 FOR i in l_sync_tmp_recTbl.delivery_detail_id_tbl.first..l_sync_tmp_recTbl.delivery_detail_id_tbl.last LOOP
6246 l_mdc_detail_tab(i) := l_sync_tmp_recTbl.delivery_detail_id_tbl(i);
6247 END LOOP;
6248 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
6249 p_detail_id_tab => l_mdc_detail_tab,
6250 x_return_status => x_return_status);
6251 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6252 IF l_debug_on THEN
6253 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6254 WSH_DEBUG_SV.pop(l_module_name);
6255 END IF;
6256 return;
6257 END IF;
6258 l_mdc_detail_tab.delete;
6259 l_sync_tmp_recTbl.delivery_detail_id_tbl.delete;
6260 l_sync_tmp_recTbl.parent_detail_id_tbl.delete;
6261 l_sync_tmp_recTbl.delivery_id_tbl.delete;
6262 l_sync_tmp_recTbl.operation_type_tbl.delete;
6263 --}
6264 END IF;
6265 -- K LPN CONV. rv
6266 /* H projects: pricing integration csun , adding delivery */
6267 m := m+1;
6268 l_del_tab(m) := l_del_id_FOR_container2.delivery_id;
6269 END IF;
6270
6271
6272 --
6273 -- K LPN CONV. rv
6274 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6275 AND nvl(l_del_id_FOR_container2.line_direction,'O') IN ('O', 'IO')
6276 AND
6277 (
6278 (WSH_WMS_LPN_GRP.GK_WMS_PACK and l_wms_org = 'Y')
6279 OR
6280 (WSH_WMS_LPN_GRP.GK_INV_PACK and l_wms_org = 'N')
6281 )
6282 THEN
6283 --{
6284
6285 l_sync_tmp_rec.delivery_detail_id := p_detail_id1;
6286 l_sync_tmp_rec.parent_delivery_detail_id := l_del_id_FOR_container1.parent_delivery_detail_id;
6287 l_sync_tmp_rec.delivery_id := l_del_id_FOR_container1.delivery_id;
6288 l_sync_tmp_rec.operation_type := 'PRIOR';
6289 --
6290 IF l_debug_on THEN
6291 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
6292 END IF;
6293 --
6294 WSH_WMS_SYNC_TMP_PKG.MERGE
6295 (
6296 p_sync_tmp_rec => l_sync_tmp_rec,
6297 x_return_status => l_return_status
6298 );
6299 --
6300 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6301 --
6302 x_return_status := l_return_status;
6303 --
6304 IF l_debug_on THEN
6305 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6306 WSH_DEBUG_SV.pop(l_module_name);
6307 END IF;
6308 --
6309 return;
6310 --
6311 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6312 --
6313 l_num_warnings := l_num_warnings + 1;
6314 --
6315 END IF;
6316 --
6317
6318 --}
6319 END IF;
6320 -- K LPN CONV. rv
6321 --
6322 UPDATE wsh_delivery_assignments_v
6323 SET parent_delivery_detail_id = p_detail_id2,
6324 last_update_date = SYSDATE,
6325 last_updated_by = FND_GLOBAL.USER_ID,
6326 last_update_login = FND_GLOBAL.LOGIN_ID
6327 WHERE delivery_detail_id = p_detail_id1;
6328 l_mdc_detail_tab(1) := p_detail_id1;
6329 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
6330 p_detail_id_tab => l_mdc_detail_tab,
6331 x_return_status => x_return_status);
6332
6333 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6334 IF l_debug_on THEN
6335 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6336 WSH_DEBUG_SV.pop(l_module_name);
6337 END IF;
6338 return;
6339 END IF;
6340
6341 -- K LPN CONV. rv
6342 IF NOT( l_wms_org = 'Y' AND nvl(wsh_wms_lpn_grp.g_caller,'WSH') like 'WMS%')
6343 THEN
6344 --{
6345 -- J: W/V Changes
6346 IF l_debug_on THEN
6347 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6348 END IF;
6349 WSH_WV_UTILS.DD_WV_Post_Process(
6350 p_delivery_detail_id => p_detail_id1,
6351 p_diff_gross_wt => l_del_id_for_container1.gross_weight,
6352 p_diff_net_wt => l_del_id_for_container1.net_weight,
6353 p_diff_volume => l_del_id_for_container1.volume,
6354 p_diff_fill_volume => l_del_id_for_container1.volume,
6355 x_return_status => l_return_status);
6356
6357 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6358 --
6359 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6360 WSH_UTIL_CORE.Add_Message(x_return_status);
6361 IF l_debug_on THEN
6362 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6363 WSH_DEBUG_SV.pop(l_module_name);
6364 END IF;
6365 return;
6366 END IF;
6367 --}
6368 END IF;
6369 -- K LPN CONV. rv
6370
6371
6372 /*
6373 -- bug 1336858 fix: don't allow the user to pack a container in itself
6374 -- or create a loop of containers packed inside each other.
6375 -- We need to check if this assignment now creates a loop
6376 declare
6377 i NUMBER := 0;
6378 begin
6379
6380 select container_name into detail_cont_name
6381 from wsh_delivery_details where delivery_detail_id = p_detail_id1;
6382 if SQL%NOTFOUND then
6383 detail_cont_name := '(' || p_detail_id1 || ')';
6384 end if;
6385
6386 IF l_debug_on THEN
6387 WSH_DEBUG_SV.log(l_module_name,'detail_cont_name',
6388 detail_cont_name);
6389 END IF;
6390
6391 select container_name into parent_cont_name
6392 from wsh_delivery_details where delivery_detail_id = p_detail_id2;
6393 if SQL%NOTFOUND then
6394 detail_cont_name := '(' || p_detail_id2 || ')';
6395 end if;
6396 IF l_debug_on THEN
6397 WSH_DEBUG_SV.log(l_module_name,'parent_cont_name',
6398 parent_cont_name);
6399 END IF;
6400
6401 for c IN check_loop(p_detail_id1) loop
6402 i := i + 1; -- do nothing...
6403 end loop;
6404
6405 exception
6406 WHEN others THEN
6407 rollback to before_cont_assignment;
6408 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6409 fnd_message.SET_name('WSH', 'WSH_CONT_LOOP_NO_PACK');
6410 fnd_message.set_token('DETAIL_CONTAINER', detail_cont_name);
6411 fnd_message.set_token('PARENT_CONTAINER', parent_cont_name);
6412 wsh_util_core.add_message(x_return_status,l_module_name);
6413 --
6414 IF l_debug_on THEN
6415 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected Error has occured. Oracle Err Mesg is'||SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6416 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION1 : OTHERS');
6417 END IF;
6418 --
6419 return;
6420 end;
6421 -- end of check for assignment loop
6422 */
6423
6424 IF l_del_tab.count > 0 THEN
6425 /* H integration: Pricing integration csun
6426 when plan a delivery
6427 */
6428 --
6429 IF l_debug_on THEN
6430 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
6431 WSH_DEBUG_SV.log(l_module_name,'Count of l_del_tab',l_del_tab.count);
6432 END IF;
6433 --
6434 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
6435 p_entity_type => 'DELIVERY',
6436 p_entity_ids => l_del_tab,
6437 x_return_status => l_return_status);
6438 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6439 raise mark_reprice_error;
6440 END IF;
6441 END IF;
6442
6443 -- LPN CONV. rv
6444 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6445 --
6446 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6447 --
6448 ELSE
6449 --
6450 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6451 --
6452 END IF;
6453 -- LPN CONV. rv
6454
6455
6456 --
6457 IF l_debug_on THEN
6458 WSH_DEBUG_SV.pop(l_module_name);
6459 END IF;
6460 --
6461 exception
6462
6463 -- OTM R12 : assign delivery detail
6464 WHEN FND_API.G_EXC_ERROR then
6465 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6466 --
6467 IF l_debug_on THEN
6468 WSH_DEBUG_SV.pop(l_module_name);
6469 END IF;
6470 --
6471 RETURN;
6472 -- End of OTM R12 : assign delivery detail
6473
6474 WHEN mark_reprice_error THEN
6475 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
6476 x_return_status := l_return_status;
6477 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
6478 --
6479 IF l_debug_on THEN
6480 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6481 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
6482 END IF;
6483 --
6484 WHEN others THEN
6485 if c_del_id_for_cont_or_detail%ISOPEN THEN
6486 close c_del_id_for_cont_or_detail;
6487 end if;
6488 if c_del_id_for_cont_or_detail%ISOPEN THEN
6489 close c_del_id_for_cont_or_detail;
6490 end if;
6491 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6492 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_CONT_TO_CONT',l_module_name);
6493 --
6494 IF l_debug_on THEN
6495 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6496 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6497 END IF;
6498 --
6499 END Assign_Cont_To_Cont;
6500
6501 -- THIS API IS OBSOLETED.
6502 --
6503 --Procedure: Unassign_Cont_From_Cont
6504 --Parameters: p_detail_id,
6505 -- x_return_status
6506 --Desription: Unassign a container FROM another container
6507 -- the assumption here IS that you are take the container
6508 -- out of the immediate parent container ;
6509 -- only need to null out the parent_detail_id.
6510 -- if containers are assigned to any delivery, the assignment
6511 -- will remain
6512
6513 PROCEDURE Unassign_Cont_FROM_Cont(
6514 p_detail_id IN NUMBER,
6515 x_return_status OUT NOCOPY VARCHAR2)
6516 IS
6517
6518 l_del_rec C_DEL_ID_FOR_CONT_OR_DETAIL%ROWTYPE;
6519 l_return_status VARCHAR2(1);
6520 -- J: W/V Changes
6521 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
6522 l_cont_fill_pc NUMBER;
6523 e_abort exception;
6524
6525 --
6526 l_debug_on BOOLEAN;
6527 --
6528 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_CONT_FROM_CONT';
6529 --
6530 BEGIN
6531
6532 --
6533 --
6534 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6535 --
6536 --
6537 END Unassign_Cont_from_Cont;
6538
6539
6540
6541
6542 --
6543 --Procedure: Unassign_detail_from_Delivery
6544 --Parameters: p_detail_id,
6545 -- x_return_status
6546 --Desription: Unassigns a detail from a delivery
6547
6548 PROCEDURE Unassign_Detail_from_Delivery(
6549 p_detail_id IN NUMBER
6550 , x_return_status OUT NOCOPY VARCHAR2
6551 , p_validate_flag IN VARCHAR2,
6552 p_action_prms IN WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type -- J-IB-NPARIKH
6553 )
6554
6555 IS
6556 detail_not_assigned exception;
6557 check_ship_SET_failed exception;
6558 check_smc_failed exception;
6559 del_not_updatable exception;
6560 l_cost_count number;
6561 l_return_status varchar2(30);
6562 l_shp_SET BOOLEAN;
6563 l_smc BOOLEAN;
6564 l_packed number;
6565 l_dummy_record number;
6566 --added for Bug 2209035
6567 CURSOR c_delivery1(p_del_id number)
6568 IS
6569 SELECT status_code, planned_flag,name,
6570 nvl(shipment_direction,'O') shipment_direction, -- J-IB-NPARIKH
6571 ignore_for_planning -- OTM R12 : unassign delivery detail
6572 FROM wsh_new_deliveries
6573 WHERE delivery_id = p_del_id;
6574
6575 l_del1 c_delivery1%ROWTYPE;
6576
6577 l_shipping_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
6578 get_shipping_param_err EXCEPTION;
6579 adjust_parent_wv_err EXCEPTION;
6580
6581 CURSOR c_assign_rec
6582 IS
6583 SELECT wda.delivery_id, wda.parent_delivery_detail_id,
6584 wdd.organization_id,
6585 wdd.weight_uom_code,
6586 wdd.volume_uom_code,
6587 wdd.inventory_item_id
6588 FROM wsh_delivery_assignments_v wda,
6589 wsh_delivery_details wdd
6590 WHERE wda.delivery_detail_id = p_detail_id
6591 and wdd.delivery_detail_id = wda.delivery_detail_id
6592 and ((wda.delivery_id IS not null) or (wda.parent_delivery_detail_id IS not null));
6593
6594 l_assign c_assign_rec%ROWTYPE;
6595 l_mdc_detail_tab wsh_util_core.id_tab_type;
6596 /** We just need a Warning when ever we Unassign a Detail from a Delivery and
6597 if that Detail is part of a Ship Set */
6598 l_delivery_detail_id NUMBER;
6599 invalid_detail exception;
6600 -- Update Cartonization if released warehouse and WMS org.
6601
6602 update_mol_carton_group_error exception;
6603
6604 cursor get_mo_line_id (p_del_det_id IN NUMBER) is
6605 select move_order_line_id, organization_id
6606 from wsh_delivery_details
6607 where delivery_detail_id = p_del_det_id
6608 and released_status = 'S';
6609
6610 cursor c_grouping_id is
6611 select wsh_delivery_group_s.nextval from dual;
6612
6613 l_msg_count NUMBER;
6614 l_msg_data VARCHAR2(4000);
6615 l_det_org NUMBER;
6616 l_mo_line_id NUMBER;
6617 l_carton_grouping_id NUMBER;
6618
6619 CURSOR c_all_details_below IS
6620 SELECT delivery_detail_id,
6621 parent_delivery_detail_id, -- LPN CONV. rv
6622 delivery_id -- LPN CONV. rv
6623 FROM wsh_delivery_assignments_v
6624 START WITH delivery_detail_id = p_detail_id
6625 CONNECT BY prior delivery_detail_id = parent_delivery_detail_id;
6626
6627 -- J: W/V Changes
6628 l_detail_status VARCHAR2(1);
6629 l_gross_wt NUMBER;
6630 l_net_wt NUMBER;
6631 l_vol NUMBER;
6632 l_container_flag VARCHAR2(1);
6633 l_delivery_id NUMBER;
6634
6635 l_dd_id WSH_UTIL_CORE.Id_Tab_Type;
6636 l_del_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6637 l_parent_dd_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6638 l_line_dir_tbl WSH_GLBL_VAR_STRCT_GRP.v3_Tbl_Type; -- LPN CONV. rv
6639 l_cnt_flag_tbl WSH_GLBL_VAR_STRCT_GRP.v3_Tbl_Type; -- LPN CONV. rv
6640 l_det_org_id_tbl WSH_UTIL_CORE.Id_Tab_Type; -- LPN CONV. rv
6641 i BINARY_INTEGER := 0;
6642 j BINARY_INTEGER :=0;
6643
6644 l_dummy_del_det_id NUMBER;
6645 l_del_det_id NUMBER;
6646
6647 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
6648 l_status WSH_LOOKUPS.meaning%TYPE;
6649
6650 CURSOR get_lookup (l_code VARCHAR2) IS
6651 SELECT meaning
6652 FROM wsh_lookups
6653 WHERE lookup_type = 'DELIVERY_STATUS'
6654 AND lookup_code = l_code;
6655
6656
6657 mark_reprice_error EXCEPTION;
6658 remove_FC_error EXCEPTION;
6659 l_detail_is_empty_cont VARCHAR2(1);
6660
6661 l_ib_upd_flag VARCHAR2(1);
6662 l_rel_status VARCHAR2(32767);
6663
6664 l_null_delivery_id NUMBER; -- Bugfix 3768823
6665
6666 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
6667 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
6668
6669 -- K LPN CONV. rv
6670 l_wms_org VARCHAR2(10) := 'N';
6671 l_loop_wms_org VARCHAR2(10) := 'N';
6672 l_sync_tmp_rec wsh_glbl_var_strct_grp.sync_tmp_rec_type;
6673 l_line_dir VARCHAR2(10);
6674 l_num_warnings NUMBER := 0;
6675
6676 cursor l_parent_cnt_csr (p_cnt_inst_id IN NUMBER) is
6677 select organization_id,
6678 nvl(line_direction,'O')
6679 from wsh_delivery_details
6680 where delivery_detail_id = p_cnt_inst_id
6681 and container_flag = 'Y'
6682 and source_code = 'WSH';
6683
6684 l_parent_cnt_orgn_id NUMBER;
6685 l_parent_cnt_line_dir VARCHAR2(10);
6686 -- K LPN CONV. rv
6687 --
6688
6689 -- OTM R12 : unassign delivery detail
6690 l_interface_flag_tab WSH_UTIL_CORE.COLUMN_TAB_TYPE;
6691 l_delivery_id_tab WSH_UTIL_CORE.ID_TAB_TYPE;
6692 l_is_delivery_empty VARCHAR2(1);
6693 l_gc3_is_installed VARCHAR2(1);
6694 l_call_update VARCHAR2(1);
6695 l_gross_weight WSH_DELIVERY_DETAILS.GROSS_WEIGHT%TYPE;
6696 l_gross_weight_tbl WSH_UTIL_CORE.ID_TAB_TYPE;
6697 -- End of OTM R12 : unassign delivery detail
6698
6699 l_debug_on BOOLEAN;
6700 --
6701 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_DELIVERY';
6702 --
6703 BEGIN
6704
6705 /*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*/
6706
6707 --
6708 --
6709 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6710 --
6711 IF l_debug_on IS NULL
6712 THEN
6713 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6714 END IF;
6715 --
6716 IF l_debug_on THEN
6717 WSH_DEBUG_SV.push(l_module_name);
6718 --
6719 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
6720 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
6721 WSH_DEBUG_SV.log(l_module_name,'p_action_prms.caller',p_action_prms.caller);
6722 END IF;
6723 --
6724 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
6725 -- OTM R12
6726 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED;
6727
6728 IF (l_gc3_is_installed IS NULL) THEN
6729 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED;
6730 END IF;
6731 -- End of OTM R12
6732
6733 SAVEPOINT before_unassign;
6734
6735 OPEN c_assign_rec;
6736 FETCH c_assign_rec into l_assign;
6737 IF ((c_assign_rec%NOTFOUND) OR (l_assign.delivery_id IS null)) THEN
6738 CLOSE c_assign_rec;
6739 RAISE DETAIL_NOT_ASSIGNED ;
6740
6741 END IF;
6742 CLOSE c_assign_rec;
6743
6744
6745
6746 OPEN c_delivery1(l_assign.delivery_id);
6747 FETCH c_delivery1 into l_del1;
6748 CLOSE c_delivery1;
6749
6750 open g_get_detail_info(p_detail_id);
6751 fetch g_get_detail_info into l_detail_status,l_gross_wt, l_net_wt, l_vol, l_container_flag, l_delivery_id;
6752 close g_get_detail_info;
6753
6754 --
6755 -- Unassign lines is allowed during ASN/Receipt integration
6756 -- even though lines are shipped, so bypassing checks for those callers.
6757 --
6758 IF l_detail_status = 'C'
6759 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX -- J-IB-NPARIKH
6760 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_ASN_PREFIX || '%' -- J-IB-NPARIKH
6761 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
6762 THEN
6763 Raise invalid_detail;
6764 END IF;
6765
6766
6767 IF l_debug_on THEN
6768 WSH_DEBUG_SV.log(l_module_name,'l_detail_status',
6769 l_detail_status);
6770 WSH_DEBUG_SV.log(l_module_name,'l_del1.status_code',
6771 l_del1.status_code);
6772 WSH_DEBUG_SV.log(l_module_name,'l_del1.planned_flag',
6773 l_del1.planned_flag);
6774 WSH_DEBUG_SV.log(l_module_name,'l_del1.name',
6775 l_del1.name);
6776 WSH_DEBUG_SV.log(l_module_name,'l_del1.ignore_for_planning',
6777 l_del1.ignore_for_planning);
6778 WSH_DEBUG_SV.log(l_module_name,'l_assign.delivery_id',
6779 l_assign.delivery_id);
6780 WSH_DEBUG_SV.log(l_module_name,'_assign.parent_delivery_detail_id',
6781 l_assign.parent_delivery_detail_id);
6782
6783 END IF;
6784
6785 /* security rule: delivery status has to be open and not planned */
6786 /* Error */
6787 --
6788 -- Unassign lines is allowed during ASN/Receipt integration
6789 -- even though deliveries are shipped/planned, so bypassing checks
6790 -- for those callers.
6791 --
6792 IF (NVL(p_validate_flag, 'Y') = 'Y') THEN
6793 IF ((l_del1.status_code = 'CL') or
6794 (l_del1.status_code = 'IT') or
6795 (l_del1.status_code = 'CO') or
6796 (l_del1.status_code = 'SC') or --sperera 940/945
6797 (l_del1.status_code = 'SR') or
6798 (l_del1.planned_flag IN ('Y','F') AND l_detail_status <> 'D')) /*Bug7025876 added AND condition*/
6799 --Bug 3543772 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX -- J-IB-NPARIKH
6800 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_ASN_PREFIX || '%' -- J-IB-NPARIKH
6801 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
6802 THEN
6803 IF l_del1.planned_flag IN ('Y','F') THEN
6804 fnd_message.SET_name('WSH', 'WSH_DET_UNASSIGN_FIRMDEL');
6805 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_del1.name);
6806 ELSE
6807 OPEN get_lookup(l_del1.status_code);
6808 FETCH get_lookup INTO l_status;
6809 CLOSE get_lookup;
6810 fnd_message.SET_name('WSH',
6811 'WSH_DET_DEL_NOT_UPDATABLE');
6812 FND_MESSAGE.SET_TOKEN('STATUS',l_status);
6813 END IF;
6814 RAISE DEL_NOT_UPDATABLE;
6815 END IF;
6816
6817 END IF; -- validate flag IS Y
6818
6819 IF l_container_flag = 'Y' THEN --{ --bug 5100229
6820 IF l_debug_on THEN
6821 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_UTILITIES.Is_Empty',WSH_DEBUG_SV.C_PROC_LEVEL);
6822 END IF;
6823 WSH_CONTAINER_UTILITIES.Is_Empty (p_container_instance_id => p_detail_id,
6824 x_empty_flag => l_detail_is_empty_cont,
6825 x_return_status => l_return_status);
6826 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6827 Raise invalid_detail;
6828 END IF;
6829 ELSE --}{
6830 l_detail_is_empty_cont := 'E';
6831 END IF; --}
6832
6833 /* H projects: pricing integration csun */
6834 l_del_tab.delete;
6835 l_del_tab(1) := l_assign.delivery_id;
6836
6837 --
6838 IF l_debug_on THEN
6839 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
6840 END IF;
6841 --
6842 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
6843 p_entity_type => 'DELIVERY',
6844 p_entity_ids => l_del_tab,
6845 x_return_status => l_return_status);
6846 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS AND
6847 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6848 RAISE mark_reprice_error;
6849 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6850 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6851 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6852 IF l_debug_on THEN
6853 WSH_DEBUG_SV.log(l_module_name,'Mark_Reprice_Required completed with warnings.');
6854 END IF;
6855
6856 END IF;
6857 END IF;
6858
6859
6860 -- J: W/V Changes
6861 -- Decrement the parent W/V by DD W/V
6862 IF l_debug_on THEN
6863 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
6864 END IF;
6865 WSH_WV_UTILS.DD_WV_Post_Process(
6866 p_delivery_detail_id => p_detail_id,
6867 p_diff_gross_wt => -1 * l_gross_wt,
6868 p_diff_net_wt => -1 * l_net_wt,
6869 p_diff_volume => -1 * l_vol,
6870 p_diff_fill_volume => -1 * l_vol,
6871 p_check_for_empty => 'Y',
6872 x_return_status => l_return_status);
6873
6874 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6875 --
6876 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6877 WSH_UTIL_CORE.Add_Message(x_return_status);
6878 IF l_debug_on THEN
6879 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
6880 WSH_DEBUG_SV.pop(l_module_name);
6881 END IF;
6882 return;
6883 END IF;
6884
6885 -- OTM R12 : unassign delivery detail
6886 -- l_gross_weight <> 0 means that any of the unassigned detail has
6887 -- gross_weight <> 0, which will be used later
6888 IF (l_gc3_is_installed = 'Y' AND
6889 NVL(l_del1.ignore_for_planning, 'N') = 'N') THEN
6890 l_gross_weight := 0;
6891 END IF;
6892 -- End of OTM R12 : unassign delivery detail
6893
6894 --loop thru each lower detail and unassign from del
6895 OPEN c_all_details_below;
6896 --for locking all details
6897 LOOP
6898 -- OTM R12 : unassign delivery detail, legacy issue
6899 -- l_del_id_tbl and l_parent_dd_id_tbl need to be switched
6900 FETCH c_all_details_below into l_dd_id(i), l_parent_dd_id_tbl(i), l_del_id_tbl(i);
6901 EXIT WHEN c_all_details_below%notfound;
6902 SELECT delivery_detail_id, nvl(line_direction, 'O'), container_flag,
6903 organization_id,
6904 gross_weight -- OTM R12 : unassign delivery detail
6905 INTO l_dummy_del_det_id, l_line_dir_tbl(i), l_cnt_flag_tbl(i),
6906 l_det_org_id_tbl(i),
6907 l_gross_weight_tbl(i) -- OTM R12 : unassign delivery detail
6908 FROM wsh_delivery_details
6909 WHERE delivery_detail_id=l_dd_id(i)
6910 FOR UPDATE NOWAIT;
6911
6912 -- OTM R12 : unassign delivery detail
6913 IF (l_gc3_is_installed = 'Y' AND
6914 NVL(l_del1.ignore_for_planning, 'N') = 'N' AND
6915 l_gross_weight = 0) THEN
6916 l_gross_weight := l_gross_weight + NVL(l_gross_weight_tbl(i),0);
6917 END IF;
6918 -- End of OTM R12 : unassign delivery detail
6919
6920 IF l_debug_on THEN
6921 WSH_DEBUG_SV.log(l_module_name,'l_dd_id',l_dd_id(i));
6922 -- OTM R12 : unassign delivery detail
6923 WSH_DEBUG_SV.log(l_module_name,'l_del_id',l_del_id_tbl(i));
6924 WSH_DEBUG_SV.log(l_module_name,'l_gross_weight',l_gross_weight_tbl(i));
6925 -- End of OTM R12 : unassign delivery detail
6926 END IF;
6927 i := i+1;
6928 END LOOP;
6929 CLOSE c_all_details_below;
6930
6931 l_null_delivery_id := null; --bugfix 3768823
6932 FOR j IN 0..(l_dd_id.COUNT-1) LOOP
6933 --
6934 -- K LPN CONV. rv
6935 --
6936 l_loop_wms_org := wsh_util_validate.check_wms_org(l_det_org_id_tbl(j));
6937 --
6938 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
6939 AND l_line_dir_tbl(j) IN ('O', 'IO')
6940 AND l_cnt_flag_tbl(j) = 'Y'
6941 AND
6942 (
6943 (WSH_WMS_LPN_GRP.GK_WMS_UNASSIGN_DLVY and l_loop_wms_org = 'Y')
6944 OR
6945 (WSH_WMS_LPN_GRP.GK_INV_UNASSIGN_DLVY and l_loop_wms_org = 'N')
6946 )
6947 THEN
6948 --{
6949 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
6950 l_sync_tmp_rec.parent_delivery_detail_id := l_parent_dd_id_tbl(j);
6951 l_sync_tmp_rec.delivery_id := l_del_id_tbl(j);
6952 l_sync_tmp_rec.operation_type := 'PRIOR';
6953 --
6954 IF l_debug_on THEN
6955 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
6956 END IF;
6957 --
6958 WSH_WMS_SYNC_TMP_PKG.MERGE
6959 (
6960 p_sync_tmp_rec => l_sync_tmp_rec,
6961 x_return_status => l_return_status
6962 );
6963 --
6964 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
6965 --
6966 x_return_status := l_return_status;
6967 --
6968 IF l_debug_on THEN
6969 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
6970 WSH_DEBUG_SV.pop(l_module_name);
6971 END IF;
6972 --
6973 return;
6974 --
6975 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6976 --
6977 l_num_warnings := l_num_warnings + 1;
6978 --
6979 END IF;
6980 --
6981 --}
6982 END IF;
6983 -- K LPN CONV. rv
6984 --
6985 UPDATE wsh_delivery_assignments_v
6986 SET delivery_id = l_null_delivery_id, --bugfix 3768823
6987 last_update_date = SYSDATE,
6988 last_updated_by = FND_GLOBAL.USER_ID,
6989 last_update_login = FND_GLOBAL.LOGIN_ID
6990 WHERE delivery_detail_id = l_dd_id(j);
6991
6992 -- bug 6700792: OTM Dock Door Appt Sched Proj
6993 --Upadating the loading sequence of the delivery detail to NULL while unassigning from delivery
6994 UPDATE wsh_delivery_details
6995 SET load_seq_number = NULL,
6996 last_update_date = SYSDATE,
6997 last_updated_by = FND_GLOBAL.USER_ID,
6998 last_update_login = FND_GLOBAL.LOGIN_ID
6999 WHERE delivery_detail_id = l_dd_id(j);
7000
7001 IF (SQL%NOTFOUND) THEN
7002 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7003 RAISE NO_DATA_FOUND;
7004 END IF;
7005
7006 l_mdc_detail_tab(1) := l_dd_id(j);
7007 WSH_DELIVERY_DETAILS_ACTIONS.Delete_Consol_Record(
7008 p_detail_id_tab => l_mdc_detail_tab,
7009 x_return_status => x_return_status);
7010
7011 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7012 IF l_debug_on THEN
7013 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7014 WSH_DEBUG_SV.pop(l_module_name);
7015 END IF;
7016 return;
7017 END IF;
7018
7019 IF l_debug_on THEN
7020 WSH_DEBUG_SV.log(l_module_name,'Updating for detail id',l_dd_id(j));
7021 END IF;
7022
7023
7024 -- J-IB-NPARIKH-{
7025 IF l_del1.shipment_Direction NOT IN ('O','IO')
7026 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX
7027 THEN
7028 l_ib_upd_flag := 'Y';
7029 ELSE
7030 l_ib_upd_flag := 'N';
7031 END IF;
7032 --
7033 IF l_debug_on THEN
7034 WSH_DEBUG_SV.log(l_module_name,'l_ib_upd_flag',l_ib_upd_flag);
7035 END IF;
7036 --
7037 -- J-IB-NPARIKH-}
7038
7039
7040
7041 IF l_detail_is_empty_cont ='Y' THEN
7042 --
7043 -- K LPN CONV. rv
7044 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7045 AND l_line_dir_tbl(j) IN ('O', 'IO')
7046 AND
7047 (
7048 (WSH_WMS_LPN_GRP.GK_WMS_UPD_GRP and l_loop_wms_org = 'Y')
7049 OR
7050 (WSH_WMS_LPN_GRP.GK_INV_UPD_GRP and l_loop_wms_org = 'N')
7051 )
7052 THEN
7053 --{
7054 l_sync_tmp_rec.delivery_detail_id := l_dd_id(j);
7055 l_sync_tmp_rec.operation_type := 'UPDATE';
7056 --
7057 IF l_debug_on THEN
7058 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
7059 END IF;
7060 --
7061 WSH_WMS_SYNC_TMP_PKG.MERGE
7062 (
7063 p_sync_tmp_rec => l_sync_tmp_rec,
7064 x_return_status => l_return_status
7065 );
7066 --
7067 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7068 --
7069 x_return_status := l_return_status;
7070 --
7071 IF l_debug_on THEN
7072 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7073 WSH_DEBUG_SV.pop(l_module_name);
7074 END IF;
7075 --
7076 return;
7077 --
7078 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7079 --
7080 l_num_warnings := l_num_warnings + 1;
7081 --
7082 END IF;
7083 --
7084 --}
7085 END IF;
7086 -- K LPN CONV. rv
7087 --
7088 UPDATE wsh_delivery_details
7089 SET customer_id = NULL,
7090 ship_to_location_id = NULL,
7091 intmed_ship_to_location_id = NULL,
7092 fob_code = NULL,
7093 freight_terms_code = NULL,
7094 ship_method_code = NULL,
7095 mode_of_transport = NULL,
7096 service_level = NULL,
7097 carrier_id = NULL,
7098 deliver_to_location_id = NULL,
7099 -- tracking_number = NULL, Bug# 3632485
7100 line_direction = DECODE(line_direction,'IO','O',line_direction), -- J-IB-NPARIKH
7101 last_update_date = SYSDATE,
7102 last_updated_by = FND_GLOBAL.USER_ID,
7103 last_update_login = FND_GLOBAL.LOGIN_ID
7104 WHERE delivery_detail_id = l_dd_id(j);
7105 IF (SQL%NOTFOUND) THEN
7106 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7107 RAISE NO_DATA_FOUND;
7108 END IF;
7109 --
7110
7111 END IF;
7112 IF l_ib_upd_flag ='Y' THEN
7113 UPDATE wsh_delivery_details
7114 SET ship_from_location_id = -1, -- J-IB-NPARIKH
7115 routing_req_id = NULL, -- J-IB-NPARIKH
7116 rcv_shipment_line_id = NULL, -- J-IB-NPARIKH
7117 shipped_quantity = NULL, -- J-IB-NPARIKH
7118 shipped_quantity2 = NULL, -- J-IB-NPARIKH
7119 picked_quantity = NULL, -- J-IB-NPARIKH
7120 picked_quantity2 = NULL, -- J-IB-NPARIKH
7121 received_quantity = NULL, -- J-IB-NPARIKH
7122 received_quantity2 = NULL, -- J-IB-NPARIKH
7123 returned_quantity = NULL, -- J-IB-NPARIKH
7124 returned_quantity2 = NULL, -- J-IB-NPARIKH
7125 earliest_pickup_date = NULL, -- J-IB-NPARIKH
7126 latest_pickup_date = NULL, -- J-IB-NPARIKH
7127 released_status = DECODE(nvl(requested_quantity,0),0,
7128 'D',
7129 'X'), -- J-IB-NPARIKH
7130 ignore_for_planning = 'Y', -- J-IB-NPARIKH
7131 --wv_frozen_flag = DECODE(l_ib_upd_flag,'Y','N',wv_frozen_flag), -- J-IB-NPARIKH
7132 last_update_date = SYSDATE,
7133 last_updated_by = FND_GLOBAL.USER_ID,
7134 last_update_login = FND_GLOBAL.LOGIN_ID
7135 WHERE delivery_detail_id = l_dd_id(j)
7136 returning released_status into l_rel_status;
7137 --bugfix 4530813
7138 IF (SQL%NOTFOUND) THEN
7139 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7140 RAISE NO_DATA_FOUND;
7141 END IF;
7142 IF l_debug_on THEN
7143 WSH_DEBUG_SV.log(l_module_name,'Rel Status after the update is ', l_rel_status);
7144 END IF;
7145
7146 -- released_status = DECODE(released_status,'D','D',
7147 -- nvl(shipped_quantity,picked_quantity,requested_quantity),0,'D',
7148 -- decode(p_action_prms.caller,'WSH_IB_RROQ',0,-1),requested_quantity,'D',
7149 -- 'X'), -- J-IB-NPARIKH
7150 -- DBI API needs to be called for update in released_status/requested_qty
7151 -- So cannot call for l_dd_id completely, since selected few of those are
7152 -- getting processed here.So keep the ids in a local table and call DBI API
7153 -- after the loop for l_dd_id table.
7154 l_detail_tab(l_detail_tab.count + 1) := l_dd_id(j);
7155 END IF;
7156
7157
7158 -- Update Cartonization id
7159 OPEN get_mo_line_id(l_dd_id(j));
7160 FETCH get_mo_line_id INTO l_mo_line_id, l_det_org;
7161 CLOSE get_mo_line_id;
7162
7163 IF l_mo_line_id IS NOT NULL AND
7164 (WSH_USA_INV_PVT.is_mo_type_putaway(p_move_order_line_id => l_mo_line_id)='N') AND --X-dock
7165 (WSH_UTIL_VALIDATE.Check_Wms_Org(l_det_org)='Y')
7166 THEN
7167
7168 OPEN c_grouping_id;
7169 FETCH c_grouping_id into l_carton_grouping_id;
7170 CLOSE c_grouping_id;
7171
7172 IF l_debug_on THEN
7173 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INV_MO_CANCEL_PVT.update_mol_carton_group',WSH_DEBUG_SV.C_PROC_LEVEL);
7174 END IF;
7175
7176 INV_MO_Cancel_PVT.update_mol_carton_group(
7177 x_return_status => x_return_status,
7178 x_msg_cnt => l_msg_count,
7179 x_msg_data => l_msg_data,
7180 p_line_id => l_mo_line_id,
7181 p_carton_grouping_id => l_carton_grouping_id);
7182
7183 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7184 THEN
7185
7186 RAISE update_mol_carton_group_error;
7187
7188 END IF;
7189
7190
7191 END IF; -- IF (l_mo_line_id IS NOT NULL)...
7192
7193
7194
7195 END LOOP;
7196
7197 -- OTM R12 : unassign delivery detail
7198 -- executed only once after the loop assuming that all the
7199 -- delivery details fetched from cursor c_all_details_below belong
7200 -- to the same delivery
7201 IF (l_gc3_is_installed = 'Y' AND
7202 nvl(l_del1.ignore_for_planning, 'N') = 'N') THEN
7203
7204 l_call_update := 'Y';
7205 l_delivery_id_tab(1) := l_assign.delivery_id;
7206 l_is_delivery_empty := WSH_NEW_DELIVERY_ACTIONS.IS_DELIVERY_EMPTY(l_assign.delivery_id);
7207
7208 IF (l_is_delivery_empty = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
7209 --handle the error approriately to the procedure this code is in
7210 IF l_debug_on THEN
7211 WSH_DEBUG_SV.log(l_module_name,'error from wsh_new_delivery_actions.is_delivery_empty');
7212 END IF;
7213 raise FND_API.G_EXC_ERROR;
7214 ELSIF (l_is_delivery_empty = 'Y') THEN
7215 l_interface_flag_tab(1) := WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED;
7216 ELSIF (l_is_delivery_empty = 'N') THEN
7217 IF (l_gross_weight = 0) THEN
7218 -- do not update if assign/unassign 0/NULL weight line/LPN
7219 -- to nonempty delivery
7220 l_call_update := 'N';
7221 ELSE
7222 l_interface_flag_tab(1) := NULL;
7223 --setting this flag here to null so that the
7224 --update_tms_interface_flag procedure will take care of it.
7225 END IF;
7226 END IF;
7227
7228 IF l_call_update = 'Y' THEN
7229 WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG(
7230 p_delivery_id_tab => l_delivery_id_tab,
7231 p_tms_interface_flag_tab => l_interface_flag_tab,
7232 x_return_status => l_return_status);
7233
7234 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR, WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
7235 x_return_status := l_return_status;
7236 IF l_debug_on THEN
7237 WSH_DEBUG_SV.logmsg(l_module_name,'Error in WSH_NEW_DELIVERIES_PVT.UPDATE_TMS_INTERFACE_FLAG '||l_return_status);
7238 WSH_DEBUG_SV.pop(l_module_name);
7239 END IF;
7240 RETURN;
7241 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7242 l_num_warnings := l_num_warnings + 1;
7243 END IF;
7244 END IF;
7245 END IF;
7246 -- End of OTM R12 : unassign delivery detail
7247
7248 -- Call DBI api after the loop
7249 -- DBI Project
7250 -- Update of wsh_delivery_details, call DBI API after the action.
7251 -- This API will also check for DBI Installed or not
7252 IF l_debug_on THEN
7253 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail count-',l_detail_tab.count);
7254 END IF;
7255 WSH_INTEGRATION.DBI_Update_Detail_Log
7256 (p_delivery_detail_id_tab => l_detail_tab,
7257 p_dml_type => 'UPDATE',
7258 x_return_status => l_dbi_rs);
7259
7260 IF l_debug_on THEN
7261 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7262 END IF;
7263 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7264 x_return_status := l_dbi_rs;
7265 -- just pass this return status to caller API
7266 ROLLBACK TO before_unassign;
7267 --
7268 IF l_debug_on THEN
7269 WSH_DEBUG_SV.logmsg(l_module_name,'DBI API call failed',x_return_status);
7270 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DBI API FAILED');
7271 END IF;
7272 RETURN;
7273 END IF;
7274 -- End of Code for DBI Project
7275 --
7276
7277 --also unassign from container
7278 IF (l_assign.parent_delivery_detail_id IS NOT null) THEN
7279 -- K LPN CONV. rv
7280 --
7281 open l_parent_cnt_csr(l_assign.parent_delivery_detail_id);
7282 fetch l_parent_cnt_csr into l_parent_cnt_orgn_id, l_parent_cnt_line_dir;
7283 close l_parent_cnt_csr;
7284 --
7285 IF l_debug_on THEN
7286 WSH_DEBUG_SV.log(l_module_name,' parent cnt orgn id is', l_parent_cnt_orgn_id);
7287 WSH_DEBUG_SV.log(l_module_name,' parent cnt line dir is', l_parent_cnt_line_dir);
7288 END IF;
7289 --
7290 l_wms_org := wsh_util_validate.check_wms_org(l_parent_cnt_orgn_id);
7291 --
7292 -- K LPN CONV. rv
7293 --
7294 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7295 AND nvl(l_parent_cnt_line_dir,'O') IN ('O', 'IO')
7296 AND
7297 (
7298 (WSH_WMS_LPN_GRP.GK_WMS_UNPACK and l_wms_org = 'Y')
7299 OR
7300 (WSH_WMS_LPN_GRP.GK_INV_UNPACK and l_wms_org = 'N')
7301 )
7302 THEN
7303 --{
7304 l_sync_tmp_rec.delivery_detail_id := p_detail_id;
7305 l_sync_tmp_rec.parent_delivery_detail_id := l_assign.parent_delivery_detail_id;
7306 l_sync_tmp_rec.delivery_id := l_assign.delivery_id;
7307 l_sync_tmp_rec.operation_type := 'PRIOR';
7308 --
7309 IF l_debug_on THEN
7310 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE',WSH_DEBUG_SV.C_PROC_LEVEL);
7311 END IF;
7312 --
7313 WSH_WMS_SYNC_TMP_PKG.MERGE
7314 (
7315 p_sync_tmp_rec => l_sync_tmp_rec,
7316 x_return_status => l_return_status
7317 );
7318 --
7319 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7320 --
7321 x_return_status := l_return_status;
7322 --
7323 IF l_debug_on THEN
7324 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7325 WSH_DEBUG_SV.pop(l_module_name);
7326 END IF;
7327 --
7328 return;
7329 --
7330 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7331 --
7332 l_num_warnings := l_num_warnings + 1;
7333 --
7334 END IF;
7335 --
7336 --}
7337 END IF;
7338 -- K LPN CONV. rv
7339 --
7340 UPDATE wsh_delivery_assignments_v
7341 SET parent_delivery_detail_id=NULL
7342 WHERE delivery_detail_id = p_detail_id;
7343
7344 --OTM Dock Door Appt Sched Proj
7345 --Upadating the loading sequence of the delivery detail to NULL while unassigning from delivery
7346 UPDATE wsh_delivery_details
7347 SET load_seq_number = NULL,
7348 last_update_date = SYSDATE,
7349 last_updated_by = FND_GLOBAL.USER_ID,
7350 last_update_login = FND_GLOBAL.LOGIN_ID
7351 WHERE delivery_detail_id = p_detail_id;
7352
7353 IF (SQL%NOTFOUND) THEN
7354 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7355 RAISE NO_DATA_FOUND;
7356 END IF;
7357
7358 l_mdc_detail_tab(1) := p_detail_id;
7359 WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record(
7360 p_detail_id_tab => l_mdc_detail_tab,
7361 x_return_status => x_return_status);
7362
7363 IF (x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
7364 IF l_debug_on THEN
7365 WSH_DEBUG_SV.log(l_module_name,'Return Status',l_return_status);
7366 WSH_DEBUG_SV.pop(l_module_name);
7367 END IF;
7368 return;
7369 END IF;
7370
7371 WSH_SHIPPING_PARAMS_PVT.Get(
7372 p_organization_id => l_assign.organization_id,
7373 x_param_info => l_shipping_param_info,
7374 x_return_status => l_return_status);
7375
7376
7377 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7378 THEN
7379 IF l_debug_on THEN
7380 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SHIPPING_PARAMS_PVT.Get returned '||l_return_status);
7381 END IF;
7382 RAISE get_shipping_param_err;
7383 END IF;
7384
7385
7386 IF l_shipping_param_info.PERCENT_FILL_BASIS_FLAG = 'Q' THEN
7387
7388 WSH_WV_UTILS.ADJUST_PARENT_WV(
7389 p_entity_type => 'CONTAINER',
7390 p_entity_id => l_assign.parent_delivery_detail_id,
7391 p_gross_weight => 0,
7392 p_net_weight => 0,
7393 p_volume => 0,
7394 p_filled_volume => 0,
7395 p_wt_uom_code => l_assign.weight_uom_code,
7396 p_vol_uom_code => l_assign.volume_uom_code,
7397 p_inv_item_id => l_assign.inventory_item_id,
7398 x_return_status => l_return_status);
7399
7400 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
7401 THEN
7402 IF l_debug_on THEN
7403 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.ADJUST_PARENT_WV returned '||l_return_status);
7404 END IF;
7405 RAISE adjust_parent_wv_err;
7406 END IF;
7407
7408
7409 END IF;
7410
7411 END IF;
7412
7413 /* Bug 2769639, remove FTE generated FC for the delivery detail and all the delivery details below it */
7414
7415 IF WSH_UTIL_CORE.FTE_Is_Installed = 'Y' AND l_dd_id.count > 0
7416 AND NVL(p_action_prms.caller,'!!!!') NOT LIKE '%' || WSH_UTIL_CORE.C_SPLIT_DLVY_SUFFIX
7417 THEN
7418 WSH_FREIGHT_COSTS_PVT.Remove_FTE_Freight_Costs(
7419 p_delivery_details_tab => l_dd_id,
7420 x_return_status => l_return_status) ;
7421 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS AND
7422 l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7423 raise remove_FC_error;
7424 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7425 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
7426 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7427 END IF;
7428 END IF;
7429 IF l_debug_on THEN
7430 WSH_DEBUG_SV.log(l_module_name,'Remove_FTE_Freight_Costs completed returns with status: ' ||
7431 l_return_status);
7432 END IF;
7433
7434 NULL;
7435 END IF;
7436
7437 -- LPN CONV. rv
7438 IF (l_num_warnings > 0 AND x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7439 --
7440 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7441 --
7442 ELSE
7443 --
7444 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7445 --
7446 END IF;
7447 -- LPN CONV. rv
7448
7449
7450
7451 --
7452 IF l_debug_on THEN
7453 WSH_DEBUG_SV.pop(l_module_name);
7454 END IF;
7455 --
7456 EXCEPTION
7457 WHEN mark_reprice_error THEN
7458 x_return_status := l_return_status;
7459 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
7460 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7461 ROLLBACK TO before_unassign;
7462 --
7463 IF l_debug_on THEN
7464 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7465 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
7466 END IF;
7467 --
7468 WHEN detail_not_assigned THEN
7469 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7470 fnd_message.set_name('WSH', 'WSH_DET_DETAIL_NOT_ASSIGNED');
7471 wsh_util_core.add_message(x_return_status,l_module_name);
7472 ROLLBACK TO before_unassign;
7473 --
7474 IF l_debug_on THEN
7475 WSH_DEBUG_SV.logmsg(l_module_name,'DETAIL_NOT_ASSIGNED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7476 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DETAIL_NOT_ASSIGNED');
7477 END IF;
7478 --
7479 WHEN del_not_updatable THEN
7480 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7481 wsh_util_core.add_message(x_return_status,l_module_name);
7482 ROLLBACK TO before_unassign;
7483 --
7484 IF l_debug_on THEN
7485 WSH_DEBUG_SV.logmsg(l_module_name,'DEL_NOT_UPDATABLE exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7486 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DEL_NOT_UPDATABLE');
7487 END IF;
7488 --
7489 WHEN update_mol_carton_group_error THEN
7490 fnd_message.SET_name('WSH', 'WSH_MOL_CARTON_GROUP_ERROR');
7491 x_return_status := l_return_status;
7492 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7493
7494 --
7495 IF l_debug_on THEN
7496 WSH_DEBUG_SV.logmsg(l_module_name,'update_mol_carton_group_error exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7497 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:update_mol_carton_group_error');
7498 END IF;
7499
7500 WHEN check_ship_set_failed THEN
7501 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7502
7503 --
7504 IF l_debug_on THEN
7505 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SHIP_SET_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7506 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SHIP_SET_FAILED');
7507 END IF;
7508 --
7509 WHEN check_smc_failed THEN
7510 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7511 --
7512 IF l_debug_on THEN
7513 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SMC_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7514 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SMC_FAILED');
7515 END IF;
7516 --
7517 WHEN remove_FC_error THEN
7518 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7519 --
7520 IF l_debug_on THEN
7521 WSH_DEBUG_SV.logmsg(l_module_name,'Remove_FTE_Freight_Costs failed.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7522 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REMOVE_FC_ERROR');
7523 END IF;
7524 --
7525 FND_MESSAGE.Set_Name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
7526 WSH_UTIL_CORE.add_message (x_return_status,l_module_name);
7527 ROLLBACK TO before_unassign;
7528
7529 WHEN get_shipping_param_err THEN
7530 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7531 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
7532 FND_MESSAGE.Set_Token('ORGANIZATION_CODE',
7533 wsh_util_core.get_org_name(l_assign.organization_id));
7534 wsh_util_core.add_message(x_return_status,l_module_name);
7535 ROLLBACK TO before_unassign;
7536 --
7537 IF l_debug_on THEN
7538 WSH_DEBUG_SV.logmsg(l_module_name,'Failed to get Shipping Parameters',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7539 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:GET_SHIPPING_PARAM_ERR');
7540 END IF;
7541
7542 WHEN adjust_parent_wv_err THEN
7543 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7544 FND_MESSAGE.SET_NAME('WSH','WSH_CONT_WT_VOL_FAILED');
7545 FND_MESSAGE.SET_TOKEN('CONT_NAME',WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_assign.parent_delivery_detail_id));
7546 WSH_UTIL_CORE.ADD_MESSAGE(x_return_status,l_module_name);
7547
7548 ROLLBACK TO before_unassign;
7549 --
7550 IF l_debug_on THEN
7551 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);
7552 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ADJUST_PARENT_WV_ERR');
7553 END IF;
7554
7555 WHEN others THEN
7556 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7557 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',l_module_name);
7558 ROLLBACK TO before_unassign;
7559
7560
7561 --
7562 IF l_debug_on THEN
7563 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7564 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7565 END IF;
7566 --
7567 END Unassign_Detail_FROM_Delivery;
7568
7569
7570 -------------------------------------------------------------------
7571 -- This procedure is only for backward compatibility. No one should call
7572 -- this procedure.
7573 -------------------------------------------------------------------
7574
7575 PROCEDURE Unassign_Detail_from_Delivery(
7576 p_detail_id IN NUMBER
7577 , x_return_status OUT NOCOPY VARCHAR2
7578 , p_validate_flag IN VARCHAR2)
7579
7580 IS
7581
7582 --
7583 l_debug_on BOOLEAN;
7584 --
7585 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_DETAIL_FROM_DELIVERY';
7586 --
7587 l_action_prms WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type; -- J-IB-NPARIKH
7588 BEGIN
7589
7590 /*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*/
7591
7592 --
7593 --
7594 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7595 --
7596 IF l_debug_on IS NULL
7597 THEN
7598 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7599 END IF;
7600 --
7601 IF l_debug_on THEN
7602 WSH_DEBUG_SV.push(l_module_name);
7603 --
7604 WSH_DEBUG_SV.log(l_module_name,'P_DETAIL_ID',P_DETAIL_ID);
7605 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
7606 END IF;
7607 --
7608 IF l_debug_on THEN
7609 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
7610 END IF;
7611 UNASSIGN_DETAIL_FROM_DELIVERY (p_detail_id,
7612 x_return_status,
7613 p_validate_flag,
7614 l_action_prms);
7615 --
7616 IF l_debug_on THEN
7617 WSH_DEBUG_SV.pop(l_module_name);
7618 END IF;
7619 --
7620 EXCEPTION
7621 WHEN others THEN
7622 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7623 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',l_module_name);
7624 --
7625 IF l_debug_on THEN
7626 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7627 END IF;
7628 --
7629 END Unassign_Detail_FROM_Delivery;
7630
7631
7632
7633
7634 --
7635 --Procedure: Unassign_multiple_details
7636 --Parameters: P_REC_OF_DETAIL_IDS
7637 -- P_from_delivery
7638 -- P_from_container
7639 -- x_return_status
7640 --Desription: Unasigns multiple details FROM a delivery or a container
7641 PROCEDURE Unassign_Multiple_Details(
7642 P_REC_OF_DETAIL_IDS IN WSH_UTIL_CORE.ID_TAB_TYPE
7643 , P_FROM_delivery IN VARCHAR2
7644 , P_FROM_container IN VARCHAR2
7645 , x_return_status out NOCOPY varchar2
7646 , p_validate_flag IN VARCHAR2
7647 , p_action_prms IN WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type -- J-IB-NPARIKH
7648 )
7649 IS
7650
7651 CURSOR c_multi_assign_rec(c_delivery_detail_id number)
7652 IS
7653 SELECT delivery_id, parent_delivery_detail_id
7654 FROM wsh_delivery_assignments_v
7655 WHERE delivery_detail_id = c_delivery_Detail_id
7656 AND ((delivery_id IS not null) or (parent_delivery_detail_id IS not null));
7657 l_multi_assign_rec c_multi_assign_rec%ROWTYPE;
7658
7659 CURSOR c_multi_delivery(c_del_id number)
7660 IS
7661 SELECT *
7662 FROM wsh_new_deliveries
7663 WHERE delivery_id = c_del_id;
7664 l_multi_delivery c_multi_delivery%ROWTYPE;
7665
7666 l_multi_cost_count number;
7667 l_ship_set BOOLEAN;
7668 l_smc_set BOOLEAN;
7669 l_return_status varchar2(30);
7670 check_ship_SET_failed exception;
7671 check_smc_failed exception;
7672 l_num_errors NUMBER;
7673 l_num_warnings NUMBER;
7674 /*Bug 2136603- added variables */
7675 l_gross NUMBER;
7676 l_net NUMBER;
7677 l_volume NUMBER;
7678 l_fill NUMBER;
7679 l_cont_name VARCHAR2(30);
7680 --
7681 l_dlvy_tbl WSH_UTIL_CORE.key_value_tab_type; -- J-IB-NPARIKH
7682 l_dlvy_ext_tbl WSH_UTIL_CORE.key_value_tab_type; -- J-IB-NPARIKH
7683 l_del_tab WSH_UTIL_CORE.ID_TAB_TYPE;
7684 l_index NUMBER;
7685 L_DLVY_FREIGHT_TERMS_CODE VARCHAR2(30);
7686
7687 Cursor c_empty_delivery ( p_del_id number) --Pick To POD WF : Raise PO Cancellation for empty Inbound delivery
7688 IS
7689 SELECT wnd.delivery_id, wnd.organization_id
7690 FROM wsh_new_deliveries wnd
7691 WHERE wnd.delivery_id = p_del_id and wnd.shipment_direction='I'
7692 and not exists ( SELECT wda.delivery_id
7693 FROM wsh_delivery_assignments_v wda
7694 WHERE wda.delivery_id =wnd.delivery_id );
7695 l_del_id NUMBER;
7696 l_org_id NUMBER;
7697 l_wf_rs VARCHAR2(1);
7698
7699 -- K LPN CONV. rv
7700 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
7701 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
7702 l_msg_count NUMBER;
7703 l_msg_data VARCHAR2(32767);
7704 -- K LPN CONV. rv
7705
7706 --
7707 l_debug_on BOOLEAN;
7708 --
7709 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_MULTIPLE_DETAILS';
7710 --
7711 BEGIN
7712 --
7713 --
7714 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7715 --
7716 IF l_debug_on IS NULL
7717 THEN
7718 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7719 END IF;
7720 --
7721 IF l_debug_on THEN
7722 WSH_DEBUG_SV.push(l_module_name);
7723 --
7724 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DELIVERY',P_FROM_DELIVERY);
7725 WSH_DEBUG_SV.log(l_module_name,'P_FROM_CONTAINER',P_FROM_CONTAINER);
7726 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
7727 END IF;
7728 --
7729 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7730
7731 -- initialize summary variables
7732 l_num_warnings := 0;
7733 l_num_errors := 0;
7734
7735 IF (p_from_delivery = 'Y') THEN
7736 FOR i in p_rec_of_detail_ids.FIRST .. p_rec_of_detail_ids.LAST
7737 LOOP
7738 OPEN c_multi_assign_rec(p_rec_of_detail_ids(i));
7739 FETCH c_multi_assign_rec INTO l_multi_assign_rec;
7740
7741 IF l_debug_on THEN
7742 WSH_DEBUG_SV.log(l_module_name,'p_rec_of_detail_ids',
7743 p_rec_of_detail_ids(i));
7744 END IF;
7745
7746 IF (c_multi_assign_rec%NOTFOUND) THEN
7747 l_num_warnings := l_num_warnings + 1;
7748 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7749 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
7750 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
7751 wsh_util_core.add_message(x_return_status,l_module_name);
7752 /* go ahead and process the next line */
7753 CLOSE c_multi_assign_rec;
7754 GOTO start_over_1;
7755 END IF;
7756 CLOSE c_multi_assign_rec;
7757
7758 IF (l_multi_assign_rec.delivery_id IS null) THEN
7759 l_num_warnings := l_num_warnings + 1;
7760 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7761 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
7762 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
7763 wsh_util_core.add_message(x_return_status,l_module_name);
7764 /* go ahead and process the next line */
7765 GOTO start_over_1;
7766 END IF;
7767
7768 -- J-IB-NPARIKH-{
7769 --
7770 --
7771 IF l_debug_on THEN
7772 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_Cached_value',WSH_DEBUG_SV.C_PROC_LEVEL);
7773 END IF;
7774 --
7775 -- Build a cache of uniqye delivery IDs , from which lines are being unassigned
7776 --
7777 --
7778 WSH_UTIL_CORE.get_Cached_value
7779 (
7780 p_cache_tbl => l_dlvy_tbl,
7781 p_cache_ext_tbl => l_dlvy_ext_tbl,
7782 p_key => l_multi_assign_rec.delivery_id,
7783 p_value => l_multi_assign_rec.delivery_id,
7784 p_action => 'PUT',
7785 x_return_status => l_return_status
7786 );
7787 --
7788 --
7789 wsh_util_core.api_post_call
7790 (
7791 p_return_status => l_return_status,
7792 x_num_warnings => l_num_warnings,
7793 x_num_errors => l_num_errors
7794 );
7795 --
7796 -- J-IB-NPARIKH-}
7797
7798
7799 Unassign_detail_from_delivery(
7800 p_detail_id => p_rec_of_detail_ids(i),
7801 p_validate_flag => p_validate_flag,
7802 x_return_status => l_return_status,
7803 p_action_prms => p_action_prms -- J-IB-NPARIKH
7804 );
7805 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
7806 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7807 l_num_errors := l_num_errors + 1;
7808 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7809 l_num_warnings := l_num_warnings + 1;
7810 END IF;
7811
7812
7813 <<start_over_1>>
7814 NULL;
7815 END LOOP;
7816 --
7817 --
7818 -- J-IB-NPARIKH-{
7819 --
7820 l_index := l_dlvy_tbl.FIRST;
7821 --
7822 WHILE l_index IS NOT NULL
7823 LOOP
7824 --{
7825
7826 IF NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
7827 THEN
7828 --{
7829 IF l_debug_on THEN
7830 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
7831 END IF;
7832
7833 l_del_tab(1) := l_dlvy_tbl(l_index).value;
7834 WSH_TP_RELEASE.calculate_cont_del_tpdates(
7835 p_entity => 'DLVY',
7836 p_entity_ids =>l_del_tab,
7837 x_return_status => l_return_status);
7838 --}
7839 /*CURRENTLY NOT IN USE
7840 IF ( p_action_prms.caller = WSH_UTIL_CORE.C_IB_PO_PREFIX ) -- Added for Pick to POD WF
7841 THEN --PO cancellation unassigns DD from delivery, we check if delivery gets emptied out then we raise a event
7842 OPEN c_empty_delivery( l_dlvy_tbl(l_index).value ) ;
7843 Fetch c_empty_delivery into l_del_id, l_org_id;
7844 If (c_empty_delivery%FOUND )
7845 THEN
7846 --Raise Event: Pick To Pod Workflow
7847 WSH_WF_STD.Raise_Event(
7848 p_entity_type => 'DELIVERY',
7849 p_entity_id => l_del_id,
7850 p_event => 'oracle.apps.fte.delivery.ib.pocancelled' ,
7851 p_organization_id => l_org_id,
7852 x_return_status => l_wf_rs ) ;
7853 IF l_debug_on THEN
7854 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', l_del_id );
7855 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
7856 END IF;
7857 --Done Raise Event: Pick To Pod Workflow
7858 END IF;
7859 CLOSE c_empty_delivery;
7860 END IF;
7861 */
7862 END IF;
7863
7864 --
7865 IF l_debug_on THEN
7866 WSH_DEBUG_SV.log(l_module_name,'l_dlvy_tbl(l_index).value',l_dlvy_tbl(l_index).value);
7867 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',WSH_DEBUG_SV.C_PROC_LEVEL);
7868 END IF;
7869 --
7870 WSH_NEW_DELIVERY_ACTIONS.update_freight_terms
7871 (
7872 p_delivery_id => l_dlvy_tbl(l_index).value,
7873 p_action_code => 'UNASSIGN',
7874 x_return_status => l_return_status,
7875 x_freight_terms_code => l_dlvy_freight_terms_code
7876 );
7877 --
7878 --
7879 wsh_util_core.api_post_call
7880 (
7881 p_return_status => l_return_status,
7882 x_num_warnings => l_num_warnings,
7883 x_num_errors => l_num_errors
7884 );
7885 --
7886 --
7887 l_index := l_dlvy_tbl.NEXT(l_index);
7888 --}
7889 END LOOP;
7890 --
7891 --
7892 l_index := l_dlvy_ext_tbl.FIRST;
7893 --
7894 WHILE l_index IS NOT NULL
7895 LOOP
7896 --{
7897 --
7898 IF NVL(p_action_prms.caller,'!!!!') NOT LIKE WSH_UTIL_CORE.C_IB_RECEIPT_PREFIX || '%' -- J-IB-NPARIKH
7899 THEN
7900 --{
7901
7902 IF l_debug_on THEN
7903 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
7904 END IF;
7905 l_del_tab(1) := l_dlvy_ext_tbl(l_index).value;
7906 WSH_TP_RELEASE.calculate_cont_del_tpdates(
7907 p_entity => 'DLVY',
7908 p_entity_ids =>l_del_tab,
7909 x_return_status => l_return_status);
7910 --}
7911 /*IF ( p_action_prms.caller = WSH_UTIL_CORE.C_IB_PO_PREFIX ) -- Added for Pick to POD WF
7912 THEN --PO cancellation unassigns DD from delivery, we check if delivery gets emptied out then we raise a event
7913 OPEN c_empty_delivery( l_dlvy_ext_tbl(l_index).value ) ;
7914 Fetch c_empty_delivery into l_del_id, l_org_id;
7915 If (c_empty_delivery%FOUND )
7916 THEN
7917 --Raise Event: Pick To Pod Workflow
7918 WSH_WF_STD.Raise_Event(
7919 p_entity_type => 'DELIVERY',
7920 p_entity_id => l_del_id,
7921 p_event => 'oracle.apps.fte.delivery.ib.pocancelled' ,
7922 p_organization_id => l_org_id,
7923 x_return_status => l_wf_rs ) ;
7924 IF l_debug_on THEN
7925 WSH_DEBUG_SV.log(l_module_name,'Delivery ID is ', l_del_id );
7926 WSH_DEBUG_SV.log(l_module_name,'Return Status After Calling WSH_WF_STD.Raise_Event',l_wf_rs);
7927 END IF;
7928 --Done Raise Event: Pick To Pod Workflow
7929 END IF;
7930 CLOSE c_empty_delivery;
7931 END IF;*/
7932 END IF;
7933
7934 IF l_debug_on THEN
7935 WSH_DEBUG_SV.log(l_module_name,'l_dlvy_ext_tbl(l_index).value',l_dlvy_ext_tbl(l_index).value);
7936 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',WSH_DEBUG_SV.C_PROC_LEVEL);
7937 END IF;
7938 --
7939 WSH_NEW_DELIVERY_ACTIONS.update_freight_terms
7940 (
7941 p_delivery_id => l_dlvy_ext_tbl(l_index).value,
7942 p_action_code => 'UNASSIGN',
7943 x_return_status => l_return_status,
7944 x_freight_terms_code => l_dlvy_freight_terms_code
7945 );
7946 --
7947 --
7948 wsh_util_core.api_post_call
7949 (
7950 p_return_status => l_return_status,
7951 x_num_warnings => l_num_warnings,
7952 x_num_errors => l_num_errors
7953 );
7954 --
7955 --
7956 l_index := l_dlvy_ext_tbl.NEXT(l_index);
7957 --}
7958 END LOOP;
7959 --
7960 -- J-IB-NPARIKH-}
7961
7962 END IF;
7963 IF l_debug_on THEN
7964 WSH_DEBUG_SV.log(l_module_name,'l_num_errors', l_num_errors);
7965 WSH_DEBUG_SV.log(l_module_name,'l_num_warnings', l_num_warnings);
7966 END IF;
7967
7968 IF (p_from_container = 'Y') THEN
7969 FOR i in p_rec_of_detail_ids.FIRST .. p_rec_of_detail_ids.LAST
7970 LOOP
7971 OPEN c_multi_assign_rec(p_rec_of_detail_ids(i));
7972 FETCH c_multi_assign_rec INTO l_multi_assign_rec;
7973 IF l_debug_on THEN
7974 WSH_DEBUG_SV.log(l_module_name,'p_rec_of_detail_ids'
7975 ,p_rec_of_detail_ids(i));
7976 WSH_DEBUG_SV.log(l_module_name,'l_multi_assign_rec',
7977 l_multi_assign_rec.delivery_id);
7978 END IF;
7979 IF (c_multi_assign_rec%NOTFOUND) THEN
7980 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7981 fnd_message.SET_name('WSH','WSH_DET_SPEC_DET_NOT_ASSIGNED');
7982 fnd_message.SET_token('DELIVERY_DETAIL_ID', p_rec_of_detail_ids(i));
7983 wsh_util_core.add_message(x_return_status,l_module_name);
7984 /* go ahead and process the next line */
7985 CLOSE c_multi_assign_rec;
7986 GOTO start_over_2;
7987 END IF;
7988 CLOSE c_multi_assign_rec;
7989
7990 /* Bug 2166715 - check if line was actually packed or not */
7991 IF l_multi_assign_rec.parent_delivery_detail_id IS NULL THEN l_num_warnings := l_num_warnings + 1;
7992 fnd_message.SET_name('WSH','WSH_CONT_UNASSG_NULL');
7993 wsh_util_core.add_message(x_return_status,l_module_name);
7994 END IF;
7995
7996 Unassign_detail_FROM_cont(
7997 p_detail_id => p_rec_of_detail_ids(i),
7998 p_validate_flag => p_validate_flag,
7999 x_return_status => l_return_status
8000 );
8001 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
8002 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8003 l_num_errors := l_num_errors + 1;
8004 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8005 l_num_warnings := l_num_warnings + 1;
8006
8007 END IF;
8008
8009 IF l_debug_on THEN
8010 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.calculate_cont_del_tpdates',WSH_DEBUG_SV.C_PROC_LEVEL);
8011 END IF;
8012 l_del_tab(1) := l_multi_assign_rec.parent_delivery_detail_id;
8013 WSH_TP_RELEASE.calculate_cont_del_tpdates(
8014 p_entity => 'DLVB',
8015 p_entity_ids =>l_del_tab,
8016 x_return_status => l_return_status);
8017
8018 <<start_over_2>>
8019 NULL;
8020 END LOOP;
8021 END IF;
8022 --
8023 -- K LPN CONV. rv
8024 --
8025 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8026 THEN
8027 --{
8028 IF l_debug_on THEN
8029 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);
8030 END IF;
8031
8032 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8033 (
8034 p_in_rec => l_lpn_in_sync_comm_rec,
8035 x_return_status => l_return_status,
8036 x_out_rec => l_lpn_out_sync_comm_rec
8037 );
8038 --
8039 --
8040 IF l_debug_on THEN
8041 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8042 END IF;
8043 --
8044 --
8045 WSH_UTIL_CORE.API_POST_CALL
8046 (
8047 p_return_status => l_return_status,
8048 x_num_warnings => l_num_warnings,
8049 x_num_errors => l_num_errors,
8050 p_raise_error_flag => false
8051 );
8052 --}
8053 END IF;
8054 --
8055 -- K LPN CONV. rv
8056 --
8057 --
8058 IF (l_num_errors >= p_rec_of_detail_ids.COUNT) THEN
8059 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8060 ELSIF (l_num_warnings > 0 OR l_num_errors>0) THEN
8061 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8062 END IF;
8063 IF l_debug_on THEN
8064 WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
8065 WSH_DEBUG_SV.log(l_module_name,'l_num_warnings',l_num_warnings);
8066 WSH_DEBUG_SV.log(l_module_name,'l_num_errors',l_num_errors);
8067 WSH_DEBUG_SV.pop(l_module_name);
8068 END IF;
8069
8070 EXCEPTION
8071 -- J-IB-NPARIKH-{
8072 WHEN fnd_api.g_exc_error THEN
8073 x_return_status := fnd_api.g_ret_sts_error;
8074 --
8075 -- K LPN CONV. rv
8076 --
8077 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8078 THEN
8079 --{
8080 IF l_debug_on THEN
8081 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);
8082 END IF;
8083 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8084 (
8085 p_in_rec => l_lpn_in_sync_comm_rec,
8086 x_return_status => l_return_status,
8087 x_out_rec => l_lpn_out_sync_comm_rec
8088 );
8089 --
8090 --
8091 IF l_debug_on THEN
8092 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8093 END IF;
8094 --
8095 --
8096 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8097 x_return_status := l_return_status;
8098 END IF;
8099 --
8100 --}
8101 END IF;
8102 --
8103 -- K LPN CONV. rv
8104 --
8105 --
8106 IF l_debug_on THEN
8107 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
8108 END IF;
8109 --
8110 WHEN fnd_api.g_exc_unexpected_error THEN
8111 x_return_status := fnd_api.g_ret_sts_unexp_error;
8112 --
8113 --
8114 -- K LPN CONV. rv
8115 --
8116 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8117 THEN
8118 --{
8119 IF l_debug_on THEN
8120 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);
8121 END IF;
8122
8123 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8124 (
8125 p_in_rec => l_lpn_in_sync_comm_rec,
8126 x_return_status => l_return_status,
8127 x_out_rec => l_lpn_out_sync_comm_rec
8128 );
8129 --
8130 --
8131 IF l_debug_on THEN
8132 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8133 END IF;
8134 --
8135 --
8136 --
8137 --}
8138 END IF;
8139 --
8140 -- K LPN CONV. rv
8141 --
8142 IF l_debug_on THEN
8143 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8144 END IF;
8145 --
8146
8147 -- J-IB-NPARIKH-}
8148 WHEN CHECK_SHIP_SET_FAILED THEN
8149 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8150 --
8151 --
8152 -- K LPN CONV. rv
8153 --
8154 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8155 THEN
8156 --{
8157 IF l_debug_on THEN
8158 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);
8159 END IF;
8160
8161 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8162 (
8163 p_in_rec => l_lpn_in_sync_comm_rec,
8164 x_return_status => l_return_status,
8165 x_out_rec => l_lpn_out_sync_comm_rec
8166 );
8167 --
8168 --
8169 IF l_debug_on THEN
8170 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8171 END IF;
8172 --
8173 --
8174 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8175 x_return_status := l_return_status;
8176 END IF;
8177 --
8178 --}
8179 END IF;
8180 --
8181 -- K LPN CONV. rv
8182 --
8183 IF l_debug_on THEN
8184 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SHIP_SET_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8185 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SHIP_SET_FAILED');
8186 END IF;
8187 --
8188 WHEN check_smc_failed THEN
8189 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8190 --
8191 -- K LPN CONV. rv
8192 --
8193 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8194 THEN
8195 --{
8196 IF l_debug_on THEN
8197 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);
8198 END IF;
8199
8200 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8201 (
8202 p_in_rec => l_lpn_in_sync_comm_rec,
8203 x_return_status => l_return_status,
8204 x_out_rec => l_lpn_out_sync_comm_rec
8205 );
8206 --
8207 --
8208 IF l_debug_on THEN
8209 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8210 END IF;
8211 --
8212 --
8213 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8214 x_return_status := l_return_status;
8215 END IF;
8216 --
8217 --}
8218 END IF;
8219 --
8220 -- K LPN CONV. rv
8221 --
8222 --
8223 IF l_debug_on THEN
8224 WSH_DEBUG_SV.logmsg(l_module_name,'CHECK_SMC_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8225 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHECK_SMC_FAILED');
8226 END IF;
8227 --
8228 WHEN others THEN
8229 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8230 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',l_module_name);
8231 --
8232 IF l_debug_on THEN
8233 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8234 END IF;
8235 --
8236 --
8237 -- K LPN CONV. rv
8238 --
8239 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
8240 THEN
8241 --{
8242 IF l_debug_on THEN
8243 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);
8244 END IF;
8245
8246 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
8247 (
8248 p_in_rec => l_lpn_in_sync_comm_rec,
8249 x_return_status => l_return_status,
8250 x_out_rec => l_lpn_out_sync_comm_rec
8251 );
8252 --
8253 --
8254 IF l_debug_on THEN
8255 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
8256 END IF;
8257 --
8258 --
8259 --}
8260 END IF;
8261 --
8262 -- K LPN CONV. rv
8263 --
8264
8265 --
8266 IF l_debug_on THEN
8267 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8268 END IF;
8269 --
8270 END Unassign_Multiple_Details;
8271
8272 -------------------------------------------------------------------
8273 -- This procedure is only for backward compatibility. No one should call
8274 -- this procedure.
8275 -------------------------------------------------------------------
8276
8277 PROCEDURE Unassign_Multiple_Details(
8278 P_REC_OF_DETAIL_IDS IN WSH_UTIL_CORE.ID_TAB_TYPE
8279 , P_FROM_delivery IN VARCHAR2
8280 , P_FROM_container IN VARCHAR2
8281 , x_return_status out NOCOPY varchar2
8282 , p_validate_flag IN VARCHAR2
8283 )
8284 IS
8285
8286
8287 l_debug_on BOOLEAN;
8288 --
8289 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_MULTIPLE_DETAILS';
8290 --
8291 l_action_prms WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type; -- J-IB-NPARIKH
8292 BEGIN
8293 --
8294 --
8295 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8296 --
8297 IF l_debug_on IS NULL
8298 THEN
8299 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8300 END IF;
8301 --
8302 IF l_debug_on THEN
8303 WSH_DEBUG_SV.push(l_module_name);
8304 --
8305 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DELIVERY',P_FROM_DELIVERY);
8306 WSH_DEBUG_SV.log(l_module_name,'P_FROM_CONTAINER',P_FROM_CONTAINER);
8307 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
8308 END IF;
8309 --
8310 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8311 --
8312 IF l_debug_on THEN
8313 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
8314 END IF;
8315 --
8316 UNASSIGN_MULTIPLE_DETAILS
8317 (
8318 P_REC_OF_DETAIL_IDS
8319 , P_FROM_delivery
8320 , P_FROM_container
8321 , x_return_status
8322 , p_validate_flag
8323 , l_action_prms
8324 );
8325
8326 IF l_debug_on THEN
8327 WSH_DEBUG_SV.pop(l_module_name);
8328 END IF;
8329
8330 EXCEPTION
8331 WHEN others THEN
8332 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8333 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_MULTIPLE_DETAIL',l_module_name);
8334 --
8335 IF l_debug_on THEN
8336 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8337 END IF;
8338 --
8339 END Unassign_Multiple_Details;
8340
8341 --
8342 --Procedure: Assign_multiple_details
8343 --Parameters: P_REC_OF_DETAIL_IDS
8344 -- P_delivery_id,
8345 -- P_cont_ins_id,
8346 -- x_return_status
8347 --Desription: Assings multiple details to a delivery or a container
8348
8349 PROCEDURE Assign_Multiple_Details(
8350 p_rec_of_detail_ids IN WSH_UTIL_CORE.ID_TAB_TYPE,
8351 p_delivery_id NUMBER,
8352 P_cont_ins_id number,
8353 x_return_status OUT NOCOPY varchar2)
8354 IS
8355 l_rowid varchar2(150);
8356 l_group_status varchar2(30);
8357 l_ship_method_match boolean;
8358 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_TYPE;
8359 l_cr_assg_status varchar2(30);
8360 l_delivery_assignment_id NUMBER;
8361 del_id number;
8362 cont_id number;
8363
8364
8365 CURSOR c_get_del_from_container(c_container_id number) IS
8366 SELECT delivery_id
8367 FROM wsh_delivery_assignments_v
8368 WHERE delivery_detail_id = c_container_id;
8369
8370 l_num_errors NUMBER;
8371 l_num_warnings NUMBER;
8372
8373
8374 l_scc_unassign_from_del NUMBER := 0;
8375 l_scc_unassign_from_con NUMBER := 0;
8376 l_delivery_id NUMBER := 0;
8377 l_del_tab WSH_UTIL_CORE.Id_Tab_Type;
8378 l_return_status VARCHAR2(1);
8379 m NUMBER := 0;
8380
8381
8382 mark_reprice_error EXCEPTION;
8383
8384 /* Bug 2276586 */
8385 l_delivery_id1 NUMBER;
8386 delivery_id_locked exception ;
8387 PRAGMA EXCEPTION_INIT(delivery_id_locked, -54);
8388
8389
8390
8391 l_has_lines VARCHAR2(1);
8392 l_dlvy_freight_terms_code VARCHAR2(30);
8393 --
8394 --
8395 l_debug_on BOOLEAN;
8396 --
8397 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'ASSIGN_MULTIPLE_DETAILS';
8398 --
8399 BEGIN
8400 --
8401 --
8402 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8403 --
8404 IF l_debug_on IS NULL
8405 THEN
8406 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8407 END IF;
8408 --
8409 IF l_debug_on THEN
8410 WSH_DEBUG_SV.push(l_module_name);
8411 --
8412 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8413 WSH_DEBUG_SV.log(l_module_name,'P_CONT_INS_ID',P_CONT_INS_ID);
8414 END IF;
8415 --
8416 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8417 l_del_tab.delete;
8418 l_num_errors := 0;
8419 l_num_warnings := 0;
8420
8421 IF ((p_delivery_id = -9999) AND (p_cont_ins_id = -9999 )) THEN
8422 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8423 --
8424 IF l_debug_on THEN
8425 WSH_DEBUG_SV.pop(l_module_name);
8426 END IF;
8427 --
8428 return;
8429 END IF;
8430
8431 -- Bug 2276586
8432 SELECT delivery_id, freight_Terms_code -- J-IB-NPARIKH
8433 INTO l_delivery_id1, l_dlvy_freight_Terms_code
8434 FROM wsh_new_deliveries
8435 WHERE delivery_id = p_delivery_id
8436 FOR UPDATE NOWAIT;
8437
8438 IF l_debug_on THEN
8439 WSH_DEBUG_SV.log(l_module_name,'Locking for Delivery id ',l_delivery_id1);
8440 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
8441 END IF;
8442
8443 -- J-IB-NPARIKH-{
8444 --
8445 -- Determine if delivery has any non-container lines
8446 --
8447 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
8448 (
8449 p_delivery_id => p_delivery_id
8450 );
8451 --
8452 -- J-IB-NPARIKH-}
8453
8454
8455 FOR i IN P_REC_OF_DETAIL_IDS.FIRST .. P_REC_OF_DETAIL_IDS.LAST
8456 LOOP
8457
8458 IF (p_delivery_id <> -9999) THEN
8459 /* assigning it to a delivery */
8460 --
8461 IF l_debug_on THEN
8462 WSH_DEBUG_SV.log(l_module_name,'Delivery id ',p_rec_of_detail_ids(i));
8463
8464 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_DETAIL_TO_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
8465 END IF;
8466 --
8467 wsh_delivery_details_actions.assign_detail_to_delivery(
8468 p_detail_id => P_REC_OF_DETAIL_IDS(i),
8469 p_delivery_id => p_delivery_id,
8470 x_return_status => x_return_status,
8471 x_dlvy_has_lines => l_has_lines, -- J-IB-NPARIKH
8472 x_dlvy_freight_terms_code => l_dlvy_freight_terms_code -- J-IB-NPARIKH
8473 );
8474
8475 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8476 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
8477 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8478 l_num_errors := l_num_errors + 1;
8479 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8480 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8481 l_num_warnings := l_num_warnings + 1;
8482 END IF;
8483 goto start_over;
8484 /* H project : pricing integration csun , need to mark the reprice
8485 flag if any of the delivery detail is assigned */
8486 ELSE
8487 l_scc_unassign_from_del := l_scc_unassign_from_del + 1;
8488 END IF;
8489 END IF;
8490
8491 IF (p_cont_ins_id <> -9999) THEN
8492 -- J: W/V Changes
8493 -- replaced the direct update with Assign_Detail_To_Cont API
8494 wsh_delivery_details_actions.Assign_Detail_To_Cont(
8495 p_detail_id => P_REC_OF_DETAIL_IDS(i),
8496 p_parent_detail_id => p_cont_ins_id,
8497 x_return_status => x_return_status);
8498
8499 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8500 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
8501 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8502 l_num_errors := l_num_errors + 1;
8503 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
8504 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8505 l_num_warnings := l_num_warnings + 1;
8506 END IF;
8507 goto start_over;
8508 /* H project : pricing integration csun , need to mark the reprice
8509 flag if any of the delivery detail is assigned */
8510 ELSE
8511 l_scc_unassign_from_con := l_scc_unassign_from_con + 1;
8512 END IF;
8513
8514 END IF;
8515 <<start_over>>
8516 NULL;
8517 END LOOP;
8518
8519 IF l_debug_on THEN
8520 WSH_DEBUG_SV.log(l_module_name,
8521 'l_scc_unassign_from_del',
8522 l_scc_unassign_from_del);
8523 WSH_DEBUG_SV.log(l_module_name,
8524 'l_scc_unassign_from_con',
8525 l_scc_unassign_from_con);
8526 END IF;
8527
8528 IF (l_num_errors > 0) THEN
8529 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8530 --
8531 IF l_debug_on THEN
8532 WSH_DEBUG_SV.log(l_module_name,'Ret status is error',l_num_errors);
8533 WSH_DEBUG_SV.pop(l_module_name);
8534 END IF;
8535 --
8536 return;
8537 ELSIF (l_num_warnings > 0) THEN
8538 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8539 END IF;
8540
8541
8542 /* H projects: pricing integration csun get the delivery id the container is
8543 assigned to and mark the delivery */
8544 IF l_scc_unassign_from_del > 0 THEN
8545 m := m + 1;
8546 l_del_tab(m) := p_delivery_id;
8547 END IF;
8548 IF l_scc_unassign_from_con > 0 THEN
8549 OPEN c_get_del_from_container(p_cont_ins_id) ;
8550 FETCH c_get_del_from_container INTO l_delivery_id;
8551 CLOSE c_get_del_from_container;
8552 IF l_delivery_id <> 0 and l_delivery_id IS NOT NULL THEN
8553 m := m + 1;
8554 l_del_tab(m) := l_delivery_id;
8555 END IF;
8556 END IF;
8557 IF l_del_tab.count > 0 THEN
8558 --
8559 IF l_debug_on THEN
8560 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
8561 END IF;
8562 --
8563 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
8564 p_entity_type => 'DELIVERY',
8565 p_entity_ids => l_del_tab,
8566 x_return_status => l_return_status);
8567 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
8568 raise mark_reprice_error;
8569 END IF;
8570 END IF;
8571
8572
8573 --
8574 IF l_debug_on THEN
8575 WSH_DEBUG_SV.pop(l_module_name);
8576 END IF;
8577 --
8578 exception
8579 WHEN mark_reprice_error THEN
8580 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8581 fnd_message.SET_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
8582 wsh_util_core.add_message(x_return_status,l_module_name);
8583
8584 --
8585 IF l_debug_on THEN
8586 WSH_DEBUG_SV.logmsg(l_module_name,'MARK_REPRICE_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8587 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:MARK_REPRICE_ERROR');
8588 END IF;
8589 --
8590 WHEN delivery_id_locked THEN
8591 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8592 fnd_message.SET_name('WSH', 'WSH_NO_LOCK');
8593 wsh_util_core.add_message(x_return_status,l_module_name);
8594 --
8595 IF l_debug_on THEN
8596 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Id Locked exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8597 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION : DELIVERY_ID_LOCKED');
8598 END IF;
8599 --
8600 return;
8601
8602 --
8603 IF l_debug_on THEN
8604 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY_ID_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8605 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:DELIVERY_ID_LOCKED');
8606 END IF;
8607 --
8608 WHEN others THEN
8609 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8610 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.ASSIGN_MULTIPLE_DETAILS',l_module_name);
8611
8612 --
8613 IF l_debug_on THEN
8614 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8615 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8616 END IF;
8617 --
8618 END Assign_Multiple_Details;
8619
8620
8621
8622 /*************************/
8623 /* CODE FOR AUTO PACKING */
8624 -- This API has been created to be called
8625 -- from Auto Pack Lines
8626 -- Purpose is to split a delivery line as many times
8627 -- as required by just one call , rather than calling
8628 -- Split API multiple times
8629
8630 --
8631 --Procedure:
8632 --Parameters: p_from_detail_id
8633 -- p_req_quantity
8634 -- p_new_detail_id
8635 -- x_return_status
8636 --Desription:
8637 -- Splits a delivery detail according the new requested
8638 -- quantity. The newly created the detail has the requested
8639 -- quantity as p_req_quantity and the old detail has the
8640 --
8641 -- fabdi start : PICK CONFIRM
8642 --added a new parameter called p_req_quantity2 requested quantity as requested_quantity - p_requested_quantity
8643 -- fabdi end : PICK CONFIRM
8644 -- HW BUG#:1636578 added a new parameter p_converted_flag
8645
8646 /*****************************************************
8647 SPLIT_DELIVERY_DETAILS_BULK api
8648 *****************************************************/
8649 PROCEDURE Split_Delivery_Details_Bulk (
8650 p_from_detail_id IN NUMBER,
8651 p_req_quantity IN OUT NOCOPY NUMBER,
8652 p_unassign_flag IN VARCHAR2 ,
8653 p_req_quantity2 IN NUMBER ,
8654 p_converted_flag IN VARCHAR2,
8655 p_manual_split IN VARCHAR2 ,
8656 p_num_of_split IN NUMBER , -- for empty container cases
8657 x_new_detail_id OUT NOCOPY NUMBER,
8658 x_dd_id_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type,
8659 x_return_status OUT NOCOPY VARCHAR2
8660 )
8661 IS
8662
8663 l_new_delivery_detail_id number;
8664 -- HW OPMCONV. Removed OPM variables
8665
8666 -- HW OPMCONV - Removed Format of qty2
8667 l_qty2 NUMBER;
8668 l_split_shipped_qty2 NUMBER(19,9):= NULL;
8669 -- HW BUG#:1636578 variable to calculate new qty2
8670 l_new_req_qty2 NUMBER;
8671 l_original_shipped_qty2 NUMBER(19,9):= NULL;
8672
8673
8674 l_new_req_qty NUMBER;
8675 l_new_pick_qty NUMBER;
8676
8677 l_new_pick_qty2 NUMBER;
8678
8679 l_delivery_id number;
8680 l_parent_delivery_detail_id number;
8681 assignment number;
8682 l_delivery_assignment_id number;
8683 detail_rowid VARCHAR2(30);
8684 assignment_rowid VARCHAR2(30);
8685 total number;
8686 l_cr_dt_status varchar2(30);
8687 l_cr_assg_status varchar2(30);
8688 l_output_quantity number;
8689 l_return_status varchar2(1);
8690 l_qty_return_status varchar2(30);
8691
8692 chk_decimal_qty_failed exception;
8693 quantity_over EXCEPTION;
8694 negative_qty EXCEPTION;
8695 zero_qty EXCEPTION;
8696 /* H integration: Pricing integration csun
8697 mark reprice required flag when split_delivery_details
8698 */
8699 l_entity_ids WSH_UTIL_CORE.id_tab_type;
8700 reprice_required_err EXCEPTION;
8701 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
8702 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
8703 l_split_weight number;
8704 l_split_volume number;
8705 l_split_return_status varchar2(30);
8706 l_shipped_quantity NUMBER := NULL;
8707 l_old_stage_qty NUMBER := NULL;
8708 l_ser_qty NUMBER := NULL;
8709
8710
8711 l_dd_id_tab WSH_UTIL_CORE.id_tab_type;
8712 l_num_of_split NUMBER;
8713
8714 old_delivery_detail_rec SplitDetailRecType;
8715
8716 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
8717
8718
8719 -- Bug 2637876
8720 l_original_shipped_qty NUMBER;
8721 l_split_shipped_qty NUMBER;
8722 l_serial_tab WSH_DELIVERY_DETAILS_ACTIONS.serial_tab;
8723 i NUMBER;
8724 j NUMBER;
8725 l_serial_orig_rec WSH_DELIVERY_DETAILS_ACTIONS.SplitDetailRecType;
8726 l_new_serial_rec WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
8727 l_transaction_id_tab WSH_UTIL_CORE.id_tab_type;
8728 l_serial_number WSH_DELIVERY_DETAILS.serial_number%TYPE;
8729 TYPE l_sr_no_tab IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
8730 l_serial_number_tab l_sr_no_tab;
8731 l_id1 NUMBER;
8732 l_s1 VARCHAR2(30);
8733
8734 --
8735 l_debug_on BOOLEAN;
8736 --
8737 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DELIVERY_DETAILS_BULK';
8738 --
8739 BEGIN
8740 --
8741 --
8742 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8743 --
8744 IF l_debug_on IS NULL
8745 THEN
8746 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8747 END IF;
8748 --
8749 IF l_debug_on THEN
8750 WSH_DEBUG_SV.push(l_module_name);
8751 --
8752 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DETAIL_ID',P_FROM_DETAIL_ID);
8753 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY',P_REQ_QUANTITY);
8754 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
8755 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY2',P_REQ_QUANTITY2);
8756 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
8757 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
8758 END IF;
8759 --
8760 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8761
8762 OPEN c_split_detail_info(p_from_detail_id);
8763 FETCH c_split_detail_info into old_delivery_detail_rec;
8764 CLOSE c_split_detail_info;
8765
8766 IF l_debug_on THEN
8767 WSH_DEBUG_SV.log(l_module_name,'delivery_detail_id',
8768 old_delivery_detail_rec.delivery_detail_id);
8769 WSH_DEBUG_SV.log(l_module_name,'picked_quantity',
8770 old_delivery_detail_rec.picked_quantity);
8771 WSH_DEBUG_SV.log(l_module_name,'organization_id',
8772 old_delivery_detail_rec.organization_id);
8773 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',
8774 old_delivery_detail_rec.inventory_item_id);
8775 WSH_DEBUG_SV.log(l_module_name,'requested_quantity_uom',
8776 old_delivery_detail_rec.requested_quantity_uom);
8777 END IF;
8778
8779 -- Bug 2419301 : Set oe_interfaced_flag to MISS CHAR so that create_new_detail_from_old API
8780 -- determines the value of oe_interfaced_flag for newly created dd
8781 old_delivery_detail_rec.oe_interfaced_flag:= NULL;
8782
8783
8784 -- Bug 1289812
8785 -- check if this split is valid operation
8786 IF (p_req_quantity >= NVL(old_delivery_detail_rec.picked_quantity,
8787 old_delivery_detail_rec.requested_quantity)) THEN
8788 RAISE quantity_over;
8789 END IF;
8790 -- Bug 1299636
8791 -- check if this quantity to split is positive
8792 IF (p_req_quantity = 0) THEN
8793 RAISE zero_qty;
8794 ELSIF (p_req_quantity < 0) THEN
8795 RAISE negative_qty;
8796 END IF;
8797 l_qty2 := p_req_quantity2 ;
8798
8799 /* need to validate the quantity passed meets the decimal quantity
8800 standard */
8801
8802 --Check if org is a process one or not for the current record
8803 --
8804 -- HW OPMCONV - Removed checking for process org
8805
8806 -- Patch J: Catch Weights
8807 -- Need to split the secondary quantity in proportion to the primary quantity.
8808 -- Catch weight support currently only for non-opm lines.
8809
8810 IF old_delivery_detail_rec.picked_quantity2 IS NOT NULL and p_req_quantity2 IS NULL
8811 and (NVL(old_delivery_detail_rec.picked_quantity,0) <> 0) THEN
8812
8813 l_qty2 := old_delivery_detail_rec.picked_quantity2 * (p_req_quantity/old_delivery_detail_rec.picked_quantity);
8814 l_qty2 := round(l_qty2, 5);
8815
8816 ELSE
8817
8818 l_qty2 := p_req_quantity2 ;
8819
8820 END IF;
8821
8822
8823 --
8824 IF l_debug_on THEN
8825 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_DECIMAL_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
8826 END IF;
8827 --
8828 WSH_DETAILS_VALIDATIONS.check_decimal_quantity(
8829 p_item_id => old_delivery_detail_rec.inventory_item_id,
8830 p_organization_id => old_delivery_detail_rec.organization_id,
8831 p_input_quantity => p_req_quantity,
8832 p_uom_code => old_delivery_detail_rec.requested_quantity_UOM,
8833 x_output_quantity => l_output_quantity,
8834 x_return_status => l_qty_return_status);
8835
8836 IF (l_qty_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
8837 RAISE chk_decimal_qty_failed;
8838 END IF;
8839 IF (l_output_quantity IS not NULL) THEN
8840 p_req_quantity := l_output_quantity;
8841 END IF;
8842
8843 --
8844 IF l_debug_on THEN
8845 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT_BULK AND P_REQ_QUANTITY IS '||P_REQ_QUANTITY );
8846 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT_BULK AND P_QUANTITY_TO_SPLIT2 IS '||L_QTY2 );
8847 END IF;
8848 --
8849
8850
8851
8852 -- HW 2735317. Need to branch
8853 -- HW OPMCONV - Removed branching
8854
8855 -- Fix for Bug 2637876 begins here
8856 -- to split serial numbers while auto packing
8857
8858 -- Delete the PL SQL tables
8859 l_serial_tab.delete;
8860 l_dd_id_tab.delete;
8861 l_transaction_id_tab.delete;
8862 l_serial_number_tab.delete;
8863
8864 -- Only for cases where transaction temp id is not null
8865 IF old_delivery_detail_rec.transaction_temp_id IS NOT NULL THEN
8866
8867 l_serial_orig_rec := old_delivery_detail_rec; -- use old record
8868 l_original_shipped_qty := old_delivery_detail_rec.shipped_quantity;
8869 l_split_shipped_qty := p_req_quantity;
8870
8871 j := 0;
8872
8873 FOR i IN 1..p_num_of_split
8874 LOOP
8875 -- recalculate the shipped quantity
8876 l_original_shipped_qty := l_original_shipped_qty - l_split_shipped_qty;
8877 Split_Serial_Numbers_INT(x_old_detail_rec => l_serial_orig_rec,
8878 x_new_delivery_detail_rec => l_new_serial_rec,
8879 p_old_shipped_quantity=> l_original_shipped_qty,
8880 p_new_shipped_quantity=> l_split_shipped_qty,
8881 x_return_status => l_split_return_status);
8882
8883 j := j + 1;
8884
8885 l_transaction_id_tab(j) := l_new_serial_rec.transaction_temp_id;
8886 l_serial_number_tab(j) := l_new_serial_rec.serial_number;
8887
8888 l_serial_tab(j).transaction_temp_id := l_new_serial_rec.transaction_temp_id;
8889 l_serial_tab(j).serial_number := l_new_serial_rec.serial_number;
8890 l_serial_tab(j).to_serial_number := l_new_serial_rec.to_serial_number;
8891
8892 END LOOP;
8893
8894 old_delivery_detail_rec.serial_number := l_serial_orig_rec.serial_number;
8895 old_delivery_detail_rec.transaction_temp_id := l_serial_orig_rec.transaction_temp_id;
8896
8897 IF l_debug_on THEN
8898 WSH_DEBUG_SV.log(l_module_name,'Old DD id',old_delivery_detail_rec.delivery_detail_id);
8899 WSH_DEBUG_SV.log(l_module_name,'Old serial Number',old_delivery_detail_rec.serial_number);
8900 WSH_DEBUG_SV.log(l_module_name,'Old Temp id',old_delivery_detail_rec.transaction_temp_id);
8901 WSH_DEBUG_SV.log(l_module_name,'l_transaction_id_tab.COUNT',l_transaction_id_tab.count);
8902 WSH_DEBUG_SV.log(l_module_name,'l_serial_number_tab.COUNT',l_serial_number_tab.count);
8903 WSH_DEBUG_SV.log(l_module_name,'l_serial_tab.COUNT',l_serial_tab.count);
8904 END IF;
8905
8906 END IF;
8907
8908 -- HW OPMCONV. Removed parameter l_process_flag
8909 Split_Detail_INT_Bulk(
8910 p_old_delivery_detail_rec => old_delivery_detail_rec,
8911 p_quantity_to_split => p_req_quantity,
8912 p_quantity_to_split2 => l_qty2,
8913 p_unassign_flag => p_unassign_flag,
8914 p_converted_flag => p_converted_flag,
8915 p_manual_split => p_manual_split,
8916 p_num_of_split => p_num_of_split,
8917 x_split_detail_id => x_new_detail_id,
8918 x_return_status => x_return_status,
8919 x_dd_id_tab => l_dd_id_tab
8920 );
8921
8922 -- Message will be set in split_detail_int_bulk
8923 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
8924 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
8925 ) THEN
8926 return;
8927 END IF;
8928
8929 x_dd_id_tab := l_dd_id_tab;
8930
8931 -- HW 2735317. Need to branch
8932 -- HW OPMCONV - Removed branching
8933 IF (old_delivery_detail_rec.transaction_temp_id IS NOT NULL
8934 OR old_delivery_detail_rec.serial_number IS NOT NULL) THEN
8935
8936 -- Bug 4455732 : Combining transaction_temp_id and serial_number update into single cursor
8937 -- since single quantity detail can have transaction_temp_id also.
8938 FORALL i IN 1..l_dd_id_tab.count
8939 UPDATE wsh_delivery_details
8940 SET serial_number = decode(l_serial_number_tab(i),FND_API.G_MISS_CHAR,NULL,
8941 NULL,serial_number,l_serial_number_tab(i)) ,
8942 transaction_temp_id = decode(l_transaction_id_tab(i),FND_API.G_MISS_NUM,NULL,
8943 NULL,transaction_temp_id,l_transaction_id_tab(i))
8944 WHERE delivery_detail_id = l_dd_id_tab(i);
8945
8946 END IF; -- end of transaction temp id is not null
8947
8948
8949 /* H integration: Pricing integration csun
8950 mark repirce required flag when split delivery details
8951 */
8952 l_entity_ids(1) := old_delivery_detail_rec.delivery_detail_id;
8953 --
8954 IF l_debug_on THEN
8955 WSH_DEBUG_SV.log(l_module_name,'entity id 1-',l_entity_ids(1));
8956 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
8957 END IF;
8958 --
8959 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
8960 p_entity_type => 'DELIVERY_DETAIL',
8961 p_entity_ids => l_entity_ids,
8962 x_return_status => l_return_status);
8963 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
8964 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
8965 ) THEN
8966 raise reprice_required_err;
8967 END IF;
8968
8969 --
8970 IF l_debug_on THEN
8971 WSH_DEBUG_SV.pop(l_module_name);
8972 END IF;
8973 --
8974 EXCEPTION
8975 WHEN chk_decimal_qty_failed THEN
8976 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8977 fnd_message.set_name('WSH', 'WSH_DET_DECIMAL_QTY_NOT_VALID');
8978 wsh_util_core.add_message(x_return_status,l_module_name);
8979 --
8980 IF l_debug_on THEN
8981 WSH_DEBUG_SV.logmsg(l_module_name,'CHK_DECIMAL_QTY_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8982 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHK_DECIMAL_QTY_FAILED');
8983 END IF;
8984 --
8985 WHEN quantity_over THEN
8986 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8987 fnd_message.set_name('WSH', 'WSH_DET_SPLIT_EXCEED');
8988 wsh_util_core.add_message(x_return_status,l_module_name);
8989 --
8990 IF l_debug_on THEN
8991 WSH_DEBUG_SV.logmsg(l_module_name,'QUANTITY_OVER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8992 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:QUANTITY_OVER');
8993 END IF;
8994 --
8995 WHEN zero_qty THEN
8996 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8997 fnd_message.set_name('WSH', 'WSH_NO_ZERO_NUM');
8998 wsh_util_core.add_message(x_return_status,l_module_name);
8999 --
9000 IF l_debug_on THEN
9001 WSH_DEBUG_SV.logmsg(l_module_name,'ZERO_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9002 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ZERO_QTY');
9003 END IF;
9004 --
9005 WHEN negative_qty THEN
9006 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9007 fnd_message.set_name('WSH', 'WSH_NO_NEG_NUM');
9008 wsh_util_core.add_message(x_return_status,l_module_name);
9009 --
9010 IF l_debug_on THEN
9011 WSH_DEBUG_SV.logmsg(l_module_name,'NEGATIVE_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9012 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEGATIVE_QTY');
9013 END IF;
9014 --
9015 WHEN reprice_required_err THEN
9016 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9017 fnd_message.set_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
9018 wsh_util_core.add_message(x_return_status,l_module_name);
9019 --
9020 IF l_debug_on THEN
9021 WSH_DEBUG_SV.logmsg(l_module_name,'REPRICE_REQUIRED_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9022 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REPRICE_REQUIRED_ERR');
9023 END IF;
9024 --
9025 WHEN others THEN
9026 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9027 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS_BULK',l_module_name);
9028 --
9029 IF l_debug_on THEN
9030 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9031 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9032 END IF;
9033 --
9034 END SPLIT_DELIVERY_DETAILS_BULK;
9035
9036 /*****************************************************************
9037 Description :-
9038
9039 Currently being used values of p_manual_split are
9040
9041 NULL - default, normal mode of splitting backordered quantity
9042 then shipped quantity
9043 Y - split staged quantity
9044 C - split shipped quantity then backordered quantity (from packing code)
9045 B - called from update_inventory_info for OPM's use
9046 M - called from update_inventory_info for OPM's use
9047 S - called from update_inventory_info for OPM's use
9048 U - called from update_inventory_info for OPM's use
9049
9050 *******************************************************************/
9051
9052 -- This API is called from split_delivery_details_bulk with
9053 -- new parameters and functionality of Bulk creation of records
9054
9055 /*****************************************************
9056 ----- SPLIT_DETAIL_INT_BULK api
9057 *****************************************************/
9058 -- HW OPMCONV - Removed parameter p_process_flag
9059 PROCEDURE Split_Detail_INT_bulk(
9060 p_old_delivery_detail_rec IN SplitDetailRecType,
9061 p_new_source_line_id IN NUMBER,
9062 p_quantity_to_split IN NUMBER,
9063 p_quantity_to_split2 IN NUMBER ,
9064 p_unassign_flag IN VARCHAR2 ,
9065 p_converted_flag IN VARCHAR2 ,
9066 p_manual_split IN VARCHAR2 ,
9067 p_split_sn IN VARCHAR2 ,
9068 p_num_of_split IN NUMBER, -- for empty container cases
9069 x_split_detail_id OUT NOCOPY NUMBER,
9070 x_return_status OUT NOCOPY VARCHAR2,
9071 x_dd_id_tab OUT NOCOPY WSH_UTIL_CORE.id_tab_type
9072 ) IS
9073
9074 l_new_delivery_detail_id number;
9075
9076 --HW OPMCONV - Removed OPM variables
9077
9078 -- HW OPMCONV. Removed format of 19,9
9079 l_qty2 NUMBER;
9080 -- HW OPMCONV. Removed format of 19,9
9081 l_split_shipped_qty2 NUMBER := NULL;
9082 -- HW BUG#:1636578 variable to calculate new qty2
9083 l_new_req_qty2 NUMBER;
9084 -- HW OPMCONV. Removed format of 19,9
9085 l_original_shipped_qty2 NUMBER := NULL;
9086
9087 l_new_req_qty NUMBER;
9088 l_new_pick_qty NUMBER;
9089 -- HW OPMCONV. No need for this variable anymore
9090 --l_new_pick_qty2 NUMBER;
9091
9092 l_delivery_id number;
9093 l_parent_delivery_detail_id number;
9094 assignment number;
9095 l_delivery_assignment_id number;
9096 assignment_rowid VARCHAR2(30);
9097 total number;
9098 l_cr_dt_status varchar2(30);
9099 l_cr_assg_status varchar2(30);
9100 l_output_quantity number;
9101 l_qty_return_status varchar2(30);
9102 new_det_wt_vol_failed exception;
9103 old_det_wt_vol_failed exception;
9104 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
9105 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
9106 l_split_weight number;
9107 l_split_volume number;
9108 l_split_return_status varchar2(30);
9109 l_shipped_quantity NUMBER := NULL;
9110 l_old_stage_qty NUMBER := NULL;
9111 l_ser_qty NUMBER := NULL;
9112
9113 l_original_shipped_qty NUMBER := NULL;
9114 l_original_cc_qty NUMBER := NULL;
9115 l_split_shipped_qty NUMBER := NULL;
9116 l_split_cc_qty NUMBER := NULL;
9117 -- HW OPMCONV. Removed format of 19,9
9118 l_split_cc_qty2 NUMBER := NULL;
9119 -- HW OPMCONV. Removed format of 19,9
9120 l_original_cc_qty2 NUMBER := NULL;
9121 l_return_status VARCHAR2(30);
9122 -- HW OPMCONV - Removed OPM excpetion
9123
9124 -- J: W/V Changes
9125 l_total_gross_wt NUMBER;
9126 l_total_net_wt NUMBER;
9127 l_total_vol NUMBER;
9128 l_org_wv_qty NUMBER;
9129 l_new_wv_qty NUMBER;
9130 l_final_req_qty NUMBER; --bug# 6689448 (replenishment project)
9131
9132 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
9133
9134
9135 WSH_SN_SPLIT_ERR EXCEPTION;
9136 WSH_NO_DATA_FOUND EXCEPTION;
9137
9138 l_num_of_split NUMBER; -- added for BULK Auto packing
9139 l_dd_id_tab WSH_UTIL_CORE.id_tab_type;
9140 l_da_id_tab WSH_UTIL_CORE.id_tab_type;
9141
9142 l_updated_delivery_detail_rec SplitDetailRecType;
9143
9144 l_req_qty_update_index NUMBER;
9145 -- HW Added qty2
9146 l_req_qty2_update_index NUMBER;
9147
9148 CURSOR c_get_req_pick_qty(p_del_det IN NUMBER) IS
9149 SELECT requested_quantity, picked_quantity,requested_quantity2
9150 FROM wsh_delivery_details
9151 WHERE delivery_detail_id = p_del_det;
9152
9153
9154
9155 -- Bug 2734868
9156 l_requested_quantity WSH_DELIVERY_DETAILS.requested_quantity%TYPE;
9157 -- HW 12345 Added qty2
9158 l_requested_quantity2 WSH_DELIVERY_DETAILS.requested_quantity%TYPE;
9159 l_picked_quantity WSH_DELIVERY_DETAILS.picked_quantity%TYPE;
9160 wsh_split_error EXCEPTION;
9161
9162 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
9163 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
9164
9165 --
9166 l_action VARCHAR2(100) := 'SPLIT-LINE';
9167 --
9168 l_debug_on BOOLEAN;
9169 --
9170 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DETAIL_INT_BULK';
9171 --
9172 BEGIN
9173 --
9174 --
9175 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9176 --
9177 IF l_debug_on IS NULL
9178 THEN
9179 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9180 END IF;
9181 --
9182 IF l_debug_on THEN
9183 WSH_DEBUG_SV.push(l_module_name);
9184 --
9185 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SOURCE_LINE_ID',P_NEW_SOURCE_LINE_ID);
9186 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT',P_QUANTITY_TO_SPLIT);
9187 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT2',P_QUANTITY_TO_SPLIT2);
9188 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
9189 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
9190 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
9191 WSH_DEBUG_SV.log(l_module_name,'P_SPLIT_SN',P_SPLIT_SN);
9192 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity',
9193 p_old_delivery_detail_rec.shipped_quantity);
9194 WSH_DEBUG_SV.log(l_module_name,'old cycle_count_quantity',
9195 p_old_delivery_detail_rec.cycle_count_quantity);
9196 WSH_DEBUG_SV.log(l_module_name,'old cycle_count_quantity2',
9197 p_old_delivery_detail_rec.cycle_count_quantity2);
9198 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity2',
9199 p_old_delivery_detail_rec.shipped_quantity2);
9200 WSH_DEBUG_SV.log(l_module_name,'old picked_quantity',
9201 p_old_delivery_detail_rec.picked_quantity);
9202 WSH_DEBUG_SV.log(l_module_name,'old net_weight',
9203 p_old_delivery_detail_rec.net_weight);
9204 WSH_DEBUG_SV.log(l_module_name,'old requested_quantity',
9205 p_old_delivery_detail_rec.requested_quantity);
9206 WSH_DEBUG_SV.log(l_module_name,'old inventory_item_id',
9207 p_old_delivery_detail_rec.inventory_item_id);
9208 WSH_DEBUG_SV.log(l_module_name,'old volume',
9209 p_old_delivery_detail_rec.volume);
9210 WSH_DEBUG_SV.log(l_module_name,'old weight_uom_code',
9211 p_old_delivery_detail_rec.weight_uom_code);
9212 WSH_DEBUG_SV.log(l_module_name,'old volume_uom_code',
9213 p_old_delivery_detail_rec.volume_uom_code);
9214 WSH_DEBUG_SV.log(l_module_name,'old delivery_detail_id',
9215 p_old_delivery_detail_rec.delivery_detail_id);
9216 WSH_DEBUG_SV.log(l_module_name,'old container_flag',
9217 p_old_delivery_detail_rec.container_flag);
9218 END IF;
9219 --
9220 SAVEPOINT split_savepoint;
9221 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9222
9223 /* need to validate the quantity passed meets the decimal quantity
9224 standard */
9225
9226
9227 -- HW OPMCONV - Removed branching
9228
9229 l_qty2 := p_quantity_to_split2;
9230
9231 -- For bug 1307771. If shipped quantity is NULL. Then leave the new
9232 -- shipped quantity to be NULL
9233 IF (p_old_delivery_detail_rec.shipped_quantity IS NULL AND p_old_delivery_detail_rec.cycle_count_quantity IS NULL) THEN
9234 l_split_shipped_qty := NULL;
9235 l_split_cc_qty := NULL;
9236 l_split_shipped_qty2 :=NULL;
9237 l_split_cc_qty2 := NULL;
9238
9239 ELSIF (p_manual_split = 'C') THEN
9240
9241 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity,
9242 p_quantity_to_split);
9243 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2,
9244 p_quantity_to_split2);
9245 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity,
9246 (p_quantity_to_split - nvl(l_split_shipped_qty,0)));
9247 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2,
9248 (p_quantity_to_split2 - NVL(l_split_shipped_qty2,0)));
9249
9250 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity -
9251 l_split_shipped_qty;
9252 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity -
9253 l_split_cc_qty;
9254 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 -
9255 l_split_shipped_qty2;
9256 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 -
9257 l_split_cc_qty2;
9258
9259 ELSIF (p_manual_split = 'Y') THEN
9260
9261 /* bug 1983460
9262 if the call is from ship confirm to split only the stage quantity
9263 the split delivery detail has null shipped and cc quantities.
9264 */
9265
9266 l_split_shipped_qty := NULL;
9267 l_split_cc_qty := NULL;
9268 l_split_shipped_qty2 :=NULL;
9269 l_split_cc_qty2 := NULL;
9270
9271 /* bug 1983460
9272 since the split shipped and split cc quantities are null, we should
9273 leave the original shipped and original cc quantities as they are.
9274 */
9275
9276 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity;
9277 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity;
9278 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2;
9279
9280 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2;
9281
9282
9283 ELSE
9284 -- use cc qty to split p_quantity_to_split before we use shipped qty to complete the quantity split
9285 -- (This takes care of splitting lines to backorder/cycle-count, for example.)
9286 -- assumption: the quantities' relationships are valid
9287
9288 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity, p_quantity_to_split);
9289 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2, p_quantity_to_split2);
9290
9291 -- fail-safe: NVL to ensure that shipped qtys can still be split even if cc qtys are NULL
9292 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity, (p_quantity_to_split - NVL(l_split_cc_qty,0)));
9293 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2, (p_quantity_to_split2 - NVL(l_split_cc_qty2,0)));
9294
9295 -- update original line's quantities accordingly
9296 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity - l_split_shipped_qty;
9297 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity - l_split_cc_qty;
9298
9299 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 - l_split_shipped_qty2;
9300 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 - l_split_cc_qty2;
9301 END IF;
9302
9303 --
9304 /*
9305 IF l_debug_on THEN
9306 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.INITIALIZE_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
9307 END IF;
9308 --
9309 WSH_DELIVERY_DETAILS_PKG.initialize_detail(
9310 p_delivery_detail_rec => l_delivery_details_info);
9311 */
9312
9313 IF p_old_delivery_detail_rec.picked_quantity IS NULL THEN
9314 l_delivery_details_info.requested_quantity := p_quantity_to_split;
9315 ELSE
9316 l_delivery_details_info.requested_quantity := LEAST(p_old_delivery_detail_rec.requested_quantity, p_quantity_to_split);
9317 l_delivery_details_info.picked_quantity := p_quantity_to_split;
9318 -- HW OPM for OM changes
9319 -- HW OPMCONV. No need to use l_new_pick_qty2
9320 --l_delivery_details_info.picked_quantity2 := nvl(nvl(l_qty2,l_new_pick_qty2),FND_API.G_MISS_NUM);
9321 l_delivery_details_info.picked_quantity2 := nvl(l_qty2,FND_API.G_MISS_NUM);
9322
9323 END IF;
9324
9325 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
9326 l_delivery_details_info.requested_quantity2 := FND_API.G_MISS_NUM;
9327 ELSE
9328 l_delivery_details_info.requested_quantity2 := l_qty2;
9329 END IF;
9330
9331 -- Bug 2181132 in Bulk API
9332 -- pass the value which is input
9333 l_delivery_details_info.source_line_set_id :=
9334 p_old_delivery_detail_rec.source_line_set_id;
9335
9336 IF p_new_source_line_id IS NOT NULL THEN
9337 l_delivery_details_info.source_line_id := p_new_source_line_id;
9338 END IF;
9339
9340
9341 -- J: W/V Changes
9342 IF p_old_delivery_detail_rec.wv_frozen_flag = 'Y' THEN
9343 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);
9344
9345 IF (p_manual_split = 'Y') THEN
9346 -- p_manual_split is 'Y' only when splitting for staged delivery details during ship confirm
9347 -- Staged delivery details W/V should always be reset back to original W/V
9348 l_new_wv_qty := 0;
9349 ELSE
9350 SELECT NVL(decode(l_split_shipped_qty,FND_API.G_MISS_NUM,null,l_split_shipped_qty),
9351 NVL(decode(l_delivery_details_info.picked_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.picked_quantity),
9352 decode(l_delivery_details_info.requested_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.requested_quantity)))
9353 INTO l_new_wv_qty
9354 FROM dual;
9355 END IF;
9356
9357 IF l_org_wv_qty <> 0 THEN
9358 l_delivery_details_info.gross_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.gross_weight ,5);
9359 l_delivery_details_info.net_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.net_weight ,5);
9360 l_delivery_details_info.volume := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.volume ,5);
9361 ELSE
9362 l_delivery_details_info.gross_weight := 0;
9363 l_delivery_details_info.net_weight := 0;
9364 l_delivery_details_info.volume := 0;
9365 END IF;
9366
9367 END IF;
9368
9369 IF (l_split_shipped_qty is not null and l_split_shipped_qty = 0) or (p_manual_split = 'Y') THEN
9370 l_delivery_details_info.wv_frozen_flag := 'N';
9371 ELSE
9372 l_delivery_details_info.wv_frozen_flag := p_old_delivery_detail_rec.wv_frozen_flag;
9373 END IF;
9374 l_delivery_details_info.weight_uom_code := p_old_delivery_detail_rec.weight_uom_code;
9375 l_delivery_details_info.volume_uom_code := p_old_delivery_detail_rec.volume_uom_code;
9376
9377 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty,FND_API.G_MISS_NUM);
9378 IF l_debug_on THEN
9379 WSH_DEBUG_SV.log(l_module_name,'l_split_shipped_qty2',l_split_shipped_qty2);
9380 END IF;
9381 IF ( NVL(l_split_shipped_qty2, 0) = 0 ) THEN
9382 l_delivery_details_info.shipped_quantity2 := FND_API.G_MISS_NUM;
9383 ELSE
9384 l_delivery_details_info.shipped_quantity2 := l_split_shipped_qty2;
9385 END IF;
9386 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
9387 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
9388 ELSE
9389 -- Bug 2116595
9390 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
9391 END IF;
9392
9393 l_delivery_details_info.cycle_count_quantity := nvl(l_split_cc_qty,FND_API.G_MISS_NUM);
9394 -- HW OPMCONV - No need to branch
9395 -- IF ( p_process_flag = FND_API.G_TRUE ) THEN
9396 l_delivery_details_info.cycle_count_quantity2 := nvl(l_split_cc_qty2,FND_API.G_MISS_NUM);
9397 -- END IF;
9398
9399 -- Bug 2116595
9400 l_delivery_details_info.cancelled_quantity := FND_API.G_MISS_NUM;
9401 l_delivery_details_info.split_from_detail_id := p_old_delivery_detail_rec.delivery_detail_id;
9402
9403 l_delivery_details_info.container_flag := p_old_delivery_detail_rec.container_flag;
9404 l_delivery_details_info.master_serial_number := FND_API.G_MISS_CHAR;
9405 l_delivery_details_info.serial_number := FND_API.G_MISS_CHAR;
9406 l_delivery_details_info.to_serial_number := FND_API.G_MISS_CHAR;
9407 l_delivery_details_info.transaction_temp_id := FND_API.G_MISS_NUM;
9408 l_delivery_details_info.last_update_date := SYSDATE;
9409 l_delivery_details_info.last_updated_by := FND_GLOBAL.USER_ID;
9410 l_delivery_details_info.last_update_login := FND_GLOBAL.LOGIN_ID;
9411 -- Bug 2419301
9412 l_delivery_details_info.oe_interfaced_flag := p_old_delivery_detail_rec.oe_interfaced_flag;
9413 --
9414 IF l_debug_on THEN
9415 WSH_DEBUG_SV.logmsg(l_module_name, 'SPLIT_DETAIL_INT_BULK: OE_INTERFACED_FLAG '||L_DELIVERY_DETAILS_INFO.OE_INTERFACED_FLAG );
9416 END IF;
9417 --
9418
9419 l_new_delivery_detail_id := NULL;
9420
9421
9422 l_updated_delivery_detail_rec := p_old_delivery_detail_rec;
9423
9424 -- The Split Serial Number has not been tested
9425 -- this needs to be modified for Bulk split
9426
9427 -- HW OPMCONV - Remove the whole branch since the code was commented
9428
9429 l_num_of_split := p_num_of_split;
9430
9431 --
9432 IF l_debug_on THEN
9433 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);
9434 END IF;
9435 --
9436 -- call to new API
9437 -- with a value for p_num_of_rec
9438 WSH_DELIVERY_DETAILS_PKG.create_dd_from_old_bulk(
9439 p_delivery_detail_rec => l_delivery_details_info,
9440 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9441 p_num_of_rec => l_num_of_split,
9442 x_dd_id_tab => l_dd_id_tab,
9443 x_return_status => l_cr_dt_status);
9444
9445 -- Bug 2870267
9446 -- The bulk API above creates delivery details with a requested qty
9447 -- of l_delivery_details_info.requested_quantity for each of the new details created.
9448 -- However if we overpick, the sum of these requested qtys would add up to
9449 -- the picked qty and not the requested qty of the original line.
9450 -- We need to make sure that the sum of the requested quantities add up to the requested quantity
9451 -- of the original line, and that the extra requested quantities that add up to the
9452 -- original picked quantity are zeroed out.
9453
9454 OPEN c_get_req_pick_qty (p_old_delivery_detail_rec.delivery_detail_id);
9455
9456 FETCH c_get_req_pick_qty INTO l_requested_quantity, l_picked_quantity,
9457 l_requested_quantity2;
9458
9459 IF c_get_req_pick_qty%NOTFOUND THEN
9460
9461 RAISE WSH_NO_DATA_FOUND;
9462
9463 END IF;
9464
9465 CLOSE c_get_req_pick_qty;
9466
9467 --bug# 6689448 (replenishment project) (begin) : call WMS for whenever there is split on replenishment requested
9468 -- delivery detail lines with the new quantity for the old delivery detail line on p_primary_quantity parameter.
9469 -- Inturn WMS creates a new replenishment record for p_split_delivery_detail_id with old delivery detail line old qty - old delivery detail line
9470 -- new quantity (p_primary_quantity).
9471 IF ( p_old_delivery_detail_rec.replenishment_status = 'R' and p_old_delivery_detail_rec.released_status in ('R','B')) THEN
9472 --{
9473 l_final_req_qty := l_requested_quantity;
9474 FOR i IN 1..l_dd_id_tab.count LOOP
9475 --{
9476 l_final_req_qty := l_final_req_qty - l_delivery_details_info.requested_quantity;
9477 IF ((l_final_req_qty = l_requested_quantity) OR (l_final_req_qty < 0)) THEN
9478 EXIT;
9479 END IF;
9480 IF l_debug_on THEN
9481 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL' ,WSH_DEBUG_SV.C_PROC_LEVEL);
9482 END IF;
9483 WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL(
9484 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9485 p_primary_quantity => l_final_req_qty,
9486 p_split_delivery_detail_id => l_dd_id_tab(i),
9487 x_return_status => x_return_status );
9488 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
9489 --{
9490 rollback to split_savepoint;
9491 IF l_debug_on THEN
9492 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR FROM WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL');
9493 WSH_DEBUG_SV.pop(l_module_name);
9494 END IF;
9495 RETURN;
9496 --}
9497 END IF;
9498 --}
9499 END LOOP;
9500 --}
9501 END IF;
9502 --bug# 6689448 (replenishment project):end
9503
9504 IF (l_picked_quantity > l_requested_quantity) AND (l_delivery_details_info.requested_quantity <> 0) THEN --{
9505
9506
9507 -- Calculate the index of the delivery detail from the created table at which the sum of the new
9508 -- requested quantities would equal (or exceed) the requested quantity of the original line.
9509
9510 l_req_qty_update_index := CEIL(l_requested_quantity/l_delivery_details_info.requested_quantity);
9511 -- HW 12345 Added qty2
9512 IF ( l_delivery_details_info.requested_quantity2 <> 0 ) THEN
9513 l_req_qty2_update_index := CEIL(l_requested_quantity2/l_delivery_details_info.requested_quantity2);
9514 ELSE
9515 l_req_qty2_update_index := NULL;
9516 END IF;
9517
9518 -- If not a clean split, we need to update the requested quantity of the delivery detail at this
9519 -- index such that the sum of the requested quantities of all the new delivery details before this index
9520 -- plus the requested qty at this index add up to the original requested quantity.
9521
9522 IF l_req_qty_update_index > (l_requested_quantity/l_delivery_details_info.requested_quantity) THEN
9523
9524 -- Bug 3178233 - Need to add the IF condition because the update will fail in the following example:
9525 -- requested_quantity = 3, picked_quantity = 4, and split quantity is 2
9526 -- l_req_qty_update_index = CEIL(3/2) = 2
9527 -- Update at l_dd_id_tab(l_req_qty_update_index) = l_dd_id_tab(2) is a non-exist value which will fail.
9528 IF l_req_qty_update_index <= l_dd_id_tab.count THEN
9529 -- 12345 HW added qty2
9530 update wsh_delivery_details
9531 set requested_quantity = l_requested_quantity - ((l_req_qty_update_index - 1) * l_delivery_details_info.requested_quantity),
9532 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))
9533 where delivery_detail_id = l_dd_id_tab(l_req_qty_update_index);
9534 END IF;
9535 END IF;
9536
9537 -- Set the requested quantity to zero in all the newly created lines after the above index.
9538
9539 FORALL i in (l_req_qty_update_index + 1) .. l_dd_id_tab.count
9540 -- HW added qty2
9541 update wsh_delivery_details
9542 set requested_quantity = 0,
9543 requested_quantity2 = 0
9544 where delivery_detail_id = l_dd_id_tab(i);
9545
9546 --
9547 -- DBI Project,Above 2 updates for requested quantity need to be tracked for DBI Call
9548 -- These can be combined since both use l_dd_id_tab
9549 -- DBI Project
9550 -- Update of wsh_delivery_details where requested_quantity/released_status
9551 -- are changed, call DBI API after the update.
9552 -- DBI API will check if DBI is installed
9553 IF l_debug_on THEN
9554 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_dd_id_tab.count);
9555 END IF;
9556 WSH_INTEGRATION.DBI_Update_Detail_Log
9557 (p_delivery_detail_id_tab => l_dd_id_tab,
9558 p_dml_type => 'UPDATE',
9559 x_return_status => l_dbi_rs);
9560
9561 IF l_debug_on THEN
9562 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
9563 END IF;
9564 -- Only Handle Unexpected error
9565 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
9566 x_return_status := l_dbi_rs;
9567 rollback to split_savepoint;
9568 --
9569 IF l_debug_on THEN
9570 WSH_DEBUG_SV.pop(l_module_name);
9571 END IF;
9572 --
9573 RETURN;
9574 END IF;
9575 -- End of Code for DBI Project
9576 --
9577
9578 END IF; --}
9579
9580 -- END Bug 2870267
9581
9582 -- J: W/V Changes
9583 IF p_old_delivery_detail_rec.wv_frozen_flag = 'N' THEN
9584 -- Bug 4416863
9585 -- During Partial Shipping with the remain qty as staged, w/v value should not be
9586 -- deducted again from the original line since during entering shipped_quantity
9587 -- w/v has been calculated for the original line.
9588 IF (p_manual_split = 'Y') THEN
9589 l_total_net_wt := 0;
9590 l_total_gross_wt := 0;
9591 l_total_vol := 0;
9592 ELSE
9593 -- end bug 4416863
9594 IF l_debug_on THEN
9595 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
9596 END IF;
9597
9598 l_total_net_wt := 0;
9599 l_total_gross_wt := 0;
9600 l_total_vol := 0;
9601 FOR i in 1..l_dd_id_tab.count LOOP
9602
9603 WSH_WV_UTILS.Detail_Weight_Volume(
9604 p_delivery_detail_id => l_dd_id_tab(i),
9605 p_update_flag => 'Y',
9606 x_net_weight => l_split_weight,
9607 x_volume => l_split_volume,
9608 x_return_status => l_split_return_status);
9609 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9610 RAISE new_det_wt_vol_failed;
9611 END IF;
9612
9613 l_total_net_wt := l_total_net_wt + l_split_weight;
9614 l_total_vol := l_total_vol + l_split_volume;
9615
9616 END LOOP;
9617 l_total_gross_wt := l_total_net_wt;
9618 END IF;
9619 ELSE
9620 l_total_net_wt := p_num_of_split * l_delivery_details_info.net_weight;
9621 l_total_gross_wt := p_num_of_split * l_delivery_details_info.gross_weight;
9622 l_total_vol := p_num_of_split * l_delivery_details_info.volume;
9623 END IF;
9624
9625 l_delivery_assignments_info.type := 'S';
9626
9627 IF (p_unassign_flag = 'N') THEN
9628 l_delivery_assignments_info.delivery_id := p_old_delivery_detail_rec.delivery_id;
9629 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
9630 IF p_old_delivery_detail_rec.wda_type = 'C' THEN
9631 l_delivery_assignments_info.type := 'O';
9632 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
9633 END IF;
9634 ELSE
9635 l_delivery_assignments_info.delivery_id := NULL;
9636 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
9637 END IF;
9638
9639 l_delivery_assignments_info.delivery_detail_id := l_new_delivery_detail_id;
9640 --
9641 IF l_debug_on THEN
9642 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_DELIV_ASSIGNMENT_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
9643 END IF;
9644 --
9645
9646 -- this is a bulk call
9647 -- with new parameter of p_num_of_rec
9648 -- and pass l_dd_id_tab which will pass the delivery detail id
9649 wsh_delivery_details_pkg.create_deliv_assignment_bulk(
9650 p_delivery_assignments_info => l_delivery_assignments_info,
9651 p_num_of_rec => l_num_of_split,
9652 p_dd_id_tab => l_dd_id_tab,
9653 x_da_id_tab => l_da_id_tab,
9654 x_return_status => l_cr_assg_status
9655 );
9656
9657 -- K: MDC: We need to create the consolidation records as well
9658 -- If necessary.
9659 IF (p_unassign_flag = 'N') AND (p_old_delivery_detail_rec.wda_type = 'C') THEN
9660
9661 l_delivery_assignments_info.type := 'C';
9662 l_delivery_assignments_info.parent_delivery_id := p_old_delivery_detail_rec.parent_delivery_id;
9663 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
9664
9665 wsh_delivery_details_pkg.create_deliv_assignment_bulk(
9666 p_delivery_assignments_info => l_delivery_assignments_info,
9667 p_num_of_rec => l_num_of_split,
9668 p_dd_id_tab => l_dd_id_tab,
9669 x_da_id_tab => l_da_id_tab,
9670 x_return_status => l_cr_assg_status
9671 );
9672 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
9673 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
9674 ) THEN
9675 x_return_status := l_cr_assg_status;
9676 return;
9677 END IF;
9678
9679
9680 END IF;
9681
9682 /*2442099*/
9683 FOR i in 1..l_dd_id_tab.count
9684 LOOP
9685 Log_Exceptions(p_old_delivery_detail_rec.delivery_detail_id,l_dd_id_tab(i),l_delivery_assignments_info.delivery_id,l_action);
9686 END LOOP;
9687
9688 -- this is FOR RETURN variable
9689 x_dd_id_tab := l_dd_id_tab;
9690
9691 /* NC - Added the following for OPM BUG#1675561 */
9692 /* LG BUG#:2005977 */
9693 /* LG new */
9694
9695 --
9696 -- HW OPMCONV - Removed branching
9697
9698 /* Bug 2177410, also update net_weight and volume of original delivery detail
9699 because non item does not use WSH_WV_UTILS.Detail_Weight_Volume to
9700 adjust the net_weight and volume */
9701
9702 x_split_detail_id := l_new_delivery_detail_id;
9703
9704 -- update original shipped qty since this was not decremented correctly before.
9705 -- now decrement it with proper split number
9706
9707 -- Bug 2734868
9708 -- If nvl(picked,requested) quantity is set to zero, error
9709 -- should not be allowed
9710 -- example in case of 12(req) - 12(pic) - 15(ship) when l_num_of_split = 7
9711
9712 IF (nvl(GREATEST(l_picked_quantity - (l_num_of_split*p_quantity_to_split),0
9713 ),
9714 GREATEST(l_requested_quantity - (l_num_of_split*l_delivery_details_info.requested_quantity),0
9715 )
9716 ) <= 0
9717 )THEN
9718 IF l_debug_on THEN
9719 WSH_DEBUG_SV.log(l_module_name, 'CANNOT SPLIT, NEED TO REVISIT THE QUANTITIES');
9720 END IF;
9721
9722 RAISE wsh_split_error;
9723
9724 END IF;
9725
9726 -- End of Bug 2734868
9727
9728 -- OPM HW Included this fix in 3011758
9729 -- Modified requested_quantity2,picked_quantity2 and shipped_quantity2
9730 -- to be the same as quantity1s
9731
9732 UPDATE wsh_delivery_details
9733 SET requested_quantity = GREATEST(requested_quantity - (l_num_of_split*l_delivery_details_info.requested_quantity), 0),
9734 requested_quantity2 = GREATEST(requested_quantity2 -(l_num_of_split*l_qty2), 0),
9735 picked_quantity = GREATEST(picked_quantity - (l_num_of_split*p_quantity_to_split),0),
9736 -- HW OPMCONV. No need to use l_new_pick_qty2
9737 -- picked_quantity2 = GREATEST(picked_quantity2 - (l_num_of_split* nvl(l_qty2,l_new_pick_qty2)),0),
9738 picked_quantity2 = GREATEST(picked_quantity2 - (l_num_of_split* l_qty2) ,0),
9739 --shipped_quantity = l_original_shipped_qty - p_quantity_to_split,
9740 shipped_quantity = l_original_shipped_qty - GREATEST((l_num_of_split -1) * p_quantity_to_split,0),
9741 shipped_quantity2 = l_original_shipped_qty2 - GREATEST((l_num_of_split -1) * nvl(l_qty2,0),0),
9742 --shipped_quantity2 = l_original_shipped_qty2 - ((greatest(l_num_of_split -1),0) * p_quantity_to_split),
9743 cycle_count_quantity = l_original_cc_qty,
9744 cycle_count_quantity2 = l_original_cc_qty2,
9745 serial_number = decode(l_updated_delivery_detail_rec.serial_number,FND_API.G_MISS_CHAR,NULL,
9746 NULL,serial_number,l_updated_delivery_detail_rec.serial_number),
9747 to_serial_number = decode(l_updated_delivery_detail_rec.to_serial_number,FND_API.G_MISS_CHAR,NULL,
9748 NULL,to_serial_number,l_updated_delivery_detail_rec.to_serial_number),
9749 transaction_temp_id = decode(l_updated_delivery_detail_rec.transaction_temp_id,FND_API.G_MISS_NUM,NULL,
9750 NULL,transaction_temp_id,l_updated_delivery_detail_rec.transaction_temp_id),
9751 -- J: W/V Changes
9752 gross_weight = gross_weight - l_total_gross_wt,
9753 net_weight = net_weight - l_total_net_wt,
9754 volume = volume - l_total_vol,
9755 -- End J: W/V Changes
9756 last_update_date = SYSDATE,
9757 last_updated_by = FND_GLOBAL.USER_ID,
9758 last_update_login = FND_GLOBAL.LOGIN_ID
9759 WHERE delivery_detail_id = p_old_delivery_detail_rec.delivery_detail_id;
9760
9761 /* call the wv util to calculate the wv for the original detail too */
9762 --
9763 IF l_debug_on THEN
9764 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.requested_quantity'
9765 ,l_delivery_details_info.requested_quantity);
9766 WSH_DEBUG_SV.log(l_module_name,'l_qty2',l_qty2);
9767 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty',
9768 l_original_shipped_qty);
9769 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty2',l_original_cc_qty2);
9770 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty',l_original_cc_qty);
9771 END IF;
9772 --
9773
9774 --
9775 -- DBI Project
9776 -- Update of wsh_delivery_details where requested_quantity/released_status
9777 -- are changed, call DBI API after the update.
9778 -- This API will also check for DBI Installed or not
9779 IF l_debug_on THEN
9780 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail id-',p_old_delivery_detail_rec.delivery_detail_id);
9781 END IF;
9782 l_detail_tab(1) := p_old_delivery_detail_rec.delivery_detail_id;
9783 WSH_INTEGRATION.DBI_Update_Detail_Log
9784 (p_delivery_detail_id_tab => l_detail_tab,
9785 p_dml_type => 'UPDATE',
9786 x_return_status => l_dbi_rs);
9787
9788 IF l_debug_on THEN
9789 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
9790 END IF;
9791 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
9792 x_return_status := l_dbi_rs;
9793 -- just pass this return status to caller API
9794 rollback to split_savepoint;
9795 --
9796 IF l_debug_on THEN
9797 WSH_DEBUG_SV.pop(l_module_name);
9798 END IF;
9799 --
9800 RETURN;
9801 END IF;
9802 -- End of Code for DBI Project
9803 --
9804
9805
9806 -- J: W/V Changes
9807 -- Decrement the DD W/V from parent if p_unassign_flag is 'Y'
9808 IF (p_unassign_flag = 'Y') THEN
9809 IF l_debug_on THEN
9810 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
9811 END IF;
9812 --
9813 WSH_WV_UTILS.DD_WV_Post_Process(
9814 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
9815 p_diff_gross_wt => -1 * l_total_gross_wt,
9816 p_diff_net_wt => -1 * l_total_net_wt,
9817 p_diff_fill_volume => -1 * l_total_vol,
9818 x_return_status => l_return_status);
9819
9820 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
9821 --
9822 rollback to split_savepoint;
9823 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9824 WSH_UTIL_CORE.Add_Message(x_return_status);
9825 IF l_debug_on THEN
9826 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
9827 WSH_DEBUG_SV.pop(l_module_name);
9828 END IF;
9829 return;
9830 END IF;
9831 END IF;
9832
9833 --
9834 IF l_debug_on THEN
9835 WSH_DEBUG_SV.pop(l_module_name);
9836
9837 END IF;
9838 --
9839
9840 EXCEPTION
9841 -- HW OPMCONV. Removed OPM excpetion
9842
9843 WHEN old_det_wt_vol_failed THEN
9844 rollback to split_savepoint;
9845 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9846 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
9847 FND_MESSAGE.SET_TOKEN('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
9848 wsh_util_core.add_message(x_return_status,l_module_name);
9849 --
9850 IF l_debug_on THEN
9851 WSH_DEBUG_SV.logmsg(l_module_name,'OLD_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9852 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OLD_DET_WT_VOL_FAILED');
9853 END IF;
9854 --
9855 WHEN new_det_wt_vol_failed THEN
9856 rollback to split_savepoint;
9857 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9858 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
9859 FND_MESSAGE.SET_TOKEN('DETAIL_ID', l_new_DELIVERY_DETAIL_ID);
9860 wsh_util_core.add_message(x_return_status,l_module_name);
9861 --
9862 IF l_debug_on THEN
9863 WSH_DEBUG_SV.logmsg(l_module_name,'NEW_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9864 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEW_DET_WT_VOL_FAILED');
9865 END IF;
9866 --
9867 WHEN WSH_SPLIT_ERROR THEN
9868 rollback to split_savepoint;
9869 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9870 fnd_message.set_name('WSH', 'WSH_SPLIT_ERROR');
9871 fnd_message.set_token('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
9872 wsh_util_core.add_message(x_return_status,l_module_name);
9873 --
9874 IF l_debug_on THEN
9875 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SPLIT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9876 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SPLIT_ERROR');
9877 END IF;
9878 WHEN WSH_SN_SPLIT_ERR THEN
9879 rollback to split_savepoint;
9880 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9881 fnd_message.set_name('WSH', 'WSH_SN_SPLIT_ERR');
9882 wsh_util_core.add_message(x_return_status,l_module_name);
9883 --
9884 IF l_debug_on THEN
9885 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9886 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SN_SPLIT_ERR');
9887 END IF;
9888
9889 WHEN WSH_NO_DATA_FOUND THEN
9890 IF c_get_req_pick_qty%ISOPEN THEN
9891 CLOSE c_get_req_pick_qty;
9892 END IF;
9893 rollback to split_savepoint;
9894 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9895 fnd_message.set_name('WSH', 'WSH_NO_DATA_FOUND');
9896 IF l_debug_on THEN
9897 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_DATA_FOUND exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
9898 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_DATA_FOUND');
9899 END IF;
9900 --
9901 WHEN others THEN
9902 IF c_get_req_pick_qty%ISOPEN THEN
9903 CLOSE c_get_req_pick_qty;
9904 END IF;
9905 rollback to split_savepoint;
9906 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9907 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DETAIL_INT_BULK',l_module_name);
9908 --
9909 IF l_debug_on THEN
9910 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9911 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9912 END IF;
9913 --
9914 END SPLIT_DETAIL_INT_BULK;
9915
9916 /*************************/
9917 --
9918 --Procedure:
9919 --Parameters: p_from_detail_id
9920 -- p_req_quantity
9921 -- p_new_detail_id
9922 -- x_return_status
9923 --Desription:
9924 -- Splits a delivery detail according the new requested
9925 -- quantity. The newly created the detail has the requested
9926 -- quantity as p_req_quantity and the old detail has the
9927 --
9928 -- fabdi start : PICK CONFIRM
9929 --added a new parameter called p_req_quantity2 requested quantity as requested_quantity - p_requested_quantity
9930 -- fabdi end : PICK CONFIRM
9931 -- HW BUG#:1636578 added a new parameter p_converted_flag
9932
9933 /*****************************************************
9934 ----- SPLIT_DELIVERY_DETAILS api
9935 *****************************************************/
9936 PROCEDURE Split_Delivery_Details (
9937 p_from_detail_id IN NUMBER,
9938 p_req_quantity IN OUT NOCOPY NUMBER,
9939 x_new_detail_id OUT NOCOPY NUMBER,
9940 x_return_status OUT NOCOPY VARCHAR2,
9941 p_unassign_flag IN VARCHAR2 ,
9942 p_req_quantity2 IN NUMBER ,
9943 p_converted_flag IN VARCHAR2,
9944 p_manual_split IN VARCHAR2 )
9945 IS
9946
9947 l_new_delivery_detail_id number;
9948
9949 -- HW OPMCONV - Removed OPM variables
9950
9951 -- HW OPMCONV. Remove format 19,9
9952 l_qty2 NUMBER;
9953 l_split_shipped_qty2 NUMBER(19,9):= NULL;
9954 -- HW BUG#:1636578 variable to calculate new qty2
9955 l_new_req_qty2 NUMBER;
9956 l_original_shipped_qty2 NUMBER(19,9):= NULL;
9957
9958 l_new_req_qty NUMBER;
9959 l_new_pick_qty NUMBER;
9960 -- HW OPMCONV. No need to use l_new_pick_qty2
9961 --l_new_pick_qty2 NUMBER;
9962
9963 -- STOPPED HERE --
9964
9965 l_delivery_id number;
9966 l_parent_delivery_detail_id number;
9967 assignment number;
9968 l_delivery_assignment_id number;
9969 detail_rowid VARCHAR2(30);
9970 assignment_rowid VARCHAR2(30);
9971 total number;
9972 l_cr_dt_status varchar2(30);
9973 l_cr_assg_status varchar2(30);
9974 l_output_quantity number;
9975 l_return_status varchar2(1);
9976 l_qty_return_status varchar2(30);
9977
9978 chk_decimal_qty_failed exception;
9979 quantity_over EXCEPTION;
9980 negative_qty EXCEPTION;
9981 zero_qty EXCEPTION;
9982 fail_create_detail EXCEPTION;
9983 /* H integration: Pricing integration csun
9984 mark reprice required flag when split_delivery_details
9985 */
9986 l_entity_ids WSH_UTIL_CORE.id_tab_type;
9987 reprice_required_err EXCEPTION;
9988 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
9989 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
9990 l_split_weight number;
9991 l_split_volume number;
9992 l_split_return_status varchar2(30);
9993 l_shipped_quantity NUMBER := NULL;
9994 l_old_stage_qty NUMBER := NULL;
9995 l_ser_qty NUMBER := NULL;
9996
9997
9998 old_delivery_detail_rec SplitDetailRecType;
9999
10000 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
10001
10002
10003 --
10004 l_debug_on BOOLEAN;
10005 --
10006 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DELIVERY_DETAILS';
10007 --
10008 BEGIN
10009 --
10010 --
10011 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10012 --
10013 IF l_debug_on IS NULL
10014 THEN
10015 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10016 END IF;
10017 --
10018 IF l_debug_on THEN
10019 WSH_DEBUG_SV.push(l_module_name);
10020 --
10021 WSH_DEBUG_SV.log(l_module_name,'P_FROM_DETAIL_ID',P_FROM_DETAIL_ID);
10022 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY',P_REQ_QUANTITY);
10023 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
10024 WSH_DEBUG_SV.log(l_module_name,'P_REQ_QUANTITY2',P_REQ_QUANTITY2);
10025 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
10026 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
10027 END IF;
10028 --
10029 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10030
10031 OPEN c_split_detail_info(p_from_detail_id);
10032 FETCH c_split_detail_info into old_delivery_detail_rec;
10033 CLOSE c_split_detail_info;
10034
10035 -- Bug 2419301 : Set oe_interfaced_flag to MISS CHAR so that create_new_detail_from_old API
10036 -- determines the value of oe_interfaced_flag for newly created dd
10037 old_delivery_detail_rec.oe_interfaced_flag:= NULL;
10038
10039
10040 -- Bug 1289812
10041 -- check if this split is valid operation
10042 IF (
10043 p_req_quantity >= NVL(old_delivery_detail_rec.picked_quantity,old_delivery_detail_rec.requested_quantity)
10044 AND NVL(old_delivery_detail_rec.line_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
10045 )
10046 OR
10047 (
10048 p_req_quantity >= NVL(
10049 old_delivery_detail_rec.received_quantity,
10050 NVL(old_delivery_detail_rec.shipped_quantity,
10051 NVL(old_delivery_detail_rec.picked_quantity,
10052 old_delivery_detail_rec.requested_quantity))
10053 ) -- J-IB-NPARIKH
10054 AND NVL(old_delivery_detail_rec.line_direction,'O') NOT IN ('O','IO') -- J-IB-NPARIKH
10055 )
10056 THEN
10057 RAISE quantity_over;
10058 END IF;
10059 -- Bug 1299636
10060 -- check if this quantity to split is positive
10061 IF (p_req_quantity = 0) THEN
10062 RAISE zero_qty;
10063 ELSIF (p_req_quantity < 0) THEN
10064 RAISE negative_qty;
10065 END IF;
10066 l_qty2 := p_req_quantity2 ;
10067
10068 /* need to validate the quantity passed meets the decimal quantity
10069 standard */
10070
10071 --Check if org is a process one or not for the current record
10072 --
10073 -- HW OPMCONV - Removed checking for process org
10074
10075 -- Patch J: Catch Weights
10076 -- Need to split the secondary quantity in proportion to the primary quantity.
10077 -- Catch weight support currently only for non-opm lines.
10078
10079 IF old_delivery_detail_rec.picked_quantity2 IS NOT NULL and p_req_quantity2 IS NULL
10080 and (NVL(old_delivery_detail_rec.picked_quantity,0) <> 0)
10081 AND NVL(old_delivery_detail_rec.line_direction,'O') in ('O','IO') -- J-IB-NPARIKH
10082 THEN
10083
10084 l_qty2 := old_delivery_detail_rec.picked_quantity2 * (p_req_quantity/old_delivery_detail_rec.picked_quantity);
10085 l_qty2 := round(l_qty2,5);
10086
10087 ELSE
10088
10089 l_qty2 := p_req_quantity2 ;
10090
10091 END IF;
10092
10093
10094
10095
10096
10097 --
10098 IF l_debug_on THEN
10099 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_DECIMAL_QUANTITY',WSH_DEBUG_SV.C_PROC_LEVEL);
10100 END IF;
10101 --
10102 WSH_DETAILS_VALIDATIONS.check_decimal_quantity(
10103 p_item_id => old_delivery_detail_rec.inventory_item_id,
10104 p_organization_id => old_delivery_detail_rec.organization_id,
10105 p_input_quantity => p_req_quantity,
10106 p_uom_code => old_delivery_detail_rec.requested_quantity_UOM,
10107 x_output_quantity => l_output_quantity,
10108 x_return_status => l_qty_return_status);
10109
10110 IF (l_qty_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
10111 RAISE chk_decimal_qty_failed;
10112 END IF;
10113 IF (l_output_quantity IS not NULL) THEN
10114 p_req_quantity := l_output_quantity;
10115 END IF;
10116
10117 --
10118 IF l_debug_on THEN
10119 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT AND P_REQ_QUANTITY IS '||P_REQ_QUANTITY );
10120 END IF;
10121 --
10122 --
10123 IF l_debug_on THEN
10124 WSH_DEBUG_SV.logmsg(l_module_name, 'BEFORE CALLING SPLIT_DETAIL_INT AND P_QUANTITY_TO_SPLIT2 IS '||L_QTY2 );
10125 END IF;
10126 --
10127
10128 -- HW OPMCONV - Removed l_process_flag parameter
10129 Split_Detail_INT(
10130 p_old_delivery_detail_rec => old_delivery_detail_rec,
10131 p_quantity_to_split => p_req_quantity,
10132 p_quantity_to_split2 => l_qty2,
10133 p_unassign_flag => p_unassign_flag,
10134 p_converted_flag => p_converted_flag,
10135 p_manual_split => p_manual_split,
10136 x_split_detail_id => x_new_detail_id,
10137 x_return_status => x_return_status);
10138
10139 -- Bug 3724578 : Return back to the caller if any error occurs
10140 -- while splitting the delivery detail line
10141 --- Message will be set in Split_Detail_INT
10142 IF x_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
10143 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
10144 ) THEN
10145 return;
10146 END IF;
10147
10148 --bug# 6689448 (replenishment project) (begin) : call WMS for whenever there is split on replenishment requested
10149 -- delivery detail lines with the new quantity for the old delivery detail line on p_primary_quantity parameter.
10150 -- Inturn WMS creates a new replenishment record for p_split_delivery_detail_id with old delivery detail line old qty - old delivery detail line
10151 -- new quantity (p_primary_quantity).
10152 IF ( old_delivery_detail_rec.replenishment_status = 'R' and old_delivery_detail_rec.released_status in ('R','B')) THEN
10153 --{
10154 IF l_debug_on THEN
10155 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL' ,WSH_DEBUG_SV.C_PROC_LEVEL);
10156 END IF;
10157 WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL(
10158 p_delivery_detail_id => old_delivery_detail_rec.delivery_detail_id,
10159 p_primary_quantity => old_delivery_detail_rec.requested_quantity - p_req_quantity,
10160 p_split_delivery_detail_id => x_new_detail_id,
10161 x_return_status => x_return_status);
10162 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10163 --{
10164 IF l_debug_on THEN
10165 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR FROM WMS_REPLENISHMENT_PUB.UPDATE_DELIVERY_DETAIL');
10166 WSH_DEBUG_SV.pop(l_module_name);
10167 END IF;
10168 RETURN;
10169 --}
10170 END IF;
10171 --}
10172 END IF;
10173 --bug# 6689448 (replenishment project): end
10174
10175 /* H integration: Pricing integration csun
10176 mark repirce required flag when split delivery details
10177 */
10178 l_entity_ids(1) := old_delivery_detail_rec.delivery_detail_id;
10179 --
10180 IF l_debug_on THEN
10181 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_ACTIONS.MARK_REPRICE_REQUIRED',WSH_DEBUG_SV.C_PROC_LEVEL);
10182 END IF;
10183 --
10184 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
10185 p_entity_type => 'DELIVERY_DETAIL',
10186 p_entity_ids => l_entity_ids,
10187 x_return_status => l_return_status);
10188 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
10189 raise reprice_required_err;
10190 END IF;
10191
10192 --
10193 IF l_debug_on THEN
10194 WSH_DEBUG_SV.pop(l_module_name);
10195 END IF;
10196 --
10197 EXCEPTION
10198 WHEN chk_decimal_qty_failed THEN
10199 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10200 fnd_message.set_name('WSH', 'WSH_DET_DECIMAL_QTY_NOT_VALID');
10201 wsh_util_core.add_message(x_return_status,l_module_name);
10202 --
10203 IF l_debug_on THEN
10204 WSH_DEBUG_SV.logmsg(l_module_name,'CHK_DECIMAL_QTY_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10205 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:CHK_DECIMAL_QTY_FAILED');
10206 END IF;
10207 --
10208 WHEN quantity_over THEN
10209 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10210 fnd_message.set_name('WSH', 'WSH_DET_SPLIT_EXCEED');
10211 wsh_util_core.add_message(x_return_status,l_module_name);
10212 --
10213 IF l_debug_on THEN
10214 WSH_DEBUG_SV.logmsg(l_module_name,'QUANTITY_OVER exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10215 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:QUANTITY_OVER');
10216 END IF;
10217 --
10218 WHEN zero_qty THEN
10219 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10220 fnd_message.set_name('WSH', 'WSH_NO_ZERO_NUM');
10221 wsh_util_core.add_message(x_return_status,l_module_name);
10222 --
10223 IF l_debug_on THEN
10224 WSH_DEBUG_SV.logmsg(l_module_name,'ZERO_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10225 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:ZERO_QTY');
10226 END IF;
10227 --
10228 WHEN negative_qty THEN
10229 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10230 fnd_message.set_name('WSH', 'WSH_NO_NEG_NUM');
10231 wsh_util_core.add_message(x_return_status,l_module_name);
10232 --
10233 IF l_debug_on THEN
10234 WSH_DEBUG_SV.logmsg(l_module_name,'NEGATIVE_QTY exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10235 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEGATIVE_QTY');
10236 END IF;
10237 --
10238 WHEN reprice_required_err THEN
10239 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10240 fnd_message.set_name('WSH', 'WSH_REPRICE_REQUIRED_ERR');
10241 wsh_util_core.add_message(x_return_status,l_module_name);
10242 --
10243 IF l_debug_on THEN
10244 WSH_DEBUG_SV.logmsg(l_module_name,'REPRICE_REQUIRED_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10245 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:REPRICE_REQUIRED_ERR');
10246 END IF;
10247 --
10248 WHEN others THEN
10249 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
10250 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',l_module_name);
10251 --
10252 IF l_debug_on THEN
10253 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10254 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10255 END IF;
10256 --
10257 END SPLIT_DELIVERY_DETAILS;
10258
10259 /*****************************************************************
10260 Description :-
10261
10262 Currently being used values of p_manual_split are
10263
10264 NULL - default, normal mode of splitting backordered quantity
10265 then shipped quantity
10266 Y - split staged quantity
10267 C - split shipped quantity then backordered quantity (from packing code)
10268 B - called from update_inventory_info for OPM's use
10269 M - called from update_inventory_info for OPM's use
10270 S - called from update_inventory_info for OPM's use
10271 U - called from update_inventory_info for OPM's use
10272
10273 *******************************************************************/
10274
10275 /*****************************************************
10276 ----- SPLIT_DETAIL_INT api
10277 *****************************************************/
10278 -- HW OPMCONV. Removed p_process_flag
10279 PROCEDURE Split_Detail_INT(
10280 p_old_delivery_detail_rec IN SplitDetailRecType,
10281 p_new_source_line_id IN NUMBER ,
10282 p_quantity_to_split IN NUMBER,
10283 p_quantity_to_split2 IN NUMBER ,
10284 p_unassign_flag IN VARCHAR2 ,
10285 p_converted_flag IN VARCHAR2 ,
10286 p_manual_split IN VARCHAR2 ,
10287 p_split_sn IN VARCHAR2 ,
10288 x_split_detail_id OUT NOCOPY NUMBER,
10289 x_return_status OUT NOCOPY VARCHAR2)
10290 IS
10291 l_new_delivery_detail_id number;
10292 -- HW OPMCONV. Removed OPM variables
10293
10294 -- HW OPMCONV. Removed format of 19,9
10295 l_qty2 NUMBER;
10296 l_split_shipped_qty2 NUMBER(19,9):= NULL;
10297 -- HW BUG#:1636578 variable to calculate new qty2
10298 l_new_req_qty2 NUMBER;
10299 -- HW OPMCONV. Removed format of 19,9
10300 l_original_shipped_qty2 NUMBER := NULL;
10301
10302 l_new_req_qty NUMBER;
10303 l_new_pick_qty NUMBER;
10304 -- HW OPMCONV. No need to use l_new_pick_qty2
10305 --l_new_pick_qty2 NUMBER;
10306
10307 l_delivery_id number;
10308 l_parent_delivery_detail_id number;
10309 assignment number;
10310 l_delivery_assignment_id number;
10311 detail_rowid VARCHAR2(30);
10312 assignment_rowid VARCHAR2(30);
10313 total number;
10314 l_cr_dt_status varchar2(30);
10315 l_cr_assg_status varchar2(30);
10316 l_output_quantity number;
10317 l_qty_return_status varchar2(30);
10318 new_det_wt_vol_failed exception;
10319 old_det_wt_vol_failed exception;
10320 l_delivery_assignments_info WSH_DELIVERY_DETAILS_PKG.Delivery_Assignments_Rec_Type;
10321 l_delivery_details_info WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type;
10322 l_split_weight number;
10323 l_split_volume number;
10324 l_split_return_status varchar2(30);
10325 l_shipped_quantity NUMBER := NULL;
10326 l_old_stage_qty NUMBER := NULL;
10327 l_ser_qty NUMBER := NULL;
10328
10329 l_original_req_qty NUMBER := NULL;
10330 l_original_req_qty2 NUMBER := NULL;
10331 l_original_picked_qty NUMBER := NULL;
10332 l_original_picked_qty2 NUMBER := NULL;
10333 l_original_recvd_qty NUMBER := NULL;
10334 l_original_recvd_qty2 NUMBER := NULL;
10335 l_original_rtv_qty NUMBER := NULL;
10336 l_original_rtv_qty2 NUMBER := NULL;
10337 l_split_req_qty NUMBER := NULL;
10338 l_split_req_qty2 NUMBER := NULL;
10339 l_split_picked_qty NUMBER := NULL;
10340 l_split_picked_qty2 NUMBER := NULL;
10341 l_split_recvd_qty NUMBER := NULL;
10342 l_split_recvd_qty2 NUMBER := NULL;
10343 l_split_rtv_qty NUMBER := NULL;
10344 l_split_rtv_qty2 NUMBER := NULL;
10345 l_original_shipped_qty NUMBER := NULL;
10346 l_original_cc_qty NUMBER := NULL;
10347 l_split_shipped_qty NUMBER := NULL;
10348 l_split_cc_qty NUMBER := NULL;
10349 -- HW OPMCONV. Removed format of 19,9
10350 l_split_cc_qty2 NUMBER := NULL;
10351 -- HW OPMCONV. Removed format of 19,9
10352 l_original_cc_qty2 NUMBER := NULL;
10353 l_return_status VARCHAR2(30);
10354 -- J: W/V Changes
10355 l_total_gross_wt NUMBER;
10356 l_total_net_wt NUMBER;
10357 l_total_vol NUMBER;
10358 l_org_wv_qty NUMBER;
10359 l_new_wv_qty NUMBER;
10360
10361 -- HW OPMCONV. Removed OPM excpetion
10362
10363
10364 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
10365
10366 WSH_CREATE_DET_ERR EXCEPTION;
10367 WSH_SN_SPLIT_ERR EXCEPTION;
10368
10369 l_updated_delivery_detail_rec SplitDetailRecType;
10370
10371 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
10372 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
10373
10374 --
10375 l_debug_on BOOLEAN;
10376 --
10377 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_DETAIL_INT';
10378 --
10379 l_action VARCHAR2(100) := 'SPLIT-LINE';
10380 BEGIN
10381 --
10382 --
10383 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10384 --
10385 IF l_debug_on IS NULL
10386 THEN
10387 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10388 END IF;
10389 --
10390 IF l_debug_on THEN
10391 WSH_DEBUG_SV.push(l_module_name);
10392 --
10393 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SOURCE_LINE_ID',P_NEW_SOURCE_LINE_ID);
10394 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT',P_QUANTITY_TO_SPLIT);
10395 WSH_DEBUG_SV.log(l_module_name,'P_QUANTITY_TO_SPLIT2',P_QUANTITY_TO_SPLIT2);
10396 WSH_DEBUG_SV.log(l_module_name,'P_UNASSIGN_FLAG',P_UNASSIGN_FLAG);
10397 WSH_DEBUG_SV.log(l_module_name,'P_CONVERTED_FLAG',P_CONVERTED_FLAG);
10398 WSH_DEBUG_SV.log(l_module_name,'P_MANUAL_SPLIT',P_MANUAL_SPLIT);
10399 WSH_DEBUG_SV.log(l_module_name,'P_SPLIT_SN',P_SPLIT_SN);
10400 END IF;
10401 --
10402 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10403
10404 /* need to validate the quantity passed meets the decimal quantity
10405 standard */
10406
10407
10408 -- HW OPMCONV. Removed branching
10409 l_qty2 := p_quantity_to_split2;
10410
10411
10412 IF NVL(p_old_delivery_detail_rec.line_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
10413 THEN
10414 --{
10415
10416 -- For bug 1307771. If shipped quantity is NULL. Then leave the new
10417 -- shipped quantity to be NULL
10418 IF (p_old_delivery_detail_rec.shipped_quantity IS NULL AND p_old_delivery_detail_rec.cycle_count_quantity IS NULL) THEN
10419 l_split_shipped_qty := NULL;
10420 l_split_cc_qty := NULL;
10421 l_split_shipped_qty2 :=NULL;
10422 l_split_cc_qty2 := NULL;
10423
10424 ELSIF (p_manual_split = 'C') THEN
10425
10426 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity,
10427 p_quantity_to_split);
10428 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2,
10429 p_quantity_to_split2);
10430 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity,
10431 (p_quantity_to_split - nvl(l_split_shipped_qty,0)));
10432 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2,
10433 (p_quantity_to_split2 - NVL(l_split_shipped_qty2,0)));
10434
10435 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity -
10436 l_split_shipped_qty;
10437 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity -
10438 l_split_cc_qty;
10439 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 -
10440 l_split_shipped_qty2;
10441 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 -
10442 l_split_cc_qty2;
10443
10444 ELSIF (p_manual_split = 'Y') THEN
10445
10446 /* bug 1983460
10447 if the call is from ship confirm to split only the stage quantity
10448 the split delivery detail has null shipped and cc quantities.
10449 */
10450
10451 l_split_shipped_qty := NULL;
10452 l_split_cc_qty := NULL;
10453 l_split_shipped_qty2 :=NULL;
10454 l_split_cc_qty2 := NULL;
10455
10456 /* bug 1983460
10457 since the split shipped and split cc quantities are null, we should
10458 leave the original shipped and original cc quantities as they are.
10459 */
10460
10461 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity;
10462 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity;
10463 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2;
10464
10465 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2;
10466
10467
10468 ELSE
10469 -- use cc qty to split p_quantity_to_split before we use shipped qty to complete the quantity split
10470 -- (This takes care of splitting lines to backorder/cycle-count, for example.)
10471 -- assumption: the quantities' relationships are valid
10472
10473 l_split_cc_qty := LEAST(p_old_delivery_detail_rec.cycle_count_quantity, p_quantity_to_split);
10474 l_split_cc_qty2 := LEAST(p_old_delivery_detail_rec.cycle_count_quantity2, p_quantity_to_split2);
10475
10476 -- fail-safe: NVL to ensure that shipped qtys can still be split even if cc qtys are NULL
10477 l_split_shipped_qty := LEAST(p_old_delivery_detail_rec.shipped_quantity, (p_quantity_to_split - NVL(l_split_cc_qty,0)));
10478 l_split_shipped_qty2 := LEAST(p_old_delivery_detail_rec.shipped_quantity2, (p_quantity_to_split2 - NVL(l_split_cc_qty2,0)));
10479
10480 -- update original line's quantities accordingly
10481 l_original_shipped_qty := p_old_delivery_detail_rec.shipped_quantity - l_split_shipped_qty;
10482 l_original_cc_qty := p_old_delivery_detail_rec.cycle_count_quantity - l_split_cc_qty;
10483
10484 l_original_shipped_qty2 := p_old_delivery_detail_rec.shipped_quantity2 - l_split_shipped_qty2;
10485 l_original_cc_qty2 := p_old_delivery_detail_rec.cycle_count_quantity2 - l_split_cc_qty2;
10486 END IF;
10487
10488 --
10489 /*
10490 IF l_debug_on THEN
10491 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.INITIALIZE_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
10492 END IF;
10493 --
10494 WSH_DELIVERY_DETAILS_PKG.initialize_detail(
10495 p_delivery_detail_rec => l_delivery_details_info);
10496 */
10497
10498 IF p_old_delivery_detail_rec.picked_quantity IS NULL THEN
10499 l_delivery_details_info.requested_quantity := p_quantity_to_split;
10500 ELSE
10501 l_delivery_details_info.requested_quantity := LEAST(p_old_delivery_detail_rec.requested_quantity, p_quantity_to_split);
10502 l_delivery_details_info.picked_quantity := p_quantity_to_split;
10503 -- HW OPM for OM changes
10504 l_delivery_details_info.requested_quantity2 := LEAST(p_old_delivery_detail_rec.requested_quantity2, p_quantity_to_split2);
10505 -- l_delivery_details_info.picked_quantity2 := nvl(NVL(l_qty2,l_new_pick_qty2),FND_API.G_MISS_NUM);
10506 -- HW OPMCONV. No need to use l_new_pick_qty2
10507 l_delivery_details_info.picked_quantity2 := nvl(l_qty2,FND_API.G_MISS_NUM);
10508 END IF;
10509
10510 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
10511 l_delivery_details_info.requested_quantity2 := FND_API.G_MISS_NUM;
10512 ELSE
10513 l_delivery_details_info.requested_quantity2 := l_qty2;
10514 END IF;
10515 --
10516 --
10517 -- J-IB-NPARIKH-{
10518 l_original_req_qty := GREATEST(p_old_delivery_detail_rec.requested_quantity
10519 - l_delivery_details_info.requested_quantity, 0);
10520 l_original_req_qty2 := GREATEST(p_old_delivery_detail_rec.requested_quantity2 - l_qty2, 0);
10521 l_original_picked_qty := p_old_delivery_detail_rec.picked_quantity - p_quantity_to_split;
10522 --l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - nvl(l_qty2,l_new_pick_qty2);
10523 l_original_picked_qty2 := p_old_delivery_detail_rec.picked_quantity2 - l_qty2;
10524 --
10525 l_original_recvd_qty := p_old_delivery_detail_rec.received_quantity;
10526 l_original_recvd_qty2 := p_old_delivery_detail_rec.received_quantity2;
10527 l_split_recvd_qty := NULL;
10528 l_split_recvd_qty2 := NULL;
10529 -- J-IB-NPARIKH-}
10530
10531
10532 --}
10533 ELSE -- -- J-IB-NPARIKH
10534 --{
10535 --
10536 -- For inbound and drop-ship lines,
10537 -- calculate quantities for new(child) line and original line
10538 -- For new line, quantities are
10539 -- LEAST( qty. on original line, input quantity to be split)
10540 -- For original line, quantities are
10541 -- GREATEST( qty. on original line - qty. on new line, 0 )
10542 -- For a line with picked=12, requested=10, if we split 11 then
10543 -- new line : picked=11, requested=10
10544 -- original line : picked=1, requested=0
10545 --
10546 --
10547 l_split_cc_qty := NULL;
10548 l_split_cc_qty2 := NULL;
10549 l_split_rtv_qty := least(p_old_delivery_detail_rec.returned_quantity, p_quantity_to_split);
10550 l_split_recvd_qty := least(p_old_delivery_detail_rec.received_quantity, p_quantity_to_split);
10551 l_split_shipped_qty := least(p_old_delivery_detail_rec.shipped_quantity, p_quantity_to_split);
10552 l_split_picked_qty := least(p_old_delivery_detail_rec.picked_quantity, p_quantity_to_split);
10553 l_split_req_qty := least(p_old_delivery_detail_rec.requested_quantity,p_quantity_to_split);
10554 --
10555 l_split_rtv_qty2 := least(p_old_delivery_detail_rec.returned_quantity2, l_qty2);
10556 l_split_recvd_qty2 := least(p_old_delivery_detail_rec.received_quantity2, l_qty2);
10557 l_split_shipped_qty2 := least(p_old_delivery_detail_rec.shipped_quantity2, l_qty2);
10558 l_split_picked_qty2 := least(p_old_delivery_detail_rec.picked_quantity2, l_qty2);
10559 l_split_req_qty2 := least(p_old_delivery_detail_rec.requested_quantity2,l_qty2);
10560 --
10561 --
10562 l_delivery_details_info.requested_quantity := nvl(l_split_req_qty, FND_API.G_MISS_NUM);
10563 l_delivery_details_info.requested_quantity2 := nvl(l_split_req_qty2,FND_API.G_MISS_NUM);
10564 l_delivery_details_info.picked_quantity := nvl(l_split_picked_qty, FND_API.G_MISS_NUM);
10565 l_delivery_details_info.picked_quantity2 := nvl(l_split_picked_qty2,FND_API.G_MISS_NUM);
10566 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty, FND_API.G_MISS_NUM);
10567 l_delivery_details_info.shipped_quantity2 := nvl(l_split_shipped_qty2,FND_API.G_MISS_NUM);
10568 l_delivery_details_info.received_quantity := nvl(l_split_recvd_qty, FND_API.G_MISS_NUM);
10569 l_delivery_details_info.received_quantity2 := nvl(l_split_recvd_qty2,FND_API.G_MISS_NUM);
10570 l_delivery_details_info.returned_quantity := nvl(l_split_rtv_qty, FND_API.G_MISS_NUM);
10571 l_delivery_details_info.returned_quantity2 := nvl(l_split_rtv_qty2,FND_API.G_MISS_NUM);
10572 --
10573 --
10574 l_original_shipped_qty := GREATEST(
10575 p_old_delivery_detail_rec.shipped_quantity
10576 - NVL(l_split_shipped_qty,0),
10577 0
10578 );
10579 l_original_cc_qty := GREATEST(
10580 p_old_delivery_detail_rec.cycle_count_quantity
10581 - NVL(l_split_cc_qty,0),
10582 0
10583 );
10584 l_original_shipped_qty2 := GREATEST(
10585 p_old_delivery_detail_rec.shipped_quantity2
10586 - NVL(l_split_shipped_qty2,0),
10587 0
10588 );
10589 l_original_cc_qty2 := GREATEST(
10590 p_old_delivery_detail_rec.cycle_count_quantity2
10591 - NVL(l_split_cc_qty2,0),
10592 0
10593 );
10594 --
10595 l_original_req_qty := GREATEST(
10596 p_old_delivery_detail_rec.requested_quantity
10597 - NVL(l_split_req_qty,0),
10598 0
10599 );
10600 l_original_req_qty2 := GREATEST(
10601 p_old_delivery_detail_rec.requested_quantity2
10602 - NVL(l_split_req_qty2,0),
10603 0
10604 );
10605 l_original_picked_qty := GREATEST(
10606 p_old_delivery_detail_rec.picked_quantity
10607 - NVL(l_split_picked_qty,0),
10608 0
10609 );
10610 l_original_picked_qty2 := GREATEST(
10611 p_old_delivery_detail_rec.picked_quantity2
10612 - NVL(l_split_picked_qty2,0),
10613 0
10614 );
10615 l_original_recvd_qty := GREATEST(
10616 p_old_delivery_detail_rec.received_quantity
10617 - NVL(l_split_recvd_qty,0),
10618 0
10619 );
10620 l_original_recvd_qty2 := GREATEST(
10621 p_old_delivery_detail_rec.received_quantity2
10622 - NVL(l_split_recvd_qty2,0),
10623 0
10624 );
10625
10626 IF l_debug_on THEN
10627 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.requested_quantity', l_delivery_details_info.requested_quantity);
10628 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.requested_quantity2',l_delivery_details_info.requested_quantity2);
10629 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.shipped_quantity', l_delivery_details_info.shipped_quantity);
10630 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.shipped_quantity2',l_delivery_details_info.shipped_quantity2);
10631 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.received_quantity', l_delivery_details_info.received_quantity);
10632 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.received_quantity2',l_delivery_details_info.received_quantity2);
10633 WSH_DEBUG_SV.log(l_module_name,' l_delivery_details_info.returned_quantity', l_delivery_details_info.returned_quantity);
10634 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.returned_quantity2',l_delivery_details_info.returned_quantity2);
10635 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.picked_quantity',l_delivery_details_info.picked_quantity);
10636 WSH_DEBUG_SV.log(l_module_name,'l_delivery_details_info.picked_quantity2',l_delivery_details_info.picked_quantity2);
10637 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty',l_original_shipped_qty);
10638 WSH_DEBUG_SV.log(l_module_name,'l_original_shipped_qty2',l_original_shipped_qty2);
10639 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty',l_original_cc_qty);
10640 WSH_DEBUG_SV.log(l_module_name,'l_original_cc_qty2',l_original_cc_qty2);
10641 WSH_DEBUG_SV.log(l_module_name,'l_original_req_qty',l_original_req_qty);
10642 WSH_DEBUG_SV.log(l_module_name,'l_original_req_qty2',l_original_req_qty2);
10643 WSH_DEBUG_SV.log(l_module_name,'l_original_picked_qty',l_original_picked_qty);
10644 WSH_DEBUG_SV.log(l_module_name,'l_original_picked_qty2',l_original_picked_qty2);
10645 WSH_DEBUG_SV.log(l_module_name,'l_original_recvd_qty',l_original_recvd_qty);
10646 WSH_DEBUG_SV.log(l_module_name,'l_original_recvd_qty2',l_original_recvd_qty2);
10647 WSH_DEBUG_SV.log(l_module_name,'l_original_rtv_qty',l_original_rtv_qty);
10648 WSH_DEBUG_SV.log(l_module_name,'l_original_rtv_qty2',l_original_rtv_qty2);
10649 END IF;
10650
10651 --
10652 --}
10653 END IF;
10654
10655 -- Bug 2181132 in current code for single line
10656 -- donot need the check for null
10657 l_delivery_details_info.source_line_set_id :=
10658 p_old_delivery_detail_rec.source_line_set_id;
10659
10660 IF p_new_source_line_id IS NOT NULL THEN
10661 l_delivery_details_info.source_line_id := p_new_source_line_id;
10662 END IF;
10663
10664 -- J: W/V Changes
10665 IF p_old_delivery_detail_rec.wv_frozen_flag = 'Y' THEN
10666 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)));
10667
10668 IF l_debug_on THEN
10669 WSH_DEBUG_SV.logmsg(l_module_name, 'Frozen Y');
10670 END IF;
10671
10672 IF (p_manual_split = 'Y') THEN
10673 -- p_manual_split is 'Y' only when splitting for staged delivery details during ship confirm
10674 -- Staged delivery details W/V should always be reset back to original W/V
10675 l_new_wv_qty := 0;
10676 ELSE
10677 SELECT NVL(decode(l_split_recvd_qty,FND_API.G_MISS_NUM,null,l_split_recvd_qty),
10678 NVL(decode(l_split_shipped_qty,FND_API.G_MISS_NUM,null,l_split_shipped_qty),
10679 NVL(decode(l_delivery_details_info.picked_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.picked_quantity),
10680 decode(l_delivery_details_info.requested_quantity,FND_API.G_MISS_NUM,null,l_delivery_details_info.requested_quantity))))
10681 INTO l_new_wv_qty
10682 FROM dual;
10683 END IF;
10684
10685 IF l_org_wv_qty <> 0 THEN
10686 l_delivery_details_info.gross_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.gross_weight, 5);
10687 l_delivery_details_info.net_weight := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.net_weight, 5);
10688 l_delivery_details_info.volume := round( (l_new_wv_qty/l_org_wv_qty) * p_old_delivery_detail_rec.volume, 5);
10689 ELSE
10690 l_delivery_details_info.gross_weight := 0;
10691 l_delivery_details_info.net_weight := 0;
10692 l_delivery_details_info.volume := 0;
10693 END IF;
10694
10695
10696 END IF;
10697
10698 IF (l_split_shipped_qty is not null and l_split_shipped_qty = 0) OR (p_manual_split = 'Y') THEN
10699 l_delivery_details_info.wv_frozen_flag := 'N';
10700 ELSE
10701 l_delivery_details_info.wv_frozen_flag := p_old_delivery_detail_rec.wv_frozen_flag;
10702 END IF;
10703 l_delivery_details_info.weight_uom_code := p_old_delivery_detail_rec.weight_uom_code;
10704 l_delivery_details_info.volume_uom_code := p_old_delivery_detail_rec.volume_uom_code;
10705
10706 l_delivery_details_info.shipped_quantity := nvl(l_split_shipped_qty,FND_API.G_MISS_NUM);
10707 IF ( NVL(l_split_shipped_qty2, 0) = 0 ) THEN
10708 l_delivery_details_info.shipped_quantity2 := FND_API.G_MISS_NUM;
10709 ELSE
10710 l_delivery_details_info.shipped_quantity2 := l_split_shipped_qty2;
10711 END IF;
10712 --
10713 --
10714 l_delivery_details_info.received_quantity := nvl(l_split_recvd_qty, FND_API.G_MISS_NUM);
10715 l_delivery_details_info.received_quantity2 := nvl(l_split_recvd_qty2,FND_API.G_MISS_NUM);
10716 --
10717 IF ( NVL(l_qty2, 0) = 0 OR l_qty2 < 0 ) THEN
10718 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
10719 ELSE
10720 -- Bug 2116595
10721 l_delivery_details_info.cancelled_quantity2 := FND_API.G_MISS_NUM;
10722 END IF;
10723
10724 l_delivery_details_info.cycle_count_quantity := nvl(l_split_cc_qty,FND_API.G_MISS_NUM);
10725 -- HW OPMCONV. No need to fork code
10726 -- IF ( p_process_flag = FND_API.G_TRUE ) THEN
10727 l_delivery_details_info.cycle_count_quantity2 := nvl(l_split_cc_qty2,FND_API.G_MISS_NUM);
10728 -- END IF;
10729
10730 -- Bug 2116595
10731 l_delivery_details_info.cancelled_quantity := FND_API.G_MISS_NUM;
10732 l_delivery_details_info.split_from_detail_id := p_old_delivery_detail_rec.delivery_detail_id;
10733
10734 l_delivery_details_info.container_flag := p_old_delivery_detail_rec.container_flag;
10735 l_delivery_details_info.master_serial_number := FND_API.G_MISS_CHAR;
10736 l_delivery_details_info.serial_number := FND_API.G_MISS_CHAR;
10737 l_delivery_details_info.to_serial_number := FND_API.G_MISS_CHAR;
10738 l_delivery_details_info.transaction_temp_id := FND_API.G_MISS_NUM;
10739 l_delivery_details_info.last_update_date := SYSDATE;
10740 l_delivery_details_info.last_updated_by := FND_GLOBAL.USER_ID;
10741 l_delivery_details_info.last_update_login := FND_GLOBAL.LOGIN_ID;
10742 -- Bug 2419301
10743 l_delivery_details_info.oe_interfaced_flag := p_old_delivery_detail_rec.oe_interfaced_flag;
10744
10745 l_new_delivery_detail_id := NULL;
10746
10747
10748 l_updated_delivery_detail_rec := p_old_delivery_detail_rec;
10749
10750 -- HW OPMCONV - Removed branching
10751 -- are there serial numbers to split?
10752
10753 /* bug 1983460
10754 if p_manual_split is 'Y', only stage quantity is involved.
10755 Staged quantities can't have serial numbers and hence no need to call
10756 */
10757
10758
10759 IF ( p_split_sn = 'Y'
10760 AND NVL(p_old_delivery_detail_rec.shipped_quantity, 0) > NVL(l_original_shipped_qty, 0)
10761 AND ( (p_old_delivery_detail_rec.transaction_temp_id IS NOT NULL)
10762 OR (p_old_delivery_detail_rec.serial_number IS NOT NULL)
10763 )
10764 AND (NVL(p_manual_split,'!') <> 'Y')
10765 ) THEN
10766
10767 Split_Serial_Numbers_INT(
10768 x_old_detail_rec => l_updated_delivery_detail_rec,
10769 x_new_delivery_detail_rec => l_delivery_details_info,
10770 p_old_shipped_quantity => l_original_shipped_qty,
10771 p_new_shipped_quantity => l_split_shipped_qty,
10772 x_return_status => l_split_return_status);
10773
10774 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
10775 RAISE wsh_sn_split_err;
10776 END IF;
10777
10778 END IF; -- are there serial numbers to split?
10779
10780 --
10781 IF l_debug_on THEN
10782 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);
10783 END IF;
10784 --
10785 WSH_DELIVERY_DETAILS_PKG.create_new_detail_from_old(
10786 p_delivery_detail_rec => l_delivery_details_info,
10787 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
10788 x_row_id => detail_rowid,
10789 x_delivery_detail_id => l_new_delivery_detail_id,
10790 x_return_status => l_cr_dt_status);
10791
10792 IF l_cr_dt_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
10793 RAISE WSH_CREATE_DET_ERR;
10794 END IF;
10795
10796
10797 /* call wv util to calculate the weight and volume of the new detail */
10798 -- J: W/V Changes
10799 IF p_old_delivery_detail_rec.wv_frozen_flag = 'N' THEN
10800 -- Bug 4416863
10801 -- During Partial Shipping with the remain qty as staged, w/v value should not be
10802 -- deducted again from the original line since during entering shipped_quantity
10803 -- w/v has been calculated for the original line.
10804 IF (p_manual_split = 'Y') THEN
10805 l_total_net_wt := 0;
10806 l_total_gross_wt := 0;
10807 l_total_vol := 0;
10808 ELSE
10809 -- end bug 4416863
10810 IF l_debug_on THEN
10811 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
10812 END IF;
10813
10814 WSH_WV_UTILS.Detail_Weight_Volume(
10815 p_delivery_detail_id => l_new_delivery_detail_id,
10816 p_update_flag => 'Y',
10817 x_net_weight => l_split_weight,
10818 x_volume => l_split_volume,
10819 x_return_status => l_split_return_status);
10820 IF (l_split_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
10821 RAISE new_det_wt_vol_failed;
10822 END IF;
10823 l_total_net_wt := l_split_weight;
10824 l_total_gross_wt := l_split_weight;
10825 l_total_vol := l_split_volume;
10826 END IF;
10827 ELSE
10828 l_total_net_wt := l_delivery_details_info.net_weight;
10829 l_total_gross_wt := l_delivery_details_info.gross_weight;
10830 l_total_vol := l_delivery_details_info.volume;
10831 END IF;
10832
10833 IF (p_unassign_flag = 'N') THEN
10834 l_delivery_assignments_info.type := 'S';
10835 l_delivery_assignments_info.delivery_id := p_old_delivery_detail_rec.delivery_id;
10836 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
10837 IF p_old_delivery_detail_rec.wda_type = 'C' THEN
10838 l_delivery_assignments_info.type := 'O';
10839 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
10840 END IF;
10841 ELSE
10842 l_delivery_assignments_info.delivery_id := NULL;
10843 l_delivery_assignments_info.parent_delivery_detail_id := NULL;
10844 END IF;
10845
10846 l_delivery_assignments_info.delivery_detail_id := l_new_delivery_detail_id;
10847 --
10848 IF l_debug_on THEN
10849 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.CREATE_DELIVERY_ASSIGNMENTS',WSH_DEBUG_SV.C_PROC_LEVEL);
10850 END IF;
10851 --
10852 wsh_delivery_details_pkg.create_delivery_assignments(
10853 l_delivery_assignments_info,
10854 assignment_rowid,
10855 l_delivery_assignment_id,
10856 l_cr_assg_status
10857 );
10858
10859 -- Bug 3724578 : Return back to the caller if any error occurs
10860 -- while creating the delivery detail assignments
10861 --- Message will be set in create_delivery_assignments
10862 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
10863 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
10864 ) THEN
10865 x_return_status := l_cr_assg_status;
10866 return;
10867 END IF;
10868
10869 -- K: MDC: We need to create consolidation records if necessary.
10870
10871 IF (p_unassign_flag = 'N') AND (p_old_delivery_detail_rec.wda_type = 'C') THEN
10872
10873 l_delivery_assignments_info.parent_delivery_id := p_old_delivery_detail_rec.parent_delivery_id;
10874 l_delivery_assignments_info.parent_delivery_detail_id := p_old_delivery_detail_rec.parent_delivery_detail_id;
10875 l_delivery_assignments_info.type := 'C';
10876
10877 wsh_delivery_details_pkg.create_delivery_assignments(
10878 l_delivery_assignments_info,
10879 assignment_rowid,
10880 l_delivery_assignment_id,
10881 l_cr_assg_status
10882 );
10883
10884 IF l_cr_assg_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,
10885 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR
10886 ) THEN
10887 x_return_status := l_cr_assg_status;
10888 return;
10889 END IF;
10890
10891 END IF;
10892
10893
10894
10895 /*2442099*/
10896 Log_Exceptions(p_old_delivery_detail_rec.delivery_detail_id,l_new_delivery_detail_id,l_delivery_assignments_info.delivery_id,l_action);
10897
10898 /* NC - Added the following for OPM BUG#1675561 */
10899 /* LG BUG#:2005977 */
10900 /* LG new */
10901
10902 /* HW OPMCONV - Removed branching
10903 /* Bug 2177410, also update net_weight and volume of original delivery detail
10904 because non item does not use WSH_WV_UTILS.Detail_Weight_Volume to
10905 adjust the net_weight and volume */
10906
10907 x_split_detail_id := l_new_delivery_detail_id;
10908
10909 IF l_debug_on THEN
10910 WSH_DEBUG_SV.logmsg(l_module_name, 'Before Update wsh_delivery_details');
10911 WSH_DEBUG_SV.log(l_module_name, 'serial_number',l_updated_delivery_detail_rec.serial_number);
10912 WSH_DEBUG_SV.log(l_module_name, 'to_serial_number',l_updated_delivery_detail_rec.to_serial_number);
10913 WSH_DEBUG_SV.log(l_module_name, 'transaction_temp_id',l_updated_delivery_detail_rec.transaction_temp_id);
10914 END IF;
10915
10916 UPDATE wsh_delivery_details
10917 SET requested_quantity = l_original_req_qty, -- J-IB-NPARIKH, GREATEST(requested_quantity - l_delivery_details_info.requested_quantity, 0),
10918 requested_quantity2 = l_original_req_qty2, -- J-IB-NPARIKH, GREATEST(requested_quantity2 - l_qty2, 0),
10919 picked_quantity = l_original_picked_qty, -- J-IB-NPARIKH, picked_quantity - p_quantity_to_split,
10920 picked_quantity2 = l_original_picked_qty2, -- J-IB-NPARIKH, picked_quantity2 - nvl(l_qty2,l_new_pick_qty2),
10921 shipped_quantity = l_original_shipped_qty,
10922 shipped_quantity2 = l_original_shipped_qty2,
10923 received_quantity = l_original_recvd_qty, -- J-IB-NPARIKH
10924 received_quantity2 = l_original_recvd_qty2, -- J-IB-NPARIKH
10925 --returned_quantity = l_original_rtv_qty, -- J-IB-NPARIKH
10926 --returned_quantity2 = l_original_rtv_qty2, -- J-IB-NPARIKH
10927 cycle_count_quantity = l_original_cc_qty,
10928 cycle_count_quantity2 = l_original_cc_qty2,
10929 serial_number = decode(l_updated_delivery_detail_rec.serial_number,FND_API.G_MISS_CHAR,NULL,
10930 NULL,serial_number,l_updated_delivery_detail_rec.serial_number),
10931 to_serial_number = decode(l_updated_delivery_detail_rec.to_serial_number,FND_API.G_MISS_CHAR,NULL,
10932 NULL,to_serial_number,l_updated_delivery_detail_rec.to_serial_number),
10933 transaction_temp_id = decode(l_updated_delivery_detail_rec.transaction_temp_id, FND_API.G_MISS_NUM,NULL,
10934 NULL,transaction_temp_id,l_updated_delivery_detail_rec.transaction_temp_id),
10935 -- J: W/V Changes
10936 gross_weight = gross_weight - l_total_gross_wt,
10937 net_weight = net_weight - l_total_net_wt,
10938 volume = volume - l_total_vol,
10939 -- End J: W/V Changes
10940 last_update_date = SYSDATE,
10941 last_updated_by = FND_GLOBAL.USER_ID,
10942 last_update_login = FND_GLOBAL.LOGIN_ID
10943 WHERE delivery_detail_id = p_old_delivery_detail_rec.delivery_detail_id;
10944
10945 -- DBI Project
10946 -- Update of wsh_delivery_details where requested_quantity/released_status
10947 -- are changed, call DBI API after the update.
10948 -- This API will also check for DBI Installed or not
10949 IF l_debug_on THEN
10950 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail id-',p_old_delivery_detail_rec.delivery_detail_id);
10951 END IF;
10952 l_detail_tab(1) := p_old_delivery_detail_rec.delivery_detail_id;
10953 WSH_INTEGRATION.DBI_Update_Detail_Log
10954 (p_delivery_detail_id_tab => l_detail_tab,
10955 p_dml_type => 'UPDATE',
10956 x_return_status => l_dbi_rs);
10957
10958 IF l_debug_on THEN
10959 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
10960 END IF;
10961 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
10962 x_return_status := l_dbi_rs;
10963 -- just pass this return status to caller API
10964 IF l_debug_on THEN
10965 WSH_DEBUG_SV.pop(l_module_name);
10966 END IF;
10967 return;
10968 END IF;
10969 -- End of Code for DBI Project
10970 --
10971
10972 -- J: W/V Changes
10973 -- Decrement the DD W/V from parent if p_unassign_flag is 'Y'
10974 IF (p_unassign_flag = 'Y') THEN
10975 IF l_debug_on THEN
10976 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
10977 END IF;
10978 --
10979 WSH_WV_UTILS.DD_WV_Post_Process(
10980 p_delivery_detail_id => p_old_delivery_detail_rec.delivery_detail_id,
10981 p_diff_gross_wt => -1 * l_total_gross_wt,
10982 p_diff_net_wt => -1 * l_total_net_wt,
10983 p_diff_fill_volume => -1 * l_total_vol,
10984 x_return_status => l_return_status);
10985
10986 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
10987 --
10988 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10989 WSH_UTIL_CORE.Add_Message(x_return_status);
10990 IF l_debug_on THEN
10991 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
10992 WSH_DEBUG_SV.pop(l_module_name);
10993 END IF;
10994 return;
10995 END IF;
10996 END IF;
10997
10998 --
10999 IF l_debug_on THEN
11000 WSH_DEBUG_SV.pop(l_module_name);
11001 END IF;
11002 --
11003 EXCEPTION
11004 -- HW OPMCONV. Removed OPM exception
11005
11006 WHEN old_det_wt_vol_failed THEN
11007 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11008 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
11009 FND_MESSAGE.SET_TOKEN('DETAIL_ID', p_old_delivery_detail_rec.delivery_detail_id);
11010 wsh_util_core.add_message(x_return_status,l_module_name);
11011 --
11012 IF l_debug_on THEN
11013 WSH_DEBUG_SV.logmsg(l_module_name,'OLD_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11014 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OLD_DET_WT_VOL_FAILED');
11015 END IF;
11016 --
11017 WHEN new_det_wt_vol_failed THEN
11018 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11019 fnd_message.set_name('WSH', 'WSH_DET_WT_VOL_FAILED');
11020 FND_MESSAGE.SET_TOKEN('DETAIL_ID', l_new_DELIVERY_DETAIL_ID);
11021 wsh_util_core.add_message(x_return_status,l_module_name);
11022 --
11023 IF l_debug_on THEN
11024 WSH_DEBUG_SV.logmsg(l_module_name,'NEW_DET_WT_VOL_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11025 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:NEW_DET_WT_VOL_FAILED');
11026 END IF;
11027 --
11028 WHEN WSH_SN_SPLIT_ERR THEN
11029 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11030 fnd_message.set_name('WSH', 'WSH_SN_SPLIT_ERR');
11031 wsh_util_core.add_message(x_return_status,l_module_name);
11032 --
11033 IF l_debug_on THEN
11034 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11035 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_SN_SPLIT_ERR');
11036 END IF;
11037 --
11038 WHEN WSH_CREATE_DET_ERR THEN
11039 x_return_status := l_cr_dt_status;
11040 IF l_debug_on THEN
11041 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_SN_SPLIT_ERR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
11042 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DET_ERR');
11043 END IF;
11044
11045 WHEN others THEN
11046 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11047 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DETAIL_INT',l_module_name);
11048 --
11049 IF l_debug_on THEN
11050 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11051 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11052 END IF;
11053 --
11054 END SPLIT_DETAIL_INT;
11055
11056 /*****************************************************
11057 ----- SPLIT_SERIAL_NUMBERS_INT api
11058 *****************************************************/
11059
11060 PROCEDURE Split_Serial_Numbers_INT(
11061 x_old_detail_rec IN OUT NOCOPY SplitDetailRecType,
11062 x_new_delivery_detail_rec IN OUT NOCOPY WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Rec_Type,
11063 p_old_shipped_quantity IN NUMBER,
11064 p_new_shipped_quantity IN NUMBER,
11065 x_return_status OUT NOCOPY VARCHAR2) IS
11066
11067 l_ser_qty NUMBER;
11068
11069 l_real_serial_prefix WSH_DELIVERY_DETAILS.SERIAL_NUMBER%TYPE;
11070 l_prefix_length NUMBER;
11071 l_fm_numeric NUMBER;
11072 l_to_numeric NUMBER;
11073 l_range_count NUMBER;
11074 l_qty_to_split NUMBER;
11075 l_new_sn WSH_DELIVERY_DETAILS.SERIAL_NUMBER%TYPE;
11076 l_new_to_sn WSH_DELIVERY_DETAILS.TO_SERIAL_NUMBER%TYPE;
11077 l_old_to_sn WSH_DELIVERY_DETAILS.TO_SERIAL_NUMBER%TYPE;
11078 l_transaction_temp_id NUMBER := NULL;
11079 l_success NUMBER;
11080
11081 -- Bug 3782838
11082 CURSOR c_sn_ranges(x_tt_id IN NUMBER) IS
11083 SELECT msnt.rowid,
11084 msnt.transaction_temp_id,
11085 msnt.fm_serial_number,
11086 msnt.to_serial_number,
11087 msnt.attribute_category,
11088 msnt.attribute1,
11089 msnt.attribute2,
11090 msnt.attribute3,
11091 msnt.attribute4,
11092 msnt.attribute5,
11093 msnt.attribute6,
11094 msnt.attribute7,
11095 msnt.attribute8,
11096 msnt.attribute9,
11097 msnt.attribute10,
11098 msnt.attribute11,
11099 msnt.attribute12,
11100 msnt.attribute13,
11101 msnt.attribute14,
11102 msnt.attribute15,
11103 msnt.dff_updated_flag
11104 FROM mtl_serial_numbers_temp msnt
11105 WHERE msnt.transaction_temp_id = x_tt_id
11106 ORDER BY msnt.fm_serial_number DESC;
11107
11108 CURSOR c_temp_id IS
11109 select mtl_material_transactions_s.nextval
11110 from dual;
11111
11112 --
11113 l_debug_on BOOLEAN;
11114 --
11115 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'SPLIT_SERIAL_NUMBERS_INT';
11116 --
11117 BEGIN
11118
11119 --
11120 --
11121 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11122 --
11123 IF l_debug_on IS NULL
11124 THEN
11125 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11126 END IF;
11127 --
11128 IF l_debug_on THEN
11129 WSH_DEBUG_SV.push(l_module_name);
11130 --
11131 WSH_DEBUG_SV.log(l_module_name,'P_OLD_SHIPPED_QUANTITY',P_OLD_SHIPPED_QUANTITY);
11132 WSH_DEBUG_SV.log(l_module_name,'P_NEW_SHIPPED_QUANTITY',P_NEW_SHIPPED_QUANTITY);
11133 WSH_DEBUG_SV.log(l_module_name,'old serial_number',
11134 x_old_detail_rec.serial_number);
11135 WSH_DEBUG_SV.log(l_module_name,'old to_serial_number',
11136 x_old_detail_rec.to_serial_number);
11137 WSH_DEBUG_SV.log(l_module_name,'old transaction_temp_id',
11138 x_old_detail_rec.transaction_temp_id);
11139 WSH_DEBUG_SV.log(l_module_name,'old shipped_quantity',
11140 x_old_detail_rec.shipped_quantity);
11141 WSH_DEBUG_SV.log(l_module_name,'old delivery_detail_id',
11142 x_old_detail_rec.delivery_detail_id);
11143 WSH_DEBUG_SV.log(l_module_name,'old organization_id',
11144 x_old_detail_rec.organization_id);
11145 WSH_DEBUG_SV.log(l_module_name,'old inventory_item_id',
11146 x_old_detail_rec.inventory_item_id);
11147
11148 END IF;
11149 --
11150 IF p_old_shipped_quantity = 0 THEN
11151 -- new delivery line has the full shipped quantity and gets all serial number info
11152
11153 x_new_delivery_detail_rec.serial_number := x_old_detail_rec.serial_number;
11154 x_new_delivery_detail_rec.to_serial_number := x_old_detail_rec.to_serial_number;
11155 x_new_delivery_detail_rec.transaction_temp_id := x_old_detail_rec.transaction_temp_id;
11156
11157 x_old_detail_rec.serial_number := FND_API.G_MISS_CHAR;
11158 x_old_detail_rec.to_serial_number := FND_API.G_MISS_CHAR;
11159 x_old_detail_rec.transaction_temp_id := FND_API.G_MISS_NUM;
11160
11161 ELSIF p_old_shipped_quantity < x_old_detail_rec.shipped_quantity THEN
11162 -- we are reducing old shipped quantity
11163
11164 IF x_old_detail_rec.transaction_temp_id IS NULL THEN
11165
11166 IF x_old_detail_rec.to_serial_number IS NOT NULL THEN
11167
11168 -- we have one range SERIAL_NUMBER - TO_SERIAL_NUMBER to split
11169 l_real_serial_prefix := RTRIM(x_old_detail_rec.serial_number,
11170 '0123456789');
11171 l_prefix_length := NVL(LENGTH(l_real_serial_prefix), 0);
11172 l_fm_numeric := TO_NUMBER(SUBSTR(x_old_detail_rec.serial_number,
11173 l_prefix_length + 1));
11174 l_to_numeric := TO_NUMBER(SUBSTR(x_old_detail_rec.to_serial_number,
11175 l_prefix_length + 1));
11176 l_range_count := l_to_numeric - l_fm_numeric + 1;
11177
11178 IF l_range_count > p_old_shipped_quantity THEN
11179 -- we need to split the serial number range.
11180 l_qty_to_split := l_range_count - p_old_shipped_quantity;
11181
11182 l_new_to_sn := x_old_detail_rec.to_serial_number;
11183 l_old_to_sn := l_real_serial_prefix
11184 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split),
11185 LENGTH(x_old_detail_rec.serial_number) - l_prefix_length,
11186 '0');
11187
11188 l_new_sn := l_real_serial_prefix
11189 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split+1),
11190 LENGTH(x_old_detail_rec.serial_number) - l_prefix_length,
11191 '0');
11192
11193 -- compress range of same serial numbers to individual serial number
11194 IF l_old_to_sn = x_old_detail_rec.serial_number THEN
11195 l_old_to_sn := FND_API.G_MISS_CHAR;
11196 END IF;
11197 IF l_new_to_sn = l_new_sn THEN
11198 l_new_to_sn := FND_API.G_MISS_CHAR;
11199 END IF;
11200
11201 x_old_detail_rec.to_serial_number := l_old_to_sn;
11202 x_new_delivery_detail_rec.serial_number := l_new_sn;
11203 x_new_delivery_detail_rec.to_serial_number := l_new_to_sn;
11204
11205 END IF; -- l_range_count > p_old_shipped_quantity
11206 IF l_debug_on THEN
11207 WSH_DEBUG_SV.log(l_module_name,'serial_number',
11208 x_new_delivery_detail_rec.serial_number);
11209 WSH_DEBUG_SV.log(l_module_name,'to_serial_number',
11210 x_new_delivery_detail_rec.to_serial_number);
11211 END IF;
11212
11213 END IF; -- x_old_detail_rec.to_serail_number IS NULL
11214
11215 ELSE
11216
11217 -- we have at least one record in MTL_SERIAL_NUMBERS_TEMP
11218 --
11219 IF l_debug_on THEN
11220 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_SERIAL_QTY',WSH_DEBUG_SV.C_PROC_LEVEL);
11221 END IF;
11222 --
11223 l_ser_qty := WSH_DELIVERY_DETAILS_INV.Get_Serial_Qty(
11224 p_organization_id => x_old_detail_rec.organization_id,
11225 p_delivery_detail_id => x_old_detail_rec.delivery_detail_id);
11226 l_qty_to_split := l_ser_qty - p_old_shipped_quantity;
11227 --
11228 IF l_debug_on THEN
11229 WSH_DEBUG_SV.log(l_module_name,'L_QTY_TO_SPLIT',l_qty_to_split);
11230 END IF;
11231 --
11232
11233 IF l_qty_to_split >= 1 THEN
11234
11235 IF p_new_shipped_quantity >= 1 THEN -- Bug 3782838, Generate id for Single also
11236 --IF l_qty_to_split > 1 THEN
11237 -- more than one serial number, we need new transaction_temp_id
11238 OPEN c_temp_id;
11239 FETCH c_temp_id INTO l_transaction_temp_id;
11240 IF c_temp_id%NOTFOUND THEN
11241 CLOSE c_temp_id;
11242 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11243 --
11244 IF l_debug_on THEN
11245 WSH_DEBUG_SV.log(l_module_name,'Return Status is error',x_return_status);
11246 WSH_DEBUG_SV.pop(l_module_name);
11247 END IF;
11248 --
11249 return;
11250 END IF;
11251 CLOSE c_temp_id;
11252 IF l_debug_on THEN
11253 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',
11254 l_transaction_temp_id);
11255 END IF;
11256 END IF;
11257 x_new_delivery_detail_rec.transaction_temp_id := nvl(l_transaction_temp_id,FND_API.G_MISS_NUM);
11258
11259 FOR c IN c_sn_ranges(x_old_detail_rec.transaction_temp_id) LOOP
11260
11261 -- Bug 3782838 : Retain transaction_temp_id for single serial number
11262 IF (l_qty_to_split <= 0) THEN
11263 EXIT; -- finished with splitting serial numbers
11264 END IF;
11265 IF l_debug_on THEN
11266 WSH_DEBUG_SV.log(l_module_name,'c.to_serial_number',
11267 c.to_serial_number);
11268 WSH_DEBUG_SV.log(l_module_name,'c.fm_serial_number',
11269 c.fm_serial_number);
11270 END IF;
11271
11272 -- OR condition added for bug 4424259, making l_range_count = 1 if from and to serial numbers are same.
11273 IF c.to_serial_number IS NULL OR ( c.fm_serial_number = c.to_serial_number ) THEN
11274 l_range_count := 1;
11275 ELSE
11276 -- serial number range
11277 l_real_serial_prefix := RTRIM(c.fm_serial_number,
11278 '0123456789');
11279 l_prefix_length := NVL(LENGTH(l_real_serial_prefix), 0);
11280 l_fm_numeric := TO_NUMBER(SUBSTR(c.fm_serial_number,
11281 l_prefix_length + 1));
11282 l_to_numeric := TO_NUMBER(SUBSTR(c.to_serial_number,
11283 l_prefix_length + 1));
11284 l_range_count := l_to_numeric - l_fm_numeric + 1;
11285 END IF; -- c.to_serial_number IS NULL
11286 IF l_debug_on THEN
11287 WSH_DEBUG_SV.log(l_module_name,'l_range_count',
11288 l_range_count);
11289 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_split',
11290 l_qty_to_split);
11291 END IF;
11292
11293 IF l_range_count > l_qty_to_split THEN
11294
11295 l_new_to_sn := c.to_serial_number;
11296 l_old_to_sn := l_real_serial_prefix
11297 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split),
11298 LENGTH(c.fm_serial_number) - l_prefix_length,
11299 '0');
11300 l_new_sn := l_real_serial_prefix
11301 || LPAD(TO_CHAR(l_to_numeric-l_qty_to_split+1),
11302 LENGTH(c.fm_serial_number) - l_prefix_length,
11303 '0');
11304
11305 IF p_old_shipped_quantity >= 1 THEN
11306 -- Bug 3782838 : Retain id for single serial number
11307 -- update record only if old delivery line still has at least 1 to ship.
11308 IF l_debug_on THEN
11309 WSH_DEBUG_SV.log(l_module_name,'l_old_to_sn',l_old_to_sn);
11310 END IF;
11311 UPDATE mtl_serial_numbers_temp
11312 SET to_serial_number = l_old_to_sn,
11313 serial_prefix = TO_CHAR(l_range_count - l_qty_to_split),
11314 last_update_date = SYSDATE,
11315 last_updated_by = FND_GLOBAL.USER_ID,
11316 last_update_login = FND_GLOBAL.LOGIN_ID
11317 WHERE rowid = c.rowid;
11318 END IF;
11319 IF l_debug_on THEN
11320 WSH_DEBUG_SV.log(l_module_name,
11321 'inserting into mtl_serial_numbers_temp'
11322 ,l_transaction_temp_id);
11323 END IF;
11324
11325 -- Changes for 3782838
11326 IF l_transaction_temp_id IS NOT NULL THEN
11327 INSERT INTO mtl_serial_numbers_temp
11328 (TRANSACTION_TEMP_ID,
11329 LAST_UPDATE_DATE,
11330 LAST_UPDATED_BY,
11331 LAST_UPDATE_LOGIN,
11332 CREATION_DATE,
11333 CREATED_BY,
11334 FM_SERIAL_NUMBER,
11335 TO_SERIAL_NUMBER,
11336 SERIAL_PREFIX,
11337 ATTRIBUTE_CATEGORY,
11338 ATTRIBUTE1,
11339 ATTRIBUTE2,
11340 ATTRIBUTE3,
11341 ATTRIBUTE4,
11342 ATTRIBUTE5,
11343 ATTRIBUTE6,
11344 ATTRIBUTE7,
11345 ATTRIBUTE8,
11346 ATTRIBUTE9,
11347 ATTRIBUTE10,
11348 ATTRIBUTE11,
11349 ATTRIBUTE12,
11350 ATTRIBUTE13,
11351 ATTRIBUTE14,
11352 ATTRIBUTE15,
11353 DFF_UPDATED_FLAG)
11354 VALUES
11355 (l_transaction_temp_id,
11356 SYSDATE,
11357 FND_GLOBAL.USER_ID,
11358 FND_GLOBAL.LOGIN_ID,
11359 SYSDATE,
11360 FND_GLOBAL.USER_ID,
11361 l_new_sn,
11362 l_new_to_sn,
11363 TO_CHAR(l_qty_to_split),
11364 c.attribute_category,
11365 c.attribute1,
11366 c.attribute2,
11367 c.attribute3,
11368 c.attribute4,
11369 c.attribute5,
11370 c.attribute6,
11371 c.attribute7,
11372 c.attribute8,
11373 c.attribute9,
11374 c.attribute10,
11375 c.attribute11,
11376 c.attribute12,
11377 c.attribute13,
11378 c.attribute14,
11379 c.attribute15,
11380 c.dff_updated_flag
11381 );
11382 -- End of changes for 3782838
11383
11384 -- bug 2740681
11385 IF l_debug_on THEN
11386 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_Unmark_Serial');
11387 WSH_DEBUG_SV.log(l_module_name,'l_new_sn,l_new_to_sn,inventory_item_id', l_new_sn
11388 ||','||l_new_to_sn
11389 ||','||x_old_detail_rec.inventory_item_id);
11390 END IF;
11391 Serial_Check.Inv_Unmark_Serial(
11392 l_new_sn,
11393 l_new_to_sn,
11394 NULL,
11395 NULL,
11396 NULL,
11397 NULL,
11398 x_old_detail_rec.inventory_item_id);
11399
11400 IF l_debug_on THEN
11401 WSH_DEBUG_SV.logmsg(l_module_name,'After Calling Serial_Check.Inv_Unmark_Serial');
11402 END IF;
11403
11404 IF l_debug_on THEN
11405 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_mark_Serial');
11406 WSH_DEBUG_SV.log(l_module_name,'l_new_sn',l_new_sn);
11407 WSH_DEBUG_SV.log(l_module_name,'l_new_to_sn',l_new_to_sn);
11408 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',x_old_detail_rec.inventory_item_id);
11409 WSH_DEBUG_SV.log(l_module_name,'organization_id',x_old_detail_rec.organization_id);
11410 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',l_transaction_temp_id);
11411 END IF;
11412 Serial_Check.Inv_Mark_Serial(
11413 l_new_sn,
11414 l_new_to_sn,
11415 x_old_detail_rec.inventory_item_id,
11416 x_old_detail_rec.organization_id,
11417 l_transaction_temp_id,
11418 l_transaction_temp_id,
11419 l_transaction_temp_id,
11420 l_success);
11421 IF l_debug_on THEN
11422 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11423 END IF;
11424
11425 IF l_success < 0 THEN
11426 FND_MESSAGE.SET_NAME('WSH','WSH_SER_RANGE_MK_ERROR');
11427 FND_MESSAGE.SET_TOKEN('FM_SERIAL',l_new_sn);
11428 FND_MESSAGE.SET_TOKEN('TO_SERIAL',l_new_to_sn);
11429 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11430 WSH_UTIL_CORE.Add_Message(x_return_status);
11431 END IF;
11432 -- bug 2740681
11433
11434 ELSE
11435 x_new_delivery_detail_rec.serial_number := c.to_serial_number;
11436 END IF;
11437
11438 l_qty_to_split := 0;
11439
11440 IF l_debug_on THEN
11441 WSH_DEBUG_SV.log(l_module_name,'new serial_number',
11442 x_new_delivery_detail_rec.serial_number);
11443 END IF;
11444 ELSE
11445 IF l_debug_on THEN
11446 WSH_DEBUG_SV.logmsg(l_module_name,'Split qty is grater than range');
11447 END IF;
11448
11449 IF l_transaction_temp_id IS NOT NULL THEN
11450 IF l_debug_on THEN
11451 WSH_DEBUG_SV.log(l_module_name,
11452 'Updating mtl_serial_numbers_temp',
11453 l_transaction_temp_id);
11454 END IF;
11455 -- we need to assign the full serial number range to the new line
11456 UPDATE mtl_serial_numbers_temp
11457 SET transaction_temp_id = l_transaction_temp_id,
11458 last_update_date = SYSDATE,
11459 last_updated_by = FND_GLOBAL.USER_ID,
11460 last_update_login = FND_GLOBAL.LOGIN_ID
11461 WHERE rowid = c.rowid;
11462
11463 --Bug 2740681
11464 IF l_debug_on THEN
11465 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_Unmark_Serial');
11466 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);
11467 END IF;
11468 Serial_Check.Inv_Unmark_Serial(
11469 c.fm_serial_number,
11470 c.to_serial_number,
11471 NULL,
11472 NULL,
11473 NULL,
11474 NULL,
11475 x_old_detail_rec.inventory_item_id);
11476 IF l_debug_on THEN
11477 WSH_DEBUG_SV.logmsg(l_module_name,'After Calling Serial_Check.Inv_Unmark_Serial');
11478 END IF;
11479
11480 IF l_debug_on THEN
11481 WSH_DEBUG_SV.logmsg(l_module_name,'Before Calling Serial_Check.Inv_mark_Serial');
11482 WSH_DEBUG_SV.log(l_module_name,'fm_serial_number',c.fm_serial_number);
11483 WSH_DEBUG_SV.log(l_module_name,'to_serial_number',c.to_serial_number);
11484 WSH_DEBUG_SV.log(l_module_name,'inventory_item_id',x_old_detail_rec.inventory_item_id);
11485 WSH_DEBUG_SV.log(l_module_name,'organization_id',x_old_detail_rec.organization_id);
11486 WSH_DEBUG_SV.log(l_module_name,'l_transaction_temp_id',l_transaction_temp_id);
11487 END IF;
11488 Serial_Check.Inv_Mark_Serial(
11489 c.fm_serial_number,
11490 c.to_serial_number,
11491 x_old_detail_rec.inventory_item_id,
11492 x_old_detail_rec.organization_id,
11493 l_transaction_temp_id,
11494 l_transaction_temp_id,
11495 l_transaction_temp_id,
11496 l_success);
11497 IF l_debug_on THEN
11498 WSH_DEBUG_SV.log(l_module_name,'After Serial_Check.Inv_mark_Serial l_success',l_success);
11499 END IF;
11500
11501 IF l_success < 0 THEN
11502 FND_MESSAGE.SET_NAME('WSH','WSH_SER_RANGE_MK_ERROR');
11503 FND_MESSAGE.SET_TOKEN('FM_SERIAL', c.fm_serial_number);
11504 FND_MESSAGE.SET_TOKEN('TO_SERIAL', c.to_serial_number);
11505 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11506 WSH_UTIL_CORE.Add_Message(x_return_status);
11507 END IF;
11508 --bug 2740681
11509 ELSE
11510 -- we need to remove this serial number range (which has count of 1)
11511 x_new_delivery_detail_rec.serial_number := c.fm_serial_number;
11512 DELETE mtl_serial_numbers_temp
11513 WHERE rowid = c.rowid;
11514 END IF;
11515
11516 l_qty_to_split := l_qty_to_split - l_range_count;
11517
11518 END IF; -- l_range_count > l_qty_to_split
11519 IF l_debug_on THEN
11520 WSH_DEBUG_SV.log(l_module_name,'l_qty_to_split',
11521 l_qty_to_split);
11522 END IF;
11523
11524 IF (l_qty_to_split <= 0) AND (p_old_shipped_quantity > 1) THEN
11525 -- finished with splitting serial numbers
11526 EXIT;
11527 END IF;
11528
11529 END LOOP; -- c_sn_ranges
11530
11531 END IF; -- l_qty_to_split >= 1
11532
11533 END IF; -- x_old_detail_rec.transaction_temp_id IS NULL
11534
11535 END IF; -- p_old_shipped_quantity < x_old_detail_rec.shipped_quantity
11536
11537 --
11538 IF l_debug_on THEN
11539 WSH_DEBUG_SV.pop(l_module_name);
11540 END IF;
11541 --
11542 EXCEPTION
11543 WHEN others THEN
11544 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11545 wsh_util_core.default_handler('WSH_USA_ACTIONS_PVT.SPLIT_SERIAL_NUMBERS_INT',l_module_name);
11546
11547 --
11548 IF l_debug_on THEN
11549 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11550 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11551 END IF;
11552 --
11553 END Split_Serial_Numbers_INT;
11554
11555 -- THIS PROCEDURE IS OBSOLETE
11556 --
11557 -- Name
11558 -- Explode_Delivery_Details
11559 -- Purpose
11560 -- Takes individual lines FROM MTL_SERIAL_NUMBERS_TEMP that
11561 -- are under serial number control and explodes them into multiple
11562 -- lines based on the serial numbers entered.
11563 --
11564 -- Bug 1752809: rewritten to explode into serial number ranges.
11565 -- This improves interface performance by minimizing
11566 -- number of delivery lines needed to interface serial numbers.
11567 --
11568 -- Arguments
11569 -- P_Delivery_Detail_Id FOR which IS under Serial number
11570 -- control and hence must do the explosion
11571 -- P_Return_Status
11572 --
11573 --
11574 PROCEDURE EXPLODE_DELIVERY_DETAILS(
11575 p_delivery_detail_id number,
11576 x_return_status out NOCOPY varchar2)
11577 IS
11578
11579 l_debug_on BOOLEAN;
11580 --
11581 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'EXPLODE_DELIVERY_DETAILS';
11582 --
11583 BEGIN
11584 --
11585 --
11586 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11587 --
11588 --
11589 END explode_delivery_Details;
11590
11591
11592 /*
11593 REM This API will unassign a line ( delivery_detail or container) from the Delivery and unapck it.
11594 REM If the unpack results in the container ( holding the line/container) becoming empty
11595 REM then it would unpack the container and unassign it from Delivery too.
11596 REM the unpack/unassign is done recursively, till all empty containers resulting from the initial
11597 REM unpacked line are unassigned/unpacked.
11598 REM If there is an empty container already packed inside another container, and did not
11599 REM become empty because of the current line was unpacked, those containers are left
11600 REM packed/assigned to the Delivery.
11601 */
11602 PROCEDURE unassign_unpack_empty_cont (
11603 p_ids_tobe_unassigned IN wsh_util_core.id_tab_type,
11604 p_validate_flag IN VARCHAR2,
11605 x_return_status OUT NOCOPY VARCHAR2
11606 )
11607 IS
11608
11609 CURSOR get_container(detail_id NUMBER) IS
11610 SELECT parent_delivery_detail_id,
11611 delivery_id -- Bug#3542095
11612 FROM wsh_delivery_assignments_v
11613 WHERE delivery_detail_id = detail_id;
11614
11615 CURSOR get_lines (cont_id NUMBER, detail_id NUMBER) IS
11616 SELECT delivery_detail_id
11617 FROM wsh_delivery_assignments_v
11618 WHERE parent_delivery_detail_id = cont_id
11619 AND delivery_detail_id <> detail_id;
11620
11621 l_parent_container_id wsh_util_core.id_tab_type ;
11622 l_delivery_id wsh_delivery_assignments_v.delivery_id%type;
11623 l_return_status VARCHAR2(1):=NULL ;
11624 l_line_id NUMBER := NULL;
11625
11626 -- K LPN CONV. rv
11627 l_lpn_in_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_in_rec_type;
11628 l_lpn_out_sync_comm_rec WSH_GLBL_VAR_STRCT_GRP.lpn_sync_comm_out_rec_type;
11629 l_msg_count NUMBER;
11630 l_msg_data VARCHAR2(32767);
11631 e_return_excp EXCEPTION;
11632
11633 cursor l_get_cnt_org_csr(p_detail_id IN NUMBER) is
11634 select organization_id,
11635 nvl(line_direction,'O')
11636 from wsh_delivery_details
11637 where delivery_detail_id = p_detail_id;
11638
11639 l_orgn_id NUMBER;
11640 l_line_dir VARCHAR2(10);
11641 l_wms_org VARCHAR2(10) := 'N';
11642 -- K LPN CONV. rv
11643
11644 --
11645 l_debug_on BOOLEAN;
11646 --
11647 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'UNASSIGN_UNPACK_EMPTY_CONT';
11648 --
11649
11650 BEGIN
11651
11652 --
11653 --
11654 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11655 --
11656 IF l_debug_on IS NULL
11657 THEN
11658 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11659 END IF;
11660 --
11661 IF l_debug_on THEN
11662 WSH_DEBUG_SV.push(l_module_name);
11663 --
11664 WSH_DEBUG_SV.log(l_module_name,'P_VALIDATE_FLAG',P_VALIDATE_FLAG);
11665 END IF;
11666
11667 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11668
11669 IF ( p_ids_tobe_unassigned.COUNT = 0 ) THEN
11670 --
11671 IF l_debug_on THEN
11672 WSH_DEBUG_SV.pop(l_module_name);
11673 END IF;
11674 --
11675 RETURN;
11676 END IF;
11677
11678 FOR i in 1..p_ids_tobe_unassigned.COUNT LOOP
11679 IF l_debug_on THEN
11680 WSH_DEBUG_SV.log(l_module_name,'detail to be unassigned ',p_ids_tobe_unassigned(i));
11681 END IF;
11682 -- Get the parent container, if it exists
11683 OPEN get_container(p_ids_tobe_unassigned(i));
11684 FETCH get_container
11685 INTO l_parent_container_id(1)
11686 , l_delivery_id; -- Bug#3542095
11687 IF get_container%NOTFOUND THEN
11688 l_parent_container_id(1) := NULL;
11689 END IF;
11690 CLOSE get_container;
11691
11692 IF l_debug_on THEN
11693 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_DETAIL_FROM_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
11694 END IF;
11695
11696 -- Unassign the Line or Container
11697 -- because this
11698 wsh_delivery_details_actions.unassign_detail_from_delivery(
11699 p_detail_id => p_ids_tobe_unassigned(i),
11700 p_validate_flag => p_validate_flag,
11701 x_return_status => l_return_status
11702 );
11703
11704 --
11705 IF l_debug_on THEN
11706 WSH_DEBUG_SV.log(l_module_name, 'AFTER CALLING UNASSIGN_DETAIL_FROM_DELIVERY: ', L_RETURN_STATUS);
11707 END IF;
11708 --
11709 -- Check if the Parent Container is empty, if yes, recursivelly call this API
11710 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
11711 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNASSIGN_DET_ERROR');
11712 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id)); -- Bug#3542095
11713 FND_MESSAGE.SET_TOKEN('DET_NAME',p_ids_tobe_unassigned(i));
11714 x_return_status := l_return_status;
11715 WSH_UTIL_CORE.ADD_MESSAGE(x_return_status,l_module_name);
11716 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
11717 --
11718 --IF l_debug_on THEN
11719 --WSH_DEBUG_SV.pop(l_module_name);
11720 --END IF;
11721 --
11722 --RETURN; LPN CONV. rv
11723 raise e_return_excp; -- LPN CONV. rv
11724 END IF;
11725 END IF;
11726
11727 IF l_parent_container_id(1) IS NOT NULL THEN
11728 OPEN get_lines(l_parent_container_id(1), p_ids_tobe_unassigned(i));
11729 FETCH get_lines INTO l_line_id;
11730 IF get_lines%NOTFOUND THEN
11731 l_line_id := NULL;
11732 END IF;
11733 CLOSE get_lines;
11734
11735 IF l_debug_on THEN
11736 WSH_DEBUG_SV.log(l_module_name, 'L_LINE_ID ', L_LINE_ID);
11737 END IF;
11738
11739 IF l_line_id IS NULL THEN
11740 IF l_debug_on THEN
11741 WSH_DEBUG_SV.log(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT
11742 recursively for ',l_parent_container_id(1));
11743 END IF;
11744
11745 -- lpn conv
11746 -- This needs to be done so that the WMS enabled LPNs that become empty
11747 -- need to be deleted at a later stage through Confirm_Delivery
11748 open l_get_cnt_org_csr(l_parent_container_id(1));
11749 fetch l_get_cnt_org_csr into l_orgn_id, l_line_dir;
11750 close l_get_cnt_org_csr;
11751 l_wms_org := wsh_util_validate.check_wms_org(l_orgn_id);
11752 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
11753 AND l_line_dir IN ('O', 'IO')
11754 AND l_wms_org = 'Y' THEN
11755 --{
11756 insert into wsh_wms_sync_tmp
11757 (delivery_detail_id,
11758 operation_type,
11759 creation_date)
11760 values (l_parent_container_id(1),
11761 'DELETE',
11762 WSH_WMS_LPN_GRP.G_HW_TIME_STAMP);
11763 --}
11764 END IF;
11765 -- lpn conv
11766
11767 unassign_unpack_empty_cont ( p_ids_tobe_unassigned => l_parent_container_id,
11768 p_validate_flag => p_validate_flag,
11769 x_return_status => l_return_status);
11770 IF l_debug_on THEN
11771 WSH_DEBUG_SV.log(l_module_name, 'After calling UNASSIGN_UNPACK_EMPTY_CONT: ', L_RETURN_STATUS);
11772 END IF;
11773 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
11774 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11775 x_return_status := l_return_status ;
11776 ELSIF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
11777 x_return_status := l_return_status ;
11778 END IF;
11779 END IF;
11780 IF x_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
11781 --IF l_debug_on THEN
11782 --WSH_DEBUG_SV.pop(l_module_name);
11783 --END IF;
11784 --RETURN; LPN CONV. rv
11785 raise e_return_excp; -- LPN CONV. rv
11786 END IF;
11787 END IF; -- end of l_line_id is null
11788
11789 END IF;
11790
11791 END LOOP;
11792
11793 --
11794 -- K LPN CONV. rv
11795 --
11796 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
11797 THEN
11798 --{
11799 IF l_debug_on THEN
11800 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);
11801 END IF;
11802
11803 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
11804 (
11805 p_in_rec => l_lpn_in_sync_comm_rec,
11806 x_return_status => l_return_status,
11807 x_out_rec => l_lpn_out_sync_comm_rec
11808 );
11809 --
11810 --
11811 IF l_debug_on THEN
11812 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
11813 END IF;
11814 --
11815 --
11816 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
11817 IF x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
11818 x_return_status := l_return_status ;
11819 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
11820 x_return_status := l_return_status ;
11821 END IF;
11822 END IF;
11823
11824 --}
11825 END IF;
11826 --
11827 -- K LPN CONV. rv
11828 --
11829 -- Added a pop as it was missing.
11830 IF l_debug_on THEN
11831 WSH_DEBUG_SV.pop(l_module_name);
11832 END IF;
11833
11834 EXCEPTION
11835 WHEN e_return_excp THEN
11836 --
11837 -- K LPN CONV. rv
11838 --
11839 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
11840 THEN
11841 --{
11842 IF l_debug_on THEN
11843 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);
11844 END IF;
11845
11846 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
11847 (
11848 p_in_rec => l_lpn_in_sync_comm_rec,
11849 x_return_status => l_return_status,
11850 x_out_rec => l_lpn_out_sync_comm_rec
11851 );
11852 --
11853 --
11854 IF l_debug_on THEN
11855 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
11856 END IF;
11857 --
11858 --
11859 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
11860 x_return_status := l_return_status;
11861 END IF;
11862 --
11863 --}
11864 END IF;
11865 --
11866 -- K LPN CONV. rv
11867 --
11868 IF l_debug_on THEN
11869 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:e_return_excp');
11870 END IF;
11871
11872 WHEN OTHERS THEN
11873 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.unassign_unpack_empty_cont');
11874 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11875 --
11876 IF l_debug_on THEN
11877 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11878 END IF;
11879 --
11880 --
11881 -- K LPN CONV. rv
11882 --
11883 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
11884 THEN
11885 --{
11886 IF l_debug_on THEN
11887 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);
11888 END IF;
11889
11890 WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS
11891 (
11892 p_in_rec => l_lpn_in_sync_comm_rec,
11893 x_return_status => l_return_status,
11894 x_out_rec => l_lpn_out_sync_comm_rec
11895 );
11896 --
11897 --
11898 IF l_debug_on THEN
11899 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_LPN_SYNC_COMM_PKG.SYNC_LPNS_TO_WMS',l_return_status);
11900 END IF;
11901 --
11902 --
11903 --}
11904 END IF;
11905 --
11906 -- K LPN CONV. rv
11907 --
11908 --
11909 -- Debug Statements
11910 --
11911 IF l_debug_on THEN
11912 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11913 END IF;
11914 --
11915
11916 END unassign_unpack_empty_cont;
11917
11918 /*2442099*/
11919
11920 PROCEDURE Log_Exceptions(p_old_delivery_detail_id IN NUMBER,
11921 p_new_delivery_detail_id IN NUMBER,
11922 p_delivery_id IN NUMBER,
11923 p_action IN VARCHAR2 DEFAULT NULL)
11924
11925 IS
11926
11927 cursor parent_del_exception is
11928 --Changed for BUG#3330869
11929 --SELECT *
11930 SELECT message,
11931 exception_name,
11932 trip_id,
11933 trip_name,
11934 trip_stop_id,
11935 delivery_id,
11936 delivery_name,
11937 delivery_assignment_id,
11938 container_name,
11939 inventory_item_id,
11940 lot_number,
11941 -- HW OPMCONV - No need for sublot_number
11942 -- sublot_number,
11943 revision,
11944 serial_number,
11945 unit_of_measure,
11946 unit_of_measure2,
11947 subinventory,
11948 locator_id,
11949 arrival_date,
11950 departure_date,
11951 error_message,
11952 attribute_category,
11953 attribute1,
11954 attribute2,
11955 attribute3,
11956 attribute4,
11957 attribute5,
11958 attribute6,
11959 attribute7,
11960 attribute8,
11961 attribute9,
11962 attribute10,
11963 attribute11,
11964 attribute12,
11965 attribute13,
11966 attribute14,
11967 attribute15,
11968 request_id,
11969 logged_at_location_id,
11970 logging_entity,
11971 logging_entity_id,
11972 exception_location_id,
11973 manually_logged,
11974 batch_id,
11975 status
11976 --select *
11977 from wsh_exceptions
11978 where delivery_detail_id = p_old_delivery_detail_id;
11979
11980 l_exception_return_status VARCHAR2(30);
11981 l_exception_msg_count NUMBER;
11982 l_exception_msg_data VARCHAR2(4000) := NULL;
11983 l_dummy_exception_id NUMBER;
11984 l_exception_error_message VARCHAR2(2000) := NULL;
11985 l_qty1 NUMBER;
11986 l_qty2 NUMBER;
11987 l_trip_id NUMBER;
11988 l_trip_name VARCHAR2(30);
11989 l_trip_stop_id NUMBER;
11990 l_delivery_id NUMBER;
11991 l_delivery_name VARCHAR2(30);
11992 l_departure_date DATE;
11993 l_arrival_date DATE;
11994 --
11995 l_debug_on BOOLEAN;
11996 --
11997 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'Log_Exceptions';
11998 --
11999
12000 BEGIN
12001 --
12002 --
12003 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12004 --
12005 IF l_debug_on IS NULL THEN
12006 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12007 END IF;
12008 --
12009 IF l_debug_on THEN
12010 WSH_DEBUG_SV.push(l_module_name);
12011 --
12012 WSH_DEBUG_SV.log(l_module_name,'P_OLD_DELIVERY_DETAIL_ID',P_OLD_DELIVERY_DETAIL_ID);
12013 WSH_DEBUG_SV.log(l_module_name,'P_NEW_DELIVERY_DETAIL_ID',P_NEW_DELIVERY_DETAIL_ID);
12014 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
12015 --
12016 END IF;
12017
12018 select requested_quantity,requested_quantity2 into l_qty1,l_qty2
12019 from wsh_delivery_details
12020 where delivery_detail_id = p_new_delivery_detail_id;
12021
12022 IF l_debug_on THEN
12023 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.LOG_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
12024 END IF;
12025 --
12026 FOR pexceptions in parent_del_exception
12027 LOOP
12028 IF p_delivery_id is NOT NULL THEN
12029 l_trip_id := pexceptions.trip_id;
12030 l_trip_name := pexceptions.trip_name;
12031 l_trip_stop_id := pexceptions.trip_stop_id;
12032 l_delivery_id := pexceptions.delivery_id;
12033 l_delivery_name := pexceptions.delivery_name;
12034 l_departure_date := pexceptions.departure_date;
12035 l_arrival_date := pexceptions.arrival_date;
12036 ELSE
12037 l_trip_id := NULL;
12038 l_trip_name := NULL;
12039 l_trip_stop_id := NULL;
12040 l_delivery_id := NULL;
12041 l_delivery_name := NULL;
12042 l_departure_date := NULL;
12043 l_arrival_date := NULL;
12044 END IF;
12045
12046 -- Bug 4481016,During Split, Exceptions will not be updated
12047 -- To ensure exceptions are logged against split delivery detail, its required
12048 -- to pass null to l_dummy_exception_id which is used to determine, when to INSERT
12049 -- and when to UPDATE exceptions
12050 IF l_debug_on THEN
12051 WSH_DEBUG_SV.log(l_module_name,'EXCEPTION NAME-',pexceptions.exception_name);
12052 WSH_DEBUG_SV.log(l_module_name,'p_action -',p_action);
12053
12054 END IF;
12055
12056 l_dummy_exception_id := NULL;
12057
12058 wsh_xc_util.log_exception(
12059 p_api_version => 1.0,
12060 x_return_status => l_exception_return_status,
12061 x_msg_count => l_exception_msg_count,
12062 x_msg_data => l_exception_msg_data,
12063 x_exception_id => l_dummy_exception_id ,
12064 p_exception_location_id => pexceptions.exception_location_id,
12065 p_logged_at_location_id => pexceptions.logged_at_location_id,
12066 p_logging_entity => pexceptions.logging_entity,
12067 p_logging_entity_id => pexceptions.logging_entity_id,
12068 p_exception_name => pexceptions.exception_name,
12069 p_message => pexceptions.message,
12070 -- p_severity => pexceptions.severity,
12071 p_manually_logged => pexceptions.manually_logged,
12072 -- p_exception_handling => pexceptions.status,
12073 p_trip_id => l_trip_id,
12074 p_trip_name => l_trip_name,
12075 p_trip_stop_id => l_trip_stop_id,
12076 p_delivery_id => l_delivery_id,
12077 p_delivery_name => l_delivery_name,
12078 p_delivery_detail_id => p_new_delivery_detail_id,
12079 p_delivery_assignment_id => pexceptions.delivery_assignment_id,
12080 p_container_name => pexceptions.container_name,
12081 p_inventory_item_id => pexceptions.inventory_item_id,
12082 p_lot_number => pexceptions.lot_number,
12083 -- HW OPMCONV - No need for sublot_number
12084 -- p_sublot_number => pexceptions.sublot_number,
12085 p_revision => pexceptions.revision,
12086 p_serial_number => pexceptions.serial_number,
12087 p_unit_of_measure => pexceptions.unit_of_measure,
12088 p_quantity => l_qty1,
12089 p_unit_of_measure2 => pexceptions.unit_of_measure2,
12090 p_quantity2 => l_qty2,
12091 p_subinventory => pexceptions.subinventory,
12092 p_locator_id => pexceptions.locator_id,
12093 p_arrival_date => l_arrival_date,
12094 p_departure_date => l_departure_date,
12095 p_error_message => pexceptions.error_message,
12096 p_attribute_category => pexceptions.attribute_category,
12097 p_attribute1 => pexceptions.attribute1,
12098 p_attribute2 => pexceptions.attribute2,
12099 p_attribute3 => pexceptions.attribute3,
12100 p_attribute4 => pexceptions.attribute4,
12101 p_attribute5 => pexceptions.attribute5,
12102 p_attribute6 => pexceptions.attribute6,
12103 p_attribute7 => pexceptions.attribute7,
12104 p_attribute8 => pexceptions.attribute8,
12105 p_attribute9 => pexceptions.attribute9,
12106 p_attribute10 => pexceptions.attribute10,
12107 p_attribute11 => pexceptions.attribute11,
12108 p_attribute12 => pexceptions.attribute12,
12109 p_attribute13 => pexceptions.attribute13,
12110 p_attribute14 => pexceptions.attribute14,
12111 p_attribute15 => pexceptions.attribute15,
12112 p_request_id => pexceptions.request_id,
12113 p_batch_id => pexceptions.batch_id,
12114 p_status => pexceptions.status,
12115 p_action => p_action);
12116
12117 END LOOP;
12118 IF (l_exception_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12119 --
12120 -- Debug Statements
12121 --
12122 IF l_debug_on THEN
12123 WSH_DEBUG_SV.logmsg(l_module_name, 'WSH_XC_UTIL.LOG_EXCEPTION DID NOTRETURN SUCCESS' );
12124 END IF;
12125 --
12126 END IF;
12127
12128 IF l_debug_on THEN
12129 WSH_DEBUG_SV.pop(l_module_name);
12130 END IF;
12131
12132 EXCEPTION
12133 WHEN OTHERS THEN
12134 IF l_debug_on THEN
12135 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12136 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12137 END IF;
12138
12139 END Log_Exceptions;
12140 /*2442099*/
12141
12142 -- Procedure: Consolidate_Source_Line
12143 --
12144 -- Parameters: p_Cons_Source_Line_Rec_Tab -> List of delivery details and its corresponding req qtys,
12145 -- bo qtys, source line ids and delivery ids.
12146 -- x_consolidate_ids -> Contains the list of existing BO dd_ids, into which the dd_ids passed
12147 -- in the parameter p_Cons_Source_Line_Rec_Tab got consolidated.
12148 --
12149 -- Description: This is an internal API.
12150 -- Consolidates all the unpacked and unassigned back order delivery detail lines
12151 -- into one delivery detail Line for the given source_line_id. x_consolidate_ids(i)
12152 -- contains final consolidated delivery detail id corresponding to the ith record
12153 -- in p_Cons_Source_Line_Rec_Tab.
12154 --
12155 -- HW OPM BUG#:3121616 added requested_quantity2
12156 PROCEDURE Consolidate_Source_Line(
12157 p_Cons_Source_Line_Rec_Tab IN WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
12158 x_consolidate_ids OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
12159 x_return_status OUT NOCOPY VARCHAR2 ) IS
12160
12161 CURSOR get_bo_dds_cur(p_delivery_detail_id IN NUMBER, p_source_line_id IN NUMBER,p_delivery_id IN NUMBER) is
12162 SELECT wdd.delivery_detail_id, wdd.requested_quantity,wdd.requested_quantity2
12163 FROM wsh_delivery_details wdd,
12164 wsh_delivery_assignments_v wda
12165 WHERE wdd.source_line_id = p_source_line_id
12166 AND wdd.delivery_detail_id <> p_delivery_detail_id
12167 AND wdd.released_status = 'B'
12168 AND wdd.replenishment_status IS NULL --bug# 6749200 (replenishment project)
12169 AND wdd.delivery_detail_id = wda.delivery_detail_id
12170 AND wdd.container_flag = 'N'
12171 AND wdd.source_code = 'OE' -- Enables the Consolidation ONLY for the lines imported from Order Management.
12172 AND (( wda.delivery_id is NULL AND wda.parent_delivery_detail_id is NULL )
12173 OR ( wda.delivery_id = nvl(p_delivery_id,-99)))
12174 FOR UPDATE NOWAIT;
12175
12176 CURSOR get_line_info_cur(p_line_id IN NUMBER) is
12177 SELECT shipping_instructions,
12178 packing_instructions
12179 FROM oe_order_lines_all
12180 WHERE line_id = p_line_id;
12181
12182
12183 -- Tables to store delivery detail id's
12184
12185 l_cons_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store the final delivery details
12186 l_cons_qtys WSH_UTIL_CORE.Id_Tab_Type;
12187 -- HW OPM BUG#:3121616 added qty2s
12188 l_cons_qty2s WSH_UTIL_CORE.Id_Tab_Type;
12189 l_partial_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store partial Back Order Del Det
12190 l_partial_org_req_qtys WSH_UTIL_CORE.Id_Tab_Type;
12191 l_partial_req_qtys WSH_UTIL_CORE.Id_Tab_Type;
12192 -- HW OPM BUG#:3121616 added qty2s
12193 l_partial_req_qty2s WSH_UTIL_CORE.Id_Tab_Type;
12194 l_delete_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- To store the Del Det to be deleted
12195 -- Bug#3399109 :Changed the Data Type from Id_Tab_Type to tbl_varchar
12196 l_ship_instructions WSH_UTIL_CORE.tbl_varchar; -- To store shipping instructions
12197 l_pack_instructions WSH_UTIL_CORE.tbl_varchar; -- To store packing instructions
12198
12199
12200
12201 l_del_det_Id NUMBER;
12202 l_req_qty NUMBER;
12203 -- HW OPM BUG#:3121616 added qty2s
12204 l_req_qty2 NUMBER;
12205 l_total_req_qty NUMBER := 0;
12206 -- HW OPM BUG#:3121616 added qty2s
12207 l_total_req_qty2 NUMBER := 0;
12208 l_temp_cnt NUMBER;
12209
12210
12211 l_user_id NUMBER;
12212 l_login_id NUMBER;
12213 l_return_status VARCHAR2(30);
12214 -- J: W/V Changes
12215 l_tmp_weight NUMBER;
12216 l_tmp_volume NUMBER;
12217 l_new_gross_wt NUMBER;
12218 l_new_net_wt NUMBER;
12219 l_new_vol NUMBER;
12220 l_gross_weight NUMBER;
12221 l_net_weight NUMBER;
12222 l_volume NUMBER;
12223 l_wv_frozen_flag VARCHAR2(1);
12224
12225 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
12226 l_dd_txn_id NUMBER;
12227 l_txn_return_status VARCHAR2(1);
12228
12229 --
12230 l_debug_on BOOLEAN;
12231 --
12232 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'CONSOLIDATE_SOURCE_LINE';
12233 --
12234
12235 BEGIN
12236 --
12237 -- Debug Statements
12238 --
12239 --
12240 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12241 --
12242 IF l_debug_on IS NULL THEN
12243
12244 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12245 END IF;
12246 --
12247 IF l_debug_on THEN
12248
12249 WSH_DEBUG_SV.push(l_module_name);
12250 END IF;
12251 --
12252
12253 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12254 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12255 l_user_id := FND_GLOBAL.user_id;
12256 l_login_id := FND_GLOBAL.login_id;
12257
12258 FOR i IN 1..p_Cons_Source_Line_Rec_Tab.count --{ Looping thru' the input params
12259 LOOP
12260 --
12261 -- Debug Statements
12262 --
12263 IF l_debug_on THEN
12264 WSH_DEBUG_SV.log(l_module_name,'********* Processing the Delivery Detail Id:',p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id);
12265 END IF;
12266 --
12267 l_temp_cnt := l_delete_dd_ids.COUNT;
12268 l_total_req_qty := 0;
12269
12270 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);
12271
12272 LOOP --{ Fetch all the unassigned unpacked Backordered Delivery Details for the same source line id
12273
12274 -- HW OPM BUG#:3121616 added qty2
12275 FETCH get_bo_dds_cur INTO l_del_det_Id,l_req_qty,l_req_qty2;
12276 EXIT WHEN (get_bo_dds_cur%NOTFOUND);
12277 --
12278 -- Debug Statements
12279 --
12280 IF l_debug_on THEN
12281 --
12282 WSH_DEBUG_SV.log(l_module_name,'Found Existing Back Order Del Det line: ',l_del_det_Id);
12283 END IF;
12284 --
12285 l_delete_dd_ids(l_delete_dd_ids.COUNT + 1) :=l_del_det_Id;
12286 l_total_req_qty := l_total_req_qty + l_req_qty;
12287 -- HW OPM BUG#:3121616 added qty2
12288 l_total_req_qty2 := l_total_req_qty2 + l_req_qty2;
12289
12290 END LOOP; --} done fetching the existing unasssigned unpacked Backorder lines
12291 CLOSE get_bo_dds_cur;
12292
12293 IF ( l_delete_dd_ids.COUNT > l_temp_cnt ) --{ Consolidation is possible or not
12294 THEN
12295 -- Use the last Deliver Detail found for the consolidation purpose, accordingly
12296 -- delete the delivery details id from l_delete_dd_ids table.
12297 l_cons_dd_ids (l_cons_dd_ids.COUNT + 1) := l_delete_dd_ids(l_delete_dd_ids.COUNT);
12298 l_delete_dd_ids.delete(l_delete_dd_ids.COUNT);
12299 l_cons_qtys(l_cons_qtys.COUNT + 1) := l_total_req_qty + p_Cons_Source_Line_Rec_Tab(i).bo_qty;
12300 -- HW OPM BUG#:3121616 added qty2s
12301 l_cons_qty2s(l_cons_qty2s.COUNT + 1) := l_total_req_qty2 + p_Cons_Source_Line_Rec_Tab(i).bo_qty2;
12302 -- end of 3121616
12303
12304
12305 --
12306 -- Debug Statements
12307 --
12308 IF l_debug_on THEN
12309 WSH_DEBUG_SV.log(l_module_name,'Consolidated Into Delivery Detail Id ',l_cons_dd_ids(l_cons_dd_ids.COUNT));
12310 END IF;
12311
12312 -- Getting the shipping and packing instructions from the source line id. which are to be assigned
12313 -- to final delivery detail for the given source line id.
12314 open get_line_info_cur(p_Cons_Source_Line_Rec_Tab(i).source_line_id);
12315 fetch get_line_info_cur into l_ship_instructions(l_ship_instructions.COUNT + 1),l_pack_instructions(l_pack_instructions.COUNT + 1);
12316 close get_line_info_cur;
12317
12318 -- Storing the final delivery detail id in the out parameter
12319 x_consolidate_ids(i):= l_cons_dd_ids(l_cons_dd_ids.COUNT);
12320
12321 -- If it is partial back ordering then don't delete it, update the existing delivery detail
12322 -- Qty otherwise delete the delivery detail being processing.
12323 IF ( p_Cons_Source_Line_Rec_Tab(i).bo_qty < p_Cons_Source_Line_Rec_Tab(i).req_qty ) --{ Is is partial BO
12324 THEN
12325 l_partial_dd_ids (l_partial_dd_ids.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12326 l_partial_org_req_qtys(l_partial_req_qtys.COUNT + 1) := p_Cons_Source_Line_Rec_Tab(i).req_qty;
12327 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;
12328 -- HW OPM BUG#:3121616 added qty2s
12329 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;
12330 -- end of 3121616
12331 --
12332 -- Debug Statements
12333 --
12334 IF l_debug_on THEN
12335 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));
12336 END IF;
12337 --
12338 ELSE
12339 l_delete_dd_ids(l_delete_dd_ids.COUNT+1):= p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12340 --
12341 -- Debug Statements
12342 --
12343 IF l_debug_on THEN
12344 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));
12345 END IF;
12346 --
12347 END IF; --} Is it Partial BO
12348 ELSE -- No consolidation if possible for the delivery Detail id
12349 --
12350 -- Debug Statements
12351 --
12352 IF l_debug_on THEN
12353 WSH_DEBUG_SV.log(l_module_name,'No Existing Back Order Del Det Lines found');
12354 END IF;
12355 --
12356 x_consolidate_ids (i) := p_Cons_Source_Line_Rec_Tab(i).delivery_detail_id;
12357 END IF; --} Check for existing back order lines
12358
12359 END LOOP; --} End of the Delivery Detail Table
12360
12361 IF (get_bo_dds_cur%ISOPEN) THEN
12362 CLOSE get_bo_dds_cur;
12363 END IF;
12364
12365
12366 -- Handling the Tables created in the above process (BULK Collect)
12367 -- Deleting all the Delivery Detail in the Delete table
12368 FOR i IN 1..l_delete_dd_ids.COUNT
12369 LOOP -- {
12370 -- deleting the delivery detail line
12371 --
12372 -- Debug Statements
12373 --
12374 IF l_debug_on THEN
12375 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.DELETE_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
12376 END IF;
12377 --
12378 WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details(
12379 p_delivery_detail_id => l_delete_dd_ids(i),
12380 x_return_status => l_return_status );
12381
12382 --
12383 IF l_debug_on THEN
12384 WSH_DEBUG_SV.logmsg(l_module_name, 'After calling DELETE_DELIVERY_DETAILS: ' || l_return_status );
12385 END IF;
12386 --
12387 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12388 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12389 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12390 RAISE FND_API.G_EXC_ERROR;
12391 END IF;
12392
12393 END LOOP; -- }
12394
12395 IF l_debug_on THEN
12396 WSH_DEBUG_SV.log(l_module_name,'Updating details for consolidation.Detail Count-',l_cons_dd_ids.count);
12397 END IF;
12398 -- Updating the selected Delivery Details for the consolidation with corresponding total Qty
12399 FOR i IN 1..l_cons_dd_ids.COUNT LOOP
12400 -- HW OPM BUG#:3121616 added qty2s
12401 UPDATE wsh_delivery_details
12402 SET requested_quantity = l_cons_qtys(i),
12403 requested_quantity2 = l_cons_qty2s(i),
12404 tracking_number = null,
12405 master_container_item_id = null,
12406 detail_container_item_id = null,
12407 seal_code = null,
12408 shipping_instructions = l_ship_instructions(i),
12409 packing_instructions = l_pack_instructions(i)
12410 WHERE delivery_detail_id = l_cons_dd_ids (i);
12411
12412 WSH_DD_TXNS_PVT.create_dd_txn_from_dd (p_delivery_detail_id => l_cons_dd_ids(i),
12413 x_dd_txn_id => l_dd_txn_id,
12414 x_return_status =>l_txn_return_status);
12415
12416 IF (l_txn_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12417 x_return_status := l_txn_return_status;
12418 RETURN;
12419 END IF;
12420 END LOOP;
12421
12422 --
12423 -- DBI Project
12424 -- Update of wsh_delivery_details where requested_quantity/released_status
12425 -- are changed, call DBI API after the update.
12426 -- DBI API will check if DBI is installed
12427 IF l_debug_on THEN
12428 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_cons_dd_ids.count);
12429 END IF;
12430 WSH_INTEGRATION.DBI_Update_Detail_Log
12431 (p_delivery_detail_id_tab => l_cons_dd_ids,
12432 p_dml_type => 'UPDATE',
12433 x_return_status => l_dbi_rs);
12434
12435 IF l_debug_on THEN
12436 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
12437 END IF;
12438 -- Only Handle Unexpected error
12439 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12440 --
12441 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12442 END IF;
12443 -- End of Code for DBI Project
12444 --
12445
12446 -- Bug#3670261
12447 -- Deleting the Freight Costs associated with the delivery details selected for Consolidation
12448 FORALL i IN 1..l_cons_dd_ids.COUNT
12449 DELETE FROM WSH_FREIGHT_COSTS
12450 WHERE delivery_detail_id = l_cons_dd_ids(i);
12451 IF l_debug_on THEN
12452 WSH_DEBUG_SV.log(l_module_name,'Freight Cost Rows deleted',SQL%ROWCOUNT);
12453 END IF;
12454
12455 -- J: W/V Changes
12456 IF l_debug_on THEN
12457 WSH_DEBUG_SV.logmsg(l_module_name,'l_cons_dd_ids.COUNT '||l_cons_dd_ids.COUNT);
12458 END IF;
12459
12460 IF l_cons_dd_ids.COUNT > 0 THEN
12461
12462 FOR l_index in l_cons_dd_ids.FIRST..l_cons_dd_ids.LAST LOOP
12463
12464 IF l_debug_on THEN
12465 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DETAIL_WEIGHT_VOLUME',WSH_DEBUG_SV.C_PROC_LEVEL);
12466 END IF;
12467 --
12468 WSH_WV_UTILS.Detail_Weight_Volume(
12469 p_delivery_detail_id => l_cons_dd_ids(l_index),
12470 p_update_flag => 'Y',
12471 p_post_process_flag => 'Y',
12472 p_calc_wv_if_frozen => 'Y',
12473 x_net_weight => l_tmp_weight,
12474 x_volume => l_tmp_volume,
12475 x_return_status => l_return_status);
12476 IF l_debug_on THEN
12477 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
12478 END IF;
12479 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12480 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12481 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
12482 RAISE FND_API.G_EXC_ERROR;
12483 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12484 x_return_status := l_return_status;
12485 END IF;
12486
12487 END LOOP;
12488 END IF;
12489
12490 IF l_debug_on THEN
12491 WSH_DEBUG_SV.log(l_module_name,'Updating partial bkorder cases.Detail Count-',l_partial_dd_ids.count);
12492 END IF;
12493 -- Updating the partial Back order cases. Qty should be subtracted for the partial case
12494 FORALL i IN 1..l_partial_dd_ids.COUNT
12495 -- HW OPM BUG#:3121616 added qty2s
12496 UPDATE wsh_delivery_details
12497 SET requested_quantity = l_partial_req_qtys(i),
12498 requested_quantity2 = l_partial_req_qty2s(i)
12499 WHERE delivery_detail_id = l_partial_dd_ids (i);
12500
12501 --
12502 -- DBI Project
12503 -- Update of wsh_delivery_details where requested_quantity/released_status
12504 -- are changed, call DBI API after the update.
12505 -- DBI API will check if DBI is installed
12506 IF l_debug_on THEN
12507 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_partial_dd_ids.count);
12508 END IF;
12509 WSH_INTEGRATION.DBI_Update_Detail_Log
12510 (p_delivery_detail_id_tab => l_partial_dd_ids,
12511 p_dml_type => 'UPDATE',
12512 x_return_status => l_dbi_rs);
12513
12514 IF l_debug_on THEN
12515 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
12516 END IF;
12517 -- Only Handle Unexpected error
12518 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12519 --
12520 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12521 END IF;
12522 -- End of Code for DBI Project
12523 --
12524
12525 -- We need to adjust the W/V if DDs W/V is frozen
12526 IF l_partial_dd_ids.COUNT > 0 THEN
12527
12528 IF l_debug_on THEN
12529 WSH_DEBUG_SV.logmsg(l_module_name,'l_partial_dd_ids.COUNT '||l_partial_dd_ids.COUNT);
12530 END IF;
12531
12532 FOR l_index in l_partial_dd_ids.FIRST..l_partial_dd_ids.LAST LOOP
12533
12534 SELECT gross_weight,
12535 net_weight,
12536 volume,
12537 nvl(wv_frozen_flag,'Y')
12538 INTO l_gross_weight,
12539 l_net_weight,
12540 l_volume,
12541 l_wv_frozen_flag
12542 FROM wsh_delivery_details
12543 WHERE delivery_detail_id = l_partial_dd_ids(l_index);
12544
12545 IF l_wv_frozen_flag = 'Y' THEN
12546
12547 IF l_debug_on THEN
12548 WSH_DEBUG_SV.logmsg(l_module_name,'W/V Frozen flag is Y for DD '||l_partial_dd_ids(l_index));
12549 END IF;
12550
12551 l_new_gross_wt := round(l_gross_weight * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
12552 l_new_net_wt := round(l_net_weight * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
12553 l_new_vol := round(l_volume * (l_partial_req_qtys(l_index)/l_partial_org_req_qtys(l_index)) ,5);
12554
12555 IF l_debug_on THEN
12556 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);
12557 END IF;
12558
12559 UPDATE wsh_delivery_details
12560 set gross_weight = l_new_gross_wt,
12561 net_weight = l_new_net_wt,
12562 volume = l_new_vol
12563 WHERE delivery_detail_id = l_partial_dd_ids(l_index);
12564
12565 IF l_debug_on THEN
12566 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.DD_WV_Post_Process',WSH_DEBUG_SV.C_PROC_LEVEL);
12567 END IF;
12568
12569 WSH_WV_UTILS.DD_WV_Post_Process(
12570 p_delivery_detail_id => l_partial_dd_ids(l_index),
12571 p_diff_gross_wt => -1 * (l_gross_weight - l_new_gross_wt),
12572 p_diff_net_wt => -1 * (l_net_weight - l_new_net_wt),
12573 p_diff_fill_volume => -1 * (l_volume - l_new_vol),
12574 x_return_status => l_return_status);
12575
12576 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12577 --
12578 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12579 WSH_UTIL_CORE.Add_Message(x_return_status);
12580 IF l_debug_on THEN
12581 WSH_DEBUG_SV.log(l_module_name,'Return Status',x_return_status);
12582 WSH_DEBUG_SV.pop(l_module_name);
12583 END IF;
12584 return;
12585 END IF;
12586
12587 END IF;
12588 END LOOP;
12589 END IF;
12590
12591 --
12592 -- Debug Statements
12593 --
12594 IF l_debug_on THEN
12595 WSH_DEBUG_SV.pop(l_module_name);
12596 END IF;
12597 --
12598 EXCEPTION
12599
12600 WHEN FND_API.G_EXC_ERROR THEN
12601 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12602
12603 --
12604 IF l_debug_on THEN
12605 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
12606 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
12607 END IF;
12608 --
12609 return;
12610 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12611 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12612 --
12613 IF l_debug_on THEN
12614 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
12615 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
12616 END IF;
12617 --
12618 return;
12619
12620
12621 WHEN OTHERS THEN
12622 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
12623 WSH_UTIL_CORE.default_handler('WSH_DELIVERY_DETAILS_ACTIONS.Consolidate_Source_Lines ' );
12624 --
12625 -- Debug Statements
12626 --
12627 IF l_debug_on THEN
12628 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12629 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12630 END IF;
12631 --
12632 END Consolidate_Source_Line;
12633
12634
12635 --
12636 -- Procedure: Process_Delivery_Details
12637 -- Parameters:
12638 -- p_delivery_detail_id: delivery detail id need to be processed
12639 -- p_bo_qty : backordered quantity to unreserve
12640 -- p_overpick_qty : overpicked quantity to unreserve
12641 -- p_bo_mode : either UNRESERVE/CYCLE_COUNT
12642 -- p_delete_flag : 'Y' will delete the delivery detail passed
12643 -- 'N' doesnot delete.
12644 -- Description: This procedure will do unreservation, unpack/unassign
12645 -- for the passed delivery detail id. It deletes the delivery detail
12646 -- if p_delete_flag is passed as 'Y'.
12647 -- Added this procedure as part of code changes for the Bug#3317692
12648 PROCEDURE Process_Delivery_Details (
12649 p_delivery_detail_id IN NUMBER,
12650 p_bo_qty IN NUMBER,
12651 p_bo_qty2s IN NUMBER,
12652 p_overpick_qty IN NUMBER,
12653 p_bo_mode IN VARCHAR2,
12654 p_delete_flag IN VARCHAR2 DEFAULT NULL,
12655 x_return_status OUT NOCOPY VARCHAR2
12656 ) IS
12657
12658 l_delivery_detail_ids WSH_UTIL_CORE.Id_Tab_Type;
12659 l_idx NUMBER;
12660
12661 l_inventory_item_id NUMBER := NULL;
12662 l_organization_id NUMBER := NULL;
12663 l_subinventory VARCHAR2(10) := NULL;
12664 l_serial_number VARCHAR2(30) := NULL;
12665 l_transaction_temp_id NUMBER := NULL;
12666 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
12667 l_return_status VARCHAR2(5) := NULL;
12668
12669 --
12670 l_debug_on BOOLEAN;
12671 --
12672 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'PROCESS_DELIVERY_DETAILS';
12673 --
12674 BEGIN
12675 --
12676 --
12677 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12678 --
12679 IF l_debug_on IS NULL
12680 THEN
12681 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12682 END IF;
12683 --
12684 IF l_debug_on THEN
12685 WSH_DEBUG_SV.push(l_module_name);
12686 --
12687 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_DETAIL_ID',p_delivery_detail_id);
12688 WSH_DEBUG_SV.log(l_module_name,'P_BO_QTY',p_bo_qty);
12689 WSH_DEBUG_SV.log(l_module_name,'P_OVERPICK_QTY',p_overpick_qty);
12690 WSH_DEBUG_SV.log(l_module_name,'P_BO_MODE',P_BO_MODE);
12691 WSH_DEBUG_SV.log(l_module_name,'P_DELETE_FLAG',P_DELETE_FLAG);
12692 END IF;
12693 --
12694 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
12695
12696 --
12697 -- Debug Statements
12698 --
12699 IF l_debug_on THEN
12700 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont',WSH_DEBUG_SV.C_PROC_LEVEL);
12701 END IF;
12702 --
12703 l_delivery_detail_ids(1) := p_delivery_detail_id;
12704 IF (p_delete_flag = 'Y') THEN --{
12705 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont (
12706 p_ids_tobe_unassigned => l_delivery_detail_ids ,
12707 p_validate_flag => 'N',
12708 x_return_status => l_return_status
12709 );
12710 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
12711 raise FND_API.G_EXC_ERROR;
12712 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12713 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12714 END IF;
12715 END IF; --}
12716
12717 IF (p_bo_qty > 0) THEN --{
12718 --
12719 -- Debug Statements
12720 --
12721 IF l_debug_on THEN
12722 WSH_DEBUG_SV.logmsg(l_module_name,'Unreserving the Backordered quantity ',WSH_DEBUG_SV.C_PROC_LEVEL);
12723 WSH_DEBUG_SV.logmsg(l_module_name,'... delivery_detail_id '|| p_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
12724 WSH_DEBUG_SV.logmsg(l_module_name,'... backordered quantity '||p_bo_qty ,WSH_DEBUG_SV.C_PROC_LEVEL);
12725 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNRESERVE_DELIVERY_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
12726 END IF;
12727 --
12728 wsh_delivery_details_actions.unreserve_delivery_detail(
12729 p_delivery_Detail_id => p_delivery_detail_id,
12730 p_unreserve_mode => p_bo_mode ,
12731 p_quantity_to_unreserve => p_bo_qty,
12732 p_override_retain_ato_rsv => 'N',
12733 p_quantity2_to_unreserve => p_bo_qty2s,
12734 x_return_status => l_return_status
12735 );
12736 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
12737 raise FND_API.G_EXC_ERROR;
12738 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12739 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12740 END IF;
12741 END IF; --}
12742
12743 IF (p_overpick_qty > 0) THEN --{
12744 --
12745 -- Debug Statements
12746 --
12747 IF l_debug_on THEN
12748 WSH_DEBUG_SV.logmsg(l_module_name,'Unreserving the Backordered quantity ',WSH_DEBUG_SV.C_PROC_LEVEL);
12749 WSH_DEBUG_SV.logmsg(l_module_name,'... delivery_detail_id '|| p_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
12750 WSH_DEBUG_SV.logmsg(l_module_name,'... overpicked quantity '||p_overpick_qty ,WSH_DEBUG_SV.C_PROC_LEVEL);
12751 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNRESERVE_DELIVERY_DETAIL',WSH_DEBUG_SV.C_PROC_LEVEL);
12752 END IF;
12753 --
12754 --Bug 4721577 Do not retain reservation for overpicked quantities
12755 IF p_bo_mode = 'RETAIN_RSV' THEN
12756 wsh_delivery_details_actions.unreserve_delivery_detail(
12757 p_delivery_Detail_id => p_delivery_detail_id,
12758 p_unreserve_mode => 'UNRESERVE' ,
12759 p_quantity_to_unreserve => p_overpick_qty,
12760 p_override_retain_ato_rsv => 'Y',
12761 p_quantity2_to_unreserve => p_bo_qty2s,
12762 x_return_status => l_return_status
12763 );
12764 ELSE
12765 wsh_delivery_details_actions.unreserve_delivery_detail(
12766 p_delivery_Detail_id => p_delivery_detail_id,
12767 p_unreserve_mode => p_bo_mode ,
12768 p_quantity_to_unreserve => p_overpick_qty,
12769 p_override_retain_ato_rsv => 'Y',
12770 p_quantity2_to_unreserve => p_bo_qty2s,
12771 x_return_status => l_return_status
12772 );
12773 END IF;
12774 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
12775 raise FND_API.G_EXC_ERROR;
12776 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12777 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12778 END IF;
12779 END IF; --}
12780
12781 IF (p_delete_flag = 'Y') THEN --{
12782 --
12783 -- Debug Statements
12784 --
12785 IF l_debug_on THEN
12786 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
12787 END IF;
12788 --
12789
12790 WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details(
12791 p_delivery_detail_id => p_delivery_detail_id,
12792 p_cancel_flag => 'N',
12793 x_return_status => l_return_status);
12794 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
12795 raise FND_API.G_EXC_ERROR;
12796 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
12797 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12798 END IF;
12799 END IF; --}
12800
12801 IF l_debug_on THEN
12802 WSH_DEBUG_SV.pop(l_module_name);
12803 END IF;
12804
12805 EXCEPTION
12806 WHEN others THEN
12807 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12808 wsh_util_core.default_handler('WSH_DELIVERY_DETAILS_PKG.Process_Delivery_Details',l_module_name);
12809 --
12810 IF l_debug_on THEN
12811 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12812 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12813 END IF;
12814 --
12815 END Process_Delivery_Details;
12816
12817 -- Procedure: Consolidate_Delivery_Details
12818 --
12819 -- Parameters: p_delivery_details_tab -> list of delivery details and its corresponding req qtys, bo qtys,
12820 -- source line ids and delivery ids
12821 -- p_bo_mode -> Either 'UNRESERVE' or 'CYCLE_COUNT' or 'RETAIN_RSV'
12822 -- 'RETAIN_RSV' added for bug 4721577, however this API is not affected
12823 -- beacuse of this change.
12824 -- x_cons_delivery_details_tab -> This is a filtered table of p_delivery_details_tab.
12825 -- This contains the list of dd_ids into which the dd_ids passed
12826 -- in the parameter p_delivery_details_tab get consolidated.
12827 -- This also contains the corresponding req qtys, bo qyts and
12828 -- source line ids. Corresponding delivery_id field will be NULL.
12829 -- x_remain_bo_qtys -> Contains the sum of backorder quantities of delivery details(except
12830 -- for the dd_id in x_cons_delivery_details_tab) for each source line.
12831 -- x_remain_bo_qtys has a quantity for each dd_id in
12832 -- x_cons_delivery_details_tab.
12833 -- Description: This API is Internally used by ShipConfirm to
12834 -- consolidate the delivery details going to be BackOrdered.
12835 -- This Procedure takes the list of delivery details
12836 -- under a Delivery and consolidates them into one
12837 -- delivery detail for each source line id.
12838 --
12839 -- HW OPM BUG#:3121616 Added x_remain_bo_qty2s
12840 PROCEDURE Consolidate_Delivery_Details(
12841 p_delivery_details_tab IN WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
12842 p_bo_mode IN VARCHAR2,
12843 x_cons_delivery_details_tab OUT NOCOPY WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab,
12844 x_remain_bo_qtys OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
12845 x_remain_bo_qty2s OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
12846 x_return_status OUT NOCOPY VARCHAR2
12847 ) IS
12848 l_line_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the source line ids passed as parameter
12849 l_detail_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the delivery detail ids passed as parameter
12850 l_delivery_details_tab WSH_DELIVERY_DETAILS_ACTIONS.Cons_Source_Line_Rec_Tab; -- Stores the delivery detail records with req-qty >0
12851 l_freight_detail_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the delivery details for which the freight costs need to be deleted.
12852 l_req_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the requested quantities passed as parameter
12853 l_bo_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the BO quantities passed as parameter
12854 l_overpick_qtys WSH_UTIL_CORE.Id_Tab_Type; -- Stores the Overpicked quantities passed as parameter
12855 -- HW OPM BUG#:3121616 added qty2s
12856 l_bo_qty2s WSH_UTIL_CORE.Id_Tab_Type; -- Stores the BO quantities2 passed as parameter
12857 l_cons_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores consolidate dd_id for line_id at l_cons_dd_ids(line_id)
12858 l_cons_dd_flags WSH_UTIL_CORE.Column_Tab_Type;
12859 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)
12860 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)
12861 -- HW OPM BUG#:3121616 added qty2s
12862 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)
12863 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)
12864 l_delete_dd_ids WSH_UTIL_CORE.Id_Tab_Type; -- Stores the all delivery details need to be deleted(that are getting
12865 -- completely BackOrdered), except one delivery detail for each source line.
12866
12867 l_curr_line_id NUMBER; -- This temporary variable stores the current line_id in a loop.
12868 l_cons_dd_id NUMBER; -- This contains the delivery_detail_id that gets consolidation into
12869 l_found_complete_bo VARCHAR2(1);
12870 l_total_bo_qty NUMBER;
12871 -- HW OPM BUG#:3121616 added qty2s
12872 l_total_bo_qty2 NUMBER;
12873 l_return_status VARCHAR2(1);
12874
12875 l_idx NUMBER := 1;
12876 l_cmp_idx NUMBER := 1;
12877 l_next_idx NUMBER := 1;
12878
12879 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
12880 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
12881
12882 --
12883 l_debug_on BOOLEAN;
12884 --
12885 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'CONSOLIDATE_DELIVERY_DETAILS';
12886 --
12887 BEGIN
12888 --
12889 --
12890 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12891 --
12892 IF l_debug_on IS NULL
12893 THEN
12894 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12895 END IF;
12896 --
12897 IF l_debug_on THEN
12898 WSH_DEBUG_SV.push(l_module_name);
12899
12900 WSH_DEBUG_SV.log(l_module_name,'P_BO_MODE',p_bo_mode);
12901 END IF;
12902 --
12903
12904 l_return_status := FND_API.G_RET_STS_SUCCESS;
12905 x_return_status := FND_API.G_RET_STS_SUCCESS;
12906
12907 -- Store the passed parameter values into local pl/sql tables
12908 FOR i IN p_delivery_details_tab.FIRST .. p_delivery_details_tab.LAST LOOP --{
12909 l_detail_ids(i) := p_delivery_details_tab(i).delivery_detail_id;
12910 l_line_ids(i) := p_delivery_details_tab(i).source_line_id;
12911 l_req_qtys(i) := p_delivery_details_tab(i).req_qty;
12912 l_bo_qtys(i) := p_delivery_details_tab(i).bo_qty;
12913 l_overpick_qtys(i) := p_delivery_details_tab(i).overpick_qty; -- Bug#3263952
12914 -- HW OPM BUG#:3121616 added qty2s
12915 l_bo_qty2s(i) := p_delivery_details_tab(i).bo_qty2;
12916
12917 IF p_delivery_details_tab(i).req_qty = 0 THEN
12918 l_cons_dd_flags(i) := 'Y';
12919 ELSE
12920 l_cons_dd_flags(i) := 'N';
12921 END IF;
12922
12923 END LOOP; --}
12924
12925 -- Following Code gets the dd_id for each source_line, that will be used for consolidation
12926 -- from the passed list of delivery details.
12927 l_idx := p_delivery_details_tab.FIRST;
12928 WHILE l_idx IS NOT NULL
12929 LOOP -- {
12930
12931 -- Do not consider dd's with requested_quantity = 0 , for consolidation now . These are already
12932 -- marked earlier.
12933 IF p_delivery_details_tab(l_idx).req_qty > 0 THEN
12934 l_delivery_details_tab(l_idx) := p_delivery_details_tab(l_idx);
12935 END IF;
12936 l_idx := p_delivery_details_tab.NEXT(l_idx);
12937 END LOOP; --}
12938
12939 IF l_debug_on THEN
12940 WSH_DEBUG_SV.logmsg(l_module_name,'Finding the delivery detail to Consolidate into, from the input list',WSH_DEBUG_SV.C_PROC_LEVEL);
12941 END IF;
12942
12943 -- Mark the corresponding entry in l_cons_dd_flags(i) to 'Y', if l_detail_ids(i) is
12944 -- the consolidated delivery detail. Mark l_cons_dd_flags(i) to 'N' otherwise.
12945 -- Logic: Parse thru the entire list for a source line and set the first found completely backordered
12946 -- delivery detail as the consolidate delivery detail.
12947 -- If we don't find the completely backordered delivery detail under the source line,
12948 -- then set the first delivery detail in the list for the source line as the consolidate delivery detail.
12949 --
12950 l_idx := l_delivery_details_tab.FIRST;
12951 WHILE l_idx IS NOT NULL
12952 LOOP -- {
12953 l_found_complete_bo := 'N';
12954 IF (l_delivery_details_tab(l_idx).bo_qty = l_delivery_details_tab(l_idx).req_qty ) THEN --{
12955 l_found_complete_bo := 'Y';
12956 l_cons_dd_flags(l_idx) := 'Y';
12957 END IF; --}
12958
12959 l_next_idx := l_delivery_details_tab.NEXT(l_idx);
12960 WHILE l_next_idx IS NOT NULL
12961 LOOP --{
12962 IF l_delivery_details_tab(l_next_idx).source_line_id = l_delivery_details_tab(l_idx).source_line_id THEN
12963 IF l_found_complete_bo = 'N' AND
12964 (l_delivery_details_tab(l_next_idx).bo_qty = l_delivery_details_tab(l_next_idx).req_qty) THEN
12965 l_found_complete_bo := 'Y';
12966 l_cons_dd_flags(l_next_idx) := 'Y';
12967 END IF;
12968 l_delivery_details_tab.DELETE(l_next_idx);
12969 END IF;
12970 l_next_idx := l_delivery_details_tab.NEXT(l_next_idx);
12971 END LOOP; --}
12972
12973 IF l_found_complete_bo = 'N' THEN
12974 l_cons_dd_flags(l_idx) := 'Y';
12975 END IF;
12976 l_delivery_details_tab.DELETE(l_idx);
12977
12978 l_idx := l_delivery_details_tab.NEXT(l_idx);
12979 END LOOP; --}
12980 --
12981
12982 -- Keep the delivery_detail_ids used for consolidation and the corresponding quantities
12983 -- to pass them back to the Caller.
12984 l_idx := p_delivery_details_tab.FIRST;
12985 WHILE l_idx IS NOT NULL
12986 LOOP --{
12987 IF l_cons_dd_flags(l_idx) = 'Y' THEN --{
12988 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT+1).delivery_detail_id := p_delivery_details_tab(l_idx).delivery_detail_id;
12989 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).req_qty := p_delivery_details_tab(l_idx).req_qty;
12990 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).bo_qty := p_delivery_details_tab(l_idx).bo_qty;
12991 -- HW OPM BUG#:3121616 added qty2s
12992 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).bo_qty2 := p_delivery_details_tab(l_idx).bo_qty2;
12993 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).source_line_id := p_delivery_details_tab(l_idx).source_line_id;
12994 x_cons_delivery_details_tab(x_cons_delivery_details_tab.COUNT).overpick_qty := p_delivery_details_tab(l_idx).overpick_qty;
12995 -- Bug#3263952
12996 IF l_debug_on THEN
12997 IF p_delivery_details_tab(l_idx).req_qty > 0 THEN
12998 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery details of the Source Line '||p_delivery_details_tab(l_idx).source_line_id ||
12999 ' are getting consolidated into dd_id :'||p_delivery_details_tab(l_idx).delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
13000 END IF;
13001 END IF;
13002 END IF; --}
13003 l_idx := p_delivery_details_tab.NEXT(l_idx);
13004 END LOOP; --}
13005
13006 -- loop thru' input delivery details using the index variable l_idx.
13007 -- add the backordered quantities of the all the delivery details under the same line_id
13008 -- and delete those delivery details from the pl/sql table l_detail_ids.
13009 l_idx := l_detail_ids.FIRST;
13010 WHILE l_idx IS NOT NULL
13011 LOOP --{ loop thru' l_detail_ids
13012 l_curr_line_id := l_line_ids(l_idx);
13013
13014 -- Calculating the consolidate backorder quantity for l_curr_line_id.
13015 -- Loop thru' the list and sum up the backorder quantities of the delivery details for l_curr_line_id.
13016 -- Delete the delivery_details of l_curr_line_id from the pl/sql table l_detail_ids,
13017 -- after getting the corresponding backorder quantity.
13018 l_total_bo_qty := 0; -- Used to store the Consolidated BO qty.
13019 -- HW OPM BUG#:3121616 added qty2s
13020 l_total_bo_qty2 := 0; -- Used to store the Consolidated BO qty2
13021 l_cmp_idx := l_idx; -- Starting from l_idx, find all dds from l_detail_ids which belong to the
13022 -- current line id
13023 WHILE l_cmp_idx IS NOT NULL
13024 LOOP --{
13025 IF ( (l_curr_line_id = l_line_ids(l_cmp_idx)) AND (l_cons_dd_flags(l_cmp_idx) <> 'Y') ) THEN
13026 --{
13027 l_total_bo_qty := l_total_bo_qty + l_bo_qtys(l_cmp_idx);
13028 -- HW OPM BUG#:3121616 added qty2s
13029 l_total_bo_qty2 := l_total_bo_qty2 + l_bo_qty2s(l_cmp_idx);
13030
13031 -- If a delivery detail is completely backorderd, delete it physically(pass p_delete_flag as 'Y'
13032 -- to process_delivery_details).
13033 IF l_bo_qtys(l_cmp_idx) = l_req_qtys(l_cmp_idx) THEN
13034 --{
13035 --
13036 IF l_debug_on THEN
13037 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit Process_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
13038 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);
13039 END IF;
13040 --
13041 Process_Delivery_Details (
13042 p_delivery_detail_id => l_detail_ids(l_cmp_idx),
13043 p_bo_qty => l_bo_qtys(l_cmp_idx),
13044 p_overpick_qty => l_overpick_qtys(l_cmp_idx),
13045 p_bo_mode => p_bo_mode,
13046 p_delete_flag => 'Y',
13047 p_bo_qty2s => l_bo_qty2s(l_cmp_idx),
13048 x_return_status => l_return_status
13049 );
13050 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13051 raise FND_API.G_EXC_ERROR;
13052 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13053 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13054 END IF;
13055
13056 -- If a delivery detail is partially backordered , unreserve the backordered
13057 -- quantity and later update its requested quantity. This delivery detail should not be
13058 -- deleted ( pass p_delete_flag as 'N' to process_delivery_details).
13059 ELSIF ((l_bo_qtys(l_cmp_idx) > 0 OR l_overpick_qtys(l_cmp_idx) > 0)) THEN
13060 --
13061 IF l_debug_on THEN
13062 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit Process_Delivery_Details',WSH_DEBUG_SV.C_PROC_LEVEL);
13063 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);
13064 END IF;
13065 --
13066 Process_Delivery_Details (
13067 p_delivery_detail_id => l_detail_ids(l_cmp_idx),
13068 p_bo_qty => l_bo_qtys(l_cmp_idx),
13069 p_overpick_qty => l_overpick_qtys(l_cmp_idx),
13070 p_bo_mode => p_bo_mode,
13071 p_delete_flag => 'N',
13072 p_bo_qty2s => l_bo_qty2s(l_cmp_idx),
13073 x_return_status => l_return_status
13074 );
13075 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
13076 raise FND_API.G_EXC_ERROR;
13077 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13078 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13079 END IF;
13080
13081 -- HW OPM BUG#:3121616 added qty2s
13082 update wsh_delivery_details
13083 set requested_quantity = requested_quantity - l_bo_qtys(l_cmp_idx),
13084 requested_quantity2 = requested_quantity2 - l_bo_qty2s(l_cmp_idx),
13085 picked_quantity = picked_quantity - l_bo_qtys(l_cmp_idx) - l_overpick_qtys(l_cmp_idx),
13086 picked_quantity2 = picked_quantity2 - l_bo_qty2s(l_cmp_idx),
13087 cycle_count_quantity = 0,
13088 cycle_count_quantity2 = 0
13089 where delivery_detail_id = l_detail_ids(l_cmp_idx);
13090 -- DBI needs to track the delivery details whose requested_qty or released_status changes
13091 -- Populate the delivery details involved here and then make a single call after the
13092 -- loop ends
13093 l_detail_tab(l_detail_tab.count + 1) := l_detail_ids(l_cmp_idx);
13094 END IF; --}
13095 --}
13096 l_detail_ids.DELETE(l_cmp_idx);
13097
13098 -- delivery detail with l_cons_dd_flags(l_cmp_idx)='Y' should be deleted from l_detail_ids.
13099 ELSIF ( l_line_ids(l_cmp_idx) = l_curr_line_id ) THEN
13100 l_detail_ids.DELETE(l_cmp_idx);
13101 END IF;
13102 --}
13103 l_cmp_idx := l_detail_ids.NEXT(l_cmp_idx);
13104 END LOOP; --} inner Loop(l_cmp_idx)
13105
13106 -- DBI Project
13107 -- Update of wsh_delivery_details where requested_quantity/released_status
13108 -- are changed, call DBI API after the update.
13109 -- This API will also check for DBI Installed or not
13110 IF l_debug_on THEN
13111 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail count-',l_detail_tab.count);
13112 END IF;
13113 WSH_INTEGRATION.DBI_Update_Detail_Log
13114 (p_delivery_detail_id_tab => l_detail_tab,
13115 p_dml_type => 'UPDATE',
13116 x_return_status => l_dbi_rs);
13117
13118 IF l_debug_on THEN
13119 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
13120 END IF;
13121 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
13122 -- just pass this return status to caller API
13123 raise FND_API.G_EXC_UNEXPECTED_ERROR;
13124 END IF;
13125 -- End of Code for DBI Project
13126 --
13127
13128 -- Assign the Consolidate BO qtys to the OUT parameter
13129 --Bug 7257451 now storing the remain bo qty's in x_remain_bo_qtys/x_remain_bo_qty2s at same index(l_next_idx)
13130 --as in x_cons_delivery_details_tab so that both table are in sync
13131 l_next_idx := x_cons_delivery_details_tab.FIRST;
13132 WHILE l_next_idx IS NOT NULL
13133 LOOP --{
13134 IF x_cons_delivery_details_tab(l_next_idx).source_line_id = l_curr_line_id THEN
13135 IF x_cons_delivery_details_tab(l_next_idx).req_qty = 0 THEN
13136 x_remain_bo_qtys(l_next_idx) := 0;
13137 x_remain_bo_qty2s(l_next_idx) := 0;
13138 ELSE
13139 x_remain_bo_qtys(l_next_idx) := l_total_bo_qty;
13140 -- Bug#3670261
13141 -- Delete the Freight Costs only if Consolidation happens and
13142 -- if delivery detail is going to be completely backordered.
13143 IF (l_total_bo_qty > 0 AND
13144 x_cons_delivery_details_tab(l_next_idx).req_qty = x_cons_delivery_details_tab(l_next_idx).bo_qty) THEN
13145 l_freight_detail_ids(l_freight_detail_ids.COUNT+1) := x_cons_delivery_details_tab(l_next_idx).delivery_detail_id;
13146 END IF;
13147 --
13148 -- HW OPM BUG#:3121616 added qty2s. Added NVL since x_remain_bo_qtys2 is
13149 -- an OUT parameter and for discrete and OPM single UOM lines returning NULL
13150 -- will cause a problem
13151 x_remain_bo_qty2s(l_next_idx) := nvl(l_total_bo_qty2,0);
13152 END IF;
13153 END IF;
13154 l_next_idx := x_cons_delivery_details_tab.NEXT(l_next_idx);
13155 END LOOP; --}
13156 --
13157 IF l_debug_on THEN
13158 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);
13159 -- HW OPM BUG#:3121616 added qty2s
13160 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);
13161 END IF;
13162 l_idx := l_detail_ids.NEXT(l_idx);
13163 END LOOP; -- } Outer Loop(l_idx)
13164
13165 -- Bug#3670261
13166 -- Deleting the Freight Costs associated with the delivery details selected for Consolidation
13167 FORALL i IN 1..l_freight_detail_ids.COUNT
13168 DELETE FROM WSH_FREIGHT_COSTS
13169 WHERE delivery_detail_id = l_freight_detail_ids(i);
13170 IF l_debug_on THEN
13171 WSH_DEBUG_SV.log(l_module_name,'Freight Cost Rows deleted',SQL%ROWCOUNT);
13172 END IF;
13173
13174 l_req_qtys.DELETE;
13175 l_bo_qtys.DELETE;
13176 -- HW OPM BUG#:3121616 added qty2s
13177 l_bo_qty2s.DELETE;
13178
13179 --
13180 -- Debug Statements
13181 --
13182 IF l_debug_on THEN
13183 WSH_DEBUG_SV.pop(l_module_name);
13184 END IF;
13185 --
13186
13187 EXCEPTION
13188 WHEN FND_API.G_EXC_ERROR THEN
13189 x_return_status := FND_API.G_RET_STS_ERROR;
13190 --
13191 IF l_debug_on THEN
13192 wsh_debug_sv.logmsg(l_module_name, 'FND_API.G_EXC_ERROR exception has occired.',wsh_debug_sv.c_excep_level);
13193 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
13194 END IF;
13195 --
13196
13197 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13198 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13199 --
13200 IF l_debug_on THEN
13201 wsh_debug_sv.logmsg(l_module_name, 'FND_API.G_EXC_UNEXPECTED_ERROR exception has occured.', wsh_debug_sv.c_excep_level);
13202 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
13203 END IF;
13204 --
13205
13206 WHEN OTHERS THEN
13207 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13208 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Consolidate_Delivery_Details',l_module_name);
13209 --
13210 -- Debug Statements
13211 --
13212 IF l_debug_on THEN
13213 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13214 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13215 END IF;
13216 --
13217
13218 END Consolidate_Delivery_Details;
13219
13220
13221 -- K: MDC
13222 PROCEDURE Delete_Consol_Record(
13223 p_detail_id_tab IN wsh_util_core.id_tab_type,
13224 x_return_status OUT NOCOPY VARCHAR2) IS
13225
13226 l_debug_on BOOLEAN;
13227 --
13228 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'delete_consol_record';
13229 BEGIN
13230 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13231 --
13232 IF l_debug_on IS NULL
13233 THEN
13234 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13235 END IF;
13236 IF l_debug_on THEN
13237 WSH_DEBUG_SV.push(l_module_name);
13238 END IF;
13239
13240 x_return_status := FND_API.G_RET_STS_SUCCESS;
13241
13242 FORALL i in p_detail_id_tab.first..p_detail_id_tab.LAST
13243 update wsh_delivery_assignments
13244 set type = 'S'
13245 where type = 'O'
13246 and delivery_detail_id = p_detail_id_tab(i);
13247
13248 IF sql%found THEN
13249
13250 FORALL i in p_detail_id_tab.first..p_detail_id_tab.LAST
13251 delete from wsh_delivery_assignments
13252 where delivery_detail_id = p_detail_id_tab(i)
13253 and type = 'C';
13254
13255 END IF;
13256 IF l_debug_on THEN
13257 WSH_DEBUG_SV.pop(l_module_name);
13258 END IF;
13259 EXCEPTION
13260 WHEN OTHERS THEN
13261 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13262 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Unassign_Top_Detail_from_Delivery',l_module_name);
13263 --
13264 -- Debug Statements
13265 --
13266 IF l_debug_on THEN
13267 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13268 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13269 END IF;
13270 --
13271 END Delete_Consol_Record;
13272
13273 PROCEDURE Create_Consol_Record(
13274 p_detail_id_tab IN wsh_util_core.id_tab_type,
13275 x_return_status OUT NOCOPY VARCHAR2) IS
13276
13277 cursor c_get_consolidation_delivery (p_det_id IN NUMBER) is
13278 select l1.delivery_id, l2.delivery_id
13279 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_delivery_assignments a
13280 where a.delivery_detail_id = p_det_id
13281 and l1.delivery_id = a.delivery_id
13282 and l1.parent_delivery_leg_id = l2.delivery_leg_id
13283 and a.parent_delivery_detail_id is NULL
13284 and NVL(a.type, 'S') = 'S';
13285
13286 l_consol_delivery_id_tab wsh_util_core.id_tab_type;
13287 l_delivery_id_tab wsh_util_core.id_tab_type;
13288 l_detail_id_tab wsh_util_core.id_tab_type;
13289 l_delivery_id NUMBER;
13290 l_consol_delivery_id NUMBER;
13291 i NUMBER;
13292 j NUMBER := 0;
13293
13294 l_debug_on BOOLEAN;
13295 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PACKAGE_NAME || '.' || 'create_consol_record';
13296
13297 BEGIN
13298 --
13299 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13300 --
13301 IF l_debug_on IS NULL
13302 THEN
13303 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13304 END IF;
13305 IF l_debug_on THEN
13306 WSH_DEBUG_SV.push(l_module_name);
13307 WSH_DEBUG_SV.log(l_module_name, 'p_detail_id_tab.count',p_detail_id_tab.count );
13308 END IF;
13309
13310 x_return_status := FND_API.G_RET_STS_SUCCESS;
13311
13312 i := p_detail_id_tab.FIRST;
13313
13314 WHILE i is NOT NULL LOOP
13315
13316 IF l_debug_on THEN
13317 WSH_DEBUG_SV.log(l_module_name, 'p_detail_id_tab(i)', p_detail_id_tab(i) );
13318 END IF;
13319 OPEN c_get_consolidation_delivery(p_detail_id_tab(i));
13320 FETCH c_get_consolidation_delivery
13321 INTO l_delivery_id, l_consol_delivery_id;
13322 IF c_get_consolidation_delivery%FOUND THEN
13323 j := j + 1;
13324 l_consol_delivery_id_tab(j) := l_consol_delivery_id;
13325 l_delivery_id_tab(j) := l_delivery_id;
13326 l_detail_id_tab(j) := p_detail_id_tab(i);
13327 END IF;
13328 CLOSE c_get_consolidation_delivery;
13329 i := p_detail_id_tab.next(i);
13330
13331 END LOOP;
13332
13333 IF l_detail_id_tab.count > 0 THEN
13334
13335 IF l_debug_on THEN
13336 WSH_DEBUG_SV.logmsg(l_module_name, 'updating tabcount', l_detail_id_tab.count);
13337 END IF;
13338 FORALL i in l_detail_id_tab.first..l_detail_id_tab.count
13339 update wsh_delivery_assignments
13340 set type = 'O',
13341 parent_delivery_detail_id = NULL
13342 where NVL(type, 'S') = 'S'
13343 and delivery_detail_id = l_detail_id_tab(i);
13344
13345 FORALL i in l_detail_id_tab.first..l_detail_id_tab.count
13346 INSERT INTO wsh_delivery_assignments (
13347 delivery_id,
13348 parent_delivery_id,
13349 delivery_detail_id,
13350 parent_delivery_detail_id,
13351 creation_date,
13352 created_by,
13353 last_update_date,
13354 last_updated_by,
13355 last_update_login,
13356 program_application_id,
13357 program_id,
13358 program_update_date,
13359 request_id,
13360 active_flag,
13361 delivery_assignment_id,
13362 type
13363 ) VALUES (
13364 l_delivery_id_tab(i),
13365 l_consol_delivery_id_tab(i),
13366 l_detail_id_tab(i),
13367 NULL,
13368 SYSDATE,
13369 FND_GLOBAL.USER_ID,
13370 SYSDATE,
13371 FND_GLOBAL.USER_ID,
13372 FND_GLOBAL.USER_ID,
13373 NULL,
13374 NULL,
13375 NULL,
13376 NULL,
13377 NULL,
13378 wsh_delivery_assignments_s.nextval,
13379 'C'
13380 );
13381
13382
13383 END IF;
13384
13385
13386 IF l_debug_on THEN
13387 WSH_DEBUG_SV.pop(l_module_name);
13388 END IF;
13389
13390 EXCEPTION
13391
13392 WHEN OTHERS THEN
13393 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
13394 WSH_UTIL_CORE.Default_Handler('WSH_DELIVERY_DETAILS_ACTIONS.Create_Consol_Record',l_module_name);
13395 --
13396 -- Debug Statements
13397 --
13398 IF l_debug_on THEN
13399 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
13400 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
13401 END IF;
13402 --
13403 END Create_Consol_Record;
13404
13405 END WSH_DELIVERY_DETAILS_ACTIONS;