[Home] [Help]
PACKAGE BODY: APPS.WSH_NEW_DELIVERY_ACTIONS
Source
1 PACKAGE BODY WSH_NEW_DELIVERY_ACTIONS as
2 /* $Header: WSHDEACB.pls 120.57.12020000.6 2013/04/08 10:56:15 suppal 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_client_ids IN wsh_util_core.id_tab_type, --Modified R12.1.1 LSP PROJECT
2173 p_ship_method_code_vals IN ship_method_type,
2174 x_autointransit_flag OUT NOCOPY VARCHAR2,
2175 x_autoclose_flag OUT NOCOPY VARCHAR2,
2176 x_report_set_id OUT NOCOPY NUMBER, -- always NULL
2177 x_report_set_name OUT NOCOPY VARCHAR2, -- always NULL
2178 x_ship_method_name OUT NOCOPY VARCHAR2,
2179 x_return_status OUT NOCOPY VARCHAR2,
2180 x_sc_rule_id OUT NOCOPY NUMBER,
2181 x_ac_bol_flag OUT NOCOPY VARCHAR2,
2182 x_defer_interface_flag OUT NOCOPY VARCHAR2,
2183 x_sc_rule_name OUT NOCOPY VARCHAR2 -- always NULL
2184
2185 ) IS
2186
2187 CURSOR Report_Set (p_report_set_id NUMBER) IS
2188 SELECT rs.name,
2189 rs.report_set_id
2190 FROM wsh_report_sets rs
2191 WHERE rs.report_set_id = p_report_set_id;
2192
2193 CURSOR Check_Trip (l_delivery_id NUMBER) IS
2194 select wts.trip_id
2195 from wsh_delivery_legs wdl, wsh_trip_stops wts
2196 where wdl.pick_up_stop_id=wts.stop_id
2197 and wdl.delivery_id=l_delivery_id
2198 and rownum=1;
2199
2200 CURSOR sm_name(x_ship_method_code IN VARCHAR2) is
2201 SELECT meaning
2202 FROM fnd_lookup_values_vl
2203 WHERE lookup_code = x_ship_method_code
2204 AND lookup_type = 'SHIP_METHOD'
2205 AND view_application_id = 3;
2206
2207 -- Use Ship Confirm Rule for the Organization
2208 -- Also, get the default values for the Rule
2209 CURSOR get_sc_rule (p_ship_confirm_rule_id NUMBER) IS
2210 SELECT wsc.name,
2211 wsc.ship_confirm_rule_id,
2212 wsc.ac_intransit_flag,
2213 wsc.ac_close_trip_flag,
2214 wsc.ac_bol_flag,
2215 wsc.ac_defer_interface_flag,
2216 wsc.report_set_id,
2217 wsc.ship_method_code,
2218 wsc.effective_end_date
2219 FROM wsh_ship_confirm_rules wsc
2220 WHERE wsc.ship_confirm_rule_id = p_ship_confirm_rule_id;
2221
2222 l_trip_id NUMBER;
2223 l_prev_organization_id NUMBER; -- to find out the Prev. Org. Id
2224 l_organization_id NUMBER;
2225 l_all_orgids_match BOOLEAN := TRUE;
2226 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2227
2228 l_num_warn NUMBER := 0;
2229 l_count NUMBER := 0;
2230
2231 temp_ship_method_code VARCHAR2(30);
2232 dist_ship_method_code VARCHAR2(30);
2233
2234 trip_options BOOLEAN := FALSE;
2235 ship_method_options BOOLEAN := FALSE;
2236 first_ship_method BOOLEAN := TRUE;
2237 l_last_del BOOLEAN := FALSE;
2238 l_return_status VARCHAR2(1);
2239
2240 /*Modified R12.1.1 LSP PROJECT*/
2241 l_Client_id NUMBER ;
2242 l_client_params INV_CACHE.ct_rec_type;
2243
2244 l_sc_rule_id NUMBER;
2245 l_report_set_id NUMBER;
2246 l_prev_Client_id NUMBER; -- to find out the Prev. Client Id
2247 /*Modified R12.1.1 LSP PROJECT*/
2248
2249 others EXCEPTION;
2250
2251 -- frontport bug 4310141 / Bug 4103142 - to get first trip for delivery
2252 CURSOR c_first_ship_method (p_delivery_id IN number)IS
2253 SELECT wt.ship_method_code
2254 FROM wsh_new_deliveries del,
2255 wsh_delivery_legs dlg,
2256 wsh_trip_stops st,
2257 wsh_trips wt
2258 WHERE del.delivery_id = dlg.delivery_id
2259 AND dlg.pick_up_stop_id = st.stop_id
2260 AND del.initial_pickup_location_id = st.stop_location_id
2261 AND st.trip_id = wt.trip_id
2262 AND del.delivery_id = p_delivery_id
2263 AND rownum < 3;
2264
2265
2266
2267 --
2268 l_debug_on BOOLEAN;
2269 --
2270 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_DELIVERY_DEFAULTS';
2271 --
2272 BEGIN
2273
2274 --
2275 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2276 --
2277 IF l_debug_on IS NULL
2278 THEN
2279 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2280 END IF;
2281 --
2282 IF l_debug_on THEN
2283 WSH_DEBUG_SV.push(l_module_name);
2284 WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Count'||p_del_rows.count);
2285 WSH_DEBUG_SV.logmsg(l_module_name,'Org id Count'||p_org_ids.count);
2286 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Count'||p_ship_method_code_vals.count);
2287 END IF;
2288 --
2289 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2290
2291 l_all_orgids_match := TRUE;
2292
2293 IF (p_del_rows.count = 0) THEN
2294 RAISE others;
2295 END IF;
2296
2297 l_count := p_org_ids.count;
2298
2299 IF (p_org_ids.count = 1) THEN
2300 l_all_orgids_match := TRUE;
2301 l_organization_id := p_org_ids(1);
2302 l_client_id := p_client_ids(1); --Modified R12.1.1 LSP PROJECT
2303 END IF;
2304
2305 IF (p_org_ids.count > 1) THEN
2306 begin
2307 FOR i IN 1..p_org_ids.count LOOP
2308
2309 l_organization_id := p_org_ids(i);
2310 l_client_id := p_client_ids(i); --Modified R12.1.1 LSP PROJECT
2311 IF ( i = 1 ) THEN
2312 l_prev_organization_id := l_organization_id;
2313 l_prev_client_id := l_client_id; --Modified R12.1.1 LSP PROJECT
2314 END IF;
2315
2316 IF (l_prev_organization_id <> l_organization_id) OR (NVL(l_prev_client_id,-1) <> NVL(l_client_id,-1)) THEN
2317 l_all_orgids_match := FALSE;
2318 EXIT; -- Exit from loop as soon as Orgs. differ
2319 END IF;
2320 l_prev_organization_id := l_organization_id;
2321 END LOOP;
2322 end;
2323 END IF;
2324
2325 x_autointransit_flag := 'N';
2326 x_autoclose_flag := 'N';
2327
2328
2329 IF (l_all_orgids_match = TRUE) THEN --{
2330 /*Modified R12.1.1 LSP PROJECT (rminocha)*/
2331 IF ( l_client_id IS NOT NULL ) THEN
2332 --{
2333 IF l_debug_on THEN
2334 WSH_DEBUG_SV.logmsg(l_module_name, 'Calling INV_CACHE.GET_CLIENT_DEFAULT_PARAMETERS', WSH_DEBUG_SV.C_PROC_LEVEL);
2335 END IF;
2336 INV_CACHE.GET_CLIENT_DEFAULT_PARAMETERS(
2337 p_client_id => l_client_id,
2338 x_client_parameters_rec => l_client_params,
2339 x_return_status => l_return_status);
2340
2341 l_param_info.delivery_report_set_id := l_client_params.client_rec.delivery_report_set_id;
2342 l_param_info.ship_confirm_rule_id :=l_client_params.client_rec.ship_confirm_rule_id;
2343
2344 ELSE
2345 /*Modified R12.1.1 LSP PROJECT*/
2346
2347 WSH_SHIPPING_PARAMS_PVT.Get(
2348 p_organization_id => l_organization_id,
2349 x_param_info => l_param_info,
2350 x_return_status => l_return_status);
2351
2352 END IF; --Modified R12.1.1 LSP PROJECT
2353
2354 OPEN report_set(l_param_info.delivery_report_set_id);
2355 FETCH report_set INTO x_report_set_name, x_report_set_id;
2356 CLOSE report_set;
2357
2358 -- Assign Ship Confirm Rule back to OUT parameter
2359 x_sc_rule_id := l_param_info.ship_confirm_rule_id;
2360 END IF; --}
2361
2362
2363 dist_ship_method_code := '';
2364
2365 -- Bug 2213342 : Ship Confirm Defaulting behavior
2366 FOR i IN 1..p_del_rows.count LOOP
2367 -- Find trip for the delivery
2368 l_trip_id := NULL;
2369 OPEN Check_Trip( p_del_rows (i));
2370 FETCH Check_Trip INTO l_trip_id;
2371 IF Check_Trip%NOTFOUND THEN
2372 l_trip_id := NULL;
2373 END IF;
2374 CLOSE Check_Trip;
2375
2376 IF (l_trip_id IS NULL) THEN
2377 IF l_debug_on THEN
2378 WSH_DEBUG_SV.logmsg(l_module_name,'Trip id is null for delivery-'||p_del_rows(i))
2379 ;
2380 END IF;
2381
2382 -- Check to see if Trip Options are already set
2383 IF NOT trip_options THEN
2384 trip_options := TRUE;
2385 IF l_debug_on THEN
2386 WSH_DEBUG_SV.logmsg(l_module_name,'Set Trip Options');
2387 END IF;
2388
2389 x_autointransit_flag := 'Y';
2390 x_autoclose_flag := 'Y';
2391 END IF;
2392
2393 -- Check to see if Ship Method has to be set
2394 -- for Deliveries with Autocreate Trip
2395 IF NOT ship_method_options THEN
2396 IF l_debug_on THEN
2397 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Method Options');
2398 END IF;
2399
2400 IF first_ship_method THEN
2401 -- Initialize First Applicable Ship Method
2402 dist_ship_method_code := p_ship_method_code_vals(i);
2403 first_ship_method := FALSE;
2404 END IF;
2405 temp_ship_method_code := p_ship_method_code_vals(i);
2406 IF NVL(temp_ship_method_code,' ') = NVL(dist_ship_method_code,' ') THEN
2407 IF l_debug_on THEN
2408 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are same null');
2409 END IF;
2410
2411 NULL;
2412 ELSE
2413 -- Ship Methods are different for Deliveries, so Null Ship Method is returned
2414 IF l_debug_on THEN
2415 WSH_DEBUG_SV.logmsg(l_module_name,'Ship Methods are different');
2416 END IF;
2417
2418 dist_ship_method_code := NULL;
2419 ship_method_options := TRUE;
2420 END IF;
2421 END IF;
2422 ELSE -- trip_id is not null, trip exists
2423
2424 -- Find if this is the last delivery on the trip,
2425 -- then enable close options
2426 l_last_del := check_last_del_trip(p_del_rows(i));
2427
2428 IF l_last_del THEN
2429 IF l_debug_on THEN
2430 WSH_DEBUG_SV.logmsg(l_module_name,'Last Delivery in Trip-'||p_del_rows(i));
2431 END IF;
2432 trip_options := TRUE; -- trip options should be allowed
2433 x_autointransit_flag := 'Y';
2434 x_autoclose_flag := 'Y';
2435 END IF;
2436 END IF;
2437 END LOOP;
2438
2439 -- frontport bug 4178235: Fix for bug 4147636
2440 -- Trip options viz. intransit flag, close trip flag, defer interface flag
2441 -- need to be disabled in the ship confirm dialogue box for cases
2442 -- where delivery is assigned to a trip and it is not the Final delivery
2443 -- in that trip.
2444 -- Earlier logic (before this fix) depended on setting autointransit_flag=N
2445 -- and autoclose_flag=N , so that UI could disable the trip options.
2446 --
2447 -- Issue with this logic is that the same two flags could be set to N
2448 -- because of ship confirm Rule.
2449 --
2450 -- To avoid conflict with values set by ship confirm rule,
2451 -- New Logic uses autointransit=D and autoclose=D, (disable),
2452 -- so that UI should disable the trip options.
2453 --
2454 -- flags are set to Y or N depending on
2455 -- default value or based on the available ship confirm rule.
2456
2457 IF NOT trip_options THEN
2458 x_autointransit_flag := 'D';
2459 x_autoclose_flag := 'D';
2460 END IF;
2461
2462 IF l_debug_on THEN
2463 WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set id'||x_report_set_id);
2464 WSH_DEBUG_SV.logmsg(l_module_name,'End Report Set Name'||x_report_set_name);
2465 WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule'||x_sc_rule_name);
2466 WSH_DEBUG_SV.logmsg(l_module_name,'End Ship Confirm Rule id'||x_sc_rule_id);
2467 WSH_DEBUG_SV.logmsg(l_module_name,'End In transit'||x_autointransit_flag);
2468 WSH_DEBUG_SV.logmsg(l_module_name,'End Close '||x_autoclose_flag);
2469 WSH_DEBUG_SV.logmsg(l_module_name,'End BOL flag '||x_ac_bol_flag);
2470 WSH_DEBUG_SV.logmsg(l_module_name,'End Defer Interface flag '||x_defer_interface_flag);
2471 WSH_DEBUG_SV.logmsg(l_module_name,'End ship method '||x_ship_method_name);
2472 END IF;
2473
2474 -- frontport bug 4310141:
2475 -- Bug 4103142 defaulted ship method from first trip
2476 IF (p_del_rows.count = 1) AND x_ship_method_name IS NULL THEN
2477 -- 42588951: default trip only if rule not specified.
2478 -- dist_ship_method_code has the delivery's SM value.
2479 -- so that if the trip exists and has null SM, we can use delivery's SM.
2480 IF dist_ship_method_code IS NULL THEN
2481 dist_ship_method_code := p_ship_method_code_vals(1);
2482 END IF;
2483
2484 OPEN c_first_ship_method (p_del_rows(1));
2485 FETCH c_first_ship_method INTO temp_ship_method_code;
2486 IF c_first_ship_method%NOTFOUND THEN
2487 temp_ship_method_code := NULL;
2488 ELSE
2489 IF temp_ship_method_code IS NOT NULL THEN
2490 dist_ship_method_code := temp_ship_method_code;
2491 END IF;
2492 END IF;
2493 CLOSE c_first_ship_method;
2494 END IF;
2495
2496 IF x_ship_method_name IS NULL AND dist_ship_method_code IS NOT NULL THEN
2497 OPEN sm_name(dist_ship_method_code);
2498 FETCH sm_name into x_ship_method_name;
2499 CLOSE sm_name;
2500 END IF;
2501
2502 --
2503 IF l_debug_on THEN
2504 WSH_DEBUG_SV.pop(l_module_name);
2505 END IF;
2506 --
2507
2508 EXCEPTION
2509 WHEN others THEN
2510 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Get_Delivery_Defaults');
2511 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2512 --
2513 IF l_debug_on THEN
2514 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2515 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2516 END IF;
2517 --
2518 END Get_Delivery_Defaults;
2519
2520
2521 -- Procedure: Confirm_Delivery
2522 -- Parameters: p_del_rows - Delivery_ids of deliveries to be confirmed
2523 -- p_action_flag - 'S' for Ship Entered, Ship Unspecified Full
2524 -- 'B' for Ship Entered, Backorder Unspecified
2525 -- 'A' Ship All
2526 -- p_intransit_flag - 'Y' for autocreate_trip closes first stop
2527 -- p_close_flag - 'Y' closes autocreated trip and stops
2528 -- p_stage_del_flag - 'Y' creates a new delivery for the staged lines
2529 -- p_report_set_id - report set for delivery
2530 -- p_ship_method - ship method for autocreated trip
2531 -- p_actual_dep_date - actual departure date for pickup stop on autocreated trip
2532 -- p_defer_interface_flag - 'Y' to skip concurrent program submission, bug 1578251
2533 -- p_send_945_flag - 'Y' to trigger outbound shipment advice for delivery with WSH lines
2534 -- x_return_status - status of procedure call
2535 -- Description: This procedure will update shipped quantities of the details
2536 -- on each delivery and confirms each delivery
2537 --
2538
2539 PROCEDURE Confirm_Delivery
2540 (p_del_rows IN wsh_util_core.id_tab_type,
2541 p_action_flag IN VARCHAR2,
2542 p_intransit_flag IN VARCHAR2,
2543 p_close_flag IN VARCHAR2,
2544 p_stage_del_flag IN VARCHAR2,
2545 p_report_set_id IN NUMBER,
2546 p_ship_method IN VARCHAR2,
2547 p_actual_dep_date IN DATE,
2548 p_bol_flag IN VARCHAR2,
2549 p_mc_bol_flag IN VARCHAR2,
2550 p_defer_interface_flag IN VARCHAR2,
2551 p_send_945_flag IN VARCHAR2,
2552 p_autocreate_trip_flag IN varchar2 default 'Y',--heali :Shipment Advice change for trip Consolidation.
2553 x_return_status OUT NOCOPY VARCHAR2,
2554 p_caller IN VARCHAR2) IS
2555
2556
2557 record_locked EXCEPTION;
2558 PRAGMA EXCEPTION_INIT(record_locked, -54);
2559
2560 ship_confirm_error EXCEPTION;
2561
2562 -- Bug 1729723 : Updating number_of_lpn for delivery
2563 CURSOR number_of_lpn(l_delivery_id NUMBER) IS
2564 SELECT count(distinct wda.delivery_detail_id)
2565 FROM wsh_delivery_assignments_v wda
2566 WHERE wda.parent_delivery_detail_id is null
2567 AND LEVEL > 1
2568 CONNECT BY PRIOR wda.parent_delivery_detail_id = wda.delivery_detail_id
2569 START WITH wda.delivery_id = l_delivery_id;
2570
2571 CURSOR Report_Set (l_organization_id NUMBER) IS
2572 SELECT rs.name, rs.report_set_id
2573 FROM wsh_shipping_parameters sp,
2574 wsh_report_sets rs
2575 WHERE sp.organization_id = l_organization_id AND
2576 rs.report_set_id = sp.delivery_report_set_id;
2577
2578 CURSOR del_legs (l_delivery_id NUMBER) IS
2579 SELECT l1.pick_up_stop_id, l1.drop_off_stop_id, l1.delivery_leg_id, l2.delivery_id parent_delivery_id
2580 FROM wsh_delivery_legs l1, wsh_delivery_legs l2
2581 WHERE l1.delivery_id = l_delivery_id
2582 AND l1.parent_delivery_leg_id = l2.delivery_leg_id(+);
2583
2584
2585 CURSOR get_consol_del (l_delivery_id NUMBER) IS
2586 SELECT l2.delivery_id parent_delivery_id
2587 FROM wsh_delivery_legs l1, wsh_delivery_legs l2
2588 WHERE l1.delivery_id = l_delivery_id
2589 AND l1.parent_delivery_leg_id = l2.delivery_leg_id;
2590
2591
2592
2593 ---BUG No:4241880.Cursor changed
2594 CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS
2595 SELECT freight_code
2596 FROM wsh_carriers wc,wsh_carrier_services wcs,wsh_org_carrier_services wocs
2597 WHERE wc.carrier_id=wcs.carrier_id AND
2598 wcs.carrier_service_id=wocs.carrier_service_id AND
2599 wcs.ship_method_code = p_ship_method_code AND
2600 wocs.organization_id = p_organization_id;
2601 ---BUG No:4241880.Cursor changed ends
2602
2603 /*
2604 CURSOR get_freight(p_ship_method_code VARCHAR2,p_organization_id NUMBER) IS -- Can this go ?!! pdo
2605 SELECT freight_code
2606 FROM wsh_carrier_ship_methods_v
2607 WHERE ship_method_code = p_ship_method_code AND
2608 organization_id = p_organization_id;
2609 */
2610
2611 CURSOR user_name(l_user_id NUMBER ) is
2612 SELECT user_name
2613 FROM fnd_user
2614 WHERE user_id = l_user_id;
2615
2616 CURSOR detail_info ( v_delivery_id in number ) IS
2617 SELECT da.parent_delivery_detail_id,
2618 dd.delivery_detail_id,
2619 dd.released_status ,
2620 dd.inspection_flag ,
2621 dd.shipped_quantity ,
2622 dd.shipped_quantity2 ,
2623 dd.cycle_count_quantity ,
2624 dd.cycle_count_quantity2 ,
2625 dd.requested_quantity ,
2626 dd.requested_quantity2 ,
2627 /* muom */
2628 dd.requested_quantity_uom2,
2629 NVL(dd.picked_quantity, dd.requested_quantity) pick_qty, -- overpicking
2630 NVL(dd.picked_quantity2, dd.requested_quantity2) pick_qty2,
2631 dd.organization_id ,
2632 dd.inventory_item_id ,
2633 dd.subinventory ,
2634 dd.locator_id,
2635 dd.source_code, /*Bug 2096052 for OKE */
2636 dd.source_line_id -- Consolidation of BO Delivery Details project
2637 FROM wsh_delivery_details dd,
2638 wsh_delivery_assignments_v da
2639 WHERE da.delivery_id = v_delivery_id AND
2640 da.delivery_id IS NOT NULL AND
2641 da.delivery_detail_id = dd.delivery_detail_id AND
2642 dd.container_flag = 'N';
2643
2644
2645 CURSOR Get_Trip(v_del_id NUMBER) IS
2646 SELECT wt.trip_id , wt.carrier_id, wt.ship_method_code, wt.mode_of_transport,
2647 --OTM R12
2648 wt.tp_plan_name
2649 --
2650 FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_trips wt
2651 WHERE wdl.pick_up_stop_id=wts.stop_id
2652 AND wdl.delivery_id=v_del_id
2653 AND wts.trip_id=wt.trip_id;
2654
2655 CURSOR Get_Containers (v_delivery_detail_id NUMBER) IS
2656 SELECT delivery_detail_id
2657 FROM wsh_delivery_assignments_v
2658 WHERE delivery_detail_id <> v_delivery_detail_id
2659 START WITH delivery_detail_id = v_delivery_detail_id
2660 CONNECT BY PRIOR parent_delivery_detail_id = delivery_detail_id;
2661
2662 CURSOR get_empty_containers(v_delivery_id NUMBER) IS
2663 SELECT da.delivery_detail_id
2664 FROM wsh_delivery_assignments_v da,
2665 WSH_DELIVERY_DETAILS dd
2666 WHERE da.delivery_id = v_delivery_id
2667 AND da.delivery_detail_id = dd.delivery_detail_id
2668 AND dd.container_flag = 'Y'
2669 AND NOT EXISTS(
2670 SELECT delivery_detail_id
2671 FROM wsh_delivery_assignments_v da2
2672 WHERE da2.parent_delivery_detail_id = da.delivery_detail_id) ;
2673
2674 -- Bug 2713285, added batch_id
2675 CURSOR get_delivery_name(v_delivery_id NUMBER) IS
2676 SELECT name,batch_id,
2677 --OTM R12
2678 ignore_for_planning,
2679 tms_interface_flag
2680 --
2681 FROM wsh_new_deliveries
2682 WHERE delivery_id = v_delivery_id;
2683
2684 -- J: W/V Changes
2685 CURSOR get_delivery_wv(v_delivery_id NUMBER) IS
2686 SELECT gross_weight,
2687 volume
2688 FROM wsh_new_deliveries
2689 WHERE delivery_id = v_delivery_id;
2690
2691
2692 CURSOR Get_Del_First_Trip(v_del_id NUMBER) IS
2693 SELECT wts.trip_id
2694 FROM wsh_delivery_legs wdl, wsh_trip_stops wts, wsh_new_deliveries wnd
2695 WHERE wdl.pick_up_stop_id=wts.stop_id
2696 AND wnd.initial_pickup_location_id = wts.stop_location_id
2697 AND wnd.delivery_id = wdl.delivery_id
2698 AND wnd.delivery_id=v_del_id;
2699
2700
2701 --bug 3314353 -- jckwok
2702 CURSOR prev_stop_csr ( p_trip_id IN NUMBER, p_stop_sequence IN NUMBER) IS
2703 SELECT stop_id
2704 FROM wsh_trip_stops
2705 WHERE trip_id = p_trip_id
2706 AND status_code IN ('OP','AR')
2707 AND stop_sequence_number < p_stop_sequence
2708 AND nvl(shipments_type_flag,'0') <> 'I' --bugfix 3925963
2709 ORDER BY stop_sequence_number;
2710
2711 --bug 3314353 -- jckwok
2712 CURSOR get_stops_csr (p_trip_id IN NUMBER) IS
2713 SELECT stop_id,shipments_type_flag,stop_location_id --bugfix 3925963
2714 FROM wsh_trip_stops
2715 WHERE trip_id = p_trip_id
2716 AND status_code IN ('OP','AR')
2717 ORDER BY stop_sequence_number;
2718
2719 --bugfix 3925963
2720 CURSOR get_trip_name_csr (p_first_trip_id NUMBER) IS
2721 Select wt.name
2722 from wsh_trips wt
2723 where wt.trip_id = p_first_trip_id;
2724
2725 --bug 3314353 -- jckwok
2726 CURSOR stop_sequence_number_csr (p_stop_id IN NUMBER) IS
2727 SELECT stop_sequence_number
2728 FROM wsh_trip_stops
2729 WHERE stop_id = p_stop_id;
2730
2731 -- Added for bug 4493263
2732 CURSOR c_delv_trip_id_cursor( t_delivery_id NUMBER ) IS
2733 select distinct trip_id from wsh_trip_stops
2734 where stop_id in
2735 ( select distinct pick_up_stop_id
2736 from wsh_delivery_legs
2737 where delivery_id = t_delivery_id );
2738
2739
2740 l_batch_id WSH_NEW_DELIVERIES.batch_id%TYPE;
2741
2742 l_source_code VARCHAR2(30); /*Bug 2096052 */
2743 l_source_code_flag VARCHAR2(1) := 'N'; /*Bug 2096052 */
2744 l_released_status VARCHAR2(1);
2745 l_inspection_flag VARCHAR2(1);
2746 l_container_id NUMBER;
2747 l_ship_method_code VARCHAR2(30);
2748 l_freight_code VARCHAR2(30);
2749 l_delivery_detail_id NUMBER;
2750 l_dummy_detail_id NUMBER;
2751 l_detail_num NUMBER;
2752 l_initial_pickup_date wsh_util_core.Date_tab_type;
2753 l_ultimate_dropoff_date wsh_util_core.Date_tab_type;
2754
2755 u_initial_pickup_date wsh_util_core.Date_tab_type; -- Bulk update variable
2756 u_ultimate_dropoff_date wsh_util_core.Date_tab_type;
2757
2758 l_organization_id NUMBER ;
2759 l_num_warn NUMBER :=0;
2760 l_num_error NUMBER :=0;
2761 l_dd_organization_id NUMBER ;
2762 l_inventory_item_id NUMBER ;
2763 l_subinventory VARCHAR2 (30);
2764 l_locator_id NUMBER ;
2765 /* muom */
2766 l_requested_quantity_uom2 VARCHAR2(4);
2767
2768 l_unassign_dds wsh_util_core.id_tab_type; -- Renamed the variable l_unassign_line_ids for BO Consolidation
2769 /* H integration: 945 cancel staged wrudge */
2770 l_cancel_line_ids wsh_util_core.id_tab_type;
2771
2772 l_assigned_counter NUMBER;
2773 l_assigned_line_ids wsh_util_core.id_tab_type;
2774 l_assigned_cont_ids wsh_util_core.id_tab_type;
2775 l_assigned_orgs wsh_util_core.id_tab_type;
2776 l_assigned_items wsh_util_core.id_tab_type;
2777 l_assigned_subs wsh_util_core.Column_Tab_Type;
2778 l_assigned_locs wsh_util_core.id_Tab_Type;
2779 -- muom
2780 l_assigned_req_qty_uoms2 wsh_util_core.Column_Tab_Type;
2781 l_assigned_src_codes wsh_util_core.Column_Tab_Type;
2782
2783 l_bo_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2784 l_cc_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2785 l_out_bo_rows wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to Backorder
2786 l_out_cc_rows wsh_util_core.id_tab_type; -- list of new details that got backordered
2787
2788 l_dd_org_ids wsh_util_core.id_tab_type; -- list of details org ids
2789 l_item_ids wsh_util_core.id_tab_type; -- list of details inventory_item_ids
2790
2791 -- for non-transactable items
2792 l_inv_controls_rec WSH_DELIVERY_DETAILS_INV.inv_control_flag_rec;
2793 dft_subinv VARCHAR2(30);
2794 loc_restricted_flag VARCHAR2(1);
2795 dft_loc_id NUMBER;
2796 org_loc_ctl NUMBER;
2797 sub_loc_ctl NUMBER;
2798 item_loc_ctl NUMBER;
2799 loc_ctl_code NUMBER;
2800
2801 g_line_inv_rec WSH_DELIVERY_DETAILS_INV.line_inv_info;
2802 l_details_flag BOOLEAN;
2803
2804 l_ship_from_location NUMBER;
2805 l_ship_to_location NUMBER;
2806
2807 l_dummy_rows wsh_util_core.id_tab_type;
2808 l_dummy_rows1 wsh_util_core.id_tab_type;
2809 l_dummy_doc_set wsh_document_sets.document_set_tab_type;
2810
2811 l_trip_id NUMBER;
2812 l_trip_name VARCHAR2(30);
2813 l_return_status VARCHAR2(1);
2814
2815 l_requested_quantity NUMBER;
2816 l_shipped_quantity NUMBER;
2817 l_cycle_quantity NUMBER;
2818 l_stage_quantity NUMBER;
2819 l_del_status_code VARCHAR2(2);
2820 l_status_code WSH_UTIL_CORE.Column_Tab_Type ;
2821 l_number_of_lpn wsh_util_core.id_tab_type;
2822 u_status_code WSH_UTIL_CORE.Column_Tab_Type ;
2823 u_number_of_lpn wsh_util_core.id_tab_type;
2824 /* H integration: 945 send document wrudge */
2825 u_organization_id wsh_util_core.id_tab_type;
2826 u_wsh_lines_exist wsh_util_core.id_tab_type;
2827 l_wsh_lines_exist NUMBER;
2828
2829 -- hverddin : Begin of OPM Changes Added Dual Quantities 31-OCT-00
2830
2831 l_requested_quantity2 NUMBER;
2832 l_shipped_quantity2 NUMBER;
2833 l_cycle_quantity2 NUMBER;
2834 l_stage_quantity2 NUMBER;
2835
2836 -- hverddin : End of OPM Changes Added Dual Quantities 31-OCT-00
2837 l_valid_flag BOOLEAN; -- Check if ship_set is valid
2838 l_overfilled_flag BOOLEAN;
2839 l_underfilled_flag BOOLEAN;
2840
2841 -- overpicking
2842 l_picked_quantity NUMBER;
2843 l_picked_quantity2 NUMBER;
2844 l_unshipped_pick_quantity NUMBER;
2845 l_unshipped_pick_quantity2 NUMBER;
2846
2847 l_shp_dd_shipped_qtys wsh_util_core.id_tab_type;
2848 l_shp_dd_shipped_qtys2 wsh_util_core.id_tab_type;
2849 l_shp_dd_cc_qtys wsh_util_core.id_tab_type;
2850 l_shp_dd_cc_qtys2 wsh_util_core.id_tab_type;
2851 l_shp_dd_req_qtys wsh_util_core.id_tab_type;
2852 l_shp_dd_ids wsh_util_core.id_tab_type; -- Bug 1672188 : list of details to to Ship
2853 l_shp_dd_items wsh_util_core.id_tab_type ; -- : list of items in details to Ship
2854 l_shp_dd_orgs wsh_util_core.id_tab_type; -- : list of org of details to Ship
2855 l_shp_dd_subs wsh_util_core.column_tab_type; -- : list of subinventories of details to Ship
2856 l_shp_dd_locs wsh_util_core.id_tab_type; -- : list of locators of details to Ship
2857 l_shp_dd_cont_ids wsh_util_core.id_tab_type; -- : list of containers of details to Ship
2858 /* H integration: 945 check detail wrudge */
2859 l_shp_dd_source wsh_util_core.column_tab_type; -- : list of source_code of details to ship
2860
2861 l_assigned_req_qtys wsh_util_core.id_tab_type; -- list of details req qty
2862 l_assigned_shp_qtys wsh_util_core.id_tab_type ;
2863 l_assigned_cc_qtys wsh_util_core.id_tab_type ;
2864 l_assigned_req_qtys2 wsh_util_core.id_tab_type; -- list of details req qty2
2865 l_assigned_shp_qtys2 wsh_util_core.id_tab_type ;
2866 l_assigned_cc_qtys2 wsh_util_core.id_tab_type ;
2867 l_assigned_pick_qtys wsh_util_core.id_tab_type; -- overpicking NVL(picked, requested)
2868 l_assigned_pick_qtys2 wsh_util_core.id_tab_type;
2869 l_assigned_overpick_qtys wsh_util_core.id_tab_type; -- for backordering or cycle-counting overpicked quantities
2870 l_assigned_overpick_qtys2 wsh_util_core.id_tab_type;
2871 /* H integration: 945 assigned detail wrudge */
2872 l_assigned_source wsh_util_core.column_tab_type;
2873
2874 l_stop_rows wsh_util_core.id_tab_type;
2875 u_stop_rows wsh_util_core.id_tab_type; -- bug 2064810
2876 l_del_rows wsh_util_core.id_tab_type;
2877 u_del_rows wsh_util_core.id_tab_type;
2878
2879 l_param_info WSH_SHIPPING_PARAMS_PVT.Parameter_Rec_Typ;
2880 l_enforce_packing_flag VARCHAR2(1) := 'N';
2881
2882 l_cc_qtys wsh_util_core.id_tab_type; -- list of details BO qty
2883 l_cc_req_qtys wsh_util_core.id_tab_type ;
2884 l_cc_overpick_qtys wsh_util_core.id_tab_type ;
2885 l_cc_qtys2 wsh_util_core.id_tab_type; -- list of details BO qty2
2886 l_cc_overpick_qtys2 wsh_util_core.id_tab_type ;
2887
2888 l_bo_qtys wsh_util_core.id_tab_type; -- list of details BO qty
2889 l_bo_mode VARCHAR2 (15) ;
2890 l_bo_req_qtys wsh_util_core.id_tab_type ;
2891 l_bo_overpick_qtys wsh_util_core.id_tab_type ;
2892 l_bo_qtys2 wsh_util_core.id_tab_type; -- list of details BO qty2
2893 l_bo_overpick_qtys2 wsh_util_core.id_tab_type ;
2894
2895 l_staged_dd_id NUMBER ;
2896 l_new_detail_id NUMBER ;
2897 l_stage_rows wsh_util_core.id_tab_type ;
2898
2899 l_backorder_all_flag BOOLEAN := TRUE ;
2900 l_stage_all_flag BOOLEAN ;
2901 l_inv_cntrl_flag BOOLEAN ;
2902 l_inv_material_flag BOOLEAN;
2903 l_del_tmp_rows wsh_util_core.id_tab_type;
2904 l_document_set_name VARCHAR2 ( 50 );
2905
2906 l_user_name VARCHAR2(100);
2907 l_user_id NUMBER ;
2908 l_login_id NUMBER;
2909 l_document_set_id NUMBER ;
2910 l_gross_wt NUMBER ;
2911 l_net_wt NUMBER ;
2912 l_vol NUMBER ;
2913
2914 l_unpacked_flag BOOLEAN ;
2915 --l_unassign_all_flag BOOLEAN ;
2916 l_cont_exists_flag BOOLEAN ;
2917 l_fill_status VARCHAR2(2) ;
2918
2919 -- this variable will store fill status Bug 2878538
2920 -- it will help saving the value from getting over ridden of l_fill_status
2921 -- since l_fill_status variable gets overridden in a loop
2922 l_save_fill_status VARCHAR2(2) := 'S';
2923 l_exception_exist VARCHAR2(1);
2924 l_severity_present VARCHAR2(1);
2925
2926 l_pickup_stop_id NUMBER ;
2927 l_dropoff_stop_id NUMBER ;
2928 l_delivery_leg_id NUMBER ;
2929 l_parent_delivery_id NUMBER ;
2930 l_delivery_id NUMBER ;
2931
2932 l_gross_weight NUMBER ;
2933 l_net_weight NUMBER ;
2934 l_volume NUMBER ;
2935 l_temp_line_id NUMBER ;
2936 l_temp_source_code VARCHAR2(5);
2937 l_max_quantity NUMBER ;
2938 -- HW OPM added qty2
2939 l_max_quantity2 NUMBER ;
2940 l_msg_data VARCHAR2(2000);
2941 l_msg_count NUMBER;
2942 l_wms_delivery_id wsh_util_core.id_tab_type ;
2943 --2121399
2944 TYPE Flag_Tab_Type IS TABLE OF BOOLEAN INDEX BY BINARY_INTEGER;
2945 l_unassign_all_flag_tab Flag_Tab_Type ;
2946 --2121399
2947
2948 l_label_status VARCHAR2(20);
2949 l_del_tab INV_LABEL_PUB.transaction_id_rec_type;
2950
2951 l_close_del_cnt NUMBER := 0;
2952 l_confirm_del_cnt NUMBER := 0;
2953
2954 /*new variable */
2955 l_stop_rec WSH_TRIP_STOPS_PVT.trip_stop_rec_type;
2956 l_trip_rec WSH_TRIPS_PVT.trip_rec_type;
2957 -- bug 2263249
2958 l_wms_enabled_flag BOOLEAN;
2959 -- bug 2343058
2960 l_check_credit_init_flag BOOLEAN;
2961
2962 x_unassigned_cont wsh_util_core.id_tab_type;
2963 l_msg_rec_count wsh_util_core.MsgCountType;
2964 l_error_exists BOOLEAN;
2965 l_msg_table WSH_INTEGRATION.MSG_TABLE ;
2966 l_count NUMBER := 0;
2967 l_cont_name VARCHAR2(100);
2968 l_empty_container NUMBER;
2969 l_delivery_name VARCHAR2(100);
2970
2971
2972 --Compatibility Changes
2973 l_cc_validate_result VARCHAR2(1);
2974 l_cc_failed_records WSH_FTE_COMP_CONSTRAINT_PKG.failed_line_tab_type;
2975 l_cc_group_info WSH_FTE_COMP_CONSTRAINT_PKG.cc_group_tab_type;
2976 l_cc_line_groups WSH_FTE_COMP_CONSTRAINT_PKG.line_group_tab_type;
2977
2978 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2979 l_trip_id_tab_temp wsh_util_core.id_tab_type;
2980 l_cc_count_success NUMBER;
2981 b_cc_linefailed BOOLEAN;
2982 l_target_trip_id NUMBER;
2983 b_tripalreadychecked VARCHAR2(1);
2984 l_count_hashtrip NUMBER;
2985
2986 --dummy tables for calling validate_constraint_wrapper
2987 l_cc_del_attr_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
2988 l_cc_det_attr_tab WSH_GLBL_VAR_STRCT_GRP.Delivery_Details_Attr_Tbl_Type;
2989 l_cc_trip_attr_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
2990 l_cc_stop_attr_tab WSH_TRIP_STOPS_PVT.Stop_Attr_Tbl_Type;
2991 l_cc_in_ids wsh_util_core.id_tab_type;
2992 l_cc_fail_ids wsh_util_core.id_tab_type;
2993 l_cc_carrier_id NUMBER;
2994 l_cc_mode VARCHAR2(30);
2995 G_HASH_TRIP wsh_util_core.id_tab_type;
2996 --Compatibility Changes
2997
2998 l_with_mc_trip_flag Flag_Tab_Type;
2999
3000 -- Variables added for Consolidation of BO Delivery Details project
3001 --
3002 l_global_parameters WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
3003 l_assigned_source_lines wsh_util_core.id_Tab_Type;
3004 l_unassign_backordered_dds wsh_util_core.id_Tab_Type; --Stores the list of BackOrder/Cycle-Count delivery detail ids
3005 l_unassign_rel_status wsh_util_core.Column_Tab_Type;
3006 -- Stores the corresponding Released_status of the delivery details in l_unassign_dds
3007 l_unassign_source_lines wsh_util_core.id_Tab_Type;
3008 -- Stores the Source line ids of the delivery details that are going to be unassigned from the Delivery
3009 l_bo_line_ids wsh_util_core.id_Tab_Type;
3010
3011 l_bo_source_lines wsh_util_core.id_Tab_Type;
3012 l_bo_sources wsh_util_core.column_Tab_Type; -- RTV BO Cons Changes
3013 l_cc_source_lines wsh_util_core.id_Tab_Type;
3014 l_cc_sources wsh_util_core.column_Tab_Type; -- RTV BO Cons Changes
3015 l_cons_flags wsh_util_core.Column_Tab_Type;
3016 l_source_line_id NUMBER;
3017 l_idx NUMBER;
3018 l_cmp_idx NUMBER;
3019 j NUMBER;
3020 k NUMBER;
3021 l_flag VARCHAR2(1);
3022 l_close_confirm_flag VARCHAR2(1):= NULL;
3023 --
3024
3025 -- Exception Changes
3026 l_exceptions_tab wsh_xc_util.XC_TAB_TYPE;
3027 l_exp_logged BOOLEAN := FALSE;
3028
3029 -- Pack J, table indexed by delivery_id to store whether ITM screening is required.
3030 l_itm_exc_flag wsh_util_core.column_Tab_Type;
3031 l_itm_stops_tab wsh_util_core.column_Tab_Type;
3032 l_lines_in_delivery NUMBER;
3033 l_itm_exc_severity VARCHAR2(30);
3034
3035 -- Checks if the itm exception is enabled and its severity.
3036 CURSOR c_exc_severity (c_exception_name VARCHAR2) IS
3037 SELECT UPPER(default_severity)
3038 FROM wsh_exception_definitions_vl
3039 WHERE exception_name = c_exception_name
3040 AND enabled = 'Y';
3041
3042 l_carrier_rec WSH_CARRIERS_GRP.Carrier_Service_InOut_Rec_Type;
3043 l_del_first_trip NUMBER;
3044
3045 --bug 3314353
3046 l_pick_up_stop_sequence_num NUMBER;
3047 l_first_trip_id NUMBER;
3048 l_prev_stop_id NUMBER;
3049
3050 -- bug 2283621
3051 l_more_dd_flag BOOLEAN;
3052 l_more_material_dd_flag BOOLEAN;
3053 l_inv_ctrl_dd_count NUMBER;
3054 l_inv_material_dd_count NUMBER;
3055 l_inv_ctrl_dd_ids VARCHAR2(100);
3056 l_inv_material_dd_ids VARCHAR2(100);
3057 -- HW OPMCONV. Removed OPM variables
3058
3059 -- Local Variables added for Bug 3118519
3060
3061 l_more_flag BOOLEAN := TRUE;
3062 l_detail_count NUMBER := 0;
3063 l_invalid_details VARCHAR2(100);
3064 l_token VARCHAR2(2000);
3065 l_sc_pickup_date DATE;
3066 l_sc_dropoff_date DATE;
3067
3068 l_entity_name VARCHAR2(1000);
3069 l_exc_beh_error VARCHAR2(1000);
3070 l_exc_beh_warn VARCHAR2(1000);
3071
3072 -- HW OPMCONV. Added a new variable
3073 l_error_DFF BOOLEAN :=FALSE;
3074
3075
3076 --Bugfix 3925963
3077 l_shipments_type_flag VARCHAR2(30);
3078 l_stop_location_id NUMBER;
3079 l_stops_trip_name VARCHAR2(30);
3080 l_inbound_stops_exists BOOLEAN;
3081 l_stop_name VARCHAR2(60);
3082 l_stop_name_list VARCHAR2(10000);
3083 --
3084
3085 --/== Workflow Changes
3086 l_scpod_wf_del_rows wsh_util_core.id_tab_type;
3087 l_ctr NUMBER;
3088 l_aname_text wf_engine.nametabtyp;
3089 l_avalue_text wf_engine.texttabtyp;
3090 l_aname_num wf_engine.nametabtyp;
3091 l_avalue_num wf_engine.numtabtyp;
3092 l_process_started VARCHAR2(1);
3093 l_enable_sc_wf VARCHAR2(1);
3094 l_override_wf VARCHAR2(1);
3095 l_wf_rs VARCHAR2(1);
3096 l_defer_interface_flag VARCHAR2(1);
3097 --==/
3098 l_custom_severity varchar2(10);
3099 l_activity_code varchar2(200) := 'SHIP_CONFIRM_MESSAGE' ;
3100 l_validation_code varchar2(200) := 'MISSING_CONTROLS';
3101
3102 l_mdc_cl_del_tab wsh_util_core.id_tab_type;
3103 l_mdc_co_del_tab wsh_util_core.id_tab_type;
3104 l_mdc_index_i NUMBER;
3105
3106 -- LPN CONV rv
3107 cursor l_delete_wms_empty_cnt_csr is
3108 select distinct wwst.delivery_detail_id
3109 from wsh_wms_sync_tmp wwst,
3110 wsh_delivery_details wdd
3111 where wwst.operation_type = 'DELETE'
3112 and wdd.delivery_detail_id = wwst.delivery_detail_id
3113 and wdd.container_flag = 'Y'
3114 and wdd.lpn_id is not null;
3115
3116 l_delete_cnt_id_tbl wsh_util_core.id_tab_type;
3117 -- LPN CONV rv
3118 -- bug 4505105
3119 l_del_valid_flag VARCHAR2(1);
3120 -- bug 4505105
3121 --Bug 5255366
3122 l_consol_del_doc_set wsh_util_core.id_tab_type;
3123 l_content_del_flag BOOLEAN := TRUE;
3124
3125 --OTM R12
3126 l_ignore_for_planning WSH_NEW_DELIVERIES.IGNORE_FOR_PLANNING%TYPE;
3127 l_tms_interface_flag WSH_NEW_DELIVERIES.TMS_INTERFACE_FLAG%TYPE;
3128 l_otm_trip_id WSH_TRIPS.TRIP_ID%TYPE;
3129 l_otm_carrier_id WSH_NEW_DELIVERIES.CARRIER_ID%TYPE;
3130 l_otm_ship_method_code WSH_NEW_DELIVERIES.SHIP_METHOD_CODE%TYPE;
3131 l_otm_mode WSH_NEW_DELIVERIES.MODE_OF_TRANSPORT%TYPE;
3132 l_otm_plan_name WSH_TRIPS.TP_PLAN_NAME%TYPE;
3133 l_gc3_is_installed VARCHAR2(1);
3134 --
3135 -- Bug 8555654 : begin
3136 l_period_id NUMBER;
3137 l_open_past_period BOOLEAN;
3138 l_opn_prd_chk_orgs wsh_util_core.id_tab_type;
3139 -- Bug 8555654 : end
3140
3141 -- muom
3142 l_fulfill_base VARCHAR2(1);
3143
3144 l_debug_on BOOLEAN;
3145 --
3146 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CONFIRM_DELIVERY';
3147 --
3148 BEGIN
3149
3150 -- 0. Get the user_id and user_name
3151 --
3152 -- Debug Statements
3153 --
3154 --
3155 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3156 --
3157 IF l_debug_on IS NULL
3158 THEN
3159 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3160 END IF;
3161 --
3162 IF l_debug_on THEN
3163 WSH_DEBUG_SV.push(l_module_name);
3164 --
3165 WSH_DEBUG_SV.log(l_module_name,'P_ACTION_FLAG',P_ACTION_FLAG);
3166 WSH_DEBUG_SV.log(l_module_name,'P_INTRANSIT_FLAG',P_INTRANSIT_FLAG);
3167 WSH_DEBUG_SV.log(l_module_name,'P_CLOSE_FLAG',P_CLOSE_FLAG);
3168 WSH_DEBUG_SV.log(l_module_name,'P_STAGE_DEL_FLAG',P_STAGE_DEL_FLAG);
3169 WSH_DEBUG_SV.log(l_module_name,'P_REPORT_SET_ID',P_REPORT_SET_ID);
3170 WSH_DEBUG_SV.log(l_module_name,'P_SHIP_METHOD',P_SHIP_METHOD);
3171 WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DEP_DATE',P_ACTUAL_DEP_DATE);
3172 WSH_DEBUG_SV.log(l_module_name,'P_BOL_FLAG',P_BOL_FLAG);
3173 WSH_DEBUG_SV.log(l_module_name,'P_MC_BOL_FLAG',P_MC_BOL_FLAG);
3174 WSH_DEBUG_SV.log(l_module_name,'P_DEFER_INTERFACE_FLAG',P_DEFER_INTERFACE_FLAG);
3175 WSH_DEBUG_SV.log(l_module_name,'P_SEND_945_FLAG',P_SEND_945_FLAG);
3176 END IF;
3177 --
3178 l_login_id := FND_GLOBAL.login_id;
3179 l_user_id := FND_GLOBAL.user_id ;
3180 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
3181
3182 --OTM R12
3183 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
3184
3185 IF l_gc3_is_installed IS NULL THEN
3186 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
3187 END IF;
3188 --
3189
3190 -- bug 2778035
3191 IF p_action_flag IS NULL
3192 OR p_action_flag NOT IN ('S', 'B', 'L', 'T', 'A', 'C', 'O') THEN
3193 FND_MESSAGE.SET_NAME('WSH', 'WSH_INVALID_SC_ACTION_FLAG');
3194 wsh_util_core.add_message(wsh_util_core.g_ret_sts_error);
3195 RAISE FND_API.G_EXC_ERROR;
3196 END IF;
3197 -- bug 2778035
3198
3199 -- Fix for Bug 3944151
3200 -- Using fnd_global.User_name for global G_USER_NAME
3201 -- This is because before this fix, global g_user_name carried the previous user name
3202 -- when one user logged out and another user logged back in the same mobile telnet session.
3203
3204 G_USER_NAME := FND_GLOBAL.USER_NAME;
3205
3206 /* if ( G_USER_NAME is NULL ) then
3207 open user_name(l_user_id);
3208 fetch user_name into G_USER_NAME ;
3209 if user_name%NOTFOUND then
3210 raise ship_confirm_error;
3211 end if;
3212 close user_name;
3213 end if ;
3214 */
3215 -- End of fix for bug 3944151
3216
3217 /* Bug 2761304 : The following call is now made inside the loop*/
3218
3219 /* WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3220 x_msg_rec_count => l_msg_rec_count,
3221 x_return_status => l_return_status);
3222 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3223 raise ship_confirm_error;
3224 END IF;*/
3225
3226 l_user_name := G_USER_NAME ;
3227 SAVEPOINT start_ship_confirm_delivery ;
3228
3229 l_document_set_id := p_report_set_id;
3230
3231 l_enable_sc_wf := 'N'; --Workflow Changes
3232
3233 -- bug 2343058
3234 l_check_credit_init_flag := TRUE;
3235
3236 -- Code Shifted from below to execute irrespective of the If condition - Workflow Changes
3237 IF l_debug_on THEN
3238 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit 2WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters',WSH_DEBUG_SV.C_PROC_LEVEL);
3239 END IF;
3240 --
3241 WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters(l_global_parameters, l_return_status);
3242 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
3243 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3244 raise ship_confirm_error;
3245 -- x_return_status := l_return_status;
3246 -- wsh_util_core.add_message(x_return_status);
3247 -- l_num_error := l_num_error + 1 ;
3248 -- goto loop_end;
3249 END IF;
3250
3251
3252 FOR i IN 1..p_del_rows.count LOOP
3253
3254 SAVEPOINT confirm_delivery_sp ;
3255
3256 /* Bug 2761304*/
3257 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => TRUE,
3258 x_msg_rec_count => l_msg_rec_count,
3259 x_return_status => l_return_status);
3260
3261 -- Bug 3913206
3262 l_sc_pickup_date := NULL;
3263 l_sc_dropoff_date := NULL;
3264
3265 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3266 raise ship_confirm_error;
3267 END IF;
3268
3269 -- Bug 2713285, movedthe code outside the loop,since it is for same delivery
3270 -- added batch_id
3271 OPEN get_delivery_name(p_del_rows(i));
3272 FETCH get_delivery_name INTO l_delivery_name,
3273 l_batch_id,
3274 --OTM R12
3275 l_ignore_for_planning,
3276 l_tms_interface_flag;
3277 --
3278 CLOSE get_delivery_name;
3279
3280 IF l_debug_on THEN
3281 WSH_DEBUG_SV.log(l_module_name,'Delivery Name',l_delivery_name);
3282 WSH_DEBUG_SV.log(l_module_name,'Batch id',l_batch_id);
3283 --OTM R12
3284 WSH_DEBUG_SV.log(l_module_name,'ignore for planning',l_ignore_for_planning);
3285 WSH_DEBUG_SV.log(l_module_name,'tms interface flag',l_tms_interface_flag);
3286 --
3287 END IF;
3288
3289
3290 OPEN get_empty_containers(p_del_rows(i));
3291 LOOP
3292 FETCH get_empty_containers INTO l_empty_container;
3293 EXIT WHEN get_empty_containers%NOTFOUND;
3294 l_cont_name := WSH_CONTAINER_UTILITIES.Get_Cont_Name(l_empty_container);
3295
3296 IF l_debug_on THEN
3297 WSH_DEBUG_SV.log(l_module_name,'l_empty_container',l_empty_container);
3298 WSH_DEBUG_SV.log(l_module_name,'Empty Container',l_cont_name);
3299 END IF;
3300
3301 FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_CONTAINER');
3302 FND_MESSAGE.SET_TOKEN('CONT_NAME',l_cont_name);
3303 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3304 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3305 l_num_warn := l_num_warn + 1;
3306 wsh_util_core.add_message(x_return_status,l_module_name);
3307 END LOOP;
3308 CLOSE get_empty_containers;
3309
3310 l_bo_rows.delete ;
3311 l_cc_rows.delete ;
3312 l_unassign_dds.delete ;
3313 -- Consolidation of BO Delivery Details project
3314 --
3315 l_bo_source_lines.delete;
3316 l_bo_sources.delete; -- RTV BO Cons Changes
3317 l_cc_source_lines.delete;
3318 l_cc_sources.delete; -- RTV BO Cons Changes
3319 l_assigned_source_lines.delete;
3320 l_unassign_rel_status.delete;
3321 l_unassign_source_lines.delete;
3322 l_bo_line_ids.delete;
3323
3324 --
3325 /* H integration: 945 cancel staged wrudge */
3326 l_cancel_line_ids.delete;
3327 l_assigned_counter := 0 ;
3328 l_assigned_line_ids.delete;
3329 l_assigned_cont_ids.delete;
3330 l_assigned_orgs.delete;
3331 l_assigned_items.delete;
3332 l_assigned_subs.delete;
3333 l_assigned_locs.delete;
3334 -- muom
3335 l_assigned_req_qty_uoms2.delete;
3336 l_assigned_src_codes.delete;
3337 l_out_bo_rows.delete;
3338 l_out_cc_rows.delete;
3339 l_dd_org_ids.delete;
3340 l_item_ids.delete;
3341
3342 /* H integration: 945 send document wrudge */
3343 l_wsh_lines_exist := 0;
3344
3345 l_shp_dd_shipped_qtys.delete ;
3346 l_shp_dd_shipped_qtys2.delete ;
3347 l_shp_dd_cc_qtys.delete ;
3348 l_shp_dd_cc_qtys2.delete ;
3349 l_shp_dd_req_qtys.delete ;
3350 l_shp_dd_ids.delete ;
3351 l_shp_dd_items.delete ;
3352 l_shp_dd_orgs.delete ;
3353 l_shp_dd_subs.delete ;
3354 l_shp_dd_locs.delete ;
3355 l_shp_dd_cont_ids.delete ;
3356 /* H integration: 945 check detail wrudge */
3357 l_shp_dd_source.delete;
3358
3359 l_assigned_req_qtys.delete ;
3360 l_assigned_shp_qtys.delete ;
3361 l_assigned_cc_qtys.delete ;
3362
3363 l_assigned_req_qtys2.delete ;
3364 l_assigned_shp_qtys2.delete ;
3365 l_assigned_cc_qtys2.delete ;
3366
3367 l_assigned_pick_qtys.delete;
3368 l_assigned_pick_qtys2.delete;
3369 l_assigned_overpick_qtys.delete;
3370 l_assigned_overpick_qtys2.delete;
3371
3372 /* H integration: 945 assigned details wrudge */
3373 l_assigned_source.delete;
3374
3375 l_stop_rows.delete ;
3376 l_del_rows.delete ;
3377
3378 l_enforce_packing_flag := 'N';
3379
3380 l_bo_mode := 'UNRESERVE';
3381
3382 l_cc_req_qtys.delete ;
3383 l_cc_overpick_qtys.delete ;
3384 l_cc_qtys.delete ;
3385 l_cc_qtys2.delete ;
3386
3387 l_bo_qtys.delete ;
3388 l_bo_req_qtys.delete ;
3389 l_bo_overpick_qtys.delete ;
3390 l_bo_qtys2.delete ;
3391
3392 L_stage_ROWS.delete ;
3393
3394 l_organization_id := NULL ;
3395 l_ship_method_code := NULL ;
3396 l_ship_from_location := NULL ;
3397 l_ship_to_location := NULL ;
3398 l_gross_weight := NULL ;
3399 l_net_weight := NULL ;
3400 l_volume := NULL ;
3401
3402 l_del_status_code := NULL ;
3403
3404 l_number_of_lpn(i) := NULL;
3405 -- bug 2263249
3406 l_wms_enabled_flag := FALSE;
3407 l_unassign_all_flag_tab(i) := TRUE ;
3408 l_inv_cntrl_flag := TRUE;
3409 l_inv_material_flag := TRUE;
3410 l_unpacked_flag := FALSE;
3411 -- Set to False by default,Bug 2878538
3412 l_cont_exists_flag := FALSE;
3413
3414 -- bug 2283621
3415 l_more_dd_flag := TRUE;
3416 l_more_material_dd_flag := TRUE;
3417 l_inv_ctrl_dd_ids := NULL;
3418 l_inv_material_dd_ids := NULL;
3419 l_inv_ctrl_dd_count := 0;
3420 l_inv_material_dd_count :=0 ;
3421 -- end 2283621
3422
3423 l_with_mc_trip_flag(i) := FALSE;
3424
3425 --OTM R12, check OTM exceptions before ship confirm
3426 IF (l_gc3_is_installed = 'Y' AND NVL(l_ignore_for_planning, 'N') = 'N') THEN
3427
3428 l_otm_trip_id := NULL;
3429 l_otm_carrier_id := NULL;
3430 l_otm_ship_method_code := NULL;
3431 l_otm_mode := NULL;
3432 l_otm_plan_name := NULL;
3433
3434 OPEN get_trip(p_del_rows(i));
3435 FETCH get_trip INTO l_otm_trip_id,
3436 l_otm_carrier_id,
3437 l_otm_ship_method_code,
3438 l_otm_mode,
3439 l_otm_plan_name;
3440
3441 IF (get_trip%NOTFOUND) THEN
3442 --if cursor not found, then leave the ship method as
3443 --p_ship_method so does not error out later
3444 l_otm_ship_method_code := p_ship_method;
3445 END IF;
3446
3447 CLOSE get_trip;
3448
3449 IF l_debug_on THEN
3450 WSH_DEBUG_SV.log(l_module_name,'trip id',l_otm_trip_id);
3451 WSH_DEBUG_SV.log(l_module_name,'carrier id',l_otm_carrier_id);
3452 WSH_DEBUG_SV.log(l_module_name,'ship method',l_otm_ship_method_code);
3453 WSH_DEBUG_SV.log(l_module_name,'mode',l_otm_mode);
3454 WSH_DEBUG_SV.log(l_module_name,'otm plan name',l_otm_plan_name);
3455 END IF;
3456
3457 IF (p_ship_method IS NULL) THEN
3458 --if p_ship_method is NULL, means no changes to the ship method,
3459 --set l_otm_ship_method_code to NULL as well to avoid error later.
3460 l_otm_ship_method_code := p_ship_method;
3461 END IF;
3462
3463 -- trip id is NULL, not assigned. Hence ignore the delivery for planning.
3464 -- (CR->NS and AW->DR for 'Not assigned' to an OTM trip Delivery).
3465 -- This update for the ignore_for_plan to 'Y' is needed to autocreate the trip
3466 -- for this delivery during ship conform.
3467 --
3468
3469 IF l_debug_on THEN
3470 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
3471 END IF;
3472
3473 WSH_INTERFACE_EXT_GRP.otm_pre_ship_confirm(
3474 p_delivery_id => p_del_rows(i),
3475 p_delivery_name => l_delivery_name,
3476 p_tms_interface_flag => l_tms_interface_flag,
3477 p_trip_id => l_otm_trip_id,
3478 x_return_status => l_return_status);
3479
3480 IF l_debug_on THEN
3481 WSH_DEBUG_SV.log(l_module_name,'Return Status after calling WSH_INTERFACE_EXT_GRP.OTM_PRE_SHIP_CONFIRM', l_return_status);
3482 END IF;
3483
3484 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
3485 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3486 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3487
3488 WSH_UTIL_CORE.add_message(l_return_status, l_module_name);
3489
3490 l_num_error := l_num_error + 1 ;
3491 GOTO loop_end;
3492
3493 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3494 l_num_warn := l_num_warn + 1 ;
3495 END IF;
3496
3497 --we are checking that otm_plan_name is NOT NULL meaning
3498 --OTM planned trip, and ship method code is being changed
3499 --during ship confirm flow, which is not allowed.
3500 --IF any ship method is NULL this will be skipped
3501 --the trip ship method l_otm_ship_method_code should not be
3502 --NULL for OTM trips.
3503 IF (l_otm_plan_name IS NOT NULL
3504 AND l_otm_ship_method_code <> p_ship_method ) THEN
3505
3506 --
3507 -- Ship method on a delivery cannot be changed for an OTM trip
3508 --
3509 IF l_debug_on THEN
3510 WSH_DEBUG_SV.log(l_module_name,'ship method on trip', l_otm_ship_method_code);
3511 WSH_DEBUG_SV.log(l_module_name,'ship method passed in ship confirm', p_ship_method);
3512 WSH_DEBUG_SV.logmsg(l_module_name,'ship method not allowed to change for otm trip');
3513 END IF;
3514
3515 FND_MESSAGE.SET_NAME('WSH', 'WSH_OTM_SHIP_CONFIRM_ERROR');
3516 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', l_delivery_name);
3517
3518 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR, l_module_name);
3519 l_num_error := l_num_error + 1;
3520 GOTO loop_end;
3521 END IF;
3522 END IF;
3523 --END OTM R12
3524
3525 -- 1. Fetch delivery info and lock it
3526
3527 l_delivery_id := p_del_rows(i) ;
3528
3529 SELECT status_code ,
3530 initial_pickup_date ,
3531 ultimate_dropoff_date ,
3532 organization_id ,
3533 ship_method_code ,
3534 initial_pickup_location_id,
3535 ultimate_dropoff_location_id ,
3536 gross_weight ,
3537 net_weight ,
3538 volume
3539 INTO l_del_status_code,
3540 l_initial_pickup_date(i),
3541 l_ultimate_dropoff_date(i),
3542 l_organization_id ,
3543 l_ship_method_code ,
3544 l_ship_from_location,
3545 l_ship_to_location ,
3546 l_gross_weight ,
3547 l_net_weight ,
3548 l_volume
3549 FROM wsh_new_deliveries
3550 WHERE delivery_id = p_del_rows(i)
3551 AND nvl(shipment_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
3552 FOR UPDATE NOWAIT;
3553
3554 -- 2. Five checks performed here :
3555 -- a. If delivery is confirmed , skip it and go to next.
3556 IF (l_del_status_code = 'CO') THEN
3557 -- Although the name of this message looks like its an error , we are not
3558 -- really erroring out here.
3559 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
3560 --
3561 -- Debug Statements
3562 --
3563 IF l_debug_on THEN
3564 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3565 END IF;
3566 --
3567 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3568 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
3569 goto loop_end ;
3570 END IF;
3571
3572 --b. If delivery is neither OPEN nor PACKED , then set WARNING and go to next one
3573
3574 IF NOT ( (l_del_status_code IN ('OP', 'PA', 'SA'))) THEN -- sperera 940/945
3575 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_MULTI_ERROR');
3576 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3577 l_num_warn := l_num_warn + 1;
3578 wsh_util_core.add_message(x_return_status);
3579 goto loop_end ;
3580 END IF;
3581
3582 -- c. If ship Method is null , freight_code is null
3583 -- If not null , then its should have a an associated freight code.
3584
3585 IF l_ship_method_code IS NULL THEN
3586 l_freight_code:=null;
3587 ELSE
3588 OPEN get_freight(l_ship_method_code,l_organization_id );
3589 FETCH get_freight INTO l_freight_code;
3590
3591 IF (get_freight%NOTFOUND) THEN
3592 CLOSE get_freight;
3593 fnd_message.set_name('WSH','WSH_INVALID_FREIGHT_CODE');
3594 --
3595 -- Debug Statements
3596 --
3597 IF l_debug_on THEN
3598 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3599 END IF;
3600 --
3601 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3602 FND_MESSAGE.SET_TOKEN('SHIP_METHOD',l_ship_method_code);
3603 FND_MESSAGE.SET_TOKEN('ORG_ID',l_organization_id);
3604 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING);
3605 x_return_Status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
3606 l_num_warn := l_num_warn + 1 ;
3607 ELSE
3608 CLOSE get_freight;
3609 END IF;
3610 END IF;
3611
3612 -- d. If Initial pickup date or ultimate dropoff date is null , then
3613 -- Set a warning , and default to sysdate .
3614
3615 IF (l_initial_pickup_date(i) IS NULL)
3616 OR (l_ultimate_dropoff_date(i) IS NULL) THEN
3617
3618 IF p_action_flag NOT IN ('C','O') THEN --{
3619 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DATES_NULL');
3620 --
3621 -- Debug Statements
3622 --
3623 IF l_debug_on THEN
3624 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3625 END IF;
3626 --
3627 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3628 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3629 wsh_util_core.add_message(x_return_status);
3630
3631 l_num_warn := l_num_warn + 1;
3632 END IF; --}
3633
3634 l_initial_pickup_date(i) := nvl(p_actual_dep_date, SYSDATE) ;
3635 l_ultimate_dropoff_date(i) := GREATEST(nvl(l_ultimate_dropoff_date(i),nvl(p_actual_dep_date,SYSDATE)), nvl(p_actual_dep_date,SYSDATE));
3636 -- Bug 3913206
3637 l_sc_pickup_date := l_initial_pickup_date(i);
3638 l_sc_dropoff_date := l_ultimate_dropoff_date(i);
3639 END IF;
3640
3641 -- e. Validate Descriptive Flex-fields. If not valid , then warn and go to next one.
3642
3643 --
3644 -- Debug Statements
3645 --
3646 IF l_debug_on THEN
3647 WSH_DEBUG_SV.log(l_module_name,'l_sc_pickup_date',l_sc_pickup_date);
3648 WSH_DEBUG_SV.log(l_module_name,'l_sc_dropoff_date',l_sc_dropoff_date);
3649 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FLEXFIELD_UTILS.VALIDATE_DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3650 END IF;
3651 --
3652 wsh_flexfield_utils.Validate_DFF
3653 (p_table_name => 'WSH_NEW_DELIVERIES',
3654 p_primary_id => p_del_rows(i),
3655 x_return_status => x_return_status);
3656
3657 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3658 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3659 --
3660 -- Debug Statements
3661 --
3662 IF l_debug_on THEN
3663 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3664 END IF;
3665 --
3666 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3667 wsh_util_core.add_message(x_return_status);
3668 if ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) then
3669 l_num_error := l_num_error + 1 ;
3670 goto loop_end ;
3671 else
3672 l_num_warn := l_num_warn + 1 ;
3673 end if ;
3674 END IF;
3675
3676 -- bug 4505105
3677 l_del_valid_flag := 'Y';
3678 validate_del_containers(p_del_rows(i),
3679 'STD',
3680 l_del_valid_flag,
3681 x_return_status);
3682
3683 IF l_debug_on THEN
3684 WSH_DEBUG_SV.log(l_module_name,'x_return_status after calling validate_del_containers', x_return_status);
3685 END IF;
3686
3687 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
3688 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
3689 --
3690 -- Debug Statements
3691 --
3692 IF l_debug_on THEN
3693 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
3694 END IF;
3695 --
3696 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3697 wsh_util_core.add_message(x_return_status);
3698 END IF;
3699 --
3700 IF (nvl(l_del_valid_flag,'Y') = 'N') THEN
3701 l_num_error := l_num_error + 1 ;
3702 goto loop_end ;
3703 END IF;
3704
3705 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
3706 l_num_error := l_num_error + 1 ;
3707 goto loop_end ;
3708 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3709 l_num_error := l_num_error + 1 ;
3710 goto loop_end ;
3711 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
3712 l_num_warn := l_num_warn + 1 ;
3713 END IF;
3714 -- bug 4505105
3715
3716 --bug 1941793
3717 --
3718 -- Debug Statements
3719 --
3720 IF l_debug_on THEN
3721 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
3722 END IF;
3723 --
3724 if (wsh_util_validate.Check_Wms_Org(l_organization_id)='Y') then
3725
3726
3727 -- bug 2263249
3728 l_wms_enabled_flag := TRUE;
3729
3730 l_wms_delivery_id(1):=p_del_rows(i);
3731
3732 --
3733 -- Debug Statements
3734 --
3735 IF l_debug_on THEN
3736 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);
3737 END IF;
3738 --
3739 WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID(
3740 x_return_status => l_return_status,
3741 x_msg_count => l_msg_count,
3742 x_msg_data => l_msg_data,
3743 p_commit => 'F',
3744 p_init_msg_list => 'F',
3745 p_api_version => 1.0, -- Bugfix 3561335
3746 p_delivery_ids => l_wms_delivery_id);
3747 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
3748 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
3749 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_PUB.DEL_WSTT_RECS_BY_DELIVERY_ID');
3750 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
3751 x_return_status := l_return_status;
3752 wsh_util_core.add_message(x_return_status);
3753 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
3754 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3755 l_num_error := l_num_error + 1 ;
3756 goto confirm_error_no_msg;
3757 ELSE
3758 l_num_warn := l_num_warn + 1 ;
3759 END IF;
3760 END IF;
3761 end if;
3762 --
3763
3764 -- Check for Exceptions against Delivery and Contents of Delivery
3765 IF l_debug_on THEN
3766 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Check_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
3767 END IF;
3768 l_exceptions_tab.delete;
3769 l_exp_logged := FALSE;
3770 WSH_XC_UTIL.Check_Exceptions (
3771 p_api_version => 1.0,
3772 x_return_status => l_return_status,
3773 x_msg_count => l_msg_count,
3774 x_msg_data => l_msg_data,
3775 p_logging_entity_id => p_del_rows(i) ,
3776 p_logging_entity_name => 'DELIVERY',
3777 p_consider_content => 'Y',
3778 x_exceptions_tab => l_exceptions_tab
3779 );
3780
3781 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
3782 x_return_status := l_return_status;
3783 wsh_util_core.add_message(x_return_status);
3784 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
3785 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
3786 l_num_error := l_num_error + 1 ;
3787 goto confirm_error_no_msg;
3788 ELSE
3789 l_num_warn := l_num_warn + 1 ;
3790 END IF;
3791 END IF;
3792
3793 l_entity_name:=FND_MESSAGE.GET_STRING('WSH','WSH_DELIVERY');
3794 l_exc_beh_error:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_ERROR');
3795 l_exc_beh_warn:=FND_MESSAGE.GET_STRING('WSH','WSH_MESSAGE_TYPE_WARNING');
3796
3797 FOR exp_cnt in 1..l_exceptions_tab.COUNT LOOP
3798 IF l_exceptions_tab(exp_cnt).exception_behavior = 'ERROR' THEN
3799 IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3800 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3801 ELSE
3802 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3803 END IF;
3804 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3805 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3806 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_error);
3807 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3808 wsh_util_core.add_message(x_return_status);
3809 l_num_error := l_num_error + 1 ;
3810 goto confirm_error_no_msg;
3811 ELSIF l_exceptions_tab(exp_cnt).exception_behavior = 'WARNING' THEN
3812 IF l_exceptions_tab(exp_cnt).entity_name = 'DELIVERY' THEN
3813 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_ENTITY');
3814 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3815 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3816 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3817 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3818 wsh_util_core.add_message(x_return_status);
3819 l_num_warn := l_num_warn + 1 ;
3820 ELSIF NOT (l_exp_logged) THEN
3821 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_CONTENTS');
3822 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',l_entity_name);
3823 FND_MESSAGE.SET_TOKEN('ENTITY_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
3824 FND_MESSAGE.SET_TOKEN('EXCEPTION_BEHAVIOR',l_exc_beh_warn);
3825 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3826 l_exp_logged := TRUE;
3827 wsh_util_core.add_message(x_return_status);
3828 l_num_warn := l_num_warn + 1 ;
3829 END IF;
3830 END IF;
3831 END LOOP;
3832
3833
3834 -- 3. Fetch delivery lines for the delivery
3835
3836 l_assigned_counter := 0 ;
3837 l_lines_in_delivery := 0;
3838
3839 OPEN detail_info ( p_del_rows(i) );
3840 LOOP
3841
3842 l_detail_num := l_detail_num + 1;
3843 /*Bug 2096052 for OKE */
3844 l_source_code := NULL;
3845 /*end of 2096052 */
3846
3847 l_container_id := NULL ;
3848 l_delivery_detail_id := NULL ;
3849 l_released_status := NULL ;
3850
3851 l_inspection_flag := NULL ;
3852 l_shipped_quantity := NULL ;
3853 l_shipped_quantity2 := NULL ;
3854
3855 l_cycle_quantity := NULL ;
3856 l_cycle_quantity2 := NULL ;
3857 l_requested_quantity := NULL ;
3858
3859 l_requested_quantity2 := NULL ;
3860 l_dd_organization_id := NULL ;
3861 l_inventory_item_id := NULL ;
3862
3863 l_picked_quantity := NULL;
3864 l_picked_quantity2 := NULL;
3865
3866 l_subinventory := NULL ;
3867 l_locator_id := NULL ;
3868
3869 FETCH detail_info INTO l_container_id, l_delivery_detail_id, l_released_status ,
3870 l_inspection_flag , l_shipped_quantity , l_shipped_quantity2 ,
3871 l_cycle_quantity , l_cycle_quantity2 , l_requested_quantity ,
3872 l_requested_quantity2 , l_requested_quantity_uom2, -- muom
3873 l_picked_quantity, l_picked_quantity2,
3874 l_dd_organization_id ,l_inventory_item_id ,
3875 l_subinventory , l_locator_id, l_source_code, l_source_line_id;
3876 /*Bug 2096052 added l_source_code for OKE */
3877 -- Added l_source_line_id for the Consolidation of BO Delivery Details project
3878
3879 IF detail_info%NOTFOUND AND l_lines_in_delivery = 0 THEN
3880 CLOSE detail_info;
3881 FND_MESSAGE.SET_NAME('WSH','WSH_EMPTY_DELIVERY');
3882 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
3883 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3884 wsh_util_core.add_message(x_return_status);
3885 goto confirm_error_no_msg;
3886 END IF;
3887
3888 EXIT WHEN detail_info%NOTFOUND;
3889 l_lines_in_delivery := l_lines_in_delivery + 1;
3890
3891 -- This is a workaround to lock each individual line
3892 -- as locking in SELECT FOR UPDATE will not work
3893 -- on labels 8.1.6.3 and above because of the above mentioned reason
3894 -- This might have a performance hit
3895
3896 /* remove after UT since the Check_Exceptions will supersede this
3897
3898 -- check if exception exists for the delivery detail
3899 --
3900 -- Debug Statements
3901 --
3902 IF l_debug_on THEN
3903 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.CHECK_EXCEPTION',WSH_DEBUG_SV.C_PROC_LEVEL);
3904 END IF;
3905 --
3906 WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3907 p_delivery_detail_id => l_delivery_detail_id,
3908 x_exception_exist => l_exception_exist,
3909 x_severity_present => l_severity_present,
3910 x_return_status => l_return_status);
3911
3912 -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3913 -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3914 IF (l_exception_exist = 'Y') THEN
3915 --
3916 -- Debug Statements
3917 --
3918 IF l_debug_on THEN
3919 WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR DELIVERY DETAIL ' || L_DELIVERY_DETAIL_ID|| ' , DURING SHIP CONFIRM' );
3920 END IF;
3921 --
3922 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3923 FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_delivery_detail_id));
3924 IF l_severity_present IN ('H','M') THEN
3925 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3926 wsh_util_core.add_message(x_return_status);
3927 goto confirm_error;
3928 ELSIF l_severity_present = 'L' THEN
3929 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3930 wsh_util_core.add_message(x_return_status);
3931 l_num_warn := l_num_warn + 1 ;
3932 END IF;
3933 END IF;
3934
3935 IF l_debug_on THEN
3936 WSH_DEBUG_SV.log(l_module_name,'l_delivery_detail_id'||l_delivery_detail_id);
3937 END IF;
3938
3939 OPEN Get_Containers(l_delivery_detail_id);
3940 LOOP
3941 FETCH Get_Containers INTO l_container_id;
3942 EXIT WHEN Get_Containers%NOTFOUND;
3943 WSH_SHIP_CONFIRM_ACTIONS2.check_exception(
3944 p_delivery_detail_id => l_container_id,
3945 x_exception_exist => l_exception_exist,
3946 x_severity_present => l_severity_present,
3947 x_return_status => l_return_status);
3948
3949 -- Bug 2461003 : Severity of Exception is Low, still reqd to resolve
3950 -- Modified to ensure that only High and Medium Severity are Errors while Low is treated as Warning
3951 IF (l_exception_exist = 'Y') THEN
3952 --
3953 -- Debug Statements
3954 --
3955 IF l_debug_on THEN
3956 WSH_DEBUG_SV.logmsg(l_module_name, 'EXCEPTIONS EXIST FOR CONTAINER ' || L_CONTAINER_ID|| ' , DURING SHIP CONFIRM' );
3957 END IF;
3958 --
3959 FND_MESSAGE.SET_NAME('WSH','WSH_XC_EXIST_DET');
3960 FND_MESSAGE.SET_TOKEN('DEL_DET_ID', to_char(l_container_id));
3961 IF l_severity_present IN ('H','M') THEN
3962 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3963 wsh_util_core.add_message(x_return_status);
3964 CLOSE Get_Containers;
3965 CLOSE detail_info;
3966 goto confirm_error;
3967 ELSIF l_severity_present = 'L' THEN
3968 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3969 wsh_util_core.add_message(x_return_status);
3970 l_num_warn := l_num_warn + 1 ;
3971 END IF;
3972 END IF;
3973
3974 END LOOP;
3975 CLOSE Get_Containers;
3976
3977 */
3978
3979 -- Bug 3118519 : Validation for Additional Delivery Detail Information DFF.
3980 --
3981 -- Debug Statements
3982 --
3983 IF l_debug_on THEN
3984 WSH_DEBUG_SV.logmsg(l_module_name,'Calling WSH_FLEXFIELD_UTILS.VALIDATE_DFF to validate delivery details DFF',WSH_DEBUG_SV.C_PROC_LEVEL);
3985 END IF;
3986 --
3987 WSH_FLEXFIELD_UTILS.Validate_DFF(
3988 p_table_name => 'WSH_DELIVERY_DETAILS',
3989 p_primary_id => l_delivery_detail_id,
3990 x_return_status => x_return_status);
3991
3992 --
3993 IF l_debug_on THEN
3994
3995 WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
3996 || x_return_status);
3997 END IF;
3998 IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR ) THEN
3999 --
4000 -- Debug Statements
4001 --
4002 IF l_debug_on THEN
4003 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF failed for delivery detail : '
4004 || l_delivery_detail_id,WSH_DEBUG_SV.C_PROC_LEVEL);
4005 WSH_DEBUG_SV.logmsg(l_module_name,'Return status after calling Validate_DFF in DEACB is : '
4006 || x_return_status);
4007 END IF;
4008 --
4009 l_num_error := l_num_error + 1;
4010 -- HW OPMCONV. Removed checking for org type
4011
4012 l_error_DFF:= TRUE;
4013 l_detail_count := l_detail_count + 1;
4014
4015 IF ( l_detail_count = 1 ) THEN
4016 l_invalid_details := l_delivery_detail_id;
4017 ELSIF ( l_detail_count <= 5 ) THEN
4018 l_invalid_details := l_invalid_details || ', ' || l_delivery_detail_id;
4019 ELSIF ( l_more_flag ) THEN
4020 l_more_flag := FALSE;
4021 l_invalid_details := l_invalid_details || '..';
4022 END IF;
4023 END IF;
4024
4025 -- IF Condition added for Bug 3118519
4026
4027 -- HW OPMCONV. Removed forking the code
4028
4029 /* H integration: 945 send document wrudge */
4030 IF (l_source_code = 'WSH') THEN
4031 l_wsh_lines_exist := l_wsh_lines_exist + 1;
4032 END IF;
4033
4034
4035 /*Bug 2096052 added for OKE */
4036 IF (l_source_code = 'OKE' AND
4037 (p_action_flag = 'B' OR
4038 p_action_flag = 'O' OR
4039 p_action_flag = 'L' OR
4040 p_action_flag = 'C' OR
4041 l_cycle_quantity > 0)
4042 ) THEN
4043 l_source_code_flag := 'Y';
4044 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_SHIP_MODE');
4045 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4046 wsh_util_core.add_message(x_return_status);
4047 l_num_error := l_num_error + 1;
4048 CLOSE detail_info;
4049 goto confirm_error_no_msg;
4050
4051 END IF;
4052 /*end of Bug 2096052 added for OKE */
4053
4054 BEGIN
4055 SELECT delivery_detail_id INTO l_dummy_detail_id
4056 FROM wsh_delivery_details
4057 WHERE delivery_detail_id = l_delivery_detail_id
4058 FOR UPDATE NOWAIT;
4059
4060 EXCEPTION
4061 WHEN record_locked THEN
4062 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4063 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
4064 wsh_util_core.add_message(x_return_status);
4065 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4066 CLOSE detail_info;
4067 goto confirm_error;
4068 WHEN OTHERS THEN
4069 RAISE;
4070 END;
4071
4072 IF (l_released_status NOT IN ('X', 'Y')) THEN
4073 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_UNRELEASED');
4074 -- Bug 2713285
4075 -- for cancelling or unassigning the lines from delivery thru Batch process
4076 IF l_batch_id IS NULL THEN
4077 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4078 l_num_warn := l_num_warn + 1 ;
4079 ELSE
4080 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4081 l_num_error := l_num_error + 1 ;
4082 END IF;
4083
4084 wsh_util_core.add_message(x_return_status);
4085 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4086 --bug 2770400
4087 IF l_batch_id IS NOT NULL THEN
4088 -- in batch mode ,stop confirming the delivery
4089 wsh_util_core.add_message(x_return_status);
4090 CLOSE detail_info;
4091 goto confirm_error_no_msg;
4092 END IF;
4093 -- End of Bug 2713285
4094
4095 /* H integration: 945 cancel staged/unreleased wrudge */
4096 IF l_source_code = 'WSH' THEN
4097 l_cancel_line_ids(l_cancel_line_ids.count + 1) := l_delivery_detail_id;
4098 ELSE
4099 l_unassign_dds(l_unassign_dds.count + 1) := l_delivery_detail_id;
4100 l_unassign_rel_status(l_unassign_rel_status.count + 1) := l_released_status;
4101 l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id; -- Bug#3246327
4102 END IF;
4103 ELSE
4104 -- check for inspection_flag
4105
4106 IF ( l_inspection_flag = 'R') then
4107 FND_MESSAGE.SET_NAME('WSH','WSH_INSPECTION');
4108 --
4109 -- Debug Statements
4110 --
4111 IF l_debug_on THEN
4112 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4113 END IF;
4114 --
4115 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
4116 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4117 wsh_util_core.add_message(x_return_status);
4118 l_num_warn := l_num_warn + 1;
4119
4120 UPDATE WSH_DELIVERY_DETAILS
4121 SET INSPECTION_FLAG = 'I'
4122 WHERE DELIVERY_DETAIL_ID = l_dummy_detail_id ;
4123
4124 END IF ;
4125
4126 l_assigned_counter := l_assigned_counter + 1 ;
4127 l_assigned_line_ids ( l_assigned_counter ) := l_dummy_detail_id ;
4128 l_assigned_cont_ids ( l_assigned_counter ) := l_container_id ;
4129 l_assigned_req_qtys ( l_assigned_counter ) := l_requested_quantity ;
4130 l_assigned_shp_qtys ( l_assigned_counter ) := l_shipped_quantity ;
4131 l_assigned_cc_qtys ( l_assigned_counter ) := l_cycle_quantity ;
4132 l_assigned_shp_qtys2 ( l_assigned_counter ) := l_shipped_quantity2;
4133 l_assigned_cc_qtys2 ( l_assigned_counter ) := l_cycle_quantity2;
4134 l_assigned_req_qtys2 ( l_assigned_counter ) := l_requested_quantity2 ;
4135 l_assigned_pick_qtys ( l_assigned_counter ) := l_picked_quantity;
4136 l_assigned_pick_qtys2 ( l_assigned_counter ) := l_picked_quantity2;
4137 l_assigned_overpick_qtys ( l_assigned_counter ) := l_picked_quantity - l_requested_quantity ;
4138 l_assigned_overpick_qtys2 ( l_assigned_counter ) := l_picked_quantity2 - l_requested_quantity2 ;
4139 l_assigned_orgs ( l_assigned_counter ) := l_dd_organization_id ;
4140 l_assigned_items ( l_assigned_counter ) := l_inventory_item_id ;
4141 l_assigned_subs ( l_assigned_counter ) := l_subinventory ;
4142 l_assigned_locs ( l_assigned_counter ) := l_locator_id ;
4143 -- muom
4144 l_assigned_req_qty_uoms2 ( l_assigned_counter ) := l_requested_quantity_uom2;
4145 l_assigned_src_codes (l_assigned_counter) := l_source_code;
4146
4147 -- Consolidation of BO Delivery Details project
4148 l_assigned_source_lines (l_assigned_counter) := l_source_line_id;
4149 /* H integration: 940/945 wrudge */
4150 l_assigned_source ( l_assigned_counter ) := l_source_code;
4151
4152 END IF ; -- If released_status not in ( 'X' , 'Y' )
4153
4154 END LOOP ;-- for unassigning unreleased lines.
4155
4156 close detail_info ;
4157
4158 -- Added for Bug 3118519
4159 -- HW OPMCONV. Removed forking the code
4160
4161 IF ( l_error_DFF) THEN
4162 --
4163 -- Debug Statements
4164 --
4165 IF l_debug_on THEN
4166 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FLEXFIELD_UTILS.VALIDATE_DFF validation failed for delivery detail(s)',WSH_DEBUG_SV.C_PROC_LEVEL);
4167 END IF;
4168 --
4169 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4170 l_token := FND_MESSAGE.Get_String('WSH', 'WSH_DETAIL_DFF_TITLE');
4171
4172 FND_MESSAGE.Set_Name('WSH', 'WSH_DFF_DETAIL_EMPTY');
4173 FND_MESSAGE.Set_Token('DFF_TITLE', l_token);
4174 FND_MESSAGE.Set_Token('DETAIL_IDS', l_invalid_details);
4175 WSH_UTIL_CORE.Add_Message(x_return_status);
4176
4177 IF ( x_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING ) THEN
4178 l_num_warn := l_num_warn;
4179 END IF;
4180
4181 goto loop_end;
4182
4183 END IF;
4184
4185 -- 4. p_action_flag = O : If CYCLE COUNT all then cycle count all the reservations,
4186 -- backorder, clear inv controls and tracking number etc,
4187 -- unassign from delivery and close delivery, return
4188
4189 IF (p_action_flag = 'O') THEN
4190
4191 -- bug 2263249
4192 IF (l_wms_enabled_flag) THEN
4193 --
4194 -- Debug Statements
4195 --
4196 IF l_debug_on THEN
4197 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4198 END IF;
4199 --
4200 WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4201 (p_delivery_id => p_del_rows(i),
4202 x_return_status => l_return_status,
4203 x_msg_count => l_msg_count,
4204 x_msg_data => l_msg_data
4205 );
4206 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4207 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4208 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4209 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4210 x_return_status := l_return_status;
4211 wsh_util_core.add_message(x_return_status);
4212 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4213 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4214 THEN
4215
4216 l_num_error := l_num_error + 1 ;
4217 ELSE
4218 l_num_warn := l_num_warn + 1 ;
4219 END IF;
4220 END IF;
4221 END IF;
4222 -- end bug 2263249
4223
4224 --
4225 -- Debug Statements
4226 --
4227 IF l_debug_on THEN
4228 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4229 END IF;
4230 --
4231
4232
4233
4234 wsh_ship_confirm_actions2.backorder(
4235 p_detail_ids => l_assigned_line_ids ,
4236 p_line_ids => l_assigned_source_lines, -- Consolidation of BO Delivery Details project
4237 p_bo_qtys => l_assigned_req_qtys , -- pass total requested_quantity for BO
4238 p_req_qtys => l_assigned_req_qtys ,
4239 p_bo_qtys2 => l_assigned_req_qtys2 ,
4240 p_overpick_qtys => l_assigned_overpick_qtys ,
4241 p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4242 p_sources => l_assigned_source, -- RTV BO Cons Changes
4243 p_bo_mode => 'CYCLE_COUNT' ,
4244 x_out_rows => l_out_cc_rows ,
4245 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4246 x_return_status => l_return_status);
4247
4248 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS )
4249 THEN
4250 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4251 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4252 THEN
4253 l_num_error := l_num_error + 1 ;
4254 goto confirm_error_no_msg;
4255 ELSE
4256 l_num_warn := l_num_warn + 1 ;
4257 END IF ;
4258 END IF ;
4259 -- 2131459 - remove goto update_delivery_status code
4260 l_unassign_all_flag_tab(i) := TRUE;
4261
4262 -- 5. p_action_flag = C : If BACKORDER ALL then remove all reservations, clear inv controls and
4263 -- tracking number etc, unassign from delivery and close delivery, return
4264
4265 ELSIF ( p_action_flag = 'C' ) THEN
4266
4267 -- bug 2263249
4268 IF (l_wms_enabled_flag) THEN
4269 --
4270 -- Debug Statements
4271 --
4272 IF l_debug_on THEN
4273 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT',WSH_DEBUG_SV.C_PROC_LEVEL);
4274 END IF;
4275 --
4276 WMS_Shipping_LPN_Utils_PUB.update_lpn_context
4277 (p_delivery_id => p_del_rows(i),
4278 x_return_status => l_return_status,
4279 x_msg_count => l_msg_count,
4280 x_msg_data => l_msg_data
4281 );
4282 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4283 FND_MESSAGE.SET_NAME('WSH','WSH_INTG_ERROR');
4284 FND_MESSAGE.SET_TOKEN('API_NAME', 'WMS_SHIPPING_LPN_UTILS_PUB.UPDATE_LPN_CONTEXT');
4285 FND_MESSAGE.SET_TOKEN('MSG_TEXT', l_msg_data);
4286 x_return_status := l_return_status;
4287 wsh_util_core.add_message(x_return_status);
4288 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4289 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4290 l_num_error := l_num_error + 1 ;
4291 ELSE
4292 l_num_warn := l_num_warn + 1 ;
4293 END IF;
4294 END IF;
4295 END IF;
4296 -- end bug 2263249
4297
4298 --
4299 -- Debug Statements
4300 --
4301 IF l_debug_on THEN
4302 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4303 END IF;
4304 --
4305
4306 wsh_ship_confirm_actions2.backorder(
4307 p_detail_ids => l_assigned_line_ids ,
4308 p_line_ids => l_assigned_source_lines, -- Consolidation of BO Delivery Details project
4309 p_bo_qtys => l_assigned_req_qtys , -- pass total requested_quantity for BO
4310 p_req_qtys => l_assigned_req_qtys ,
4311 p_bo_qtys2 => l_assigned_req_qtys2 ,
4312 p_overpick_qtys => l_assigned_overpick_qtys ,
4313 p_overpick_qtys2 => l_assigned_overpick_qtys2 ,
4314 p_sources => l_assigned_source, -- RTV BO Cons Changes
4315 p_bo_mode => 'UNRESERVE' ,
4316 x_out_rows => l_out_bo_rows ,
4317 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4318 x_return_status => l_return_status);
4319
4320 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4321 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4322 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
4323 THEN
4324 l_num_error := l_num_error + 1 ;
4325 goto confirm_error_no_msg;
4326 ELSE
4327 l_num_warn := l_num_warn + 1 ;
4328 END IF ;
4329 END IF ;
4330 -- 2131459 - remove goto update_delivery_status code
4331 l_unassign_all_flag_tab(i) := TRUE;
4332
4333 ELSE FOR j IN 1..l_assigned_line_ids.count LOOP
4334
4335 -- 6a. p_action_flag = S : SHIP UNSPECIFIED QUANTITIES
4336 IF (p_action_flag = 'S') THEN
4337
4338 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ), l_assigned_pick_qtys( j ));
4339 l_shipped_quantity2 := nvl(l_assigned_shp_qtys2 ( j ), l_assigned_pick_qtys2( j ));
4340 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ) , 0);
4341 l_cycle_quantity2 := l_assigned_cc_qtys2( j ) ;
4342 l_bo_mode := 'UNRESERVE';
4343
4344 -- 6b. p_action_flag = B : BACKORDER UNSPECIFIED QUANTITIES
4345
4346 ELSIF (p_action_flag = 'B') THEN
4347
4348 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ) , 0);
4349 /* OPM BUG 2408223 - pupakare */
4350 l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4351 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ), l_assigned_req_qtys ( j ) - l_shipped_quantity);
4352 -- HW OPMCONV - Added Qty2
4353 l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4354 /* End Bug 2408223 */
4355 l_bo_mode := 'UNRESERVE' ;
4356
4357 -- 6c. p_action_flag = L : CYCLE_COUNT UNSPECIFIED QUANTITIES
4358
4359 ELSIF (p_action_flag = 'L') THEN
4360
4361 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ) , 0);
4362 /* OPM BUG 2408223 - pupakare */
4363 l_shipped_quantity2 := l_assigned_shp_qtys2( j ) ;
4364 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ) , l_assigned_req_qtys( j ) - l_shipped_quantity);
4365 -- HW OPMCONV - Added nvl to shipped_qty2
4366 l_cycle_quantity2 := nvl(l_assigned_cc_qtys2( j ), l_assigned_req_qtys2( j ) - nvl(l_shipped_quantity2,0));
4367 /* End Bug 2408223 */
4368 IF l_debug_on THEN
4369 WSH_DEBUG_SV.push(l_module_name);
4370 --
4371 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4372 WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity2',l_shipped_quantity2);
4373 WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys2( j ',l_assigned_req_qtys2( j ));
4374 WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys2( j ));
4375
4376 WSH_DEBUG_SV.push(l_module_name);
4377 --
4378 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4379 WSH_DEBUG_SV.log(l_module_name,'l_shipped_quantity',l_shipped_quantity2);
4380 WSH_DEBUG_SV.log(l_module_name,'l_assigned_req_qtys( j ',l_assigned_req_qtys( j ));
4381 WSH_DEBUG_SV.log(l_module_name,'l_assigned_cc_qtys( j ) ',l_assigned_cc_qtys( j ));
4382
4383 end if;
4384 if ( l_assigned_shp_qtys ( j ) is null ) then
4385 l_bo_mode := 'CYCLE_COUNT' ;
4386 else
4387 l_bo_mode := 'UNRESERVE' ;
4388 end if ;
4389
4390 -- 6d. p_action_flag = T : STAGE UNSPECIFIED QUANTITIES
4391
4392 ELSIF (p_action_flag = 'T') THEN
4393
4394 l_shipped_quantity := nvl(l_assigned_shp_qtys ( j ), 0);
4395 l_shipped_quantity2 := l_assigned_shp_qtys2 ( j );
4396 l_cycle_quantity := nvl(l_assigned_cc_qtys( j ), 0);
4397 l_cycle_quantity2 := l_assigned_cc_qtys2( j ) ;
4398 l_bo_mode := 'UNRESERVE' ;
4399
4400 -- 6e. p_action_flag = A : SHIP ALL
4401
4402 ELSIF (p_action_flag = 'A') THEN
4403 -- Bug 2112196 : If ship All , then don't update shipped_quantity if its being overshiped.
4404 l_shipped_quantity := greatest ( nvl(l_assigned_shp_qtys ( j ), 0),
4405 l_assigned_pick_qtys( j ));
4406 l_shipped_quantity2 := greatest ( nvl(l_assigned_shp_qtys2 ( j ), 0),
4407 l_assigned_pick_qtys2( j ));
4408
4409 l_cycle_quantity := 0;
4410 -- HW BUG#:2005977 added cycle quantity2
4411 l_cycle_quantity2 := NULL;
4412
4413 END IF;
4414
4415 -- If line is overpicked, we need to backorder/cycle-count the unshipped picked quantity in
4416 -- excess of the requested quantity.
4417 -- Important: original value of req_qtys must be used before unassigning staged quantities.
4418 l_unshipped_pick_quantity := l_assigned_pick_qtys( j )
4419 - GREATEST(l_assigned_req_qtys( j ), l_shipped_quantity);
4420 l_unshipped_pick_quantity2 := l_assigned_pick_qtys2( j )
4421 - GREATEST(l_assigned_req_qtys2( j ), l_shipped_quantity2);
4422
4423
4424 -- 7. Unassign staged lines (split if necessary, store delivery detail ids)
4425
4426 -- because of overpicking/overshipping, both quantities should be at minimum 0.
4427 -- quantity (picked-requested) cannot be staged.
4428 l_stage_quantity := GREATEST(l_assigned_req_qtys( j ) - l_shipped_quantity-l_cycle_quantity, 0);
4429 l_stage_quantity2 := GREATEST(l_assigned_req_qtys2( j ) - l_shipped_quantity2-l_cycle_quantity2, 0);
4430
4431 -- HW Bug 3694454 For OPM if l_stage_quantity < .00001 due to small decimal mismatch in
4432 -- Requested Quantity and picked quantity then make both quantities zero.
4433 -- HW OPMCONV - Removed Branching
4434 IF (l_stage_quantity < .00001) THEN
4435 l_stage_quantity := 0;
4436 l_stage_quantity2 := 0;
4437 END IF;
4438
4439 -- End Bug 3694454
4440
4441 -- muom
4442 IF l_debug_on THEN
4443 WSH_DEBUG_SV.logmsg(l_module_name,'l_stage_quantity '||l_stage_quantity||' l_stage_quantity2 '||l_stage_quantity2);
4444 END IF;
4445 l_fulfill_base := WSH_UTIL_CORE.Get_Line_Fulfillment_Base(l_assigned_src_codes(j), l_assigned_source_lines(j));
4446 -- When Fulfillment base is Secondary, the nothing should be Staged on Primary if there is nothing to be Staged on Secondary
4447 IF (l_stage_quantity > 0) and (nvl(l_stage_quantity2,0) <= 0) and (l_assigned_req_qty_uoms2(j) is not null) and
4448 (l_fulfill_base = 'S') THEN
4449 l_stage_quantity := 0;
4450 l_stage_quantity2 := 0;
4451 END IF;
4452
4453 IF (l_stage_quantity > 0) THEN
4454 IF (l_stage_quantity = l_assigned_req_qtys( j ) ) THEN
4455 l_staged_dd_id := l_assigned_line_ids( j );
4456 ELSE
4457 l_assigned_req_qtys( j ) := l_assigned_req_qtys( j ) - l_stage_quantity ;
4458 l_assigned_pick_qtys( j ):= l_assigned_pick_qtys( j ) - l_stage_quantity ;
4459 -- HW BUG#:2005977 added qty2 for OPM
4460 l_assigned_req_qtys2( j ) := l_assigned_req_qtys2( j ) - l_stage_quantity2 ;
4461 l_assigned_pick_qtys2( j ):= l_assigned_pick_qtys2( j ) - l_stage_quantity2 ;
4462
4463 /* bug fix 1983460
4464 Now we pass a value 'Y' to the parameter 'p_manual_split' in the call
4465 to split_delivery_details. 'Y' is used only as a indicator to tell the
4466 split_delivery_details that the split call is for splitting the STAGED quantity
4467 */
4468
4469 --
4470 -- Debug Statements
4471 --
4472 IF l_debug_on THEN
4473 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.SPLIT_DELIVERY_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
4474 END IF;
4475 --
4476 wsh_delivery_details_actions.split_delivery_details(
4477 p_from_detail_id => l_assigned_line_ids( j ),
4478 p_req_quantity => l_stage_quantity,
4479 x_new_detail_id => l_new_detail_id,
4480 x_return_status => x_return_status,
4481 p_unassign_flag => 'N',
4482 p_req_quantity2 => l_stage_quantity2,
4483 p_manual_split => 'Y');
4484
4485 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4486 l_num_error := l_num_error + 1 ;
4487 goto confirm_error;
4488 ELSE
4489 l_staged_dd_id := l_new_detail_id;
4490 END IF;
4491 END IF; -- if stage quantity = requested quantity
4492
4493 /* H integration: 945 cancel staged wrudge */
4494 IF l_assigned_source( j ) = 'WSH' THEN
4495
4496 -- Bug 2713285
4497 -- for cancelling any line in delivery thru Batch process
4498 IF l_batch_id IS NOT NULL THEN
4499 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
4500 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4501 wsh_util_core.add_message(x_return_status);
4502 l_num_error := l_num_error + 1;
4503 goto confirm_error_no_msg;
4504 END IF;
4505 -- Bug 2713285
4506 l_cancel_line_ids ( l_cancel_line_ids.count+1) := l_staged_dd_id;
4507 ELSE
4508 l_stage_rows(l_stage_rows.count + 1) := l_staged_dd_id;
4509 END IF;
4510
4511 END IF; -- (l_stage_quantity > 0)
4512
4513 -- muom
4514 IF l_debug_on THEN
4515 WSH_DEBUG_SV.logmsg(l_module_name,'l_cycle_quantity '||l_cycle_quantity||' l_cycle_quantity2 '||l_cycle_quantity2);
4516 END IF;
4517 -- When Fulfillment base is Secondary, the nothing should be Backordered on Primary if there is nothing to be Backordered on Secondary
4518 IF (l_cycle_quantity > 0) and (nvl(l_cycle_quantity2,0) <= 0) and (l_assigned_req_qty_uoms2(j) is not null) and
4519 (l_fulfill_base = 'S') THEN
4520 l_cycle_quantity := 0;
4521 l_cycle_quantity2 := 0;
4522 END IF;
4523
4524 -- Populate the tables to be passed as parameters for Backorder API.
4525
4526 IF ( ( l_cycle_quantity > 0 ) OR ( l_unshipped_pick_quantity > 0 ) )THEN
4527 if ( l_bo_mode = 'UNRESERVE') then
4528 l_bo_rows ( l_bo_rows.count + 1 ) := l_assigned_line_ids ( j ) ;
4529 -- Consolidation of BO Delivery Details project
4530 l_bo_source_lines(l_bo_source_lines.count +1) := l_assigned_source_lines(j);
4531 l_bo_qtys ( l_bo_qtys.count + 1 ) := l_cycle_quantity;
4532 l_bo_req_qtys ( l_bo_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4533 l_bo_overpick_qtys ( l_bo_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity;
4534 l_bo_qtys2( l_bo_qtys2.count + 1 ) := l_cycle_quantity2 ;
4535 l_bo_overpick_qtys2 ( l_bo_overpick_qtys2.count + 1 ):= l_unshipped_pick_quantity2;
4536 l_bo_sources ( l_bo_sources.count + 1 ) := l_assigned_source( j ); -- RTV BO Cons Changes
4537 else
4538 l_cc_rows ( l_cc_rows.count + 1 ) := l_assigned_line_ids ( j ) ;
4539 -- Consolidation of BO Delivery Details project
4540 l_cc_source_lines(l_cc_source_lines.count +1) := l_assigned_source_lines(j);
4541 l_cc_qtys ( l_cc_qtys.count + 1 ) := l_cycle_quantity ;
4542 l_cc_sources ( l_cc_sources.count + 1 ) := l_assigned_source(j); -- RTV BO Cons Changes
4543 IF l_debug_on THEN
4544 WSH_DEBUG_SV.push(l_module_name);
4545 --
4546 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity',l_cycle_quantity);
4547 END IF;
4548
4549 l_cc_req_qtys ( l_cc_req_qtys.count + 1 ):= l_assigned_req_qtys( j ) ;
4550 l_cc_overpick_qtys ( l_cc_overpick_qtys.count + 1 ):= l_unshipped_pick_quantity ;
4551
4552 l_cc_qtys2( l_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4553 IF l_debug_on THEN
4554 WSH_DEBUG_SV.push(l_module_name);
4555 --
4556 WSH_DEBUG_SV.log(l_module_name,'l_cycle_quantity2',l_cycle_quantity2);
4557 END IF;
4558 l_cc_overpick_qtys2( l_cc_overpick_qtys2.count + 1 ) := l_unshipped_pick_quantity2 ;
4559 end if ;
4560 END IF ;
4561
4562 IF (l_cycle_quantity <> l_assigned_req_qtys( j )) THEN
4563 l_backorder_all_flag := FALSE;
4564 END IF;
4565
4566 IF ( l_shipped_quantity > 0 ) THEN
4567 l_shp_dd_ids( l_shp_dd_ids.count + 1 ) := l_assigned_line_ids( j );
4568 l_shp_dd_orgs( l_shp_dd_orgs.count + 1 ) := l_assigned_orgs( j );
4569 l_shp_dd_items( l_shp_dd_items.count + 1 ) := l_assigned_items( j );
4570 l_shp_dd_subs( l_shp_dd_subs.count + 1 ) := l_assigned_subs( j );
4571 l_shp_dd_locs( l_shp_dd_locs.count + 1 ) := l_assigned_locs( j );
4572 l_shp_dd_cont_ids ( l_shp_dd_cont_ids.count + 1 ) := l_assigned_cont_ids ( j );
4573 l_shp_dd_shipped_qtys ( l_shp_dd_shipped_qtys.count + 1 ) := l_shipped_quantity ;
4574 l_shp_dd_shipped_qtys2 ( l_shp_dd_shipped_qtys2.count + 1 ) := l_shipped_quantity2 ;
4575 l_shp_dd_cc_qtys ( l_shp_dd_cc_qtys.count + 1 ) := l_cycle_quantity ;
4576 l_shp_dd_cc_qtys2 ( l_shp_dd_cc_qtys2.count + 1 ) := l_cycle_quantity2 ;
4577 l_shp_dd_req_qtys ( l_shp_dd_req_qtys .count + 1 ) := l_assigned_req_qtys( j );
4578 /* H integration: 945 check detail wrudge */
4579 l_shp_dd_source( l_shp_dd_source.count + 1) := l_assigned_source( j );
4580 END IF ;
4581
4582 /* LG new OPM -- OM changes*/
4583
4584 -- HW OPMCONV. Removed forking the code
4585
4586 END LOOP ; -- For all delivery details still assigned
4587
4588 END IF ; -- If P_action_flag
4589
4590 -- 8. Update quantities based on p_action_flag for null values (shipped and cycle count)
4591
4592 FORALL tmp_counter IN 1..l_shp_dd_ids.count
4593 UPDATE wsh_delivery_Details
4594 SET shipped_quantity = l_shp_dd_shipped_qtys(tmp_counter),
4595 shipped_quantity2 = l_shp_dd_shipped_qtys2(tmp_counter),
4596 cycle_count_quantity = l_shp_dd_cc_qtys(tmp_counter),
4597 cycle_count_quantity2 = l_shp_dd_cc_qtys2(tmp_counter)
4598 WHERE delivery_detail_id = l_shp_dd_ids(tmp_counter);
4599
4600 IF (p_action_flag = 'A') THEN --bugfix 4070732
4601 --{
4602 -- J: W/V Changes
4603 -- Recalculate the W/V as the quantities would have changed
4604 FOR tmp_counter IN 1..l_shp_dd_ids.count LOOP
4605 IF l_debug_on THEN
4606 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
4607 END IF;
4608
4609 WSH_WV_UTILS.Detail_Weight_Volume(
4610 p_delivery_detail_id => l_shp_dd_ids(tmp_counter),
4611 p_update_flag => 'Y',
4612 p_post_process_flag => 'Y',
4613 p_calc_wv_if_frozen => 'N',
4614 x_net_weight => l_net_weight,
4615 x_volume => l_volume,
4616 x_return_status => l_return_status);
4617
4618 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
4619 x_return_status := l_return_status;
4620 IF l_debug_on THEN
4621 WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
4622 WSH_DEBUG_SV.pop(l_module_name);
4623 END IF;
4624 return;
4625 END IF;
4626 END LOOP;
4627
4628 --}
4629 END IF;
4630
4631 -- HW Added fix from bug 2024384 to NULL SHIPPED_QUANTITY(S) and
4632 -- CYCLE_COUNT_QUANTITY(S)
4633
4634 -- csun, Bug 2823512, if the transaction_temp_id is not NULL
4635 -- set the shipped_quantity to be requested_quantity
4636
4637 FORALL tmp_counter IN 1..l_stage_rows.count
4638 UPDATE WSH_DELIVERY_DETAILS
4639 SET -- TRACKING_NUMBER = NULL, Bug# 3632485
4640 SHIPPED_QUANTITY = DECODE (SERIAL_NUMBER, NULL,
4641 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY),
4642 PICKED_QUANTITY),
4643 SHIPPED_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4644 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, PICKED_QUANTITY2),
4645 PICKED_QUANTITY2),
4646 CYCLE_COUNT_QUANTITY = DECODE (SERIAL_NUMBER, NULL ,
4647 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0) , 0),
4648 CYCLE_COUNT_QUANTITY2 = DECODE (SERIAL_NUMBER, NULL,
4649 DECODE(TRANSACTION_TEMP_ID, NULL, NULL, 0), 0)
4650 WHERE DELIVERY_DETAIL_ID = l_stage_rows(tmp_counter);
4651
4652 -- J: W/V Changes
4653 -- Recalculate the W/V as the quantities would have changed with the above update
4654
4655
4656 -- 10. Backorder quantities and unassign(split if necessary)
4657
4658 IF (l_cc_rows.count > 0 ) THEN
4659
4660 --
4661 -- Debug Statements
4662 --
4663 IF l_debug_on THEN
4664 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4665 END IF;
4666 --
4667
4668 wsh_ship_confirm_actions2.backorder(
4669 p_detail_ids => l_cc_rows ,
4670 p_line_ids => l_cc_source_lines, -- Consolidation of BO Delivery Details project
4671 p_bo_qtys => l_cc_qtys ,
4672 p_req_qtys => l_cc_req_qtys ,
4673 p_bo_qtys2 => l_cc_qtys2 ,
4674 p_overpick_qtys => l_cc_overpick_qtys ,
4675 p_overpick_qtys2 => l_cc_overpick_qtys2 ,
4676 p_sources => l_cc_sources, -- RTV BO Cons Changes
4677 p_bo_mode => 'CYCLE_COUNT' ,
4678 x_out_rows => l_out_bo_rows ,
4679 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4680 x_return_status => l_return_status);
4681
4682 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4683 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4684 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4685 l_num_error := l_num_error + 1 ;
4686 goto confirm_error_no_msg;
4687 ELSE
4688 l_num_warn := l_num_warn + 1 ;
4689 END IF ;
4690 END IF ;
4691
4692 END IF;
4693
4694 IF (l_bo_rows.count > 0 ) THEN
4695
4696 --
4697 -- Debug Statements
4698 --
4699 IF l_debug_on THEN
4700 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIP_CONFIRM_ACTIONS2.BACKORDER',WSH_DEBUG_SV.C_PROC_LEVEL);
4701 END IF;
4702 --
4703
4704 wsh_ship_confirm_actions2.backorder(
4705 p_detail_ids => l_bo_rows ,
4706 p_line_ids => l_bo_source_lines, -- Consolidation of BO Delivery Details project
4707 p_bo_qtys => l_bo_qtys ,
4708 p_req_qtys => l_bo_req_qtys ,
4709 p_bo_qtys2 => l_bo_qtys2 ,
4710 p_overpick_qtys => l_bo_overpick_qtys ,
4711 p_overpick_qtys2 => l_bo_overpick_qtys2 ,
4712 p_sources => l_bo_sources, -- RTV BO Cons ChangeS
4713 p_bo_mode => 'UNRESERVE' ,
4714 x_out_rows => l_out_cc_rows ,
4715 x_cons_flags => l_cons_flags, -- Consolidation of BO Delivery Details project
4716 x_return_status => l_return_status);
4717
4718 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
4719 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
4720 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4721 l_num_error := l_num_error + 1 ;
4722 goto confirm_error_no_msg;
4723 ELSE
4724 l_num_warn := l_num_warn + 1 ;
4725 END IF ;
4726 END IF ;
4727
4728 END IF;
4729
4730
4731
4732 -- 11 Check for holds and inventory controls of details to be shipped
4733
4734 FOR dd_count IN 1..l_shp_dd_ids.count LOOP
4735
4736 dft_subinv := NULL;
4737 dft_loc_id := NULL;
4738
4739 --
4740 -- Debug Statements
4741 --
4742 IF l_debug_on THEN
4743 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DETAIL_FOR_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
4744 END IF;
4745 --
4746 WSH_DELIVERY_VALIDATIONS.check_detail_for_confirm
4747 ( p_detail_id => l_shp_dd_ids(dd_count),
4748 p_check_credit_init_flag => l_check_credit_init_flag, -- bug 2343058
4749 x_line_inv_flag_rec => l_inv_controls_rec,
4750 x_return_status => l_return_status);
4751
4752 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
4753 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
4754 l_num_error := l_num_error + 1;
4755 raise ship_confirm_error;
4756 /* H integration: 945 check detail wrudge */
4757 ELSIF l_shp_dd_source(dd_count) = 'WSH' THEN
4758 /* new message: WSH_DEL_WSH_LINE_ERROR, token DEL_NAME */
4759 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_WSH_LINE_ERROR');
4760 --
4761 -- Debug Statements
4762 --
4763 IF l_debug_on THEN
4764 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
4765 END IF;
4766 --
4767 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
4768 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
4769 l_num_error := l_num_error + 1;
4770 goto confirm_error_no_msg;
4771 ELSE
4772 -- Bug 2713285
4773 -- for inventory control items, lines are unassigned from Delivery
4774 -- thru batch process
4775 IF l_batch_id IS NOT NULL THEN
4776 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4777 IF l_inv_controls_rec.details_required_flag='Y' THEN --Bug 3773225
4778 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_REQUIRED');
4779 wsh_util_core.add_message(x_return_status);
4780 ELSIF l_inv_controls_rec.invalid_material_status_flag='Y' THEN --Material Status Impact
4781 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_MATERIAL_STATUS');
4782 wsh_util_core.add_message(x_return_status);
4783 END IF;
4784 l_num_error := l_num_error + 1;
4785 goto confirm_error_no_msg;
4786 END IF;
4787 -- Bug 2713285
4788
4789 l_unassign_dds(l_unassign_dds.count + 1) := l_shp_dd_ids(dd_count);
4790 l_unassign_rel_status(l_unassign_rel_status.count + 1) := 'Y';
4791 l_unassign_source_lines(l_unassign_source_lines.count + 1) := l_source_line_id; -- Bug#3246327
4792 l_num_warn := l_num_warn + 1;
4793
4794 /* Bug fix 2850555
4795 Need to set l_inv_cntrl_flag to FALSE ONLY when details_required_flag
4796 is set to Y by 'check_detail_for_confirm' procedure.
4797 Reason: For cases where inv controls are not really required, like
4798 the bug case where only HOLDS are a problem, l_inv_cntrl_flag
4799 should NOT be set to FALSE
4800 */
4801
4802 if l_debug_on then
4803 wsh_debug_sv.log(l_module_name, 'l_inv_controls_rec.details_required_flag', l_inv_controls_rec.details_required_flag);
4804 end if;
4805
4806 if nvl(l_inv_controls_rec.details_required_flag, 'N') = 'Y' then
4807 l_inv_cntrl_flag := FALSE;
4808 -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4809 -- l_unassign_dds can be used all because it could contain unreleased lines.
4810 l_inv_ctrl_dd_count := l_inv_ctrl_dd_count + 1;
4811 IF ( l_inv_ctrl_dd_count = 1 ) THEN
4812 l_inv_ctrl_dd_ids := l_unassign_dds(l_unassign_dds.count);
4813 ELSIF ( l_inv_ctrl_dd_count <= 5 ) THEN
4814 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4815 ELSIF ( l_more_dd_flag ) THEN
4816 l_inv_ctrl_dd_ids := l_inv_ctrl_dd_ids || ',..';
4817 l_more_dd_flag := FALSE;
4818 END IF;
4819 -- end bug 2283621
4820 /***************************Material Status Project***************************************/
4821 ELSIF nvl(l_inv_controls_rec.invalid_material_status_flag, 'N') = 'Y' then
4822 l_inv_material_flag := FALSE;
4823 -- bug 2283621 - accumulate the l_inv_ctrl_dd_ids up to 5 delivery details
4824 -- l_unassign_dds can be used all because it could contain unreleased lines.
4825 l_inv_material_dd_count := l_inv_material_dd_count + 1;
4826 IF ( l_inv_material_dd_count = 1 ) THEN
4827 l_inv_material_dd_ids := l_unassign_dds(l_unassign_dds.count);
4828 ELSIF ( l_inv_material_dd_count <= 5 ) THEN
4829 l_inv_material_dd_ids := l_inv_ctrl_dd_ids || ', ' || l_unassign_dds(l_unassign_dds.count);
4830 ELSIF ( l_more_material_dd_flag ) THEN
4831 l_inv_material_dd_ids := l_inv_material_dd_ids || ',..';
4832 l_more_material_dd_flag := FALSE;
4833 END IF;
4834 /***************************Material Status Project***************************************/
4835 end if;
4836
4837 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
4838 END IF;
4839 ELSE
4840 l_unassign_all_flag_tab(i) := FALSE ;
4841
4842 IF (l_shp_dd_cont_ids(dd_count) IS NULL) THEN
4843 l_unpacked_flag := TRUE;
4844 ELSE
4845 -- Bug 2878538
4846 -- Cont exists flag should be set even if there is 1 container
4847 -- else it will be FALSE by default
4848 l_cont_exists_flag := TRUE;
4849 END IF; -- (if container_id IS NULL)
4850
4851 END IF; -- (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
4852
4853 -- bug 2320388
4854 l_check_credit_init_flag := FALSE;
4855
4856 -- Need to do this for non-transactable items to get default sub and loc
4857
4858 IF (l_shp_dd_subs ( dd_count ) IS NULL) THEN
4859 --
4860 -- Debug Statements
4861 --
4862 IF l_debug_on THEN
4863 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_SUBINVENTORY',WSH_DEBUG_SV.C_PROC_LEVEL);
4864 END IF;
4865 --
4866 WSH_DELIVERY_DETAILS_INV.Default_Subinventory ( l_shp_dd_orgs ( dd_count ),
4867 l_shp_dd_items( dd_count ),
4868 dft_subinv,
4869 x_return_status);
4870 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
4871 raise ship_confirm_error;
4872 END IF;
4873
4874 END IF;
4875
4876 -- Removed Details_required from here , because it was already called in
4877 -- check_detail_for_confirm.
4878
4879 IF ((NVL(l_shp_dd_subs ( dd_count ),dft_subinv) IS NOT NULL) AND (l_shp_dd_locs ( dd_count ) IS NULL)) THEN
4880 --
4881 -- Debug Statements
4882 --
4883 IF l_debug_on THEN
4884 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.GET_ORG_LOC',WSH_DEBUG_SV.C_PROC_LEVEL);
4885 END IF;
4886 --
4887 org_loc_ctl := WSH_DELIVERY_DETAILS_INV.Get_Org_Loc (l_shp_dd_orgs ( dd_count ));
4888
4889 --
4890 -- Debug Statements
4891 --
4892 IF l_debug_on THEN
4893 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.SUB_LOC_CTL',WSH_DEBUG_SV.C_PROC_LEVEL);
4894 END IF;
4895 --
4896 sub_loc_ctl := WSH_DELIVERY_DETAILS_INV.Sub_Loc_Ctl (
4897 nvl(l_shp_dd_subs ( dd_count ),dft_subinv),
4898 l_shp_dd_orgs ( dd_count ));
4899
4900 item_loc_ctl := l_inv_controls_rec.location_control_code;
4901 --
4902 -- Debug Statements
4903 --
4904 IF l_debug_on THEN
4905 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.LOCATOR_CTL_CODE',WSH_DEBUG_SV.C_PROC_LEVEL);
4906 END IF;
4907 --
4908 loc_ctl_code := WSH_DELIVERY_DETAILS_INV.Locator_Ctl_Code(
4909 l_shp_dd_orgs ( dd_count ),
4910 l_inv_controls_rec.restrict_loc,
4911 org_loc_ctl,
4912 sub_loc_ctl,
4913 item_loc_ctl);
4914
4915 IF ( loc_ctl_code <> 1 ) THEN
4916 IF ( l_inv_controls_rec.restrict_loc = 1) THEN
4917 loc_restricted_flag := 'Y';
4918 ELSE
4919 loc_restricted_flag := 'N';
4920 END IF;
4921
4922 --
4923 -- Debug Statements
4924 --
4925 IF l_debug_on THEN
4926 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_INV.DEFAULT_LOCATOR',WSH_DEBUG_SV.C_PROC_LEVEL);
4927 END IF;
4928 --
4929 dft_loc_id := WSH_DELIVERY_DETAILS_INV.Default_Locator (
4930 l_shp_dd_orgs ( dd_count ),
4931 l_shp_dd_items ( dd_count ),
4932 NVL(l_shp_dd_subs ( dd_count ), dft_subinv),
4933 loc_restricted_flag);
4934 END IF;
4935
4936 -- performance bug 5257207: SC-13, do this update only when needed.
4937 IF (l_shp_dd_subs(dd_count) IS NULL AND dft_subinv IS NOT NULL)
4938 OR (dft_loc_id IS NOT NULL) THEN
4939 IF l_debug_on THEN
4940 WSH_DEBUG_SV.logmsg(l_module_name, 'updating subinv/locator');
4941 WSH_DEBUG_SV.log(l_module_name, 'dft_subinv', dft_subinv);
4942 WSH_DEBUG_SV.log(l_module_name, 'dft_loc_id', dft_loc_id);
4943 END IF;
4944 update wsh_delivery_details set
4945 subinventory = NVL(subinventory, dft_subinv),
4946 locator_id = NVL(locator_id, dft_loc_id)
4947 where delivery_detail_id = l_shp_dd_ids ( dd_count );
4948 END IF;
4949
4950 END IF;
4951 -- End for non-transactable items
4952
4953 END LOOP ;
4954
4955 IF (NOT l_inv_cntrl_flag) THEN
4956 IF l_debug_on THEN
4957 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4958 End If;
4959 If g_missing_inv_severity is null then
4960 g_missing_inv_severity := wsh_ru_actions.get_message_severity (wsh_new_delivery_actions.g_ship_confirm_act
4961 ,wsh_new_delivery_actions.g_missing_inv_cntl_msg);
4962 End If;
4963
4964 -- bug 2283621 - pass the l_inv_ctrl_dd_ids to the warning message
4965 IF l_debug_on THEN
4966 WSH_DEBUG_SV.log(l_module_name,'l_inv_ctrl_dd_ids - '|| l_inv_ctrl_dd_ids);
4967 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4968 END IF;
4969
4970 If g_missing_inv_severity = 'E' then
4971 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4972 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4973 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4974 wsh_util_core.add_message(x_return_status);
4975 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4976 l_num_error := l_num_error + 1;
4977 goto confirm_error_no_msg;
4978 Else
4979 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DETAILS_INV_CONTROLS');
4980 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_ctrl_dd_ids);
4981 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4982 wsh_util_core.add_message(x_return_status);
4983 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
4984 End If;
4985 END IF;
4986 /***************************Material Status Project***************************************/
4987 IF (NOT l_inv_material_flag) THEN
4988 IF l_debug_on THEN
4989 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
4990 End If;
4991 If g_missing_inv_severity is null then
4992 g_missing_inv_severity := wsh_ru_actions.get_message_severity (
4993 wsh_new_delivery_actions.g_ship_confirm_act,
4994 wsh_new_delivery_actions.g_invalid_material_status_msg);
4995 End If;
4996
4997 IF l_debug_on THEN
4998 WSH_DEBUG_SV.log(l_module_name,'l_inv_material_dd_ids - '|| l_inv_material_dd_ids);
4999 WSH_DEBUG_SV.log(l_module_name,'g_missing_inv_severity - '|| g_missing_inv_severity);
5000 END IF;
5001
5002 If g_missing_inv_severity = 'E' then
5003 FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
5004 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
5005 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5006 wsh_util_core.add_message(x_return_status);
5007 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5008 l_num_error := l_num_error + 1;
5009 goto confirm_error_no_msg;
5010 Else
5011 FND_MESSAGE.SET_NAME('WSH','WSH_DETAILS_MATERIAL_STATUS');
5012 FND_MESSAGE.Set_Token('DETAIL_IDS', l_inv_material_dd_ids);
5013 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5014 wsh_util_core.add_message(x_return_status);
5015 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5016 End If;
5017 END IF;
5018 /***************************Material Status Project***************************************/
5019
5020 --
5021 -- Debug Statements
5022 --
5023 IF l_debug_on THEN
5024 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_RELEASED_LINES',WSH_DEBUG_SV.C_PROC_LEVEL);
5025 END IF;
5026 --
5027 wsh_tpa_delivery_pkg.check_released_lines(
5028 p_del_rows(i), l_unassign_dds.count,
5029 l_detail_num-l_unassign_dds.count, l_return_status);
5030
5031 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5032 IF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR OR
5033 l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5034 l_num_error := l_num_error + 1 ;
5035 ELSE
5036 l_num_warn := l_num_warn + 1 ;
5037 END IF ;
5038 goto loop_end ;
5039 END IF ;
5040
5041
5042 -- Consolidation of BO Delivery Details project.
5043 -- At this point of time, some of the dd_ids in l_unassign_dds with released_status as 'B'
5044 -- might have been deleted by wsh_ship_confirm_actions2.backorder api.
5045 -- So checking whether dd_ids to be unassigned are already deleted.
5046 -- Do this only if there are lines to be unassigned AND there is atleast one delivery line BackOrdered.
5047 -- Begin
5048 IF (l_unassign_dds.COUNT > 0 AND (l_out_bo_rows.count > 0 OR l_out_cc_rows.count > 0)) THEN
5049 -- --{
5050 --
5051 -- Debug Statements
5052 --
5053 -- Shifted code to obtain Global parameters outside the Deliveries loop ***
5054
5055 IF l_debug_on THEN
5056 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);
5057 END IF;
5058
5059 IF (l_global_parameters.consolidate_bo_lines = 'Y') THEN
5060 -- --{
5061 -- l_out_bo_rows contains list of dd_ids that were Backordered
5062 -- l_out_cc_rows contains list of dd_ids that were Cycle Count
5063 IF (l_out_bo_rows.count > 0) THEN
5064 l_unassign_backordered_dds := l_out_bo_rows;
5065 ELSIF (l_out_cc_rows.count > 0) THEN
5066 l_unassign_backordered_dds := l_out_cc_rows;
5067 END IF;
5068
5069 -- Bug#3246327
5070 --
5071 -- Store backordered order line ids in the pl/sql table l_bo_line_ids
5072 IF (l_bo_source_lines.count > 0) THEN
5073 l_bo_line_ids := l_bo_source_lines; -- Assign the partial backordered soure lines to l_bo_line_ids
5074 ELSIF (l_cc_source_lines.count > 0 ) THEN -- Assign the partial cycle-count soure lines to l_bo_line_ids
5075 l_bo_line_ids := l_cc_source_lines;
5076 ELSIF (l_assigned_source_lines.count > 0) THEN -- Assign the completely backordered or cycle-counted lines
5077 l_bo_line_ids := l_assigned_source_lines;
5078 END IF;
5079
5080 -- Bug#3317692
5081 -- Compare l_unassign_source_lines and l_bo_line_ids and
5082 -- delete the entry in l_unassign_source_lines if it is not there in l_bo_line_ids.
5083 -- These changes are done to restrict the filtering of l_unassign_dds only
5084 -- if the corresponding line is backordered.
5085 l_idx := l_unassign_source_lines.FIRST;
5086 WHILE l_idx IS NOT NULL LOOP
5087 -- --{
5088 l_flag := 'N';
5089 l_cmp_idx := l_bo_line_ids.FIRST;
5090 WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5091 IF (l_unassign_source_lines(l_idx) = l_bo_line_ids(l_cmp_idx)) THEN
5092 l_flag := 'Y';
5093 EXIT;
5094 END IF;
5095 l_cmp_idx := l_bo_line_ids.NEXT(l_cmp_idx);
5096 END LOOP; -- --}
5097 IF l_flag = 'N' THEN
5098 l_unassign_source_lines.DELETE(l_idx);
5099 END IF;
5100 l_idx := l_unassign_source_lines.NEXT(l_idx);
5101 END LOOP; -- --}
5102 --
5103
5104 l_idx := l_unassign_dds.FIRST;
5105 WHILE l_idx IS NOT NULL LOOP
5106 -- --{
5107 -- Loop thru' l_unassign_dds and check whether delivery_detail_id exists
5108 -- in l_unassign_backordered_dds, if NOT then Delete that dd_id from l_unassign_dds because
5109 -- it must already be physically deleted by the backorder API.
5110 -- [ This check should happen for dd_ids in l_unassign_dds, ONLY if the released_status is 'B'
5111 -- and if the dd_id is under the backordered source line ]
5112 -- Filter l_unassign_dds only if the corresponding Order line is backordered. ie., l_unassign_source_lines.EXISTS
5113 IF (l_unassign_source_lines.EXISTS(l_idx) AND l_unassign_rel_status(l_idx) = 'B') THEN --{
5114 l_flag := 'N';
5115 l_cmp_idx := l_unassign_backordered_dds.FIRST;
5116 WHILE l_cmp_idx IS NOT NULL LOOP -- --{
5117 IF (l_unassign_dds(l_idx) = l_unassign_backordered_dds(l_cmp_idx)) THEN
5118 l_flag := 'Y';
5119 EXIT;
5120 END IF;
5121 l_cmp_idx := l_unassign_backordered_dds.NEXT(l_cmp_idx);
5122 END LOOP; -- --}
5123 IF l_flag = 'N' THEN
5124 l_unassign_dds.DELETE(l_idx);
5125 END IF;
5126 END IF; --}, l_unassign_rel_status(l_idx) = 'B'
5127 l_idx := l_unassign_dds.NEXT(l_idx);
5128 END LOOP; -- --}
5129 -- Now, l_unassign_dds contains only the not-deleted dd_ids.
5130
5131 l_unassign_backordered_dds.DELETE;
5132 j := l_unassign_dds.FIRST;
5133 -- Following loop just puts the dd_ids in contiguous locations in the pl/sql table
5134 WHILE j IS NOT NULL LOOP
5135 l_unassign_backordered_dds(l_unassign_backordered_dds.count+1) := l_unassign_dds(j);
5136 j := l_unassign_dds.NEXT(j);
5137 END LOOP;
5138 l_unassign_dds.DELETE;
5139 l_unassign_dds := l_unassign_backordered_dds;
5140 END IF; -- --}, l_global_parameters.consolidate_bo_lines
5141 END IF; -- --}, l_unassign_dds.count > 0
5142 -- End, Consolidation of BO Delivery Details project
5143
5144 --
5145 -- Debug Statements
5146 --
5147 IF l_debug_on THEN
5148 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5149 END IF;
5150
5151 -- Unassign the lines marked for unassigning.
5152 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5153 p_ids_tobe_unassigned => l_unassign_dds ,
5154 p_validate_flag => 'N', -- want it to succeed in case of Planned Deliveries
5155 x_return_status => l_return_status
5156 );
5157
5158 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5159 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5160 THEN
5161 x_return_status := l_return_status;
5162 l_num_error := l_num_error + 1 ;
5163 goto loop_end;
5164 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5165 l_num_warn := l_num_warn + 1;
5166 END IF;
5167
5168 --
5169 -- Debug Statements
5170 --
5171 IF l_debug_on THEN
5172 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.CONT_TOBE_UNASSIGNED',WSH_DEBUG_SV.C_PROC_LEVEL);
5173 END IF;
5174 -- Identify the Staged Lines or Containers to be Unassigned from the Delivery
5175 Cont_ToBe_Unassigned ( p_staged_lines => l_stage_rows,
5176 x_unassigned_cont => x_unassigned_cont,
5177 x_return_status => l_return_status
5178 );
5179
5180 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5181 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5182 THEN
5183 x_return_status := l_return_status;
5184 wsh_util_core.add_message(x_return_status);
5185 l_num_error := l_num_error + 1 ;
5186 goto loop_end;
5187 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5188 l_num_warn := l_num_warn + 1;
5189 END IF;
5190
5191 --
5192 -- Debug Statements
5193 --
5194 IF l_debug_on THEN
5195 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_DETAILS_ACTIONS.UNASSIGN_UNPACK_EMPTY_CONT',WSH_DEBUG_SV.C_PROC_LEVEL);
5196 END IF;
5197 -- Unassign Containers or Staged Lines using new API
5198 WSH_DELIVERY_DETAILS_ACTIONS.unassign_unpack_empty_cont(
5199 p_ids_tobe_unassigned => x_unassigned_cont ,
5200 p_validate_flag => 'N', -- want it to succeed for Planned Deliveries too
5201 x_return_status => l_return_status
5202 );
5203
5204 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5205 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR))
5206 THEN
5207 x_return_status := l_return_status;
5208 l_num_error := l_num_error + 1 ;
5209 goto loop_end;
5210 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5211 l_num_warn := l_num_warn + 1;
5212 END IF;
5213
5214 /* H integration: 945 cancel staged/unreleased */
5215 -- Cancel/delete lines marked for cancelling
5216 IF l_cancel_line_ids.count > 0 THEN
5217 --
5218 -- Debug Statements
5219 --
5220 IF l_debug_on THEN
5221 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_INTERFACE.DELETE_DETAILS',WSH_DEBUG_SV.C_PROC_LEVEL);
5222 END IF;
5223 --
5224 wsh_interface.delete_details(
5225 p_details_id => l_cancel_line_ids,
5226 x_return_status => l_return_status);
5227
5228 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5229 /* new message: WSH_DEL_CANCEL_DET_ERROR, token DEL_NAME */
5230 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5231 --
5232 -- Debug Statements
5233 --
5234 IF l_debug_on THEN
5235 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5236 END IF;
5237 --
5238 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5239 x_return_status := l_return_status;
5240 wsh_util_core.add_message(x_return_status);
5241 l_num_error := l_num_error + 1 ;
5242 goto loop_end;
5243 END IF;
5244 END IF;
5245
5246 -- Bug 5584951: Moved the call to after the call to unassign details.
5247
5248 FOR tmp_counter IN 1..l_stage_rows.count LOOP
5249 IF l_debug_on THEN
5250 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.Detail_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
5251 END IF;
5252
5253 WSH_WV_UTILS.Detail_Weight_Volume(
5254 p_delivery_detail_id => l_stage_rows(tmp_counter),
5255 p_update_flag => 'Y',
5256 p_post_process_flag => 'Y',
5257 p_calc_wv_if_frozen => 'N',
5258 x_net_weight => l_net_weight,
5259 x_volume => l_volume,
5260 x_return_status => l_return_status);
5261 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR THEN
5262 x_return_status := l_return_status;
5263 IF l_debug_on THEN
5264 WSH_DEBUG_SV.pop(l_module_name,'Detail_Weight_Volume returned '||l_return_status);
5265 WSH_DEBUG_SV.pop(l_module_name);
5266 END IF;
5267 return;
5268 END IF;
5269 END LOOP;
5270
5271 -- Bug 2527887 : Moved this call after unassigning detail lines from delivery since the check will not work
5272 -- if the pending overpick lines are still assigned to the delivery
5273 -- 10.5 Make sure no source lines with at total requested qty of zero are shipped or left behind
5274
5275 --
5276 -- Debug Statements
5277 --
5278 IF l_debug_on THEN
5279 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DETAILS_VALIDATIONS.CHECK_ZERO_REQ_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5280 END IF;
5281 --
5282 WSH_DETAILS_VALIDATIONS.check_zero_req_confirm(p_delivery_id => p_del_rows(i),
5283 x_return_status => l_return_status);
5284
5285 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5286 x_return_status := l_return_Status ;
5287 --wsh_util_core.add_message(x_return_status);
5288 l_delivery_id := p_del_rows(i);
5289 goto confirm_error_no_msg;
5290 END IF;
5291
5292
5293 -- Code Shifted from below 12. *** to here, since this is a mandatory step now - Workflow Changes
5294 IF l_debug_on THEN
5295 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_SHIPPING_PARAMS_PVT.GET',WSH_DEBUG_SV.C_PROC_LEVEL);
5296 END IF;
5297 --
5298 WSH_SHIPPING_PARAMS_PVT.Get(
5299 p_organization_id => l_organization_id,
5300 x_param_info => l_param_info,
5301 x_return_status => l_return_status
5302 );
5303
5304
5305 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5306 FND_MESSAGE.Set_Name('WSH', 'WSH_PARAM_NOT_DEFINED');
5307 --
5308 -- Debug Statements
5309 --
5310 IF l_debug_on THEN
5311 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.GET_ORG_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5312 END IF;
5313 --
5314 FND_MESSAGE.Set_Token('ORGANIZAION_CODE',
5315 wsh_util_core.get_org_name(l_organization_id));
5316 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5317 wsh_util_core.add_message(x_return_status);
5318 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
5319 goto confirm_error;
5320 END IF;
5321 --/== Workflow Changes
5322 l_enable_sc_wf := 'N'; --Workflow Changes
5323 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
5324 --
5325 -- Debug Statements
5326 --
5327 IF l_debug_on THEN
5328 WSH_DEBUG_SV.log(l_module_name,'l_override_wf',l_override_wf);
5329 WSH_DEBUG_SV.log(l_module_name,'l_param_info.Enable_sc_wf',l_param_info.Enable_sc_wf);
5330 WSH_DEBUG_SV.log(l_module_name,'l_global_parameters.Enable_sc_wf',l_global_parameters.Enable_sc_wf);
5331 WSH_DEBUG_SV.log(l_module_name,'l_global_parameters.allow_future_ship_date',l_global_parameters.allow_future_ship_date);
5332 END IF;
5333 --
5334 IF (l_param_info.Enable_sc_wf = 'Y' AND l_global_parameters.Enable_sc_wf = 'Y' AND nvl(l_override_wf,'N') = 'N') THEN
5335 -- Bug 8555654 : Should not start the workflow if ship confirm is going to fail due to actual dep. date validation.
5336 IF ( (nvl(p_actual_dep_date,sysdate) > sysdate)
5337 AND (nvl(l_global_parameters.allow_future_ship_date, 'N') = 'N')
5338 AND (p_intransit_flag = 'Y' OR p_close_flag = 'Y') ) THEN
5339 --{
5340 l_enable_sc_wf := 'N';
5341 ELSE
5342 l_enable_sc_wf := 'Y';
5343 --}
5344 END IF;
5345 -- Bug 8555654 : : End
5346 END IF;
5347 -- Debug Statements
5348 --
5349 IF l_debug_on THEN
5350 WSH_DEBUG_SV.log(l_module_name,'l_enable_sc_wf',l_enable_sc_wf);
5351 END IF;
5352 --
5353 --==/
5354
5355
5356 -- 9. If p_stage_del_flag= 'Y' then create deliveries for the stored delivery details above
5357
5358 IF (p_stage_del_flag = 'Y') AND (l_stage_rows.count > 0) THEN
5359 --
5360 -- Debug Statements
5361 --
5362 IF l_debug_on THEN
5363 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_AUTOCREATE.AUTOCREATE_DELIVERIES',WSH_DEBUG_SV.C_PROC_LEVEL);
5364 END IF;
5365 --
5366 wsh_delivery_autocreate.autocreate_deliveries(
5367 p_line_rows => l_stage_rows ,
5368 p_init_flag => 'Y' ,
5369 p_pick_release_flag => 'N' ,
5370 p_container_flag => 'N' ,
5371 p_check_flag => 'N' ,
5372 p_max_detail_commit => 1000,
5373 x_del_rows => l_dummy_rows ,
5374 x_grouping_rows => l_dummy_rows ,
5375 x_return_status => l_return_status ) ;
5376
5377 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
5378 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5379 l_num_warn := l_num_warn + 1;
5380 ELSIF (x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5381 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5382 l_num_error := l_num_error + 1;
5383 END IF;
5384
5385 --deliveryMerge
5386 IF l_debug_on THEN
5387 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag',WSH_DEBUG_SV.C_PROC_LEVEL);
5388 END IF;
5389 WSH_NEW_DELIVERY_ACTIONS.Adjust_Planned_Flag(
5390 p_delivery_ids => l_dummy_rows,
5391 p_caller => 'WSH_DLMG',
5392 p_force_appending_limit => 'N',
5393 p_call_lcss => 'Y',
5394 p_event => NULL,
5395 x_return_status => l_return_status);
5396
5397 IF l_debug_on THEN
5398 WSH_DEBUG_SV.log(l_module_name,'Adjust_Planned_Flag l_return_status',l_return_status);
5399 END IF;
5400
5401 IF x_return_status in (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5402 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5403 l_num_warn := l_num_warn + 1;
5404 ELSIF x_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
5405 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5406 l_num_error := l_num_error + 1;
5407 END IF;
5408
5409
5410 END IF;
5411
5412 -- Bug 1729723 : Updating number_of_lpn for delivery , 1672188 : now doing it after unassignments.
5413
5414 l_number_of_lpn(i) := NULL;
5415 OPEN number_of_lpn(p_del_rows(i));
5416 FETCH number_of_lpn into l_number_of_lpn (i) ;
5417 CLOSE number_of_lpn;
5418
5419
5420 -- Check that all overpicked lines for one source line are in the same delivery,
5421 -- so that we can guarantee that these lines will get interfaced to OM.
5422 -- we might look up CURSOR overpicked_outside_delivery( v_delivery_id in number ) or have new API...
5423
5424 -- 12. Calculate Weight volume etc
5425 --
5426 -- Debug Statements
5427 --
5428 --- Code to obtain Shipping parameters shifted from here *** - Workflow Changes
5429 l_enforce_packing_flag := l_param_info.enforce_packing_flag;
5430
5431 -- Pack J, ITM -- Check if delivery needs to be marked for export compliance.
5432 l_itm_exc_severity := '-99';
5433
5434 IF l_debug_on THEN
5435 wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5436 END IF;
5437
5438 IF l_param_info.export_screening_flag IN ('S', 'A') THEN
5439
5440
5441 IF l_debug_on THEN
5442 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',WSH_DEBUG_SV.C_PROC_LEVEL);
5443 END IF;
5444 --Bug 9326608 Changed l_itm_exc_flag to use i as index
5445 l_itm_exc_flag(i) := WSH_DELIVERY_VALIDATIONS.Check_ITM_Required
5446 (p_delivery_id => p_del_rows(i),
5447 x_return_status => l_return_status);
5448 IF l_debug_on THEN
5449 wsh_debug_sv.log(l_module_name,'Return Status After Calling WSH_DELIVERY_VALIDATIONS.Check_ITM_Required',l_return_status);
5450 WSH_DEBUG_SV.logmsg(l_module_name,'ITM flag: '||l_param_info.export_screening_flag);
5451 wsh_debug_sv.log(l_module_name,'l_itm_exc_flag for delivery: '|| p_del_rows(i),l_itm_exc_flag(i)); --Bug 9326608
5452 END IF;
5453
5454 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5455 goto confirm_error;
5456 END IF;
5457 -- Find out the severity of the exception if it is enabled.
5458 --Bug 9326608 Changed l_itm_exc_flag to use i as index
5459 IF l_itm_exc_flag(i) = 'Y' THEN
5460
5461 OPEN c_exc_severity('WSH_SC_REQ_EXPORT_COMPL');
5462 FETCH c_exc_severity INTO l_itm_exc_severity;
5463 CLOSE c_exc_severity;
5464
5465 END IF;
5466
5467 IF l_debug_on THEN
5468 wsh_debug_sv.log(l_module_name,'severity of ITM exception',l_itm_exc_severity);
5469 END IF;
5470 ELSE
5471 --Bug 9326608 Changed l_itm_exc_flag to use i as index
5472 l_itm_exc_flag(i) := 'N';
5473
5474 END IF;
5475
5476
5477 -- J: W/V Changes
5478 -- 12.5 Give warning if delivery W/V is null depending on percent_fill_basis_flag
5479
5480 IF (NOT l_unassign_all_flag_tab(i)) THEN
5481 -- Bug # 7580785: Removed the call WSH_WV_UTILS.Delivery_Weight_Volume from here
5482 -- as it is overriding the manually updated WMS LPN weights at the time of ship confirm.
5483
5484 -- Get the latest W/V information.
5485 OPEN get_delivery_wv(p_del_rows(i));
5486 FETCH get_delivery_wv INTO l_gross_weight, l_volume;
5487 CLOSE get_delivery_wv;
5488
5489 IF l_debug_on THEN
5490 WSH_DEBUG_SV.logmsg(l_module_name,'Gross '||l_gross_weight||' Volume '||l_volume||' Fill basis '||l_param_info.percent_fill_basis_flag);
5491 END IF;
5492
5493 IF (l_param_info.percent_fill_basis_flag = 'W' and l_gross_weight is NULL) THEN
5494 FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5495 IF l_debug_on THEN
5496 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5497 END IF;
5498 --
5499 FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5500 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5501 FND_MESSAGE.SET_TOKEN('WV','Weight');
5502 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5503 wsh_util_core.add_message(x_return_status);
5504 l_num_warn := l_num_warn + 1;
5505 END IF;
5506
5507 IF (l_param_info.percent_fill_basis_flag = 'V' and l_volume is NULL) THEN
5508 FND_MESSAGE.SET_NAME('WSH','WSH_NULL_WV');
5509 IF l_debug_on THEN
5510 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5511 END IF;
5512 --
5513 FND_MESSAGE.SET_TOKEN('ENTITY_TYPE','Delivery');
5514 FND_MESSAGE.SET_TOKEN('ENTITY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5515 FND_MESSAGE.SET_TOKEN('WV','Volume');
5516 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5517 wsh_util_core.add_message(x_return_status);
5518 l_num_warn := l_num_warn + 1;
5519 END IF;
5520 END IF;
5521 -- End J: W/V Changes
5522
5523 -- 2732719
5524 -- Calculate fill pc of the containers in the delivery
5525
5526 l_underfilled_flag := FALSE;
5527 l_overfilled_flag := FALSE;
5528 IF l_debug_on THEN
5529 WSH_DEBUG_SV.log(l_module_name,'COUNT -'||l_shp_dd_cont_ids.count);
5530 END IF;
5531
5532 FOR rec_count in 1..l_shp_dd_cont_ids.count
5533 LOOP
5534 IF l_debug_on THEN
5535 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.CHECK_FILL_PC',WSH_DEBUG_SV.C_PROC_LEVEL);
5536 WSH_DEBUG_SV.log(l_module_name,'Cont -'||l_shp_dd_cont_ids(rec_count));
5537 END IF;
5538 --
5539 wsh_wv_utils.check_fill_pc( p_container_instance_id => l_shp_dd_cont_ids(rec_count),
5540 x_fill_status => l_fill_status,
5541 x_return_status => l_return_status);
5542
5543 IF l_debug_on THEN
5544 WSH_DEBUG_SV.log(l_module_name,'RET STS -'||l_return_status);
5545 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_fill_status);
5546 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5547 END IF;
5548
5549 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
5550 WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5551 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5552 ELSIF ( l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ) THEN
5553 raise ship_confirm_error;
5554 ELSIF (l_fill_status = 'U') THEN
5555 l_underfilled_flag := TRUE;
5556 ELSIF (l_fill_status = 'O') THEN
5557 l_overfilled_flag := TRUE;
5558 END IF;
5559
5560 -- Bug 2878538
5561 -- If l_save_fill_status is already saving U(nderfill) or O(verfill),then
5562 -- don't override,else override if it is Null or S(uccess)
5563 IF nvl(l_save_fill_status,'X') = 'S' THEN
5564 l_save_fill_status := l_fill_status;
5565 END IF;
5566
5567 IF l_debug_on THEN
5568 WSH_DEBUG_SV.log(l_module_name,'Fill St -'||l_save_fill_status);
5569 END IF;
5570
5571 END LOOP;
5572
5573 l_fill_status := l_save_fill_status;
5574
5575 IF l_debug_on THEN
5576 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP RET STS -'||l_return_status);
5577 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP SAV STS -'||l_save_fill_status);
5578 WSH_DEBUG_SV.log(l_module_name,'AFTER LOOP Fill St -'||l_fill_status);
5579 END IF;
5580
5581 -- 2732719
5582 -- Calculate fill pc of the containers in the delivery
5583
5584
5585 -- Calculate weight volume for the delivery
5586
5587 -- 13. Call check_confirm , it only has the TPA validations now.
5588
5589 -- 2131459 - added check for l_unassign_all_flag_tab(i) and include steps 15 and 18 in this check
5590 IF (NOT l_unassign_all_flag_tab(i)) THEN
5591
5592
5593
5594 -- Create trip from deconsol location to ultimate drop off
5595 -- consol deliveriers.
5596
5597 IF l_mdc_co_del_tab.count > 0 THEN
5598
5599 Create_Deconsol_Trips(p_deliveries_tab => p_del_rows,
5600 x_return_status => l_return_status);
5601
5602 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
5603 raise ship_confirm_error;
5604 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5605 l_num_warn := l_num_warn + 1;
5606 END IF;
5607
5608
5609 END IF;
5610 --
5611 -- Debug Statements
5612 --
5613 IF l_debug_on THEN
5614 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_CONFIRM',WSH_DEBUG_SV.C_PROC_LEVEL);
5615 END IF;
5616 --
5617 wsh_delivery_validations.check_confirm(
5618 p_delivery_id => p_del_rows(i),
5619 p_actual_dep_date => p_actual_dep_date,
5620 p_cont_exists_flag => l_cont_exists_flag ,
5621 p_enforce_packing_flag => l_enforce_packing_flag,
5622 p_ship_from_location => l_ship_from_location,
5623 p_ship_to_location => l_ship_to_location,
5624 p_freight_code => l_freight_code ,
5625 p_overfilled_flag => l_overfilled_flag,
5626 p_underfilled_flag => l_underfilled_flag,
5627 p_organization_id => l_organization_id ,
5628 p_initial_pickup_date => l_initial_pickup_date(i),
5629 p_ultimate_dropoff_date => l_ultimate_dropoff_date(i),
5630 x_return_status => l_return_status ) ;
5631
5632 /*
5633 ** begin bug 2426743
5634 ** Warning should not set the message that delivery will not be confirmed.
5635 ** Error should rollback and not continue processing this delivery.
5636 */
5637 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)) THEN
5638
5639 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
5640 --
5641 -- Debug Statements
5642 --
5643 IF l_debug_on THEN
5644 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5645 END IF;
5646 --
5647 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5648 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5649 wsh_util_core.add_message(x_return_status);
5650 goto confirm_error_no_msg;
5651
5652 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5653 -- Bug 2711786
5654 -- for ship set,but this would include other validations done in
5655 -- check_confirm API like for SMC also
5656 IF l_batch_id IS NOT NULL THEN
5657 -- FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CANCEL_DET_ERROR');
5658 -- x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
5659 -- wsh_util_core.add_message(x_return_status);
5660 l_num_error := l_num_error + 1;
5661 goto confirm_error_no_msg;
5662 END IF;
5663 -- Bug 2711786
5664
5665 --Ship Message Customization Project Change START
5666 IF l_debug_on THEN
5667 WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5668 END IF;
5669 If g_break_ship_set_or_smc > 0 then
5670 g_break_ship_set_or_smc := 0 ;
5671 l_num_error := l_num_error + 1;
5672 IF l_debug_on THEN
5673 WSH_DEBUG_SV.logmsg(l_module_name,'l_num_error ',l_num_error);
5674 WSH_DEBUG_SV.logmsg(l_module_name,'g_break_ship_set_or_smc ',g_break_ship_set_or_smc);
5675 END IF;
5676 goto confirm_error_no_msg;
5677 End If;
5678 --Ship Message Customization Project Change END
5679
5680 l_num_warn := l_num_warn + 1;
5681 END IF;
5682 /*
5683 ** end bug 2426743
5684 */
5685
5686 -- Sequence delivery legs ( IS DONE IN CHECK_CONFIRM )
5687
5688 IF (l_enforce_packing_flag = 'Y') THEN
5689
5690 --
5691 -- Debug Statements
5692 --
5693 IF l_debug_on THEN
5694 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TPA_DELIVERY_PKG.CHECK_DEL_UNPACKED',WSH_DEBUG_SV.C_PROC_LEVEL);
5695 END IF;
5696 --
5697 wsh_tpa_delivery_pkg.check_del_unpacked
5698 (l_delivery_id,
5699 l_cont_exists_flag,
5700 l_unpacked_flag,
5701 l_return_status);
5702
5703 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5704 THEN
5705 x_return_status := l_return_status;
5706 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5707 raise ship_confirm_error;
5708 ELSE
5709 l_num_warn := l_num_warn + 1;
5710 END IF;
5711 END IF;
5712 END IF;
5713
5714 -- 15. Generate Packing Slip
5715 create_pack_slip(
5716 p_delivery_id => p_del_rows(i),
5717 x_return_status => l_return_status);
5718
5719 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5720 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
5721 THEN
5722 l_num_error := l_num_error + 1;
5723 goto loop_end;
5724 ELSE
5725 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_PACK_SLIP_ERROR');
5726 --
5727 -- Debug Statements
5728 --
5729 IF l_debug_on THEN
5730 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5731 END IF;
5732 --
5733 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5734 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
5735 wsh_util_core.add_message(x_return_status);
5736 l_num_warn := l_num_warn + 1;
5737 END IF;
5738 END IF;
5739
5740 -- 18. if p_intransit_flag = 'Y' and autocreate trip then set the pickup stop to closed
5741 -- Autocreate trip if necessary (trip stuff)
5742
5743 l_pickup_stop_id := NULL ;
5744 l_dropoff_stop_id := NULL ;
5745 l_delivery_leg_id := NULL ;
5746 l_parent_delivery_id := NULL;
5747 l_trip_id := NULL ;
5748
5749 OPEN del_legs (p_del_rows(i));
5750 FETCH del_legs
5751 INTO l_pickup_stop_id,
5752 l_dropoff_stop_id,
5753 l_delivery_leg_id,
5754 l_parent_delivery_id;
5755 CLOSE del_legs;
5756
5757 -- Note that the above FETCH might miss some legs if the delivery is assigned to mult. legs!!!!!!!!
5758
5759 -- K: MDC: collect the deliveries that
5760 -- have parent deliveries.
5761 -- Note that this table may not be gapless.
5762 IF l_parent_delivery_id IS NULL THEN
5763
5764 OPEN get_consol_del(p_del_rows(i));
5765 FETCH get_consol_del
5766 INTO l_parent_delivery_id;
5767 CLOSE get_consol_del;
5768
5769 END IF;
5770
5771 IF l_parent_delivery_id IS NOT NULL THEN
5772
5773 l_mdc_co_del_tab(i) := l_parent_delivery_id;
5774
5775 END IF;
5776
5777 IF l_debug_on THEN
5778 wsh_debug_sv.log(l_module_name,'delivery',p_del_rows(i));
5779 wsh_debug_sv.log(l_module_name,'l_pickup_stop_id',l_pickup_stop_id);
5780 wsh_debug_sv.log(l_module_name,'l_dropoff_stop_id',l_dropoff_stop_id);
5781 wsh_debug_sv.log(l_module_name,'l_delivery_leg_id',l_delivery_leg_id);
5782 wsh_debug_sv.log(l_module_name,'l_parent_delivery_id',l_parent_delivery_id);
5783 END IF;
5784
5785 /* Bug 2313359 Trip Information is Lost */
5786
5787 IF (l_pickup_stop_id IS NULL) THEN
5788 l_del_rows( 1 ) := p_del_rows(i);
5789
5790 --Compatiblity Changes
5791 --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
5792 --bug 2811489 : call should be made regardless of ship_method being null
5793 IF wsh_util_core.fte_is_installed='Y' THEN
5794
5795 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5796 p_api_version_number => 1.0,
5797 p_init_msg_list => FND_API.G_FALSE,
5798 p_entity_type => 'D',
5799 p_target_id => l_target_trip_id,
5800 p_action_code => 'AUTOCREATE-TRIP',
5801 p_del_attr_tab => l_cc_del_attr_tab,
5802 p_det_attr_tab => l_cc_det_attr_tab,
5803 p_trip_attr_tab => l_cc_trip_attr_tab,
5804 p_stop_attr_tab => l_cc_stop_attr_tab,
5805 p_in_ids => l_del_rows,
5806 x_fail_ids => l_cc_fail_ids,
5807 x_validate_result => l_cc_validate_result,
5808 x_failed_lines => l_cc_failed_records,
5809 x_line_groups => l_cc_line_groups,
5810 x_group_info => l_cc_group_info,
5811 x_msg_count => l_msg_count,
5812 x_msg_data => l_msg_data,
5813 x_return_status => l_return_status);
5814
5815
5816 IF l_debug_on THEN
5817 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and no ship method');
5818 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5819 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5820 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5821 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5822 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_failed_records.COUNT);
5823 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5824 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5825 END IF;
5826 --
5827
5828 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5829 IF l_cc_failed_records.COUNT>0 THEN
5830
5831 IF l_debug_on THEN
5832 wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
5833 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5834 END IF;
5835
5836 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
5837 FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5838 x_return_status := l_return_status;
5839 wsh_util_core.add_message(x_return_status);
5840 goto confirm_error;
5841 ELSE
5842 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5843 l_num_warn := l_num_warn + 1;
5844 END IF;
5845 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5846 x_return_status := l_return_status;
5847 goto confirm_error;
5848 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5849 x_return_status := l_return_status;
5850 l_num_warn := l_num_warn + 1;
5851 END IF;
5852 END IF;
5853 --Compatiblity Changes
5854
5855 --
5856 -- Debug Statements
5857 --
5858 IF l_debug_on THEN
5859 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.AUTOCREATE_TRIP',WSH_DEBUG_SV.C_PROC_LEVEL);
5860 END IF;
5861 --
5862
5863 --heali :Shipment Advice change for trip Consolidation.
5864 IF (p_autocreate_trip_flag = 'Y' ) THEN
5865 wsh_trips_actions.autocreate_trip(
5866 p_del_rows => l_del_rows,
5867 x_trip_id => l_trip_id,
5868 x_trip_name => l_trip_name,
5869 x_return_status => l_return_status,
5870 -- Bug 3913206
5871 p_sc_pickup_date => l_sc_pickup_date,
5872 p_sc_dropoff_date => l_sc_dropoff_date
5873 );
5874
5875 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)
5876 THEN
5877 x_return_status := l_return_status;
5878 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_AUTOCREATE_TRIP_ERROR');
5879
5880 IF l_debug_on THEN
5881 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
5882 END IF;
5883 --
5884 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
5885 wsh_util_core.add_message(x_return_status);
5886 goto confirm_error;
5887 END IF;
5888 END IF;
5889 END IF;
5890 --heali :Shipment Advice change for trip Consolidation.
5891
5892
5893 -- Bug 2213342 : Ship Confirm Defaulting behavior
5894 IF l_trip_id IS NULL THEN
5895
5896 --Compatibility Changes
5897 -- if trip already exists, need to check for must use constraints if carrier/mode is null
5898 IF wsh_util_core.fte_is_installed='Y' THEN
5899 l_trip_info_tab.delete;
5900 l_cc_count_success:=0;
5901
5902 IF l_debug_on THEN
5903 wsh_debug_sv.log(l_module_name,'HASH_TRIP count',G_HASH_TRIP.COUNT);
5904 END IF;
5905
5906 FOR cur in Get_Trip(p_del_rows(i)) LOOP
5907 b_tripalreadychecked:='N';
5908 IF G_HASH_TRIP.COUNT>0 THEN
5909 FOR l_count_hashtrip in G_HASH_TRIP.FIRST..G_HASH_TRIP.LAST LOOP
5910 IF G_HASH_TRIP(l_count_hashtrip)=cur.trip_id THEN
5911 b_tripalreadychecked:='Y';
5912 IF l_debug_on THEN
5913 wsh_debug_sv.log(l_module_name,'HASH_TRIP matched', cur.trip_id);
5914 END IF;
5915 END IF;
5916 END LOOP;
5917 END IF;
5918
5919 --IF (b_tripalreadychecked='N' and (cur.carrier_id is null or cur.mode_of_transport is null)) THEN
5920 IF (b_tripalreadychecked='N' and
5921 (cur.ship_method_code is null and (cur.carrier_id is null or cur.mode_of_transport is null))
5922 ) THEN
5923
5924 IF l_debug_on THEN
5925 wsh_debug_sv.log(l_module_name,'trip not already checked',cur.trip_id);
5926 END IF;
5927 l_cc_count_success:=l_cc_count_success+1;
5928 l_trip_info_tab(l_cc_count_success).trip_id:=cur.trip_id;
5929 l_trip_info_tab(l_cc_count_success).ship_method_code:=cur.ship_method_code;
5930 l_trip_info_tab(l_cc_count_success).carrier_id:=cur.carrier_id;
5931 l_trip_info_tab(l_cc_count_success).mode_of_transport:=cur.mode_of_transport;
5932 G_HASH_TRIP(G_HASH_TRIP.COUNT+1):=cur.trip_id;
5933 END IF;
5934 END LOOP;
5935
5936 IF l_debug_on THEN
5937 wsh_debug_sv.log(l_module_name,'l_trip_info_tab.COUNT : ',l_trip_info_tab.COUNT);
5938 END IF;
5939
5940
5941 IF l_trip_info_tab.COUNT>0 THEN
5942
5943 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
5944 p_api_version_number => 1.0,
5945 p_init_msg_list => FND_API.G_FALSE,
5946 p_entity_type => 'T',
5947 p_target_id => l_target_trip_id,
5948 p_action_code => 'UPDATE',
5949 p_del_attr_tab => l_cc_del_attr_tab,
5950 p_det_attr_tab => l_cc_det_attr_tab,
5951 p_trip_attr_tab => l_trip_info_tab,
5952 p_stop_attr_tab => l_cc_stop_attr_tab,
5953 p_in_ids => l_cc_in_ids,
5954 x_fail_ids => l_cc_fail_ids,
5955 x_validate_result => l_cc_validate_result,
5956 x_failed_lines => l_cc_failed_records,
5957 x_line_groups => l_cc_line_groups,
5958 x_group_info => l_cc_group_info,
5959 x_msg_count => l_msg_count,
5960 x_msg_data => l_msg_data,
5961 x_return_status => l_return_status);
5962
5963 IF l_debug_on THEN
5964 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with trip already present');
5965 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
5966 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
5967 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
5968 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
5969 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
5970 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
5971 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
5972 wsh_debug_sv.log(l_module_name,'HASH_TRIP trip_id',G_HASH_TRIP(1));
5973 END IF;
5974 --
5975
5976 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
5977 IF l_cc_fail_ids.COUNT>0 THEN
5978
5979 IF l_debug_on THEN
5980 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit wsh_trips_pvt.get_name',WSH_DEBUG_SV.C_PROC_LEVEL);
5981 END IF;
5982
5983 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_COMP_FAILED');
5984 FND_MESSAGE.SET_TOKEN('TRIP_ID',wsh_trips_pvt.get_name(l_cc_fail_ids(1)));
5985 x_return_status := l_return_status;
5986 wsh_util_core.add_message(x_return_status);
5987 goto confirm_error;
5988 ELSE
5989 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
5990 l_num_warn := l_num_warn + 1;
5991 END IF;
5992 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
5993 x_return_status := l_return_status;
5994 goto confirm_error;
5995 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
5996 x_return_status := l_return_status;
5997 l_num_warn := l_num_warn + 1;
5998 END IF;
5999
6000 END IF;--for trip_tab count>0
6001 END IF;
6002 --Compatibility Changes
6003
6004 -- bug 2432330: to show expected warning, code has to count deliveries with
6005 -- existing stops:
6006 -- delivery has existing trip and will not be set in transit or closed.
6007 l_close_confirm_flag := 'F';
6008
6009 l_with_mc_trip_flag(i) := TRUE;
6010
6011
6012 IF p_ship_method IS NOT NULL THEN -- trip already exists...
6013 -- Bug 3347549 update the ship method components for
6014 -- the fisrt trip on the delivery.
6015
6016 OPEN get_del_first_trip(p_del_rows(i));
6017 FETCH get_del_first_trip into l_del_first_trip;
6018 CLOSE get_del_first_trip;
6019
6020 IF l_del_first_trip IS NULL THEN
6021
6022 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6023 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6024 wsh_util_core.add_message(x_return_status);
6025 goto confirm_error;
6026
6027 ELSE
6028
6029 l_carrier_rec.ship_method_code := p_ship_method;
6030
6031
6032 WSH_CARRIERS_GRP.get_carrier_service_mode(
6033 p_carrier_service_inout_rec => l_carrier_rec,
6034 x_return_status => l_return_status);
6035
6036 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6037 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6038 goto confirm_error;
6039 END IF;
6040
6041 BEGIN
6042
6043 WSH_TRIPS_PVT.lock_trip_no_compare(l_del_first_trip);
6044
6045 EXCEPTION
6046
6047 WHEN app_exception.application_exception OR app_exception.record_lock_exception THEN
6048 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6049 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_STOP_TRIP_LOCK');
6050 FND_MESSAGE.SET_TOKEN('DLVY_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6051 wsh_util_core.add_message(x_return_status);
6052 goto confirm_error;
6053
6054 END;
6055
6056 UPDATE wsh_trips
6057 SET ship_method_code = p_ship_method,
6058 service_level = l_carrier_rec.service_level,
6059 mode_of_transport = l_carrier_rec.mode_of_transport,
6060 carrier_id = l_carrier_rec.carrier_id
6061 WHERE trip_id = l_del_first_trip;
6062
6063 IF (SQL%NOTFOUND) THEN
6064 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6065 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6066 wsh_util_core.add_message(x_return_status);
6067 goto confirm_error;
6068 END IF;
6069
6070 END IF;
6071
6072 END IF;
6073
6074 ELSE
6075 /* H integration - call MultiLeg FTE */
6076 IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
6077 -- Get pvt type record structure for trip
6078 --
6079 -- Debug Statements
6080 --
6081 IF l_debug_on THEN
6082 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.GET_TRIP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
6083 END IF;
6084 --
6085 wsh_trips_grp.get_trip_details_pvt
6086 (p_trip_id => l_trip_id,
6087 x_trip_rec => l_trip_rec,
6088 x_return_status => l_return_status);
6089 IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6090 x_return_status := l_return_status;
6091 wsh_util_core.add_message(x_return_status);
6092 goto confirm_error;
6093 END IF;
6094
6095 -- this is the updated record
6096 l_trip_rec.ship_method_code :=
6097 nvl(p_ship_method,l_trip_rec.ship_method_code);
6098
6099 -- Call FTE
6100 --
6101 -- Debug Statements
6102 --
6103 IF l_debug_on THEN
6104 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
6105 END IF;
6106 --
6107 wsh_fte_integration.trip_stop_validations
6108 (p_stop_rec => l_stop_rec,
6109 p_trip_rec => l_trip_rec,
6110 p_action => 'UPDATE',
6111 x_return_status => l_return_status);
6112
6113 /* H integration changes */
6114 IF l_return_status <>WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
6115 IF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6116 l_num_warn := l_num_warn + 1;
6117 ELSE
6118 x_return_status := l_return_status;
6119 wsh_util_core.add_message(x_return_status);
6120 goto confirm_error;
6121 END IF;
6122 END IF;
6123 END IF;
6124
6125 /* End of H integration - call MultiLeg FTE */
6126
6127
6128 --Compatiblity Changes
6129 --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
6130 --bug 2811489 : call should be made regardless of ship_method being null
6131 IF wsh_util_core.fte_is_installed='Y' THEN
6132
6133 --only one record
6134 l_trip_info_tab(1).trip_id:=l_trip_id;
6135 IF p_ship_method is not null THEN
6136 l_trip_info_tab(1).ship_method_code:=p_ship_method;
6137 ELSE -- ship method is not specified as an option, existing carrier, mode
6138 -- have to be checked for must use constraints
6139 l_trip_info_tab(1).ship_method_code :=l_trip_rec.ship_method_code;
6140 l_trip_info_tab(1).carrier_id :=l_trip_rec.carrier_id;
6141 l_trip_info_tab(1).mode_of_transport :=l_trip_rec.mode_of_transport;
6142 END IF;
6143
6144 WSH_FTE_COMP_CONSTRAINT_PKG.validate_constraint_main(
6145 p_api_version_number => 1.0,
6146 p_init_msg_list => FND_API.G_FALSE,
6147 p_entity_type => 'T',
6148 p_target_id => l_target_trip_id,
6149 p_action_code => 'UPDATE',
6150 p_del_attr_tab => l_cc_del_attr_tab,
6151 p_det_attr_tab => l_cc_det_attr_tab,
6152 p_trip_attr_tab => l_trip_info_tab,
6153 p_stop_attr_tab => l_cc_stop_attr_tab,
6154 p_in_ids => l_cc_in_ids,
6155 x_fail_ids => l_cc_fail_ids,
6156 x_validate_result => l_cc_validate_result,
6157 x_failed_lines => l_cc_failed_records,
6158 x_line_groups => l_cc_line_groups,
6159 x_group_info => l_cc_group_info,
6160 x_msg_count => l_msg_count,
6161 x_msg_data => l_msg_data,
6162 x_return_status => l_return_status);
6163
6164 IF l_debug_on THEN
6165 wsh_debug_sv.logmsg(l_module_name,'Ship confirm with autocreatetrip and ship method');
6166 wsh_debug_sv.log(l_module_name,'Return Status After Calling validate_constraint_main',l_return_status);
6167 wsh_debug_sv.log(l_module_name,'validate_result After Calling validate_constraint_main',l_cc_validate_result);
6168 wsh_debug_sv.log(l_module_name,'msg_count After Calling validate_constraint_main',l_msg_count);
6169 wsh_debug_sv.log(l_module_name,'msg_data After Calling validate_constraint_main',l_msg_data);
6170 wsh_debug_sv.log(l_module_name,'fail_ids count After Calling validate_constraint_main',l_cc_fail_ids.COUNT);
6171 wsh_debug_sv.log(l_module_name,'l_cc_line_groups.count count After Calling validate_constraint_main',l_cc_line_groups.COUNT);
6172 wsh_debug_sv.log(l_module_name,'group_info count After Calling validate_constraint_main',l_cc_group_info.COUNT);
6173 END IF;
6174 --
6175
6176 IF l_return_status=wsh_util_core.g_ret_sts_error THEN
6177 IF l_cc_fail_ids.COUNT>0 THEN
6178
6179 IF l_debug_on THEN
6180 wsh_debug_sv.logmsg(l_module_name,'all lines errored in compatibility check');
6181 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6182 END IF;
6183
6184 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_COMP_FAILED');
6185 FND_MESSAGE.SET_TOKEN('DEL_ID',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6186 x_return_status := l_return_status;
6187 wsh_util_core.add_message(x_return_status);
6188 goto confirm_error;
6189 ELSE
6190 x_return_status:= WSH_UTIL_CORE.G_RET_STS_WARNING;
6191 l_num_warn := l_num_warn + 1;
6192 END IF;
6193 ELSIF l_return_status=wsh_util_core.g_ret_sts_unexp_error THEN
6194 x_return_status := l_return_status;
6195 goto confirm_error;
6196 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6197 x_return_status := l_return_status;
6198 l_num_warn := l_num_warn + 1;
6199 END IF;
6200 END IF;
6201 --Compatiblity Changes
6202
6203 -- Bug 3347549 Derive the ship method components for the trip.
6204
6205 IF p_ship_method IS NOT NULL THEN
6206
6207 l_carrier_rec.ship_method_code := p_ship_method;
6208
6209 WSH_CARRIERS_GRP.get_carrier_service_mode(
6210 p_carrier_service_inout_rec => l_carrier_rec,
6211 x_return_status => l_return_status);
6212
6213 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6214 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6215 goto confirm_error;
6216 END IF;
6217
6218 UPDATE wsh_trips
6219 SET ship_method_code = p_ship_method,
6220 service_level = l_carrier_rec.service_level,
6221 mode_of_transport = l_carrier_rec.mode_of_transport,
6222 carrier_id = l_carrier_rec.carrier_id
6223 WHERE trip_id = l_trip_id;
6224
6225 IF (SQL%NOTFOUND) THEN
6226 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6227 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6228 wsh_util_core.add_message(x_return_status);
6229 goto confirm_error;
6230 END IF;
6231
6232 END IF;
6233
6234 END IF;--l_trip_id is not null - autocreated trip
6235
6236 IF l_debug_on THEN
6237 wsh_debug_sv.log(l_module_name,'p_intransit_flag', p_intransit_flag);
6238 wsh_debug_sv.log(l_module_name,'p_close_flag', p_close_flag);
6239 wsh_debug_sv.log(l_module_name,'l_itm_exc_severity', l_itm_exc_severity);
6240 END IF;
6241 /* Bug 2313359 move the code from above */
6242 --
6243 -- Bug 8555654 : Do not submit workflow for a delivery if it is going to
6244 -- fail as the actual departure date is outside of the current
6245 -- inventory open period.
6246 IF (l_enable_sc_wf = 'Y') THEN
6247 --{
6248 IF l_debug_on THEN
6249 WSH_DEBUG_SV.log(l_module_name,'l_organization_id',l_organization_id );
6250 END IF;
6251 IF (l_opn_prd_chk_orgs.EXISTS(l_organization_id)) THEN
6252 --{
6253 IF (l_opn_prd_chk_orgs(l_organization_id) = 1) THEN
6254 l_enable_sc_wf := 'N';
6255 END IF;
6256 ELSE
6257 -- Check for open inventory period Error, if inventory
6258 -- period (corresponding to stop close date) is not open
6259 --
6260 -- Debug Statements
6261 --
6262 IF l_debug_on THEN
6263 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit INVTTMTX.TDATECHK',WSH_DEBUG_SV.C_PROC_LEVEL);
6264 END IF;
6265 --
6266 invttmtx.tdatechk(l_organization_id, nvl(p_actual_dep_date,sysdate), l_period_id, l_open_past_period);
6267 IF (l_period_id <= 0) THEN
6268 l_enable_sc_wf := 'N';
6269 l_opn_prd_chk_orgs(l_organization_id) := 1;
6270 ELSE
6271 l_opn_prd_chk_orgs(l_organization_id) := 0;
6272 END IF;
6273 --}
6274 END IF;
6275 IF l_debug_on THEN
6276 WSH_DEBUG_SV.log(l_module_name,'l_enable_sc_wf',l_enable_sc_wf);
6277 END IF;
6278 --}
6279 END IF;
6280 -- Bug 8555654 : : End
6281 --
6282 IF ((p_intransit_flag = 'Y' OR p_close_flag = 'Y') AND (l_enable_sc_wf <> 'Y') ) THEN
6283 -- Now that the trip is created , fetch the delivery's pickup_stop_id again.
6284 -- We do this only if severity 'ERROR', 'WARNING' ITM exceptions will not be
6285 -- logged against this delivery, as the stops attached to deliveries with
6286 -- 'ERROR', 'WARNING' ITM exceptions will not get closed.
6287 -- l_enable_sc_wf <> 'Y' - Workflow Changes
6288
6289 OPEN del_legs (p_del_rows(i));
6290 FETCH del_legs INTO l_pickup_stop_id,
6291 l_dropoff_stop_id, l_delivery_leg_id,
6292 l_parent_delivery_id;
6293 CLOSE del_legs;
6294
6295 IF (l_itm_exc_severity IN ('ERROR', 'WARNING')) THEN
6296
6297 l_itm_stops_tab(l_pickup_stop_id) := 'Y';
6298 l_itm_stops_tab(l_dropoff_stop_id) := 'Y';
6299
6300 l_close_confirm_flag := 'F';
6301
6302 FND_MESSAGE.SET_NAME('WSH','WSH_EXP_COMPL_SCRN_REQD');
6303 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_delivery_name);
6304 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS);
6305
6306 ELSE
6307
6308 l_stop_rows(l_stop_rows.count + 1 ) := l_pickup_stop_id;
6309 --u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6310
6311 -- 19. if p_close_flag = 'Y' and autocreate trip close the drop off stop
6312 IF (p_close_flag = 'Y') THEN
6313 l_stop_rows(l_stop_rows.count + 1 ) := l_dropoff_stop_id;
6314 -- u_stop_rows(u_stop_rows.count + 1 ) := l_dropoff_stop_id;
6315 END IF;
6316
6317 --bug 3314353 -- jckwok
6318 OPEN get_del_first_trip(p_del_rows(i));
6319 FETCH get_del_first_trip into l_first_trip_id;
6320 CLOSE get_del_first_trip;
6321 IF l_first_trip_id IS NULL THEN
6322 FND_MESSAGE.SET_NAME('WSH','WSH_TRIP_NOT_FOUND');
6323 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
6324 wsh_util_core.add_message(x_return_status);
6325 goto confirm_error;
6326 END IF;
6327 OPEN stop_sequence_number_csr(l_pickup_stop_id);
6328 FETCH stop_sequence_number_csr INTO l_pick_up_stop_sequence_num;
6329 IF stop_sequence_number_csr%NOTFOUND THEN
6330 CLOSE stop_sequence_number_csr;
6331 RAISE NO_DATA_FOUND;
6332 END IF;
6333 CLOSE stop_sequence_number_csr;
6334
6335 IF ((p_close_flag = 'Y') AND (p_intransit_flag = 'Y')) THEN
6336 --{ bugfix 3925963
6337 l_inbound_stops_exists := false;
6338 l_stop_name_list := null;
6339 OPEN get_stops_csr(l_first_trip_id);
6340 LOOP
6341 FETCH get_stops_csr INTO l_prev_stop_id,l_shipments_type_flag,l_stop_location_id;
6342 exit when get_stops_csr%NOTFOUND;
6343 IF nvl(l_shipments_type_flag,'O') = 'I' THEN
6344 l_inbound_stops_exists := true;
6345 l_stop_name := SUBSTRB(
6346 WSH_UTIL_CORE.get_location_description
6347 ( l_stop_location_id,
6348 'NEW UI CODE'
6349 ),
6350 1,
6351 60
6352 );
6353 IF l_stop_name_list is null THEN
6354 l_stop_name_list := l_stop_name;
6355 ELSE
6356 l_stop_name_list := l_stop_name_list || ' , ' || l_stop_name;
6357 END IF;
6358 ELSE
6359 u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6360 END IF;
6361 --
6362 END LOOP;
6363 CLOSE get_stops_csr;
6364 IF l_inbound_stops_exists THEN
6365 OPEN get_trip_name_csr (l_first_trip_id);
6366 FETCH get_trip_name_csr INTO l_stops_trip_name;
6367 CLOSE get_trip_name_csr;
6368 FND_MESSAGE.SET_NAME('WSH','WSH_PREV_IB_STOPS_NOT_CLOSED');
6369 FND_MESSAGE.SET_TOKEN('TRIP_NAME', l_stops_trip_name);
6370 FND_MESSAGE.SET_TOKEN('STOP_NAME_LIST', l_stop_name_list);
6371 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6372 wsh_util_core.add_message(x_return_status);
6373 END IF;
6374 --} bugfix 3925963
6375 ELSIF ((p_close_flag = 'N') AND (p_intransit_flag = 'Y')) THEN
6376 OPEN prev_stop_csr(l_first_trip_id, l_pick_up_stop_sequence_num);
6377 LOOP
6378 FETCH prev_stop_csr INTO l_prev_stop_id;
6379 exit when prev_stop_csr%NOTFOUND;
6380 u_stop_rows(u_stop_rows.count+1) := l_prev_stop_id;
6381 END LOOP;
6382 CLOSE prev_stop_csr;
6383 u_stop_rows(u_stop_rows.count + 1 ) := l_pickup_stop_id;
6384 END IF;
6385 --bug 3314353 -- jckwok
6386
6387 l_close_confirm_flag := 'C';
6388
6389 END IF;
6390
6391 ELSE
6392
6393 l_close_confirm_flag := 'F';
6394
6395 END IF; -- end of p_in_transit_flag = Y
6396
6397 END IF; -- end of IF (NOT l_unassign_all_flag_tab(i))
6398
6399 IF l_debug_on THEN
6400 WSH_DEBUG_SV.log(l_module_name,'l_close_confirm_flag',l_close_confirm_flag );
6401 END IF;
6402
6403 --set the close/confirm count accordingly
6404 IF(l_close_confirm_flag = 'C') THEN
6405 l_close_del_cnt := l_close_del_cnt +1;
6406 ELSIF(l_close_confirm_flag = 'F') THEN
6407 l_confirm_del_cnt := l_confirm_del_cnt +1;
6408 END IF;
6409
6410 l_close_confirm_flag:=NULL;
6411
6412
6413 -- Set delivery status to confirm, set initial pickup date, ultimate dropoff date
6414
6415 -- If all delivery_details from a delivery are being unassigned then set status to CLOSED
6416 -- ,unassign delivery from all trips it might be on and set a warning message
6417
6418 IF l_unassign_all_flag_tab(i) THEN
6419 l_status_code(i) := 'CL';
6420
6421 /* H integration: 940/945 WSH wrudge */
6422 -- we should get warning only if user doesn't expect to do unassign all.
6423 IF p_action_flag NOT IN ('C', 'O') AND l_unassign_dds.count > 0 THEN
6424
6425 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_UNASSIGN_ALL');
6426 --
6427 -- Debug Statements
6428 --
6429 IF l_debug_on THEN
6430 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6431 END IF;
6432 --
6433 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6434 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6435 wsh_util_core.add_message(x_return_status);
6436 WSH_NEW_DELIVERY_ACTIONS.g_error_level := 'E';
6437 l_num_warn := l_num_warn + 1;
6438 END IF;
6439
6440 l_mdc_index_i := 0;
6441 FOR dg IN del_legs(p_del_rows(i)) LOOP
6442 --
6443 -- Debug Statements
6444 --
6445 --
6446 -- K: MDC Remove the delivery from the consol delivery and trip.
6447 IF dg.parent_delivery_id IS NOT NULL THEN
6448 l_mdc_cl_del_tab(1) := p_del_rows(i);
6449 l_mdc_co_del_tab.delete(i);
6450 WSH_NEW_DELIVERY_ACTIONS.Unassign_Dels_from_Consol_Del(
6451 p_parent_del => NULL,
6452 p_caller => p_caller,
6453 p_del_tab => l_mdc_cl_del_tab,
6454 x_return_status => l_return_status);
6455 l_mdc_cl_del_tab.delete;
6456 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6457 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6458 l_num_warn := l_num_warn + 1;
6459 ELSE
6460 x_return_status := l_return_status;
6461 goto confirm_error;
6462 END IF;
6463 END IF;
6464 END IF;
6465 IF l_debug_on THEN
6466 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_LEGS_PVT.DELETE_DELIVERY_LEG',WSH_DEBUG_SV.C_PROC_LEVEL);
6467 END IF;
6468 wsh_delivery_legs_pvt.delete_delivery_leg
6469 (NULL, dg.delivery_leg_id, l_return_status);
6470 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6471 --Bug 2108310
6472 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6473 l_num_warn := l_num_warn + 1;
6474 ELSE
6475 x_return_status := l_return_status;
6476 goto confirm_error;
6477 END IF;
6478 --Bug 2108310
6479 END IF;
6480
6481 END LOOP;
6482 ELSE
6483 l_status_code(i) := 'CO';
6484 END IF;
6485
6486
6487 -- LASTLY, populated the delivery columns for bulk update
6488
6489 u_del_rows( u_del_rows.count + 1) := p_del_rows (i);
6490 u_status_code( u_del_rows.count ) := l_status_code(i);
6491 u_number_of_lpn( u_del_rows.count ) := l_number_of_lpn(i) ;
6492 u_initial_pickup_date( u_del_rows.count ) := l_initial_pickup_date(i);
6493 u_ultimate_dropoff_date( u_del_rows.count ) := l_ultimate_dropoff_date(i);
6494 /* H integration: 945 send document wrudge */
6495 u_organization_id( u_del_rows.count ) := l_organization_id;
6496 u_wsh_lines_exist( u_del_rows.count ) := l_wsh_lines_exist;
6497 --/==Workflow Changes
6498 IF (l_enable_sc_wf = 'Y') THEN
6499 l_scpod_wf_del_rows(l_scpod_wf_del_rows.count + 1) := u_del_rows.count;
6500 END IF;
6501 --==/
6502
6503 goto loop_end;
6504
6505 <<confirm_error>>
6506
6507 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_ERROR');
6508 --
6509 -- Debug Statements
6510 --
6511 IF l_debug_on THEN
6512 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6513 END IF;
6514 --
6515 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
6516 wsh_util_core.add_message(x_return_status);
6517
6518 /* H integration: 940/945 wrudge */
6519 <<confirm_error_no_msg>>
6520 ROLLBACK TO SAVEPOINT confirm_delivery_sp;
6521 l_num_error := l_num_error + 1;
6522
6523 <<loop_end>>
6524 null;
6525
6526 l_error_exists := FALSE;
6527
6528 /* Bug 2761304: Changed the following conditon from '=' to '>='. */
6529
6530 IF (l_num_error >= 0) AND (l_wms_enabled_flag) THEN
6531 -- Bug 2942938: select all the 'W' message type from WSH_INTEGRATION.G_MSG_TABLE
6532 -- also select hold 'E' messages for WMS org, since hold errors
6533 -- bug 3455640 added 'WSH_INVALID_CATCHWEIGHT'
6534 -- should prevent the delivery from being ship confirmed, not just unassign
6535 -- the delivery details
6536 l_count := 0;
6537 FOR i in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6538 IF ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_TYPE = 'W' ) OR
6539 ( WSH_INTEGRATION.G_MSG_TABLE(i).MESSAGE_NAME in (
6540 'WSH_HEADER_HOLD_ERROR',
6541 'WSH_SHIP_LINE_HOLD_ERROR',
6542 'WSH_DET_CREDIT_HOLD_ERROR',
6543 'WSH_INVALID_CATCHWEIGHT') ) THEN
6544 l_count := l_count + 1;
6545 l_msg_table(l_count) := WSH_INTEGRATION.G_MSG_TABLE(i);
6546 IF l_debug_on THEN
6547 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);
6548 END IF;
6549 END IF;
6550 END LOOP;
6551 -- Call WMS api to process the table of l_msg_table only for wms enabled org
6552 -- WMS: pass warnings to WMS for processing:
6553 WMS_SHIPPING_MESSAGES.PROCESS_SHIPPING_WARNING_MSGS(x_return_status => l_return_status ,
6554 x_msg_count => l_msg_count ,
6555 x_msg_data => l_msg_data,
6556 p_commit => FND_API.g_false,
6557 x_shipping_msg_tab => l_msg_table);
6558
6559 -- Check if there exists an 'E' message in the l_msg_table
6560 -- If there is then turn the message type to 'E' for the particular message name in
6561 -- WSH_INTEGRATION.G_MSG_TABLE
6562 FOR i in 1..l_msg_table.count LOOP
6563 IF ( l_msg_table(i).MESSAGE_TYPE = 'E' ) THEN
6564 l_error_exists := TRUE;
6565 FOR j in 1..WSH_INTEGRATION.G_MSG_TABLE.COUNT LOOP
6566 IF (l_msg_table(i).message_name = WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_NAME) THEN
6567 WSH_INTEGRATION.G_MSG_TABLE(j).MESSAGE_TYPE := 'E';
6568 END IF;
6569 END LOOP;
6570 END IF;
6571 END LOOP;
6572 l_msg_table.delete;
6573 END IF;
6574 -- Call Store_Msg_In_Table Api to push the messages in WSH_INTEGRATION.G_MSG_TABLE to fnd stack
6575 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
6576 x_msg_rec_count => l_msg_rec_count,
6577 x_return_status => l_return_status);
6578 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6579 raise ship_confirm_error;
6580 END IF;
6581 -- If there is no Shipping error but WMS has turned one of the Warning to Error then set the l_num_error
6582 IF ( (l_num_error = 0) AND (l_error_exists) )THEN
6583 l_num_error := nvl(l_msg_rec_count.e_count,0) + nvl(l_msg_rec_count.u_count,0);
6584 END IF;
6585
6586 end loop ;
6587
6588 --delete the hash trip_ids stored
6589 G_HASH_TRIP.delete;
6590
6591 -- Bug 2074768 : Check for tolerances now that all the delivery lines for all the deliveries have been updated.
6592 -- The need to check tolerances here arises because now we have all the deliveries that really will
6593 -- be ship confirmed.
6594 IF l_debug_on THEN
6595 WSH_DEBUG_SV.log(l_module_name,'p_del_rows count', p_del_rows.count);
6596 END IF;
6597
6598 FOR i IN 1..p_del_rows.count LOOP
6599
6600 -- HW OPM added l_max_quantity2
6601 --
6602 -- Debug Statements
6603 --
6604 IF l_debug_on THEN
6605 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_DELIVERY_FOR_TOLERANCES',WSH_DEBUG_SV.C_PROC_LEVEL);
6606 END IF;
6607 --
6608 wsh_Delivery_validations.check_delivery_for_tolerances (
6609 p_delivery_id => p_del_rows(i) ,
6610 x_source_line_id => l_temp_line_id ,
6611 x_source_code => l_temp_source_code ,
6612 x_max_quantity => l_max_quantity ,
6613 x_max_quantity2 => l_max_quantity2 ,
6614 x_return_status => l_return_status ) ;
6615
6616 if ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) then
6617 x_return_status := l_return_Status ;
6618 wsh_util_core.add_message(x_return_status);
6619 l_num_error := l_num_error + 1;
6620 l_delivery_id := p_del_rows(i);
6621 raise ship_confirm_error ;
6622 end if ;
6623
6624 -- Close Exceptions for the Delivery
6625 IF l_debug_on THEN
6626 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
6627 END IF;
6628 WSH_XC_UTIL.Close_Exceptions (
6629 p_api_version => 1.0,
6630 x_return_status => l_return_status,
6631 x_msg_count => l_msg_count,
6632 x_msg_data => l_msg_data,
6633 p_logging_entity_id => p_del_rows(i),
6634 p_logging_entity_name => 'DELIVERY',
6635 p_consider_content => 'Y'
6636 ) ;
6637
6638 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
6639 x_return_status := l_return_status;
6640 wsh_util_core.add_message(x_return_status);
6641 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6642 l_num_error := l_num_error + 1 ;
6643 l_delivery_id := p_del_rows(i);
6644 raise ship_confirm_error;
6645 ELSE
6646 l_num_warn := l_num_warn + 1 ;
6647 END IF;
6648 END IF;
6649
6650
6651
6652 END LOOP ;
6653
6654 -- Create trip from deconsol location to ultimate drop off
6655 -- consol deliveriers.
6656 IF l_debug_on THEN
6657 WSH_DEBUG_SV.log(l_module_name,'l_mdc_co_del_tab count', l_mdc_co_del_tab.count);
6658 END IF;
6659
6660 IF l_mdc_co_del_tab.count > 0 THEN
6661
6662 Create_Deconsol_Trips(p_deliveries_tab => u_del_rows,
6663 x_return_status => l_return_status);
6664
6665 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6666 raise ship_confirm_error;
6667 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6668 l_num_warn := l_num_warn + 1;
6669 END IF;
6670
6671
6672 END IF;
6673
6674 -- 19.55 Generate BOL if p_bol_flag is set
6675 -- 2121399
6676 -- Moved Create_Bol and Print_document_sets APIs outside the main For Loop and
6677 -- and placed it after the call to Check_Delivery_for_tolerances is made.
6678 IF l_debug_on THEN
6679 WSH_DEBUG_SV.log(l_module_name,'u_del_rows count', u_del_rows.count);
6680 END IF;
6681
6682 FOR i IN 1..u_del_rows.count LOOP
6683
6684 IF l_debug_on THEN
6685 WSH_DEBUG_SV.log(l_module_name,'i', i);
6686 WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag count', l_with_mc_trip_flag.count);
6687 WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab count', l_unassign_all_flag_tab.count);
6688 WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6689 WSH_DEBUG_SV.log(l_module_name,'u_del_rows i', u_del_rows(i));
6690 END IF;
6691
6692 OPEN del_legs (u_del_rows(i));
6693 FETCH del_legs INTO l_pickup_stop_id, l_dropoff_stop_id, l_delivery_leg_id, l_parent_delivery_id;
6694 CLOSE del_legs;
6695
6696 IF l_debug_on THEN
6697 WSH_DEBUG_SV.log(l_module_name,'l_pickup_stop_id', l_pickup_stop_id);
6698 WSH_DEBUG_SV.log(l_module_name,'l_dropoff_stop_id', l_dropoff_stop_id);
6699 WSH_DEBUG_SV.log(l_module_name,'l_delivery_leg_id', l_delivery_leg_id);
6700 WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6701 END IF;
6702
6703 --Bug 5255366 (The above cursor can fetch parent-del-id of newly created trip hence can be null)
6704 -- (Hence the second fetch is required)
6705 IF l_parent_delivery_id IS NULL THEN
6706
6707 IF l_debug_on THEN
6708 WSH_DEBUG_SV.log(l_module_name,'p_del_rows i', p_del_rows(i));
6709 END IF;
6710
6711 OPEN get_consol_del(p_del_rows(i));
6712 FETCH get_consol_del
6713 INTO l_parent_delivery_id;
6714 CLOSE get_consol_del;
6715 END IF;
6716
6717 IF l_debug_on THEN
6718 WSH_DEBUG_SV.log(l_module_name,'l_parent_delivery_id', l_parent_delivery_id);
6719 END IF;
6720
6721 --Bug 3685366
6722 l_dummy_doc_set(1).bol_error_flag:='N';
6723 --
6724
6725 IF l_debug_on THEN
6726 WSH_DEBUG_SV.log(l_module_name,'p_bol_flag', p_bol_flag);
6727 WSH_DEBUG_SV.log(l_module_name,'l_with_mc_trip_flag', l_with_mc_trip_flag(i));
6728 WSH_DEBUG_SV.log(l_module_name,'l_unassign_all_flag_tab', l_unassign_all_flag_tab(i));
6729 WSH_DEBUG_SV.log(l_module_name,'p_mc_bol_flag', p_mc_bol_flag);
6730 END IF;
6731
6732 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
6733
6734 --Bug 5255366
6735 IF l_parent_delivery_id IS NOT NULL THEN
6736 create_bol( p_delivery_id => l_parent_delivery_id,
6737 x_return_status => l_return_status);
6738 ELSE
6739 create_bol( p_delivery_id => u_del_rows(i),
6740 x_return_status => l_return_status);
6741 END IF;
6742
6743 IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6744
6745 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6746 l_num_error := l_num_error + 1;
6747 ELSE
6748 --Bug 3685366
6749 l_dummy_doc_set(1).bol_error_flag:='Y';
6750 --
6751 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6752 --
6753 -- Debug Statements
6754 --
6755 IF l_debug_on THEN
6756 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6757 END IF;
6758 --
6759
6760 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6761 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6762 wsh_util_core.add_message(x_return_status);
6763 l_num_warn := l_num_warn + 1;
6764 END IF;
6765 END IF;
6766
6767 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
6768
6769 --Bug 5255366
6770 IF l_parent_delivery_id IS NOT NULL THEN
6771 create_bol( p_delivery_id => l_parent_delivery_id,
6772 x_return_status => l_return_status);
6773 ELSE
6774 create_bol( p_delivery_id => u_del_rows(i),
6775 x_return_status => l_return_status);
6776 END IF;
6777
6778 IF (l_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
6779
6780 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6781 l_num_error := l_num_error + 1;
6782 ELSE
6783
6784 -- Bug 3685366
6785 l_dummy_doc_set(1).bol_error_flag:='Y';
6786 --
6787
6788 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CREATE_BOL_ERROR');
6789 --
6790 -- Debug Statements
6791 --
6792
6793 IF l_debug_on THEN
6794 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6795 END IF;
6796 --
6797 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6798 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6799 wsh_util_core.add_message(x_return_status);
6800 l_num_warn := l_num_warn + 1;
6801 END IF;
6802 END IF;
6803
6804 END IF;
6805
6806 IF l_debug_on THEN
6807 WSH_DEBUG_SV.logmsg(l_module_name,'print doc set');
6808 END IF;
6809
6810 --19.6. Print document set if p_report_set_id is specified
6811
6812 IF (l_document_set_id IS NOT NULL) AND (NOT l_unassign_all_flag_tab(i)) THEN
6813
6814 l_del_tmp_rows.delete;
6815 --Bug 5255366
6816 IF l_parent_delivery_id IS NOT NULL THEN
6817 l_del_tmp_rows(1) := l_parent_delivery_id;
6818 ELSE
6819 l_del_tmp_rows(1) := u_del_rows(i);
6820 END IF;
6821
6822 -- Start of bugfix 4493263
6823 OPEN c_delv_trip_id_cursor(l_del_tmp_rows(1));
6824 LOOP
6825 FETCH c_delv_trip_id_cursor INTO l_dummy_doc_set(1).p_trip_id;
6826 EXIT WHEN c_delv_trip_id_cursor%NOTFOUND;
6827 --
6828 IF l_debug_on THEN
6829 WSH_DEBUG_SV.log(l_module_name, 'Trip Id : ', l_dummy_doc_set(1).p_trip_id );
6830 END IF;
6831 --
6832 END LOOP;
6833 CLOSE c_delv_trip_id_cursor;
6834 -- End of bugfix 4493263
6835 --
6836 -- Debug Statements
6837 --
6838 IF(l_parent_delivery_id IS NOT NULL) THEN
6839 IF (l_consol_del_doc_set.COUNT >0 AND(l_consol_del_doc_set.EXISTS(l_parent_delivery_id))) THEN
6840 l_content_del_flag := FALSE;
6841 END IF;
6842 END IF;
6843 IF l_content_del_flag THEN
6844 IF l_debug_on THEN
6845 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DOCUMENT_SETS.PRINT_DOCUMENT_SETS',WSH_DEBUG_SV.C_PROC_LEVEL);
6846 END IF;
6847 --
6848 wsh_document_sets.print_document_sets(
6849 p_report_set_id => l_document_set_id ,
6850 p_organization_id => NULL,
6851 p_trip_ids => l_dummy_rows1,
6852 p_stop_ids => l_dummy_rows1,
6853 p_delivery_ids => l_del_tmp_rows,
6854 p_document_param_info => l_dummy_doc_set,
6855 x_return_status => l_return_status);
6856
6857 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6858 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6859 l_num_error := l_num_error + 1;
6860 ELSE
6861 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_DOC_SUB_ERROR');
6862 --
6863 -- Debug Statements
6864 --
6865 IF l_debug_on THEN
6866 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6867 END IF;
6868 --
6869 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6870 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6871 wsh_util_core.add_message(x_return_status);
6872 l_num_warn := l_num_warn + 1;
6873 END IF;
6874 END IF;
6875 END IF;
6876 END IF;
6877
6878 --Bug 5255366 (Storing Consol-del-Id in a tab so that multiple Doc set firing is avoided)
6879 IF l_parent_delivery_id IS NOT NULL THEN
6880 IF (NOT l_consol_del_doc_set.EXISTS(l_parent_delivery_id)) THEN
6881 l_consol_del_doc_set(l_parent_delivery_id) := l_parent_delivery_id;
6882 END IF;
6883 END IF;
6884 --J TP Release : If TP is installed, confirmed delivery has to be planned
6885 --tkt
6886 IF (NOT l_unassign_all_flag_tab(i) and wsh_util_core.TP_IS_INSTALLED='Y') THEN
6887
6888 l_del_tmp_rows.delete;
6889 l_del_tmp_rows(1) := u_del_rows(i);
6890
6891 IF l_debug_on THEN
6892 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit PLAN',WSH_DEBUG_SV.C_PROC_LEVEL);
6893 END IF;
6894
6895 PLAN(p_del_rows => l_del_tmp_rows,
6896 x_return_status => l_return_status,
6897 p_called_for_sc => TRUE);
6898
6899 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
6900 IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,WSH_UTIL_CORE.G_RET_STS_ERROR)) THEN
6901 l_num_error := l_num_error + 1;
6902 ELSE
6903 IF l_debug_on THEN
6904 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
6905 END IF;
6906 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(i)));
6907 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
6908 wsh_util_core.add_message(x_return_status);
6909 l_num_warn := l_num_warn + 1;
6910 END IF;
6911 END IF;
6912
6913 END IF;
6914
6915 IF l_debug_on THEN
6916 WSH_DEBUG_SV.log(l_module_name,'l_itm_exc_flag count', l_itm_exc_flag.count);
6917 END IF;
6918 --Bug 9326608 Changed l_itm_exc_flag to use i as index
6919 IF l_itm_exc_flag(i) = 'Y' THEN
6920
6921 IF l_debug_on THEN
6922 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception',WSH_DEBUG_SV.C_PROC_LEVEL);
6923 END IF;
6924
6925 WSH_DELIVERY_VALIDATIONS.Log_ITM_Exception
6926 (p_delivery_id => u_del_rows(i),
6927 p_action_type => 'SHIP_CONFIRM',
6928 p_ship_from_location_id => l_ship_from_location,
6929 x_return_status => l_return_status);
6930
6931 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6932 l_num_error := l_num_error + 1 ;
6933 l_delivery_id := u_del_rows(i);
6934 raise ship_confirm_error;
6935 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6936 l_num_warn := l_num_warn + 1;
6937 END IF;
6938
6939 END IF;
6940
6941 --
6942 -- Debug Statements
6943 --
6944 IF l_debug_on THEN
6945 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE',WSH_DEBUG_SV.C_PROC_LEVEL);
6946 END IF;
6947 --
6948 wsh_new_delivery_actions.update_leg_sequence(
6949 p_delivery_id => u_del_rows(i),
6950 x_return_status => l_return_status);
6951
6952 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6953 l_num_error := l_num_error + 1 ;
6954 l_delivery_id := u_del_rows(i);
6955 raise ship_confirm_error;
6956 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
6957 l_num_warn := l_num_warn + 1;
6958 END IF;
6959
6960
6961
6962 END LOOP ; ---key loop
6963
6964
6965
6966
6967
6968 --/== Workflow Changes
6969 IF (p_intransit_flag = 'N') THEN
6970 l_defer_interface_flag := 'Y';
6971 ELSE
6972 l_defer_interface_flag := p_defer_interface_flag;
6973 END IF;
6974 --==/
6975
6976 -- 2121399
6977
6978 IF l_debug_on THEN
6979 WSH_DEBUG_SV.log(l_module_name,'u_number_of_lpn count', l_with_mc_trip_flag.count);
6980 WSH_DEBUG_SV.log(l_module_name,'u_initial_pickup_date count', u_initial_pickup_date.count);
6981 WSH_DEBUG_SV.log(l_module_name,'u_ultimate_dropoff_date count', u_ultimate_dropoff_date.count);
6982 WSH_DEBUG_SV.log(l_module_name,'u_status_code count', u_status_code.count);
6983 END IF;
6984
6985 -- BULK UPDATE FOR ALL DELIVERIES IN p_del_rows
6986
6987 -- Update the delivery record with status code and confirm date
6988 -- 2052673 - modified the way in which the number_of_lpn is being updated.
6989 -- 2335270 included last_updated_by and last_update_login
6990 FORALL i IN 1..u_del_rows.count
6991 UPDATE wsh_new_deliveries
6992 SET status_code = u_status_code(i),
6993 confirm_date = sysdate,
6994 confirmed_by = nvl(confirmed_by, l_user_name),
6995 -- number_of_lpn = decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)) , --Bug 1729723
6996 number_of_lpn = decode(number_of_lpn, null, decode(u_number_of_lpn(i),0,null,u_number_of_lpn(i)), number_of_lpn),
6997 initial_pickup_date = u_initial_pickup_date(i) ,
6998 ultimate_dropoff_date = u_ultimate_dropoff_date(i) ,
6999 --OTM R12, when setting delivery to closed, set the tms flag
7000 TMS_INTERFACE_FLAG = DECODE(l_gc3_is_installed,
7001 'Y', DECODE(NVL(u_status_code(i), 'XXXXX'),
7002 'CL', DECODE(NVL(tms_interface_flag,
7003 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
7004 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7005 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
7006 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7007 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
7008 WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
7009 NVL(tms_interface_flag,
7010 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7011 NVL(tms_interface_flag,
7012 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
7013 --END OTM R12
7014 last_update_date = SYSDATE ,
7015 last_updated_by = l_user_id,
7016 last_update_login = l_login_id,
7017 --/==Workflow Changes
7018 del_wf_intransit_attr = decode(p_intransit_flag,'Y','I','X'),
7019 del_wf_close_attr = decode(p_close_flag,'Y','I','X'),
7020 del_wf_interface_attr = decode(l_defer_interface_flag,'N','I','X')
7021 --==/
7022 WHERE delivery_id = u_del_rows(i);
7023
7024 IF l_mdc_co_del_tab.count > 0 THEN
7025
7026 Confirm_Consolidation_Delivery(
7027 p_consol_del_tab => l_mdc_co_del_tab,
7028 x_return_status => l_return_status);
7029
7030 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7031 raise ship_confirm_error;
7032 ELSIF l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING THEN
7033 l_num_warn := l_num_warn + 1;
7034 END IF;
7035
7036 END IF;
7037
7038
7039 --/== Workflow Changes - Controlling Workflow
7040 IF l_debug_on THEN
7041 WSH_DEBUG_SV.log(l_module_name,'L_ENABLE_SC_WF',l_enable_sc_wf);
7042 WSH_DEBUG_SV.log(l_module_name,'Controlling-scpod rows count',l_scpod_wf_del_rows.count);
7043 END IF;
7044 FOR k IN 1..l_scpod_wf_del_rows.count LOOP
7045 l_ctr := l_scpod_wf_del_rows(k);
7046 IF l_debug_on THEN
7047 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.START_SCPOD_C_PROCESS',WSH_DEBUG_SV.C_PROC_LEVEL);
7048 END IF;
7049
7050 WSH_WF_STD.Start_Scpod_C_Process( p_entity_id => u_del_rows(l_ctr),
7051 p_organization_id => u_organization_id(l_ctr),
7052 x_process_started => l_process_started,
7053 x_return_status => l_return_status);
7054 IF l_debug_on THEN
7055 WSH_DEBUG_SV.log(l_module_name,'L_PROCESS_STARTED',l_process_started);
7056 WSH_DEBUG_SV.log(l_module_name,'L_RETURN_STATUS',l_return_status);
7057 END IF;
7058
7059 IF (l_process_started = 'Y' OR l_process_started = 'E') THEN
7060 l_aname_text(l_aname_text.COUNT + 1) := 'INTRANSIT_FLAG';
7061 l_avalue_text(l_avalue_text.COUNT + 1) := P_INTRANSIT_FLAG;
7062 l_aname_text(l_aname_text.COUNT + 1) := 'ACTION_FLAG';
7063 l_avalue_text(l_avalue_text.COUNT + 1) := P_ACTION_FLAG;
7064 l_aname_text(l_aname_text.COUNT + 1) := 'CLOSE_TRIP_FLAG';
7065 l_avalue_text(l_avalue_text.COUNT + 1) := P_CLOSE_FLAG;
7066 l_aname_text(l_aname_text.COUNT + 1) := 'STAGE_DEL_FLAG';
7067 l_avalue_text(l_avalue_text.COUNT + 1) := P_STAGE_DEL_FLAG;
7068 l_aname_text(l_aname_text.COUNT + 1) := 'SEND_945_FLAG';
7069 l_avalue_text(l_avalue_text.COUNT + 1) := P_SEND_945_FLAG;
7070 l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_BOL_FLAG';
7071 l_avalue_text(l_avalue_text.COUNT + 1) := P_BOL_FLAG;
7072 l_aname_text(l_aname_text.COUNT + 1) := 'CREATE_MC_BOL_FLAG';
7073 l_avalue_text(l_avalue_text.COUNT + 1) := P_MC_BOL_FLAG;
7074 l_aname_text(l_aname_text.COUNT + 1) := 'SHIP_METHOD_CODE';
7075 l_avalue_text(l_avalue_text.COUNT + 1) := p_ship_method;
7076 l_aname_text(l_aname_text.COUNT + 1) := 'DEFER_INTERFACE_FLAG';
7077 l_avalue_text(l_avalue_text.COUNT + 1) := l_defer_interface_flag;
7078
7079
7080 WF_ENGINE.SetItemAttrTextArray(
7081 itemtype => 'WSHDEL',
7082 itemkey => u_del_rows(l_ctr),
7083 aname => l_aname_text,
7084 avalue => l_avalue_text);
7085
7086 l_aname_num(l_aname_num.COUNT + 1) := 'REPORT_SET_ID';
7087 l_avalue_num(l_avalue_num.COUNT + 1) := P_REPORT_SET_ID;
7088
7089 WF_ENGINE.SetItemAttrNumberArray(
7090 itemtype => 'WSHDEL',
7091 itemkey => u_del_rows(l_ctr),
7092 aname => l_aname_num,
7093 avalue => l_avalue_num);
7094
7095 WF_ENGINE.SetItemAttrDate(
7096 itemtype => 'WSHDEL',
7097 itemkey => u_del_rows(l_ctr),
7098 aname => 'ACTUAL_DATE',
7099 avalue => P_ACTUAL_DEP_DATE);
7100
7101 FND_MESSAGE.SET_NAME('WSH','WSH_WF_SCPOD_LAUNCHED');
7102 FND_MESSAGE.Set_Token('DEL_NAME',wsh_new_deliveries_pvt.get_name(u_del_rows(l_ctr)));
7103 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_SUCCESS,l_module_name);
7104
7105 END IF;
7106 END LOOP;
7107 -- Workflow Changes ==/
7108
7109 FOR z IN 1..u_del_rows.count LOOP
7110 IF l_debug_on THEN
7111 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.Raise_Event',WSH_DEBUG_SV.C_PROC_LEVEL);
7112 END IF;
7113
7114 WSH_WF_STD.Raise_Event(
7115 p_entity_type => 'DELIVERY',
7116 p_entity_id => u_del_rows(z),
7117 p_event => 'oracle.apps.wsh.delivery.gen.shipconfirmed',
7118 p_organization_id => u_organization_id(z),
7119 x_return_status => l_wf_rs);
7120 IF l_debug_on THEN
7121 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7122 END IF;
7123
7124 END LOOP;
7125
7126 /* H integration: 945 send document wrudge */
7127 -- Send outbound documents if enabled and deliveries have WSH lines.
7128 IF p_send_945_flag = 'Y' THEN
7129
7130 FOR i IN 1..u_del_rows.count LOOP
7131 IF u_wsh_lines_exist(i) > 0 THEN
7132 --
7133 -- Debug Statements
7134 --
7135 IF l_debug_on THEN
7136 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRANSACTIONS_UTIL.SEND_DOCUMENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7137 END IF;
7138 --
7139 wsh_transactions_util.send_document(
7140 p_entity_id => u_del_rows(i),
7141 p_entity_type => 'DLVY',
7142 p_action_type => 'A',
7143 p_document_type => 'SA',
7144 p_organization_id => u_organization_id(i),
7145 x_return_status => l_return_status);
7146 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7147 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7148 l_num_error := l_num_error + 1;
7149 ELSE
7150 /* new message: WSH_DEL_OUTBOUND_FAILED, token DEL_NAME */
7151 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_OUTBOUND_FAILED');
7152 --
7153 -- Debug Statements
7154 --
7155 IF l_debug_on THEN
7156 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7157 END IF;
7158 --
7159 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
7160 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7161 wsh_util_core.add_message(x_return_status);
7162 l_num_warn := l_num_warn + 1;
7163 END IF;
7164 END IF;
7165 END IF; -- u_wsh_lines_exist(i) > 0
7166 END LOOP;
7167
7168 END IF; -- p_send_945_flag = 'Y'
7169
7170
7171
7172 -- Remove stops that have deliveries with ITM exceptions logged
7173 -- against them from the table of stops to be closed.
7174
7175 if u_stop_rows.count > 0 then
7176
7177 FOR i IN u_stop_rows.FIRST .. u_stop_rows.LAST LOOP
7178
7179 IF l_itm_stops_tab.exists(u_stop_rows(i)) THEN
7180
7181 u_stop_rows.delete(i);
7182
7183 END IF;
7184
7185 END LOOP;
7186
7187 END IF;
7188
7189 -- Close the Autocreated Trip-Stops
7190
7191 if u_stop_rows.count > 0 then
7192
7193 IF l_debug_on THEN
7194 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
7195 END IF;
7196 --
7197 wsh_trip_stops_actions.change_status(
7198 p_stop_rows => u_stop_rows,
7199 p_action => 'CLOSE',
7200 p_actual_date => nvl(p_actual_dep_date,sysdate),
7201 p_defer_interface_flag => p_defer_interface_flag, -- bug 1578251
7202 x_return_status => l_return_status,
7203 --tkt
7204 p_caller => p_caller);
7205
7206 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7207 x_return_status := l_return_status;
7208 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
7209 l_num_warn := l_num_warn + 1;
7210 ELSE
7211 l_num_error := l_num_error + 1;
7212 END IF;
7213 END IF;
7214
7215 End if ;
7216
7217 -- LPN CONV rv
7218 -- Need to delete all the WMS LPNs that were unassigned and unpacked during Ship Confirm
7219 --
7220 IF (l_wms_enabled_flag) THEN
7221 --{
7222 for l_delete_cnt_rec in l_delete_wms_empty_cnt_csr loop
7223 --{
7224 --
7225 --
7226 -- Debug Statements
7227 --
7228 IF l_debug_on THEN
7229 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_CONTAINER_ACTIONS.DELETE_CONTAINERS',WSH_DEBUG_SV.C_PROC_LEVEL);
7230 END IF;
7231 --
7232 wsh_container_actions.delete_containers (
7233 p_container_id => l_delete_cnt_rec.delivery_detail_id,
7234 x_return_status => l_return_status);
7235 --
7236 --
7237 -- Debug Statements
7238 --
7239 IF l_debug_on THEN
7240 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.API_POST_CALL',WSH_DEBUG_SV.C_PROC_LEVEL);
7241 END IF;
7242 --
7243 wsh_util_core.api_post_call(
7244 p_return_status => l_return_status,
7245 x_num_warnings => l_num_error,
7246 x_num_errors => l_num_warn,
7247 p_raise_error_flag => FALSE);
7248 --
7249 --}
7250 end loop;
7251 --}
7252 END IF;
7253
7254 -- 20. set summary messages for warnings and errors
7255
7256 IF (l_num_error > 0) THEN
7257 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7258 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7259 wsh_util_core.add_message(x_return_status);
7260 rollback to savepoint start_ship_confirm_delivery;
7261
7262 ELSE
7263
7264 -- Set Message as Number of Deliveries as Confirmed, In-Transit and Closed
7265 IF ( l_close_del_cnt <> 0 ) THEN
7266
7267 FND_MESSAGE.SET_NAME('WSH','WSH_CL_DELIVERIES');
7268 FND_MESSAGE.SET_TOKEN('CL_DEL',l_close_del_cnt);
7269 wsh_util_core.add_message(x_return_status);
7270
7271 END IF;
7272
7273 IF (l_confirm_del_cnt <> 0) THEN
7274
7275 FND_MESSAGE.SET_NAME('WSH','WSH_CO_DELIVERIES');
7276 FND_MESSAGE.SET_TOKEN('CO_DEL',l_confirm_del_cnt);
7277 wsh_util_core.add_message(x_return_status);
7278
7279 END IF;
7280
7281 if (l_num_warn > 0) THEN
7282 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CONFIRM_WARNING');
7283 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7284 wsh_util_core.add_message(x_return_status);
7285 elsif (p_del_rows.count > 1) THEN
7286 -- bug 2523074 (frontported bug 2508132):
7287 -- if multiple deliveries are processed, show summary message,
7288 -- so that the user does not think the first message (e.g.,
7289 -- request number) applies to all deliveries.
7290 FND_MESSAGE.SET_NAME('WSH', 'WSH_DEL_CONFIRM_SUCCESS');
7291 wsh_util_core.add_message(x_return_status);
7292 else
7293 FND_MESSAGE.SET_NAME('WSH', 'WSH_ONE_DEL_CONFIRM_SUCCESS');
7294 wsh_util_core.add_message(x_return_status);
7295 end if;
7296 END IF;
7297
7298 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7299 x_msg_rec_count => l_msg_rec_count,
7300 x_return_status => l_return_status);
7301 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
7302 raise ship_confirm_error;
7303 END IF;
7304
7305 --
7306 -- Debug Statements
7307 --
7308 IF l_debug_on THEN
7309 WSH_DEBUG_SV.pop(l_module_name);
7310 END IF;
7311 --
7312 EXCEPTION
7313 WHEN FND_API.G_EXC_ERROR THEN
7314
7315 IF (Get_Trip%ISOPEN) THEN
7316 CLOSE Get_Trip;
7317 END IF;
7318
7319 IF (get_delivery_name%ISOPEN) THEN
7320 CLOSE get_delivery_name;
7321 END IF;
7322
7323 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7324 --
7325 IF l_debug_on THEN
7326 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7327 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7328 END IF;
7329 --
7330 WHEN ship_confirm_error THEN
7331
7332 IF (Get_Trip%ISOPEN) THEN
7333 CLOSE Get_Trip;
7334 END IF;
7335
7336 IF (get_delivery_name%ISOPEN) THEN
7337 CLOSE get_delivery_name;
7338 END IF;
7339
7340 FND_MESSAGE.SET_NAME('WSH','WSH_SHIP_CONFIRM_ERROR');
7341 --
7342 -- Debug Statements
7343 --
7344 IF l_debug_on THEN
7345 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
7346 END IF;
7347 --
7348 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_delivery_id));
7349 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7350 wsh_util_core.add_message(x_return_status);
7351 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7352 x_msg_rec_count => l_msg_rec_count,
7353 x_return_status => l_return_status);
7354
7355 --
7356 -- Debug Statements
7357 --
7358 IF l_debug_on THEN
7359 WSH_DEBUG_SV.logmsg(l_module_name,'SHIP_CONFIRM_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7360 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:SHIP_CONFIRM_ERROR');
7361 END IF;
7362 --
7363 WHEN record_locked THEN
7364
7365 IF (Get_Trip%ISOPEN) THEN
7366 CLOSE Get_Trip;
7367 END IF;
7368
7369 IF (get_delivery_name%ISOPEN) THEN
7370 CLOSE get_delivery_name;
7371 END IF;
7372
7373 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOCK_ERR');
7374 wsh_util_core.add_message(x_return_status);
7375 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7376 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7377 x_msg_rec_count => l_msg_rec_count,
7378 x_return_status => l_return_status);
7379
7380 --
7381 -- Debug Statements
7382 --
7383 IF l_debug_on THEN
7384 WSH_DEBUG_SV.logmsg(l_module_name,'RECORD_LOCKED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7385 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:RECORD_LOCKED');
7386 END IF;
7387 --
7388 WHEN others THEN
7389
7390 IF (Get_Trip%ISOPEN) THEN
7391 CLOSE Get_Trip;
7392 END IF;
7393
7394 IF (get_delivery_name%ISOPEN) THEN
7395 CLOSE get_delivery_name;
7396 END IF;
7397
7398 IF get_del_first_trip%isopen THEN
7399 CLOSE get_del_first_trip;
7400 END IF;
7401 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CONFIRM_DELIVERY');
7402 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7403
7404 --
7405 -- Debug Statements
7406 --
7407 IF l_debug_on THEN
7408 WSH_DEBUG_SV.logmsg(l_module_name, 'UNEXPECTED ERROR : ' || SQLERRM );
7409 END IF;
7410 --
7411 WSH_UTIL_CORE.Store_Msg_In_Table (p_store_flag => FALSE,
7412 x_msg_rec_count => l_msg_rec_count,
7413 x_return_status => l_return_status);
7414
7415 --
7416 -- Debug Statements
7417 --
7418 IF l_debug_on THEN
7419 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7420 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7421 END IF;
7422 --
7423 END Confirm_Delivery ;
7424
7425
7426 -- J-IB-NPARIKH---{
7427 --
7428 --========================================================================
7429 -- PROCEDURE : setInTransit
7430 --
7431 -- PARAMETERS: p_in_rec Delivery information record
7432 -- x_return_status Return status of the API
7433 --
7434 -- COMMENT : This procedure sets delivery to in-transit.
7435 -- This is called by stop close API/Group API
7436 --
7437 -- It performs the following steps:
7438 -- 01. Update delivery lines to status "C"
7439 -- 02. For containers, update shipped quantity to 1
7440 -- 03. Update INV/OE interface flag to N for non-containers
7441 -- 04. Update INV/OE interface flag to Null for containers
7442 -- 05. Update delivery status to IT
7443 -- 06. Update delivery initial pickup date to actual departure date of stop
7444 -- 07. Update delivery ultimate dropoff date based on actual departure date of stop
7445 -- 08. Close delivery exceptions (Pack J Exceptions project)
7446 --
7447 --========================================================================
7448 --
7449 PROCEDURE setInTransit
7450 (
7451 p_in_rec IN WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7452 x_return_status OUT NOCOPY VARCHAR2
7453 )
7454 IS
7455 --{
7456 l_user_id NUMBER;
7457 l_login_id NUMBER;
7458 l_num_warnings NUMBER;
7459 l_num_errors NUMBER;
7460 --
7461
7462 l_msg_count NUMBER;
7463 l_msg_data VARCHAR2(4000);
7464 l_return_status VARCHAR2(1);
7465
7466 l_detail_tab WSH_UTIL_CORE.id_tab_type; -- DBI Project
7467 l_dbi_rs VARCHAR2(1); -- Return Status from DBI API
7468
7469 --/== Workflow Changes
7470 l_org_id NUMBER;
7471 l_wf_rs VARCHAR2(1);
7472 l_override_wf VARCHAR2(1);
7473 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7474 l_purged_count NUMBER;
7475 --==/
7476
7477 -- LPN CONV. rv
7478 cursor l_get_cnt_attr_csr(p_delivery_id IN NUMBER) is
7479 select wdd.organization_id organization_id,
7480 nvl(wdd.line_direction,'O') line_direction,
7481 wdd.delivery_detail_id delivery_detail_id
7482 from wsh_delivery_assignments_v wda,
7483 wsh_delivery_details wdd
7484 where wda.delivery_detail_id = wdd.delivery_detail_id
7485 and wdd.container_flag IN ('Y','C')
7486 and nvl(wdd.line_direction,'O') IN ('O', 'IO')
7487 and wda.delivery_id = p_delivery_id;
7488
7489 l_wms_org VARCHAR2(10);
7490 l_sync_tmp_wms_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7491 l_sync_tmp_inv_recTbl wsh_glbl_var_strct_grp.sync_tmp_recTbl_type;
7492
7493 l_child_cnt_counter NUMBER;
7494 l_cnt_wms_counter NUMBER;
7495 l_cnt_inv_counter NUMBER;
7496 -- LPN CONV. rv
7497
7498 --R12.1.1 STANDALONE PROJECT
7499 l_pending_advice_flag VARCHAR2(1);
7500 l_organization_id NUMBER;
7501 l_warehouse_type VARCHAR2(3);
7502 --
7503 -- LSP PROJECT
7504 l_standalone_mode VARCHAR2(1);
7505 l_client_id_tab WSH_UTIL_CORE.id_tab_type;
7506 -- LSP PROJECT
7507
7508 l_debug_on BOOLEAN;
7509 --
7510 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setInTransit';
7511 --}
7512 BEGIN
7513 --{
7514 --SAVEPOINT dlvy_setInTransit_begin_sp;
7515 --
7516 -- Debug Statements
7517 --
7518 --
7519 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7520 --
7521 IF l_debug_on IS NULL
7522 THEN
7523 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7524 END IF;
7525 --
7526 IF l_debug_on THEN
7527 WSH_DEBUG_SV.push(l_module_name);
7528 --
7529 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7530 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name ', p_in_rec.name );
7531 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7532 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7533 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7534 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller ', p_in_rec.caller );
7535 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7536 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.stop_id ', p_in_rec.stop_id );
7537 END IF;
7538 --
7539 l_user_id := FND_GLOBAL.user_id;
7540 l_login_id := FND_GLOBAL.login_id;
7541 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7542 l_num_warnings := 0;
7543 l_num_errors := 0;
7544
7545 --
7546 --
7547 -- Bug: 1563304 : Update all its delivery_details to 'C'
7548 -- Bug 1578251: update interfaced_flags = 'N' to improve
7549 -- performance in filtering records ready to interface
7550 -- but not yet interfaced.
7551 /* H Integration: 940/945 do not update cancelled delivery lines wrudge */
7552 -- Bug 2335270 : last_update_date = SYSDATE is included in
7553 -- the update statement
7554 --
7555 -- LPN CONV. rv
7556 --
7557 --
7558 IF WSH_WMS_LPN_GRP.G_CALLBACK_REQUIRED = 'Y'
7559 THEN
7560 --{
7561 --l_child_cnt_counter := 1;
7562 l_cnt_wms_counter := 1;
7563 l_cnt_inv_counter := 1;
7564 FOR child_cnt_rec in l_get_cnt_attr_csr(p_in_rec.delivery_id) LOOP
7565 --{
7566 --
7567 IF l_debug_on THEN
7568 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_VALIDATE.CHECK_WMS_ORG',WSH_DEBUG_SV.C_PROC_LEVEL);
7569 END IF;
7570 --
7571 l_wms_org := wsh_util_validate.check_wms_org(child_cnt_rec.organization_id);
7572 --
7573
7574 IF(l_wms_org = 'Y') THEN
7575 l_sync_tmp_wms_recTbl.delivery_detail_id_tbl(l_cnt_wms_counter) := child_cnt_rec.delivery_detail_id;
7576 l_sync_tmp_wms_recTbl.operation_type_tbl(l_cnt_wms_counter) := 'UPDATE';
7577 l_cnt_wms_counter := l_cnt_wms_counter +1;
7578 ELSIF (l_wms_org = 'N') THEN
7579 l_sync_tmp_inv_recTbl.delivery_detail_id_tbl(l_cnt_inv_counter) := child_cnt_rec.delivery_detail_id;
7580 l_sync_tmp_inv_recTbl.operation_type_tbl(l_cnt_inv_counter) := 'UPDATE';
7581 l_cnt_inv_counter := l_cnt_inv_counter +1;
7582 END IF;
7583 --
7584 --}
7585 END LOOP;
7586 --
7587 IF l_debug_on THEN
7588 wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_wms_recTbl', l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count);
7589 wsh_debug_sv.LOG(l_module_name, 'Count of l_sync_tmp_inv_recTbl', l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count);
7590 END IF;
7591 --
7592 IF (WSH_WMS_LPN_GRP.GK_WMS_UPD_STS OR WSH_WMS_LPN_GRP.GK_WMS_UPD_QTY)
7593 AND l_sync_tmp_wms_recTbl.delivery_detail_id_tbl.count > 0
7594 THEN
7595 --{
7596 --
7597 IF l_debug_on THEN
7598 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7599 END IF;
7600 --
7601 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7602 (
7603 p_sync_tmp_recTbl => l_sync_tmp_wms_recTbl,
7604 x_return_status => l_return_status
7605 );
7606 --
7607 IF l_debug_on THEN
7608 WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7609 END IF;
7610 --
7611 WSH_UTIL_CORE.API_POST_CALL
7612 (
7613 p_return_status => l_return_status,
7614 x_num_warnings => l_num_warnings,
7615 x_num_errors => l_num_errors
7616 );
7617 --
7618 --}
7619 ELSIF (WSH_WMS_LPN_GRP.GK_INV_UPD_STS OR WSH_WMS_LPN_GRP.GK_INV_UPD_QTY)
7620 AND l_sync_tmp_inv_recTbl.delivery_detail_id_tbl.count > 0
7621 THEN
7622 --{
7623 --
7624 IF l_debug_on THEN
7625 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WMS_SYNC_TMP_PKG.MERGE_BULK',WSH_DEBUG_SV.C_PROC_LEVEL);
7626 END IF;
7627 --
7628 WSH_WMS_SYNC_TMP_PKG.MERGE_BULK
7629 (
7630 p_sync_tmp_recTbl => l_sync_tmp_inv_recTbl,
7631 x_return_status => l_return_status
7632 );
7633 --
7634 IF l_debug_on THEN
7635 WSH_DEBUG_SV.logmsg(l_module_name, 'Return status ' || l_return_status);
7636 END IF;
7637 --
7638 WSH_UTIL_CORE.API_POST_CALL
7639 (
7640 p_return_status => l_return_status,
7641 x_num_warnings => l_num_warnings,
7642 x_num_errors => l_num_errors
7643 );
7644 --
7645 --}
7646 END IF;
7647 --}
7648 END IF;
7649 -- LPN CONV. rv
7650 UPDATE wsh_Delivery_details
7651 SET released_Status = 'C',
7652 shipped_quantity = DECODE(container_flag, 'Y', 1, shipped_quantity),
7653 inv_interfaced_flag = DECODE(container_flag, 'N', NVL(inv_interfaced_flag,'N'), NULL),
7654 oe_interfaced_flag = DECODE(container_flag, 'N', NVL(oe_interfaced_flag, 'N'), NULL),
7655 last_update_date = SYSDATE,
7656 last_updated_by = l_user_id,
7657 last_update_login = l_login_id
7658 WHERE delivery_detail_id IN (
7659 SELECT delivery_Detail_id
7660 FROM wsh_delivery_assignments_v
7661 WHERE delivery_id = p_in_rec.delivery_id
7662 )
7663 AND released_status <> 'D'
7664 RETURNING delivery_detail_id,client_id BULK COLLECT INTO l_detail_tab,l_client_id_tab; -- Added for DBI Project, LSP PROJECT :Added l_client_id_tab
7665 --
7666 IF l_debug_on THEN
7667 WSH_DEBUG_SV.log(l_module_name,'Number of Lines updated',SQL%ROWCOUNT);
7668 END IF;
7669 --
7670 --
7671 -- DBI Project
7672 -- Update of wsh_delivery_details where requested_quantity/released_status
7673 -- are changed, call DBI API after the update.
7674 -- DBI API will check if DBI is installed
7675 IF l_debug_on THEN
7676 WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',l_detail_tab.count);
7677 END IF;
7678 WSH_INTEGRATION.DBI_Update_Detail_Log
7679 (p_delivery_detail_id_tab => l_detail_tab,
7680 p_dml_type => 'UPDATE',
7681 x_return_status => l_dbi_rs);
7682
7683 IF l_debug_on THEN
7684 WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
7685 END IF;
7686 -- Only Handle Unexpected error
7687 IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
7688 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7689 END IF;
7690 -- End of Code for DBI Project
7691 --
7692 -- R12.1.1 STANDALONE PROJECT
7693 l_pending_advice_flag := null;
7694 --
7695 -- LSP PROJECT :
7696 l_standalone_mode := WMS_DEPLOY.WMS_DEPLOYMENT_MODE;
7697 IF l_debug_on THEN
7698 WSH_DEBUG_SV.log(l_module_name,'l_standalone_mode',l_standalone_mode);
7699 WSH_DEBUG_SV.log(l_module_name,'l_client_id_tab.COUNT',l_client_id_tab.COUNT);
7700 END IF;
7701 IF (l_standalone_mode = 'D' OR (l_standalone_mode = 'L' and l_client_id_tab.COUNT > 0 )) THEN --{
7702 l_pending_advice_flag := 'Y';
7703 ELSE
7704 l_organization_id := null;
7705
7706 BEGIN
7707
7708 SELECT organization_id
7709 INTO l_organization_id
7710 FROM wsh_new_deliveries
7711 WHERE delivery_id = p_in_rec.delivery_id;
7712
7713 EXCEPTION
7714 WHEN OTHERS THEN
7715 NULL;
7716 END;
7717
7718 IF (l_organization_id is not null) THEN
7719
7720 l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
7721 P_Organization_ID => l_organization_id,
7722 X_Return_Status => l_return_status);
7723
7724 IF l_debug_on THEN
7725 wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
7726 wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
7727 END IF;
7728
7729 IF (l_warehouse_type = 'TPW') THEN
7730 l_pending_advice_flag := 'Y';
7731 END IF;
7732
7733 END IF;
7734
7735 END IF; --}
7736
7737 UPDATE wsh_new_deliveries
7738 SET initial_pickup_date = p_in_rec.actual_date,
7739 ultimate_dropoff_date = GREATEST(
7740 NVL(ultimate_dropoff_date,p_in_rec.actual_date),
7741 p_in_rec.actual_date
7742 ),
7743 status_code = 'IT',
7744 --R12.1.1 STANDALONE PROJECT
7745 pending_advice_flag = l_pending_advice_flag,
7746 last_update_date = SYSDATE ,
7747 last_updated_by = l_user_id,
7748 last_update_login = l_login_id
7749 WHERE delivery_id = p_in_rec.delivery_id
7750 RETURNING organization_id INTO l_org_id;
7751 --
7752 IF (SQL%NOTFOUND)
7753 THEN
7754 --{
7755 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
7756 l_num_errors := l_num_errors + 1;
7757 wsh_util_core.add_message(x_return_status,l_module_name);
7758 --}
7759 ELSE
7760 --/== Workflow Changes
7761 l_del_entity_ids(1) := p_in_rec.delivery_id;
7762 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
7763 IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
7764 IF l_debug_on THEN
7765 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.LOG_WF_EXCEPTION', WSH_DEBUG_SV.C_PROC_LEVEL);
7766 END IF;
7767 WSH_WF_STD.Log_Wf_Exception(p_entity_type => 'DELIVERY',
7768 p_entity_id => p_in_rec.delivery_id,
7769 p_logging_entity => 'SHIPPER',
7770 p_exception_name => 'WSH_DEL_SCPOD_PURGED',
7771 x_return_status => l_wf_rs);
7772 IF l_debug_on THEN
7773 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7774 END IF;
7775
7776 IF l_debug_on THEN
7777 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.PURGE_ENTITY', WSH_DEBUG_SV.C_PROC_LEVEL);
7778 END IF;
7779
7780 WSH_WF_STD.Purge_Entity(p_entity_type => 'DELIVERY',
7781 p_entity_ids => l_del_entity_ids,
7782 p_docommit => FALSE,
7783 x_success_count => l_purged_count,
7784 x_return_status => l_wf_rs);
7785 IF l_debug_on THEN
7786 WSH_DEBUG_SV.log(l_module_name,'L_PURGED_COUNT',l_purged_count);
7787 WSH_DEBUG_SV.log(l_module_name,'L_WF_RS',l_wf_rs);
7788 END IF;
7789
7790 END IF;
7791
7792 IF l_debug_on THEN
7793 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
7794 END IF;
7795
7796 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
7797 p_entity_id => p_in_rec.delivery_id,
7798 p_event => 'oracle.apps.wsh.delivery.gen.setintransit',
7799 p_organization_id => l_org_id,
7800 x_return_status => l_wf_rs);
7801
7802 IF l_debug_on THEN
7803 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
7804 END IF;
7805 -- Workflow Changes ==/
7806 END IF;
7807
7808 --
7809
7810 -- Close Exceptions for delivery and its contents
7811 IF l_debug_on THEN
7812 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
7813 END IF;
7814 WSH_XC_UTIL.Close_Exceptions (
7815 p_api_version => 1.0,
7816 x_return_status => l_return_status,
7817 x_msg_count => l_msg_count,
7818 x_msg_data => l_msg_data,
7819 p_logging_entity_id => p_in_rec.delivery_id,
7820 p_logging_entity_name => 'DELIVERY',
7821 p_consider_content => 'Y',
7822 --tkt
7823 p_caller => p_in_rec.caller
7824 ) ;
7825
7826 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
7827 x_return_status := l_return_status;
7828 wsh_util_core.add_message(x_return_status);
7829 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
7830 l_num_errors := l_num_errors + 1;
7831 RAISE FND_API.G_EXC_ERROR;
7832 ELSE
7833 l_num_warnings := l_num_warnings + 1 ;
7834 END IF;
7835 END IF;
7836
7837 IF l_num_errors > 0
7838 THEN
7839 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7840 ELSIF l_num_warnings > 0
7841 THEN
7842 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7843 ELSE
7844 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7845 END IF;
7846 --
7847 --
7848 --
7849 -- Debug Statements
7850 --
7851 IF l_debug_on THEN
7852 WSH_DEBUG_SV.pop(l_module_name);
7853 END IF;
7854 --
7855 --}
7856 EXCEPTION
7857 --{
7858 WHEN FND_API.G_EXC_ERROR THEN
7859
7860 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7861 --
7862 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
7863 --
7864 IF l_debug_on THEN
7865 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7866 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
7867 END IF;
7868 --
7869 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7870
7871 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7872 --
7873 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
7874 --
7875 IF l_debug_on THEN
7876 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
7877 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
7878 END IF;
7879 --
7880 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
7881 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
7882 --
7883 IF l_debug_on THEN
7884 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
7885 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
7886 END IF;
7887 WHEN others THEN
7888 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setInTransit',l_module_name);
7889 --
7890 --ROLLBACK TO dlvy_setInTransit_begin_sp;
7891 --
7892 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
7893 --
7894 -- Debug Statements
7895 --
7896 IF l_debug_on THEN
7897 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
7898 END IF;
7899 --
7900 --}
7901 END setInTransit;
7902 --
7903 --
7904 --
7905 --========================================================================
7906 -- PROCEDURE : setClose
7907 --
7908 -- PARAMETERS: p_in_rec Delivery information record
7909 -- x_return_status Return status of the API
7910 --
7911 -- COMMENT : This procedure sets delivery to CLOSED.
7912 -- This is called by stop close API/Group API
7913 --
7914 -- It performs the following steps:
7915 -- 01. Update delivery status to CL
7916 -- 02. Update delivery ultimate dropoff date based on actual departure date of stop
7917 -- 03. Close delivery exceptions (Pack J Exceptions project)
7918 -- 04. Close stops exclusively owened by delivery.
7919 --
7920 --========================================================================
7921 --
7922 PROCEDURE setClose
7923 (
7924 p_in_rec IN WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type,
7925 x_return_status OUT NOCOPY VARCHAR2
7926 )
7927 IS
7928 --{
7929 CURSOR delivery_stops_csr (p_delivery_id NUMBER)
7930 IS
7931 SELECT stop_id
7932 FROM wsh_delivery_legs wdl,
7933 wsh_Trip_stops wts
7934 WHERE wdl.delivery_id = p_delivery_id
7935 AND (
7936 wdl.pick_up_stop_id = wts.stop_id
7937 OR wdl.drop_off_stop_id = wts.stop_id
7938 )
7939 AND wts.status_code <> 'CL';
7940 --
7941 --
7942 l_num_warnings NUMBER;
7943 l_num_errors NUMBER;
7944 l_return_status VARCHAR2(10);
7945 --
7946 l_user_id NUMBER;
7947 l_login_id NUMBER;
7948 l_cnt NUMBER := 0;
7949 l_stop_rows wsh_util_core.id_tab_type;
7950
7951 l_msg_count NUMBER;
7952 l_msg_data VARCHAR2(4000);
7953
7954 --/== Workflow Changes
7955 l_org_id NUMBER;
7956 l_wf_rs VARCHAR2(1);
7957 l_override_wf VARCHAR2(1);
7958 l_del_entity_ids WSH_UTIL_CORE.column_tab_type;
7959 l_purged_count NUMBER;
7960 --==/
7961
7962 l_gc3_is_installed VARCHAR2(1); --OTM R12
7963
7964 --
7965 l_debug_on BOOLEAN;
7966 --
7967 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'setClose';
7968 --}
7969 BEGIN
7970 --{
7971 --SAVEPOINT dlvy_close_begin_sp;
7972 --
7973 -- Debug Statements
7974 --
7975 --
7976 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
7977 --
7978 IF l_debug_on IS NULL
7979 THEN
7980 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
7981 END IF;
7982 --
7983 IF l_debug_on THEN
7984 WSH_DEBUG_SV.push(l_module_name);
7985 --
7986 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.DELIVERY_ID ', p_in_rec.delivery_id );
7987 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.name ', p_in_rec.name );
7988 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.status_code ', p_in_rec.status_code );
7989 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.put_messages', p_in_rec.put_messages);
7990 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.manual_flag ', p_in_rec.manual_flag );
7991 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.caller ', p_in_rec.caller );
7992 wsh_debug_sv.LOG(l_module_name, 'p_in_rec.actual_date ', p_in_rec.actual_date );
7993 END IF;
7994 --
7995 l_user_id := FND_GLOBAL.user_id;
7996 l_login_id := FND_GLOBAL.login_id;
7997 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
7998 l_num_warnings := 0;
7999 l_num_errors := 0;
8000 --
8001 --OTM R12
8002 l_gc3_is_installed := WSH_UTIL_CORE.G_GC3_IS_INSTALLED; -- this is global variable
8003
8004 IF l_gc3_is_installed IS NULL THEN
8005 l_gc3_is_installed := WSH_UTIL_CORE.GC3_IS_INSTALLED; -- this is actual function
8006 END IF;
8007 --
8008 --
8009 UPDATE wsh_new_deliveries
8010 SET ultimate_dropoff_date = GREATEST(
8011 nvl(ultimate_dropoff_date,p_in_rec.actual_date),
8012 p_in_rec.actual_date
8013 ),
8014 status_code = 'CL',
8015 --OTM R12, when setting delivery to closed, set tms flag
8016 tms_interface_flag = DECODE(l_gc3_is_installed,
8017 'Y', DECODE(NVL(tms_interface_flag,
8018 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT),
8019 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
8020 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_REQUIRED,
8021 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
8022 WSH_NEW_DELIVERIES_PVT.C_TMS_DELETE_IN_PROCESS,
8023 WSH_NEW_DELIVERIES_PVT.C_TMS_COMPLETED),
8024 NVL(tms_interface_flag,
8025 WSH_NEW_DELIVERIES_PVT.C_TMS_NOT_TO_BE_SENT)),
8026 --
8027 last_update_date = SYSDATE ,
8028 last_updated_by = l_user_id,
8029 last_update_login = l_login_id
8030 WHERE delivery_id = p_in_rec.delivery_id
8031 RETURNING organization_id INTO l_org_id;
8032 --
8033 IF (SQL%NOTFOUND)
8034 THEN
8035 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8036 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8037 RAISE FND_API.G_EXC_ERROR;
8038 END IF;
8039 --
8040
8041
8042 --/== Workflow Changes
8043 l_del_entity_ids(1) := p_in_rec.delivery_id;
8044 l_override_wf:= fnd_profile.value('WSH_OVERRIDE_SCPOD_WF');
8045 IF (l_override_wf = 'Y' AND WSH_WF_STD.Wf_Exists('DELIVERY_C',p_in_rec.delivery_id)) THEN
8046 WSH_WF_STD.Log_Wf_Exception('DELIVERY',
8047 p_in_rec.delivery_id,
8048 NULL,
8049 'SHIPPER',
8050 'WSH_DEL_SCPOD_PURGED',
8051 l_wf_rs);
8052 WSH_WF_STD.Purge_Entity(
8053 p_entity_type => 'DELIVERY',
8054 p_entity_ids => l_del_entity_ids,
8055 p_docommit => FALSE,
8056 x_success_count => l_purged_count,
8057 x_return_status => l_wf_rs);
8058 END IF;
8059
8060
8061 IF l_debug_on THEN
8062 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8063 END IF;
8064
8065 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
8066 p_entity_id => p_in_rec.delivery_id,
8067 p_event => 'oracle.apps.wsh.delivery.gen.closed',
8068 p_organization_id => l_org_id,
8069 x_return_status => l_wf_rs);
8070
8071 IF l_debug_on THEN
8072 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8073 END IF;
8074 -- Workflow Changes ==/
8075
8076 -- Close Exceptions for delivery and its contents
8077 IF l_debug_on THEN
8078 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_XC_UTIL.Close_Exceptions',WSH_DEBUG_SV.C_PROC_LEVEL);
8079 END IF;
8080 WSH_XC_UTIL.Close_Exceptions (
8081 p_api_version => 1.0,
8082 x_return_status => l_return_status,
8083 x_msg_count => l_msg_count,
8084 x_msg_data => l_msg_data,
8085 p_logging_entity_id => p_in_rec.delivery_id,
8086 p_logging_entity_name => 'DELIVERY',
8087 p_consider_content => 'Y'
8088 ) ;
8089
8090 IF ( l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
8091 x_return_status := l_return_status;
8092 wsh_util_core.add_message(x_return_status);
8093 IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
8094 l_num_errors := l_num_errors + 1;
8095 RAISE FND_API.G_EXC_ERROR;
8096 ELSE
8097 l_num_warnings := l_num_warnings + 1 ;
8098 END IF;
8099 END IF;
8100
8101 IF (p_in_rec.manual_flag = 'Y')
8102 THEN
8103 --{
8104 -- If manual Close then close any stops not closed.
8105 -- Assumption: check_close validates that the delivery
8106 -- exclusively owns these stops.
8107 --
8108 FOR delivery_stops_rec IN delivery_stops_csr(p_in_rec.delivery_id)
8109 LOOP
8110 --{
8111 l_cnt := l_cnt + 1;
8112 --
8113 l_stop_rows(l_cnt) := delivery_stops_rec.stop_id;
8114 --}
8115 END LOOP;
8116 --
8117 IF l_stop_rows.count > 0
8118 THEN
8119 --{
8120 -- since the delivery is CLOSED and it owns these stops exclusively,
8121 -- it is safe to set p_defer_interface_flag = 'Y'
8122 -- because nothing needs to be interfaced
8123 --
8124 -- Debug Statements
8125 --
8126 IF l_debug_on THEN
8127 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_ACTIONS.CHANGE_STATUS',WSH_DEBUG_SV.C_PROC_LEVEL);
8128 END IF;
8129 --
8130 wsh_trip_stops_actions.change_status
8131 (
8132 p_stop_rows => l_stop_rows,
8133 p_action => 'CLOSE',
8134 p_actual_date => p_in_rec.actual_date,
8135 p_defer_interface_flag => 'Y', -- bug 1578251
8136 x_return_status => l_return_status,
8137 --tkt
8138 p_caller => p_in_rec.caller
8139 );
8140 --
8141 wsh_util_core.api_post_call
8142 (
8143 p_return_status => l_return_status,
8144 x_num_warnings => l_num_warnings,
8145 x_num_errors => l_num_errors
8146 );
8147 --
8148 --
8149 --}
8150 END IF;
8151 --}
8152 END IF;
8153 --
8154 IF l_num_errors > 0
8155 THEN
8156 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8157 ELSIF l_num_warnings > 0
8158 THEN
8159 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8160 ELSE
8161 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8162 END IF;
8163 --
8164 --
8165 --
8166 -- Debug Statements
8167 --
8168 IF l_debug_on THEN
8169 WSH_DEBUG_SV.pop(l_module_name);
8170 END IF;
8171 --
8172 --}
8173 EXCEPTION
8174 --{
8175 --
8176 WHEN FND_API.G_EXC_ERROR THEN
8177
8178 --ROLLBACK TO dlvy_close_begin_sp;
8179 --
8180 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8181 --
8182 IF l_debug_on THEN
8183 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8184 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8185 END IF;
8186 --
8187 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8188
8189 --ROLLBACK TO dlvy_close_begin_sp;
8190 --
8191 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8192 --
8193 IF l_debug_on THEN
8194 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8195 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8196 END IF;
8197 --
8198 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8199 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8200 --
8201 IF l_debug_on THEN
8202 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8203 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8204 END IF;
8205 WHEN others THEN
8206 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.setClose',l_module_name);
8207 --
8208 --ROLLBACK TO dlvy_close_begin_sp;
8209 --
8210 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8211 --
8212 -- Debug Statements
8213 --
8214 IF l_debug_on THEN
8215 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8216 END IF;
8217 --
8218 --}
8219 END setClose;
8220 -- J-IB-NPARIKH---}
8221
8222
8223
8224 PROCEDURE change_Status ( p_del_rows IN wsh_util_core.id_tab_type,
8225 p_action IN VARCHAR2,
8226 p_actual_date IN DATE,
8227 x_return_status OUT NOCOPY VARCHAR2,
8228 p_caller IN VARCHAR2) IS
8229
8230 CURSOR del_status (l_delivery_id NUMBER) IS
8231 SELECT status_code, name,organization_id
8232 FROM wsh_new_deliveries
8233 WHERE delivery_id = l_delivery_id;
8234
8235 CURSOR delivery_leg_stops(l_delivery_id NUMBER) IS
8236 SELECT dg.pick_up_stop_id,
8237 pu_stop.status_code pu_status,
8238 dg.drop_off_stop_id,
8239 do_stop.status_code do_status
8240 FROM wsh_delivery_legs dg,
8241 wsh_trip_stops pu_stop,
8242 wsh_trip_stops do_stop
8243 WHERE dg.delivery_id = l_delivery_id
8244 AND pu_stop.stop_id = dg.pick_up_stop_id
8245 AND do_stop.stop_id = dg.drop_off_stop_id;
8246
8247 trip_cnt NUMBER;
8248 l_old_status VARCHAR2(2);
8249 l_name VARCHAR2(30);
8250 l_status_code VARCHAR2(2);
8251 l_del_rows wsh_util_core.id_tab_type;
8252
8253 l_delivery_id NUMBER;
8254 l_stop_rows wsh_util_core.id_tab_type;
8255
8256 l_manual_flag VARCHAR2(1);
8257 l_close_rs VARCHAR2(1);
8258
8259 l_num_error NUMBER := 0;
8260 k NUMBER := 0;
8261
8262 --bug 1929104
8263 l_actual_date date;
8264
8265 others EXCEPTION;
8266
8267 l_wf_rs VARCHAR2(1); -- Workflow Changes
8268
8269 -- bug 2335270
8270 l_user_id NUMBER;
8271 l_login_id NUMBER;
8272 --
8273 l_debug_on BOOLEAN;
8274 --
8275 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'CHANGE_STATUS';
8276 --
8277 l_return_status VARCHAR2(30);
8278 l_allowed VARCHAR2(10);
8279 l_in_rec WSH_DELIVERY_VALIDATIONS.ChgStatus_in_rec_type;
8280 --
8281 l_num_warnings NUMBER;
8282 l_num_errors NUMBER;
8283 l_num_dels_processed NUMBER;
8284 l_organization_id NUMBER;
8285 l_warehouse_type VARCHAR2 (3);
8286
8287 BEGIN
8288 --
8289 SAVEPOINT dlvy_chg_status_begin_sp;
8290 --
8291 -- Debug Statements
8292 --
8293 --
8294 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8295 --
8296 IF l_debug_on IS NULL
8297 THEN
8298 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8299 END IF;
8300 --
8301 IF l_debug_on THEN
8302 WSH_DEBUG_SV.push(l_module_name);
8303 --
8304 WSH_DEBUG_SV.log(l_module_name,'P_ACTION',P_ACTION);
8305 WSH_DEBUG_SV.log(l_module_name,'P_ACTUAL_DATE',P_ACTUAL_DATE);
8306 END IF;
8307 --
8308 --
8309 l_user_id := FND_GLOBAL.user_id;
8310 l_login_id := FND_GLOBAL.login_id;
8311 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8312 --
8313 l_num_warnings := 0;
8314 l_num_errors := 0;
8315 l_num_dels_processed := 0;
8316 --
8317
8318 IF (p_del_rows.count = 0) THEN
8319 raise others;
8320 END IF;
8321
8322 -- Close called from Stop close or from UI.
8323
8324 IF (p_actual_date IS NULL) THEN
8325 l_manual_flag := 'Y';
8326 l_actual_date := SYSDATE;
8327 ELSE
8328 l_manual_flag := 'N';
8329 l_actual_date := p_actual_date;
8330 END IF;
8331 --
8332 --FOR i IN 1..p_del_rows.count
8333 FOR i IN p_del_rows.FIRST..p_del_rows.LAST
8334 LOOP
8335 --{
8336 BEGIN
8337 --{
8338 SAVEPOINT dlvy_chg_status_sp;
8339 --
8340 OPEN del_status (p_del_rows(i));
8341 FETCH del_status INTO l_old_status , l_name,l_organization_id;
8342 --
8343 -- J-IB-NPARIKH---{
8344 IF (del_status%NOTFOUND)
8345 THEN
8346 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8347 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8348 --CLOSE del_status;
8349 l_num_errors := l_num_errors + 1;
8350 RAISE FND_API.G_EXC_ERROR;
8351 END IF;
8352 -- J-IB-NPARIKH---}
8353 --
8354 --
8355 CLOSE del_status;
8356
8357 IF (p_action = 'IN-TRANSIT')
8358 THEN
8359 --{
8360 -- J-IB-NPARIKH---{
8361 --
8362 l_in_rec.delivery_id := p_del_rows(i);
8363 l_in_rec.name := l_name;
8364 l_in_rec.status_code := l_old_status;
8365 l_in_rec.put_messages := TRUE;
8366 l_in_rec.actual_date := l_actual_date;
8367 l_in_rec.manual_flag := l_manual_flag;
8368 --tkt
8369 l_in_rec.caller := p_caller;
8370 --
8371 --
8372 -- Debug Statements
8373 --
8374 IF l_debug_on THEN
8375 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8376 END IF;
8377 --
8378 WSH_DELIVERY_VALIDATIONS.check_inTransit
8379 (
8380 p_in_rec => l_in_rec,
8381 x_return_status => l_return_status,
8382 x_allowed => l_Allowed
8383 );
8384 --
8385 IF l_debug_on THEN
8386 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8387 WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8388 END IF;
8389 --
8390 WSH_UTIL_CORE.api_post_call
8391 (
8392 p_return_status => l_return_status,
8393 x_num_warnings => l_num_warnings,
8394 x_num_errors => l_num_errors
8395 );
8396 --
8397 IF l_Allowed = 'Y'
8398 THEN
8399 NULL;
8400 ELSIF l_Allowed = 'YW'
8401 THEN
8402 l_num_warnings := l_num_warnings + 1;
8403 ELSIF l_Allowed = 'NW'
8404 THEN
8405 l_num_warnings := l_num_warnings + 1;
8406 RAISE wsh_util_core.g_exc_warning;
8407 ELSE
8408 l_num_errors := l_num_errors + 1;
8409 RAISE FND_API.G_EXC_ERROR;
8410 END IF;
8411 --
8412 --
8413 IF l_debug_on THEN
8414 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setInTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8415 END IF;
8416 --
8417 setInTransit
8418 (
8419 p_in_rec => l_in_rec,
8420 x_return_status => l_return_status
8421 );
8422 --
8423 IF l_debug_on THEN
8424 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8425 END IF;
8426 --
8427 WSH_UTIL_CORE.api_post_call
8428 (
8429 p_return_status => l_return_status,
8430 x_num_warnings => l_num_warnings,
8431 x_num_errors => l_num_errors
8432 );
8433 --
8434 l_num_dels_processed := l_num_dels_processed + 1;
8435 --}
8436 ELSIF (p_action = 'CLOSE')
8437 THEN
8438 --{
8439 --
8440 l_in_rec.delivery_id := p_del_rows(i);
8441 l_in_rec.name := l_name;
8442 l_in_rec.status_code := l_old_status;
8443 l_in_rec.put_messages := TRUE;
8444 l_in_rec.actual_date := l_actual_date;
8445 l_in_rec.manual_flag := l_manual_flag;
8446 --tkt
8447 l_in_rec.caller := p_caller;
8448 --
8449 --
8450 -- Debug Statements
8451 --
8452 IF l_debug_on THEN
8453 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.check_inTransit',WSH_DEBUG_SV.C_PROC_LEVEL);
8454 END IF;
8455 --
8456 WSH_DELIVERY_VALIDATIONS.check_close
8457 (
8458 p_in_rec => l_in_rec,
8459 x_return_status => l_return_status,
8460 x_allowed => l_Allowed
8461 );
8462 --
8463 IF l_debug_on THEN
8464 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8465 WSH_DEBUG_SV.log(l_module_name,'l_Allowed',l_Allowed);
8466 END IF;
8467 --
8468 WSH_UTIL_CORE.api_post_call
8469 (
8470 p_return_status => l_return_status,
8471 x_num_warnings => l_num_warnings,
8472 x_num_errors => l_num_errors
8473 );
8474 --
8475 IF l_Allowed = 'Y'
8476 THEN
8477 NULL;
8478 ELSIF l_Allowed = 'YW'
8479 THEN
8480 l_num_warnings := l_num_warnings + 1;
8481 ELSIF l_Allowed = 'NW'
8482 THEN
8483 l_num_warnings := l_num_warnings + 1;
8484 RAISE wsh_util_core.g_exc_warning;
8485 ELSE
8486 l_num_errors := l_num_errors + 1;
8487 RAISE FND_API.G_EXC_ERROR;
8488 END IF;
8489 --
8490 --
8491 IF l_debug_on THEN
8492 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit setClose',WSH_DEBUG_SV.C_PROC_LEVEL);
8493 END IF;
8494 --
8495 setClose
8496 (
8497 p_in_rec => l_in_rec,
8498 x_return_status => l_return_status
8499 );
8500 --
8501 IF l_debug_on THEN
8502 WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
8503 END IF;
8504 --
8505 WSH_UTIL_CORE.api_post_call
8506 (
8507 p_return_status => l_return_status,
8508 x_num_warnings => l_num_warnings,
8509 x_num_errors => l_num_errors
8510 );
8511 --
8512 l_num_dels_processed := l_num_dels_processed + 1;
8513 -- J-IB-NPARIKH---}
8514
8515 --}
8516 ELSIF (p_action = 'PACK')
8517 THEN
8518 --{
8519 --
8520 -- Debug Statements
8521 --
8522 IF l_debug_on THEN
8523 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_PACK',WSH_DEBUG_SV.C_PROC_LEVEL);
8524 END IF;
8525 --
8526 wsh_delivery_validations.check_pack(p_del_rows(i), l_return_status);
8527 --
8528 WSH_UTIL_CORE.api_post_call
8529 (
8530 p_return_status => l_return_status,
8531 x_num_warnings => l_num_warnings,
8532 x_num_errors => l_num_errors
8533 );
8534
8535 l_status_code := 'PA';
8536
8537 l_num_dels_processed := l_num_dels_processed + 1;
8538 --}
8539 -- Included 'RE-OPEN' in this if condition
8540 -- To fix bug 2359880
8541 -- Public api WSHDEPBB.pls calls with action='RE-OPEN'
8542 ELSIF (p_action IN ('REOPEN', 'RE-OPEN')) THEN
8543 --{
8544 --
8545 -- Debug Statements
8546 --
8547 IF l_debug_on THEN
8548 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.CHECK_REOPEN',WSH_DEBUG_SV.C_PROC_LEVEL);
8549 END IF;
8550 --
8551
8552
8553 -- Bug#3206399: Not Able to Re-open a Confirmed Delivery.
8554 --
8555 -- Call to check_reopen should return the status in local variable l_return_status.
8556 -- (This variable is used in further calls)
8557 -- x_return_status is assigned equal to l_return_status before exiting the
8558 -- procedure.
8559
8560 -- wsh_delivery_validations.check_reopen(p_del_rows(i), x_return_status);
8561
8562 wsh_delivery_validations.check_reopen(p_del_rows(i), l_return_status);
8563
8564 --
8565 WSH_UTIL_CORE.api_post_call
8566 (
8567 p_return_status => l_return_status,
8568 x_num_warnings => l_num_warnings,
8569 x_num_errors => l_num_errors
8570 );
8571 --
8572
8573 l_warehouse_type := WSH_EXTERNAL_INTERFACE_SV.Get_Warehouse_Type(
8574 P_Organization_ID => l_organization_id,
8575 X_Return_Status => l_return_status);
8576
8577 IF l_debug_on THEN
8578 wsh_debug_sv.log (l_module_name, 'Return status from get warehouse type', l_return_status);
8579 wsh_debug_sv.log (l_module_name, 'Warehouse type ', l_warehouse_type);
8580 END IF;
8581
8582 WSH_UTIL_CORE.api_post_call (
8583 p_return_status => l_return_status,
8584 x_num_warnings => l_num_warnings,
8585 x_num_errors => l_num_errors);
8586
8587 IF (l_warehouse_type='TPW') THEN
8588 l_status_code := 'SA';
8589 ELSE
8590 l_status_code := 'OP';
8591 END IF;
8592
8593 IF l_debug_on THEN
8594 wsh_debug_sv.log (l_module_name, 'l_status_code',l_status_code);
8595 END IF;
8596
8597
8598 update wsh_new_deliveries
8599 set status_code = l_status_code,
8600 confirm_date = null,--6453740
8601 confirmed_by = null,--6453740
8602 last_update_date = SYSDATE ,
8603 last_updated_by = l_user_id,
8604 last_update_login = l_login_id
8605 where delivery_id = p_del_rows(i);
8606
8607 IF (SQL%NOTFOUND) THEN
8608 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8609 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8610 l_num_errors := l_num_errors + 1;
8611 RAISE FND_API.G_EXC_ERROR;
8612 END IF;
8613
8614 -- K: MDC:
8615 -- Reopen the consol delivery as well if it exists and is not open
8616 IF l_status_code = 'OP' THEN
8617
8618 -- bug 4891897, sql 15037864
8619 -- removed wsh_new_deliveries d2
8620
8621 update wsh_new_deliveries d1
8622 set d1.status_code = l_status_code,
8623 d1.last_update_date = SYSDATE,
8624 d1.last_updated_by = l_user_id,
8625 d1.last_update_login = l_login_id
8626 where d1.status_code = 'CO'
8627 and exists (
8628 select 'X'
8629 from wsh_delivery_legs l1, wsh_delivery_legs l2
8630 where l2.delivery_id = p_del_rows(i)
8631 and l2.parent_delivery_leg_id = l1.delivery_leg_id
8632 and l1.delivery_id = d1.delivery_id);
8633 END IF;
8634
8635 --/== Workflow Changes
8636 IF (l_status_code = 'OP') THEN
8637 IF l_debug_on THEN
8638 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WF_STD.RAISE_EVENT',WSH_DEBUG_SV.C_PROC_LEVEL);
8639 END IF;
8640
8641 WSH_WF_STD.RAISE_EVENT(p_entity_type => 'DELIVERY',
8642 p_entity_id => p_del_rows(i),
8643 p_event => 'oracle.apps.wsh.delivery.gen.open',
8644 p_organization_id => l_organization_id,
8645 x_return_status => l_wf_rs);
8646
8647 IF l_debug_on THEN
8648 WSH_DEBUG_SV.log(l_module_name,'Return status after calling WSH_WF_STD.RAISE_EVENT => ',l_wf_rs);
8649 END IF;
8650 END IF;
8651 -- Workflow Changes ==/
8652
8653 l_num_dels_processed := l_num_dels_processed + 1;
8654
8655 --}
8656 END IF;
8657 --}
8658 EXCEPTION
8659 --{
8660 WHEN FND_API.G_EXC_ERROR
8661 THEN
8662 --{
8663 ROLLBACK TO dlvy_chg_status_sp;
8664 --
8665 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8666 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8667 --
8668 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR,l_module_name);
8669 --}
8670 WHEN wsh_util_core.g_exc_warning
8671 THEN
8672 --{
8673 ROLLBACK TO dlvy_chg_status_sp;
8674 --
8675 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_ERROR');
8676 FND_MESSAGE.SET_TOKEN('DEL_NAME',l_name);
8677 --
8678 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_WARNING,l_module_name);
8679 --}
8680 --}
8681 END;
8682 --}
8683 END LOOP;
8684 --
8685 --
8686 IF l_num_dels_processed = 0
8687 THEN
8688 l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8689 ELSIF l_num_dels_processed < p_del_rows.count
8690 THEN
8691 l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8692 ELSIF l_num_warnings > 0
8693 THEN
8694 l_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8695 ELSE
8696 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8697 END IF;
8698 --
8699 x_return_status := l_return_status;
8700 --
8701 IF p_del_rows.count > 1
8702 THEN
8703 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_CHANGE_STATUS_SUMMARY');
8704 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',l_num_dels_processed);
8705 FND_MESSAGE.SET_TOKEN('NUM_ERROR',p_del_rows.count - l_num_dels_processed);
8706 wsh_util_core.add_message(l_return_status,l_module_name);
8707 END IF;
8708 --
8709 -- Debug Statements
8710 --
8711 IF l_debug_on THEN
8712 WSH_DEBUG_SV.pop(l_module_name);
8713 END IF;
8714 --
8715 EXCEPTION
8716 WHEN FND_API.G_EXC_ERROR THEN
8717 ROLLBACK TO dlvy_chg_status_begin_sp;
8718 --
8719 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8720 --
8721 IF l_debug_on THEN
8722 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8723 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
8724 END IF;
8725 --
8726 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8727
8728 ROLLBACK TO dlvy_chg_status_begin_sp;
8729 --
8730 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
8731 --
8732 IF l_debug_on THEN
8733 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
8734 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
8735 END IF;
8736 --
8737 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
8738 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
8739 --
8740 IF l_debug_on THEN
8741 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
8742 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
8743 END IF;
8744 --
8745 WHEN others THEN
8746
8747 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.CHANGE_STATUS',l_module_name);
8748 ROLLBACK TO dlvy_chg_status_begin_sp;
8749 --
8750 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8751
8752 --
8753 -- Debug Statements
8754 --
8755 IF l_debug_on THEN
8756 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
8757 END IF;
8758 --
8759 END CHANGE_STATUS;
8760
8761
8762 -- Following is old procedure as of I, which is replaced by proc. above in J
8763 -- remove after ut
8764
8765 /* bug 2335270 Included last_update_date,last_updated_by and last_update_login
8766 in wsh_new_deliveries and wsh_delivery_details */
8767
8768 -- J-IB-HEALI---{
8769 PROCEDURE Complete_Leg_Sequence
8770 ( p_delivery_id IN NUMBER,
8771 p_update_flag IN VARCHAR2,
8772 p_insert_msg IN BOOLEAN default true,
8773 x_leg_count OUT NOCOPY NUMBER,
8774 x_leg_complete OUT NOCOPY varchar2,
8775 x_return_status OUT NOCOPY VARCHAR2) IS
8776
8777 CURSOR delivery_info IS
8778 SELECT initial_pickup_location_id,
8779 ultimate_dropoff_location_id
8780 FROM wsh_new_deliveries
8781 WHERE delivery_id = p_delivery_id;
8782
8783 CURSOR count_legs IS
8784 SELECT count(*)
8785 FROM wsh_delivery_legs
8786 WHERE delivery_id = p_delivery_id;
8787
8788 CURSOR pickup_delivery_legs(l_pickup_location_id IN NUMBER) IS
8789 SELECT dg.delivery_leg_id leg_id,
8790 st1.stop_location_id pickup,
8791 st2.stop_location_id dropoff
8792 FROM wsh_delivery_legs dg,
8793 wsh_trip_stops st1,
8794 wsh_trip_stops st2
8795 WHERE dg.delivery_id = p_delivery_id AND
8796 st1.stop_id = dg.pick_up_stop_id AND
8797 st2.stop_id = dg.drop_off_stop_id AND
8798 st1.stop_location_id = l_pickup_location_id;
8799
8800 CURSOR dropoff_delivery_legs(l_pickup_location_id IN NUMBER) IS
8801 SELECT count(*)
8802 FROM wsh_delivery_legs dg,
8803 wsh_trip_stops st1,
8804 wsh_trip_stops st2
8805 WHERE dg.delivery_id = p_delivery_id AND
8806 st1.stop_id = dg.pick_up_stop_id AND
8807 st2.stop_id = dg.drop_off_stop_id AND
8808 st2.stop_location_id = l_pickup_location_id;
8809
8810 l_leg_id NUMBER;
8811 l_seq_num NUMBER;
8812 l_pickup_location_id NUMBER;
8813 l_dropoff_location_id NUMBER;
8814 l_final_dropoff NUMBER;
8815 l_leg_count NUMBER := 0;
8816 l_count NUMBER := 0;
8817
8818 others EXCEPTION;
8819
8820 l_debug_on BOOLEAN;
8821 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Complete_Leg_Sequence';
8822 BEGIN
8823
8824 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
8825 --
8826 IF l_debug_on IS NULL
8827 THEN
8828 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
8829 END IF;
8830 --
8831 IF l_debug_on THEN
8832 WSH_DEBUG_SV.push(l_module_name);
8833 --
8834 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
8835 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
8836 END IF;
8837 --
8838 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
8839 x_leg_complete := 'N';
8840
8841
8842 OPEN delivery_info;
8843 FETCH delivery_info INTO l_pickup_location_id, l_dropoff_location_id;
8844
8845 IF (delivery_info%NOTFOUND) THEN
8846 CLOSE delivery_info;
8847
8848 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8849 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NOT_FOUND');
8850 wsh_util_core.add_message(x_return_status);
8851
8852
8853 IF l_debug_on THEN
8854 WSH_DEBUG_SV.pop(l_module_name);
8855 END IF;
8856 --
8857 RETURN;
8858 END IF;
8859
8860 l_final_dropoff := l_dropoff_location_id;
8861
8862 IF (l_pickup_location_id IS NULL) OR (l_dropoff_location_id IS NULL)THEN
8863 raise others;
8864 END IF;
8865 CLOSE delivery_info;
8866
8867
8868 OPEN count_legs;
8869 FETCH count_legs INTO l_leg_count;
8870 CLOSE count_legs;
8871
8872 x_leg_count := l_leg_count;
8873
8874 IF (l_leg_count = 0 OR l_leg_count IS NULL) THEN
8875 IF l_debug_on THEN
8876 WSH_DEBUG_SV.pop(l_module_name);
8877 END IF;
8878 --
8879 RETURN;
8880 END IF;
8881
8882
8883 l_seq_num := 0;
8884
8885 LOOP --{
8886 OPEN pickup_delivery_legs(l_pickup_location_id);
8887 FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8888
8889 IF (pickup_delivery_legs%NOTFOUND) THEN
8890 CLOSE pickup_delivery_legs;
8891 EXIT;
8892 END IF;
8893
8894
8895 IF (l_leg_id IS NOT NULL) THEN
8896 l_seq_num := l_seq_num + 1;
8897
8898 IF p_update_flag = 'Y' THEN
8899 UPDATE wsh_delivery_legs
8900 SET sequence_number = l_seq_num * 10
8901 WHERE delivery_leg_id = l_leg_id;
8902
8903 IF (SQL%NOTFOUND) THEN
8904 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
8905
8906 FND_MESSAGE.SET_NAME('WSH','WSH_LEG_NOT_FOUND');
8907 wsh_util_core.add_message(x_return_status);
8908
8909 IF l_debug_on THEN
8910 WSH_DEBUG_SV.pop(l_module_name);
8911 END IF;
8912 --
8913 RETURN;
8914 END IF;
8915 END IF; /* added for p_update_flag */
8916 END IF; /* l_leg_id IS NOT NULL */
8917
8918
8919 FETCH pickup_delivery_legs INTO l_leg_id, l_pickup_location_id, l_dropoff_location_id;
8920 IF (pickup_delivery_legs%FOUND) THEN
8921 CLOSE pickup_delivery_legs;
8922
8923 IF (p_insert_msg) THEN
8924 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8925 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8926 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8927 END IF;
8928
8929 IF l_debug_on THEN
8930 WSH_DEBUG_SV.pop(l_module_name);
8931 END IF;
8932 --
8933 RETURN;
8934 END IF;
8935 CLOSE pickup_delivery_legs;
8936
8937 OPEN dropoff_delivery_legs(l_dropoff_location_id);
8938 FETCH dropoff_delivery_legs INTO l_count;
8939 CLOSE dropoff_delivery_legs;
8940
8941 IF (l_count > 1) THEN
8942 IF (p_insert_msg) THEN
8943 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_MULTIPLE_LEGS');
8944 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8945 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8946 END IF;
8947
8948 IF l_debug_on THEN
8949 WSH_DEBUG_SV.pop(l_module_name);
8950 END IF;
8951 --
8952 RETURN;
8953 END IF;
8954
8955 l_pickup_location_id := l_dropoff_location_id;
8956 END LOOP; --}
8957
8958
8959
8960 IF (l_seq_num <> l_leg_count) THEN
8961
8962 IF (p_insert_msg) THEN
8963 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INVALID_FLOW');
8964 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8965 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8966 END IF;
8967 --
8968 IF l_debug_on THEN
8969 WSH_DEBUG_SV.pop(l_module_name);
8970 END IF;
8971 --
8972 RETURN;
8973 END IF;
8974
8975
8976 IF (l_final_dropoff <> l_dropoff_location_id) THEN
8977 x_leg_complete := 'NW';
8978
8979 IF (p_insert_msg) THEN
8980 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_NO_ULTIMATE_DROPOFF');
8981 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_delivery_id));
8982 wsh_util_core.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
8983 END IF;
8984 RETURN;
8985 END IF;
8986
8987
8988 x_leg_complete := 'Y';
8989
8990 IF l_debug_on THEN
8991 WSH_DEBUG_SV.pop(l_module_name);
8992 END IF;
8993 --
8994 EXCEPTION
8995 WHEN others THEN
8996 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.Complete_Leg_Sequence');
8997 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
8998
8999 IF l_debug_on THEN
9000 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9001 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9002 END IF;
9003 --
9004 END Complete_Leg_Sequence;
9005
9006
9007 PROCEDURE Update_Leg_Sequence
9008 ( p_delivery_id IN NUMBER,
9009 p_update_flag IN VARCHAR2,
9010 x_return_status OUT NOCOPY VARCHAR2) IS
9011
9012 l_leg_count NUMBER := 0;
9013 l_leg_complete varchar2(10);
9014 l_return_status varchar2(1);
9015
9016 l_debug_on BOOLEAN;
9017 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'UPDATE_LEG_SEQUENCE';
9018 BEGIN
9019 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9020 --
9021 IF l_debug_on IS NULL
9022 THEN
9023 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9024 END IF;
9025 --
9026 IF l_debug_on THEN
9027 WSH_DEBUG_SV.push(l_module_name);
9028 --
9029 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9030 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_FLAG',P_UPDATE_FLAG);
9031 END IF;
9032
9033
9034 Complete_Leg_Sequence
9035 ( p_delivery_id => p_delivery_id,
9036 p_update_flag => p_update_flag,
9037 x_leg_count => l_leg_count,
9038 x_leg_complete => l_leg_complete,
9039 x_return_status => l_return_status);
9040
9041 IF l_debug_on THEN
9042 WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',l_return_status);
9043 WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
9044 WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
9045 END IF;
9046
9047 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9048 IF (l_leg_complete='NW') THEN
9049 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9050 ELSIF (l_leg_complete='Y') THEN
9051 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9052 ELSIF (l_leg_complete='N') THEN
9053 IF (l_leg_count IS NULL or l_leg_count=0) THEN
9054 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9055 ELSE
9056 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9057 END IF;
9058 END IF;
9059 ELSE
9060 x_return_status:= l_return_status;
9061 END IF;
9062
9063
9064 IF l_debug_on THEN
9065 WSH_DEBUG_SV.log(l_module_name,'x_return_status',x_return_status);
9066 WSH_DEBUG_SV.pop(l_module_name);
9067 END IF;
9068 --
9069 EXCEPTION
9070 WHEN others THEN
9071 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
9072 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9073
9074 IF l_debug_on THEN
9075 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9076 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9077 END IF;
9078 --
9079 END Update_Leg_Sequence;
9080
9081
9082
9083 PROCEDURE Process_Leg_Sequence
9084 ( p_delivery_id IN NUMBER,
9085 p_update_del_flag IN VARCHAR2,
9086 p_update_leg_flag IN VARCHAR2,
9087 x_leg_complete OUT NOCOPY boolean,
9088 x_return_status OUT NOCOPY VARCHAR2) IS
9089
9090 l_leg_count NUMBER := 0;
9091 l_leg_complete varchar2(10);
9092 l_update_flag varchar2(1):='N';
9093
9094
9095 l_debug_on BOOLEAN;
9096 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Leg_Sequence';
9097 BEGIN
9098 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9099 --
9100 IF l_debug_on IS NULL
9101 THEN
9102 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9103 END IF;
9104 --
9105 IF l_debug_on THEN
9106 WSH_DEBUG_SV.push(l_module_name);
9107 --
9108 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9109 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_del_FLAG',P_UPDATE_del_FLAG);
9110 WSH_DEBUG_SV.log(l_module_name,'P_UPDATE_leg_FLAG',P_UPDATE_leg_FLAG);
9111 END IF;
9112
9113
9114 Complete_Leg_Sequence
9115 ( p_delivery_id => p_delivery_id,
9116 p_update_flag => p_update_leg_flag,
9117 p_insert_msg => false,
9118 x_leg_count => l_leg_count,
9119 x_leg_complete => l_leg_complete,
9120 x_return_status => x_return_status);
9121
9122 IF l_debug_on THEN
9123 WSH_DEBUG_SV.log(l_module_name,'After Call Complete_Leg_Sequence',x_return_status);
9124 WSH_DEBUG_SV.log(l_module_name,'l_leg_count',l_leg_count);
9125 WSH_DEBUG_SV.log(l_module_name,'l_leg_complete',l_leg_complete);
9126 END IF;
9127
9128 IF (x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
9129 IF (l_leg_complete = 'Y' ) THEN
9130 x_leg_complete := true;
9131 l_update_flag:='Y';
9132 ELSE
9133 x_leg_complete := false;
9134 l_update_flag:= null;
9135 END IF;
9136
9137
9138 IF (p_update_del_flag='Y') THEN
9139 UPDATE wsh_new_deliveries
9140 SET ITINERARY_COMPLETE = l_update_flag,
9141 last_update_date = sysdate,
9142 last_updated_by = FND_GLOBAL.USER_ID
9143 WHERE delivery_id= p_delivery_id;
9144 END IF;
9145
9146 END IF;
9147
9148
9149 IF l_debug_on THEN
9150 IF (x_leg_complete) THEN
9151 WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete TRUE');
9152 ELSE
9153 WSH_DEBUG_SV.logmsg(l_module_name,'x_leg_complete FALSE');
9154 END IF;
9155
9156 WSH_DEBUG_SV.pop(l_module_name);
9157 END IF;
9158 --
9159 EXCEPTION
9160 WHEN others THEN
9161 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.UPDATE_LEG_SEQUENCE');
9162 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9163
9164 IF l_debug_on THEN
9165 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9166 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9167 END IF;
9168 --
9169 END Process_Leg_Sequence;
9170 -- J-IB-HEALI---}
9171
9172 --
9173 -- Procedure: Generate_Loading_Seq
9174 -- Parameters: p_del_rows - Delivery ids
9175 -- x_return_status - status of procedure call
9176 -- Description: This procedure is used to generate loading sequence for deliveries
9177 --
9178
9179 PROCEDURE Generate_Loading_Seq
9180 (p_del_rows IN wsh_util_core.id_tab_type,
9181 x_return_status OUT NOCOPY VARCHAR2) IS
9182
9183 CURSOR loading_order (l_delivery_id NUMBER) IS
9184 SELECT loading_order_flag
9185 FROM wsh_new_deliveries
9186 WHERE delivery_id = l_delivery_id;
9187
9188 -- Bug 1421549: Changed the logic for load sequencing
9189 cont_str VARCHAR2(1000) :=
9190 'SELECT dd.delivery_detail_id '||
9191 'FROM wsh_delivery_details dd, '||
9192 'wsh_delivery_assignments_v da '||
9193 'WHERE dd.delivery_detail_id = da.delivery_detail_id AND '||
9194 'da.parent_delivery_detail_id = :cont_id AND '||
9195 'container_flag = ''N'' '||
9196 'ORDER BY customer_prod_seq ';
9197
9198 -- This cursor fetches container_ids and average customer prod seq
9199 -- numbers for lines in each container for a particular delivery. The
9200 -- dynamic statement is used to add an ASC or DESC clause to the order by
9201 -- based on Forward or Reverse loading order of the delivery
9202
9203 stmt_str VARCHAR2(1000) :=
9204 'SELECT da.parent_delivery_detail_id, '||
9205 'avg(customer_prod_seq) avg_prod_seq, '||
9206 'count(*) '||
9207 'FROM wsh_delivery_details dd, '||
9208 'wsh_delivery_assignments_v da '||
9209 'WHERE dd.delivery_detail_id = da.delivery_detail_id AND '||
9210 'dd.customer_prod_seq IS NOT NULL AND '||
9211 'dd.container_flag = ''N'' AND '||
9212 'da.parent_delivery_detail_id IS NOT NULL AND '||
9213 'da.delivery_id IS NOT NULL AND '||
9214 'da.delivery_id = :del_id '||
9215 'GROUP BY parent_delivery_detail_id '||
9216 'ORDER BY avg_prod_seq ';
9217
9218 TYPE detailcurtype IS REF CURSOR;
9219 TYPE contcurtype IS REF CURSOR;
9220 detailinfo_cv detailcurtype;
9221 continfo_cv contcurtype;
9222
9223 l_cont_id NUMBER;
9224 l_avg_prod_seq NUMBER;
9225 l_num_error BINARY_INTEGER;
9226 l_cnt BINARY_INTEGER;
9227 l_old_cnt BINARY_INTEGER;
9228 l_lines_cnt BINARY_INTEGER;
9229 l_order_flag VARCHAR2(2);
9230 str1 VARCHAR2(5);
9231 cont1 VARCHAR2(5);
9232 l_delivery_detail_id NUMBER;
9233 l_cont_cnt BINARY_INTEGER;
9234
9235 others EXCEPTION;
9236
9237 --
9238 l_debug_on BOOLEAN;
9239 --
9240 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GENERATE_LOADING_SEQ';
9241 --
9242 BEGIN
9243
9244 --
9245 -- Debug Statements
9246 --
9247 --
9248 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9249 --
9250 IF l_debug_on IS NULL
9251 THEN
9252 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9253 END IF;
9254 --
9255 IF l_debug_on THEN
9256 WSH_DEBUG_SV.push(l_module_name);
9257 END IF;
9258 --
9259 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
9260
9261 IF (p_del_rows.count = 0) THEN
9262 raise others;
9263 END IF;
9264
9265 FOR i IN 1..p_del_rows.count LOOP
9266
9267 OPEN loading_order (p_del_rows(i));
9268 FETCH loading_order INTO l_order_flag;
9269
9270 IF (loading_order%NOTFOUND) OR (l_order_flag IS NULL) THEN
9271 IF (loading_order%ISOPEN) THEN
9272 CLOSE loading_order;
9273 END IF;
9274 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_INV_LOADING_ORDER');
9275 --
9276 -- Debug Statements
9277 --
9278 IF l_debug_on THEN
9279 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9280 END IF;
9281 --
9282 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9283 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9284 wsh_util_core.add_message(x_return_status);
9285 l_num_error := l_num_error + 1;
9286 goto loop_end;
9287 END IF;
9288
9289 IF (loading_order%ISOPEN) THEN
9290 CLOSE loading_order;
9291 END IF;
9292
9293 -- Select containers for each delivery by ordering avg container prod seq num
9294
9295 IF (l_order_flag = 'F') OR (l_order_flag = 'FI') THEN
9296 str1 := 'ASC';
9297 ELSE
9298 str1 := 'DESC';
9299 END IF;
9300
9301 -- Bug 1421549: Changed the logic for load sequencing
9302 IF (l_order_flag = 'R') OR (l_order_flag = 'FI') THEN
9303 cont1 := 'DESC';
9304 ELSE
9305 cont1 := 'ASC';
9306 END IF;
9307
9308 -- bug # 1716147. Fixed the incorrect messages issue
9309 l_cont_cnt := 0;
9310
9311 -- bug 3442398 moved this line from within the container loop to here
9312 l_cnt := 0;
9313
9314 OPEN detailinfo_cv FOR stmt_str || str1 USING p_del_rows(i);
9315 LOOP
9316
9317 l_cont_id := null;
9318
9319 FETCH detailinfo_cv INTO l_cont_id, l_avg_prod_seq, l_lines_cnt;
9320
9321 -- Added by rvishnuv on 04/04/2001
9322 EXIT WHEN detailinfo_cv%NOTFOUND;
9323
9324 l_cont_cnt := l_cont_cnt + 1;
9325
9326
9327 -- Bug 1421549: Changed the logic for load sequencing
9328 OPEN continfo_cv FOR cont_str || cont1 USING l_cont_id ;
9329 LOOP
9330
9331 FETCH continfo_cv INTO l_delivery_detail_id ;
9332
9333 EXIT WHEN continfo_cv%NOTFOUND;
9334
9335 l_cnt := l_cnt + 1;
9336
9337 UPDATE wsh_delivery_details
9338 SET load_seq_number = l_cnt
9339 WHERE delivery_detail_id = l_delivery_detail_id;
9340
9341 END LOOP;
9342
9343 IF (l_cnt = 0) THEN
9344 IF (continfo_cv%ISOPEN) THEN
9345 CLOSE continfo_cv;
9346 END IF;
9347 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_LINE_ERROR');
9348 --
9349 -- Debug Statements
9350 --
9351 IF l_debug_on THEN
9352 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9353 END IF;
9354 --
9355 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9356 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9357 wsh_util_core.add_message(x_return_status);
9358 l_num_error := l_num_error + 1;
9359 EXIT;
9360 END IF;
9361
9362 IF (continfo_cv%ISOPEN) THEN
9363 CLOSE continfo_cv;
9364 END IF;
9365
9366 END LOOP;
9367
9368 IF (l_cont_cnt = 0) THEN
9369 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_CONT_ERROR');
9370 --
9371 -- Debug Statements
9372 --
9373 IF l_debug_on THEN
9374 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.GET_NAME',WSH_DEBUG_SV.C_PROC_LEVEL);
9375 END IF;
9376 --
9377 FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(p_del_rows(i)));
9378 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9379 wsh_util_core.add_message(x_return_status);
9380 l_num_error := l_num_error + 1;
9381 END IF;
9382
9383
9384 IF (detailinfo_cv%ISOPEN) THEN
9385 CLOSE detailinfo_cv;
9386 END IF;
9387
9388 <<loop_end>>
9389 null;
9390
9391 END LOOP;
9392
9393 IF (p_del_rows.count > 1) THEN
9394 IF (l_num_error > 0) THEN
9395 FND_MESSAGE.SET_NAME('WSH','WSH_DEL_LOAD_SEQ_SUMMARY');
9396 FND_MESSAGE.SET_TOKEN('NUM_ERROR',l_num_error);
9397 FND_MESSAGE.SET_TOKEN('NUM_SUCCESS',p_del_rows.count - l_num_error);
9398
9399 IF (p_del_rows.count = l_num_error) THEN
9400 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9401 ELSE
9402 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
9403 END IF;
9404
9405 wsh_util_core.add_message(x_return_status);
9406 END IF;
9407 END IF;
9408
9409 --
9410 -- Debug Statements
9411 --
9412 IF l_debug_on THEN
9413 WSH_DEBUG_SV.pop(l_module_name);
9414 END IF;
9415 --
9416 EXCEPTION
9417 WHEN others THEN
9418 IF (continfo_cv%ISOPEN) THEN
9419 CLOSE continfo_cv;
9420 END IF;
9421 IF (detailinfo_cv%ISOPEN) THEN
9422 CLOSE detailinfo_cv;
9423 END IF;
9424 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.GENERATE_LOADING_SEQ');
9425 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
9426
9427 --
9428 -- Debug Statements
9429 --
9430 IF l_debug_on THEN
9431 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
9432 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
9433 END IF;
9434 --
9435 END Generate_Loading_Seq;
9436
9437
9438 --
9439 -- Procedure: Assign_Delivery_Update
9440 -- Parameters: p_delivery_id - Delivery id
9441 -- p_del_params - Parameters to update the delivery with
9442 -- x_return_status - status of procedure call
9443 -- Description: This procedure is used to update the delivery with grouping
9444 -- attribute values from lines, while assigning lines to delivery
9445 --
9446
9447 PROCEDURE Assign_Delivery_Update
9448 (p_delivery_id IN NUMBER,
9449 p_del_params IN wsh_delivery_autocreate.grp_attr_rec_type,
9450 x_return_status OUT NOCOPY VARCHAR2) IS
9451
9452 l_del_info wsh_new_deliveries_pvt.delivery_rec_type;
9453
9454 --
9455 l_debug_on BOOLEAN;
9456 --
9457 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'ASSIGN_DELIVERY_UPDATE';
9458 --
9459 BEGIN
9460
9461 --
9462 -- Debug Statements
9463 --
9464 --
9465 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
9466 --
9467 IF l_debug_on IS NULL
9468 THEN
9469 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
9470 END IF;
9471 --
9472 IF l_debug_on THEN
9473 WSH_DEBUG_SV.push(l_module_name);
9474 --
9475 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID',P_DELIVERY_ID);
9476 END IF;
9477 --
9478 --
9479 -- Debug Statements
9480 --
9481 IF l_debug_on THEN
9482 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.POPULATE_RECORD',WSH_DEBUG_SV.C_PROC_LEVEL);
9483 END IF;
9484 --
9485 wsh_new_deliveries_pvt.populate_record( p_delivery_id, l_del_info, x_return_status);
9486
9487 IF (x_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
9488 --
9489 -- Debug Statements
9490 --
9491 IF l_debug_on THEN
9492 WSH_DEBUG_SV.pop(l_module_name);
9493 END IF;
9494 --
9495 RETURN;
9496 END IF;
9497
9498 --
9499 IF l_debug_on THEN
9500 WSH_DEBUG_SV.log(l_module_name,'l_del_info.shipment_direction',l_del_info.shipment_direction);
9501 END IF;
9502 --
9503
9504 IF NVL(l_del_info.shipment_direction,'O') IN ('O','IO') -- J-IB-NPARIKH
9505 THEN
9506 --{
9507 -- Set optional grouping attributes for delivery.
9508 l_del_info.customer_id := nvl(l_del_info.customer_id, p_del_params.customer_id);
9509 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);
9510 l_del_info.fob_code := nvl(l_del_info.fob_code, p_del_params.fob_code);
9511 l_del_info.freight_terms_code := nvl(l_del_info.freight_terms_code, p_del_params.freight_terms_code);
9512 l_del_info.ship_method_code := nvl(l_del_info.ship_method_code, p_del_params.ship_method_code);
9513 l_del_info.carrier_id := nvl(l_del_info.carrier_id, p_del_params.carrier_id);
9514
9515 WSH_DELIVERY_AUTOCREATE.Create_Update_Hash(
9516 p_delivery_rec => l_del_info,
9517 x_return_status => x_return_status);
9518
9519
9520 --
9521 -- Debug Statements
9522 --
9523 IF l_debug_on THEN
9524 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_NEW_DELIVERIES_PVT.UPDATE_DELIVERY',WSH_DEBUG_SV.C_PROC_LEVEL);
9525 END IF;
9526 --
9527 wsh_new_deliveries_pvt.update_delivery( null, l_del_info, x_return_status);
9528
9529 --}
9530 END IF;
9531
9532 --
9533 -- Debug Statements
9534 --
9535 IF l_debug_on THEN
9536 WSH_DEBUG_SV.pop(l_module_name);
9537 END IF;
9538 --
9539 END Assign_Delivery_Update;
9540
9541 --
9542 --
9543 -- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
9544 --
9545 -- finito CArrier Selection FTE Integration Changes
9546 -- **************************************************************************
9547
9548
9549 -- J-IB-NPARIKH---{
9550
9551
9552 -- ----------------------------------------------------------------------
9553 -- Procedure: update_freight_terms
9554 -- Parameters: p_delivery_id in number
9555 -- p_action_code in varchar2
9556 -- 'ASSIGN' : Assign lines to delivery
9557 -- 'UNASSIGN' : Unassign lines from delivery
9558 -- p_line_freight_terms_code in varchar2
9559 -- NULL : Caller did not pass value
9560 -- 'MIXED' : Lines assigned/unassigned have mixed/null freight terms
9561 -- Other value: All lines assigned/unassigned have same freight term , equal to this value
9562 -- x_freight_terms_Code out varchar2
9563 -- Delivery's freight term code
9564 -- Description: This procedure can be called after assign/unassign lines from delivery.
9565 --
9566 -- For action ASSIGN :
9567 -- If delivery freight term is not null and new lines have different/null freight terms,
9568 -- update delivery freight term to NULL
9569 -- For action UNASSIGN :
9570 -- If delivery freight term is null and all existing lines in delivery have same freight
9571 -- term, update delivery with the same
9572 --
9573 -- ----------------------------------------------------------------------
9574 PROCEDURE update_freight_terms
9575 (
9576 p_delivery_id IN NUMBER,
9577 p_action_code IN VARCHAR2 DEFAULT 'UNASSIGN',
9578 p_line_freight_terms_Code IN VARCHAR2 DEFAULT NULL,
9579 x_freight_terms_Code OUT NOCOPY VARCHAR2,
9580 x_return_status OUT NOCOPY VARCHAR2
9581 )
9582 IS
9583 --{
9584 --
9585 -- Get delivery information
9586 --
9587 CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9588 IS
9589 SELECT freight_terms_code, name,
9590 nvl(shipment_direction,'O') shipment_direction
9591 FROM wsh_new_deliveries
9592 WHERE delivery_id = p_delivery_id;
9593 --
9594 --
9595 -- Lock delivery
9596 --
9597 CURSOR lock_dlvy_csr (p_delivery_id IN NUMBER)
9598 IS
9599 SELECT 1
9600 FROM wsh_new_deliveries
9601 WHERE delivery_id = p_delivery_id
9602 FOR UPDATE OF freight_terms_code NOWAIT;
9603 --
9604 --
9605 CURSOR line_csr (p_delivery_id IN NUMBER)
9606 IS
9607 SELECT distinct freight_terms_code
9608 FROM wsh_delivery_details wdd,
9609 wsh_delivery_assignments_v wda
9610 WHERE wdd.delivery_detail_id = wda.delivery_detail_id
9611 AND wda.delivery_id = p_delivery_id
9612 AND NVL(wdd.container_flag,'N') = 'N';
9613 --
9614 l_has_lines VARCHAR2(1);
9615 l_dlvy_freight_terms_code VARCHAR2(30);
9616 l_line_freight_terms_code VARCHAR2(30);
9617 l_shipment_direction VARCHAR2(30);
9618 l_name VARCHAR2(100);
9619 l_cnt NUMBER;
9620 --
9621 e_locked exception ;
9622 PRAGMA EXCEPTION_INIT(e_locked, -54);
9623 --
9624 e_end_of_api EXCEPTION;
9625 e_end_of_sub EXCEPTION;
9626 e_end_of_api1 EXCEPTION;
9627 --
9628 e_update EXCEPTION;
9629
9630 --
9631 l_debug_on BOOLEAN;
9632 --
9633 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_freight_terms';
9634 --
9635 --}
9636 BEGIN
9637 --{
9638 --
9639 l_debug_on := wsh_debug_interface.g_debug;
9640 --
9641 IF l_debug_on IS NULL THEN
9642 l_debug_on := wsh_debug_sv.is_debug_enabled;
9643 END IF;
9644 --
9645 IF l_debug_on THEN
9646 wsh_debug_sv.push(l_module_name);
9647 --
9648 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
9649 wsh_debug_sv.LOG(l_module_name, 'p_action_code', p_action_code);
9650 wsh_debug_sv.LOG(l_module_name, 'p_line_freight_terms_Code', p_line_freight_terms_Code);
9651 END IF;
9652 --
9653 x_return_status := wsh_util_core.g_ret_sts_success;
9654 --
9655 --
9656 IF p_delivery_id IS NULL
9657 THEN
9658 --{
9659 --
9660 -- Delivery id is mandatory input
9661 --
9662 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
9663 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
9664 RAISE FND_API.G_EXC_ERROR;
9665 --}
9666 END IF;
9667 --
9668 --
9669 OPEN dlvy_csr (p_delivery_id);
9670 --
9671 FETCH dlvy_csr
9672 INTO l_dlvy_freight_terms_code,l_name,l_shipment_direction;
9673 --
9674 IF dlvy_csr%NOTFOUND
9675 THEN
9676 --{
9677 --
9678 -- Raise error for invalid Delivery id
9679 --
9680 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9681 RAISE FND_API.G_EXC_ERROR;
9682 --}
9683 END IF;
9684 --
9685 CLOSE dlvy_Csr;
9686 --
9687 --
9688 IF l_debug_on THEN
9689 wsh_debug_sv.LOG(l_module_name, 'l_dlvy_freight_terms_code', l_dlvy_freight_terms_code);
9690 wsh_debug_sv.LOG(l_module_name, 'l_name', l_name);
9691 wsh_debug_sv.LOG(l_module_name, 'l_shipment_direction', l_shipment_direction);
9692 END IF;
9693 --
9694 x_freight_terms_code := l_dlvy_freight_terms_code;
9695 --
9696 --
9697 IF l_shipment_direction IN ('O','IO')
9698 THEN
9699 --
9700 -- Operation not valid for outbound delivery
9701 --
9702 RAISE e_end_of_api;
9703 END IF;
9704 --
9705 FOR lock_dlvy_rec IN lock_dlvy_csr (p_delivery_id)
9706 LOOP
9707 NULL;
9708 END LOOP;
9709 --
9710 --
9711 BEGIN
9712 --{
9713 BEGIN
9714 --{
9715 IF p_action_code='ASSIGN'
9716 THEN
9717 --{
9718 --
9719 IF l_debug_on THEN
9720 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_DELIVERY_VALIDATIONS.has_lines',WSH_DEBUG_SV.C_PROC_LEVEL);
9721 END IF;
9722 --
9723 l_has_lines := WSH_DELIVERY_VALIDATIONS.has_lines
9724 (
9725 p_delivery_id => p_delivery_id
9726 );
9727 --
9728 --
9729 IF l_debug_on THEN
9730 wsh_debug_sv.LOG(l_module_name, 'l_has_lines', l_has_lines);
9731 END IF;
9732 --
9733 --
9734 IF l_has_lines = 'Y' -- If delivery has lines
9735 THEN
9736 --{
9737
9738 /*
9739 IF l_dlvy_freight_terms_code IS NULL
9740 THEN
9741 RAISE e_end_of_api;
9742 ELSE
9743 --{
9744 */
9745 IF p_line_freight_terms_code IS NULL
9746 THEN
9747 --
9748 -- Line-level freight terms not passed in.
9749 -- We need to check delivery contents to determine the freight term
9750 --
9751 RAISE e_end_of_sub;
9752 ELSIF p_line_freight_terms_code = NVL(l_dlvy_freight_terms_code,'MIXED')
9753 THEN
9754 --
9755 -- Line-level freight terms is same as delivery's freight term
9756 -- No need for any updates, goto end of api.
9757 --
9758 RAISE e_end_of_api;
9759 ELSIF p_line_freight_terms_code = 'MIXED'
9760 THEN
9761 --
9762 -- Line-level freight terms are different.
9763 -- We need to update delivery freight term to null
9764 --
9765 l_dlvy_freight_terms_code := NULL;
9766 RAISE e_update;
9767 ELSE
9768 RAISE e_end_of_sub;
9769 END IF;
9770 --}
9771 --END IF;
9772
9773 --}
9774 /*--Assumption is that this api is called only after lines assigned to dlvy.
9775 ELSE
9776 --{
9777 IF p_line_freight_terms_code IS NULL
9778 THEN
9779 RAISE e_end_of_api;
9780 ELSIF p_line_freight_terms_code <> NVL(l_dlvy_freight_terms_code,'MIXED')
9781 THEN
9782 l_dlvy_freight_terms_code := p_line_freight_terms_code;
9783 RAISE e_update;
9784 ELSE
9785 RAISE e_end_of_api;
9786 END IF;
9787 --}
9788 */
9789 END IF;
9790 --}
9791 ELSIF p_action_code='UNASSIGN'
9792 THEN
9793 --{
9794 IF l_dlvy_freight_terms_code IS NOT NULL
9795 THEN
9796 --
9797 -- All lines in delivery have same freight term.
9798 -- No need for update, goto end of api.
9799 --
9800 RAISE e_end_of_api1;
9801 END IF;
9802 --}
9803 END IF;
9804 --}
9805 EXCEPTION
9806 WHEN e_end_of_sub THEN
9807 NULL;
9808 END;
9809 --
9810 --
9811 l_dlvy_freight_terms_code := NULL;
9812 l_cnt := 0;
9813 --
9814 --
9815 -- Get distinct freight terms from delivery contents.
9816 -- If any line has null/different freight term, update delivery's freight term to Null.
9817 -- else update delivery's freight term same as line's
9818 --
9819 FOR line_rec IN line_csr(p_delivery_id)
9820 LOOP
9821 --{
9822 l_cnt := l_cnt + 1;
9823 --
9824 --
9825 IF l_debug_on THEN
9826 wsh_debug_sv.LOG(l_module_name, 'line_rec.freight_Terms_code', line_rec.freight_Terms_code);
9827 END IF;
9828 --
9829 IF line_rec.freight_Terms_code IS NULL
9830 THEN
9831 l_dlvy_freight_terms_code := NULL;
9832 EXIT;
9833 ELSIF l_dlvy_freight_terms_code IS NULL
9834 THEN
9835 l_dlvy_freight_terms_code := line_rec.freight_Terms_code;
9836 ELSIF line_rec.freight_Terms_code <> l_dlvy_freight_terms_code
9837 THEN
9838 l_dlvy_freight_terms_code := NULL;
9839 EXIT;
9840 END IF;
9841 --}
9842 END LOOP;
9843 --}
9844 EXCEPTION
9845 WHEN e_update THEN
9846 l_cnt := 1;
9847 END;
9848 --
9849 --
9850 IF l_cnt > 0
9851 THEN
9852 --{
9853
9854 IF l_debug_on THEN
9855 wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery freight term to' || l_dlvy_freight_terms_code);
9856 END IF;
9857 --
9858 --OTM R12, this update here is done right after assign/unassign
9859 --of delivery lines, which means the
9860 --tms_interface_flag and tms_version_number should already be
9861 --reflecting the change in delivery,
9862 --no need to set them again.
9863
9864 UPDATE wsh_new_deliveries
9865 SET freight_terms_code = l_dlvy_freight_terms_code,
9866 last_update_date = SYSDATE,
9867 last_updated_by = FND_GLOBAL.USER_ID,
9868 last_update_login = FND_GLOBAL.LOGIN_ID
9869 WHERE delivery_id = p_delivery_id;
9870 --
9871 IF (SQL%NOTFOUND)
9872 THEN
9873 --{
9874 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9875 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9876 RAISE FND_API.G_EXC_ERROR;
9877 --}
9878 END IF;
9879 --
9880 x_freight_terms_code := l_dlvy_freight_terms_code;
9881
9882 --}
9883 END IF;
9884 --
9885 --
9886 IF l_debug_on THEN
9887 wsh_debug_sv.pop(l_module_name);
9888 END IF;
9889 --
9890 --}
9891 EXCEPTION
9892 --{
9893 WHEN e_end_of_api THEN
9894 IF l_debug_on
9895 THEN
9896 WSH_DEBUG_SV.pop(l_module_name);
9897 END IF;
9898 WHEN e_end_of_api1 THEN
9899 IF l_debug_on THEN
9900 wsh_debug_sv.LOGMSG(l_module_name, 'Updating delivery WHO columns ' );
9901 END IF;
9902 --
9903 UPDATE wsh_new_deliveries
9904 SET last_update_date = SYSDATE,
9905 last_updated_by = FND_GLOBAL.USER_ID,
9906 last_update_login = FND_GLOBAL.LOGIN_ID
9907 WHERE delivery_id = p_delivery_id;
9908 --
9909 IF (SQL%NOTFOUND)
9910 THEN
9911 --{
9912 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
9913 fnd_message.SET_name('WSH', 'WSH_DET_INVALID_DEL');
9914 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9915 --}
9916 END IF;
9917 --
9918 IF l_debug_on
9919 THEN
9920 WSH_DEBUG_SV.pop(l_module_name);
9921 END IF;
9922 WHEN FND_API.G_EXC_ERROR THEN
9923 x_return_status := wsh_util_core.g_ret_sts_error;
9924 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9925 --
9926 IF l_debug_on
9927 THEN
9928 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:FND_API.G_EXC_ERROR');
9929 END IF;
9930 WHEN e_locked THEN
9931 x_return_status := wsh_util_core.g_ret_sts_error;
9932
9933 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
9934 FND_MESSAGE.SET_TOKEN('ENTITY_NAME', l_name);
9935 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
9936 --
9937 IF l_debug_on
9938 THEN
9939 WSH_DEBUG_SV.pop(l_module_name, 'EXCEPTION:e_locked');
9940 END IF;
9941 WHEN OTHERS THEN
9942 x_return_status := fnd_api.g_ret_sts_unexp_error;
9943 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_freight_terms',l_module_name);
9944 --
9945 IF l_debug_on THEN
9946 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
9947 END IF;
9948 --}
9949 END update_freight_terms;
9950 --
9951 --
9952 -- ----------------------------------------------------------------------
9953 -- Procedure: update_ship_from_location
9954 --
9955 -- Parameters: p_delivery_id Delivery ID
9956 -- p_location_id Ship from location ID (New value)
9957 -- x_return_status Return status of API
9958 --
9959 -- COMMENT : This procedure is called from group API when
9960 -- ship-from location is updated for inbound (not O/IO) delivery.
9961 --
9962 -- It performs the following steps:
9963 -- 01. Validate that input delivery id is not null and is a valid delivery.
9964 -- 02. Validate that input table of lines contain at least one record.
9965 -- 03. If delivery's ship-from location (current value) is not null(-1), return
9966 -- 04. Update ship-from location on all delivery lines.
9967 -- 05. Update ship-from location for stop associated with delivery's initial pickup location
9968 -- 05.01 Make a call-out to FTE before stop update.
9969 -- 06. Update ship-from location for each delivery associated with same stop.
9970 -- 07. Put a warning message for each each delivery updated above.
9971 -- 08. Update ship-from location for lines of each delivery updated above.
9972 --
9973 -- ----------------------------------------------------------------------
9974 --
9975 PROCEDURE update_ship_from_location
9976 (
9977 p_delivery_id IN NUMBER,
9978 p_location_id IN NUMBER,
9979 x_return_status OUT NOCOPY VARCHAR2
9980 )
9981 IS
9982 --{
9983 --
9984 -- Get Delivery Info
9985 --
9986 CURSOR dlvy_csr (p_delivery_id IN NUMBER)
9987 IS
9988 SELECT wnd.name,
9989 initial_pickup_location_id
9990 FROM wsh_new_deliveries wnd
9991 WHERE delivery_id = p_delivery_id;
9992 --
9993 l_dlvy_rec dlvy_csr%ROWTYPE;
9994 --
9995 --
9996 -- Get stop associated with initial pickup location of delivery.
9997 --
9998 CURSOR stop_csr(p_delivery_id IN NUMBER, p_location_id IN NUMBER)
9999 IS
10000 SELECT stop_id
10001 FROM wsh_delivery_legs wdl,
10002 wsh_trip_stops wts
10003 WHERE wdl.delivery_id = p_delivery_id
10004 AND wdl.pick_up_stop_id = wts.stop_id
10005 AND wts.stop_location_id = p_location_id;
10006 --
10007 --
10008 stop_rec stop_csr%ROWTYPE;
10009 --
10010 --
10011 -- Get all deliveries being picked up from the same stop.
10012 --
10013 CURSOR pickup_dlvy_csr (p_delivery_id IN NUMBER,p_stop_id IN NUMBER)
10014 IS
10015 SELECT wnd.delivery_id, wnd.name
10016 FROM wsh_delivery_legs wdl,
10017 wsh_new_deliveries wnd
10018 WHERE pick_up_stop_id = p_stop_id
10019 AND wdl.delivery_id <> p_delivery_id
10020 AND wdl.delivery_id = wnd.delivery_id;
10021 --
10022 --
10023 l_num_warnings NUMBER := 0;
10024 l_num_errors NUMBER := 0;
10025 l_return_status VARCHAR2(10);
10026 l_location_name VARCHAR2(60);
10027
10028 -- J+ Internal Location
10029 l_physical_stop_id WSH_TRIP_STOPS.physical_stop_id%TYPE;
10030 l_physical_location_id WSH_TRIP_STOPS.physical_location_id%TYPE;
10031 l_trip_id_tab wsh_util_core.id_tab_type;
10032 l_success_trip_ids wsh_util_core.id_tab_type;
10033 -- End of J+ Internal Location
10034 l_stop_rec WSH_TRIP_STOPS_PVT.TRIP_STOP_REC_TYPE;
10035 l_pub_stop_rec WSH_TRIP_STOPS_PUB.TRIP_STOP_PUB_REC_TYPE;
10036 l_trip_rec WSH_TRIPS_PVT.TRIP_REC_TYPE;
10037 --
10038 l_debug_on BOOLEAN;
10039 --
10040 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'update_ship_from_location';
10041 --
10042 --}
10043 BEGIN
10044 --{
10045 SAVEPOINT update_ship_from_location_sp;
10046 --
10047 l_debug_on := wsh_debug_interface.g_debug;
10048 --
10049 IF l_debug_on IS NULL THEN
10050 l_debug_on := wsh_debug_sv.is_debug_enabled;
10051 END IF;
10052 --
10053 IF l_debug_on THEN
10054 wsh_debug_sv.push(l_module_name);
10055 --
10056 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10057 wsh_debug_sv.LOG(l_module_name, 'p_location_id', p_location_id);
10058 END IF;
10059 --
10060 x_return_status := wsh_util_core.g_ret_sts_success;
10061 --
10062 --
10063 IF p_delivery_id IS NULL
10064 THEN
10065 --{
10066 --
10067 -- Delivery id is required field
10068 --
10069 FND_MESSAGE.SET_NAME('WSH', 'WSH_REQUIRED_FIELD_NULL');
10070 FND_MESSAGE.SET_TOKEN('FIELD_NAME', 'p_delivery_id');
10071 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
10072 --
10073 RAISE FND_API.G_EXC_ERROR;
10074 --}
10075 END IF;
10076 --
10077 --
10078 OPEN dlvy_csr(p_delivery_id);
10079 FETCH dlvy_csr INTO l_dlvy_rec;
10080 CLOSE dlvy_csr;
10081 --
10082 IF l_dlvy_rec.initial_pickup_location_id IS NULL
10083 THEN
10084 --{
10085 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NOT_EXIST');
10086 FND_MESSAGE.SET_TOKEN('DELIVERY_ID', p_delivery_id);
10087 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_error,l_module_name);
10088 --
10089 RAISE FND_API.G_EXC_ERROR;
10090 --}
10091 END IF;
10092 --
10093 --
10094 IF l_dlvy_rec.initial_pickup_location_id = WSH_UTIL_CORE.C_NULL_SF_LOCN_ID
10095 AND l_dlvy_rec.initial_pickup_location_id <> p_location_id
10096 THEN
10097 --{
10098 --
10099 -- Get stop associated with initial pickup location of delivery.
10100 --
10101 OPEN stop_csr(p_delivery_id,l_dlvy_rec.initial_pickup_location_id);
10102 FETCH stop_csr INTO stop_rec;
10103 CLOSE stop_csr;
10104 --
10105 /*
10106 UPDATE WSH_NEW_DELIVERIES
10107 SET INITIAL_PICKUP_LOCATION_ID = p_location_id,
10108 last_update_date = SYSDATE,
10109 last_updated_by = FND_GLOBAL.USER_ID,
10110 last_update_login = FND_GLOBAL.LOGIN_ID
10111 WHERE delivery_id = p_delivery_id;
10112 */
10113 --
10114 --
10115 UPDATE WSH_DELIVERY_DETAILS
10116 SET SHIP_FROM_LOCATION_ID = p_location_id,
10117 last_update_date = SYSDATE,
10118 last_updated_by = FND_GLOBAL.USER_ID,
10119 last_update_login = FND_GLOBAL.LOGIN_ID
10120 WHERE delivery_detail_id IN (
10121 SELECT delivery_detail_id
10122 FROM wsh_delivery_assignments_v
10123 WHERE delivery_id = p_delivery_id
10124 );
10125 --
10126 --
10127 IF stop_rec.stop_id IS NOT NULL
10128 THEN
10129 --{
10130 -- Get pvt type record structure for stop
10131 --
10132 -- Debug Statements
10133 --
10134 IF l_debug_on THEN
10135 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIP_STOPS_GRP.GET_STOP_DETAILS_PVT',WSH_DEBUG_SV.C_PROC_LEVEL);
10136 END IF;
10137 --
10138 wsh_trip_stops_grp.get_stop_details_pvt
10139 (p_stop_id => stop_rec.stop_id,
10140 x_stop_rec => l_stop_rec,
10141 x_return_status => l_return_status);
10142 --
10143 wsh_util_core.api_post_call
10144 (
10145 p_return_status => l_return_status,
10146 x_num_warnings => l_num_warnings,
10147 x_num_errors => l_num_errors
10148 );
10149 --
10150 -- Internal Locations J+
10151 -- Derive the physical location id
10152 IF l_stop_rec.stop_location_id <> p_location_id THEN -- New Location id
10153 IF l_debug_on THEN
10154 wsh_debug_sv.logmsg(l_module_name,'stop location id has been changed');
10155 END IF;
10156 -- Derive physical Location id for this new location
10157 WSH_LOCATIONS_PKG.Convert_internal_cust_location(
10158 p_internal_cust_location_id => p_location_id,
10159 x_internal_org_location_id => l_physical_location_id, -- New physical Location id
10160 x_return_status => l_return_status);
10161
10162 IF l_debug_on THEN
10163 wsh_debug_sv.log(l_module_name,'New stop_location_id' , p_location_id);
10164 wsh_debug_sv.log(l_module_name,'Derived physical_location_id' , l_physical_location_id);
10165 END IF;
10166 -- delink the physical stop id
10167 IF nvl(l_stop_rec.physical_location_id, -99) <> nvl(l_physical_location_id, -99) THEN
10168 l_stop_rec.physical_stop_id := NULL;
10169 -- Nullify the physical stop id
10170 l_physical_stop_id := NULL;
10171 l_stop_rec.physical_location_id := l_physical_location_id; -- Populate record structure
10172 END IF;
10173 END IF;
10174 -- End of Internal Locations J+
10175 --
10176 /* H integration - call Multi Leg FTE */
10177 IF (WSH_UTIL_CORE.FTE_IS_INSTALLED = 'Y') THEN
10178 -- Code changes made in J+ along with Internal Locations
10179 -- Update the Input record structure which FTE uses to validate
10180 -- the new stop location
10181 l_stop_rec.stop_location_id := p_location_id;
10182 -- End of Code changes made in J+
10183 IF l_debug_on THEN
10184 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_FTE_INTEGRATION.TRIP_STOP_VALIDATIONS',WSH_DEBUG_SV.C_PROC_LEVEL);
10185 END IF;
10186 --
10187 wsh_fte_integration.trip_stop_validations
10188 (p_stop_rec => l_stop_rec,
10189 p_trip_rec => l_trip_rec,
10190 p_action => 'UPDATE',
10191 x_return_status => l_return_status);
10192 --
10193 wsh_util_core.api_post_call
10194 (
10195 p_return_status => l_return_status,
10196 x_num_warnings => l_num_warnings,
10197 x_num_errors => l_num_errors
10198 );
10199 --
10200 END IF;
10201 --
10202 --
10203 -- J+ Internal Locations, along with new location, update
10204 -- physical_stop_id and physical_location_id
10205 UPDATE wsh_trip_stops
10206 SET stop_location_id = p_location_id,
10207 last_update_date = SYSDATE,
10208 last_updated_by = FND_GLOBAL.USER_ID,
10209 last_update_login = FND_GLOBAL.LOGIN_ID,
10210 physical_stop_id = l_physical_stop_id, -- J+ Internal Locations
10211 physical_location_id = l_physical_location_id -- J+ Internal Locations
10212 WHERE stop_id = stop_rec.stop_id;
10213 --
10214
10215 -- Internal Locations J+
10216 -- Call Handle Internal Stops API to link the stops
10217 l_trip_id_tab(1) := l_stop_rec.trip_id;
10218 IF l_debug_on THEN
10219 wsh_debug_sv.log(l_module_name,'trip_id' , l_stop_rec.trip_id);
10220 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.Handle_Internal_Stops',WSH_DEBUG_SV.C_PROC_LEVEL);
10221 END IF;
10222
10223 WSH_TRIPS_ACTIONS.Handle_Internal_Stops(
10224 p_trip_ids => l_trip_id_tab,
10225 p_caller => 'WSH_UPDATE_SHIP_FROM_LOC',
10226 x_success_trip_ids => l_success_trip_ids,
10227 x_return_status => l_return_status);
10228
10229 wsh_util_core.api_post_call(
10230 p_return_status => l_return_status,
10231 x_num_warnings => l_num_warnings,
10232 x_num_errors => l_num_errors);
10233 -- End of Internal Locations J+
10234 --
10235
10236 l_location_name := NULL;
10237 --
10238 --
10239 -- Get all deliveries being picked up from the same stop.
10240 --
10241 FOR pickup_dlvy_rec IN pickup_dlvy_csr (p_delivery_id , stop_rec.stop_id)
10242 LOOP
10243 --{
10244 --OTM R12, this update is called by inbound so we
10245 --will not check tms flag here
10246 UPDATE WSH_NEW_DELIVERIES
10247 SET INITIAL_PICKUP_LOCATION_ID = p_location_id,
10248 last_update_date = SYSDATE,
10249 last_updated_by = FND_GLOBAL.USER_ID,
10250 last_update_login = FND_GLOBAL.LOGIN_ID
10251 WHERE delivery_id = pickup_dlvy_rec.delivery_id;
10252 --
10253 --
10254 UPDATE WSH_DELIVERY_DETAILS
10255 SET SHIP_FROM_LOCATION_ID = p_location_id,
10256 last_update_date = SYSDATE,
10257 last_updated_by = FND_GLOBAL.USER_ID,
10258 last_update_login = FND_GLOBAL.LOGIN_ID
10259 WHERE delivery_detail_id IN (
10260 SELECT delivery_detail_id
10261 FROM wsh_delivery_assignments_v
10262 WHERE delivery_id = pickup_dlvy_rec.delivery_id
10263 );
10264 --
10265 --
10266 IF l_location_name IS NULL
10267 THEN
10268 --{
10269 IF l_debug_on THEN
10270 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.get_location_description',WSH_DEBUG_SV.C_PROC_LEVEL);
10271 END IF;
10272 --
10273 l_location_name := SUBSTRB(
10274 WSH_UTIL_CORE.get_location_description
10275 (
10276 p_location_id,
10277 'NEW UI CODE'
10278 ),
10279 1,
10280 60
10281 );
10282 --}
10283 END IF;
10284 --
10285 --
10286 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_PU_LOCN_UPDATE');
10287 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', pickup_dlvy_rec.name);
10288 FND_MESSAGE.SET_TOKEN('LOCATION_NAME', l_location_name);
10289 WSH_UTIL_CORE.add_message (wsh_util_core.g_ret_sts_warning,l_module_name);
10290 l_num_warnings := l_num_warnings + 1;
10291 --}
10292 END LOOP;
10293 --}
10294 END IF;
10295 --}
10296 END IF;
10297 --
10298 --
10299 --
10300 IF l_num_errors > 0
10301 THEN
10302 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10303 ELSIF l_num_warnings > 0
10304 THEN
10305 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10306 ELSE
10307 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10308 END IF;
10309 --
10310 IF l_debug_on THEN
10311 wsh_debug_sv.pop(l_module_name);
10312 END IF;
10313 --
10314 --}
10315 EXCEPTION
10316 --{
10317 --
10318 WHEN FND_API.G_EXC_ERROR THEN
10319
10320 ROLLBACK TO update_ship_from_location_sp;
10321 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10322 --
10323 IF l_debug_on THEN
10324 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10325 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
10326 END IF;
10327 --
10328 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10329
10330 ROLLBACK TO update_ship_from_location_sp;
10331 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10332 --
10333 IF l_debug_on THEN
10334 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10335 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10336 END IF;
10337 --
10338 WHEN WSH_UTIL_CORE.G_EXC_WARNING THEN
10339 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
10340 --
10341 IF l_debug_on THEN
10342 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.G_EXC_WARNING exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
10343 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_UTIL_CORE.G_EXC_WARNING');
10344 END IF;
10345 --
10346 WHEN OTHERS THEN
10347
10348 ROLLBACK TO update_ship_from_location_sp;
10349 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10350 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.update_ship_from_location', l_module_name);
10351 IF l_debug_on THEN
10352 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
10353 END IF;
10354 --
10355 --}
10356 END update_ship_from_location;
10357
10358 -- J-IB-NPARIKH---}
10359
10360 -- Look for Open deliveries in Trip
10361 -- If any delivery exists with status = OPEN in the trip ,then RETURN FALSE
10362 -- If no open delivery exists ,then RETURN TRUE
10363 FUNCTION check_last_del_trip(p_delivery_id IN NUMBER)
10364 return BOOLEAN IS
10365
10366 -- First row found is enough
10367
10368 -- bug 4891897, sql 15038247
10369 -- 1) wsh_delivery_trips_v is replaced with the join of
10370 -- wsh_delivery_legs and wsh_trip_stops
10371 -- 2) query is flattened instead of using the subquery for lower sharable memory
10372
10373 CURSOR Check_Last_Trip (l_delivery_id NUMBER) IS
10374 SELECT s1.trip_id
10375 FROM wsh_trip_stops s1,
10376 wsh_delivery_legs dl1,
10377 wsh_new_deliveries d1,
10378 wsh_trip_stops s2,
10379 wsh_delivery_legs dl2
10380 WHERE d1.delivery_id <> l_delivery_id
10381 AND s1.stop_id = dl1.pick_up_stop_id
10382 AND d1.delivery_id = dl1.delivery_id
10383 AND d1.status_code = 'OP'
10384 AND d1.delivery_type = 'STANDARD'
10385 AND s2.trip_id = s1.trip_id
10386 AND s2.stop_id = dl2.pick_up_stop_id
10387 AND dl2.delivery_id = l_delivery_id
10388 AND rownum = 1;
10389
10390 l_trip_id NUMBER;
10391
10392 l_debug_on BOOLEAN;
10393 --
10394 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'check_last_del_trip';
10395 --
10396 BEGIN
10397
10398 l_debug_on := wsh_debug_interface.g_debug;
10399 --
10400 IF l_debug_on IS NULL THEN
10401 l_debug_on := wsh_debug_sv.is_debug_enabled;
10402 END IF;
10403 --
10404 IF l_debug_on THEN
10405 wsh_debug_sv.push(l_module_name);
10406 --
10407 --
10408 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10409 END IF;
10410
10411 OPEN check_last_trip(p_delivery_id);
10412 FETCH check_last_trip
10413 INTO l_trip_id;
10414 CLOSE check_last_trip;
10415
10416 IF l_trip_id IS NOT NULL THEN -- found a open delivery
10417 IF l_debug_on THEN
10418 wsh_debug_sv.LOGMSG(l_module_name, 'Last Del on Trip-' || l_trip_id);
10419 wsh_debug_sv.pop(l_module_name);
10420 END IF;
10421 return FALSE;
10422 ELSE -- no open delivery
10423 IF l_debug_on THEN
10424 wsh_debug_sv.LOGMSG(l_module_name, 'THIS IS LAST OPEN DELIVERY on TRIP');
10425 wsh_debug_sv.pop(l_module_name);
10426 END IF;
10427 return TRUE;
10428 END IF;
10429
10430 IF l_debug_on THEN
10431 wsh_debug_sv.pop(l_module_name);
10432 END IF;
10433
10434 EXCEPTION
10435
10436 WHEN OTHERS THEN
10437 wsh_util_core.default_handler('wsh_new_delivery_actions.check_last_del_trip',l_module_name);
10438 --
10439 IF l_debug_on THEN
10440 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10441 END IF;
10442 RETURN FALSE;
10443 END check_last_del_trip;
10444
10445 -- ---------------------------------------------------------------------------
10446 -- NAME: GET_TRIP_STATUS
10447 -- TYPE: FUNCTION
10448 -- PARAMETERS(IN): p_delivery_id IN NUMBER
10449 --
10450 -- RETURN: MANY - delivery is assigned to more than one trip
10451 -- SHARED - trip to which this delivery is assigned is
10452 -- shared with other deliveries
10453 -- HAS_LANE - trip to which this delivery is assigned has
10454 -- Lane/Service assigned
10455 -- NONE - delivery is not assigned to a trip
10456 -- ONE - delivery is assigned to one trip and this
10457 -- trip is not shared with other deliveries
10458 -- DESCRIPTION: get the relationship between the delivery and the trip
10459 --
10460 -- CALLED FROM PROCESS_CARRIER_SELECTION
10461 -- ADDED BY HJPARK AS PART OF 11i10+ ENHANCEMENT 9/20/2004
10462 -- ---------------------------------------------------------------------------
10463 FUNCTION get_trip_status(p_delivery_id IN NUMBER,p_delivery_type IN VARCHAR2) return VARCHAR2 IS
10464 --FUNCTION GET_TRIP_STATUS(p_delivery_id IN NUMBER) return VARCHAR2 IS
10465
10466 l_debug_on BOOLEAN;
10467 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'||g_pkg_name||'.'||'get_trip_status';
10468
10469 l_count NUMBER;
10470 l_delivery_leg_id NUMBER;
10471 l_trip_id NUMBER;
10472 l_lane_id NUMBER;
10473
10474 CURSOR check_many_trips(x_delivery_id NUMBER) IS
10475 SELECT count(delivery_leg_id), min(delivery_leg_id)
10476 FROM wsh_delivery_legs
10477 WHERE delivery_id = x_delivery_id;
10478
10479 CURSOR check_shared_trip(x_delivery_leg_id NUMBER) IS
10480 SELECT count(s.trip_id ), min(s.trip_id)
10481 FROM wsh_delivery_legs d, wsh_trip_stops s
10482 WHERE d.pick_up_stop_id = s.stop_id
10483 AND s.trip_id = (SELECT s1.trip_id
10484 FROM wsh_trip_stops s1, wsh_delivery_legs d1
10485 WHERE d1.delivery_leg_id = x_delivery_leg_id
10486 AND s1.stop_id = d1.pick_up_stop_id);
10487
10488 -- Hiding project
10489 -- count('CONSOLIDATION') should be 1
10490
10491 CURSOR check_shared_trip_consol(x_delivery_leg_id NUMBER) IS
10492 SELECT count(*), min(s.trip_id)
10493 FROM wsh_new_deliveries n, wsh_delivery_legs d, wsh_trip_stops s
10494 WHERE n.delivery_id = d.delivery_id
10495 AND d.pick_up_stop_id = s.stop_id
10496 AND s.trip_id = (SELECT s1.trip_id
10497 FROM wsh_trip_stops s1, wsh_delivery_legs d1
10498 WHERE d1.delivery_leg_id = x_delivery_leg_id
10499 AND s1.stop_id = d1.pick_up_stop_id)
10500 AND d.parent_delivery_leg_id IS NULL;
10501
10502 CURSOR check_trip_lane(x_trip_id NUMBER) IS
10503 SELECT lane_id
10504 FROM wsh_trips
10505 WHERE trip_id = x_trip_id;
10506
10507 BEGIN
10508
10509 l_debug_on := wsh_debug_interface.g_debug;
10510 IF l_debug_on IS NULL THEN
10511 l_debug_on := wsh_debug_sv.is_debug_enabled;
10512 END IF;
10513 IF l_debug_on THEN
10514 wsh_debug_sv.push(l_module_name);
10515 wsh_debug_sv.LOG(l_module_name, 'P_DELIVERY_ID', p_delivery_id);
10516 END IF;
10517
10518 -- checks whether the delivery is assigned to a trip
10519
10520 OPEN check_many_trips(p_delivery_id);
10521 FETCH check_many_trips INTO l_count, l_delivery_leg_id;
10522 CLOSE check_many_trips;
10523
10524 IF (l_count = 0) THEN
10525 -- delivery is not assigned to a trip
10526 IF l_debug_on THEN
10527 wsh_debug_sv.LOGMSG(l_module_name, 'NONE');
10528 wsh_debug_sv.pop(l_module_name);
10529 END IF;
10530 return 'NONE';
10531 ELSIF (l_count > 1) THEN
10532 -- delivery is assigned to more than one trip
10533 IF l_debug_on THEN
10534 wsh_debug_sv.LOGMSG(l_module_name, 'MANY');
10535 wsh_debug_sv.pop(l_module_name);
10536 END IF;
10537 return 'MANY';
10538 END IF;
10539
10540
10541 -- comes here when the delivery is assigned to only one trip
10542 -- checks whether the trip is shared by more than one delivery
10543
10544 IF p_delivery_type = 'CONSOLIDATION' THEN
10545
10546 -- Hiding project
10547 -- A consol delivery can be assigned to only 1 trip
10548 -- But the trip can have other consol / regular / content deliveries on that trip
10549 -- The action should be allowed only if other deliveries in this trip
10550 -- are only the child content deliveries of this consol delivery
10551
10552 OPEN check_shared_trip_consol(l_delivery_leg_id);
10553 FETCH check_shared_trip_consol INTO l_count,l_trip_id;
10554 CLOSE check_shared_trip_consol;
10555
10556 IF (l_count > 1) THEN
10557 -- trip is shared by more than one delivery - Error
10558 IF l_debug_on THEN
10559 wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10560 wsh_debug_sv.pop(l_module_name);
10561 END IF;
10562 return 'SHARED';
10563 END IF;
10564
10565 ELSE
10566
10567 OPEN check_shared_trip(l_delivery_leg_id);
10568 FETCH check_shared_trip INTO l_count, l_trip_id;
10569 CLOSE check_shared_trip;
10570
10571 IF (l_count > 1) THEN
10572 -- trip is shared by more than one delivery - Error
10573 IF l_debug_on THEN
10574 wsh_debug_sv.LOGMSG(l_module_name, 'SHARED');
10575 wsh_debug_sv.pop(l_module_name);
10576 END IF;
10577 return 'SHARED';
10578 END IF;
10579
10580 END IF;
10581 -- comes here when the trip is used only by this delivery, hence 1:1
10582 -- checks whether trip has lane assigned
10583
10584 OPEN check_trip_lane(l_trip_id);
10585 FETCH check_trip_lane INTO l_lane_id;
10586 CLOSE check_trip_lane;
10587
10588 IF l_lane_id is not NULL
10589 THEN
10590 IF l_debug_on THEN
10591 wsh_debug_sv.LOGMSG(l_module_name, 'HAS_LANE');
10592 wsh_debug_sv.pop(l_module_name);
10593 END IF;
10594 return 'HAS_LANE';
10595 ELSE
10596 IF l_debug_on THEN
10597 wsh_debug_sv.LOGMSG(l_module_name, 'ONE-'||l_trip_id);
10598 wsh_debug_sv.pop(l_module_name);
10599 END IF;
10600 return 'ONE-'||l_trip_id;
10601 END IF;
10602
10603 EXCEPTION
10604 WHEN OTHERS THEN
10605 wsh_util_core.default_handler('wsh_new_delivery_actions.get_trip_status',l_module_name);
10606 --
10607 IF l_debug_on THEN
10608 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
10609 END IF;
10610
10611 END GET_TRIP_STATUS;
10612
10613 --SBAKSHI(R12)
10614 --***************************************************************************--
10615 --========================================================================
10616 -- FUNCTION : IS_DLVY_CONTENT PRIVATE
10617 --
10618 -- PARAMETERS: p_delivery_id Delivery Id
10619 --
10620 -- COMMENT : Returns True if the delivery is content
10621 --
10622 --***************************************************************************--
10623 FUNCTION IS_DLVY_CONTENT(p_delivery_id IN NUMBER)
10624 RETURN BOOLEAN
10625 IS
10626
10627 /*
10628 When we query for a parent delivery of a delivery we
10629 should always use wsh_delivery_legs instead of wsh_delivery_assignments.
10630 If the child delivery does not have any lines attached to it,
10631 it will not have record in wda, whereas a console delivery and
10632 its children will always have a trip, and a record in wdl.
10633 */
10634
10635 CURSOR c_get_console_delivery (c_delivery_id IN NUMBER) IS
10636 select pleg.delivery_id
10637 from wsh_delivery_legs pleg,
10638 wsh_delivery_legs cleg
10639 where pleg.delivery_leg_id = cleg.parent_delivery_leg_id
10640 and cleg.delivery_id = c_delivery_id;
10641
10642 l_delivery_id NUMBER;
10643 l_content_dlvy BOOLEAN := FALSE;
10644
10645 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10646 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'IS_DLVY_CONTENT';
10647
10648 BEGIN
10649
10650 --
10651 IF l_debug_on THEN
10652 wsh_debug_sv.push (l_module_name);
10653 END IF;
10654 --
10655
10656 OPEN c_get_console_delivery(p_delivery_id) ;
10657 FETCH c_get_console_delivery INTO l_delivery_id;
10658
10659 IF (l_delivery_id IS NOT NULL) THEN
10660 -- The dlvy is assigned to a console delivery
10661 l_content_dlvy := TRUE;
10662 END IF;
10663 CLOSE c_get_console_delivery;
10664
10665 --
10666 IF l_debug_on THEN
10667 wsh_debug_sv.pop(l_module_name);
10668 END IF;
10669 --
10670 RETURN l_content_dlvy;
10671
10672 EXCEPTION
10673 WHEN OTHERS THEN
10674
10675 IF c_get_console_delivery%ISOPEN THEN
10676 CLOSE c_get_console_delivery;
10677 END IF;
10678
10679 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.IS_DLVY_CONTENT');
10680 --
10681 IF l_debug_on THEN
10682 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10683 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10684 END IF;
10685
10686 END IS_DLVY_CONTENT;
10687
10688 --***************************************************************************--
10689 --========================================================================
10690 -- PROCEDURE : GET_SHIP_TO_SITE PRIVATE
10691 --
10692 -- PARAMETERS: p_delivery_id Delivery Id
10693 -- x_site_id Customer Site Id.
10694 -- x_return_status Return Status
10695 --
10696 -- COMMENT : Returns the ship to site associated with the delivery.
10697 --
10698 --***************************************************************************--
10699 PROCEDURE GET_SHIP_TO_SITE(p_delivery_id IN NUMBER,
10700 p_delivery_type IN VARCHAR2 DEFAULT NULL,
10701 p_ultimate_dropoff_loc_id IN NUMBER DEFAULT NULL,
10702 x_site_id OUT NOCOPY NUMBER,
10703 x_return_status OUT NOCOPY VARCHAR2)
10704 IS
10705
10706 CURSOR c_get_ship_to_site IS
10707 SELECT DISTINCT wdd.ship_to_site_use_id
10708 FROM wsh_delivery_details wdd,
10709 wsh_delivery_assignments wda
10710 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
10711 AND wda.delivery_id = p_delivery_id
10712 AND wdd.ship_to_site_use_id IS NOT NULL;
10713
10714 CURSOR c_ship_to_site_use(c_location_id IN NUMBER) IS
10715 SELECT SITE.SITE_USE_ID
10716 FROM HZ_CUST_ACCT_SITES_ALL ACCT_SITE,
10717 HZ_PARTY_SITES PARTY_SITE,
10718 HZ_LOCATIONS LOC,
10719 HZ_CUST_SITE_USES_ALL SITE
10720 WHERE
10721 SITE.SITE_USE_CODE = 'SHIP_TO'
10722 AND SITE.CUST_ACCT_SITE_ID = ACCT_SITE.CUST_ACCT_SITE_ID
10723 AND ACCT_SITE.PARTY_SITE_ID = PARTY_SITE.PARTY_SITE_ID
10724 AND PARTY_SITE.LOCATION_ID = LOC.LOCATION_ID
10725 AND LOC.LOCATION_ID = c_location_id;
10726
10727 l_site_tab WSH_UTIL_CORE.ID_TAB_TYPE;
10728 multiple_ship_to_site EXCEPTION;
10729 no_ship_to_site EXCEPTION;
10730
10731 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10732 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_SITE';
10733
10734 BEGIN
10735
10736 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10737 --
10738 IF l_debug_on THEN
10739 wsh_debug_sv.push (l_module_name);
10740 END IF;
10741 --
10742
10743 IF p_delivery_type = 'STANDARD' THEN
10744
10745 OPEN c_get_ship_to_site;
10746 FETCH c_get_ship_to_site BULK COLLECT INTO l_site_tab;
10747 CLOSE c_get_ship_to_site;
10748
10749 IF (l_site_tab.COUNT = 1) THEN
10750 x_site_id := l_site_tab(l_site_tab.FIRST);
10751 ELSIF (l_site_tab.COUNT = 0 ) THEN
10752 RAISE NO_SHIP_TO_SITE;
10753 ELSE
10754 RAISE MULTIPLE_SHIP_TO_SITE;
10755 END IF;
10756
10757 ELSIF p_delivery_type = 'CONSOLIDATION' THEN
10758
10759 OPEN c_ship_to_site_use(p_ultimate_dropoff_loc_id);
10760 FETCH c_ship_to_site_use INTO x_site_id;
10761 IF c_ship_to_site_use%NOTFOUND THEN
10762 x_site_id := NULL;
10763 END IF;
10764 CLOSE c_ship_to_site_use;
10765
10766 END IF;
10767
10768
10769 --
10770 IF l_debug_on THEN
10771 WSH_DEBUG_SV.pop(l_module_name);
10772 END IF;
10773 --
10774 EXCEPTION
10775
10776 WHEN NO_SHIP_TO_SITE THEN
10777 -- Delivery is not assoociated with a site.
10778 IF l_debug_on THEN
10779 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with a site');
10780 END IF;
10781 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_SITE');
10782 FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10783 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10784 WSH_UTIL_CORE.add_message(x_return_status);
10785
10786 IF l_debug_on THEN
10787 WSH_DEBUG_SV.pop(l_module_name);
10788 END IF;
10789
10790 WHEN MULTIPLE_SHIP_TO_SITE THEN
10791
10792 -- Delivery is associated with multiple sites
10793 IF l_debug_on THEN
10794 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not assoociated with multiple sites');
10795 END IF;
10796 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_MULT_SITE');
10797 FND_MESSAGE.Set_Token('DELIVERY',p_delivery_id);
10798 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10799 WSH_UTIL_CORE.add_message(x_return_status);
10800
10801 IF l_debug_on THEN
10802 WSH_DEBUG_SV.pop(l_module_name);
10803 END IF;
10804
10805 WHEN OTHERS THEN
10806
10807 IF ( c_get_ship_to_site%ISOPEN) THEN
10808 CLOSE c_get_ship_to_site;
10809 END IF;
10810 --
10811 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_site');
10812 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10813 --
10814
10815 IF l_debug_on THEN
10816 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10817 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10818 END IF;
10819 --
10820 END GET_SHIP_TO_SITE;
10821
10822
10823 --***************************************************************************--
10824 --========================================================================
10825 -- PROCEDURE : GET_SHIP_TO_CUSTOMER PRIVATE
10826 --
10827 -- PARAMETERS: p_ult_dropoff_loc_id Drop off location id.
10828 -- p_delivery_id Delivery Id.
10829 -- x_customer_id Customer Id.
10830 -- x_return_status Return Status
10831 --
10832 -- COMMENT : Returns the customer associated with the given location.
10833 --
10834 --***************************************************************************--
10835 PROCEDURE GET_SHIP_TO_CUSTOMER( p_ult_dropoff_loc_id IN NUMBER,
10836 p_delivery_id IN NUMBER,
10837 x_customer_id OUT NOCOPY NUMBER,
10838 x_return_status OUT NOCOPY VARCHAR2)
10839 IS
10840
10841 CURSOR c_get_shipto_cust_from_loc (p_location_id IN NUMBER) IS
10842 SELECT hcas.cust_account_id
10843 FROM wsh_locations wl,
10844 hz_party_sites hps,
10845 hz_cust_acct_sites_all hcas
10846 WHERE wl.wsh_location_id = p_location_id
10847 AND wl.location_source_code = 'HZ'
10848 AND wl.source_location_id = hps.location_id
10849 AND hps.party_site_id = hcas.party_site_id;
10850
10851
10852 CURSOR c_get_shipto_cust_from_dlvy(p_delivery_id IN NUMBER) IS
10853 SELECT distinct hcas.cust_account_id
10854 FROM hz_cust_site_uses_all hcsu,
10855 hz_cust_acct_sites_all hcas
10856 WHERE hcsu.cust_acct_site_id = hcas.cust_acct_site_id
10857 AND hcsu.site_use_id IN (SELECT DISTINCT wdd.ship_to_site_use_id
10858 FROM wsh_delivery_details wdd,
10859 wsh_delivery_assignments wda
10860 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
10861 AND wda.delivery_id = p_delivery_id);
10862
10863
10864 l_cust_tab WSH_UTIL_CORE.ID_TAB_TYPE;
10865 no_cust_for_loc EXCEPTION;
10866 mult_cust_for_loc EXCEPTION;
10867
10868 l_debug_on CONSTANT BOOLEAN := WSH_DEBUG_SV.is_debug_enabled;
10869 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'GET_SHIP_TO_CUSTOMER';
10870
10871 BEGIN
10872
10873 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
10874 --
10875 IF l_debug_on THEN
10876 wsh_debug_sv.push (l_module_name);
10877 END IF;
10878 --
10879
10880 OPEN c_get_shipto_cust_from_loc(p_ult_dropoff_loc_id);
10881 FETCH c_get_shipto_cust_from_loc BULK COLLECT INTO l_cust_tab;
10882 CLOSE c_get_shipto_cust_from_loc;
10883
10884 IF (l_cust_tab.COUNT=1) THEN
10885 x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10886 ELSIF (l_cust_tab.COUNT = 0) THEN
10887 -- Location is not associated with a customer.
10888 RAISE NO_CUST_FOR_LOC;
10889 ELSE
10890 -- Multiple records have been returned.
10891 -- For the delivery get the delivery lines and use ship to site id
10892 -- to return the customer. check that each has the same customer.
10893 OPEN c_get_shipto_cust_from_dlvy(p_delivery_id);
10894 FETCH c_get_shipto_cust_from_dlvy BULK COLLECT INTO l_cust_tab;
10895 CLOSE c_get_shipto_cust_from_dlvy;
10896
10897 IF (l_cust_tab.COUNT=1) THEN
10898 x_customer_id := l_cust_tab(l_cust_tab.FIRST);
10899 ELSIF (l_cust_tab.COUNT=0) THEN
10900 RAISE NO_CUST_FOR_LOC;
10901 ELSE
10902 RAISE MULT_CUST_FOR_LOC;
10903 END IF;
10904 END IF;
10905
10906 --
10907 IF l_debug_on THEN
10908 WSH_DEBUG_SV.pop(l_module_name);
10909 END IF;
10910 --
10911 EXCEPTION
10912
10913 WHEN NO_CUST_FOR_LOC THEN
10914 IF l_debug_on THEN
10915 wsh_debug_sv.logmsg(l_module_name, 'Location not associated with a customer');
10916 END IF;
10917 -- Location not associated with a customer.
10918 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_NO_LOC');
10919 FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10920 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10921 WSH_UTIL_CORE.add_message(x_return_status);
10922
10923 IF l_debug_on THEN
10924 WSH_DEBUG_SV.pop(l_module_name);
10925 END IF;
10926 WHEN MULT_CUST_FOR_LOC THEN
10927 -- Location associated with a multiple customers.
10928 IF l_debug_on THEN
10929 wsh_debug_sv.logmsg(l_module_name, 'Location associated with multiple customers');
10930 END IF;
10931 FND_MESSAGE.SET_NAME('WSH','WSH_CUST_MULT_LOC');
10932 FND_MESSAGE.SET_TOKEN('DELIVERY',p_delivery_id);
10933 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
10934 WSH_UTIL_CORE.add_message(x_return_status);
10935
10936 IF l_debug_on THEN
10937 WSH_DEBUG_SV.pop(l_module_name);
10938 END IF;
10939 WHEN OTHERS THEN
10940 IF (c_get_shipto_cust_from_loc%ISOPEN) THEN
10941 CLOSE c_get_shipto_cust_from_loc;
10942 END IF;
10943
10944 IF (c_get_shipto_cust_from_dlvy%ISOPEN) THEN
10945 CLOSE c_get_shipto_cust_from_dlvy;
10946 END IF;
10947 --
10948 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.get_ship_to_customer');
10949 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR ;
10950 --
10951 IF l_debug_on THEN
10952 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
10953 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
10954 END IF;
10955 --
10956 END GET_SHIP_TO_CUSTOMER;
10957
10958 ---------------------------------------------------------------------------------------
10959 -- Procedure: SET_PICK_UP_DROP_OFF_DATES
10960 --
10961 -- Parameters: p_cs_mleg_result_tab IN OUT table
10962 -- x_return_message Return Message
10963 -- x_return_status Return Status
10964 --
10965 -- COMMENT : This procedure is called from Process_carrier_selection API
10966 -- in order to get pick up and drop off dates for intermediate stops.
10967 -- If Carrier selection API returns multileg output, the dates have to
10968 -- determined.
10969 --
10970 -- Logic for determining the dates:
10971 --
10972 -- a) Find transit time between delivery leg's pick up and drop off stops
10973 -- b) If transit time found
10974 -- i. drop off date = pick up date +transit time
10975 -- c) if transit time is not found, calculate total time between deliveries
10976 -- pick up and drop off stops and divide it equally amongst all the delivery legs.
10977 --
10978 -- ----------------------------------------------------------------------
10979
10980 PROCEDURE SET_PICK_UP_DROP_OFF_DATES(
10981 p_cs_mleg_result_tab IN OUT NOCOPY WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
10982 x_return_status OUT NOCOPY VARCHAR2,
10983 x_msg_count OUT NOCOPY NUMBER,
10984 x_msg_data OUT NOCOPY VARCHAR2
10985 ) IS
10986
10987 transit_time NUMBER;
10988 transit_time_found BOOLEAN := TRUE;
10989 from_location_id NUMBER;
10990 to_location_id NUMBER;
10991 ship_method VARCHAR2(60);
10992 num_legs NUMBER;
10993 num_days NUMBER;
10994 num_hours NUMBER;
10995 days_fraction NUMBER;
10996 rec_cnt NUMBER;
10997 rec_cnt_prior NUMBER;
10998 pick_up_date DATE;
10999 drop_off_date DATE;
11000 initial_pick_up_date DATE;
11001 ultimate_drop_off_date DATE;
11002 d_itr NUMBER;
11003
11004 l_debug_on BOOLEAN;
11005
11006 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'SET_PICK_UP_DROP_OFF_DATES';
11007
11008 CURSOR get_transit_time(p_from_location_id NUMBER,
11009 p_to_location_id NUMBER,
11010 p_ship_method VARCHAR2) IS
11011
11012 SELECT INTRANSIT_TIME
11013 FROM MTL_INTERORG_SHIP_METHODS
11014 WHERE FROM_LOCATION_ID = p_from_location_id
11015 AND TO_LOCATION_ID = p_to_location_id
11016 AND SHIP_METHOD = p_ship_method;
11017
11018 BEGIN
11019 --{
11020 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11021
11022 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11023
11024 --
11025 IF l_debug_on IS NULL
11026 THEN
11027 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11028 END IF;
11029 --
11030
11031 IF l_debug_on THEN
11032 WSH_DEBUG_SV.push(l_module_name);
11033 END IF;
11034
11035 --
11036 -- Obtain number of delivery legs, initial pick up date and ultimate drop off date for the delivery
11037 --
11038
11039 num_legs := p_cs_mleg_result_tab.COUNT;
11040 initial_pick_up_date := p_cs_mleg_result_tab(p_cs_mleg_result_tab.FIRST).pickup_date;
11041 ultimate_drop_off_date := p_cs_mleg_result_tab(p_cs_mleg_result_tab.LAST).dropoff_date;
11042
11043 IF l_debug_on THEN
11044 WSH_DEBUG_SV.logmsg(l_module_name,'No of legs :'||num_legs);
11045 WSH_DEBUG_SV.logmsg(l_module_name,'initial_pick_up_date :'||to_char(initial_pick_up_date, 'dd/mm/yyyy hh:mi:ss'));
11046 WSH_DEBUG_SV.logmsg(l_module_name,'ultimate_drop_off_date :'||to_char(ultimate_drop_off_date, 'dd/mm/yyyy hh:mi:ss'));
11047 END IF;
11048
11049
11050 rec_cnt := p_cs_mleg_result_tab.FIRST;
11051
11052 IF rec_cnt IS NOT NULL THEN
11053 IF initial_pick_up_date = ultimate_drop_off_date THEN
11054 LOOP
11055 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
11056
11057 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
11058 pick_up_date := initial_pick_up_date;
11059 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
11060 -- pick up date is one hour more than drop off date of last stop
11061 pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
11062 END IF;
11063
11064 drop_off_date := pick_up_date + 1/144;
11065
11066 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
11067 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11068
11069 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
11070 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
11071 END LOOP;
11072 ELSE
11073
11074
11075 --IF rec_cnt IS NOT NULL THEN
11076
11077 LOOP
11078 --{
11079 transit_time := null;
11080 rec_cnt_prior := p_cs_mleg_result_tab.PRIOR(rec_cnt);
11081
11082 IF rec_cnt = p_cs_mleg_result_tab.FIRST THEN -- At first record
11083 pick_up_date := initial_pick_up_date;
11084 ELSIF p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date IS NOT NULL THEN
11085 -- pick up date is one hour more than drop off date of last stop
11086 pick_up_date := p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date + 1/24;
11087 END IF;
11088
11089 p_cs_mleg_result_tab(rec_cnt).pickup_date := pick_up_date;
11090
11091 IF transit_time_found = TRUE THEN
11092 --{
11093 from_location_id := p_cs_mleg_result_tab(rec_cnt).initial_pickup_location_id;
11094 to_location_id := p_cs_mleg_result_tab(rec_cnt).ultimate_dropoff_location_id;
11095 ship_method := p_cs_mleg_result_tab(rec_cnt).ship_method_code;
11096
11097 OPEN get_transit_time (from_location_id, to_location_id, ship_method);
11098 FETCH get_transit_time into transit_time;
11099 CLOSE get_transit_time;
11100
11101 --
11102 -- If transit time is not found for a leg, divide remaining time equally between different legs
11103 --
11104
11105 IF transit_time IS NULL THEN
11106 --{
11107 transit_time_found := false;
11108 num_days := ultimate_drop_off_date - pick_up_date;
11109 IF num_days > (num_legs-1)/24 THEN
11110 days_fraction := (num_days - (num_legs-2)/24)/ num_legs;
11111 ELSE
11112 days_fraction := num_days / num_legs;
11113 END IF;
11114 drop_off_date := pick_up_date + days_fraction;
11115
11116 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11117 --}
11118 ELSE -- transit time is not null
11119 --{
11120 IF l_debug_on THEN
11121 WSH_DEBUG_SV.log(l_module_name, 'transit_time_found', transit_time_found);
11122 WSH_DEBUG_SV.log(l_module_name, 'from_location_id', from_location_id);
11123 WSH_DEBUG_SV.log(l_module_name, 'to_location_id', to_location_id);
11124 WSH_DEBUG_SV.log(l_module_name, 'ship_method', ship_method);
11125 WSH_DEBUG_SV.log(l_module_name, 'transit_time', transit_time);
11126 END IF;
11127
11128 IF rec_cnt = p_cs_mleg_result_tab.LAST THEN
11129 drop_off_date := ultimate_drop_off_date;
11130 ELSE
11131 drop_off_date := pick_up_date + transit_time;
11132 END IF;
11133
11134 IF drop_off_date < ultimate_drop_off_date THEN
11135 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11136 num_legs := num_legs - 1;
11137 ELSIF drop_off_date = ultimate_drop_off_date THEN
11138 IF drop_off_date <= pick_up_date THEN
11139 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date + 1/24;
11140 ultimate_drop_off_date := ultimate_drop_off_date + 1/24;
11141 END IF;
11142 num_legs := num_legs - 1;
11143 ELSE
11144 transit_time_found := false;
11145
11146 IF p_cs_mleg_result_tab.EXISTS(rec_cnt_prior) THEN
11147 num_days := ultimate_drop_off_date - p_cs_mleg_result_tab(rec_cnt_prior).dropoff_date;
11148 ELSE
11149 num_days := ultimate_drop_off_date - pick_up_date;
11150 END IF;
11151 IF num_days > (num_legs-1)/24 THEN
11152 days_fraction := (num_days - (num_legs-2)/24)/ num_legs;
11153 ELSE
11154 days_fraction := num_days / num_legs;
11155 END IF;
11156 --days_fraction := num_days / num_legs;
11157 drop_off_date := pick_up_date + days_fraction;
11158 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11159 END IF;
11160
11161 IF l_debug_on THEN
11162 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'));
11163 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'));
11164 END IF;
11165 --}
11166 END IF;
11167 --}
11168 ELSE
11169 --{
11170 drop_off_date := pick_up_date + days_fraction;
11171
11172 IF drop_off_date > ultimate_drop_off_date OR rec_cnt = p_cs_mleg_result_tab.LAST THEN
11173 drop_off_date := ultimate_drop_off_date;
11174 END IF;
11175
11176 IF drop_off_date = ultimate_drop_off_date AND drop_off_date <= pick_up_date THEN
11177 drop_off_date := drop_off_date + 1/24;
11178 ultimate_drop_off_date := drop_off_date;
11179 END IF;
11180
11181 p_cs_mleg_result_tab(rec_cnt).dropoff_date := drop_off_date;
11182 --}
11183 END IF;
11184
11185 --}
11186 EXIT WHEN rec_cnt = p_cs_mleg_result_tab.LAST OR rec_cnt IS NULL;
11187
11188 rec_cnt := p_cs_mleg_result_tab.NEXT(rec_cnt);
11189
11190 END LOOP;
11191
11192 --END IF;
11193
11194 d_itr := p_cs_mleg_result_tab.FIRST;
11195
11196 IF d_itr IS NOT NULL THEN
11197 LOOP
11198 IF p_cs_mleg_result_tab(d_itr).pickup_date = p_cs_mleg_result_tab(d_itr).dropoff_date THEN
11199 p_cs_mleg_result_tab(d_itr).dropoff_date := p_cs_mleg_result_tab(d_itr).dropoff_date + 1/144;
11200 END IF;
11201
11202 IF l_debug_on THEN
11203 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);
11204 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'));
11205 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);
11206 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'));
11207 END IF;
11208
11209 EXIT WHEN d_itr = p_cs_mleg_result_tab.LAST;
11210 d_itr := p_cs_mleg_result_tab.NEXT(d_itr);
11211 END LOOP;
11212 END IF;
11213 END IF;
11214 END IF;
11215
11216 IF l_debug_on THEN
11217 WSH_DEBUG_SV.pop(l_module_name);
11218 END IF;
11219 --}
11220 EXCEPTION
11221
11222 WHEN OTHERS THEN
11223
11224 wsh_util_core.default_handler('WSH_NEW_DELIVERY_ACTIONS.SET_PICK_UP_DROP_OFF_DATES',l_module_name);
11225 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11226
11227 IF get_transit_time%ISOPEN THEN
11228 CLOSE get_transit_time;
11229 END IF;
11230
11231 IF l_debug_on THEN
11232
11233 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11234 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_UNEXPECTED_ERROR');
11235
11236 END IF;
11237
11238 END SET_PICK_UP_DROP_OFF_DATES;
11239
11240 -- -------------------------------------------------------------------------- --
11241 -- --
11242 -- NAME: FORMAT_DEL_UPDATE_TABLE --
11243 -- --
11244 -- TYPE: PROCEDURE --
11245 -- --
11246 -- --
11247 -- PARAMETERS (IN): p_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11248 -- p_carrier_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11249 -- p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11250 -- p_mode_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11251 -- p_freight_term_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11252 -- p_smc_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30 --
11253 -- p_org_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11254 -- p_trip_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers --
11255 -- --
11256 -- PARAMETERS (OUT): x_rec_attr_tab OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type --
11257 -- x_trip_info_tab OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type
11258 --
11259 --
11260 -- RETURN: none --
11261 -- --
11262 -- DESCRIPTION: This procedure is used to format the record for --
11263 -- updating the delivery table for carrier selection --
11264 -- --
11265 -- --
11266 -- CHANGE CONTROL LOG --
11267 -- ------------------ --
11268 -- --
11269 -- DATE VERSION BY BUG DESCRIPTION --
11270 -- ---------- ------- -------- ------- ---------------------------------- --
11271 -- 2002/12/09 I ABLUNDEL ------- Created --
11272 -- Attribute passed initially --
11273 -- p_del_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers, --
11274 -- p_carrier_id_tab IN WSH_NEW_DELIVERY_ACTIONS.TableNumbers, --
11275 -- p_service_level_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11276 -- p_mode_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11277 -- p_freight_term_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11278 -- p_smc_tab IN WSH_NEW_DELIVERY_ACTIONS.TableVarchar30, --
11279 -- --
11280 -- -------------------------------------------------------------------------- --
11281
11282 -- Result table will be of type Shipping
11283
11284 PROCEDURE FORMAT_DEL_UPDATE_TABLE(--p_cs_result_tab IN FTE_ACS_PKG.FTE_CS_RESULT_TAB_TYPE,
11285 p_cs_result_tab IN WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE,
11286 p_caller IN VARCHAR2 DEFAULT NULL,
11287 x_rec_attr_tab OUT NOCOPY WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
11288 x_trip_info_tab OUT NOCOPY WSH_TRIPS_PVT.Trip_Attr_Tbl_Type,
11289 x_return_message OUT NOCOPY VARCHAR2,
11290 x_return_status OUT NOCOPY VARCHAR2) IS
11291
11292 fmc NUMBER;
11293 fmct NUMBER;
11294 fm NUMBER;
11295
11296 trpidx NUMBER;
11297 l_del_found BOOLEAN;
11298 l_error_code NUMBER;
11299 l_error_text VARCHAR2(2000);
11300 l_del_org_id NUMBER;
11301 l_prev_org_id NUMBER;
11302 l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'N';
11303 l_param_value_info WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11304 l_ignore_for_planning WSH_TRIPS.ignore_for_planning%TYPE;
11305 --
11306 l_debug_on BOOLEAN;
11307 --
11308 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'FORMAT_DEL_UPDATE_TABLE';
11309 --
11310 BEGIN
11311
11312 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11313 --
11314 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11315 --
11316 IF l_debug_on IS NULL
11317 THEN
11318 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11319 END IF;
11320 --
11321 --
11322 -- Debug Statements
11323 --
11324 IF l_debug_on THEN
11325 WSH_DEBUG_SV.push(l_module_name);
11326 END IF;
11327 --
11328
11329 IF l_debug_on THEN
11330 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab.COUNT :'||p_cs_result_tab.COUNT);
11331
11332 END IF;
11333
11334 IF (p_cs_result_tab.COUNT > 0) THEN
11335
11336 fmc := 0;
11337 fmct := 0;
11338 l_prev_org_id := 0;
11339
11340 fm := p_cs_result_tab.FIRST;
11341 IF l_debug_on THEN
11342 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).delivery_id :'||p_cs_result_tab(fm).delivery_id);
11343 WSH_DEBUG_SV.logmsg(l_module_name,'p_cs_result_tab(fm).trip_id :'||p_cs_result_tab(fm).trip_id);
11344 END IF;
11345
11346 LOOP
11347
11348 IF (p_cs_result_tab(fm).trip_id) is NULL THEN
11349
11350 fmc := fmc + 1;
11351 IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11352
11353 x_rec_attr_tab(fmc).DELIVERY_ID := p_cs_result_tab(fm).delivery_id;
11354 x_rec_attr_tab(fmc).NAME := FND_API.G_MISS_CHAR;
11355 x_rec_attr_tab(fmc).PLANNED_FLAG := FND_API.G_MISS_CHAR;
11356 x_rec_attr_tab(fmc).STATUS_CODE := FND_API.G_MISS_CHAR;
11357 x_rec_attr_tab(fmc).DELIVERY_TYPE := FND_API.G_MISS_CHAR;
11358 x_rec_attr_tab(fmc).LOADING_SEQUENCE := FND_API.G_MISS_NUM;
11359 x_rec_attr_tab(fmc).LOADING_ORDER_FLAG := FND_API.G_MISS_CHAR;
11360 x_rec_attr_tab(fmc).INITIAL_PICKUP_DATE := FND_API.G_MISS_DATE;
11361 x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_ID := FND_API.G_MISS_NUM;
11362 x_rec_attr_tab(fmc).ORGANIZATION_ID := FND_API.G_MISS_NUM;
11363 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_ID := FND_API.G_MISS_NUM;
11364 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_DATE := FND_API.G_MISS_DATE;
11365 x_rec_attr_tab(fmc).CUSTOMER_ID := FND_API.G_MISS_NUM;
11366 x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_ID := FND_API.G_MISS_NUM;
11367 x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_ID := FND_API.G_MISS_NUM;
11368
11369 -- Bug 4524023 (issue 1)
11370 /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11371 x_rec_attr_tab(fmc).CARRIER_ID := FND_API.G_MISS_NUM;
11372 ELSE*/
11373 x_rec_attr_tab(fmc).CARRIER_ID := p_cs_result_tab(fm).carrier_id;
11374
11375 --END IF;
11376
11377 /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11378 x_rec_attr_tab(fmc).SHIP_METHOD_CODE := FND_API.G_MISS_CHAR;
11379 ELSE*/
11380 x_rec_attr_tab(fmc).SHIP_METHOD_CODE := p_cs_result_tab(fm).ship_method_code;
11381 --END IF;
11382
11383 IF (p_cs_result_tab(fm).freight_terms_code IS NULL) THEN
11384 x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11385 ELSE
11386 x_rec_attr_tab(fmc).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11387 END IF;
11388
11389 x_rec_attr_tab(fmc).FOB_CODE := FND_API.G_MISS_CHAR;
11390 x_rec_attr_tab(fmc).FOB_LOCATION_ID := FND_API.G_MISS_NUM;
11391 x_rec_attr_tab(fmc).WAYBILL := FND_API.G_MISS_CHAR;
11392 x_rec_attr_tab(fmc).DOCK_CODE := FND_API.G_MISS_CHAR;
11393 x_rec_attr_tab(fmc).ACCEPTANCE_FLAG := FND_API.G_MISS_CHAR;
11394 x_rec_attr_tab(fmc).ACCEPTED_BY := FND_API.G_MISS_CHAR;
11395 x_rec_attr_tab(fmc).ACCEPTED_DATE := FND_API.G_MISS_DATE;
11396 x_rec_attr_tab(fmc).ACKNOWLEDGED_BY := FND_API.G_MISS_CHAR;
11397 x_rec_attr_tab(fmc).CONFIRMED_BY := FND_API.G_MISS_CHAR;
11398 x_rec_attr_tab(fmc).CONFIRM_DATE := FND_API.G_MISS_DATE;
11399 x_rec_attr_tab(fmc).ASN_DATE_SENT := FND_API.G_MISS_DATE;
11400 x_rec_attr_tab(fmc).ASN_STATUS_CODE := FND_API.G_MISS_CHAR;
11401 x_rec_attr_tab(fmc).ASN_SEQ_NUMBER := FND_API.G_MISS_NUM;
11402 x_rec_attr_tab(fmc).GROSS_WEIGHT := FND_API.G_MISS_NUM;
11403 x_rec_attr_tab(fmc).NET_WEIGHT := FND_API.G_MISS_NUM;
11404 x_rec_attr_tab(fmc).WEIGHT_UOM_CODE := FND_API.G_MISS_CHAR;
11405 x_rec_attr_tab(fmc).VOLUME := FND_API.G_MISS_NUM;
11406 x_rec_attr_tab(fmc).VOLUME_UOM_CODE := FND_API.G_MISS_CHAR;
11407 x_rec_attr_tab(fmc).ADDITIONAL_SHIPMENT_INFO := FND_API.G_MISS_CHAR;
11408 x_rec_attr_tab(fmc).CURRENCY_CODE := FND_API.G_MISS_CHAR;
11409 x_rec_attr_tab(fmc).ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11410 x_rec_attr_tab(fmc).ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11411 x_rec_attr_tab(fmc).ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11412 x_rec_attr_tab(fmc).ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11413 x_rec_attr_tab(fmc).ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11414 x_rec_attr_tab(fmc).ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11415 x_rec_attr_tab(fmc).ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11416 x_rec_attr_tab(fmc).ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11417 x_rec_attr_tab(fmc).ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11418 x_rec_attr_tab(fmc).ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11419 x_rec_attr_tab(fmc).ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11420 x_rec_attr_tab(fmc).ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11421 x_rec_attr_tab(fmc).ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11422 x_rec_attr_tab(fmc).ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11423 x_rec_attr_tab(fmc).ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11424 x_rec_attr_tab(fmc).ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11425 x_rec_attr_tab(fmc).TP_ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11426 x_rec_attr_tab(fmc).TP_ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11427 x_rec_attr_tab(fmc).TP_ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11428 x_rec_attr_tab(fmc).TP_ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11429 x_rec_attr_tab(fmc).TP_ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11430 x_rec_attr_tab(fmc).TP_ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11431 x_rec_attr_tab(fmc).TP_ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11432 x_rec_attr_tab(fmc).TP_ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11433 x_rec_attr_tab(fmc).TP_ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11434 x_rec_attr_tab(fmc).TP_ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11435 x_rec_attr_tab(fmc).TP_ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11436 x_rec_attr_tab(fmc).TP_ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11437 x_rec_attr_tab(fmc).TP_ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11438 x_rec_attr_tab(fmc).TP_ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11439 x_rec_attr_tab(fmc).TP_ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11440 x_rec_attr_tab(fmc).TP_ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11441 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11442 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11443 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11444 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11445 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11446 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11447 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11448 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11449 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11450 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11451 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11452 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11453 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11454 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11455 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11456 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11457 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE16 := FND_API.G_MISS_CHAR;
11458 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE17 := FND_API.G_MISS_CHAR;
11459 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE18 := FND_API.G_MISS_CHAR;
11460 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE19 := FND_API.G_MISS_CHAR;
11461 x_rec_attr_tab(fmc).GLOBAL_ATTRIBUTE20 := FND_API.G_MISS_CHAR;
11462 x_rec_attr_tab(fmc).CREATION_DATE := FND_API.G_MISS_DATE;
11463 x_rec_attr_tab(fmc).CREATED_BY := FND_API.G_MISS_NUM;
11464 x_rec_attr_tab(fmc).LAST_UPDATE_DATE := FND_API.G_MISS_DATE;
11465 x_rec_attr_tab(fmc).LAST_UPDATED_BY := FND_API.G_MISS_NUM;
11466 x_rec_attr_tab(fmc).LAST_UPDATE_LOGIN := FND_API.G_MISS_NUM;
11467 x_rec_attr_tab(fmc).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11468 x_rec_attr_tab(fmc).PROGRAM_ID := FND_API.G_MISS_NUM;
11469 x_rec_attr_tab(fmc).PROGRAM_UPDATE_DATE := FND_API.G_MISS_DATE;
11470 x_rec_attr_tab(fmc).REQUEST_ID := FND_API.G_MISS_NUM;
11471 x_rec_attr_tab(fmc).BATCH_ID := FND_API.G_MISS_NUM;
11472 x_rec_attr_tab(fmc).HASH_VALUE := FND_API.G_MISS_NUM;
11473 x_rec_attr_tab(fmc).SOURCE_HEADER_ID := FND_API.G_MISS_NUM;
11474 x_rec_attr_tab(fmc).NUMBER_OF_LPN := FND_API.G_MISS_NUM;
11475 x_rec_attr_tab(fmc).COD_AMOUNT := FND_API.G_MISS_NUM;
11476 x_rec_attr_tab(fmc).COD_CURRENCY_CODE := FND_API.G_MISS_CHAR;
11477 x_rec_attr_tab(fmc).COD_REMIT_TO := FND_API.G_MISS_CHAR;
11478 x_rec_attr_tab(fmc).COD_CHARGE_PAID_BY := FND_API.G_MISS_CHAR;
11479 x_rec_attr_tab(fmc).PROBLEM_CONTACT_REFERENCE := FND_API.G_MISS_CHAR;
11480 x_rec_attr_tab(fmc).PORT_OF_LOADING := FND_API.G_MISS_CHAR;
11481 x_rec_attr_tab(fmc).PORT_OF_DISCHARGE := FND_API.G_MISS_CHAR;
11482 x_rec_attr_tab(fmc).FTZ_NUMBER := FND_API.G_MISS_CHAR;
11483 x_rec_attr_tab(fmc).ROUTED_EXPORT_TXN := FND_API.G_MISS_CHAR;
11484 x_rec_attr_tab(fmc).ENTRY_NUMBER := FND_API.G_MISS_CHAR;
11485 x_rec_attr_tab(fmc).ROUTING_INSTRUCTIONS := FND_API.G_MISS_CHAR;
11486 x_rec_attr_tab(fmc).IN_BOND_CODE := FND_API.G_MISS_CHAR;
11487 x_rec_attr_tab(fmc).SHIPPING_MARKS := FND_API.G_MISS_CHAR;
11488
11489 /*IF (p_cs_result_tab(fm).service_level is null) THEN
11490 x_rec_attr_tab(fmc).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11491 ELSE*/
11492 x_rec_attr_tab(fmc).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11493 --END IF;
11494
11495 /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11496 x_rec_attr_tab(fmc).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11497 ELSE*/
11498 x_rec_attr_tab(fmc).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11499 --END IF;
11500
11501 x_rec_attr_tab(fmc).ASSIGNED_TO_FTE_TRIPS := FND_API.G_MISS_CHAR;
11502 x_rec_attr_tab(fmc).AUTO_SC_EXCLUDE_FLAG := FND_API.G_MISS_CHAR;
11503 x_rec_attr_tab(fmc).AUTO_AP_EXCLUDE_FLAG := FND_API.G_MISS_CHAR;
11504 x_rec_attr_tab(fmc).AP_BATCH_ID := FND_API.G_MISS_NUM;
11505
11506 -- x_rec_attr_tab(fmc).ROWID := FND_API.G_MISS_CHAR;
11507 x_rec_attr_tab(fmc).LOADING_ORDER_DESC := FND_API.G_MISS_CHAR;
11508 x_rec_attr_tab(fmc).ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11509 x_rec_attr_tab(fmc).ULTIMATE_DROPOFF_LOCATION_CODE:= FND_API.G_MISS_CHAR;
11510 x_rec_attr_tab(fmc).INITIAL_PICKUP_LOCATION_CODE := FND_API.G_MISS_CHAR;
11511 x_rec_attr_tab(fmc).CUSTOMER_NUMBER := FND_API.G_MISS_CHAR;
11512 x_rec_attr_tab(fmc).INTMED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
11513 x_rec_attr_tab(fmc).POOLED_SHIP_TO_LOCATION_CODE := FND_API.G_MISS_CHAR;
11514 x_rec_attr_tab(fmc).CARRIER_CODE := FND_API.G_MISS_CHAR;
11515 x_rec_attr_tab(fmc).SHIP_METHOD_NAME := FND_API.G_MISS_CHAR;
11516 x_rec_attr_tab(fmc).FREIGHT_TERMS_NAME := FND_API.G_MISS_CHAR;
11517 x_rec_attr_tab(fmc).FOB_NAME := FND_API.G_MISS_CHAR;
11518 x_rec_attr_tab(fmc).FOB_LOCATION_CODE := FND_API.G_MISS_CHAR;
11519 x_rec_attr_tab(fmc).WEIGHT_UOM_DESC := FND_API.G_MISS_CHAR;
11520 x_rec_attr_tab(fmc).VOLUME_UOM_DESC := FND_API.G_MISS_CHAR;
11521 x_rec_attr_tab(fmc).CURRENCY_NAME := FND_API.G_MISS_CHAR;
11522 END IF;
11523
11524 ELSE
11525
11526 fmct := fmct + 1;
11527
11528 IF (p_cs_result_tab(fm).delivery_id is not null) THEN
11529
11530 /*
11531 -- Hiding project
11532 IF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' THEN
11533
11534 -- AG use organization_id from cs_result_tab
11535 l_del_org_id := p_cs_result_tab(fm).organization_id;
11536
11537 IF l_del_org_id <> l_prev_org_id THEN
11538
11539 l_param_value_info.organization_id := l_del_org_id;
11540 l_param_value_info.param_name(1) := 'SKIP_RTNG_RULE_AC_TRIP';
11541
11542 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_value_info,
11543 x_return_status => x_return_status);
11544 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
11545 END IF;
11546 END IF;
11547 */ -- Hiding project
11548
11549 --IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN --Commented for bug 14768761
11550 /*
11551 -- Hiding project
11552 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
11553 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
11554 */ -- Hiding project
11555 x_trip_info_tab(fmct).TRIP_ID := p_cs_result_tab(fm).trip_id;
11556
11557 x_trip_info_tab(fmct).NAME := FND_API.G_MISS_CHAR;
11558 --x_trip_info_tab(fmct).PLANNED_FLAG := FND_API.G_MISS_CHAR;
11559 x_trip_info_tab(fmct).PLANNED_FLAG := 'N';
11560 x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_ID := FND_API.G_MISS_NUM;
11561 x_trip_info_tab(fmct).STATUS_CODE := 'OP';
11562 x_trip_info_tab(fmct).VEHICLE_ITEM_ID := FND_API.G_MISS_NUM;
11563 x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_ID := FND_API.G_MISS_NUM;
11564 x_trip_info_tab(fmct).VEHICLE_NUMBER := FND_API.G_MISS_CHAR;
11565 x_trip_info_tab(fmct).VEHICLE_NUM_PREFIX := FND_API.G_MISS_CHAR;
11566
11567 /*IF (p_cs_result_tab(fm).carrier_id is null) THEN
11568 x_trip_info_tab(fmct).CARRIER_ID := FND_API.G_MISS_NUM;
11569 ELSE*/
11570 x_trip_info_tab(fmct).CARRIER_ID := p_cs_result_tab(fm).carrier_id;
11571 --END IF;
11572
11573 /*IF (p_cs_result_tab(fm).ship_method_code is null) THEN
11574 x_trip_info_tab(fmct).SHIP_METHOD_CODE := FND_API.G_MISS_CHAR;
11575 ELSE*/
11576 x_trip_info_tab(fmct).SHIP_METHOD_CODE := p_cs_result_tab(fm).ship_method_code;
11577 --END IF;
11578
11579
11580 IF (p_cs_result_tab(fm).consignee_carrier_ac_no is null) THEN
11581 x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := FND_API.G_MISS_CHAR;
11582 ELSE
11583 x_trip_info_tab(fmct).CONSIGNEE_CARRIER_AC_NO := p_cs_result_tab(fm).consignee_carrier_ac_no;
11584 END IF;
11585
11586 -- AG
11587 -- cs_result_tab.rank stores rank_sequence
11588 -- It is not same as trip's rank_id which has already been updated by FTE
11589 -- rank_list_action API
11590 x_trip_info_tab(fmct).RANK_ID := FND_API.G_MISS_NUM;
11591
11592 IF (p_cs_result_tab(fm).append_flag is null) THEN
11593 x_trip_info_tab(fmct).APPEND_FLAG := FND_API.G_MISS_CHAR;
11594 ELSE
11595 x_trip_info_tab(fmct).APPEND_FLAG := p_cs_result_tab(fm).append_flag;
11596 END IF;
11597
11598 -- AG Use rule_id from p_cs_result_tab and not routing_rule_id
11599
11600 IF (p_cs_result_tab(fm).rule_id is null) THEN
11601 x_trip_info_tab(fmct).ROUTING_RULE_ID := FND_API.G_MISS_NUM;
11602 ELSE
11603 x_trip_info_tab(fmct).ROUTING_RULE_ID := p_cs_result_tab(fm).rule_id ;
11604 END IF;
11605
11606 x_trip_info_tab(fmct).ROUTE_ID := FND_API.G_MISS_NUM;
11607 x_trip_info_tab(fmct).ROUTING_INSTRUCTIONS := FND_API.G_MISS_CHAR;
11608 x_trip_info_tab(fmct).ATTRIBUTE_CATEGORY := FND_API.G_MISS_CHAR;
11609 x_trip_info_tab(fmct).ATTRIBUTE1 := FND_API.G_MISS_CHAR;
11610 x_trip_info_tab(fmct).ATTRIBUTE2 := FND_API.G_MISS_CHAR;
11611 x_trip_info_tab(fmct).ATTRIBUTE3 := FND_API.G_MISS_CHAR;
11612 x_trip_info_tab(fmct).ATTRIBUTE4 := FND_API.G_MISS_CHAR;
11613 x_trip_info_tab(fmct).ATTRIBUTE5 := FND_API.G_MISS_CHAR;
11614 x_trip_info_tab(fmct).ATTRIBUTE6 := FND_API.G_MISS_CHAR;
11615 x_trip_info_tab(fmct).ATTRIBUTE7 := FND_API.G_MISS_CHAR;
11616 x_trip_info_tab(fmct).ATTRIBUTE8 := FND_API.G_MISS_CHAR;
11617 x_trip_info_tab(fmct).ATTRIBUTE9 := FND_API.G_MISS_CHAR;
11618 x_trip_info_tab(fmct).ATTRIBUTE10 := FND_API.G_MISS_CHAR;
11619 x_trip_info_tab(fmct).ATTRIBUTE11 := FND_API.G_MISS_CHAR;
11620 x_trip_info_tab(fmct).ATTRIBUTE12 := FND_API.G_MISS_CHAR;
11621 x_trip_info_tab(fmct).ATTRIBUTE13 := FND_API.G_MISS_CHAR;
11622 x_trip_info_tab(fmct).ATTRIBUTE14 := FND_API.G_MISS_CHAR;
11623 x_trip_info_tab(fmct).ATTRIBUTE15 := FND_API.G_MISS_CHAR;
11624 x_trip_info_tab(fmct).CREATION_DATE := SYSDATE;
11625 x_trip_info_tab(fmct).CREATED_BY := fnd_global.user_id;
11626 x_trip_info_tab(fmct).LAST_UPDATE_DATE := SYSDATE;
11627 x_trip_info_tab(fmct).LAST_UPDATED_BY := fnd_global.user_id;
11628 x_trip_info_tab(fmct).LAST_UPDATE_LOGIN := fnd_global.login_id;
11629 x_trip_info_tab(fmct).PROGRAM_APPLICATION_ID := FND_API.G_MISS_NUM;
11630 x_trip_info_tab(fmct).PROGRAM_ID := FND_API.G_MISS_NUM;
11631 x_trip_info_tab(fmct).PROGRAM_UPDATE_DATE := FND_API.G_MISS_DATE;
11632 x_trip_info_tab(fmct).REQUEST_ID := FND_API.G_MISS_NUM;
11633
11634 /*IF (p_cs_result_tab(fm).service_level is null) THEN
11635 x_trip_info_tab(fmct).SERVICE_LEVEL := FND_API.G_MISS_CHAR;
11636 ELSE*/
11637 x_trip_info_tab(fmct).SERVICE_LEVEL := p_cs_result_tab(fm).service_level;
11638 --END IF;
11639
11640 /*IF (p_cs_result_tab(fm).mode_of_transport is null) THEN
11641 x_trip_info_tab(fmct).MODE_OF_TRANSPORT := FND_API.G_MISS_CHAR;
11642 ELSE*/
11643 x_trip_info_tab(fmct).MODE_OF_TRANSPORT := p_cs_result_tab(fm).mode_of_transport;
11644 --END IF;
11645
11646 IF (p_cs_result_tab(fm).freight_terms_code is null) THEN
11647 x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := FND_API.G_MISS_CHAR;
11648 ELSE
11649 x_trip_info_tab(fmct).FREIGHT_TERMS_CODE := p_cs_result_tab(fm).freight_terms_code;
11650 END IF;
11651
11652 x_trip_info_tab(fmct).CONSOLIDATION_ALLOWED := FND_API.G_MISS_CHAR;
11653 x_trip_info_tab(fmct).LOAD_TENDER_STATUS := FND_API.G_MISS_CHAR;
11654 x_trip_info_tab(fmct).ROUTE_LANE_ID := FND_API.G_MISS_NUM;
11655 x_trip_info_tab(fmct).LANE_ID := FND_API.G_MISS_NUM;
11656 x_trip_info_tab(fmct).SCHEDULE_ID := FND_API.G_MISS_NUM;
11657 x_trip_info_tab(fmct).BOOKING_NUMBER := FND_API.G_MISS_CHAR;
11658 x_trip_info_tab(fmct).ARRIVE_AFTER_TRIP_NAME := FND_API.G_MISS_CHAR;
11659 x_trip_info_tab(fmct).SHIP_METHOD_NAME := FND_API.G_MISS_CHAR;
11660 x_trip_info_tab(fmct).VEHICLE_ITEM_DESC := FND_API.G_MISS_CHAR;
11661 x_trip_info_tab(fmct).VEHICLE_ORGANIZATION_CODE := FND_API.G_MISS_CHAR;
11662
11663 --END IF; --Commented for bug 14768761
11664 END IF;
11665
11666 END IF; -- END of IF (p_trip_id_tab(trpidx) is NULL) THEN
11667 --
11668 EXIT WHEN fm = p_cs_result_tab.LAST;
11669 fm := p_cs_result_tab.NEXT(fm);
11670 END LOOP;
11671 END IF;
11672
11673 --
11674 -- Debug Statements
11675 --
11676 IF l_debug_on THEN
11677 WSH_DEBUG_SV.pop(l_module_name);
11678 END IF;
11679 --
11680 RETURN;
11681
11682 EXCEPTION
11683 WHEN OTHERS THEN
11684 x_rec_attr_tab.DELETE;
11685 l_error_code := SQLCODE;
11686 l_error_text := SQLERRM;
11687 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
11688 --
11689 -- Debug Statements
11690 --
11691 IF l_debug_on THEN
11692 WSH_DEBUG_SV.logmsg(l_module_name, 'THE UNEXPECTED ERROR FROM WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE IS ' ||l_error_text);
11693 END IF;
11694 --
11695 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.FORMAT_DEL_UPDATE_TABLE');
11696 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR);
11697 --
11698 -- Debug Statements
11699 --
11700 IF l_debug_on THEN
11701 WSH_DEBUG_SV.pop(l_module_name);
11702 END IF;
11703 --
11704 RETURN;
11705
11706 --
11707 -- Debug Statements
11708 --
11709 IF l_debug_on THEN
11710 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
11711 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
11712 END IF;
11713 --
11714 END FORMAT_DEL_UPDATE_TABLE;
11715
11716
11717 PROCEDURE PROCESS_CARRIER_SELECTION(p_delivery_id_tab IN OUT NOCOPY WSH_UTIL_CORE.Id_Tab_Type,
11718 p_batch_id IN NUMBER,
11719 p_form_flag IN VARCHAR2,
11720 p_organization_id IN NUMBER DEFAULT NULL,
11721 p_caller IN VARCHAR2 DEFAULT NULL,
11722 x_return_message OUT NOCOPY VARCHAR2,
11723 x_return_status OUT NOCOPY VARCHAR2) IS
11724
11725 --
11726 -- Cursor to get delivery info from the table of delivery ids
11727 -- Carrier selection is not required if delivery's ship from location id is null.
11728 --
11729 cursor c_get_del_info_by_del_id(x_delivery_id NUMBER) IS
11730 select delivery_id,
11731 name,
11732 organization_id,
11733 gross_weight,
11734 weight_uom_code,
11735 volume,
11736 volume_uom_code,
11737 initial_pickup_location_id,
11738 ultimate_dropoff_location_id,
11739 customer_id,
11740 freight_terms_code,
11741 NULL, -- planned_flag,
11742 initial_pickup_date,
11743 ultimate_dropoff_date,
11744 fob_code,
11745 shipment_direction,
11746 delivery_type,
11747 NULL -- l_trip_id
11748 from wsh_new_deliveries
11749 where delivery_id = x_delivery_id
11750 and ship_method_code is null
11751 AND initial_pickup_location_id <> WSH_UTIL_CORE.C_NULL_SF_LOCN_ID -- J-IB-NPARIKH
11752 and planned_flag NOT IN ('Y','F');
11753
11754 --
11755 -- cursor to get delivery info from the delivery table (for Pick Release Call)
11756 --
11757
11758 cursor c_get_del_info_by_batch_id( x_batch_id NUMBER,
11759 x_organization_id NUMBER
11760 ) IS
11761 select delivery_id,
11762 name,
11763 organization_id,
11764 gross_weight,
11765 weight_uom_code,
11766 volume,
11767 volume_uom_code,
11768 initial_pickup_location_id,
11769 ultimate_dropoff_location_id,
11770 customer_id,
11771 freight_terms_code,
11772 NULL, -- planned_flag,
11773 initial_pickup_date,
11774 ultimate_dropoff_date,
11775 fob_code,
11776 shipment_direction,
11777 delivery_type,
11778 NULL -- l_trip_id
11779 from wsh_new_deliveries
11780 where batch_id = x_batch_id
11781 and organization_id = x_organization_id
11782 and ship_method_code is null
11783 and planned_flag NOT IN ('Y','F');
11784
11785 --
11786 -- cursor to get delivery info from the delivery table (for form call)
11787 -- BUG:2369435 - added planned_flag to cursor
11788 --
11789 cursor c_get_del_info_by_form(f_delivery_id NUMBER) IS
11790 select delivery_id,
11791 name,
11792 organization_id,
11793 gross_weight,
11794 weight_uom_code,
11795 volume,
11796 volume_uom_code,
11797 initial_pickup_location_id,
11798 ultimate_dropoff_location_id,
11799 customer_id,
11800 freight_terms_code,
11801 planned_flag,
11802 initial_pickup_date,
11803 ultimate_dropoff_date,
11804 fob_code,
11805 shipment_direction,
11806 delivery_type,
11807 NULL -- l_trip_id
11808 from wsh_new_deliveries
11809 where delivery_id = f_delivery_id;
11810
11811 CURSOR check_del_assigned(p_del_id IN NUMBER) IS
11812 select wts.trip_id,
11813 wt.rank_id
11814 from wsh_trip_stops wts,
11815 wsh_delivery_legs wdl,
11816 wsh_trips wt
11817 where wdl.delivery_id = p_del_id
11818 and wts.stop_id = wdl.pick_up_stop_id
11819 and wts.trip_id = wt.trip_id;
11820
11821 -- AG not required
11822 /*
11823 CURSOR get_org_for_delivery(p_del_id IN NUMBER) IS
11824 select wnd.organization_id
11825 from wsh_new_deliveries wnd
11826 where wnd.delivery_id = p_del_id;
11827 */
11828
11829
11830 l_trip_id_tab WSH_NEW_DELIVERY_ACTIONS.TableNumbers;
11831 l_return_status VARCHAR2(1); -- returning error/success/warning
11832 l_return_message VARCHAR2(2000); -- hold a return error message
11833 l_BatchSize PLS_INTEGER := 500; -- max rows from a batch fetch
11834 l_current_rows PLS_INTEGER; -- number of current rows fetched
11835 l_remaining_rows PLS_INTEGER; -- number of remaining rows left
11836 l_previous_rows PLS_INTEGER; -- rows previously processed
11837 l_result_found_flag VARCHAR2(1) := 'N'; -- indicates a found result
11838 l_messaging_yn VARCHAR2(1);
11839 l_y_planned_flag VARCHAR2(1);
11840
11841 -- new parameter for getting
11842 -- shipping paramters
11843 --
11844 -- Variables used for error handling
11845 --
11846 l_error_code NUMBER; -- Oracle SQL Error Number
11847 l_error_text VARCHAR2(2000); -- Oracle SQL Error Text
11848
11849 --
11850 -- New variables added for new call to group constraint API to update delivery table
11851 --
11852
11853 l_in_rec WSH_DELIVERIES_GRP.Del_In_Rec_Type;
11854 l_trip_in_rec WSH_TRIPS_GRP.tripInRecType;
11855 l_rec_attr_tab WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type;
11856 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
11857 l_trip_out_rec_tab WSH_TRIPS_GRP.Trip_Out_Tab_Type;
11858 l_del_out_rec_tab WSH_DELIVERIES_GRP.Del_Out_Tbl_Type;
11859 l_msg_count NUMBER;
11860 l_msg_data VARCHAR2(2000);
11861 l_del_org_id NUMBER;
11862 l_prev_org_id NUMBER;
11863 l_trip_status VARCHAR2(50); -- get_trip_status
11864 --alksharm
11865 l_trip_id NUMBER;
11866 l_prev_trip_id NUMBER;
11867 l_trip_name VARCHAR2(30);
11868 l_delivery_id NUMBER;
11869 list_cnt NUMBER;
11870 l_cs_mleg_result_tab WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11871 l_ranked_list WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11872
11873 l_rank_id NUMBER;
11874 l_trip_rank_seq NUMBER;
11875 --l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'N'; -- Commented for the bug 14768761
11876 l_skip_rtng_rule_ac_trip VARCHAR2(1) := 'Y'; -- Added for the bug 14768761
11877 -- sachin
11878 x_ranked_list WSH_FTE_INTEGRATION.CARRIER_RANK_LIST_TBL_TYPE;
11879 -- Rename
11880 l_initial_pickup_date DATE;
11881 l_ultimate_dropoff_date DATE;
11882 i NUMBER;
11883 j NUMBER;
11884 k NUMBER;
11885 l_global_param_rec WSH_SHIPPING_PARAMS_PVT.Global_Parameters_Rec_Typ;
11886 l_param_value_info WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11887 l_prev_delivery_id NUMBER;
11888 l_start_index NUMBER;
11889 l_end_index NUMBER;
11890 rec_cnt NUMBER;
11891 l_del_result_type VARCHAR2(60);
11892 l_rank_list_source VARCHAR2(30);
11893
11894 --
11895 -- sbakshi
11896 --
11897 l_carrier_sel_entity_tab WSH_FTE_INTEGRATION.WSH_CS_ENTITY_TAB_TYPE;
11898
11899 l_carrier_sel_result_rec WSH_FTE_INTEGRATION.WSH_CS_RESULT_REC_TYPE;
11900
11901 l_cs_result_tab WSH_FTE_INTEGRATION.WSH_CS_RESULT_TAB_TYPE;
11902 l_cs_output_message_tab WSH_FTE_INTEGRATION.wsh_cs_output_message_tab;
11903
11904
11905 l_dlvy_info_tab wsh_cs_delivery_info_tab;
11906 l_dlvy_info_rec wsh_cs_delivery_info_rec;
11907
11908 itr NUMBER;
11909 l_cnt NUMBER := 0;
11910 l_start_search_level_flag VARCHAR2(10) := 'SCOE';
11911 l_param_rec WSH_SHIPPING_PARAMS_PVT.PARAMETER_VALUE_REC_TYP;
11912 l_num_ranked_results NUMBER;
11913 -- sbakshi
11914
11915 -- Debug Variables
11916 l_debug_on BOOLEAN;
11917 --
11918
11919 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'PROCESS_CARRIER_SELECTION';
11920
11921 BEGIN
11922 --
11923 -- initialize the procedure return flags
11924 --
11925 --
11926 -- Debug Statements
11927 --
11928 --
11929 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
11930 --
11931 IF l_debug_on IS NULL
11932 THEN
11933 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
11934 END IF;
11935 --
11936 IF l_debug_on THEN
11937 WSH_DEBUG_SV.push(l_module_name);
11938 --
11939 WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11940 WSH_DEBUG_SV.log(l_module_name,'P_FORM_FLAG',P_FORM_FLAG);
11941 WSH_DEBUG_SV.log(l_module_name,'P_CALLER',P_CALLER);
11942 END IF;
11943 --
11944
11945 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
11946 x_return_message := null;
11947
11948 IF WSH_UTIL_CORE.FTE_Is_Installed <> 'Y' THEN
11949 return;
11950 END IF;
11951
11952 l_y_planned_flag := 'Y';
11953
11954 IF ((p_batch_id is null) AND
11955 (p_delivery_id_tab.COUNT <= 0)) THEN
11956 --
11957 -- Invalid input parameters means we will not be able to get delivery
11958 -- information, thus, we will not be able to call carrier selection,
11959 -- return to the calling procedure
11960 --
11961
11962 IF l_debug_on THEN
11963 --
11964 WSH_DEBUG_SV.log(l_module_name,'P_BATCH_ID',P_BATCH_ID);
11965 WSH_DEBUG_SV.log(l_module_name,'P_DELIVERY_ID_TAB.COUNT',p_delivery_id_tab.COUNT);
11966
11967 END IF;
11968
11969 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_INVALID_INPUT');
11970 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
11971 WSH_UTIL_CORE.add_message(x_return_status);
11972 --
11973 -- Debug Statements
11974 --
11975 IF l_debug_on THEN
11976 WSH_DEBUG_SV.logmsg(l_module_name, 'THE INPUT PARAMETERS ARE INVALID FOR THIS PROCEDURE' );
11977 END IF;
11978 --
11979
11980 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
11981 -- 2292513
11982 --
11983 -- Debug Statements
11984 --
11985 IF l_debug_on THEN
11986 WSH_DEBUG_SV.pop(l_module_name);
11987 END IF;
11988 --
11989 RETURN;
11990 END IF;
11991
11992 -- Pick Release
11993 IF (p_batch_id is not null) THEN
11994
11995 l_result_found_flag := 'N';
11996 --
11997 -- Set the messaging flag
11998 --
11999 l_messaging_yn := 'N';
12000 l_previous_rows := 0;
12001
12002 IF l_debug_on THEN
12003 WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery info by batch id' );
12004 END IF;
12005
12006
12007 OPEN c_get_del_info_by_batch_id(p_batch_id, p_organization_id);
12008 FETCH c_get_del_info_by_batch_id BULK COLLECT INTO l_dlvy_info_tab;
12009 CLOSE c_get_del_info_by_batch_id;
12010
12011 -- Auto Apply routing rules is End of append delivery.
12012 ELSIF ((p_delivery_id_tab.COUNT > 0) AND
12013 (p_batch_id is null) AND (p_form_flag = 'N')) THEN
12014
12015 l_messaging_yn := 'Y';
12016
12017
12018 --FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
12019 itr := p_delivery_id_tab.FIRST;
12020 IF itr IS NOT NULL THEN
12021 LOOP
12022
12023 IF l_debug_on THEN
12024 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)|| ' *** ');
12025 END IF;
12026
12027 OPEN c_get_del_info_by_del_id(p_delivery_id_tab(itr));
12028 FETCH c_get_del_info_by_del_id INTO l_dlvy_info_rec;
12029 CLOSE c_get_del_info_by_del_id;
12030
12031 /*IF l_debug_on THEN
12032 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.delivery_id: *** : '|| l_dlvy_info_rec.delivery_id);
12033 END IF;*/
12034
12035 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
12036 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
12037 l_cnt := l_cnt+1 ;
12038 END IF;
12039 EXIT WHEN itr = p_delivery_id_tab.LAST;
12040 itr := p_delivery_id_tab.NEXT(itr);
12041 END LOOP;
12042 END IF;
12043
12044 --Call from UI.
12045 ELSIF ((p_delivery_id_tab.COUNT > 0) AND
12046 (p_batch_id is null) AND
12047 (p_form_flag = 'Y')) THEN
12048
12049 l_messaging_yn := 'Y';
12050
12051 IF l_debug_on THEN
12052 WSH_DEBUG_SV.logmsg(l_module_name,'Getting Information using Form');
12053 WSH_DEBUG_SV.logmsg(l_module_name,'Using Cursor to get delivery information-Number of Deliveries '||p_delivery_id_tab.COUNT);
12054 END IF;
12055
12056
12057 FOR i IN p_delivery_id_tab.FIRST..p_delivery_id_tab.LAST LOOP
12058
12059 IF l_debug_on THEN
12060 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY ID '||p_delivery_id_tab(i));
12061 END IF;
12062
12063 OPEN c_get_del_info_by_form(p_delivery_id_tab(i));
12064 FETCH c_get_del_info_by_form INTO l_dlvy_info_rec;
12065 CLOSE c_get_del_info_by_form;
12066
12067 IF l_debug_on THEN
12068 WSH_DEBUG_SV.logmsg(l_module_name, 'l_dlvy_info_rec.l_delivery_id: '|| l_dlvy_info_rec.l_delivery_id);
12069 END IF;
12070
12071 IF (l_dlvy_info_rec.l_delivery_id IS NOT NULL) THEN
12072
12073 IF (l_dlvy_info_rec.l_planned_flag IN ('Y', 'F')) THEN
12074 --
12075 -- Delivery is planned cannot do carrier selection
12076 --
12077 --
12078 -- [2003/01/29][I][ABLUNDEL][BUG# 2765987]
12079 -- Changed planned delivery to an ERROR from a WARNING
12080 --
12081 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12082 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12083 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_PLAN_DEL');
12084 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12085 wsh_util_core.add_message(x_return_status);
12086 --
12087 -- Debug Statements
12088 --
12089 IF l_debug_on THEN
12090 WSH_DEBUG_SV.logmsg(l_module_name, 'DELIVERY '||l_dlvy_info_rec.l_delivery_id||' IS A PLANNED DELIVERY , CARRIER SELECTION IS NOT ALLOWED' );
12091 END IF;
12092 --
12093 -- 11i10+ change
12094 ELSE
12095
12096 l_trip_status := get_trip_status(l_dlvy_info_rec.l_delivery_id,l_dlvy_info_rec.l_delivery_type);
12097 -- Delivery is assigned to more than one trip
12098 IF (l_trip_status = 'MANY') THEN
12099
12100 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12101 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12102 IF (substr(p_caller,1,3) = 'FTE') THEN
12103 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY_FTE');
12104 ELSE
12105 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_MANY');
12106 END IF;
12107 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12108 wsh_util_core.add_message(x_return_status);
12109
12110 IF l_debug_on THEN
12111 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' );
12112 END IF;
12113
12114 -- Trip to which this delivery is assigned has more than one deliveries
12115 ELSIF (l_trip_status = 'SHARED') THEN
12116
12117 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12118 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12119 IF (substr(p_caller,1,3) = 'FTE') THEN
12120 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_SHARED_FTE');
12121 ELSE
12122 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_SHARED');
12123 END IF;
12124
12125 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12126 wsh_util_core.add_message(x_return_status);
12127
12128 IF l_debug_on THEN
12129 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' );
12130 END IF;
12131
12132 -- Trip to which this delivery is assigned has Lane/Service
12133 ELSIF (l_trip_status = 'HAS_LANE') THEN
12134
12135 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12136 x_return_message := WSH_UTIL_CORE.G_RET_STS_ERROR;
12137
12138 IF (substr(p_caller,1,3) = 'FTE') THEN
12139 FND_MESSAGE.Set_Name('WSH','WSH_FTE_CS_TRIP_HAS_LANE_FTE');
12140 ELSE
12141 FND_MESSAGE.Set_Name('WSH', 'WSH_FTE_CS_TRIP_HAS_LANE');
12142 END IF;
12143 FND_MESSAGE.Set_Token('DELIVERY_ID',l_dlvy_info_rec.l_delivery_id);
12144 wsh_util_core.add_message(x_return_status);
12145
12146 IF l_debug_on THEN
12147 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' );
12148 END IF;
12149
12150 -- Delivery is not assigned to a trip Or
12151 -- Delivery is assigned to one trip and this trip is not shared with other deliveries
12152 ELSE -- BUG:2369435
12153
12154 IF (substr(l_trip_status,1,3) = 'ONE') THEN
12155 l_dlvy_info_rec.l_trip_id := to_number(substr(l_trip_status,5));
12156 ELSE
12157 l_dlvy_info_rec.l_trip_id := null;
12158 END IF;
12159 --Validate other things
12160 l_dlvy_info_tab(l_cnt) := l_dlvy_info_rec;
12161 l_cnt := l_cnt +1 ;
12162 END IF;
12163 END IF;
12164 END IF;
12165 END LOOP; -- FOR i IN p_delivery_id_tab.FISRT..p_delivery_id_tab.LAST LOOP
12166 END IF;
12167
12168
12169 IF (l_dlvy_info_tab.COUNT = 0) THEN
12170 IF l_debug_on THEN
12171 WSH_DEBUG_SV.logmsg(l_module_name, 'now exiting');
12172 WSH_DEBUG_SV.pop(l_module_name);
12173 END IF;
12174 RETURN;
12175 END IF;
12176
12177 l_cnt:= 0;
12178
12179 i := l_dlvy_info_tab.FIRST;
12180
12181 LOOP
12182 IF l_debug_on THEN
12183 WSH_DEBUG_SV.logmsg(l_module_name, 'l_cnt : '|| l_cnt);
12184 END IF;
12185 --
12186 -- If delivery is content do not add it.
12187 --
12188 IF NOT(is_dlvy_content(p_delivery_id =>l_dlvy_info_tab(i).l_delivery_id))
12189 THEN
12190
12191 l_carrier_sel_entity_tab(l_cnt).delivery_id := l_dlvy_info_tab(i).l_delivery_id;
12192 l_carrier_sel_entity_tab(l_cnt).delivery_name := l_dlvy_info_tab(i).l_dlvy_name;
12193 l_carrier_sel_entity_tab(l_cnt).trip_id := l_dlvy_info_tab(i).l_trip_id;
12194 l_carrier_sel_entity_tab(l_cnt).organization_id := l_dlvy_info_tab(i).l_organization_id;
12195 l_carrier_sel_entity_tab(l_cnt).gross_weight := l_dlvy_info_tab(i).l_gross_weight;
12196 l_carrier_sel_entity_tab(l_cnt).volume := l_dlvy_info_tab(i).l_volume;
12197 l_carrier_sel_entity_tab(l_cnt).initial_pickup_loc_id := l_dlvy_info_tab(i).l_initial_pickup_location_id;
12198 l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_loc_id := l_dlvy_info_tab(i).l_ultimate_dropoff_location_id;
12199
12200 l_carrier_sel_entity_tab(l_cnt).freight_terms_code := l_dlvy_info_tab(i).l_freight_terms_code;
12201 l_carrier_sel_entity_tab(l_cnt).initial_pickup_date := l_dlvy_info_tab(i).l_initial_pickup_date;
12202
12203 l_carrier_sel_entity_tab(l_cnt).ultimate_dropoff_date := l_dlvy_info_tab(i).l_ultimate_dropoff_date;
12204 l_carrier_sel_entity_tab(l_cnt).fob_code := l_dlvy_info_tab(i).l_fob_code;
12205 --
12206 -- In format carrier selection. If weight/volume UOM code is NULL then get the
12207 -- default uoms. (This statement is in accordance with previous code)
12208 --
12209 IF ((l_dlvy_info_tab(i).l_weight_uom_code is null) AND
12210 (l_dlvy_info_tab(i).l_volume_uom_code is null)) THEN
12211
12212 WSH_WV_UTILS.get_default_uoms( p_organization_id => l_dlvy_info_tab(i).l_organization_id,
12213 x_weight_uom_code => l_carrier_sel_entity_tab(l_cnt).weight_uom_code,
12214 x_volume_uom_code => l_carrier_sel_entity_tab(l_cnt).volume_uom_code,
12215 x_return_status => l_return_status);
12216
12217
12218 IF l_debug_on THEN
12219 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_default_uoms'||l_return_status);
12220 END IF;
12221
12222 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12223 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_NO_UOM');
12224 FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12225 WSH_UTIL_CORE.add_message(l_return_status);
12226 l_carrier_sel_entity_tab.DELETE(l_cnt);
12227 GOTO dlvy_nextpass;
12228 END IF;
12229 ELSE
12230 l_carrier_sel_entity_tab(l_cnt).weight_uom_code := l_dlvy_info_tab(i).l_weight_uom_code;
12231 l_carrier_sel_entity_tab(l_cnt).volume_uom_code := l_dlvy_info_tab(i).l_volume_uom_code;
12232 END IF;
12233
12234 --
12235 --Determine the ship to site id. if delivery is not inbound
12236 --
12237 IF l_dlvy_info_tab(i).l_shipment_direction <> 'I' THEN
12238 --l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12239 get_ship_to_site(
12240 p_delivery_id => l_dlvy_info_tab(i).l_delivery_id,
12241 p_delivery_type => l_dlvy_info_tab(i).l_delivery_type,
12242 p_ultimate_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12243 x_site_id => l_carrier_sel_entity_tab(l_cnt).customer_site_id,
12244 x_return_status => l_return_status);
12245
12246 IF l_debug_on THEN
12247 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_site '||l_return_status);
12248 END IF;
12249
12250 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12251 l_carrier_sel_entity_tab.DELETE(l_cnt);
12252 GOTO dlvy_nextpass;
12253 END IF;
12254 END IF;
12255
12256 --
12257 -- At this stage we need to determine : Whether to use ship to / Sold to customer.
12258 --
12259 l_param_rec.organization_id := l_dlvy_info_tab(i).l_organization_id;
12260 l_param_rec.param_name(1) := 'EVAL_RULE_BASED_ON_SHIPTO_CUST';
12261
12262
12263 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_rec ,
12264 x_return_status => l_return_status);
12265
12266 IF l_debug_on THEN
12267 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after getting shipping params '||l_return_status);
12268 END IF;
12269
12270 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12271 l_carrier_sel_entity_tab.DELETE(l_cnt);
12272 GOTO dlvy_nextpass;
12273 END IF;
12274 --
12275 --Evaluate Rules based on ship to customer
12276 --
12277 IF (l_param_rec.PARAM_VALUE_CHR.EXISTS(1) AND l_param_rec.PARAM_VALUE_CHR(1) = 'Y'
12278 AND l_dlvy_info_tab(i).l_shipment_direction <> 'I') AND
12279 l_dlvy_info_tab(i).l_delivery_type <> 'CONSOLIDATION' THEN
12280
12281 get_ship_to_customer( p_ult_dropoff_loc_id => l_dlvy_info_tab(i).l_ultimate_dropoff_location_id,
12282 p_delivery_id => l_dlvy_info_tab(i).l_delivery_id,
12283 x_customer_id => l_carrier_sel_entity_tab(l_cnt).customer_id,
12284 x_return_status => l_return_status);
12285
12286 IF l_debug_on THEN
12287 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after get_ship_to_customer'||l_return_status);
12288 END IF;
12289
12290 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
12291 l_carrier_sel_entity_tab.DELETE(l_cnt);
12292 GOTO dlvy_nextpass;
12293 END IF;
12294 ELSE
12295 l_carrier_sel_entity_tab(l_cnt).customer_id := l_dlvy_info_tab(i).l_customer_id;
12296 END IF;
12297
12298 l_cnt := l_cnt+1;
12299
12300 ELSE
12301 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_CONTENT');
12302 FND_MESSAGE.SET_TOKEN('DELIVERY',l_dlvy_info_tab(i).l_delivery_id);
12303 WSH_UTIL_CORE.add_message(WSH_UTIL_CORE.G_RET_STS_ERROR);
12304 END IF;
12305
12306 <<dlvy_nextpass>>
12307 EXIT WHEN i = l_dlvy_info_tab.LAST;
12308 i := l_dlvy_info_tab.NEXT(i);
12309 END LOOP;
12310
12311 IF (l_carrier_sel_entity_tab.COUNT=0) THEN
12312 IF l_debug_on THEN
12313 wsh_debug_sv.logmsg(l_module_name, 'None of the selected deliveries have been found as eligible for Carrier Selection');
12314 END IF;
12315 -- All deliveries are content.
12316 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DLVY_ALL_CONTENT');
12317 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12318 WSH_UTIL_CORE.add_message(x_return_status);
12319 IF l_debug_on THEN
12320 WSH_DEBUG_SV.pop(l_module_name);
12321 END IF;
12322 RETURN;
12323 END IF;
12324
12325 --
12326 -- Call Carrier Selection Engine
12327 --
12328
12329 WSH_FTE_INTEGRATION.CARRIER_SELECTION( p_format_cs_tab => l_carrier_sel_entity_tab,
12330 p_messaging_yn => l_messaging_yn,
12331 p_caller => p_caller,
12332 p_entity => 'DLVY',
12333 x_cs_output_tab => l_cs_result_tab,
12334 x_cs_output_message_tab => l_cs_output_message_tab,
12335 x_return_message => l_return_message,
12336 x_return_status => l_return_status);
12337
12338 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS OR l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING)
12339 AND (l_cs_result_tab.COUNT > 0) THEN
12340
12341 --
12342 -- at least one result is found
12343 -- Now do a bulk update for all the carrier selection result tables
12344 --
12345 l_rec_attr_tab.DELETE;
12346 l_del_out_rec_tab.DELETE;
12347 l_return_status := null;
12348 l_rank_list_source := 'RG';
12349
12350 --
12351 -- set the input record and tables
12352 --
12353 l_in_rec.caller := 'FTE_CARRIER_SELECTION_AUTO';
12354 l_in_rec.phase := null;
12355 l_in_rec.action_code := 'UPDATE';
12356
12357
12358 l_trip_in_rec.caller := 'FTE_ROUTING_GUIDE';
12359 l_trip_in_rec.phase := null;
12360 l_trip_in_rec.action_code := 'UPDATE';
12361
12362 list_cnt := 1;
12363
12364
12365 l_prev_delivery_id := 0;
12366 l_prev_org_id := 0;
12367 l_start_index := 0;
12368 l_end_index := 0;
12369
12370 /*
12371 -- Hiding project
12372 WSH_SHIPPING_PARAMS_PVT.Get_Global_Parameters( x_Param_Info => l_global_param_rec,
12373 x_return_status => l_return_status);
12374 */ -- Hiding project
12375
12376 rec_cnt := l_cs_result_tab.FIRST;
12377
12378 -- Loop through result tab in order to create/update trip for each delivery
12379 IF rec_cnt IS NOT NULL THEN
12380
12381 LOOP
12382 --{
12383
12384 --
12385 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12386
12387 IF l_debug_on THEN
12388 WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12389 WSH_DEBUG_SV.log(l_module_name, 'l_prev_delivery_id', l_prev_delivery_id);
12390 WSH_DEBUG_SV.log(l_module_name, 'rec_cnt', rec_cnt);
12391 END IF;
12392
12393 -- get the value of trip_id if delivery is assigned to trip
12394 IF l_delivery_id <> l_prev_delivery_id THEN
12395 l_trip_id := null;
12396 l_num_ranked_results := 1;
12397 OPEN check_del_assigned(l_delivery_id);
12398 FETCH check_del_assigned into l_trip_id, l_trip_rank_seq;
12399 CLOSE check_del_assigned;
12400
12401 l_del_org_id := l_cs_result_tab(rec_cnt).organization_id;
12402
12403 /*
12404 -- Hiding project
12405 IF l_del_org_id <> l_prev_org_id THEN
12406
12407 l_param_value_info.organization_id := l_del_org_id;
12408 l_param_value_info.param_name(1) := 'SKIP_RTNG_RULE_AC_TRIP';
12409
12410 WSH_SHIPPING_PARAMS_PVT.Get(x_param_value_info => l_param_value_info,
12411 x_return_status => l_return_status);
12412 l_skip_rtng_rule_ac_trip := l_param_value_info.PARAM_VALUE_CHR(1);
12413 END IF;
12414 */ -- Hiding project
12415
12416 END IF;
12417
12418 l_del_result_type := l_cs_result_tab(rec_cnt).result_type;
12419
12420 -- If first delivery has 1 ranked result and 2nd delivery has multileg results.
12421 -- How will the rank for first get inserted into ranklist table
12422
12423 -- Handled by moving rank list insertion in the same pass of the last result record
12424 -- for a delivery
12425
12426 --IF (l_del_result_type = 'RANK') THEN -- if single leg delivery -- Commented for the bug 14768761
12427 IF (l_del_result_type = 'RANK' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- if single leg delivery -- Added for the bug 14768761
12428 --{
12429 IF (l_delivery_id <> l_prev_delivery_id) THEN
12430 --{
12431 --l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12432
12433 IF l_debug_on THEN
12434 WSH_DEBUG_SV.log(l_module_name, 'l_num_ranked_results', l_num_ranked_results);
12435 WSH_DEBUG_SV.log(l_module_name, 'p_caller', p_caller);
12436 WSH_DEBUG_SV.log(l_module_name, 'l_skip_rtng_rule_ac_trip', l_skip_rtng_rule_ac_trip);
12437 WSH_DEBUG_SV.log(l_module_name, 'list_cnt', list_cnt);
12438 END IF;
12439
12440 --
12441 -- 1. For Manual flow, append_flag is always set to 'Y'
12442 -- For auto-flow, Check if only one ranked result is returned, set append flag to the value of
12443 -- global parameter EXPAND_CARRIER_RANKINGS, else set it to 'Y'
12444 --
12445
12446 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12447 /*
12448 -- Hiding project
12449 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12450 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12451 */ -- Hiding project
12452 --{
12453 -- AG check that current record is not LAST
12454 /*
12455 -- Hiding project
12456 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP')
12457 AND ( rec_cnt = l_cs_result_tab.LAST OR
12458 ( 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
12459 --{
12460 l_cs_result_tab(rec_cnt).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12461 --}
12462 ELSE
12463 --{
12464 l_cs_result_tab(rec_cnt).append_flag := 'Y';
12465 --}
12466 END IF;
12467
12468 IF l_debug_on THEN
12469 WSH_DEBUG_SV.log(l_module_name, 'append_flag', l_cs_result_tab(rec_cnt).append_flag);
12470 END IF;
12471 */ -- Hiding project
12472
12473 IF l_trip_id IS NULL THEN
12474 --{
12475 --
12476 -- If Pick up date is same as drop off date,
12477 -- introduce a gap of 10 mins between pick up date and drop off date
12478 --
12479 l_carrier_sel_result_rec := l_cs_result_tab(rec_cnt);
12480
12481 IF l_carrier_sel_result_rec.pickup_date = l_carrier_sel_result_rec.dropoff_date THEN
12482 l_carrier_sel_result_rec.dropoff_date := l_carrier_sel_result_rec.dropoff_date+(1/144);
12483 END IF;
12484
12485 IF l_debug_on THEN
12486 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).pickup_date '||l_cs_result_tab(rec_cnt).pickup_date);
12487 WSH_DEBUG_SV.logmsg(l_module_name,'l_cs_result_tab(rec_cnt).dropoff_date '||l_cs_result_tab(rec_cnt).dropoff_date);
12488 END IF;
12489 --
12490 -- Since delivery not assigned to any trip( trip_id is null), and rank = 1, Create trip for the delivery
12491 --
12492 WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12493 p_delivery_id => l_delivery_id,
12494 p_carrier_sel_result_rec => l_carrier_sel_result_rec,
12495 x_trip_id => l_trip_id,
12496 x_trip_name => l_trip_name,
12497 x_return_message => x_return_message,
12498 x_return_status => l_return_status);
12499
12500 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12501 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12502 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12503 END IF;
12504 END IF;
12505
12506 IF l_debug_on THEN
12507 WSH_DEBUG_SV.logmsg(l_module_name,'Return Status after calling CREATE_SEL_CREATE_TRIP '||x_return_status);
12508 WSH_DEBUG_SV.logmsg(l_module_name,'Trip_id '||l_trip_id);
12509 END IF;
12510
12511 l_ranked_list.DELETE;
12512 list_cnt := 1;
12513 l_num_ranked_results := 1;
12514 --
12515 -- set values in ranked list for rank #1 results
12516 --
12517 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12518 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12519 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12520 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12521 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12522 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12523 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12524 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12525 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12526 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12527
12528 IF l_debug_on THEN
12529 WSH_DEBUG_SV.logmsg(l_module_name,'Populated Ranked List for rank #1');
12530 END IF;
12531
12532 --
12533 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12534 -- the call to FORMAT_DEL_UPDATE_TABLE
12535 --
12536 l_cs_result_tab(rec_cnt) := NULL;
12537
12538 --}
12539 ELSE -- for the case when delivery is already attached to trip, l_trip_id IS NOT NULL
12540 --{
12541 IF l_trip_rank_seq is NOT NULL THEN
12542 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_UPD_TRIP_RANK_LIST');
12543 FND_MESSAGE.SET_TOKEN('TRIPID',l_trip_id);
12544 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
12545 WSH_UTIL_CORE.add_message(x_return_status);
12546 END IF;
12547
12548 l_cs_result_tab(rec_cnt).trip_id := l_trip_id;
12549
12550 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12551 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12552 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12553 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12554 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12555 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12556 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12557 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12558 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12559 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12560 --}
12561 END IF;
12562 --}
12563 END IF;
12564 --}
12565 ELSE -- l_delivery_id = l_prev_delivery_id
12566 --{
12567 l_num_ranked_results := l_num_ranked_results +1;
12568
12569 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12570 /*
12571 -- Hiding project
12572 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12573 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12574 */ -- Hiding project
12575 --{
12576 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12577 --{
12578
12579 --
12580 -- When Ranked List is created by RG engine during auto flow and if
12581 -- only one ranked result is returned, set CALL_RG_FLAG flag to 'N'
12582 -- If there are more than one ranked results, we'll set CALL_RG_FLAG flag to 'Y'
12583 --
12584 l_ranked_list(list_cnt).CALL_RG_FLAG := 'Y';
12585 --}
12586 ELSE
12587 --{
12588 --
12589 -- If caller is not Auto-Flow, build ranked list for other rank results as well
12590 --
12591 list_cnt := list_cnt + 1;
12592
12593 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12594 l_ranked_list(list_cnt).RANK_SEQUENCE := l_cs_result_tab(rec_cnt).rank;
12595 l_ranked_list(list_cnt).CARRIER_ID := l_cs_result_tab(rec_cnt).carrier_id;
12596 l_ranked_list(list_cnt).SERVICE_LEVEL := l_cs_result_tab(rec_cnt).service_level;
12597 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_cs_result_tab(rec_cnt).mode_of_transport;
12598 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_cs_result_tab(rec_cnt).consignee_carrier_ac_no;
12599 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_cs_result_tab(rec_cnt).freight_terms_code;
12600 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12601 l_ranked_list(list_cnt).IS_CURRENT := 'N';
12602 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12603 --}
12604 END IF;
12605
12606 IF l_debug_on THEN
12607 WSH_DEBUG_SV.log(l_module_name, 'l_ranked_list(list_cnt).CALL_RG_FLAG', l_ranked_list(list_cnt).CALL_RG_FLAG);
12608 END IF;
12609 --}
12610 END IF;
12611 --
12612 -- set l_cs_result_tab(rec_cnt) := NULL so that this record is not updated in
12613 -- the call to FORMAT_DEL_UPDATE_TABLE
12614 --
12615 l_cs_result_tab(rec_cnt) := NULL;
12616 --}
12617 END IF;
12618 IF (rec_cnt = l_cs_result_tab.LAST OR
12619 (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
12620 --{
12621 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' THEN
12622 /*
12623 -- Hiding project
12624 IF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12625 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN
12626
12627 IF l_debug_on THEN
12628 WSH_DEBUG_SV.logmsg(l_module_name, 'calling RANK_LIST_ACTION');
12629 END IF;
12630
12631 WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12632 --p_api_version_number => 1.0,
12633 --p_init_msg_list => FND_API.G_FALSE,
12634 x_return_status => l_return_status,
12635 x_msg_count => l_msg_count,
12636 x_msg_data => l_msg_data,
12637 p_action_code => 'REPLACE',
12638 p_ranklist => l_ranked_list,
12639 p_trip_id => l_trip_id,
12640 p_rank_id => l_rank_id);
12641
12642 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12643 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12644 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12645 END IF;
12646 END IF;
12647 */ -- Hiding project
12648 l_ranked_list.DELETE;
12649 list_cnt := 1;
12650 l_num_ranked_results := 1;
12651 END IF;
12652 --}
12653 END IF;
12654 --}
12655 --ELSIF (l_del_result_type = 'MULTILEG' ) THEN -- if multileg delivery output -- Commented for the bug 14768761
12656 ELSIF (l_del_result_type = 'MULTILEG' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- if multileg delivery output -- Added for the bug 14768761
12657 --{
12658
12659 IF l_trip_id IS NOT NULL THEN
12660 --{
12661 -- if delivery is already assigned to trip and multileg route to be created as per rule results
12662 -- show error;
12663 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_DEL_MLEG_ASG_TRIP');
12664 FND_MESSAGE.SET_TOKEN('DELIVERY_ID',l_delivery_id);
12665 FND_MESSAGE.SET_TOKEN('TRIP_ID',l_trip_id);
12666 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12667 WSH_UTIL_CORE.add_message(x_return_status);
12668
12669 l_cs_result_tab(rec_cnt) := NULL;
12670
12671 IF l_debug_on THEN
12672 WSH_DEBUG_SV.logmsg(l_module_name,'DELIVERY '||l_delivery_id || ' IS ALREADY ASSIGNED TO TRIP '||l_trip_id);
12673 END IF;
12674 --}
12675 ELSIF p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip = 'Y' THEN
12676 --{
12677 IF l_delivery_id <> l_prev_delivery_id THEN
12678 FND_MESSAGE.SET_NAME('WSH','WSH_FTE_CS_MULTILEG');
12679 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
12680 WSH_UTIL_CORE.add_message(x_return_status);
12681 END IF;
12682
12683 l_cs_result_tab(rec_cnt) := NULL;
12684 --}
12685 ELSIF p_caller <> 'WSH_AUTO_CREATE_DEL_TRIP' OR
12686 (p_caller = 'WSH_AUTO_CREATE_DEL_TRIP' AND l_skip_rtng_rule_ac_trip <> 'Y') THEN -- create trip for all the legs
12687 --{
12688
12689 l_prev_delivery_id := 0;
12690 l_start_index := rec_cnt;
12691 i := 1;
12692 j := 1;
12693
12694 IF l_debug_on THEN
12695 WSH_DEBUG_SV.logmsg(l_module_name,'l_start_index '||l_start_index);
12696 END IF;
12697 --
12698 -- For multileg results, first we need to get all the legs for a delivery
12699 -- in l_cs_mleg_result_tab. Then set pick up and drop off dates for leg pick
12700 -- up and drop off stops in a call to SET_PICK_UP_DROP_OFF_DATES API
12701 --
12702
12703 IF l_delivery_id <> l_prev_delivery_id THEN
12704 LOOP
12705 l_cs_mleg_result_tab(i) := l_cs_result_tab(rec_cnt);
12706
12707 EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12708 l_prev_delivery_id := l_delivery_id;
12709 rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12710 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12711 i := i + 1;
12712 EXIT WHEN l_delivery_id <> l_prev_delivery_id;
12713 END LOOP;
12714
12715 IF (rec_cnt <> l_cs_result_tab.FIRST AND rec_cnt <> l_cs_result_tab.LAST) THEN
12716 rec_cnt := l_cs_result_tab.PRIOR(rec_cnt);
12717 l_delivery_id := l_cs_result_tab(rec_cnt).delivery_id;
12718 END IF;
12719
12720 l_end_index := rec_cnt;
12721
12722 IF l_debug_on THEN
12723 WSH_DEBUG_SV.logmsg(l_module_name,'l_end_index '||l_end_index);
12724 END IF;
12725
12726 SET_PICK_UP_DROP_OFF_DATES(
12727 p_cs_mleg_result_tab => l_cs_mleg_result_tab,
12728 x_return_status => x_return_status,
12729 x_msg_count => l_msg_count,
12730 x_msg_data => l_msg_data);
12731
12732 k := l_cs_mleg_result_tab.FIRST;
12733
12734 FOR j IN l_start_index .. l_end_index LOOP
12735 --
12736 -- Set pick up and drop off dates for each leg in result tab
12737 -- and Create Trip for each leg
12738 --
12739 l_cs_result_tab(j).pickup_date := l_cs_mleg_result_tab(k).pickup_date;
12740 l_cs_result_tab(j).dropoff_date := l_cs_mleg_result_tab(k).dropoff_date;
12741
12742 IF l_debug_on THEN
12743 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'));
12744 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);
12745 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'));
12746 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);
12747 END IF;
12748
12749 l_carrier_sel_result_rec := l_cs_result_tab(j);
12750 WSH_FTE_INTEGRATION.CARRIER_SEL_CREATE_TRIP(
12751 p_delivery_id => l_delivery_id,
12752 p_carrier_sel_result_rec => l_carrier_sel_result_rec,
12753 x_trip_id => l_trip_id,
12754 x_trip_name => l_trip_name,
12755 x_return_message => x_return_message,
12756 x_return_status => l_return_status);
12757
12758 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12759 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12760 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12761 END IF;
12762 END IF;
12763 l_cs_result_tab(j).trip_id := l_trip_id;
12764
12765 IF p_caller IN ('WSH_AUTO_CREATE_DEL' ,'WSH_DLMG', 'WSH_AUTO_CREATE_DEL_TRIP') THEN
12766 l_cs_result_tab(j).append_flag := l_global_param_rec.EXPAND_CARRIER_RANKINGS;
12767 ELSE
12768 l_cs_result_tab(j).append_flag := 'Y';
12769 END IF;
12770
12771 l_ranked_list(list_cnt).TRIP_ID := l_trip_id;
12772 l_ranked_list(list_cnt).RANK_SEQUENCE := l_carrier_sel_result_rec.rank;
12773 l_ranked_list(list_cnt).CARRIER_ID := l_carrier_sel_result_rec.carrier_id;
12774 l_ranked_list(list_cnt).SERVICE_LEVEL := l_carrier_sel_result_rec.service_level;
12775 l_ranked_list(list_cnt).MODE_OF_TRANSPORT := l_carrier_sel_result_rec.mode_of_transport;
12776 l_ranked_list(list_cnt).CONSIGNEE_CARRIER_AC_NO := l_carrier_sel_result_rec.consignee_carrier_ac_no;
12777 l_ranked_list(list_cnt).FREIGHT_TERMS_CODE := l_carrier_sel_result_rec.freight_terms_code;
12778 l_ranked_list(list_cnt).SOURCE := l_rank_list_source;
12779 l_ranked_list(list_cnt).IS_CURRENT := 'Y';
12780 l_ranked_list(list_cnt).CALL_RG_FLAG := 'N';
12781
12782 --
12783 -- Create and attach ranked list to each trip
12784 --
12785
12786 WSH_FTE_INTEGRATION.RANK_LIST_ACTION(
12787 -- p_api_version_number => 1.0,
12788 -- p_init_msg_list => FND_API.G_FALSE,
12789 x_return_status => l_return_status,
12790 x_msg_count => l_msg_count,
12791 x_msg_data => l_msg_data,
12792 p_action_code => 'REPLACE',
12793 p_ranklist => l_ranked_list,
12794 p_trip_id => l_trip_id,
12795 p_rank_id => l_rank_id);
12796
12797 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS THEN
12798 IF l_return_status <> WSH_UTIL_CORE.G_RET_STS_WARNING THEN
12799 raise FND_API.G_EXC_UNEXPECTED_ERROR;
12800 END IF;
12801 END IF;
12802 l_ranked_list.DELETE;
12803 list_cnt := 1;
12804
12805 k := l_cs_mleg_result_tab.NEXT(k);
12806
12807 END LOOP;
12808 END IF;
12809 --}
12810 END IF;
12811 --}
12812 END IF;
12813 IF l_debug_on THEN
12814 WSH_DEBUG_SV.logmsg(l_module_name, 'set l_prev_delivery_id and l_prev_trip_id');
12815 WSH_DEBUG_SV.log(l_module_name, 'l_delivery_id', l_delivery_id);
12816 WSH_DEBUG_SV.log(l_module_name, 'l_trip_id', l_trip_id);
12817 END IF;
12818 l_prev_delivery_id := l_delivery_id;
12819 l_prev_trip_id := l_trip_id;
12820
12821 EXIT WHEN rec_cnt = l_cs_result_tab.LAST;
12822 rec_cnt := l_cs_result_tab.NEXT(rec_cnt);
12823 --}
12824 END LOOP;
12825 END IF;
12826
12827 --
12828 -- Format the delivery table for the call to the group API
12829 --
12830
12831 FORMAT_DEL_UPDATE_TABLE(p_cs_result_tab => l_cs_result_tab,
12832 p_caller => p_caller,
12833 x_rec_attr_tab => l_rec_attr_tab,
12834 x_trip_info_tab => l_trip_info_tab,
12835 x_return_status => l_return_status,
12836 x_return_message => x_return_message);
12837
12838
12839 IF (l_rec_attr_tab.COUNT > 0) THEN
12840 --
12841 -- Update the deliveries table with the info
12842 --
12843 WSH_INTERFACE_GRP.Create_Update_Delivery(p_api_version_number => 1.0,
12844 p_init_msg_list => 'F',
12845 p_commit => null,
12846 p_in_rec => l_in_rec,
12847 p_rec_attr_tab => l_rec_attr_tab,
12848 x_del_out_rec_tab => l_del_out_rec_tab,
12849 x_return_status => l_return_status,
12850 x_msg_count => l_msg_count,
12851 x_msg_data => l_msg_data);
12852
12853
12854 IF ((l_return_status is not null) AND
12855 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12856 --
12857 -- delivery not updated
12858 --
12859 x_return_status := l_return_status;
12860 WSH_UTIL_CORE.add_message(x_return_status);
12861 --
12862 -- Debug Statements
12863 --
12864 IF l_debug_on THEN
12865 WSH_DEBUG_SV.logmsg(l_module_name, 'CARRIER SELECTION - AUTO CREATE - COULD NOT UPDATE DELIVERY');
12866 END IF;
12867 --
12868 x_return_message := l_msg_data;
12869
12870 IF l_debug_on THEN
12871 WSH_DEBUG_SV.pop(l_module_name);
12872 END IF;
12873 --
12874 RETURN;
12875 END IF;
12876
12877 END IF;
12878
12879
12880
12881 IF (l_trip_info_tab.COUNT > 0) THEN
12882 --{
12883 WSH_INTERFACE_GRP.Create_Update_Trip(
12884 p_api_version_number => 1.0,
12885 p_init_msg_list => 'F',
12886 p_commit => null,
12887 x_return_status => l_return_status,
12888 x_msg_count => l_msg_count,
12889 x_msg_data => l_msg_data,
12890 p_trip_info_tab => l_trip_info_tab,
12891 p_in_rec => l_trip_in_rec,
12892 x_out_tab => l_trip_out_rec_tab);
12893
12894 IF ((l_return_status is not null) AND
12895 (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS)) THEN
12896
12897 --
12898 -- trip not updated
12899 --
12900 x_return_status := l_return_status;
12901 WSH_UTIL_CORE.add_message(x_return_status);
12902 --
12903 -- Debug Statements
12904 --
12905 IF l_debug_on THEN
12906 WSH_DEBUG_SV.logmsg(l_module_name, 'CARRIER SELECTION - FORM MANUAL - COULD NOT UPDATE TRIP');
12907 END IF;
12908 --
12909 x_return_message := l_msg_data;
12910 --
12911 -- Return back to the calling API or form
12912 --
12913 -- Debug Statements
12914 --
12915 IF l_debug_on THEN
12916 WSH_DEBUG_SV.pop(l_module_name);
12917 END IF;
12918 --
12919 RETURN;
12920 END IF;
12921 --}
12922 END IF;
12923
12924 END IF;
12925
12926 --
12927 -- Debug Statements
12928 --
12929 IF l_debug_on THEN
12930 WSH_DEBUG_SV.pop(l_module_name);
12931 END IF;
12932 --
12933 EXCEPTION
12934 WHEN OTHERS THEN
12935 l_error_code := SQLCODE;
12936 l_error_text := SQLERRM;
12937
12938 WSH_UTIL_CORE.default_handler('WSH_NEW_DELIVERY_ACTIONS.PROCESS_CARRIER_SELECTION');
12939 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
12940 x_return_message := l_error_text;
12941
12942
12943 IF l_debug_on THEN
12944 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
12945 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
12946 END IF;
12947 --
12948 END PROCESS_CARRIER_SELECTION;
12949 --SBAKSHI(R12)
12950
12951
12952 /**________________________________________________________________________
12953 --
12954 -- Name:
12955 -- Assign_Del_to_Consol_Del
12956 --
12957 -- Purpose:
12958 -- This API assigns a deliveries to a parent (consolidation)
12959 -- delivery. If the caller is FTE consolidation SRS, we
12960 -- assume that the child deliveries have already been validated
12961 -- as eligible to be assigned to the parent delivery.
12962 -- Parameters:
12963 -- p_del_tab: Table of deliveries that need to be assigned
12964 -- p_parent_del: Parent delivery id that will be assigne to
12965 -- p_caller: Calling entity/action
12966 -- x_return_status: status
12967 **/
12968
12969 Procedure Assign_Del_to_Consol_Del(
12970 p_del_tab IN WSH_NEW_DELIVERIES_PVT.Delivery_Attr_Tbl_Type,
12971 p_parent_del_id IN NUMBER,
12972 p_caller IN VARCHAR2,
12973 x_return_status OUT NOCOPY VARCHAR2) IS
12974
12975 -- make sure the parent is OPEN and is of type 'CONSOLIDATION'
12976 CURSOR c_check_valid_parent(p_parent_del_id in NUMBER) IS
12977 select s1.trip_id,
12978 l.pick_up_stop_id,
12979 l.drop_off_stop_id,
12980 l.delivery_leg_id,
12981 d.ultimate_dropoff_location_id dropoff_stop_location,
12982 s1.stop_location_id pickup_stop_location,
12983 t.ignore_for_planning,
12984 s1.planned_arrival_date pu_ar_date,
12985 s1.planned_departure_date pu_dep_date,
12986 s2.planned_arrival_date do_ar_date,
12987 s2.planned_departure_date do_dep_date
12988 from wsh_trip_stops s1, wsh_trip_stops s2, wsh_delivery_legs l, wsh_new_deliveries d, wsh_trips t
12989 where s1.stop_id = l.pick_up_stop_id
12990 and s2.stop_id = l.drop_off_stop_id
12991 and l.delivery_id = d.delivery_id
12992 and d.delivery_id = p_parent_del_id
12993 and d.status_code = 'OP'
12994 and d.delivery_type = 'CONSOLIDATION'
12995 and s1.trip_id = t.trip_id ;
12996
12997
12998 -- make sure that the delivery is open, STANDARD and
12999 -- is not assigned to a parent delivery.
13000 cursor c_check_valid_child(p_delivery_id in number) is
13001 select d.delivery_id
13002 from wsh_new_deliveries d
13003 where d.delivery_id = p_delivery_id
13004 and d.status_code = 'OP'
13005 and d.delivery_type = 'STANDARD'
13006 and not exists (select 1 from wsh_delivery_legs
13007 where parent_delivery_leg_id is not null
13008 and delivery_id = d.delivery_id);
13009 -- check if the delivery is assigned to a trip
13010 /*cursor c_check_trips(p_delivery_id in number) is
13011 select delivery_leg_id
13012 from wsh_delivery_legs
13013 where delivery_id = p_delivery_id
13014 and rownum = 1;
13015 */
13016 -- check if the trip the delivery is assigned to is valid
13017 cursor c_check_trips(p_delivery_id in number) is
13018 select l.delivery_leg_id, s1.trip_id
13019 from wsh_delivery_legs l, wsh_trip_stops s1, wsh_new_deliveries d
13020 where l.delivery_id = p_delivery_id
13021 and d.delivery_id = l.delivery_id
13022 and d.initial_pickup_location_id = s1.stop_location_id
13023 and s1.stop_id = l.pick_up_stop_id;
13024
13025 l_parent_trip_rec c_check_valid_parent%rowtype;
13026 type l_trip_rec_tab_type is table of c_check_trips%rowtype index by binary_integer;
13027 l_trip_rec_tab l_trip_rec_tab_type;
13028
13029
13030 cursor c_get_top_child_details(p_delivery_id in number) is
13031 select a.delivery_detail_id
13032 from wsh_delivery_assignments a
13033 where a.delivery_id is not null
13034 and a.delivery_id = p_delivery_id
13035 and a.type = 'O'
13036 and a.parent_delivery_detail_id is null
13037 and not exists
13038 (select '1'
13039 from wsh_delivery_assignments b
13040 where a.delivery_detail_id = b.delivery_detail_id
13041 and b.type = 'C');
13042
13043 -- This cursor selects all the trips that are
13044 -- assigned to all the deliveries that are
13045 -- assigned to the original trip.
13046 -- These trips will be set to ignore for planning
13047 -- along with the original trip.
13048
13049 cursor c_get_trip_siblings(p_trip_id in number) is
13050 select distinct s2.trip_id
13051 from wsh_trip_stops s1, wsh_trip_stops s2,
13052 wsh_delivery_legs l1, wsh_delivery_legs l2
13053 where s1.trip_id = p_trip_id
13054 and s1.stop_id = l1.pick_up_stop_id
13055 and l1.delivery_id = l2.delivery_id
13056 and l2.pick_up_stop_id = s2.stop_id;
13057
13058
13059 cursor c_chil_del_trips(p_delivery_id in number) is
13060 select s.trip_id
13061 from wsh_trip_stops s, wsh_delivery_legs l
13062 where l.delivery_id = p_delivery_id
13063 and l.pick_up_stop_id = s.stop_id;
13064
13065 l_parent_trip_id NUMBER;
13066 l_child_trip_id NUMBER;
13067 l_parent_del_id NUMBER;
13068 l_dropoff_loc_id NUMBER;
13069 l_child_details_tab wsh_util_core.id_tab_type;
13070 l_valid_children_tab wsh_util_core.id_tab_type;
13071 l_unassigned_trips_tab wsh_util_core.id_tab_type;
13072 l_assigned_trips_tab wsh_util_core.id_tab_type;
13073 l_delivery_leg_id_dummy NUMBER;
13074 l_trip_id_tab wsh_util_core.id_tab_type;
13075 l_wv_delivery_tab wsh_util_core.id_tab_type;
13076 l_unassign_dels wsh_util_core.id_tab_type;
13077 l_ignore_plan_dels wsh_util_core.id_tab_type;
13078 l_include_plan_dels wsh_util_core.id_tab_type;
13079 l_change_plan_dels wsh_util_core.id_tab_type;
13080 l_child_del_trips wsh_util_core.id_tab_type;
13081 l_child_del_trips_dummy wsh_util_core.id_tab_type;
13082 l_parent_del_tab wsh_util_core.id_tab_type;
13083 l_intermediate_loc_id NUMBER;
13084 l_dummy_child NUMBER;
13085 l_gross_wt NUMBER;
13086 l_net_wt NUMBER;
13087 l_volume NUMBER;
13088
13089 l_msg_count NUMBER;
13090 l_msg_data VARCHAR2(2000);
13091 i NUMBER := 0;
13092 j NUMBER := 0;
13093 k NUMBER := 0;
13094 l NUMBER := 0;
13095 m NUMBER := 0;
13096 n NUMBER := 0;
13097 o NUMBER := 0;
13098 p NUMBER := 0;
13099 q NUMBER := 0;
13100
13101 l_num_warnings NUMBER := 0;
13102 l_num_errors NUMBER := 0;
13103 l_return_status VARCHAR2(30);
13104
13105 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Assig_Del_to_Consol_del';
13106 l_debug_on BOOLEAN;
13107
13108 WSH_FAIL_ASSIGN_DEL_TO_CONSOL EXCEPTION;
13109 WSH_INVALID_PARENT EXCEPTION;
13110 WSH_INVALID_CHILDREN EXCEPTION;
13111 WSH_INVALID_DECONSOL_POINT EXCEPTION;
13112 WSH_INVALID_TRIP EXCEPTION;
13113
13114
13115 BEGIN
13116
13117 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13118 --
13119 IF l_debug_on IS NULL
13120 THEN
13121 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13122 END IF;
13123 --
13124 IF l_debug_on THEN
13125 wsh_debug_sv.push (l_module_name);
13126 WSH_DEBUG_SV.log(l_module_name,'p_parent_del_id', p_parent_del_id);
13127 WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13128 END IF;
13129
13130 OPEN c_check_valid_parent(p_parent_del_id);
13131 FETCH c_check_valid_parent INTO l_parent_trip_rec;
13132 IF c_check_valid_parent%NOTFOUND THEN
13133 CLOSE c_check_valid_parent;
13134 -- RAISE EXCEPTION
13135 RAISE WSH_INVALID_PARENT;
13136 END IF;
13137 CLOSE c_check_valid_parent;
13138
13139 -- If caller is WSH_AUTOCREATE_CONSOL no need to validate as grouping of deliveries and
13140 -- deconsol point has already been figured out
13141 IF p_caller <> 'WSH_AUTOCREATE_CONSOL' THEN
13142
13143 i := p_del_tab.FIRST;
13144
13145 IF l_debug_on THEN
13146 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13147 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.first', p_del_tab.first);
13148 END IF;
13149 WHILE i IS NOT NULL LOOP
13150
13151 IF l_debug_on THEN
13152 WSH_DEBUG_SV.log(l_module_name,'delivery: '||i, p_del_tab(i).delivery_id);
13153 WSH_DEBUG_SV.log(l_module_name,'initial_pickup_location_id: '||i, p_del_tab(i).initial_pickup_location_id);
13154 WSH_DEBUG_SV.log(l_module_name,'l_parent_trip_rec.pickup_stop_location: '||i, l_parent_trip_rec.pickup_stop_location);
13155 END IF;
13156
13157 IF p_del_tab(i).initial_pickup_location_id = l_parent_trip_rec.pickup_stop_location THEN
13158
13159 OPEN c_check_valid_child(p_del_tab(i).delivery_id);
13160 FETCH c_check_valid_child INTO l_dummy_child;
13161 IF c_check_valid_child%FOUND THEN
13162 IF l_debug_on THEN
13163 WSH_DEBUG_SV.log(l_module_name,'l_dummy_child', l_dummy_child);
13164 END IF;
13165
13166 CLOSE c_check_valid_child;
13167 OPEN c_check_trips(p_del_tab(i).delivery_id);
13168 FETCH c_check_trips INTO l_delivery_leg_id_dummy, l_child_trip_id;
13169 IF c_check_trips%NOTFOUND THEN
13170 -- This delivery is not assigned to any trip at pu location, so we can assign it to the trip.
13171 -- Nothing to validate.
13172 j := j+1;
13173 k := k+1;
13174 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13175 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13176 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13177 n := n + 1;
13178 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13179 ELSE
13180 o := o + 1;
13181 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13182 END IF;
13183
13184 ELSIF p_caller = 'WMS_AUTOCREATE_CONSOL' THEN
13185 -- Called by autocreate_consol_del for WMS, if the delivery is already
13186 -- assigned to trips, then they must be assigned to a valid trip since
13187 -- autocreate_consol_del already validates the trips.
13188 j := j+1;
13189 m := m+1;
13190 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13191 l_assigned_trips_tab(m) := p_del_tab(i).delivery_id;
13192 ELSE
13193 -- If we are assigning the delivery to an already existing parent delivery, ie. not being
13194 -- called by autocreate_consol_del and the delivery has at least one trip, we need to
13195 -- make sure that there is a valid trip on the delivery.
13196
13197 IF l_child_trip_id <> l_parent_trip_rec.trip_id THEN
13198 -- RAISE EXCEPTION
13199 -- delivery is not in valid trip
13200 CLOSE c_check_trips;
13201 RAISE WSH_INVALID_TRIP;
13202
13203 ELSE
13204 l_unassign_dels(1) := p_del_tab(i).delivery_id;
13205 IF l_debug_on THEN
13206 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.Unassign_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
13207 END IF;
13208 WSH_TRIPS_ACTIONS.Unassign_Trip(p_del_rows => l_unassign_dels,
13209 p_trip_id => l_parent_trip_rec.trip_id,
13210 x_return_status => l_return_status);
13211
13212 wsh_util_core.api_post_call
13213 (
13214 p_return_status => l_return_status,
13215 x_num_warnings => l_num_warnings,
13216 x_num_errors => l_num_errors
13217 );
13218
13219 j := j+1;
13220 k := k+1;
13221 l_valid_children_tab(j) := p_del_tab(i).delivery_id;
13222 l_unassigned_trips_tab(k) := p_del_tab(i).delivery_id;
13223 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13224 n := n + 1;
13225 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13226 ELSE
13227 o := o + 1;
13228 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13229 END IF;
13230 END IF;
13231 END IF;
13232 CLOSE c_check_trips;
13233 END IF;
13234 IF c_check_valid_child%ISOPEN THEN
13235 CLOSE c_check_valid_child;
13236 END IF;
13237
13238 END IF;
13239 i := p_del_tab.next(i);
13240
13241 END LOOP;
13242
13243 ELSE
13244
13245 FOR i in 1..p_del_tab.count LOOP
13246 l_valid_children_tab(i) := p_del_tab(i).delivery_id;
13247 l_unassigned_trips_tab(i) := p_del_tab(i).delivery_id;
13248 IF p_del_tab(i).ignore_for_planning = 'Y' THEN
13249 n := n + 1;
13250 l_ignore_plan_dels(n) := p_del_tab(i).delivery_id;
13251 ELSE
13252 o := o + 1;
13253 l_include_plan_dels(o) := p_del_tab(i).delivery_id;
13254 END IF;
13255 END LOOP;
13256
13257 END IF;
13258
13259
13260
13261 IF l_valid_children_tab.count = 0 THEN
13262 -- ERROR!!!
13263 -- No valid deliveries were assigned to parent.
13264 RAISE WSH_INVALID_CHILDREN;
13265
13266 END IF;
13267
13268 BEGIN
13269 FOR i in 1..l_valid_children_tab.count LOOP
13270 WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_valid_children_tab(i));
13271 END LOOP;
13272
13273 EXCEPTION
13274 WHEN OTHERS THEN
13275 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13276 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13277 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13278 WSH_UTIL_CORE.Add_Message(x_return_status);
13279 --
13280 -- Debug Statements
13281 --
13282 IF l_debug_on THEN
13283 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13284 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13285 END IF;
13286 RETURN;
13287 --
13288 END;
13289 FORALL i in 1..l_valid_children_tab.count
13290 update wsh_delivery_assignments
13291 set type = 'O'
13292 where delivery_id = l_valid_children_tab(i)
13293 and delivery_id is not null
13294 and nvl(type, 'S') = 'S'
13295 and parent_delivery_detail_id is NULL;
13296
13297 FOR i in 1..l_valid_children_tab.count LOOP
13298
13299 OPEN c_get_top_child_details(l_valid_children_tab(i));
13300 FETCH c_get_top_child_details BULK COLLECT
13301 INTO l_child_details_tab;
13302 CLOSE c_get_top_child_details;
13303
13304 Forall k in 1..l_child_details_tab.count
13305 INSERT INTO wsh_delivery_assignments (
13306 delivery_id,
13307 parent_delivery_id,
13308 delivery_detail_id,
13309 parent_delivery_detail_id,
13310 creation_date,
13311 created_by,
13312 last_update_date,
13313 last_updated_by,
13314 last_update_login,
13315 program_application_id,
13316 program_id,
13317 program_update_date,
13318 request_id,
13319 active_flag,
13320 delivery_assignment_id,
13321 type
13322 ) VALUES (
13323 l_valid_children_tab(i),
13324 p_parent_del_id,
13325 l_child_details_tab(k),
13326 NULL,
13327 SYSDATE,
13328 FND_GLOBAL.USER_ID,
13329 SYSDATE,
13330 FND_GLOBAL.USER_ID,
13331 FND_GLOBAL.USER_ID,
13332 NULL,
13333 NULL,
13334 NULL,
13335 NULL,
13336 NULL,
13337 wsh_delivery_assignments_s.nextval,
13338 'C'
13339 );
13340
13341
13342 END LOOP;
13343
13344
13345 -- Assign child delivery to parents' trip
13346
13347 l_trip_id_tab(1) := l_parent_trip_rec.trip_id;
13348
13349 IF l_include_plan_dels.count > 0 THEN
13350
13351 IF l_parent_trip_rec.ignore_for_planning = 'Y' THEN
13352 -- Make the child deliveries ignore for planning before assignment.
13353 FOR i in 1..l_include_plan_dels.count LOOP
13354
13355 OPEN c_chil_del_trips(l_include_plan_dels(i));
13356 FETCH c_chil_del_trips BULK COLLECT
13357 INTO l_child_del_trips_dummy;
13358 IF c_chil_del_trips%NOTFOUND THEN
13359 p := p + 1;
13360 l_change_plan_dels(p) := l_include_plan_dels(i);
13361 ELSE
13362 q := l_child_del_trips.count;
13363 FOR i in 1..l_child_del_trips_dummy.count LOOP
13364 l_child_del_trips(q + i) := l_child_del_trips_dummy(i);
13365 END LOOP;
13366 l_child_del_trips_dummy.delete;
13367 END IF;
13368 CLOSE c_chil_del_trips;
13369
13370 END LOOP;
13371
13372 IF l_child_del_trips.count > 0 THEN
13373
13374 IF l_debug_on THEN
13375 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13376 END IF;
13377 WSH_TP_RELEASE.change_ignoreplan_status
13378 (p_entity => 'TRIP',
13379 p_in_ids => l_child_del_trips,
13380 p_action_code => 'IGNORE_PLAN',
13381 x_return_status => l_return_status);
13382
13383 wsh_util_core.api_post_call
13384 (
13385 p_return_status => l_return_status,
13386 x_num_warnings => l_num_warnings,
13387 x_num_errors => l_num_errors
13388 );
13389 END IF;
13390
13391 IF l_change_plan_dels.count > 0 THEN
13392 IF l_debug_on THEN
13393 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13394 END IF;
13395 WSH_TP_RELEASE.change_ignoreplan_status
13396 (p_entity => 'DLVY',
13397 p_in_ids => l_change_plan_dels,
13398 p_action_code => 'IGNORE_PLAN',
13399 x_return_status => l_return_status);
13400
13401 wsh_util_core.api_post_call
13402 (
13403 p_return_status => l_return_status,
13404 x_num_warnings => l_num_warnings,
13405 x_num_errors => l_num_errors
13406 );
13407 END IF;
13408
13409 END IF;
13410
13411 IF l_debug_on THEN
13412 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = N',WSH_DEBUG_SV.C_PROC_LEVEL);
13413 END IF;
13414 WSH_TRIPS_ACTIONS.assign_trip(
13415 p_del_rows => l_include_plan_dels,
13416 p_trip_id => l_trip_id_tab(1),
13417 p_pickup_stop_id => l_parent_trip_rec.pick_up_stop_id,
13418 p_dropoff_stop_id => l_parent_trip_rec.drop_off_stop_id,
13419 p_pickup_location_id => l_parent_trip_rec.pickup_stop_location,
13420 p_dropoff_location_id => l_parent_trip_rec.dropoff_stop_location,
13421 p_pickup_arr_date => l_parent_trip_rec.pu_ar_date,
13422 p_pickup_dep_date => l_parent_trip_rec.pu_dep_date,
13423 p_dropoff_arr_date => l_parent_trip_rec.do_ar_date,
13424 p_dropoff_dep_date => l_parent_trip_rec.do_dep_date,
13425 x_return_status => l_return_status);
13426
13427 wsh_util_core.api_post_call
13428 (
13429 p_return_status => l_return_status,
13430 x_num_warnings => l_num_warnings,
13431 x_num_errors => l_num_errors
13432 );
13433 END IF;
13434
13435 IF NVL(l_parent_trip_rec.ignore_for_planning, 'N') = 'N' THEN
13436 -- Set ignore for planning flag of child deliveries and their related trips.
13437 l_trip_id_tab.delete;
13438 OPEN c_get_trip_siblings(l_parent_trip_rec.trip_id);
13439 FETCH c_get_trip_siblings BULK COLLECT
13440 INTO l_trip_id_tab;
13441 CLOSE c_get_trip_siblings;
13442
13443 IF l_debug_on THEN
13444 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TP_RELEASE.change_ignoreplan_status',WSH_DEBUG_SV.C_PROC_LEVEL);
13445 END IF;
13446 WSH_TP_RELEASE.change_ignoreplan_status
13447 (p_entity => 'TRIP',
13448 p_in_ids => l_trip_id_tab,
13449 p_action_code => 'IGNORE_PLAN',
13450 x_return_status => l_return_status);
13451
13452 wsh_util_core.api_post_call
13453 (
13454 p_return_status => l_return_status,
13455 x_num_warnings => l_num_warnings,
13456 x_num_errors => l_num_errors
13457 );
13458
13459 END IF;
13460 IF l_ignore_plan_dels.count > 0 THEN
13461
13462 IF l_debug_on THEN
13463 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_TRIPS_ACTIONS.assign_trip for ignore plan = Y',WSH_DEBUG_SV.C_PROC_LEVEL);
13464 END IF;
13465
13466 WSH_TRIPS_ACTIONS.assign_trip(
13467 p_del_rows => l_ignore_plan_dels,
13468 p_trip_id => l_trip_id_tab(1),
13469 p_pickup_stop_id => l_parent_trip_rec.pick_up_stop_id,
13470 p_dropoff_stop_id => l_parent_trip_rec.drop_off_stop_id,
13471 p_pickup_location_id => l_parent_trip_rec.pickup_stop_location,
13472 p_dropoff_location_id => l_parent_trip_rec.dropoff_stop_location,
13473 p_pickup_arr_date => l_parent_trip_rec.pu_ar_date,
13474 p_pickup_dep_date => l_parent_trip_rec.pu_dep_date,
13475 p_dropoff_arr_date => l_parent_trip_rec.do_ar_date,
13476 p_dropoff_dep_date => l_parent_trip_rec.do_dep_date,
13477 x_return_status => l_return_status);
13478
13479
13480
13481 wsh_util_core.api_post_call
13482 (
13483 p_return_status => l_return_status,
13484 x_num_warnings => l_num_warnings,
13485 x_num_errors => l_num_errors
13486 );
13487 END IF;
13488
13489 BEGIN
13490
13491 FOR i in 1..l_valid_children_tab.count LOOP
13492 WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_delivery_id => l_valid_children_tab(i));
13493 END LOOP;
13494
13495 EXCEPTION
13496 WHEN OTHERS THEN
13497 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13498 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13499 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_valid_children_tab(i)));
13500 WSH_UTIL_CORE.Add_Message(x_return_status);
13501 --
13502 -- Debug Statements
13503 --
13504 IF l_debug_on THEN
13505 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13506 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
13507 END IF;
13508 RETURN;
13509 --
13510 END;
13511 -- Assign child delivery legs to parent
13512 FORALL i in 1..l_valid_children_tab.count
13513 update wsh_delivery_legs
13514 set parent_delivery_leg_id = l_parent_trip_rec.delivery_leg_id
13515 where delivery_id = l_valid_children_tab(i)
13516 and pick_up_stop_id = l_parent_trip_rec.pick_up_stop_id;
13517
13518 IF P_CALLER = 'WSH_AUTOCREATE_CONSOL' THEN
13519 -- Calculate Wt/Volume of the consolidation delivery
13520 -- if caller is WSH_AUTOCREATE_CONSOL.
13521 -- We recalculate the wt/vol of delivery during the assignment of
13522 -- consol lpns, so no need to do it here for WMS.
13523
13524 IF l_debug_on THEN
13525 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
13526 END IF;
13527 WSH_WV_UTILS.Delivery_Weight_Volume
13528 ( p_delivery_id => p_parent_del_id,
13529 p_update_flag => 'Y',
13530 p_calc_wv_if_frozen => 'N',
13531 x_gross_weight => l_gross_wt,
13532 x_net_weight => l_net_wt,
13533 x_volume => l_volume,
13534 x_return_status => l_return_status);
13535
13536 wsh_util_core.api_post_call
13537 (
13538 p_return_status => l_return_status,
13539 x_num_warnings => l_num_warnings,
13540 x_num_errors => l_num_errors
13541 );
13542 END IF;
13543
13544 l_parent_del_tab(1) := p_parent_del_id;
13545 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
13546 p_entity_type => 'DELIVERY',
13547 p_entity_ids => l_parent_del_tab,
13548 x_return_status => l_return_status);
13549
13550 wsh_util_core.api_post_call
13551 (
13552 p_return_status => l_return_status,
13553 x_num_warnings => l_num_warnings,
13554 x_num_errors => l_num_errors
13555 );
13556
13557
13558
13559 IF l_valid_children_tab.count < p_del_tab.count THEN
13560
13561 -- Not all deliveries were assigned to parent.
13562 FND_MESSAGE.SET_NAME('WSH', 'WSH_PARTIAL_CONSOL_ASSIGN');
13563 FND_MESSAGE.SET_TOKEN('DEL_COUNT', 'l_valid_children_tab.count');
13564 wsh_util_core.add_message(wsh_util_core.g_ret_sts_error, l_module_name);
13565 l_num_warnings := l_num_warnings + 1;
13566 END IF;
13567
13568 IF l_num_errors > 0
13569 THEN
13570 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13571 ELSIF l_num_warnings > 0
13572 THEN
13573 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
13574 ELSE
13575 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
13576 END IF;
13577
13578
13579 IF l_debug_on THEN
13580 wsh_debug_sv.pop(l_module_name);
13581 END IF;
13582
13583 EXCEPTION
13584 WHEN FND_API.G_EXC_ERROR THEN
13585 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13586 IF c_check_trips%ISOPEN THEN
13587 CLOSE c_check_trips;
13588 END IF;
13589 IF c_get_top_child_details%ISOPEN THEN
13590 CLOSE c_get_top_child_details;
13591 END IF;
13592 IF c_get_trip_siblings%ISOPEN THEN
13593 CLOSE c_get_trip_siblings;
13594 END IF;
13595 IF c_check_valid_parent%ISOPEN THEN
13596 CLOSE c_check_valid_parent;
13597 END IF;
13598 IF c_check_valid_child%ISOPEN THEN
13599 CLOSE c_check_valid_child;
13600 END IF;
13601
13602
13603 --
13604 -- Debug Statements
13605 --
13606 IF l_debug_on THEN
13607 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13608 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
13609 END IF;
13610
13611 WHEN WSH_INVALID_TRIP THEN
13612 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13613 IF c_check_trips%ISOPEN THEN
13614 CLOSE c_check_trips;
13615 END IF;
13616 IF c_get_top_child_details%ISOPEN THEN
13617 CLOSE c_get_top_child_details;
13618 END IF;
13619 IF c_get_trip_siblings%ISOPEN THEN
13620 CLOSE c_get_trip_siblings;
13621 END IF;
13622 IF c_check_valid_parent%ISOPEN THEN
13623 CLOSE c_check_valid_parent;
13624 END IF;
13625 IF c_check_valid_child%ISOPEN THEN
13626 CLOSE c_check_valid_child;
13627 END IF;
13628 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_TRIP');
13629 WSH_UTIL_CORE.Add_Message(x_return_status);
13630 --
13631 -- Debug Statements
13632 --
13633 IF l_debug_on THEN
13634 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_TRIP exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13635
13636 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_TRIP');
13637 END IF;
13638
13639 WHEN WSH_INVALID_DECONSOL_POINT THEN
13640 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13641 IF c_check_trips%ISOPEN THEN
13642 CLOSE c_check_trips;
13643 END IF;
13644 IF c_get_top_child_details%ISOPEN THEN
13645 CLOSE c_get_top_child_details;
13646 END IF;
13647 IF c_get_trip_siblings%ISOPEN THEN
13648 CLOSE c_get_trip_siblings;
13649 END IF;
13650 IF c_check_valid_parent%ISOPEN THEN
13651 CLOSE c_check_valid_parent;
13652 END IF;
13653 IF c_check_valid_child%ISOPEN THEN
13654 CLOSE c_check_valid_child;
13655 END IF;
13656 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_DECONSOL_POINT');
13657 WSH_UTIL_CORE.Add_Message(x_return_status);
13658 --
13659 -- Debug Statements
13660 --
13661 IF l_debug_on THEN
13662 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_DECONSOL_POINT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13663
13664 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_DECONSOL_POINT');
13665 END IF;
13666
13667 WHEN WSH_INVALID_CHILDREN THEN
13668 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13669 IF c_check_trips%ISOPEN THEN
13670 CLOSE c_check_trips;
13671 END IF;
13672 IF c_get_top_child_details%ISOPEN THEN
13673 CLOSE c_get_top_child_details;
13674 END IF;
13675 IF c_get_trip_siblings%ISOPEN THEN
13676 CLOSE c_get_trip_siblings;
13677 END IF;
13678 IF c_check_valid_parent%ISOPEN THEN
13679 CLOSE c_check_valid_parent;
13680 END IF;
13681 IF c_check_valid_child%ISOPEN THEN
13682 CLOSE c_check_valid_child;
13683 END IF;
13684 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILDREN');
13685 WSH_UTIL_CORE.Add_Message(x_return_status);
13686 --
13687 -- Debug Statements
13688 --
13689 IF l_debug_on THEN
13690 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILDREN exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13691
13692 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILDREN');
13693 END IF;
13694
13695 WHEN WSH_INVALID_PARENT THEN
13696 IF c_check_trips%ISOPEN THEN
13697 CLOSE c_check_trips;
13698 END IF;
13699 IF c_get_top_child_details%ISOPEN THEN
13700 CLOSE c_get_top_child_details;
13701 END IF;
13702 IF c_get_trip_siblings%ISOPEN THEN
13703 CLOSE c_get_trip_siblings;
13704 END IF;
13705 IF c_check_valid_parent%ISOPEN THEN
13706 CLOSE c_check_valid_parent;
13707 END IF;
13708 IF c_check_valid_child%ISOPEN THEN
13709 CLOSE c_check_valid_child;
13710 END IF;
13711 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13712 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_PARENT');
13713 WSH_UTIL_CORE.Add_Message(x_return_status);
13714 --
13715 -- Debug Statements
13716 --
13717 IF l_debug_on THEN
13718 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_PARENT exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13719
13720 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_PARENT');
13721 END IF;
13722 --
13723
13724 WHEN WSH_FAIL_ASSIGN_DEL_TO_CONSOL THEN
13725 IF c_check_trips%ISOPEN THEN
13726 CLOSE c_check_trips;
13727 END IF;
13728 IF c_get_top_child_details%ISOPEN THEN
13729 CLOSE c_get_top_child_details;
13730 END IF;
13731 IF c_get_trip_siblings%ISOPEN THEN
13732 CLOSE c_get_trip_siblings;
13733 END IF;
13734 IF c_check_valid_parent%ISOPEN THEN
13735 CLOSE c_check_valid_parent;
13736 END IF;
13737 IF c_check_valid_child%ISOPEN THEN
13738 CLOSE c_check_valid_child;
13739 END IF;
13740 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13741 FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13742 WSH_UTIL_CORE.Add_Message(x_return_status);
13743 --
13744 -- Debug Statements
13745 --
13746 IF l_debug_on THEN
13747 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_FAIL_ASSIGN_DEL_TO_CONSOL exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13748
13749 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_FAIL_ASSIGN_DEL_TO_CONSOL');
13750 END IF;
13751 --
13752
13753
13754 WHEN OTHERS THEN
13755 IF c_check_trips%ISOPEN THEN
13756 CLOSE c_check_trips;
13757 END IF;
13758 IF c_get_top_child_details%ISOPEN THEN
13759 CLOSE c_get_top_child_details;
13760 END IF;
13761 IF c_get_trip_siblings%ISOPEN THEN
13762 CLOSE c_get_trip_siblings;
13763 END IF;
13764 IF c_check_valid_parent%ISOPEN THEN
13765 CLOSE c_check_valid_parent;
13766 END IF;
13767 IF c_check_valid_child%ISOPEN THEN
13768 CLOSE c_check_valid_child;
13769 END IF;
13770 wsh_util_core.default_handler('wsh_new_delivery_actions.Assign_Del_to_Consol_Del',l_module_name);
13771 --
13772 IF l_debug_on THEN
13773 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
13774 END IF;
13775
13776 END Assign_Del_to_Consol_Del;
13777
13778 --
13779 -- Name:
13780 -- Unassign_Dels_from_Consol_Del
13781 --
13782 -- Purpose:
13783 -- This API unassigns deliveries from a parent (consolidation)
13784 -- delivery. If the parent delivery becomes empty we delete the
13785 -- parent delivery. Currently this will be called with
13786 -- assumption that all and only all deliveries in the parent
13787 -- delivery will be unassigned all at the same time.
13788 --
13789 -- Parameters:
13790 -- p_del_tab: Table of deliveries that need to be unassigned
13791 -- p_parent_del_ids: Parent deliveries that will be unassigned from
13792 -- and eventually deleted.
13793 -- p_caller: Calling entity/action
13794 -- x_return_status: status
13795
13796
13797 Procedure Unassign_Dels_from_Consol_Del(
13798 p_parent_del IN NUMBER,
13799 p_caller IN VARCHAR2,
13800 p_del_tab IN OUT NOCOPY wsh_util_core.id_tab_type,
13801 x_return_status OUT NOCOPY VARCHAR2) IS
13802
13803 CURSOR c_check_parent_exists(p_child_delivery_id in number, p_parent_delivery_id in number) IS
13804 select l1.delivery_id, l2.delivery_id, l1.delivery_leg_id, s.trip_id
13805 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13806 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13807 and l1.delivery_id = p_child_delivery_id
13808 and l2.delivery_id = NVL(p_parent_delivery_id, l2.delivery_id)
13809 and d.delivery_id = l1.delivery_id
13810 and d.status_code = 'OP'
13811 and s.stop_id = l1.pick_up_stop_id
13812 order by s.trip_id, l2.delivery_id;
13813
13814 cursor c_check_children_exists(p_parent_delivery_id in number) is
13815 select l1.delivery_id
13816 from wsh_delivery_legs l1, wsh_delivery_legs l2
13817 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13818 and l2.delivery_id = p_parent_delivery_id
13819 and rownum = 1;
13820
13821 CURSOR c_get_children(p_parent_delivery_id IN NUMBER) is
13822 select l1.delivery_id, l1.delivery_leg_id, s.trip_id
13823 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d, wsh_trip_stops s
13824 where l1.parent_delivery_leg_id = l2.delivery_leg_id
13825 and l2.delivery_id = p_parent_delivery_id
13826 and d.delivery_id = l1.delivery_id
13827 and d.status_code = 'OP'
13828 and l1.pick_up_stop_id = s.stop_id;
13829
13830 CURSOR check_consol_lpns(p_delivery_id in number) is
13831 select parent_delivery_detail_id
13832 from wsh_delivery_assignments
13833 where delivery_id = p_delivery_id
13834 and delivery_id is not null
13835 and parent_delivery_detail_id IS NOT NULL
13836 and type = 'C'
13837 and rownum = 1;
13838
13839 l_parent_dels_tab wsh_util_core.id_tab_type;
13840 l_assigned_dels_tab wsh_util_core.id_tab_type;
13841 l_trip_tab wsh_util_core.id_tab_type;
13842 l_delete_parent_dels wsh_util_core.id_tab_type;
13843 l_remaining_parent_dels wsh_util_core.id_tab_type;
13844 l_child_legs_tab wsh_util_core.id_tab_type;
13845 l_trip_tab_dummy wsh_util_core.id_tab_type;
13846 l_distinct_parent_dels_tab wsh_util_core.id_tab_type;
13847
13848 l_parent_del_id_dummy NUMBER;
13849 l_parent_lpn_id_dummy NUMBER;
13850 l_child_leg_id_dummy NUMBER;
13851 l_consol_lpn_dummy NUMBER;
13852 l_child_del_dummy NUMBER;
13853 l_trip_dummy NUMBER;
13854 l_detail_id NUMBER;
13855 l_parent_included VARCHAR2(1);
13856 l_dummy_id NUMBER;
13857 l_assigned_dels_dummy NUMBER;
13858 l_parent_dels_dummy NUMBER;
13859 l_child_legs_dummy NUMBER;
13860 l_gross_weight NUMBER;
13861 l_net_weight NUMBER;
13862 l_volume NUMBER;
13863
13864 i NUMBER := 0;
13865 j NUMBER := 0;
13866 k NUMBER := 0;
13867 l NUMBER := 0;
13868 m NUMBER := 0;
13869
13870 l_num_warnings NUMBER := 0;
13871 l_num_errors NUMBER := 0;
13872 l_return_status VARCHAR2(30);
13873
13874 WSH_INVALID_CHILD_DELIVERIES EXCEPTION;
13875 WSH_NO_OPEN_CHILD_DELIVERIES EXCEPTION;
13876
13877 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Unassign_Dels_from_Consol_Del';
13878 l_debug_on BOOLEAN;
13879
13880 BEGIN
13881
13882 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
13883 --
13884 IF l_debug_on IS NULL
13885 THEN
13886 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
13887 END IF;
13888 --
13889 IF l_debug_on THEN
13890 wsh_debug_sv.push (l_module_name);
13891 WSH_DEBUG_SV.log(l_module_name,'p_parent_del', p_parent_del);
13892 WSH_DEBUG_SV.log(l_module_name,'p_caller', p_caller);
13893 WSH_DEBUG_SV.log(l_module_name,'p_del_tab.count', p_del_tab.count);
13894 END IF;
13895
13896 IF p_del_tab.count = 0 and p_parent_del IS NULL THEN
13897
13898 -- raise exception
13899 RAISE WSH_INVALID_CHILD_DELIVERIES;
13900
13901 ELSIF p_del_tab.count = 0 THEN
13902
13903 -- unassign all children from the parent
13904
13905 OPEN c_get_children(p_parent_del);
13906 FETCH c_get_children BULK COLLECT
13907 INTO l_assigned_dels_tab, l_child_legs_tab, l_trip_tab_dummy;
13908 CLOSE c_get_children;
13909
13910 IF (l_assigned_dels_tab.COUNT = 0) THEN
13911 RAISE WSH_NO_OPEN_CHILD_DELIVERIES;
13912 END IF;
13913
13914 l_parent_dels_tab(1) := p_parent_del;
13915 l_trip_tab(1) := l_trip_tab_dummy(1);
13916 IF l_debug_on THEN
13917 WSH_DEBUG_SV.log(l_module_name,'l_assigned_dels_tab(1)', l_assigned_dels_tab(1));
13918 WSH_DEBUG_SV.log(l_module_name,'l_child_legs_tab(1)', l_child_legs_tab(1));
13919 WSH_DEBUG_SV.log(l_module_name,'l_parent_dels_tab(1)', l_parent_dels_tab(1));
13920 WSH_DEBUG_SV.log(l_module_name,'l_trip_tab(1)', l_trip_tab(1));
13921 END IF;
13922 ELSE
13923
13924 -- Check if the deliveries are assigned to parent dels.
13925 FOR del in 1..p_del_tab.count LOOP
13926 OPEN c_check_parent_exists(p_del_tab(del), p_parent_del);
13927 FETCH c_check_parent_exists
13928 INTO l_assigned_dels_dummy, l_parent_dels_dummy, l_child_legs_dummy, l_trip_dummy;
13929 IF c_check_parent_exists%FOUND THEN
13930 i := i + 1;
13931 l_assigned_dels_tab(i) := l_assigned_dels_dummy;
13932 l_parent_dels_tab(i) := l_parent_dels_dummy;
13933 l_child_legs_tab(i) := l_child_legs_dummy;
13934 l_trip_tab(i) := l_trip_dummy;
13935 END IF;
13936 CLOSE c_check_parent_exists;
13937 END LOOP;
13938
13939 END IF;
13940
13941 -- Check if the child deliveries have consol LPN's.
13942 -- If yes, do not unassign this delivery.
13943 -- and WSH cannot unpack from WMS orgs.
13944
13945 FOR i in 1..l_assigned_dels_tab.count LOOP
13946 IF l_debug_on THEN
13947 WSH_DEBUG_SV.log(l_module_name,'looping thru del: ', l_assigned_dels_tab(i));
13948 END IF;
13949
13950 OPEN check_consol_lpns(l_assigned_dels_tab(i));
13951 FETCH check_consol_lpns INTO l_consol_lpn_dummy;
13952 IF check_consol_lpns%FOUND THEN
13953 CLOSE check_consol_lpns;
13954 FND_MESSAGE.SET_NAME('WSH','WSH_FAIL_UNASSIGN_DEL_LPN');
13955 FND_MESSAGE.SET_TOKEN('DELIVERY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13956 l_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13957 wsh_util_core.add_message(l_return_status, l_module_name);
13958 wsh_util_core.api_post_call
13959 (
13960 p_return_status => l_return_status,
13961 x_num_warnings => l_num_warnings,
13962 x_num_errors => l_num_errors
13963 );
13964 END IF;
13965 CLOSE check_consol_lpns;
13966
13967 IF l_debug_on THEN
13968 WSH_DEBUG_SV.log(l_module_name,'after looping thru del: ', l_assigned_dels_tab(i));
13969 END IF;
13970
13971 END LOOP;
13972
13973 IF l_assigned_dels_tab.count = 0 THEN
13974
13975 -- None of the deliveries were assigned to parents
13976
13977 RAISE WSH_INVALID_CHILD_DELIVERIES;
13978
13979
13980 END IF;
13981
13982 BEGIN
13983
13984 FOR i in 1..l_assigned_dels_tab.count LOOP
13985 WSH_DELIVERY_DETAILS_PKG.lock_wda_no_compare(p_delivery_id => l_assigned_dels_tab(i));
13986 END LOOP;
13987
13988 EXCEPTION
13989 WHEN OTHERS THEN
13990 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
13991 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
13992 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
13993 WSH_UTIL_CORE.Add_Message(x_return_status);
13994 --
13995 -- Debug Statements
13996 --
13997 IF l_debug_on THEN
13998 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
13999 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14000 END IF;
14001 RETURN;
14002 --
14003 END;
14004 -- Delete the consolidation record for the child
14005
14006 FORALL i in 1..l_assigned_dels_tab.count
14007 delete wsh_delivery_assignments
14008 where type = 'C'
14009 and delivery_id in l_assigned_dels_tab(i);
14010
14011 -- Update the child deliveries record to indicate no consolidation.
14012
14013 FORALL i in 1..l_assigned_dels_tab.count
14014 update wsh_delivery_assignments
14015 set type = 'S'
14016 where delivery_id in l_assigned_dels_tab(i)
14017 and type = 'O';
14018
14019
14020 -- Unassign child delivery legs from the parents' trip/leg
14021
14022
14023 IF p_parent_del IS NOT NULL THEN
14024
14025 l_distinct_parent_dels_tab(1) := p_parent_del;
14026 IF l_debug_on THEN
14027 WSH_DEBUG_SV.log(l_module_name,'only parent ', l_distinct_parent_dels_tab(1));
14028 END IF;
14029
14030 ELSE
14031
14032 FOR i in 1..l_assigned_dels_tab.count LOOP
14033
14034 IF i = l_assigned_dels_tab.count OR l_parent_dels_tab(i) <> l_parent_dels_tab(i + 1) THEN
14035
14036 k := k + 1;
14037 l_distinct_parent_dels_tab(k) := l_parent_dels_tab(i);
14038 IF l_debug_on THEN
14039 WSH_DEBUG_SV.log(l_module_name,'distinct parents ', l_distinct_parent_dels_tab(k));
14040 END IF;
14041
14042 END IF;
14043
14044
14045 END LOOP;
14046
14047
14048 END IF;
14049
14050 BEGIN
14051
14052 FOR i in 1..l_child_legs_tab.count LOOP
14053
14054 WSH_DELIVERY_LEGS_PVT.lock_dlvy_leg_no_compare(p_dlvy_leg_id => l_child_legs_tab(i));
14055
14056 END LOOP;
14057
14058 EXCEPTION
14059 WHEN OTHERS THEN
14060 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14061 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_DEL_LEG_LOCK');
14062 FND_MESSAGE.Set_Token('DEL_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_assigned_dels_tab(i)));
14063 WSH_UTIL_CORE.Add_Message(x_return_status);
14064 --
14065 -- Debug Statements
14066 --
14067 IF l_debug_on THEN
14068 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14069 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14070 END IF;
14071 RETURN;
14072 --
14073 END;
14074
14075 FORALL i in 1..l_child_legs_tab.count
14076 update wsh_delivery_legs
14077 set parent_delivery_leg_id = NULL
14078 where delivery_leg_id = l_child_legs_tab(i);
14079
14080
14081 -- Separate the empty parent deliveries.
14082 IF l_debug_on THEN
14083 WSH_DEBUG_SV.log(l_module_name,'l_distinct_parent_dels_tab.count ', l_distinct_parent_dels_tab.count);
14084 END IF;
14085
14086 FOR i in 1..l_distinct_parent_dels_tab.count LOOP
14087 IF l_debug_on THEN
14088 WSH_DEBUG_SV.log(l_module_name,'loop thru del: ', l_distinct_parent_dels_tab(i));
14089 END IF;
14090
14091 OPEN c_check_children_exists(l_distinct_parent_dels_tab(i));
14092 FETCH c_check_children_exists INTO l_dummy_id;
14093 IF c_check_children_exists%FOUND THEN
14094 l := l + 1;
14095 l_remaining_parent_dels(l) := l_distinct_parent_dels_tab(i);
14096 IF l_debug_on THEN
14097 WSH_DEBUG_SV.log(l_module_name,'l_remaining_parent_dels ', l_remaining_parent_dels(l));
14098 END IF;
14099 ELSE
14100 m := m + 1;
14101 l_delete_parent_dels(m) := l_distinct_parent_dels_tab(i);
14102 IF l_debug_on THEN
14103 WSH_DEBUG_SV.log(l_module_name,'l_delete_parent_dels ', l_delete_parent_dels(m));
14104 END IF;
14105 END IF;
14106 CLOSE c_check_children_exists;
14107
14108 END LOOP;
14109
14110 -- Delete the parent deliveries if empty. This will
14111 -- also take care of deleting the parents' legs as well
14112
14113 IF l_delete_parent_dels.count > 0 THEN
14114
14115 IF l_debug_on THEN
14116 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_UTIL_CORE.Delete',WSH_DEBUG_SV.C_PROC_LEVEL);
14117 END IF;
14118
14119
14120 WSH_UTIL_CORE.Delete(
14121 p_type => 'DLVY',
14122 p_rows => l_delete_parent_dels,
14123 p_caller => p_caller,
14124 x_return_status => l_return_status);
14125
14126 -- Handle return status.
14127 wsh_util_core.api_post_call
14128 (
14129 p_return_status => l_return_status,
14130 x_num_warnings => l_num_warnings,
14131 x_num_errors => l_num_errors
14132 );
14133
14134 END IF;
14135 IF l_remaining_parent_dels.count > 0 THEN
14136 -- Update the wt/vol on the remaining parents.
14137
14138 IF l_debug_on THEN
14139 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_WV_UTILS.Delivery_Weight_Volume',WSH_DEBUG_SV.C_PROC_LEVEL);
14140 END IF;
14141
14142 FOR i in 1..l_remaining_parent_dels.count LOOP
14143
14144 WSH_WV_UTILS.Delivery_Weight_Volume (
14145 p_delivery_id => l_remaining_parent_dels(i),
14146 p_update_flag => 'Y',
14147 p_calc_wv_if_frozen => 'N',
14148 x_gross_weight => l_gross_weight,
14149 x_net_weight => l_net_weight,
14150 x_volume => l_volume,
14151 x_return_status => l_return_status);
14152
14153 wsh_util_core.api_post_call
14154 (
14155 p_return_status => l_return_status,
14156 x_num_warnings => l_num_warnings,
14157 x_num_errors => l_num_errors
14158 );
14159
14160 END LOOP;
14161
14162 WSH_DELIVERY_LEGS_ACTIONS.Mark_Reprice_Required(
14163 p_entity_type => 'DELIVERY',
14164 p_entity_ids => l_remaining_parent_dels,
14165 x_return_status => l_return_status);
14166
14167 wsh_util_core.api_post_call
14168 (
14169 p_return_status => l_return_status,
14170 x_num_warnings => l_num_warnings,
14171 x_num_errors => l_num_errors
14172 );
14173
14174 Confirm_Consolidation_Delivery(
14175 p_consol_del_tab => l_remaining_parent_dels,
14176 x_return_status => l_return_status);
14177
14178 wsh_util_core.api_post_call
14179 (
14180 p_return_status => l_return_status,
14181 x_num_warnings => l_num_warnings,
14182 x_num_errors => l_num_errors
14183 );
14184
14185 END IF;
14186
14187 IF l_num_errors > 0
14188 THEN
14189 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14190 ELSIF l_num_warnings > 0
14191 THEN
14192 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14193 ELSE
14194 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14195 END IF;
14196
14197 IF l_debug_on THEN
14198 WSH_DEBUG_SV.pop(l_module_name);
14199 END IF;
14200
14201 EXCEPTION
14202 WHEN FND_API.G_EXC_ERROR THEN
14203 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14204 --
14205 -- Debug Statements
14206 --
14207 IF l_debug_on THEN
14208 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14209 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14210 END IF;
14211 --
14212
14213 WHEN WSH_NO_OPEN_CHILD_DELIVERIES THEN
14214 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14215 FND_MESSAGE.SET_NAME('WSH','WSH_NO_OPEN_DELIVERIES');
14216 WSH_UTIL_CORE.Add_Message(x_return_status);
14217 --
14218 -- Debug Statements
14219 --
14220 IF l_debug_on THEN
14221 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_NO_OPEN_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14222
14223 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_NO_OPEN_CHILD_DELIVERIES');
14224 END IF;
14225 --
14226
14227 WHEN WSH_INVALID_CHILD_DELIVERIES THEN
14228 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14229 FND_MESSAGE.SET_NAME('WSH','WSH_INVALID_CHILD_DELIVERIES');
14230 WSH_UTIL_CORE.Add_Message(x_return_status);
14231 --
14232 -- Debug Statements
14233 --
14234 IF l_debug_on THEN
14235 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_INVALID_CHILD_DELIVERIES exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14236
14237 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_INVALID_CHILD_DELIVERIES');
14238 END IF;
14239 --
14240 WHEN OTHERS THEN
14241 wsh_util_core.default_handler('wsh_new_delivery_actions.Unassign_Dels_from_Consol_Del',l_module_name);
14242 --
14243 IF c_check_parent_exists%ISOPEN THEN
14244 CLOSE c_check_parent_exists;
14245 END IF;
14246 --
14247 IF c_check_children_exists%ISOPEN THEN
14248 CLOSE c_check_children_exists;
14249 END IF;
14250 --
14251 IF c_get_children%ISOPEN THEN
14252 CLOSE c_get_children;
14253 END IF;
14254 --
14255 IF check_consol_lpns%ISOPEN THEN
14256 CLOSE check_consol_lpns;
14257 END IF;
14258 --
14259 IF l_debug_on THEN
14260 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14261 END IF;
14262
14263 END Unassign_Dels_from_Consol_Del;
14264
14265
14266 PROCEDURE Confirm_Consolidation_Delivery(
14267 p_consol_del_tab IN wsh_util_core.id_tab_type,
14268 x_return_status OUT NOCOPY VARCHAR2) IS
14269
14270 cursor c_check_close_consol(p_del_id IN NUMBER) IS
14271 select d.delivery_id
14272 from wsh_delivery_legs l1, wsh_delivery_legs l2, wsh_new_deliveries d
14273 where l1.parent_delivery_leg_id = l2.delivery_leg_id
14274 and l2.delivery_id = p_del_id
14275 and l1.delivery_id = d.delivery_id
14276 and d.status_code = 'OP'
14277 and rownum = 1;
14278
14279 l_u_consol_del_tab wsh_util_core.id_tab_type;
14280 l_co_consol_del_tab wsh_util_core.id_tab_type;
14281 l_number_of_lpn_tab wsh_util_core.id_tab_type;
14282 l_delivery_id NUMBER;
14283 l_lpn_number NUMBER;
14284 i NUMBER;
14285 j NUMBER := 0;
14286 l_exists_flag VARCHAR2(1);
14287 l_lock_index NUMBER;
14288
14289
14290 CURSOR c_get_child_lpn_number(p_delivery_id IN NUMBER) IS
14291 select count(*)
14292 from wsh_delivery_assignments da,
14293 wsh_delivery_details dd
14294 where da.type = 'C'
14295 and da.parent_delivery_detail_id IS NULL
14296 and da.delivery_detail_id = dd.delivery_detail_id
14297 and dd.container_flag = 'Y'
14298 and da.parent_delivery_id = p_delivery_id
14299 and da.parent_delivery_id IS NOT NULL;
14300
14301 CURSOR c_get_consol_lpn_number(p_delivery_id in NUMBER) IS
14302 select count(*)
14303 from wsh_delivery_assignments
14304 where type = 'S'
14305 and delivery_id = p_delivery_id;
14306
14307 -- bug 4505105
14308 cursor l_get_consol_del_org_csr (p_del_id IN NUMBER) is
14309 select organization_id
14310 from wsh_new_deliveries
14311 where delivery_id = p_del_id;
14312
14313 l_return_status VARCHAR2(1);
14314 l_del_valid_flag VARCHAR2(1);
14315 l_org_id NUMBER := 0;
14316 l_num_warnings NUMBER := 0;
14317 l_num_err NUMBER := 0;
14318
14319 -- bug 4505105
14320
14321
14322 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Confirm_Consolidation_Delivery';
14323 l_debug_on BOOLEAN;
14324
14325 BEGIN
14326 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14327 --
14328 IF l_debug_on IS NULL
14329 THEN
14330 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14331 END IF;
14332 --
14333 IF l_debug_on THEN
14334 wsh_debug_sv.push (l_module_name);
14335 END IF;
14336
14337 -- bug 4505105
14338 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14339 -- bug 4505105
14340
14341 -- collect the unique parent deliveries.
14342 -- p_consol_del_tab may not be gapless and
14343 -- may contain duplicates.
14344 i := p_consol_del_tab.FIRST;
14345 WHILE i IS NOT NULL LOOP
14346 IF l_debug_on THEN
14347 WSH_DEBUG_SV.logmsg(l_module_name,'Inside WHILE i IS NOT NULL LOOP');
14348 END IF;
14349 l_exists_flag := 'N';
14350 FOR k in 1..l_u_consol_del_tab.count LOOP
14351 IF l_debug_on THEN
14352 WSH_DEBUG_SV.logmsg(l_module_name,'Inside FOR k in 1..l_u_consol_del_tab.count LOOP');
14353 END IF;
14354 IF l_u_consol_del_tab(k) = p_consol_del_tab(i) THEN
14355 l_exists_flag := 'Y';
14356 EXIT;
14357 END IF;
14358 END LOOP;
14359 IF l_debug_on THEN
14360 WSH_DEBUG_SV.logmsg(l_module_name,'after FOR k in 1..l_u_consol_del_tab.count LOOP');
14361 END IF;
14362 IF l_exists_flag = 'N' THEN
14363 IF l_debug_on THEN
14364 WSH_DEBUG_SV.log(l_module_name,'i is', i);
14365 WSH_DEBUG_SV.log(l_module_name,'p_consol_del_tab(i)', p_consol_del_tab(i));
14366 WSH_DEBUG_SV.log(l_module_name,'l_u_consol_del_tab.count', l_u_consol_del_tab.count);
14367 END IF;
14368 l_u_consol_del_tab(l_u_consol_del_tab.count + 1) := p_consol_del_tab(i);
14369 OPEN c_check_close_consol(p_consol_del_tab(i));
14370 FETCH c_check_close_consol INTO l_delivery_id;
14371 IF c_check_close_consol%NOTFOUND THEN
14372 -- bug 4505105
14373 l_del_valid_flag := 'Y';
14374 l_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14375 -- Keeping it commented because as of today
14376 -- this procedure will be called only for WMS org.
14377 --l_org_id := NULL;
14378 --open l_get_consol_del_org_csr(p_consol_del_tab(i));
14379 --fetch l_get_consol_del_org_csr into l_org_id;
14380 --close l_get_consol_del_org_csr;
14381 --IF (l_org_id is not null
14382 -- and wsh_util_validate.Check_Wms_Org(l_org_id)='Y'
14383 -- )
14384 --THEN
14385 --{
14386 validate_del_containers(p_consol_del_tab(i),
14387 'CONSOL',
14388 l_del_valid_flag,
14389 l_return_status);
14390
14391 IF l_debug_on THEN
14392 WSH_DEBUG_SV.log(l_module_name,'l_return_status after calling validate_del_containers', l_return_status);
14393 END IF;
14394
14395 IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_ERROR) THEN
14396 RAISE FND_API.G_EXC_ERROR;
14397 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
14398 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14399 ELSIF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
14400 l_num_warnings := l_num_warnings + 1;
14401 END IF;
14402 --}
14403 --END IF;
14404
14405 IF (nvl(l_del_valid_flag,'Y') = 'Y') THEN
14406 --
14407 j:= j+1;
14408 l_co_consol_del_tab(j) := p_consol_del_tab(i);
14409 IF l_debug_on THEN
14410 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(j)', l_co_consol_del_tab(j));
14411 END IF;
14412 --
14413 ELSE
14414 --
14415 l_num_warnings := l_num_warnings + 1;
14416 l_num_err := l_num_err + 1;
14417 --
14418 END IF;
14419 -- bug 4505105
14420 END IF;
14421 CLOSE c_check_close_consol;
14422 IF l_debug_on THEN
14423 WSH_DEBUG_SV.logmsg(l_module_name,'after c_check_close_consol');
14424 END IF;
14425 END IF;
14426 IF l_debug_on THEN
14427 WSH_DEBUG_SV.log(l_module_name,'i', i);
14428 END IF;
14429
14430 i := p_consol_del_tab.next(i);
14431
14432 IF l_debug_on THEN
14433 WSH_DEBUG_SV.log(l_module_name,'i', i);
14434 END IF;
14435
14436 END LOOP;
14437 IF l_debug_on THEN
14438 WSH_DEBUG_SV.logmsg(l_module_name,'After WHILE i IS NOT NULL LOOP');
14439 END IF;
14440
14441 -- bug 4505105
14442 IF l_debug_on THEN
14443 WSH_DEBUG_SV.log(l_module_name,'Count of consol deliveries to be processed is ', l_u_consol_del_tab.count);
14444 WSH_DEBUG_SV.log(l_module_name,'Count of errored deliveries is ', l_num_err);
14445 END IF;
14446
14447 IF (l_num_err >= l_u_consol_del_tab.count AND l_num_err > 0) THEN
14448 IF l_debug_on THEN
14449 WSH_DEBUG_SV.logmsg(l_module_name,'None of the Deliveries are eligible of Ship Confirm');
14450 END IF;
14451 RAISE FND_API.G_EXC_ERROR;
14452 END IF;
14453 -- bug 4505105
14454
14455 BEGIN
14456 IF l_debug_on THEN
14457 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab.count', l_co_consol_del_tab.count);
14458 END IF;
14459
14460 FOR l in 1..l_co_consol_del_tab.count LOOP
14461 IF l_debug_on THEN
14462 WSH_DEBUG_SV.log(l_module_name,'l_co_consol_del_tab(l)', l_co_consol_del_tab(l));
14463 END IF;
14464 l_lock_index := l;
14465 WSH_NEW_DELIVERIES_PVT.Lock_Dlvy_No_Compare(l_co_consol_del_tab(l));
14466
14467 l_lpn_number := 0;
14468 OPEN c_get_child_lpn_number(l_co_consol_del_tab(l));
14469 FETCH c_get_child_lpn_number
14470 INTO l_lpn_number;
14471 CLOSE c_get_child_lpn_number;
14472
14473 l_number_of_lpn_tab(l) := NVL(l_lpn_number, 0);
14474 l_lpn_number := 0;
14475
14476 OPEN c_get_consol_lpn_number(l_co_consol_del_tab(l));
14477 FETCH c_get_consol_lpn_number
14478 INTO l_lpn_number;
14479 CLOSE c_get_consol_lpn_number;
14480
14481 l_number_of_lpn_tab(l) := l_number_of_lpn_tab(l) + NVL(l_lpn_number, 0);
14482
14483 END LOOP;
14484 EXCEPTION
14485 WHEN OTHERS THEN
14486 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14487 FND_MESSAGE.SET_NAME('WSH','WSH_DLVY_LOCK_FAILED');
14488 FND_MESSAGE.Set_Token('ENTITY_NAME', WSH_NEW_DELIVERIES_PVT.Get_Name(l_co_consol_del_tab(l_lock_index)));
14489 WSH_UTIL_CORE.Add_Message(x_return_status);
14490 --
14491 -- Debug Statements
14492 --
14493 IF l_debug_on THEN
14494 WSH_DEBUG_SV.logmsg(l_module_name,'WSH_DLVY_LOCK_FAILED exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14495 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:WSH_DLVY_LOCK_FAILED');
14496 END IF;
14497 RETURN;
14498 --
14499 END;
14500 IF l_debug_on THEN
14501 WSH_DEBUG_SV.logmsg(l_module_name,'after lock');
14502 END IF;
14503 IF l_co_consol_del_tab.count > 0 THEN
14504 FORALL m in 1..l_co_consol_del_tab.count
14505 UPDATE wsh_new_deliveries
14506 SET status_code = 'CO',
14507 number_of_lpn = decode(number_of_lpn, NULL, l_number_of_lpn_tab(m), number_of_lpn)
14508 WHERE delivery_id = l_co_consol_del_tab(m);
14509 END IF;
14510
14511 -- bug 4505105
14512 IF (l_num_warnings > 0 and x_return_status = WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
14513 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14514 ELSE
14515 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14516 END IF;
14517 -- bug 4505105
14518
14519 EXCEPTION
14520 -- bug 4505105
14521 WHEN FND_API.G_EXC_ERROR THEN
14522 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14523 --
14524 IF l_debug_on THEN
14525 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14526 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14527 END IF;
14528 --
14529 -- bug 4505105
14530 WHEN OTHERS THEN
14531 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14532 wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14533 --
14534 IF l_debug_on THEN
14535 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14536 END IF;
14537
14538 END Confirm_Consolidation_Delivery;
14539
14540
14541 PROCEDURE Create_Deconsol_Trips(p_deliveries_tab IN wsh_util_core.id_tab_type,
14542 x_return_status OUT NOCOPY VARCHAR2) IS
14543 CURSOR c_del_info(p_delivery_id IN NUMBER) IS
14544 SELECT parent.ultimate_dropoff_location_id pu_location,
14545 stop.planned_departure_date pu_date,
14546 child.ultimate_dropoff_location_id do_location,
14547 child.ultimate_dropoff_date do_date,
14548 child.ship_method_code,
14549 child.carrier_id,
14550 child.service_level,
14551 child.mode_of_transport,
14552 child.ignore_for_planning
14553 FROM wsh_new_deliveries child,
14554 wsh_new_deliveries parent,
14555 wsh_delivery_legs child_leg,
14556 wsh_delivery_legs parent_leg,
14557 wsh_trip_stops stop
14558 WHERE child_leg.delivery_id = p_delivery_id
14559 AND child_leg.parent_delivery_leg_id = parent_leg.delivery_leg_id
14560 AND child_leg.delivery_id = child.delivery_id
14561 AND parent_leg.delivery_id = parent.delivery_id
14562 AND child_leg.drop_off_stop_id = stop.stop_id
14563 AND child.ultimate_dropoff_location_id <> parent.ultimate_dropoff_location_id;
14564
14565 CURSOR c_second_leg(p_delivery_id IN NUMBER) IS
14566 SELECT stop.trip_id
14567 FROM wsh_delivery_legs leg,
14568 wsh_trip_stops stop
14569 WHERE leg.parent_delivery_leg_id IS NULL
14570 AND leg.delivery_id = p_delivery_id
14571 AND leg.pick_up_stop_id = stop.stop_id;
14572
14573 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Deconsol_Trips';
14574 l_debug_on BOOLEAN;
14575
14576
14577 l_del_tab wsh_util_core.id_tab_type;
14578 l_trip_tab wsh_util_core.id_tab_type;
14579
14580
14581 l_trip_in_rec WSH_TRIPS_GRP.tripInRecType;
14582 l_init_msg_list VARCHAR2(100);
14583 l_api_version_number NUMBER := 1.0;
14584 l_commit VARCHAR2(10);
14585 l_return_status VARCHAR2(1);
14586 l_msg_count NUMBER;
14587 l_msg_data VARCHAR2(2000);
14588 l_trip_info_tab WSH_TRIPS_PVT.Trip_Attr_Tbl_Type;
14589 l_trip_info_rec WSH_TRIPS_PVT.trip_rec_type;
14590 l_trip_out_rec_tab WSH_TRIPS_GRP.Trip_Out_Tab_Type;
14591 l_num_warnings NUMBER := 0;
14592 l_num_errors NUMBER := 0;
14593 l_do_date DATE;
14594 i NUMBER;
14595
14596 BEGIN
14597
14598
14599 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14600 --
14601 IF l_debug_on IS NULL
14602 THEN
14603 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14604 END IF;
14605 --
14606 IF l_debug_on THEN
14607 wsh_debug_sv.push (l_module_name);
14608 END IF;
14609
14610 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14611
14612 i := p_deliveries_tab.FIRST;
14613
14614 WHILE i is NOT NULL LOOP
14615
14616
14617 FOR del in c_del_info(p_deliveries_tab(i)) LOOP
14618
14619 l_del_tab(1) := p_deliveries_tab(i);
14620
14621 -- Unassign all non-consol trips attached to
14622 -- delivery.
14623
14624 FOR trip in c_second_leg(p_deliveries_tab(i)) LOOP
14625
14626 WSH_TRIPS_ACTIONS.Unassign_Trip(
14627 p_del_rows => l_del_tab,
14628 p_trip_id => trip.trip_id,
14629 x_return_status => l_return_status);
14630
14631 WSH_UTIL_CORE.Api_Post_Call
14632 (
14633 p_return_status => l_return_status,
14634 x_num_warnings => l_num_warnings,
14635 x_num_errors => l_num_errors
14636 );
14637 END LOOP;
14638
14639
14640 -- Create Trip
14641
14642 l_trip_in_rec.caller := 'WSH_CONSOL';
14643 l_trip_in_rec.phase := NULL;
14644 l_trip_in_rec.action_code := 'CREATE';
14645
14646 l_trip_info_tab.DELETE;
14647 l_trip_info_tab(1).ignore_for_planning := del.ignore_for_planning;
14648 l_trip_info_tab(1).ship_method_code := del.ship_method_code;
14649 l_trip_info_tab(1).service_level := del.service_level;
14650 l_trip_info_tab(1).mode_of_transport := del.mode_of_transport;
14651 l_trip_info_tab(1).carrier_id := del.carrier_id;
14652
14653 l_commit := FND_API.g_false;
14654 IF l_debug_on THEN
14655 WSH_DEBUG_SV.logmsg(l_module_name,'Creating deconsol trip');
14656 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_GRP.Create_Update_Trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14657 END IF;
14658
14659 WSH_TRIPS_GRP.Create_Update_Trip(
14660 p_api_version_number => l_api_version_number,
14661 p_init_msg_list => l_init_msg_list,
14662 p_commit => l_commit,
14663 x_return_status => l_return_status,
14664 x_msg_count => l_msg_count,
14665 x_msg_data => l_msg_data,
14666 p_trip_info_tab => l_trip_info_tab,
14667 p_in_rec => l_trip_in_rec,
14668 x_out_tab => l_trip_out_rec_tab);
14669
14670 wsh_util_core.api_post_call
14671 (
14672 p_return_status => l_return_status,
14673 x_num_warnings => l_num_warnings,
14674 x_num_errors => l_num_errors
14675 );
14676
14677 -- Assign delivery to trip
14678
14679 IF l_debug_on THEN
14680 WSH_DEBUG_SV.logmsg(l_module_name,'Assigning to deconsol trip');
14681 WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_TRIPS_ACTIONS.assign_trip',WSH_DEBUG_SV.C_PROC_LEVEL);
14682 END IF;
14683
14684
14685 IF del.pu_date < del.do_date THEN
14686 l_do_date := del.do_date;
14687 ELSE
14688 l_do_date := del.pu_date + 1;
14689 END IF;
14690
14691 WSH_TRIPS_ACTIONS.assign_trip(
14692 p_del_rows => l_del_tab,
14693 p_trip_id => l_trip_out_rec_tab(l_trip_out_rec_tab.FIRST).trip_id,
14694 p_pickup_location_id => del.pu_location,
14695 p_dropoff_location_id => del.do_location,
14696 p_pickup_arr_date => del.pu_date,
14697 p_pickup_dep_date => del.pu_date,
14698 p_dropoff_arr_date => l_do_date,
14699 p_dropoff_dep_date => l_do_date,
14700 x_return_status => l_return_status);
14701
14702 wsh_util_core.api_post_call
14703 (
14704 p_return_status => l_return_status,
14705 x_num_warnings => l_num_warnings,
14706 x_num_errors => l_num_errors
14707 );
14708 END LOOP;
14709 i := p_deliveries_tab.NEXT(i);
14710
14711 END LOOP;
14712
14713
14714 IF l_num_errors > 0
14715 THEN
14716 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14717 ELSIF l_num_warnings > 0
14718 THEN
14719 x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
14720 ELSE
14721 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
14722 END IF;
14723
14724 IF l_debug_on THEN
14725 WSH_DEBUG_SV.pop(l_module_name);
14726 END IF;
14727
14728 EXCEPTION
14729 WHEN FND_API.G_EXC_ERROR THEN
14730 x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
14731 --
14732 IF l_debug_on THEN
14733 WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has occured ',WSH_DEBUG_SV.C_EXCEP_LEVEL);
14734 WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
14735 END IF;
14736 --
14737 WHEN OTHERS THEN
14738 x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
14739 wsh_util_core.default_handler('wsh_new_delivery_actions.Confirm_Consolidation_Delivery',l_module_name);
14740 --
14741 IF l_debug_on THEN
14742 wsh_debug_sv.pop(l_module_name, 'EXCEPTION:OTHERS');
14743 END IF;
14744
14745 END Create_Deconsol_Trips;
14746
14747
14748 --OTM R12
14749 ----------------------------------------------------------
14750 -- FUNCTION IS_DELIVERY_EMPTY
14751 --
14752 -- parameters: p_delivery_id delivery id to check for emptiness
14753 --
14754 -- description: This procedure checks the delivery to see if there's any detail
14755 -- lines on the delivery. Returns Y if yes, N if no, and E if errors out
14756 ----------------------------------------------------------
14757 FUNCTION IS_DELIVERY_EMPTY (p_delivery_id IN NUMBER) RETURN VARCHAR2 IS
14758
14759 CURSOR c_delivery_detail_count(p_del_id IN NUMBER) IS
14760 SELECT 1
14761 FROM wsh_delivery_assignments wda,
14762 wsh_delivery_details wdd
14763 WHERE wda.delivery_id = p_del_id
14764 AND wda.delivery_detail_id = wdd.delivery_detail_id
14765 AND wdd.container_flag = 'N';
14766
14767 l_count NUMBER;
14768 l_return_value VARCHAR2(1);
14769
14770 l_debug_on BOOLEAN;
14771 --
14772 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || g_pkg_name || '.' || 'IS_DELIVERY_EMPTY';
14773 --
14774 BEGIN
14775
14776 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
14777 --
14778 IF l_debug_on IS NULL THEN
14779 l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
14780 END IF;
14781 --
14782 IF l_debug_on THEN
14783 WSH_DEBUG_SV.push(l_module_name);
14784 WSH_DEBUG_SV.log(l_module_name, 'delivery id', p_delivery_id);
14785 END IF;
14786
14787 l_count := 0;
14788
14789 l_return_value := 'Y'; --defaulting to empty
14790
14791 IF (p_delivery_id IS NOT NULL) THEN
14792 OPEN c_delivery_detail_count(p_delivery_id);
14793 FETCH c_delivery_detail_count INTO l_count;
14794
14795 IF (c_delivery_detail_count%FOUND) THEN -- not empty
14796
14797 IF l_debug_on THEN
14798 wsh_debug_sv.logmsg(l_module_name, 'Delivery is not empty');
14799 END IF;
14800 l_return_value := 'N';
14801 ELSE -- empty
14802 IF l_debug_on THEN
14803 wsh_debug_sv.logmsg(l_module_name, 'Delivery is empty');
14804 END IF;
14805 l_return_value := 'Y';
14806 END IF;
14807 CLOSE c_delivery_detail_count;
14808 ELSE
14809 l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14810 END IF;
14811
14812 IF l_debug_on THEN
14813 wsh_debug_sv.log(l_module_name, 'RETURN VALUE', l_return_value);
14814 WSH_DEBUG_SV.pop(l_module_name);
14815 END IF;
14816 --
14817
14818 RETURN l_return_value;
14819 EXCEPTION
14820
14821 WHEN OTHERS THEN
14822 wsh_util_core.default_handler('wsh_new_delivery_actions.is_delivery_empty',l_module_name);
14823 --
14824 IF (c_delivery_detail_count%ISOPEN) THEN
14825 CLOSE c_delivery_detail_count;
14826 END IF;
14827 l_return_value := WSH_UTIL_CORE.G_RET_STS_ERROR;
14828
14829 IF l_debug_on THEN
14830 WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured. Oracle error message is '|| SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
14831 wsh_debug_sv.LOG(l_module_name, 'RETURN VALUE', l_return_value);
14832 WSH_DEBUG_SV.pop(l_module_name);
14833 END IF;
14834 --
14835 RETURN l_return_value;
14836 END IS_DELIVERY_EMPTY;
14837 --END OTM R12
14838
14839 END WSH_NEW_DELIVERY_ACTIONS;