[Home] [Help]
PACKAGE BODY: APPS.WSH_NEW_DELIVERY_ACTIONS
Source
1 PACKAGE BODY WSH_NEW_DELIVERY_ACTIONS as
2 /* $Header: WSHDEACB.pls 120.51 2008/01/14 15:39:25 skanduku ship $ */
3
4
5 g_object_id_tab WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
6
7
8 --
9 G_PKG_NAME CONSTANT VARCHAR2(50) := 'WSH_NEW_DELIVERY_ACTIONS';
10 --
11
12 -- Global variables used in Cont_Tobe_Unassigned and Get_Topmost_Unassignable_Cont
13 g_container_lines wsh_util_core.id_tab_type ;
14 g_traversed_containers wsh_util_core.id_tab_type;
15
16 /* Added the following global variable for Ship Message Customization project
17 * for R12. This variable is accessed in procedure CONFIRM_DELIVERY. This
18 * variable is used to cache the Message Severity Level */
19 g_missing_inv_severity VARCHAR2(10);
20
21 --
22 -- R12 Routing Guide (Start)
23 --
24
25 TYPE wsh_cs_delivery_info_rec IS RECORD( l_delivery_id wsh_new_deliveries.delivery_id%TYPE,
26 l_dlvy_name wsh_new_deliveries.name%TYPE,
27 l_organization_id wsh_new_deliveries.organization_id%TYPE,
28 l_gross_weight wsh_new_deliveries.gross_weight%TYPE,
29 l_weight_uom_code wsh_new_deliveries.weight_uom_code%TYPE,
30 l_volume wsh_new_deliveries.volume%TYPE,
31 l_volume_uom_code wsh_new_deliveries.volume_uom_code%TYPE,
32 l_initial_pickup_location_id wsh_new_deliveries.initial_pickup_location_id%TYPE,
33 l_ultimate_dropoff_location_id wsh_new_deliveries.ultimate_dropoff_location_id%TYPE,
34 l_customer_id wsh_new_deliveries.customer_id%TYPE,
35 l_freight_terms_code wsh_new_deliveries.freight_terms_code%TYPE,
36 l_planned_flag wsh_new_deliveries.planned_flag%TYPE,
37 l_initial_pickup_date wsh_new_deliveries.initial_pickup_date%TYPE,
38 l_ultimate_dropoff_date wsh_new_deliveries.ultimate_dropoff_date%TYPE,
39 l_fob_code wsh_new_deliveries.fob_code%TYPE,
40 l_shipment_direction wsh_new_deliveries.shipment_direction%TYPE,
41 l_delivery_type wsh_new_deliveries.delivery_type%TYPE,
42 l_trip_id NUMBER);
43
44 TYPE wsh_cs_delivery_info_tab IS TABLE OF wsh_cs_delivery_info_rec INDEX BY BINARY_INTEGER;
45 --
46 -- R12 Routing Guide (End)
47 --
48
49
50 -- Local API, used within this procedure only
51 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
52 return BOOLEAN ;
53
54 -- Local API, used within this procedure only
55 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2)
56 return VARCHAR2 ;
57
58 -- K: MDC: Forward declaration
59
60 PROCEDURE Confirm_Consolidation_Delivery(
61 p_consol_del_tab IN wsh_util_core.id_tab_type,
62 x_return_status OUT NOCOPY VARCHAR2);
63
64 PROCEDURE Create_Deconsol_Trips(
65 p_deliveries_tab IN wsh_util_core.id_tab_type,
66 x_return_status OUT NOCOPY VARCHAR2);
67
68
69 /* This procedure identifies the topmost container which contains only packed or unpacked staged line(s)
70 that can be unassigned from the delivery. This procedure is initially called from Cont_Tobe_Unassigned
71 for all the Staged Lines. This procedure then recursively checks if the container has only staged lines.
72 If it has any empty containers or shipped lines, then the container cannot be unassigned. Only its
73 children may be unassigned. The unassigned list is stored in g_container_lines package variable.
74 Parameters :
75 p_curr_line_id Delivery Detail Id of Container or Staged Line
76 p_staged_lines Array of Staged Lines
77 l_return_status Return Status
78 */
79
80 PROCEDURE get_topmost_unassignable_cont ( p_curr_line_id IN NUMBER,
81 p_staged_lines IN wsh_util_core.id_tab_type,
82 x_return_status OUT NOCOPY VARCHAR2
83 )
84 IS
85
86 CURSOR get_container(detail_id NUMBER) IS
87 SELECT parent_delivery_detail_id
88 FROM wsh_delivery_assignments_v
89 WHERE delivery_detail_id = detail_id;
90
91 CURSOR get_lines (cont_id NUMBER) IS
92 SELECT delivery_detail_id
93 FROM wsh_delivery_assignments_v
94 START WITH parent_delivery_detail_id = cont_id
95 CONNECT BY PRIOR delivery_detail_id = parent_delivery_detail_id;
96
97 l_container_id NUMBER := NULL;
98 l_detail_found BOOLEAN ;
99
100 x_immediate_contents wsh_util_core.id_tab_type;
101
102 l_contents wsh_util_core.id_tab_type;
103
104 get_lines_curr_fetch NUMBER;
105 get_lines_prev_fetch NUMBER;
106
107 l_return_status VARCHAR2(1);
108
109
110 --
111 l_debug_on BOOLEAN;
112 --
113 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_TOPMOST_UNASSIGNABLE_CONT';
114 --
115
116 BEGIN
117 --
118 -- Debug Statements
119 --
120 --
121 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
122 --
123 IF l_debug_on IS NULL
124 THEN
125 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
126 END IF;
127 --
128 IF l_debug_on THEN
129 WSH_DEBUG_SV.push(l_module_name);
130 END IF;
131 --
132 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
133
134 OPEN get_container (p_curr_line_id) ;
135 FETCH get_container INTO l_container_id;
136 IF get_container%NOTFOUND THEN
137 CLOSE get_container;
138 RAISE NO_DATA_FOUND;
139 END IF;
140 CLOSE get_container;
141
142 IF l_debug_on THEN
143 WSH_DEBUG_SV.logmsg(l_module_name,'Current line : '||p_curr_line_id||' , Container : '|| l_container_id);
144 END IF;
145
146 IF l_container_id IS NULL THEN
147 -- Either it is an unpacked staged line or it is the topmost container
148 FOR j IN 1..g_container_lines.COUNT LOOP
149 IF ( p_curr_line_id = g_container_lines(j) ) THEN
150 GOTO END_PROC ;
151 END IF;
152 END LOOP;
153 g_container_lines(g_container_lines.COUNT + 1) := p_curr_line_id ;
154 GOTO END_PROC ;
155 ELSE
156 -- Check if this container has already been traversed
157 FOR r in 1..g_traversed_containers.COUNT LOOP
158 IF l_container_id = g_traversed_containers(r) THEN
159 GOTO END_PROC;
160 END IF;
161 END LOOP;
162 END IF;
163
164 -- Check for all contents of Container
165 get_lines_curr_fetch := 0;
166 get_lines_prev_fetch := 0;
167 l_contents.delete;
168 OPEN get_lines(l_container_id);
169 LOOP
170 FETCH get_lines BULK COLLECT INTO x_immediate_contents LIMIT 100;
171 get_lines_curr_fetch := get_lines%rowcount - get_lines_prev_fetch;
172 EXIT WHEN ( get_lines_curr_fetch = 0 );
173 FOR m IN 1..get_lines_curr_fetch LOOP
174 l_contents(l_contents.COUNT + 1) := x_immediate_contents(m);
175 l_detail_found := FALSE;
176 -- Check if all the immediate lines in l_cont_id are present in staged lines list
177 FOR n in 1..p_staged_lines.COUNT LOOP
178 IF x_immediate_contents(m) = p_staged_lines(n) THEN
179 IF l_debug_on THEN
180 WSH_DEBUG_SV.logmsg(l_module_name,'Found Staged line :'||p_staged_lines(n));
181 END IF;
182 l_detail_found := TRUE;
183 EXIT;
184 END IF;
185 END LOOP;
186
187 IF ( NOT l_detail_found ) THEN
188 -- Check if contents of Container are in Traversed Container List
189 FOR p in 1..g_traversed_containers.COUNT LOOP
190 IF x_immediate_contents(m) = g_traversed_containers(p) THEN
191 IF l_debug_on THEN
192 WSH_DEBUG_SV.logmsg(l_module_name,'Found Traversed Container :'||g_traversed_containers(p));
193 END IF;
194 l_detail_found := TRUE;
195 EXIT;
196 END IF;
197 END LOOP;
198 END IF;
199
200 IF ( NOT l_detail_found ) THEN
201 -- Check if line or container is already marked as to be unassigned previously, if so, return to caller
202 FOR j IN 1..g_container_lines.COUNT LOOP
203 IF ( p_curr_line_id = g_container_lines(j) ) THEN
204 IF l_debug_on THEN
205 WSH_DEBUG_SV.logmsg(l_module_name,'Found current line in Unassigned Container List :'||p_curr_line_id);
206 END IF;
207 GOTO END_PROC ;
208 END IF;
209 END LOOP;
210 IF l_debug_on THEN
211 WSH_DEBUG_SV.logmsg(l_module_name,'Found either shipped line, container_line or non-traversed path :'||x_immediate_contents(m));
212 END IF;
213 g_container_lines(g_container_lines.COUNT + 1) := p_curr_line_id ;
214 GOTO END_PROC ;
215 END IF;
216
217 END LOOP; -- get_lines_curr_fetch
218
219 get_lines_prev_fetch := get_lines%rowcount;
220
221 END LOOP; -- get_lines cursor
222
223 -- If all the lines in the Container are Staged Lines or other Container Lines, then call recursively for Container
224 IF ( l_detail_found ) THEN
225 -- Fail safe to close the open cursor before calling recursively
226 IF get_lines%ISOPEN THEN
227 CLOSE get_lines;
228 END IF;
229 FOR y in 1..l_contents.COUNT LOOP
230 FOR z in 1..g_container_lines.COUNT LOOP
231 IF l_contents(y) = g_container_lines(z) THEN
232 g_container_lines(z) := -g_container_lines(z);
233 END IF;
234 END LOOP;
235 END LOOP;
236 g_traversed_containers(g_traversed_containers.count + 1) := l_container_id ;
237 IF l_debug_on THEN
238 WSH_DEBUG_SV.logmsg(l_module_name,'Recursive call for container :'||l_container_id);
239 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
240 END IF;
241 get_topmost_unassignable_cont( l_container_id, p_staged_lines, l_return_status );
242 IF l_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
243 IF l_debug_on THEN
244 WSH_DEBUG_SV.log(l_module_name, 'Return Status from WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT : ', l_return_status);
245 END IF;
246 g_container_lines.delete;
247 RAISE NO_DATA_FOUND;
248 END IF;
249 END IF;
250
251 <<END_PROC>>
252 IF get_lines%ISOPEN THEN
253 CLOSE get_lines;
254 END IF;
255
256 --
257 -- Debug Statements
258 --
259 IF l_debug_on THEN
260 WSH_DEBUG_SV.pop(l_module_name);
261 END IF;
262 --
263
264 EXCEPTION
265 WHEN OTHERS THEN
266 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Topmost_Unassignable_Cont',l_module_name);
267 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
268 IF get_lines%ISOPEN THEN
269 CLOSE get_lines;
270 END IF;
271 IF l_debug_on THEN
272 WSH_DEBUG_SV.pop(l_module_name,'When Others');
273 END IF;
274 END get_topmost_unassignable_cont;
275
276
277 /* This procedure takes input as staged lines and then calls get_topmost_unassignable_cont to
278 see if the parent container(s) can also be unassigned. It then returns the list of lines or
279 containers which should be unassigned back to the calling program.
280 */
281 PROCEDURE Cont_ToBe_Unassigned ( p_staged_lines IN wsh_util_core.id_tab_type,
282 x_unassigned_cont OUT NOCOPY wsh_util_core.id_tab_type,
283 x_return_status OUT NOCOPY VARCHAR2
284 )
285 IS
286
287 l_return_status VARCHAR2(1);
288
289 --
290 l_debug_on BOOLEAN;
291 --
292 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONT_TOBE_UNASSIGNED';
293 --
294
295 BEGIN
296
297 --
298 -- Debug Statements
299 --
300 --
301 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
302 --
303 IF l_debug_on IS NULL
304 THEN
305 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
306 END IF;
307 --
308 IF l_debug_on THEN
309 WSH_DEBUG_SV.push(l_module_name);
310 END IF;
311 --
312 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
313
314 IF ( p_staged_lines.COUNT = 0 ) THEN
315 IF l_debug_on THEN
316 WSH_DEBUG_SV.pop(l_module_name);
317 END IF;
318 RETURN;
319 END IF;
320
321 g_container_lines.delete;
322 g_traversed_containers.delete;
323
324 FOR i in 1..p_staged_lines.COUNT LOOP
325 --
326 -- Debug Statements
327 --
328 IF l_debug_on THEN
329 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
330 WSH_DEBUG_SV.log(l_module_name, 'Staged Detail Line: ', p_staged_lines(i));
331 END IF;
332 --
333 get_topmost_unassignable_cont( p_staged_lines(i), p_staged_lines, l_return_status );
334
335 IF l_return_status IN ( WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
336 IF l_debug_on THEN
337 WSH_DEBUG_SV.log(l_module_name, 'Return Status from WSH_NEW_DELIVERY_ACTIONS.GET_TOPMOST_UNASSIGNABLE_CONT : ', l_return_status);
338 END IF;
339 x_unassigned_cont.delete;
340 RAISE NO_DATA_FOUND;
341 END IF;
342
343 END LOOP; -- main loop on p_staged_lines
344
345 -- To assign only +ve values to the out parameter
346 FOR z in 1..g_container_lines.COUNT LOOP
347 IF g_container_lines(z) > 0 THEN
348 x_unassigned_cont(x_unassigned_cont.COUNT + 1) := g_container_lines(z);
349 IF l_debug_on THEN
350 WSH_DEBUG_SV.log(l_module_name, 'Containers/Lines to be Unassigned : ', g_container_lines(z));
351 END IF;
352 END IF;
353 END LOOP;
354
355 --
356 -- Debug Statements
357 --
358 IF l_debug_on THEN
359 WSH_DEBUG_SV.pop(l_module_name);
360 END IF;
361 --
362
363 EXCEPTION
364 WHEN OTHERS THEN
365 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Cont_ToBe_Unassigned',l_module_name);
366 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
367 IF l_debug_on THEN
368 WSH_DEBUG_SV.pop(l_module_name,'When Others');
369 END IF;
370 END Cont_ToBe_Unassigned;
371
372 -- bug 4505105
373 -- This procedure validates whether the containers
374 -- with in the given delivery are shippable or not
375 -- Validates Normal deliveries as well as Consol Deliveries.
376 PROCEDURE validate_del_containers (p_delivery_id IN NUMBER,
377 p_del_type IN VARCHAR2 DEFAULT 'STD',
378 x_del_valid_flag OUT NOCOPY VARCHAR2,
379 x_return_status OUT NOCOPY VARCHAR2)
380 IS
381 --{
382 --
383 l_return_status VARCHAR2(1);
384 l_del_valid_flag VARCHAR2(1);
385 l_cnt_flag VARCHAR2(1);
386
387 cursor l_del_contents_csr (p_del_id IN NUMBER,
388 p_cnt_flag IN VARCHAR2) is
389 select 'N'
390 from wsh_delivery_assignments_v wda,
391 wsh_delivery_details wdd,
392 mtl_system_items msi
393 where wda.delivery_detail_id = wdd.delivery_detail_id
394 and wdd.inventory_item_id = msi.inventory_item_id
395 and wdd.organization_id = msi.organization_id
396 and nvl(msi.shippable_item_flag,'Y') = 'N'
397 and wdd.container_flag = p_cnt_flag
398 and wda.delivery_id = p_del_id;
399
400 --
401 l_debug_on BOOLEAN;
402 --
403 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_DEL_CONTAINERS';
404 --
405
406
407 --}
408 BEGIN
409 --{
410 --
411 -- Debug Statements
412 --
413 --
414 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
415 --
416 IF l_debug_on IS NULL
417 THEN
418 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
419 END IF;
420 --
421 IF l_debug_on THEN
422 WSH_DEBUG_SV.push(l_module_name);
423 WSH_DEBUG_SV.log(l_module_name, 'p_delivery_id is ', p_delivery_id);
424 WSH_DEBUG_SV.logmsg(l_module_name, ' Opening the cursor l_del_contents_csr');
425 END IF;
426 --
427 IF (nvl(p_del_type, 'STD') = 'STD') THEN
428 l_cnt_flag := 'Y';
429 ELSE
430 l_cnt_flag := 'C';
431 END IF;
432 --
433 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
434 --
435 open l_del_contents_csr(p_delivery_id, l_cnt_flag);
436 fetch l_del_contents_csr into l_del_valid_flag;
437 close l_del_contents_csr;
438 --
439 IF l_debug_on THEN
440 WSH_DEBUG_SV.log(l_module_name, 'l_del_valid_flag is ', l_del_valid_flag);
441 END IF;
442 --
443 x_del_valid_flag := nvl(l_del_valid_flag,'Y');
444
445 IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
446 --
447 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_SC_CNT_ERROR');
448 IF l_debug_on THEN
449 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
450 END IF;
451
452 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
453 wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
454 --
455 END IF;
456 --
457 -- Debug Statements
458 --
459 IF l_debug_on THEN
460 WSH_DEBUG_SV.pop(l_module_name);
461 END IF;
462 --
463
464 --}
465 EXCEPTION
466 --{
467 WHEN OTHERS THEN
468 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.VALIDATE_DEL_CONTAINERS',l_module_name);
469 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
470 IF l_debug_on THEN
471 WSH_DEBUG_SV.pop(l_module_name,'When Others');
472 END IF;
473
474 --}
475 END validate_del_containers;
476 -- bug 4505105
477
478 /* J TP Release */
479 PROCEDURE FIRM
480 (p_del_rows IN wsh_util_core.id_tab_type,
481 x_return_status OUT NOCOPY VARCHAR2) IS
482
483 l_return_status VARCHAR2(1);
484 l_net_weight NUMBER;
485 l_gross_weight NUMBER;
486 l_volume NUMBER;
487 l_num_error BINARY_INTEGER := 0;
488 l_num_warn BINARY_INTEGER := 0;
489 others EXCEPTION;
490
491 --
492 l_debug_on BOOLEAN;
493 --
494 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FIRM';
495 --
496 BEGIN
497
498 --
499 -- Debug Statements
500 --
501 --
502 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
503 --
504 IF l_debug_on IS NULL
505 THEN
506 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
507 END IF;
508 --
509 IF l_debug_on THEN
510 WSH_DEBUG_SV.push(l_module_name);
511 END IF;
512 --
513 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
514
515
516 IF (p_del_rows.count = 0) THEN
517 raise others;
518 END IF;
519
520 FOR i IN 1..p_del_rows.count LOOP
521
522 -- Check if Delivery can be planned
523 IF l_debug_on THEN
524 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
525 END IF;
526
527 wsh_delivery_validations.check_plan( p_del_rows(i), x_return_status);
528
529 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
530 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_FIRM_ERROR');
531
532 IF l_debug_on THEN
533 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
534 END IF;
535
536 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
537 wsh_util_core.add_message(x_return_status);
538 l_num_error := l_num_error + 1;
539 goto loop_end;
540 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
541 l_num_warn := l_num_warn + 1;
542 END IF;
543
544 wsh_tp_release.firm_entity( p_entity => 'DLVY',
545 p_entity_id =>p_del_rows(i),
546 x_return_status =>x_return_status);
547 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
548 IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
549 l_num_warn := l_num_warn + 1;
550 ELSE
551 l_num_error:=l_num_error+1;
552 END IF;
553 END IF;
554
555 <<loop_end>>
556 null;
557
558 END LOOP;
559
560
561 IF (p_del_rows.count = 1) THEN
562 IF (l_num_warn > 0) AND (l_num_error = 0) THEN
563 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
564 END IF;
565 ELSIF (p_del_rows.count > 1) THEN
566 IF (l_num_error > 0) OR (l_num_warn > 0) THEN
567 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_FIRM_SUMMARY');
568 FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
569 FND_MESSAGE.SET_TOKEN('NUM_WARN',l_num_warn);
570 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error - l_num_warn);
571
572 IF (p_del_rows.count = l_num_error) THEN
573 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
574 ELSE
575 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
576 END IF;
577
578 wsh_util_core.add_message(x_return_status);
579 ELSE
580 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
581 END IF;
582 END IF;
583
584 IF l_debug_on THEN
585 WSH_DEBUG_SV.pop(l_module_name);
586 END IF;
587
588 EXCEPTION
589 WHEN others THEN
590 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.FIRM');
591 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
592 IF l_debug_on THEN
593 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
594 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
595 END IF;
596 END FIRM;
597
598
599
600 -- -----------------------------------------------------------------------
601 -- Name
602 -- PROCEDURE Adjust_Planned_Flag
603 --
604 -- Purpose:
605 -- This procedure takes a list of deliveries and adjust the planned_flag
606 -- based on appending_limit of the organization.
607 -- If the delivery is alrady planned, it will ignore the delivery.
608 -- It never unplan the delivery. For WMS caller, if the appending_limit
609 -- matches the event it will plan the delivery.
610 --
611 -- Input Parameters:
612 -- p_delivery_ids - the list of deliveries to be processed
613 -- p_caller - 'WSH_DLMG' if it is called from delivery merge code
614 -- 'WMS_%' if it is called by WMS
615 -- p_force_appending_limit - 'Y': set the planned_flag to 'Y' without checking
616 -- the value in shipping parameters
617 -- - 'N': Check the appending_limit in shipping parameters
618 -- and plan the delivery if the appending limit has
619 -- been reached
620 -- p_call_lcss - 'Y' :Call Carrier Selection and Rate Deliveries when
621 -- appending limit has been reached if the options
622 -- in shipping parameters are set
623 -- - 'N' :do not call Carrier Selection and Rate Deliveries when
624 -- appending limit has been reached
625 --
626 -- p_event - 'A': start of packing
627 -- - 'W': start of shipping
628 -- - required if p_caller like WMS_%
629 --
630 -- Output Parameters:
631 -- x_return_status - Success, Warning, Error, Unexpected Error
632 -- ----------------------------------------------------------------------
633
634 PROCEDURE Adjust_Planned_Flag(
635 p_delivery_ids IN wsh_util_core.id_tab_type,
636 p_caller IN VARCHAR2,
637 p_force_appending_limit IN VARCHAR2,
638 p_call_lcss IN VARCHAR2,
639 p_event IN VARCHAR2,
640 x_return_status OUT NOCOPY VARCHAR2,
641 p_called_for_sc IN BOOLEAN default false) IS
642
643 CURSOR c_isdelfirm(p_delid IN NUMBER) IS
644 select 'Y'
645 from wsh_new_deliveries
646 where delivery_id=p_delid AND
647 planned_flag='F';
648
649 Cursor c_get_unplanned_delivery(p_delivery_id NUMBER) IS
650 SELECT wnd.organization_id, wnd.planned_flag , wnd.initial_pickup_location_id
651 FROM wsh_new_deliveries wnd
652 WHERE wnd.delivery_id = p_delivery_id AND
653 wnd.status_code = 'OP' AND
654 wnd.planned_flag = 'N' AND
655 NVL(wnd.shipment_direction,'O') in ('O','IO');
656
657 Cursor c_get_delivery(p_delivery_id NUMBER) IS
658 SELECT wnd.organization_id, wnd.planned_flag
659 FROM wsh_new_deliveries wnd
660 WHERE wnd.delivery_id = p_delivery_id AND
661 wnd.status_code = 'OP' AND
662 NVL(wnd.shipment_direction,'O') in ('O','IO');
663
664 Cursor c_num_of_staged_lines(p_delivery_id NUMBER) IS
665 SELECT count(wdd.delivery_detail_id)
666 FROM wsh_delivery_details wdd,
667 wsh_delivery_assignments_v wda
668 WHERE wdd.delivery_detail_id = wda.delivery_detail_id AND
669 wda.delivery_id = p_delivery_id AND
670 wda.delivery_id is not NULL AND
671 wdd.container_flag = 'N' AND
672 wdd.source_code = 'OE' AND
673 wdd.released_status in ('Y', 'C') AND
674 NVL(wdd.line_direction,'O') in ('O','IO');
675
676 Cursor c_get_line_status_in_delivery(p_delivery_id NUMBER) IS
677 SELECT wdd.released_status
678 FROM wsh_delivery_details wdd,
679 wsh_delivery_assignments_v wda
680 WHERE wdd.delivery_detail_id = wda.delivery_detail_id AND
681 wda.delivery_id = p_delivery_id AND
682 wda.delivery_id is not NULL AND
683 wdd.container_flag = 'N' AND
684 wdd.source_code = 'OE' AND
685 NVL(wdd.line_direction,'O') in ('O','IO');
686
687 l_num_error BINARY_INTEGER := 0;
688 l_num_warn BINARY_INTEGER := 0;
689 l_delfirm VARCHAR2(1);
690 l_organization_id WSH_SHIPPING_PARAMETERS.ORGANIZATION_ID%TYPE;
691 l_planned_flag WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE;
692 l_initial_pickup_location_id WSH_NEW_DELIVERIES.INITIAL_PICKUP_LOCATION_ID%TYPE;
693 l_released_status WSH_DELIVERY_DETAILS.RELEASED_STATUS%TYPE;
694 l_num_of_staged_lines NUMBER := 0;
695 l_ignore_count NUMBER := 0;
696 l_delivery_detail_count NUMBER := 0;
697 l_delivery_id NUMBER := 0;
698 l_auto_rate_tbl WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
699 l_select_carrier_tbl WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
700 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
701 l_return_status VARCHAR2(1);
702 l_status_code VARCHAR2(30) := 'OP';
703 l_dels_to_update WSH_UTIL_CORE.Id_Tab_Type;
704 l_action_prms WSH_DELIVERIES_GRP.action_parameters_rectype;
705 l_delivery_out_rec WSH_DELIVERIES_GRP.Delivery_Action_Out_Rec_Type;
706 l_defaults_rec WSH_DELIVERIES_GRP.default_parameters_rectype;
707 l_msg_count NUMBER;
708 l_msg_data VARCHAR2(2000);
709 l_planned_flag_true WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE; --bugfix 3778944
710
711 l_debug_on BOOLEAN;
712 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'Adjust_Planned_Flag';
713 l_exception_message VARCHAR2(2000);
714 l_exception_id NUMBER;
715 Rate_Delivery_Err EXCEPTION;
716 Select_Carrier_Err EXCEPTION;
717 invalid_caller EXCEPTION;
718 invalid_event EXCEPTION;
719 record_locked EXCEPTION;
720 others EXCEPTION;
721 l_assigned_to_trip VARCHAR2(1) := NULL;
722
723 PRAGMA EXCEPTION_INIT(record_locked, -54);
724
725 BEGIN
726
727 SAVEPOINT before_adjust_planned_flag;
728
729 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
730 --
731 IF l_debug_on IS NULL THEN
732 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
733 END IF;
734 --
735 IF l_debug_on THEN
736 WSH_DEBUG_SV.push(l_module_name);
737 END IF;
738
739 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
740
741
742 l_select_carrier_tbl.delete;
743 l_auto_rate_tbl.delete;
744 l_dels_to_update.delete;
745
746 IF l_debug_on THEN
747 wsh_debug_sv.logmsg(l_module_name, 'P_CALLER: '|| p_caller);
748 wsh_debug_sv.logmsg(l_module_name, 'P_FORCE_APPENDING_LIMIT: '|| p_force_appending_limit);
749 wsh_debug_sv.logmsg(l_module_name, 'P_EVENT: '|| p_event);
750 END IF;
751
752 IF (p_delivery_ids.count = 0) THEN
753 IF l_debug_on THEN
754 WSH_DEBUG_SV.pop(l_module_name,'no delivery');
755 END IF;
756 return;
757 END IF;
758
759 IF p_caller not like 'WSH_%' AND p_caller not like 'WMS_%' THEN
760 raise invalid_caller ;
761 END IF;
762
763
764 IF p_force_appending_limit = 'Y' THEN
765
766 FOR i in p_delivery_ids.FIRST .. p_delivery_ids.LAST LOOP
767
768 IF p_delivery_ids(i) is NULL THEN
769 goto loop_end;
770 END IF;
771 IF l_debug_on THEN
772 wsh_debug_sv.logmsg(l_module_name, 'forcing appending limit, lock and plan the delivery');
773 END IF;
774 l_planned_flag := NULL;
775
776 -- Check if Delivery can be planned
777 --
778 -- Debug Statements
779 --
780 IF l_debug_on THEN
781 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
782 END IF;
783 --
784 wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
785
786 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
787 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
788 --
789 -- Debug Statements
790 --
791 IF l_debug_on THEN
792 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
793 END IF;
794 --
795 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
796 wsh_util_core.add_message(x_return_status);
797 l_num_error := l_num_error + 1;
798 goto loop_end;
799 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
800 l_num_warn := l_num_warn + 1;
801 END IF;
802
803 l_delfirm:='N';
804 FOR cur IN c_isdelfirm(p_delivery_ids(i)) LOOP
805 l_delfirm:='Y';
806 wsh_tp_release.unfirm_entity( p_entity => 'DLVY',
807 p_entity_id =>p_delivery_ids(i),
808 p_action =>'PLAN',
809 x_return_status =>x_return_status);
810 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
811 IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
812 l_num_warn := l_num_warn + 1;
813 ELSE
814 goto loop_end;
815 END IF;
816 END IF;
817 END LOOP;
818
819 IF l_delfirm='N' THEN
820 -- lock the delivery befor update
821 l_delivery_id := p_delivery_ids(i);
822
823 SELECT organization_id, planned_flag INTO l_organization_id, l_planned_flag
824 FROM wsh_new_deliveries
825 WHERE delivery_id = p_delivery_ids(i)
826 FOR UPDATE NOWAIT;
827
828 IF (SQL%NOTFOUND) THEN
829 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
830 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
831 wsh_util_core.add_message(x_return_status);
832 l_num_error := l_num_error + 1;
833 goto loop_end;
834 END IF;
835
836 IF l_planned_flag = 'N' THEN
837 -- set the planned_flag to 'Y'
838
839 l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
840 IF l_debug_on THEN
841 wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
842 END IF;
843
844 -- carrier selection and rate delivery when appending limit has been reached
845 IF p_call_lcss = 'Y' and WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
846 OPEN c_get_unplanned_delivery(p_delivery_ids(i));
847 FETCH c_get_unplanned_delivery INTO l_organization_id, l_planned_flag, l_initial_pickup_location_id;
848 IF c_get_unplanned_delivery%NOTFOUND THEN
849 CLOSE c_get_unplanned_delivery;
850 goto loop_end;
851 END IF;
852 CLOSE c_get_unplanned_delivery;
853
854 IF l_debug_on THEN
855 wsh_debug_sv.logmsg(l_module_name, 'found delivery '|| p_delivery_ids(i) );
856 END IF;
857
858 l_assigned_to_trip := WSH_DELIVERY_VALIDATIONS.Del_Assigned_To_Trip(
859 p_delivery_id => p_delivery_ids(i),
860 x_return_status => l_return_status);
861
862 WSH_SHIPPING_PARAMS_PVT.Get(
863 p_organization_id => l_organization_id,
864 x_param_info => l_param_info,
865 x_return_status => l_return_status);
866
867 IF l_debug_on THEN
868 wsh_debug_sv.logmsg(l_module_name, 'Return status from WSH_SHIPPING_PARAMS_PVT.Get is :'||l_return_status );
869 END IF;
870
871
872 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
873 l_num_warn := l_num_warn + 1;
874 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
875 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
876 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
877 FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
878 wsh_util_core.get_org_name(l_organization_id));
879 wsh_util_core.add_message(x_return_status,l_module_name);
880 l_num_error := l_num_error+1;
881 goto loop_end;
882 END IF;
883
884
885 IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
886 AND l_assigned_to_trip = 'N' THEN
887 -- call carrier selection when appending limit is reached
888 l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
889 l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
890 l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
891 l_select_carrier_tbl(l_select_carrier_tbl.count).status_code := 'OP';
892 END IF;
893
894 IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
895 -- autorate delivery when appending limit is reached
896 l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
897 l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
898 l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
899 l_auto_rate_tbl(l_auto_rate_tbl.count).status_code := 'OP';
900 END IF;
901
902 END IF;
903 -- IF p_call_lcss = 'Y' and WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
904 END IF;
905 END IF;
906 <<loop_end>>
907 null;
908
909 END LOOP;
910
911
912 ELSE
913
914 FOR i in p_delivery_ids.FIRST .. p_delivery_ids.LAST LOOP
915 IF l_debug_on THEN
916 wsh_debug_sv.logmsg(l_module_name, 'checking delivery '|| p_delivery_ids(i) );
917 END IF;
918
919 IF p_delivery_ids(i) is NULL THEN
920 goto end_of_loop;
921 END IF;
922
923 OPEN c_get_unplanned_delivery(p_delivery_ids(i));
924 FETCH c_get_unplanned_delivery INTO l_organization_id, l_planned_flag, l_initial_pickup_location_id;
925 IF c_get_unplanned_delivery%NOTFOUND THEN
926 CLOSE c_get_unplanned_delivery;
927 goto end_of_loop;
928 END IF;
929 CLOSE c_get_unplanned_delivery;
930
931 IF l_debug_on THEN
932 wsh_debug_sv.logmsg(l_module_name, 'found delivery '|| p_delivery_ids(i) );
933 END IF;
934
935 l_assigned_to_trip := WSH_DELIVERY_VALIDATIONS.Del_Assigned_To_Trip(
936 p_delivery_id => p_delivery_ids(i),
937 x_return_status => l_return_status);
938
939 WSH_SHIPPING_PARAMS_PVT.Get(
940 p_organization_id => l_organization_id,
941 x_param_info => l_param_info,
942 x_return_status => l_return_status);
943
944 IF l_debug_on THEN
945 wsh_debug_sv.logmsg(l_module_name, 'Return status from WSH_SHIPPING_PARAMS_PVT.Get is :'||l_return_status );
946 END IF;
947 -- handle return status
948
949 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
950 l_num_warn := l_num_warn + 1;
951 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
952 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
953 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
954 FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
955 wsh_util_core.get_org_name(l_organization_id));
956 wsh_util_core.add_message(x_return_status,l_module_name);
957 l_num_error := l_num_error+1;
958 goto end_of_loop;
959 END IF;
960
961
962 IF p_caller like 'WSH_%' THEN
963
964 IF l_debug_on THEN
965 wsh_debug_sv.logmsg(l_module_name, 'appending_limit for organization '|| to_char(l_organization_id)||' is : '|| l_param_info.appending_limit );
966 END IF;
967
968 l_ignore_count := 0;
969 l_delivery_detail_count := 0;
970
971 IF l_param_info.appending_limit = G_NO_APPENDING THEN
972 goto end_of_loop;
973 ELSIF l_param_info.appending_limit = G_START_OF_STAGING THEN
974 -- as long as there is a sigle line which is after staging, we should set the planned flag
975 l_num_of_staged_lines := 0;
976 OPEN c_num_of_staged_lines(p_delivery_ids(i));
977 FETCH c_num_of_staged_lines INTO l_num_of_staged_lines;
978 CLOSE c_num_of_staged_lines;
979
980 IF l_num_of_staged_lines > 0 THEN
981 l_delivery_id := p_delivery_ids(i);
982 l_planned_flag := NULL;
983
984 DECLARE
985 record_locked_test exception;
986 PRAGMA EXCEPTION_INIT(record_locked_test, -54);
987 BEGIN
988 SELECT planned_flag INTO l_planned_flag
989 FROM wsh_new_deliveries
990 WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
991 AND planned_flag = 'N'
992 FOR UPDATE NOWAIT;
993
994 EXCEPTION
995 WHEN record_locked_test THEN
996 IF l_debug_on THEN
997 wsh_debug_sv.logmsg(l_module_name, 'Exception record_locked_test in the block');
998 END IF;
999 -- log exception
1000 IF p_caller = 'WSH_DLMG' THEN
1001 -- csun deliveryMerge (warning or error)
1002 FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DELIVERY_FAIL');
1003 FND_MESSAGE.SET_TOKEN('DELIVERY_ID' , to_char(p_delivery_ids(i)));
1004 l_exception_message := FND_MESSAGE.Get;
1005
1006 l_exception_id := NULL;
1007 wsh_xc_util.log_exception(
1008 p_api_version => 1.0,
1009 x_return_status => l_return_status,
1010 x_msg_count => l_msg_count,
1011 x_msg_data => l_msg_data,
1012 x_exception_id => l_exception_id,
1013 p_exception_location_id => l_initial_pickup_location_id,
1014 p_logged_at_location_id => l_initial_pickup_location_id,
1015 p_logging_entity => 'SHIPPER',
1016 p_logging_entity_id => FND_GLOBAL.USER_ID,
1017 p_exception_name => 'WSH_PLAN_DELIVERY_FAIL',
1018 p_message => substrb(l_exception_message,1,2000),
1019 p_delivery_id => p_delivery_ids(i),
1020 p_error_message => 'W');
1021 END IF;
1022 l_num_error := l_num_error + 1;
1023 goto end_of_loop;
1024
1025 WHEN OTHERS THEN
1026 IF l_debug_on THEN
1027 wsh_debug_sv.logmsg(l_module_name,'Exception others in the block');
1028 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1029 END IF;
1030 goto end_of_loop ;
1031
1032 END;
1033
1034 IF l_planned_flag is not NULL THEN
1035 -- prepare to plan the delivery
1036 wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1037
1038 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1039 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1040 --
1041 -- Debug Statements
1042 --
1043 IF l_debug_on THEN
1044 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1045 END IF;
1046 --
1047 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1048 wsh_util_core.add_message(x_return_status);
1049 l_num_error := l_num_error + 1;
1050 goto end_of_loop;
1051 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1052 l_num_warn := l_num_warn + 1;
1053 END IF;
1054
1055 l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1056 IF l_debug_on THEN
1057 wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1058 END IF;
1059
1060 IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1061 IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
1062 AND l_assigned_to_trip = 'N' THEN
1063 -- call carrier selection when appending limit is reached
1064 l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1065 l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1066 l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1067 l_select_carrier_tbl(l_select_carrier_tbl.count).status_code := 'OP';
1068 END IF;
1069
1070 IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1071 -- autorate delivery when appending limit is reached
1072 l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1073 l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1074 l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1075 l_auto_rate_tbl(l_auto_rate_tbl.count).status_code := 'OP';
1076 END IF;
1077 END IF;
1078 END IF;
1079 ELSE
1080 goto end_of_loop;
1081 END IF;
1082
1083 ELSIF l_param_info.appending_limit = G_END_OF_STAGING THEN
1084 OPEN c_get_line_status_in_delivery(p_delivery_ids(i));
1085 LOOP
1086 FETCH c_get_line_status_in_delivery INTO l_released_status;
1087 EXIT WHEN c_get_line_status_in_delivery%NOTFOUND;
1088
1089 l_delivery_detail_count := l_delivery_detail_count + 1;
1090
1091 IF l_released_status in ('N','R','S','B') THEN
1092 l_delivery_detail_count := 0;
1093 l_ignore_count := 0;
1094 EXIT;
1095 ELSIF l_released_status in ('X','D') THEN
1096 l_ignore_count := l_ignore_count + 1;
1097 END IF;
1098
1099 END LOOP;
1100 CLOSE c_get_line_status_in_delivery;
1101
1102 IF l_delivery_detail_count > 0 and
1103 l_delivery_detail_count - l_ignore_count > 0 THEN
1104 l_delivery_id := p_delivery_ids(i);
1105 l_planned_flag := NULL;
1106 --
1107 DECLARE
1108 record_locked_test exception;
1109 PRAGMA EXCEPTION_INIT(record_locked_test, -54);
1110 BEGIN
1111 SELECT planned_flag INTO l_planned_flag
1112 FROM wsh_new_deliveries
1113 WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
1114 AND planned_flag = 'N'
1115 FOR UPDATE NOWAIT;
1116
1117 EXCEPTION
1118 WHEN record_locked_test THEN
1119 IF l_debug_on THEN
1120 wsh_debug_sv.logmsg(l_module_name, 'Exception record_locked_test in the block');
1121 END IF;
1122 -- log exception
1123 IF p_caller = 'WSH_DLMG' THEN
1124 -- csun deliveryMerge (warning or error)
1125 FND_MESSAGE.SET_NAME('WSH', 'WSH_PLAN_DELIVERY_FAIL');
1126 FND_MESSAGE.SET_TOKEN('DELIVERY_ID' , to_char(p_delivery_ids(i)));
1127 l_exception_message := FND_MESSAGE.Get;
1128
1129 l_exception_id := NULL;
1130 wsh_xc_util.log_exception(
1131 p_api_version => 1.0,
1132 x_return_status => l_return_status,
1133 x_msg_count => l_msg_count,
1134 x_msg_data => l_msg_data,
1135 x_exception_id => l_exception_id,
1136 p_exception_location_id => l_initial_pickup_location_id,
1137 p_logged_at_location_id => l_initial_pickup_location_id,
1138 p_logging_entity => 'SHIPPER',
1139 p_logging_entity_id => FND_GLOBAL.USER_ID,
1140 p_exception_name => 'WSH_PLAN_DELIVERY_FAIL',
1141 p_message => substrb(l_exception_message,1,2000),
1142 p_delivery_id => p_delivery_ids(i),
1143 p_error_message => 'W');
1144 END IF;
1145 l_num_error := l_num_error + 1;
1146 goto end_of_loop;
1147
1148 WHEN OTHERS THEN
1149 IF l_debug_on THEN
1150 wsh_debug_sv.logmsg(l_module_name,'Exception others in the block');
1151 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1152 END IF;
1153 goto end_of_loop ;
1154
1155 END;
1156 --
1157
1158 IF l_planned_flag is not NULL THEN
1159
1160 -- prepare to plan the delivery
1161 wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1162
1163 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1164 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1165 --
1166 -- Debug Statements
1167 --
1168 IF l_debug_on THEN
1169 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1170 END IF;
1171 --
1172 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1173 wsh_util_core.add_message(x_return_status);
1174 l_num_error := l_num_error + 1;
1175 goto end_of_loop;
1176 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1177 l_num_warn := l_num_warn + 1;
1178 END IF;
1179
1180 l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1181 IF l_debug_on THEN
1182 wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1183 END IF;
1184
1185 IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1186
1187
1188
1189 IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E' AND l_assigned_to_trip = 'N' THEN
1190 -- perform carrier selection when appending limit is reached
1191 l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1192 l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1193 l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1194 l_select_carrier_tbl(l_select_carrier_tbl.count).status_code := 'OP';
1195 END IF;
1196
1197 IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1198 -- autoreate delivery when appending limit is reached
1199 l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1200 l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1201 l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1202 l_auto_rate_tbl(l_auto_rate_tbl.count).status_code := 'OP';
1203 END IF;
1204 END IF;
1205 END IF;
1206 END IF;
1207
1208 END IF;
1209
1210
1211 ELSIF p_caller like 'WMS_%' THEN
1212
1213 IF p_event is NULL OR
1214 p_event not in (G_START_OF_PACKING,
1215 G_START_OF_SHIPPING ) THEN
1216 raise invalid_event;
1217 END IF;
1218
1219 IF l_param_info.appending_limit = p_event THEN
1220 IF l_debug_on THEN
1221 wsh_debug_sv.logmsg(l_module_name, 'Called from WMS, Appending limit '|| l_param_info.appending_limit ||' has been reached, lock and plan the delivery');
1222 END IF;
1223 l_delivery_id := p_delivery_ids(i);
1224 l_planned_flag := NULL;
1225
1226 SELECT planned_flag INTO l_planned_flag
1227 FROM wsh_new_deliveries
1228 WHERE delivery_id = p_delivery_ids(i) AND status_code = 'OP'
1229 FOR UPDATE NOWAIT;
1230
1231 IF l_planned_flag is not NULL THEN
1232 -- prepare to plan the delivery
1233 wsh_delivery_validations.check_plan( p_delivery_ids(i), x_return_status,p_called_for_sc);
1234
1235 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1236 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_ERROR');
1237 --
1238 -- Debug Statements
1239 --
1240 IF l_debug_on THEN
1241 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1242 END IF;
1243 --
1244 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_ids(i)));
1245 wsh_util_core.add_message(x_return_status);
1246 l_num_error := l_num_error + 1;
1247 goto end_of_loop;
1248 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1249 l_num_warn := l_num_warn + 1;
1250 END IF;
1251
1252 l_dels_to_update(l_dels_to_update.count+1) := p_delivery_ids(i);
1253
1254 IF l_debug_on THEN
1255 wsh_debug_sv.logmsg(l_module_name, 'Delivery '|| p_delivery_ids(i)||' is goinging to be planned');
1256 END IF;
1257
1258 IF p_call_lcss = 'Y' AND WSH_UTIL_CORE.FTE_Is_Installed = 'Y' THEN
1259 IF NVL(l_param_info.AUTO_APPLY_ROUTING_RULES, 'D') = 'E'
1260 AND l_assigned_to_trip = ' N' THEN
1261 l_select_carrier_tbl(l_select_carrier_tbl.count+1).delivery_id := p_delivery_ids(i);
1262 l_select_carrier_tbl(l_select_carrier_tbl.count).organization_id := l_organization_id;
1263 l_select_carrier_tbl(l_select_carrier_tbl.count).planned_flag:= 'Y';
1264 l_select_carrier_tbl(l_select_carrier_tbl.count).status_code := l_status_code;
1265 END IF;
1266
1267 IF NVL(l_param_info.AUTO_CALC_FGT_RATE_APPEND_DEL, 'N') = 'Y' THEN
1268 l_auto_rate_tbl(l_auto_rate_tbl.count+1).delivery_id := p_delivery_ids(i);
1269 l_auto_rate_tbl(l_auto_rate_tbl.count).organization_id := l_organization_id;
1270 l_auto_rate_tbl(l_auto_rate_tbl.count).planned_flag:= 'Y';
1271 l_auto_rate_tbl(l_auto_rate_tbl.count).status_code := l_status_code;
1272 END IF;
1273 END IF;
1274 END IF;
1275 END IF;
1276
1277 END IF;
1278
1279
1280 <<end_of_loop>>
1281 NULL;
1282
1283 END LOOP;
1284
1285 END IF;
1286
1287 IF l_select_carrier_tbl.count > 0 THEN
1288 IF l_debug_on THEN
1289 wsh_debug_sv.logmsg(l_module_name, 'Call wsh_deliveries_grp.delivery_action for '|| to_char(l_select_carrier_tbl.count)||' deliveries');
1290 END IF;
1291
1292 l_action_prms.action_code := 'SELECT-CARRIER';
1293 l_action_prms.caller := p_caller;
1294 l_action_prms.phase := NULL;
1295 l_action_prms.ignore_ineligible_dels := 'Y';
1296 l_action_prms.form_flag := 'N';
1297
1298 IF l_debug_on THEN
1299 wsh_debug_sv.logmsg(l_module_name, 'Calling wsh_deliveries_grp.delivery_action SELECT-CARRIER with '||l_select_carrier_tbl.count||' deliveries');
1300 END IF;
1301
1302 wsh_deliveries_grp.delivery_action(
1303 p_api_version_number => 1.0,
1304 p_init_msg_list => FND_API.G_FALSE,
1305 p_commit => FND_API.G_FALSE,
1306 p_action_prms => l_action_prms,
1307 p_rec_attr_tab => l_select_carrier_tbl,
1308 x_delivery_out_rec => l_delivery_out_rec,
1309 x_defaults_rec => l_defaults_rec,
1310 x_return_status => l_return_status,
1311 x_msg_count => l_msg_count,
1312 x_msg_data => l_msg_data);
1313
1314 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING OR
1315 l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
1316 l_num_warn := l_num_warn + 1;
1317 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
1318 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1319 raise Select_Carrier_Err;
1320 END IF;
1321
1322 END IF;
1323
1324 IF l_auto_rate_tbl.count > 0 THEN
1325 IF l_debug_on THEN
1326 wsh_debug_sv.logmsg(l_module_name, 'Calling wsh_deliveries_grp.delivery_action GET-FREIGHT-COSTS with '||l_auto_rate_tbl.count ||' deliveries');
1327 END IF;
1328
1329 l_action_prms.action_code := 'GET-FREIGHT-COSTS';
1330 l_action_prms.caller := 'WSH_DLMG';
1331 l_action_prms.phase := NULL;
1332 l_action_prms.ignore_ineligible_dels := 'Y';
1333
1334 wsh_deliveries_grp.delivery_action(
1335 p_api_version_number => 1.0,
1336 p_init_msg_list => FND_API.G_FALSE,
1337 p_commit => FND_API.G_FALSE,
1338 p_action_prms => l_action_prms,
1339 p_rec_attr_tab => l_auto_rate_tbl,
1340 x_delivery_out_rec => l_delivery_out_rec,
1341 x_defaults_rec => l_defaults_rec,
1342 x_return_status => l_return_status,
1343 x_msg_count => l_msg_count,
1344 x_msg_data => l_msg_data);
1345
1346
1347 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING OR
1348 l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
1349 l_num_warn := l_num_warn + 1;
1350 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
1351 raise Rate_Delivery_Err;
1352 END IF;
1353 END IF;
1354
1355
1356 -- plan the deliveries
1357 l_planned_flag_true := 'Y'; --Bugfix 3778944
1358 IF l_dels_to_update.count > 0 THEN
1359 FORALL i in l_dels_to_update.FIRST .. l_dels_to_update.LAST
1360 update wsh_new_deliveries
1361 set planned_flag = l_planned_flag_true --Bugfix 3778944
1362 where delivery_id = l_dels_to_update(i);
1363 END IF;
1364
1365 IF (p_delivery_ids.count = 1) THEN
1366 IF (l_num_warn > 0) AND (l_num_error = 0) THEN
1367 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1368 END IF;
1369 ELSIF (p_delivery_ids.count > 1) THEN
1370 IF (l_num_error > 0) OR (l_num_warn > 0) THEN
1371 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_PLAN_SUMMARY');
1372 FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
1373 FND_MESSAGE.SET_TOKEN('NUM_WARN',l_num_warn);
1374 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_delivery_ids.count - l_num_error - l_num_warn);
1375
1376 IF (p_delivery_ids.count = l_num_error) THEN
1377 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1378 ELSE
1379 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1380 END IF;
1381 wsh_util_core.add_message(x_return_status);
1382 ELSE
1383 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1384 END IF;
1385 END IF;
1386
1387 IF l_num_error > 0 and l_num_error = p_delivery_ids.count THEN
1388 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1389 ELSIF l_num_warn > 0 OR l_num_error > 0 THEN
1390 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1391 END IF;
1392
1393 IF l_debug_on THEN
1394 wsh_debug_sv.pop(l_module_name, 'Return status: '|| x_return_status);
1395 END IF;
1396
1397 EXCEPTION
1398
1399 WHEN invalid_caller THEN
1400 rollback to before_adjust_planned_flag;
1401 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1402 FND_MESSAGE.Set_Name('WSH', 'WSH_ADJUST_PLANNED_CALLER');
1403 wsh_util_core.add_message(x_return_status,l_module_name);
1404
1405 IF l_debug_on THEN
1406 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:invalid_caller');
1407 END IF;
1408
1409 WHEN invalid_event THEN
1410 rollback to before_adjust_planned_flag;
1411 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1412 FND_MESSAGE.Set_Name('WSH', 'WSH_ADJUST_PLANNED_EVENT');
1413 wsh_util_core.add_message(x_return_status,l_module_name);
1414
1415 IF l_debug_on THEN
1416 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:invalid_appending_limit');
1417 END IF;
1418
1419 WHEN Rate_Delivery_Err THEN
1420 rollback to before_adjust_planned_flag;
1421 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1422
1423 IF l_debug_on THEN
1424 wsh_debug_sv.logmsg(l_module_name, 'Rate Delivery failed');
1425 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:Rate_Delivery_Err');
1426 END IF;
1427
1428 WHEN Select_Carrier_Err THEN
1429 rollback to before_adjust_planned_flag;
1430 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1431
1432 IF l_debug_on THEN
1433 wsh_debug_sv.logmsg(l_module_name, 'Carrier Selection failed');
1434 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:Select_Carrier_Err');
1435 END IF;
1436
1437 WHEN record_locked THEN
1438 rollback to before_adjust_planned_flag;
1439
1440 IF c_get_unplanned_delivery%ISOPEN THEN
1441 CLOSE c_get_unplanned_delivery;
1442 END IF;
1443
1444 IF c_num_of_staged_lines%ISOPEN THEN
1445 CLOSE c_num_of_staged_lines;
1446 END IF;
1447
1448 IF c_get_line_status_in_delivery%ISOPEN THEN
1449 CLOSE c_get_line_status_in_delivery;
1450 END IF;
1451
1452 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1453 FND_MESSAGE.Set_Name('WSH', 'WSH_DLVY_LOCK_FAILED');
1454 FND_MESSAGE.Set_Token('ENTITY_NAME',to_char(l_delivery_id));
1455 wsh_util_core.add_message(x_return_status,l_module_name);
1456
1457 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.ADJUST_PLANNED_FLAG',l_module_name);
1458 IF l_debug_on THEN
1459 wsh_debug_sv.logmsg(l_module_name,'Delivery cannot be locked, Oracle error message is ' || SQLERRM);
1460 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:record_locked');
1461 END IF;
1462
1463 WHEN OTHERS THEN
1464 rollback to before_adjust_planned_flag;
1465
1466 IF c_get_unplanned_delivery%ISOPEN THEN
1467 CLOSE c_get_unplanned_delivery;
1468 END IF;
1469
1470 IF c_num_of_staged_lines%ISOPEN THEN
1471 CLOSE c_num_of_staged_lines;
1472 END IF;
1473
1474 IF c_get_line_status_in_delivery%ISOPEN THEN
1475 CLOSE c_get_line_status_in_delivery;
1476 END IF;
1477
1478 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1479 wsh_util_core.add_message(x_return_status,l_module_name);
1480 wsh_util_core.default_handler('WSH_DELIVERY_ACTIONS.ADJUST_PLANNED_FLAG',l_module_name);
1481 IF l_debug_on THEN
1482 wsh_debug_sv.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is ' || SQLERRM);
1483 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
1484 END IF;
1485
1486
1487 END Adjust_Planned_Flag;
1488
1489 --
1490 -- Procedure: Plan
1491 -- Parameters: p_del_rows - Delivery_Ids of deliveries to be planned
1492 -- x_return_status - status of procedure call
1493 -- Description: This procedure will Plan deliveries for shipment
1494 --
1495
1496 PROCEDURE Plan
1497 (p_del_rows IN wsh_util_core.id_tab_type,
1498 x_return_status OUT NOCOPY VARCHAR2,
1499 p_called_for_sc IN BOOLEAN default false) IS
1500
1501
1502 others EXCEPTION;
1503
1504
1505 --
1506 l_debug_on BOOLEAN;
1507 --
1508 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PLAN';
1509 --
1510 BEGIN
1511
1512 --
1513 -- Debug Statements
1514 --
1515 --
1516 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1517 --
1518 IF l_debug_on IS NULL
1519 THEN
1520 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1521 END IF;
1522 --
1523 IF l_debug_on THEN
1524 WSH_DEBUG_SV.push(l_module_name);
1525 END IF;
1526 --
1527 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1528
1529
1530 IF (p_del_rows.count = 0) THEN
1531 raise others;
1532 END IF;
1533
1534 Adjust_Planned_Flag(
1535 p_delivery_ids => p_del_rows,
1536 p_caller => 'WSH_DLMG',
1537 p_force_appending_limit => 'Y',
1538 p_call_lcss => 'Y',
1539 x_return_status => x_return_status,
1540 p_called_for_sc => p_called_for_sc);
1541
1542
1543 --
1544 -- Debug Statements
1545 --
1546 IF l_debug_on THEN
1547 WSH_DEBUG_SV.pop(l_module_name);
1548 END IF;
1549
1550 EXCEPTION
1551 WHEN others THEN
1552 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.PLAN');
1553 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1554
1555
1556 --
1557 -- Debug Statements
1558 --
1559 IF l_debug_on THEN
1560 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1561 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1562 END IF;
1563 --
1564 END Plan;
1565
1566
1567 --
1568 -- Procedure: Unplan
1569 -- Parameters: p_del_rows - Delivery_ids of deliveries to be unplanned
1570 -- x_return_status - status of procedure call
1571 -- Description: This procedure will unplan deliveries for shipment
1572 --
1573
1574 PROCEDURE Unplan
1575 (p_del_rows IN wsh_util_core.id_tab_type,
1576 x_return_status OUT NOCOPY VARCHAR2) IS
1577
1578 l_num_error NUMBER := 0;
1579 l_num_warn NUMBER := 0;
1580 others EXCEPTION;
1581 l_return_status VARCHAR2(1);
1582 l_planned_flag_false WSH_NEW_DELIVERIES.PLANNED_FLAG%TYPE; --bugfix 3778944
1583
1584 CURSOR c_isdelfirm(p_delid IN NUMBER) IS
1585 select 'Y'
1586 from wsh_new_deliveries
1587 where delivery_id=p_delid AND
1588 planned_flag='F';
1589
1590 l_delfirm VARCHAR2(1);
1591
1592 --
1593 l_debug_on BOOLEAN;
1594 --
1595 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UNPLAN';
1596 --
1597 BEGIN
1598
1599 --
1600 -- Debug Statements
1601 --
1602 --
1603 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1604 --
1605 IF l_debug_on IS NULL
1606 THEN
1607 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1608 END IF;
1609 --
1610 IF l_debug_on THEN
1611 WSH_DEBUG_SV.push(l_module_name);
1612 END IF;
1613 --
1614 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1615
1616 IF (p_del_rows.count = 0) THEN
1617 raise others;
1618 END IF;
1619
1620 FOR i IN 1..p_del_rows.count LOOP
1621
1622 --
1623 -- Debug Statements
1624 --
1625 IF l_debug_on THEN
1626 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_UNPLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
1627 END IF;
1628 --
1629 wsh_delivery_validations.check_unplan( p_del_rows(i), x_return_status);
1630
1631 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) OR (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
1632 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNPLAN_ERROR');
1633 --
1634 -- Debug Statements
1635 --
1636 IF l_debug_on THEN
1637 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
1638 END IF;
1639 --
1640 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
1641 wsh_util_core.add_message(x_return_status);
1642 l_num_error := l_num_error + 1;
1643 ELSE
1644
1645 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
1646 l_num_warn := l_num_warn + 1;
1647 END IF;
1648
1649 l_delfirm:='N';
1650 FOR cur IN c_isdelfirm(p_del_rows(i)) LOOP
1651 l_delfirm:='Y';
1652 wsh_tp_release.unfirm_entity( p_entity => 'DLVY',
1653 p_entity_id =>p_del_rows(i),
1654 p_action =>'UNPLAN',
1655 x_return_status =>x_return_status);
1656 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
1657 IF x_return_status=WSH_UTIL_CORE.G_RET_STS_WARNING THEN
1658 l_num_warn := l_num_warn + 1;
1659 ELSE
1660 l_num_error := l_num_error + 1;
1661 END IF;
1662 END IF;
1663 END LOOP;
1664
1665 IF l_delfirm='N' THEN
1666 -- Set planned flag to 'N'
1667 l_planned_flag_false := 'N'; --bugfix 3778944
1668
1669 UPDATE wsh_new_deliveries
1670 SET planned_flag = l_planned_flag_false --bugfix 3778944
1671 WHERE delivery_id = p_del_rows(i);
1672
1673 IF (SQL%NOTFOUND) THEN
1674 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
1675 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1676 wsh_util_core.add_message(x_return_status);
1677 l_num_error := l_num_error + 1;
1678 END IF;
1679 END IF;--l_del_firm=N
1680
1681 END IF;
1682
1683 END LOOP;
1684
1685
1686 IF (p_del_rows.count = 1) THEN
1687 IF (l_num_warn > 0) AND (l_num_error = 0) THEN
1688 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1689 END IF;
1690 ELSIF (p_del_rows.count > 1) THEN
1691
1692 IF (l_num_error > 0) THEN
1693
1694 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_UNPLAN_SUMMARY');
1695 FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
1696 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
1697
1698 IF (p_del_rows.count = l_num_error) THEN
1699 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1700 ELSE
1701 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1702 END IF;
1703
1704 wsh_util_core.add_message(x_return_status);
1705 ELSIF (l_num_warn > 0) THEN
1706 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
1707 ELSE
1708 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1709 END IF;
1710
1711 END IF;
1712
1713 --
1714 -- Debug Statements
1715 --
1716 IF l_debug_on THEN
1717 WSH_DEBUG_SV.pop(l_module_name);
1718 END IF;
1719 --
1720 EXCEPTION
1721 WHEN others THEN
1722 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UNPLAN');
1723 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1724
1725 --
1726 -- Debug Statements
1727 --
1728 IF l_debug_on THEN
1729 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1730 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1731 END IF;
1732 --
1733 END Unplan;
1734
1735 PROCEDURE create_bol (
1736 p_delivery_id IN NUMBER,
1737 x_return_status OUT NOCOPY VARCHAR2) IS
1738
1739 CURSOR get_delivery_info IS
1740 SELECT dg.delivery_leg_id,
1741 dl.initial_pickup_location_id,
1742 t.ship_method_code,
1743 dl.organization_id,
1744 t.name
1745 FROM wsh_new_deliveries dl,
1746 wsh_delivery_legs dg,
1747 wsh_trip_stops st,
1748 wsh_trips t
1749 WHERE dl.delivery_id = p_delivery_id AND
1750 dl.delivery_id = dg.delivery_id AND
1751 dg.pick_up_stop_id = st.stop_id AND
1752 st.trip_id = t.trip_id;
1753
1754 --performance fix : changed to get_ledger_id (LE Uptake) to get it from hr_organization_information
1755 --instead of org_organization_definitions
1756 CURSOR get_ledger_id (l_org_id NUMBER) IS
1757 SELECT hoi.org_information1 ledger_id
1758 from hr_organization_information hoi
1759 WHERE hoi.organization_id = l_org_id
1760 AND hoi.org_information_context = 'Accounting Information';
1761
1762 --
1763 l_ledger_id NUMBER; --LE Uptake
1764 l_delivery_leg_id NUMBER;
1765 l_pickup_location_id NUMBER;
1766 l_ship_method_code VARCHAR2(30);
1767 l_organization_id NUMBER;
1768 l_document_number VARCHAR2(50);
1769 l_pack_slip_flag VARCHAR2(1);
1770 l_trip_name VARCHAR2(50);
1771 --
1772 x_msg_count NUMBER;
1773 x_msg_data VARCHAR2(2000);
1774 --
1775 wsh_create_document_error EXCEPTION;
1776 --
1777 l_debug_on BOOLEAN;
1778 --
1779 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_BOL';
1780 --
1781 BEGIN
1782
1783 --
1784 -- Debug Statements
1785 --
1786 --
1787 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1788 --
1789 IF l_debug_on IS NULL
1790 THEN
1791 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1792 END IF;
1793 --
1794 IF l_debug_on THEN
1795 --
1796 WSH_DEBUG_SV.push(l_module_name);
1797 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
1798 --
1799 END IF;
1800 --
1801 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1802 --
1803 OPEN get_delivery_info;
1804 FETCH get_delivery_info INTO l_delivery_leg_id,
1805 l_pickup_location_id,
1806 l_ship_method_code,
1807 l_organization_id,
1808 l_trip_name;
1809 CLOSE get_delivery_info;
1810
1811 /* BUG 1393429
1812 SELECT ood.set_of_books_id INTO l_set_of_books_id
1813 FROM org_organization_definitions ood
1814 WHERE ood.organization_id = l_organization_id;
1815 */
1816 --LE Uptake
1817 OPEN get_ledger_id(l_organization_id);
1818 FETCH get_ledger_id INTO l_ledger_id;
1819
1820 IF (get_ledger_id%NOTFOUND) THEN
1821 FND_MESSAGE.SET_NAME('WSH','WSH_LEDGER_ID_NOT_FOUND');
1822 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1823 wsh_util_core.add_message(x_return_status);
1824 CLOSE get_ledger_id; -- bug 2045315
1825 --
1826 -- Debug Statements
1827 --
1828 IF l_debug_on THEN
1829 WSH_DEBUG_SV.pop(l_module_name);
1830 END IF;
1831 --
1832 RETURN;
1833 END IF;
1834
1835 CLOSE get_ledger_id; --LE Uptake
1836
1837
1838 SAVEPOINT sp1;
1839
1840 -- Create BOL
1841
1842 --
1843 -- Debug Statements
1844 --
1845 IF l_debug_on THEN
1846 WSH_DEBUG_SV.log(l_module_name, 'l_ship_method_code', l_ship_method_code);
1847 END IF;
1848
1849 --
1850 -- Bug 2712087 : Do not create BOL if ship method is NULL
1851 --
1852 IF l_ship_method_code IS NULL THEN
1853 --
1854 IF l_debug_on THEN
1855 --
1856 WSH_DEBUG_SV.logmsg(l_module_name, 'Null ship Method, so do not create BOL');
1857 --
1858 END IF;
1859 --
1860 FND_MESSAGE.SET_NAME('WSH','WSH_BOL_NULL_SHIP_METHOD_ERROR');
1861 FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_trip_name);
1862 x_return_status := wsh_util_core.g_ret_sts_error;
1863 wsh_util_core.add_message(x_return_status);
1864 --
1865 RAISE wsh_create_document_error;
1866 --
1867
1868 ELSE
1869 --
1870 IF l_debug_on THEN
1871 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_PVT.CREATE_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
1872 END IF;
1873 --
1874 wsh_document_pvt.create_document
1875 (1.0,
1876 'F',
1877 NULL,
1878 NULL,
1879 x_return_status,
1880 x_msg_count,
1881 x_msg_data,
1882 'WSH_DELIVERY_LEGS',
1883 l_delivery_leg_id,
1884 665,
1885 l_pickup_location_id,
1886 'BOL',
1887 l_ship_method_code,
1888 /* Commented for Bugfix#1918342
1889 NULL, -- p_pod_flag,
1890 NULL, -- p_pod_by,
1891 NULL, -- p_pod_date,
1892 NULL, -- p_reason_of_transport,
1893 NULL, -- p_description,
1894 NULL, -- p_cod_amount,
1895 NULL, -- p_cod_currency_code,
1896 NULL, -- p_cod_remit_to,
1897 NULL, -- p_cod_charge_paid_by,
1898 NULL, -- p_problem_contact_reference,
1899 NULL, -- p_bill_freight_to,
1900 NULL, -- p_carried_by,
1901 NULL, -- p_port_of_loading,
1902 NULL, -- p_port_of_discharge,
1903 NULL, -- p_booking_office,
1904 NULL, -- p_booking_number,
1905 NULL, -- p_service_contract,
1906 NULL, -- p_shipper_export_ref,
1907 NULL, -- p_carrier_export_ref,
1908 NULL, -- p_bol_notify_party,
1909 NULL, -- p_supplier_code,
1910 NULL, -- p_aetc_number,
1911 NULL, -- p_shipper_signed_by,
1912 NULL, -- p_shipper_date,
1913 NULL, -- p_carrier_signed_by,
1914 NULL, -- p_carrier_date,
1915 NULL, -- p_bol_issue_office,
1916 NULL, -- p_bol_issued_by,
1917 NULL, -- p_bol_date_issued,
1918 NULL, -- p_shipper_hm_by,
1919 NULL, -- p_shipper_hm_date,
1920 NULL, -- p_carrier_hm_by,
1921 NULL, -- p_carrier_hm_date, */
1922 l_ledger_id,
1923 'BOTH',
1924 200,
1925 l_document_number
1926 );
1927 --
1928 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
1929 RAISE wsh_create_document_error;
1930 END IF;
1931 --
1932 END IF; /* if ship_method_code is null */
1933 --
1934 -- Debug Statements
1935 --
1936 IF l_debug_on THEN
1937 WSH_DEBUG_SV.pop(l_module_name);
1938 END IF;
1939 --
1940 EXCEPTION
1941
1942 WHEN wsh_create_document_error THEN
1943 ROLLBACK TO sp1;
1944 x_return_status := wsh_util_core.g_ret_sts_error;
1945 --
1946 -- Debug Statements
1947 --
1948 IF l_debug_on THEN
1949 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CREATE_DOCUMENT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1950 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DOCUMENT_ERROR');
1951 END IF;
1952 --
1953 END create_bol;
1954
1955 -- Create Pack Slip
1956
1957 PROCEDURE create_pack_slip (
1958 p_delivery_id IN NUMBER,
1959 x_return_status OUT NOCOPY VARCHAR2) IS
1960
1961 CURSOR get_delivery_info IS
1962 SELECT dl.initial_pickup_location_id,
1963 dl.organization_id
1964 FROM wsh_new_deliveries dl
1965 WHERE dl.delivery_id = p_delivery_id;
1966
1967 CURSOR pack_slip_required (l_org_id NUMBER) IS
1968 SELECT pack_slip_required_flag
1969 FROM wsh_shipping_parameters
1970 WHERE organization_id = l_org_id;
1971
1972 CURSOR get_pack_slip_number IS
1973 SELECT packing_slip_number
1974 FROM wsh_packing_slips_db_v
1975 WHERE delivery_id = p_delivery_id;
1976
1977 --LE Uptake
1978 --performance fix : changed to get ledger_id to get it from hr_organization_information
1979 --instead of org_organization_definitions
1980 CURSOR get_ledger_id (l_org_id NUMBER) IS
1981 SELECT hoi.org_information1 ledger_id
1982 from hr_organization_information hoi
1983 WHERE hoi.organization_id = l_org_id
1984 AND hoi.org_information_context = 'Accounting Information';
1985
1986 l_ledger_id NUMBER;
1987 l_delivery_leg_id NUMBER;
1988 l_pickup_location_id NUMBER;
1989 l_ship_method_code VARCHAR2(30);
1990 l_organization_id NUMBER;
1991 l_document_number VARCHAR2(50);
1992 l_pack_slip_flag VARCHAR2(1) := NULL;
1993 l_pack_slip_number VARCHAR2(50) := NULL;
1994
1995 x_msg_count NUMBER;
1996 x_msg_data VARCHAR2(2000);
1997
1998
1999 wsh_create_document_error EXCEPTION;
2000
2001 --
2002 l_debug_on BOOLEAN;
2003 --
2004 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CREATE_PACK_SLIP';
2005 --
2006 BEGIN
2007
2008 --
2009 -- Debug Statements
2010 --
2011 --
2012 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2013 --
2014 IF l_debug_on IS NULL
2015 THEN
2016 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2017 END IF;
2018 --
2019 IF l_debug_on THEN
2020 WSH_DEBUG_SV.push(l_module_name);
2021 --
2022 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
2023 END IF;
2024 --
2025 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2026
2027 OPEN get_delivery_info;
2028 FETCH get_delivery_info INTO l_pickup_location_id,
2029 l_organization_id;
2030 CLOSE get_delivery_info;
2031
2032 /* BUG 1393429
2033 SELECT ood.set_of_books_id INTO l_set_of_books_id
2034 FROM org_organization_definitions ood
2035 WHERE ood.organization_id = l_organization_id;
2036 */
2037
2038 --LE Uptake
2039 OPEN get_ledger_id(l_organization_id);
2040 FETCH get_ledger_id INTO l_ledger_id;
2041
2042 IF (get_ledger_id%NOTFOUND) THEN
2043 FND_MESSAGE.SET_NAME('WSH','WSH_LEDGER_ID_NOT_FOUND');
2044 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2045 wsh_util_core.add_message(x_return_status);
2046 CLOSE get_ledger_id; -- bug 2045315
2047 --
2048 -- Debug Statements
2049 --
2050 IF l_debug_on THEN
2051 WSH_DEBUG_SV.pop(l_module_name);
2052 END IF;
2053 --
2054 RETURN;
2055 END IF;
2056
2057 CLOSE get_ledger_id;
2058
2059
2060 /* Bug: 1527393
2061 OPEN pack_slip_required (l_organization_id);
2062 FETCH pack_slip_required INTO l_pack_slip_flag;
2063 CLOSE pack_slip_required;
2064 */
2065 OPEN get_pack_slip_number;
2066 FETCH get_pack_slip_number INTO l_pack_slip_number;
2067 CLOSE get_pack_slip_number;
2068
2069 SAVEPOINT sp2;
2070 -- Bug: 1527393 Packslip should be generated irrespective of the required_flag in wsh_shipping_parameters.
2071 IF (l_pack_slip_number IS NULL) THEN
2072 --
2073 -- Debug Statements
2074 --
2075 IF l_debug_on THEN
2076 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_PVT.CREATE_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
2077 END IF;
2078 --
2079 wsh_document_pvt.create_document
2080 (
2081 p_api_version => 1.0,
2082 p_init_msg_list => 'F',
2083 p_commit => NULL,
2084 p_validation_level => NULL,
2085 x_return_status => x_return_status,
2086 x_msg_count => x_msg_count,
2087 x_msg_data => x_msg_data,
2088 p_entity_name => 'WSH_NEW_DELIVERIES',
2089 p_entity_id => p_delivery_id,
2090 p_application_id => 665,
2091 p_location_id => l_pickup_location_id,
2092 p_document_type => 'PACK_TYPE',
2093 p_document_sub_type => 'SALES_ORDER',
2094 /* Commented for Bugfix#1918342
2095 p_pod_flag => NULL, -- p_pod_flag,
2096 p_pod_by => NULL, -- p_pod_by,
2097 p_pod_date => NULL, -- p_pod_date,
2098 p_reason_of_transport => NULL, -- p_reason_of_transport,
2099 p_description => NULL, -- p_description,
2100 p_cod_amount => NULL, -- p_cod_amount,
2101 p_cod_currency_code => NULL, -- p_cod_currency_code,
2102 p_cod_remit_to => NULL, -- p_cod_remit_to,
2103 p_cod_charge_paid_by => NULL, -- p_cod_charge_paid_by,
2104 p_problem_contact_reference => NULL, -- p_problem_contact_reference,
2105 p_bill_freight_to => NULL, -- p_bill_freight_to,
2106 p_carried_by => NULL, -- p_carried_by,
2107 p_port_of_loading => NULL, -- p_port_of_loading,
2108 p_port_of_discharge => NULL, -- p_port_of_discharge,
2109 p_booking_office => NULL, -- p_booking_office,
2110 p_booking_number => NULL, -- p_booking_number,
2111 p_service_contract => NULL, -- p_service_contract,
2112 p_shipper_export_ref => NULL, -- p_shipper_export_ref,
2113 p_carrier_export_ref => NULL, -- p_carrier_export_ref,
2114 p_bol_notify_party => NULL, -- p_bol_notify_party,
2115 p_supplier_code => NULL, -- p_supplier_code,
2116 p_aetc_number => NULL, -- p_aetc_number,
2117 p_shipper_signed_by => NULL, -- p_shipper_signed_by,
2118 p_shipper_date => NULL, -- p_shipper_date,
2119 p_carrier_signed_by => NULL, -- p_carrier_signed_by,
2120 p_carrier_date => NULL, -- p_carrier_date,
2121 p_bol_issue_office => NULL, -- p_bol_issue_office,
2122 p_bol_issued_by => NULL, -- p_bol_issued_by,
2123 p_bol_date_issued => NULL, -- p_bol_date_issued,
2124 p_shipper_hm_by => NULL, -- p_shipper_hm_by,
2125 p_shipper_hm_date => NULL, -- p_shipper_hm_date,
2126 p_carrier_hm_by => NULL, -- p_carrier_hm_by,
2127 p_carrier_hm_date => NULL, -- p_carrier_hm_date, */
2128 p_ledger_id => l_ledger_id, --LE Uptake
2129 p_consolidate_option => 'BOTH',
2130 p_manual_sequence_number => 200,
2131 x_document_number => l_document_number
2132 );
2133
2134 IF x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
2135 RAISE wsh_create_document_error;
2136 END IF;
2137 END IF;
2138 --
2139 -- Debug Statements
2140 --
2141 IF l_debug_on THEN
2142 WSH_DEBUG_SV.pop(l_module_name);
2143 END IF;
2144 --
2145 EXCEPTION
2146
2147 WHEN wsh_create_document_error THEN
2148 ROLLBACK TO sp2;
2149 x_return_status := wsh_util_core.g_ret_sts_error;
2150
2151 --
2152 -- Debug Statements
2153 --
2154 IF l_debug_on THEN
2155 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_CREATE_DOCUMENT_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2156 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_CREATE_DOCUMENT_ERROR');
2157 END IF;
2158 --
2159 END create_pack_slip;
2160
2161
2162 -- PROCEDURE Get_Delivery_Defaults
2163 -- Ship confirm rule logic has been removed and moved
2164 -- to UI and Integration API for Public API
2165 -- This procedure will only derive the applicable defaults
2166 -- based on input deliveries; the calling UI and integration API
2167 -- will finalize the ship method based on ship confirm rule.
2168 -- (references: frontport bugs 4310141 and 4178235)
2169 PROCEDURE Get_Delivery_Defaults
2170 (p_del_rows IN wsh_util_core.id_tab_type,
2171 p_org_ids IN wsh_util_core.id_tab_type,
2172 p_ship_method_code_vals IN ship_method_type,
2173 x_autointransit_flag OUT NOCOPY VARCHAR2,
2174 x_autoclose_flag OUT NOCOPY VARCHAR2,
2175 x_report_set_id OUT NOCOPY NUMBER, -- always NULL
2176 x_report_set_name OUT NOCOPY VARCHAR2, -- always NULL
2177 x_ship_method_name OUT NOCOPY VARCHAR2,
2178 x_return_status OUT NOCOPY VARCHAR2,
2179 x_sc_rule_id OUT NOCOPY NUMBER,
2180 x_ac_bol_flag OUT NOCOPY VARCHAR2,
2181 x_defer_interface_flag OUT NOCOPY VARCHAR2,
2182 x_sc_rule_name OUT NOCOPY VARCHAR2 -- always NULL
2183
2184 ) IS
2185
2186 CURSOR Report_Set (p_report_set_id NUMBER) IS
2187 SELECT rs.name,
2188 rs.report_set_id
2189 FROM wsh_report_sets rs
2190 WHERE rs.report_set_id = p_report_set_id;
2191
2192 CURSOR Check_Trip (l_delivery_id NUMBER) IS
2193 select wts.trip_id
2194 from wsh_delivery_legs wdl, wsh_trip_stops wts
2195 where wdl.pick_up_stop_id=wts.stop_id
2196 and wdl.delivery_id=l_delivery_id
2197 and rownum=1;
2198
2199 CURSOR sm_name(x_ship_method_code IN VARCHAR2) is
2200 SELECT meaning
2201 FROM fnd_lookup_values_vl
2202 WHERE lookup_code = x_ship_method_code
2203 AND lookup_type = 'SHIP_METHOD'
2204 AND view_application_id = 3;
2205
2206 -- Use Ship Confirm Rule for the Organization
2207 -- Also, get the default values for the Rule
2208 CURSOR get_sc_rule (p_ship_confirm_rule_id NUMBER) IS
2209 SELECT wsc.name,
2210 wsc.ship_confirm_rule_id,
2211 wsc.ac_intransit_flag,
2212 wsc.ac_close_trip_flag,
2213 wsc.ac_bol_flag,
2214 wsc.ac_defer_interface_flag,
2215 wsc.report_set_id,
2216 wsc.ship_method_code,
2217 wsc.effective_end_date
2218 FROM wsh_ship_confirm_rules wsc
2219 WHERE wsc.ship_confirm_rule_id = p_ship_confirm_rule_id;
2220
2221 l_trip_id NUMBER;
2222 l_prev_organization_id NUMBER; -- to find out the Prev. Org. Id
2223 l_organization_id NUMBER;
2224 l_all_orgids_match BOOLEAN := TRUE;
2225 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2226
2227 l_num_warn NUMBER := 0;
2228 l_count NUMBER := 0;
2229
2230 temp_ship_method_code VARCHAR2(30);
2231 dist_ship_method_code VARCHAR2(30);
2232
2233 trip_options BOOLEAN := FALSE;
2234 ship_method_options BOOLEAN := FALSE;
2235 first_ship_method BOOLEAN := TRUE;
2236 l_last_del BOOLEAN := FALSE;
2237 l_return_status VARCHAR2(1);
2238
2239
2240 others EXCEPTION;
2241
2242 -- frontport bug 4310141 / Bug 4103142 - to get first trip for delivery
2243 CURSOR c_first_ship_method (p_delivery_id IN number)IS
2244 SELECT wt.ship_method_code
2245 FROM wsh_new_deliveries del,
2246 wsh_delivery_legs dlg,
2247 wsh_trip_stops st,
2248 wsh_trips wt
2249 WHERE del.delivery_id = dlg.delivery_id
2250 AND dlg.pick_up_stop_id = st.stop_id
2251 AND del.initial_pickup_location_id = st.stop_location_id
2252 AND st.trip_id = wt.trip_id
2253 AND del.delivery_id = p_delivery_id
2254 AND rownum < 3;
2255
2256
2257
2258 --
2259 l_debug_on BOOLEAN;
2260 --
2261 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_DEFAULTS';
2262 --
2263 BEGIN
2264
2265 --
2266 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2267 --
2268 IF l_debug_on IS NULL
2269 THEN
2270 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2271 END IF;
2272 --
2273 IF l_debug_on THEN
2274 WSH_DEBUG_SV.push(l_module_name);
2275 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Count'||p_del_rows.count);
2276 WSH_DEBUG_SV.logmsg(l_module_name,'Org id Count'||p_org_ids.count);
2277 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Count'||p_ship_method_code_vals.count);
2278 END IF;
2279 --
2280 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2281
2282 l_all_orgids_match := TRUE;
2283
2284 IF (p_del_rows.count = 0) THEN
2285 RAISE others;
2286 END IF;
2287
2288 l_count := p_org_ids.count;
2289
2290 IF (p_org_ids.count = 1) THEN
2291 l_all_orgids_match := TRUE;
2292 l_organization_id := p_org_ids(1);
2293 END IF;
2294
2295 IF (p_org_ids.count > 1) THEN
2296 begin
2297 FOR i IN 1..p_org_ids.count LOOP
2298
2299 l_organization_id := p_org_ids(i);
2300
2301 IF ( i = 1 ) THEN
2302 l_prev_organization_id := l_organization_id;
2303 END IF;
2304
2305 IF (l_prev_organization_id <> l_organization_id) THEN
2306 l_all_orgids_match := FALSE;
2307 EXIT; -- Exit from loop as soon as Orgs. differ
2308 END IF;
2309 l_prev_organization_id := l_organization_id;
2310 END LOOP;
2311 end;
2312 END IF;
2313
2314 x_autointransit_flag := 'N';
2315 x_autoclose_flag := 'N';
2316
2317
2318 IF (l_all_orgids_match = TRUE) THEN --{
2319 WSH_SHIPPING_PARAMS_PVT.Get(
2320 p_organization_id => l_organization_id,
2321 x_param_info => l_param_info,
2322 x_return_status => l_return_status);
2323 OPEN report_set(l_param_info.delivery_report_set_id);
2324 FETCH report_set INTO x_report_set_name, x_report_set_id;
2325 CLOSE report_set;
2326
2327 -- Assign Ship Confirm Rule back to OUT parameter
2328 x_sc_rule_id := l_param_info.ship_confirm_rule_id;
2329 END IF; --}
2330
2331
2332 dist_ship_method_code := '';
2333
2334 -- Bug 2213342 : Ship Confirm Defaulting behavior
2335 FOR i IN 1..p_del_rows.count LOOP
2336 -- Find trip for the delivery
2337 l_trip_id := NULL;
2338 OPEN Check_Trip( p_del_rows (i));
2339 FETCH Check_Trip INTO l_trip_id;
2340 IF Check_Trip%NOTFOUND THEN
2341 l_trip_id := NULL;
2342 END IF;
2343 CLOSE Check_Trip;
2344
2345 IF (l_trip_id IS NULL) THEN
2346 IF l_debug_on THEN
2347 WSH_DEBUG_SV.logmsg(l_module_name,'Trip id is null for delivery-'||p_del_rows(i))
2348 ;
2349 END IF;
2350
2351 -- Check to see if Trip Options are already set
2352 IF NOT trip_options THEN
2353 trip_options := TRUE;
2354 IF l_debug_on THEN
2355 WSH_DEBUG_SV.logmsg(l_module_name,'Set Trip Options');
2356 END IF;
2357
2358 x_autointransit_flag := 'Y';
2359 x_autoclose_flag := 'Y';
2360 END IF;
2361
2362 -- Check to see if Ship Method has to be set
2363 -- for Deliveries with Autocreate Trip
2364 IF NOT ship_method_options THEN
2365 IF l_debug_on THEN
2366 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Options');
2367 END IF;
2368
2369 IF first_ship_method THEN
2370 -- Initialize First Applicable Ship Method
2371 dist_ship_method_code := p_ship_method_code_vals(i);
2372 first_ship_method := FALSE;
2373 END IF;
2374 temp_ship_method_code := p_ship_method_code_vals(i);
2375 IF NVL(temp_ship_method_code,' ') = NVL(dist_ship_method_code,' ') THEN
2376 IF l_debug_on THEN
2377 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are same null');
2378 END IF;
2379
2380 NULL;
2381 ELSE
2382 -- Ship Methods are different for Deliveries, so Null Ship Method is returned
2383 IF l_debug_on THEN
2384 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are different');
2385 END IF;
2386
2387 dist_ship_method_code := NULL;
2388 ship_method_options := TRUE;
2389 END IF;
2390 END IF;
2391 ELSE -- trip_id is not null, trip exists
2392
2393 -- Find if this is the last delivery on the trip,
2394 -- then enable close options
2395 l_last_del := check_last_del_trip(p_del_rows(i));
2396
2397 IF l_last_del THEN
2398 IF l_debug_on THEN
2399 WSH_DEBUG_SV.logmsg(l_module_name,'Last Delivery in Trip-'||p_del_rows(i));
2400 END IF;
2401 trip_options := TRUE; -- trip options should be allowed
2402 x_autointransit_flag := 'Y';
2403 x_autoclose_flag := 'Y';
2404 END IF;
2405 END IF;
2406 END LOOP;
2407
2408 -- frontport bug 4178235: Fix for bug 4147636
2409 -- Trip options viz. intransit flag, close trip flag, defer interface flag
2410 -- need to be disabled in the ship confirm dialogue box for cases
2411 -- where delivery is assigned to a trip and it is not the Final delivery
2412 -- in that trip.
2413 -- Earlier logic (before this fix) depended on setting autointransit_flag=N
2414 -- and autoclose_flag=N , so that UI could disable the trip options.
2415 --
2416 -- Issue with this logic is that the same two flags could be set to N
2417 -- because of ship confirm Rule.
2418 --
2419 -- To avoid conflict with values set by ship confirm rule,
2420 -- New Logic uses autointransit=D and autoclose=D, (disable),
2421 -- so that UI should disable the trip options.
2422 --
2423 -- flags are set to Y or N depending on
2424 -- default value or based on the available ship confirm rule.
2425
2426 IF NOT trip_options THEN
2427 x_autointransit_flag := 'D';
2428 x_autoclose_flag := 'D';
2429 END IF;
2430
2431 IF l_debug_on THEN
2432 WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set id'||x_report_set_id);
2433 WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set Name'||x_report_set_name);
2434 WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule'||x_sc_rule_name);
2435 WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule id'||x_sc_rule_id);
2436 WSH_DEBUG_SV.logmsg(l_module_name,'End In transit'||x_autointransit_flag);
2437 WSH_DEBUG_SV.logmsg(l_module_name,'End Close '||x_autoclose_flag);
2438 WSH_DEBUG_SV.logmsg(l_module_name,'End BOL flag '||x_ac_bol_flag);
2439 WSH_DEBUG_SV.logmsg(l_module_name,'End Defer Interface flag '||x_defer_interface_flag);
2440 WSH_DEBUG_SV.logmsg(l_module_name,'End ship method '||x_ship_method_name);
2441 END IF;
2442
2443 -- frontport bug 4310141:
2444 -- Bug 4103142 defaulted ship method from first trip
2445 IF (p_del_rows.count = 1) AND x_ship_method_name IS NULL THEN
2446 -- 42588951: default trip only if rule not specified.
2447 -- dist_ship_method_code has the delivery's SM value.
2448 -- so that if the trip exists and has null SM, we can use delivery's SM.
2449 IF dist_ship_method_code IS NULL THEN
2450 dist_ship_method_code := p_ship_method_code_vals(1);
2451 END IF;
2452
2453 OPEN c_first_ship_method (p_del_rows(1));
2454 FETCH c_first_ship_method INTO temp_ship_method_code;
2455 IF c_first_ship_method%NOTFOUND THEN
2456 temp_ship_method_code := NULL;
2457 ELSE
2458 IF temp_ship_method_code IS NOT NULL THEN
2459 dist_ship_method_code := temp_ship_method_code;
2460 END IF;
2461 END IF;
2462 CLOSE c_first_ship_method;
2463 END IF;
2464
2465 IF x_ship_method_name IS NULL AND dist_ship_method_code IS NOT NULL THEN
2466 OPEN sm_name(dist_ship_method_code);
2467 FETCH sm_name into x_ship_method_name;
2468 CLOSE sm_name;
2469 END IF;
2470
2471 --
2472 IF l_debug_on THEN
2473 WSH_DEBUG_SV.pop(l_module_name);
2474 END IF;
2475 --
2476
2477 EXCEPTION
2478 WHEN others THEN
2479 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Delivery_Defaults');
2480 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2481 --
2482 IF l_debug_on THEN
2483 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2484 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2485 END IF;
2486 --
2487 END Get_Delivery_Defaults;
2488
2489
2490 -- Procedure: Confirm_Delivery
2491 -- Parameters: p_del_rows - Delivery_ids of deliveries to be confirmed
2492 -- p_action_flag - 'S' for Ship Entered, Ship Unspecified Full
2493 -- 'B' for Ship Entered, Backorder Unspecified
2494 -- 'A' Ship All
2495 -- p_intransit_flag - 'Y' for autocreate_trip closes first stop
2496 -- p_close_flag - 'Y' closes autocreated trip and stops
2497 -- p_stage_del_flag - 'Y' creates a new delivery for the staged lines
2498 -- p_report_set_id - report set for delivery
2499 -- p_ship_method - ship method for autocreated trip
2500 -- p_actual_dep_date - actual departure date for pickup stop on autocreated trip
2501 -- p_defer_interface_flag - 'Y' to skip concurrent program submission, bug 1578251
2502 -- p_send_945_flag - 'Y' to trigger outbound shipment advice for delivery with WSH lines
2503 -- x_return_status - status of procedure call
2504 -- Description: This procedure will update shipped quantities of the details
2505 -- on each delivery and confirms each delivery
2506 --
2507
2508 PROCEDURE Confirm_Delivery
2509 (p_del_rows IN wsh_util_core.id_tab_type,
2510 p_action_flag IN VARCHAR2,
2511 p_intransit_flag IN VARCHAR2,
2512 p_close_flag IN VARCHAR2,
2513 p_stage_del_flag IN VARCHAR2,
2514 p_report_set_id IN NUMBER,
2515 p_ship_method IN VARCHAR2,
2516 p_actual_dep_date IN DATE,
2517 p_bol_flag IN VARCHAR2,
2518 p_mc_bol_flag IN VARCHAR2,
2519 p_defer_interface_flag IN VARCHAR2,
2520 p_send_945_flag IN VARCHAR2,
2521 p_autocreate_trip_flag IN varchar2 default 'Y',--heali :Shipment Advice change for trip Consolidation.
2522 x_return_status OUT NOCOPY VARCHAR2,
2523 p_caller IN VARCHAR2) IS
2524
2525
2526 record_locked EXCEPTION;
2527 PRAGMA EXCEPTION_INIT(record_locked, -54);
2528
2529 ship_confirm_error EXCEPTION;
2530
2531 -- Bug 1729723 : Updating number_of_lpn for delivery
2532 CURSOR number_of_lpn(l_delivery_id NUMBER) IS
2533 SELECT count(distinct wda.delivery_detail_id)
2534 FROM wsh_delivery_assignments_v wda
2535 WHERE wda.parent_delivery_detail_id is null
2536 AND LEVEL > 1
2537 CONNECT BY PRIOR wda.parent_delivery_detail_id = wda.delivery_detail_id
2538 START WITH wda.delivery_id = l_delivery_id;
2539
2540 CURSOR Report_Set (l_organization_id NUMBER) IS
2541 SELECT rs.name, rs.report_set_id
2542 FROM wsh_shipping_parameters sp,
2543 wsh_report_sets rs
2544 WHERE sp.organization_id = l_organization_id AND
2545 rs.report_set_id = sp.delivery_report_set_id;
2546
2547 CURSOR del_legs (l_delivery_id NUMBER) IS
2548 SELECT l1.pick_up_stop_id, l1.drop_off_stop_id, l1.delivery_leg_id, l2.delivery_id parent_delivery_id
2549 FROM wsh_delivery_legs l1, wsh_delivery_legs l2
2550 WHERE l1.delivery_id = l_delivery_id
2551 AND l1.parent_delivery_leg_id = l2.delivery_leg_id(+);
2552
2553
2554 CURSOR get_consol_del (l_delivery_id NUMBER) IS
2555 SELECT l2.delivery_id parent_delivery_id
2556 FROM wsh_delivery_legs l1, wsh_delivery_legs l2
2557 WHERE l1.delivery_id = l_delivery_id
2558 AND l1.parent_delivery_leg_id = l2.delivery_leg_id;
2559
2560
2561
2562 ---BUG No:4241880.Cursor changed
2563 CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
2564 SELECT freight_code
2565 FROM wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
2566 WHERE wc.carrier_id=wcs.carrier_id AND
2567 wcs.carrier_service_id=wocs.carrier_service_id AND
2568 wcs.ship_method_code = p_ship_method_code AND
2569 wocs.organization_id = p_organization_id;
2570 ---BUG No:4241880.Cursor changed ends
2571
2572 /*
2573 CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS -- Can this go ?!! pdo
2574 SELECT freight_code
2575 FROM wsh_carrier_ship_methods_v
2576 WHERE ship_method_code = p_ship_method_code AND
2577 organization_id = p_organization_id;
2578 */
2579
2580 CURSOR user_name(l_user_id NUMBER ) is
2581 SELECT user_name
2582 FROM fnd_user
2583 WHERE user_id = l_user_id;
2584
2585 CURSOR detail_info ( v_delivery_id in number ) IS
2586 SELECT da.parent_delivery_detail_id,
2587 dd.delivery_detail_id,
2588 dd.released_status ,
2589 dd.inspection_flag ,
2590 dd.shipped_quantity ,
2591 dd.shipped_quantity2 ,
2592 dd.cycle_count_quantity ,
2593 dd.cycle_count_quantity2 ,
2594 dd.requested_quantity ,
2595 dd.requested_quantity2 ,
2596 NVL(dd.picked_quantity, dd.requested_quantity) pick_qty, -- overpicking
2597 NVL(dd.picked_quantity2, dd.requested_quantity2) pick_qty2,
2598 dd.organization_id ,
2599 dd.inventory_item_id ,
2600 dd.subinventory ,
2601 dd.locator_id,
2602 dd.source_code, /*Bug 2096052 for OKE */
2603 dd.source_line_id -- Consolidation of BO Delivery Details project
2604 FROM wsh_delivery_details dd,
2605 wsh_delivery_assignments_v da
2606 WHERE da.delivery_id = v_delivery_id AND
2607 da.delivery_id IS NOT NULL AND
2608 da.delivery_detail_id = dd.delivery_detail_id AND
2609 dd.container_flag = 'N';
2610
2611
2612 CURSOR Get_Trip(v_del_id NUMBER) IS
2613 SELECT wt.trip_id , wt.carrier_id, wt.ship_method_code, wt.mode_of_transport,
2614 --OTM R12
2615 wt.tp_plan_name
2616 --
2617 FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_trips wt
2618 WHERE wdl.pick_up_stop_id=wts.stop_id
2619 AND wdl.delivery_id=v_del_id
2620 AND wts.trip_id=wt.trip_id;
2621
2622 CURSOR Get_Containers (v_delivery_detail_id NUMBER) IS
2623 SELECT delivery_detail_id
2624 FROM wsh_delivery_assignments_v
2625 WHERE delivery_detail_id <> v_delivery_detail_id
2626 START WITH delivery_detail_id = v_delivery_detail_id
2627 CONNECT BY PRIOR parent_delivery_detail_id = delivery_detail_id;
2628
2629 CURSOR get_empty_containers(v_delivery_id NUMBER) IS
2630 SELECT da.delivery_detail_id
2631 FROM wsh_delivery_assignments_v da,
2632 WSH_DELIVERY_DETAILS dd
2633 WHERE da.delivery_id = v_delivery_id
2634 AND da.delivery_detail_id = dd.delivery_detail_id
2635 AND dd.container_flag = 'Y'
2636 AND NOT EXISTS(
2637 SELECT delivery_detail_id
2638 FROM wsh_delivery_assignments_v da2
2639 WHERE da2.parent_delivery_detail_id = da.delivery_detail_id) ;
2640
2641 -- Bug 2713285, added batch_id
2642 CURSOR get_delivery_name(v_delivery_id NUMBER) IS
2643 SELECT name,batch_id,
2644 --OTM R12
2645 ignore_for_planning,
2646 tms_interface_flag
2647 --
2648 FROM wsh_new_deliveries
2649 WHERE delivery_id = v_delivery_id;
2650
2651 -- J: W/V Changes
2652 CURSOR get_delivery_wv(v_delivery_id NUMBER) IS
2653 SELECT gross_weight,
2654 volume
2655 FROM wsh_new_deliveries
2656 WHERE delivery_id = v_delivery_id;
2657
2658
2659 CURSOR Get_Del_First_Trip(v_del_id NUMBER) IS
2660 SELECT wts.trip_id
2661 FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_new_deliveries wnd
2662 WHERE wdl.pick_up_stop_id=wts.stop_id
2663 AND wnd.initial_pickup_location_id = wts.stop_location_id
2664 AND wnd.delivery_id = wdl.delivery_id
2665 AND wnd.delivery_id=v_del_id;
2666
2667
2668 --bug 3314353 -- jckwok
2669 CURSOR prev_stop_csr ( p_trip_id IN NUMBER, p_stop_sequence IN NUMBER) IS
2670 SELECT stop_id
2671 FROM wsh_trip_stops
2672 WHERE trip_id = p_trip_id
2673 AND status_code IN ('OP','AR')
2674 AND stop_sequence_number < p_stop_sequence
2675 AND nvl(shipments_type_flag,'0') <> 'I' --bugfix 3925963
2676 ORDER BY stop_sequence_number;
2677
2678 --bug 3314353 -- jckwok
2679 CURSOR get_stops_csr (p_trip_id IN NUMBER) IS
2680 SELECT stop_id,shipments_type_flag,stop_location_id --bugfix 3925963
2681 FROM wsh_trip_stops
2682 WHERE trip_id = p_trip_id
2683 AND status_code IN ('OP','AR')
2684 ORDER BY stop_sequence_number;
2685
2686 --bugfix 3925963
2687 CURSOR get_trip_name_csr (p_first_trip_id NUMBER) IS
2688 Select wt.name
2689 from wsh_trips wt
2690 where wt.trip_id = p_first_trip_id;
2691
2692 --bug 3314353 -- jckwok
2693 CURSOR stop_sequence_number_csr (p_stop_id IN NUMBER) IS
2694 SELECT stop_sequence_number
2695 FROM wsh_trip_stops
2696 WHERE stop_id = p_stop_id;
2697
2698 -- Added for bug 4493263
2699 CURSOR c_delv_trip_id_cursor( t_delivery_id NUMBER ) IS
2700 select distinct trip_id from wsh_trip_stops
2701 where stop_id in
2702 ( select distinct pick_up_stop_id
2703 from wsh_delivery_legs
2704 where delivery_id = t_delivery_id );
2705
2706
2707 l_batch_id WSH_NEW_DELIVERIES.batch_id%TYPE;
2708
2709 l_source_code VARCHAR2(30); /*Bug 2096052 */
2710 l_source_code_flag VARCHAR2(1) := 'N'; /*Bug 2096052 */
2711 l_released_status VARCHAR2(1);
2712 l_inspection_flag VARCHAR2(1);
2713 l_container_id NUMBER;
2714 l_ship_method_code VARCHAR2(30);
2715 l_freight_code VARCHAR2(30);
2716 l_delivery_detail_id NUMBER;
2717 l_dummy_detail_id NUMBER;
2718 l_detail_num NUMBER;
2719 l_initial_pickup_date wsh_util_core.Date_tab_type;
2720 l_ultimate_dropoff_date wsh_util_core.Date_tab_type;
2721
2722 u_initial_pickup_date wsh_util_core.Date_tab_type; -- Bulk update variable
2723 u_ultimate_dropoff_date wsh_util_core.Date_tab_type;
2724
2725 l_organization_id NUMBER ;
2726 l_num_warn NUMBER :=0;
2727 l_num_error NUMBER :=0;
2728 l_dd_organization_id NUMBER ;
2729 l_inventory_item_id NUMBER ;
2730 l_subinventory VARCHAR2 (30);
2731 l_locator_id NUMBER ;
2732
2733 l_unassign_dds wsh_util_core.id_tab_type; -- Renamed the variable l_unassign_line_ids for BO Consolidation
2734 /* H integration: 945 cancel staged wrudge */
2735 l_cancel_line_ids wsh_util_core.id_tab_type;
2736
2737 l_assigned_counter NUMBER;
2738 l_assigned_line_ids wsh_util_core.id_tab_type;
2739 l_assigned_cont_ids wsh_util_core.id_tab_type;
2740 l_assigned_orgs wsh_util_core.id_tab_type;
2741 l_assigned_items wsh_util_core.id_tab_type;
2742 l_assigned_subs wsh_util_core.Column_Tab_Type;
2743 l_assigned_locs wsh_util_core.id_Tab_Type;
2744
2745 l_bo_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2746 l_cc_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2747 l_out_bo_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2748 l_out_cc_rows wsh_util_core.id_tab_type; -- list of new details that got backordered
2749
2750 l_dd_org_ids wsh_util_core.id_tab_type; -- list of details org ids
2751 l_item_ids wsh_util_core.id_tab_type; -- list of details inventory_item_ids
2752
2753 -- for non-transactable items
2754 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
2755 dft_subinv VARCHAR2(30);
2756 loc_restricted_flag VARCHAR2(1);
2757 dft_loc_id NUMBER;
2758 org_loc_ctl NUMBER;
2759 sub_loc_ctl NUMBER;
2760 item_loc_ctl NUMBER;
2761 loc_ctl_code NUMBER;
2762
2763 g_line_inv_rec WSH_DELIVERY_DETAILS_INV.line_inv_info;
2764 l_details_flag BOOLEAN;
2765
2766 l_ship_from_location NUMBER;
2767 l_ship_to_location NUMBER;
2768
2769 l_dummy_rows wsh_util_core.id_tab_type;
2770 l_dummy_rows1 wsh_util_core.id_tab_type;
2771 l_dummy_doc_set wsh_document_sets.document_set_tab_type;
2772
2773 l_trip_id NUMBER;
2774 l_trip_name VARCHAR2(30);
2775 l_return_status VARCHAR2(1);
2776
2777 l_requested_quantity NUMBER;
2778 l_shipped_quantity NUMBER;
2779 l_cycle_quantity NUMBER;
2780 l_stage_quantity NUMBER;
2781 l_del_status_code VARCHAR2(2);
2782 l_status_code WSH_UTIL_CORE.Column_Tab_Type ;
2783 l_number_of_lpn wsh_util_core.id_tab_type;
2784 u_status_code WSH_UTIL_CORE.Column_Tab_Type ;
2785 u_number_of_lpn wsh_util_core.id_tab_type;
2786 /* H integration: 945 send document wrudge */
2787 u_organization_id wsh_util_core.id_tab_type;
2788 u_wsh_lines_exist wsh_util_core.id_tab_type;
2789 l_wsh_lines_exist NUMBER;
2790
2791 -- hverddin : Begin of OPM Changes Added Dual Quantities 31-OCT-00
2792
2793 l_requested_quantity2 NUMBER;
2794 l_shipped_quantity2 NUMBER;
2795 l_cycle_quantity2 NUMBER;
2796 l_stage_quantity2 NUMBER;
2797
2798 -- hverddin : End of OPM Changes Added Dual Quantities 31-OCT-00
2799 l_valid_flag BOOLEAN; -- Check if ship_set is valid
2800 l_overfilled_flag BOOLEAN;
2801 l_underfilled_flag BOOLEAN;
2802
2803 -- overpicking
2804 l_picked_quantity NUMBER;
2805 l_picked_quantity2 NUMBER;
2806 l_unshipped_pick_quantity NUMBER;
2807 l_unshipped_pick_quantity2 NUMBER;
2808
2809 l_shp_dd_shipped_qtys wsh_util_core.id_tab_type;
2810 l_shp_dd_shipped_qtys2 wsh_util_core.id_tab_type;
2811 l_shp_dd_cc_qtys wsh_util_core.id_tab_type;
2812 l_shp_dd_cc_qtys2 wsh_util_core.id_tab_type;
2813 l_shp_dd_req_qtys wsh_util_core.id_tab_type;
2814 l_shp_dd_ids wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to to Ship
2815 l_shp_dd_items wsh_util_core.id_tab_type ; -- : list of items in details to Ship
2816 l_shp_dd_orgs wsh_util_core.id_tab_type; -- : list of org of details to Ship
2817 l_shp_dd_subs wsh_util_core.column_tab_type; -- : list of subinventories of details to Ship
2818 l_shp_dd_locs wsh_util_core.id_tab_type; -- : list of locators of details to Ship
2819 l_shp_dd_cont_ids wsh_util_core.id_tab_type; -- : list of containers of details to Ship
2820 /* H integration: 945 check detail wrudge */
2821 l_shp_dd_source wsh_util_core.column_tab_type; -- : list of source_code of details to ship
2822
2823 l_assigned_req_qtys wsh_util_core.id_tab_type; -- list of details req qty
2824 l_assigned_shp_qtys wsh_util_core.id_tab_type ;
2825 l_assigned_cc_qtys wsh_util_core.id_tab_type ;
2826 l_assigned_req_qtys2 wsh_util_core.id_tab_type; -- list of details req qty2
2827 l_assigned_shp_qtys2 wsh_util_core.id_tab_type ;
2828 l_assigned_cc_qtys2 wsh_util_core.id_tab_type ;
2829 l_assigned_pick_qtys wsh_util_core.id_tab_type; -- overpicking NVL(picked, requested)
2830 l_assigned_pick_qtys2 wsh_util_core.id_tab_type;
2831 l_assigned_overpick_qtys wsh_util_core.id_tab_type; -- for backordering or cycle-counting overpicked quantities
2832 l_assigned_overpick_qtys2 wsh_util_core.id_tab_type;
2833 /* H integration: 945 assigned detail wrudge */
2834 l_assigned_source wsh_util_core.column_tab_type;
2835
2836 l_stop_rows wsh_util_core.id_tab_type;
2837 u_stop_rows wsh_util_core.id_tab_type; -- bug 2064810
2838 l_del_rows wsh_util_core.id_tab_type;
2839 u_del_rows wsh_util_core.id_tab_type;
2840
2841 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2842 l_enforce_packing_flag VARCHAR2(1) := 'N';
2843
2844 l_cc_qtys wsh_util_core.id_tab_type; -- list of details BO qty
2845 l_cc_req_qtys wsh_util_core.id_tab_type ;
2846 l_cc_overpick_qtys wsh_util_core.id_tab_type ;
2847 l_cc_qtys2 wsh_util_core.id_tab_type; -- list of details BO qty2
2848 l_cc_overpick_qtys2 wsh_util_core.id_tab_type ;
2849
2850 l_bo_qtys wsh_util_core.id_tab_type; -- list of details BO qty
2851 l_bo_mode VARCHAR2 (15) ;
2852 l_bo_req_qtys wsh_util_core.id_tab_type ;
2853 l_bo_overpick_qtys wsh_util_core.id_tab_type ;
2854 l_bo_qtys2 wsh_util_core.id_tab_type; -- list of details BO qty2
2855 l_bo_overpick_qtys2 wsh_util_core.id_tab_type ;
2856
2857 l_staged_dd_id NUMBER ;
2858 l_new_detail_id NUMBER ;
2859 l_stage_rows wsh_util_core.id_tab_type ;
2860
2861 l_backorder_all_flag BOOLEAN := TRUE ;
2862 l_stage_all_flag BOOLEAN ;
2863 l_inv_cntrl_flag BOOLEAN ;
2864 l_inv_material_flag BOOLEAN;
2865 l_del_tmp_rows wsh_util_core.id_tab_type;
2866 l_document_set_name VARCHAR2 ( 50 );
2867
2868 l_user_name VARCHAR2(100);
2869 l_user_id NUMBER ;
2870 l_login_id NUMBER;
2871 l_document_set_id NUMBER ;
2872 l_gross_wt NUMBER ;
2873 l_net_wt NUMBER ;
2874 l_vol NUMBER ;
2875
2876 l_unpacked_flag BOOLEAN ;
2877 --l_unassign_all_flag BOOLEAN ;
2878 l_cont_exists_flag BOOLEAN ;
2879 l_fill_status VARCHAR2(2) ;
2880
2881 -- this variable will store fill status Bug 2878538
2882 -- it will help saving the value from getting over ridden of l_fill_status
2883 -- since l_fill_status variable gets overridden in a loop
2884 l_save_fill_status VARCHAR2(2) := 'S';
2885 l_exception_exist VARCHAR2(1);
2886 l_severity_present VARCHAR2(1);
2887
2888 l_pickup_stop_id NUMBER ;
2889 l_dropoff_stop_id NUMBER ;
2890 l_delivery_leg_id NUMBER ;
2891 l_parent_delivery_id NUMBER ;
2892 l_delivery_id NUMBER ;
2893
2894 l_gross_weight NUMBER ;
2895 l_net_weight NUMBER ;
2896 l_volume NUMBER ;
2897 l_temp_line_id NUMBER ;
2898 l_temp_source_code VARCHAR2(5);
2899 l_max_quantity NUMBER ;
2900 -- HW OPM added qty2
2901 l_max_quantity2 NUMBER ;
2902 l_msg_data VARCHAR2(2000);
2903 l_msg_count NUMBER;
2904 l_wms_delivery_id wsh_util_core.id_tab_type ;
2905 --2121399
2906 TYPE Flag_Tab_Type IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;
2907 l_unassign_all_flag_tab Flag_Tab_Type ;
2908 --2121399
2909
2910 l_label_status VARCHAR2(20);
2911 l_del_tab INV_LABEL_PUB.transaction_id_rec_type;
2912
2913 l_close_del_cnt NUMBER := 0;
2914 l_confirm_del_cnt NUMBER := 0;
2915
2916 /*new variable */
2917 l_stop_rec WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
2918 l_trip_rec WSH_TRIPS_PVT.trip_rec_type;
2919 -- bug 2263249
2920 l_wms_enabled_flag BOOLEAN;
2921 -- bug 2343058
2922 l_check_credit_init_flag BOOLEAN;
2923
2924 x_unassigned_cont wsh_util_core.id_tab_type;
2925 l_msg_rec_count wsh_util_core.MsgCountType;
2926 l_error_exists BOOLEAN;
2927 l_msg_table WSH_INTEGRATION.MSG_TABLE ;
2928 l_count NUMBER := 0;
2929 l_cont_name VARCHAR2(100);
2930 l_empty_container NUMBER;
2931 l_delivery_name VARCHAR2(100);
2932
2933
2934 --Compatibility Changes
2935 l_cc_validate_result VARCHAR2(1);
2936 l_cc_failed_records WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
2937 l_cc_group_info WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
2938 l_cc_line_groups WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
2939
2940 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2941 l_trip_id_tab_temp wsh_util_core.id_tab_type;
2942 l_cc_count_success NUMBER;
2943 b_cc_linefailed BOOLEAN;
2944 l_target_trip_id NUMBER;
2945 b_tripalreadychecked VARCHAR2(1);
2946 l_count_hashtrip NUMBER;
2947
2948 --dummy tables for calling validate_constraint_wrapper
2949 l_cc_del_attr_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2950 l_cc_det_attr_tab WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Attr_Tbl_Type;
2951 l_cc_trip_attr_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2952 l_cc_stop_attr_tab WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
2953 l_cc_in_ids wsh_util_core.id_tab_type;
2954 l_cc_fail_ids wsh_util_core.id_tab_type;
2955 l_cc_carrier_id NUMBER;
2956 l_cc_mode VARCHAR2(30);
2957 G_HASH_TRIP wsh_util_core.id_tab_type;
2958 --Compatibility Changes
2959
2960 l_with_mc_trip_flag Flag_Tab_Type;
2961
2962 -- Variables added for Consolidation of BO Delivery Details project
2963 --
2964 l_global_parameters WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
2965 l_assigned_source_lines wsh_util_core.id_Tab_Type;
2966 l_unassign_backordered_dds wsh_util_core.id_Tab_Type; --Stores the list of BackOrder/Cycle-Count delivery detail ids
2967 l_unassign_rel_status wsh_util_core.Column_Tab_Type;
2968 -- Stores the corresponding Released_status of the delivery details in l_unassign_dds
2969 l_unassign_source_lines wsh_util_core.id_Tab_Type;
2970 -- Stores the Source line ids of the delivery details that are going to be unassigned from the Delivery
2971 l_bo_line_ids wsh_util_core.id_Tab_Type;
2972
2973 l_bo_source_lines wsh_util_core.id_Tab_Type;
2974 l_cc_source_lines wsh_util_core.id_Tab_Type;
2975 l_cons_flags wsh_util_core.Column_Tab_Type;
2976 l_source_line_id NUMBER;
2977 l_idx NUMBER;
2978 l_cmp_idx NUMBER;
2979 j NUMBER;
2980 k NUMBER;
2981 l_flag VARCHAR2(1);
2982 l_close_confirm_flag VARCHAR2(1):= NULL;
2983 --
2984
2985 -- Exception Changes
2986 l_exceptions_tab wsh_xc_util.XC_TAB_TYPE;
2987 l_exp_logged BOOLEAN := FALSE;
2988
2989 -- Pack J, table indexed by delivery_id to store whether ITM screening is required.
2990 l_itm_exc_flag wsh_util_core.column_Tab_Type;
2991 l_itm_stops_tab wsh_util_core.column_Tab_Type;
2992 l_lines_in_delivery NUMBER;
2993 l_itm_exc_severity VARCHAR2(30);
2994
2995 -- Checks if the itm exception is enabled and its severity.
2996 CURSOR c_exc_severity (c_exception_name VARCHAR2) IS
2997 SELECT UPPER(default_severity)
2998 FROM wsh_exception_definitions_vl
2999 WHERE exception_name = c_exception_name
3000 AND enabled = 'Y';
3001
3002 l_carrier_rec WSH_CARRIERS_GRP.Carrier_Service_InOut_Rec_Type;
3003 l_del_first_trip NUMBER;
3004
3005 --bug 3314353
3006 l_pick_up_stop_sequence_num NUMBER;
3007 l_first_trip_id NUMBER;
3008 l_prev_stop_id NUMBER;
3009
3010 -- bug 2283621
3011 l_more_dd_flag BOOLEAN;
3012 l_more_material_dd_flag BOOLEAN;
3013 l_inv_ctrl_dd_count NUMBER;
3014 l_inv_material_dd_count NUMBER;
3015 l_inv_ctrl_dd_ids VARCHAR2(100);
3016 l_inv_material_dd_ids VARCHAR2(100);
3017 -- HW OPMCONV. Removed OPM variables
3018
3019 -- Local Variables added for Bug 3118519
3020
3021 l_more_flag BOOLEAN := TRUE;
3022 l_detail_count NUMBER := 0;
3023 l_invalid_details VARCHAR2(100);
3024 l_token VARCHAR2(2000);
3025 l_sc_pickup_date DATE;
3026 l_sc_dropoff_date DATE;
3027
3028 l_entity_name VARCHAR2(1000);
3029 l_exc_beh_error VARCHAR2(1000);
3030 l_exc_beh_warn VARCHAR2(1000);
3031
3032 -- HW OPMCONV. Added a new variable
3033 l_error_DFF BOOLEAN :=FALSE;
3034
3035
3036 --Bugfix 3925963
3037 l_shipments_type_flag VARCHAR2(30);
3038 l_stop_location_id NUMBER;
3039 l_stops_trip_name VARCHAR2(30);
3040 l_inbound_stops_exists BOOLEAN;
3041 l_stop_name VARCHAR2(60);
3042 l_stop_name_list VARCHAR2(10000);
3043 --
3044
3045 --/== Workflow Changes
3046 l_scpod_wf_del_rows wsh_util_core.id_tab_type;
3047 l_ctr NUMBER;
3048 l_aname_text wf_engine.nametabtyp;
3049 l_avalue_text wf_engine.texttabtyp;
3050 l_aname_num wf_engine.nametabtyp;
3051 l_avalue_num wf_engine.numtabtyp;
3052 l_process_started VARCHAR2(1);
3053 l_enable_sc_wf VARCHAR2(1);
3054 l_override_wf VARCHAR2(1);
3055 l_wf_rs VARCHAR2(1);
3056 l_defer_interface_flag VARCHAR2(1);
3057 --==/
3058 l_custom_severity varchar2(10);
3059 l_activity_code varchar2(200) := 'SHIP_CONFIRM_MESSAGE' ;
3060 l_validation_code varchar2(200) := 'MISSING_CONTROLS';
3061
3062 l_mdc_cl_del_tab wsh_util_core.id_tab_type;
3063 l_mdc_co_del_tab wsh_util_core.id_tab_type;
3064 l_mdc_index_i NUMBER;
3065
3066 -- LPN CONV rv
3067 cursor l_delete_wms_empty_cnt_csr is
3068 select distinct wwst.delivery_detail_id
3069 from wsh_wms_sync_tmp wwst,
3070 wsh_delivery_details wdd
3071 where wwst.operation_type = 'DELETE'
3072 and wdd.delivery_detail_id = wwst.delivery_detail_id
3073 and wdd.container_flag = 'Y'
3074 and wdd.lpn_id is not null;
3075
3076 l_delete_cnt_id_tbl wsh_util_core.id_tab_type;
3077 -- LPN CONV rv
3078 -- bug 4505105
3079 l_del_valid_flag VARCHAR2(1);
3080 -- bug 4505105
3081 --Bug 5255366
3082 l_consol_del_doc_set wsh_util_core.id_tab_type;
3083 l_content_del_flag BOOLEAN := TRUE;
3084
3085 --OTM R12
3086 l_ignore_for_planning WSH_NEW_DELIVERIES.IGNORE_FOR_PLANNING%TYPE;
3087 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
3088 l_otm_trip_id WSH_TRIPS.TRIP_ID%TYPE;
3089 l_otm_carrier_id WSH_NEW_DELIVERIES.CARRIER_ID%TYPE;
3090 l_otm_ship_method_code WSH_NEW_DELIVERIES.SHIP_METHOD_CODE%TYPE;
3091 l_otm_mode WSH_NEW_DELIVERIES.MODE_OF_TRANSPORT%TYPE;
3092 l_otm_plan_name WSH_TRIPS.TP_PLAN_NAME%TYPE;
3093 l_gc3_is_installed VARCHAR2(1);
3094 --
3095
3096 l_debug_on BOOLEAN;
3097 --
3098 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONFIRM_DELIVERY';
3099 --
3100 BEGIN
3101
3102 -- 0. Get the user_id and user_name
3103 --
3104 -- Debug Statements
3105 --
3106 --
3107 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3108 --
3109 IF l_debug_on IS NULL
3110 THEN
3111 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3112 END IF;
3113 --
3114 IF l_debug_on THEN
3115 WSH_DEBUG_SV.push(l_module_name);
3116 --
3117 WSH_DEBUG_SV.log(l_module_name,'P_ACTION_FLAG',P_ACTION_FLAG);
3118 WSH_DEBUG_SV.log(l_module_name,'P_INTRANSIT_FLAG',P_INTRANSIT_FLAG);
3119 WSH_DEBUG_SV.log(l_module_name,'P_CLOSE_FLAG',P_CLOSE_FLAG);
3120 WSH_DEBUG_SV.log(l_module_name,'P_STAGE_DEL_FLAG',P_STAGE_DEL_FLAG);
3121 WSH_DEBUG_SV.log(l_module_name,'P_REPORT_SET_ID',P_REPORT_SET_ID);
3122 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_METHOD',P_SHIP_METHOD);
3123 WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DEP_DATE',P_ACTUAL_DEP_DATE);
3124 WSH_DEBUG_SV.log(l_module_name,'P_BOL_FLAG',P_BOL_FLAG);
3125 WSH_DEBUG_SV.log(l_module_name,'P_MC_BOL_FLAG',P_MC_BOL_FLAG);
3126 WSH_DEBUG_SV.log(l_module_name,'P_DEFER_INTERFACE_FLAG',P_DEFER_INTERFACE_FLAG);
3127 WSH_DEBUG_SV.log(l_module_name,'P_SEND_945_FLAG',P_SEND_945_FLAG);
3128 END IF;
3129 --
3130 l_login_id := FND_GLOBAL.login_id;
3131 l_user_id := FND_GLOBAL.user_id ;
3132 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3133
3134 --OTM R12
3135 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
3136
3137 IF l_gc3_is_installed IS NULL THEN
3138 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
3139 END IF;
3140 --
3141
3142 -- bug 2778035
3143 IF p_action_flag IS NULL
3144 OR p_action_flag NOT IN ('S', 'B', 'L', 'T', 'A', 'C', 'O') THEN
3145 FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_SC_ACTION_FLAG');
3146 wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
3147 RAISE FND_API.G_EXC_ERROR;
3148 END IF;
3149 -- bug 2778035
3150
3151 -- Fix for Bug 3944151
3152 -- Using fnd_global.User_name for global G_USER_NAME
3153 -- This is because before this fix, global g_user_name carried the previous user name
3154 -- when one user logged out and another user logged back in the same mobile telnet session.
3155
3156 G_USER_NAME := FND_GLOBAL.USER_NAME;
3157
3158 /* if ( G_USER_NAME is NULL ) then
3159 open user_name(l_user_id);
3160 fetch user_name into G_USER_NAME ;
3161 if user_name%NOTFOUND then
3162 raise ship_confirm_error;
3163 end if;
3164 close user_name;
3165 end if ;
3166 */
3167 -- End of fix for bug 3944151
3168
3169 /* Bug 2761304 : The following call is now made inside the loop*/
3170
3171 /* WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3172 x_msg_rec_count => l_msg_rec_count,
3173 x_return_status => l_return_status);
3174 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3175 raise ship_confirm_error;
3176 END IF;*/
3177
3178 l_user_name := G_USER_NAME ;
3179 SAVEPOINT start_ship_confirm_delivery ;
3180
3181 l_document_set_id := p_report_set_id;
3182
3183 l_enable_sc_wf := 'N'; --Workflow Changes
3184
3185 -- bug 2343058
3186 l_check_credit_init_flag := TRUE;
3187
3188 -- Code Shifted from below to execute irrespective of the If condition - Workflow Changes
3189 IF l_debug_on THEN
3190 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit 2WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters',WSH_DEBUG_SV.C_PROC_LEVEL);
3191 END IF;
3192 --
3193 WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(l_global_parameters, l_return_status);
3194 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3195 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3196 raise ship_confirm_error;
3197 -- x_return_status := l_return_status;
3198 -- wsh_util_core.add_message(x_return_status);
3199 -- l_num_error := l_num_error + 1 ;
3200 -- goto loop_end;
3201 END IF;
3202
3203
3204 FOR i IN 1..p_del_rows.count LOOP
3205
3206 SAVEPOINT confirm_delivery_sp ;
3207
3208 /* Bug 2761304*/
3209 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3210 x_msg_rec_count => l_msg_rec_count,
3211 x_return_status => l_return_status);
3212
3213 -- Bug 3913206
3214 l_sc_pickup_date := NULL;
3215 l_sc_dropoff_date := NULL;
3216
3217 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3218 raise ship_confirm_error;
3219 END IF;
3220
3221 -- Bug 2713285, movedthe code outside the loop,since it is for same delivery
3222 -- added batch_id
3223 OPEN get_delivery_name(p_del_rows(i));
3224 FETCH get_delivery_name INTO l_delivery_name,
3225 l_batch_id,
3226 --OTM R12
3227 l_ignore_for_planning,
3228 l_tms_interface_flag;
3229 --
3230 CLOSE get_delivery_name;
3231
3232 IF l_debug_on THEN
3233 WSH_DEBUG_SV.log(l_module_name,'Delivery Name',l_delivery_name);
3234 WSH_DEBUG_SV.log(l_module_name,'Batch id',l_batch_id);
3235 --OTM R12
3236 WSH_DEBUG_SV.log(l_module_name,'ignore for planning',l_ignore_for_planning);
3237 WSH_DEBUG_SV.log(l_module_name,'tms interface flag',l_tms_interface_flag);
3238 --
3239 END IF;
3240
3241
3242 OPEN get_empty_containers(p_del_rows(i));
3243 LOOP
3244 FETCH get_empty_containers INTO l_empty_container;
3245 EXIT WHEN get_empty_containers%NOTFOUND;
3246 l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_empty_container);
3247
3248 IF l_debug_on THEN
3249 WSH_DEBUG_SV.log(l_module_name,'l_empty_container',l_empty_container);
3250 WSH_DEBUG_SV.log(l_module_name,'Empty Container',l_cont_name);
3251 END IF;
3252
3253 FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_CONTAINER');
3254 FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
3255 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3256 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3257 l_num_warn := l_num_warn + 1;
3258 wsh_util_core.add_message(x_return_status,l_module_name);
3259 END LOOP;
3260 CLOSE get_empty_containers;
3261
3262 l_bo_rows.delete ;
3263 l_cc_rows.delete ;
3264 l_unassign_dds.delete ;
3265 -- Consolidation of BO Delivery Details project
3266 --
3267 l_bo_source_lines.delete;
3268 l_cc_source_lines.delete;
3269 l_assigned_source_lines.delete;
3270 l_unassign_rel_status.delete;
3271 l_unassign_source_lines.delete;
3272 l_bo_line_ids.delete;
3273
3274 --
3275 /* H integration: 945 cancel staged wrudge */
3276 l_cancel_line_ids.delete;
3277 l_assigned_counter := 0 ;
3278 l_assigned_line_ids.delete;
3279 l_assigned_cont_ids.delete;
3280 l_assigned_orgs.delete;
3281 l_assigned_items.delete;
3282 l_assigned_subs.delete;
3283 l_assigned_locs.delete;
3284 l_out_bo_rows.delete;
3285 l_out_cc_rows.delete;
3286 l_dd_org_ids.delete;
3287 l_item_ids.delete;
3288
3289 /* H integration: 945 send document wrudge */
3290 l_wsh_lines_exist := 0;
3291
3292 l_shp_dd_shipped_qtys.delete ;
3293 l_shp_dd_shipped_qtys2.delete ;
3294 l_shp_dd_cc_qtys.delete ;
3295 l_shp_dd_cc_qtys2.delete ;
3296 l_shp_dd_req_qtys.delete ;
3297 l_shp_dd_ids.delete ;
3298 l_shp_dd_items.delete ;
3299 l_shp_dd_orgs.delete ;
3300 l_shp_dd_subs.delete ;
3301 l_shp_dd_locs.delete ;
3302 l_shp_dd_cont_ids.delete ;
3303 /* H integration: 945 check detail wrudge */
3304 l_shp_dd_source.delete;
3305
3306 l_assigned_req_qtys.delete ;
3307 l_assigned_shp_qtys.delete ;
3308 l_assigned_cc_qtys.delete ;
3309
3310 l_assigned_req_qtys2.delete ;
3311 l_assigned_shp_qtys2.delete ;
3312 l_assigned_cc_qtys2.delete ;
3313
3314 l_assigned_pick_qtys.delete;
3315 l_assigned_pick_qtys2.delete;
3316 l_assigned_overpick_qtys.delete;
3317 l_assigned_overpick_qtys2.delete;
3318
3319 /* H integration: 945 assigned details wrudge */
3320 l_assigned_source.delete;
3321
3322 l_stop_rows.delete ;
3323 l_del_rows.delete ;
3324
3325 l_enforce_packing_flag := 'N';
3326
3327 l_bo_mode := 'UNRESERVE';
3328
3329 l_cc_req_qtys.delete ;
3330 l_cc_overpick_qtys.delete ;
3331 l_cc_qtys.delete ;
3332 l_cc_qtys2.delete ;
3333
3334 l_bo_qtys.delete ;
3335 l_bo_req_qtys.delete ;
3336 l_bo_overpick_qtys.delete ;
3337 l_bo_qtys2.delete ;
3338
3339 L_stage_ROWS.delete ;
3340
3341 l_organization_id := NULL ;
3342 l_ship_method_code := NULL ;
3343 l_ship_from_location := NULL ;
3344 l_ship_to_location := NULL ;
3345 l_gross_weight := NULL ;
3346 l_net_weight := NULL ;
3347 l_volume := NULL ;
3348
3349 l_del_status_code := NULL ;
3350
3351 l_number_of_lpn(i) := NULL;
3352 -- bug 2263249
3353 l_wms_enabled_flag := FALSE;
3354 l_unassign_all_flag_tab(i) := TRUE ;
3355 l_inv_cntrl_flag := TRUE;
3356 l_inv_material_flag := TRUE;
3357 l_unpacked_flag := FALSE;
3358 -- Set to False by default,Bug 2878538
3359 l_cont_exists_flag := FALSE;
3360
3361 -- bug 2283621
3362 l_more_dd_flag := TRUE;
3363 l_more_material_dd_flag := TRUE;
3364 l_inv_ctrl_dd_ids := NULL;
3365 l_inv_material_dd_ids := NULL;
3366 l_inv_ctrl_dd_count := 0;
3367 l_inv_material_dd_count :=0 ;
3368 -- end 2283621
3369
3370 l_with_mc_trip_flag(i) := FALSE;
3371
3372 --OTM R12, check OTM exceptions before ship confirm
3373 IF (l_gc3_is_installed = 'Y' AND NVL(l_ignore_for_planning, 'N') = 'N') THEN
3374
3375 l_otm_trip_id := NULL;
3376 l_otm_carrier_id := NULL;
3377 l_otm_ship_method_code := NULL;
3378 l_otm_mode := NULL;
3379 l_otm_plan_name := NULL;
3380
3381 OPEN get_trip(p_del_rows(i));
3382 FETCH get_trip INTO l_otm_trip_id,
3383 l_otm_carrier_id,
3384 l_otm_ship_method_code,
3385 l_otm_mode,
3386 l_otm_plan_name;
3387
3388 IF (get_trip%NOTFOUND) THEN
3389 --if cursor not found, then leave the ship method as
3390 --p_ship_method so does not error out later
3391 l_otm_ship_method_code := p_ship_method;
3392 END IF;
3393
3394 CLOSE get_trip;
3395
3396 IF l_debug_on THEN
3397 WSH_DEBUG_SV.log(l_module_name,'trip id',l_otm_trip_id);
3398 WSH_DEBUG_SV.log(l_module_name,'carrier id',l_otm_carrier_id);
3399 WSH_DEBUG_SV.log(l_module_name,'ship method',l_otm_ship_method_code);
3400 WSH_DEBUG_SV.log(l_module_name,'mode',l_otm_mode);
3401 WSH_DEBUG_SV.log(l_module_name,'otm plan name',l_otm_plan_name);
3402 END IF;
3403
3404 IF (p_ship_method IS NULL) THEN
3405 --if p_ship_method is NULL, means no changes to the ship method,
3406 --set l_otm_ship_method_code to NULL as well to avoid error later.
3407 l_otm_ship_method_code := p_ship_method;
3408 END IF;
3409
3410 -- trip id is NULL, not assigned. Hence ignore the delivery for planning.
3411 -- (CR->NS and AW->DR for 'Not assigned' to an OTM trip Delivery).
3412 -- This update for the ignore_for_plan to 'Y' is needed to autocreate the trip
3413 -- for this delivery during ship conform.
3414 --
3415
3416 IF l_debug_on THEN
3417 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
3418 END IF;
3419
3420 WSH_INTERFACE_EXT_GRP.otm_pre_ship_confirm(
3421 p_delivery_id => p_del_rows(i),
3422 p_delivery_name => l_delivery_name,
3423 p_tms_interface_flag => l_tms_interface_flag,
3424 p_trip_id => l_otm_trip_id,
3425 x_return_status => l_return_status);
3426
3427 IF l_debug_on THEN
3428 WSH_DEBUG_SV.log(l_module_name,'Return Status after calling WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM', l_return_status);
3429 END IF;
3430
3431 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3432 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3433 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3434
3435 WSH_UTIL_CORE.add_message(l_return_status, l_module_name);
3436
3437 l_num_error := l_num_error + 1 ;
3438 GOTO loop_end;
3439
3440 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3441 l_num_warn := l_num_warn + 1 ;
3442 END IF;
3443
3444 --we are checking that otm_plan_name is NOT NULL meaning
3445 --OTM planned trip, and ship method code is being changed
3446 --during ship confirm flow, which is not allowed.
3447 --IF any ship method is NULL this will be skipped
3448 --the trip ship method l_otm_ship_method_code should not be
3449 --NULL for OTM trips.
3450 IF (l_otm_plan_name IS NOT NULL
3451 AND l_otm_ship_method_code <> p_ship_method ) THEN
3452
3453 --
3454 -- Ship method on a delivery cannot be changed for an OTM trip
3455 --
3456 IF l_debug_on THEN
3457 WSH_DEBUG_SV.log(l_module_name,'ship method on trip', l_otm_ship_method_code);
3458 WSH_DEBUG_SV.log(l_module_name,'ship method passed in ship confirm', p_ship_method);
3459 WSH_DEBUG_SV.logmsg(l_module_name,'ship method not allowed to change for otm trip');
3460 END IF;
3461
3462 FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_SHIP_CONFIRM_ERROR');
3463 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', l_delivery_name);
3464
3465 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
3466 l_num_error := l_num_error + 1;
3467 GOTO loop_end;
3468 END IF;
3469 END IF;
3470 --END OTM R12
3471
3472 -- 1. Fetch delivery info and lock it
3473
3474 l_delivery_id := p_del_rows(i) ;
3475
3476 SELECT status_code ,
3477 initial_pickup_date ,
3478 ultimate_dropoff_date ,
3479 organization_id ,
3480 ship_method_code ,
3481 initial_pickup_location_id,
3482 ultimate_dropoff_location_id ,
3483 gross_weight ,
3484 net_weight ,
3485 volume
3486 INTO l_del_status_code,
3487 l_initial_pickup_date(i),
3488 l_ultimate_dropoff_date(i),
3489 l_organization_id ,
3490 l_ship_method_code ,
3491 l_ship_from_location,
3492 l_ship_to_location ,
3493 l_gross_weight ,
3494 l_net_weight ,
3495 l_volume
3496 FROM wsh_new_deliveries
3497 WHERE delivery_id = p_del_rows(i)
3498 AND nvl(shipment_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
3499 FOR UPDATE NOWAIT;
3500
3501 -- 2. Five checks performed here :
3502 -- a. If delivery is confirmed , skip it and go to next.
3503 IF (l_del_status_code = 'CO') THEN
3504 -- Although the name of this message looks like its an error , we are not
3505 -- really erroring out here.
3506 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
3507 --
3508 -- Debug Statements
3509 --
3510 IF l_debug_on THEN
3511 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3512 END IF;
3513 --
3514 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3515 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
3516 goto loop_end ;
3517 END IF;
3518
3519 --b. If delivery is neither OPEN nor PACKED , then set WARNING and go to next one
3520
3521 IF NOT ( (l_del_status_code IN ('OP', 'PA', 'SA'))) THEN -- sperera 940/945
3522 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_MULTI_ERROR');
3523 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3524 l_num_warn := l_num_warn + 1;
3525 wsh_util_core.add_message(x_return_status);
3526 goto loop_end ;
3527 END IF;
3528
3529 -- c. If ship Method is null , freight_code is null
3530 -- If not null , then its should have a an associated freight code.
3531
3532 IF l_ship_method_code IS NULL THEN
3533 l_freight_code:=null;
3534 ELSE
3535 OPEN get_freight(l_ship_method_code,l_organization_id );
3536 FETCH get_freight INTO l_freight_code;
3537
3538 IF (get_freight%NOTFOUND) THEN
3539 CLOSE get_freight;
3540 fnd_message.set_name('WSH','WSH_INVALID_FREIGHT_CODE');
3541 --
3542 -- Debug Statements
3543 --
3544 IF l_debug_on THEN
3545 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3546 END IF;
3547 --
3548 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3549 FND_MESSAGE.SET_TOKEN('SHIP_METHOD',l_ship_method_code);
3550 FND_MESSAGE.SET_TOKEN('ORG_ID',l_organization_id);
3551 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING);
3552 x_return_Status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
3553 l_num_warn := l_num_warn + 1 ;
3554 ELSE
3555 CLOSE get_freight;
3556 END IF;
3557 END IF;
3558
3559 -- d. If Initial pickup date or ultimate dropoff date is null , then
3560 -- Set a warning , and default to sysdate .
3561
3562 IF (l_initial_pickup_date(i) IS NULL)
3563 OR (l_ultimate_dropoff_date(i) IS NULL) THEN
3564
3565 IF p_action_flag NOT IN ('C','O') THEN --{
3566 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DATES_NULL');
3567 --
3568 -- Debug Statements
3569 --
3570 IF l_debug_on THEN
3571 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3572 END IF;
3573 --
3574 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3575 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3576 wsh_util_core.add_message(x_return_status);
3577
3578 l_num_warn := l_num_warn + 1;
3579 END IF; --}
3580
3581 l_initial_pickup_date(i) := nvl(p_actual_dep_date, SYSDATE) ;
3582 l_ultimate_dropoff_date(i) := GREATEST(nvl(l_ultimate_dropoff_date(i),nvl(p_actual_dep_date,SYSDATE)), nvl(p_actual_dep_date,SYSDATE));
3583 -- Bug 3913206
3584 l_sc_pickup_date := l_initial_pickup_date(i);
3585 l_sc_dropoff_date := l_ultimate_dropoff_date(i);
3586 END IF;
3587
3588 -- e. Validate Descriptive Flex-fields. If not valid , then warn and go to next one.
3589
3590 --
3591 -- Debug Statements
3592 --
3593 IF l_debug_on THEN
3594 WSH_DEBUG_SV.log(l_module_name,'l_sc_pickup_date',l_sc_pickup_date);
3595 WSH_DEBUG_SV.log(l_module_name,'l_sc_dropoff_date',l_sc_dropoff_date);
3596 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FLEXFIELD_UTILS.VALIDATE_DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3597 END IF;
3598 --
3599 wsh_flexfield_utils.Validate_DFF
3600 (p_table_name => 'WSH_NEW_DELIVERIES',
3601 p_primary_id => p_del_rows(i),
3602 x_return_status => x_return_status);
3603
3604 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3605 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3606 --
3607 -- Debug Statements
3608 --
3609 IF l_debug_on THEN
3610 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3611 END IF;
3612 --
3613 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3614 wsh_util_core.add_message(x_return_status);
3615 if ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) then
3616 l_num_error := l_num_error + 1 ;
3617 goto loop_end ;
3618 else
3619 l_num_warn := l_num_warn + 1 ;
3620 end if ;
3621 END IF;
3622
3623 -- bug 4505105
3624 l_del_valid_flag := 'Y';
3625 validate_del_containers(p_del_rows(i),
3626 'STD',
3627 l_del_valid_flag,
3628 x_return_status);
3629
3630 IF l_debug_on THEN
3631 WSH_DEBUG_SV.log(l_module_name,'x_return_status after calling validate_del_containers', x_return_status);
3632 END IF;
3633
3634 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3635 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3636 --
3637 -- Debug Statements
3638 --
3639 IF l_debug_on THEN
3640 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3641 END IF;
3642 --
3643 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3644 wsh_util_core.add_message(x_return_status);
3645 END IF;
3646 --
3647 IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
3648 l_num_error := l_num_error + 1 ;
3649 goto loop_end ;
3650 END IF;
3651
3652 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3653 l_num_error := l_num_error + 1 ;
3654 goto loop_end ;
3655 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3656 l_num_error := l_num_error + 1 ;
3657 goto loop_end ;
3658 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3659 l_num_warn := l_num_warn + 1 ;
3660 END IF;
3661 -- bug 4505105
3662
3663 --bug 1941793
3664 --
3665 -- Debug Statements
3666 --
3667 IF l_debug_on THEN
3668 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
3669 END IF;
3670 --
3671 if (wsh_util_validate.Check_Wms_Org(l_organization_id)='Y') then
3672
3673
3674 -- bug 2263249
3675 l_wms_enabled_flag := TRUE;
3676
3677 l_wms_delivery_id(1):=p_del_rows(i);
3678
3679 --
3680 -- Debug Statements
3681 --
3682 IF l_debug_on THEN
3683 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID',WSH_DEBUG_SV.C_PROC_LEVEL);
3684 END IF;
3685 --
3686 WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID(
3687 x_return_status => l_return_status,
3688 x_msg_count => l_msg_count,
3689 x_msg_data => l_msg_data,
3690 p_commit => 'F',
3691 p_init_msg_list => 'F',
3692 p_api_version => 1.0, -- Bugfix 3561335
3693 p_delivery_ids => l_wms_delivery_id);
3694 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
3695 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
3696 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID');
3697 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
3698 x_return_status := l_return_status;
3699 wsh_util_core.add_message(x_return_status);
3700 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
3701 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3702 l_num_error := l_num_error + 1 ;
3703 goto confirm_error_no_msg;
3704 ELSE
3705 l_num_warn := l_num_warn + 1 ;
3706 END IF;
3707 END IF;
3708 end if;
3709 --
3710
3711 -- Check for Exceptions against Delivery and Contents of Delivery
3712 IF l_debug_on THEN
3713 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
3714 END IF;
3715 l_exceptions_tab.delete;
3716 l_exp_logged := FALSE;
3717 WSH_XC_UTIL.Check_Exceptions (
3718 p_api_version => 1.0,
3719 x_return_status => l_return_status,
3720 x_msg_count => l_msg_count,
3721 x_msg_data => l_msg_data,
3722 p_logging_entity_id => p_del_rows(i) ,
3723 p_logging_entity_name => 'DELIVERY',
3724 p_consider_content => 'Y',
3725 x_exceptions_tab => l_exceptions_tab
3726 );
3727
3728 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
3729 x_return_status := l_return_status;
3730 wsh_util_core.add_message(x_return_status);
3731 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
3732 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3733 l_num_error := l_num_error + 1 ;
3734 goto confirm_error_no_msg;
3735 ELSE
3736 l_num_warn := l_num_warn + 1 ;
3737 END IF;
3738 END IF;
3739
3740 l_entity_name:=FND_MESSAGE.GET_STRING('WSH','WSH_DELIVERY');
3741 l_exc_beh_error:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_ERROR');
3742 l_exc_beh_warn:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_WARNING');
3743
3744 FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
3745 IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
3746 IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3747 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3748 ELSE
3749 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3750 END IF;
3751 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3752 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3753 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_error);
3754 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3755 wsh_util_core.add_message(x_return_status);
3756 l_num_error := l_num_error + 1 ;
3757 goto confirm_error_no_msg;
3758 ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
3759 IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3760 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3761 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3762 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3763 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3764 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3765 wsh_util_core.add_message(x_return_status);
3766 l_num_warn := l_num_warn + 1 ;
3767 ELSIF NOT (l_exp_logged) THEN
3768 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3769 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3770 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3771 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3772 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3773 l_exp_logged := TRUE;
3774 wsh_util_core.add_message(x_return_status);
3775 l_num_warn := l_num_warn + 1 ;
3776 END IF;
3777 END IF;
3778 END LOOP;
3779
3780
3781 -- 3. Fetch delivery lines for the delivery
3782
3783 l_assigned_counter := 0 ;
3784 l_lines_in_delivery := 0;
3785
3786 OPEN detail_info ( p_del_rows(i) );
3787 LOOP
3788
3789 l_detail_num := l_detail_num + 1;
3790 /*Bug 2096052 for OKE */
3791 l_source_code := NULL;
3792 /*end of 2096052 */
3793
3794 l_container_id := NULL ;
3795 l_delivery_detail_id := NULL ;
3796 l_released_status := NULL ;
3797
3798 l_inspection_flag := NULL ;
3799 l_shipped_quantity := NULL ;
3800 l_shipped_quantity2 := NULL ;
3801
3802 l_cycle_quantity := NULL ;
3803 l_cycle_quantity2 := NULL ;
3804 l_requested_quantity := NULL ;
3805
3806 l_requested_quantity2 := NULL ;
3807 l_dd_organization_id := NULL ;
3808 l_inventory_item_id := NULL ;
3809
3810 l_picked_quantity := NULL;
3811 l_picked_quantity2 := NULL;
3812
3813 l_subinventory := NULL ;
3814 l_locator_id := NULL ;
3815
3816 FETCH detail_info INTO l_container_id, l_delivery_detail_id, l_released_status ,
3817 l_inspection_flag , l_shipped_quantity , l_shipped_quantity2 ,
3818 l_cycle_quantity , l_cycle_quantity2 , l_requested_quantity ,
3819 l_requested_quantity2 ,
3820 l_picked_quantity, l_picked_quantity2,
3821 l_dd_organization_id ,l_inventory_item_id ,
3822 l_subinventory , l_locator_id, l_source_code, l_source_line_id;
3823 /*Bug 2096052 added l_source_code for OKE */
3824 -- Added l_source_line_id for the Consolidation of BO Delivery Details project
3825
3826 IF detail_info%NOTFOUND AND l_lines_in_delivery = 0 THEN
3827 CLOSE detail_info;
3828 FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_DELIVERY');
3829 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3830 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3831 wsh_util_core.add_message(x_return_status);
3832 goto confirm_error_no_msg;
3833 END IF;
3834
3835 EXIT WHEN detail_info%NOTFOUND;
3836 l_lines_in_delivery := l_lines_in_delivery + 1;
3837
3838 -- This is a workaround to lock each individual line
3839 -- as locking in SELECT FOR UPDATE will not work
3840 -- on labels 8.1.6.3 and above because of the above mentioned reason
3841 -- This might have a performance hit
3842
3843 /* remove after UT since the Check_Exceptions will supersede this
3844
3845 -- check if exception exists for the delivery detail
3846 --
3847 -- Debug Statements
3848 --
3849 IF l_debug_on THEN
3850 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.CHECK_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
3851 END IF;
3852 --
3853 WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3854 p_delivery_detail_id => l_delivery_detail_id,
3855 x_exception_exist => l_exception_exist,
3856 x_severity_present => l_severity_present,
3857 x_return_status => l_return_status);
3858
3859 -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3860 -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3861 IF (l_exception_exist = 'Y') THEN
3862 --
3863 -- Debug Statements
3864 --
3865 IF l_debug_on THEN
3866 WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR DELIVERY DETAIL ' || L_DELIVERY_DETAIL_ID|| ' , DURING SHIP CONFIRM' );
3867 END IF;
3868 --
3869 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3870 FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_delivery_detail_id));
3871 IF l_severity_present IN ('H','M') THEN
3872 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3873 wsh_util_core.add_message(x_return_status);
3874 goto confirm_error;
3875 ELSIF l_severity_present = 'L' THEN
3876 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3877 wsh_util_core.add_message(x_return_status);
3878 l_num_warn := l_num_warn + 1 ;
3879 END IF;
3880 END IF;
3881
3882 IF l_debug_on THEN
3883 WSH_DEBUG_SV.log(l_module_name,'l_delivery_detail_id'||l_delivery_detail_id);
3884 END IF;
3885
3886 OPEN Get_Containers(l_delivery_detail_id);
3887 LOOP
3888 FETCH Get_Containers INTO l_container_id;
3889 EXIT WHEN Get_Containers%NOTFOUND;
3890 WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3891 p_delivery_detail_id => l_container_id,
3892 x_exception_exist => l_exception_exist,
3893 x_severity_present => l_severity_present,
3894 x_return_status => l_return_status);
3895
3896 -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3897 -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3898 IF (l_exception_exist = 'Y') THEN
3899 --
3900 -- Debug Statements
3901 --
3902 IF l_debug_on THEN
3903 WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR CONTAINER ' || L_CONTAINER_ID|| ' , DURING SHIP CONFIRM' );
3904 END IF;
3905 --
3906 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3907 FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_container_id));
3908 IF l_severity_present IN ('H','M') THEN
3909 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3910 wsh_util_core.add_message(x_return_status);
3911 CLOSE Get_Containers;
3912 CLOSE detail_info;
3913 goto confirm_error;
3914 ELSIF l_severity_present = 'L' THEN
3915 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3916 wsh_util_core.add_message(x_return_status);
3917 l_num_warn := l_num_warn + 1 ;
3918 END IF;
3919 END IF;
3920
3921 END LOOP;
3922 CLOSE Get_Containers;
3923
3924 */
3925
3926 -- Bug 3118519 : Validation for Additional Delivery Detail Information DFF.
3927 --
3928 -- Debug Statements
3929 --
3930 IF l_debug_on THEN
3931 WSH_DEBUG_SV.logmsg(l_module_name,'Calling WSH_FLEXFIELD_UTILS.VALIDATE_DFF to validate delivery details DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3932 END IF;
3933 --
3934 WSH_FLEXFIELD_UTILS.Validate_DFF(
3935 p_table_name => 'WSH_DELIVERY_DETAILS',
3936 p_primary_id => l_delivery_detail_id,
3937 x_return_status => x_return_status);
3938
3939 --
3940 IF l_debug_on THEN
3941
3942 WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3943 || x_return_status);
3944 END IF;
3945 IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
3946 --
3947 -- Debug Statements
3948 --
3949 IF l_debug_on THEN
3950 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF failed for delivery detail : '
3951 || l_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
3952 WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3953 || x_return_status);
3954 END IF;
3955 --
3956 l_num_error := l_num_error + 1;
3957 -- HW OPMCONV. Removed checking for org type
3958
3959 l_error_DFF:= TRUE;
3960 l_detail_count := l_detail_count + 1;
3961
3962 IF ( l_detail_count = 1 ) THEN
3963 l_invalid_details := l_delivery_detail_id;
3964 ELSIF ( l_detail_count <= 5 ) THEN
3965 l_invalid_details := l_invalid_details || ', ' || l_delivery_detail_id;
3966 ELSIF ( l_more_flag ) THEN
3967 l_more_flag := FALSE;
3968 l_invalid_details := l_invalid_details || '..';
3969 END IF;
3970 END IF;
3971
3972 -- IF Condition added for Bug 3118519
3973
3974 -- HW OPMCONV. Removed forking the code
3975
3976 /* H integration: 945 send document wrudge */
3977 IF (l_source_code = 'WSH') THEN
3978 l_wsh_lines_exist := l_wsh_lines_exist + 1;
3979 END IF;
3980
3981
3982 /*Bug 2096052 added for OKE */
3983 IF (l_source_code = 'OKE' AND
3984 (p_action_flag = 'B' OR
3985 p_action_flag = 'O' OR
3986 p_action_flag = 'L' OR
3987 p_action_flag = 'C' OR
3988 l_cycle_quantity > 0)
3989 ) THEN
3990 l_source_code_flag := 'Y';
3991 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_SHIP_MODE');
3992 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3993 wsh_util_core.add_message(x_return_status);
3994 l_num_error := l_num_error + 1;
3995 CLOSE detail_info;
3996 goto confirm_error_no_msg;
3997
3998 END IF;
3999 /*end of Bug 2096052 added for OKE */
4000
4001 BEGIN
4002 SELECT delivery_detail_id INTO l_dummy_detail_id
4003 FROM wsh_delivery_details
4004 WHERE delivery_detail_id = l_delivery_detail_id
4005 FOR UPDATE NOWAIT;
4006
4007 EXCEPTION
4008 WHEN record_locked THEN
4009 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4010 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
4011 wsh_util_core.add_message(x_return_status);
4012 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4013 CLOSE detail_info;
4014 goto confirm_error;
4015 WHEN OTHERS THEN
4016 RAISE;
4017 END;
4018
4019 IF (l_released_status NOT IN ('X', 'Y')) THEN
4020 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_UNRELEASED');
4021 -- Bug 2713285
4022 -- for cancelling or unassigning the lines from delivery thru Batch process
4023 IF l_batch_id IS NULL THEN
4024 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4025 l_num_warn := l_num_warn + 1 ;
4026 ELSE
4027 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4028 l_num_error := l_num_error + 1 ;
4029 END IF;
4030
4031 wsh_util_core.add_message(x_return_status);
4032 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4033 --bug 2770400
4034 IF l_batch_id IS NOT NULL THEN
4035 -- in batch mode ,stop confirming the delivery
4036 wsh_util_core.add_message(x_return_status);
4037 CLOSE detail_info;
4038 goto confirm_error_no_msg;
4039 END IF;
4040 -- End of Bug 2713285
4041
4042 /* H integration: 945 cancel staged/unreleased wrudge */
4043 IF l_source_code = 'WSH' THEN
4044 l_cancel_line_ids(l_cancel_line_ids.count + 1) := l_delivery_detail_id;
4045 ELSE
4046 l_unassign_dds(l_unassign_dds.count + 1) := l_delivery_detail_id;
4047 l_unassign_rel_status(l_unassign_rel_status.count + 1) := l_released_status;
4048 l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id; -- Bug#3246327
4049 END IF;
4050 ELSE
4051 -- check for inspection_flag
4052
4053 IF ( l_inspection_flag = 'R') then
4054 FND_MESSAGE.SET_NAME('WSH','WSH_INSPECTION');
4055 --
4056 -- Debug Statements
4057 --
4058 IF l_debug_on THEN
4059 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4060 END IF;
4061 --
4062 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
4063 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4064 wsh_util_core.add_message(x_return_status);
4065 l_num_warn := l_num_warn + 1;
4066
4067 UPDATE WSH_DELIVERY_DETAILS
4068 SET INSPECTION_FLAG = 'I'
4069 WHERE DELIVERY_DETAIL_ID = l_dummy_detail_id ;
4070
4071 END IF ;
4072
4073 l_assigned_counter := l_assigned_counter + 1 ;
4074 l_assigned_line_ids ( l_assigned_counter ) := l_dummy_detail_id ;
4075 l_assigned_cont_ids ( l_assigned_counter ) := l_container_id ;
4076 l_assigned_req_qtys ( l_assigned_counter ) := l_requested_quantity ;
4077 l_assigned_shp_qtys ( l_assigned_counter ) := l_shipped_quantity ;
4078 l_assigned_cc_qtys ( l_assigned_counter ) := l_cycle_quantity ;
4079 l_assigned_shp_qtys2 ( l_assigned_counter ) := l_shipped_quantity2;
4080 l_assigned_cc_qtys2 ( l_assigned_counter ) := l_cycle_quantity2;
4081 l_assigned_req_qtys2 ( l_assigned_counter ) := l_requested_quantity2 ;
4082 l_assigned_pick_qtys ( l_assigned_counter ) := l_picked_quantity;
4083 l_assigned_pick_qtys2 ( l_assigned_counter ) := l_picked_quantity2;
4084 l_assigned_overpick_qtys ( l_assigned_counter ) := l_picked_quantity - l_requested_quantity ;
4085 l_assigned_overpick_qtys2 ( l_assigned_counter ) := l_picked_quantity2 - l_requested_quantity2 ;
4086 l_assigned_orgs ( l_assigned_counter ) := l_dd_organization_id ;
4087 l_assigned_items ( l_assigned_counter ) := l_inventory_item_id ;
4088 l_assigned_subs ( l_assigned_counter ) := l_subinventory ;
4089 l_assigned_locs ( l_assigned_counter ) := l_locator_id ;
4090 -- Consolidation of BO Delivery Details project
4091 l_assigned_source_lines (l_assigned_counter) := l_source_line_id;
4092 /* H integration: 940/945 wrudge */
4093 l_assigned_source ( l_assigned_counter ) := l_source_code;
4094
4095 END IF ; -- If released_status not in ( 'X' , 'Y' )
4096
4097 END LOOP ;-- for unassigning unreleased lines.
4098
4099 close detail_info ;
4100
4101 -- Added for Bug 3118519
4102 -- HW OPMCONV. Removed forking the code
4103
4104 IF ( l_error_DFF) THEN
4105 --
4106 -- Debug Statements
4107 --
4108 IF l_debug_on THEN
4109 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF validation failed for delivery detail(s)',WSH_DEBUG_SV.C_PROC_LEVEL);
4110 END IF;
4111 --
4112 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4113 l_token := FND_MESSAGE.Get_String('WSH', 'WSH_DETAIL_DFF_TITLE');
4114
4115 FND_MESSAGE.Set_Name('WSH', 'WSH_DFF_DETAIL_EMPTY');
4116 FND_MESSAGE.Set_Token('DFF_TITLE', l_token);
4117 FND_MESSAGE.Set_Token('DETAIL_IDS', l_invalid_details);
4118 WSH_UTIL_CORE.Add_Message(x_return_status);
4119
4120 IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
4121 l_num_warn := l_num_warn;
4122 END IF;
4123
4124 goto loop_end;
4125
4126 END IF;
4127
4128 -- 4. p_action_flag = O : If CYCLE COUNT all then cycle count all the reservations,
4129 -- backorder, clear inv controls and tracking number etc,
4130 -- unassign from delivery and close delivery, return
4131
4132 IF (p_action_flag = 'O') THEN
4133
4134 -- bug 2263249
4135 IF (l_wms_enabled_flag) THEN
4136 --
4137 -- Debug Statements
4138 --
4139 IF l_debug_on THEN
4140 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4141 END IF;
4142 --
4143 WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4144 (p_delivery_id => p_del_rows(i),
4145 x_return_status => l_return_status,
4146 x_msg_count => l_msg_count,
4147 x_msg_data => l_msg_data
4148 );
4149 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4150 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4151 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4152 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4153 x_return_status := l_return_status;
4154 wsh_util_core.add_message(x_return_status);
4155 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4156 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4157 THEN
4158
4159 l_num_error := l_num_error + 1 ;
4160 ELSE
4161 l_num_warn := l_num_warn + 1 ;
4162 END IF;
4163 END IF;
4164 END IF;
4165 -- end bug 2263249
4166
4167 --
4168 -- Debug Statements
4169 --
4170 IF l_debug_on THEN
4171 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4172 END IF;
4173 --
4174
4175
4176
4177 wsh_ship_confirm_actions2.backorder(
4178 p_detail_ids => l_assigned_line_ids ,
4179 p_line_ids => l_assigned_source_lines, -- Consolidation of BO Delivery Details project
4180 p_bo_qtys => l_assigned_req_qtys , -- pass total requested_quantity for BO
4181 p_req_qtys => l_assigned_req_qtys ,
4182 p_bo_qtys2 => l_assigned_req_qtys2 ,
4183 p_overpick_qtys => l_assigned_overpick_qtys ,
4184 p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4185 p_bo_mode => 'CYCLE_COUNT' ,
4186 x_out_rows => l_out_cc_rows ,
4187 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4188 x_return_status => l_return_status);
4189
4190 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS )
4191 THEN
4192 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4193 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4194 THEN
4195 l_num_error := l_num_error + 1 ;
4196 goto confirm_error_no_msg;
4197 ELSE
4198 l_num_warn := l_num_warn + 1 ;
4199 END IF ;
4200 END IF ;
4201 -- 2131459 - remove goto update_delivery_status code
4202 l_unassign_all_flag_tab(i) := TRUE;
4203
4204 -- 5. p_action_flag = C : If BACKORDER ALL then remove all reservations, clear inv controls and
4205 -- tracking number etc, unassign from delivery and close delivery, return
4206
4207 ELSIF ( p_action_flag = 'C' ) THEN
4208
4209 -- bug 2263249
4210 IF (l_wms_enabled_flag) THEN
4211 --
4212 -- Debug Statements
4213 --
4214 IF l_debug_on THEN
4215 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4216 END IF;
4217 --
4218 WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4219 (p_delivery_id => p_del_rows(i),
4220 x_return_status => l_return_status,
4221 x_msg_count => l_msg_count,
4222 x_msg_data => l_msg_data
4223 );
4224 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4225 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4226 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4227 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4228 x_return_status := l_return_status;
4229 wsh_util_core.add_message(x_return_status);
4230 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4231 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4232 l_num_error := l_num_error + 1 ;
4233 ELSE
4234 l_num_warn := l_num_warn + 1 ;
4235 END IF;
4236 END IF;
4237 END IF;
4238 -- end bug 2263249
4239
4240 --
4241 -- Debug Statements
4242 --
4243 IF l_debug_on THEN
4244 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4245 END IF;
4246 --
4247
4248 wsh_ship_confirm_actions2.backorder(
4249 p_detail_ids => l_assigned_line_ids ,
4250 p_line_ids => l_assigned_source_lines, -- Consolidation of BO Delivery Details project
4251 p_bo_qtys => l_assigned_req_qtys , -- pass total requested_quantity for BO
4252 p_req_qtys => l_assigned_req_qtys ,
4253 p_bo_qtys2 => l_assigned_req_qtys2 ,
4254 p_overpick_qtys => l_assigned_overpick_qtys ,
4255 p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4256 p_bo_mode => 'UNRESERVE' ,
4257 x_out_rows => l_out_bo_rows ,
4258 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4259 x_return_status => l_return_status);
4260
4261 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4262 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4263 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4264 THEN
4265 l_num_error := l_num_error + 1 ;
4266 goto confirm_error_no_msg;
4267 ELSE
4268 l_num_warn := l_num_warn + 1 ;
4269 END IF ;
4270 END IF ;
4271 -- 2131459 - remove goto update_delivery_status code
4272 l_unassign_all_flag_tab(i) := TRUE;
4273
4274 ELSE FOR j IN 1..l_assigned_line_ids.count LOOP
4275
4276 -- 6a. p_action_flag = S : SHIP UNSPECIFIED QUANTITIES
4277 IF (p_action_flag = 'S') THEN
4278
4279 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ), l_assigned_pick_qtys( j ));
4280 l_shipped_quantity2 := nvl(l_assigned_shp_qtys2 ( j ), l_assigned_pick_qtys2( j ));
4281 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ) , 0);
4282 l_cycle_quantity2 := l_assigned_cc_qtys2( j ) ;
4283 l_bo_mode := 'UNRESERVE';
4284
4285 -- 6b. p_action_flag = B : BACKORDER UNSPECIFIED QUANTITIES
4286
4287 ELSIF (p_action_flag = 'B') THEN
4288
4289 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ) , 0);
4290 /* OPM BUG 2408223 - pupakare */
4291 l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4292 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ), l_assigned_req_qtys ( j ) - l_shipped_quantity);
4293 -- HW OPMCONV - Added Qty2
4294 l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4295 /* End Bug 2408223 */
4296 l_bo_mode := 'UNRESERVE' ;
4297
4298 -- 6c. p_action_flag = L : CYCLE_COUNT UNSPECIFIED QUANTITIES
4299
4300 ELSIF (p_action_flag = 'L') THEN
4301
4302 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ) , 0);
4303 /* OPM BUG 2408223 - pupakare */
4304 l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4305 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ) , l_assigned_req_qtys( j ) - l_shipped_quantity);
4306 -- HW OPMCONV - Added nvl to shipped_qty2
4307 l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4308 /* End Bug 2408223 */
4309 IF l_debug_on THEN
4310 WSH_DEBUG_SV.push(l_module_name);
4311 --
4312 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4313 WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity2',l_shipped_quantity2);
4314 WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys2( j ',l_assigned_req_qtys2( j ));
4315 WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys2( j ));
4316
4317 WSH_DEBUG_SV.push(l_module_name);
4318 --
4319 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4320 WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity',l_shipped_quantity2);
4321 WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys( j ',l_assigned_req_qtys( j ));
4322 WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys( j ));
4323
4324 end if;
4325 if ( l_assigned_shp_qtys ( j ) is null ) then
4326 l_bo_mode := 'CYCLE_COUNT' ;
4327 else
4328 l_bo_mode := 'UNRESERVE' ;
4329 end if ;
4330
4331 -- 6d. p_action_flag = T : STAGE UNSPECIFIED QUANTITIES
4332
4333 ELSIF (p_action_flag = 'T') THEN
4334
4335 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ), 0);
4336 l_shipped_quantity2 := l_assigned_shp_qtys2 ( j );
4337 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ), 0);
4338 l_cycle_quantity2 := l_assigned_cc_qtys2( j ) ;
4339 l_bo_mode := 'UNRESERVE' ;
4340
4341 -- 6e. p_action_flag = A : SHIP ALL
4342
4343 ELSIF (p_action_flag = 'A') THEN
4344 -- Bug 2112196 : If ship All , then don't update shipped_quantity if its being overshiped.
4345 l_shipped_quantity := greatest ( nvl(l_assigned_shp_qtys ( j ), 0),
4346 l_assigned_pick_qtys( j ));
4347 l_shipped_quantity2 := greatest ( nvl(l_assigned_shp_qtys2 ( j ), 0),
4348 l_assigned_pick_qtys2( j ));
4349
4350 l_cycle_quantity := 0;
4351 -- HW BUG#:2005977 added cycle quantity2
4352 l_cycle_quantity2 := NULL;
4353
4354 END IF;
4355
4356 -- If line is overpicked, we need to backorder/cycle-count the unshipped picked quantity in
4357 -- excess of the requested quantity.
4358 -- Important: original value of req_qtys must be used before unassigning staged quantities.
4359 l_unshipped_pick_quantity := l_assigned_pick_qtys( j )
4360 - GREATEST(l_assigned_req_qtys( j ), l_shipped_quantity);
4361 l_unshipped_pick_quantity2 := l_assigned_pick_qtys2( j )
4362 - GREATEST(l_assigned_req_qtys2( j ), l_shipped_quantity2);
4363
4364
4365 -- 7. Unassign staged lines (split if necessary, store delivery detail ids)
4366
4367 -- because of overpicking/overshipping, both quantities should be at minimum 0.
4368 -- quantity (picked-requested) cannot be staged.
4369 l_stage_quantity := GREATEST(l_assigned_req_qtys( j ) - l_shipped_quantity-l_cycle_quantity, 0);
4370 l_stage_quantity2 := GREATEST(l_assigned_req_qtys2( j ) - l_shipped_quantity2-l_cycle_quantity2, 0);
4371
4372 -- HW Bug 3694454 For OPM if l_stage_quantity < .00001 due to small decimal mismatch in
4373 -- Requested Quantity and picked quantity then make both quantities zero.
4374 -- HW OPMCONV - Removed Branching
4375 IF (l_stage_quantity < .00001) THEN
4376 l_stage_quantity := 0;
4377 l_stage_quantity2 := 0;
4378 END IF;
4379
4380 -- End Bug 3694454
4381
4382
4383 IF (l_stage_quantity > 0) THEN
4384 IF (l_stage_quantity = l_assigned_req_qtys( j ) ) THEN
4385 l_staged_dd_id := l_assigned_line_ids( j );
4386 ELSE
4387 l_assigned_req_qtys( j ) := l_assigned_req_qtys( j ) - l_stage_quantity ;
4388 l_assigned_pick_qtys( j ):= l_assigned_pick_qtys( j ) - l_stage_quantity ;
4389 -- HW BUG#:2005977 added qty2 for OPM
4390 l_assigned_req_qtys2( j ) := l_assigned_req_qtys2( j ) - l_stage_quantity2 ;
4391 l_assigned_pick_qtys2( j ):= l_assigned_pick_qtys2( j ) - l_stage_quantity2 ;
4392
4393 /* bug fix 1983460
4394 Now we pass a value 'Y' to the parameter 'p_manual_split' in the call
4395 to split_delivery_details. 'Y' is used only as a indicator to tell the
4396 split_delivery_details that the split call is for splitting the STAGED quantity
4397 */
4398
4399 --
4400 -- Debug Statements
4401 --
4402 IF l_debug_on THEN
4403 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
4404 END IF;
4405 --
4406 wsh_delivery_details_actions.split_delivery_details(
4407 p_from_detail_id => l_assigned_line_ids( j ),
4408 p_req_quantity => l_stage_quantity,
4409 x_new_detail_id => l_new_detail_id,
4410 x_return_status => x_return_status,
4411 p_unassign_flag => 'N',
4412 p_req_quantity2 => l_stage_quantity2,
4413 p_manual_split => 'Y');
4414
4415 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4416 l_num_error := l_num_error + 1 ;
4417 goto confirm_error;
4418 ELSE
4419 l_staged_dd_id := l_new_detail_id;
4420 END IF;
4421 END IF; -- if stage quantity = requested quantity
4422
4423 /* H integration: 945 cancel staged wrudge */
4424 IF l_assigned_source( j ) = 'WSH' THEN
4425
4426 -- Bug 2713285
4427 -- for cancelling any line in delivery thru Batch process
4428 IF l_batch_id IS NOT NULL THEN
4429 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
4430 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4431 wsh_util_core.add_message(x_return_status);
4432 l_num_error := l_num_error + 1;
4433 goto confirm_error_no_msg;
4434 END IF;
4435 -- Bug 2713285
4436 l_cancel_line_ids ( l_cancel_line_ids.count+1) := l_staged_dd_id;
4437 ELSE
4438 l_stage_rows(l_stage_rows.count + 1) := l_staged_dd_id;
4439 END IF;
4440
4441 END IF; -- (l_stage_quantity > 0)
4442
4443
4444 -- Populate the tables to be passed as parameters for Backorder API.
4445
4446 IF ( ( l_cycle_quantity > 0 ) OR ( l_unshipped_pick_quantity > 0 ) )THEN
4447 if ( l_bo_mode = 'UNRESERVE') then
4448 l_bo_rows ( l_bo_rows.count + 1 ) := l_assigned_line_ids ( j ) ;
4449 -- Consolidation of BO Delivery Details project
4450 l_bo_source_lines(l_bo_source_lines.count +1) := l_assigned_source_lines(j);
4451 l_bo_qtys ( l_bo_qtys.count + 1 ) := l_cycle_quantity;
4452 l_bo_req_qtys ( l_bo_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4453 l_bo_overpick_qtys ( l_bo_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity;
4454 l_bo_qtys2( l_bo_qtys2.count + 1 ) := l_cycle_quantity2 ;
4455 l_bo_overpick_qtys2 ( l_bo_overpick_qtys2.count + 1 ):= l_unshipped_pick_quantity2;
4456 else
4457 l_cc_rows ( l_cc_rows.count + 1 ) := l_assigned_line_ids ( j ) ;
4458 -- Consolidation of BO Delivery Details project
4459 l_cc_source_lines(l_cc_source_lines.count +1) := l_assigned_source_lines(j);
4460 l_cc_qtys ( l_cc_qtys.count + 1 ) := l_cycle_quantity ;
4461 IF l_debug_on THEN
4462 WSH_DEBUG_SV.push(l_module_name);
4463 --
4464 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4465 END IF;
4466
4467 l_cc_req_qtys ( l_cc_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4468 l_cc_overpick_qtys ( l_cc_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity ;
4469
4470 l_cc_qtys2( l_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4471 IF l_debug_on THEN
4472 WSH_DEBUG_SV.push(l_module_name);
4473 --
4474 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4475 END IF;
4476 l_cc_overpick_qtys2( l_cc_overpick_qtys2.count + 1 ) := l_unshipped_pick_quantity2 ;
4477 end if ;
4478 END IF ;
4479
4480 IF (l_cycle_quantity <> l_assigned_req_qtys( j )) THEN
4481 l_backorder_all_flag := FALSE;
4482 END IF;
4483
4484 IF ( l_shipped_quantity > 0 ) THEN
4485 l_shp_dd_ids( l_shp_dd_ids.count + 1 ) := l_assigned_line_ids( j );
4486 l_shp_dd_orgs( l_shp_dd_orgs.count + 1 ) := l_assigned_orgs( j );
4487 l_shp_dd_items( l_shp_dd_items.count + 1 ) := l_assigned_items( j );
4488 l_shp_dd_subs( l_shp_dd_subs.count + 1 ) := l_assigned_subs( j );
4489 l_shp_dd_locs( l_shp_dd_locs.count + 1 ) := l_assigned_locs( j );
4490 l_shp_dd_cont_ids ( l_shp_dd_cont_ids.count + 1 ) := l_assigned_cont_ids ( j );
4491 l_shp_dd_shipped_qtys ( l_shp_dd_shipped_qtys.count + 1 ) := l_shipped_quantity ;
4492 l_shp_dd_shipped_qtys2 ( l_shp_dd_shipped_qtys2.count + 1 ) := l_shipped_quantity2 ;
4493 l_shp_dd_cc_qtys ( l_shp_dd_cc_qtys.count + 1 ) := l_cycle_quantity ;
4494 l_shp_dd_cc_qtys2 ( l_shp_dd_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4495 l_shp_dd_req_qtys ( l_shp_dd_req_qtys .count + 1 ) := l_assigned_req_qtys( j );
4496 /* H integration: 945 check detail wrudge */
4497 l_shp_dd_source( l_shp_dd_source.count + 1) := l_assigned_source( j );
4498 END IF ;
4499
4500 /* LG new OPM -- OM changes*/
4501
4502 -- HW OPMCONV. Removed forking the code
4503
4504 END LOOP ; -- For all delivery details still assigned
4505
4506 END IF ; -- If P_action_flag
4507
4508 -- 8. Update quantities based on p_action_flag for null values (shipped and cycle count)
4509
4510 FORALL tmp_counter IN 1..l_shp_dd_ids.count
4511 UPDATE wsh_delivery_Details
4512 SET shipped_quantity = l_shp_dd_shipped_qtys(tmp_counter),
4513 shipped_quantity2 = l_shp_dd_shipped_qtys2(tmp_counter),
4514 cycle_count_quantity = l_shp_dd_cc_qtys(tmp_counter),
4515 cycle_count_quantity2 = l_shp_dd_cc_qtys2(tmp_counter)
4516 WHERE delivery_detail_id = l_shp_dd_ids(tmp_counter);
4517
4518 IF (p_action_flag = 'A') THEN --bugfix 4070732
4519 --{
4520 -- J: W/V Changes
4521 -- Recalculate the W/V as the quantities would have changed
4522 FOR tmp_counter IN 1..l_shp_dd_ids.count LOOP
4523 IF l_debug_on THEN
4524 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
4525 END IF;
4526
4527 WSH_WV_UTILS.Detail_Weight_Volume(
4528 p_delivery_detail_id => l_shp_dd_ids(tmp_counter),
4529 p_update_flag => 'Y',
4530 p_post_process_flag => 'Y',
4531 p_calc_wv_if_frozen => 'N',
4532 x_net_weight => l_net_weight,
4533 x_volume => l_volume,
4534 x_return_status => l_return_status);
4535
4536 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
4537 x_return_status := l_return_status;
4538 IF l_debug_on THEN
4539 WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
4540 WSH_DEBUG_SV.pop(l_module_name);
4541 END IF;
4542 return;
4543 END IF;
4544 END LOOP;
4545
4546 --}
4547 END IF;
4548
4549 -- HW Added fix from bug 2024384 to NULL SHIPPED_QUANTITY(S) and
4550 -- CYCLE_COUNT_QUANTITY(S)
4551
4552 -- csun, Bug 2823512, if the transaction_temp_id is not NULL
4553 -- set the shipped_quantity to be requested_quantity
4554
4555 FORALL tmp_counter IN 1..l_stage_rows.count
4556 UPDATE WSH_DELIVERY_DETAILS
4557 SET -- TRACKING_NUMBER = NULL, Bug# 3632485
4558 SHIPPED_QUANTITY = DECODE (SERIAL_NUMBER, NULL,
4559 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY),
4560 PICKED_QUANTITY),
4561 SHIPPED_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4562 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY2),
4563 PICKED_QUANTITY2),
4564 CYCLE_COUNT_QUANTITY = DECODE (SERIAL_NUMBER, NULL ,
4565 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0) , 0),
4566 CYCLE_COUNT_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4567 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0), 0)
4568 WHERE DELIVERY_DETAIL_ID = l_stage_rows(tmp_counter);
4569
4570 -- J: W/V Changes
4571 -- Recalculate the W/V as the quantities would have changed with the above update
4572
4573
4574 -- 10. Backorder quantities and unassign(split if necessary)
4575
4576 IF (l_cc_rows.count > 0 ) THEN
4577
4578 --
4579 -- Debug Statements
4580 --
4581 IF l_debug_on THEN
4582 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4583 END IF;
4584 --
4585
4586 wsh_ship_confirm_actions2.backorder(
4587 p_detail_ids => l_cc_rows ,
4588 p_line_ids => l_cc_source_lines, -- Consolidation of BO Delivery Details project
4589 p_bo_qtys => l_cc_qtys ,
4590 p_req_qtys => l_cc_req_qtys ,
4591 p_bo_qtys2 => l_cc_qtys2 ,
4592 p_overpick_qtys => l_cc_overpick_qtys ,
4593 p_overpick_qtys2 => l_cc_overpick_qtys2 ,
4594 p_bo_mode => 'CYCLE_COUNT' ,
4595 x_out_rows => l_out_bo_rows ,
4596 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4597 x_return_status => l_return_status);
4598
4599 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4600 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4601 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4602 l_num_error := l_num_error + 1 ;
4603 goto confirm_error_no_msg;
4604 ELSE
4605 l_num_warn := l_num_warn + 1 ;
4606 END IF ;
4607 END IF ;
4608
4609 END IF;
4610
4611 IF (l_bo_rows.count > 0 ) THEN
4612
4613 --
4614 -- Debug Statements
4615 --
4616 IF l_debug_on THEN
4617 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4618 END IF;
4619 --
4620
4621 wsh_ship_confirm_actions2.backorder(
4622 p_detail_ids => l_bo_rows ,
4623 p_line_ids => l_bo_source_lines, -- Consolidation of BO Delivery Details project
4624 p_bo_qtys => l_bo_qtys ,
4625 p_req_qtys => l_bo_req_qtys ,
4626 p_bo_qtys2 => l_bo_qtys2 ,
4627 p_overpick_qtys => l_bo_overpick_qtys ,
4628 p_overpick_qtys2 => l_bo_overpick_qtys2 ,
4629 p_bo_mode => 'UNRESERVE' ,
4630 x_out_rows => l_out_cc_rows ,
4631 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4632 x_return_status => l_return_status);
4633
4634 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4635 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4636 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4637 l_num_error := l_num_error + 1 ;
4638 goto confirm_error_no_msg;
4639 ELSE
4640 l_num_warn := l_num_warn + 1 ;
4641 END IF ;
4642 END IF ;
4643
4644 END IF;
4645
4646
4647
4648 -- 11 Check for holds and inventory controls of details to be shipped
4649
4650 FOR dd_count IN 1..l_shp_dd_ids.count LOOP
4651
4652 dft_subinv := NULL;
4653 dft_loc_id := NULL;
4654
4655 --
4656 -- Debug Statements
4657 --
4658 IF l_debug_on THEN
4659 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DETAIL_FOR_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
4660 END IF;
4661 --
4662 WSH_DELIVERY_VALIDATIONS.check_detail_for_confirm
4663 ( p_detail_id => l_shp_dd_ids(dd_count),
4664 p_check_credit_init_flag => l_check_credit_init_flag, -- bug 2343058
4665 x_line_inv_flag_rec => l_inv_controls_rec,
4666 x_return_status => l_return_status);
4667
4668 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4669 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4670 l_num_error := l_num_error + 1;
4671 raise ship_confirm_error;
4672 /* H integration: 945 check detail wrudge */
4673 ELSIF l_shp_dd_source(dd_count) = 'WSH' THEN
4674 /* new message: WSH_DEL_WSH_LINE_ERROR, token DEL_NAME */
4675 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_WSH_LINE_ERROR');
4676 --
4677 -- Debug Statements
4678 --
4679 IF l_debug_on THEN
4680 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4681 END IF;
4682 --
4683 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
4684 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
4685 l_num_error := l_num_error + 1;
4686 goto confirm_error_no_msg;
4687 ELSE
4688 -- Bug 2713285
4689 -- for inventory control items, lines are unassigned from Delivery
4690 -- thru batch process
4691 IF l_batch_id IS NOT NULL THEN
4692 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4693 IF l_inv_controls_rec.details_required_flag='Y' THEN --Bug 3773225
4694 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_REQUIRED');
4695 wsh_util_core.add_message(x_return_status);
4696 ELSIF l_inv_controls_rec.invalid_material_status_flag='Y' THEN --Material Status Impact
4697 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_MATERIAL_STATUS');
4698 wsh_util_core.add_message(x_return_status);
4699 END IF;
4700 l_num_error := l_num_error + 1;
4701 goto confirm_error_no_msg;
4702 END IF;
4703 -- Bug 2713285
4704
4705 l_unassign_dds(l_unassign_dds.count + 1) := l_shp_dd_ids(dd_count);
4706 l_unassign_rel_status(l_unassign_rel_status.count + 1) := 'Y';
4707 l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id; -- Bug#3246327
4708 l_num_warn := l_num_warn + 1;
4709
4710 /* Bug fix 2850555
4711 Need to set l_inv_cntrl_flag to FALSE ONLY when details_required_flag
4712 is set to Y by 'check_detail_for_confirm' procedure.
4713 Reason: For cases where inv controls are not really required, like
4714 the bug case where only HOLDS are a problem, l_inv_cntrl_flag
4715 should NOT be set to FALSE
4716 */
4717
4718 if l_debug_on then
4719 wsh_debug_sv.log(l_module_name, 'l_inv_controls_rec.details_required_flag', l_inv_controls_rec.details_required_flag);
4720 end if;
4721
4722 if nvl(l_inv_controls_rec.details_required_flag, 'N') = 'Y' then
4723 l_inv_cntrl_flag := FALSE;
4724 -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4725 -- l_unassign_dds can be used all because it could contain unreleased lines.
4726 l_inv_ctrl_dd_count := l_inv_ctrl_dd_count + 1;
4727 IF ( l_inv_ctrl_dd_count = 1 ) THEN
4728 l_inv_ctrl_dd_ids := l_unassign_dds(l_unassign_dds.count);
4729 ELSIF ( l_inv_ctrl_dd_count <= 5 ) THEN
4730 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4731 ELSIF ( l_more_dd_flag ) THEN
4732 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ',..';
4733 l_more_dd_flag := FALSE;
4734 END IF;
4735 -- end bug 2283621
4736 /***************************Material Status Project***************************************/
4737 ELSIF nvl(l_inv_controls_rec.invalid_material_status_flag, 'N') = 'Y' then
4738 l_inv_material_flag := FALSE;
4739 -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4740 -- l_unassign_dds can be used all because it could contain unreleased lines.
4741 l_inv_material_dd_count := l_inv_material_dd_count + 1;
4742 IF ( l_inv_material_dd_count = 1 ) THEN
4743 l_inv_material_dd_ids := l_unassign_dds(l_unassign_dds.count);
4744 ELSIF ( l_inv_material_dd_count <= 5 ) THEN
4745 l_inv_material_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4746 ELSIF ( l_more_material_dd_flag ) THEN
4747 l_inv_material_dd_ids := l_inv_material_dd_ids || ',..';
4748 l_more_material_dd_flag := FALSE;
4749 END IF;
4750 /***************************Material Status Project***************************************/
4751 end if;
4752
4753 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
4754 END IF;
4755 ELSE
4756 l_unassign_all_flag_tab(i) := FALSE ;
4757
4758 IF (l_shp_dd_cont_ids(dd_count) IS NULL) THEN
4759 l_unpacked_flag := TRUE;
4760 ELSE
4761 -- Bug 2878538
4762 -- Cont exists flag should be set even if there is 1 container
4763 -- else it will be FALSE by default
4764 l_cont_exists_flag := TRUE;
4765 END IF; -- (if container_id IS NULL)
4766
4767 END IF; -- (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
4768
4769 -- bug 2320388
4770 l_check_credit_init_flag := FALSE;
4771
4772 -- Need to do this for non-transactable items to get default sub and loc
4773
4774 IF (l_shp_dd_subs ( dd_count ) IS NULL) THEN
4775 --
4776 -- Debug Statements
4777 --
4778 IF l_debug_on THEN
4779 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_SUBINVENTORY',WSH_DEBUG_SV.C_PROC_LEVEL);
4780 END IF;
4781 --
4782 WSH_DELIVERY_DETAILS_INV.Default_Subinventory ( l_shp_dd_orgs ( dd_count ),
4783 l_shp_dd_items( dd_count ),
4784 dft_subinv,
4785 x_return_status);
4786 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
4787 raise ship_confirm_error;
4788 END IF;
4789
4790 END IF;
4791
4792 -- Removed Details_required from here , because it was already called in
4793 -- check_detail_for_confirm.
4794
4795 IF ((NVL(l_shp_dd_subs ( dd_count ),dft_subinv) IS NOT NULL) AND (l_shp_dd_locs ( dd_count ) IS NULL)) THEN
4796 --
4797 -- Debug Statements
4798 --
4799 IF l_debug_on THEN
4800 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_ORG_LOC',WSH_DEBUG_SV.C_PROC_LEVEL);
4801 END IF;
4802 --
4803 org_loc_ctl := WSH_DELIVERY_DETAILS_INV.Get_Org_Loc (l_shp_dd_orgs ( dd_count ));
4804
4805 --
4806 -- Debug Statements
4807 --
4808 IF l_debug_on THEN
4809 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.SUB_LOC_CTL',WSH_DEBUG_SV.C_PROC_LEVEL);
4810 END IF;
4811 --
4812 sub_loc_ctl := WSH_DELIVERY_DETAILS_INV.Sub_Loc_Ctl (
4813 nvl(l_shp_dd_subs ( dd_count ),dft_subinv),
4814 l_shp_dd_orgs ( dd_count ));
4815
4816 item_loc_ctl := l_inv_controls_rec.location_control_code;
4817 --
4818 -- Debug Statements
4819 --
4820 IF l_debug_on THEN
4821 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.LOCATOR_CTL_CODE',WSH_DEBUG_SV.C_PROC_LEVEL);
4822 END IF;
4823 --
4824 loc_ctl_code := WSH_DELIVERY_DETAILS_INV.Locator_Ctl_Code(
4825 l_shp_dd_orgs ( dd_count ),
4826 l_inv_controls_rec.restrict_loc,
4827 org_loc_ctl,
4828 sub_loc_ctl,
4829 item_loc_ctl);
4830
4831 IF ( loc_ctl_code <> 1 ) THEN
4832 IF ( l_inv_controls_rec.restrict_loc = 1) THEN
4833 loc_restricted_flag := 'Y';
4834 ELSE
4835 loc_restricted_flag := 'N';
4836 END IF;
4837
4838 --
4839 -- Debug Statements
4840 --
4841 IF l_debug_on THEN
4842 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_LOCATOR',WSH_DEBUG_SV.C_PROC_LEVEL);
4843 END IF;
4844 --
4845 dft_loc_id := WSH_DELIVERY_DETAILS_INV.Default_Locator (
4846 l_shp_dd_orgs ( dd_count ),
4847 l_shp_dd_items ( dd_count ),
4848 NVL(l_shp_dd_subs ( dd_count ), dft_subinv),
4849 loc_restricted_flag);
4850 END IF;
4851
4852 -- performance bug 5257207: SC-13, do this update only when needed.
4853 IF (l_shp_dd_subs(dd_count) IS NULL AND dft_subinv IS NOT NULL)
4854 OR (dft_loc_id IS NOT NULL) THEN
4855 IF l_debug_on THEN
4856 WSH_DEBUG_SV.logmsg(l_module_name, 'updating subinv/locator');
4857 WSH_DEBUG_SV.log(l_module_name, 'dft_subinv', dft_subinv);
4858 WSH_DEBUG_SV.log(l_module_name, 'dft_loc_id', dft_loc_id);
4859 END IF;
4860 update wsh_delivery_details set
4861 subinventory = NVL(subinventory, dft_subinv),
4862 locator_id = NVL(locator_id, dft_loc_id)
4863 where delivery_detail_id = l_shp_dd_ids ( dd_count );
4864 END IF;
4865
4866 END IF;
4867 -- End for non-transactable items
4868
4869 END LOOP ;
4870
4871 IF (NOT l_inv_cntrl_flag) THEN
4872 IF l_debug_on THEN
4873 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4874 End If;
4875 If g_missing_inv_severity is null then
4876 g_missing_inv_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
4877 ,wsh_new_delivery_actions.g_missing_inv_cntl_msg);
4878 End If;
4879
4880 -- bug 2283621 - pass the l_inv_ctrl_dd_ids to the warning message
4881 IF l_debug_on THEN
4882 WSH_DEBUG_SV.log(l_module_name,'l_inv_ctrl_dd_ids - '|| l_inv_ctrl_dd_ids);
4883 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4884 END IF;
4885
4886 If g_missing_inv_severity = 'E' then
4887 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4888 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4889 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4890 wsh_util_core.add_message(x_return_status);
4891 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4892 l_num_error := l_num_error + 1;
4893 goto confirm_error_no_msg;
4894 Else
4895 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4896 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4897 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4898 wsh_util_core.add_message(x_return_status);
4899 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4900 End If;
4901 END IF;
4902 /***************************Material Status Project***************************************/
4903 IF (NOT l_inv_material_flag) THEN
4904 IF l_debug_on THEN
4905 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4906 End If;
4907 If g_missing_inv_severity is null then
4908 g_missing_inv_severity := wsh_ru_actions.get_message_severity (
4909 wsh_new_delivery_actions.g_ship_confirm_act,
4910 wsh_new_delivery_actions.g_invalid_material_status_msg);
4911 End If;
4912
4913 IF l_debug_on THEN
4914 WSH_DEBUG_SV.log(l_module_name,'l_inv_material_dd_ids - '|| l_inv_material_dd_ids);
4915 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4916 END IF;
4917
4918 If g_missing_inv_severity = 'E' then
4919 FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
4920 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
4921 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4922 wsh_util_core.add_message(x_return_status);
4923 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4924 l_num_error := l_num_error + 1;
4925 goto confirm_error_no_msg;
4926 Else
4927 FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
4928 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
4929 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4930 wsh_util_core.add_message(x_return_status);
4931 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4932 End If;
4933 END IF;
4934 /***************************Material Status Project***************************************/
4935
4936 --
4937 -- Debug Statements
4938 --
4939 IF l_debug_on THEN
4940 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_RELEASED_LINES',WSH_DEBUG_SV.C_PROC_LEVEL);
4941 END IF;
4942 --
4943 wsh_tpa_delivery_pkg.check_released_lines(
4944 p_del_rows(i), l_unassign_dds.count,
4945 l_detail_num-l_unassign_dds.count, l_return_status);
4946
4947 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4948 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4949 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4950 l_num_error := l_num_error + 1 ;
4951 ELSE
4952 l_num_warn := l_num_warn + 1 ;
4953 END IF ;
4954 goto loop_end ;
4955 END IF ;
4956
4957
4958 -- Consolidation of BO Delivery Details project.
4959 -- At this point of time, some of the dd_ids in l_unassign_dds with released_status as 'B'
4960 -- might have been deleted by wsh_ship_confirm_actions2.backorder api.
4961 -- So checking whether dd_ids to be unassigned are already deleted.
4962 -- Do this only if there are lines to be unassigned AND there is atleast one delivery line BackOrdered.
4963 -- Begin
4964 IF (l_unassign_dds.COUNT > 0 AND (l_out_bo_rows.count > 0 OR l_out_cc_rows.count > 0)) THEN
4965 -- --{
4966 --
4967 -- Debug Statements
4968 --
4969 -- Shifted code to obtain Global parameters outside the Deliveries loop ***
4970
4971 IF l_debug_on THEN
4972 WSH_DEBUG_SV.logmsg(l_module_name,'Back Order Consolidation Flag is set as '||l_global_parameters.consolidate_bo_lines, WSH_DEBUG_SV.C_PROC_LEVEL);
4973 END IF;
4974
4975 IF (l_global_parameters.consolidate_bo_lines = 'Y') THEN
4976 -- --{
4977 -- l_out_bo_rows contains list of dd_ids that were Backordered
4978 -- l_out_cc_rows contains list of dd_ids that were Cycle Count
4979 IF (l_out_bo_rows.count > 0) THEN
4980 l_unassign_backordered_dds := l_out_bo_rows;
4981 ELSIF (l_out_cc_rows.count > 0) THEN
4982 l_unassign_backordered_dds := l_out_cc_rows;
4983 END IF;
4984
4985 -- Bug#3246327
4986 --
4987 -- Store backordered order line ids in the pl/sql table l_bo_line_ids
4988 IF (l_bo_source_lines.count > 0) THEN
4989 l_bo_line_ids := l_bo_source_lines; -- Assign the partial backordered soure lines to l_bo_line_ids
4990 ELSIF (l_cc_source_lines.count > 0 ) THEN -- Assign the partial cycle-count soure lines to l_bo_line_ids
4991 l_bo_line_ids := l_cc_source_lines;
4992 ELSIF (l_assigned_source_lines.count > 0) THEN -- Assign the completely backordered or cycle-counted lines
4993 l_bo_line_ids := l_assigned_source_lines;
4994 END IF;
4995
4996 -- Bug#3317692
4997 -- Compare l_unassign_source_lines and l_bo_line_ids and
4998 -- delete the entry in l_unassign_source_lines if it is not there in l_bo_line_ids.
4999 -- These changes are done to restrict the filtering of l_unassign_dds only
5000 -- if the corresponding line is backordered.
5001 l_idx := l_unassign_source_lines.FIRST;
5002 WHILE l_idx IS NOT NULL LOOP
5003 -- --{
5004 l_flag := 'N';
5005 l_cmp_idx := l_bo_line_ids.FIRST;
5006 WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5007 IF (l_unassign_source_lines(l_idx) = l_bo_line_ids(l_cmp_idx)) THEN
5008 l_flag := 'Y';
5009 EXIT;
5010 END IF;
5011 l_cmp_idx := l_bo_line_ids.NEXT(l_cmp_idx);
5012 END LOOP; -- --}
5013 IF l_flag = 'N' THEN
5014 l_unassign_source_lines.DELETE(l_idx);
5015 END IF;
5016 l_idx := l_unassign_source_lines.NEXT(l_idx);
5017 END LOOP; -- --}
5018 --
5019
5020 l_idx := l_unassign_dds.FIRST;
5021 WHILE l_idx IS NOT NULL LOOP
5022 -- --{
5023 -- Loop thru' l_unassign_dds and check whether delivery_detail_id exists
5024 -- in l_unassign_backordered_dds, if NOT then Delete that dd_id from l_unassign_dds because
5025 -- it must already be physically deleted by the backorder API.
5026 -- [ This check should happen for dd_ids in l_unassign_dds, ONLY if the released_status is 'B'
5027 -- and if the dd_id is under the backordered source line ]
5028 -- Filter l_unassign_dds only if the corresponding Order line is backordered. ie., l_unassign_source_lines.EXISTS
5029 IF (l_unassign_source_lines.EXISTS(l_idx) AND l_unassign_rel_status(l_idx) = 'B') THEN --{
5030 l_flag := 'N';
5031 l_cmp_idx := l_unassign_backordered_dds.FIRST;
5032 WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5033 IF (l_unassign_dds(l_idx) = l_unassign_backordered_dds(l_cmp_idx)) THEN
5034 l_flag := 'Y';
5035 EXIT;
5036 END IF;
5037 l_cmp_idx := l_unassign_backordered_dds.NEXT(l_cmp_idx);
5038 END LOOP; -- --}
5039 IF l_flag = 'N' THEN
5040 l_unassign_dds.DELETE(l_idx);
5041 END IF;
5042 END IF; --}, l_unassign_rel_status(l_idx) = 'B'
5043 l_idx := l_unassign_dds.NEXT(l_idx);
5044 END LOOP; -- --}
5045 -- Now, l_unassign_dds contains only the not-deleted dd_ids.
5046
5047 l_unassign_backordered_dds.DELETE;
5048 j := l_unassign_dds.FIRST;
5049 -- Following loop just puts the dd_ids in contiguous locations in the pl/sql table
5050 WHILE j IS NOT NULL LOOP
5051 l_unassign_backordered_dds(l_unassign_backordered_dds.count+1) := l_unassign_dds(j);
5052 j := l_unassign_dds.NEXT(j);
5053 END LOOP;
5054 l_unassign_dds.DELETE;
5055 l_unassign_dds := l_unassign_backordered_dds;
5056 END IF; -- --}, l_global_parameters.consolidate_bo_lines
5057 END IF; -- --}, l_unassign_dds.count > 0
5058 -- End, Consolidation of BO Delivery Details project
5059
5060 --
5061 -- Debug Statements
5062 --
5063 IF l_debug_on THEN
5064 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5065 END IF;
5066
5067 -- Unassign the lines marked for unassigning.
5068 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5069 p_ids_tobe_unassigned => l_unassign_dds ,
5070 p_validate_flag => 'N', -- want it to succeed in case of Planned Deliveries
5071 x_return_status => l_return_status
5072 );
5073
5074 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5075 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5076 THEN
5077 x_return_status := l_return_status;
5078 l_num_error := l_num_error + 1 ;
5079 goto loop_end;
5080 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5081 l_num_warn := l_num_warn + 1;
5082 END IF;
5083
5084 --
5085 -- Debug Statements
5086 --
5087 IF l_debug_on THEN
5088 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.CONT_TOBE_UNASSIGNED',WSH_DEBUG_SV.C_PROC_LEVEL);
5089 END IF;
5090 -- Identify the Staged Lines or Containers to be Unassigned from the Delivery
5091 Cont_ToBe_Unassigned ( p_staged_lines => l_stage_rows,
5092 x_unassigned_cont => x_unassigned_cont,
5093 x_return_status => l_return_status
5094 );
5095
5096 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5097 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5098 THEN
5099 x_return_status := l_return_status;
5100 wsh_util_core.add_message(x_return_status);
5101 l_num_error := l_num_error + 1 ;
5102 goto loop_end;
5103 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5104 l_num_warn := l_num_warn + 1;
5105 END IF;
5106
5107 --
5108 -- Debug Statements
5109 --
5110 IF l_debug_on THEN
5111 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5112 END IF;
5113 -- Unassign Containers or Staged Lines using new API
5114 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5115 p_ids_tobe_unassigned => x_unassigned_cont ,
5116 p_validate_flag => 'N', -- want it to succeed for Planned Deliveries too
5117 x_return_status => l_return_status
5118 );
5119
5120 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5121 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5122 THEN
5123 x_return_status := l_return_status;
5124 l_num_error := l_num_error + 1 ;
5125 goto loop_end;
5126 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5127 l_num_warn := l_num_warn + 1;
5128 END IF;
5129
5130 /* H integration: 945 cancel staged/unreleased */
5131 -- Cancel/delete lines marked for cancelling
5132 IF l_cancel_line_ids.count > 0 THEN
5133 --
5134 -- Debug Statements
5135 --
5136 IF l_debug_on THEN
5137 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE.DELETE_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
5138 END IF;
5139 --
5140 wsh_interface.delete_details(
5141 p_details_id => l_cancel_line_ids,
5142 x_return_status => l_return_status);
5143
5144 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5145 /* new message: WSH_DEL_CANCEL_DET_ERROR, token DEL_NAME */
5146 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5147 --
5148 -- Debug Statements
5149 --
5150 IF l_debug_on THEN
5151 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5152 END IF;
5153 --
5154 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5155 x_return_status := l_return_status;
5156 wsh_util_core.add_message(x_return_status);
5157 l_num_error := l_num_error + 1 ;
5158 goto loop_end;
5159 END IF;
5160 END IF;
5161
5162 -- Bug 5584951: Moved the call to after the call to unassign details.
5163
5164 FOR tmp_counter IN 1..l_stage_rows.count LOOP
5165 IF l_debug_on THEN
5166 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
5167 END IF;
5168
5169 WSH_WV_UTILS.Detail_Weight_Volume(
5170 p_delivery_detail_id => l_stage_rows(tmp_counter),
5171 p_update_flag => 'Y',
5172 p_post_process_flag => 'Y',
5173 p_calc_wv_if_frozen => 'N',
5174 x_net_weight => l_net_weight,
5175 x_volume => l_volume,
5176 x_return_status => l_return_status);
5177 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
5178 x_return_status := l_return_status;
5179 IF l_debug_on THEN
5180 WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
5181 WSH_DEBUG_SV.pop(l_module_name);
5182 END IF;
5183 return;
5184 END IF;
5185 END LOOP;
5186
5187 -- Bug 2527887 : Moved this call after unassigning detail lines from delivery since the check will not work
5188 -- if the pending overpick lines are still assigned to the delivery
5189 -- 10.5 Make sure no source lines with at total requested qty of zero are shipped or left behind
5190
5191 --
5192 -- Debug Statements
5193 --
5194 IF l_debug_on THEN
5195 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_ZERO_REQ_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5196 END IF;
5197 --
5198 WSH_DETAILS_VALIDATIONS.check_zero_req_confirm(p_delivery_id => p_del_rows(i),
5199 x_return_status => l_return_status);
5200
5201 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5202 x_return_status := l_return_Status ;
5203 --wsh_util_core.add_message(x_return_status);
5204 l_delivery_id := p_del_rows(i);
5205 goto confirm_error_no_msg;
5206 END IF;
5207
5208
5209 -- Code Shifted from below 12. *** to here, since this is a mandatory step now - Workflow Changes
5210 IF l_debug_on THEN
5211 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.GET',WSH_DEBUG_SV.C_PROC_LEVEL);
5212 END IF;
5213 --
5214 WSH_SHIPPING_PARAMS_PVT.Get(
5215 p_organization_id => l_organization_id,
5216 x_param_info => l_param_info,
5217 x_return_status => l_return_status
5218 );
5219
5220
5221 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5222 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
5223 --
5224 -- Debug Statements
5225 --
5226 IF l_debug_on THEN
5227 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.GET_ORG_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5228 END IF;
5229 --
5230 FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
5231 wsh_util_core.get_org_name(l_organization_id));
5232 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5233 wsh_util_core.add_message(x_return_status);
5234 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5235 goto confirm_error;
5236 END IF;
5237
5238
5239 --/== Workflow Changes
5240 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
5241 IF (l_param_info.Enable_sc_wf = 'Y' AND l_global_parameters.Enable_sc_wf = 'Y' AND nvl(l_override_wf,'N') = 'N') THEN
5242 l_enable_sc_wf := 'Y';
5243 END IF;
5244 --==/
5245
5246
5247 -- 9. If p_stage_del_flag= 'Y' then create deliveries for the stored delivery details above
5248
5249 IF (p_stage_del_flag = 'Y') AND (l_stage_rows.count > 0) THEN
5250 --
5251 -- Debug Statements
5252 --
5253 IF l_debug_on THEN
5254 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.AUTOCREATE_DELIVERIES',WSH_DEBUG_SV.C_PROC_LEVEL);
5255 END IF;
5256 --
5257 wsh_delivery_autocreate.autocreate_deliveries(
5258 p_line_rows => l_stage_rows ,
5259 p_init_flag => 'Y' ,
5260 p_pick_release_flag => 'N' ,
5261 p_container_flag => 'N' ,
5262 p_check_flag => 'N' ,
5263 p_max_detail_commit => 1000,
5264 x_del_rows => l_dummy_rows ,
5265 x_grouping_rows => l_dummy_rows ,
5266 x_return_status => l_return_status ) ;
5267
5268 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5269 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5270 l_num_warn := l_num_warn + 1;
5271 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5272 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5273 l_num_error := l_num_error + 1;
5274 END IF;
5275
5276 --deliveryMerge
5277 IF l_debug_on THEN
5278 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag',WSH_DEBUG_SV.C_PROC_LEVEL);
5279 END IF;
5280 WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag(
5281 p_delivery_ids => l_dummy_rows,
5282 p_caller => 'WSH_DLMG',
5283 p_force_appending_limit => 'N',
5284 p_call_lcss => 'Y',
5285 p_event => NULL,
5286 x_return_status => l_return_status);
5287
5288 IF l_debug_on THEN
5289 WSH_DEBUG_SV.log(l_module_name,'Adjust_Planned_Flag l_return_status',l_return_status);
5290 END IF;
5291
5292 IF x_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5293 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5294 l_num_warn := l_num_warn + 1;
5295 ELSIF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
5296 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5297 l_num_error := l_num_error + 1;
5298 END IF;
5299
5300
5301 END IF;
5302
5303 -- Bug 1729723 : Updating number_of_lpn for delivery , 1672188 : now doing it after unassignments.
5304
5305 l_number_of_lpn(i) := NULL;
5306 OPEN number_of_lpn(p_del_rows(i));
5307 FETCH number_of_lpn into l_number_of_lpn (i) ;
5308 CLOSE number_of_lpn;
5309
5310
5311 -- Check that all overpicked lines for one source line are in the same delivery,
5312 -- so that we can guarantee that these lines will get interfaced to OM.
5313 -- we might look up CURSOR overpicked_outside_delivery( v_delivery_id in number ) or have new API...
5314
5315 -- 12. Calculate Weight volume etc
5316 --
5317 -- Debug Statements
5318 --
5319 --- Code to obtain Shipping parameters shifted from here *** - Workflow Changes
5320 l_enforce_packing_flag := l_param_info.enforce_packing_flag;
5321
5322 -- Pack J, ITM -- Check if delivery needs to be marked for export compliance.
5323 l_itm_exc_severity := '-99';
5324
5325 IF l_debug_on THEN
5326 wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5327 END IF;
5328
5329 IF l_param_info.export_screening_flag IN ('S', 'A') THEN
5330
5331
5332 IF l_debug_on THEN
5333 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',WSH_DEBUG_SV.C_PROC_LEVEL);
5334 END IF;
5335
5336 l_itm_exc_flag(p_del_rows(i)) := WSH_DELIVERY_VALIDATIONS.Check_ITM_Required
5337 (p_delivery_id => p_del_rows(i),
5338 x_return_status => l_return_status);
5339 IF l_debug_on THEN
5340 wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',l_return_status);
5341 WSH_DEBUG_SV.logmsg(l_module_name,'ITM flag: '||l_param_info.export_screening_flag);
5342 wsh_debug_sv.log(l_module_name,'l_itm_exc_flag for delivery: '|| p_del_rows(i),l_itm_exc_flag(p_del_rows(i)));
5343 END IF;
5344
5345 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5346 goto confirm_error;
5347 END IF;
5348 -- Find out the severity of the exception if it is enabled.
5349 IF l_itm_exc_flag(p_del_rows(i)) = 'Y' THEN
5350
5351 OPEN c_exc_severity('WSH_SC_REQ_EXPORT_COMPL');
5352 FETCH c_exc_severity INTO l_itm_exc_severity;
5353 CLOSE c_exc_severity;
5354
5355 END IF;
5356
5357 IF l_debug_on THEN
5358 wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5359 END IF;
5360 ELSE
5361
5362 l_itm_exc_flag(p_del_rows(i)) := 'N';
5363
5364 END IF;
5365
5366
5367 -- J: W/V Changes
5368 -- 12.5 Give warning if delivery W/V is null depending on percent_fill_basis_flag
5369
5370 IF (NOT l_unassign_all_flag_tab(i)) THEN
5371
5372 WSH_WV_UTILS.Delivery_Weight_Volume
5373 ( p_delivery_id => p_del_rows(i),
5374 p_update_flag => 'Y',
5375 p_calc_wv_if_frozen => 'N',
5376 x_gross_weight => l_gross_weight,
5377 x_net_weight => l_net_wt,
5378 x_volume => l_volume,
5379 x_return_status => l_return_status);
5380
5381
5382
5383 -- Get the latest W/V information.
5384 OPEN get_delivery_wv(p_del_rows(i));
5385 FETCH get_delivery_wv INTO l_gross_weight, l_volume;
5386 CLOSE get_delivery_wv;
5387
5388 IF l_debug_on THEN
5389 WSH_DEBUG_SV.logmsg(l_module_name,'Gross '||l_gross_weight||' Volume '||l_volume||' Fill basis '||l_param_info.percent_fill_basis_flag);
5390 END IF;
5391
5392 IF (l_param_info.percent_fill_basis_flag = 'W' and l_gross_weight is NULL) THEN
5393 FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5394 IF l_debug_on THEN
5395 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5396 END IF;
5397 --
5398 FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5399 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5400 FND_MESSAGE.SET_TOKEN('WV','Weight');
5401 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5402 wsh_util_core.add_message(x_return_status);
5403 l_num_warn := l_num_warn + 1;
5404 END IF;
5405
5406 IF (l_param_info.percent_fill_basis_flag = 'V' and l_volume is NULL) THEN
5407 FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5408 IF l_debug_on THEN
5409 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5410 END IF;
5411 --
5412 FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5413 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5414 FND_MESSAGE.SET_TOKEN('WV','Volume');
5415 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5416 wsh_util_core.add_message(x_return_status);
5417 l_num_warn := l_num_warn + 1;
5418 END IF;
5419 END IF;
5420 -- End J: W/V Changes
5421
5422 -- 2732719
5423 -- Calculate fill pc of the containers in the delivery
5424
5425 l_underfilled_flag := FALSE;
5426 l_overfilled_flag := FALSE;
5427 IF l_debug_on THEN
5428 WSH_DEBUG_SV.log(l_module_name,'COUNT -'||l_shp_dd_cont_ids.count);
5429 END IF;
5430
5431 FOR rec_count in 1..l_shp_dd_cont_ids.count
5432 LOOP
5433 IF l_debug_on THEN
5434 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.CHECK_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
5435 WSH_DEBUG_SV.log(l_module_name,'Cont -'||l_shp_dd_cont_ids(rec_count));
5436 END IF;
5437 --
5438 wsh_wv_utils.check_fill_pc( p_container_instance_id => l_shp_dd_cont_ids(rec_count),
5439 x_fill_status => l_fill_status,
5440 x_return_status => l_return_status);
5441
5442 IF l_debug_on THEN
5443 WSH_DEBUG_SV.log(l_module_name,'RET STS -'||l_return_status);
5444 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_fill_status);
5445 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5446 END IF;
5447
5448 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5449 WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5450 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5451 ELSIF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
5452 raise ship_confirm_error;
5453 ELSIF (l_fill_status = 'U') THEN
5454 l_underfilled_flag := TRUE;
5455 ELSIF (l_fill_status = 'O') THEN
5456 l_overfilled_flag := TRUE;
5457 END IF;
5458
5459 -- Bug 2878538
5460 -- If l_save_fill_status is already saving U(nderfill) or O(verfill),then
5461 -- don't override,else override if it is Null or S(uccess)
5462 IF nvl(l_save_fill_status,'X') = 'S' THEN
5463 l_save_fill_status := l_fill_status;
5464 END IF;
5465
5466 IF l_debug_on THEN
5467 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5468 END IF;
5469
5470 END LOOP;
5471
5472 l_fill_status := l_save_fill_status;
5473
5474 IF l_debug_on THEN
5475 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP RET STS -'||l_return_status);
5476 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP SAV STS -'||l_save_fill_status);
5477 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP Fill St -'||l_fill_status);
5478 END IF;
5479
5480 -- 2732719
5481 -- Calculate fill pc of the containers in the delivery
5482
5483
5484 -- Calculate weight volume for the delivery
5485
5486 -- 13. Call check_confirm , it only has the TPA validations now.
5487
5488 -- 2131459 - added check for l_unassign_all_flag_tab(i) and include steps 15 and 18 in this check
5489 IF (NOT l_unassign_all_flag_tab(i)) THEN
5490
5491
5492
5493 -- Create trip from deconsol location to ultimate drop off
5494 -- consol deliveriers.
5495
5496 IF l_mdc_co_del_tab.count > 0 THEN
5497
5498 Create_Deconsol_Trips(p_deliveries_tab => p_del_rows,
5499 x_return_status => l_return_status);
5500
5501 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5502 raise ship_confirm_error;
5503 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5504 l_num_warn := l_num_warn + 1;
5505 END IF;
5506
5507
5508 END IF;
5509 --
5510 -- Debug Statements
5511 --
5512 IF l_debug_on THEN
5513 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5514 END IF;
5515 --
5516 wsh_delivery_validations.check_confirm(
5517 p_delivery_id => p_del_rows(i),
5518 p_actual_dep_date => p_actual_dep_date,
5519 p_cont_exists_flag => l_cont_exists_flag ,
5520 p_enforce_packing_flag => l_enforce_packing_flag,
5521 p_ship_from_location => l_ship_from_location,
5522 p_ship_to_location => l_ship_to_location,
5523 p_freight_code => l_freight_code ,
5524 p_overfilled_flag => l_overfilled_flag,
5525 p_underfilled_flag => l_underfilled_flag,
5526 p_organization_id => l_organization_id ,
5527 p_initial_pickup_date => l_initial_pickup_date(i),
5528 p_ultimate_dropoff_date => l_ultimate_dropoff_date(i),
5529 x_return_status => l_return_status ) ;
5530
5531 /*
5532 ** begin bug 2426743
5533 ** Warning should not set the message that delivery will not be confirmed.
5534 ** Error should rollback and not continue processing this delivery.
5535 */
5536 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5537
5538 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
5539 --
5540 -- Debug Statements
5541 --
5542 IF l_debug_on THEN
5543 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5544 END IF;
5545 --
5546 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5547 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5548 wsh_util_core.add_message(x_return_status);
5549 goto confirm_error_no_msg;
5550
5551 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5552 -- Bug 2711786
5553 -- for ship set,but this would include other validations done in
5554 -- check_confirm API like for SMC also
5555 IF l_batch_id IS NOT NULL THEN
5556 -- FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5557 -- x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5558 -- wsh_util_core.add_message(x_return_status);
5559 l_num_error := l_num_error + 1;
5560 goto confirm_error_no_msg;
5561 END IF;
5562 -- Bug 2711786
5563
5564 --Ship Message Customization Project Change START
5565 IF l_debug_on THEN
5566 WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5567 END IF;
5568 If g_break_ship_set_or_smc > 0 then
5569 g_break_ship_set_or_smc := 0 ;
5570 l_num_error := l_num_error + 1;
5571 IF l_debug_on THEN
5572 WSH_DEBUG_SV.logmsg(l_module_name,'l_num_error ',l_num_error);
5573 WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5574 END IF;
5575 goto confirm_error_no_msg;
5576 End If;
5577 --Ship Message Customization Project Change END
5578
5579 l_num_warn := l_num_warn + 1;
5580 END IF;
5581 /*
5582 ** end bug 2426743
5583 */
5584
5585 -- Sequence delivery legs ( IS DONE IN CHECK_CONFIRM )
5586
5587 IF (l_enforce_packing_flag = 'Y') THEN
5588
5589 --
5590 -- Debug Statements
5591 --
5592 IF l_debug_on THEN
5593 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_UNPACKED',WSH_DEBUG_SV.C_PROC_LEVEL);
5594 END IF;
5595 --
5596 wsh_tpa_delivery_pkg.check_del_unpacked
5597 (l_delivery_id,
5598 l_cont_exists_flag,
5599 l_unpacked_flag,
5600 l_return_status);
5601
5602 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5603 THEN
5604 x_return_status := l_return_status;
5605 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5606 raise ship_confirm_error;
5607 ELSE
5608 l_num_warn := l_num_warn + 1;
5609 END IF;
5610 END IF;
5611 END IF;
5612
5613 -- 15. Generate Packing Slip
5614 create_pack_slip(
5615 p_delivery_id => p_del_rows(i),
5616 x_return_status => l_return_status);
5617
5618 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5619 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
5620 THEN
5621 l_num_error := l_num_error + 1;
5622 goto loop_end;
5623 ELSE
5624 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_PACK_SLIP_ERROR');
5625 --
5626 -- Debug Statements
5627 --
5628 IF l_debug_on THEN
5629 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5630 END IF;
5631 --
5632 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5633 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5634 wsh_util_core.add_message(x_return_status);
5635 l_num_warn := l_num_warn + 1;
5636 END IF;
5637 END IF;
5638
5639 -- 18. if p_intransit_flag = 'Y' and autocreate trip then set the pickup stop to closed
5640 -- Autocreate trip if necessary (trip stuff)
5641
5642 l_pickup_stop_id := NULL ;
5643 l_dropoff_stop_id := NULL ;
5644 l_delivery_leg_id := NULL ;
5645 l_parent_delivery_id := NULL;
5646 l_trip_id := NULL ;
5647
5648 OPEN del_legs (p_del_rows(i));
5649 FETCH del_legs
5650 INTO l_pickup_stop_id,
5651 l_dropoff_stop_id,
5652 l_delivery_leg_id,
5653 l_parent_delivery_id;
5654 CLOSE del_legs;
5655
5656 -- Note that the above FETCH might miss some legs if the delivery is assigned to mult. legs!!!!!!!!
5657
5658 -- K: MDC: collect the deliveries that
5659 -- have parent deliveries.
5660 -- Note that this table may not be gapless.
5661 IF l_parent_delivery_id IS NULL THEN
5662
5663 OPEN get_consol_del(p_del_rows(i));
5664 FETCH get_consol_del
5665 INTO l_parent_delivery_id;
5666 CLOSE get_consol_del;
5667
5668 END IF;
5669
5670 IF l_parent_delivery_id IS NOT NULL THEN
5671
5672 l_mdc_co_del_tab(i) := l_parent_delivery_id;
5673
5674 END IF;
5675
5676 IF l_debug_on THEN
5677 wsh_debug_sv.log(l_module_name,'delivery',p_del_rows(i));
5678 wsh_debug_sv.log(l_module_name,'l_pickup_stop_id',l_pickup_stop_id);
5679 wsh_debug_sv.log(l_module_name,'l_dropoff_stop_id',l_dropoff_stop_id);
5680 wsh_debug_sv.log(l_module_name,'l_delivery_leg_id',l_delivery_leg_id);
5681 wsh_debug_sv.log(l_module_name,'l_parent_delivery_id',l_parent_delivery_id);
5682 END IF;
5683
5684 /* Bug 2313359 Trip Information is Lost */
5685
5686 IF (l_pickup_stop_id IS NULL) THEN
5687 l_del_rows( 1 ) := p_del_rows(i);
5688
5689 --Compatiblity Changes
5690 --for autocreatetrip if no ship method is provided do the compatibility check to see if trip can be created for the delivery else if ship method is provided, do the compatibility check before update trip call
5691 --bug 2811489 : call should be made regardless of ship_method being null
5692 IF wsh_util_core.fte_is_installed='Y' THEN
5693
5694 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5695 p_api_version_number => 1.0,
5696 p_init_msg_list => FND_API.G_FALSE,
5697 p_entity_type => 'D',
5698 p_target_id => l_target_trip_id,
5699 p_action_code => 'AUTOCREATE-TRIP',
5700 p_del_attr_tab => l_cc_del_attr_tab,
5701 p_det_attr_tab => l_cc_det_attr_tab,
5702 p_trip_attr_tab => l_cc_trip_attr_tab,
5703 p_stop_attr_tab => l_cc_stop_attr_tab,
5704 p_in_ids => l_del_rows,
5705 x_fail_ids => l_cc_fail_ids,
5706 x_validate_result => l_cc_validate_result,
5707 x_failed_lines => l_cc_failed_records,
5708 x_line_groups => l_cc_line_groups,
5709 x_group_info => l_cc_group_info,
5710 x_msg_count => l_msg_count,
5711 x_msg_data => l_msg_data,
5712 x_return_status => l_return_status);
5713
5714
5715 IF l_debug_on THEN
5716 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and no ship method');
5717 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5718 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5719 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5720 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5721 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
5722 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5723 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5724 END IF;
5725 --
5726
5727 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5728 IF l_cc_failed_records.COUNT>0 THEN
5729
5730 IF l_debug_on THEN
5731 wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
5732 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5733 END IF;
5734
5735 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
5736 FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5737 x_return_status := l_return_status;
5738 wsh_util_core.add_message(x_return_status);
5739 goto confirm_error;
5740 ELSE
5741 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5742 l_num_warn := l_num_warn + 1;
5743 END IF;
5744 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5745 x_return_status := l_return_status;
5746 goto confirm_error;
5747 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5748 x_return_status := l_return_status;
5749 l_num_warn := l_num_warn + 1;
5750 END IF;
5751 END IF;
5752 --Compatiblity Changes
5753
5754 --
5755 -- Debug Statements
5756 --
5757 IF l_debug_on THEN
5758 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.AUTOCREATE_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
5759 END IF;
5760 --
5761
5762 --heali :Shipment Advice change for trip Consolidation.
5763 IF (p_autocreate_trip_flag = 'Y' ) THEN
5764 wsh_trips_actions.autocreate_trip(
5765 p_del_rows => l_del_rows,
5766 x_trip_id => l_trip_id,
5767 x_trip_name => l_trip_name,
5768 x_return_status => l_return_status,
5769 -- Bug 3913206
5770 p_sc_pickup_date => l_sc_pickup_date,
5771 p_sc_dropoff_date => l_sc_dropoff_date
5772 );
5773
5774 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5775 THEN
5776 x_return_status := l_return_status;
5777 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_AUTOCREATE_TRIP_ERROR');
5778
5779 IF l_debug_on THEN
5780 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5781 END IF;
5782 --
5783 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5784 wsh_util_core.add_message(x_return_status);
5785 goto confirm_error;
5786 END IF;
5787 END IF;
5788 END IF;
5789 --heali :Shipment Advice change for trip Consolidation.
5790
5791
5792 -- Bug 2213342 : Ship Confirm Defaulting behavior
5793 IF l_trip_id IS NULL THEN
5794
5795 --Compatibility Changes
5796 -- if trip already exists, need to check for must use constraints if carrier/mode is null
5797 IF wsh_util_core.fte_is_installed='Y' THEN
5798 l_trip_info_tab.delete;
5799 l_cc_count_success:=0;
5800
5801 IF l_debug_on THEN
5802 wsh_debug_sv.log(l_module_name,'HASH_TRIP count',G_HASH_TRIP.COUNT);
5803 END IF;
5804
5805 FOR cur in Get_Trip(p_del_rows(i)) LOOP
5806 b_tripalreadychecked:='N';
5807 IF G_HASH_TRIP.COUNT>0 THEN
5808 FOR l_count_hashtrip in G_HASH_TRIP.FIRST..G_HASH_TRIP.LAST LOOP
5809 IF G_HASH_TRIP(l_count_hashtrip)=cur.trip_id THEN
5810 b_tripalreadychecked:='Y';
5811 IF l_debug_on THEN
5812 wsh_debug_sv.log(l_module_name,'HASH_TRIP matched', cur.trip_id);
5813 END IF;
5814 END IF;
5815 END LOOP;
5816 END IF;
5817
5818 --IF (b_tripalreadychecked='N' and (cur.carrier_id is null or cur.mode_of_transport is null)) THEN
5819 IF (b_tripalreadychecked='N' and
5820 (cur.ship_method_code is null and (cur.carrier_id is null or cur.mode_of_transport is null))
5821 ) THEN
5822
5823 IF l_debug_on THEN
5824 wsh_debug_sv.log(l_module_name,'trip not already checked',cur.trip_id);
5825 END IF;
5826 l_cc_count_success:=l_cc_count_success+1;
5827 l_trip_info_tab(l_cc_count_success).trip_id:=cur.trip_id;
5828 l_trip_info_tab(l_cc_count_success).ship_method_code:=cur.ship_method_code;
5829 l_trip_info_tab(l_cc_count_success).carrier_id:=cur.carrier_id;
5830 l_trip_info_tab(l_cc_count_success).mode_of_transport:=cur.mode_of_transport;
5831 G_HASH_TRIP(G_HASH_TRIP.COUNT+1):=cur.trip_id;
5832 END IF;
5833 END LOOP;
5834
5835 IF l_debug_on THEN
5836 wsh_debug_sv.log(l_module_name,'l_trip_info_tab.COUNT : ',l_trip_info_tab.COUNT);
5837 END IF;
5838
5839
5840 IF l_trip_info_tab.COUNT>0 THEN
5841
5842 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5843 p_api_version_number => 1.0,
5844 p_init_msg_list => FND_API.G_FALSE,
5845 p_entity_type => 'T',
5846 p_target_id => l_target_trip_id,
5847 p_action_code => 'UPDATE',
5848 p_del_attr_tab => l_cc_del_attr_tab,
5849 p_det_attr_tab => l_cc_det_attr_tab,
5850 p_trip_attr_tab => l_trip_info_tab,
5851 p_stop_attr_tab => l_cc_stop_attr_tab,
5852 p_in_ids => l_cc_in_ids,
5853 x_fail_ids => l_cc_fail_ids,
5854 x_validate_result => l_cc_validate_result,
5855 x_failed_lines => l_cc_failed_records,
5856 x_line_groups => l_cc_line_groups,
5857 x_group_info => l_cc_group_info,
5858 x_msg_count => l_msg_count,
5859 x_msg_data => l_msg_data,
5860 x_return_status => l_return_status);
5861
5862 IF l_debug_on THEN
5863 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with trip already present');
5864 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5865 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5866 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5867 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5868 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
5869 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5870 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5871 wsh_debug_sv.log(l_module_name,'HASH_TRIP trip_id',G_HASH_TRIP(1));
5872 END IF;
5873 --
5874
5875 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5876 IF l_cc_fail_ids.COUNT>0 THEN
5877
5878 IF l_debug_on THEN
5879 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
5880 END IF;
5881
5882 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_COMP_FAILED');
5883 FND_MESSAGE.SET_TOKEN('TRIP_ID',wsh_trips_pvt.get_name(l_cc_fail_ids(1)));
5884 x_return_status := l_return_status;
5885 wsh_util_core.add_message(x_return_status);
5886 goto confirm_error;
5887 ELSE
5888 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5889 l_num_warn := l_num_warn + 1;
5890 END IF;
5891 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5892 x_return_status := l_return_status;
5893 goto confirm_error;
5894 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5895 x_return_status := l_return_status;
5896 l_num_warn := l_num_warn + 1;
5897 END IF;
5898
5899 END IF;--for trip_tab count>0
5900 END IF;
5901 --Compatibility Changes
5902
5903 -- bug 2432330: to show expected warning, code has to count deliveries with
5904 -- existing stops:
5905 -- delivery has existing trip and will not be set in transit or closed.
5906 l_close_confirm_flag := 'F';
5907
5908 l_with_mc_trip_flag(i) := TRUE;
5909
5910
5911 IF p_ship_method IS NOT NULL THEN -- trip already exists...
5912 -- Bug 3347549 update the ship method components for
5913 -- the fisrt trip on the delivery.
5914
5915 OPEN get_del_first_trip(p_del_rows(i));
5916 FETCH get_del_first_trip into l_del_first_trip;
5917 CLOSE get_del_first_trip;
5918
5919 IF l_del_first_trip IS NULL THEN
5920
5921 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
5922 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5923 wsh_util_core.add_message(x_return_status);
5924 goto confirm_error;
5925
5926 ELSE
5927
5928 l_carrier_rec.ship_method_code := p_ship_method;
5929
5930
5931 WSH_CARRIERS_GRP.get_carrier_service_mode(
5932 p_carrier_service_inout_rec => l_carrier_rec,
5933 x_return_status => l_return_status);
5934
5935 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5936 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5937 goto confirm_error;
5938 END IF;
5939
5940 BEGIN
5941
5942 WSH_TRIPS_PVT.lock_trip_no_compare(l_del_first_trip);
5943
5944 EXCEPTION
5945
5946 WHEN app_exception.application_exception OR app_exception.record_lock_exception THEN
5947 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5948 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_STOP_TRIP_LOCK');
5949 FND_MESSAGE.SET_TOKEN('DLVY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5950 wsh_util_core.add_message(x_return_status);
5951 goto confirm_error;
5952
5953 END;
5954
5955 UPDATE wsh_trips
5956 SET ship_method_code = p_ship_method,
5957 service_level = l_carrier_rec.service_level,
5958 mode_of_transport = l_carrier_rec.mode_of_transport,
5959 carrier_id = l_carrier_rec.carrier_id
5960 WHERE trip_id = l_del_first_trip;
5961
5962 IF (SQL%NOTFOUND) THEN
5963 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
5964 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5965 wsh_util_core.add_message(x_return_status);
5966 goto confirm_error;
5967 END IF;
5968
5969 END IF;
5970
5971 END IF;
5972
5973 ELSE
5974 /* H integration - call MultiLeg FTE */
5975 IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
5976 -- Get pvt type record structure for trip
5977 --
5978 -- Debug Statements
5979 --
5980 IF l_debug_on THEN
5981 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.GET_TRIP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
5982 END IF;
5983 --
5984 wsh_trips_grp.get_trip_details_pvt
5985 (p_trip_id => l_trip_id,
5986 x_trip_rec => l_trip_rec,
5987 x_return_status => l_return_status);
5988 IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
5989 x_return_status := l_return_status;
5990 wsh_util_core.add_message(x_return_status);
5991 goto confirm_error;
5992 END IF;
5993
5994 -- this is the updated record
5995 l_trip_rec.ship_method_code :=
5996 nvl(p_ship_method,l_trip_rec.ship_method_code);
5997
5998 -- Call FTE
5999 --
6000 -- Debug Statements
6001 --
6002 IF l_debug_on THEN
6003 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
6004 END IF;
6005 --
6006 wsh_fte_integration.trip_stop_validations
6007 (p_stop_rec => l_stop_rec,
6008 p_trip_rec => l_trip_rec,
6009 p_action => 'UPDATE',
6010 x_return_status => l_return_status);
6011
6012 /* H integration changes */
6013 IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6014 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6015 l_num_warn := l_num_warn + 1;
6016 ELSE
6017 x_return_status := l_return_status;
6018 wsh_util_core.add_message(x_return_status);
6019 goto confirm_error;
6020 END IF;
6021 END IF;
6022 END IF;
6023
6024 /* End of H integration - call MultiLeg FTE */
6025
6026
6027 --Compatiblity Changes
6028 --for autocreatetrip if no ship method is provided do the compatibility check to see if trip can be created for the delivery else if ship method is provided, do the compatibility check before update trip call
6029 --bug 2811489 : call should be made regardless of ship_method being null
6030 IF wsh_util_core.fte_is_installed='Y' THEN
6031
6032 --only one record
6033 l_trip_info_tab(1).trip_id:=l_trip_id;
6034 IF p_ship_method is not null THEN
6035 l_trip_info_tab(1).ship_method_code:=p_ship_method;
6036 ELSE -- ship method is not specified as an option, existing carrier, mode
6037 -- have to be checked for must use constraints
6038 l_trip_info_tab(1).ship_method_code :=l_trip_rec.ship_method_code;
6039 l_trip_info_tab(1).carrier_id :=l_trip_rec.carrier_id;
6040 l_trip_info_tab(1).mode_of_transport :=l_trip_rec.mode_of_transport;
6041 END IF;
6042
6043 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
6044 p_api_version_number => 1.0,
6045 p_init_msg_list => FND_API.G_FALSE,
6046 p_entity_type => 'T',
6047 p_target_id => l_target_trip_id,
6048 p_action_code => 'UPDATE',
6049 p_del_attr_tab => l_cc_del_attr_tab,
6050 p_det_attr_tab => l_cc_det_attr_tab,
6051 p_trip_attr_tab => l_trip_info_tab,
6052 p_stop_attr_tab => l_cc_stop_attr_tab,
6053 p_in_ids => l_cc_in_ids,
6054 x_fail_ids => l_cc_fail_ids,
6055 x_validate_result => l_cc_validate_result,
6056 x_failed_lines => l_cc_failed_records,
6057 x_line_groups => l_cc_line_groups,
6058 x_group_info => l_cc_group_info,
6059 x_msg_count => l_msg_count,
6060 x_msg_data => l_msg_data,
6061 x_return_status => l_return_status);
6062
6063 IF l_debug_on THEN
6064 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and ship method');
6065 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
6066 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
6067 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
6068 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
6069 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
6070 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
6071 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
6072 END IF;
6073 --
6074
6075 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
6076 IF l_cc_fail_ids.COUNT>0 THEN
6077
6078 IF l_debug_on THEN
6079 wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
6080 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6081 END IF;
6082
6083 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
6084 FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6085 x_return_status := l_return_status;
6086 wsh_util_core.add_message(x_return_status);
6087 goto confirm_error;
6088 ELSE
6089 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
6090 l_num_warn := l_num_warn + 1;
6091 END IF;
6092 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
6093 x_return_status := l_return_status;
6094 goto confirm_error;
6095 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6096 x_return_status := l_return_status;
6097 l_num_warn := l_num_warn + 1;
6098 END IF;
6099 END IF;
6100 --Compatiblity Changes
6101
6102 -- Bug 3347549 Derive the ship method components for the trip.
6103
6104 IF p_ship_method IS NOT NULL THEN
6105
6106 l_carrier_rec.ship_method_code := p_ship_method;
6107
6108 WSH_CARRIERS_GRP.get_carrier_service_mode(
6109 p_carrier_service_inout_rec => l_carrier_rec,
6110 x_return_status => l_return_status);
6111
6112 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6113 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6114 goto confirm_error;
6115 END IF;
6116
6117 UPDATE wsh_trips
6118 SET ship_method_code = p_ship_method,
6119 service_level = l_carrier_rec.service_level,
6120 mode_of_transport = l_carrier_rec.mode_of_transport,
6121 carrier_id = l_carrier_rec.carrier_id
6122 WHERE trip_id = l_trip_id;
6123
6124 IF (SQL%NOTFOUND) THEN
6125 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6126 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6127 wsh_util_core.add_message(x_return_status);
6128 goto confirm_error;
6129 END IF;
6130
6131 END IF;
6132
6133 END IF;--l_trip_id is not null - autocreated trip
6134
6135 IF l_debug_on THEN
6136 wsh_debug_sv.log(l_module_name,'p_intransit_flag', p_intransit_flag);
6137 wsh_debug_sv.log(l_module_name,'p_close_flag', p_close_flag);
6138 wsh_debug_sv.log(l_module_name,'l_itm_exc_severity', l_itm_exc_severity);
6139 END IF;
6140 /* Bug 2313359 move the code from above */
6141
6142 IF ((p_intransit_flag = 'Y' OR p_close_flag = 'Y') AND (l_enable_sc_wf <> 'Y') ) THEN
6143 -- Now that the trip is created , fetch the delivery's pickup_stop_id again.
6144 -- We do this only if severity 'ERROR', 'WARNING' ITM exceptions will not be
6145 -- logged against this delivery, as the stops attached to deliveries with
6146 -- 'ERROR', 'WARNING' ITM exceptions will not get closed.
6147 -- l_enable_sc_wf <> 'Y' - Workflow Changes
6148
6149 OPEN del_legs (p_del_rows(i));
6150 FETCH del_legs INTO l_pickup_stop_id,
6151 l_dropoff_stop_id, l_delivery_leg_id,
6152 l_parent_delivery_id;
6153 CLOSE del_legs;
6154
6155 IF (l_itm_exc_severity IN ('ERROR', 'WARNING')) THEN
6156
6157 l_itm_stops_tab(l_pickup_stop_id) := 'Y';
6158 l_itm_stops_tab(l_dropoff_stop_id) := 'Y';
6159
6160 l_close_confirm_flag := 'F';
6161
6162 FND_MESSAGE.SET_NAME('WSH','WSH_EXP_COMPL_SCRN_REQD');
6163 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
6164 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
6165
6166 ELSE
6167
6168 l_stop_rows(l_stop_rows.count + 1 ) := l_pickup_stop_id;
6169 --u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6170
6171 -- 19. if p_close_flag = 'Y' and autocreate trip close the drop off stop
6172 IF (p_close_flag = 'Y') THEN
6173 l_stop_rows(l_stop_rows.count + 1 ) := l_dropoff_stop_id;
6174 -- u_stop_rows(u_stop_rows.count + 1 ) := l_dropoff_stop_id;
6175 END IF;
6176
6177 --bug 3314353 -- jckwok
6178 OPEN get_del_first_trip(p_del_rows(i));
6179 FETCH get_del_first_trip into l_first_trip_id;
6180 CLOSE get_del_first_trip;
6181 IF l_first_trip_id IS NULL THEN
6182 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6183 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6184 wsh_util_core.add_message(x_return_status);
6185 goto confirm_error;
6186 END IF;
6187 OPEN stop_sequence_number_csr(l_pickup_stop_id);
6188 FETCH stop_sequence_number_csr INTO l_pick_up_stop_sequence_num;
6189 IF stop_sequence_number_csr%NOTFOUND THEN
6190 CLOSE stop_sequence_number_csr;
6191 RAISE NO_DATA_FOUND;
6192 END IF;
6193 CLOSE stop_sequence_number_csr;
6194
6195 IF ((p_close_flag = 'Y') AND (p_intransit_flag = 'Y')) THEN
6196 --{ bugfix 3925963
6197 l_inbound_stops_exists := false;
6198 l_stop_name_list := null;
6199 OPEN get_stops_csr(l_first_trip_id);
6200 LOOP
6201 FETCH get_stops_csr INTO l_prev_stop_id,l_shipments_type_flag,l_stop_location_id;
6202 exit when get_stops_csr%NOTFOUND;
6203 IF nvl(l_shipments_type_flag,'O') = 'I' THEN
6204 l_inbound_stops_exists := true;
6205 l_stop_name := SUBSTRB(
6206 WSH_UTIL_CORE.get_location_description
6207 ( l_stop_location_id,
6208 'NEW UI CODE'
6209 ),
6210 1,
6211 60
6212 );
6213 IF l_stop_name_list is null THEN
6214 l_stop_name_list := l_stop_name;
6215 ELSE
6216 l_stop_name_list := l_stop_name_list || ' , ' || l_stop_name;
6217 END IF;
6218 ELSE
6219 u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6220 END IF;
6221 --
6222 END LOOP;
6223 CLOSE get_stops_csr;
6224 IF l_inbound_stops_exists THEN
6225 OPEN get_trip_name_csr (l_first_trip_id);
6226 FETCH get_trip_name_csr INTO l_stops_trip_name;
6227 CLOSE get_trip_name_csr;
6228 FND_MESSAGE.SET_NAME('WSH','WSH_PREV_IB_STOPS_NOT_CLOSED');
6229 FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_stops_trip_name);
6230 FND_MESSAGE.SET_TOKEN('STOP_NAME_LIST', l_stop_name_list);
6231 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6232 wsh_util_core.add_message(x_return_status);
6233 END IF;
6234 --} bugfix 3925963
6235 ELSIF ((p_close_flag = 'N') AND (p_intransit_flag = 'Y')) THEN
6236 OPEN prev_stop_csr(l_first_trip_id, l_pick_up_stop_sequence_num);
6237 LOOP
6238 FETCH prev_stop_csr INTO l_prev_stop_id;
6239 exit when prev_stop_csr%NOTFOUND;
6240 u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6241 END LOOP;
6242 CLOSE prev_stop_csr;
6243 u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6244 END IF;
6245 --bug 3314353 -- jckwok
6246
6247 l_close_confirm_flag := 'C';
6248
6249 END IF;
6250
6251 ELSE
6252
6253 l_close_confirm_flag := 'F';
6254
6255 END IF; -- end of p_in_transit_flag = Y
6256
6257 END IF; -- end of IF (NOT l_unassign_all_flag_tab(i))
6258
6259 IF l_debug_on THEN
6260 WSH_DEBUG_SV.log(l_module_name,'l_close_confirm_flag',l_close_confirm_flag );
6261 END IF;
6262
6263 --set the close/confirm count accordingly
6264 IF(l_close_confirm_flag = 'C') THEN
6265 l_close_del_cnt := l_close_del_cnt +1;
6266 ELSIF(l_close_confirm_flag = 'F') THEN
6267 l_confirm_del_cnt := l_confirm_del_cnt +1;
6268 END IF;
6269
6270 l_close_confirm_flag:=NULL;
6271
6272
6273 -- Set delivery status to confirm, set initial pickup date, ultimate dropoff date
6274
6275 -- If all delivery_details from a delivery are being unassigned then set status to CLOSED
6276 -- ,unassign delivery from all trips it might be on and set a warning message
6277
6278 IF l_unassign_all_flag_tab(i) THEN
6279 l_status_code(i) := 'CL';
6280
6281 /* H integration: 940/945 WSH wrudge */
6282 -- we should get warning only if user doesn't expect to do unassign all.
6283 IF p_action_flag NOT IN ('C', 'O') AND l_unassign_dds.count > 0 THEN
6284
6285 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_UNASSIGN_ALL');
6286 --
6287 -- Debug Statements
6288 --
6289 IF l_debug_on THEN
6290 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6291 END IF;
6292 --
6293 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6294 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6295 wsh_util_core.add_message(x_return_status);
6296 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
6297 l_num_warn := l_num_warn + 1;
6298 END IF;
6299
6300 l_mdc_index_i := 0;
6301 FOR dg IN del_legs(p_del_rows(i)) LOOP
6302 --
6303 -- Debug Statements
6304 --
6305 --
6306 -- K: MDC Remove the delivery from the consol delivery and trip.
6307 IF dg.parent_delivery_id IS NOT NULL THEN
6308 l_mdc_cl_del_tab(1) := p_del_rows(i);
6309 l_mdc_co_del_tab.delete(i);
6310 WSH_NEW_DELIVERY_ACTIONS.Unassign_Dels_from_Consol_Del(
6311 p_parent_del => NULL,
6312 p_caller => p_caller,
6313 p_del_tab => l_mdc_cl_del_tab,
6314 x_return_status => l_return_status);
6315 l_mdc_cl_del_tab.delete;
6316 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6317 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6318 l_num_warn := l_num_warn + 1;
6319 ELSE
6320 x_return_status := l_return_status;
6321 goto confirm_error;
6322 END IF;
6323 END IF;
6324 END IF;
6325 IF l_debug_on THEN
6326 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.DELETE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
6327 END IF;
6328 wsh_delivery_legs_pvt.delete_delivery_leg
6329 (NULL, dg.delivery_leg_id, l_return_status);
6330 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6331 --Bug 2108310
6332 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6333 l_num_warn := l_num_warn + 1;
6334 ELSE
6335 x_return_status := l_return_status;
6336 goto confirm_error;
6337 END IF;
6338 --Bug 2108310
6339 END IF;
6340
6341 END LOOP;
6342 ELSE
6343 l_status_code(i) := 'CO';
6344 END IF;
6345
6346
6347 -- LASTLY, populated the delivery columns for bulk update
6348
6349 u_del_rows( u_del_rows.count + 1) := p_del_rows (i);
6350 u_status_code( u_del_rows.count ) := l_status_code(i);
6351 u_number_of_lpn( u_del_rows.count ) := l_number_of_lpn(i) ;
6352 u_initial_pickup_date( u_del_rows.count ) := l_initial_pickup_date(i);
6353 u_ultimate_dropoff_date( u_del_rows.count ) := l_ultimate_dropoff_date(i);
6354 /* H integration: 945 send document wrudge */
6355 u_organization_id( u_del_rows.count ) := l_organization_id;
6356 u_wsh_lines_exist( u_del_rows.count ) := l_wsh_lines_exist;
6357 --/==Workflow Changes
6358 IF (l_enable_sc_wf = 'Y') THEN
6359 l_scpod_wf_del_rows(l_scpod_wf_del_rows.count + 1) := u_del_rows.count;
6360 END IF;
6361 --==/
6362
6363 goto loop_end;
6364
6365 <<confirm_error>>
6366
6367 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
6368 --
6369 -- Debug Statements
6370 --
6371 IF l_debug_on THEN
6372 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6373 END IF;
6374 --
6375 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6376 wsh_util_core.add_message(x_return_status);
6377
6378 /* H integration: 940/945 wrudge */
6379 <<confirm_error_no_msg>>
6380 ROLLBACK TO SAVEPOINT confirm_delivery_sp;
6381 l_num_error := l_num_error + 1;
6382
6383 <<loop_end>>
6384 null;
6385
6386 l_error_exists := FALSE;
6387
6388 /* Bug 2761304: Changed the following conditon from '=' to '>='. */
6389
6390 IF (l_num_error >= 0) AND (l_wms_enabled_flag) THEN
6391 -- Bug 2942938: select all the 'W' message type from WSH_INTEGRATION.G_MSG_TABLE
6392 -- also select hold 'E' messages for WMS org, since hold errors
6393 -- bug 3455640 added 'WSH_INVALID_CATCHWEIGHT'
6394 -- should prevent the delivery from being ship confirmed, not just unassign
6395 -- the delivery details
6396 l_count := 0;
6397 FOR i in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6398 IF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'W' ) OR
6399 ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME in (
6400 'WSH_HEADER_HOLD_ERROR',
6401 'WSH_SHIP_LINE_HOLD_ERROR',
6402 'WSH_DET_CREDIT_HOLD_ERROR',
6403 'WSH_INVALID_CATCHWEIGHT') ) THEN
6404 l_count := l_count + 1;
6405 l_msg_table(l_count) := WSH_INTEGRATION.G_MSG_TABLE(i);
6406 IF l_debug_on THEN
6407 WSH_DEBUG_SV.logmsg(l_module_name,'Msg '||i||' : '||WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE||' '||WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME,WSH_DEBUG_SV.C_PROC_LEVEL);
6408 END IF;
6409 END IF;
6410 END LOOP;
6411 -- Call WMS api to process the table of l_msg_table only for wms enabled org
6412 -- WMS: pass warnings to WMS for processing:
6413 WMS_SHIPPING_MESSAGES.PROCESS_SHIPPING_WARNING_MSGS(x_return_status => l_return_status ,
6414 x_msg_count => l_msg_count ,
6415 x_msg_data => l_msg_data,
6416 p_commit => FND_API.g_false,
6417 x_shipping_msg_tab => l_msg_table);
6418
6419 -- Check if there exists an 'E' message in the l_msg_table
6420 -- If there is then turn the message type to 'E' for the particular message name in
6421 -- WSH_INTEGRATION.G_MSG_TABLE
6422 FOR i in 1..l_msg_table.count LOOP
6423 IF ( l_msg_table(i).MESSAGE_TYPE = 'E' ) THEN
6424 l_error_exists := TRUE;
6425 FOR j in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6426 IF (l_msg_table(i).message_name = WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_NAME) THEN
6427 WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_TYPE := 'E';
6428 END IF;
6429 END LOOP;
6430 END IF;
6431 END LOOP;
6432 l_msg_table.delete;
6433 END IF;
6434 -- Call Store_Msg_In_Table Api to push the messages in WSH_INTEGRATION.G_MSG_TABLE to fnd stack
6435 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
6436 x_msg_rec_count => l_msg_rec_count,
6437 x_return_status => l_return_status);
6438 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6439 raise ship_confirm_error;
6440 END IF;
6441 -- If there is no Shipping error but WMS has turned one of the Warning to Error then set the l_num_error
6442 IF ( (l_num_error = 0) AND (l_error_exists) )THEN
6443 l_num_error := nvl(l_msg_rec_count.e_count,0) + nvl(l_msg_rec_count.u_count,0);
6444 END IF;
6445
6446 end loop ;
6447
6448 --delete the hash trip_ids stored
6449 G_HASH_TRIP.delete;
6450
6451 -- Bug 2074768 : Check for tolerances now that all the delivery lines for all the deliveries have been updated.
6452 -- The need to check tolerances here arises because now we have all the deliveries that really will
6453 -- be ship confirmed.
6454 IF l_debug_on THEN
6455 WSH_DEBUG_SV.log(l_module_name,'p_del_rows count', p_del_rows.count);
6456 END IF;
6457
6458 FOR i IN 1..p_del_rows.count LOOP
6459
6460 -- HW OPM added l_max_quantity2
6461 --
6462 -- Debug Statements
6463 --
6464 IF l_debug_on THEN
6465 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DELIVERY_FOR_TOLERANCES',WSH_DEBUG_SV.C_PROC_LEVEL);
6466 END IF;
6467 --
6468 wsh_Delivery_validations.check_delivery_for_tolerances (
6469 p_delivery_id => p_del_rows(i) ,
6470 x_source_line_id => l_temp_line_id ,
6471 x_source_code => l_temp_source_code ,
6472 x_max_quantity => l_max_quantity ,
6473 x_max_quantity2 => l_max_quantity2 ,
6474 x_return_status => l_return_status ) ;
6475
6476 if ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) then
6477 x_return_status := l_return_Status ;
6478 wsh_util_core.add_message(x_return_status);
6479 l_num_error := l_num_error + 1;
6480 l_delivery_id := p_del_rows(i);
6481 raise ship_confirm_error ;
6482 end if ;
6483
6484 -- Close Exceptions for the Delivery
6485 IF l_debug_on THEN
6486 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
6487 END IF;
6488 WSH_XC_UTIL.Close_Exceptions (
6489 p_api_version => 1.0,
6490 x_return_status => l_return_status,
6491 x_msg_count => l_msg_count,
6492 x_msg_data => l_msg_data,
6493 p_logging_entity_id => p_del_rows(i),
6494 p_logging_entity_name => 'DELIVERY',
6495 p_consider_content => 'Y'
6496 ) ;
6497
6498 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
6499 x_return_status := l_return_status;
6500 wsh_util_core.add_message(x_return_status);
6501 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6502 l_num_error := l_num_error + 1 ;
6503 l_delivery_id := p_del_rows(i);
6504 raise ship_confirm_error;
6505 ELSE
6506 l_num_warn := l_num_warn + 1 ;
6507 END IF;
6508 END IF;
6509
6510
6511
6512 END LOOP ;
6513
6514 -- Create trip from deconsol location to ultimate drop off
6515 -- consol deliveriers.
6516 IF l_debug_on THEN
6517 WSH_DEBUG_SV.log(l_module_name,'l_mdc_co_del_tab count', l_mdc_co_del_tab.count);
6518 END IF;
6519
6520 IF l_mdc_co_del_tab.count > 0 THEN
6521
6522 Create_Deconsol_Trips(p_deliveries_tab => u_del_rows,
6523 x_return_status => l_return_status);
6524
6525 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6526 raise ship_confirm_error;
6527 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6528 l_num_warn := l_num_warn + 1;
6529 END IF;
6530
6531
6532 END IF;
6533
6534 -- 19.55 Generate BOL if p_bol_flag is set
6535 -- 2121399
6536 -- Moved Create_Bol and Print_document_sets APIs outside the main For Loop and
6537 -- and placed it after the call to Check_Delivery_for_tolerances is made.
6538 IF l_debug_on THEN
6539 WSH_DEBUG_SV.log(l_module_name,'u_del_rows count', u_del_rows.count);
6540 END IF;
6541
6542 FOR i IN 1..u_del_rows.count LOOP
6543
6544 IF l_debug_on THEN
6545 WSH_DEBUG_SV.log(l_module_name,'i', i);
6546 WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag count', l_with_mc_trip_flag.count);
6547 WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab count', l_unassign_all_flag_tab.count);
6548 WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6549 WSH_DEBUG_SV.log(l_module_name,'u_del_rows i', u_del_rows(i));
6550 END IF;
6551
6552 OPEN del_legs (u_del_rows(i));
6553 FETCH del_legs INTO l_pickup_stop_id, l_dropoff_stop_id, l_delivery_leg_id, l_parent_delivery_id;
6554 CLOSE del_legs;
6555
6556 IF l_debug_on THEN
6557 WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id', l_pickup_stop_id);
6558 WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id', l_dropoff_stop_id);
6559 WSH_DEBUG_SV.log(l_module_name,'l_delivery_leg_id', l_delivery_leg_id);
6560 WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6561 END IF;
6562
6563 --Bug 5255366 (The above cursor can fetch parent-del-id of newly created trip hence can be null)
6564 -- (Hence the second fetch is required)
6565 IF l_parent_delivery_id IS NULL THEN
6566
6567 IF l_debug_on THEN
6568 WSH_DEBUG_SV.log(l_module_name,'p_del_rows i', p_del_rows(i));
6569 END IF;
6570
6571 OPEN get_consol_del(p_del_rows(i));
6572 FETCH get_consol_del
6573 INTO l_parent_delivery_id;
6574 CLOSE get_consol_del;
6575 END IF;
6576
6577 IF l_debug_on THEN
6578 WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6579 END IF;
6580
6581 --Bug 3685366
6582 l_dummy_doc_set(1).bol_error_flag:='N';
6583 --
6584
6585 IF l_debug_on THEN
6586 WSH_DEBUG_SV.log(l_module_name,'p_bol_flag', p_bol_flag);
6587 WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag', l_with_mc_trip_flag(i));
6588 WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab', l_unassign_all_flag_tab(i));
6589 WSH_DEBUG_SV.log(l_module_name,'p_mc_bol_flag', p_mc_bol_flag);
6590 END IF;
6591
6592 IF ((p_bol_flag ='Y') AND (NOT l_with_mc_trip_flag(i)) AND (NOT l_unassign_all_flag_tab(i)) AND (l_pickup_stop_id IS NOT NULL)) THEN
6593
6594 --Bug 5255366
6595 IF l_parent_delivery_id IS NOT NULL THEN
6596 create_bol( p_delivery_id => l_parent_delivery_id,
6597 x_return_status => l_return_status);
6598 ELSE
6599 create_bol( p_delivery_id => u_del_rows(i),
6600 x_return_status => l_return_status);
6601 END IF;
6602
6603 IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6604
6605 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6606 l_num_error := l_num_error + 1;
6607 ELSE
6608 --Bug 3685366
6609 l_dummy_doc_set(1).bol_error_flag:='Y';
6610 --
6611 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6612 --
6613 -- Debug Statements
6614 --
6615 IF l_debug_on THEN
6616 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6617 END IF;
6618 --
6619
6620 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6621 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6622 wsh_util_core.add_message(x_return_status);
6623 l_num_warn := l_num_warn + 1;
6624 END IF;
6625 END IF;
6626
6627 ELSIF ((p_mc_bol_flag ='Y') AND l_with_mc_trip_flag(i) AND (NOT l_unassign_all_flag_tab(i)) AND (l_pickup_stop_id IS NOT NULL)) THEN
6628
6629 --Bug 5255366
6630 IF l_parent_delivery_id IS NOT NULL THEN
6631 create_bol( p_delivery_id => l_parent_delivery_id,
6632 x_return_status => l_return_status);
6633 ELSE
6634 create_bol( p_delivery_id => u_del_rows(i),
6635 x_return_status => l_return_status);
6636 END IF;
6637
6638 IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6639
6640 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6641 l_num_error := l_num_error + 1;
6642 ELSE
6643
6644 -- Bug 3685366
6645 l_dummy_doc_set(1).bol_error_flag:='Y';
6646 --
6647
6648 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6649 --
6650 -- Debug Statements
6651 --
6652
6653 IF l_debug_on THEN
6654 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6655 END IF;
6656 --
6657 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6658 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6659 wsh_util_core.add_message(x_return_status);
6660 l_num_warn := l_num_warn + 1;
6661 END IF;
6662 END IF;
6663
6664 END IF;
6665
6666 IF l_debug_on THEN
6667 WSH_DEBUG_SV.logmsg(l_module_name,'print doc set');
6668 END IF;
6669
6670 --19.6. Print document set if p_report_set_id is specified
6671
6672 IF (l_document_set_id IS NOT NULL) AND (NOT l_unassign_all_flag_tab(i)) THEN
6673
6674 l_del_tmp_rows.delete;
6675 --Bug 5255366
6676 IF l_parent_delivery_id IS NOT NULL THEN
6677 l_del_tmp_rows(1) := l_parent_delivery_id;
6678 ELSE
6679 l_del_tmp_rows(1) := u_del_rows(i);
6680 END IF;
6681
6682 -- Start of bugfix 4493263
6683 OPEN c_delv_trip_id_cursor(l_del_tmp_rows(1));
6684 LOOP
6685 FETCH c_delv_trip_id_cursor INTO l_dummy_doc_set(1).p_trip_id;
6686 EXIT WHEN c_delv_trip_id_cursor%NOTFOUND;
6687 --
6688 IF l_debug_on THEN
6689 WSH_DEBUG_SV.log(l_module_name, 'Trip Id : ', l_dummy_doc_set(1).p_trip_id );
6690 END IF;
6691 --
6692 END LOOP;
6693 CLOSE c_delv_trip_id_cursor;
6694 -- End of bugfix 4493263
6695 --
6696 -- Debug Statements
6697 --
6698 IF(l_parent_delivery_id IS NOT NULL) THEN
6699 IF (l_consol_del_doc_set.COUNT >0 AND(l_consol_del_doc_set.EXISTS(l_parent_delivery_id))) THEN
6700 l_content_del_flag := FALSE;
6701 END IF;
6702 END IF;
6703 IF l_content_del_flag THEN
6704 IF l_debug_on THEN
6705 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_SETS.PRINT_DOCUMENT_SETS',WSH_DEBUG_SV.C_PROC_LEVEL);
6706 END IF;
6707 --
6708 wsh_document_sets.print_document_sets(
6709 p_report_set_id => l_document_set_id ,
6710 p_organization_id => NULL,
6711 p_trip_ids => l_dummy_rows1,
6712 p_stop_ids => l_dummy_rows1,
6713 p_delivery_ids => l_del_tmp_rows,
6714 p_document_param_info => l_dummy_doc_set,
6715 x_return_status => l_return_status);
6716
6717 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6718 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6719 l_num_error := l_num_error + 1;
6720 ELSE
6721 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DOC_SUB_ERROR');
6722 --
6723 -- Debug Statements
6724 --
6725 IF l_debug_on THEN
6726 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6727 END IF;
6728 --
6729 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6730 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6731 wsh_util_core.add_message(x_return_status);
6732 l_num_warn := l_num_warn + 1;
6733 END IF;
6734 END IF;
6735 END IF;
6736 END IF;
6737
6738 --Bug 5255366 (Storing Consol-del-Id in a tab so that multiple Doc set firing is avoided)
6739 IF l_parent_delivery_id IS NOT NULL THEN
6740 IF (NOT l_consol_del_doc_set.EXISTS(l_parent_delivery_id)) THEN
6741 l_consol_del_doc_set(l_parent_delivery_id) := l_parent_delivery_id;
6742 END IF;
6743 END IF;
6744 --J TP Release : If TP is installed, confirmed delivery has to be planned
6745 --tkt
6746 IF (NOT l_unassign_all_flag_tab(i) and wsh_util_core.TP_IS_INSTALLED='Y') THEN
6747
6748 l_del_tmp_rows.delete;
6749 l_del_tmp_rows(1) := u_del_rows(i);
6750
6751 IF l_debug_on THEN
6752 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
6753 END IF;
6754
6755 PLAN(p_del_rows => l_del_tmp_rows,
6756 x_return_status => l_return_status,
6757 p_called_for_sc => TRUE);
6758
6759 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6760 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6761 l_num_error := l_num_error + 1;
6762 ELSE
6763 IF l_debug_on THEN
6764 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6765 END IF;
6766 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6767 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6768 wsh_util_core.add_message(x_return_status);
6769 l_num_warn := l_num_warn + 1;
6770 END IF;
6771 END IF;
6772
6773 END IF;
6774
6775 IF l_debug_on THEN
6776 WSH_DEBUG_SV.log(l_module_name,'l_itm_exc_flag count', l_itm_exc_flag.count);
6777 END IF;
6778
6779 IF l_itm_exc_flag(u_del_rows(i)) = 'Y' THEN
6780
6781 IF l_debug_on THEN
6782 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',WSH_DEBUG_SV.C_PROC_LEVEL);
6783 END IF;
6784
6785 WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception
6786 (p_delivery_id => u_del_rows(i),
6787 p_action_type => 'SHIP_CONFIRM',
6788 p_ship_from_location_id => l_ship_from_location,
6789 x_return_status => l_return_status);
6790
6791 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6792 l_num_error := l_num_error + 1 ;
6793 l_delivery_id := u_del_rows(i);
6794 raise ship_confirm_error;
6795 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6796 l_num_warn := l_num_warn + 1;
6797 END IF;
6798
6799 END IF;
6800
6801 --
6802 -- Debug Statements
6803 --
6804 IF l_debug_on THEN
6805 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
6806 END IF;
6807 --
6808 wsh_new_delivery_actions.update_leg_sequence(
6809 p_delivery_id => u_del_rows(i),
6810 x_return_status => l_return_status);
6811
6812 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6813 l_num_error := l_num_error + 1 ;
6814 l_delivery_id := u_del_rows(i);
6815 raise ship_confirm_error;
6816 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6817 l_num_warn := l_num_warn + 1;
6818 END IF;
6819
6820
6821
6822 END LOOP ; ---key loop
6823
6824
6825
6826
6827
6828 --/== Workflow Changes
6829 IF (p_intransit_flag = 'N') THEN
6830 l_defer_interface_flag := 'Y';
6831 ELSE
6832 l_defer_interface_flag := p_defer_interface_flag;
6833 END IF;
6834 --==/
6835
6836 -- 2121399
6837
6838 IF l_debug_on THEN
6839 WSH_DEBUG_SV.log(l_module_name,'u_number_of_lpn count', l_with_mc_trip_flag.count);
6840 WSH_DEBUG_SV.log(l_module_name,'u_initial_pickup_date count', u_initial_pickup_date.count);
6841 WSH_DEBUG_SV.log(l_module_name,'u_ultimate_dropoff_date count', u_ultimate_dropoff_date.count);
6842 WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6843 END IF;
6844
6845 -- BULK UPDATE FOR ALL DELIVERIES IN p_del_rows
6846
6847 -- Update the delivery record with status code and confirm date
6848 -- 2052673 - modified the way in which the number_of_lpn is being updated.
6849 -- 2335270 included last_updated_by and last_update_login
6850 FORALL i IN 1..u_del_rows.count
6851 UPDATE wsh_new_deliveries
6852 SET status_code = u_status_code(i),
6853 confirm_date = sysdate,
6854 confirmed_by = nvl(confirmed_by, l_user_name),
6855 -- number_of_lpn = decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)) , --Bug 1729723
6856 number_of_lpn = decode(number_of_lpn, null, decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)), number_of_lpn),
6857 initial_pickup_date = u_initial_pickup_date(i) ,
6858 ultimate_dropoff_date = u_ultimate_dropoff_date(i) ,
6859 --OTM R12, when setting delivery to closed, set the tms flag
6860 TMS_INTERFACE_FLAG = DECODE(l_gc3_is_installed,
6861 'Y', DECODE(NVL(u_status_code(i), 'XXXXX'),
6862 'CL', DECODE(NVL(tms_interface_flag,
6863 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
6864 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
6865 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
6866 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
6867 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
6868 WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
6869 NVL(tms_interface_flag,
6870 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
6871 NVL(tms_interface_flag,
6872 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
6873 --END OTM R12
6874 last_update_date = SYSDATE ,
6875 last_updated_by = l_user_id,
6876 last_update_login = l_login_id,
6877 --/==Workflow Changes
6878 del_wf_intransit_attr = decode(p_intransit_flag,'Y','I','X'),
6879 del_wf_close_attr = decode(p_close_flag,'Y','I','X'),
6880 del_wf_interface_attr = decode(l_defer_interface_flag,'N','I','X')
6881 --==/
6882 WHERE delivery_id = u_del_rows(i);
6883
6884 IF l_mdc_co_del_tab.count > 0 THEN
6885
6886 Confirm_Consolidation_Delivery(
6887 p_consol_del_tab => l_mdc_co_del_tab,
6888 x_return_status => l_return_status);
6889
6890 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6891 raise ship_confirm_error;
6892 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6893 l_num_warn := l_num_warn + 1;
6894 END IF;
6895
6896 END IF;
6897
6898
6899 --/== Workflow Changes - Controlling Workflow
6900 IF l_debug_on THEN
6901 WSH_DEBUG_SV.log(l_module_name,'L_ENABLE_SC_WF',l_enable_sc_wf);
6902 WSH_DEBUG_SV.log(l_module_name,'Controlling-scpod rows count',l_scpod_wf_del_rows.count);
6903 END IF;
6904 FOR k IN 1..l_scpod_wf_del_rows.count LOOP
6905 l_ctr := l_scpod_wf_del_rows(k);
6906 IF l_debug_on THEN
6907 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_SCPOD_C_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
6908 END IF;
6909
6910 WSH_WF_STD.Start_Scpod_C_Process( p_entity_id => u_del_rows(l_ctr),
6911 p_organization_id => u_organization_id(l_ctr),
6912 x_process_started => l_process_started,
6913 x_return_status => l_return_status);
6914 IF l_debug_on THEN
6915 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
6916 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
6917 END IF;
6918
6919 IF (l_process_started = 'Y' OR l_process_started = 'E') THEN
6920 l_aname_text(l_aname_text.COUNT + 1) := 'INTRANSIT_FLAG';
6921 l_avalue_text(l_avalue_text.COUNT + 1) := P_INTRANSIT_FLAG;
6922 l_aname_text(l_aname_text.COUNT + 1) := 'ACTION_FLAG';
6923 l_avalue_text(l_avalue_text.COUNT + 1) := P_ACTION_FLAG;
6924 l_aname_text(l_aname_text.COUNT + 1) := 'CLOSE_TRIP_FLAG';
6925 l_avalue_text(l_avalue_text.COUNT + 1) := P_CLOSE_FLAG;
6926 l_aname_text(l_aname_text.COUNT + 1) := 'STAGE_DEL_FLAG';
6927 l_avalue_text(l_avalue_text.COUNT + 1) := P_STAGE_DEL_FLAG;
6928 l_aname_text(l_aname_text.COUNT + 1) := 'SEND_945_FLAG';
6929 l_avalue_text(l_avalue_text.COUNT + 1) := P_SEND_945_FLAG;
6930 l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_BOL_FLAG';
6931 l_avalue_text(l_avalue_text.COUNT + 1) := P_BOL_FLAG;
6932 l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_MC_BOL_FLAG';
6933 l_avalue_text(l_avalue_text.COUNT + 1) := P_MC_BOL_FLAG;
6934 l_aname_text(l_aname_text.COUNT + 1) := 'SHIP_METHOD_CODE';
6935 l_avalue_text(l_avalue_text.COUNT + 1) := p_ship_method;
6936 l_aname_text(l_aname_text.COUNT + 1) := 'DEFER_INTERFACE_FLAG';
6937 l_avalue_text(l_avalue_text.COUNT + 1) := l_defer_interface_flag;
6938
6939
6940 WF_ENGINE.SetItemAttrTextArray(
6941 itemtype => 'WSHDEL',
6942 itemkey => u_del_rows(l_ctr),
6943 aname => l_aname_text,
6944 avalue => l_avalue_text);
6945
6946 l_aname_num(l_aname_num.COUNT + 1) := 'REPORT_SET_ID';
6947 l_avalue_num(l_avalue_num.COUNT + 1) := P_REPORT_SET_ID;
6948
6949 WF_ENGINE.SetItemAttrNumberArray(
6950 itemtype => 'WSHDEL',
6951 itemkey => u_del_rows(l_ctr),
6952 aname => l_aname_num,
6953 avalue => l_avalue_num);
6954
6955 WF_ENGINE.SetItemAttrDate(
6956 itemtype => 'WSHDEL',
6957 itemkey => u_del_rows(l_ctr),
6958 aname => 'ACTUAL_DATE',
6959 avalue => P_ACTUAL_DEP_DATE);
6960
6961 FND_MESSAGE.SET_NAME('WSH','WSH_WF_SCPOD_LAUNCHED');
6962 FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(l_ctr)));
6963 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS,l_module_name);
6964
6965 END IF;
6966 END LOOP;
6967 -- Workflow Changes ==/
6968
6969 FOR z IN 1..u_del_rows.count LOOP
6970 IF l_debug_on THEN
6971 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.Raise_Event',WSH_DEBUG_SV.C_PROC_LEVEL);
6972 END IF;
6973
6974 WSH_WF_STD.Raise_Event(
6975 p_entity_type => 'DELIVERY',
6976 p_entity_id => u_del_rows(z),
6977 p_event => 'oracle.apps.wsh.delivery.gen.shipconfirmed',
6978 p_organization_id => u_organization_id(z),
6979 x_return_status => l_wf_rs);
6980 IF l_debug_on THEN
6981 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
6982 END IF;
6983
6984 END LOOP;
6985
6986 /* H integration: 945 send document wrudge */
6987 -- Send outbound documents if enabled and deliveries have WSH lines.
6988 IF p_send_945_flag = 'Y' THEN
6989
6990 FOR i IN 1..u_del_rows.count LOOP
6991 IF u_wsh_lines_exist(i) > 0 THEN
6992 --
6993 -- Debug Statements
6994 --
6995 IF l_debug_on THEN
6996 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRANSACTIONS_UTIL.SEND_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
6997 END IF;
6998 --
6999 wsh_transactions_util.send_document(
7000 p_entity_id => u_del_rows(i),
7001 p_entity_type => 'DLVY',
7002 p_action_type => 'A',
7003 p_document_type => 'SA',
7004 p_organization_id => u_organization_id(i),
7005 x_return_status => l_return_status);
7006 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7007 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7008 l_num_error := l_num_error + 1;
7009 ELSE
7010 /* new message: WSH_DEL_OUTBOUND_FAILED, token DEL_NAME */
7011 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_OUTBOUND_FAILED');
7012 --
7013 -- Debug Statements
7014 --
7015 IF l_debug_on THEN
7016 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7017 END IF;
7018 --
7019 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
7020 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7021 wsh_util_core.add_message(x_return_status);
7022 l_num_warn := l_num_warn + 1;
7023 END IF;
7024 END IF;
7025 END IF; -- u_wsh_lines_exist(i) > 0
7026 END LOOP;
7027
7028 END IF; -- p_send_945_flag = 'Y'
7029
7030
7031
7032 -- Remove stops that have deliveries with ITM exceptions logged
7033 -- against them from the table of stops to be closed.
7034
7035 if u_stop_rows.count > 0 then
7036
7037 FOR i IN u_stop_rows.FIRST .. u_stop_rows.LAST LOOP
7038
7039 IF l_itm_stops_tab.exists(u_stop_rows(i)) THEN
7040
7041 u_stop_rows.delete(i);
7042
7043 END IF;
7044
7045 END LOOP;
7046
7047 END IF;
7048
7049 -- Close the Autocreated Trip-Stops
7050
7051 if u_stop_rows.count > 0 then
7052
7053 IF l_debug_on THEN
7054 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7055 END IF;
7056 --
7057 wsh_trip_stops_actions.change_status(
7058 p_stop_rows => u_stop_rows,
7059 p_action => 'CLOSE',
7060 p_actual_date => nvl(p_actual_dep_date,sysdate),
7061 p_defer_interface_flag => p_defer_interface_flag, -- bug 1578251
7062 x_return_status => l_return_status,
7063 --tkt
7064 p_caller => p_caller);
7065
7066 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7067 x_return_status := l_return_status;
7068 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7069 l_num_warn := l_num_warn + 1;
7070 ELSE
7071 l_num_error := l_num_error + 1;
7072 END IF;
7073 END IF;
7074
7075 End if ;
7076
7077 -- LPN CONV rv
7078 -- Need to delete all the WMS LPNs that were unassigned and unpacked during Ship Confirm
7079 --
7080 IF (l_wms_enabled_flag) THEN
7081 --{
7082 for l_delete_cnt_rec in l_delete_wms_empty_cnt_csr loop
7083 --{
7084 --
7085 --
7086 -- Debug Statements
7087 --
7088 IF l_debug_on THEN
7089 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.DELETE_CONTAINERS',WSH_DEBUG_SV.C_PROC_LEVEL);
7090 END IF;
7091 --
7092 wsh_container_actions.delete_containers (
7093 p_container_id => l_delete_cnt_rec.delivery_detail_id,
7094 x_return_status => l_return_status);
7095 --
7096 --
7097 -- Debug Statements
7098 --
7099 IF l_debug_on THEN
7100 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
7101 END IF;
7102 --
7103 wsh_util_core.api_post_call(
7104 p_return_status => l_return_status,
7105 x_num_warnings => l_num_error,
7106 x_num_errors => l_num_warn,
7107 p_raise_error_flag => FALSE);
7108 --
7109 --}
7110 end loop;
7111 --}
7112 END IF;
7113
7114 -- 20. set summary messages for warnings and errors
7115
7116 IF (l_num_error > 0) THEN
7117 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7118 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7119 wsh_util_core.add_message(x_return_status);
7120 rollback to savepoint start_ship_confirm_delivery;
7121
7122 ELSE
7123
7124 -- Set Message as Number of Deliveries as Confirmed, In-Transit and Closed
7125 IF ( l_close_del_cnt <> 0 ) THEN
7126
7127 FND_MESSAGE.SET_NAME('WSH','WSH_CL_DELIVERIES');
7128 FND_MESSAGE.SET_TOKEN('CL_DEL',l_close_del_cnt);
7129 wsh_util_core.add_message(x_return_status);
7130
7131 END IF;
7132
7133 IF (l_confirm_del_cnt <> 0) THEN
7134
7135 FND_MESSAGE.SET_NAME('WSH','WSH_CO_DELIVERIES');
7136 FND_MESSAGE.SET_TOKEN('CO_DEL',l_confirm_del_cnt);
7137 wsh_util_core.add_message(x_return_status);
7138
7139 END IF;
7140
7141 if (l_num_warn > 0) THEN
7142 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7143 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7144 wsh_util_core.add_message(x_return_status);
7145 elsif (p_del_rows.count > 1) THEN
7146 -- bug 2523074 (frontported bug 2508132):
7147 -- if multiple deliveries are processed, show summary message,
7148 -- so that the user does not think the first message (e.g.,
7149 -- request number) applies to all deliveries.
7150 FND_MESSAGE.SET_NAME('WSH', 'WSH_DEL_CONFIRM_SUCCESS');
7151 wsh_util_core.add_message(x_return_status);
7152 else
7153 FND_MESSAGE.SET_NAME('WSH', 'WSH_ONE_DEL_CONFIRM_SUCCESS');
7154 wsh_util_core.add_message(x_return_status);
7155 end if;
7156 END IF;
7157
7158 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7159 x_msg_rec_count => l_msg_rec_count,
7160 x_return_status => l_return_status);
7161 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7162 raise ship_confirm_error;
7163 END IF;
7164
7165 --
7166 -- Debug Statements
7167 --
7168 IF l_debug_on THEN
7169 WSH_DEBUG_SV.pop(l_module_name);
7170 END IF;
7171 --
7172 EXCEPTION
7173 WHEN FND_API.G_EXC_ERROR THEN
7174
7175 IF (Get_Trip%ISOPEN) THEN
7176 CLOSE Get_Trip;
7177 END IF;
7178
7179 IF (get_delivery_name%ISOPEN) THEN
7180 CLOSE get_delivery_name;
7181 END IF;
7182
7183 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7184 --
7185 IF l_debug_on THEN
7186 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7187 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7188 END IF;
7189 --
7190 WHEN ship_confirm_error THEN
7191
7192 IF (Get_Trip%ISOPEN) THEN
7193 CLOSE Get_Trip;
7194 END IF;
7195
7196 IF (get_delivery_name%ISOPEN) THEN
7197 CLOSE get_delivery_name;
7198 END IF;
7199
7200 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
7201 --
7202 -- Debug Statements
7203 --
7204 IF l_debug_on THEN
7205 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7206 END IF;
7207 --
7208 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
7209 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7210 wsh_util_core.add_message(x_return_status);
7211 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7212 x_msg_rec_count => l_msg_rec_count,
7213 x_return_status => l_return_status);
7214
7215 --
7216 -- Debug Statements
7217 --
7218 IF l_debug_on THEN
7219 WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_CONFIRM_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7220 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_CONFIRM_ERROR');
7221 END IF;
7222 --
7223 WHEN record_locked THEN
7224
7225 IF (Get_Trip%ISOPEN) THEN
7226 CLOSE Get_Trip;
7227 END IF;
7228
7229 IF (get_delivery_name%ISOPEN) THEN
7230 CLOSE get_delivery_name;
7231 END IF;
7232
7233 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
7234 wsh_util_core.add_message(x_return_status);
7235 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7236 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7237 x_msg_rec_count => l_msg_rec_count,
7238 x_return_status => l_return_status);
7239
7240 --
7241 -- Debug Statements
7242 --
7243 IF l_debug_on THEN
7244 WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7245 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
7246 END IF;
7247 --
7248 WHEN others THEN
7249
7250 IF (Get_Trip%ISOPEN) THEN
7251 CLOSE Get_Trip;
7252 END IF;
7253
7254 IF (get_delivery_name%ISOPEN) THEN
7255 CLOSE get_delivery_name;
7256 END IF;
7257
7258 IF get_del_first_trip%isopen THEN
7259 CLOSE get_del_first_trip;
7260 END IF;
7261 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CONFIRM_DELIVERY');
7262 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7263
7264 --
7265 -- Debug Statements
7266 --
7267 IF l_debug_on THEN
7268 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR : ' || SQLERRM );
7269 END IF;
7270 --
7271 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7272 x_msg_rec_count => l_msg_rec_count,
7273 x_return_status => l_return_status);
7274
7275 --
7276 -- Debug Statements
7277 --
7278 IF l_debug_on THEN
7279 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7280 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7281 END IF;
7282 --
7283 END Confirm_Delivery ;
7284
7285
7286 -- J-IB-NPARIKH---{
7287 --
7288 --========================================================================
7289 -- PROCEDURE : setInTransit
7290 --
7291 -- PARAMETERS: p_in_rec Delivery information record
7292 -- x_return_status Return status of the API
7293 --
7294 -- COMMENT : This procedure sets delivery to in-transit.
7295 -- This is called by stop close API/Group API
7296 --
7297 -- It performs the following steps:
7298 -- 01. Update delivery lines to status "C"
7299 -- 02. For containers, update shipped quantity to 1
7300 -- 03. Update INV/OE interface flag to N for non-containers
7301 -- 04. Update INV/OE interface flag to Null for containers
7302 -- 05. Update delivery status to IT
7303 -- 06. Update delivery initial pickup date to actual departure date of stop
7304 -- 07. Update delivery ultimate dropoff date based on actual departure date of stop
7305 -- 08. Close delivery exceptions (Pack J Exceptions project)
7306 --
7307 --========================================================================
7308 --
7309 PROCEDURE setInTransit
7310 (
7311 p_in_rec IN WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7312 x_return_status OUT NOCOPY VARCHAR2
7313 )
7314 IS
7315 --{
7316 l_user_id NUMBER;
7317 l_login_id NUMBER;
7318 l_num_warnings NUMBER;
7319 l_num_errors NUMBER;
7320 --
7321
7322 l_msg_count NUMBER;
7323 l_msg_data VARCHAR2(4000);
7324 l_return_status VARCHAR2(1);
7325
7326 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
7327 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
7328
7329 --/== Workflow Changes
7330 l_org_id NUMBER;
7331 l_wf_rs VARCHAR2(1);
7332 l_override_wf VARCHAR2(1);
7333 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7334 l_purged_count NUMBER;
7335 --==/
7336
7337 -- LPN CONV. rv
7338 cursor l_get_cnt_attr_csr(p_delivery_id IN NUMBER) is
7339 select wdd.organization_id organization_id,
7340 nvl(wdd.line_direction,'O') line_direction,
7341 wdd.delivery_detail_id delivery_detail_id
7342 from wsh_delivery_assignments_v wda,
7343 wsh_delivery_details wdd
7344 where wda.delivery_detail_id = wdd.delivery_detail_id
7345 and wdd.container_flag IN ('Y','C')
7346 and nvl(wdd.line_direction,'O') IN ('O', 'IO')
7347 and wda.delivery_id = p_delivery_id;
7348
7349 l_wms_org VARCHAR2(10);
7350 l_sync_tmp_wms_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7351 l_sync_tmp_inv_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7352
7353 l_child_cnt_counter NUMBER;
7354 l_cnt_wms_counter NUMBER;
7355 l_cnt_inv_counter NUMBER;
7356 -- LPN CONV. rv
7357
7358 l_debug_on BOOLEAN;
7359 --
7360 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setInTransit';
7361 --}
7362 BEGIN
7363 --{
7364 --SAVEPOINT dlvy_setInTransit_begin_sp;
7365 --
7366 -- Debug Statements
7367 --
7368 --
7369 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7370 --
7371 IF l_debug_on IS NULL
7372 THEN
7373 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7374 END IF;
7375 --
7376 IF l_debug_on THEN
7377 WSH_DEBUG_SV.push(l_module_name);
7378 --
7379 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7380 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name ', p_in_rec.name );
7381 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7382 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7383 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7384 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller ', p_in_rec.caller );
7385 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7386 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id ', p_in_rec.stop_id );
7387 END IF;
7388 --
7389 l_user_id := FND_GLOBAL.user_id;
7390 l_login_id := FND_GLOBAL.login_id;
7391 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7392 l_num_warnings := 0;
7393 l_num_errors := 0;
7394
7395 --
7396 --
7397 -- Bug: 1563304 : Update all its delivery_details to 'C'
7398 -- Bug 1578251: update interfaced_flags = 'N' to improve
7399 -- performance in filtering records ready to interface
7400 -- but not yet interfaced.
7401 /* H Integration: 940/945 do not update cancelled delivery lines wrudge */
7402 -- Bug 2335270 : last_update_date = SYSDATE is included in
7403 -- the update statement
7404 --
7405 -- LPN CONV. rv
7406 --
7407 --
7408 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7409 THEN
7410 --{
7411 --l_child_cnt_counter := 1;
7412 l_cnt_wms_counter := 1;
7413 l_cnt_inv_counter := 1;
7414 FOR child_cnt_rec in l_get_cnt_attr_csr(p_in_rec.delivery_id) LOOP
7415 --{
7416 --
7417 IF l_debug_on THEN
7418 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
7419 END IF;
7420 --
7421 l_wms_org := wsh_util_validate.check_wms_org(child_cnt_rec.organization_id);
7422 --
7423
7424 IF(l_wms_org = 'Y') THEN
7425 l_sync_tmp_wms_recTbl.delivery_detail_id_tbl(l_cnt_wms_counter) := child_cnt_rec.delivery_detail_id;
7426 l_sync_tmp_wms_recTbl.operation_type_tbl(l_cnt_wms_counter) := 'UPDATE';
7427 l_cnt_wms_counter := l_cnt_wms_counter +1;
7428 ELSIF (l_wms_org = 'N') THEN
7429 l_sync_tmp_inv_recTbl.delivery_detail_id_tbl(l_cnt_inv_counter) := child_cnt_rec.delivery_detail_id;
7430 l_sync_tmp_inv_recTbl.operation_type_tbl(l_cnt_inv_counter) := 'UPDATE';
7431 l_cnt_inv_counter := l_cnt_inv_counter +1;
7432 END IF;
7433 --
7434 --}
7435 END LOOP;
7436 --
7437 IF l_debug_on THEN
7438 wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_wms_recTbl', l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count);
7439 wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_inv_recTbl', l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count);
7440 END IF;
7441 --
7442 IF (WSH_WMS_LPN_GRP.GK_WMS_UPD_STS OR WSH_WMS_LPN_GRP.GK_WMS_UPD_QTY)
7443 AND l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count > 0
7444 THEN
7445 --{
7446 --
7447 IF l_debug_on THEN
7448 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7449 END IF;
7450 --
7451 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7452 (
7453 p_sync_tmp_recTbl => l_sync_tmp_wms_recTbl,
7454 x_return_status => l_return_status
7455 );
7456 --
7457 IF l_debug_on THEN
7458 WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7459 END IF;
7460 --
7461 WSH_UTIL_CORE.API_POST_CALL
7462 (
7463 p_return_status => l_return_status,
7464 x_num_warnings => l_num_warnings,
7465 x_num_errors => l_num_errors
7466 );
7467 --
7468 --}
7469 ELSIF (WSH_WMS_LPN_GRP.GK_INV_UPD_STS OR WSH_WMS_LPN_GRP.GK_INV_UPD_QTY)
7470 AND l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count > 0
7471 THEN
7472 --{
7473 --
7474 IF l_debug_on THEN
7475 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7476 END IF;
7477 --
7478 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7479 (
7480 p_sync_tmp_recTbl => l_sync_tmp_inv_recTbl,
7481 x_return_status => l_return_status
7482 );
7483 --
7484 IF l_debug_on THEN
7485 WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7486 END IF;
7487 --
7488 WSH_UTIL_CORE.API_POST_CALL
7489 (
7490 p_return_status => l_return_status,
7491 x_num_warnings => l_num_warnings,
7492 x_num_errors => l_num_errors
7493 );
7494 --
7495 --}
7496 END IF;
7497 --}
7498 END IF;
7499 -- LPN CONV. rv
7500 UPDATE wsh_Delivery_details
7501 SET released_Status = 'C',
7502 shipped_quantity = DECODE(container_flag, 'Y', 1, shipped_quantity),
7503 inv_interfaced_flag = DECODE(container_flag, 'N', NVL(inv_interfaced_flag,'N'), NULL),
7504 oe_interfaced_flag = DECODE(container_flag, 'N', NVL(oe_interfaced_flag, 'N'), NULL),
7505 last_update_date = SYSDATE,
7506 last_updated_by = l_user_id,
7507 last_update_login = l_login_id
7508 WHERE delivery_detail_id IN (
7509 SELECT delivery_Detail_id
7510 FROM wsh_delivery_assignments_v
7511 WHERE delivery_id = p_in_rec.delivery_id
7512 )
7513 AND released_status <> 'D'
7514 RETURNING delivery_detail_id BULK COLLECT INTO l_detail_tab; -- Added for DBI Project
7515 --
7516 IF l_debug_on THEN
7517 WSH_DEBUG_SV.log(l_module_name,'Number of Lines updated',SQL%ROWCOUNT);
7518 END IF;
7519 --
7520 --
7521 -- DBI Project
7522 -- Update of wsh_delivery_details where requested_quantity/released_status
7523 -- are changed, call DBI API after the update.
7524 -- DBI API will check if DBI is installed
7525 IF l_debug_on THEN
7526 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_detail_tab.count);
7527 END IF;
7528 WSH_INTEGRATION.DBI_Update_Detail_Log
7529 (p_delivery_detail_id_tab => l_detail_tab,
7530 p_dml_type => 'UPDATE',
7531 x_return_status => l_dbi_rs);
7532
7533 IF l_debug_on THEN
7534 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7535 END IF;
7536 -- Only Handle Unexpected error
7537 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7538 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7539 END IF;
7540 -- End of Code for DBI Project
7541 --
7542 --
7543 UPDATE wsh_new_deliveries
7544 SET initial_pickup_date = p_in_rec.actual_date,
7545 ultimate_dropoff_date = GREATEST(
7546 NVL(ultimate_dropoff_date,p_in_rec.actual_date),
7547 p_in_rec.actual_date
7548 ),
7549 status_code = 'IT',
7550 last_update_date = SYSDATE ,
7551 last_updated_by = l_user_id,
7552 last_update_login = l_login_id
7553 WHERE delivery_id = p_in_rec.delivery_id
7554 RETURNING organization_id INTO l_org_id;
7555 --
7556 IF (SQL%NOTFOUND)
7557 THEN
7558 --{
7559 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7560 l_num_errors := l_num_errors + 1;
7561 wsh_util_core.add_message(x_return_status,l_module_name);
7562 --}
7563 ELSE
7564 --/== Workflow Changes
7565 l_del_entity_ids(1) := p_in_rec.delivery_id;
7566 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7567 IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7568 IF l_debug_on THEN
7569 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.LOG_WF_EXCEPTION', WSH_DEBUG_SV.C_PROC_LEVEL);
7570 END IF;
7571 WSH_WF_STD.Log_Wf_Exception(p_entity_type => 'DELIVERY',
7572 p_entity_id => p_in_rec.delivery_id,
7573 p_logging_entity => 'SHIPPER',
7574 p_exception_name => 'WSH_DEL_SCPOD_PURGED',
7575 x_return_status => l_wf_rs);
7576 IF l_debug_on THEN
7577 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7578 END IF;
7579
7580 IF l_debug_on THEN
7581 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
7582 END IF;
7583
7584 WSH_WF_STD.Purge_Entity(p_entity_type => 'DELIVERY',
7585 p_entity_ids => l_del_entity_ids,
7586 p_docommit => FALSE,
7587 x_success_count => l_purged_count,
7588 x_return_status => l_wf_rs);
7589 IF l_debug_on THEN
7590 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
7591 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7592 END IF;
7593
7594 END IF;
7595
7596 IF l_debug_on THEN
7597 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7598 END IF;
7599
7600 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
7601 p_entity_id => p_in_rec.delivery_id,
7602 p_event => 'oracle.apps.wsh.delivery.gen.setintransit',
7603 p_organization_id => l_org_id,
7604 x_return_status => l_wf_rs);
7605
7606 IF l_debug_on THEN
7607 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7608 END IF;
7609 -- Workflow Changes ==/
7610 END IF;
7611
7612 --
7613
7614 -- Close Exceptions for delivery and its contents
7615 IF l_debug_on THEN
7616 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7617 END IF;
7618 WSH_XC_UTIL.Close_Exceptions (
7619 p_api_version => 1.0,
7620 x_return_status => l_return_status,
7621 x_msg_count => l_msg_count,
7622 x_msg_data => l_msg_data,
7623 p_logging_entity_id => p_in_rec.delivery_id,
7624 p_logging_entity_name => 'DELIVERY',
7625 p_consider_content => 'Y',
7626 --tkt
7627 p_caller => p_in_rec.caller
7628 ) ;
7629
7630 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
7631 x_return_status := l_return_status;
7632 wsh_util_core.add_message(x_return_status);
7633 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7634 l_num_errors := l_num_errors + 1;
7635 RAISE FND_API.G_EXC_ERROR;
7636 ELSE
7637 l_num_warnings := l_num_warnings + 1 ;
7638 END IF;
7639 END IF;
7640
7641 IF l_num_errors > 0
7642 THEN
7643 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7644 ELSIF l_num_warnings > 0
7645 THEN
7646 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7647 ELSE
7648 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7649 END IF;
7650 --
7651 --
7652 --
7653 -- Debug Statements
7654 --
7655 IF l_debug_on THEN
7656 WSH_DEBUG_SV.pop(l_module_name);
7657 END IF;
7658 --
7659 --}
7660 EXCEPTION
7661 --{
7662 WHEN FND_API.G_EXC_ERROR THEN
7663
7664 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7665 --
7666 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7667 --
7668 IF l_debug_on THEN
7669 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7670 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7671 END IF;
7672 --
7673 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7674
7675 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7676 --
7677 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7678 --
7679 IF l_debug_on THEN
7680 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7681 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7682 END IF;
7683 --
7684 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
7685 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7686 --
7687 IF l_debug_on THEN
7688 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7689 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
7690 END IF;
7691 WHEN others THEN
7692 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setInTransit',l_module_name);
7693 --
7694 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7695 --
7696 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7697 --
7698 -- Debug Statements
7699 --
7700 IF l_debug_on THEN
7701 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7702 END IF;
7703 --
7704 --}
7705 END setInTransit;
7706 --
7707 --
7708 --
7709 --========================================================================
7710 -- PROCEDURE : setClose
7711 --
7712 -- PARAMETERS: p_in_rec Delivery information record
7713 -- x_return_status Return status of the API
7714 --
7715 -- COMMENT : This procedure sets delivery to CLOSED.
7716 -- This is called by stop close API/Group API
7717 --
7718 -- It performs the following steps:
7719 -- 01. Update delivery status to CL
7720 -- 02. Update delivery ultimate dropoff date based on actual departure date of stop
7721 -- 03. Close delivery exceptions (Pack J Exceptions project)
7722 -- 04. Close stops exclusively owened by delivery.
7723 --
7724 --========================================================================
7725 --
7726 PROCEDURE setClose
7727 (
7728 p_in_rec IN WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7729 x_return_status OUT NOCOPY VARCHAR2
7730 )
7731 IS
7732 --{
7733 CURSOR delivery_stops_csr (p_delivery_id NUMBER)
7734 IS
7735 SELECT stop_id
7736 FROM wsh_delivery_legs wdl,
7737 wsh_Trip_stops wts
7738 WHERE wdl.delivery_id = p_delivery_id
7739 AND (
7740 wdl.pick_up_stop_id = wts.stop_id
7741 OR wdl.drop_off_stop_id = wts.stop_id
7742 )
7743 AND wts.status_code <> 'CL';
7744 --
7745 --
7746 l_num_warnings NUMBER;
7747 l_num_errors NUMBER;
7748 l_return_status VARCHAR2(10);
7749 --
7750 l_user_id NUMBER;
7751 l_login_id NUMBER;
7752 l_cnt NUMBER := 0;
7753 l_stop_rows wsh_util_core.id_tab_type;
7754
7755 l_msg_count NUMBER;
7756 l_msg_data VARCHAR2(4000);
7757
7758 --/== Workflow Changes
7759 l_org_id NUMBER;
7760 l_wf_rs VARCHAR2(1);
7761 l_override_wf VARCHAR2(1);
7762 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7763 l_purged_count NUMBER;
7764 --==/
7765
7766 l_gc3_is_installed VARCHAR2(1); --OTM R12
7767
7768 --
7769 l_debug_on BOOLEAN;
7770 --
7771 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setClose';
7772 --}
7773 BEGIN
7774 --{
7775 --SAVEPOINT dlvy_close_begin_sp;
7776 --
7777 -- Debug Statements
7778 --
7779 --
7780 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7781 --
7782 IF l_debug_on IS NULL
7783 THEN
7784 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7785 END IF;
7786 --
7787 IF l_debug_on THEN
7788 WSH_DEBUG_SV.push(l_module_name);
7789 --
7790 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7791 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name ', p_in_rec.name );
7792 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7793 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7794 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7795 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller ', p_in_rec.caller );
7796 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7797 END IF;
7798 --
7799 l_user_id := FND_GLOBAL.user_id;
7800 l_login_id := FND_GLOBAL.login_id;
7801 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7802 l_num_warnings := 0;
7803 l_num_errors := 0;
7804 --
7805 --OTM R12
7806 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
7807
7808 IF l_gc3_is_installed IS NULL THEN
7809 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
7810 END IF;
7811 --
7812 --
7813 UPDATE wsh_new_deliveries
7814 SET ultimate_dropoff_date = GREATEST(
7815 nvl(ultimate_dropoff_date,p_in_rec.actual_date),
7816 p_in_rec.actual_date
7817 ),
7818 status_code = 'CL',
7819 --OTM R12, when setting delivery to closed, set tms flag
7820 tms_interface_flag = DECODE(l_gc3_is_installed,
7821 'Y', DECODE(NVL(tms_interface_flag,
7822 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
7823 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7824 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7825 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7826 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7827 WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
7828 NVL(tms_interface_flag,
7829 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7830 --
7831 last_update_date = SYSDATE ,
7832 last_updated_by = l_user_id,
7833 last_update_login = l_login_id
7834 WHERE delivery_id = p_in_rec.delivery_id
7835 RETURNING organization_id INTO l_org_id;
7836 --
7837 IF (SQL%NOTFOUND)
7838 THEN
7839 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7840 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
7841 RAISE FND_API.G_EXC_ERROR;
7842 END IF;
7843 --
7844
7845
7846 --/== Workflow Changes
7847 l_del_entity_ids(1) := p_in_rec.delivery_id;
7848 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7849 IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7850 WSH_WF_STD.Log_Wf_Exception('DELIVERY',
7851 p_in_rec.delivery_id,
7852 NULL,
7853 'SHIPPER',
7854 'WSH_DEL_SCPOD_PURGED',
7855 l_wf_rs);
7856 WSH_WF_STD.Purge_Entity(
7857 p_entity_type => 'DELIVERY',
7858 p_entity_ids => l_del_entity_ids,
7859 p_docommit => FALSE,
7860 x_success_count => l_purged_count,
7861 x_return_status => l_wf_rs);
7862 END IF;
7863
7864
7865 IF l_debug_on THEN
7866 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7867 END IF;
7868
7869 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
7870 p_entity_id => p_in_rec.delivery_id,
7871 p_event => 'oracle.apps.wsh.delivery.gen.closed',
7872 p_organization_id => l_org_id,
7873 x_return_status => l_wf_rs);
7874
7875 IF l_debug_on THEN
7876 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7877 END IF;
7878 -- Workflow Changes ==/
7879
7880 -- Close Exceptions for delivery and its contents
7881 IF l_debug_on THEN
7882 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7883 END IF;
7884 WSH_XC_UTIL.Close_Exceptions (
7885 p_api_version => 1.0,
7886 x_return_status => l_return_status,
7887 x_msg_count => l_msg_count,
7888 x_msg_data => l_msg_data,
7889 p_logging_entity_id => p_in_rec.delivery_id,
7890 p_logging_entity_name => 'DELIVERY',
7891 p_consider_content => 'Y'
7892 ) ;
7893
7894 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
7895 x_return_status := l_return_status;
7896 wsh_util_core.add_message(x_return_status);
7897 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7898 l_num_errors := l_num_errors + 1;
7899 RAISE FND_API.G_EXC_ERROR;
7900 ELSE
7901 l_num_warnings := l_num_warnings + 1 ;
7902 END IF;
7903 END IF;
7904
7905 IF (p_in_rec.manual_flag = 'Y')
7906 THEN
7907 --{
7908 -- If manual Close then close any stops not closed.
7909 -- Assumption: check_close validates that the delivery
7910 -- exclusively owns these stops.
7911 --
7912 FOR delivery_stops_rec IN delivery_stops_csr(p_in_rec.delivery_id)
7913 LOOP
7914 --{
7915 l_cnt := l_cnt + 1;
7916 --
7917 l_stop_rows(l_cnt) := delivery_stops_rec.stop_id;
7918 --}
7919 END LOOP;
7920 --
7921 IF l_stop_rows.count > 0
7922 THEN
7923 --{
7924 -- since the delivery is CLOSED and it owns these stops exclusively,
7925 -- it is safe to set p_defer_interface_flag = 'Y'
7926 -- because nothing needs to be interfaced
7927 --
7928 -- Debug Statements
7929 --
7930 IF l_debug_on THEN
7931 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7932 END IF;
7933 --
7934 wsh_trip_stops_actions.change_status
7935 (
7936 p_stop_rows => l_stop_rows,
7937 p_action => 'CLOSE',
7938 p_actual_date => p_in_rec.actual_date,
7939 p_defer_interface_flag => 'Y', -- bug 1578251
7940 x_return_status => l_return_status,
7941 --tkt
7942 p_caller => p_in_rec.caller
7943 );
7944 --
7945 wsh_util_core.api_post_call
7946 (
7947 p_return_status => l_return_status,
7948 x_num_warnings => l_num_warnings,
7949 x_num_errors => l_num_errors
7950 );
7951 --
7952 --
7953 --}
7954 END IF;
7955 --}
7956 END IF;
7957 --
7958 IF l_num_errors > 0
7959 THEN
7960 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7961 ELSIF l_num_warnings > 0
7962 THEN
7963 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7964 ELSE
7965 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7966 END IF;
7967 --
7968 --
7969 --
7970 -- Debug Statements
7971 --
7972 IF l_debug_on THEN
7973 WSH_DEBUG_SV.pop(l_module_name);
7974 END IF;
7975 --
7976 --}
7977 EXCEPTION
7978 --{
7979 --
7980 WHEN FND_API.G_EXC_ERROR THEN
7981
7982 --ROLLBACK TO dlvy_close_begin_sp;
7983 --
7984 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7985 --
7986 IF l_debug_on THEN
7987 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7988 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7989 END IF;
7990 --
7991 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7992
7993 --ROLLBACK TO dlvy_close_begin_sp;
7994 --
7995 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7996 --
7997 IF l_debug_on THEN
7998 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7999 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8000 END IF;
8001 --
8002 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8003 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8004 --
8005 IF l_debug_on THEN
8006 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8007 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8008 END IF;
8009 WHEN others THEN
8010 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setClose',l_module_name);
8011 --
8012 --ROLLBACK TO dlvy_close_begin_sp;
8013 --
8014 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8015 --
8016 -- Debug Statements
8017 --
8018 IF l_debug_on THEN
8019 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8020 END IF;
8021 --
8022 --}
8023 END setClose;
8024 -- J-IB-NPARIKH---}
8025
8026
8027
8028 PROCEDURE change_Status ( p_del_rows IN wsh_util_core.id_tab_type,
8029 p_action IN VARCHAR2,
8030 p_actual_date IN DATE,
8031 x_return_status OUT NOCOPY VARCHAR2,
8032 p_caller IN VARCHAR2) IS
8033
8034 CURSOR del_status (l_delivery_id NUMBER) IS
8035 SELECT status_code, name,organization_id
8036 FROM wsh_new_deliveries
8037 WHERE delivery_id = l_delivery_id;
8038
8039 CURSOR delivery_leg_stops(l_delivery_id NUMBER) IS
8040 SELECT dg.pick_up_stop_id,
8041 pu_stop.status_code pu_status,
8042 dg.drop_off_stop_id,
8043 do_stop.status_code do_status
8044 FROM wsh_delivery_legs dg,
8045 wsh_trip_stops pu_stop,
8046 wsh_trip_stops do_stop
8047 WHERE dg.delivery_id = l_delivery_id
8048 AND pu_stop.stop_id = dg.pick_up_stop_id
8049 AND do_stop.stop_id = dg.drop_off_stop_id;
8050
8051 trip_cnt NUMBER;
8052 l_old_status VARCHAR2(2);
8053 l_name VARCHAR2(30);
8054 l_status_code VARCHAR2(2);
8055 l_del_rows wsh_util_core.id_tab_type;
8056
8057 l_delivery_id NUMBER;
8058 l_stop_rows wsh_util_core.id_tab_type;
8059
8060 l_manual_flag VARCHAR2(1);
8061 l_close_rs VARCHAR2(1);
8062
8063 l_num_error NUMBER := 0;
8064 k NUMBER := 0;
8065
8066 --bug 1929104
8067 l_actual_date date;
8068
8069 others EXCEPTION;
8070
8071 l_wf_rs VARCHAR2(1); -- Workflow Changes
8072
8073 -- bug 2335270
8074 l_user_id NUMBER;
8075 l_login_id NUMBER;
8076 --
8077 l_debug_on BOOLEAN;
8078 --
8079 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHANGE_STATUS';
8080 --
8081 l_return_status VARCHAR2(30);
8082 l_allowed VARCHAR2(10);
8083 l_in_rec WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type;
8084 --
8085 l_num_warnings NUMBER;
8086 l_num_errors NUMBER;
8087 l_num_dels_processed NUMBER;
8088 l_organization_id NUMBER;
8089 l_warehouse_type VARCHAR2 (3);
8090
8091 BEGIN
8092 --
8093 SAVEPOINT dlvy_chg_status_begin_sp;
8094 --
8095 -- Debug Statements
8096 --
8097 --
8098 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8099 --
8100 IF l_debug_on IS NULL
8101 THEN
8102 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8103 END IF;
8104 --
8105 IF l_debug_on THEN
8106 WSH_DEBUG_SV.push(l_module_name);
8107 --
8108 WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
8109 WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DATE',P_ACTUAL_DATE);
8110 END IF;
8111 --
8112 --
8113 l_user_id := FND_GLOBAL.user_id;
8114 l_login_id := FND_GLOBAL.login_id;
8115 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8116 --
8117 l_num_warnings := 0;
8118 l_num_errors := 0;
8119 l_num_dels_processed := 0;
8120 --
8121
8122 IF (p_del_rows.count = 0) THEN
8123 raise others;
8124 END IF;
8125
8126 -- Close called from Stop close or from UI.
8127
8128 IF (p_actual_date IS NULL) THEN
8129 l_manual_flag := 'Y';
8130 l_actual_date := SYSDATE;
8131 ELSE
8132 l_manual_flag := 'N';
8133 l_actual_date := p_actual_date;
8134 END IF;
8135 --
8136 --FOR i IN 1..p_del_rows.count
8137 FOR i IN p_del_rows.FIRST..p_del_rows.LAST
8138 LOOP
8139 --{
8140 BEGIN
8141 --{
8142 SAVEPOINT dlvy_chg_status_sp;
8143 --
8144 OPEN del_status (p_del_rows(i));
8145 FETCH del_status INTO l_old_status , l_name,l_organization_id;
8146 --
8147 -- J-IB-NPARIKH---{
8148 IF (del_status%NOTFOUND)
8149 THEN
8150 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8151 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8152 --CLOSE del_status;
8153 l_num_errors := l_num_errors + 1;
8154 RAISE FND_API.G_EXC_ERROR;
8155 END IF;
8156 -- J-IB-NPARIKH---}
8157 --
8158 --
8159 CLOSE del_status;
8160
8161 IF (p_action = 'IN-TRANSIT')
8162 THEN
8163 --{
8164 -- J-IB-NPARIKH---{
8165 --
8166 l_in_rec.delivery_id := p_del_rows(i);
8167 l_in_rec.name := l_name;
8168 l_in_rec.status_code := l_old_status;
8169 l_in_rec.put_messages := TRUE;
8170 l_in_rec.actual_date := l_actual_date;
8171 l_in_rec.manual_flag := l_manual_flag;
8172 --tkt
8173 l_in_rec.caller := p_caller;
8174 --
8175 --
8176 -- Debug Statements
8177 --
8178 IF l_debug_on THEN
8179 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8180 END IF;
8181 --
8182 WSH_DELIVERY_VALIDATIONS.check_inTransit
8183 (
8184 p_in_rec => l_in_rec,
8185 x_return_status => l_return_status,
8186 x_allowed => l_Allowed
8187 );
8188 --
8189 IF l_debug_on THEN
8190 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8191 WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8192 END IF;
8193 --
8194 WSH_UTIL_CORE.api_post_call
8195 (
8196 p_return_status => l_return_status,
8197 x_num_warnings => l_num_warnings,
8198 x_num_errors => l_num_errors
8199 );
8200 --
8201 IF l_Allowed = 'Y'
8202 THEN
8203 NULL;
8204 ELSIF l_Allowed = 'YW'
8205 THEN
8206 l_num_warnings := l_num_warnings + 1;
8207 ELSIF l_Allowed = 'NW'
8208 THEN
8209 l_num_warnings := l_num_warnings + 1;
8210 RAISE wsh_util_core.g_exc_warning;
8211 ELSE
8212 l_num_errors := l_num_errors + 1;
8213 RAISE FND_API.G_EXC_ERROR;
8214 END IF;
8215 --
8216 --
8217 IF l_debug_on THEN
8218 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setInTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8219 END IF;
8220 --
8221 setInTransit
8222 (
8223 p_in_rec => l_in_rec,
8224 x_return_status => l_return_status
8225 );
8226 --
8227 IF l_debug_on THEN
8228 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8229 END IF;
8230 --
8231 WSH_UTIL_CORE.api_post_call
8232 (
8233 p_return_status => l_return_status,
8234 x_num_warnings => l_num_warnings,
8235 x_num_errors => l_num_errors
8236 );
8237 --
8238 l_num_dels_processed := l_num_dels_processed + 1;
8239 --}
8240 ELSIF (p_action = 'CLOSE')
8241 THEN
8242 --{
8243 --
8244 l_in_rec.delivery_id := p_del_rows(i);
8245 l_in_rec.name := l_name;
8246 l_in_rec.status_code := l_old_status;
8247 l_in_rec.put_messages := TRUE;
8248 l_in_rec.actual_date := l_actual_date;
8249 l_in_rec.manual_flag := l_manual_flag;
8250 --tkt
8251 l_in_rec.caller := p_caller;
8252 --
8253 --
8254 -- Debug Statements
8255 --
8256 IF l_debug_on THEN
8257 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8258 END IF;
8259 --
8260 WSH_DELIVERY_VALIDATIONS.check_close
8261 (
8262 p_in_rec => l_in_rec,
8263 x_return_status => l_return_status,
8264 x_allowed => l_Allowed
8265 );
8266 --
8267 IF l_debug_on THEN
8268 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8269 WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8270 END IF;
8271 --
8272 WSH_UTIL_CORE.api_post_call
8273 (
8274 p_return_status => l_return_status,
8275 x_num_warnings => l_num_warnings,
8276 x_num_errors => l_num_errors
8277 );
8278 --
8279 IF l_Allowed = 'Y'
8280 THEN
8281 NULL;
8282 ELSIF l_Allowed = 'YW'
8283 THEN
8284 l_num_warnings := l_num_warnings + 1;
8285 ELSIF l_Allowed = 'NW'
8286 THEN
8287 l_num_warnings := l_num_warnings + 1;
8288 RAISE wsh_util_core.g_exc_warning;
8289 ELSE
8290 l_num_errors := l_num_errors + 1;
8291 RAISE FND_API.G_EXC_ERROR;
8292 END IF;
8293 --
8294 --
8295 IF l_debug_on THEN
8296 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setClose',WSH_DEBUG_SV.C_PROC_LEVEL);
8297 END IF;
8298 --
8299 setClose
8300 (
8301 p_in_rec => l_in_rec,
8302 x_return_status => l_return_status
8303 );
8304 --
8305 IF l_debug_on THEN
8306 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8307 END IF;
8308 --
8309 WSH_UTIL_CORE.api_post_call
8310 (
8311 p_return_status => l_return_status,
8312 x_num_warnings => l_num_warnings,
8313 x_num_errors => l_num_errors
8314 );
8315 --
8316 l_num_dels_processed := l_num_dels_processed + 1;
8317 -- J-IB-NPARIKH---}
8318
8319 --}
8320 ELSIF (p_action = 'PACK')
8321 THEN
8322 --{
8323 --
8324 -- Debug Statements
8325 --
8326 IF l_debug_on THEN
8327 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PACK',WSH_DEBUG_SV.C_PROC_LEVEL);
8328 END IF;
8329 --
8330 wsh_delivery_validations.check_pack(p_del_rows(i), l_return_status);
8331 --
8332 WSH_UTIL_CORE.api_post_call
8333 (
8334 p_return_status => l_return_status,
8335 x_num_warnings => l_num_warnings,
8336 x_num_errors => l_num_errors
8337 );
8338
8339 l_status_code := 'PA';
8340
8341 l_num_dels_processed := l_num_dels_processed + 1;
8342 --}
8343 -- Included 'RE-OPEN' in this if condition
8344 -- To fix bug 2359880
8345 -- Public api WSHDEPBB.pls calls with action='RE-OPEN'
8346 ELSIF (p_action IN ('REOPEN', 'RE-OPEN')) THEN
8347 --{
8348 --
8349 -- Debug Statements
8350 --
8351 IF l_debug_on THEN
8352 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_REOPEN',WSH_DEBUG_SV.C_PROC_LEVEL);
8353 END IF;
8354 --
8355
8356
8357 -- Bug#3206399: Not Able to Re-open a Confirmed Delivery.
8358 --
8359 -- Call to check_reopen should return the status in local variable l_return_status.
8360 -- (This variable is used in further calls)
8361 -- x_return_status is assigned equal to l_return_status before exiting the
8362 -- procedure.
8363
8364 -- wsh_delivery_validations.check_reopen(p_del_rows(i), x_return_status);
8365
8366 wsh_delivery_validations.check_reopen(p_del_rows(i), l_return_status);
8367
8368 --
8369 WSH_UTIL_CORE.api_post_call
8370 (
8371 p_return_status => l_return_status,
8372 x_num_warnings => l_num_warnings,
8373 x_num_errors => l_num_errors
8374 );
8375 --
8376
8377 l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
8378 P_Organization_ID => l_organization_id,
8379 X_Return_Status => l_return_status);
8380
8381 IF l_debug_on THEN
8382 wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
8383 wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
8384 END IF;
8385
8386 WSH_UTIL_CORE.api_post_call (
8387 p_return_status => l_return_status,
8388 x_num_warnings => l_num_warnings,
8389 x_num_errors => l_num_errors);
8390
8391 IF (l_warehouse_type='TPW') THEN
8392 l_status_code := 'SA';
8393 ELSE
8394 l_status_code := 'OP';
8395 END IF;
8396
8397 IF l_debug_on THEN
8398 wsh_debug_sv.log (l_module_name, 'l_status_code',l_status_code);
8399 END IF;
8400
8401
8402 update wsh_new_deliveries
8403 set status_code = l_status_code,
8404 confirm_date = null,--6453740
8405 confirmed_by = null,--6453740
8406 last_update_date = SYSDATE ,
8407 last_updated_by = l_user_id,
8408 last_update_login = l_login_id
8409 where delivery_id = p_del_rows(i);
8410
8411 IF (SQL%NOTFOUND) THEN
8412 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8413 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8414 l_num_errors := l_num_errors + 1;
8415 RAISE FND_API.G_EXC_ERROR;
8416 END IF;
8417
8418 -- K: MDC:
8419 -- Reopen the consol delivery as well if it exists and is not open
8420 IF l_status_code = 'OP' THEN
8421
8422 -- bug 4891897, sql 15037864
8423 -- removed wsh_new_deliveries d2
8424
8425 update wsh_new_deliveries d1
8426 set d1.status_code = l_status_code,
8427 d1.last_update_date = SYSDATE,
8428 d1.last_updated_by = l_user_id,
8429 d1.last_update_login = l_login_id
8430 where d1.status_code = 'CO'
8431 and exists (
8432 select 'X'
8433 from wsh_delivery_legs l1, wsh_delivery_legs l2
8434 where l2.delivery_id = p_del_rows(i)
8435 and l2.parent_delivery_leg_id = l1.delivery_leg_id
8436 and l1.delivery_id = d1.delivery_id);
8437 END IF;
8438
8439 --/== Workflow Changes
8440 IF (l_status_code = 'OP') THEN
8441 IF l_debug_on THEN
8442 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8443 END IF;
8444
8445 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
8446 p_entity_id => p_del_rows(i),
8447 p_event => 'oracle.apps.wsh.delivery.gen.open',
8448 p_organization_id => l_organization_id,
8449 x_return_status => l_wf_rs);
8450
8451 IF l_debug_on THEN
8452 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8453 END IF;
8454 END IF;
8455 -- Workflow Changes ==/
8456
8457 l_num_dels_processed := l_num_dels_processed + 1;
8458
8459 --}
8460 END IF;
8461 --}
8462 EXCEPTION
8463 --{
8464 WHEN FND_API.G_EXC_ERROR
8465 THEN
8466 --{
8467 ROLLBACK TO dlvy_chg_status_sp;
8468 --
8469 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8470 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8471 --
8472 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8473 --}
8474 WHEN wsh_util_core.g_exc_warning
8475 THEN
8476 --{
8477 ROLLBACK TO dlvy_chg_status_sp;
8478 --
8479 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8480 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8481 --
8482 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
8483 --}
8484 --}
8485 END;
8486 --}
8487 END LOOP;
8488 --
8489 --
8490 IF l_num_dels_processed = 0
8491 THEN
8492 l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8493 ELSIF l_num_dels_processed < p_del_rows.count
8494 THEN
8495 l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8496 ELSIF l_num_warnings > 0
8497 THEN
8498 l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8499 ELSE
8500 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8501 END IF;
8502 --
8503 x_return_status := l_return_status;
8504 --
8505 IF p_del_rows.count > 1
8506 THEN
8507 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_SUMMARY');
8508 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',l_num_dels_processed);
8509 FND_MESSAGE.SET_TOKEN('NUM_ERROR',p_del_rows.count - l_num_dels_processed);
8510 wsh_util_core.add_message(l_return_status,l_module_name);
8511 END IF;
8512 --
8513 -- Debug Statements
8514 --
8515 IF l_debug_on THEN
8516 WSH_DEBUG_SV.pop(l_module_name);
8517 END IF;
8518 --
8519 EXCEPTION
8520 WHEN FND_API.G_EXC_ERROR THEN
8521 ROLLBACK TO dlvy_chg_status_begin_sp;
8522 --
8523 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8524 --
8525 IF l_debug_on THEN
8526 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8527 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8528 END IF;
8529 --
8530 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8531
8532 ROLLBACK TO dlvy_chg_status_begin_sp;
8533 --
8534 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8535 --
8536 IF l_debug_on THEN
8537 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8538 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8539 END IF;
8540 --
8541 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8542 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8543 --
8544 IF l_debug_on THEN
8545 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8546 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8547 END IF;
8548 --
8549 WHEN others THEN
8550
8551 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CHANGE_STATUS',l_module_name);
8552 ROLLBACK TO dlvy_chg_status_begin_sp;
8553 --
8554 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8555
8556 --
8557 -- Debug Statements
8558 --
8559 IF l_debug_on THEN
8560 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8561 END IF;
8562 --
8563 END CHANGE_STATUS;
8564
8565
8566 -- Following is old procedure as of I, which is replaced by proc. above in J
8567 -- remove after ut
8568
8569 /* bug 2335270 Included last_update_date,last_updated_by and last_update_login
8570 in wsh_new_deliveries and wsh_delivery_details */
8571
8572 -- J-IB-HEALI---{
8573 PROCEDURE Complete_Leg_Sequence
8574 ( p_delivery_id IN NUMBER,
8575 p_update_flag IN VARCHAR2,
8576 p_insert_msg IN BOOLEAN default true,
8577 x_leg_count OUT NOCOPY NUMBER,
8578 x_leg_complete OUT NOCOPY varchar2,
8579 x_return_status OUT NOCOPY VARCHAR2) IS
8580
8581 CURSOR delivery_info IS
8582 SELECT initial_pickup_location_id,
8583 ultimate_dropoff_location_id
8584 FROM wsh_new_deliveries
8585 WHERE delivery_id = p_delivery_id;
8586
8587 CURSOR count_legs IS
8588 SELECT count(*)
8589 FROM wsh_delivery_legs
8590 WHERE delivery_id = p_delivery_id;
8591
8592 CURSOR pickup_delivery_legs(l_pickup_location_id IN NUMBER) IS
8593 SELECT dg.delivery_leg_id leg_id,
8594 st1.stop_location_id pickup,
8595 st2.stop_location_id dropoff
8596 FROM wsh_delivery_legs dg,
8597 wsh_trip_stops st1,
8598 wsh_trip_stops st2
8599 WHERE dg.delivery_id = p_delivery_id AND
8600 st1.stop_id = dg.pick_up_stop_id AND
8601 st2.stop_id = dg.drop_off_stop_id AND
8602 st1.stop_location_id = l_pickup_location_id;
8603
8604 CURSOR dropoff_delivery_legs(l_pickup_location_id IN NUMBER) IS
8605 SELECT count(*)
8606 FROM wsh_delivery_legs dg,
8607 wsh_trip_stops st1,
8608 wsh_trip_stops st2
8609 WHERE dg.delivery_id = p_delivery_id AND
8610 st1.stop_id = dg.pick_up_stop_id AND
8611 st2.stop_id = dg.drop_off_stop_id AND
8612 st2.stop_location_id = l_pickup_location_id;
8613
8614 l_leg_id NUMBER;
8615 l_seq_num NUMBER;
8616 l_pickup_location_id NUMBER;
8617 l_dropoff_location_id NUMBER;
8618 l_final_dropoff NUMBER;
8619 l_leg_count NUMBER := 0;
8620 l_count NUMBER := 0;
8621
8622 others EXCEPTION;
8623
8624 l_debug_on BOOLEAN;
8625 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Complete_Leg_Sequence';
8626 BEGIN
8627
8628 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8629 --
8630 IF l_debug_on IS NULL
8631 THEN
8632 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8633 END IF;
8634 --
8635 IF l_debug_on THEN
8636 WSH_DEBUG_SV.push(l_module_name);
8637 --
8638 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8639 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8640 END IF;
8641 --
8642 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8643 x_leg_complete := 'N';
8644
8645
8646 OPEN delivery_info;
8647 FETCH delivery_info INTO l_pickup_location_id, l_dropoff_location_id;
8648
8649 IF (delivery_info%NOTFOUND) THEN
8650 CLOSE delivery_info;
8651
8652 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8653 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8654 wsh_util_core.add_message(x_return_status);
8655
8656
8657 IF l_debug_on THEN
8658 WSH_DEBUG_SV.pop(l_module_name);
8659 END IF;
8660 --
8661 RETURN;
8662 END IF;
8663
8664 l_final_dropoff := l_dropoff_location_id;
8665
8666 IF (l_pickup_location_id IS NULL) OR (l_dropoff_location_id IS NULL)THEN
8667 raise others;
8668 END IF;
8669 CLOSE delivery_info;
8670
8671
8672 OPEN count_legs;
8673 FETCH count_legs INTO l_leg_count;
8674 CLOSE count_legs;
8675
8676 x_leg_count := l_leg_count;
8677
8678 IF (l_leg_count = 0 OR l_leg_count IS NULL) THEN
8679 IF l_debug_on THEN
8680 WSH_DEBUG_SV.pop(l_module_name);
8681 END IF;
8682 --
8683 RETURN;
8684 END IF;
8685
8686
8687 l_seq_num := 0;
8688
8689 LOOP --{
8690 OPEN pickup_delivery_legs(l_pickup_location_id);
8691 FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8692
8693 IF (pickup_delivery_legs%NOTFOUND) THEN
8694 CLOSE pickup_delivery_legs;
8695 EXIT;
8696 END IF;
8697
8698
8699 IF (l_leg_id IS NOT NULL) THEN
8700 l_seq_num := l_seq_num + 1;
8701
8702 IF p_update_flag = 'Y' THEN
8703 UPDATE wsh_delivery_legs
8704 SET sequence_number = l_seq_num * 10
8705 WHERE delivery_leg_id = l_leg_id;
8706
8707 IF (SQL%NOTFOUND) THEN
8708 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8709
8710 FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
8711 wsh_util_core.add_message(x_return_status);
8712
8713 IF l_debug_on THEN
8714 WSH_DEBUG_SV.pop(l_module_name);
8715 END IF;
8716 --
8717 RETURN;
8718 END IF;
8719 END IF; /* added for p_update_flag */
8720 END IF; /* l_leg_id IS NOT NULL */
8721
8722
8723 FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8724 IF (pickup_delivery_legs%FOUND) THEN
8725 CLOSE pickup_delivery_legs;
8726
8727 IF (p_insert_msg) THEN
8728 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8729 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8730 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8731 END IF;
8732
8733 IF l_debug_on THEN
8734 WSH_DEBUG_SV.pop(l_module_name);
8735 END IF;
8736 --
8737 RETURN;
8738 END IF;
8739 CLOSE pickup_delivery_legs;
8740
8741 OPEN dropoff_delivery_legs(l_dropoff_location_id);
8742 FETCH dropoff_delivery_legs INTO l_count;
8743 CLOSE dropoff_delivery_legs;
8744
8745 IF (l_count > 1) THEN
8746 IF (p_insert_msg) THEN
8747 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8748 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8749 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8750 END IF;
8751
8752 IF l_debug_on THEN
8753 WSH_DEBUG_SV.pop(l_module_name);
8754 END IF;
8755 --
8756 RETURN;
8757 END IF;
8758
8759 l_pickup_location_id := l_dropoff_location_id;
8760 END LOOP; --}
8761
8762
8763
8764 IF (l_seq_num <> l_leg_count) THEN
8765
8766 IF (p_insert_msg) THEN
8767 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INVALID_FLOW');
8768 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8769 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8770 END IF;
8771 --
8772 IF l_debug_on THEN
8773 WSH_DEBUG_SV.pop(l_module_name);
8774 END IF;
8775 --
8776 RETURN;
8777 END IF;
8778
8779
8780 IF (l_final_dropoff <> l_dropoff_location_id) THEN
8781 x_leg_complete := 'NW';
8782
8783 IF (p_insert_msg) THEN
8784 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_ULTIMATE_DROPOFF');
8785 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8786 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8787 END IF;
8788 RETURN;
8789 END IF;
8790
8791
8792 x_leg_complete := 'Y';
8793
8794 IF l_debug_on THEN
8795 WSH_DEBUG_SV.pop(l_module_name);
8796 END IF;
8797 --
8798 EXCEPTION
8799 WHEN others THEN
8800 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Complete_Leg_Sequence');
8801 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8802
8803 IF l_debug_on THEN
8804 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8805 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8806 END IF;
8807 --
8808 END Complete_Leg_Sequence;
8809
8810
8811 PROCEDURE Update_Leg_Sequence
8812 ( p_delivery_id IN NUMBER,
8813 p_update_flag IN VARCHAR2,
8814 x_return_status OUT NOCOPY VARCHAR2) IS
8815
8816 l_leg_count NUMBER := 0;
8817 l_leg_complete varchar2(10);
8818 l_return_status varchar2(1);
8819
8820 l_debug_on BOOLEAN;
8821 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_LEG_SEQUENCE';
8822 BEGIN
8823 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8824 --
8825 IF l_debug_on IS NULL
8826 THEN
8827 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8828 END IF;
8829 --
8830 IF l_debug_on THEN
8831 WSH_DEBUG_SV.push(l_module_name);
8832 --
8833 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8834 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8835 END IF;
8836
8837
8838 Complete_Leg_Sequence
8839 ( p_delivery_id => p_delivery_id,
8840 p_update_flag => p_update_flag,
8841 x_leg_count => l_leg_count,
8842 x_leg_complete => l_leg_complete,
8843 x_return_status => l_return_status);
8844
8845 IF l_debug_on THEN
8846 WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',l_return_status);
8847 WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
8848 WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
8849 END IF;
8850
8851 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
8852 IF (l_leg_complete='NW') THEN
8853 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8854 ELSIF (l_leg_complete='Y') THEN
8855 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8856 ELSIF (l_leg_complete='N') THEN
8857 IF (l_leg_count IS NULL or l_leg_count=0) THEN
8858 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8859 ELSE
8860 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8861 END IF;
8862 END IF;
8863 ELSE
8864 x_return_status:= l_return_status;
8865 END IF;
8866
8867
8868 IF l_debug_on THEN
8869 WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
8870 WSH_DEBUG_SV.pop(l_module_name);
8871 END IF;
8872 --
8873 EXCEPTION
8874 WHEN others THEN
8875 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
8876 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8877
8878 IF l_debug_on THEN
8879 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8880 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8881 END IF;
8882 --
8883 END Update_Leg_Sequence;
8884
8885
8886
8887 PROCEDURE Process_Leg_Sequence
8888 ( p_delivery_id IN NUMBER,
8889 p_update_del_flag IN VARCHAR2,
8890 p_update_leg_flag IN VARCHAR2,
8891 x_leg_complete OUT NOCOPY boolean,
8892 x_return_status OUT NOCOPY VARCHAR2) IS
8893
8894 l_leg_count NUMBER := 0;
8895 l_leg_complete varchar2(10);
8896 l_update_flag varchar2(1):='N';
8897
8898
8899 l_debug_on BOOLEAN;
8900 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Leg_Sequence';
8901 BEGIN
8902 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8903 --
8904 IF l_debug_on IS NULL
8905 THEN
8906 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8907 END IF;
8908 --
8909 IF l_debug_on THEN
8910 WSH_DEBUG_SV.push(l_module_name);
8911 --
8912 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8913 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_del_FLAG',P_UPDATE_del_FLAG);
8914 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_leg_FLAG',P_UPDATE_leg_FLAG);
8915 END IF;
8916
8917
8918 Complete_Leg_Sequence
8919 ( p_delivery_id => p_delivery_id,
8920 p_update_flag => p_update_leg_flag,
8921 p_insert_msg => false,
8922 x_leg_count => l_leg_count,
8923 x_leg_complete => l_leg_complete,
8924 x_return_status => x_return_status);
8925
8926 IF l_debug_on THEN
8927 WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',x_return_status);
8928 WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
8929 WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
8930 END IF;
8931
8932 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
8933 IF (l_leg_complete = 'Y' ) THEN
8934 x_leg_complete := true;
8935 l_update_flag:='Y';
8936 ELSE
8937 x_leg_complete := false;
8938 l_update_flag:= null;
8939 END IF;
8940
8941
8942 IF (p_update_del_flag='Y') THEN
8943 UPDATE wsh_new_deliveries
8944 SET ITINERARY_COMPLETE = l_update_flag,
8945 last_update_date = sysdate,
8946 last_updated_by = FND_GLOBAL.USER_ID
8947 WHERE delivery_id= p_delivery_id;
8948 END IF;
8949
8950 END IF;
8951
8952
8953 IF l_debug_on THEN
8954 IF (x_leg_complete) THEN
8955 WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete TRUE');
8956 ELSE
8957 WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete FALSE');
8958 END IF;
8959
8960 WSH_DEBUG_SV.pop(l_module_name);
8961 END IF;
8962 --
8963 EXCEPTION
8964 WHEN others THEN
8965 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
8966 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8967
8968 IF l_debug_on THEN
8969 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8970 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8971 END IF;
8972 --
8973 END Process_Leg_Sequence;
8974 -- J-IB-HEALI---}
8975
8976 --
8977 -- Procedure: Generate_Loading_Seq
8978 -- Parameters: p_del_rows - Delivery ids
8979 -- x_return_status - status of procedure call
8980 -- Description: This procedure is used to generate loading sequence for deliveries
8981 --
8982
8983 PROCEDURE Generate_Loading_Seq
8984 (p_del_rows IN wsh_util_core.id_tab_type,
8985 x_return_status OUT NOCOPY VARCHAR2) IS
8986
8987 CURSOR loading_order (l_delivery_id NUMBER) IS
8988 SELECT loading_order_flag
8989 FROM wsh_new_deliveries
8990 WHERE delivery_id = l_delivery_id;
8991
8992 -- Bug 1421549: Changed the logic for load sequencing
8993 cont_str VARCHAR2(1000) :=
8994 'SELECT dd.delivery_detail_id '||
8995 'FROM wsh_delivery_details dd, '||
8996 'wsh_delivery_assignments_v da '||
8997 'WHERE dd.delivery_detail_id = da.delivery_detail_id AND '||
8998 'da.parent_delivery_detail_id = :cont_id AND '||
8999 'container_flag = ''N'' '||
9000 'ORDER BY customer_prod_seq ';
9001
9002 -- This cursor fetches container_ids and average customer prod seq
9003 -- numbers for lines in each container for a particular delivery. The
9004 -- dynamic statement is used to add an ASC or DESC clause to the order by
9005 -- based on Forward or Reverse loading order of the delivery
9006
9007 stmt_str VARCHAR2(1000) :=
9008 'SELECT da.parent_delivery_detail_id, '||
9009 'avg(customer_prod_seq) avg_prod_seq, '||
9010 'count(*) '||
9011 'FROM wsh_delivery_details dd, '||
9012 'wsh_delivery_assignments_v da '||
9013 'WHERE dd.delivery_detail_id = da.delivery_detail_id AND '||
9014 'dd.customer_prod_seq IS NOT NULL AND '||
9015 'dd.container_flag = ''N'' AND '||
9016 'da.parent_delivery_detail_id IS NOT NULL AND '||
9017 'da.delivery_id IS NOT NULL AND '||
9018 'da.delivery_id = :del_id '||
9019 'GROUP BY parent_delivery_detail_id '||
9020 'ORDER BY avg_prod_seq ';
9021
9022 TYPE detailcurtype IS REF CURSOR;
9023 TYPE contcurtype IS REF CURSOR;
9024 detailinfo_cv detailcurtype;
9025 continfo_cv contcurtype;
9026
9027 l_cont_id NUMBER;
9028 l_avg_prod_seq NUMBER;
9029 l_num_error BINARY_INTEGER;
9030 l_cnt BINARY_INTEGER;
9031 l_old_cnt BINARY_INTEGER;
9032 l_lines_cnt BINARY_INTEGER;
9033 l_order_flag VARCHAR2(2);
9034 str1 VARCHAR2(5);
9035 cont1 VARCHAR2(5);
9036 l_delivery_detail_id NUMBER;
9037 l_cont_cnt BINARY_INTEGER;
9038
9039 others EXCEPTION;
9040
9041 --
9042 l_debug_on BOOLEAN;
9043 --
9044 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERATE_LOADING_SEQ';
9045 --
9046 BEGIN
9047
9048 --
9049 -- Debug Statements
9050 --
9051 --
9052 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9053 --
9054 IF l_debug_on IS NULL
9055 THEN
9056 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9057 END IF;
9058 --
9059 IF l_debug_on THEN
9060 WSH_DEBUG_SV.push(l_module_name);
9061 END IF;
9062 --
9063 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9064
9065 IF (p_del_rows.count = 0) THEN
9066 raise others;
9067 END IF;
9068
9069 FOR i IN 1..p_del_rows.count LOOP
9070
9071 OPEN loading_order (p_del_rows(i));
9072 FETCH loading_order INTO l_order_flag;
9073
9074 IF (loading_order%NOTFOUND) OR (l_order_flag IS NULL) THEN
9075 IF (loading_order%ISOPEN) THEN
9076 CLOSE loading_order;
9077 END IF;
9078 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INV_LOADING_ORDER');
9079 --
9080 -- Debug Statements
9081 --
9082 IF l_debug_on THEN
9083 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9084 END IF;
9085 --
9086 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9087 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9088 wsh_util_core.add_message(x_return_status);
9089 l_num_error := l_num_error + 1;
9090 goto loop_end;
9091 END IF;
9092
9093 IF (loading_order%ISOPEN) THEN
9094 CLOSE loading_order;
9095 END IF;
9096
9097 -- Select containers for each delivery by ordering avg container prod seq num
9098
9099 IF (l_order_flag = 'F') OR (l_order_flag = 'FI') THEN
9100 str1 := 'ASC';
9101 ELSE
9102 str1 := 'DESC';
9103 END IF;
9104
9105 -- Bug 1421549: Changed the logic for load sequencing
9106 IF (l_order_flag = 'R') OR (l_order_flag = 'FI') THEN
9107 cont1 := 'DESC';
9108 ELSE
9109 cont1 := 'ASC';
9110 END IF;
9111
9112 -- bug # 1716147. Fixed the incorrect messages issue
9113 l_cont_cnt := 0;
9114
9115 -- bug 3442398 moved this line from within the container loop to here
9116 l_cnt := 0;
9117
9118 OPEN detailinfo_cv FOR stmt_str || str1 USING p_del_rows(i);
9119 LOOP
9120
9121 l_cont_id := null;
9122
9123 FETCH detailinfo_cv INTO l_cont_id, l_avg_prod_seq, l_lines_cnt;
9124
9125 -- Added by rvishnuv on 04/04/2001
9126 EXIT WHEN detailinfo_cv%NOTFOUND;
9127
9128 l_cont_cnt := l_cont_cnt + 1;
9129
9130
9131 -- Bug 1421549: Changed the logic for load sequencing
9132 OPEN continfo_cv FOR cont_str || cont1 USING l_cont_id ;
9133 LOOP
9134
9135 FETCH continfo_cv INTO l_delivery_detail_id ;
9136
9137 EXIT WHEN continfo_cv%NOTFOUND;
9138
9139 l_cnt := l_cnt + 1;
9140
9141 UPDATE wsh_delivery_details
9142 SET load_seq_number = l_cnt
9143 WHERE delivery_detail_id = l_delivery_detail_id;
9144
9145 END LOOP;
9146
9147 IF (l_cnt = 0) THEN
9148 IF (continfo_cv%ISOPEN) THEN
9149 CLOSE continfo_cv;
9150 END IF;
9151 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_LINE_ERROR');
9152 --
9153 -- Debug Statements
9154 --
9155 IF l_debug_on THEN
9156 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9157 END IF;
9158 --
9159 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9160 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9161 wsh_util_core.add_message(x_return_status);
9162 l_num_error := l_num_error + 1;
9163 EXIT;
9164 END IF;
9165
9166 IF (continfo_cv%ISOPEN) THEN
9167 CLOSE continfo_cv;
9168 END IF;
9169
9170 END LOOP;
9171
9172 IF (l_cont_cnt = 0) THEN
9173 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_CONT_ERROR');
9174 --
9175 -- Debug Statements
9176 --
9177 IF l_debug_on THEN
9178 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9179 END IF;
9180 --
9181 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9182 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9183 wsh_util_core.add_message(x_return_status);
9184 l_num_error := l_num_error + 1;
9185 END IF;
9186
9187
9188 IF (detailinfo_cv%ISOPEN) THEN
9189 CLOSE detailinfo_cv;
9190 END IF;
9191
9192 <<loop_end>>
9193 null;
9194
9195 END LOOP;
9196
9197 IF (p_del_rows.count > 1) THEN
9198 IF (l_num_error > 0) THEN
9199 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_SUMMARY');
9200 FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
9201 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
9202
9203 IF (p_del_rows.count = l_num_error) THEN
9204 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9205 ELSE
9206 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9207 END IF;
9208
9209 wsh_util_core.add_message(x_return_status);
9210 END IF;
9211 END IF;
9212
9213 --
9214 -- Debug Statements
9215 --
9216 IF l_debug_on THEN
9217 WSH_DEBUG_SV.pop(l_module_name);
9218 END IF;
9219 --
9220 EXCEPTION
9221 WHEN others THEN
9222 IF (continfo_cv%ISOPEN) THEN
9223 CLOSE continfo_cv;
9224 END IF;
9225 IF (detailinfo_cv%ISOPEN) THEN
9226 CLOSE detailinfo_cv;
9227 END IF;
9228 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.GENERATE_LOADING_SEQ');
9229 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9230
9231 --
9232 -- Debug Statements
9233 --
9234 IF l_debug_on THEN
9235 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9236 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9237 END IF;
9238 --
9239 END Generate_Loading_Seq;
9240
9241
9242 --
9243 -- Procedure: Assign_Delivery_Update
9244 -- Parameters: p_delivery_id - Delivery id
9245 -- p_del_params - Parameters to update the delivery with
9246 -- x_return_status - status of procedure call
9247 -- Description: This procedure is used to update the delivery with grouping
9248 -- attribute values from lines, while assigning lines to delivery
9249 --
9250
9251 PROCEDURE Assign_Delivery_Update
9252 (p_delivery_id IN NUMBER,
9253 p_del_params IN wsh_delivery_autocreate.grp_attr_rec_type,
9254 x_return_status OUT NOCOPY VARCHAR2) IS
9255
9256 l_del_info wsh_new_deliveries_pvt.delivery_rec_type;
9257
9258 --
9259 l_debug_on BOOLEAN;
9260 --
9261 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ASSIGN_DELIVERY_UPDATE';
9262 --
9263 BEGIN
9264
9265 --
9266 -- Debug Statements
9267 --
9268 --
9269 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9270 --
9271 IF l_debug_on IS NULL
9272 THEN
9273 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9274 END IF;
9275 --
9276 IF l_debug_on THEN
9277 WSH_DEBUG_SV.push(l_module_name);
9278 --
9279 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9280 END IF;
9281 --
9282 --
9283 -- Debug Statements
9284 --
9285 IF l_debug_on THEN
9286 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.POPULATE_RECORD',WSH_DEBUG_SV.C_PROC_LEVEL);
9287 END IF;
9288 --
9289 wsh_new_deliveries_pvt.populate_record( p_delivery_id, l_del_info, x_return_status);
9290
9291 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9292 --
9293 -- Debug Statements
9294 --
9295 IF l_debug_on THEN
9296 WSH_DEBUG_SV.pop(l_module_name);
9297 END IF;
9298 --
9299 RETURN;
9300 END IF;
9301
9302 --
9303 IF l_debug_on THEN
9304 WSH_DEBUG_SV.log(l_module_name,'l_del_info.shipment_direction',l_del_info.shipment_direction);
9305 END IF;
9306 --
9307
9308 IF NVL(l_del_info.shipment_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
9309 THEN
9310 --{
9311 -- Set optional grouping attributes for delivery.
9312 l_del_info.customer_id := nvl(l_del_info.customer_id, p_del_params.customer_id);
9313 l_del_info.intmed_ship_to_location_id := nvl(l_del_info.intmed_ship_to_location_id, p_del_params.intmed_ship_to_location_id);
9314 l_del_info.fob_code := nvl(l_del_info.fob_code, p_del_params.fob_code);
9315 l_del_info.freight_terms_code := nvl(l_del_info.freight_terms_code, p_del_params.freight_terms_code);
9316 l_del_info.ship_method_code := nvl(l_del_info.ship_method_code, p_del_params.ship_method_code);
9317 l_del_info.carrier_id := nvl(l_del_info.carrier_id, p_del_params.carrier_id);
9318
9319 WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
9320 p_delivery_rec => l_del_info,
9321 x_return_status => x_return_status);
9322
9323
9324 --
9325 -- Debug Statements
9326 --
9327 IF l_debug_on THEN
9328 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.UPDATE_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
9329 END IF;
9330 --
9331 wsh_new_deliveries_pvt.update_delivery( null, l_del_info, x_return_status);
9332
9333 --}
9334 END IF;
9335
9336 --
9337 -- Debug Statements
9338 --
9339 IF l_debug_on THEN
9340 WSH_DEBUG_SV.pop(l_module_name);
9341 END IF;
9342 --
9343 END Assign_Delivery_Update;
9344
9345 --
9346 --
9347 -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9348 --
9349 -- finito CArrier Selection FTE Integration Changes
9350 -- **************************************************************************
9351
9352
9353 -- J-IB-NPARIKH---{
9354
9355
9356 -- ----------------------------------------------------------------------
9357 -- Procedure: update_freight_terms
9358 -- Parameters: p_delivery_id in number
9359 -- p_action_code in varchar2
9360 -- 'ASSIGN' : Assign lines to delivery
9361 -- 'UNASSIGN' : Unassign lines from delivery
9362 -- p_line_freight_terms_code in varchar2
9363 -- NULL : Caller did not pass value
9364 -- 'MIXED' : Lines assigned/unassigned have mixed/null freight terms
9365 -- Other value: All lines assigned/unassigned have same freight term , equal to this value
9366 -- x_freight_terms_Code out varchar2
9367 -- Delivery's freight term code
9368 -- Description: This procedure can be called after assign/unassign lines from delivery.
9369 --
9370 -- For action ASSIGN :
9371 -- If delivery freight term is not null and new lines have different/null freight terms,
9372 -- update delivery freight term to NULL
9373 -- For action UNASSIGN :
9374 -- If delivery freight term is null and all existing lines in delivery have same freight
9375 -- term, update delivery with the same
9376 --
9377 -- ----------------------------------------------------------------------
9378 PROCEDURE update_freight_terms
9379 (
9380 p_delivery_id IN NUMBER,
9381 p_action_code IN VARCHAR2 DEFAULT 'UNASSIGN',
9382 p_line_freight_terms_Code IN VARCHAR2 DEFAULT NULL,
9383 x_freight_terms_Code OUT NOCOPY VARCHAR2,
9384 x_return_status OUT NOCOPY VARCHAR2
9385 )
9386 IS
9387 --{
9388 --
9389 -- Get delivery information
9390 --
9391 CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9392 IS
9393 SELECT freight_terms_code, name,
9394 nvl(shipment_direction,'O') shipment_direction
9395 FROM wsh_new_deliveries
9396 WHERE delivery_id = p_delivery_id;
9397 --
9398 --
9399 -- Lock delivery
9400 --
9401 CURSOR lock_dlvy_csr (p_delivery_id IN NUMBER)
9402 IS
9403 SELECT 1
9404 FROM wsh_new_deliveries
9405 WHERE delivery_id = p_delivery_id
9406 FOR UPDATE OF freight_terms_code NOWAIT;
9407 --
9408 --
9409 CURSOR line_csr (p_delivery_id IN NUMBER)
9410 IS
9411 SELECT distinct freight_terms_code
9412 FROM wsh_delivery_details wdd,
9413 wsh_delivery_assignments_v wda
9414 WHERE wdd.delivery_detail_id = wda.delivery_detail_id
9415 AND wda.delivery_id = p_delivery_id
9416 AND NVL(wdd.container_flag,'N') = 'N';
9417 --
9418 l_has_lines VARCHAR2(1);
9419 l_dlvy_freight_terms_code VARCHAR2(30);
9420 l_line_freight_terms_code VARCHAR2(30);
9421 l_shipment_direction VARCHAR2(30);
9422 l_name VARCHAR2(100);
9423 l_cnt NUMBER;
9424 --
9425 e_locked exception ;
9426 PRAGMA EXCEPTION_INIT(e_locked, -54);
9427 --
9428 e_end_of_api EXCEPTION;
9429 e_end_of_sub EXCEPTION;
9430 e_end_of_api1 EXCEPTION;
9431 --
9432 e_update EXCEPTION;
9433
9434 --
9435 l_debug_on BOOLEAN;
9436 --
9437 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_freight_terms';
9438 --
9439 --}
9440 BEGIN
9441 --{
9442 --
9443 l_debug_on := wsh_debug_interface.g_debug;
9444 --
9445 IF l_debug_on IS NULL THEN
9446 l_debug_on := wsh_debug_sv.is_debug_enabled;
9447 END IF;
9448 --
9449 IF l_debug_on THEN
9450 wsh_debug_sv.push(l_module_name);
9451 --
9452 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9453 wsh_debug_sv.LOG(l_module_name, 'p_action_code', p_action_code);
9454 wsh_debug_sv.LOG(l_module_name, 'p_line_freight_terms_Code', p_line_freight_terms_Code);
9455 END IF;
9456 --
9457 x_return_status := wsh_util_core.g_ret_sts_success;
9458 --
9459 --
9460 IF p_delivery_id IS NULL
9461 THEN
9462 --{
9463 --
9464 -- Delivery id is mandatory input
9465 --
9466 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9467 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9468 RAISE FND_API.G_EXC_ERROR;
9469 --}
9470 END IF;
9471 --
9472 --
9473 OPEN dlvy_csr (p_delivery_id);
9474 --
9475 FETCH dlvy_csr
9476 INTO l_dlvy_freight_terms_code,l_name,l_shipment_direction;
9477 --
9478 IF dlvy_csr%NOTFOUND
9479 THEN
9480 --{
9481 --
9482 -- Raise error for invalid Delivery id
9483 --
9484 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9485 RAISE FND_API.G_EXC_ERROR;
9486 --}
9487 END IF;
9488 --
9489 CLOSE dlvy_Csr;
9490 --
9491 --
9492 IF l_debug_on THEN
9493 wsh_debug_sv.LOG(l_module_name, 'l_dlvy_freight_terms_code', l_dlvy_freight_terms_code);
9494 wsh_debug_sv.LOG(l_module_name, 'l_name', l_name);
9495 wsh_debug_sv.LOG(l_module_name, 'l_shipment_direction', l_shipment_direction);
9496 END IF;
9497 --
9498 x_freight_terms_code := l_dlvy_freight_terms_code;
9499 --
9500 --
9501 IF l_shipment_direction IN ('O','IO')
9502 THEN
9503 --
9504 -- Operation not valid for outbound delivery
9505 --
9506 RAISE e_end_of_api;
9507 END IF;
9508 --
9509 FOR lock_dlvy_rec IN lock_dlvy_csr (p_delivery_id)
9510 LOOP
9511 NULL;
9512 END LOOP;
9513 --
9514 --
9515 BEGIN
9516 --{
9517 BEGIN
9518 --{
9519 IF p_action_code='ASSIGN'
9520 THEN
9521 --{
9522 --
9523 IF l_debug_on THEN
9524 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
9525 END IF;
9526 --
9527 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
9528 (
9529 p_delivery_id => p_delivery_id
9530 );
9531 --
9532 --
9533 IF l_debug_on THEN
9534 wsh_debug_sv.LOG(l_module_name, 'l_has_lines', l_has_lines);
9535 END IF;
9536 --
9537 --
9538 IF l_has_lines = 'Y' -- If delivery has lines
9539 THEN
9540 --{
9541
9542 /*
9543 IF l_dlvy_freight_terms_code IS NULL
9544 THEN
9545 RAISE e_end_of_api;
9546 ELSE
9547 --{
9548 */
9549 IF p_line_freight_terms_code IS NULL
9550 THEN
9551 --
9552 -- Line-level freight terms not passed in.
9553 -- We need to check delivery contents to determine the freight term
9554 --
9555 RAISE e_end_of_sub;
9556 ELSIF p_line_freight_terms_code = NVL(l_dlvy_freight_terms_code,'MIXED')
9557 THEN
9558 --
9559 -- Line-level freight terms is same as delivery's freight term
9560 -- No need for any updates, goto end of api.
9561 --
9562 RAISE e_end_of_api;
9563 ELSIF p_line_freight_terms_code = 'MIXED'
9564 THEN
9565 --
9566 -- Line-level freight terms are different.
9567 -- We need to update delivery freight term to null
9568 --
9569 l_dlvy_freight_terms_code := NULL;
9570 RAISE e_update;
9571 ELSE
9572 RAISE e_end_of_sub;
9573 END IF;
9574 --}
9575 --END IF;
9576
9577 --}
9578 /*--Assumption is that this api is called only after lines assigned to dlvy.
9579 ELSE
9580 --{
9581 IF p_line_freight_terms_code IS NULL
9582 THEN
9583 RAISE e_end_of_api;
9584 ELSIF p_line_freight_terms_code <> NVL(l_dlvy_freight_terms_code,'MIXED')
9585 THEN
9586 l_dlvy_freight_terms_code := p_line_freight_terms_code;
9587 RAISE e_update;
9588 ELSE
9589 RAISE e_end_of_api;
9590 END IF;
9591 --}
9592 */
9593 END IF;
9594 --}
9595 ELSIF p_action_code='UNASSIGN'
9596 THEN
9597 --{
9598 IF l_dlvy_freight_terms_code IS NOT NULL
9599 THEN
9600 --
9601 -- All lines in delivery have same freight term.
9602 -- No need for update, goto end of api.
9603 --
9604 RAISE e_end_of_api1;
9605 END IF;
9606 --}
9607 END IF;
9608 --}
9609 EXCEPTION
9610 WHEN e_end_of_sub THEN
9611 NULL;
9612 END;
9613 --
9614 --
9615 l_dlvy_freight_terms_code := NULL;
9616 l_cnt := 0;
9617 --
9618 --
9619 -- Get distinct freight terms from delivery contents.
9620 -- If any line has null/different freight term, update delivery's freight term to Null.
9621 -- else update delivery's freight term same as line's
9622 --
9623 FOR line_rec IN line_csr(p_delivery_id)
9624 LOOP
9625 --{
9626 l_cnt := l_cnt + 1;
9627 --
9628 --
9629 IF l_debug_on THEN
9630 wsh_debug_sv.LOG(l_module_name, 'line_rec.freight_Terms_code', line_rec.freight_Terms_code);
9631 END IF;
9632 --
9633 IF line_rec.freight_Terms_code IS NULL
9634 THEN
9635 l_dlvy_freight_terms_code := NULL;
9636 EXIT;
9637 ELSIF l_dlvy_freight_terms_code IS NULL
9638 THEN
9639 l_dlvy_freight_terms_code := line_rec.freight_Terms_code;
9640 ELSIF line_rec.freight_Terms_code <> l_dlvy_freight_terms_code
9641 THEN
9642 l_dlvy_freight_terms_code := NULL;
9643 EXIT;
9644 END IF;
9645 --}
9646 END LOOP;
9647 --}
9648 EXCEPTION
9649 WHEN e_update THEN
9650 l_cnt := 1;
9651 END;
9652 --
9653 --
9654 IF l_cnt > 0
9655 THEN
9656 --{
9657
9658 IF l_debug_on THEN
9659 wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery freight term to' || l_dlvy_freight_terms_code);
9660 END IF;
9661 --
9662 --OTM R12, this update here is done right after assign/unassign
9663 --of delivery lines, which means the
9664 --tms_interface_flag and tms_version_number should already be
9665 --reflecting the change in delivery,
9666 --no need to set them again.
9667
9668 UPDATE wsh_new_deliveries
9669 SET freight_terms_code = l_dlvy_freight_terms_code,
9670 last_update_date = SYSDATE,
9671 last_updated_by = FND_GLOBAL.USER_ID,
9672 last_update_login = FND_GLOBAL.LOGIN_ID
9673 WHERE delivery_id = p_delivery_id;
9674 --
9675 IF (SQL%NOTFOUND)
9676 THEN
9677 --{
9678 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9679 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9680 RAISE FND_API.G_EXC_ERROR;
9681 --}
9682 END IF;
9683 --
9684 x_freight_terms_code := l_dlvy_freight_terms_code;
9685
9686 --}
9687 END IF;
9688 --
9689 --
9690 IF l_debug_on THEN
9691 wsh_debug_sv.pop(l_module_name);
9692 END IF;
9693 --
9694 --}
9695 EXCEPTION
9696 --{
9697 WHEN e_end_of_api THEN
9698 IF l_debug_on
9699 THEN
9700 WSH_DEBUG_SV.pop(l_module_name);
9701 END IF;
9702 WHEN e_end_of_api1 THEN
9703 IF l_debug_on THEN
9704 wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery WHO columns ' );
9705 END IF;
9706 --
9707 UPDATE wsh_new_deliveries
9708 SET last_update_date = SYSDATE,
9709 last_updated_by = FND_GLOBAL.USER_ID,
9710 last_update_login = FND_GLOBAL.LOGIN_ID
9711 WHERE delivery_id = p_delivery_id;
9712 --
9713 IF (SQL%NOTFOUND)
9714 THEN
9715 --{
9716 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9717 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9718 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9719 --}
9720 END IF;
9721 --
9722 IF l_debug_on
9723 THEN
9724 WSH_DEBUG_SV.pop(l_module_name);
9725 END IF;
9726 WHEN FND_API.G_EXC_ERROR THEN
9727 x_return_status := wsh_util_core.g_ret_sts_error;
9728 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9729 --
9730 IF l_debug_on
9731 THEN
9732 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
9733 END IF;
9734 WHEN e_locked THEN
9735 x_return_status := wsh_util_core.g_ret_sts_error;
9736
9737 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
9738 FND_MESSAGE.SET_TOKEN('ENTITY_NAME', l_name);
9739 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9740 --
9741 IF l_debug_on
9742 THEN
9743 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:e_locked');
9744 END IF;
9745 WHEN OTHERS THEN
9746 x_return_status := fnd_api.g_ret_sts_unexp_error;
9747 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',l_module_name);
9748 --
9749 IF l_debug_on THEN
9750 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
9751 END IF;
9752 --}
9753 END update_freight_terms;
9754 --
9755 --
9756 -- ----------------------------------------------------------------------
9757 -- Procedure: update_ship_from_location
9758 --
9759 -- Parameters: p_delivery_id Delivery ID
9760 -- p_location_id Ship from location ID (New value)
9761 -- x_return_status Return status of API
9762 --
9763 -- COMMENT : This procedure is called from group API when
9764 -- ship-from location is updated for inbound (not O/IO) delivery.
9765 --
9766 -- It performs the following steps:
9767 -- 01. Validate that input delivery id is not null and is a valid delivery.
9768 -- 02. Validate that input table of lines contain at least one record.
9769 -- 03. If delivery's ship-from location (current value) is not null(-1), return
9770 -- 04. Update ship-from location on all delivery lines.
9771 -- 05. Update ship-from location for stop associated with delivery's initial pickup location
9772 -- 05.01 Make a call-out to FTE before stop update.
9773 -- 06. Update ship-from location for each delivery associated with same stop.
9774 -- 07. Put a warning message for each each delivery updated above.
9775 -- 08. Update ship-from location for lines of each delivery updated above.
9776 --
9777 -- ----------------------------------------------------------------------
9778 --
9779 PROCEDURE update_ship_from_location
9780 (
9781 p_delivery_id IN NUMBER,
9782 p_location_id IN NUMBER,
9783 x_return_status OUT NOCOPY VARCHAR2
9784 )
9785 IS
9786 --{
9787 --
9788 -- Get Delivery Info
9789 --
9790 CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9791 IS
9792 SELECT wnd.name,
9793 initial_pickup_location_id
9794 FROM wsh_new_deliveries wnd
9795 WHERE delivery_id = p_delivery_id;
9796 --
9797 l_dlvy_rec dlvy_csr%ROWTYPE;
9798 --
9799 --
9800 -- Get stop associated with initial pickup location of delivery.
9801 --
9802 CURSOR stop_csr(p_delivery_id IN NUMBER, p_location_id IN NUMBER)
9803 IS
9804 SELECT stop_id
9805 FROM wsh_delivery_legs wdl,
9806 wsh_trip_stops wts
9807 WHERE wdl.delivery_id = p_delivery_id
9808 AND wdl.pick_up_stop_id = wts.stop_id
9809 AND wts.stop_location_id = p_location_id;
9810 --
9811 --
9812 stop_rec stop_csr%ROWTYPE;
9813 --
9814 --
9815 -- Get all deliveries being picked up from the same stop.
9816 --
9817 CURSOR pickup_dlvy_csr (p_delivery_id IN NUMBER,p_stop_id IN NUMBER)
9818 IS
9819 SELECT wnd.delivery_id, wnd.name
9820 FROM wsh_delivery_legs wdl,
9821 wsh_new_deliveries wnd
9822 WHERE pick_up_stop_id = p_stop_id
9823 AND wdl.delivery_id <> p_delivery_id
9824 AND wdl.delivery_id = wnd.delivery_id;
9825 --
9826 --
9827 l_num_warnings NUMBER := 0;
9828 l_num_errors NUMBER := 0;
9829 l_return_status VARCHAR2(10);
9830 l_location_name VARCHAR2(60);
9831
9832 -- J+ Internal Location
9833 l_physical_stop_id WSH_TRIP_STOPS.physical_stop_id%TYPE;
9834 l_physical_location_id WSH_TRIP_STOPS.physical_location_id%TYPE;
9835 l_trip_id_tab wsh_util_core.id_tab_type;
9836 l_success_trip_ids wsh_util_core.id_tab_type;
9837 -- End of J+ Internal Location
9838 l_stop_rec WSH_TRIP_STOPS_PVT.TRIP_STOP_REC_TYPE;
9839 l_pub_stop_rec WSH_TRIP_STOPS_PUB.TRIP_STOP_PUB_REC_TYPE;
9840 l_trip_rec WSH_TRIPS_PVT.TRIP_REC_TYPE;
9841 --
9842 l_debug_on BOOLEAN;
9843 --
9844 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_ship_from_location';
9845 --
9846 --}
9847 BEGIN
9848 --{
9849 SAVEPOINT update_ship_from_location_sp;
9850 --
9851 l_debug_on := wsh_debug_interface.g_debug;
9852 --
9853 IF l_debug_on IS NULL THEN
9854 l_debug_on := wsh_debug_sv.is_debug_enabled;
9855 END IF;
9856 --
9857 IF l_debug_on THEN
9858 wsh_debug_sv.push(l_module_name);
9859 --
9860 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9861 wsh_debug_sv.LOG(l_module_name, 'p_location_id', p_location_id);
9862 END IF;
9863 --
9864 x_return_status := wsh_util_core.g_ret_sts_success;
9865 --
9866 --
9867 IF p_delivery_id IS NULL
9868 THEN
9869 --{
9870 --
9871 -- Delivery id is required field
9872 --
9873 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9874 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9875 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9876 --
9877 RAISE FND_API.G_EXC_ERROR;
9878 --}
9879 END IF;
9880 --
9881 --
9882 OPEN dlvy_csr(p_delivery_id);
9883 FETCH dlvy_csr INTO l_dlvy_rec;
9884 CLOSE dlvy_csr;
9885 --
9886 IF l_dlvy_rec.initial_pickup_location_id IS NULL
9887 THEN
9888 --{
9889 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NOT_EXIST');
9890 FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_delivery_id);
9891 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9892 --
9893 RAISE FND_API.G_EXC_ERROR;
9894 --}
9895 END IF;
9896 --
9897 --
9898 IF l_dlvy_rec.initial_pickup_location_id = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
9899 AND l_dlvy_rec.initial_pickup_location_id <> p_location_id
9900 THEN
9901 --{
9902 --
9903 -- Get stop associated with initial pickup location of delivery.
9904 --
9905 OPEN stop_csr(p_delivery_id,l_dlvy_rec.initial_pickup_location_id);
9906 FETCH stop_csr INTO stop_rec;
9907 CLOSE stop_csr;
9908 --
9909 /*
9910 UPDATE WSH_NEW_DELIVERIES
9911 SET INITIAL_PICKUP_LOCATION_ID = p_location_id,
9912 last_update_date = SYSDATE,
9913 last_updated_by = FND_GLOBAL.USER_ID,
9914 last_update_login = FND_GLOBAL.LOGIN_ID
9915 WHERE delivery_id = p_delivery_id;
9916 */
9917 --
9918 --
9919 UPDATE WSH_DELIVERY_DETAILS
9920 SET SHIP_FROM_LOCATION_ID = p_location_id,
9921 last_update_date = SYSDATE,
9922 last_updated_by = FND_GLOBAL.USER_ID,
9923 last_update_login = FND_GLOBAL.LOGIN_ID
9924 WHERE delivery_detail_id IN (
9925 SELECT delivery_detail_id
9926 FROM wsh_delivery_assignments_v
9927 WHERE delivery_id = p_delivery_id
9928 );
9929 --
9930 --
9931 IF stop_rec.stop_id IS NOT NULL
9932 THEN
9933 --{
9934 -- Get pvt type record structure for stop
9935 --
9936 -- Debug Statements
9937 --
9938 IF l_debug_on THEN
9939 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
9940 END IF;
9941 --
9942 wsh_trip_stops_grp.get_stop_details_pvt
9943 (p_stop_id => stop_rec.stop_id,
9944 x_stop_rec => l_stop_rec,
9945 x_return_status => l_return_status);
9946 --
9947 wsh_util_core.api_post_call
9948 (
9949 p_return_status => l_return_status,
9950 x_num_warnings => l_num_warnings,
9951 x_num_errors => l_num_errors
9952 );
9953 --
9954 -- Internal Locations J+
9955 -- Derive the physical location id
9956 IF l_stop_rec.stop_location_id <> p_location_id THEN -- New Location id
9957 IF l_debug_on THEN
9958 wsh_debug_sv.logmsg(l_module_name,'stop location id has been changed');
9959 END IF;
9960 -- Derive physical Location id for this new location
9961 WSH_LOCATIONS_PKG.Convert_internal_cust_location(
9962 p_internal_cust_location_id => p_location_id,
9963 x_internal_org_location_id => l_physical_location_id, -- New physical Location id
9964 x_return_status => l_return_status);
9965
9966 IF l_debug_on THEN
9967 wsh_debug_sv.log(l_module_name,'New stop_location_id' , p_location_id);
9968 wsh_debug_sv.log(l_module_name,'Derived physical_location_id' , l_physical_location_id);
9969 END IF;
9970 -- delink the physical stop id
9971 IF nvl(l_stop_rec.physical_location_id, -99) <> nvl(l_physical_location_id, -99) THEN
9972 l_stop_rec.physical_stop_id := NULL;
9973 -- Nullify the physical stop id
9974 l_physical_stop_id := NULL;
9975 l_stop_rec.physical_location_id := l_physical_location_id; -- Populate record structure
9976 END IF;
9977 END IF;
9978 -- End of Internal Locations J+
9979 --
9980 /* H integration - call Multi Leg FTE */
9981 IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
9982 -- Code changes made in J+ along with Internal Locations
9983 -- Update the Input record structure which FTE uses to validate
9984 -- the new stop location
9985 l_stop_rec.stop_location_id := p_location_id;
9986 -- End of Code changes made in J+
9987 IF l_debug_on THEN
9988 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
9989 END IF;
9990 --
9991 wsh_fte_integration.trip_stop_validations
9992 (p_stop_rec => l_stop_rec,
9993 p_trip_rec => l_trip_rec,
9994 p_action => 'UPDATE',
9995 x_return_status => l_return_status);
9996 --
9997 wsh_util_core.api_post_call
9998 (
9999 p_return_status => l_return_status,
10000 x_num_warnings => l_num_warnings,
10001 x_num_errors => l_num_errors
10002 );
10003 --
10004 END IF;
10005 --
10006 --
10007 -- J+ Internal Locations, along with new location, update
10008 -- physical_stop_id and physical_location_id
10009 UPDATE wsh_trip_stops
10010 SET stop_location_id = p_location_id,
10011 last_update_date = SYSDATE,
10012 last_updated_by = FND_GLOBAL.USER_ID,
10013 last_update_login = FND_GLOBAL.LOGIN_ID,
10014 physical_stop_id = l_physical_stop_id, -- J+ Internal Locations
10015 physical_location_id = l_physical_location_id -- J+ Internal Locations
10016 WHERE stop_id = stop_rec.stop_id;
10017 --
10018
10019 -- Internal Locations J+
10020 -- Call Handle Internal Stops API to link the stops
10021 l_trip_id_tab(1) := l_stop_rec.trip_id;
10022 IF l_debug_on THEN
10023 wsh_debug_sv.log(l_module_name,'trip_id' , l_stop_rec.trip_id);
10024 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Handle_Internal_Stops',WSH_DEBUG_SV.C_PROC_LEVEL);
10025 END IF;
10026
10027 WSH_TRIPS_ACTIONS.Handle_Internal_Stops(
10028 p_trip_ids => l_trip_id_tab,
10029 p_caller => 'WSH_UPDATE_SHIP_FROM_LOC',
10030 x_success_trip_ids => l_success_trip_ids,
10031 x_return_status => l_return_status);
10032
10033 wsh_util_core.api_post_call(
10034 p_return_status => l_return_status,
10035 x_num_warnings => l_num_warnings,
10036 x_num_errors => l_num_errors);
10037 -- End of Internal Locations J+
10038 --
10039
10040 l_location_name := NULL;
10041 --
10042 --
10043 -- Get all deliveries being picked up from the same stop.
10044 --
10045 FOR pickup_dlvy_rec IN pickup_dlvy_csr (p_delivery_id , stop_rec.stop_id)
10046 LOOP
10047 --{
10048 --OTM R12, this update is called by inbound so we
10049 --will not check tms flag here
10050 UPDATE WSH_NEW_DELIVERIES
10051 SET INITIAL_PICKUP_LOCATION_ID = p_location_id,
10052 last_update_date = SYSDATE,
10053 last_updated_by = FND_GLOBAL.USER_ID,
10054 last_update_login = FND_GLOBAL.LOGIN_ID
10055 WHERE delivery_id = pickup_dlvy_rec.delivery_id;
10056 --
10057 --
10058 UPDATE WSH_DELIVERY_DETAILS
10059 SET SHIP_FROM_LOCATION_ID = p_location_id,
10060 last_update_date = SYSDATE,
10061 last_updated_by = FND_GLOBAL.USER_ID,
10062 last_update_login = FND_GLOBAL.LOGIN_ID
10063 WHERE delivery_detail_id IN (
10064 SELECT delivery_detail_id
10065 FROM wsh_delivery_assignments_v
10066 WHERE delivery_id = pickup_dlvy_rec.delivery_id
10067 );
10068 --
10069 --
10070 IF l_location_name IS NULL
10071 THEN
10072 --{
10073 IF l_debug_on THEN
10074 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_location_description',WSH_DEBUG_SV.C_PROC_LEVEL);
10075 END IF;
10076 --
10077 l_location_name := SUBSTRB(
10078 WSH_UTIL_CORE.get_location_description
10079 (
10080 p_location_id,
10081 'NEW UI CODE'
10082 ),
10083 1,
10084 60
10085 );
10086 --}
10087 END IF;
10088 --
10089 --
10090 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_PU_LOCN_UPDATE');
10091 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', pickup_dlvy_rec.name);
10092 FND_MESSAGE.SET_TOKEN('LOCATION_NAME', l_location_name);
10093 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_warning,l_module_name);
10094 l_num_warnings := l_num_warnings + 1;
10095 --}
10096 END LOOP;
10097 --}
10098 END IF;
10099 --}
10100 END IF;
10101 --
10102 --
10103 --
10104 IF l_num_errors > 0
10105 THEN
10106 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10107 ELSIF l_num_warnings > 0
10108 THEN
10109 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10110 ELSE
10111 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10112 END IF;
10113 --
10114 IF l_debug_on THEN
10115 wsh_debug_sv.pop(l_module_name);
10116 END IF;
10117 --
10118 --}
10119 EXCEPTION
10120 --{
10121 --
10122 WHEN FND_API.G_EXC_ERROR THEN
10123
10124 ROLLBACK TO update_ship_from_location_sp;
10125 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10126 --
10127 IF l_debug_on THEN
10128 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10129 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10130 END IF;
10131 --
10132 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10133
10134 ROLLBACK TO update_ship_from_location_sp;
10135 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10136 --
10137 IF l_debug_on THEN
10138 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10139 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10140 END IF;
10141 --
10142 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10143 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10144 --
10145 IF l_debug_on THEN
10146 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10147 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10148 END IF;
10149 --
10150 WHEN OTHERS THEN
10151
10152 ROLLBACK TO update_ship_from_location_sp;
10153 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10154 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_ship_from_location', l_module_name);
10155 IF l_debug_on THEN
10156 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10157 END IF;
10158 --
10159 --}
10160 END update_ship_from_location;
10161
10162 -- J-IB-NPARIKH---}
10163
10164 -- Look for Open deliveries in Trip
10165 -- If any delivery exists with status = OPEN in the trip ,then RETURN FALSE
10166 -- If no open delivery exists ,then RETURN TRUE
10167 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
10168 return BOOLEAN IS
10169
10170 -- First row found is enough
10171
10172 -- bug 4891897, sql 15038247
10173 -- 1) wsh_delivery_trips_v is replaced with the join of
10174 -- wsh_delivery_legs and wsh_trip_stops
10175 -- 2) query is flattened instead of using the subquery for lower sharable memory
10176
10177 CURSOR Check_Last_Trip (l_delivery_id NUMBER) IS
10178 SELECT s1.trip_id
10179 FROM wsh_trip_stops s1,
10180 wsh_delivery_legs dl1,
10181 wsh_new_deliveries d1,
10182 wsh_trip_stops s2,
10183 wsh_delivery_legs dl2
10184 WHERE d1.delivery_id <> l_delivery_id
10185 AND s1.stop_id = dl1.pick_up_stop_id
10186 AND d1.delivery_id = dl1.delivery_id
10187 AND d1.status_code = 'OP'
10188 AND d1.delivery_type = 'STANDARD'
10189 AND s2.trip_id = s1.trip_id
10190 AND s2.stop_id = dl2.pick_up_stop_id
10191 AND dl2.delivery_id = l_delivery_id
10192 AND rownum = 1;
10193
10194 l_trip_id NUMBER;
10195
10196 l_debug_on BOOLEAN;
10197 --
10198 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'check_last_del_trip';
10199 --
10200 BEGIN
10201
10202 l_debug_on := wsh_debug_interface.g_debug;
10203 --
10204 IF l_debug_on IS NULL THEN
10205 l_debug_on := wsh_debug_sv.is_debug_enabled;
10206 END IF;
10207 --
10208 IF l_debug_on THEN
10209 wsh_debug_sv.push(l_module_name);
10210 --
10211 --
10212 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10213 END IF;
10214
10215 OPEN check_last_trip(p_delivery_id);
10216 FETCH check_last_trip
10217 INTO l_trip_id;
10218 CLOSE check_last_trip;
10219
10220 IF l_trip_id IS NOT NULL THEN -- found a open delivery
10221 IF l_debug_on THEN
10222 wsh_debug_sv.LOGMSG(l_module_name, 'Last Del on Trip-' || l_trip_id);
10223 wsh_debug_sv.pop(l_module_name);
10224 END IF;
10225 return FALSE;
10226 ELSE -- no open delivery
10227 IF l_debug_on THEN
10228 wsh_debug_sv.LOGMSG(l_module_name, 'THIS IS LAST OPEN DELIVERY on TRIP');
10229 wsh_debug_sv.pop(l_module_name);
10230 END IF;
10231 return TRUE;
10232 END IF;
10233
10234 IF l_debug_on THEN
10235 wsh_debug_sv.pop(l_module_name);
10236 END IF;
10237
10238 EXCEPTION
10239
10240 WHEN OTHERS THEN
10241 wsh_util_core.default_handler('wsh_new_delivery_actions.check_last_del_trip',l_module_name);
10242 --
10243 IF l_debug_on THEN
10244 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10245 END IF;
10246 RETURN FALSE;
10247 END check_last_del_trip;
10248
10249 -- ---------------------------------------------------------------------------
10250 -- NAME: GET_TRIP_STATUS
10251 -- TYPE: FUNCTION
10252 -- PARAMETERS(IN): p_delivery_id IN NUMBER
10253 --
10254 -- RETURN: MANY - delivery is assigned to more than one trip
10255 -- SHARED - trip to which this delivery is assigned is
10256 -- shared with other deliveries
10257 -- HAS_LANE - trip to which this delivery is assigned has
10258 -- Lane/Service assigned
10259 -- NONE - delivery is not assigned to a trip
10260 -- ONE - delivery is assigned to one trip and this
10261 -- trip is not shared with other deliveries
10262 -- DESCRIPTION: get the relationship between the delivery and the trip
10263 --
10264 -- CALLED FROM PROCESS_CARRIER_SELECTION
10265 -- ADDED BY HJPARK AS PART OF 11i10+ ENHANCEMENT 9/20/2004
10266 -- ---------------------------------------------------------------------------
10267 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2) return VARCHAR2 IS
10268 --FUNCTION GET_TRIP_STATUS(p_delivery_id IN NUMBER) return VARCHAR2 IS
10269
10270 l_debug_on BOOLEAN;
10271 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||g_pkg_name||'.'||'get_trip_status';
10272
10273 l_count NUMBER;
10274 l_delivery_leg_id NUMBER;
10275 l_trip_id NUMBER;
10276 l_lane_id NUMBER;
10277
10278 CURSOR check_many_trips(x_delivery_id NUMBER) IS
10279 SELECT count(delivery_leg_id), min(delivery_leg_id)
10280 FROM wsh_delivery_legs
10281 WHERE delivery_id = x_delivery_id;
10282
10283 CURSOR check_shared_trip(x_delivery_leg_id NUMBER) IS
10284 SELECT count(s.trip_id ), min(s.trip_id)
10285 FROM wsh_delivery_legs d, wsh_trip_stops s
10286 WHERE d.pick_up_stop_id = s.stop_id
10287 AND s.trip_id = (SELECT s1.trip_id
10288 FROM wsh_trip_stops s1, wsh_delivery_legs d1
10289 WHERE d1.delivery_leg_id = x_delivery_leg_id
10290 AND s1.stop_id = d1.pick_up_stop_id);
10291
10292 -- Hiding project
10293 -- count('CONSOLIDATION') should be 1
10294
10295 CURSOR check_shared_trip_consol(x_delivery_leg_id NUMBER) IS
10296 SELECT count(*), min(s.trip_id)
10297 FROM wsh_new_deliveries n, wsh_delivery_legs d, wsh_trip_stops s
10298 WHERE n.delivery_id = d.delivery_id
10299 AND d.pick_up_stop_id = s.stop_id
10300 AND s.trip_id = (SELECT s1.trip_id
10301 FROM wsh_trip_stops s1, wsh_delivery_legs d1
10302 WHERE d1.delivery_leg_id = x_delivery_leg_id
10303 AND s1.stop_id = d1.pick_up_stop_id)
10304 AND d.parent_delivery_leg_id IS NULL;
10305
10306 CURSOR check_trip_lane(x_trip_id NUMBER) IS
10307 SELECT lane_id
10308 FROM wsh_trips
10309 WHERE trip_id = x_trip_id;
10310
10311 BEGIN
10312
10313 l_debug_on := wsh_debug_interface.g_debug;
10314 IF l_debug_on IS NULL THEN
10315 l_debug_on := wsh_debug_sv.is_debug_enabled;
10316 END IF;
10317 IF l_debug_on THEN
10318 wsh_debug_sv.push(l_module_name);
10319 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10320 END IF;
10321
10322 -- checks whether the delivery is assigned to a trip
10323
10324 OPEN check_many_trips(p_delivery_id);
10325 FETCH check_many_trips INTO l_count, l_delivery_leg_id;
10326 CLOSE check_many_trips;
10327
10328 IF (l_count = 0) THEN
10329 -- delivery is not assigned to a trip
10330 IF l_debug_on THEN
10331 wsh_debug_sv.LOGMSG(l_module_name, 'NONE');
10332 wsh_debug_sv.pop(l_module_name);
10333 END IF;
10334 return 'NONE';
10335 ELSIF (l_count > 1) THEN
10336 -- delivery is assigned to more than one trip
10337 IF l_debug_on THEN
10338 wsh_debug_sv.LOGMSG(l_module_name, 'MANY');
10339 wsh_debug_sv.pop(l_module_name);
10340 END IF;
10341 return 'MANY';
10342 END IF;
10343
10344
10345 -- comes here when the delivery is assigned to only one trip
10346 -- checks whether the trip is shared by more than one delivery
10347
10348 IF p_delivery_type = 'CONSOLIDATION' THEN
10349
10350 -- Hiding project
10351 -- A consol delivery can be assigned to only 1 trip
10352 -- But the trip can have other consol / regular / content deliveries on that trip
10353 -- The action should be allowed only if other deliveries in this trip
10354 -- are only the child content deliveries of this consol delivery
10355
10356 OPEN check_shared_trip_consol(l_delivery_leg_id);
10357 FETCH check_shared_trip_consol INTO l_count,l_trip_id;
10358 CLOSE check_shared_trip_consol;
10359
10360 IF (l_count > 1) THEN
10361 -- trip is shared by more than one delivery - Error
10362 IF l_debug_on THEN
10363 wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10364 wsh_debug_sv.pop(l_module_name);
10365 END IF;
10366 return 'SHARED';
10367 END IF;
10368
10369 ELSE
10370
10371 OPEN check_shared_trip(l_delivery_leg_id);
10372 FETCH check_shared_trip INTO l_count, l_trip_id;
10373 CLOSE check_shared_trip;
10374
10375 IF (l_count > 1) THEN
10376 -- trip is shared by more than one delivery - Error
10377 IF l_debug_on THEN
10378 wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10379 wsh_debug_sv.pop(l_module_name);
10380 END IF;
10381 return 'SHARED';
10382 END IF;
10383
10384 END IF;
10385 -- comes here when the trip is used only by this delivery, hence 1:1
10386 -- checks whether trip has lane assigned
10387
10388 OPEN check_trip_lane(l_trip_id);
10389 FETCH check_trip_lane INTO l_lane_id;
10390 CLOSE check_trip_lane;
10391
10392 IF l_lane_id is not NULL
10393 THEN
10394 IF l_debug_on THEN
10395 wsh_debug_sv.LOGMSG(l_module_name, 'HAS_LANE');
10396 wsh_debug_sv.pop(l_module_name);
10397 END IF;
10398 return 'HAS_LANE';
10399 ELSE
10400 IF l_debug_on THEN
10401 wsh_debug_sv.LOGMSG(l_module_name, 'ONE-'||l_trip_id);
10402 wsh_debug_sv.pop(l_module_name);
10403 END IF;
10404 return 'ONE-'||l_trip_id;
10405 END IF;
10406
10407 EXCEPTION
10408 WHEN OTHERS THEN
10409 wsh_util_core.default_handler('wsh_new_delivery_actions.get_trip_status',l_module_name);
10410 --
10411 IF l_debug_on THEN
10412 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10413 END IF;
10414
10415 END GET_TRIP_STATUS;
10416
10417 --SBAKSHI(R12)
10418 --***************************************************************************--
10419 --========================================================================
10420 -- FUNCTION : IS_DLVY_CONTENT PRIVATE
10421 --
10422 -- PARAMETERS: p_delivery_id Delivery Id
10423 --
10424 -- COMMENT : Returns True if the delivery is content
10425 --
10426 --***************************************************************************--
10427 FUNCTION IS_DLVY_CONTENT(p_delivery_id IN NUMBER)
10428 RETURN BOOLEAN
10429 IS
10430
10431 /*
10432 When we query for a parent delivery of a delivery we
10433 should always use wsh_delivery_legs instead of wsh_delivery_assignments.
10434 If the child delivery does not have any lines attached to it,
10435 it will not have record in wda, whereas a console delivery and
10436 its children will always have a trip, and a record in wdl.
10437 */
10438
10439 CURSOR c_get_console_delivery (c_delivery_id IN NUMBER) IS
10440 select pleg.delivery_id
10441 from wsh_delivery_legs pleg,
10442 wsh_delivery_legs cleg
10443 where pleg.delivery_leg_id = cleg.parent_delivery_leg_id
10444 and cleg.delivery_id = c_delivery_id;
10445
10446 l_delivery_id NUMBER;
10447 l_content_dlvy BOOLEAN := FALSE;
10448
10449 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10450 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_DLVY_CONTENT';
10451
10452 BEGIN
10453
10454 --
10455 IF l_debug_on THEN
10456 wsh_debug_sv.push (l_module_name);
10457 END IF;
10458 --
10459
10460 OPEN c_get_console_delivery(p_delivery_id) ;
10461 FETCH c_get_console_delivery INTO l_delivery_id;
10462
10463 IF (l_delivery_id IS NOT NULL) THEN
10464 -- The dlvy is assigned to a console delivery
10465 l_content_dlvy := TRUE;
10466 END IF;
10467 CLOSE c_get_console_delivery;
10468
10469 --
10470 IF l_debug_on THEN
10471 wsh_debug_sv.pop(l_module_name);
10472 END IF;
10473 --
10474 RETURN l_content_dlvy;
10475
10476 EXCEPTION
10477 WHEN OTHERS THEN
10478
10479 IF c_get_console_delivery%ISOPEN THEN
10480 CLOSE c_get_console_delivery;
10481 END IF;
10482
10483 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.IS_DLVY_CONTENT');
10484 --
10485 IF l_debug_on THEN
10486 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10487 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10488 END IF;
10489
10490 END IS_DLVY_CONTENT;
10491
10492 --***************************************************************************--
10493 --========================================================================
10494 -- PROCEDURE : GET_SHIP_TO_SITE PRIVATE
10495 --
10496 -- PARAMETERS: p_delivery_id Delivery Id
10497 -- x_site_id Customer Site Id.
10498 -- x_return_status Return Status
10499 --
10500 -- COMMENT : Returns the ship to site associated with the delivery.
10501 --
10502 --***************************************************************************--
10503 PROCEDURE GET_SHIP_TO_SITE(p_delivery_id IN NUMBER,
10504 p_delivery_type IN VARCHAR2 DEFAULT NULL,
10505 p_ultimate_dropoff_loc_id IN NUMBER DEFAULT NULL,
10506 x_site_id OUT NOCOPY NUMBER,
10507 x_return_status OUT NOCOPY VARCHAR2)
10508 IS
10509
10510 CURSOR c_get_ship_to_site IS
10511 SELECT DISTINCT wdd.ship_to_site_use_id
10512 FROM wsh_delivery_details wdd,
10513 wsh_delivery_assignments wda
10514 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
10515 AND wda.delivery_id = p_delivery_id
10516 AND wdd.ship_to_site_use_id IS NOT NULL;
10517
10518 CURSOR c_ship_to_site_use(c_location_id IN NUMBER) IS
10519 SELECT SITE.SITE_USE_ID
10520 FROM HZ_CUST_ACCT_SITES_ALL ACCT_SITE,
10521 HZ_PARTY_SITES PARTY_SITE,
10522 HZ_LOCATIONS LOC,
10523 HZ_CUST_SITE_USES_ALL SITE
10524 WHERE
10525 SITE.SITE_USE_CODE = 'SHIP_TO'
10526 AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
10527 AND ACCT_SITE.PARTY_SITE_ID = PARTY_SITE.PARTY_SITE_ID
10528 AND PARTY_SITE.LOCATION_ID = LOC.LOCATION_ID
10529 AND LOC.LOCATION_ID = c_location_id;
10530
10531 l_site_tab WSH_UTIL_CORE.ID_TAB_TYPE;
10532 multiple_ship_to_site EXCEPTION;
10533 no_ship_to_site EXCEPTION;
10534
10535 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10536 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_SITE';
10537
10538 BEGIN
10539
10540 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10541 --
10542 IF l_debug_on THEN
10543 wsh_debug_sv.push (l_module_name);
10544 END IF;
10545 --
10546
10547 IF p_delivery_type = 'STANDARD' THEN
10548
10549 OPEN c_get_ship_to_site;
10550 FETCH c_get_ship_to_site BULK COLLECT INTO l_site_tab;
10551 CLOSE c_get_ship_to_site;
10552
10553 IF (l_site_tab.COUNT = 1) THEN
10554 x_site_id := l_site_tab(l_site_tab.FIRST);
10555 ELSIF (l_site_tab.COUNT = 0 ) THEN
10556 RAISE NO_SHIP_TO_SITE;
10557 ELSE
10558 RAISE MULTIPLE_SHIP_TO_SITE;
10559 END IF;
10560
10561 ELSIF p_delivery_type = 'CONSOLIDATION' THEN
10562
10563 OPEN c_ship_to_site_use(p_ultimate_dropoff_loc_id);
10564 FETCH c_ship_to_site_use INTO x_site_id;
10565 IF c_ship_to_site_use%NOTFOUND THEN
10566 x_site_id := NULL;
10567 END IF;
10568 CLOSE c_ship_to_site_use;
10569
10570 END IF;
10571
10572
10573 --
10574 IF l_debug_on THEN
10575 WSH_DEBUG_SV.pop(l_module_name);
10576 END IF;
10577 --
10578 EXCEPTION
10579
10580 WHEN NO_SHIP_TO_SITE THEN
10581 -- Delivery is not assoociated with a site.
10582 IF l_debug_on THEN
10583 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with a site');
10584 END IF;
10585 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_SITE');
10586 FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10587 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10588 WSH_UTIL_CORE.add_message(x_return_status);
10589
10590 IF l_debug_on THEN
10591 WSH_DEBUG_SV.pop(l_module_name);
10592 END IF;
10593
10594 WHEN MULTIPLE_SHIP_TO_SITE THEN
10595
10596 -- Delivery is associated with multiple sites
10597 IF l_debug_on THEN
10598 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with multiple sites');
10599 END IF;
10600 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_MULT_SITE');
10601 FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10602 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10603 WSH_UTIL_CORE.add_message(x_return_status);
10604
10605 IF l_debug_on THEN
10606 WSH_DEBUG_SV.pop(l_module_name);
10607 END IF;
10608
10609 WHEN OTHERS THEN
10610
10611 IF ( c_get_ship_to_site%ISOPEN) THEN
10612 CLOSE c_get_ship_to_site;
10613 END IF;
10614 --
10615 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_site');
10616 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10617 --
10618
10619 IF l_debug_on THEN
10620 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10621 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10622 END IF;
10623 --
10624 END GET_SHIP_TO_SITE;
10625
10626
10627 --***************************************************************************--
10628 --========================================================================
10629 -- PROCEDURE : GET_SHIP_TO_CUSTOMER PRIVATE
10630 --
10631 -- PARAMETERS: p_ult_dropoff_loc_id Drop off location id.
10632 -- p_delivery_id Delivery Id.
10633 -- x_customer_id Customer Id.
10634 -- x_return_status Return Status
10635 --
10636 -- COMMENT : Returns the customer associated with the given location.
10637 --
10638 --***************************************************************************--
10639 PROCEDURE GET_SHIP_TO_CUSTOMER( p_ult_dropoff_loc_id IN NUMBER,
10640 p_delivery_id IN NUMBER,
10641 x_customer_id OUT NOCOPY NUMBER,
10642 x_return_status OUT NOCOPY VARCHAR2)
10643 IS
10644
10645 CURSOR c_get_shipto_cust_from_loc (p_location_id IN NUMBER) IS
10646 SELECT hcas.cust_account_id
10647 FROM wsh_locations wl,
10648 hz_party_sites hps,
10649 hz_cust_acct_sites_all hcas
10650 WHERE wl.wsh_location_id = p_location_id
10651 AND wl.location_source_code = 'HZ'
10652 AND wl.source_location_id = hps.location_id
10653 AND hps.party_site_id = hcas.party_site_id;
10654
10655
10656 CURSOR c_get_shipto_cust_from_dlvy(p_delivery_id IN NUMBER) IS
10657 SELECT distinct hcas.cust_account_id
10658 FROM hz_cust_site_uses_all hcsu,
10659 hz_cust_acct_sites_all hcas
10660 WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
10661 AND hcsu.site_use_id IN (SELECT DISTINCT wdd.ship_to_site_use_id
10662 FROM wsh_delivery_details wdd,
10663 wsh_delivery_assignments wda
10664 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
10665 AND wda.delivery_id = p_delivery_id);
10666
10667
10668 l_cust_tab WSH_UTIL_CORE.ID_TAB_TYPE;
10669 no_cust_for_loc EXCEPTION;
10670 mult_cust_for_loc EXCEPTION;
10671
10672 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10673 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_CUSTOMER';
10674
10675 BEGIN
10676
10677 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10678 --
10679 IF l_debug_on THEN
10680 wsh_debug_sv.push (l_module_name);
10681 END IF;
10682 --
10683
10684 OPEN c_get_shipto_cust_from_loc(p_ult_dropoff_loc_id);
10685 FETCH c_get_shipto_cust_from_loc BULK COLLECT INTO l_cust_tab;
10686 CLOSE c_get_shipto_cust_from_loc;
10687
10688 IF (l_cust_tab.COUNT=1) THEN
10689 x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10690 ELSIF (l_cust_tab.COUNT = 0) THEN
10691 -- Location is not associated with a customer.
10692 RAISE NO_CUST_FOR_LOC;
10693 ELSE
10694 -- Multiple records have been returned.
10695 -- For the delivery get the delivery lines and use ship to site id
10696 -- to return the customer. check that each has the same customer.
10697 OPEN c_get_shipto_cust_from_dlvy(p_delivery_id);
10698 FETCH c_get_shipto_cust_from_dlvy BULK COLLECT INTO l_cust_tab;
10699 CLOSE c_get_shipto_cust_from_dlvy;
10700
10701 IF (l_cust_tab.COUNT=1) THEN
10702 x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10703 ELSIF (l_cust_tab.COUNT=0) THEN
10704 RAISE NO_CUST_FOR_LOC;
10705 ELSE
10706 RAISE MULT_CUST_FOR_LOC;
10707 END IF;
10708 END IF;
10709
10710 --
10711 IF l_debug_on THEN
10712 WSH_DEBUG_SV.pop(l_module_name);
10713 END IF;
10714 --
10715 EXCEPTION
10716
10717 WHEN NO_CUST_FOR_LOC THEN
10718 IF l_debug_on THEN
10719 wsh_debug_sv.logmsg(l_module_name, 'Location not associated with a customer');
10720 END IF;
10721 -- Location not associated with a customer.
10722 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_NO_LOC');
10723 FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10724 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10725 WSH_UTIL_CORE.add_message(x_return_status);
10726
10727 IF l_debug_on THEN
10728 WSH_DEBUG_SV.pop(l_module_name);
10729 END IF;
10730 WHEN MULT_CUST_FOR_LOC THEN
10731 -- Location associated with a multiple customers.
10732 IF l_debug_on THEN
10733 wsh_debug_sv.logmsg(l_module_name, 'Location associated with multiple customers');
10734 END IF;
10735 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_MULT_LOC');
10736 FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10737 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10738 WSH_UTIL_CORE.add_message(x_return_status);
10739
10740 IF l_debug_on THEN
10741 WSH_DEBUG_SV.pop(l_module_name);
10742 END IF;
10743 WHEN OTHERS THEN
10744 IF (c_get_shipto_cust_from_loc%ISOPEN) THEN
10745 CLOSE c_get_shipto_cust_from_loc;
10746 END IF;
10747
10748 IF (c_get_shipto_cust_from_dlvy%ISOPEN) THEN
10749 CLOSE c_get_shipto_cust_from_dlvy;
10750 END IF;
10751 --
10752 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_customer');
10753 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10754 --
10755 IF l_debug_on THEN
10756 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10757 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10758 END IF;
10759 --
10760 END GET_SHIP_TO_CUSTOMER;
10761
10762 ---------------------------------------------------------------------------------------
10763 -- Procedure: SET_PICK_UP_DROP_OFF_DATES
10764 --
10765 -- Parameters: p_cs_mleg_result_tab IN OUT table
10766 -- x_return_message Return Message
10767 -- x_return_status Return Status
10768 --
10769 -- COMMENT : This procedure is called from Process_carrier_selection API
10770 -- in order to get pick up and drop off dates for intermediate stops.
10771 -- If Carrier selection API returns multileg output, the dates have to
10772 -- determined.
10773 --
10774 -- Logic for determining the dates:
10775 --
10776 -- a) Find transit time between delivery leg's pick up and drop off stops
10777 -- b) If transit time found
10778 -- i. drop off date = pick up date +transit time
10779 -- c) if transit time is not found, calculate total time between deliveries
10780 -- pick up and drop off stops and divide it equally amongst all the delivery legs.
10781 --
10782 -- ----------------------------------------------------------------------
10783
10784 PROCEDURE SET_PICK_UP_DROP_OFF_DATES(
10785 p_cs_mleg_result_tab IN OUT NOCOPY WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
10786 x_return_status OUT NOCOPY VARCHAR2,
10787 x_msg_count OUT NOCOPY NUMBER,
10788 x_msg_data OUT NOCOPY VARCHAR2
10789 ) IS
10790
10791 transit_time NUMBER;
10792 transit_time_found BOOLEAN := TRUE;
10793 from_location_id NUMBER;
10794 to_location_id NUMBER;
10795 ship_method VARCHAR2(60);
10796 num_legs NUMBER;
10797 num_days NUMBER;
10798 num_hours NUMBER;
10799 days_fraction NUMBER;
10800 rec_cnt NUMBER;
10801 rec_cnt_prior NUMBER;
10802 pick_up_date DATE;
10803 drop_off_date DATE;
10804 initial_pick_up_date DATE;
10805 ultimate_drop_off_date DATE;
10806 d_itr NUMBER;
10807
10808 l_debug_on BOOLEAN;
10809
10810 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SET_PICK_UP_DROP_OFF_DATES';
10811
10812 CURSOR get_transit_time(p_from_location_id NUMBER,
10813 p_to_location_id NUMBER,
10814 p_ship_method VARCHAR2) IS
10815
10816 SELECT INTRANSIT_TIME
10817 FROM MTL_INTERORG_SHIP_METHODS
10818 WHERE FROM_LOCATION_ID = p_from_location_id
10819 AND TO_LOCATION_ID = p_to_location_id
10820 AND SHIP_METHOD = p_ship_method;
10821
10822 BEGIN
10823 --{
10824 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10825
10826 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
10827
10828 --
10829 IF l_debug_on IS NULL
10830 THEN
10831 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
10832 END IF;
10833 --
10834
10835 IF l_debug_on THEN
10836 WSH_DEBUG_SV.push(l_module_name);
10837 END IF;
10838
10839 --
10840 -- Obtain number of delivery legs, initial pick up date and ultimate drop off date for the delivery
10841 --
10842
10843 num_legs := p_cs_mleg_result_tab.COUNT;
10844 initial_pick_up_date := p_cs_mleg_result_tab(p_cs_mleg_result_tab.FIRST).pickup_date;
10845 ultimate_drop_off_date := p_cs_mleg_result_tab(p_cs_mleg_result_tab.LAST).dropoff_date;
10846
10847 IF l_debug_on THEN
10848 WSH_DEBUG_SV.logmsg(l_module_name,'No of legs :'||num_legs);
10849 WSH_DEBUG_SV.logmsg(l_module_name,'initial_pick_up_date :'||to_char(initial_pick_up_date, 'dd/mm/yyyy hh:mi:ss'));
10850 WSH_DEBUG_SV.logmsg(l_module_name,'ultimate_drop_off_date :'||to_char(ultimate_drop_off_date, 'dd/mm/yyyy hh:mi:ss'));
10851 END IF;
10852
10853
10854 rec_cnt := p_cs_mleg_result_tab.FIRST;
10855
10856 IF rec_cnt IS NOT NULL THEN
10857 IF initial_pick_up_date = ultimate_drop_off_date THEN
10858 LOOP
10859 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
10860
10861 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
10862 pick_up_date := initial_pick_up_date;
10863 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
10864 -- pick up date is one hour more than drop off date of last stop
10865 pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
10866 END IF;
10867
10868 drop_off_date := pick_up_date + 1/144;
10869
10870 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
10871 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10872
10873 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
10874 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
10875 END LOOP;
10876 ELSE
10877
10878
10879 --IF rec_cnt IS NOT NULL THEN
10880
10881 LOOP
10882 --{
10883 transit_time := null;
10884 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
10885
10886 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
10887 pick_up_date := initial_pick_up_date;
10888 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
10889 -- pick up date is one hour more than drop off date of last stop
10890 pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
10891 END IF;
10892
10893 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
10894
10895 IF transit_time_found = TRUE THEN
10896 --{
10897 from_location_id := p_cs_mleg_result_tab(rec_cnt).initial_pickup_location_id;
10898 to_location_id := p_cs_mleg_result_tab(rec_cnt).ultimate_dropoff_location_id;
10899 ship_method := p_cs_mleg_result_tab(rec_cnt).ship_method_code;
10900
10901 OPEN get_transit_time (from_location_id, to_location_id, ship_method);
10902 FETCH get_transit_time into transit_time;
10903 CLOSE get_transit_time;
10904
10905 --
10906 -- If transit time is not found for a leg, divide remaining time equally between different legs
10907 --
10908
10909 IF transit_time IS NULL THEN
10910 --{
10911 transit_time_found := false;
10912 num_days := ultimate_drop_off_date - pick_up_date;
10913 IF num_days > (num_legs-1)/24 THEN
10914 days_fraction := (num_days - (num_legs-2)/24)/ num_legs;
10915 ELSE
10916 days_fraction := num_days / num_legs;
10917 END IF;
10918 drop_off_date := pick_up_date + days_fraction;
10919
10920 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10921 --}
10922 ELSE -- transit time is not null
10923 --{
10924 IF l_debug_on THEN
10925 WSH_DEBUG_SV.log(l_module_name, 'transit_time_found', transit_time_found);
10926 WSH_DEBUG_SV.log(l_module_name, 'from_location_id', from_location_id);
10927 WSH_DEBUG_SV.log(l_module_name, 'to_location_id', to_location_id);
10928 WSH_DEBUG_SV.log(l_module_name, 'ship_method', ship_method);
10929 WSH_DEBUG_SV.log(l_module_name, 'transit_time', transit_time);
10930 END IF;
10931
10932 IF rec_cnt = p_cs_mleg_result_tab.LAST THEN
10933 drop_off_date := ultimate_drop_off_date;
10934 ELSE
10935 drop_off_date := pick_up_date + transit_time;
10936 END IF;
10937
10938 IF drop_off_date < ultimate_drop_off_date THEN
10939 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10940 num_legs := num_legs - 1;
10941 ELSIF drop_off_date = ultimate_drop_off_date THEN
10942 IF drop_off_date <= pick_up_date THEN
10943 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date + 1/24;
10944 ultimate_drop_off_date := ultimate_drop_off_date + 1/24;
10945 END IF;
10946 num_legs := num_legs - 1;
10947 ELSE
10948 transit_time_found := false;
10949
10950 IF p_cs_mleg_result_tab.EXISTS(rec_cnt_prior) THEN
10951 num_days := ultimate_drop_off_date - p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date;
10952 ELSE
10953 num_days := ultimate_drop_off_date - pick_up_date;
10954 END IF;
10955 IF num_days > (num_legs-1)/24 THEN
10956 days_fraction := (num_days - (num_legs-2)/24)/ num_legs;
10957 ELSE
10958 days_fraction := num_days / num_legs;
10959 END IF;
10960 --days_fraction := num_days / num_legs;
10961 drop_off_date := pick_up_date + days_fraction;
10962 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10963 END IF;
10964
10965 IF l_debug_on THEN
10966 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(rec_cnt).pickup_date :'||to_char(p_cs_mleg_result_tab(rec_cnt).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
10967 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(rec_cnt).dropoff_date :'||to_char(p_cs_mleg_result_tab(rec_cnt).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
10968 END IF;
10969 --}
10970 END IF;
10971 --}
10972 ELSE
10973 --{
10974 drop_off_date := pick_up_date + days_fraction;
10975
10976 IF drop_off_date > ultimate_drop_off_date OR rec_cnt = p_cs_mleg_result_tab.LAST THEN
10977 drop_off_date := ultimate_drop_off_date;
10978 END IF;
10979
10980 IF drop_off_date = ultimate_drop_off_date AND drop_off_date <= pick_up_date THEN
10981 drop_off_date := drop_off_date + 1/24;
10982 ultimate_drop_off_date := drop_off_date;
10983 END IF;
10984
10985 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
10986 --}
10987 END IF;
10988
10989 --}
10990 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
10991
10992 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
10993
10994 END LOOP;
10995
10996 --END IF;
10997
10998 d_itr := p_cs_mleg_result_tab.FIRST;
10999
11000 IF d_itr IS NOT NULL THEN
11001 LOOP
11002 IF p_cs_mleg_result_tab(d_itr).pickup_date = p_cs_mleg_result_tab(d_itr).dropoff_date THEN
11003 p_cs_mleg_result_tab(d_itr).dropoff_date := p_cs_mleg_result_tab(d_itr).dropoff_date + 1/144;
11004 END IF;
11005
11006 IF l_debug_on THEN
11007 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).initial_pickup_location_id :'||p_cs_mleg_result_tab(d_itr).initial_pickup_location_id);
11008 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).pickup_date :'||to_char(p_cs_mleg_result_tab(d_itr).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
11009 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).ultimate_dropoff_location_id :'||p_cs_mleg_result_tab(d_itr).ultimate_dropoff_location_id);
11010 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_mleg_result_tab(d_itr).dropoff_date :'||to_char(p_cs_mleg_result_tab(d_itr).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
11011 END IF;
11012
11013 EXIT WHEN d_itr = p_cs_mleg_result_tab.LAST;
11014 d_itr := p_cs_mleg_result_tab.NEXT(d_itr);
11015 END LOOP;
11016 END IF;
11017 END IF;
11018 END IF;
11019
11020 IF l_debug_on THEN
11021 WSH_DEBUG_SV.pop(l_module_name);
11022 END IF;
11023 --}
11024 EXCEPTION
11025
11026 WHEN OTHERS THEN
11027
11028 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.SET_PICK_UP_DROP_OFF_DATES',l_module_name);
11029 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11030
11031 IF get_transit_time%ISOPEN THEN
11032 CLOSE get_transit_time;
11033 END IF;
11034
11035 IF l_debug_on THEN
11036
11037 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11038 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11039
11040 END IF;
11041
11042 END SET_PICK_UP_DROP_OFF_DATES;
11043
11044 -- -------------------------------------------------------------------------- --
11045 -- --
11046 -- NAME: FORMAT_DEL_UPDATE_TABLE --
11047 -- --
11048 -- TYPE: PROCEDURE --
11049 -- --
11050 -- --
11051 -- PARAMETERS (IN): p_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11052 -- p_carrier_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11053 -- p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11054 -- p_mode_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11055 -- p_freight_term_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11056 -- p_smc_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11057 -- p_org_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11058 -- p_trip_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11059 -- --
11060 -- PARAMETERS (OUT): x_rec_attr_tab OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type --
11061 -- x_trip_info_tab OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type
11062 --
11063 --
11064 -- RETURN: none --
11065 -- --
11066 -- DESCRIPTION: This procedure is used to format the record for --
11067 -- updating the delivery table for carrier selection --
11068 -- --
11069 -- --
11070 -- CHANGE CONTROL LOG --
11071 -- ------------------ --
11072 -- --
11073 -- DATE VERSION BY BUG DESCRIPTION --
11074 -- ---------- ------- -------- ------- ---------------------------------- --
11075 -- 2002/12/09 I ABLUNDEL ------- Created --
11076 -- Attribute passed initially --
11077 -- p_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers, --
11078 -- p_carrier_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers, --
11079 -- p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11080 -- p_mode_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11081 -- p_freight_term_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11082 -- p_smc_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11083 -- --
11084 -- -------------------------------------------------------------------------- --
11085
11086 -- Result table will be of type Shipping
11087
11088 PROCEDURE FORMAT_DEL_UPDATE_TABLE(--p_cs_result_tab IN FTE_ACS_PKG.FTE_CS_RESULT_TAB_TYPE,
11089 p_cs_result_tab IN WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
11090 p_caller IN VARCHAR2 DEFAULT NULL,
11091 x_rec_attr_tab OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
11092 x_trip_info_tab OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type,
11093 x_return_message OUT NOCOPY VARCHAR2,
11094 x_return_status OUT NOCOPY VARCHAR2) IS
11095
11096 fmc NUMBER;
11097 fmct NUMBER;
11098 fm NUMBER;
11099
11100 trpidx NUMBER;
11101 l_del_found BOOLEAN;
11102 l_error_code NUMBER;
11103 l_error_text VARCHAR2(2000);
11104 l_del_org_id NUMBER;
11105 l_prev_org_id NUMBER;
11106 l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'N';
11107 l_param_value_info WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11108 l_ignore_for_planning WSH_TRIPS.ignore_for_planning%TYPE;
11109 --
11110 l_debug_on BOOLEAN;
11111 --
11112 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FORMAT_DEL_UPDATE_TABLE';
11113 --
11114 BEGIN
11115
11116 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11117 --
11118 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11119 --
11120 IF l_debug_on IS NULL
11121 THEN
11122 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11123 END IF;
11124 --
11125 --
11126 -- Debug Statements
11127 --
11128 IF l_debug_on THEN
11129 WSH_DEBUG_SV.push(l_module_name);
11130 END IF;
11131 --
11132
11133 IF l_debug_on THEN
11134 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab.COUNT :'||p_cs_result_tab.COUNT);
11135
11136 END IF;
11137
11138 IF (p_cs_result_tab.COUNT > 0) THEN
11139
11140 fmc := 0;
11141 fmct := 0;
11142 l_prev_org_id := 0;
11143
11144 fm := p_cs_result_tab.FIRST;
11145 IF l_debug_on THEN
11146 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).delivery_id :'||p_cs_result_tab(fm).delivery_id);
11147 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).trip_id :'||p_cs_result_tab(fm).trip_id);
11148 END IF;
11149
11150 LOOP
11151
11152 IF (p_cs_result_tab(fm).trip_id) is NULL THEN
11153
11154 fmc := fmc + 1;
11155 IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11156
11157 x_rec_attr_tab(fmc).DELIVERY_ID := p_cs_result_tab(fm).delivery_id;
11158 x_rec_attr_tab(fmc).NAME := FND_API.G_MISS_CHAR;
11159 x_rec_attr_tab(fmc).PLANNED_FLAG := FND_API.G_MISS_CHAR;
11160 x_rec_attr_tab(fmc).STATUS_CODE := FND_API.G_MISS_CHAR;
11161 x_rec_attr_tab(fmc).DELIVERY_TYPE := FND_API.G_MISS_CHAR;
11162 x_rec_attr_tab(fmc).LOADING_SEQUENCE := FND_API.G_MISS_NUM;
11163 x_rec_attr_tab(fmc).LOADING_ORDER_FLAG := FND_API.G_MISS_CHAR;
11164 x_rec_attr_tab(fmc).INITIAL_PICKUP_DATE := FND_API.G_MISS_DATE;
11165 x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_ID := FND_API.G_MISS_NUM;
11166 x_rec_attr_tab(fmc).ORGANIZATION_ID := FND_API.G_MISS_NUM;
11167 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_ID := FND_API.G_MISS_NUM;
11168 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_DATE := FND_API.G_MISS_DATE;
11169 x_rec_attr_tab(fmc).CUSTOMER_ID := FND_API.G_MISS_NUM;
11170 x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_ID := FND_API.G_MISS_NUM;
11171 x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_ID := FND_API.G_MISS_NUM;
11172
11173 -- Bug 4524023 (issue 1)
11174 /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11175 x_rec_attr_tab(fmc).CARRIER_ID := FND_API.G_MISS_NUM;
11176 ELSE*/
11177 x_rec_attr_tab(fmc).CARRIER_ID := p_cs_result_tab(fm).carrier_id;
11178
11179 --END IF;
11180
11181 /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11182 x_rec_attr_tab(fmc).SHIP_METHOD_CODE := FND_API.G_MISS_CHAR;
11183 ELSE*/
11184 x_rec_attr_tab(fmc).SHIP_METHOD_CODE := p_cs_result_tab(fm).ship_method_code;
11185 --END IF;
11186
11187 IF (p_cs_result_tab(fm).freight_terms_code IS NULL) THEN
11188 x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11189 ELSE
11190 x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11191 END IF;
11192
11193 x_rec_attr_tab(fmc).FOB_CODE := FND_API.G_MISS_CHAR;
11194 x_rec_attr_tab(fmc).FOB_LOCATION_ID := FND_API.G_MISS_NUM;
11195 x_rec_attr_tab(fmc).WAYBILL := FND_API.G_MISS_CHAR;
11196 x_rec_attr_tab(fmc).DOCK_CODE := FND_API.G_MISS_CHAR;
11197 x_rec_attr_tab(fmc).ACCEPTANCE_FLAG := FND_API.G_MISS_CHAR;
11198 x_rec_attr_tab(fmc).ACCEPTED_BY := FND_API.G_MISS_CHAR;
11199 x_rec_attr_tab(fmc).ACCEPTED_DATE := FND_API.G_MISS_DATE;
11200 x_rec_attr_tab(fmc).ACKNOWLEDGED_BY := FND_API.G_MISS_CHAR;
11201 x_rec_attr_tab(fmc).CONFIRMED_BY := FND_API.G_MISS_CHAR;
11202 x_rec_attr_tab(fmc).CONFIRM_DATE := FND_API.G_MISS_DATE;
11203 x_rec_attr_tab(fmc).ASN_DATE_SENT := FND_API.G_MISS_DATE;
11204 x_rec_attr_tab(fmc).ASN_STATUS_CODE := FND_API.G_MISS_CHAR;
11205 x_rec_attr_tab(fmc).ASN_SEQ_NUMBER := FND_API.G_MISS_NUM;
11206 x_rec_attr_tab(fmc).GROSS_WEIGHT := FND_API.G_MISS_NUM;
11207 x_rec_attr_tab(fmc).NET_WEIGHT := FND_API.G_MISS_NUM;
11208 x_rec_attr_tab(fmc).WEIGHT_UOM_CODE := FND_API.G_MISS_CHAR;
11209 x_rec_attr_tab(fmc).VOLUME := FND_API.G_MISS_NUM;
11210 x_rec_attr_tab(fmc).VOLUME_UOM_CODE := FND_API.G_MISS_CHAR;
11211 x_rec_attr_tab(fmc).ADDITIONAL_SHIPMENT_INFO := FND_API.G_MISS_CHAR;
11212 x_rec_attr_tab(fmc).CURRENCY_CODE := FND_API.G_MISS_CHAR;
11213 x_rec_attr_tab(fmc).ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11214 x_rec_attr_tab(fmc).ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11215 x_rec_attr_tab(fmc).ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11216 x_rec_attr_tab(fmc).ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11217 x_rec_attr_tab(fmc).ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11218 x_rec_attr_tab(fmc).ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11219 x_rec_attr_tab(fmc).ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11220 x_rec_attr_tab(fmc).ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11221 x_rec_attr_tab(fmc).ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11222 x_rec_attr_tab(fmc).ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11223 x_rec_attr_tab(fmc).ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11224 x_rec_attr_tab(fmc).ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11225 x_rec_attr_tab(fmc).ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11226 x_rec_attr_tab(fmc).ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11227 x_rec_attr_tab(fmc).ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11228 x_rec_attr_tab(fmc).ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11229 x_rec_attr_tab(fmc).TP_ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11230 x_rec_attr_tab(fmc).TP_ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11231 x_rec_attr_tab(fmc).TP_ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11232 x_rec_attr_tab(fmc).TP_ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11233 x_rec_attr_tab(fmc).TP_ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11234 x_rec_attr_tab(fmc).TP_ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11235 x_rec_attr_tab(fmc).TP_ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11236 x_rec_attr_tab(fmc).TP_ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11237 x_rec_attr_tab(fmc).TP_ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11238 x_rec_attr_tab(fmc).TP_ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11239 x_rec_attr_tab(fmc).TP_ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11240 x_rec_attr_tab(fmc).TP_ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11241 x_rec_attr_tab(fmc).TP_ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11242 x_rec_attr_tab(fmc).TP_ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11243 x_rec_attr_tab(fmc).TP_ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11244 x_rec_attr_tab(fmc).TP_ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11245 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11246 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11247 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11248 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11249 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11250 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11251 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11252 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11253 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11254 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11255 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11256 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11257 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11258 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11259 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11260 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11261 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE16 := FND_API.G_MISS_CHAR;
11262 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE17 := FND_API.G_MISS_CHAR;
11263 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE18 := FND_API.G_MISS_CHAR;
11264 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE19 := FND_API.G_MISS_CHAR;
11265 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE20 := FND_API.G_MISS_CHAR;
11266 x_rec_attr_tab(fmc).CREATION_DATE := FND_API.G_MISS_DATE;
11267 x_rec_attr_tab(fmc).CREATED_BY := FND_API.G_MISS_NUM;
11268 x_rec_attr_tab(fmc).LAST_UPDATE_DATE := FND_API.G_MISS_DATE;
11269 x_rec_attr_tab(fmc).LAST_UPDATED_BY := FND_API.G_MISS_NUM;
11270 x_rec_attr_tab(fmc).LAST_UPDATE_LOGIN := FND_API.G_MISS_NUM;
11271 x_rec_attr_tab(fmc).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11272 x_rec_attr_tab(fmc).PROGRAM_ID := FND_API.G_MISS_NUM;
11273 x_rec_attr_tab(fmc).PROGRAM_UPDATE_DATE := FND_API.G_MISS_DATE;
11274 x_rec_attr_tab(fmc).REQUEST_ID := FND_API.G_MISS_NUM;
11275 x_rec_attr_tab(fmc).BATCH_ID := FND_API.G_MISS_NUM;
11276 x_rec_attr_tab(fmc).HASH_VALUE := FND_API.G_MISS_NUM;
11277 x_rec_attr_tab(fmc).SOURCE_HEADER_ID := FND_API.G_MISS_NUM;
11278 x_rec_attr_tab(fmc).NUMBER_OF_LPN := FND_API.G_MISS_NUM;
11279 x_rec_attr_tab(fmc).COD_AMOUNT := FND_API.G_MISS_NUM;
11280 x_rec_attr_tab(fmc).COD_CURRENCY_CODE := FND_API.G_MISS_CHAR;
11281 x_rec_attr_tab(fmc).COD_REMIT_TO := FND_API.G_MISS_CHAR;
11282 x_rec_attr_tab(fmc).COD_CHARGE_PAID_BY := FND_API.G_MISS_CHAR;
11283 x_rec_attr_tab(fmc).PROBLEM_CONTACT_REFERENCE := FND_API.G_MISS_CHAR;
11284 x_rec_attr_tab(fmc).PORT_OF_LOADING := FND_API.G_MISS_CHAR;
11285 x_rec_attr_tab(fmc).PORT_OF_DISCHARGE := FND_API.G_MISS_CHAR;
11286 x_rec_attr_tab(fmc).FTZ_NUMBER := FND_API.G_MISS_CHAR;
11287 x_rec_attr_tab(fmc).ROUTED_EXPORT_TXN := FND_API.G_MISS_CHAR;
11288 x_rec_attr_tab(fmc).ENTRY_NUMBER := FND_API.G_MISS_CHAR;
11289 x_rec_attr_tab(fmc).ROUTING_INSTRUCTIONS := FND_API.G_MISS_CHAR;
11290 x_rec_attr_tab(fmc).IN_BOND_CODE := FND_API.G_MISS_CHAR;
11291 x_rec_attr_tab(fmc).SHIPPING_MARKS := FND_API.G_MISS_CHAR;
11292
11293 /*IF (p_cs_result_tab(fm).service_level is null) THEN
11294 x_rec_attr_tab(fmc).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11295 ELSE*/
11296 x_rec_attr_tab(fmc).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11297 --END IF;
11298
11299 /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11300 x_rec_attr_tab(fmc).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11301 ELSE*/
11302 x_rec_attr_tab(fmc).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11303 --END IF;
11304
11305 x_rec_attr_tab(fmc).ASSIGNED_TO_FTE_TRIPS := FND_API.G_MISS_CHAR;
11306 x_rec_attr_tab(fmc).AUTO_SC_EXCLUDE_FLAG := FND_API.G_MISS_CHAR;
11307 x_rec_attr_tab(fmc).AUTO_AP_EXCLUDE_FLAG := FND_API.G_MISS_CHAR;
11308 x_rec_attr_tab(fmc).AP_BATCH_ID := FND_API.G_MISS_NUM;
11309
11310 -- x_rec_attr_tab(fmc).ROWID := FND_API.G_MISS_CHAR;
11311 x_rec_attr_tab(fmc).LOADING_ORDER_DESC := FND_API.G_MISS_CHAR;
11312 x_rec_attr_tab(fmc).ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11313 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_CODE:= FND_API.G_MISS_CHAR;
11314 x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_CODE := FND_API.G_MISS_CHAR;
11315 x_rec_attr_tab(fmc).CUSTOMER_NUMBER := FND_API.G_MISS_CHAR;
11316 x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
11317 x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
11318 x_rec_attr_tab(fmc).CARRIER_CODE := FND_API.G_MISS_CHAR;
11319 x_rec_attr_tab(fmc).SHIP_METHOD_NAME := FND_API.G_MISS_CHAR;
11320 x_rec_attr_tab(fmc).FREIGHT_TERMS_NAME := FND_API.G_MISS_CHAR;
11321 x_rec_attr_tab(fmc).FOB_NAME := FND_API.G_MISS_CHAR;
11322 x_rec_attr_tab(fmc).FOB_LOCATION_CODE := FND_API.G_MISS_CHAR;
11323 x_rec_attr_tab(fmc).WEIGHT_UOM_DESC := FND_API.G_MISS_CHAR;
11324 x_rec_attr_tab(fmc).VOLUME_UOM_DESC := FND_API.G_MISS_CHAR;
11325 x_rec_attr_tab(fmc).CURRENCY_NAME := FND_API.G_MISS_CHAR;
11326 END IF;
11327
11328 ELSE
11329
11330 fmct := fmct + 1;
11331
11332 IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11333
11334 /*
11335 -- Hiding project
11336 IF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11337
11338 -- AG use organization_id from cs_result_tab
11339 l_del_org_id := p_cs_result_tab(fm).organization_id;
11340
11341 IF l_del_org_id <> l_prev_org_id THEN
11342
11343 l_param_value_info.organization_id := l_del_org_id;
11344 l_param_value_info.param_name(1) := 'SKIP_RTNG_RULE_AC_TRIP';
11345
11346 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_value_info,
11347 x_return_status => x_return_status);
11348 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
11349 END IF;
11350 END IF;
11351 */ -- Hiding project
11352
11353 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11354 /*
11355 -- Hiding project
11356 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
11357 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
11358 */ -- Hiding project
11359 x_trip_info_tab(fmct).TRIP_ID := p_cs_result_tab(fm).trip_id;
11360
11361 x_trip_info_tab(fmct).NAME := FND_API.G_MISS_CHAR;
11362 --x_trip_info_tab(fmct).PLANNED_FLAG := FND_API.G_MISS_CHAR;
11363 x_trip_info_tab(fmct).PLANNED_FLAG := 'N';
11364 x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_ID := FND_API.G_MISS_NUM;
11365 x_trip_info_tab(fmct).STATUS_CODE := 'OP';
11366 x_trip_info_tab(fmct).VEHICLE_ITEM_ID := FND_API.G_MISS_NUM;
11367 x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_ID := FND_API.G_MISS_NUM;
11368 x_trip_info_tab(fmct).VEHICLE_NUMBER := FND_API.G_MISS_CHAR;
11369 x_trip_info_tab(fmct).VEHICLE_NUM_PREFIX := FND_API.G_MISS_CHAR;
11370
11371 /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11372 x_trip_info_tab(fmct).CARRIER_ID := FND_API.G_MISS_NUM;
11373 ELSE*/
11374 x_trip_info_tab(fmct).CARRIER_ID := p_cs_result_tab(fm).carrier_id;
11375 --END IF;
11376
11377 /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11378 x_trip_info_tab(fmct).SHIP_METHOD_CODE := FND_API.G_MISS_CHAR;
11379 ELSE*/
11380 x_trip_info_tab(fmct).SHIP_METHOD_CODE := p_cs_result_tab(fm).ship_method_code;
11381 --END IF;
11382
11383
11384 IF (p_cs_result_tab(fm).consignee_carrier_ac_no is null) THEN
11385 x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := FND_API.G_MISS_CHAR;
11386 ELSE
11387 x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := p_cs_result_tab(fm).consignee_carrier_ac_no;
11388 END IF;
11389
11390 -- AG
11391 -- cs_result_tab.rank stores rank_sequence
11392 -- It is not same as trip's rank_id which has already been updated by FTE
11393 -- rank_list_action API
11394 x_trip_info_tab(fmct).RANK_ID := FND_API.G_MISS_NUM;
11395
11396 IF (p_cs_result_tab(fm).append_flag is null) THEN
11397 x_trip_info_tab(fmct).APPEND_FLAG := FND_API.G_MISS_CHAR;
11398 ELSE
11399 x_trip_info_tab(fmct).APPEND_FLAG := p_cs_result_tab(fm).append_flag;
11400 END IF;
11401
11402 -- AG Use rule_id from p_cs_result_tab and not routing_rule_id
11403
11404 IF (p_cs_result_tab(fm).rule_id is null) THEN
11405 x_trip_info_tab(fmct).ROUTING_RULE_ID := FND_API.G_MISS_NUM;
11406 ELSE
11407 x_trip_info_tab(fmct).ROUTING_RULE_ID := p_cs_result_tab(fm).rule_id ;
11408 END IF;
11409
11410 x_trip_info_tab(fmct).ROUTE_ID := FND_API.G_MISS_NUM;
11411 x_trip_info_tab(fmct).ROUTING_INSTRUCTIONS := FND_API.G_MISS_CHAR;
11412 x_trip_info_tab(fmct).ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11413 x_trip_info_tab(fmct).ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11414 x_trip_info_tab(fmct).ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11415 x_trip_info_tab(fmct).ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11416 x_trip_info_tab(fmct).ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11417 x_trip_info_tab(fmct).ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11418 x_trip_info_tab(fmct).ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11419 x_trip_info_tab(fmct).ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11420 x_trip_info_tab(fmct).ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11421 x_trip_info_tab(fmct).ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11422 x_trip_info_tab(fmct).ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11423 x_trip_info_tab(fmct).ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11424 x_trip_info_tab(fmct).ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11425 x_trip_info_tab(fmct).ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11426 x_trip_info_tab(fmct).ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11427 x_trip_info_tab(fmct).ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11428 x_trip_info_tab(fmct).CREATION_DATE := SYSDATE;
11429 x_trip_info_tab(fmct).CREATED_BY := fnd_global.user_id;
11430 x_trip_info_tab(fmct).LAST_UPDATE_DATE := SYSDATE;
11431 x_trip_info_tab(fmct).LAST_UPDATED_BY := fnd_global.user_id;
11432 x_trip_info_tab(fmct).LAST_UPDATE_LOGIN := fnd_global.login_id;
11433 x_trip_info_tab(fmct).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11434 x_trip_info_tab(fmct).PROGRAM_ID := FND_API.G_MISS_NUM;
11435 x_trip_info_tab(fmct).PROGRAM_UPDATE_DATE := FND_API.G_MISS_DATE;
11436 x_trip_info_tab(fmct).REQUEST_ID := FND_API.G_MISS_NUM;
11437
11438 /*IF (p_cs_result_tab(fm).service_level is null) THEN
11439 x_trip_info_tab(fmct).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11440 ELSE*/
11441 x_trip_info_tab(fmct).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11442 --END IF;
11443
11444 /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11445 x_trip_info_tab(fmct).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11446 ELSE*/
11447 x_trip_info_tab(fmct).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11448 --END IF;
11449
11450 IF (p_cs_result_tab(fm).freight_terms_code is null) THEN
11451 x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11452 ELSE
11453 x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11454 END IF;
11455
11456 x_trip_info_tab(fmct).CONSOLIDATION_ALLOWED := FND_API.G_MISS_CHAR;
11457 x_trip_info_tab(fmct).LOAD_TENDER_STATUS := FND_API.G_MISS_CHAR;
11458 x_trip_info_tab(fmct).ROUTE_LANE_ID := FND_API.G_MISS_NUM;
11459 x_trip_info_tab(fmct).LANE_ID := FND_API.G_MISS_NUM;
11460 x_trip_info_tab(fmct).SCHEDULE_ID := FND_API.G_MISS_NUM;
11461 x_trip_info_tab(fmct).BOOKING_NUMBER := FND_API.G_MISS_CHAR;
11462 x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_NAME := FND_API.G_MISS_CHAR;
11463 x_trip_info_tab(fmct).SHIP_METHOD_NAME := FND_API.G_MISS_CHAR;
11464 x_trip_info_tab(fmct).VEHICLE_ITEM_DESC := FND_API.G_MISS_CHAR;
11465 x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11466
11467 END IF;
11468 END IF;
11469
11470 END IF; -- END of IF (p_trip_id_tab(trpidx) is NULL) THEN
11471 --
11472 EXIT WHEN fm = p_cs_result_tab.LAST;
11473 fm := p_cs_result_tab.NEXT(fm);
11474 END LOOP;
11475 END IF;
11476
11477 --
11478 -- Debug Statements
11479 --
11480 IF l_debug_on THEN
11481 WSH_DEBUG_SV.pop(l_module_name);
11482 END IF;
11483 --
11484 RETURN;
11485
11486 EXCEPTION
11487 WHEN OTHERS THEN
11488 x_rec_attr_tab.DELETE;
11489 l_error_code := SQLCODE;
11490 l_error_text := SQLERRM;
11491 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11492 --
11493 -- Debug Statements
11494 --
11495 IF l_debug_on THEN
11496 WSH_DEBUG_SV.logmsg(l_module_name, 'THE UNEXPECTED ERROR FROM WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE IS ' ||l_error_text);
11497 END IF;
11498 --
11499 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE');
11500 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
11501 --
11502 -- Debug Statements
11503 --
11504 IF l_debug_on THEN
11505 WSH_DEBUG_SV.pop(l_module_name);
11506 END IF;
11507 --
11508 RETURN;
11509
11510 --
11511 -- Debug Statements
11512 --
11513 IF l_debug_on THEN
11514 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11515 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11516 END IF;
11517 --
11518 END FORMAT_DEL_UPDATE_TABLE;
11519
11520
11521 PROCEDURE PROCESS_CARRIER_SELECTION(p_delivery_id_tab IN OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
11522 p_batch_id IN NUMBER,
11523 p_form_flag IN VARCHAR2,
11524 p_organization_id IN NUMBER DEFAULT NULL,
11525 p_caller IN VARCHAR2 DEFAULT NULL,
11526 x_return_message OUT NOCOPY VARCHAR2,
11527 x_return_status OUT NOCOPY VARCHAR2) IS
11528
11529 --
11530 -- Cursor to get delivery info from the table of delivery ids
11531 -- Carrier selection is not required if delivery's ship from location id is null.
11532 --
11533 cursor c_get_del_info_by_del_id(x_delivery_id NUMBER) IS
11534 select delivery_id,
11535 name,
11536 organization_id,
11537 gross_weight,
11538 weight_uom_code,
11539 volume,
11540 volume_uom_code,
11541 initial_pickup_location_id,
11542 ultimate_dropoff_location_id,
11543 customer_id,
11544 freight_terms_code,
11545 NULL, -- planned_flag,
11546 initial_pickup_date,
11547 ultimate_dropoff_date,
11548 fob_code,
11549 shipment_direction,
11550 delivery_type,
11551 NULL -- l_trip_id
11552 from wsh_new_deliveries
11553 where delivery_id = x_delivery_id
11554 and ship_method_code is null
11555 AND initial_pickup_location_id <> WSH_UTIL_CORE.C_NULL_SF_LOCN_ID -- J-IB-NPARIKH
11556 and planned_flag NOT IN ('Y','F');
11557
11558 --
11559 -- cursor to get delivery info from the delivery table (for Pick Release Call)
11560 --
11561
11562 cursor c_get_del_info_by_batch_id( x_batch_id NUMBER,
11563 x_organization_id NUMBER
11564 ) IS
11565 select delivery_id,
11566 name,
11567 organization_id,
11568 gross_weight,
11569 weight_uom_code,
11570 volume,
11571 volume_uom_code,
11572 initial_pickup_location_id,
11573 ultimate_dropoff_location_id,
11574 customer_id,
11575 freight_terms_code,
11576 NULL, -- planned_flag,
11577 initial_pickup_date,
11578 ultimate_dropoff_date,
11579 fob_code,
11580 shipment_direction,
11581 delivery_type,
11582 NULL -- l_trip_id
11583 from wsh_new_deliveries
11584 where batch_id = x_batch_id
11585 and organization_id = x_organization_id
11586 and ship_method_code is null
11587 and planned_flag NOT IN ('Y','F');
11588
11589 --
11590 -- cursor to get delivery info from the delivery table (for form call)
11591 -- BUG:2369435 - added planned_flag to cursor
11592 --
11593 cursor c_get_del_info_by_form(f_delivery_id NUMBER) IS
11594 select delivery_id,
11595 name,
11596 organization_id,
11597 gross_weight,
11598 weight_uom_code,
11599 volume,
11600 volume_uom_code,
11601 initial_pickup_location_id,
11602 ultimate_dropoff_location_id,
11603 customer_id,
11604 freight_terms_code,
11605 planned_flag,
11606 initial_pickup_date,
11607 ultimate_dropoff_date,
11608 fob_code,
11609 shipment_direction,
11610 delivery_type,
11611 NULL -- l_trip_id
11612 from wsh_new_deliveries
11613 where delivery_id = f_delivery_id;
11614
11615 CURSOR check_del_assigned(p_del_id IN NUMBER) IS
11616 select wts.trip_id,
11617 wt.rank_id
11618 from wsh_trip_stops wts,
11619 wsh_delivery_legs wdl,
11620 wsh_trips wt
11621 where wdl.delivery_id = p_del_id
11622 and wts.stop_id = wdl.pick_up_stop_id
11623 and wts.trip_id = wt.trip_id;
11624
11625 -- AG not required
11626 /*
11627 CURSOR get_org_for_delivery(p_del_id IN NUMBER) IS
11628 select wnd.organization_id
11629 from wsh_new_deliveries wnd
11630 where wnd.delivery_id = p_del_id;
11631 */
11632
11633
11634 l_trip_id_tab WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
11635 l_return_status VARCHAR2(1); -- returning error/success/warning
11636 l_return_message VARCHAR2(2000); -- hold a return error message
11637 l_BatchSize PLS_INTEGER := 500; -- max rows from a batch fetch
11638 l_current_rows PLS_INTEGER; -- number of current rows fetched
11639 l_remaining_rows PLS_INTEGER; -- number of remaining rows left
11640 l_previous_rows PLS_INTEGER; -- rows previously processed
11641 l_result_found_flag VARCHAR2(1) := 'N'; -- indicates a found result
11642 l_messaging_yn VARCHAR2(1);
11643 l_y_planned_flag VARCHAR2(1);
11644
11645 -- new parameter for getting
11646 -- shipping paramters
11647 --
11648 -- Variables used for error handling
11649 --
11650 l_error_code NUMBER; -- Oracle SQL Error Number
11651 l_error_text VARCHAR2(2000); -- Oracle SQL Error Text
11652
11653 --
11654 -- New variables added for new call to group constraint API to update delivery table
11655 --
11656
11657 l_in_rec WSH_DELIVERIES_GRP.Del_In_Rec_Type;
11658 l_trip_in_rec WSH_TRIPS_GRP.tripInRecType;
11659 l_rec_attr_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
11660 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
11661 l_trip_out_rec_tab WSH_TRIPS_GRP.Trip_Out_Tab_Type;
11662 l_del_out_rec_tab WSH_DELIVERIES_GRP.Del_Out_Tbl_Type;
11663 l_msg_count NUMBER;
11664 l_msg_data VARCHAR2(2000);
11665 l_del_org_id NUMBER;
11666 l_prev_org_id NUMBER;
11667 l_trip_status VARCHAR2(50); -- get_trip_status
11668 --alksharm
11669 l_trip_id NUMBER;
11670 l_prev_trip_id NUMBER;
11671 l_trip_name VARCHAR2(30);
11672 l_delivery_id NUMBER;
11673 list_cnt NUMBER;
11674 l_cs_mleg_result_tab WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11675 l_ranked_list WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11676
11677 l_rank_id NUMBER;
11678 l_trip_rank_seq NUMBER;
11679 l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'N';
11680 -- sachin
11681 x_ranked_list WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11682 -- Rename
11683
11684
11685 l_initial_pickup_date DATE;
11686 l_ultimate_dropoff_date DATE;
11687 i NUMBER;
11688 j NUMBER;
11689 k NUMBER;
11690 l_global_param_rec WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
11691 l_param_value_info WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11692 l_prev_delivery_id NUMBER;
11693 l_start_index NUMBER;
11694 l_end_index NUMBER;
11695 rec_cnt NUMBER;
11696 l_del_result_type VARCHAR2(60);
11697 l_rank_list_source VARCHAR2(30);
11698
11699 --
11700 -- sbakshi
11701 --
11702 l_carrier_sel_entity_tab WSH_FTE_INTEGRATION.WSH_CS_ENTITY_TAB_TYPE;
11703
11704 l_carrier_sel_result_rec WSH_FTE_INTEGRATION.WSH_CS_RESULT_REC_TYPE;
11705
11706 l_cs_result_tab WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11707 l_cs_output_message_tab WSH_FTE_INTEGRATION.wsh_cs_output_message_tab;
11708
11709
11710 l_dlvy_info_tab wsh_cs_delivery_info_tab;
11711 l_dlvy_info_rec wsh_cs_delivery_info_rec;
11712
11713 itr NUMBER;
11714 l_cnt NUMBER := 0;
11715 l_start_search_level_flag VARCHAR2(10) := 'SCOE';
11716 l_param_rec WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11717 l_num_ranked_results NUMBER;
11718 -- sbakshi
11719
11720 -- Debug Variables
11721 l_debug_on BOOLEAN;
11722 --
11723
11724 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PROCESS_CARRIER_SELECTION';
11725
11726 BEGIN
11727 --
11728 -- initialize the procedure return flags
11729 --
11730 --
11731 -- Debug Statements
11732 --
11733 --
11734 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11735 --
11736 IF l_debug_on IS NULL
11737 THEN
11738 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11739 END IF;
11740 --
11741 IF l_debug_on THEN
11742 WSH_DEBUG_SV.push(l_module_name);
11743 --
11744 WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11745 WSH_DEBUG_SV.log(l_module_name,'P_FORM_FLAG',P_FORM_FLAG);
11746 WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
11747 END IF;
11748 --
11749
11750 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11751 x_return_message := null;
11752
11753 IF WSH_UTIL_CORE.FTE_Is_Installed <> 'Y' THEN
11754 return;
11755 END IF;
11756
11757 l_y_planned_flag := 'Y';
11758
11759 IF ((p_batch_id is null) AND
11760 (p_delivery_id_tab.COUNT <= 0)) THEN
11761 --
11762 -- Invalid input parameters means we will not be able to get delivery
11763 -- information, thus, we will not be able to call carrier selection,
11764 -- return to the calling procedure
11765 --
11766
11767 IF l_debug_on THEN
11768 --
11769 WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11770 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID_TAB.COUNT',p_delivery_id_tab.COUNT);
11771
11772 END IF;
11773
11774 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_INVALID_INPUT');
11775 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11776 WSH_UTIL_CORE.add_message(x_return_status);
11777 --
11778 -- Debug Statements
11779 --
11780 IF l_debug_on THEN
11781 WSH_DEBUG_SV.logmsg(l_module_name, 'THE INPUT PARAMETERS ARE INVALID FOR THIS PROCEDURE' );
11782 END IF;
11783 --
11784
11785 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11786 -- 2292513
11787 --
11788 -- Debug Statements
11789 --
11790 IF l_debug_on THEN
11791 WSH_DEBUG_SV.pop(l_module_name);
11792 END IF;
11793 --
11794 RETURN;
11795 END IF;
11796
11797 -- Pick Release
11798 IF (p_batch_id is not null) THEN
11799
11800 l_result_found_flag := 'N';
11801 --
11802 -- Set the messaging flag
11803 --
11804 l_messaging_yn := 'N';
11805 l_previous_rows := 0;
11806
11807 IF l_debug_on THEN
11808 WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery info by batch id' );
11809 END IF;
11810
11811
11812 OPEN c_get_del_info_by_batch_id(p_batch_id, p_organization_id);
11813 FETCH c_get_del_info_by_batch_id BULK COLLECT INTO l_dlvy_info_tab;
11814 CLOSE c_get_del_info_by_batch_id;
11815
11816 -- Auto Apply routing rules is End of append delivery.
11817 ELSIF ((p_delivery_id_tab.COUNT > 0) AND
11818 (p_batch_id is null) AND (p_form_flag = 'N')) THEN
11819
11820 l_messaging_yn := 'Y';
11821
11822
11823 --FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
11824 itr := p_delivery_id_tab.FIRST;
11825 IF itr IS NOT NULL THEN
11826 LOOP
11827
11828 IF l_debug_on THEN
11829 WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT || ' *** '|| p_delivery_id_tab(itr)|| ' *** ');
11830 END IF;
11831
11832 OPEN c_get_del_info_by_del_id(p_delivery_id_tab(itr));
11833 FETCH c_get_del_info_by_del_id INTO l_dlvy_info_rec;
11834 CLOSE c_get_del_info_by_del_id;
11835
11836 /*IF l_debug_on THEN
11837 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.delivery_id: *** : '|| l_dlvy_info_rec.delivery_id);
11838 END IF;*/
11839
11840 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
11841 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
11842 l_cnt := l_cnt+1 ;
11843 END IF;
11844 EXIT WHEN itr = p_delivery_id_tab.LAST;
11845 itr := p_delivery_id_tab.NEXT(itr);
11846 END LOOP;
11847 END IF;
11848
11849 --Call from UI.
11850 ELSIF ((p_delivery_id_tab.COUNT > 0) AND
11851 (p_batch_id is null) AND
11852 (p_form_flag = 'Y')) THEN
11853
11854 l_messaging_yn := 'Y';
11855
11856 IF l_debug_on THEN
11857 WSH_DEBUG_SV.logmsg(l_module_name,'Getting Information using Form');
11858 WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT);
11859 END IF;
11860
11861
11862 FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
11863
11864 IF l_debug_on THEN
11865 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY ID '||p_delivery_id_tab(i));
11866 END IF;
11867
11868 OPEN c_get_del_info_by_form(p_delivery_id_tab(i));
11869 FETCH c_get_del_info_by_form INTO l_dlvy_info_rec;
11870 CLOSE c_get_del_info_by_form;
11871
11872 IF l_debug_on THEN
11873 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.l_delivery_id: '|| l_dlvy_info_rec.l_delivery_id);
11874 END IF;
11875
11876 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
11877
11878 IF (l_dlvy_info_rec.l_planned_flag IN ('Y', 'F')) THEN
11879 --
11880 -- Delivery is planned cannot do carrier selection
11881 --
11882 --
11883 -- [2003/01/29][I][ABLUNDEL][BUG# 2765987]
11884 -- Changed planned delivery to an ERROR from a WARNING
11885 --
11886 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11887 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11888 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_PLAN_DEL');
11889 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11890 wsh_util_core.add_message(x_return_status);
11891 --
11892 -- Debug Statements
11893 --
11894 IF l_debug_on THEN
11895 WSH_DEBUG_SV.logmsg(l_module_name, 'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS A PLANNED DELIVERY , CARRIER SELECTION IS NOT ALLOWED' );
11896 END IF;
11897 --
11898 -- 11i10+ change
11899 ELSE
11900
11901 l_trip_status := get_trip_status(l_dlvy_info_rec.l_delivery_id,l_dlvy_info_rec.l_delivery_type);
11902 -- Delivery is assigned to more than one trip
11903 IF (l_trip_status = 'MANY') THEN
11904
11905 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11906 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11907 IF (substr(p_caller,1,3) = 'FTE') THEN
11908 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY_FTE');
11909 ELSE
11910 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY');
11911 END IF;
11912 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11913 wsh_util_core.add_message(x_return_status);
11914
11915 IF l_debug_on THEN
11916 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO MANY TRIPS, CARRIER SELECTION IS NOT ALLOWED' );
11917 END IF;
11918
11919 -- Trip to which this delivery is assigned has more than one deliveries
11920 ELSIF (l_trip_status = 'SHARED') THEN
11921
11922 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11923 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11924 IF (substr(p_caller,1,3) = 'FTE') THEN
11925 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_SHARED_FTE');
11926 ELSE
11927 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_SHARED');
11928 END IF;
11929
11930 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11931 wsh_util_core.add_message(x_return_status);
11932
11933 IF l_debug_on THEN
11934 WSH_DEBUG_SV.logmsg(l_module_name, 'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO A SHARED TRIP, CARRIER SELECTION IS NOT ALLOWED' );
11935 END IF;
11936
11937 -- Trip to which this delivery is assigned has Lane/Service
11938 ELSIF (l_trip_status = 'HAS_LANE') THEN
11939
11940 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11941 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11942
11943 IF (substr(p_caller,1,3) = 'FTE') THEN
11944 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_HAS_LANE_FTE');
11945 ELSE
11946 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_HAS_LANE');
11947 END IF;
11948 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
11949 wsh_util_core.add_message(x_return_status);
11950
11951 IF l_debug_on THEN
11952 WSH_DEBUG_SV.logmsg(l_module_name, 'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS ASSIGNED TO A TRIP WITH SERVICE, CARRIER SELECTION IS NOT ALLOWED' );
11953 END IF;
11954
11955 -- Delivery is not assigned to a trip Or
11956 -- Delivery is assigned to one trip and this trip is not shared with other deliveries
11957 ELSE -- BUG:2369435
11958
11959 IF (substr(l_trip_status,1,3) = 'ONE') THEN
11960 l_dlvy_info_rec.l_trip_id := to_number(substr(l_trip_status,5));
11961 ELSE
11962 l_dlvy_info_rec.l_trip_id := null;
11963 END IF;
11964 --Validate other things
11965 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
11966 l_cnt := l_cnt +1 ;
11967 END IF;
11968 END IF;
11969 END IF;
11970 END LOOP; -- FOR i IN p_delivery_id_tab.FISRT..p_delivery_id_tab.LAST LOOP
11971 END IF;
11972
11973
11974 IF (l_dlvy_info_tab.COUNT = 0) THEN
11975 IF l_debug_on THEN
11976 WSH_DEBUG_SV.logmsg(l_module_name, 'now exiting');
11977 WSH_DEBUG_SV.pop(l_module_name);
11978 END IF;
11979 RETURN;
11980 END IF;
11981
11982 l_cnt:= 0;
11983
11984 i := l_dlvy_info_tab.FIRST;
11985
11986 LOOP
11987 IF l_debug_on THEN
11988 WSH_DEBUG_SV.logmsg(l_module_name, 'l_cnt : '|| l_cnt);
11989 END IF;
11990 --
11991 -- If delivery is content do not add it.
11992 --
11993 IF NOT(is_dlvy_content(p_delivery_id =>l_dlvy_info_tab(i).l_delivery_id))
11994 THEN
11995
11996 l_carrier_sel_entity_tab(l_cnt).delivery_id := l_dlvy_info_tab(i).l_delivery_id;
11997 l_carrier_sel_entity_tab(l_cnt).delivery_name := l_dlvy_info_tab(i).l_dlvy_name;
11998 l_carrier_sel_entity_tab(l_cnt).trip_id := l_dlvy_info_tab(i).l_trip_id;
11999 l_carrier_sel_entity_tab(l_cnt).organization_id := l_dlvy_info_tab(i).l_organization_id;
12000 l_carrier_sel_entity_tab(l_cnt).gross_weight := l_dlvy_info_tab(i).l_gross_weight;
12001 l_carrier_sel_entity_tab(l_cnt).volume := l_dlvy_info_tab(i).l_volume;
12002 l_carrier_sel_entity_tab(l_cnt).initial_pickup_loc_id := l_dlvy_info_tab(i).l_initial_pickup_location_id;
12003 l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_loc_id := l_dlvy_info_tab(i).l_ultimate_dropoff_location_id;
12004
12005 l_carrier_sel_entity_tab(l_cnt).freight_terms_code := l_dlvy_info_tab(i).l_freight_terms_code;
12006 l_carrier_sel_entity_tab(l_cnt).initial_pickup_date := l_dlvy_info_tab(i).l_initial_pickup_date;
12007
12008 l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_date := l_dlvy_info_tab(i).l_ultimate_dropoff_date;
12009 l_carrier_sel_entity_tab(l_cnt).fob_code := l_dlvy_info_tab(i).l_fob_code;
12010 --
12011 -- In format carrier selection. If weight/volume UOM code is NULL then get the
12012 -- default uoms. (This statement is in accordance with previous code)
12013 --
12014 IF ((l_dlvy_info_tab(i).l_weight_uom_code is null) AND
12015 (l_dlvy_info_tab(i).l_volume_uom_code is null)) THEN
12016
12017 WSH_WV_UTILS.get_default_uoms( p_organization_id => l_dlvy_info_tab(i).l_organization_id,
12018 x_weight_uom_code => l_carrier_sel_entity_tab(l_cnt).weight_uom_code,
12019 x_volume_uom_code => l_carrier_sel_entity_tab(l_cnt).volume_uom_code,
12020 x_return_status => l_return_status);
12021
12022
12023 IF l_debug_on THEN
12024 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_default_uoms'||l_return_status);
12025 END IF;
12026
12027 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12028 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_UOM');
12029 FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12030 WSH_UTIL_CORE.add_message(l_return_status);
12031 l_carrier_sel_entity_tab.DELETE(l_cnt);
12032 GOTO dlvy_nextpass;
12033 END IF;
12034 ELSE
12035 l_carrier_sel_entity_tab(l_cnt).weight_uom_code := l_dlvy_info_tab(i).l_weight_uom_code;
12036 l_carrier_sel_entity_tab(l_cnt).volume_uom_code := l_dlvy_info_tab(i).l_volume_uom_code;
12037 END IF;
12038
12039 --
12040 --Determine the ship to site id. if delivery is not inbound
12041 --
12042 IF l_dlvy_info_tab(i).l_shipment_direction <> 'I' THEN
12043 --l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12044 get_ship_to_site(
12045 p_delivery_id => l_dlvy_info_tab(i).l_delivery_id,
12046 p_delivery_type => l_dlvy_info_tab(i).l_delivery_type,
12047 p_ultimate_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12048 x_site_id => l_carrier_sel_entity_tab(l_cnt).customer_site_id,
12049 x_return_status => l_return_status);
12050
12051 IF l_debug_on THEN
12052 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_site '||l_return_status);
12053 END IF;
12054
12055 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12056 l_carrier_sel_entity_tab.DELETE(l_cnt);
12057 GOTO dlvy_nextpass;
12058 END IF;
12059 END IF;
12060
12061 --
12062 -- At this stage we need to determine : Whether to use ship to / Sold to customer.
12063 --
12064 l_param_rec.organization_id := l_dlvy_info_tab(i).l_organization_id;
12065 l_param_rec.param_name(1) := 'EVAL_RULE_BASED_ON_SHIPTO_CUST';
12066
12067
12068 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_rec ,
12069 x_return_status => l_return_status);
12070
12071 IF l_debug_on THEN
12072 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after getting shipping params '||l_return_status);
12073 END IF;
12074
12075 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12076 l_carrier_sel_entity_tab.DELETE(l_cnt);
12077 GOTO dlvy_nextpass;
12078 END IF;
12079 --
12080 --Evaluate Rules based on ship to customer
12081 --
12082 IF (l_param_rec.PARAM_VALUE_CHR.EXISTS(1) AND l_param_rec.PARAM_VALUE_CHR(1) = 'Y'
12083 AND l_dlvy_info_tab(i).l_shipment_direction <> 'I') AND
12084 l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12085
12086 get_ship_to_customer( p_ult_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12087 p_delivery_id => l_dlvy_info_tab(i).l_delivery_id,
12088 x_customer_id => l_carrier_sel_entity_tab(l_cnt).customer_id,
12089 x_return_status => l_return_status);
12090
12091 IF l_debug_on THEN
12092 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_customer'||l_return_status);
12093 END IF;
12094
12095 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12096 l_carrier_sel_entity_tab.DELETE(l_cnt);
12097 GOTO dlvy_nextpass;
12098 END IF;
12099 ELSE
12100 l_carrier_sel_entity_tab(l_cnt).customer_id := l_dlvy_info_tab(i).l_customer_id;
12101 END IF;
12102
12103 l_cnt := l_cnt+1;
12104
12105 ELSE
12106 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_CONTENT');
12107 FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12108 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
12109 END IF;
12110
12111 <<dlvy_nextpass>>
12112 EXIT WHEN i = l_dlvy_info_tab.LAST;
12113 i := l_dlvy_info_tab.NEXT(i);
12114 END LOOP;
12115
12116 IF (l_carrier_sel_entity_tab.COUNT=0) THEN
12117 IF l_debug_on THEN
12118 wsh_debug_sv.logmsg(l_module_name, 'None of the selected deliveries have been found as eligible for Carrier Selection');
12119 END IF;
12120 -- All deliveries are content.
12121 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_ALL_CONTENT');
12122 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12123 WSH_UTIL_CORE.add_message(x_return_status);
12124 IF l_debug_on THEN
12125 WSH_DEBUG_SV.pop(l_module_name);
12126 END IF;
12127 RETURN;
12128 END IF;
12129
12130 --
12131 -- Call Carrier Selection Engine
12132 --
12133
12134 WSH_FTE_INTEGRATION.CARRIER_SELECTION( p_format_cs_tab => l_carrier_sel_entity_tab,
12135 p_messaging_yn => l_messaging_yn,
12136 p_caller => p_caller,
12137 p_entity => 'DLVY',
12138 x_cs_output_tab => l_cs_result_tab,
12139 x_cs_output_message_tab => l_cs_output_message_tab,
12140 x_return_message => l_return_message,
12141 x_return_status => l_return_status);
12142
12143 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS OR l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING)
12144 AND (l_cs_result_tab.COUNT > 0) THEN
12145
12146 --
12147 -- at least one result is found
12148 -- Now do a bulk update for all the carrier selection result tables
12149 --
12150 l_rec_attr_tab.DELETE;
12151 l_del_out_rec_tab.DELETE;
12152 l_return_status := null;
12153 l_rank_list_source := 'RG';
12154
12155 --
12156 -- set the input record and tables
12157 --
12158 l_in_rec.caller := 'FTE_CARRIER_SELECTION_AUTO';
12159 l_in_rec.phase := null;
12160 l_in_rec.action_code := 'UPDATE';
12161
12162
12163 l_trip_in_rec.caller := 'FTE_ROUTING_GUIDE';
12164 l_trip_in_rec.phase := null;
12165 l_trip_in_rec.action_code := 'UPDATE';
12166
12167 list_cnt := 1;
12168
12169
12170 l_prev_delivery_id := 0;
12171 l_prev_org_id := 0;
12172 l_start_index := 0;
12173 l_end_index := 0;
12174
12175 /*
12176 -- Hiding project
12177 WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters( x_Param_Info => l_global_param_rec,
12178 x_return_status => l_return_status);
12179 */ -- Hiding project
12180
12181 rec_cnt := l_cs_result_tab.FIRST;
12182
12183 -- Loop through result tab in order to create/update trip for each delivery
12184 IF rec_cnt IS NOT NULL THEN
12185
12186 LOOP
12187 --{
12188
12189 --
12190 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12191
12192 IF l_debug_on THEN
12193 WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12194 WSH_DEBUG_SV.log(l_module_name, 'l_prev_delivery_id', l_prev_delivery_id);
12195 WSH_DEBUG_SV.log(l_module_name, 'rec_cnt', rec_cnt);
12196 END IF;
12197
12198 -- get the value of trip_id if delivery is assigned to trip
12199 IF l_delivery_id <> l_prev_delivery_id THEN
12200 l_trip_id := null;
12201 l_num_ranked_results := 1;
12202 OPEN check_del_assigned(l_delivery_id);
12203 FETCH check_del_assigned into l_trip_id, l_trip_rank_seq;
12204 CLOSE check_del_assigned;
12205
12206 l_del_org_id := l_cs_result_tab(rec_cnt).organization_id;
12207
12208 /*
12209 -- Hiding project
12210 IF l_del_org_id <> l_prev_org_id THEN
12211
12212 l_param_value_info.organization_id := l_del_org_id;
12213 l_param_value_info.param_name(1) := 'SKIP_RTNG_RULE_AC_TRIP';
12214
12215 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_value_info,
12216 x_return_status => l_return_status);
12217 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
12218 END IF;
12219 */ -- Hiding project
12220
12221 END IF;
12222
12223 l_del_result_type := l_cs_result_tab(rec_cnt).result_type;
12224
12225 -- If first delivery has 1 ranked result and 2nd delivery has multileg results.
12226 -- How will the rank for first get inserted into ranklist table
12227
12228 -- Handled by moving rank list insertion in the same pass of the last result record
12229 -- for a delivery
12230
12231 IF (l_del_result_type = 'RANK') THEN -- if single leg delivery
12232 --{
12233 IF (l_delivery_id <> l_prev_delivery_id) THEN
12234 --{
12235 --l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12236
12237 IF l_debug_on THEN
12238 WSH_DEBUG_SV.log(l_module_name, 'l_num_ranked_results', l_num_ranked_results);
12239 WSH_DEBUG_SV.log(l_module_name, 'p_caller', p_caller);
12240 WSH_DEBUG_SV.log(l_module_name, 'l_skip_rtng_rule_ac_trip', l_skip_rtng_rule_ac_trip);
12241 WSH_DEBUG_SV.log(l_module_name, 'list_cnt', list_cnt);
12242 END IF;
12243
12244 --
12245 -- 1. For Manual flow, append_flag is always set to 'Y'
12246 -- For auto-flow, Check if only one ranked result is returned, set append flag to the value of
12247 -- global parameter EXPAND_CARRIER_RANKINGS, else set it to 'Y'
12248 --
12249
12250 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12251 /*
12252 -- Hiding project
12253 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12254 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12255 */ -- Hiding project
12256 --{
12257 -- AG check that current record is not LAST
12258 /*
12259 -- Hiding project
12260 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP')
12261 AND ( rec_cnt = l_cs_result_tab.LAST OR
12262 ( rec_cnt <> l_cs_result_tab.LAST AND l_cs_result_tab(l_cs_result_tab.NEXT(rec_cnt)).delivery_id <> l_delivery_id)) THEN
12263 --{
12264 l_cs_result_tab(rec_cnt).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12265 --}
12266 ELSE
12267 --{
12268 l_cs_result_tab(rec_cnt).append_flag := 'Y';
12269 --}
12270 END IF;
12271
12272 IF l_debug_on THEN
12273 WSH_DEBUG_SV.log(l_module_name, 'append_flag', l_cs_result_tab(rec_cnt).append_flag);
12274 END IF;
12275 */ -- Hiding project
12276
12277 IF l_trip_id IS NULL THEN
12278 --{
12279 --
12280 -- If Pick up date is same as drop off date,
12281 -- introduce a gap of 10 mins between pick up date and drop off date
12282 --
12283 l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12284
12285 IF l_carrier_sel_result_rec.pickup_date = l_carrier_sel_result_rec.dropoff_date THEN
12286 l_carrier_sel_result_rec.dropoff_date := l_carrier_sel_result_rec.dropoff_date+(1/144);
12287 END IF;
12288
12289 IF l_debug_on THEN
12290 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).pickup_date '||l_cs_result_tab(rec_cnt).pickup_date);
12291 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).dropoff_date '||l_cs_result_tab(rec_cnt).dropoff_date);
12292 END IF;
12293 --
12294 -- Since delivery not assigned to any trip( trip_id is null), and rank = 1, Create trip for the delivery
12295 --
12296 WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12297 p_delivery_id => l_delivery_id,
12298 p_carrier_sel_result_rec => l_carrier_sel_result_rec,
12299 x_trip_id => l_trip_id,
12300 x_trip_name => l_trip_name,
12301 x_return_message => x_return_message,
12302 x_return_status => l_return_status);
12303
12304 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12305 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12306 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12307 END IF;
12308 END IF;
12309
12310 IF l_debug_on THEN
12311 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after calling CREATE_SEL_CREATE_TRIP '||x_return_status);
12312 WSH_DEBUG_SV.logmsg(l_module_name,'Trip_id '||l_trip_id);
12313 END IF;
12314
12315 l_ranked_list.DELETE;
12316 list_cnt := 1;
12317 l_num_ranked_results := 1;
12318 --
12319 -- set values in ranked list for rank #1 results
12320 --
12321 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12322 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12323 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12324 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12325 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12326 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12327 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12328 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12329 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12330 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12331
12332 IF l_debug_on THEN
12333 WSH_DEBUG_SV.logmsg(l_module_name,'Populated Ranked List for rank #1');
12334 END IF;
12335
12336 --
12337 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12338 -- the call to FORMAT_DEL_UPDATE_TABLE
12339 --
12340 l_cs_result_tab(rec_cnt) := NULL;
12341
12342 --}
12343 ELSE -- for the case when delivery is already attached to trip, l_trip_id IS NOT NULL
12344 --{
12345 IF l_trip_rank_seq is NOT NULL THEN
12346 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_UPD_TRIP_RANK_LIST');
12347 FND_MESSAGE.SET_TOKEN('TRIPID',l_trip_id);
12348 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12349 WSH_UTIL_CORE.add_message(x_return_status);
12350 END IF;
12351
12352 l_cs_result_tab(rec_cnt).trip_id := l_trip_id;
12353
12354 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12355 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12356 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12357 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12358 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12359 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12360 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12361 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12362 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12363 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12364 --}
12365 END IF;
12366 --}
12367 END IF;
12368 --}
12369 ELSE -- l_delivery_id = l_prev_delivery_id
12370 --{
12371 l_num_ranked_results := l_num_ranked_results +1;
12372
12373 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12374 /*
12375 -- Hiding project
12376 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12377 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12378 */ -- Hiding project
12379 --{
12380 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12381 --{
12382
12383 --
12384 -- When Ranked List is created by RG engine during auto flow and if
12385 -- only one ranked result is returned, set CALL_RG_FLAG flag to 'N'
12386 -- If there are more than one ranked results, we'll set CALL_RG_FLAG flag to 'Y'
12387 --
12388 l_ranked_list(list_cnt).CALL_RG_FLAG := 'Y';
12389 --}
12390 ELSE
12391 --{
12392 --
12393 -- If caller is not Auto-Flow, build ranked list for other rank results as well
12394 --
12395 list_cnt := list_cnt + 1;
12396
12397 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12398 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12399 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12400 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12401 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12402 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12403 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12404 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12405 l_ranked_list(list_cnt).IS_CURRENT := 'N';
12406 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12407 --}
12408 END IF;
12409
12410 IF l_debug_on THEN
12411 WSH_DEBUG_SV.log(l_module_name, 'l_ranked_list(list_cnt).CALL_RG_FLAG', l_ranked_list(list_cnt).CALL_RG_FLAG);
12412 END IF;
12413 --}
12414 END IF;
12415 --
12416 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12417 -- the call to FORMAT_DEL_UPDATE_TABLE
12418 --
12419 l_cs_result_tab(rec_cnt) := NULL;
12420 --}
12421 END IF;
12422 IF (rec_cnt = l_cs_result_tab.LAST OR
12423 (rec_cnt <> l_cs_result_tab.LAST AND l_cs_result_tab(l_cs_result_tab.NEXT(rec_cnt)).delivery_id <> l_delivery_id)) THEN
12424 --{
12425 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12426 /*
12427 -- Hiding project
12428 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12429 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12430
12431 IF l_debug_on THEN
12432 WSH_DEBUG_SV.logmsg(l_module_name, 'calling RANK_LIST_ACTION');
12433 END IF;
12434
12435 WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12436 --p_api_version_number => 1.0,
12437 --p_init_msg_list => FND_API.G_FALSE,
12438 x_return_status => l_return_status,
12439 x_msg_count => l_msg_count,
12440 x_msg_data => l_msg_data,
12441 p_action_code => 'REPLACE',
12442 p_ranklist => l_ranked_list,
12443 p_trip_id => l_trip_id,
12444 p_rank_id => l_rank_id);
12445
12446 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12447 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12448 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12449 END IF;
12450 END IF;
12451 */ -- Hiding project
12452 l_ranked_list.DELETE;
12453 list_cnt := 1;
12454 l_num_ranked_results := 1;
12455 END IF;
12456 --}
12457 END IF;
12458 --}
12459 ELSIF (l_del_result_type = 'MULTILEG') THEN -- if multileg delivery output
12460 --{
12461
12462 IF l_trip_id IS NOT NULL THEN
12463 --{
12464 -- if delivery is already assigned to trip and multileg route to be created as per rule results
12465 -- show error;
12466 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DEL_MLEG_ASG_TRIP');
12467 FND_MESSAGE.SET_TOKEN('DELIVERY_ID',l_delivery_id);
12468 FND_MESSAGE.SET_TOKEN('TRIP_ID',l_trip_id);
12469 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12470 WSH_UTIL_CORE.add_message(x_return_status);
12471
12472 l_cs_result_tab(rec_cnt) := NULL;
12473
12474 IF l_debug_on THEN
12475 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_delivery_id || ' IS ALREADY ASSIGNED TO TRIP '||l_trip_id);
12476 END IF;
12477 --}
12478 ELSIF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip = 'Y' THEN
12479 --{
12480 IF l_delivery_id <> l_prev_delivery_id THEN
12481 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_MULTILEG');
12482 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12483 WSH_UTIL_CORE.add_message(x_return_status);
12484 END IF;
12485
12486 l_cs_result_tab(rec_cnt) := NULL;
12487 --}
12488 ELSIF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12489 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- create trip for all the legs
12490 --{
12491
12492 l_prev_delivery_id := 0;
12493 l_start_index := rec_cnt;
12494 i := 1;
12495 j := 1;
12496
12497 IF l_debug_on THEN
12498 WSH_DEBUG_SV.logmsg(l_module_name,'l_start_index '||l_start_index);
12499 END IF;
12500 --
12501 -- For multileg results, first we need to get all the legs for a delivery
12502 -- in l_cs_mleg_result_tab. Then set pick up and drop off dates for leg pick
12503 -- up and drop off stops in a call to SET_PICK_UP_DROP_OFF_DATES API
12504 --
12505
12506 IF l_delivery_id <> l_prev_delivery_id THEN
12507 LOOP
12508 l_cs_mleg_result_tab(i) := l_cs_result_tab(rec_cnt);
12509
12510 EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12511 l_prev_delivery_id := l_delivery_id;
12512 rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12513 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12514 i := i + 1;
12515 EXIT WHEN l_delivery_id <> l_prev_delivery_id;
12516 END LOOP;
12517
12518 IF (rec_cnt <> l_cs_result_tab.FIRST AND rec_cnt <> l_cs_result_tab.LAST) THEN
12519 rec_cnt := l_cs_result_tab.PRIOR(rec_cnt);
12520 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12521 END IF;
12522
12523 l_end_index := rec_cnt;
12524
12525 IF l_debug_on THEN
12526 WSH_DEBUG_SV.logmsg(l_module_name,'l_end_index '||l_end_index);
12527 END IF;
12528
12529 SET_PICK_UP_DROP_OFF_DATES(
12530 p_cs_mleg_result_tab => l_cs_mleg_result_tab,
12531 x_return_status => x_return_status,
12532 x_msg_count => l_msg_count,
12533 x_msg_data => l_msg_data);
12534
12535 k := l_cs_mleg_result_tab.FIRST;
12536
12537 FOR j IN l_start_index .. l_end_index LOOP
12538 --
12539 -- Set pick up and drop off dates for each leg in result tab
12540 -- and Create Trip for each leg
12541 --
12542 l_cs_result_tab(j).pickup_date := l_cs_mleg_result_tab(k).pickup_date;
12543 l_cs_result_tab(j).dropoff_date := l_cs_mleg_result_tab(k).dropoff_date;
12544
12545 IF l_debug_on THEN
12546 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).pickup_date :'||to_char(l_cs_result_tab(j).pickup_date, 'dd/mm/yyyy hh:mi:ss'));
12547 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).initial_pickup_location_id: '||l_cs_result_tab(j).initial_pickup_location_id);
12548 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).dropoff_date :'||to_char(l_cs_result_tab(j).dropoff_date,'dd/mm/yyyy hh:mi:ss'));
12549 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(j).ultimate_dropoff_location_id: '||l_cs_result_tab(j).ultimate_dropoff_location_id);
12550 END IF;
12551
12552 l_carrier_sel_result_rec := l_cs_result_tab(j);
12553 WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12554 p_delivery_id => l_delivery_id,
12555 p_carrier_sel_result_rec => l_carrier_sel_result_rec,
12556 x_trip_id => l_trip_id,
12557 x_trip_name => l_trip_name,
12558 x_return_message => x_return_message,
12559 x_return_status => l_return_status);
12560
12561 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12562 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12563 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12564 END IF;
12565 END IF;
12566 l_cs_result_tab(j).trip_id := l_trip_id;
12567
12568 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12569 l_cs_result_tab(j).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12570 ELSE
12571 l_cs_result_tab(j).append_flag := 'Y';
12572 END IF;
12573
12574 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12575 l_ranked_list(list_cnt).RANK_SEQUENCE := l_carrier_sel_result_rec.rank;
12576 l_ranked_list(list_cnt).CARRIER_ID := l_carrier_sel_result_rec.carrier_id;
12577 l_ranked_list(list_cnt).SERVICE_LEVEL := l_carrier_sel_result_rec.service_level;
12578 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_carrier_sel_result_rec.mode_of_transport;
12579 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_carrier_sel_result_rec.consignee_carrier_ac_no;
12580 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_carrier_sel_result_rec.freight_terms_code;
12581 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12582 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12583 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12584
12585 --
12586 -- Create and attach ranked list to each trip
12587 --
12588
12589 WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12590 -- p_api_version_number => 1.0,
12591 -- p_init_msg_list => FND_API.G_FALSE,
12592 x_return_status => l_return_status,
12593 x_msg_count => l_msg_count,
12594 x_msg_data => l_msg_data,
12595 p_action_code => 'REPLACE',
12596 p_ranklist => l_ranked_list,
12597 p_trip_id => l_trip_id,
12598 p_rank_id => l_rank_id);
12599
12600 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12601 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12602 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12603 END IF;
12604 END IF;
12605 l_ranked_list.DELETE;
12606 list_cnt := 1;
12607
12608 k := l_cs_mleg_result_tab.NEXT(k);
12609
12610 END LOOP;
12611 END IF;
12612 --}
12613 END IF;
12614 --}
12615 END IF;
12616 IF l_debug_on THEN
12617 WSH_DEBUG_SV.logmsg(l_module_name, 'set l_prev_delivery_id and l_prev_trip_id');
12618 WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12619 WSH_DEBUG_SV.log(l_module_name, 'l_trip_id', l_trip_id);
12620 END IF;
12621 l_prev_delivery_id := l_delivery_id;
12622 l_prev_trip_id := l_trip_id;
12623
12624 EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12625 rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12626 --}
12627 END LOOP;
12628 END IF;
12629
12630 --
12631 -- Format the delivery table for the call to the group API
12632 --
12633
12634 FORMAT_DEL_UPDATE_TABLE(p_cs_result_tab => l_cs_result_tab,
12635 p_caller => p_caller,
12636 x_rec_attr_tab => l_rec_attr_tab,
12637 x_trip_info_tab => l_trip_info_tab,
12638 x_return_status => l_return_status,
12639 x_return_message => x_return_message);
12640
12641
12642 IF (l_rec_attr_tab.COUNT > 0) THEN
12643 --
12644 -- Update the deliveries table with the info
12645 --
12646 WSH_INTERFACE_GRP.Create_Update_Delivery(p_api_version_number => 1.0,
12647 p_init_msg_list => 'F',
12648 p_commit => null,
12649 p_in_rec => l_in_rec,
12650 p_rec_attr_tab => l_rec_attr_tab,
12651 x_del_out_rec_tab => l_del_out_rec_tab,
12652 x_return_status => l_return_status,
12653 x_msg_count => l_msg_count,
12654 x_msg_data => l_msg_data);
12655
12656
12657 IF ((l_return_status is not null) AND
12658 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12659 --
12660 -- delivery not updated
12661 --
12662 x_return_status := l_return_status;
12663 WSH_UTIL_CORE.add_message(x_return_status);
12664 --
12665 -- Debug Statements
12666 --
12667 IF l_debug_on THEN
12668 WSH_DEBUG_SV.logmsg(l_module_name, 'CARRIER SELECTION - AUTO CREATE - COULD NOT UPDATE DELIVERY');
12669 END IF;
12670 --
12671 x_return_message := l_msg_data;
12672
12673 IF l_debug_on THEN
12674 WSH_DEBUG_SV.pop(l_module_name);
12675 END IF;
12676 --
12677 RETURN;
12678 END IF;
12679
12680 END IF;
12681
12682
12683
12684 IF (l_trip_info_tab.COUNT > 0) THEN
12685 --{
12686 WSH_INTERFACE_GRP.Create_Update_Trip(
12687 p_api_version_number => 1.0,
12688 p_init_msg_list => 'F',
12689 p_commit => null,
12690 x_return_status => l_return_status,
12691 x_msg_count => l_msg_count,
12692 x_msg_data => l_msg_data,
12693 p_trip_info_tab => l_trip_info_tab,
12694 p_in_rec => l_trip_in_rec,
12695 x_out_tab => l_trip_out_rec_tab);
12696
12697 IF ((l_return_status is not null) AND
12698 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12699
12700 --
12701 -- trip not updated
12702 --
12703 x_return_status := l_return_status;
12704 WSH_UTIL_CORE.add_message(x_return_status);
12705 --
12706 -- Debug Statements
12707 --
12708 IF l_debug_on THEN
12709 WSH_DEBUG_SV.logmsg(l_module_name, 'CARRIER SELECTION - FORM MANUAL - COULD NOT UPDATE TRIP');
12710 END IF;
12711 --
12712 x_return_message := l_msg_data;
12713 --
12714 -- Return back to the calling API or form
12715 --
12716 -- Debug Statements
12717 --
12718 IF l_debug_on THEN
12719 WSH_DEBUG_SV.pop(l_module_name);
12720 END IF;
12721 --
12722 RETURN;
12723 END IF;
12724 --}
12725 END IF;
12726
12727 END IF;
12728
12729 --
12730 -- Debug Statements
12731 --
12732 IF l_debug_on THEN
12733 WSH_DEBUG_SV.pop(l_module_name);
12734 END IF;
12735 --
12736 EXCEPTION
12737 WHEN OTHERS THEN
12738 l_error_code := SQLCODE;
12739 l_error_text := SQLERRM;
12740
12741 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION');
12742 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12743 x_return_message := l_error_text;
12744
12745
12746 IF l_debug_on THEN
12747 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12748 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12749 END IF;
12750 --
12751 END PROCESS_CARRIER_SELECTION;
12752 --SBAKSHI(R12)
12753
12754
12755 /**________________________________________________________________________
12756 --
12757 -- Name:
12758 -- Assign_Del_to_Consol_Del
12759 --
12760 -- Purpose:
12761 -- This API assigns a deliveries to a parent (consolidation)
12762 -- delivery. If the caller is FTE consolidation SRS, we
12763 -- assume that the child deliveries have already been validated
12764 -- as eligible to be assigned to the parent delivery.
12765 -- Parameters:
12766 -- p_del_tab: Table of deliveries that need to be assigned
12767 -- p_parent_del: Parent delivery id that will be assigne to
12768 -- p_caller: Calling entity/action
12769 -- x_return_status: status
12770 **/
12771
12772 Procedure Assign_Del_to_Consol_Del(
12773 p_del_tab IN WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
12774 p_parent_del_id IN NUMBER,
12775 p_caller IN VARCHAR2,
12776 x_return_status OUT NOCOPY VARCHAR2) IS
12777
12778 -- make sure the parent is OPEN and is of type 'CONSOLIDATION'
12779 CURSOR c_check_valid_parent(p_parent_del_id in NUMBER) IS
12780 select s1.trip_id,
12781 l.pick_up_stop_id,
12782 l.drop_off_stop_id,
12783 l.delivery_leg_id,
12784 d.ultimate_dropoff_location_id dropoff_stop_location,
12785 s1.stop_location_id pickup_stop_location,
12786 t.ignore_for_planning,
12787 s1.planned_arrival_date pu_ar_date,
12788 s1.planned_departure_date pu_dep_date,
12789 s2.planned_arrival_date do_ar_date,
12790 s2.planned_departure_date do_dep_date
12791 from wsh_trip_stops s1, wsh_trip_stops s2, wsh_delivery_legs l, wsh_new_deliveries d, wsh_trips t
12792 where s1.stop_id = l.pick_up_stop_id
12793 and s2.stop_id = l.drop_off_stop_id
12794 and l.delivery_id = d.delivery_id
12795 and d.delivery_id = p_parent_del_id
12796 and d.status_code = 'OP'
12797 and d.delivery_type = 'CONSOLIDATION'
12798 and s1.trip_id = t.trip_id ;
12799
12800
12801 -- make sure that the delivery is open, STANDARD and
12802 -- is not assigned to a parent delivery.
12803 cursor c_check_valid_child(p_delivery_id in number) is
12804 select d.delivery_id
12805 from wsh_new_deliveries d
12806 where d.delivery_id = p_delivery_id
12807 and d.status_code = 'OP'
12808 and d.delivery_type = 'STANDARD'
12809 and not exists (select 1 from wsh_delivery_legs
12810 where parent_delivery_leg_id is not null
12811 and delivery_id = d.delivery_id);
12812 -- check if the delivery is assigned to a trip
12813 /*cursor c_check_trips(p_delivery_id in number) is
12814 select delivery_leg_id
12815 from wsh_delivery_legs
12816 where delivery_id = p_delivery_id
12817 and rownum = 1;
12818 */
12819 -- check if the trip the delivery is assigned to is valid
12820 cursor c_check_trips(p_delivery_id in number) is
12821 select l.delivery_leg_id, s1.trip_id
12822 from wsh_delivery_legs l, wsh_trip_stops s1, wsh_new_deliveries d
12823 where l.delivery_id = p_delivery_id
12824 and d.delivery_id = l.delivery_id
12825 and d.initial_pickup_location_id = s1.stop_location_id
12826 and s1.stop_id = l.pick_up_stop_id;
12827
12828 l_parent_trip_rec c_check_valid_parent%rowtype;
12829 type l_trip_rec_tab_type is table of c_check_trips%rowtype index by binary_integer;
12830 l_trip_rec_tab l_trip_rec_tab_type;
12831
12832
12833 cursor c_get_top_child_details(p_delivery_id in number) is
12834 select a.delivery_detail_id
12835 from wsh_delivery_assignments a
12836 where a.delivery_id is not null
12837 and a.delivery_id = p_delivery_id
12838 and a.type = 'O'
12839 and a.parent_delivery_detail_id is null
12840 and not exists
12841 (select '1'
12842 from wsh_delivery_assignments b
12843 where a.delivery_detail_id = b.delivery_detail_id
12844 and b.type = 'C');
12845
12846 -- This cursor selects all the trips that are
12847 -- assigned to all the deliveries that are
12848 -- assigned to the original trip.
12849 -- These trips will be set to ignore for planning
12850 -- along with the original trip.
12851
12852 cursor c_get_trip_siblings(p_trip_id in number) is
12853 select distinct s2.trip_id
12854 from wsh_trip_stops s1, wsh_trip_stops s2,
12855 wsh_delivery_legs l1, wsh_delivery_legs l2
12856 where s1.trip_id = p_trip_id
12857 and s1.stop_id = l1.pick_up_stop_id
12858 and l1.delivery_id = l2.delivery_id
12859 and l2.pick_up_stop_id = s2.stop_id;
12860
12861
12862 cursor c_chil_del_trips(p_delivery_id in number) is
12863 select s.trip_id
12864 from wsh_trip_stops s, wsh_delivery_legs l
12865 where l.delivery_id = p_delivery_id
12866 and l.pick_up_stop_id = s.stop_id;
12867
12868 l_parent_trip_id NUMBER;
12869 l_child_trip_id NUMBER;
12870 l_parent_del_id NUMBER;
12871 l_dropoff_loc_id NUMBER;
12872 l_child_details_tab wsh_util_core.id_tab_type;
12873 l_valid_children_tab wsh_util_core.id_tab_type;
12874 l_unassigned_trips_tab wsh_util_core.id_tab_type;
12875 l_assigned_trips_tab wsh_util_core.id_tab_type;
12876 l_delivery_leg_id_dummy NUMBER;
12877 l_trip_id_tab wsh_util_core.id_tab_type;
12878 l_wv_delivery_tab wsh_util_core.id_tab_type;
12879 l_unassign_dels wsh_util_core.id_tab_type;
12880 l_ignore_plan_dels wsh_util_core.id_tab_type;
12881 l_include_plan_dels wsh_util_core.id_tab_type;
12882 l_change_plan_dels wsh_util_core.id_tab_type;
12883 l_child_del_trips wsh_util_core.id_tab_type;
12884 l_child_del_trips_dummy wsh_util_core.id_tab_type;
12885 l_parent_del_tab wsh_util_core.id_tab_type;
12886 l_intermediate_loc_id NUMBER;
12887 l_dummy_child NUMBER;
12888 l_gross_wt NUMBER;
12889 l_net_wt NUMBER;
12890 l_volume NUMBER;
12891
12892 l_msg_count NUMBER;
12893 l_msg_data VARCHAR2(2000);
12894 i NUMBER := 0;
12895 j NUMBER := 0;
12896 k NUMBER := 0;
12897 l NUMBER := 0;
12898 m NUMBER := 0;
12899 n NUMBER := 0;
12900 o NUMBER := 0;
12901 p NUMBER := 0;
12902 q NUMBER := 0;
12903
12904 l_num_warnings NUMBER := 0;
12905 l_num_errors NUMBER := 0;
12906 l_return_status VARCHAR2(30);
12907
12908 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Assig_Del_to_Consol_del';
12909 l_debug_on BOOLEAN;
12910
12911 WSH_FAIL_ASSIGN_DEL_TO_CONSOL EXCEPTION;
12912 WSH_INVALID_PARENT EXCEPTION;
12913 WSH_INVALID_CHILDREN EXCEPTION;
12914 WSH_INVALID_DECONSOL_POINT EXCEPTION;
12915 WSH_INVALID_TRIP EXCEPTION;
12916
12917
12918 BEGIN
12919
12920 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
12921 --
12922 IF l_debug_on IS NULL
12923 THEN
12924 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
12925 END IF;
12926 --
12927 IF l_debug_on THEN
12928 wsh_debug_sv.push (l_module_name);
12929 WSH_DEBUG_SV.log(l_module_name,'p_parent_del_id', p_parent_del_id);
12930 WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
12931 END IF;
12932
12933 OPEN c_check_valid_parent(p_parent_del_id);
12934 FETCH c_check_valid_parent INTO l_parent_trip_rec;
12935 IF c_check_valid_parent%NOTFOUND THEN
12936 CLOSE c_check_valid_parent;
12937 -- RAISE EXCEPTION
12938 RAISE WSH_INVALID_PARENT;
12939 END IF;
12940 CLOSE c_check_valid_parent;
12941
12942 -- If caller is WSH_AUTOCREATE_CONSOL no need to validate as grouping of deliveries and
12943 -- deconsol point has already been figured out
12944 IF p_caller <> 'WSH_AUTOCREATE_CONSOL' THEN
12945
12946 i := p_del_tab.FIRST;
12947
12948 IF l_debug_on THEN
12949 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
12950 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.first', p_del_tab.first);
12951 END IF;
12952 WHILE i IS NOT NULL LOOP
12953
12954 IF l_debug_on THEN
12955 WSH_DEBUG_SV.log(l_module_name,'delivery: '||i, p_del_tab(i).delivery_id);
12956 WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id: '||i, p_del_tab(i).initial_pickup_location_id);
12957 WSH_DEBUG_SV.log(l_module_name,'l_parent_trip_rec.pickup_stop_location: '||i, l_parent_trip_rec.pickup_stop_location);
12958 END IF;
12959
12960 IF p_del_tab(i).initial_pickup_location_id = l_parent_trip_rec.pickup_stop_location THEN
12961
12962 OPEN c_check_valid_child(p_del_tab(i).delivery_id);
12963 FETCH c_check_valid_child INTO l_dummy_child;
12964 IF c_check_valid_child%FOUND THEN
12965 IF l_debug_on THEN
12966 WSH_DEBUG_SV.log(l_module_name,'l_dummy_child', l_dummy_child);
12967 END IF;
12968
12969 CLOSE c_check_valid_child;
12970 OPEN c_check_trips(p_del_tab(i).delivery_id);
12971 FETCH c_check_trips INTO l_delivery_leg_id_dummy, l_child_trip_id;
12972 IF c_check_trips%NOTFOUND THEN
12973 -- This delivery is not assigned to any trip at pu location, so we can assign it to the trip.
12974 -- Nothing to validate.
12975 j := j+1;
12976 k := k+1;
12977 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
12978 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
12979 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
12980 n := n + 1;
12981 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
12982 ELSE
12983 o := o + 1;
12984 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
12985 END IF;
12986
12987 ELSIF p_caller = 'WMS_AUTOCREATE_CONSOL' THEN
12988 -- Called by autocreate_consol_del for WMS, if the delivery is already
12989 -- assigned to trips, then they must be assigned to a valid trip since
12990 -- autocreate_consol_del already validates the trips.
12991 j := j+1;
12992 m := m+1;
12993 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
12994 l_assigned_trips_tab(m) := p_del_tab(i).delivery_id;
12995 ELSE
12996 -- If we are assigning the delivery to an already existing parent delivery, ie. not being
12997 -- called by autocreate_consol_del and the delivery has at least one trip, we need to
12998 -- make sure that there is a valid trip on the delivery.
12999
13000 IF l_child_trip_id <> l_parent_trip_rec.trip_id THEN
13001 -- RAISE EXCEPTION
13002 -- delivery is not in valid trip
13003 CLOSE c_check_trips;
13004 RAISE WSH_INVALID_TRIP;
13005
13006 ELSE
13007 l_unassign_dels(1) := p_del_tab(i).delivery_id;
13008 IF l_debug_on THEN
13009 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.Unassign_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
13010 END IF;
13011 WSH_TRIPS_ACTIONS.Unassign_Trip(p_del_rows => l_unassign_dels,
13012 p_trip_id => l_parent_trip_rec.trip_id,
13013 x_return_status => l_return_status);
13014
13015 wsh_util_core.api_post_call
13016 (
13017 p_return_status => l_return_status,
13018 x_num_warnings => l_num_warnings,
13019 x_num_errors => l_num_errors
13020 );
13021
13022 j := j+1;
13023 k := k+1;
13024 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13025 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13026 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13027 n := n + 1;
13028 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13029 ELSE
13030 o := o + 1;
13031 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13032 END IF;
13033 END IF;
13034 END IF;
13035 CLOSE c_check_trips;
13036 END IF;
13037 IF c_check_valid_child%ISOPEN THEN
13038 CLOSE c_check_valid_child;
13039 END IF;
13040
13041 END IF;
13042 i := p_del_tab.next(i);
13043
13044 END LOOP;
13045
13046 ELSE
13047
13048 FOR i in 1..p_del_tab.count LOOP
13049 l_valid_children_tab(i) := p_del_tab(i).delivery_id;
13050 l_unassigned_trips_tab(i) := p_del_tab(i).delivery_id;
13051 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13052 n := n + 1;
13053 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13054 ELSE
13055 o := o + 1;
13056 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13057 END IF;
13058 END LOOP;
13059
13060 END IF;
13061
13062
13063
13064 IF l_valid_children_tab.count = 0 THEN
13065 -- ERROR!!!
13066 -- No valid deliveries were assigned to parent.
13067 RAISE WSH_INVALID_CHILDREN;
13068
13069 END IF;
13070
13071 BEGIN
13072 FOR i in 1..l_valid_children_tab.count LOOP
13073 WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_valid_children_tab(i));
13074 END LOOP;
13075
13076 EXCEPTION
13077 WHEN OTHERS THEN
13078 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13079 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13080 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13081 WSH_UTIL_CORE.Add_Message(x_return_status);
13082 --
13083 -- Debug Statements
13084 --
13085 IF l_debug_on THEN
13086 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13087 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13088 END IF;
13089 RETURN;
13090 --
13091 END;
13092 FORALL i in 1..l_valid_children_tab.count
13093 update wsh_delivery_assignments
13094 set type = 'O'
13095 where delivery_id = l_valid_children_tab(i)
13096 and delivery_id is not null
13097 and nvl(type, 'S') = 'S'
13098 and parent_delivery_detail_id is NULL;
13099
13100 FOR i in 1..l_valid_children_tab.count LOOP
13101
13102 OPEN c_get_top_child_details(l_valid_children_tab(i));
13103 FETCH c_get_top_child_details BULK COLLECT
13104 INTO l_child_details_tab;
13105 CLOSE c_get_top_child_details;
13106
13107 Forall k in 1..l_child_details_tab.count
13108 INSERT INTO wsh_delivery_assignments (
13109 delivery_id,
13110 parent_delivery_id,
13111 delivery_detail_id,
13112 parent_delivery_detail_id,
13113 creation_date,
13114 created_by,
13115 last_update_date,
13116 last_updated_by,
13117 last_update_login,
13118 program_application_id,
13119 program_id,
13120 program_update_date,
13121 request_id,
13122 active_flag,
13123 delivery_assignment_id,
13124 type
13125 ) VALUES (
13126 l_valid_children_tab(i),
13127 p_parent_del_id,
13128 l_child_details_tab(k),
13129 NULL,
13130 SYSDATE,
13131 FND_GLOBAL.USER_ID,
13132 SYSDATE,
13133 FND_GLOBAL.USER_ID,
13134 FND_GLOBAL.USER_ID,
13135 NULL,
13136 NULL,
13137 NULL,
13138 NULL,
13139 NULL,
13140 wsh_delivery_assignments_s.nextval,
13141 'C'
13142 );
13143
13144
13145 END LOOP;
13146
13147
13148 -- Assign child delivery to parents' trip
13149
13150 l_trip_id_tab(1) := l_parent_trip_rec.trip_id;
13151
13152 IF l_include_plan_dels.count > 0 THEN
13153
13154 IF l_parent_trip_rec.ignore_for_planning = 'Y' THEN
13155 -- Make the child deliveries ignore for planning before assignment.
13156 FOR i in 1..l_include_plan_dels.count LOOP
13157
13158 OPEN c_chil_del_trips(l_include_plan_dels(i));
13159 FETCH c_chil_del_trips BULK COLLECT
13160 INTO l_child_del_trips_dummy;
13161 IF c_chil_del_trips%NOTFOUND THEN
13162 p := p + 1;
13163 l_change_plan_dels(p) := l_include_plan_dels(i);
13164 ELSE
13165 q := l_child_del_trips.count;
13166 FOR i in 1..l_child_del_trips_dummy.count LOOP
13167 l_child_del_trips(q + i) := l_child_del_trips_dummy(i);
13168 END LOOP;
13169 l_child_del_trips_dummy.delete;
13170 END IF;
13171 CLOSE c_chil_del_trips;
13172
13173 END LOOP;
13174
13175 IF l_child_del_trips.count > 0 THEN
13176
13177 IF l_debug_on THEN
13178 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13179 END IF;
13180 WSH_TP_RELEASE.change_ignoreplan_status
13181 (p_entity => 'TRIP',
13182 p_in_ids => l_child_del_trips,
13183 p_action_code => 'IGNORE_PLAN',
13184 x_return_status => l_return_status);
13185
13186 wsh_util_core.api_post_call
13187 (
13188 p_return_status => l_return_status,
13189 x_num_warnings => l_num_warnings,
13190 x_num_errors => l_num_errors
13191 );
13192 END IF;
13193
13194 IF l_change_plan_dels.count > 0 THEN
13195 IF l_debug_on THEN
13196 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13197 END IF;
13198 WSH_TP_RELEASE.change_ignoreplan_status
13199 (p_entity => 'DLVY',
13200 p_in_ids => l_change_plan_dels,
13201 p_action_code => 'IGNORE_PLAN',
13202 x_return_status => l_return_status);
13203
13204 wsh_util_core.api_post_call
13205 (
13206 p_return_status => l_return_status,
13207 x_num_warnings => l_num_warnings,
13208 x_num_errors => l_num_errors
13209 );
13210 END IF;
13211
13212 END IF;
13213
13214 IF l_debug_on THEN
13215 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = N',WSH_DEBUG_SV.C_PROC_LEVEL);
13216 END IF;
13217 WSH_TRIPS_ACTIONS.assign_trip(
13218 p_del_rows => l_include_plan_dels,
13219 p_trip_id => l_trip_id_tab(1),
13220 p_pickup_stop_id => l_parent_trip_rec.pick_up_stop_id,
13221 p_dropoff_stop_id => l_parent_trip_rec.drop_off_stop_id,
13222 p_pickup_location_id => l_parent_trip_rec.pickup_stop_location,
13223 p_dropoff_location_id => l_parent_trip_rec.dropoff_stop_location,
13224 p_pickup_arr_date => l_parent_trip_rec.pu_ar_date,
13225 p_pickup_dep_date => l_parent_trip_rec.pu_dep_date,
13226 p_dropoff_arr_date => l_parent_trip_rec.do_ar_date,
13227 p_dropoff_dep_date => l_parent_trip_rec.do_dep_date,
13228 x_return_status => l_return_status);
13229
13230 wsh_util_core.api_post_call
13231 (
13232 p_return_status => l_return_status,
13233 x_num_warnings => l_num_warnings,
13234 x_num_errors => l_num_errors
13235 );
13236 END IF;
13237
13238 IF NVL(l_parent_trip_rec.ignore_for_planning, 'N') = 'N' THEN
13239 -- Set ignore for planning flag of child deliveries and their related trips.
13240 l_trip_id_tab.delete;
13241 OPEN c_get_trip_siblings(l_parent_trip_rec.trip_id);
13242 FETCH c_get_trip_siblings BULK COLLECT
13243 INTO l_trip_id_tab;
13244 CLOSE c_get_trip_siblings;
13245
13246 IF l_debug_on THEN
13247 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13248 END IF;
13249 WSH_TP_RELEASE.change_ignoreplan_status
13250 (p_entity => 'TRIP',
13251 p_in_ids => l_trip_id_tab,
13252 p_action_code => 'IGNORE_PLAN',
13253 x_return_status => l_return_status);
13254
13255 wsh_util_core.api_post_call
13256 (
13257 p_return_status => l_return_status,
13258 x_num_warnings => l_num_warnings,
13259 x_num_errors => l_num_errors
13260 );
13261
13262 END IF;
13263 IF l_ignore_plan_dels.count > 0 THEN
13264
13265 IF l_debug_on THEN
13266 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = Y',WSH_DEBUG_SV.C_PROC_LEVEL);
13267 END IF;
13268
13269 WSH_TRIPS_ACTIONS.assign_trip(
13270 p_del_rows => l_ignore_plan_dels,
13271 p_trip_id => l_trip_id_tab(1),
13272 p_pickup_stop_id => l_parent_trip_rec.pick_up_stop_id,
13273 p_dropoff_stop_id => l_parent_trip_rec.drop_off_stop_id,
13274 p_pickup_location_id => l_parent_trip_rec.pickup_stop_location,
13275 p_dropoff_location_id => l_parent_trip_rec.dropoff_stop_location,
13276 p_pickup_arr_date => l_parent_trip_rec.pu_ar_date,
13277 p_pickup_dep_date => l_parent_trip_rec.pu_dep_date,
13278 p_dropoff_arr_date => l_parent_trip_rec.do_ar_date,
13279 p_dropoff_dep_date => l_parent_trip_rec.do_dep_date,
13280 x_return_status => l_return_status);
13281
13282
13283
13284 wsh_util_core.api_post_call
13285 (
13286 p_return_status => l_return_status,
13287 x_num_warnings => l_num_warnings,
13288 x_num_errors => l_num_errors
13289 );
13290 END IF;
13291
13292 BEGIN
13293
13294 FOR i in 1..l_valid_children_tab.count LOOP
13295 WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_delivery_id => l_valid_children_tab(i));
13296 END LOOP;
13297
13298 EXCEPTION
13299 WHEN OTHERS THEN
13300 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13301 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13302 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13303 WSH_UTIL_CORE.Add_Message(x_return_status);
13304 --
13305 -- Debug Statements
13306 --
13307 IF l_debug_on THEN
13308 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13309 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13310 END IF;
13311 RETURN;
13312 --
13313 END;
13314 -- Assign child delivery legs to parent
13315 FORALL i in 1..l_valid_children_tab.count
13316 update wsh_delivery_legs
13317 set parent_delivery_leg_id = l_parent_trip_rec.delivery_leg_id
13318 where delivery_id = l_valid_children_tab(i)
13319 and pick_up_stop_id = l_parent_trip_rec.pick_up_stop_id;
13320
13321 IF P_CALLER = 'WSH_AUTOCREATE_CONSOL' THEN
13322 -- Calculate Wt/Volume of the consolidation delivery
13323 -- if caller is WSH_AUTOCREATE_CONSOL.
13324 -- We recalculate the wt/vol of delivery during the assignment of
13325 -- consol lpns, so no need to do it here for WMS.
13326
13327 IF l_debug_on THEN
13328 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13329 END IF;
13330 WSH_WV_UTILS.Delivery_Weight_Volume
13331 ( p_delivery_id => p_parent_del_id,
13332 p_update_flag => 'Y',
13333 p_calc_wv_if_frozen => 'N',
13334 x_gross_weight => l_gross_wt,
13335 x_net_weight => l_net_wt,
13336 x_volume => l_volume,
13337 x_return_status => l_return_status);
13338
13339 wsh_util_core.api_post_call
13340 (
13341 p_return_status => l_return_status,
13342 x_num_warnings => l_num_warnings,
13343 x_num_errors => l_num_errors
13344 );
13345 END IF;
13346
13347 l_parent_del_tab(1) := p_parent_del_id;
13348 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13349 p_entity_type => 'DELIVERY',
13350 p_entity_ids => l_parent_del_tab,
13351 x_return_status => l_return_status);
13352
13353 wsh_util_core.api_post_call
13354 (
13355 p_return_status => l_return_status,
13356 x_num_warnings => l_num_warnings,
13357 x_num_errors => l_num_errors
13358 );
13359
13360
13361
13362 IF l_valid_children_tab.count < p_del_tab.count THEN
13363
13364 -- Not all deliveries were assigned to parent.
13365 FND_MESSAGE.SET_NAME('WSH', 'WSH_PARTIAL_CONSOL_ASSIGN');
13366 FND_MESSAGE.SET_TOKEN('DEL_COUNT', 'l_valid_children_tab.count');
13367 wsh_util_core.add_message(wsh_util_core.g_ret_sts_error, l_module_name);
13368 l_num_warnings := l_num_warnings + 1;
13369 END IF;
13370
13371 IF l_num_errors > 0
13372 THEN
13373 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13374 ELSIF l_num_warnings > 0
13375 THEN
13376 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13377 ELSE
13378 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13379 END IF;
13380
13381
13382 IF l_debug_on THEN
13383 wsh_debug_sv.pop(l_module_name);
13384 END IF;
13385
13386 EXCEPTION
13387 WHEN FND_API.G_EXC_ERROR THEN
13388 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13389 IF c_check_trips%ISOPEN THEN
13390 CLOSE c_check_trips;
13391 END IF;
13392 IF c_get_top_child_details%ISOPEN THEN
13393 CLOSE c_get_top_child_details;
13394 END IF;
13395 IF c_get_trip_siblings%ISOPEN THEN
13396 CLOSE c_get_trip_siblings;
13397 END IF;
13398 IF c_check_valid_parent%ISOPEN THEN
13399 CLOSE c_check_valid_parent;
13400 END IF;
13401 IF c_check_valid_child%ISOPEN THEN
13402 CLOSE c_check_valid_child;
13403 END IF;
13404
13405
13406 --
13407 -- Debug Statements
13408 --
13409 IF l_debug_on THEN
13410 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13411 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
13412 END IF;
13413
13414 WHEN WSH_INVALID_TRIP THEN
13415 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13416 IF c_check_trips%ISOPEN THEN
13417 CLOSE c_check_trips;
13418 END IF;
13419 IF c_get_top_child_details%ISOPEN THEN
13420 CLOSE c_get_top_child_details;
13421 END IF;
13422 IF c_get_trip_siblings%ISOPEN THEN
13423 CLOSE c_get_trip_siblings;
13424 END IF;
13425 IF c_check_valid_parent%ISOPEN THEN
13426 CLOSE c_check_valid_parent;
13427 END IF;
13428 IF c_check_valid_child%ISOPEN THEN
13429 CLOSE c_check_valid_child;
13430 END IF;
13431 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_TRIP');
13432 WSH_UTIL_CORE.Add_Message(x_return_status);
13433 --
13434 -- Debug Statements
13435 --
13436 IF l_debug_on THEN
13437 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_TRIP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13438
13439 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_TRIP');
13440 END IF;
13441
13442 WHEN WSH_INVALID_DECONSOL_POINT THEN
13443 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13444 IF c_check_trips%ISOPEN THEN
13445 CLOSE c_check_trips;
13446 END IF;
13447 IF c_get_top_child_details%ISOPEN THEN
13448 CLOSE c_get_top_child_details;
13449 END IF;
13450 IF c_get_trip_siblings%ISOPEN THEN
13451 CLOSE c_get_trip_siblings;
13452 END IF;
13453 IF c_check_valid_parent%ISOPEN THEN
13454 CLOSE c_check_valid_parent;
13455 END IF;
13456 IF c_check_valid_child%ISOPEN THEN
13457 CLOSE c_check_valid_child;
13458 END IF;
13459 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_DECONSOL_POINT');
13460 WSH_UTIL_CORE.Add_Message(x_return_status);
13461 --
13462 -- Debug Statements
13463 --
13464 IF l_debug_on THEN
13465 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_DECONSOL_POINT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13466
13467 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_DECONSOL_POINT');
13468 END IF;
13469
13470 WHEN WSH_INVALID_CHILDREN THEN
13471 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13472 IF c_check_trips%ISOPEN THEN
13473 CLOSE c_check_trips;
13474 END IF;
13475 IF c_get_top_child_details%ISOPEN THEN
13476 CLOSE c_get_top_child_details;
13477 END IF;
13478 IF c_get_trip_siblings%ISOPEN THEN
13479 CLOSE c_get_trip_siblings;
13480 END IF;
13481 IF c_check_valid_parent%ISOPEN THEN
13482 CLOSE c_check_valid_parent;
13483 END IF;
13484 IF c_check_valid_child%ISOPEN THEN
13485 CLOSE c_check_valid_child;
13486 END IF;
13487 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILDREN');
13488 WSH_UTIL_CORE.Add_Message(x_return_status);
13489 --
13490 -- Debug Statements
13491 --
13492 IF l_debug_on THEN
13493 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILDREN exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13494
13495 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILDREN');
13496 END IF;
13497
13498 WHEN WSH_INVALID_PARENT THEN
13499 IF c_check_trips%ISOPEN THEN
13500 CLOSE c_check_trips;
13501 END IF;
13502 IF c_get_top_child_details%ISOPEN THEN
13503 CLOSE c_get_top_child_details;
13504 END IF;
13505 IF c_get_trip_siblings%ISOPEN THEN
13506 CLOSE c_get_trip_siblings;
13507 END IF;
13508 IF c_check_valid_parent%ISOPEN THEN
13509 CLOSE c_check_valid_parent;
13510 END IF;
13511 IF c_check_valid_child%ISOPEN THEN
13512 CLOSE c_check_valid_child;
13513 END IF;
13514 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13515 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_PARENT');
13516 WSH_UTIL_CORE.Add_Message(x_return_status);
13517 --
13518 -- Debug Statements
13519 --
13520 IF l_debug_on THEN
13521 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_PARENT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13522
13523 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_PARENT');
13524 END IF;
13525 --
13526
13527 WHEN WSH_FAIL_ASSIGN_DEL_TO_CONSOL THEN
13528 IF c_check_trips%ISOPEN THEN
13529 CLOSE c_check_trips;
13530 END IF;
13531 IF c_get_top_child_details%ISOPEN THEN
13532 CLOSE c_get_top_child_details;
13533 END IF;
13534 IF c_get_trip_siblings%ISOPEN THEN
13535 CLOSE c_get_trip_siblings;
13536 END IF;
13537 IF c_check_valid_parent%ISOPEN THEN
13538 CLOSE c_check_valid_parent;
13539 END IF;
13540 IF c_check_valid_child%ISOPEN THEN
13541 CLOSE c_check_valid_child;
13542 END IF;
13543 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13544 FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13545 WSH_UTIL_CORE.Add_Message(x_return_status);
13546 --
13547 -- Debug Statements
13548 --
13549 IF l_debug_on THEN
13550 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FAIL_ASSIGN_DEL_TO_CONSOL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13551
13552 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13553 END IF;
13554 --
13555
13556
13557 WHEN OTHERS THEN
13558 IF c_check_trips%ISOPEN THEN
13559 CLOSE c_check_trips;
13560 END IF;
13561 IF c_get_top_child_details%ISOPEN THEN
13562 CLOSE c_get_top_child_details;
13563 END IF;
13564 IF c_get_trip_siblings%ISOPEN THEN
13565 CLOSE c_get_trip_siblings;
13566 END IF;
13567 IF c_check_valid_parent%ISOPEN THEN
13568 CLOSE c_check_valid_parent;
13569 END IF;
13570 IF c_check_valid_child%ISOPEN THEN
13571 CLOSE c_check_valid_child;
13572 END IF;
13573 wsh_util_core.default_handler('wsh_new_delivery_actions.Assign_Del_to_Consol_Del',l_module_name);
13574 --
13575 IF l_debug_on THEN
13576 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
13577 END IF;
13578
13579 END Assign_Del_to_Consol_Del;
13580
13581 --
13582 -- Name:
13583 -- Unassign_Dels_from_Consol_Del
13584 --
13585 -- Purpose:
13586 -- This API unassigns deliveries from a parent (consolidation)
13587 -- delivery. If the parent delivery becomes empty we delete the
13588 -- parent delivery. Currently this will be called with
13589 -- assumption that all and only all deliveries in the parent
13590 -- delivery will be unassigned all at the same time.
13591 --
13592 -- Parameters:
13593 -- p_del_tab: Table of deliveries that need to be unassigned
13594 -- p_parent_del_ids: Parent deliveries that will be unassigned from
13595 -- and eventually deleted.
13596 -- p_caller: Calling entity/action
13597 -- x_return_status: status
13598
13599
13600 Procedure Unassign_Dels_from_Consol_Del(
13601 p_parent_del IN NUMBER,
13602 p_caller IN VARCHAR2,
13603 p_del_tab IN OUT NOCOPY wsh_util_core.id_tab_type,
13604 x_return_status OUT NOCOPY VARCHAR2) IS
13605
13606 CURSOR c_check_parent_exists(p_child_delivery_id in number, p_parent_delivery_id in number) IS
13607 select l1.delivery_id, l2.delivery_id, l1.delivery_leg_id, s.trip_id
13608 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13609 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13610 and l1.delivery_id = p_child_delivery_id
13611 and l2.delivery_id = NVL(p_parent_delivery_id, l2.delivery_id)
13612 and d.delivery_id = l1.delivery_id
13613 and d.status_code = 'OP'
13614 and s.stop_id = l1.pick_up_stop_id
13615 order by s.trip_id, l2.delivery_id;
13616
13617 cursor c_check_children_exists(p_parent_delivery_id in number) is
13618 select l1.delivery_id
13619 from wsh_delivery_legs l1, wsh_delivery_legs l2
13620 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13621 and l2.delivery_id = p_parent_delivery_id
13622 and rownum = 1;
13623
13624 CURSOR c_get_children(p_parent_delivery_id IN NUMBER) is
13625 select l1.delivery_id, l1.delivery_leg_id, s.trip_id
13626 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13627 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13628 and l2.delivery_id = p_parent_delivery_id
13629 and d.delivery_id = l1.delivery_id
13630 and d.status_code = 'OP'
13631 and l1.pick_up_stop_id = s.stop_id;
13632
13633 CURSOR check_consol_lpns(p_delivery_id in number) is
13634 select parent_delivery_detail_id
13635 from wsh_delivery_assignments
13636 where delivery_id = p_delivery_id
13637 and delivery_id is not null
13638 and parent_delivery_detail_id IS NOT NULL
13639 and type = 'C'
13640 and rownum = 1;
13641
13642 l_parent_dels_tab wsh_util_core.id_tab_type;
13643 l_assigned_dels_tab wsh_util_core.id_tab_type;
13644 l_trip_tab wsh_util_core.id_tab_type;
13645 l_delete_parent_dels wsh_util_core.id_tab_type;
13646 l_remaining_parent_dels wsh_util_core.id_tab_type;
13647 l_child_legs_tab wsh_util_core.id_tab_type;
13648 l_trip_tab_dummy wsh_util_core.id_tab_type;
13649 l_distinct_parent_dels_tab wsh_util_core.id_tab_type;
13650
13651 l_parent_del_id_dummy NUMBER;
13652 l_parent_lpn_id_dummy NUMBER;
13653 l_child_leg_id_dummy NUMBER;
13654 l_consol_lpn_dummy NUMBER;
13655 l_child_del_dummy NUMBER;
13656 l_trip_dummy NUMBER;
13657 l_detail_id NUMBER;
13658 l_parent_included VARCHAR2(1);
13659 l_dummy_id NUMBER;
13660 l_assigned_dels_dummy NUMBER;
13661 l_parent_dels_dummy NUMBER;
13662 l_child_legs_dummy NUMBER;
13663 l_gross_weight NUMBER;
13664 l_net_weight NUMBER;
13665 l_volume NUMBER;
13666
13667 i NUMBER := 0;
13668 j NUMBER := 0;
13669 k NUMBER := 0;
13670 l NUMBER := 0;
13671 m NUMBER := 0;
13672
13673 l_num_warnings NUMBER := 0;
13674 l_num_errors NUMBER := 0;
13675 l_return_status VARCHAR2(30);
13676
13677 WSH_INVALID_CHILD_DELIVERIES EXCEPTION;
13678 WSH_NO_OPEN_CHILD_DELIVERIES EXCEPTION;
13679
13680 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Unassign_Dels_from_Consol_Del';
13681 l_debug_on BOOLEAN;
13682
13683 BEGIN
13684
13685 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13686 --
13687 IF l_debug_on IS NULL
13688 THEN
13689 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13690 END IF;
13691 --
13692 IF l_debug_on THEN
13693 wsh_debug_sv.push (l_module_name);
13694 WSH_DEBUG_SV.log(l_module_name,'p_parent_del', p_parent_del);
13695 WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13696 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13697 END IF;
13698
13699 IF p_del_tab.count = 0 and p_parent_del IS NULL THEN
13700
13701 -- raise exception
13702 RAISE WSH_INVALID_CHILD_DELIVERIES;
13703
13704 ELSIF p_del_tab.count = 0 THEN
13705
13706 -- unassign all children from the parent
13707
13708 OPEN c_get_children(p_parent_del);
13709 FETCH c_get_children BULK COLLECT
13710 INTO l_assigned_dels_tab, l_child_legs_tab, l_trip_tab_dummy;
13711 CLOSE c_get_children;
13712
13713 IF (l_assigned_dels_tab.COUNT = 0) THEN
13714 RAISE WSH_NO_OPEN_CHILD_DELIVERIES;
13715 END IF;
13716
13717 l_parent_dels_tab(1) := p_parent_del;
13718 l_trip_tab(1) := l_trip_tab_dummy(1);
13719 IF l_debug_on THEN
13720 WSH_DEBUG_SV.log(l_module_name,'l_assigned_dels_tab(1)', l_assigned_dels_tab(1));
13721 WSH_DEBUG_SV.log(l_module_name,'l_child_legs_tab(1)', l_child_legs_tab(1));
13722 WSH_DEBUG_SV.log(l_module_name,'l_parent_dels_tab(1)', l_parent_dels_tab(1));
13723 WSH_DEBUG_SV.log(l_module_name,'l_trip_tab(1)', l_trip_tab(1));
13724 END IF;
13725 ELSE
13726
13727 -- Check if the deliveries are assigned to parent dels.
13728 FOR del in 1..p_del_tab.count LOOP
13729 OPEN c_check_parent_exists(p_del_tab(del), p_parent_del);
13730 FETCH c_check_parent_exists
13731 INTO l_assigned_dels_dummy, l_parent_dels_dummy, l_child_legs_dummy, l_trip_dummy;
13732 IF c_check_parent_exists%FOUND THEN
13733 i := i + 1;
13734 l_assigned_dels_tab(i) := l_assigned_dels_dummy;
13735 l_parent_dels_tab(i) := l_parent_dels_dummy;
13736 l_child_legs_tab(i) := l_child_legs_dummy;
13737 l_trip_tab(i) := l_trip_dummy;
13738 END IF;
13739 CLOSE c_check_parent_exists;
13740 END LOOP;
13741
13742 END IF;
13743
13744 -- Check if the child deliveries have consol LPN's.
13745 -- If yes, do not unassign this delivery.
13746 -- and WSH cannot unpack from WMS orgs.
13747
13748 FOR i in 1..l_assigned_dels_tab.count LOOP
13749 IF l_debug_on THEN
13750 WSH_DEBUG_SV.log(l_module_name,'looping thru del: ', l_assigned_dels_tab(i));
13751 END IF;
13752
13753 OPEN check_consol_lpns(l_assigned_dels_tab(i));
13754 FETCH check_consol_lpns INTO l_consol_lpn_dummy;
13755 IF check_consol_lpns%FOUND THEN
13756 CLOSE check_consol_lpns;
13757 FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_UNASSIGN_DEL_LPN');
13758 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13759 l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13760 wsh_util_core.add_message(l_return_status, l_module_name);
13761 wsh_util_core.api_post_call
13762 (
13763 p_return_status => l_return_status,
13764 x_num_warnings => l_num_warnings,
13765 x_num_errors => l_num_errors
13766 );
13767 END IF;
13768 CLOSE check_consol_lpns;
13769
13770 IF l_debug_on THEN
13771 WSH_DEBUG_SV.log(l_module_name,'after looping thru del: ', l_assigned_dels_tab(i));
13772 END IF;
13773
13774 END LOOP;
13775
13776 IF l_assigned_dels_tab.count = 0 THEN
13777
13778 -- None of the deliveries were assigned to parents
13779
13780 RAISE WSH_INVALID_CHILD_DELIVERIES;
13781
13782
13783 END IF;
13784
13785 BEGIN
13786
13787 FOR i in 1..l_assigned_dels_tab.count LOOP
13788 WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_assigned_dels_tab(i));
13789 END LOOP;
13790
13791 EXCEPTION
13792 WHEN OTHERS THEN
13793 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13794 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13795 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13796 WSH_UTIL_CORE.Add_Message(x_return_status);
13797 --
13798 -- Debug Statements
13799 --
13800 IF l_debug_on THEN
13801 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13802 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13803 END IF;
13804 RETURN;
13805 --
13806 END;
13807 -- Delete the consolidation record for the child
13808
13809 FORALL i in 1..l_assigned_dels_tab.count
13810 delete wsh_delivery_assignments
13811 where type = 'C'
13812 and delivery_id in l_assigned_dels_tab(i);
13813
13814 -- Update the child deliveries record to indicate no consolidation.
13815
13816 FORALL i in 1..l_assigned_dels_tab.count
13817 update wsh_delivery_assignments
13818 set type = 'S'
13819 where delivery_id in l_assigned_dels_tab(i)
13820 and type = 'O';
13821
13822
13823 -- Unassign child delivery legs from the parents' trip/leg
13824
13825
13826 IF p_parent_del IS NOT NULL THEN
13827
13828 l_distinct_parent_dels_tab(1) := p_parent_del;
13829 IF l_debug_on THEN
13830 WSH_DEBUG_SV.log(l_module_name,'only parent ', l_distinct_parent_dels_tab(1));
13831 END IF;
13832
13833 ELSE
13834
13835 FOR i in 1..l_assigned_dels_tab.count LOOP
13836
13837 IF i = l_assigned_dels_tab.count OR l_parent_dels_tab(i) <> l_parent_dels_tab(i + 1) THEN
13838
13839 k := k + 1;
13840 l_distinct_parent_dels_tab(k) := l_parent_dels_tab(i);
13841 IF l_debug_on THEN
13842 WSH_DEBUG_SV.log(l_module_name,'distinct parents ', l_distinct_parent_dels_tab(k));
13843 END IF;
13844
13845 END IF;
13846
13847
13848 END LOOP;
13849
13850
13851 END IF;
13852
13853 BEGIN
13854
13855 FOR i in 1..l_child_legs_tab.count LOOP
13856
13857 WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_dlvy_leg_id => l_child_legs_tab(i));
13858
13859 END LOOP;
13860
13861 EXCEPTION
13862 WHEN OTHERS THEN
13863 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13864 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_DEL_LEG_LOCK');
13865 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13866 WSH_UTIL_CORE.Add_Message(x_return_status);
13867 --
13868 -- Debug Statements
13869 --
13870 IF l_debug_on THEN
13871 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13872 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13873 END IF;
13874 RETURN;
13875 --
13876 END;
13877
13878 FORALL i in 1..l_child_legs_tab.count
13879 update wsh_delivery_legs
13880 set parent_delivery_leg_id = NULL
13881 where delivery_leg_id = l_child_legs_tab(i);
13882
13883
13884 -- Separate the empty parent deliveries.
13885 IF l_debug_on THEN
13886 WSH_DEBUG_SV.log(l_module_name,'l_distinct_parent_dels_tab.count ', l_distinct_parent_dels_tab.count);
13887 END IF;
13888
13889 FOR i in 1..l_distinct_parent_dels_tab.count LOOP
13890 IF l_debug_on THEN
13891 WSH_DEBUG_SV.log(l_module_name,'loop thru del: ', l_distinct_parent_dels_tab(i));
13892 END IF;
13893
13894 OPEN c_check_children_exists(l_distinct_parent_dels_tab(i));
13895 FETCH c_check_children_exists INTO l_dummy_id;
13896 IF c_check_children_exists%FOUND THEN
13897 l := l + 1;
13898 l_remaining_parent_dels(l) := l_distinct_parent_dels_tab(i);
13899 IF l_debug_on THEN
13900 WSH_DEBUG_SV.log(l_module_name,'l_remaining_parent_dels ', l_remaining_parent_dels(l));
13901 END IF;
13902 ELSE
13903 m := m + 1;
13904 l_delete_parent_dels(m) := l_distinct_parent_dels_tab(i);
13905 IF l_debug_on THEN
13906 WSH_DEBUG_SV.log(l_module_name,'l_delete_parent_dels ', l_delete_parent_dels(m));
13907 END IF;
13908 END IF;
13909 CLOSE c_check_children_exists;
13910
13911 END LOOP;
13912
13913 -- Delete the parent deliveries if empty. This will
13914 -- also take care of deleting the parents' legs as well
13915
13916 IF l_delete_parent_dels.count > 0 THEN
13917
13918 IF l_debug_on THEN
13919 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.Delete',WSH_DEBUG_SV.C_PROC_LEVEL);
13920 END IF;
13921
13922
13923 WSH_UTIL_CORE.Delete(
13924 p_type => 'DLVY',
13925 p_rows => l_delete_parent_dels,
13926 p_caller => p_caller,
13927 x_return_status => l_return_status);
13928
13929 -- Handle return status.
13930 wsh_util_core.api_post_call
13931 (
13932 p_return_status => l_return_status,
13933 x_num_warnings => l_num_warnings,
13934 x_num_errors => l_num_errors
13935 );
13936
13937 END IF;
13938 IF l_remaining_parent_dels.count > 0 THEN
13939 -- Update the wt/vol on the remaining parents.
13940
13941 IF l_debug_on THEN
13942 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13943 END IF;
13944
13945 FOR i in 1..l_remaining_parent_dels.count LOOP
13946
13947 WSH_WV_UTILS.Delivery_Weight_Volume (
13948 p_delivery_id => l_remaining_parent_dels(i),
13949 p_update_flag => 'Y',
13950 p_calc_wv_if_frozen => 'N',
13951 x_gross_weight => l_gross_weight,
13952 x_net_weight => l_net_weight,
13953 x_volume => l_volume,
13954 x_return_status => l_return_status);
13955
13956 wsh_util_core.api_post_call
13957 (
13958 p_return_status => l_return_status,
13959 x_num_warnings => l_num_warnings,
13960 x_num_errors => l_num_errors
13961 );
13962
13963 END LOOP;
13964
13965 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13966 p_entity_type => 'DELIVERY',
13967 p_entity_ids => l_remaining_parent_dels,
13968 x_return_status => l_return_status);
13969
13970 wsh_util_core.api_post_call
13971 (
13972 p_return_status => l_return_status,
13973 x_num_warnings => l_num_warnings,
13974 x_num_errors => l_num_errors
13975 );
13976
13977 Confirm_Consolidation_Delivery(
13978 p_consol_del_tab => l_remaining_parent_dels,
13979 x_return_status => l_return_status);
13980
13981 wsh_util_core.api_post_call
13982 (
13983 p_return_status => l_return_status,
13984 x_num_warnings => l_num_warnings,
13985 x_num_errors => l_num_errors
13986 );
13987
13988 END IF;
13989
13990 IF l_num_errors > 0
13991 THEN
13992 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13993 ELSIF l_num_warnings > 0
13994 THEN
13995 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13996 ELSE
13997 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13998 END IF;
13999
14000 IF l_debug_on THEN
14001 WSH_DEBUG_SV.pop(l_module_name);
14002 END IF;
14003
14004 EXCEPTION
14005 WHEN FND_API.G_EXC_ERROR THEN
14006 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14007 --
14008 -- Debug Statements
14009 --
14010 IF l_debug_on THEN
14011 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14012 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14013 END IF;
14014 --
14015
14016 WHEN WSH_NO_OPEN_CHILD_DELIVERIES THEN
14017 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14018 FND_MESSAGE.SET_NAME('WSH','WSH_NO_OPEN_DELIVERIES');
14019 WSH_UTIL_CORE.Add_Message(x_return_status);
14020 --
14021 -- Debug Statements
14022 --
14023 IF l_debug_on THEN
14024 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_OPEN_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14025
14026 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_OPEN_CHILD_DELIVERIES');
14027 END IF;
14028 --
14029
14030 WHEN WSH_INVALID_CHILD_DELIVERIES THEN
14031 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14032 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILD_DELIVERIES');
14033 WSH_UTIL_CORE.Add_Message(x_return_status);
14034 --
14035 -- Debug Statements
14036 --
14037 IF l_debug_on THEN
14038 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14039
14040 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILD_DELIVERIES');
14041 END IF;
14042 --
14043 WHEN OTHERS THEN
14044 wsh_util_core.default_handler('wsh_new_delivery_actions.Unassign_Dels_from_Consol_Del',l_module_name);
14045 --
14046 IF c_check_parent_exists%ISOPEN THEN
14047 CLOSE c_check_parent_exists;
14048 END IF;
14049 --
14050 IF c_check_children_exists%ISOPEN THEN
14051 CLOSE c_check_children_exists;
14052 END IF;
14053 --
14054 IF c_get_children%ISOPEN THEN
14055 CLOSE c_get_children;
14056 END IF;
14057 --
14058 IF check_consol_lpns%ISOPEN THEN
14059 CLOSE check_consol_lpns;
14060 END IF;
14061 --
14062 IF l_debug_on THEN
14063 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14064 END IF;
14065
14066 END Unassign_Dels_from_Consol_Del;
14067
14068
14069 PROCEDURE Confirm_Consolidation_Delivery(
14070 p_consol_del_tab IN wsh_util_core.id_tab_type,
14071 x_return_status OUT NOCOPY VARCHAR2) IS
14072
14073 cursor c_check_close_consol(p_del_id IN NUMBER) IS
14074 select d.delivery_id
14075 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d
14076 where l1.parent_delivery_leg_id = l2.delivery_leg_id
14077 and l2.delivery_id = p_del_id
14078 and l1.delivery_id = d.delivery_id
14079 and d.status_code = 'OP'
14080 and rownum = 1;
14081
14082 l_u_consol_del_tab wsh_util_core.id_tab_type;
14083 l_co_consol_del_tab wsh_util_core.id_tab_type;
14084 l_number_of_lpn_tab wsh_util_core.id_tab_type;
14085 l_delivery_id NUMBER;
14086 l_lpn_number NUMBER;
14087 i NUMBER;
14088 j NUMBER := 0;
14089 l_exists_flag VARCHAR2(1);
14090 l_lock_index NUMBER;
14091
14092
14093 CURSOR c_get_child_lpn_number(p_delivery_id IN NUMBER) IS
14094 select count(*)
14095 from wsh_delivery_assignments da,
14096 wsh_delivery_details dd
14097 where da.type = 'C'
14098 and da.parent_delivery_detail_id IS NULL
14099 and da.delivery_detail_id = dd.delivery_detail_id
14100 and dd.container_flag = 'Y'
14101 and da.parent_delivery_id = p_delivery_id
14102 and da.parent_delivery_id IS NOT NULL;
14103
14104 CURSOR c_get_consol_lpn_number(p_delivery_id in NUMBER) IS
14105 select count(*)
14106 from wsh_delivery_assignments
14107 where type = 'S'
14108 and delivery_id = p_delivery_id;
14109
14110 -- bug 4505105
14111 cursor l_get_consol_del_org_csr (p_del_id IN NUMBER) is
14112 select organization_id
14113 from wsh_new_deliveries
14114 where delivery_id = p_del_id;
14115
14116 l_return_status VARCHAR2(1);
14117 l_del_valid_flag VARCHAR2(1);
14118 l_org_id NUMBER := 0;
14119 l_num_warnings NUMBER := 0;
14120 l_num_err NUMBER := 0;
14121
14122 -- bug 4505105
14123
14124
14125 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Confirm_Consolidation_Delivery';
14126 l_debug_on BOOLEAN;
14127
14128 BEGIN
14129 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14130 --
14131 IF l_debug_on IS NULL
14132 THEN
14133 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14134 END IF;
14135 --
14136 IF l_debug_on THEN
14137 wsh_debug_sv.push (l_module_name);
14138 END IF;
14139
14140 -- bug 4505105
14141 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14142 -- bug 4505105
14143
14144 -- collect the unique parent deliveries.
14145 -- p_consol_del_tab may not be gapless and
14146 -- may contain duplicates.
14147 i := p_consol_del_tab.FIRST;
14148 WHILE i IS NOT NULL LOOP
14149 IF l_debug_on THEN
14150 WSH_DEBUG_SV.logmsg(l_module_name,'Inside WHILE i IS NOT NULL LOOP');
14151 END IF;
14152 l_exists_flag := 'N';
14153 FOR k in 1..l_u_consol_del_tab.count LOOP
14154 IF l_debug_on THEN
14155 WSH_DEBUG_SV.logmsg(l_module_name,'Inside FOR k in 1..l_u_consol_del_tab.count LOOP');
14156 END IF;
14157 IF l_u_consol_del_tab(k) = p_consol_del_tab(i) THEN
14158 l_exists_flag := 'Y';
14159 EXIT;
14160 END IF;
14161 END LOOP;
14162 IF l_debug_on THEN
14163 WSH_DEBUG_SV.logmsg(l_module_name,'after FOR k in 1..l_u_consol_del_tab.count LOOP');
14164 END IF;
14165 IF l_exists_flag = 'N' THEN
14166 IF l_debug_on THEN
14167 WSH_DEBUG_SV.log(l_module_name,'i is', i);
14168 WSH_DEBUG_SV.log(l_module_name,'p_consol_del_tab(i)', p_consol_del_tab(i));
14169 WSH_DEBUG_SV.log(l_module_name,'l_u_consol_del_tab.count', l_u_consol_del_tab.count);
14170 END IF;
14171 l_u_consol_del_tab(l_u_consol_del_tab.count + 1) := p_consol_del_tab(i);
14172 OPEN c_check_close_consol(p_consol_del_tab(i));
14173 FETCH c_check_close_consol INTO l_delivery_id;
14174 IF c_check_close_consol%NOTFOUND THEN
14175 -- bug 4505105
14176 l_del_valid_flag := 'Y';
14177 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14178 -- Keeping it commented because as of today
14179 -- this procedure will be called only for WMS org.
14180 --l_org_id := NULL;
14181 --open l_get_consol_del_org_csr(p_consol_del_tab(i));
14182 --fetch l_get_consol_del_org_csr into l_org_id;
14183 --close l_get_consol_del_org_csr;
14184 --IF (l_org_id is not null
14185 -- and wsh_util_validate.Check_Wms_Org(l_org_id)='Y'
14186 -- )
14187 --THEN
14188 --{
14189 validate_del_containers(p_consol_del_tab(i),
14190 'CONSOL',
14191 l_del_valid_flag,
14192 l_return_status);
14193
14194 IF l_debug_on THEN
14195 WSH_DEBUG_SV.log(l_module_name,'l_return_status after calling validate_del_containers', l_return_status);
14196 END IF;
14197
14198 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
14199 RAISE FND_API.G_EXC_ERROR;
14200 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
14201 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14202 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
14203 l_num_warnings := l_num_warnings + 1;
14204 END IF;
14205 --}
14206 --END IF;
14207
14208 IF (nvl(l_del_valid_flag,'Y') = 'Y') THEN
14209 --
14210 j:= j+1;
14211 l_co_consol_del_tab(j) := p_consol_del_tab(i);
14212 IF l_debug_on THEN
14213 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(j)', l_co_consol_del_tab(j));
14214 END IF;
14215 --
14216 ELSE
14217 --
14218 l_num_warnings := l_num_warnings + 1;
14219 l_num_err := l_num_err + 1;
14220 --
14221 END IF;
14222 -- bug 4505105
14223 END IF;
14224 CLOSE c_check_close_consol;
14225 IF l_debug_on THEN
14226 WSH_DEBUG_SV.logmsg(l_module_name,'after c_check_close_consol');
14227 END IF;
14228 END IF;
14229 IF l_debug_on THEN
14230 WSH_DEBUG_SV.log(l_module_name,'i', i);
14231 END IF;
14232
14233 i := p_consol_del_tab.next(i);
14234
14235 IF l_debug_on THEN
14236 WSH_DEBUG_SV.log(l_module_name,'i', i);
14237 END IF;
14238
14239 END LOOP;
14240 IF l_debug_on THEN
14241 WSH_DEBUG_SV.logmsg(l_module_name,'After WHILE i IS NOT NULL LOOP');
14242 END IF;
14243
14244 -- bug 4505105
14245 IF l_debug_on THEN
14246 WSH_DEBUG_SV.log(l_module_name,'Count of consol deliveries to be processed is ', l_u_consol_del_tab.count);
14247 WSH_DEBUG_SV.log(l_module_name,'Count of errored deliveries is ', l_num_err);
14248 END IF;
14249
14250 IF (l_num_err >= l_u_consol_del_tab.count AND l_num_err > 0) THEN
14251 IF l_debug_on THEN
14252 WSH_DEBUG_SV.logmsg(l_module_name,'None of the Deliveries are eligible of Ship Confirm');
14253 END IF;
14254 RAISE FND_API.G_EXC_ERROR;
14255 END IF;
14256 -- bug 4505105
14257
14258 BEGIN
14259 IF l_debug_on THEN
14260 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab.count', l_co_consol_del_tab.count);
14261 END IF;
14262
14263 FOR l in 1..l_co_consol_del_tab.count LOOP
14264 IF l_debug_on THEN
14265 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(l)', l_co_consol_del_tab(l));
14266 END IF;
14267 l_lock_index := l;
14268 WSH_NEW_DELIVERIES_PVT.Lock_Dlvy_No_Compare(l_co_consol_del_tab(l));
14269
14270 l_lpn_number := 0;
14271 OPEN c_get_child_lpn_number(l_co_consol_del_tab(l));
14272 FETCH c_get_child_lpn_number
14273 INTO l_lpn_number;
14274 CLOSE c_get_child_lpn_number;
14275
14276 l_number_of_lpn_tab(l) := NVL(l_lpn_number, 0);
14277 l_lpn_number := 0;
14278
14279 OPEN c_get_consol_lpn_number(l_co_consol_del_tab(l));
14280 FETCH c_get_consol_lpn_number
14281 INTO l_lpn_number;
14282 CLOSE c_get_consol_lpn_number;
14283
14284 l_number_of_lpn_tab(l) := l_number_of_lpn_tab(l) + NVL(l_lpn_number, 0);
14285
14286 END LOOP;
14287 EXCEPTION
14288 WHEN OTHERS THEN
14289 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14290 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
14291 FND_MESSAGE.Set_Token('ENTITY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_co_consol_del_tab(l_lock_index)));
14292 WSH_UTIL_CORE.Add_Message(x_return_status);
14293 --
14294 -- Debug Statements
14295 --
14296 IF l_debug_on THEN
14297 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14298 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14299 END IF;
14300 RETURN;
14301 --
14302 END;
14303 IF l_debug_on THEN
14304 WSH_DEBUG_SV.logmsg(l_module_name,'after lock');
14305 END IF;
14306 IF l_co_consol_del_tab.count > 0 THEN
14307 FORALL m in 1..l_co_consol_del_tab.count
14308 UPDATE wsh_new_deliveries
14309 SET status_code = 'CO',
14310 number_of_lpn = decode(number_of_lpn, NULL, l_number_of_lpn_tab(m), number_of_lpn)
14311 WHERE delivery_id = l_co_consol_del_tab(m);
14312 END IF;
14313
14314 -- bug 4505105
14315 IF (l_num_warnings > 0 and x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
14316 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14317 ELSE
14318 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14319 END IF;
14320 -- bug 4505105
14321
14322 EXCEPTION
14323 -- bug 4505105
14324 WHEN FND_API.G_EXC_ERROR THEN
14325 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14326 --
14327 IF l_debug_on THEN
14328 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14329 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14330 END IF;
14331 --
14332 -- bug 4505105
14333 WHEN OTHERS THEN
14334 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14335 wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14336 --
14337 IF l_debug_on THEN
14338 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14339 END IF;
14340
14341 END Confirm_Consolidation_Delivery;
14342
14343
14344 PROCEDURE Create_Deconsol_Trips(p_deliveries_tab IN wsh_util_core.id_tab_type,
14345 x_return_status OUT NOCOPY VARCHAR2) IS
14346 CURSOR c_del_info(p_delivery_id IN NUMBER) IS
14347 SELECT parent.ultimate_dropoff_location_id pu_location,
14348 stop.planned_departure_date pu_date,
14349 child.ultimate_dropoff_location_id do_location,
14350 child.ultimate_dropoff_date do_date,
14351 child.ship_method_code,
14352 child.carrier_id,
14353 child.service_level,
14354 child.mode_of_transport,
14355 child.ignore_for_planning
14356 FROM wsh_new_deliveries child,
14357 wsh_new_deliveries parent,
14358 wsh_delivery_legs child_leg,
14359 wsh_delivery_legs parent_leg,
14360 wsh_trip_stops stop
14361 WHERE child_leg.delivery_id = p_delivery_id
14362 AND child_leg.parent_delivery_leg_id = parent_leg.delivery_leg_id
14363 AND child_leg.delivery_id = child.delivery_id
14364 AND parent_leg.delivery_id = parent.delivery_id
14365 AND child_leg.drop_off_stop_id = stop.stop_id
14366 AND child.ultimate_dropoff_location_id <> parent.ultimate_dropoff_location_id;
14367
14368 CURSOR c_second_leg(p_delivery_id IN NUMBER) IS
14369 SELECT stop.trip_id
14370 FROM wsh_delivery_legs leg,
14371 wsh_trip_stops stop
14372 WHERE leg.parent_delivery_leg_id IS NULL
14373 AND leg.delivery_id = p_delivery_id
14374 AND leg.pick_up_stop_id = stop.stop_id;
14375
14376 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Deconsol_Trips';
14377 l_debug_on BOOLEAN;
14378
14379
14380 l_del_tab wsh_util_core.id_tab_type;
14381 l_trip_tab wsh_util_core.id_tab_type;
14382
14383
14384 l_trip_in_rec WSH_TRIPS_GRP.tripInRecType;
14385 l_init_msg_list VARCHAR2(100);
14386 l_api_version_number NUMBER := 1.0;
14387 l_commit VARCHAR2(10);
14388 l_return_status VARCHAR2(1);
14389 l_msg_count NUMBER;
14390 l_msg_data VARCHAR2(2000);
14391 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
14392 l_trip_info_rec WSH_TRIPS_PVT.trip_rec_type;
14393 l_trip_out_rec_tab WSH_TRIPS_GRP.Trip_Out_Tab_Type;
14394 l_num_warnings NUMBER := 0;
14395 l_num_errors NUMBER := 0;
14396 l_do_date DATE;
14397 i NUMBER;
14398
14399 BEGIN
14400
14401
14402 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14403 --
14404 IF l_debug_on IS NULL
14405 THEN
14406 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14407 END IF;
14408 --
14409 IF l_debug_on THEN
14410 wsh_debug_sv.push (l_module_name);
14411 END IF;
14412
14413 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14414
14415 i := p_deliveries_tab.FIRST;
14416
14417 WHILE i is NOT NULL LOOP
14418
14419
14420 FOR del in c_del_info(p_deliveries_tab(i)) LOOP
14421
14422 l_del_tab(1) := p_deliveries_tab(i);
14423
14424 -- Unassign all non-consol trips attached to
14425 -- delivery.
14426
14427 FOR trip in c_second_leg(p_deliveries_tab(i)) LOOP
14428
14429 WSH_TRIPS_ACTIONS.Unassign_Trip(
14430 p_del_rows => l_del_tab,
14431 p_trip_id => trip.trip_id,
14432 x_return_status => l_return_status);
14433
14434 WSH_UTIL_CORE.Api_Post_Call
14435 (
14436 p_return_status => l_return_status,
14437 x_num_warnings => l_num_warnings,
14438 x_num_errors => l_num_errors
14439 );
14440 END LOOP;
14441
14442
14443 -- Create Trip
14444
14445 l_trip_in_rec.caller := 'WSH_CONSOL';
14446 l_trip_in_rec.phase := NULL;
14447 l_trip_in_rec.action_code := 'CREATE';
14448
14449 l_trip_info_tab.DELETE;
14450 l_trip_info_tab(1).ignore_for_planning := del.ignore_for_planning;
14451 l_trip_info_tab(1).ship_method_code := del.ship_method_code;
14452 l_trip_info_tab(1).service_level := del.service_level;
14453 l_trip_info_tab(1).mode_of_transport := del.mode_of_transport;
14454 l_trip_info_tab(1).carrier_id := del.carrier_id;
14455
14456 l_commit := FND_API.g_false;
14457 IF l_debug_on THEN
14458 WSH_DEBUG_SV.logmsg(l_module_name,'Creating deconsol trip');
14459 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.Create_Update_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14460 END IF;
14461
14462 WSH_TRIPS_GRP.Create_Update_Trip(
14463 p_api_version_number => l_api_version_number,
14464 p_init_msg_list => l_init_msg_list,
14465 p_commit => l_commit,
14466 x_return_status => l_return_status,
14467 x_msg_count => l_msg_count,
14468 x_msg_data => l_msg_data,
14469 p_trip_info_tab => l_trip_info_tab,
14470 p_in_rec => l_trip_in_rec,
14471 x_out_tab => l_trip_out_rec_tab);
14472
14473 wsh_util_core.api_post_call
14474 (
14475 p_return_status => l_return_status,
14476 x_num_warnings => l_num_warnings,
14477 x_num_errors => l_num_errors
14478 );
14479
14480 -- Assign delivery to trip
14481
14482 IF l_debug_on THEN
14483 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning to deconsol trip');
14484 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.assign_trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14485 END IF;
14486
14487
14488 IF del.pu_date < del.do_date THEN
14489 l_do_date := del.do_date;
14490 ELSE
14491 l_do_date := del.pu_date + 1;
14492 END IF;
14493
14494 WSH_TRIPS_ACTIONS.assign_trip(
14495 p_del_rows => l_del_tab,
14496 p_trip_id => l_trip_out_rec_tab(l_trip_out_rec_tab.FIRST).trip_id,
14497 p_pickup_location_id => del.pu_location,
14498 p_dropoff_location_id => del.do_location,
14499 p_pickup_arr_date => del.pu_date,
14500 p_pickup_dep_date => del.pu_date,
14501 p_dropoff_arr_date => l_do_date,
14502 p_dropoff_dep_date => l_do_date,
14503 x_return_status => l_return_status);
14504
14505 wsh_util_core.api_post_call
14506 (
14507 p_return_status => l_return_status,
14508 x_num_warnings => l_num_warnings,
14509 x_num_errors => l_num_errors
14510 );
14511 END LOOP;
14512 i := p_deliveries_tab.NEXT(i);
14513
14514 END LOOP;
14515
14516
14517 IF l_num_errors > 0
14518 THEN
14519 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14520 ELSIF l_num_warnings > 0
14521 THEN
14522 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14523 ELSE
14524 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14525 END IF;
14526
14527 IF l_debug_on THEN
14528 WSH_DEBUG_SV.pop(l_module_name);
14529 END IF;
14530
14531 EXCEPTION
14532 WHEN FND_API.G_EXC_ERROR THEN
14533 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14534 --
14535 IF l_debug_on THEN
14536 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14537 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14538 END IF;
14539 --
14540 WHEN OTHERS THEN
14541 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14542 wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14543 --
14544 IF l_debug_on THEN
14545 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14546 END IF;
14547
14548 END Create_Deconsol_Trips;
14549
14550
14551 --OTM R12
14552 ----------------------------------------------------------
14553 -- FUNCTION IS_DELIVERY_EMPTY
14554 --
14555 -- parameters: p_delivery_id delivery id to check for emptiness
14556 --
14557 -- description: This procedure checks the delivery to see if there's any detail
14558 -- lines on the delivery. Returns Y if yes, N if no, and E if errors out
14559 ----------------------------------------------------------
14560 FUNCTION IS_DELIVERY_EMPTY (p_delivery_id IN NUMBER) RETURN VARCHAR2 IS
14561
14562 CURSOR c_delivery_detail_count(p_del_id IN NUMBER) IS
14563 SELECT 1
14564 FROM wsh_delivery_assignments wda,
14565 wsh_delivery_details wdd
14566 WHERE wda.delivery_id = p_del_id
14567 AND wda.delivery_detail_id = wdd.delivery_detail_id
14568 AND wdd.container_flag = 'N';
14569
14570 l_count NUMBER;
14571 l_return_value VARCHAR2(1);
14572
14573 l_debug_on BOOLEAN;
14574 --
14575 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'IS_DELIVERY_EMPTY';
14576 --
14577 BEGIN
14578
14579 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14580 --
14581 IF l_debug_on IS NULL THEN
14582 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14583 END IF;
14584 --
14585 IF l_debug_on THEN
14586 WSH_DEBUG_SV.push(l_module_name);
14587 WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
14588 END IF;
14589
14590 l_count := 0;
14591
14592 l_return_value := 'Y'; --defaulting to empty
14593
14594 IF (p_delivery_id IS NOT NULL) THEN
14595 OPEN c_delivery_detail_count(p_delivery_id);
14596 FETCH c_delivery_detail_count INTO l_count;
14597
14598 IF (c_delivery_detail_count%FOUND) THEN -- not empty
14599
14600 IF l_debug_on THEN
14601 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not empty');
14602 END IF;
14603 l_return_value := 'N';
14604 ELSE -- empty
14605 IF l_debug_on THEN
14606 wsh_debug_sv.logmsg(l_module_name, 'Delivery is empty');
14607 END IF;
14608 l_return_value := 'Y';
14609 END IF;
14610 CLOSE c_delivery_detail_count;
14611 ELSE
14612 l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14613 END IF;
14614
14615 IF l_debug_on THEN
14616 wsh_debug_sv.log(l_module_name, 'RETURN VALUE', l_return_value);
14617 WSH_DEBUG_SV.pop(l_module_name);
14618 END IF;
14619 --
14620
14621 RETURN l_return_value;
14622 EXCEPTION
14623
14624 WHEN OTHERS THEN
14625 wsh_util_core.default_handler('wsh_new_delivery_actions.is_delivery_empty',l_module_name);
14626 --
14627 IF (c_delivery_detail_count%ISOPEN) THEN
14628 CLOSE c_delivery_detail_count;
14629 END IF;
14630 l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14631
14632 IF l_debug_on THEN
14633 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
14634 wsh_debug_sv.LOG(l_module_name, 'RETURN VALUE', l_return_value);
14635 WSH_DEBUG_SV.pop(l_module_name);
14636 END IF;
14637 --
14638 RETURN l_return_value;
14639 END IS_DELIVERY_EMPTY;
14640 --END OTM R12
14641
14642 END WSH_NEW_DELIVERY_ACTIONS;