DBA Data[Home] [Help]

PACKAGE BODY: APPS.WSH_ROUTING_REQUEST

Source


1 PACKAGE BODY WSH_ROUTING_REQUEST as
2 /* $Header: WSHRORQB.pls 120.1 2005/06/30 03:38:25 rahujain noship $ */
3 
4 -- standard global constants
5 G_PKG_NAME CONSTANT VARCHAR2(30) := 'WSH_ROUTING_REQUEST';
6 
7 
8 --Constant are define for each field of Routing Request and
9 --Supplier Address book, which are use as an index for pl/sql table.
10 
11 --Routing Request constant declaration begin
12 --For Header index 1 to 50 are reserved.
13 c_Supplier_name 		constant	number:= 1;
14 c_request_date 			constant	number:= 2;
15 c_request_number 		constant	number:= 3;
16 c_request_revision 		constant	number:= 4;
17 
18 
19 --For Delivery index 51 to 100 are reserved.
20 c_ship_from_add1 		constant	number:= 51;
21 c_ship_from_add2 		constant	number:= 52;
22 c_ship_from_add3 		constant	number:= 53;
23 c_ship_from_add4 		constant	number:= 54;
24 c_ship_from_city 		constant	number:= 55;
25 c_ship_from_state 		constant	number:= 56;
26 c_ship_from_county 		constant	number:= 57;
27 c_ship_from_country 		constant	number:= 58;
28 c_ship_from_province 		constant	number:= 59;
29 c_ship_from_postal_code 	constant	number:= 60;
30 c_ship_from_Code 		constant	number:= 61;
31 c_shipper_name			constant	number:= 62;
32 c_phone				constant	number:= 63;
33 c_email				constant	number:= 64;
34 c_number_of_containers 		constant	number:= 65;
35 c_del_total_weight 		constant	number:= 66;
36 c_del_weight_uom 		constant	number:= 67;
37 c_del_total_volume 		constant	number:= 68;
38 c_del_volume_uom 		constant	number:= 69;
39 c_remark 			constant	number:= 70;
40 
41 
42 --For Line index 101 to 150 are reserved.
43 c_po_header_number 	constant	number:= 101;
44 c_po_release_number 	constant	number:= 102;
45 c_po_line_number 	constant	number:= 103;
46 c_po_shipment_number 	constant	number:= 104;
47 c_po_operating_unit 	constant	number:= 105;
48 c_item_qty 		constant	number:= 106;
49 c_item_uom 		constant	number:= 107;
50 c_total_weight 		constant	number:= 108;
51 c_weight_uom 		constant	number:= 109;
52 c_total_volume 		constant	number:= 110;
53 c_volume_uom 		constant	number:= 111;
54 c_earliest_pickup_date 	constant	number:= 112;
55 c_latest_pickup_date 	constant	number:= 113;
56 --Routing Request constant declaration end
57 
58 --Supplier Address Book constant declaration begin
59 --For Address Book index 200 to 250 are reserved.
60 cs_Supplier_name 		constant	number:= 201;
61 cs_ship_from_add1 		constant	number:= 202;
62 cs_ship_from_add2 		constant	number:= 203;
63 cs_ship_from_add3 		constant	number:= 204;
64 cs_ship_from_add4 		constant	number:= 205;
65 cs_ship_from_city 		constant	number:= 206;
66 cs_ship_from_state 		constant	number:= 207;
67 cs_ship_from_county 		constant	number:= 208;
68 cs_ship_from_country 		constant	number:= 209;
69 cs_ship_from_province 		constant	number:= 210;
70 cs_ship_from_postal_code 	constant	number:= 211;
71 cs_ship_from_Code 		constant	number:= 212;
72 cs_shipper_name			constant	number:= 213;
73 cs_phone			constant	number:= 214;
74 cs_email			constant	number:= 215;
75 cs_action			constant	number:= 216;
76 --Supplier Address Book constant declaration end
77 
78 --PL/Sql table used to hold error messages.
79 g_error_tbl		tbl_var2000;
80 
81 --File line number either of Routing Request or Supplier Address Book File.
82 g_file_line_number	number;
83 
84 --Date format used to covert varchar to date.
85 g_date_format		varchar2(2000);
86 
87 --Structure to hold validation attributes of Routing Request/Supplier Address Book fields.
88 TYPE Field_Validation_Type IS RECORD (
89 name			tbl_var2000, --name of field
90 requried          	tbl_var1,    --Y for Mandatory field else 'N'.
91 max_size		tbl_number,  --Maximum size of field.
92 supplied		tbl_var1     --Default 'N','Y' if field is a part of input file.
93 );
94 
95 --Hold validation meta data for Routing Request/Supplier Address Book.
96 g_field	Field_Validation_Type;
97 
98 
99 -- Start of comments
100 -- API name : Create_Address_Record
101 -- Type     : Private
102 -- Pre-reqs : None.
103 -- Procedure: API to create a blank address record of type Address_Rec_type.
104 -- Parameters :
105 -- IN:
106 --      p_index         IN 	Index where address record is to be created.
107 --      p_Address       IN OUT	Type Address_Rec_type.
108 -- OUT:
109 --      x_return_status OUT NOCOPY      Standard to output api status.
110 -- End of comments
111 PROCEDURE Create_Address_Record(
112                		p_index  	IN	NUMBER,
113 			p_Address  	IN OUT NOCOPY Address_Rec_type,
114                		x_return_status OUT NOCOPY VARCHAR2) IS
115 l_debug_on BOOLEAN;
116 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Address_Record';
117 l_return_status		varchar2(1);
118 BEGIN
119 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
120 IF l_debug_on IS NULL THEN
121     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
122 END IF;
123 
124 IF l_debug_on THEN
125     WSH_DEBUG_SV.push(l_module_name);
126     WSH_DEBUG_SV.log(l_module_name,'p_index',p_index);
127 END IF;
128 
129 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
130 
131        p_address.supplier_name(p_index):= NULL;
132        p_address.ship_from_address1(p_index):= NULL;
133        p_address.ship_from_address2(p_index):= NULL;
134        p_address.ship_from_address3(p_index):= NULL;
135        p_address.ship_from_address4(p_index):= NULL;
136        p_address.Ship_From_city(p_index):= NULL;
137        p_address.Ship_From_state(p_index):= NULL;
138        p_address.Ship_From_county(p_index):= NULL;
139        p_address.Ship_From_country(p_index):= NULL;
140        p_address.Ship_From_province(p_index):= NULL;
141        p_address.Ship_From_postal_code(p_index):= NULL;
142        p_address.Ship_From_code(p_index):= NULL;
143        p_address.shipper_name(p_index):= NULL;
144        p_address.phone(p_index):= NULL;
145        p_address.email(p_index):= NULL;
146        p_address.action(p_index):= NULL;
147        p_address.error_flag(p_index):= 'N';
148 
149 IF l_debug_on THEN
150     WSH_DEBUG_SV.pop(l_module_name);
151 END IF;
152 EXCEPTION
153 WHEN OTHERS THEN
154     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
155     IF l_debug_on THEN
156        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
157 Oracle error message is '||
158 
159 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
160        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
161     END IF;
162      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
163      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
164      fnd_msg_pub.add;
165 
166 END Create_Address_Record;
167 
168 
169 -- Start of comments
170 -- API name : Create_Line_Record
171 -- Type     : Private
172 -- Pre-reqs : None.
173 -- Procedure: API to create a blank routing request line record of type Line_Rec_type.
174 -- Parameters :
175 -- IN:
176 --      p_index         IN      Index where routing request line record is to be created.
177 --      p_line       	IN OUT  Type Line_Rec_type.
178 -- OUT:
179 --      x_return_status OUT NOCOPY      Standard to output api status.
180 -- End of comments
181 PROCEDURE Create_Line_Record(
182                		p_index  	IN	NUMBER,
183 			p_line  	IN OUT NOCOPY Line_Rec_type,
184                		x_return_status OUT NOCOPY VARCHAR2) IS
185 l_debug_on BOOLEAN;
186 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Line_Record';
187 BEGIN
188 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
189 IF l_debug_on IS NULL THEN
190     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
191 END IF;
192 
193 IF l_debug_on THEN
194     WSH_DEBUG_SV.push(l_module_name);
195     WSH_DEBUG_SV.log(l_module_name,'p_index',p_index);
196 END IF;
197 
198 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
199 
200        p_line.Delivery_line_number(p_index):= NULL;
201        p_line.po_header_number(p_index):= NULL;
202        p_line.Po_Release_number(p_index):= NULL;
203        p_line.PO_Line_number(p_index):= NULL;
204        p_line.PO_Shipment_number(p_index):= NULL;
205        p_line.Po_Operating_unit(p_index):= NULL;
206        p_line.Item_quantity(p_index):= NULL;
207        p_line.Item_uom(p_index):= NULL;
208        p_line.weight(p_index):= NULL;
209        p_line.Weight_uom(p_index):= NULL;
210        p_line.volume(p_index):= NULL;
211        p_line.volume_uom(p_index):= NULL;
212        p_line.earliest_pickup_date(p_index):= NULL;
213        p_line.Latest_pickup_date(p_index):= NULL;
214        p_line.error_flag(p_index):= 'N';
215 
216 IF l_debug_on THEN
217     WSH_DEBUG_SV.pop(l_module_name);
218 END IF;
219 EXCEPTION
220 WHEN OTHERS THEN
221     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
222     IF l_debug_on THEN
223        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
224 Oracle error message is '||
225 
226 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
227        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
228     END IF;
229      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
230      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
231      fnd_msg_pub.add;
232 
233 END Create_Line_Record;
234 
235 
236 -- Start of comments
237 -- API name : Create_Delivery_Record
238 -- Type     : Private
239 -- Pre-reqs : None.
240 -- Procedure: API to create a blank routing request delivery record of type delivery_Rec_type.
241 -- Parameters :
242 -- IN:
243 --      p_index         IN      Index where routing request delivery record is to be created.
244 --      p_delivery      IN OUT  Type delivery_Rec_type.
245 -- OUT:
246 --      x_return_status OUT NOCOPY      Standard to output api status.
247 -- End of comments
248 PROCEDURE Create_Delivery_Record(
249                		p_index  	IN	NUMBER,
250 			p_delivery  	IN OUT NOCOPY delivery_Rec_type,
251                		x_return_status OUT NOCOPY VARCHAR2) IS
252 l_debug_on BOOLEAN;
253 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Delivery_Record';
254 BEGIN
255 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
256 IF l_debug_on IS NULL THEN
257     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
258 END IF;
259 
260 IF l_debug_on THEN
261     WSH_DEBUG_SV.push(l_module_name);
262     WSH_DEBUG_SV.log(l_module_name,'p_index',p_index);
263 END IF;
264 
265 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
266        p_Delivery.Header_line_number(p_index):= NULL;
267        p_Delivery.ship_from_address1(p_index):= NULL;
268        p_Delivery.ship_from_address2(p_index):= NULL;
269        p_Delivery.ship_from_address3(p_index):= NULL;
270        p_Delivery.ship_from_address4(p_index):= NULL;
271        p_Delivery.Ship_From_city(p_index):= NULL;
272        p_Delivery.Ship_From_state(p_index):= NULL;
273        p_Delivery.Ship_From_county(p_index):= NULL;
274        p_Delivery.Ship_From_country(p_index):= NULL;
275        p_Delivery.Ship_From_province(p_index):= NULL;
276        p_Delivery.Ship_From_postal_code(p_index):= NULL;
277        p_Delivery.Ship_From_code(p_index):= NULL;
278        p_Delivery.shipper_name(p_index):= NULL;
279        p_Delivery.phone(p_index):= NULL;
280        p_Delivery.email(p_index):= NULL;
281        p_Delivery.number_of_containers(p_index):= NULL;
282        p_Delivery.total_weight(p_index):= NULL;
283        p_Delivery.weight_uom(p_index):= NULL;
284        p_Delivery.total_volume(p_index):= NULL;
285        p_Delivery.volume_uom(p_index):= NULL;
286        p_Delivery.remark(p_index):= NULL;
287        p_Delivery.error_flag(p_index):= 'N';
288 
289 IF l_debug_on THEN
290     WSH_DEBUG_SV.pop(l_module_name);
291 END IF;
292 EXCEPTION
293 WHEN OTHERS THEN
294     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
295     IF l_debug_on THEN
296        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
297 Oracle error message is '||
298 
299 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
300        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
301     END IF;
302      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
303      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
304      fnd_msg_pub.add;
305 
306 END Create_Delivery_Record;
307 
308 
309 -- Start of comments
310 -- API name : Create_Header_Record
311 -- Type     : Private
312 -- Pre-reqs : None.
313 -- Procedure: API to create a blank routing request header record of type Header_Rec_type.
314 -- Parameters :
315 -- IN:
316 --      p_index         IN      Index where routing request delivery record is to be created.
317 --      p_header        IN OUT  Type Header_Rec_type.
318 -- OUT:
319 --      x_return_status OUT NOCOPY      Standard to output api status.
320 -- End of comments
321 PROCEDURE Create_Header_Record(
322                		p_index  	IN	NUMBER,
323 			p_header  	IN OUT NOCOPY Header_Rec_type,
324                		x_return_status OUT NOCOPY VARCHAR2) IS
325 l_debug_on BOOLEAN;
326 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
327 'Create_Header_Record';
328 BEGIN
329 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
330 IF l_debug_on IS NULL THEN
331     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
332 END IF;
333 
334 IF l_debug_on THEN
335     WSH_DEBUG_SV.push(l_module_name);
336     WSH_DEBUG_SV.log(l_module_name,'p_index',p_index);
337 END IF;
338 
339 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
340 
341        p_header.Supplier_name(p_index):= NULL;
342        p_header.Request_date(p_index):= NULL;
343        p_header.Request_Number(p_index):= NULL;
344        p_header.request_revision(p_index):= NULL;
345        p_header.error_flag(p_index):= 'N';
346 
347 IF l_debug_on THEN
348     WSH_DEBUG_SV.pop(l_module_name);
349 END IF;
350 EXCEPTION
351 WHEN OTHERS THEN
352     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
353     IF l_debug_on THEN
354        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
355 Oracle error message is '||
356 
357 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
358        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
359     END IF;
360      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
361      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
362      fnd_msg_pub.add;
363 
364 END Create_Header_Record;
365 
366 
367 -- Start of comments
368 -- API name : Is_All_Line_Error
369 -- Type     : Private
370 -- Pre-reqs : None.
371 -- Procedure: API to determine consolidates status of input table of status for
372 --            multiple records. The consolidates status is
373 --            1.ERROR:If all the lines are errors.
374 --            2.WARNING:If error line is more than one and less than total
375 --              lines.
376 --            3.SUCCESS:If none of line is error.
377 -- Parameters :
378 -- IN:
379 --      p_error_tbl     IN      	Table of error status of routing request deliveries/address lines.
380 -- OUT:
381 --      x_return_status OUT NOCOPY      Standard to output api status.
382 -- End of comments
383 PROCEDURE Is_All_Line_Error(p_error_tbl		IN	tbl_var1,
384                		    x_return_status OUT NOCOPY VARCHAR2) IS
385 
386 l_debug_on BOOLEAN;
387 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Is_All_Line_Error';
388 
389 l_index		number;
390 l_count		number:=0;
391 l_error_count	number:=0;
392 BEGIN
393 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
394 IF l_debug_on IS NULL THEN
395     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
396 END IF;
397 
398 IF l_debug_on THEN
399     WSH_DEBUG_SV.push(l_module_name);
400     WSH_DEBUG_SV.log(l_module_name,'p_error_tbl.count',p_error_tbl.count);
401 END IF;
402 
403 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
404 
405 
406 l_count := p_error_tbl.count;
407 
408 --Loop through records to see the status.
409 l_index:= p_error_tbl.first;
410 WHILE (l_index IS NOT NULL) LOOP
411     IF (p_error_tbl(l_index) = 'Y' ) THEN
412        --Increment the error count if record is error.
413        l_error_count := l_error_count + 1;
414     END IF;
415 
416 l_index:= p_error_tbl.next(l_index);
417 END LOOP;
418 
419 IF (l_error_count >= l_count) THEN
420    --If all the lines are Error.
421    x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
422 ELSIF ( l_error_count > 0 and l_error_count < l_count) THEN
423    --If more then one line and less then total line count are Error.
424    x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
425 END IF;
426 
427 IF l_debug_on THEN
428     WSH_DEBUG_SV.log(l_module_name,'l_count',l_count);
429     WSH_DEBUG_SV.log(l_module_name,'l_error_count',l_error_count);
430     WSH_DEBUG_SV.pop(l_module_name);
431 END IF;
432 
433 
434 EXCEPTION
435 WHEN OTHERS THEN
436     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
437     IF l_debug_on THEN
438        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
439 Oracle error message is '||
440 
441 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
442        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
443     END IF;
444 
445      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
446      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
447      fnd_msg_pub.add;
448 
449 END Is_All_Line_Error;
450 
451 
452 -- Start of comments
453 -- API name : set_message
454 -- Type     : Private
455 -- Pre-reqs : None.
456 -- Function: API to get translated message from FND Message stack.Error Messages are first transfer from FND stack
457 --               to store in local table,so that error meesages can be appended to output message tabe to UI in sequence
458 --               of success then error messages.
459 -- Parameters :
460 -- IN:
461 --      p_product         IN    Product Code
462 --      p_msg_name        IN 	Message Code
463 -- RETURN:
464 --      Translated message from FND Message.
465 -- End of comments
466 FUNCTION set_message(p_product	varchar2,p_msg_name	varchar2) RETURN varchar2
467 IS
468 
469 l_debug_on BOOLEAN;
470 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
471 'set_message';
472 
473 l_msg		varchar2(2000);
474 BEGIN
475 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
476 IF l_debug_on IS NULL THEN
477     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
478 END IF;
479 
480 IF l_debug_on THEN
481     WSH_DEBUG_SV.push(l_module_name);
482     WSH_DEBUG_SV.log(l_module_name,'p_msg_name',p_msg_name);
483     WSH_DEBUG_SV.log(l_module_name,'p_product',p_product);
484 END IF;
485 
486 --Set the message to FND stack, so that translation is taken care off.
487 FND_MESSAGE.SET_NAME(p_product, p_msg_name);
488 l_msg :=FND_MESSAGE.GET;
489 
490 IF l_debug_on THEN
491     WSH_DEBUG_SV.log(l_module_name,'Message',l_msg);
492     WSH_DEBUG_SV.pop(l_module_name);
493 END IF;
494 
495 RETURN l_msg;
496 
497 EXCEPTION
498 WHEN OTHERS THEN
499     IF l_debug_on THEN
500        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
501 Oracle error message is '||
502 
503 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
504        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
505     END IF;
506 
507      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
508      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
509      fnd_msg_pub.add;
510 
511     raise ;
512 END set_message;
513 
514 
515 
516 -- Start of comments
517 -- API name : add_time_to_date
518 -- Type     : Private
519 -- Pre-reqs : None.
520 -- Function: API to add time component to a date field when date field did have time component specified.
521 --           then add time of '00:00:00' elase if 'L' the '23:59:59' to date field.
522 -- Parameters :
523 -- IN:
524 --      p_date         IN    Input Date
525 --      p_type         IN    'F' add time '00:00:00' to date field
526 --                           'L' add time '23:59:59' to date field
527 -- RETURN:
528 --      Date with time component.
529 -- End of comments
530 FUNCTION add_time_to_date(p_date	date,p_type	varchar2) RETURN date
531 IS
532 
533 l_debug_on BOOLEAN;
534 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'add_time_to_date';
535 
536 l_msg		varchar2(2000);
537 l_new_date	date;
538 BEGIN
539 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
540 IF l_debug_on IS NULL THEN
541     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
542 END IF;
543 
544 IF l_debug_on THEN
545     WSH_DEBUG_SV.push(l_module_name);
546     WSH_DEBUG_SV.log(l_module_name,'p_date',p_date);
547     WSH_DEBUG_SV.log(l_module_name,'p_type',p_type);
548 END IF;
549 
550 l_new_date := p_date;
551 
552 IF (p_date - trunc(p_date) = 0 ) THEN
553    IF l_debug_on THEN
554     WSH_DEBUG_SV.log(l_module_name,'Adding the time',p_date - trunc(p_date));
555    END IF;
556 
557    IF (p_type='F') THEN
558       l_new_date := to_date(to_char(p_date,'mm/dd/yyyy') || '00:00:00','mm/dd/yyyy HH24:MI:SS');
559    ELSIF (p_type='L') THEN
560       l_new_date := to_date(to_char(p_date,'mm/dd/yyyy') || '23:59:59','mm/dd/yyyy HH24:MI:SS');
561    END IF;
562 
563 END IF;
564 
565 IF l_debug_on THEN
566     WSH_DEBUG_SV.log(l_module_name,'l_new_date',l_new_date);
567     WSH_DEBUG_SV.pop(l_module_name);
568 END IF;
569 
570 RETURN l_new_date;
571 
572 EXCEPTION
573 WHEN OTHERS THEN
574     IF l_debug_on THEN
575        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
576 Oracle error message is '||
577 
578 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
579        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
580     END IF;
581 
582      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
583      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
584      fnd_msg_pub.add;
585 
586     raise ;
587 END add_time_to_date;
588 
589 
590 -- Start of comments
591 -- API name : Get_message
592 -- Type     : Private
593 -- Pre-reqs : None.
594 -- Procedure: API to get message from FND Stack and put in global message.
595 --            Error Messages are first transfer from FND stack
596 --            to store in local table,so that error meesages can be appended to output message tabe to UI in sequence
597 --            of success then error messages.
598 -- Parameters :
599 -- IN:
600 --     None
601 -- OUT:
602 --     None
603 -- End of comments
604 PROCEDURE Get_message IS
605 
606 l_debug_on BOOLEAN;
607 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
608 'Get_Message';
609 l_msg		varchar2(23767);
610 
611 BEGIN
612 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
613 IF l_debug_on IS NULL THEN
614     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
615 END IF;
616 
617 IF l_debug_on THEN
618     WSH_DEBUG_SV.push(l_module_name);
619 END IF;
620 
621 
622 IF l_debug_on THEN
623     WSH_DEBUG_SV.log(l_module_name,'Message Count:',FND_MSG_PUB.Count_Msg);
624 END IF;
625 
626 
627 IF (FND_MSG_PUB.Count_Msg > 0 ) THEN
628 --Loop through all the messages in stack.
629 FOR i IN 1..FND_MSG_PUB.Count_Msg LOOP
630    l_msg :=  FND_MSG_PUB.get(i, FND_API.G_FALSE);
631    IF l_debug_on THEN
632     WSH_DEBUG_SV.log(l_module_name,'Stack Message :',l_msg);
633    END IF;
634 
635    --Collect the Translated message from FND stack.
636    g_error_tbl(g_error_tbl.count + 1) := l_msg;
637 END LOOP;
638 END IF;
639 
640 --Since message are collect from FND stack ,initialized the stack to avoid
641 --duplicate message being collected.
642 FND_MSG_PUB.initialize;
643 
644 IF l_debug_on THEN
645     WSH_DEBUG_SV.log(l_module_name,'After Init Message
646 Count:',FND_MSG_PUB.Count_Msg);
647 END IF;
648 IF l_debug_on THEN
649     WSH_DEBUG_SV.pop(l_module_name);
650 END IF;
651 EXCEPTION
652 WHEN OTHERS THEN
653     IF l_debug_on THEN
654        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
655 Oracle error message is '||
656 
657 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
658        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
659     END IF;
660 
661      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
662      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
663      g_error_tbl(g_error_tbl.count + 1) :=FND_MESSAGE.GET;
664 END Get_message;
665 
666 
667 -- Start of comments
668 -- API name : Init_Routing_Req_Validation
669 -- Type     : Private
670 -- Pre-reqs : None.
671 -- Procedure: API to set the Routing Request validation parameters.
672 -- Parameters :
673 -- IN:
674 --      None
675 -- OUT:
676 --      None
677 -- End of comments
678 PROCEDURE Init_Routing_Req_Validation IS
679 l_debug_on BOOLEAN;
680 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Init_Routing_Req_Validation';
681 BEGIN
682 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
683 IF l_debug_on IS NULL THEN
684     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
685 END IF;
686 
687 IF l_debug_on THEN
688     WSH_DEBUG_SV.push(l_module_name);
689 END IF;
690 
691 --For Header
692 g_field.name(c_Supplier_name):=set_message('FTE','FTE_RR_HDR_SUP_NAME');
693 g_field.requried(c_Supplier_name):='Y';
694 g_field.max_size(c_Supplier_name):=240;
695 g_field.supplied(c_Supplier_name):='N';
696 
697 g_field.name(c_request_date):=set_message('FTE','FTE_RR_HDR_REQ_DATE');
698 g_field.requried(c_request_date):='Y';
699 g_field.max_size(c_request_date):=NULL;
700 g_field.supplied(c_request_date):='N';
701 
702 g_field.name(c_request_number):=set_message('FTE','FTE_RR_HDR_REQ_NUM');
703 g_field.requried(c_request_number):='Y';
704 g_field.max_size(c_request_number):=30;
705 g_field.supplied(c_request_number):='N';
706 
707 g_field.name(c_request_revision):=set_message('FTE','FTE_RR_HDR_REQ_REV');
708 g_field.requried(c_request_revision):='Y';
709 g_field.max_size(c_request_revision):=30;
710 g_field.supplied(c_request_revision):='N';
711 --For Header
712 
713   --For Delivery
714 g_field.name(c_ship_from_add1):=set_message('FTE','FTE_RR_DEL_SF_ADD1');
715 g_field.requried(c_ship_from_add1):='Y';
716 g_field.max_size(c_ship_from_add1):=240;
717 g_field.supplied(c_ship_from_add1):='N';
718 
719 g_field.name(c_ship_from_add2):=set_message('FTE','FTE_RR_DEL_SF_ADD2');
720 g_field.requried(c_ship_from_add2):='N';
721 g_field.max_size(c_ship_from_add2):=240;
722 g_field.supplied(c_ship_from_add2):='N';
723 
724 g_field.name(c_ship_from_add3):=set_message('FTE','FTE_RR_DEL_SF_ADD3');
725 g_field.requried(c_ship_from_add3):='N';
726 g_field.max_size(c_ship_from_add3):=240;
727 g_field.supplied(c_ship_from_add3):='N';
728 
729 g_field.name(c_ship_from_add4):=set_message('FTE','FTE_RR_DEL_SF_ADD4');
730 g_field.requried(c_ship_from_add4):='N';
731 g_field.max_size(c_ship_from_add4):=240;
732 g_field.supplied(c_ship_from_add4):='N';
733 
734 g_field.name(c_ship_from_city):=set_message('FTE','FTE_RR_DEL_CITY');
735 g_field.requried(c_ship_from_city):='N';
736 g_field.max_size(c_ship_from_city):=60;
737 g_field.supplied(c_ship_from_city):='N';
738 
739 g_field.name(c_ship_from_state):=set_message('FTE','FTE_RR_DEL_STATE');
740 g_field.requried(c_ship_from_state):='N';
741 g_field.max_size(c_ship_from_state):=60;
742 g_field.supplied(c_ship_from_state):='N';
743 
744 g_field.name(c_ship_from_county):=set_message('FTE','FTE_RR_DEL_COUNTY');
745 g_field.requried(c_ship_from_county):='N';
746 g_field.max_size(c_ship_from_county):=60;
747 g_field.supplied(c_ship_from_county):='N';
748 
749 g_field.name(c_ship_from_country):=set_message('FTE','FTE_RR_DEL_COUNTRY');
750 g_field.requried(c_ship_from_country):='Y';
751 g_field.max_size(c_ship_from_country):=2;
752 g_field.supplied(c_ship_from_country):='N';
753 
754 g_field.name(c_ship_from_province):=set_message('FTE','FTE_RR_DEL_PROVINCE');
755 g_field.requried(c_ship_from_province):='N';
756 g_field.max_size(c_ship_from_province):=60;
757 g_field.supplied(c_ship_from_province):='N';
758 
759 g_field.name(c_ship_from_postal_code):=set_message('FTE','FTE_RR_DEL_POSTALCD');
760 g_field.requried(c_ship_from_postal_code):='N';
761 g_field.max_size(c_ship_from_postal_code):=60;
762 g_field.supplied(c_ship_from_postal_code):='N';
763 
764 g_field.name(c_ship_from_code):=set_message('FTE','FTE_RR_DEL_SF_CODE');
765 g_field.requried(c_ship_from_code):='Y';
766 g_field.max_size(c_ship_from_code):=10;
767 g_field.supplied(c_ship_from_code):='N';
768 
769 g_field.name(c_shipper_name):=set_message('FTE','FTE_RR_DEL_SHIPPER_NAME');
770 g_field.requried(c_shipper_name):='Y';
771 g_field.max_size(c_shipper_name):=240;
772 g_field.supplied(c_shipper_name):='N';
773 
774 g_field.name(c_phone):=set_message('FTE','FTE_RR_DEL_PHONE');
775 g_field.requried(c_phone):='N';
776 g_field.max_size(c_phone):=40;
777 g_field.supplied(c_phone):='N';
778 
779 g_field.name(c_email):=set_message('FTE','FTE_RR_DEL_EMAIL');
780 g_field.requried(c_email):='Y';
781 g_field.max_size(c_email):=500;
782 g_field.supplied(c_email):='N';
783 
784 
785 g_field.name(c_number_of_containers
786 ):=set_message('FTE','FTE_RR_DEL_NUM_CONT');
787 g_field.requried(c_number_of_containers ):='N';
788 g_field.max_size(c_number_of_containers ):=30;
789 g_field.supplied(c_number_of_containers ):='N';
790 
791 g_field.name(c_del_total_weight):=set_message('FTE','FTE_RR_DEL_TOT_WT');
792 g_field.requried(c_del_total_weight):='N';
793 g_field.max_size(c_del_total_weight):=30;
794 g_field.supplied(c_del_total_weight):='N';
795 
796 g_field.name(c_del_weight_uom):=set_message('FTE','FTE_RR_DEL_WT_UOM');
797 g_field.requried(c_del_weight_uom):='N';
798 g_field.max_size(c_del_weight_uom):=3;
799 g_field.supplied(c_del_weight_uom):='N';
800 
801 g_field.name(c_del_total_volume):=set_message('FTE','FTE_RR_DEL_TOT_VOL');
802 g_field.requried(c_del_total_volume):='N';
803 g_field.max_size(c_del_total_volume):=30;
804 g_field.supplied(c_del_total_volume):='N';
805 
806 g_field.name(c_del_volume_uom):=set_message('FTE','FTE_RR_DEL_VOL_UOM');
807 g_field.requried(c_del_volume_uom):='N';
808 g_field.max_size(c_del_volume_uom):=3;
809 g_field.supplied(c_del_volume_uom):='N';
810 
811 g_field.name(c_remark):=set_message('FTE','FTE_RR_DEL_REMARK');
812 g_field.requried(c_remark):='N';
813 g_field.max_size(c_remark):=500;
814 g_field.supplied(c_remark):='N';
815 --For Delivery
816 
817 
818   --For Line
819 g_field.name(c_po_header_number):=set_message('FTE','FTE_RR_LINE_POHDR_NUM');
820 g_field.requried(c_po_header_number):='Y';
821 g_field.max_size(c_po_header_number):=20;
822 g_field.supplied(c_po_header_number):='N';
823 
824 g_field.name(c_po_release_number):=set_message('FTE','FTE_RR_LINE_POREL_NUM');
825 g_field.requried(c_po_release_number):='N';
826 g_field.max_size(c_po_release_number):=38;
827 g_field.supplied(c_po_release_number):='N';
828 
829 g_field.name(c_po_line_number):=set_message('FTE','FTE_RR_LINE_POLINE_NUM');
830 g_field.requried(c_po_line_number):='Y';
831 g_field.max_size(c_po_line_number):=38;
832 g_field.supplied(c_po_line_number):='N';
833 
834 g_field.name(c_po_shipment_number):=set_message('FTE','FTE_RR_LINE_POSHIP_NUM');
835 g_field.requried(c_po_shipment_number):='Y';
836 g_field.max_size(c_po_shipment_number):=38;
837 g_field.supplied(c_po_shipment_number):='N';
838 
839 g_field.name(c_po_operating_unit):=set_message('FTE','FTE_RR_LINE_POOPUNIT');
840 g_field.requried(c_po_operating_unit):='Y';
841 g_field.max_size(c_po_operating_unit):=240;
842 g_field.supplied(c_po_operating_unit):='N';
843 
844 g_field.name(c_item_qty):=set_message('FTE','FTE_RR_LINE_ITEM_QTY');
845 g_field.requried(c_item_qty):='Y';
846 g_field.max_size(c_item_qty):=30;
847 g_field.supplied(c_item_qty):='N';
848 
849 g_field.name(c_item_uom):=set_message('FTE','FTE_RR_LINE_ITEM_UOM');
850 g_field.requried(c_item_uom):='Y';
851 g_field.max_size(c_item_uom):=3;
852 g_field.supplied(c_item_uom):='N';
853 
854 g_field.name(c_total_weight):=set_message('FTE','FTE_RR_LINE_TOT_WT');
855 g_field.requried(c_total_weight):='N';
856 g_field.max_size(c_total_weight):=30;
857 g_field.supplied(c_total_weight):='N';
858 
859 g_field.name(c_weight_uom):=set_message('FTE','FTE_RR_DEL_WT_UOM');
860 g_field.requried(c_weight_uom):='N';
861 g_field.max_size(c_weight_uom):=3;
862 g_field.supplied(c_weight_uom):='N';
863 
864 g_field.name(c_total_volume):=set_message('FTE','FTE_RR_LINE_TOT_VOL');
865 g_field.requried(c_total_volume):='N';
866 g_field.max_size(c_total_volume):=30;
867 g_field.supplied(c_total_volume):='N';
868 
869 g_field.name(c_volume_uom):=set_message('FTE','FTE_RR_DEL_VOL_UOM');
870 g_field.requried(c_volume_uom):='N';
871 g_field.max_size(c_volume_uom):=3;
872 g_field.supplied(c_volume_uom):='N';
873 
874 g_field.name(c_earliest_pickup_date):=set_message('FTE','FTE_RR_LINE_EPICKUP_DATE');
875 g_field.requried(c_earliest_pickup_date):='N';
876 g_field.max_size(c_earliest_pickup_date):=NULL;
877 g_field.supplied(c_earliest_pickup_date):='N';
878 
879 g_field.name(c_latest_pickup_date):=set_message('FTE','FTE_RR_LINE_LPICKUP_DATE');
880 g_field.requried(c_latest_pickup_date):='N';
881 g_field.max_size(c_latest_pickup_date):=NULL;
882 g_field.supplied(c_latest_pickup_date):='N';
883 
884 IF l_debug_on THEN
885     WSH_DEBUG_SV.pop(l_module_name);
886 END IF;
887 EXCEPTION
888 WHEN OTHERS THEN
889     IF l_debug_on THEN
890        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
891 Oracle error message is '||
892 
893 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
894        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
895     END IF;
896 
897      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
898      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
899      fnd_msg_pub.add;
900 
901     raise ;
902 END Init_Routing_Req_Validation;
903 
904 
905 -- Start of comments
906 -- API name : Init_Supplier_Validation
907 -- Type     : Private
908 -- Pre-reqs : None.
909 -- Procedure: API to set the Supplier Address Book validation parameters.
910 -- Parameters :
911 -- IN:
912 --      None
913 -- OUT:
914 --      None
915 -- End of comments
916 PROCEDURE Init_Supplier_Validation IS
917 l_debug_on BOOLEAN;
918 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
919 'Init_Supplier_Validation';
920 BEGIN
921 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
922 IF l_debug_on IS NULL THEN
923     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
924 END IF;
925 
926 IF l_debug_on THEN
927     WSH_DEBUG_SV.push(l_module_name);
928 END IF;
929 
930 g_field.name(cs_Supplier_name):=set_message('FTE','FTE_RR_HDR_SUP_NAME');
931 g_field.requried(cs_Supplier_name):='Y';
932 g_field.max_size(cs_Supplier_name):=240;
933 g_field.supplied(cs_Supplier_name):='N';
934 
935 g_field.name(cs_ship_from_add1):=set_message('FTE','FTE_RR_DEL_SF_ADD1');
936 g_field.requried(cs_ship_from_add1):='Y';
937 g_field.max_size(cs_ship_from_add1):=240;
938 g_field.supplied(cs_ship_from_add1):='N';
939 
940 g_field.name(cs_ship_from_add2):=set_message('FTE','FTE_RR_DEL_SF_ADD2');
941 g_field.requried(cs_ship_from_add2):='N';
942 g_field.max_size(cs_ship_from_add2):=240;
943 g_field.supplied(cs_ship_from_add2):='N';
944 
945 g_field.name(cs_ship_from_add3):=set_message('FTE','FTE_RR_DEL_SF_ADD3');
946 g_field.requried(cs_ship_from_add3):='N';
947 g_field.max_size(cs_ship_from_add3):=240;
948 g_field.supplied(cs_ship_from_add3):='N';
949 
950 g_field.name(cs_ship_from_add4):=set_message('FTE','FTE_RR_DEL_SF_ADD4');
951 g_field.requried(cs_ship_from_add4):='N';
952 g_field.max_size(cs_ship_from_add4):=240;
953 g_field.supplied(cs_ship_from_add4):='N';
954 
955 g_field.name(cs_ship_from_city):=set_message('FTE','FTE_RR_DEL_CITY');
956 g_field.requried(cs_ship_from_city):='N';
957 g_field.max_size(cs_ship_from_city):=60;
958 g_field.supplied(cs_ship_from_city):='N';
959 
960 g_field.name(cs_ship_from_state):=set_message('FTE','FTE_RR_DEL_STATE');
961 g_field.requried(cs_ship_from_state):='N';
962 g_field.max_size(cs_ship_from_state):=60;
963 g_field.supplied(cs_ship_from_state):='N';
964 
965 g_field.name(cs_ship_from_county):=set_message('FTE','FTE_RR_DEL_COUNTY');
966 g_field.requried(cs_ship_from_county):='N';
967 g_field.max_size(cs_ship_from_county):=60;
968 g_field.supplied(cs_ship_from_county):='N';
969 
970 g_field.name(cs_ship_from_country):=set_message('FTE','FTE_RR_DEL_COUNTRY');
971 g_field.requried(cs_ship_from_country):='Y';
972 g_field.max_size(cs_ship_from_country):=2;
973 g_field.supplied(cs_ship_from_country):='N';
974 
975 g_field.name(cs_ship_from_province):=set_message('FTE','FTE_RR_DEL_PROVINCE');
976 g_field.requried(cs_ship_from_province):='N';
977 g_field.max_size(cs_ship_from_province):=60;
978 g_field.supplied(cs_ship_from_province):='N';
979 
980 g_field.name(cs_ship_from_postal_code):=set_message('FTE','FTE_RR_DEL_POSTALCD');
981 g_field.requried(cs_ship_from_postal_code):='N';
982 g_field.max_size(cs_ship_from_postal_code):=60;
983 g_field.supplied(cs_ship_from_postal_code):='N';
984 
985 g_field.name(cs_ship_from_code):=set_message('FTE','FTE_RR_DEL_SF_CODE');
986 g_field.requried(cs_ship_from_code):='Y';
987 g_field.max_size(cs_ship_from_code):=10;
988 g_field.supplied(cs_ship_from_code):='N';
989 
990 g_field.name(cs_shipper_name):=set_message('FTE','FTE_RR_DEL_SHIPPER_NAME');
991 g_field.requried(cs_shipper_name):='Y';
992 g_field.max_size(cs_shipper_name):=240;
993 g_field.supplied(cs_shipper_name):='N';
994 
995 g_field.name(cs_phone):=set_message('FTE','FTE_RR_DEL_PHONE');
996 g_field.requried(cs_phone):='N';
997 g_field.max_size(cs_phone):=40;
998 g_field.supplied(cs_phone):='N';
999 
1000 g_field.name(cs_email):=set_message('FTE','FTE_RR_DEL_EMAIL');
1001 g_field.requried(cs_email):='Y';
1002 g_field.max_size(cs_email):=500;
1003 g_field.supplied(cs_email):='N';
1004 
1005 
1006 g_field.name(cs_action ):=set_message('FTE','FTE_SAB_ACTION_CODE');
1007 g_field.requried(cs_action ):='Y';
1008 g_field.max_size(cs_action ):=30;
1009 g_field.supplied(cs_action ):='N';
1010 
1011 IF l_debug_on THEN
1012     WSH_DEBUG_SV.pop(l_module_name);
1013 END IF;
1014 EXCEPTION
1015 WHEN OTHERS THEN
1016     IF l_debug_on THEN
1017        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1018 Oracle error message is '||
1019 
1020 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1021        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1022     END IF;
1023 
1024      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1025      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1026      fnd_msg_pub.add;
1027 
1028     raise ;
1029 END Init_Supplier_Validation;
1030 
1031 
1032 -- Start of comments
1033 -- API name : Find_Miss_Column
1034 -- Type     : Private
1035 -- Pre-reqs : None.
1036 -- Function : API to determine if any of column is missed in routing request/supplier address book file.
1037 --            Api does
1038 --            1.Determine the start and end index of global validation(g_field) table
1039 --              based on level to find the missing column.
1040 --            2.Loop through all the columns of level, if not supplied and mandatory field then error.
1041 -- Parameters :
1042 -- IN:
1043 --      p_level  IN   Level number of routing request/supplier address book file.
1044 --                    For Routing request File  1:Hedaer 2:Delivery and 3:Line
1045 --                    For Supplier Address Book 11:Address Line
1046 -- OUT:
1047 --      Function returns boolean.
1048 -- End of comments
1049 FUNCTION Find_Miss_Column(p_level	number) RETURN boolean IS
1050 
1051 l_debug_on BOOLEAN;
1052 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
1053 'Find_Miss_Column';
1054 
1055 l_find_miss_column	boolean:=false;
1056 l_start_index		number;
1057 l_end_index		number;
1058 
1059 BEGIN
1060 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1061 IF l_debug_on IS NULL THEN
1062     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1063 END IF;
1064 
1065 IF l_debug_on THEN
1066     WSH_DEBUG_SV.push(l_module_name);
1067     WSH_DEBUG_SV.log(l_module_name,'p_level',p_level);
1068 END IF;
1069 
1070 --Determine the start and end index of global validation(g_field) table based on level to find the missing column.
1071 IF (p_level=1 ) THEN
1072     --Starting column of header
1073     l_start_index := c_Supplier_name;
1074     --End column of header
1075     l_end_index := c_request_revision;
1076 ELSIF (p_level = 2 ) THEN
1077     --Starting column of delivery
1078     l_start_index := c_ship_from_add1;
1079     --End column of delivery
1080     l_end_index := c_remark;
1081 ELSIF (p_level = 3 ) THEN
1082     --Starting column of line
1083     l_start_index := c_po_header_number;
1084     --End column of line.
1085     l_end_index := c_latest_pickup_date;
1086 ELSIF (p_level = 11 ) THEN
1087     --Starting column of address line.
1088     l_start_index := cs_supplier_name;
1089     --End column of address line.
1090     l_end_index := cs_action;
1091 END IF;
1092 
1093 
1094 IF l_debug_on THEN
1095     WSH_DEBUG_SV.log(l_module_name,'l_start_index',l_start_index);
1096     WSH_DEBUG_SV.log(l_module_name,'l_end_index',l_end_index);
1097 END IF;
1098 
1099 --Loop through all the columns of level,
1100 --error if not supplied and mandatory field.
1101 FOR i IN l_start_index..l_end_index LOOP
1102     IF (g_field.supplied(i) = 'N') THEN
1103 
1104       IF l_debug_on THEN
1105          WSH_DEBUG_SV.log(l_module_name,'Missing Column',g_field.name(i));
1106       END IF;
1107 
1108       IF (g_field.requried(i) = 'Y' ) THEN
1109           l_find_miss_column:= true;
1110           FND_MESSAGE.SET_NAME('WSH','WSH_RR_MISS_COLUMN');
1111           FND_MESSAGE.SET_TOKEN('COL_NAME',g_field.name(i));
1112           FND_MESSAGE.SET_TOKEN('LINE_NUMBER',g_file_line_number);
1113           fnd_msg_pub.add;
1114       END IF;
1115     END IF;
1116 
1117     g_field.supplied(i):= 'N';
1118 END LOOP;
1119 
1120 IF l_debug_on THEN
1121     WSH_DEBUG_SV.pop(l_module_name);
1122 END IF;
1123 RETURN l_find_miss_column;
1124 
1125 EXCEPTION
1126 WHEN OTHERS THEN
1127     IF l_debug_on THEN
1128        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1129 Oracle error message is '||
1130 
1131 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1132        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1133     END IF;
1134      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1135      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1136      fnd_msg_pub.add;
1137 
1138     raise;
1139 END Find_Miss_Column;
1140 
1141 
1142 -- Start of comments
1143 -- API name : Is_field_valid
1144 -- Type     : Private
1145 -- Pre-reqs : None.
1146 -- Function : API to determine if Routing Request/Supplier Address Book field satisfied all
1147 --            the required validation as defined in tractions type meta data.
1148 --
1149 -- Parameters :
1150 -- IN:
1151 --      p_index  	IN   Index of global record g_field, where validation are defined.
1152 --      p_field_value  	IN   Input value of field.
1153 -- OUT:
1154 --      Function returns boolean.
1155 -- End of comments
1156 FUNCTION Is_field_valid(p_index		NUMBER,
1157 		     p_field_value	varchar2) RETURN boolean IS
1158 
1159 l_debug_on BOOLEAN;
1160 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
1161 'Is_field_valid';
1162 l_status	boolean := true;
1163 --vendor merge changes
1164 l_field_value VARCHAR2(32767);
1165 l_position    NUMBER;
1166 l_tmp_value VARCHAR2(32767);
1167 l_dummy NUMBER;
1168 --
1169 
1170 BEGIN
1171 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1172 IF l_debug_on IS NULL THEN
1173     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1174 END IF;
1175 
1176 IF l_debug_on THEN
1177     WSH_DEBUG_SV.push(l_module_name);
1178     WSH_DEBUG_SV.log(l_module_name,'p_index',p_index);
1179     WSH_DEBUG_SV.log(l_module_name,'p_field_value',p_field_value);
1180     WSH_DEBUG_SV.log(l_module_name,'p_field_value size',length(p_field_value));
1181 END IF;
1182 
1183 --This field is part of Routing Request /Supplier Address Book file.
1184 g_field.supplied(p_index):='Y';
1185 
1186 --Required and not null field.
1187 IF (nvl(g_field.requried(p_index),'N') = 'Y' and p_field_value IS NULL )
1188 THEN
1189     FND_MESSAGE.SET_NAME('WSH','WSH_RR_REQUIRED_FIELD_NULL');
1190     FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(p_index));
1191     FND_MESSAGE.SET_TOKEN('LINE_NUMBER',g_file_line_number);
1192     fnd_msg_pub.add;
1193 
1194     l_status := false;
1195 END IF;
1196 --vendor merge changes {
1197 l_field_value := p_field_value;
1198 
1199 IF p_index IN ( c_request_number, c_ship_from_code )
1200 AND (length(l_field_value) > g_field.max_size(p_index) )
1201 THEN
1202 --{
1203     l_position := INSTRB(l_field_value,'-VM',-1);
1204 
1205     IF l_position > 0
1206     THEN
1207     --{
1208 	--
1209         l_tmp_value   := SUBSTRB(l_field_value,l_position);
1210 	--
1211 	IF  SUBSTRB(l_tmp_value,1,1) = '-'
1212 	AND SUBSTRB(l_tmp_value,2,1) = 'V'
1213 	AND SUBSTRB(l_tmp_value,3,1) = 'M'
1214 	THEN
1215 	    l_field_value := SUBSTRB(l_field_value,1,l_position-1);
1216 	    BEGIN
1217 		--
1218 	        l_dummy := to_number( SUBSTRB(l_tmp_value,4) );
1219 		--
1220 		IF length(l_dummy) <> 3
1221 		THEN
1222 		   l_field_value := p_field_value;
1223 		END IF;
1224             EXCEPTION
1225 	        WHEN OTHERS THEN
1226 		   l_field_value := p_field_value;
1227 	    END;
1228 	END IF;
1229     --}
1230     END IF;
1231 --}
1232 END IF;
1233 --vendor merge changes }
1234 --Field excide max size.
1235 --This check is not required for date field,
1236 --where g_field.max_size(p_index) will be null
1237 IF ( g_field.max_size(p_index) IS NOT NULL
1238       AND (length(l_field_value) > g_field.max_size(p_index)) ) THEN
1239 
1240     FND_MESSAGE.SET_NAME('WSH','WSH_RR_EXC_SIZE');
1241     FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(p_index));
1242     FND_MESSAGE.SET_TOKEN('LINE_NUMBER',g_file_line_number);
1243     fnd_msg_pub.add;
1244 
1245     l_status := false;
1246 END IF;
1247 
1248 
1249 
1250 IF l_debug_on THEN
1251 
1252     WSH_DEBUG_SV.log(l_module_name,'l_field_value',l_field_value);
1253     IF l_status THEN
1254        WSH_DEBUG_SV.logmsg(l_module_name,'Field Valid TRUE');
1255     ELSE
1256        WSH_DEBUG_SV.logmsg(l_module_name,'Field Valid FALSE');
1257     END IF;
1258 
1259     WSH_DEBUG_SV.pop(l_module_name);
1260 END IF;
1261 
1262 RETURN l_status;
1263 EXCEPTION
1264 WHEN OTHERS THEN
1265     IF l_debug_on THEN
1266        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1267 Oracle error message is '||
1268 
1269 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1270        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1271     END IF;
1272      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1273      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1274      fnd_msg_pub.add;
1275 
1276     RETURN false;
1277 END Is_field_valid;
1278 
1279 
1280 -- Start of comments
1281 -- API name : Process_Address_Line
1282 -- Type     : Private
1283 -- Pre-reqs : None.
1284 -- Procedure : API to create address line record. Api does
1285 --            1.Column name of field is reference against validation meta
1286 --              data.
1287 --            2.Call api Is_field_valid to validated a field.
1288 --            3.Assign validate field to address line record.
1289 --
1290 -- Parameters :
1291 -- IN:
1292 --      p_col_name   IN  Column Name of field.
1293 --      p_col_value  IN  Value of field.
1294 --      p_index      IN  Index of global record g_field, where validation are defined.
1295 --      p_address    IN  Record of type Address_Rec_Type to hold address line information.
1296 -- OUT:
1297 --      x_return_status OUT NOCOPY      Standard to output api status.
1298 -- End of comments
1299 PROCEDURE Process_Address_Line(
1300         p_col_name   	IN  varchar2,
1301         p_col_value	IN  varchar2,
1302 	p_index		IN  number,
1303         p_address   	IN  OUT NOCOPY  Address_Rec_Type,
1304         x_return_status OUT NOCOPY      varchar2) IS
1305 
1306 l_debug_on BOOLEAN;
1307 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
1308 'Process_Address_Line';
1309 
1310 l_error	boolean:=false;
1311 BEGIN
1312 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1313 IF l_debug_on IS NULL THEN
1314     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1315 END IF;
1316 
1317 IF l_debug_on THEN
1318     WSH_DEBUG_SV.push(l_module_name);
1319 END IF;
1320 
1321 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1322 
1323 IF (p_col_name = g_field.name(cs_supplier_name) ) THEN
1324     IF (Is_field_valid(cs_supplier_name,p_col_value))THEN
1325        p_address.supplier_name(p_index):= p_col_value;
1326     ELSE
1327        l_error:=true;
1328     END IF;
1329 END IF;
1330 
1331 IF (p_col_name = g_field.name(cs_ship_from_add1) ) THEN
1332     IF (Is_field_valid(cs_ship_from_add1,p_col_value))THEN
1333        p_address.ship_from_address1(p_index):= p_col_value;
1334     ELSE
1335        l_error:=true;
1336     END IF;
1337 END IF;
1338 
1339 IF (p_col_name = g_field.name(cs_ship_from_add2) ) THEN
1340     IF (Is_field_valid(cs_ship_from_add2,p_col_value))THEN
1341        p_address.ship_from_address2(p_index):= p_col_value;
1342     ELSE
1343        l_error:=true;
1344     END IF;
1345 END IF;
1346 
1347 IF (p_col_name = g_field.name(cs_ship_from_add3) ) THEN
1348     IF (Is_field_valid(cs_ship_from_add3,p_col_value))THEN
1349        p_address.ship_from_address3(p_index):= p_col_value;
1350     ELSE
1351        l_error:=true;
1352     END IF;
1353 END IF;
1354 
1355 IF (p_col_name = g_field.name(cs_ship_from_add4 )) THEN
1356     IF (Is_field_valid(cs_ship_from_add4,p_col_value))THEN
1357        p_address.ship_from_address4(p_index):= p_col_value;
1358     ELSE
1359        l_error:=true;
1360     END IF;
1361 END IF;
1362 
1363 IF (p_col_name = g_field.name(cs_Ship_From_city )) THEN
1364     IF (Is_field_valid(cs_Ship_From_city,p_col_value))THEN
1365        p_address.Ship_From_city(p_index):= p_col_value;
1366     ELSE
1367        l_error:=true;
1368     END IF;
1369 END IF;
1370 
1371 IF (p_col_name = g_field.name(cs_Ship_From_state)) THEN
1372     IF (Is_field_valid(cs_Ship_From_state,p_col_value))THEN
1373        p_address.Ship_From_state(p_index):= p_col_value;
1374     ELSE
1375        l_error:=true;
1376     END IF;
1377 END IF;
1378 
1379 IF (p_col_name = g_field.name(cs_Ship_From_county)) THEN
1380     IF (Is_field_valid(cs_Ship_From_county,p_col_value))THEN
1381        p_address.Ship_From_county(p_index):= p_col_value;
1382     ELSE
1383        l_error:=true;
1384     END IF;
1385 END IF;
1386 
1387 IF (p_col_name = g_field.name(cs_Ship_From_country)) THEN
1388     IF (Is_field_valid(cs_Ship_From_country,p_col_value))THEN
1389        p_address.Ship_From_country(p_index):= p_col_value;
1390     ELSE
1391        l_error:=true;
1392     END IF;
1393 END IF;
1394 
1395 IF (p_col_name = g_field.name(cs_Ship_From_province)) THEN
1396     IF (Is_field_valid(cs_Ship_From_province,p_col_value))THEN
1397        p_address.Ship_From_province(p_index):= p_col_value;
1398     ELSE
1399        l_error:=true;
1400     END IF;
1401 END IF;
1402 
1403 IF (p_col_name = g_field.name(cs_Ship_From_postal_code)) THEN
1404     IF (Is_field_valid(cs_Ship_From_postal_code,p_col_value))THEN
1405        p_address.Ship_From_postal_code(p_index):= p_col_value;
1406     ELSE
1407        l_error:=true;
1408     END IF;
1409 END IF;
1410 
1411 IF (p_col_name = g_field.name(cs_Ship_From_code)) THEN
1412     IF (Is_field_valid(cs_Ship_From_code,p_col_value))THEN
1413        p_address.Ship_From_code(p_index):= p_col_value;
1414     ELSE
1415        l_error:=true;
1416     END IF;
1417 END IF;
1418 
1419 IF (p_col_name = g_field.name(cs_shipper_name)) THEN
1420     IF (Is_field_valid(cs_shipper_name,p_col_value))THEN
1421        p_address.shipper_name(p_index):= p_col_value;
1422     ELSE
1423        l_error:=true;
1424     END IF;
1425 END IF;
1426 
1427 IF (p_col_name = g_field.name(cs_phone)) THEN
1428     IF (Is_field_valid(cs_phone,p_col_value))THEN
1429        p_address.phone(p_index):= p_col_value;
1430     ELSE
1431        l_error:=true;
1432     END IF;
1433 END IF;
1434 
1435 IF (p_col_name = g_field.name(cs_email)) THEN
1436     IF (Is_field_valid(cs_email,p_col_value))THEN
1437        p_address.email(p_index):= p_col_value;
1438     ELSE
1439        l_error:=true;
1440     END IF;
1441 END IF;
1442 
1443 IF (p_col_name = g_field.name(cs_action)) THEN
1444     IF (Is_field_valid(cs_action,p_col_value))THEN
1445        p_address.action(p_index):= p_col_value;
1446     ELSE
1447        l_error:=true;
1448     END IF;
1449 END IF;
1450 
1451 IF (l_error) THEN
1452     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1453 END IF;
1454 
1455 IF l_debug_on THEN
1456     WSH_DEBUG_SV.pop(l_module_name);
1457 END IF;
1458 EXCEPTION
1459 WHEN OTHERS THEN
1460     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1461 
1462     IF l_debug_on THEN
1463        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1464 Oracle error message is '||
1465 
1466 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1467        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1468     END IF;
1469 
1470     FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INVALID_FIELD');
1471     FND_MESSAGE.SET_TOKEN('FIELD_NAME', p_col_name);
1472     FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_index);
1473     fnd_msg_pub.add;
1474 
1475      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1476      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1477      fnd_msg_pub.add;
1478 
1479 
1480 END Process_Address_Line;
1481 
1482 
1483 
1484 -- Start of comments
1485 -- API name : Process_Address_File
1486 -- Type     : Private
1487 -- Pre-reqs : None.
1488 -- Procedure : API to create address line record from input of Supplier Address
1489 --             book record as passed by UI. Api does.
1490 --            1.Create blank address record of type Address_Rec_Type.
1491 --            2.Loop through address record as pass by Supplier address book UI.
1492 --            3.Validate and assign field value to type Address_Rec_Type.
1493 --            4.Scan through record created to find missing column.
1494 --            5.Check if not all the records have errors..
1495 --            6.Finally call api WSH_SUPPLIER_PARTY.Process_Address to process
1496 --              address book records.
1497 -- Parameters :
1498 -- IN:
1499 --      p_in_param   	IN  Hold additional parameter passed by UI.
1500 --      p_file_fields   IN  Hold Supplier Address book record as passed by UI
1501 -- OUT:
1502 --      x_message_tbl   OUT NOCOPY List of Success/Error messages passed back to UI for display.
1503 --      x_return_status OUT NOCOPY      Standard to output api status.
1504 -- End of comments
1505 PROCEDURE Process_Address_File(
1506         p_in_param	IN In_Param_Rec_Type,
1507         p_file_fields   IN WSH_FILE_RECORD_TYPE ,
1508         x_message_tbl   OUT  NOCOPY  WSH_FILE_MSG_TABLE,
1509         x_return_status OUT NOCOPY      varchar2) IS
1510 
1511 l_debug_on BOOLEAN;
1512 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Address_File';
1513 l_return_status	varchar2(1);
1514 l_index	number;
1515 l_hi	number;
1516 l_debugfile	varchar2(2000);
1517 l_msg_count 	number:=0;
1518 l_error_count	number:=0;
1519 l_last_index	number;
1520 
1521 l_prev_line_number	number;
1522 l_Address		Address_Rec_Type;
1523 
1524 BEGIN
1525 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1526 IF l_debug_on IS NULL THEN
1527     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1528 END IF;
1529 
1530 IF l_debug_on THEN
1531     WSH_DEBUG_SV.push(l_module_name);
1532 
1533 WSH_DEBUG_SV.log(l_module_name,'p_file_fields.level_number.count',p_file_fields.level_number.count);
1534 END IF;
1535 
1536 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1537 
1538 --Initilized message and validation meta data.
1539 x_message_tbl := WSH_FILE_MSG_TABLE();
1540 g_error_tbl.delete;
1541 Init_Supplier_Validation;
1542 
1543 l_last_index :=p_file_fields.level_number.last;
1544 l_index := p_file_fields.level_number.first;
1545 l_prev_line_number:= p_file_fields.file_line_number(l_index);
1546 
1547 --Create blank address record.
1548 Create_Address_Record(p_address   =>l_address,
1549                p_index          =>l_prev_line_number,
1550                x_return_status  =>l_return_status);
1551 
1552 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1553    raise FND_API.G_EXC_ERROR;
1554 END IF;
1555 
1556 WHILE (l_index IS NOT NULL ) LOOP --{
1557    g_file_line_number := p_file_fields.file_line_number(l_index);
1558 
1559    --Create new record only ,when line number change.
1560    IF ( l_prev_line_number <> g_file_line_number ) THEN
1561 
1562       Create_Address_Record(p_address   =>l_address,
1563                p_index          =>g_file_line_number,
1564                x_return_status  =>l_return_status);
1565 
1566       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1567         raise FND_API.G_EXC_ERROR;
1568       END IF;
1569 
1570       --Find the mandatory missing columns.
1571       IF (Find_Miss_Column(11) ) THEN
1572               l_Address.error_flag(l_prev_line_number):='Y';
1573       END IF;
1574    END IF;
1575 
1576    --Validate and assign field value to address record created.
1577    Process_Address_Line(
1578         p_col_name	=> p_file_fields.col_name(l_index),
1579         p_col_value   	=> ltrim(rtrim(p_file_fields.col_value(l_index))),
1580         p_index         => p_file_fields.file_line_number(l_index),
1581         p_Address       => l_Address,
1582         x_return_status => l_return_status);
1583 
1584       IF l_debug_on THEN
1585          WSH_DEBUG_SV.log(l_module_name,'Process_Address
1586 l_return_status',l_return_status);
1587       END IF;
1588 
1589       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
1590          l_address.error_flag(g_file_line_number):='Y';
1591       END IF;
1592 
1593 
1594      l_prev_line_number:= g_file_line_number;
1595 
1596 l_index :=p_file_fields.level_number.next(l_index);
1597 END LOOP; --}
1598 
1599 --Find the mandatory missing columns.
1600 IF (Find_Miss_Column(11) ) THEN
1601     l_Address.error_flag(l_prev_line_number):='Y';
1602 END IF;
1603 
1604 
1605 IF l_debug_on THEN
1606     WSH_DEBUG_SV.logmsg(l_module_name,'***************************');
1607     WSH_DEBUG_SV.logmsg(l_module_name,'Printing Address');
1608 END IF;
1609 
1610 
1611 l_hi := l_Address.Supplier_name.first;
1612 WHILE (l_hi IS NOT NULL ) LOOP
1613     IF l_debug_on THEN
1614       WSH_DEBUG_SV.log(l_module_name,'Index',l_hi);
1615 
1616 WSH_DEBUG_SV.log(l_module_name,'Supplier_name',l_Address.Supplier_name(l_hi));
1617       WSH_DEBUG_SV.log(l_module_name,'P_address1',
1618 l_Address.ship_from_address1(l_hi));
1619       WSH_DEBUG_SV.log(l_module_name,'P_address2',
1620 l_Address.ship_from_address2(l_hi));
1621       WSH_DEBUG_SV.log(l_module_name,'P_address3',
1622 l_Address.ship_from_address3(l_hi));
1623       WSH_DEBUG_SV.log(l_module_name,'P_address4',
1624 l_Address.ship_from_address4(l_hi));
1625 
1626 WSH_DEBUG_SV.log(l_module_name,'P_city',l_Address.ship_from_city(l_hi));
1627 
1628 WSH_DEBUG_SV.log(l_module_name,'P_postal_code',l_Address.ship_from_postal_code(l_hi));
1629 
1630 WSH_DEBUG_SV.log(l_module_name,'P_state',l_Address.ship_from_state(l_hi));
1631 
1632 WSH_DEBUG_SV.log(l_module_name,'P_province',l_Address.ship_from_province(l_hi));
1633 
1634 WSH_DEBUG_SV.log(l_module_name,'P_county',l_Address.ship_from_county(l_hi));
1635       WSH_DEBUG_SV.log(l_module_name,'p_country',
1636 l_Address.ship_from_country(l_hi));
1637 
1638 WSH_DEBUG_SV.log(l_module_name,'p_shipper_name',l_Address.shipper_name(l_hi));
1639       WSH_DEBUG_SV.log(l_module_name,'p_phone',l_Address.phone(l_hi));
1640       WSH_DEBUG_SV.log(l_module_name,'p_email',l_Address.email(l_hi));
1641       wSH_DEBUG_SV.log(l_module_name,'p_action',l_Address.action(l_hi));
1642 
1643 WSH_DEBUG_SV.log(l_module_name,'Error_flag',l_Address.error_flag(l_hi));
1644     END IF;
1645 
1646 l_hi :=l_Address.Supplier_name.next(l_hi);
1647 END LOOP;
1648 
1649 
1650 --Check if not all the lines have errors.
1651 Is_All_Line_Error(p_error_tbl		=>l_Address.error_flag,
1652 		   x_return_status	=> x_return_status);
1653 
1654 
1655 IF l_debug_on THEN
1656    WSH_DEBUG_SV.log(l_module_name,'Is_All_Line_Error
1657 x_return_status',x_return_status);
1658 END IF;
1659 
1660 IF (x_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
1661 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) ) THEN
1662     --Process the Supplier address book information.
1663     WSH_SUPPLIER_PARTY.Process_Address(
1664         p_in_param     => p_in_param,
1665         p_Address      => l_Address,
1666         x_success_tbl  => x_message_tbl,
1667         x_error_tbl  => g_error_tbl,
1668         x_return_status=> x_return_status);
1669 
1670     IF l_debug_on THEN
1671        WSH_DEBUG_SV.log(l_module_name,'Process_Address
1672 x_return_status',x_return_status);
1673     END IF;
1674 END IF;
1675 
1676   --Merge Message from fnd message stack and global message table
1677   --to output message table.
1678 get_message;
1679 l_msg_count:= x_message_tbl.count;
1680 
1681 l_index := g_error_tbl.first;
1682 WHILE (l_index IS NOT NULL) LOOP
1683      l_msg_count:= l_msg_count + 1;
1684      x_message_tbl.extend;
1685      x_message_tbl(l_msg_count):= g_error_tbl(l_index);
1686 
1687 l_index := g_error_tbl.next(l_index);
1688 END LOOP;
1689 
1690 --Insert as message Debug information if debugger is on
1691 IF l_debug_on THEN
1692     fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',l_debugfile);
1693     l_debugfile := l_debugfile||'/'||WSH_DEBUG_SV.g_file;
1694 
1695     FND_MESSAGE.SET_NAME('WSH','WSH_DEBUG_FILE_NAME');
1696     FND_MESSAGE.SET_TOKEN('DEBUG_FILE_NAME',l_debugfile);
1697 
1698     l_msg_count:= l_msg_count + 1;
1699     x_message_tbl.extend;
1700     x_message_tbl(l_msg_count):= FND_MESSAGE.GET;
1701 END IF;
1702 
1703 
1704 IF l_debug_on THEN
1705     WSH_DEBUG_SV.pop(l_module_name);
1706 END IF;
1707 EXCEPTION
1708 WHEN FND_API.G_EXC_ERROR THEN
1709      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
1710 
1711      IF l_debug_on THEN
1712       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
1713 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
1714       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
1715      END IF;
1716 
1717 WHEN OTHERS THEN
1718     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1719 
1720     IF l_debug_on THEN
1721        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1722 Oracle error message is '||
1723 
1724 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1725        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1726     END IF;
1727      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1728      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1729      l_msg_count:= l_msg_count + 1;
1730      x_message_tbl.extend;
1731      x_message_tbl(l_msg_count):= FND_MESSAGE.GET;
1732 
1733 END Process_Address_File;
1734 
1735 
1736 -- Start of comments
1737 -- API name : Process_line
1738 -- Type     : Private
1739 -- Pre-reqs : None.
1740 -- Procedure : API to create routing request line record.
1741 --            1.Column name of field is reference against validation meta
1742 --              data.
1743 --            2.Call api Is_field_valid to validated a field.
1744 --            3.Assign validate field to routing request line record.
1745 --
1746 -- Parameters :
1747 -- IN:
1748 --      p_col_name   IN  Column Name of field.
1749 --      p_col_value  IN  Value of field.
1750 --      p_index      IN  Index of global record g_field, where validation are defined.
1751 --      p_address    IN  Record of type Line_Rec_Type to hold routing request line information.
1752 -- OUT:
1753 --      x_return_status OUT NOCOPY      Standard to output api status.
1754 -- End of comments
1755 PROCEDURE Process_Line(
1756         p_col_name   	IN  varchar2,
1757         p_col_value	IN  varchar2,
1758 	p_index		IN  number,
1759         p_Line   	IN  OUT NOCOPY  Line_Rec_Type,
1760         x_return_status OUT NOCOPY      varchar2) IS
1761 
1762 l_debug_on BOOLEAN;
1763 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Line';
1764 
1765 l_error	boolean:=false;
1766 BEGIN
1767 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1768 IF l_debug_on IS NULL THEN
1769     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1770 END IF;
1771 
1772 IF l_debug_on THEN
1773     WSH_DEBUG_SV.push(l_module_name);
1774     WSH_DEBUG_SV.log(l_module_name,'p_col_name',p_col_name);
1775 END IF;
1776 
1777 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1778 
1779 IF (p_col_name = g_field.name(c_po_header_number) ) THEN
1780     IF (Is_field_valid(c_po_header_number,p_col_value)) THEN
1781        p_line.po_header_number(p_index):= p_col_value;
1782     ELSE
1783        l_error:=true;
1784     END IF;
1785 END IF;
1786 
1787 IF (p_col_name = g_field.name(c_Po_Release_number) ) THEN
1788     IF (Is_field_valid(c_Po_Release_number,p_col_value)) THEN
1789        p_line.Po_Release_number(p_index):= p_col_value;
1790     ELSE
1791        l_error:=true;
1792     END IF;
1793 END IF;
1794 
1795 IF (p_col_name = g_field.name(c_PO_Line_number) ) THEN
1796     IF (Is_field_valid(c_PO_Line_number,p_col_value)) THEN
1797        p_line.PO_Line_number(p_index):= p_col_value;
1798     ELSE
1799        l_error:=true;
1800     END IF;
1801 END IF;
1802 
1803 IF (p_col_name = g_field.name(c_PO_Shipment_number) ) THEN
1804     IF (Is_field_valid(c_PO_Shipment_number,p_col_value)) THEN
1805        p_line.PO_Shipment_number(p_index):= p_col_value;
1806     ELSE
1807        l_error:=true;
1808     END IF;
1809 END IF;
1810 
1811 IF (p_col_name = g_field.name(c_Po_Operating_unit) ) THEN
1812     IF (Is_field_valid(c_Po_Operating_unit,p_col_value)) THEN
1813        p_line.Po_Operating_unit(p_index):= p_col_value;
1814     ELSE
1815        l_error:=true;
1816     END IF;
1817 END IF;
1818 
1819 
1820 IF (p_col_name = g_field.name(c_item_qty) ) THEN
1821     IF (Is_field_valid(c_item_qty,p_col_value)) THEN
1822        p_line.Item_quantity(p_index):= p_col_value;
1823     ELSE
1824        l_error:=true;
1825     END IF;
1826 END IF;
1827 
1828 IF (p_col_name = g_field.name(c_Item_uom) ) THEN
1829     IF (Is_field_valid(c_Item_uom,p_col_value)) THEN
1830        p_line.Item_uom(p_index):= p_col_value;
1831     ELSE
1832        l_error:=true;
1833     END IF;
1834 END IF;
1835 
1836 IF (p_col_name = g_field.name(c_total_weight) ) THEN
1837     IF (Is_field_valid(c_total_weight,p_col_value)) THEN
1838        p_line.weight(p_index):= p_col_value;
1839     ELSE
1840        l_error:=true;
1841     END IF;
1842 END IF;
1843 
1844 IF (p_col_name = g_field.name(c_Weight_uom) ) THEN
1845     IF (Is_field_valid(c_Weight_uom,p_col_value)) THEN
1846        p_line.Weight_uom(p_index):= p_col_value;
1847     ELSE
1848        l_error:=true;
1849     END IF;
1850 END IF;
1851 
1852 IF (p_col_name = g_field.name(c_total_volume) ) THEN
1853     IF (Is_field_valid(c_total_volume,p_col_value)) THEN
1854        p_line.volume(p_index):= p_col_value;
1855     ELSE
1856        l_error:=true;
1857     END IF;
1858 END IF;
1859 
1860 IF (p_col_name = g_field.name(c_volume_uom) ) THEN
1861     IF (Is_field_valid(c_volume_uom,p_col_value)) THEN
1862        p_line.volume_uom(p_index):= p_col_value;
1863     ELSE
1864        l_error:=true;
1865     END IF;
1866 END IF;
1867 
1868 
1869 IF (p_col_name = g_field.name(c_earliest_pickup_date) ) THEN
1870     IF (Is_field_valid(c_earliest_pickup_date,p_col_value)) THEN
1871        p_line.earliest_pickup_date(p_index):=
1872 to_date(p_col_value,g_date_format);
1873     ELSE
1874        l_error:=true;
1875     END IF;
1876 END IF;
1877 
1878 IF (p_col_name = g_field.name(c_Latest_pickup_date) ) THEN
1879     IF (Is_field_valid(c_Latest_pickup_date,p_col_value)) THEN
1880        p_line.Latest_pickup_date(p_index):=
1881 to_date(p_col_value,g_date_format);
1882     ELSE
1883        l_error:=true;
1884     END IF;
1885 END IF;
1886 
1887 IF (l_error) THEN
1888     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
1889 END IF;
1890 
1891 IF l_debug_on THEN
1892     WSH_DEBUG_SV.pop(l_module_name);
1893 END IF;
1894 EXCEPTION
1895 WHEN OTHERS THEN
1896     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
1897 
1898     IF l_debug_on THEN
1899        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
1900 Oracle error message is '||
1901 
1902 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
1903        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
1904     END IF;
1905     FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INVALID_FIELD');
1906     FND_MESSAGE.SET_TOKEN('FIELD_NAME', p_col_name);
1907     FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_index);
1908      fnd_msg_pub.add;
1909 
1910      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
1911      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
1912      fnd_msg_pub.add;
1913 
1914 
1915 END Process_Line;
1916 
1917 
1918 
1919 -- Start of comments
1920 -- API name : Process_Delivery
1921 -- Type     : Private
1922 -- Pre-reqs : None.
1923 -- Procedure : API to create routing request delivery record.
1924 --            1.Column name of field is reference against validation meta
1925 --              data.
1926 --            2.Call api Is_field_valid to validated a field.
1927 --            3.Assign validate field to routing request delivery record.
1928 -- Parameters :
1929 -- IN:
1930 --      p_col_name   IN  Column Name of field.
1931 --      p_col_value  IN  Value of field.
1932 --      p_index      IN  Index of global record g_field, where validation are defined.
1933 --      p_address    IN  Record of type Delivery_Rec_Type to hold routing request delivery information.
1934 -- OUT:
1935 --      x_return_status OUT NOCOPY      Standard to output api status.
1936 -- End of comments
1937 PROCEDURE Process_Delivery(
1938         p_col_name   	IN  varchar2,
1939         p_col_value	IN  varchar2,
1940 	  p_index		IN  number,
1941         p_Delivery   	IN  OUT NOCOPY  Delivery_Rec_Type,
1942         x_return_status OUT NOCOPY      varchar2) IS
1943 
1944 l_debug_on BOOLEAN;
1945 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Delivery';
1946 
1947 l_error	boolean:=false;
1948 BEGIN
1949 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
1950 IF l_debug_on IS NULL THEN
1951     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
1952 END IF;
1953 
1954 IF l_debug_on THEN
1955     WSH_DEBUG_SV.push(l_module_name);
1956 END IF;
1957 
1958 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
1959 
1960 IF (p_col_name = g_field.name(c_ship_from_add1) ) THEN
1961     IF (Is_field_valid(c_ship_from_add1,p_col_value))THEN
1962        p_Delivery.ship_from_address1(p_index):= p_col_value;
1963     ELSE
1964        l_error:=true;
1965     END IF;
1966 END IF;
1967 
1968 IF (p_col_name = g_field.name(c_ship_from_add2) ) THEN
1969     IF (Is_field_valid(c_ship_from_add2,p_col_value))THEN
1970        p_Delivery.ship_from_address2(p_index):= p_col_value;
1971     ELSE
1972        l_error:=true;
1973     END IF;
1974 END IF;
1975 
1976 IF (p_col_name = g_field.name(c_ship_from_add3) ) THEN
1977     IF (Is_field_valid(c_ship_from_add3,p_col_value))THEN
1978        p_Delivery.ship_from_address3(p_index):= p_col_value;
1979     ELSE
1980        l_error:=true;
1981     END IF;
1982 END IF;
1983 
1984 IF (p_col_name = g_field.name(c_ship_from_add4 )) THEN
1985     IF (Is_field_valid(c_ship_from_add4,p_col_value))THEN
1986        p_Delivery.ship_from_address4(p_index):= p_col_value;
1987     ELSE
1988        l_error:=true;
1989     END IF;
1990 END IF;
1991 
1992 IF (p_col_name = g_field.name(c_Ship_From_city )) THEN
1993     IF (Is_field_valid(c_Ship_From_city,p_col_value))THEN
1994        p_Delivery.Ship_From_city(p_index):= p_col_value;
1995     ELSE
1996        l_error:=true;
1997     END IF;
1998 END IF;
1999 
2000 IF (p_col_name = g_field.name(c_Ship_From_state)) THEN
2001     IF (Is_field_valid(c_Ship_From_state,p_col_value))THEN
2002        p_Delivery.Ship_From_state(p_index):= p_col_value;
2003     ELSE
2004        l_error:=true;
2005     END IF;
2006 END IF;
2007 
2008 IF (p_col_name = g_field.name(c_Ship_From_county)) THEN
2009     IF (Is_field_valid(c_Ship_From_county,p_col_value))THEN
2010        p_Delivery.Ship_From_county(p_index):= p_col_value;
2011     ELSE
2012        l_error:=true;
2013     END IF;
2014 END IF;
2015 
2016 IF (p_col_name = g_field.name(c_Ship_From_country)) THEN
2017     IF (Is_field_valid(c_Ship_From_country,p_col_value))THEN
2018        p_Delivery.Ship_From_country(p_index):= p_col_value;
2019     ELSE
2020        l_error:=true;
2021     END IF;
2022 END IF;
2023 
2024 IF (p_col_name = g_field.name(c_Ship_From_province)) THEN
2025     IF (Is_field_valid(c_Ship_From_province,p_col_value))THEN
2026        p_Delivery.Ship_From_province(p_index):= p_col_value;
2027     ELSE
2028        l_error:=true;
2029     END IF;
2030 END IF;
2031 
2032 IF (p_col_name = g_field.name(c_Ship_From_postal_code)) THEN
2033     IF (Is_field_valid(c_Ship_From_postal_code,p_col_value))THEN
2034        p_Delivery.Ship_From_postal_code(p_index):= p_col_value;
2035     ELSE
2036        l_error:=true;
2037     END IF;
2038 END IF;
2039 
2040 IF (p_col_name = g_field.name(c_Ship_From_code)) THEN
2041     IF (Is_field_valid(c_Ship_From_code,p_col_value))THEN
2042        p_Delivery.Ship_From_code(p_index):= p_col_value;
2043     ELSE
2044        l_error:=true;
2045     END IF;
2046 END IF;
2047 
2048 IF (p_col_name = g_field.name(c_shipper_name)) THEN
2049     IF (Is_field_valid(c_shipper_name,p_col_value))THEN
2050        p_Delivery.shipper_name(p_index):= p_col_value;
2051     ELSE
2052        l_error:=true;
2053     END IF;
2054 END IF;
2055 
2056 IF (p_col_name = g_field.name(c_phone)) THEN
2057     IF (Is_field_valid(c_phone,p_col_value))THEN
2058        p_Delivery.phone(p_index):= p_col_value;
2059     ELSE
2060        l_error:=true;
2061     END IF;
2062 END IF;
2063 
2064 IF (p_col_name = g_field.name(c_email)) THEN
2065     IF (Is_field_valid(c_email,p_col_value))THEN
2066        p_Delivery.email(p_index):= p_col_value;
2067     ELSE
2068        l_error:=true;
2069     END IF;
2070 END IF;
2071 
2072 IF (p_col_name = g_field.name(c_number_of_containers)) THEN
2073     IF (Is_field_valid(c_number_of_containers,p_col_value))THEN
2074        p_Delivery.number_of_containers(p_index):= p_col_value;
2075     ELSE
2076        l_error:=true;
2077     END IF;
2078 END IF;
2079 
2080 IF (p_col_name = g_field.name(c_del_total_weight)) THEN
2081     IF (Is_field_valid(c_del_total_weight,p_col_value))THEN
2082        p_Delivery.total_weight(p_index):= p_col_value;
2083     ELSE
2084        l_error:=true;
2085     END IF;
2086 END IF;
2087 
2088 IF (p_col_name = g_field.name(c_del_weight_uom)) THEN
2089     IF (Is_field_valid(c_del_weight_uom,p_col_value))THEN
2090        p_Delivery.weight_uom(p_index):= p_col_value;
2091     ELSE
2092        l_error:=true;
2093     END IF;
2094 END IF;
2095 
2096 IF (p_col_name = g_field.name(c_del_total_volume)) THEN
2097     IF (Is_field_valid(c_del_total_volume,p_col_value))THEN
2098        p_Delivery.total_volume(p_index):= p_col_value;
2099     ELSE
2100        l_error:=true;
2101     END IF;
2102 END IF;
2103 
2104 IF (p_col_name = g_field.name(c_del_volume_uom)) THEN
2105     IF (Is_field_valid(c_del_volume_uom,p_col_value))THEN
2106        p_Delivery.volume_uom(p_index):= p_col_value;
2107     ELSE
2108        l_error:=true;
2109     END IF;
2110 END IF;
2111 
2112 
2113 IF (p_col_name = g_field.name(c_remark)) THEN
2114     IF (Is_field_valid(c_remark,p_col_value))THEN
2115        p_Delivery.remark(p_index):= p_col_value;
2116     ELSE
2117        l_error:=true;
2118     END IF;
2119 END IF;
2120 
2121 IF (l_error) THEN
2122     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2123 END IF;
2124 
2125 IF l_debug_on THEN
2126     WSH_DEBUG_SV.pop(l_module_name);
2127 END IF;
2128 EXCEPTION
2129 WHEN OTHERS THEN
2130     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2131 
2132     IF l_debug_on THEN
2133        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2134 Oracle error message is '||
2135 
2136 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2137        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2138     END IF;
2139     FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INVALID_FIELD');
2140     FND_MESSAGE.SET_TOKEN('FIELD_NAME', p_col_name);
2141     FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_index);
2142      fnd_msg_pub.add;
2143 
2144      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
2145      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
2146      fnd_msg_pub.add;
2147 
2148 END Process_Delivery;
2149 
2150 
2151 
2152 -- Start of comments
2153 -- API name : Process_Header
2154 -- Type     : Private
2155 -- Pre-reqs : None.
2156 -- Procedure : API to routing request header record.
2157 --            1.Column name of field is reference against validation meta
2158 --              data.
2159 --            2.Call api Is_field_valid to validated a field.
2160 --            3.Assign validate field to routing request header record.
2161 -- Parameters :
2162 -- IN:
2163 --      p_col_name   IN  Column Name of field.
2164 --      p_col_value  IN  Value of field.
2165 --      p_index      IN  Index of global record g_field, where validation are defined.
2166 --      p_address    IN  Record of type Header_Rec_Type to hold routing request header information.
2167 -- OUT:
2168 --      x_return_status OUT NOCOPY      Standard to output api status.
2169 -- End of comments
2170 PROCEDURE Process_Header(
2171         p_col_name   	IN  varchar2,
2172         p_col_value	IN  varchar2,
2173 	p_index		IN  number,
2174         p_header   	IN  OUT NOCOPY  Header_Rec_Type,
2175         x_return_status OUT NOCOPY      varchar2) IS
2176 
2177 l_debug_on BOOLEAN;
2178 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Header';
2179 
2180 l_error	boolean:=false;
2181 BEGIN
2182 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2183 IF l_debug_on IS NULL THEN
2184     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2185 END IF;
2186 
2187 IF l_debug_on THEN
2188     WSH_DEBUG_SV.push(l_module_name);
2189 END IF;
2190 
2191 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2192 
2193 IF (p_col_name = g_field.name(c_Supplier_name)) THEN
2194     IF (Is_field_valid(c_Supplier_name,p_col_value)) THEN
2195        p_header.Supplier_name(p_index):= p_col_value;
2196     ELSE
2197        l_error := true;
2198     END IF;
2199 END IF;
2200 
2201 IF (p_col_name = g_field.name(c_request_date)) THEN
2202     IF (Is_field_valid(c_request_date,p_col_value)) THEN
2203        p_header.Request_date(p_index):=  to_date(p_col_value,g_date_format);
2204     ELSE
2205        l_error := true;
2206     END IF;
2207 END IF;
2208 
2209 IF (p_col_name = g_field.name(c_request_number)) THEN
2210     IF (Is_field_valid(c_request_number,p_col_value)) THEN
2211        p_header.Request_Number(p_index):= p_col_value;
2212     ELSE
2213        l_error := true;
2214     END IF;
2215 END IF;
2216 
2217 IF (p_col_name = g_field.name(c_request_revision)) THEN
2218     IF (Is_field_valid(c_request_revision,p_col_value)) THEN
2219        p_header.request_revision(p_index):= p_col_value;
2220     ELSE
2221        l_error := true;
2222     END IF;
2223 END IF;
2224 
2225 
2226 IF (l_error) THEN
2227     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2228 END IF;
2229 
2230 
2231 IF l_debug_on THEN
2232     WSH_DEBUG_SV.pop(l_module_name);
2233 END IF;
2234 EXCEPTION
2235 WHEN OTHERS THEN
2236     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2237 
2238     IF l_debug_on THEN
2239        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2240 Oracle error message is '||
2241 
2242 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2243        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2244     END IF;
2245     FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INVALID_FIELD');
2246     FND_MESSAGE.SET_TOKEN('FIELD_NAME', p_col_name);
2247     FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_index);
2248      fnd_msg_pub.add;
2249 
2250      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
2251      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
2252      fnd_msg_pub.add;
2253 
2254 END Process_Header;
2255 
2256 
2257 
2258 -- Start of comments
2259 -- API name : Validate_UOM
2260 -- Type     : Public
2261 -- Pre-reqs : None.
2262 -- Procedure: API to validate Unit of Measurement for Quantity,
2263 --            Weight and Volume. Api does.
2264 --           1. For UOM type Quantity calls api wsh_util_validate.Validate_Order_uom for validation.
2265 --           2. For UOM type Weight/Volume calls api wsh_util_validate.validate_uom for validation.
2266 --           3.If Routing request line Quantity UOM is deferent from detail
2267 --           line Quantity UOM, then UOM conversion is done. This is applicable
2268 --           only for Routing Request line validation.
2269 -- Parameters :
2270 -- IN:
2271 --        p_uom_type              IN UOM Type QUANTITY/WEIGHT/VOLUME
2272 --        p_organization_id       IN Organization Id
2273 --        p_rr_uom_code           IN UOM code of Routing Request Line.
2274 --        p_rr_qty                IN Quantity of Routing Request Line.
2275 --        p_inventory_item_id     IN Item Id.
2276 --        p_detail_uom_code       IN UOM code of detail line.
2277 -- OUT:
2278 --      x_convert_qty   OUT NOCOPY      Converted quantity in detail line UOM.
2279 --      x_return_status OUT NOCOPY      Standard to output api status.
2280 -- End of comments
2281 PROCEDURE Validate_UOM(
2282         p_uom_type              IN              VARCHAR2,
2283         p_organization_id       IN              NUMBER,
2284         p_rr_uom_code           IN              VARCHAR2,
2285         p_rr_qty                IN              NUMBER Default NULL,
2286         p_inventory_item_id     IN              NUMBER Default NULL,
2287         p_detail_uom_code       IN              VARCHAR2 Default NULL,
2288         x_convert_qty           OUT NOCOPY      NUMBER,
2289         x_return_status         OUT NOCOPY      VARCHAR2) IS
2290 
2291 l_debug_on BOOLEAN;
2292 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_UOM';
2293 
2294 l_return_status		varchar2(1);
2295 l_rr_uom_code		varchar2(25);
2296 l_primary_uom_code	varchar2(25);
2297 l_num_warnings          number;
2298 l_num_errors            number;
2299 
2300 BEGIN
2301 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2302 IF l_debug_on IS NULL THEN
2303     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2304 END IF;
2305 
2306 IF l_debug_on THEN
2307     WSH_DEBUG_SV.push(l_module_name);
2308     WSH_DEBUG_SV.log(l_module_name,'p_uom_type',p_uom_type);
2309     WSH_DEBUG_SV.log(l_module_name,'p_organization_id',p_organization_id);
2310     WSH_DEBUG_SV.log(l_module_name,'p_detail_uom_code',p_detail_uom_code);
2311     WSH_DEBUG_SV.log(l_module_name,'p_rr_uom_code',p_rr_uom_code);
2312     WSH_DEBUG_SV.log(l_module_name,'p_rr_qty',p_rr_qty);
2313 END IF;
2314 
2315 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2316 
2317 l_rr_uom_code:= p_rr_uom_code;
2318 x_convert_qty := p_rr_qty;
2319 
2320 IF (p_uom_type='QUANTITY') THEN
2321     wsh_util_validate.Validate_Order_uom (
2322          p_inventory_item_id    =>p_inventory_item_id,
2323          p_organization_id	=>p_organization_id,
2324          x_uom_code		=>l_rr_uom_code,
2325          p_unit_of_measure	=>NULL,
2326          x_return_status	=>l_return_status);
2327 ELSE -- p_uom_type in ('WEIGHT','VOLUME')
2328     wsh_util_validate.validate_uom (
2329          p_type                 =>p_uom_type,
2330          p_organization_id	=>p_organization_id,
2331          p_uom_code		=>l_rr_uom_code,
2332          p_uom_desc		=>NULL,
2333          x_return_status	=>l_return_status);
2334 END IF;
2335 
2336 IF l_debug_on THEN
2337     WSH_DEBUG_SV.log(l_module_name,'wsh_util_validate.validate_uom
2338 l_return_status',l_return_status);
2339 END IF;
2340 wsh_util_core.api_post_call(
2341            p_return_status => l_return_status,
2342            x_num_warnings  => l_num_warnings,
2343            x_num_errors    => l_num_errors);
2344 
2345 --UOM conversion is done only for UOM type 'QUANTITY' and
2346 --routing request line and detail line UOM are different.
2347 IF (p_uom_type='QUANTITY') THEN
2348     IF  (nvl(p_detail_uom_code,'##') <> p_rr_uom_code) THEN
2349 
2350       l_primary_uom_code:= p_detail_uom_code;
2351 
2352       WSH_INBOUND_UTIL_PKG.convert_quantity
2353        (p_inv_item_id		=> p_inventory_item_id,
2354   	p_organization_id	=> p_organization_id,
2355   	p_primary_uom_code 	=> l_primary_uom_code,
2356   	p_quantity 		=> p_rr_qty,
2357   	p_qty_uom_code		=> l_rr_uom_code,
2358   	x_conv_qty		=> x_convert_qty,
2359         x_return_status		=> l_return_status);
2360 
2361       IF l_debug_on THEN
2362          WSH_DEBUG_SV.log(l_module_name,'convert_quantity l_return_status',l_return_status);
2363          WSH_DEBUG_SV.log(l_module_name,'x_convert_qty',x_convert_qty);
2364       END IF;
2365 
2366       wsh_util_core.api_post_call(
2367            p_return_status => l_return_status,
2368            x_num_warnings  => l_num_warnings,
2369            x_num_errors    => l_num_errors);
2370     END IF;
2371 END IF;
2372 
2373 IF l_num_errors > 0 THEN
2374     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2375 ELSIF l_num_warnings > 0 THEN
2376     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2377 END IF;
2378 
2379 IF l_debug_on THEN
2380       WSH_DEBUG_SV.pop(l_module_name);
2381 END IF;
2382 EXCEPTION
2383 WHEN FND_API.G_EXC_ERROR THEN
2384      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
2385 
2386      IF l_debug_on THEN
2387       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
2388 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2389       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2390      END IF;
2391 
2392 WHEN OTHERS THEN
2393     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2394 
2395     IF l_debug_on THEN
2396        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2397 Oracle error message is '||
2398 
2399 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2400        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2401     END IF;
2402 
2403      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
2404      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
2405      fnd_msg_pub.add;
2406 
2407 END Validate_UOM;
2408 
2409 
2410 -- Start of comments
2411 -- API name : Process Address
2412 -- Type     : Public
2413 -- Pre-reqs : None.
2414 -- Procedure: Wrapper API to create Location, Party and Contacts for delivery. Api does.
2415 --          1.For input party_id and location code,check if address is already created.
2416 --          2.If Not create address information by calling api WSH_SUPPLIER_PARTY.Create_Address.
2417 --          3.If create ,update the address information by calling api WSH_SUPPLIER_PARTY.update_Address.
2418 -- Parameters :
2419 -- IN:
2420 --        P_vendor_id                     IN      Vendor Id
2421 --        P_party_id                      IN      Party Id
2422 --        P_location_code                 IN      Location Code
2423 --        P_address1                      IN      Address1
2424 --        P_address2                      IN      Address2
2425 --        P_address3                      IN      Address3
2426 --        P_address4                      IN      Address4
2427 --        P_city                          IN      City
2428 --        P_postal_code                   IN      Postal Code
2429 --        P_state                         IN      State
2430 --        P_Province                      IN      Province
2431 --        P_county                        IN      County
2432 --        p_country                       IN      Country
2433 --        p_shipper_name                  IN      Shipper Name
2434 --        p_phone			  IN      Phone
2435 --        p_email			  IN      Email
2436 -- OUT:
2437 --        x_location_id   OUT NOCOPY Location Id for given input information.
2438 --        x_party_site_id OUT NOCOPY Party Site Id for given input information.
2439 --        x_return_status OUT NOCOPY Standard to output api status.
2440 -- End of comments
2441 PROCEDURE Process_Address(
2442         P_vendor_id                     IN      number,
2443         P_party_id                     IN      number,
2444         P_location_code                 IN      varchar2,
2445         P_address1                      IN      varchar2,
2446         P_address2                      IN      varchar2,
2447         P_address3                      IN      varchar2,
2448         P_address4                      IN      varchar2,
2449         P_city                          IN      varchar2,
2450         P_postal_code                   IN      varchar2,
2451         P_state                         IN      varchar2,
2452         P_Province                      IN      varchar2,
2453         P_county                        IN      varchar2,
2454         p_country                       IN      varchar2,
2455         p_shipper_name                  IN      varchar2,
2456         p_phone				IN      varchar2,
2457         p_email				IN      varchar2,
2458         x_location_id                   OUT NOCOPY number,
2459         x_party_site_id                 OUT NOCOPY number,
2460         x_return_status                 OUT NOCOPY varchar2) IS
2461 
2462 l_debug_on BOOLEAN;
2463 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Address';
2464 
2465 --Cursor to check party site relationship, if this cursor returns record means
2466 --Delivery information is already created for this party and ship from location
2467 --Code.
2468 CURSOR check_location_csr(cp_party_id	NUMBER,
2469 			  cp_location_code	VARCHAR2) IS
2470    SELECT ps.location_id,ps.party_site_id,ps.party_id,ps.status -- IB-Phase-2 Vendor Merge
2471    FROM   hz_party_sites ps,hz_party_site_uses psu
2472    WHERE ps.party_site_id = psu.party_site_id
2473    AND   psu.site_use_type = 'SUPPLIER_SHIP_FROM'
2474    and   party_site_number=cp_location_code
2475    and	 party_id =cp_party_id;
2476 
2477 
2478 l_return_status         varchar2(1);
2479 l_party_id		NUMBER;
2480 l_party_site_id		NUMBER;
2481 l_party_site_use_id	NUMBER;
2482 l_num_warnings          number;
2483 l_num_errors            number;
2484 l_party_site_status     varchar2(1);
2485 l_party_site_msg        varchar2(1000);
2486 
2487 BEGIN
2488 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2489 IF l_debug_on IS NULL THEN
2490       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2491 END IF;
2492 
2493 IF l_debug_on THEN
2494       WSH_DEBUG_SV.push(l_module_name);
2495       WSH_DEBUG_SV.log(l_module_name,'P_vendor_id',P_vendor_id);
2496       WSH_DEBUG_SV.log(l_module_name,'P_party_id',P_party_id);
2497       WSH_DEBUG_SV.log(l_module_name,'p_location_code',p_location_code);
2498       WSH_DEBUG_SV.log(l_module_name,'P_address1',P_address1);
2499       WSH_DEBUG_SV.log(l_module_name,'P_address2',P_address2);
2500       WSH_DEBUG_SV.log(l_module_name,'P_address3',P_address3);
2501       WSH_DEBUG_SV.log(l_module_name,'P_address4',P_address4);
2502       WSH_DEBUG_SV.log(l_module_name,'P_city',P_city);
2503       WSH_DEBUG_SV.log(l_module_name,'P_postal_code',P_postal_code);
2504       WSH_DEBUG_SV.log(l_module_name,'P_state',P_state);
2505       WSH_DEBUG_SV.log(l_module_name,'P_Province',P_Province);
2506       WSH_DEBUG_SV.log(l_module_name,'P_county',P_county);
2507       WSH_DEBUG_SV.log(l_module_name,'p_country',p_country);
2508       WSH_DEBUG_SV.log(l_module_name,'p_phone',p_phone);
2509       WSH_DEBUG_SV.log(l_module_name,'p_email',p_email);
2510 END IF;
2511 
2512 IF (p_vendor_id IS NULL) THEN
2513     FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
2514     FND_MESSAGE.SET_TOKEN('FIELD_NAME','p_vendor_id');
2515     wsh_util_core.add_message(x_return_status,l_module_name);
2516     raise fnd_api.g_exc_error;
2517 END IF;
2518 
2519 IF (P_location_code IS NULL) THEN
2520     FND_MESSAGE.SET_NAME('WSH','WSH_REQUIRED_FIELD_NULL');
2521     FND_MESSAGE.SET_TOKEN('FIELD_NAME','p_location_code');
2522     wsh_util_core.add_message(x_return_status,l_module_name);
2523     raise fnd_api.g_exc_error;
2524 END IF;
2525 
2526 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2527 
2528 OPEN check_location_csr(p_party_id,p_location_code||'|'||p_party_id);
2529 FETCH check_location_csr INTO x_location_id,l_party_site_id,l_party_id,l_party_site_status; -- IB-phase-2
2530 --
2531 IF l_debug_on THEN
2532    WSH_DEBUG_SV.log(l_module_name,'x_location_id',x_location_id);
2533    WSH_DEBUG_SV.log(l_module_name,'l_party_site_id',l_party_site_id);
2534    WSH_DEBUG_SV.log(l_module_name,'l_party_id',l_party_id);
2535    WSH_DEBUG_SV.log(l_module_name,'l_party_site_status',l_party_site_status);
2536 END IF;
2537 --
2538 IF (check_location_csr%NOTFOUND) THEN --{
2539 
2540        --If Address Information where not present, create new address information.
2541        WSH_SUPPLIER_PARTY.Create_Address(
2542         P_vendor_id     => p_vendor_id,
2543         P_party_id      => p_party_id,
2544         P_location_code => p_location_code,
2545         P_address1      => p_Address1,
2546         P_address2      => p_Address2,
2547         P_address3      => p_Address3,
2548         P_address4      => p_Address4,
2549         P_city          => p_city,
2550         P_postal_code   => p_postal_code,
2551         P_state         => p_state,
2552         P_province      => p_province,
2553         P_county        => p_county,
2554         p_country       => p_country,
2555         p_shipper_name  => p_shipper_name,
2556         p_phone         => p_phone,
2557         p_email         => p_email,
2558         x_location_id   => x_location_id,
2559         x_party_site_id => x_party_site_id,
2560         x_return_status => l_return_status);
2561 
2562     IF l_debug_on THEN
2563        WSH_DEBUG_SV.log(l_module_name,'Create_Address l_return_status',l_return_status);
2564        WSH_DEBUG_SV.log(l_module_name,'x_location_id',x_location_id);
2565        WSH_DEBUG_SV.log(l_module_name,'l_party_site_id',l_party_site_id);
2566     END IF;
2567 
2568     wsh_util_core.api_post_call(
2569            p_return_status => l_return_status,
2570            x_num_warnings  => l_num_warnings,
2571            x_num_errors    => l_num_errors);
2572 
2573 ELSE --}{
2574 
2575     -- { IB-Phase-2
2576     -- If Party Site is not Active then error out, with a suitable message.
2577     IF l_party_site_status <> 'A'
2578     THEN
2579       l_party_site_msg := p_location_code;
2580       FND_MESSAGE.SET_NAME('WSH','WSH_INACTIVE_PARTY_SITE');
2581       FND_MESSAGE.SET_TOKEN('PARTY_SITE',l_party_site_msg);
2582       fnd_msg_pub.add;
2583       raise FND_API.G_EXC_ERROR;
2584     END IF;
2585     -- } IB-Phase-2
2586 
2587     --Address information are already created, so update the Address Information
2588     WSH_SUPPLIER_PARTY.Update_address(
2589         P_location_id   => x_location_id,
2590         P_party_id      => p_party_id,
2591         P_party_site_id => l_party_site_id,
2592         P_address1      => P_address1,
2593         P_address2      => P_address2,
2594         P_address3      => P_address3,
2595         P_address4      => P_address4,
2596         P_city          => P_city,
2597         P_postal_code   => P_postal_code,
2598         P_state         => P_state,
2599         P_province      => P_province,
2600         P_county        => P_county,
2601         p_country       => p_country,
2602         p_shipper_name  => p_shipper_name,
2603         p_phone         => p_phone,
2604         p_email         => p_email,
2605         x_return_status => l_return_status);
2606 
2607     IF l_debug_on THEN
2608        WSH_DEBUG_SV.log(l_module_name,'Update_Address l_return_status',l_return_status);
2609     END IF;
2610 
2611     wsh_util_core.api_post_call(
2612            p_return_status => l_return_status,
2613            x_num_warnings  => l_num_warnings,
2614            x_num_errors    => l_num_errors);
2615 END IF; --}
2616 CLOSE check_location_csr;
2617 
2618 
2619 IF l_num_errors > 0 THEN
2620     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2621 ELSIF l_num_warnings > 0 THEN
2622     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2623 END IF;
2624 
2625 IF l_debug_on THEN
2626       WSH_DEBUG_SV.pop(l_module_name);
2627 END IF;
2628 EXCEPTION
2629   WHEN FND_API.G_EXC_ERROR THEN
2630      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
2631 
2632      IF (check_location_csr%ISOPEN) THEN
2633         CLOSE check_location_csr;
2634      END IF;
2635 
2636      IF l_debug_on THEN
2637       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
2638 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2639       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2640      END IF;
2641 
2642   WHEN OTHERS THEN
2643      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2644 
2645      IF (check_location_csr%ISOPEN) THEN
2646         CLOSE check_location_csr;
2647      END IF;
2648      IF l_debug_on THEN
2649         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2650 Oracle error message is '||
2651 
2652 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2653         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2654      END IF;
2655      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
2656      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
2657      fnd_msg_pub.add;
2658 
2659 END Process_Address;
2660 
2661 
2662 -- Start of comments
2663 -- API name : Create_PO
2664 -- Type     : Private
2665 -- Pre-reqs : None.
2666 -- Procedure : API to create Purchase Order line in wsh_delivery_details.Api does.
2667 --            1.Get the attributes of PO line from Purchase Order.
2668 --            2.Populate additional line information.
2669 --            3.Create the PO line in wsh_delivery_details.
2670 --
2671 -- Parameters :
2672 -- IN:
2673 --      p_po_line_location_id   IN  PO Line location Id.
2674 --      p_detail_att  		IN  Attribute of detail line.
2675 --      x_delivery_detail_id    IN  Delivery detail id from which PO line need to created.
2676 -- OUT:
2677 --      x_return_status OUT NOCOPY      Standard to output api status.
2678 -- End of comments
2679 PROCEDURE Create_PO( p_po_line_location_id 	IN NUMBER,
2680                      p_detail_att               IN      detail_att_rec_type,
2681                      x_delivery_detail_id	OUT NOCOPY NUMBER,
2682 		     x_return_status 		OUT NOCOPY VARCHAR2) IS
2683 
2684 l_debug_on BOOLEAN;
2685 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_PO';
2686 
2687 l_line_rec 	OE_WSH_BULK_GRP.line_rec_type;
2688 l_action_prms  WSH_BULK_TYPES_GRP.action_parameters_rectype;
2689 l_additional_line_info_rec
2690 WSH_BULK_PROCESS_PVT.additional_line_info_rec_type;
2691 
2692 l_return_status		varchar2(1);
2693 l_num_warnings		number;
2694 l_num_errors		number;
2695 l_index		number;
2696 l_tab_count		number;
2697 BEGIN
2698 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2699 IF l_debug_on IS NULL THEN
2700       l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2701 END IF;
2702 
2703 IF l_debug_on THEN
2704       WSH_DEBUG_SV.push(l_module_name);
2705 
2706 WSH_DEBUG_SV.log(l_module_name,'p_po_line_location_id',p_po_line_location_id);
2707 END IF;
2708 
2709 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2710 
2711 
2712 --Get the attributes of PO line from Purchase Order
2713 WSH_INBOUND_UTIL_PKG.get_po_rcv_attributes(
2714               p_po_line_location_id  => p_po_line_location_id,
2715               x_line_rec             => l_line_rec,
2716               x_return_status        => l_return_status);
2717 
2718 IF l_debug_on THEN
2719 
2720 WSH_DEBUG_SV.log(l_module_name,'WSH_INBOUND_UTIL_PKG.get_po_rcv_attributes
2721 l_return_status',l_return_status);
2722 END IF;
2723 
2724 wsh_util_core.api_post_call(
2725            p_return_status => l_return_status,
2726            x_num_warnings  => l_num_warnings,
2727            x_num_errors    => l_num_errors);
2728 
2729 l_index := l_line_rec.header_id.first;
2730 
2731 IF l_debug_on THEN
2732     WSH_DEBUG_SV.log(l_module_name,'l_index',l_index);
2733     WSH_DEBUG_SV.log(l_module_name,'header_id',l_line_rec.header_id(l_index));
2734     WSH_DEBUG_SV.log(l_module_name,'line_id',l_line_rec.line_id(l_index));
2735     WSH_DEBUG_SV.log(l_module_name,'vendor_id',l_line_rec.vendor_id(l_index));
2736 END IF;
2737 
2738 --Populate additional line information.
2739 WSH_PO_CMG_PVT.populate_additional_line_info(
2740            p_line_rec                  => l_line_rec,
2741            p_index                     => l_index,
2742            p_additional_line_info_rec  => l_additional_line_info_rec ,
2743            x_return_status             => l_return_status);
2744 
2745 IF l_debug_on THEN
2746    WSH_DEBUG_SV.log(l_module_name,'WSH_PO_CMG_PVT.populate_additional_line_info l_return_status',l_return_status);
2747    WSH_DEBUG_SV.log(l_module_name,'l_additional_line_info_rec.service_level.count',l_additional_line_info_rec.service_level.count);
2748 END IF;
2749 wsh_util_core.api_post_call(
2750            p_return_status => l_return_status,
2751            x_num_warnings  => l_num_warnings,
2752            x_num_errors    => l_num_errors,
2753            p_module_name   => l_module_name,
2754            p_msg_data      => 'WSH_POPULATE_ADD_INFO_ERROR');
2755 
2756 
2757 --Set the these attributes to new line.
2758 l_action_prms.org_id:=p_detail_att.org_id;
2759 l_additional_line_info_rec.source_code:= p_detail_att.source_code;
2760 l_additional_line_info_rec.released_status(l_index):=p_detail_att.released_status;
2761 l_line_rec.shipping_interfaced_flag(l_index):='Y';
2762 l_line_rec.source_header_number(l_index):=p_detail_att.source_header_number;
2763 l_line_rec.source_header_type_id(l_index):=p_detail_att.source_header_type_id;
2764 l_line_rec.source_header_type_name(l_index):=p_detail_att.source_header_type_name;
2765 l_line_rec.requested_quantity_uom(l_index):=p_detail_att.requested_quantity_uom;
2766 l_line_rec.requested_quantity_uom2(l_index):=p_detail_att.requested_quantity_uom2;
2767 l_line_rec.request_date(l_index):=p_detail_att.date_requested;
2768 l_additional_line_info_rec.earliest_dropoff_date(l_index):=p_detail_att.earliest_dropoff_date;
2769 l_additional_line_info_rec.latest_dropoff_date(l_index):=p_detail_att.latest_dropoff_date;
2770 
2771 --Create the PO line in wsh_delivery_details.
2772 WSH_BULK_PROCESS_PVT.bulk_insert_details (
2773 	   P_line_rec       => l_line_rec,
2774 	   p_index          => l_index,
2775 	   p_action_prms    => l_action_prms,
2776 	   p_additional_line_info_rec => l_additional_line_info_rec,
2777 	   X_return_status  => l_return_status);
2778 
2779 IF l_debug_on THEN
2780     WSH_DEBUG_SV.log(l_module_name,'WSH_BULK_PROCESS_PVT.bulk_insert_details
2781 l_return_status',l_return_status);
2782 END IF;
2783 wsh_util_core.api_post_call(
2784 	   p_return_status => l_return_status,
2785 	   x_num_warnings  => l_num_warnings,
2786 	   x_num_errors    => l_num_errors,
2787 	   p_module_name   => l_module_name,
2788            p_msg_data      => 'WSH_BULK_INSERT_FAILED');
2789 
2790 x_delivery_detail_id :=
2791 l_line_rec.delivery_detail_id(l_line_rec.delivery_detail_id.first);
2792 
2793 IF l_num_errors > 0 THEN
2794     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2795 ELSIF l_num_warnings > 0 THEN
2796     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2797 END IF;
2798 
2799 IF l_debug_on THEN
2800 
2801 WSH_DEBUG_SV.log(l_module_name,'x_delivery_detail_id',x_delivery_detail_id);
2802     WSH_DEBUG_SV.pop(l_module_name);
2803 END IF;
2804 
2805 EXCEPTION
2806   WHEN FND_API.G_EXC_ERROR THEN
2807      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
2808 
2809      IF l_debug_on THEN
2810       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
2811 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2812       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2813      END IF;
2814 
2815   WHEN OTHERS THEN
2816      x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2817 
2818      IF l_debug_on THEN
2819         WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2820 Oracle error message is '||
2821 
2822 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2823         WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2824      END IF;
2825      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
2826      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
2827      fnd_msg_pub.add;
2828 
2829 END Create_PO;
2830 
2831 
2832 -- Start of comments
2833 -- API name : Validate_PO
2834 -- Type     : Public
2835 -- Pre-reqs : None.
2836 -- Procedure: API to validate PO for Approval,Hold,Cancelled and Close status.Api does.
2837 --           1. Validate status only if code release is PRC_11i_Family_Pack_J or later.
2838 --           2. Call PO api PO_FTE_INTEGRATION_GRP.po_status_check to get the status of PO shipment line.Api return error if
2839 --            2.1 PO is 'CLOSED','FINALLY CLOSED','CLOSED FOR RECEIVING'
2840 --            2.2 PO is cancelled.
2841 --            2.3 PO is in Hold.
2842 --            2.4 PO is not Approved.
2843 -- Parameters :
2844 -- IN:
2845 --        p_header_id       		IN      PO Header Id.
2846 --        p_header       		IN      PO Number.
2847 --        p_line_id       		IN      PO Line Id.
2848 --        p_line_location_id       	IN      PO Line location Id.
2849 --        p_release_id       		IN      PO release Id.
2850 -- OUT:
2851 --      x_return_status OUT NOCOPY      Standard to output api status.
2852 -- End of comments
2853 PROCEDURE Validate_PO(
2854         p_header_id       		IN      NUMBER,
2855         p_header       			IN      varchar2,
2856         p_line_id       		IN      NUMBER,
2857         p_line_location_id       	IN      NUMBER,
2858         p_release_id       		IN      NUMBER,
2859         x_return_status         	OUT NOCOPY      VARCHAR2) IS
2860 
2861 l_debug_on BOOLEAN;
2862 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Validate_PO';
2863 
2864 l_return_status		varchar2(1);
2865 l_delivery_status	varchar2(30);
2866 l_convert_qty		number;
2867 
2868 l_po_status_rec		PO_STATUS_REC_TYPE;
2869 --l_po_status_rec		STATUS_REC_TYPE;
2870 l_index			number;
2871 l_num_warnings          number;
2872 l_num_errors            number;
2873 
2874 BEGIN
2875 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
2876 IF l_debug_on IS NULL THEN
2877     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
2878 END IF;
2879 
2880 IF l_debug_on THEN
2881     WSH_DEBUG_SV.push(l_module_name);
2882     WSH_DEBUG_SV.log(l_module_name,'p_header_id',p_header_id);
2883     WSH_DEBUG_SV.log(l_module_name,'p_header',p_header);
2884     WSH_DEBUG_SV.log(l_module_name,'p_line_id',p_line_id);
2885     WSH_DEBUG_SV.log(l_module_name,'p_line_location_id',p_line_location_id);
2886     WSH_DEBUG_SV.log(l_module_name,'p_release_id',p_release_id);
2887     WSH_DEBUG_SV.log(l_module_name,'Current_Release',PO_CODE_RELEASE_GRP.Current_Release);
2888     WSH_DEBUG_SV.log(l_module_name,'PRC_11i_Family_Pack_J',PO_CODE_RELEASE_GRP.PRC_11i_Family_Pack_J);
2889 END IF;
2890 
2891 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
2892 
2893 --Validate status only if code release is PRC_11i_Family_Pack_J or later.
2894 IF (PO_CODE_RELEASE_GRP.Current_Release >=PO_CODE_RELEASE_GRP.PRC_11i_Family_Pack_J) THEN
2895    IF l_debug_on THEN
2896       WSH_DEBUG_SV.logmsg(l_module_name,'Before calling PO_FTE_INTEGRATION_GRP.po_status_check');
2897    END IF;
2898 
2899    PO_FTE_INTEGRATION_GRP.po_status_check (
2900     p_api_version           => 1,
2901     p_header_id             => p_header_id,
2902     p_line_id               => p_line_id,
2903     p_line_location_id	    => p_line_location_id,
2904     p_release_id	    => p_release_id,
2905     p_mode                  => 'GET_STATUS',
2906     x_po_status_rec         => l_po_status_rec,
2907     x_return_status         => l_return_status);
2908 
2909     IF l_debug_on THEN
2910        WSH_DEBUG_SV.log(l_module_name,'PO_FTE_INTEGRATION_GRP.po_status_check l_return_status',l_return_status);
2911     END IF;
2912 
2913     wsh_util_core.api_post_call(
2914            p_return_status => l_return_status,
2915            x_num_warnings  => l_num_warnings,
2916            x_num_errors    => l_num_errors,
2917            p_module_name   => l_module_name,
2918            p_msg_data      => 'WSH_RR_PO_INVALID',
2919            p_token1        => 'PO_NUMBER',
2920            p_value1        => p_header);
2921 
2922 
2923 
2924     l_index:=l_po_status_rec.approval_flag.first;
2925     WHILE (l_index IS NOT NULL) LOOP
2926        IF l_debug_on THEN
2927           WSH_DEBUG_SV.log(l_module_name,'approval_flag',l_po_status_rec.approval_flag(l_index));
2928           WSH_DEBUG_SV.log(l_module_name,'cancel_flag',l_po_status_rec.cancel_flag(l_index));
2929           WSH_DEBUG_SV.log(l_module_name,'closed_code',l_po_status_rec.closed_code(l_index));
2930           WSH_DEBUG_SV.log(l_module_name,'hold_flag',l_po_status_rec.hold_flag(l_index));
2931        END IF;
2932 
2933        --IF PO is 'CLOSED','FINALLY CLOSED','CLOSED FOR RECEIVING' and not Cancelled.
2934        IF (nvl(l_po_status_rec.closed_code(l_index),'N') IN ('CLOSED','FINALLY CLOSED','CLOSED FOR RECEIVING')
2935            AND
2936            nvl(l_po_status_rec.cancel_flag(l_index),'N') <> 'Y'
2937        ) THEN
2938 
2939           FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_ERROR_CLOSED');
2940           fnd_msg_pub.add;
2941           raise fnd_api.g_exc_error;
2942        END IF;
2943 
2944        --If PO is cancelled.
2945        IF (nvl(l_po_status_rec.cancel_flag(l_index),'N') = 'Y' ) THEN
2946           FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_ERROR_CANCELLED');
2947           fnd_msg_pub.add;
2948           raise fnd_api.g_exc_error;
2949        END IF;
2950 
2951        --If PO is in Hold.
2952        IF (nvl(l_po_status_rec.hold_flag(l_index),'N') = 'Y') THEN
2953           FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_ERROR_HOLD');
2954           fnd_msg_pub.add;
2955           raise fnd_api.g_exc_error;
2956        END IF;
2957 
2958        --If PO is not Approved.
2959        IF (nvl(l_po_status_rec.approval_flag(l_index),'N') <> 'Y' ) THEN
2960           FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_ERROR_UNAPPROVED');
2961           fnd_msg_pub.add;
2962           raise fnd_api.g_exc_error;
2963        END IF;
2964 
2965     l_index:=l_po_status_rec.approval_flag.next(l_index);
2966     END LOOP;
2967 ELSE
2968    raise fnd_api.g_exc_error;
2969 END IF;
2970 
2971 IF l_num_errors > 0 THEN
2972     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
2973 ELSIF l_num_warnings > 0 THEN
2974     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
2975 END IF;
2976 
2977 IF l_debug_on THEN
2978     WSH_DEBUG_SV.pop(l_module_name);
2979 END IF;
2980 EXCEPTION
2981 WHEN FND_API.G_EXC_ERROR THEN
2982      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
2983 
2984      IF l_debug_on THEN
2985       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
2986 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
2987       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
2988      END IF;
2989 
2990 WHEN OTHERS THEN
2991     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
2992 
2993     IF l_debug_on THEN
2994        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
2995 Oracle error message is '||
2996 
2997 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
2998        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
2999     END IF;
3000      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
3001      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
3002      fnd_msg_pub.add;
3003 
3004 END Validate_PO;
3005 
3006 -- Start of comments
3007 -- API name : Validate_line
3008 -- Type     : Public
3009 -- Pre-reqs : None.
3010 -- Procedure: API to validate Routing Request Line for Conditional Requried field,UOM's and decimal precision. Api does
3011 --           1.Validate either latest_pickup_date or earliest_pickup_date is required.
3012 --           2.If both date are specified than earliest pickup date should not be grater than latest pickup date.
3013 --           3.Validate item qty, weight and volume for negative.
3014 --           4.Validate if Weight UOM is given then weight is required, vice-versa.
3015 --           5.Validate,if Volume UOM is given then Volume is required, vice-versa.
3016 --           6.For One time Item directly validate the UOM from
3017 --             mtl_units_of_measure else call wrapper api Validate_UOM
3018 --           7.Validate item qty decimal precision.
3019 --           8.Validate weight and volume UOM by calling wrapper api Validate_UOM.
3020 -- Parameters :
3021 -- IN:
3022 --        p_organization_id       	IN      Organization Id.
3023 --        p_item_id       		IN      Item Id.
3024 --        p_detail_item_uom_code       	IN	UOM of Item.
3025 --        p_detail_weight_uom_code      IN      UOM of weight.
3026 --        p_detail_volume_uom_code      IN      UOM of Volume.
3027 --        p_line_index            	IN      Index if Routing Request Line.
3028 --        p_line                  	IN OUT  Type Line_Rec_Type, Routing Request Line Record.
3029 -- OUT:
3030 --        x_detail_item_qty            	OUT NOCOPY Item Qty in detail UOM.
3031 --        x_detail_weight_qty           OUT NOCOPY Weight in detail UOM.
3032 --        x_detail_volume_qty           OUT NOCOPY Volume in detail UOM.
3033 --        x_return_status         	OUT NOCOPY varchar2 standard to output status
3034 -- End of comments
3035 PROCEDURE Validate_line(
3036         p_organization_id       	IN      NUMBER,
3037         p_item_id       		IN      NUMBER,
3038         p_detail_item_uom_code       	IN	VARCHAR2,
3039         x_detail_item_qty            	OUT     NOCOPY  NUMBER,
3040         p_detail_weight_uom_code       	IN      VARCHAR2,
3041         x_detail_weight_qty            	OUT     NOCOPY  NUMBER,
3042         p_detail_volume_uom_code       	IN      VARCHAR2,
3043         x_detail_volume_qty            	OUT     NOCOPY  NUMBER,
3044         p_line_index            	IN      NUMBER,
3045         p_line                  	IN OUT  NOCOPY  Line_Rec_Type,
3046         x_return_status         	OUT NOCOPY      VARCHAR2) IS
3047 
3048 l_debug_on BOOLEAN;
3049 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_line';
3050 
3051 --This cursor is use to validate UOM for One time item, as one time item
3052 --does not inventory item id.
3053 CURSOR get_item_uom(p_uom varchar2) IS
3054 SELECT  1
3055   FROM   mtl_units_of_measure
3056   WHERE  uom_code = p_uom
3057   AND    uom_class = 'Quantity';
3058 
3059 
3060 l_return_status		varchar2(1);
3061 l_delivery_status	varchar2(30);
3062 l_convert_qty		number;
3063 l_item_qty		number;
3064 l_tmp		        number;
3065 l_primary_uom_code      varchar2(30);
3066 l_num_warnings          number;
3067 l_num_errors            number;
3068 BEGIN
3069 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3070 IF l_debug_on IS NULL THEN
3071     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3072 END IF;
3073 
3074 IF l_debug_on THEN
3075     WSH_DEBUG_SV.push(l_module_name);
3076     WSH_DEBUG_SV.log(l_module_name,'p_organization_id',p_organization_id);
3077     WSH_DEBUG_SV.log(l_module_name,'p_item_id',p_item_id);
3078     WSH_DEBUG_SV.log(l_module_name,'p_line_index',p_line_index);
3079     WSH_DEBUG_SV.log(l_module_name,'p_line.delivery_line_number.count',p_line.delivery_line_number.count);
3080     WSH_DEBUG_SV.log(l_module_name,'earliest_pickup_date',p_line.earliest_pickup_date(p_line_index));
3081     WSH_DEBUG_SV.log(l_module_name,'latest_pickup_date',p_line.latest_pickup_date(p_line_index));
3082     WSH_DEBUG_SV.log(l_module_name,'Item_quantity',p_line.Item_quantity(p_line_index));
3083     WSH_DEBUG_SV.log(l_module_name,'weight',p_line.weight(p_line_index));
3084     WSH_DEBUG_SV.log(l_module_name,'weight_uom', p_line.weight_uom(p_line_index));
3085     WSH_DEBUG_SV.log(l_module_name,'volume',p_line.volume(p_line_index));
3086     WSH_DEBUG_SV.log(l_module_name,'volume_uom',p_line.volume_uom(p_line_index));
3087 END IF;
3088 
3089 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3090 
3091 
3092 --Either latest_pickup_date or earliest_pickup_date is requried.
3093 --If both date are specified than earlies pickup date should not be grater than latest pickup date.
3094 IF (p_line.earliest_pickup_date(p_line_index) IS NULL and
3095 p_line.latest_pickup_date(p_line_index) IS NULL) THEN
3096     FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_REQ_PICKUP_DATE');
3097     FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_line_index);
3098     fnd_msg_pub.add;
3099     raise fnd_api.g_exc_error;
3100 ELSIF (p_line.earliest_pickup_date(p_line_index) IS NOT NULL
3101             and p_line.latest_pickup_date(p_line_index) IS NULL) THEN
3102     p_line.latest_pickup_date(p_line_index):= p_line.earliest_pickup_date(p_line_index);
3103 ELSIF (p_line.earliest_pickup_date(p_line_index) IS NULL
3104             and p_line.latest_pickup_date(p_line_index) IS NOT NULL) THEN
3105     p_line.earliest_pickup_date(p_line_index):= p_line.latest_pickup_date(p_line_index);
3106 ELSIF (p_line.earliest_pickup_date(p_line_index) IS NOT NULL
3107             and p_line.latest_pickup_date(p_line_index) IS NOT NULL) THEN
3108 
3109     IF (p_line.earliest_pickup_date(p_line_index) > p_line.latest_pickup_date(p_line_index) ) THEN
3110        FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INV_PICKUP_DATE');
3111        FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_line_index);
3112        fnd_msg_pub.add;
3113        raise fnd_api.g_exc_error;
3114     END IF;
3115 
3116 END IF;
3117 
3118 --No negative Item qty.
3119 IF (p_line.Item_quantity(p_line_index) < 0 ) THEN
3120        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3121        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_item_qty));
3122        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_index);
3123        fnd_msg_pub.add;
3124        raise fnd_api.g_exc_error;
3125 END IF;
3126 
3127 --No negative weight.
3128 IF (nvl(p_line.weight(p_line_index),1) < 0 ) THEN
3129        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3130        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_total_weight));
3131        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_index);
3132        fnd_msg_pub.add;
3133        raise fnd_api.g_exc_error;
3134 END IF;
3135 
3136 
3137 --No negative volume.
3138 IF (nvl(p_line.volume(p_line_index),1) < 0 ) THEN
3139        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3140        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_total_volume));
3141        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_index);
3142        fnd_msg_pub.add;
3143        raise fnd_api.g_exc_error;
3144 END IF;
3145 
3146 
3147 --If Weight UOM is given then weight is requried, vice-versa.
3148 IF ((p_line.weight(p_line_index) IS NOT NULL  and p_line.weight_uom(p_line_index) IS NULL)
3149      OR (p_line.weight(p_line_index) IS NULL  and p_line.weight_uom(p_line_index) IS NOT NULL)
3150     ) THEN
3151 
3152        FND_MESSAGE.SET_NAME('WSH','WSH_RR_REQUIRED_FIELD_NULL');
3153        IF (p_line.weight(p_line_index) IS NULL) THEN
3154           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_total_weight));
3155        ELSE
3156           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_weight_uom));
3157        END IF;
3158        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_index);
3159        fnd_msg_pub.add;
3160        raise fnd_api.g_exc_error;
3161 END IF;
3162 
3163 --If Volume UOM is given then Volume is requried, vice-versa.
3164 IF ( (p_line.volume(p_line_index) IS NOT NULL  and p_line.volume_uom(p_line_index) IS NULL )
3165      OR (p_line.volume(p_line_index) IS NULL  and p_line.volume_uom(p_line_index) IS NOT NULL)
3166     )THEN
3167        FND_MESSAGE.SET_NAME('WSH','WSH_RR_REQUIRED_FIELD_NULL');
3168        IF (p_line.volume(p_line_index) IS NULL) THEN
3169           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_total_volume));
3170        ELSE
3171           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_volume_uom));
3172        END IF;
3173 
3174        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_index);
3175        fnd_msg_pub.add;
3176        raise fnd_api.g_exc_error;
3177 END IF;
3178 
3179 l_item_qty:=p_line.item_quantity(p_line_index);
3180 
3181 IF (p_line.item_uom(p_line_index) IS NOT NULL ) THEN
3182 --{
3183    IF (p_item_id IS NULL) THEN
3184       --For One time Item directly validate the UOM from mtl_units_of_measure.
3185       IF l_debug_on THEN
3186           WSH_DEBUG_SV.logmsg(l_module_name,' Lose Item');
3187       END IF;
3188 
3189       OPEN get_item_uom(p_line.item_uom(p_line_index));
3190       FETCH get_item_uom INTO l_tmp;
3191       IF (get_item_uom%NOTFOUND) THEN
3192            FND_MESSAGE.SET_NAME('WSH','WSH_OI_INVALID_UOM');
3193            fnd_msg_pub.add;
3194            CLOSE get_item_uom;
3195            raise fnd_api.g_exc_error;
3196       END IF;
3197       CLOSE get_item_uom;
3198 
3199       --Convert the routing request line qty to detail line qty UOM.
3200       IF  (nvl(p_detail_item_uom_code,'##') <> p_line.item_uom(p_line_index)) THEN
3201 
3202          l_primary_uom_code:= p_detail_item_uom_code;
3203 
3204          WSH_INBOUND_UTIL_PKG.convert_quantity
3205           ( p_organization_id       => p_organization_id,
3206            p_primary_uom_code      => l_primary_uom_code,
3207            p_quantity              => p_line.item_quantity(p_line_index),
3208            p_qty_uom_code          => p_line.item_uom(p_line_index),
3209            x_conv_qty              => l_item_qty,
3210            x_return_status         => l_return_status);
3211 
3212          IF l_debug_on THEN
3213             WSH_DEBUG_SV.log(l_module_name,'convert_quantity l_return_status',l_return_status);
3214             WSH_DEBUG_SV.log(l_module_name,'x_convert_qty',l_item_qty);
3215          END IF;
3216 
3217          wsh_util_core.api_post_call(
3218            p_return_status => l_return_status,
3219            x_num_warnings  => l_num_warnings,
3220            x_num_errors    => l_num_errors);
3221       END IF;
3222 
3223    ELSE
3224       --Non One time Item
3225       Validate_UOM(
3226         p_uom_type		=> 'QUANTITY',
3227         p_organization_id	=> p_organization_id,
3228         p_inventory_item_id	=> p_item_id,
3229         p_rr_uom_code		=> p_line.item_uom(p_line_index),
3230         p_detail_uom_code       => p_detail_item_uom_code,
3231         p_rr_qty            	=> p_line.item_quantity(p_line_index),
3232         x_convert_qty		=> l_item_qty,
3233         x_return_status		=> l_return_status);
3234 
3235        IF l_debug_on THEN
3236           WSH_DEBUG_SV.log(l_module_name,'validate_uom l_return_status',l_return_status);
3237           WSH_DEBUG_SV.log(l_module_name,'l_item_qty',l_item_qty);
3238        END IF;
3239 
3240         wsh_util_core.api_post_call(
3241            p_return_status => l_return_status,
3242            x_num_warnings  => l_num_warnings,
3243            x_num_errors    => l_num_errors);
3244 
3245     END IF;
3246 --}
3247 END IF;
3248 
3249 -- RV DEC_QTY
3250 /*
3251 --Check fop decimal precision.
3252 WSH_DETAILS_VALIDATIONS.check_decimal_quantity(
3253   p_item_id 		=>p_item_id,
3254   p_organization_id 	=>p_organization_id,
3255   p_input_quantity	=>l_item_qty,
3256   p_uom_code		=>p_line.item_uom(p_line_index),
3257   x_output_quantity  	=>x_detail_item_qty,
3258   x_return_status	=>l_return_status);
3259 
3260   IF l_debug_on THEN
3261      WSH_DEBUG_SV.log(l_module_name,'WSH_DETAILS_VALIDATIONS.check_decimal_quantity l_return_status',l_return_status);
3262      WSH_DEBUG_SV.log(l_module_name,'x_detail_item_qty',x_detail_item_qty);
3263   END IF;
3264   wsh_util_core.api_post_call(
3265            p_return_status => l_return_status,
3266            x_num_warnings  => l_num_warnings,
3267            x_num_errors    => l_num_errors);
3268 
3269 */
3270 
3271 x_detail_item_qty := l_item_qty;
3272 -- RV DEC_QTY
3273 
3274 IF (p_line.weight_uom(p_line_index) IS NOT NULL) THEN
3275 Validate_UOM(
3276         p_uom_type		=> 'WEIGHT',
3277         p_organization_id	=> p_organization_id,
3278         p_rr_uom_code		=> p_line.weight_uom(p_line_index),
3279         x_convert_qty		=> x_detail_weight_qty,
3280         x_return_status		=> l_return_status);
3281 
3282     IF l_debug_on THEN
3283        WSH_DEBUG_SV.log(l_module_name,'validate_uom l_return_status',l_return_status);
3284     END IF;
3285 
3286     wsh_util_core.api_post_call(
3287            p_return_status => l_return_status,
3288            x_num_warnings  => l_num_warnings,
3289            x_num_errors    => l_num_errors);
3290 END IF;
3291 
3292 IF (p_line.volume_uom(p_line_index) IS NOT NULL) THEN
3293 Validate_UOM(
3294         p_uom_type		=> 'VOLUME',
3295         p_organization_id	=> p_organization_id,
3296         p_rr_uom_code		=> p_line.volume_uom(p_line_index),
3297         x_convert_qty		=> x_detail_volume_qty,
3298         x_return_status		=> l_return_status);
3299 
3300     IF l_debug_on THEN
3301        WSH_DEBUG_SV.log(l_module_name,'validate_uom l_return_status',l_return_status);
3302     END IF;
3303     wsh_util_core.api_post_call(
3304            p_return_status => l_return_status,
3305            x_num_warnings  => l_num_warnings,
3306            x_num_errors    => l_num_errors);
3307   END IF;
3308 
3309 IF l_num_errors > 0 THEN
3310     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3311 ELSIF l_num_warnings > 0 THEN
3312     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3313 END IF;
3314 
3315 IF l_debug_on THEN
3316     WSH_DEBUG_SV.pop(l_module_name);
3317 END IF;
3318 EXCEPTION
3319 WHEN FND_API.G_EXC_ERROR THEN
3320      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
3321 
3322      IF l_debug_on THEN
3323       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
3324 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3325       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3326      END IF;
3327 
3328 WHEN OTHERS THEN
3329     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3330 
3331     IF l_debug_on THEN
3332        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
3333 Oracle error message is '||
3334 
3335 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3336        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3337     END IF;
3338 
3339      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
3340      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
3341      fnd_msg_pub.add;
3342 
3343 END Validate_line;
3344 
3345 
3346 
3347 -- Start of comments
3348 -- API name : Validate_Delivery
3349 -- Type     : Public
3350 -- Pre-reqs : None.
3351 -- Procedure: API to validate Routing Request delivery for Conditional Required field and process address.api does
3352 --           1.Validate if Number of container,Weight and volume for negative.
3353 --           2.Validate if Weight UOM is given then weight is required, vice-versa.
3354 --           3.Validate,if Volume UOM is given then Volume is required, vice-versa.
3355 --           4.Procces the address information by calling wrapper api process_address.
3356 -- Parameters :
3357 -- IN:
3358 --      p_detail_att            IN  Attributes of delivery detail line.
3359 --      p_delivery_index        IN  Index of delivery record.
3360 --      p_delivery              IN  Delivery_Rec_Type,Routing Request delivery record.
3361 -- OUT:
3362 --      x_return_status         OUT NOCOPY varchar2 standard to output status.
3363 -- End of comments
3364 
3365 PROCEDURE Validate_Delivery(
3366         p_detail_att            IN OUT  NOCOPY detail_att_rec_type,
3367         p_delivery_index        IN      NUMBER,
3368         p_delivery              IN OUT  NOCOPY  Delivery_Rec_Type,
3369         x_return_status         OUT NOCOPY      VARCHAR2) IS
3370 
3371 l_debug_on BOOLEAN;
3372 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_DELIVERY';
3373 
3374 l_return_status		varchar2(1);
3375 l_delivery_status	varchar2(30);
3376 l_convert_qty		number;
3377 l_num_warnings          number;
3378 l_num_errors            number;
3379 BEGIN
3380 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3381 IF l_debug_on IS NULL THEN
3382     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3383 END IF;
3384 
3385 IF l_debug_on THEN
3386     WSH_DEBUG_SV.push(l_module_name);
3387     WSH_DEBUG_SV.log(l_module_name,'p_delivery_index',p_delivery_index);
3388     WSH_DEBUG_SV.log(l_module_name,'p_delivery.Ship_From_Address1.count',p_delivery.Ship_From_Address1.count);
3389 END IF;
3390 
3391 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3392 
3393 
3394 IF (nvl(p_delivery.Number_of_containers(p_delivery_index),1) < 0 ) THEN
3395        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3396        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_number_of_containers));
3397        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_delivery_index);
3398        fnd_msg_pub.add;
3399 
3400        raise fnd_api.g_exc_error;
3401 END IF;
3402 
3403 IF (nvl(p_delivery.total_weight(p_delivery_index),1) < 0 ) THEN
3404        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3405        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_total_weight));
3406        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_delivery_index);
3407        fnd_msg_pub.add;
3408 
3409        raise fnd_api.g_exc_error;
3410 END IF;
3411 
3412 
3413 IF (nvl(p_delivery.total_volume(p_delivery_index),1) < 0 ) THEN
3414        FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
3415        FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_total_volume));
3416        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_delivery_index);
3417        fnd_msg_pub.add;
3418 
3419        raise fnd_api.g_exc_error;
3420 END IF;
3421 
3422 
3423 --If weigh UOM given the weight is requried, vice-versa
3424 IF ( (p_delivery.total_weight(p_delivery_index) IS NOT NULL  and p_delivery.weight_uom(p_delivery_index) IS NULL)
3425       OR (p_delivery.total_weight(p_delivery_index) IS NULL  and p_delivery.weight_uom(p_delivery_index) IS NOT NULL)
3426     )THEN
3427        FND_MESSAGE.SET_NAME('WSH','WSH_RR_REQUIRED_FIELD_NULL');
3428        IF (p_delivery.total_weight(p_delivery_index) IS NULL) THEN
3429           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_total_weight));
3430        ELSE
3431           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_weight_uom));
3432        END IF;
3433        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_delivery_index);
3434        fnd_msg_pub.add;
3435 
3436        raise fnd_api.g_exc_error;
3437 END IF;
3438 
3439 --If volume UOM given the volume is requried, vice-versa
3440 IF ((p_delivery.total_volume(p_delivery_index) IS NOT NULL  and p_delivery.volume_uom(p_delivery_index) IS NULL)
3441       OR (p_delivery.total_volume(p_delivery_index) IS NULL  and p_delivery.volume_uom(p_delivery_index) IS NOT NULL)
3442     ) THEN
3443        FND_MESSAGE.SET_NAME('WSH','WSH_RR_REQUIRED_FIELD_NULL');
3444        IF (p_delivery.total_volume(p_delivery_index) IS NULL) THEN
3445           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_total_volume));
3446        ELSE
3447           FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_del_volume_uom));
3448        END IF;
3449 
3450        FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_delivery_index);
3451        fnd_msg_pub.add;
3452 
3453        raise fnd_api.g_exc_error;
3454 END IF;
3455 
3456 
3457 --Create/Update Ship location ,party and contacts information.
3458 Process_Address(
3459         P_vendor_id	=> p_detail_att.vendor_id,
3460         p_party_id	=> p_detail_att.party_id,
3461         P_location_code	=> p_delivery.ship_from_code(p_delivery_index),
3462         P_address1	=> p_delivery.ship_from_address1(p_delivery_index),
3463         P_address2	=> p_delivery.ship_from_address2(p_delivery_index),
3464         P_address3	=> p_delivery.ship_from_address3(p_delivery_index),
3465         P_address4	=> p_delivery.ship_from_address4(p_delivery_index),
3466         P_city		=> p_delivery.ship_from_city(p_delivery_index),
3467         P_postal_code	=> p_delivery.ship_from_postal_code(p_delivery_index),
3468         P_state		=> p_delivery.ship_from_state(p_delivery_index),
3469         P_Province	=> p_delivery.ship_from_Province(p_delivery_index),
3470         P_county	=> p_delivery.ship_from_county(p_delivery_index),
3471         p_country	=> p_delivery.ship_from_country(p_delivery_index),
3472         p_shipper_name	=> p_delivery.shipper_name(p_delivery_index),
3473         p_phone		=> p_delivery.phone(p_delivery_index),
3474         p_email		=> p_delivery.email(p_delivery_index),
3475         x_location_id	=> p_detail_att.ship_from_location_id,
3476 	x_party_site_id => p_detail_att.party_site_id,
3477         x_return_status => l_return_status);
3478 
3479 IF l_debug_on THEN
3480     WSH_DEBUG_SV.log(l_module_name,'Process_Address l_return_status',l_return_status);
3481     WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id',p_detail_att.ship_from_location_id);
3482     WSH_DEBUG_SV.log(l_module_name,'party_site_id',p_detail_att.party_site_id);
3483 END IF;
3484 wsh_util_core.api_post_call(
3485            p_return_status => l_return_status,
3486            x_num_warnings  => l_num_warnings,
3487            x_num_errors    => l_num_errors);
3488 
3489 IF l_num_errors > 0 THEN
3490     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3491 ELSIF l_num_warnings > 0 THEN
3492     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3493 END IF;
3494 
3495 IF l_debug_on THEN
3496     WSH_DEBUG_SV.pop(l_module_name);
3497 END IF;
3498 EXCEPTION
3499 WHEN FND_API.G_EXC_ERROR THEN
3500      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
3501 
3502      p_delivery.error_flag(p_delivery_index):= 'Y';
3503 
3504 
3505      IF l_debug_on THEN
3506       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
3507 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3508       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3509      END IF;
3510 
3511 WHEN OTHERS THEN
3512     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3513 
3514     p_delivery.error_flag(p_delivery_index):= 'Y';
3515 
3516     IF l_debug_on THEN
3517        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
3518 Oracle error message is '||
3519 
3520 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3521        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3522     END IF;
3523 
3524      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
3525      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
3526      fnd_msg_pub.add;
3527 
3528 END Validate_Delivery;
3529 
3530 
3531 -- Start of comments
3532 -- API name : Validate_Delivery_uom
3533 -- Type     : Public
3534 -- Pre-reqs : None.
3535 -- Procedure: API to validate Routing Request delivery UOM. Api calls wrapper api validate_UOM to this.
3536 -- Parameters :
3537 -- IN:
3538 --      p_organization_id       IN  Organization Id.
3539 --      p_delivery_index        IN  Index of delivery record.
3540 --      p_delivery              IN  Delivery_Rec_Type,Routing Request delivery record.
3541 -- OUT:
3542 --      x_return_status         OUT NOCOPY varchar2 standard to output status.
3543 -- End of comments
3544 PROCEDURE Validate_Delivery_uom(
3545         p_organization_id       IN 	NUMBER,
3546         p_delivery_index        IN      NUMBER,
3547         p_delivery              IN OUT  NOCOPY  Delivery_Rec_Type,
3548         x_return_status         OUT NOCOPY      VARCHAR2) IS
3549 
3550 l_debug_on BOOLEAN;
3551 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Validate_Delivery_uom';
3552 
3553 l_return_status		varchar2(1);
3554 l_delivery_status	varchar2(30);
3555 l_convert_qty		number;
3556 l_num_warnings          number;
3557 l_num_errors            number;
3558 BEGIN
3559 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3560 IF l_debug_on IS NULL THEN
3561     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3562 END IF;
3563 
3564 IF l_debug_on THEN
3565     WSH_DEBUG_SV.push(l_module_name);
3566     WSH_DEBUG_SV.log(l_module_name,'p_delivery_index',p_delivery_index);
3567     WSH_DEBUG_SV.log(l_module_name,'p_delivery.Ship_From_Address1.count',p_delivery.Ship_From_Address1.count);
3568 END IF;
3569 
3570 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3571 
3572 
3573 IF (p_delivery.weight_uom(p_delivery_index) IS NOT NULL) THEN
3574 --Call wrapper api for final validation.
3575 Validate_UOM(
3576         p_uom_type		=> 'WEIGHT',
3577         p_organization_id	=> p_organization_id,
3578         p_rr_uom_code		=> p_delivery.weight_uom(p_delivery_index),
3579         x_convert_qty		=> l_convert_qty,
3580         x_return_status		=> l_return_status);
3581 
3582     IF l_debug_on THEN
3583        WSH_DEBUG_SV.log(l_module_name,'validate_uom l_return_status',l_return_status);
3584     END IF;
3585 
3586      wsh_util_core.api_post_call(
3587            p_return_status => l_return_status,
3588            x_num_warnings  => l_num_warnings,
3589            x_num_errors    => l_num_errors);
3590   END IF;
3591 
3592 IF (p_delivery.volume_uom(p_delivery_index)IS NOT NULL) THEN
3593 --Call wrapper api for final validation.
3594 Validate_UOM(
3595         p_uom_type		=> 'VOLUME',
3596         p_organization_id	=> p_organization_id,
3597         p_rr_uom_code		=> p_delivery.volume_uom(p_delivery_index),
3598         x_convert_qty		=> l_convert_qty,
3599         x_return_status		=> l_return_status);
3600 
3601     IF l_debug_on THEN
3602        WSH_DEBUG_SV.log(l_module_name,'validate_uom l_return_status',l_return_status);
3603     END IF;
3604     wsh_util_core.api_post_call(
3605            p_return_status => l_return_status,
3606            x_num_warnings  => l_num_warnings,
3607            x_num_errors    => l_num_errors);
3608 END IF;
3609 
3610 
3611 IF l_num_errors > 0 THEN
3612     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3613 ELSIF l_num_warnings > 0 THEN
3614     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3615 END IF;
3616 
3617 IF l_debug_on THEN
3618     WSH_DEBUG_SV.pop(l_module_name);
3619 END IF;
3620 EXCEPTION
3621 WHEN FND_API.G_EXC_ERROR THEN
3622      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
3623 
3624      p_delivery.error_flag(p_delivery_index):= 'Y';
3625 
3626 
3627      IF l_debug_on THEN
3628       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
3629 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3630       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3631      END IF;
3632 
3633 WHEN OTHERS THEN
3634     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3635 
3636     p_delivery.error_flag(p_delivery_index):= 'Y';
3637 
3638     IF l_debug_on THEN
3639        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
3640 Oracle error message is '||
3641 
3642 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3643        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3644     END IF;
3645 
3646      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
3647      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
3648      fnd_msg_pub.add;
3649 
3650 END Validate_Delivery_uom;
3651 
3652 
3653 -- Start of comments
3654 -- API name : Update_Split_Details
3655 -- Type     : Private
3656 -- Pre-reqs : None.
3657 -- Procedure: API to sum up and split the delivery detail lines. Api does
3658 --           1.Update the first detail line with attributes of routing request.
3659 --           2.For the requested qty update with grater of item or sum of crurrent requested qty.
3660 --           3.If routing request qty is less then request qty then split the
3661 --             line by difference of req. qty and routing request qty.
3662 --           4.Calculate the ratio for secondary qty
3663 --           5.Drive the secondary qty from ratio and primary qty.
3664 --           6.If routing request qty is less then request qty then split the
3665 --             line by difference of req. qty and routing request qty.
3666 --           7.Update the newly create line result of split, with
3667 --             ship_from_location_id to -1,ignore_for_planning to 'Y' and
3668 --             routing_req_id,picked_quantity,picked_quantity2,
3669 --             earliest_pickup_date and latest_pickup_date to NULL. This to
3670 --             nullify the update on main line.
3671 --           8.Update the Weight/Volume attributes to first line.
3672 --           9.Except the first line,delete the remaining detail lines.
3673 -- Parameters :
3674 -- IN:
3675 --      p_detail_ids   IN  List of delivery detail line Id's.
3676 --      p_detail_att   IN  Attributes of delivery and delivery line.
3677 -- OUT:
3678 --      x_new_detail_ids OUT NOCOPY      New delivery detail id's created result of split.
3679 --      x_return_status  OUT NOCOPY      Standard to output api status.
3680 -- End of comments
3681 PROCEDURE Update_Split_Details(
3682         p_detail_ids       	IN      wsh_util_core.id_tab_type,
3683         p_detail_att            IN      detail_att_rec_type,
3684 	x_new_detail_ids	OUT 	NOCOPY	wsh_util_core.id_tab_type,
3685 	x_return_status		OUT	NOCOPY	varchar2) IS
3686 
3687 l_debug_on BOOLEAN;
3688 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Update_Split_Details';
3689 l_return_status		varchar2(1);
3690 l_frozen_flag		varchar2(1);
3691 
3692 l_item_quantity			number;
3693 l_item_quantity2		number;
3694 l_split_delivery_detail_id	number;
3695 
3696 l_picked_quantity2		number := 0;
3697 l_picked_quantity		number := 0;
3698 l_index				number;
3699 l_ratio				number;
3700 
3701 -- HW OPMCONV - Removed OPM precision
3702 
3703 l_num_warnings          number;
3704 l_num_errors            number;
3705 l_first_detail_id	number;
3706 l_earliest_pickup_date	date;
3707 l_latest_pickup_date	date;
3708 
3709 l_dbi_rs               VARCHAR2(1); -- Return Status from DBI API
3710 
3711 BEGIN
3712 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
3713 IF l_debug_on IS NULL THEN
3714     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
3715 END IF;
3716 
3717 IF l_debug_on THEN
3718     WSH_DEBUG_SV.push(l_module_name);
3719     WSH_DEBUG_SV.log(l_module_name,'p_detail_ids.count',p_detail_ids.count);
3720 END IF;
3721 
3722 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
3723 
3724 
3725 l_index := p_detail_ids.first;
3726 l_first_detail_id:=p_detail_ids(l_index);
3727 
3728 IF l_debug_on THEN
3729     WSH_DEBUG_SV.log(l_module_name,'item_quantity',p_detail_att.item_quantity);
3730     WSH_DEBUG_SV.log(l_module_name,'requested_quantity',p_detail_att.requested_quantity);
3731     WSH_DEBUG_SV.log(l_module_name,'requested_quantity2',p_detail_att.requested_quantity2);
3732     WSH_DEBUG_SV.log(l_module_name,'delivery_detail_id',l_first_detail_id);
3733     WSH_DEBUG_SV.log(l_module_name,'dd_net_weight',p_detail_att.dd_net_weight);
3734     WSH_DEBUG_SV.log(l_module_name,'dd_gross_weight',p_detail_att.dd_gross_weight);
3735     WSH_DEBUG_SV.log(l_module_name,'dd_volume',p_detail_att.dd_volume);
3736     WSH_DEBUG_SV.log(l_module_name,'dd_wv_frozen_flag',p_detail_att.dd_wv_frozen_flag);
3737 END IF;
3738 
3739 
3740 --Update the line with grater of item or requested qty and the split if requried.
3741 IF ( p_detail_att.item_quantity >= p_detail_att.requested_quantity) THEN
3742     l_picked_quantity:= p_detail_att.item_quantity;
3743 ELSE
3744     l_picked_quantity:= p_detail_att.requested_quantity;
3745 END IF;
3746 
3747 --Calculate the ratio for secondary qty.
3748 IF (p_detail_att.requested_quantity2 <> 0 and
3749 p_detail_att.requested_quantity <> 0) THEN
3750     l_ratio:= p_detail_att.requested_quantity2/
3751 p_detail_att.requested_quantity;
3752 END IF;
3753 
3754 
3755 --Calculate the Secondary qty.
3756 IF (p_detail_att.requested_quantity2 <> 0 ) THEN
3757 -- HW OPMCONV - No need to use OPM precision. Use current INV which is 5
3758     l_picked_quantity2 := ROUND(l_ratio * l_picked_quantity,
3759                           WSH_UTIL_CORE.C_MAX_DECIMAL_DIGITS_INV);
3760 ELSE
3761     l_picked_quantity2:= NULL;
3762 END IF;
3763 
3764 --Set the Wt/Vol calculation frozen flag to 'Y', if weight/Volume is passed.
3765 IF (p_detail_att.weight IS NOT NULL or p_detail_att.volume IS NOT NULL) THEN
3766     l_frozen_flag:='Y';
3767 ELSE
3768     l_frozen_flag:='N';
3769 END IF;
3770 
3771 IF l_debug_on THEN
3772     WSH_DEBUG_SV.log(l_module_name,'l_picked_quantity',l_picked_quantity);
3773     WSH_DEBUG_SV.log(l_module_name,'l_ratio',l_ratio);
3774     WSH_DEBUG_SV.log(l_module_name,'l_picked_quantity2',l_picked_quantity2);
3775     WSH_DEBUG_SV.log(l_module_name,'l_frozen_flag',l_frozen_flag);
3776     WSH_DEBUG_SV.log(l_module_name,'requested_quantity',p_detail_att.requested_quantity);
3777     WSH_DEBUG_SV.log(l_module_name,'ship_from_location_id',p_detail_att.ship_from_location_id);
3778     WSH_DEBUG_SV.log(l_module_name,'party_id',p_detail_att.party_id);
3779 END IF;
3780 
3781 IF (p_detail_att.item_quantity > 0 ) THEN  -- {
3782 
3783     IF l_debug_on THEN
3784        WSH_DEBUG_SV.log(l_module_name,'p_detail_att.earliest_pickup_date',p_detail_att.earliest_pickup_date);
3785        WSH_DEBUG_SV.log(l_module_name,'p_detail_att.latest_pickup_date',p_detail_att.latest_pickup_date);
3786     END IF;
3787 
3788     l_earliest_pickup_date := add_time_to_date(p_detail_att.earliest_pickup_date,'F');
3789     l_latest_pickup_date := add_time_to_date(p_detail_att.latest_pickup_date,'L');
3790 
3791     IF l_debug_on THEN
3792        WSH_DEBUG_SV.log(l_module_name,'l_earliest_pickup_date',l_earliest_pickup_date);
3793        WSH_DEBUG_SV.log(l_module_name,'l_latest_pickup_date',l_latest_pickup_date);
3794     END IF;
3795 
3796     --Update the first line of p_detail_att
3797     UPDATE wsh_delivery_details
3798      SET requested_quantity = p_detail_att.requested_quantity,
3799          requested_quantity2 = decode(p_detail_att.requested_quantity2,0,NULL,p_detail_att.requested_quantity2),
3800          picked_quantity = l_picked_quantity,
3801          picked_quantity2 = l_picked_quantity2,
3802          routing_req_id = p_detail_att.routing_req_id,
3803          earliest_pickup_date = l_earliest_pickup_date,
3804          latest_pickup_date = l_latest_pickup_date,
3805          party_id = p_detail_att.party_id,
3806          ship_from_location_id = p_detail_att.ship_from_location_id,
3807          ignore_for_planning = 'N',
3808          wv_frozen_flag = p_detail_att.dd_wv_frozen_flag,
3809          net_weight = p_detail_att.dd_net_weight,
3810          gross_weight = p_detail_att.dd_gross_weight,
3811          volume = p_detail_att.dd_volume,
3812          last_update_date = sysdate,
3813          last_updated_by = FND_GLOBAL.USER_ID
3814      WHERE delivery_detail_id = l_first_detail_id
3815      AND  released_status='X';
3816 
3817     --Delivery Details for new delivery to be created
3818     x_new_detail_ids(x_new_detail_ids.count + 1) := l_first_detail_id;
3819 
3820     --
3821     -- DBI Project
3822     -- Update of wsh_delivery_details where requested_quantity/released_status
3823     -- are changed, call DBI API after the update.
3824     -- DBI API will check if DBI is installed
3825     IF l_debug_on THEN
3826       WSH_DEBUG_SV.log(l_module_name,'Calling DBI API.Detail Count-',x_new_detail_ids.count);
3827     END IF;
3828     WSH_INTEGRATION.DBI_Update_Detail_Log
3829       (p_delivery_detail_id_tab => x_new_detail_ids,
3830        p_dml_type               => 'UPDATE',
3831        x_return_status          => l_dbi_rs);
3832 
3833     IF l_debug_on THEN
3834       WSH_DEBUG_SV.log(l_module_name,'Return Status after DBI Call-',l_dbi_rs);
3835     END IF;
3836     -- Only Handle Unexpected error
3837     IF l_dbi_rs = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR THEN
3838       --
3839       x_return_status := l_dbi_rs;
3840       IF l_debug_on THEN
3841         WSH_DEBUG_SV.pop(l_module_name);
3842       END IF;
3843       --
3844       RETURN;
3845     END IF;
3846     -- End of Code for DBI Project
3847     --
3848 
3849     IF (p_detail_att.item_quantity <  p_detail_att.requested_quantity ) THEN --{
3850 
3851        --Qty to be split.
3852        l_item_quantity := p_detail_att.requested_quantity - p_detail_att.item_quantity;
3853 
3854        IF l_debug_on THEN
3855           WSH_DEBUG_SV.log(l_module_name,'p_detail_att.requested_quantity2',p_detail_att.requested_quantity2);
3856        END IF;
3857 
3858        --Calculate the secondary split qty.
3859        IF (p_detail_att.requested_quantity2 <> 0) THEN
3860 -- HW OPMCONV - No need to use OPM precision. Use current INV which is 5
3861           l_item_quantity2 := ROUND(l_ratio * l_item_quantity,WSH_UTIL_CORE.C_MAX_DECIMAL_DIGITS_INV);
3862        ELSE
3863           l_item_quantity2 := NULL;
3864        END IF;
3865 
3866        IF l_debug_on THEN
3867           WSH_DEBUG_SV.log(l_module_name,'l_item_quantity',l_item_quantity);
3868           WSH_DEBUG_SV.log(l_module_name,'l_item_quantity2',l_item_quantity2);
3869        END IF;
3870 
3871        --Split the first detail line already updated with routing request attributes.
3872        WSH_DELIVERY_DETAILS_ACTIONS.Split_Delivery_Details (
3873         p_from_detail_id        => l_first_detail_id,
3874         p_req_quantity          => l_item_quantity,
3875         p_req_quantity2         => l_item_quantity2,
3876         p_unassign_flag         => 'Y',
3877         p_converted_flag        => NULL,
3878         p_manual_split          => NULL,
3879         x_new_detail_id         => l_split_delivery_detail_id,
3880         x_return_status         => l_return_status);
3881 
3882         IF l_debug_on THEN
3883            WSH_DEBUG_SV.log(l_module_name,'Split_Delivery_Details l_return_status',l_return_status);
3884            WSH_DEBUG_SV.log(l_module_name,'l_split_delivery_detail_id',l_split_delivery_detail_id);
3885            WSH_DEBUG_SV.log(l_module_name,'l_item_quantity',l_item_quantity);
3886         END IF;
3887         wsh_util_core.api_post_call(
3888            p_return_status => l_return_status,
3889            x_num_warnings  => l_num_warnings,
3890            x_num_errors    => l_num_errors);
3891 
3892        --Update the new line create because of split, to nullify the update on original line.
3893         UPDATE wsh_delivery_details
3894         SET ship_from_location_id = -1,
3895          ignore_for_planning = 'Y',
3896          routing_req_id = null,
3897          picked_quantity = null,
3898          picked_quantity2 = null,
3899          earliest_pickup_date = null,
3900          latest_pickup_date = null,
3901          last_update_date = sysdate,
3902          last_updated_by = FND_GLOBAL.USER_ID
3903         WHERE delivery_detail_id = l_split_delivery_detail_id;
3904     END IF; --}
3905 
3906 
3907     --Update the first line with Weight/Volume attributes.
3908     UPDATE wsh_delivery_details
3909      SET net_weight = nvl(p_detail_att.weight,net_weight),
3910          gross_weight = nvl(p_detail_att.weight,gross_weight),
3911          weight_uom_code = nvl(p_detail_att.weight_uom,weight_uom_code),
3912          volume = nvl(p_detail_att.volume,volume),
3913          volume_uom_code = nvl(p_detail_att.volume_uom,volume_uom_code),
3914          wv_frozen_flag= decode(l_frozen_flag,'N',wv_frozen_flag,'Y',l_frozen_flag),
3915          last_update_date = sysdate,
3916          last_updated_by = FND_GLOBAL.USER_ID
3917      WHERE delivery_detail_id = l_first_detail_id
3918      AND  released_status='X';
3919 
3920 
3921     --Delete the remaining detail lines.
3922     IF (p_detail_ids.count > 1 ) THEN --{
3923 
3924        l_index := p_detail_ids.next(l_index);
3925 
3926        WHILE (l_index IS NOT NULL) LOOP
3927 
3928           IF l_debug_on THEN
3929               WSH_DEBUG_SV.log(l_module_name,'delivery_detail_id',p_detail_ids(l_index));
3930           END IF;
3931 
3932           WSH_DELIVERY_DETAILS_PKG.Delete_Delivery_Details (
3933               p_delivery_detail_id      => p_detail_ids(l_index),
3934               x_return_status           => l_return_status);
3935 
3936            IF l_debug_on THEN
3937               WSH_DEBUG_SV.log(l_module_name,'Delete_Delivery_Details l_return_status',l_return_status);
3938            END IF;
3939            wsh_util_core.api_post_call(
3940               p_return_status => l_return_status,
3941               x_num_warnings  => l_num_warnings,
3942               x_num_errors    => l_num_errors);
3943 
3944 
3945        l_index := p_detail_ids.next(l_index);
3946        END LOOP;
3947     END IF; --}
3948 
3949 END IF; --}
3950 
3951 IF l_num_errors > 0 THEN
3952     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
3953 ELSIF l_num_warnings > 0 THEN
3954     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
3955 END IF;
3956 
3957 IF l_debug_on THEN
3958 
3959 WSH_DEBUG_SV.log(l_module_name,'x_new_detail_ids.count',x_new_detail_ids.count);
3960     WSH_DEBUG_SV.pop(l_module_name);
3961 END IF;
3962 EXCEPTION
3963 WHEN FND_API.G_EXC_ERROR THEN
3964      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
3965 
3966      IF l_debug_on THEN
3967       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
3968 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
3969       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
3970      END IF;
3971 
3972 WHEN OTHERS THEN
3973     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
3974 
3975     IF l_debug_on THEN
3976        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
3977 Oracle error message is '||
3978 
3979 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
3980        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
3981     END IF;
3982 
3983      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
3984      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
3985      fnd_msg_pub.add;
3986 
3987 END Update_Split_Details;
3988 
3989 
3990 -- Start of comments
3991 -- API name : UnAssign_Details
3992 -- Type     : Private
3993 -- Pre-reqs : None.
3994 -- Procedure : API to Unassigned detail lines from delivery. Api does
3995 --             1.Get the line status and delivery_id of all the detail lines for input routing request id.
3996 --             2.If any one of line is not open then error out.
3997 --             3.Unplan the delivery associate with the lines.
3998 --             4.Un assign the detail lines by calling api WSH_DELIVERY_DETAILS_ACTIONS.Unassign_Multiple_Details
3999 --
4000 -- Parameters :
4001 -- IN:
4002 --      p_routing_req_id   IN  Routing Request id
4003 -- OUT:
4004 --      x_return_status OUT NOCOPY      Standard to output api status.
4005 -- End of comments
4006 PROCEDURE UnAssign_Details(
4007 	p_routing_req_id	IN number ,
4008 	x_return_status		OUT NOCOPY varchar2) IS
4009 
4010 l_debug_on BOOLEAN;
4011 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.'|| G_PKG_NAME||'.'||'UnAssign_Details';
4012 l_return_status	varchar2(1);
4013 
4014 -- Select released_status and associated delivery for unplaning and un assigning.
4015 CURSOR unassign_del_csr IS
4016 SELECT wdd.delivery_detail_id,wdd.released_status,wda.delivery_id
4017 FROM   wsh_delivery_details wdd,
4018         wsh_delivery_assignments_v wda
4019 WHERE  routing_req_id = p_routing_req_id
4020 AND    wdd.delivery_detail_id = wda.delivery_detail_id
4021 ORDER BY wda.delivery_id;
4022 
4023 l_msg_count	number;
4024 l_detail_ids    wsh_util_core.id_tab_type;
4025 l_action_prms   wsh_glbl_var_strct_grp.dd_action_parameters_rec_type;
4026 l_dlvy_ids      wsh_util_core.id_tab_type;
4027 l_prev_delivery_id number;
4028 l_num_warnings          number;
4029 l_num_errors            number;
4030 BEGIN
4031 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4032 IF l_debug_on IS NULL THEN
4033     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4034 END IF;
4035 
4036 IF l_debug_on THEN
4037     WSH_DEBUG_SV.push(l_module_name);
4038     WSH_DEBUG_SV.log(l_module_name,'p_routing_req_id',p_routing_req_id);
4039 END IF;
4040 
4041 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4042 
4043 
4044 FOR del_rec IN unassign_del_csr LOOP
4045     IF l_debug_on THEN
4046       WSH_DEBUG_SV.log(l_module_name,'delivery_detail_id',del_rec.delivery_detail_id);
4047       WSH_DEBUG_SV.log(l_module_name,'released_status',del_rec.released_status);
4048       WSH_DEBUG_SV.log(l_module_name,'delivery_id',del_rec.delivery_id);
4049       WSH_DEBUG_SV.log(l_module_name,'l_prev_delivery_id',l_prev_delivery_id);
4050     END IF;
4051 
4052    --Unassigned allowed only lines are released status 'X' i.e. Inbound open lines.
4053    IF (del_rec.released_status <> 'X' ) THEN
4054        FND_MESSAGE.SET_NAME('WSH','WSH_RR_UNASSIGN_DET_ERROR');
4055        fnd_msg_pub.add;
4056        raise fnd_api.g_exc_error;
4057    END IF;
4058    l_detail_ids(l_detail_ids.count + 1):= del_rec.delivery_detail_id;
4059 
4060 
4061    IF (del_rec.delivery_id <> nvl(l_prev_delivery_id,-9) ) THEN
4062       l_dlvy_ids(l_dlvy_ids.count + 1):=del_rec.delivery_id;
4063    END IF;
4064 
4065    l_prev_delivery_id:=del_rec.delivery_id;
4066 END LOOP;
4067 
4068 
4069 --Unplan the delivery before unassiging.
4070 IF (l_dlvy_ids.count > 0 ) THEN
4071     WSH_NEW_DELIVERY_ACTIONS.Unplan
4072                 (p_del_rows      => l_dlvy_ids,
4073                  x_return_status =>l_return_status);
4074 
4075     IF l_debug_on THEN
4076        WSH_DEBUG_SV.log(l_module_name,'WSH_NEW_DELIVERY_ACTIONS.plan l_return_status',l_return_status);
4077     END IF;
4078 
4079     wsh_util_core.api_post_call(
4080            p_return_status => l_return_status,
4081            x_num_warnings  => l_num_warnings,
4082            x_num_errors    => l_num_errors);
4083 
4084 END IF;
4085 
4086 
4087 l_action_prms.caller:='WSH_IB';
4088 --Call WSH_DELIVERY_DETAILS_ACTIONS.Unassign_Multiple_Details with caller 'WSH_IP' for un assiginig details.
4089 IF (l_detail_ids.count > 0 ) THEN
4090     WSH_DELIVERY_DETAILS_ACTIONS.Unassign_Multiple_Details(
4091        p_rec_of_detail_ids => l_detail_ids,
4092        p_from_delivery     => 'Y',
4093        p_from_container    => 'N',
4094        p_action_prms       => l_action_prms,
4095        x_return_status     => l_return_status);
4096 
4097     IF l_debug_on THEN
4098        WSH_DEBUG_SV.log(l_module_name,'Unassign_Multiple_Details
4099 l_return_status',l_return_status);
4100     END IF;
4101 
4102     wsh_util_core.api_post_call(
4103            p_return_status => l_return_status,
4104            x_num_warnings  => l_num_warnings,
4105            x_num_errors    => l_num_errors);
4106 END IF;
4107 
4108 IF l_num_errors > 0 THEN
4109     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4110 ELSIF l_num_warnings > 0 THEN
4111     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4112 END IF;
4113 
4114 IF l_debug_on THEN
4115     WSH_DEBUG_SV.pop(l_module_name);
4116 END IF;
4117 EXCEPTION
4118 WHEN FND_API.G_EXC_ERROR THEN
4119      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
4120 
4121      IF l_debug_on THEN
4122       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
4123 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4124       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4125      END IF;
4126 
4127 WHEN OTHERS THEN
4128     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4129 
4130     IF l_debug_on THEN
4131        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
4132 Oracle error message is '||
4133 
4134 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4135        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4136     END IF;
4137 
4138 
4139      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
4140      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
4141      fnd_msg_pub.add;
4142 
4143 END UnAssign_Details;
4144 
4145 
4146 -- Start of comments
4147 -- API name : Create_Delivery
4148 -- Type     : Public
4149 -- Pre-reqs : None.
4150 -- Procedure: API to create delivery for Routing Request lines.Api does
4151 --            1.Auto create delivery by calling api WSH_INTERFACE_GRP.Delivery_Detail_Action.
4152 --            2.If delivery create is more than one than error out.
4153 --            3.Delivery created is one, than go through details line to verify delivery associated is same with newly created delivery.
4154 --            4.Plan the newly created delivery.
4155 --            5.Updates wsh_new_deliveries with delivery level attributes of routing request.
4156 --            6.If weight and volume is passed set the wv_frozen_flag to 'Y'.
4157 --            7.Calculate the weight and volume.
4158 -- Parameters :
4159 -- IN:
4160 --      p_detail_ids   		IN  List of detail lines for which delivery need to be created.
4161 --      p_delivery_index  	IN  Index of delivery record.
4162 --      p_delivery      	IN  Delivery record type Delivery_Rec_Type.
4163 -- OUT:
4164 --      x_new_deliveries OUT NOCOPY      Id of new delivery created.
4165 --      x_return_status  OUT NOCOPY      Standard to output api status.
4166 -- End of comments
4167 PROCEDURE Create_Delivery(
4168         p_detail_ids		IN	 wsh_util_core.id_tab_type,
4169         p_delivery_index        IN      NUMBER,
4170         p_delivery              IN OUT  NOCOPY Delivery_Rec_Type,
4171         x_new_deliveries	OUT	NOCOPY wsh_util_core.id_tab_type,
4172         x_return_status         OUT NOCOPY      VARCHAR2) IS
4173 
4174 l_debug_on BOOLEAN;
4175 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Create_Delivery';
4176 l_return_status		varchar2(1);
4177 l_ship_from_location_id	number;
4178 l_party_id		number;
4179 l_party_site_id		number;
4180 l_dummy_rows		wsh_util_core.id_tab_type;
4181 l_new_deliveries	wsh_util_core.id_tab_type;
4182 l_new_detail_ids	wsh_util_core.id_tab_type;
4183 
4184 --Proration
4185 l_old_net_weight	NUMBER :=0;
4186 l_old_gross_weight	NUMBER :=0;
4187 l_new_net_weight	NUMBER :=0;
4188 l_new_gross_weight	NUMBER :=0;
4189 l_delivery_UOM_code	VARCHAR2(3);
4190 
4191 CURSOR c_get_delivery_weight(p_deliveryid NUMBER) IS
4192 SELECT net_weight, gross_weight, weight_uom_code
4193 FROM   wsh_new_deliveries
4194 WHERE  delivery_id = p_deliveryid;
4195 --Proration
4196 
4197 --Cursor to get the PO and delivery information.
4198 CURSOR get_del_info(p_detail_id NUMBER) IS
4199 SELECT wdd.source_header_number,
4200 	wdd.source_line_number,
4201 	wdd.po_shipment_line_number,
4202 	wdd.source_blanket_reference_num,
4203 	wda.delivery_id
4204 FROM   wsh_delivery_details wdd,
4205         wsh_delivery_assignments_v wda
4206 WHERE  wdd.delivery_detail_id = p_detail_id
4207 AND    wdd.delivery_detail_id = wda.delivery_detail_id;
4208 
4209 l_del_info	get_del_info%ROWTYPE;
4210 
4211 l_prev_delivery_id 	NUMBER;
4212 l_delivery_id		NUMBER;
4213 
4214 l_dd_action_prms   WSH_GLBL_VAR_STRCT_GRP.dd_action_parameters_rec_type;
4215 l_dd_action_out_rec    WSH_GLBL_VAR_STRCT_GRP.dd_action_out_rec_type;
4216 
4217 l_msg_count	NUMBER;
4218 l_msg_data	varchar2(2000);
4219 
4220 l_index			number;
4221 l_frozen		varchar2(1);
4222 l_num_warnings          number;
4223 l_num_errors            number;
4224 
4225 BEGIN
4226 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4227 IF l_debug_on IS NULL THEN
4228     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4229 END IF;
4230 
4231 IF l_debug_on THEN
4232     WSH_DEBUG_SV.push(l_module_name);
4233     WSH_DEBUG_SV.log(l_module_name,'p_detail_ids.count',p_detail_ids.count);
4234     WSH_DEBUG_SV.log(l_module_name,'p_delivery_index',p_delivery_index);
4235     WSH_DEBUG_SV.log(l_module_name,'p_delivery.Ship_From_Address1.count',p_delivery.Ship_From_Address1.count);
4236 END IF;
4237 
4238 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4239 
4240 --Auto create delivery
4241 IF (p_detail_ids.count > 0 ) THEN
4242 
4243     l_dd_action_prms.caller      := 'WSH_IB';
4244     l_dd_action_prms.action_code := 'AUTOCREATE-DEL';
4245 
4246     WSH_INTERFACE_GRP.Delivery_Detail_Action (
4247       p_api_version_number => 1.0,
4248       p_init_msg_list      => FND_API.G_FALSE,
4249       p_commit             => FND_API.G_FALSE,
4250       x_return_status      => l_return_status,
4251       x_msg_count          => l_msg_count,
4252       x_msg_data           => l_msg_data,
4253       p_detail_id_tab      => p_detail_ids,
4254       p_action_prms        => l_dd_action_prms,
4255       x_action_out_rec     => l_dd_action_out_rec);
4256 
4257 
4258     IF l_debug_on THEN
4259        WSH_DEBUG_SV.log(l_module_name,'wsh_util_validate.validate_uom l_return_status',l_return_status);
4260        WSH_DEBUG_SV.log(l_module_name,'l_dd_action_out_rec.count',l_dd_action_out_rec.delivery_id_tab.count);
4261     END IF;
4262 
4263     wsh_util_core.api_post_call(
4264            p_return_status => l_return_status,
4265            x_num_warnings  => l_num_warnings,
4266            x_num_errors    => l_num_errors);
4267 
4268     IF l_debug_on THEN
4269        WSH_DEBUG_SV.log(l_module_name,'first out delivery',l_dd_action_out_rec.delivery_id_tab(l_dd_action_out_rec.delivery_id_tab.first));
4270     END IF;
4271 
4272     --Number of delivery created should always be one.
4273     IF (l_dd_action_out_rec.delivery_id_tab.count= 1 ) THEN
4274        FOR i IN p_detail_ids.first..p_detail_ids.last LOOP
4275 
4276          IF l_debug_on THEN
4277             WSH_DEBUG_SV.log(l_module_name,'Index i',i);
4278             WSH_DEBUG_SV.log(l_module_name,'delivert_detail_id',p_detail_ids(i));
4279          END IF;
4280 
4281          OPEN get_del_info ( p_detail_ids(i));
4282          FETCH get_del_info INTO l_del_info;
4283          CLOSE get_del_info;
4284 
4285          IF l_debug_on THEN
4286             WSH_DEBUG_SV.log(l_module_name,'delivery_id',l_del_info.delivery_id);
4287             WSH_DEBUG_SV.log(l_module_name,'source_header_number',l_del_info.source_header_number);
4288             WSH_DEBUG_SV.log(l_module_name,'source_line_number',l_del_info.source_line_number);
4289             WSH_DEBUG_SV.log(l_module_name,'po_shipment_line_number',l_del_info.po_shipment_line_number);
4290             WSH_DEBUG_SV.log(l_module_name,'source_blanket_reference_num',l_del_info.source_blanket_reference_num);
4291          END IF;
4292 
4293          -- Scan through details line, delivery associated is same for all lines.
4294          IF (l_prev_delivery_id IS NOT NULL AND l_prev_delivery_id <> l_del_info.delivery_id) THEN
4295            FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_GROUP_NOT_MATCH');
4296            FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_del_info.delivery_id));
4297            FND_MESSAGE.SET_TOKEN('PO_HEADER_NUM',l_del_info.source_header_number);
4298            FND_MESSAGE.SET_TOKEN('PO_LINE_NUM', l_del_info.source_line_number);
4299            FND_MESSAGE.SET_TOKEN('PO_SHIPMENT_LINE_NUM', l_del_info.po_shipment_line_number);
4300            FND_MESSAGE.SET_TOKEN('PO_RELEASE_NUM',l_del_info.source_blanket_reference_num);
4301            fnd_msg_pub.add;
4302            raise fnd_api.g_exc_error;
4303          ELSE
4304            x_new_deliveries(1):=l_del_info.delivery_id;
4305          END IF;
4306        l_prev_delivery_id:=l_del_info.delivery_id;
4307 
4308        END LOOP;
4309 
4310     ELSE
4311         -- Error, multiple deliveries created.
4312         -- E.g Line with different ship to location are part of Routing Request Delivery.
4313        FOR i IN p_detail_ids.first..p_detail_ids.last LOOP
4314 
4315          IF l_debug_on THEN
4316             WSH_DEBUG_SV.log(l_module_name,'Index i',i);
4317             WSH_DEBUG_SV.log(l_module_name,'delivert_detail_id',p_detail_ids(i));
4318          END IF;
4319 
4320          OPEN get_del_info ( p_detail_ids(i));
4321          FETCH get_del_info INTO l_del_info;
4322          CLOSE get_del_info;
4323 
4324          IF l_debug_on THEN
4325             WSH_DEBUG_SV.log(l_module_name,'delivery_id',l_del_info.delivery_id);
4326             WSH_DEBUG_SV.log(l_module_name,'source_header_number',l_del_info.source_header_number);
4327             WSH_DEBUG_SV.log(l_module_name,'source_line_number',l_del_info.source_line_number);
4328             WSH_DEBUG_SV.log(l_module_name,'po_shipment_line_number',l_del_info.po_shipment_line_number);
4329             WSH_DEBUG_SV.log(l_module_name,'source_blanket_reference_num',l_del_info.source_blanket_reference_num);
4330          END IF;
4331 
4332 
4333          FND_MESSAGE.SET_NAME('WSH','WSH_RR_PO_GROUP_NOT_MATCH');
4334          FND_MESSAGE.SET_TOKEN('DEL_NAME',wsh_new_deliveries_pvt.get_name(l_del_info.delivery_id));
4335          FND_MESSAGE.SET_TOKEN('PO_HEADER_NUM',l_del_info.source_header_number);
4336          FND_MESSAGE.SET_TOKEN('PO_LINE_NUM', l_del_info.source_line_number);
4337          FND_MESSAGE.SET_TOKEN('PO_SHIPMENT_LINE_NUM', l_del_info.po_shipment_line_number);
4338          FND_MESSAGE.SET_TOKEN('PO_RELEASE_NUM',l_del_info.source_blanket_reference_num);
4339          fnd_msg_pub.add;
4340        END LOOP;
4341 
4342        raise fnd_api.g_exc_error;
4343     END IF;
4344 
4345 ELSE
4346     raise fnd_api.g_exc_error;
4347 END IF;
4348 
4349 
4350 --Plan the newly created delivery.
4351 IF (x_new_deliveries.count > 0) THEN
4352     WSH_NEW_DELIVERY_ACTIONS.plan
4353                 (p_del_rows             =>x_new_deliveries,
4354                  x_return_status        => l_return_status);
4355 
4356     IF l_debug_on THEN
4357        WSH_DEBUG_SV.log(l_module_name,'WSH_NEW_DELIVERY_ACTIONS.plan l_return_status',l_return_status);
4358     END IF;
4359 
4360     wsh_util_core.api_post_call(
4361            p_return_status => l_return_status,
4362            x_num_warnings  => l_num_warnings,
4363            x_num_errors    => l_num_errors);
4364 END IF;
4365 
4366 --START Proration
4367 OPEN c_get_delivery_weight(x_new_deliveries(1));
4368 FETCH c_get_delivery_weight INTO l_old_net_weight, l_old_gross_weight, l_delivery_UOM_code;
4369 CLOSE c_get_delivery_weight;
4370 --END Proration
4371 
4372 IF (p_delivery.total_weight(p_delivery_index) IS NOT NULL
4373      OR  p_delivery.total_volume(p_delivery_index) IS NOT NULL) THEN
4374     l_frozen:='Y';
4375 ELSE
4376     l_frozen:='N';
4377 END IF;
4378 
4379 IF (x_new_deliveries.count > 0 ) THEN
4380 --Update the created delivery with delivery attributes of routing request.
4381 FORALL i IN x_new_deliveries.first..x_new_deliveries.last
4382   UPDATE wsh_new_deliveries
4383   SET  number_of_lpn = p_delivery.number_of_containers(p_delivery_index),
4384 	net_weight = nvl(p_delivery.total_weight(p_delivery_index),net_weight),
4385 	gross_weight = nvl(p_delivery.total_weight(p_delivery_index),gross_weight),
4386 	weight_uom_code = nvl(p_delivery.weight_uom(p_delivery_index),weight_uom_code),
4387         volume       = nvl(p_delivery.total_volume(p_delivery_index),volume),
4388         volume_uom_code       = nvl(p_delivery.volume_uom(p_delivery_index),volume_uom_code),
4389         wv_frozen_flag = l_frozen,
4390         additional_shipment_info = p_delivery.remark(p_delivery_index),
4391         last_update_date = sysdate,
4392         last_updated_by = FND_GLOBAL.USER_ID
4393   WHERE delivery_id = x_new_deliveries(i);
4394 END IF;
4395 
4396 --Proration
4397 --compare the old and new weights
4398 IF (p_delivery.total_weight(p_delivery_index) IS NOT NULL ) THEN
4399 	IF ((NVL(l_old_gross_weight,0) <> p_delivery.total_weight(p_delivery_index)) OR (NVL(l_old_net_weight,0) <> p_delivery.total_weight(p_delivery_index))) THEN
4400 	    IF l_debug_on THEN
4401 		WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_WV_UTILS.PRORATE_WEIGHT',WSH_DEBUG_SV.C_PROC_LEVEL);
4402 	    END IF;
4403 
4404 	    WSH_WV_UTILS.PRORATE_WEIGHT
4405 	      (
4406 	       p_entity_id     => x_new_deliveries(1) ,
4407 	       p_old_gross_wt  => l_old_gross_weight,
4408 	       p_new_gross_wt  => p_delivery.total_weight(p_delivery_index),
4409 	       p_old_net_wt    => l_old_net_weight,
4410 	       p_new_net_wt    => p_delivery.total_weight(p_delivery_index),
4411 	       p_weight_uom_code => l_delivery_UOM_code,
4412 	       p_entity_type   => 'DELIVERY',
4413 	       x_return_status => l_return_status
4414 	      );
4415 
4416 	    IF l_debug_on THEN
4417 	       WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
4418 	    END IF;
4419 
4420 	    wsh_util_core.api_post_call(
4421               p_return_status => l_return_status,
4422               x_num_warnings  => l_num_warnings,
4423               x_num_errors    => l_num_errors);
4424 	END IF;
4425 END IF;
4426 --End Proration
4427 
4428 --Re-calculate the Wt/Vol based on wt_vol frozen.
4429 IF (p_delivery.total_weight(p_delivery_index) IS NOT NULL
4430      OR  p_delivery.total_volume(p_delivery_index) IS NOT NULL) THEN
4431     IF (p_detail_ids.count > 0 ) THEN
4432        --Calculate the Wt/Volume in detail line level, since
4433        --delivery level Wt/Volume is passed.
4434        WSH_WV_UTILS.Detail_Weight_Volume (
4435         p_detail_rows   	=> p_detail_ids,
4436         p_override_flag		=> 'Y',
4437         p_calc_wv_if_frozen	=> 'N',
4438         x_return_status 	=> l_return_status);
4439 
4440        wsh_util_core.api_post_call(
4441            p_return_status => l_return_status,
4442            x_num_warnings  => l_num_warnings,
4443            x_num_errors    => l_num_errors);
4444     END IF;
4445 ELSE
4446     IF (x_new_deliveries.count > 0 ) THEN
4447        --Calculate Wt/Vol both in detail line and delivery level.
4448        WSH_WV_UTILS.Delivery_Weight_Volume (
4449         p_del_rows   		=> x_new_deliveries,
4450         p_update_flag		=> 'Y',
4451         p_calc_wv_if_frozen	=> 'N',
4452         x_return_status 	=> l_return_status);
4453 
4454        wsh_util_core.api_post_call(
4455            p_return_status => l_return_status,
4456            x_num_warnings  => l_num_warnings,
4457            x_num_errors    => l_num_errors);
4458     END IF;
4459   END IF;
4460 
4461 IF l_num_errors > 0 THEN
4462     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4463 ELSIF l_num_warnings > 0 THEN
4464     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4465 END IF;
4466 
4467 IF l_debug_on THEN
4468     WSH_DEBUG_SV.pop(l_module_name);
4469 END IF;
4470 EXCEPTION
4471 WHEN FND_API.G_EXC_ERROR THEN
4472      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
4473 
4474      p_delivery.error_flag(p_delivery_index):= 'Y';
4475 
4476      IF l_debug_on THEN
4477       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
4478 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4479       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4480      END IF;
4481 
4482 WHEN OTHERS THEN
4483     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4484 
4485     p_delivery.error_flag(p_delivery_index):= 'Y';
4486 
4487     IF l_debug_on THEN
4488        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
4489 Oracle error message is '||
4490 
4491 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4492        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4493     END IF;
4494 
4495      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
4496      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
4497      fnd_msg_pub.add;
4498 
4499 END Create_Delivery;
4500 
4501 
4502 -- Start of comments
4503 -- API name : Validate_Header
4504 -- Type     : Public
4505 -- Pre-reqs : None.
4506 -- Procedure: API to validate Routing Request Header for Supplier,routing request number and revision. Api does
4507 --            1.Validate revision number for negative.
4508 --            2.Validate Supplier information.
4509 --            3.Get the information from wsh_inbound_txn_history for party and receipt number.
4510 --            4.If found then this is revision, Un-assign detail lines from delivery.
4511 --            5.Store the current information in  wsh_inbound_txn_history.
4512 -- Parameters :
4513 -- IN:
4514 --	p_in_param      	IN      Additional parameter passed from routing request UI.
4515 --      p_request_number        IN      Routing Request Number.
4516 --      p_request_revision      IN      Routing Request revision
4517 --	p_supplier_name		IN	Supplier Name.
4518 --      p_line_number           IN      Line of Routing Request File.
4519 --      p_detail_att            IN OUT  Attributes of routing request line type In_param_Rec_Type.
4520 -- OUT:
4521 --      x_return_status OUT NOCOPY      Standard to output api status.
4522 -- End of comments
4523 PROCEDURE Validate_Header(
4524 	p_in_param      	IN      In_param_Rec_Type,
4525         p_request_number        IN      VARCHAR2 ,
4526         p_request_revision      IN      NUMBER,
4527 	p_supplier_name		IN	VARCHAR2,
4528         p_line_number           IN      NUMBER,
4529         p_detail_att            IN OUT  NOCOPY detail_att_rec_type,
4530         x_return_status         OUT     NOCOPY VARCHAR2) IS
4531 
4532 l_debug_on BOOLEAN;
4533 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_HEADER';
4534 l_return_status		varchar2(1);
4535 
4536 --Cursor to test if routing request is new one or revision.
4537 CURSOR get_revision_number_csr(cp_request_number VARCHAR2,p_supplier_id
4538 NUMBER) IS
4539 SELECT revision_number,transaction_id
4540 FROM	wsh_inbound_txn_history
4541 WHERE receipt_number = cp_request_number
4542 AND   TRANSACTION_TYPE ='ROUTING_REQUEST'
4543 AND   SUPPLIER_ID=p_supplier_id
4544 ORDER BY revision_number desc;
4545 
4546 l_txn_rec		WSH_INBOUND_TXN_HISTORY_PKG.ib_txn_history_rec_type;
4547 l_revision_number	NUMBER;
4548 l_num_warnings          number;
4549 l_num_errors            number;
4550 
4551 BEGIN
4552 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4553 IF l_debug_on IS NULL THEN
4554     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4555 END IF;
4556 
4557 IF l_debug_on THEN
4558     WSH_DEBUG_SV.push(l_module_name);
4559     WSH_DEBUG_SV.log(l_module_name,'p_request_number',p_request_number);
4560     WSH_DEBUG_SV.log(l_module_name,'p_request_revision',p_request_revision);
4561     WSH_DEBUG_SV.log(l_module_name,'p_supplier_name',p_supplier_name);
4562 END IF;
4563 
4564 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4565 
4566 --Negative revision is not allowed.
4567 IF (p_request_revision < 0 ) THEN
4568     FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_NEG_NUM');
4569     FND_MESSAGE.SET_TOKEN('FIELD_NAME',g_field.name(c_request_revision));
4570     FND_MESSAGE.SET_TOKEN('LINE_NUMBER',p_line_number);
4571     fnd_msg_pub.add;
4572     raise fnd_api.g_exc_error;
4573 END IF;
4574 
4575 
4576 --Validate and create Supplier information.
4577 WSH_SUPPLIER_PARTY.Validate_Supplier(
4578         p_in_param      => p_in_param,
4579         p_supplier_name => p_supplier_name,
4580         x_vendor_id     => p_detail_att.vendor_id,
4581         x_party_id      => p_detail_att.party_id,
4582         x_return_status => l_return_status);
4583 
4584 IF l_debug_on THEN
4585     WSH_DEBUG_SV.log(l_module_name,'Validate_Supplier l_return_status',l_return_status);
4586     WSH_DEBUG_SV.log(l_module_name,'vendor_id',p_detail_att.vendor_id);
4587     WSH_DEBUG_SV.log(l_module_name,'party_id',p_detail_att.party_id);
4588 END IF;
4589 wsh_util_core.api_post_call(
4590            p_return_status => l_return_status,
4591            x_num_warnings  => l_num_warnings,
4592            x_num_errors    => l_num_errors);
4593 
4594 
4595 
4596 OPEN get_revision_number_csr(p_request_number,p_detail_att.vendor_id);
4597 FETCH get_revision_number_csr INTO l_revision_number,p_detail_att.prev_routing_req_id;
4598 
4599 IF (get_revision_number_csr%FOUND ) THEN
4600     --This is routing request revision
4601 
4602     IF l_debug_on THEN
4603      WSH_DEBUG_SV.logmsg(l_module_name,'get_revision_number_csr FOUND');
4604     END IF;
4605 
4606     IF (p_request_revision <=  nvl(l_revision_number,-99) ) THEN
4607        FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_INVALID_REVISION');
4608        FND_MESSAGE.SET_TOKEN('C_REV_NUM', p_request_revision);
4609        FND_MESSAGE.SET_TOKEN('P_REV_NUM', l_revision_number);
4610        fnd_msg_pub.add;
4611 
4612        raise fnd_api.g_exc_error;
4613     END IF;
4614 
4615     --Unassign the lines from delivery, since every
4616     --revision is replacement of another.
4617     Unassign_Details(
4618             p_routing_req_id       => p_detail_att.prev_routing_req_id ,
4619             x_return_status        => l_return_status);
4620 
4621         IF l_debug_on THEN
4622           WSH_DEBUG_SV.log(l_module_name,'Unassign_Details l_return_status',l_return_status);
4623         END IF;
4624 
4625      wsh_util_core.api_post_call(
4626            p_return_status => l_return_status,
4627            x_num_warnings  => l_num_warnings,
4628            x_num_errors    => l_num_errors);
4629 END IF;
4630 CLOSE get_revision_number_csr;
4631 
4632 IF l_debug_on THEN
4633    WSH_DEBUG_SV.logmsg(l_module_name,'get_revision_number_csr NOT FOUND');
4634 END IF;
4635 
4636 
4637 --Store the current information in Inbound History table.
4638 l_txn_rec.TRANSACTION_TYPE:='ROUTING_REQUEST';
4639 l_txn_rec.RECEIPT_NUMBER:= p_request_number;
4640 l_txn_rec.REVISION_NUMBER:= p_request_revision;
4641 l_txn_rec.status:= 'PROCESSED';
4642 l_txn_rec.supplier_id := p_detail_att.vendor_id;
4643 
4644 --Store the header information in Inbound Txn History.
4645 WSH_INBOUND_TXN_HISTORY_PKG.create_txn_history (
4646               p_txn_history_rec => l_txn_rec,
4647               x_txn_id          => p_detail_att.routing_req_id,
4648               x_return_status   => l_return_status);
4649 
4650 IF l_debug_on THEN
4651     WSH_DEBUG_SV.log(l_module_name,'WSH_INBOUND_TXN_HISTORY_PKG.create_txn_history
4652 l_return_status',l_return_status);
4653 END IF;
4654 wsh_util_core.api_post_call(
4655            p_return_status => l_return_status,
4656            x_num_warnings  => l_num_warnings,
4657            x_num_errors    => l_num_errors);
4658 
4659 IF l_num_errors > 0 THEN
4660     x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR;
4661 ELSIF l_num_warnings > 0 THEN
4662     x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING;
4663 END IF;
4664 
4665 IF l_debug_on THEN
4666       WSH_DEBUG_SV.pop(l_module_name);
4667 END IF;
4668 EXCEPTION
4669 WHEN FND_API.G_EXC_ERROR THEN
4670      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
4671 
4672      IF l_debug_on THEN
4673       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
4674 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4675       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4676      END IF;
4677 
4678      IF ( get_revision_number_csr%ISOPEN) THEN
4679         CLOSE get_revision_number_csr;
4680      END IF;
4681 
4682 WHEN OTHERS THEN
4683     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4684 
4685     IF l_debug_on THEN
4686        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
4687 Oracle error message is '||
4688 
4689 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4690        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4691     END IF;
4692 
4693      IF ( get_revision_number_csr%ISOPEN) THEN
4694         CLOSE get_revision_number_csr;
4695      END IF;
4696 
4697      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
4698      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
4699      fnd_msg_pub.add;
4700 
4701 END Validate_Header;
4702 
4703 
4704 -- Start of comments
4705 -- API name : Validate_Org
4706 -- Type     : Private
4707 -- Pre-reqs : None.
4708 -- Procedure : API to validate Operating Unit. Api validate operating Unit name against HR_ORGANIZATION_UNITS table.
4709 --
4710 -- Parameters :
4711 -- IN:
4712 --      p_org_name   IN  Operating Unit Name.
4713 -- OUT:
4714 --      x_org_id 	OUT NOCOPY      org Id
4715 --      x_return_status OUT NOCOPY      Standard to output api status.
4716 -- End of comments
4717 PROCEDURE Validate_Org(
4718           p_org_name      IN varchar2,
4719           x_org_id        OUT NOCOPY number,
4720           x_return_status OUT NOCOPY varchar2) IS
4721 
4722 l_debug_on BOOLEAN;
4723 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'VALIDATE_ORG';
4724 l_return_status	varchar2(1);
4725 
4726 --Cursor to validate Operating Unit
4727 CURSOR get_org_csr(p_org_name	varchar2) IS
4728 SELECT organization_id
4729   FROM   HR_ORGANIZATION_UNITS
4730   WHERE  name = p_org_name;
4731 
4732 BEGIN
4733 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4734 IF l_debug_on IS NULL THEN
4735     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4736 END IF;
4737 
4738 IF l_debug_on THEN
4739     WSH_DEBUG_SV.push(l_module_name);
4740     WSH_DEBUG_SV.log(l_module_name,'p_org_name',p_org_name);
4741 END IF;
4742 
4743 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
4744 
4745 --Validate operating Unit name against HR_ORGANIZATION_UNITS table.
4746 OPEN get_org_csr(p_org_name);
4747 FETCH get_org_csr INTO x_org_id;
4748 CLOSE get_org_csr;
4749 
4750 IF l_debug_on THEN
4751     WSH_DEBUG_SV.log(l_module_name,'x_org_id',x_org_id);
4752 END IF;
4753 IF (x_org_id is NULL) THEN
4754        raise fnd_api.g_exc_error;
4755 END IF;
4756 
4757 
4758 IF l_debug_on THEN
4759     WSH_DEBUG_SV.pop(l_module_name);
4760 END IF;
4761 EXCEPTION
4762 WHEN FND_API.G_EXC_ERROR THEN
4763      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
4764 
4765      IF l_debug_on THEN
4766       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
4767 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
4768       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
4769      END IF;
4770 
4771      FND_MESSAGE.SET_NAME('WSH','WSH_OI_INVALID_ORG');
4772      fnd_msg_pub.add;
4773 
4774 WHEN OTHERS THEN
4775     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
4776 
4777     IF l_debug_on THEN
4778        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
4779 Oracle error message is '||
4780 
4781 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
4782        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
4783     END IF;
4784 
4785      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
4786      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
4787      fnd_msg_pub.add;
4788 
4789 
4790 END validate_org;
4791 
4792 
4793 -- Start of comments
4794 -- API name : Process_Routing_Request
4795 -- Type     : Private
4796 -- Pre-reqs : None.
4797 -- Procedure: API to validate and upload routing request. Api does
4798 --           1.Error if any one of header, delivery or line record has no data.
4799 --           2.Sequence of processing is first scanning through header record,then
4800 --             lines and then corresponding delivery associate to line.
4801 --           3.Scan through Header Record, does header level validation.
4802 --           4.Scan through line record, if
4803 --             4.1 Delivery is invalid ,ignore remaining lines
4804 --             4.2 Correction validation.
4805 --             4.3 Validate Operation Unit
4806 --             4.4 When delivery change for line ,Validate Delivery level
4807 --                 information.
4808 --           5.Get the detail info based on cursor get_po_info_csr
4809 --             5.1 If not found then try to get the detail info based on cursor
4810 --                 get_po_not_found_detail.
4811 --              5.1.1  If not found then Error
4812 --          5.2 else
4813 --              5.2.1 Validate the PO for correct status.
4814 --              5.2.2 Create a PO line in wsh_delivery_detail.
4815 --              5.2.3 Collect detail line information for updating/splitting
4816 --         6.Validate line level information.
4817 --         7.Update and Split the detail line with routing request line information.
4818 --         8.Collect the updated line delivery_detail_id's.
4819 --         9.When delivery change for line auto create delivery for these lines.
4820 --
4821 -- Parameters :
4822 -- IN:
4823 --	  p_in_param      IN	  Type In_param_Rec_Type,hold additional Input Parameter from Routing Request UI.
4824 --        p_header        IN  OUT Type Header_Rec_type,hold header information of Routing Request file.
4825 --        p_delivery      IN  OUT Type Delivery_Rec_Type,hold delivery information of Routing Request file.
4826 --        p_line          IN  OUT Type Line_Rec_Type,hold line information of Routing Request file.
4827 -- OUT:
4828 --      x_success_tbl   OUT NOCOPY      List of output message need to be displayed in Routing Request UI.
4829 --      x_return_status OUT NOCOPY      Standard to output api status.
4830 -- End of comments
4831 PROCEDURE Process_Routing_Request(
4832 	p_in_param      IN	In_param_Rec_Type,
4833         p_header        IN  OUT NOCOPY  Header_Rec_type,
4834         p_delivery      IN  OUT NOCOPY  Delivery_Rec_Type ,
4835         p_line          IN  OUT NOCOPY  Line_Rec_Type,
4836         x_success_tbl   IN  OUT NOCOPY  WSH_FILE_MSG_TABLE,
4837         x_return_status OUT NOCOPY      varchar2) IS
4838 
4839 l_debug_on BOOLEAN;
4840 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Routing_Request';
4841 
4842 --This cursor is used to get the open detail lines, which are not
4843 --associate to routing request for input PO attributes.
4844 CURSOR get_po_not_found_detail (p_org_id                number,
4845                         p_po_header_number      varchar2,
4846                         p_po_line_number        varchar2,
4847                         p_po_release_number     number,
4848                         p_po_shipment_number    number,
4849 			p_vendor_id		number) IS
4850 SELECT delivery_detail_id,
4851         organization_id,
4852         source_header_id,
4853         source_line_id,
4854         po_shipment_line_id,
4855         source_blanket_reference_id,
4856         inventory_item_id,
4857 	weight_uom_code,
4858 	volume_uom_code,
4859 	routing_req_id,
4860 	requested_quantity,
4861 	nvl(requested_quantity2,0) requested_quantity2,
4862 	requested_quantity_uom,
4863 	requested_quantity_uom2,
4864 	org_id,
4865 	source_code,
4866 	released_status,
4867 	source_header_type_id,
4868 	source_header_type_name,
4869 	date_requested,
4870 	earliest_dropoff_date,
4871 	latest_dropoff_date,
4872         shipping_control
4873   FROM   wsh_delivery_details
4874   WHERE  org_id=p_org_id
4875   AND    source_header_number = p_po_header_number
4876   AND    source_line_number = p_po_line_number
4877   AND    po_shipment_line_number = p_po_shipment_number
4878   AND    nvl(SOURCE_BLANKET_REFERENCE_NUM,-1) =nvl(nvl(p_po_release_number, SOURCE_BLANKET_REFERENCE_NUM),-1)
4879   AND    nvl(line_direction,'O') not in ('O','IO')
4880   AND    vendor_id = p_vendor_id
4881   AND	 source_code='PO';
4882 
4883 l_po_not_found_detail	get_po_not_found_detail%ROWTYPE;
4884 
4885 --This cursor is used to get the detail line attributes,
4886 --when open lines are not present for input PO attributes.
4887 CURSOR get_po_info_csr (p_org_id                number,
4888       			p_po_header_number 	varchar2,
4889                         p_po_line_number	varchar2,
4890                         p_po_release_number	number,
4891                         p_po_shipment_number    number,
4892 			p_vendor_id		number) IS
4893 SELECT delivery_detail_id,
4894         source_header_id,
4895         source_line_id,
4896 	organization_id,
4897         inventory_item_id,
4898 	weight_uom_code,
4899 	volume_uom_code,
4900 	routing_req_id,
4901 	requested_quantity,
4902 	requested_quantity_uom,
4903 	nvl(requested_quantity2,0) requested_quantity2,
4904 	requested_quantity_uom2,
4905         po_shipment_line_id,
4906         source_blanket_reference_id,
4907         nvl(net_weight,0) net_weight,
4908         nvl(gross_weight,0) gross_weight,
4909         nvl(volume,0) volume,
4910         wv_frozen_flag
4911   FROM   wsh_delivery_details
4912   WHERE  org_id=p_org_id
4913   AND    source_header_number = p_po_header_number
4914   AND    source_line_number = p_po_line_number
4915   AND    po_shipment_line_number = p_po_shipment_number
4916   AND    nvl(SOURCE_BLANKET_REFERENCE_NUM,-1) =nvl(nvl(p_po_release_number, SOURCE_BLANKET_REFERENCE_NUM),-1)
4917   AND    nvl(line_direction,'O') not in ('O','IO')
4918   AND    vendor_id = p_vendor_id
4919   AND    routing_req_id IS NULL
4920   AND    shipping_control = 'BUYER'
4921   AND    released_status = 'X'
4922   AND	 source_code='PO'
4923   FOR UPDATE NOWAIT ; --halock
4924 
4925 e_wdd_locked EXCEPTION ;
4926 PRAGMA  EXCEPTION_INIT(e_wdd_locked,-54);
4927 --halock
4928 
4929 l_detail_att		detail_att_rec_type;
4930 l_del_ids		wsh_util_core.id_tab_type;
4931 l_new_detail_ids       	wsh_util_core.id_tab_type;
4932 l_sum_new_detail_ids    wsh_util_core.id_tab_type;
4933 
4934 e_delivery_invalid	exception;
4935 e_ignore_line		exception;
4936 
4937 l_dd_net_weight		number;
4938 l_dd_gross_weight	number;
4939 l_dd_volume		number;
4940 l_wv_frozen_flag	varchar2(1);
4941 l_return_status		varchar2(1);
4942 l_header_index		number;
4943 l_delivery_index	number;
4944 l_prev_delivery_index	number;
4945 l_line_index		number;
4946 l_index			number;
4947 l_msg_count		number:=0;
4948 l_line_last		number;
4949 l_line_first		number;
4950 l_id			number;
4951 l_del_new_index		number;
4952 
4953 l_tmp			varchar2(2000);
4954 l_header_error		number:=0;
4955 
4956 l_po_rec_found		boolean:= false;
4957 l_detail_ids            wsh_util_core.id_tab_type;
4958 l_new_deliveries	wsh_util_core.id_tab_type;
4959 l_total_req_qty 	number:= 0;
4960 l_total_req_qty2 	number:= 0;
4961 l_item_qty 		number;
4962 
4963 l_weight 		number;
4964 l_volume 		number;
4965 l_warn_count		number:=0;
4966 l_num_warnings          number;
4967 l_num_errors            number;
4968 l_supplier_name		varchar2(2000);
4969 l_organization_id	number;
4970 
4971 BEGIN
4972 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
4973 IF l_debug_on IS NULL THEN
4974     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
4975 END IF;
4976 
4977 IF l_debug_on THEN
4978     WSH_DEBUG_SV.push(l_module_name);
4979     WSH_DEBUG_SV.logmsg(l_module_name,'heali');
4980     WSH_DEBUG_SV.log(l_module_name,'p_header.count',p_header.supplier_name.count);
4981     WSH_DEBUG_SV.log(l_module_name,'p_delivery.count',p_delivery.ship_from_address1.count);
4982     WSH_DEBUG_SV.log(l_module_name,'p_line.count',p_line.po_header_number.count);
4983 END IF;
4984 
4985 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS ;
4986 
4987 --Error if any one of header,delivery or line record has no data.
4988 IF (p_header.supplier_name.count <> 1 OR p_delivery.ship_from_address1.count < 1 OR p_line.po_header_number.count < 1) THEN
4989     FND_MESSAGE.SET_NAME('WSH','WSH_RR_INV_FILE_FORMAT');
4990     fnd_msg_pub.add;
4991     raise FND_API.G_EXC_ERROR;
4992 END IF;
4993 
4994 l_header_index := p_header.supplier_name.first;
4995 WHILE (l_header_index IS NOT NULL)  LOOP  --{ Header Loop
4996 BEGIN
4997     --Loop through header record.
4998 
4999     IF l_debug_on THEN
5000        WSH_DEBUG_SV.log(l_module_name,'l_header_index',l_header_index);
5001     END IF;
5002 
5003 
5004     -- Hedaer is invalid ,ignore remaining lines
5005     IF ( p_header.error_flag(l_header_index) = 'Y' ) THEN
5006        raise FND_API.G_EXC_ERROR;
5007     END IF;
5008 
5009 
5010     --Call api to handle header level validation.
5011     Validate_Header(
5012 	p_in_param      	=>p_in_param,
5013         p_request_number	=>p_header.request_number(l_header_index),
5014         p_request_revision	=>p_header.request_revision(l_header_index),
5015         p_supplier_name		=>p_header.supplier_name(l_header_index),
5016         p_line_number		=>l_header_index,
5017         p_detail_att		=>l_detail_att,
5018         x_return_status		=>l_return_status);
5019 
5020     IF l_debug_on THEN
5021        WSH_DEBUG_SV.log(l_module_name,'Validate_Header l_return_status',l_return_status);
5022     END IF;
5023     wsh_util_core.api_post_call(
5024            p_return_status => l_return_status,
5025            x_num_warnings  => l_num_warnings,
5026            x_num_errors    => l_num_errors);
5027 
5028     l_supplier_name:=p_header.supplier_name(l_header_index);
5029 
5030     l_line_last := p_line.po_header_number.last;
5031     l_line_first := p_line.po_header_number.first;
5032     l_line_index := l_line_first;
5033 
5034     WHILE (l_line_index IS NOT NULL)  LOOP  --{ Line Loop
5035     BEGIN
5036        --Loop through line record.
5037 
5038        l_delivery_index := p_line.delivery_line_number(l_line_index);
5039 
5040        IF l_debug_on THEN
5041           WSH_DEBUG_SV.logmsg(l_module_name,'---------------------');
5042           WSH_DEBUG_SV.log(l_module_name,'l_line_index',l_line_index);
5043           WSH_DEBUG_SV.log(l_module_name,'l_delivery_index',l_delivery_index);
5044           WSH_DEBUG_SV.log(l_module_name,'l_prev_delivery_index',l_prev_delivery_index);
5045           WSH_DEBUG_SV.log(l_module_name,'p_delivery.error_flag',p_delivery.error_flag(l_delivery_index));
5046           WSH_DEBUG_SV.log(l_module_name,'p_line.item_quantity',p_line.item_quantity(l_line_index));
5047           WSH_DEBUG_SV.log(l_module_name,'prev_routing_req_id',l_detail_att.prev_routing_req_id);
5048           WSH_DEBUG_SV.log(l_module_name,'Message Count :',FND_MSG_PUB.Count_Msg);
5049        END IF;
5050 
5051        l_new_detail_ids.delete;
5052 
5053        IF (l_prev_delivery_index IS NOT NULL and l_prev_delivery_index <> l_delivery_index) THEN --{
5054           --Create the previous delivery
5055 
5056          IF l_debug_on THEN
5057           WSH_DEBUG_SV.logmsg(l_module_name,'Creating Previous Delivery');
5058           WSH_DEBUG_SV.log(l_module_name,'Delivery Error flag',p_delivery.error_flag(l_prev_delivery_index));
5059           WSH_DEBUG_SV.log(l_module_name,'l_sum_new_detail_ids.count',l_sum_new_detail_ids.count);
5060          END IF;
5061 
5062          IF (p_delivery.error_flag(l_prev_delivery_index) <> 'Y' and l_sum_new_detail_ids.count > 0) THEN
5063 
5064           Create_Delivery(
5065               p_detail_ids            => l_sum_new_detail_ids,
5066               p_delivery_index        => l_prev_delivery_index,
5067               p_delivery              => p_delivery,
5068               x_new_deliveries        => l_new_deliveries,
5069               x_return_status         => l_return_status);
5070 
5071             IF l_debug_on THEN
5072                WSH_DEBUG_SV.log(l_module_name,'Create_Delivery l_return_status',l_return_status);
5073                WSH_DEBUG_SV.log(l_module_name,'l_new_deliveries.count',l_new_deliveries.count);
5074             END IF;
5075 
5076             IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5077              l_del_new_index:=l_new_deliveries.first;
5078              WHILE (l_del_new_index IS NOT NULL) LOOP
5079                 IF (p_in_param.caller='ISP') THEN
5080                    --If caller ic ISP than do not displayed the delivery name.
5081                    IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5082                       l_warn_count:=l_warn_count + 1;
5083                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_WARN');
5084                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_delivery_index);
5085                       fnd_msg_pub.add;
5086                    ELSE
5087                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_SUCCESS');
5088                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_delivery_index);
5089                    END IF;
5090                 ELSE
5091                    IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5092                       l_warn_count:=l_warn_count + 1;
5093                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_WSH_DEL_WARN');
5094                       FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(l_new_deliveries(l_del_new_index)));
5095                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_delivery_index);
5096                       fnd_msg_pub.add;
5097                    ELSE
5098                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_WSH_DEL_SUCCESS');
5099                       FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(l_new_deliveries(l_del_new_index)));
5100                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_delivery_index);
5101                    END IF;
5102                 END IF;
5103 
5104                 IF (l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5105                    l_msg_count:= l_msg_count + 1;
5106                    x_success_tbl.extend;
5107                    x_success_tbl(l_msg_count):= FND_MESSAGE.GET;
5108                 END IF;
5109 
5110              l_del_new_index:=l_new_deliveries.next(l_del_new_index);
5111              END LOOP;
5112 
5113             ELSE
5114                 p_delivery.error_flag(l_prev_delivery_index):='Y';
5115                 FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5116                 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_delivery_index);
5117                 fnd_msg_pub.add;
5118 
5119                 IF l_debug_on THEN
5120                    WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Rollback to save point l_delivery_savepoint');
5121                 END IF;
5122                 rollback to savepoint l_delivery_savepoint;
5123             END IF;
5124 
5125          END IF;
5126 
5127          --Create current delivery
5128          l_sum_new_detail_ids.delete;
5129          l_new_deliveries.delete;
5130 
5131        END IF;--}
5132 
5133 
5134 
5135        --Delivery is invalid ,ignore remaining lines.
5136        IF ( p_delivery.error_flag(l_delivery_index) = 'Y' ) THEN
5137            raise e_delivery_invalid;
5138        END IF;
5139 
5140 
5141        -- No processing has to do with cancel line here.
5142        IF (p_line.item_quantity(l_line_index) = 0 AND l_detail_att.prev_routing_req_id is NOT NULL) THEN
5143           raise e_ignore_line;
5144        END IF;
5145 
5146 
5147        --If delivery changes in line, validate the new delivery.
5148        --This is because sequence of processing is line and associated delivery.
5149        IF (nvl(l_prev_delivery_index,-99) <> l_delivery_index) THEN --{
5150 
5151           IF l_debug_on THEN
5152              WSH_DEBUG_SV.logmsg(l_module_name,'Establishing save point l_delivery_savepoint');
5153           END IF;
5154           savepoint l_delivery_savepoint;
5155 
5156           IF ( p_delivery.error_flag(l_delivery_index) <> 'Y' ) THEN
5157 
5158              Validate_Delivery(
5159         	p_detail_att     => l_detail_att,
5160         	p_delivery_index => l_delivery_index,
5161         	p_delivery	 => p_delivery,
5162       		x_return_status  => l_return_status);
5163 
5164              IF l_debug_on THEN
5165                 WSH_DEBUG_SV.log(l_module_name,'Validate_Delivery l_return_status',l_return_status);
5166              END IF;
5167 
5168           wsh_util_core.api_post_call(
5169            p_return_status => l_return_status,
5170            x_num_warnings  => l_num_warnings,
5171            x_num_errors    => l_num_errors);
5172 
5173           END IF;
5174 
5175 
5176        END IF; --}
5177 
5178        -- First Routing Request should not be correction.
5179        -- A correction is routing request line with zero quantity.
5180        IF (p_line.item_quantity(l_line_index) = 0 AND l_detail_att.prev_routing_req_id is NULL) THEN
5181           FND_MESSAGE.SET_NAME('WSH','WSH_RR_INVALID_CORRECTION');
5182           fnd_msg_pub.add;
5183 
5184           raise FND_API.G_EXC_ERROR;
5185        END IF;
5186 
5187        --Validate Operation Unit
5188        Validate_Org(
5189       		p_org_name	=> p_line.po_operating_unit(l_line_index),
5190 		x_org_id	=> l_detail_att.org_id,
5191       		x_return_status => l_return_status);
5192 
5193           IF l_debug_on THEN
5194              WSH_DEBUG_SV.log(l_module_name,'WSH_UTIL_VALIDATE.Validate_Org l_return_status',l_return_status);
5195              WSH_DEBUG_SV.log(l_module_name,'l_org_id',l_detail_att.org_id);
5196           END IF;
5197 
5198         wsh_util_core.api_post_call(
5199            p_return_status => l_return_status,
5200            x_num_warnings  => l_num_warnings,
5201            x_num_errors    => l_num_errors);
5202 
5203 
5204 
5205        --Validation for existing PO reference information
5206        l_po_rec_found:= false;
5207        l_detail_ids.delete;
5208        l_total_req_qty := 0;
5209        l_total_req_qty2 := 0;
5210 
5211        l_dd_net_weight:=0;
5212        l_dd_gross_weight:=0;
5213        l_dd_volume:=0;
5214        l_wv_frozen_flag:='N';
5215 
5216 
5217        IF l_debug_on THEN
5218           WSH_DEBUG_SV.log(l_module_name,'org_id',l_detail_att.org_id);
5219           WSH_DEBUG_SV.log(l_module_name,'po_header_number',p_line.po_header_number(l_line_index));
5220           WSH_DEBUG_SV.log(l_module_name,'po_line_number',p_line.po_line_number(l_line_index));
5221           WSH_DEBUG_SV.log(l_module_name,'po_release_number',p_line.po_release_number(l_line_index));
5222           WSH_DEBUG_SV.log(l_module_name,'po_shipment_number',p_line.po_shipment_number(l_line_index));
5223           WSH_DEBUG_SV.log(l_module_name,'vendor_id',l_detail_att.vendor_id);
5224        END IF;
5225 
5226        --Cursor to get the valid PO details from wsh_delivery_detail table.
5227        FOR l_po_info IN get_po_info_csr(l_detail_att.org_id, --{
5228 			    p_line.po_header_number(l_line_index),
5229                             p_line.po_line_number(l_line_index),
5230                             p_line.po_release_number(l_line_index),
5231                             p_line.po_shipment_number(l_line_index),
5232 			    l_detail_att.vendor_id)
5233        LOOP
5234           l_po_rec_found:= true;
5235 
5236           IF l_debug_on THEN
5237              WSH_DEBUG_SV.logmsg(l_module_name,'WDD line found');
5238           END IF;
5239 
5240           IF ( (l_po_info.source_blanket_reference_id IS NOT NULL
5241                  AND p_line.po_release_number(l_line_index) IS NULL)
5242                OR
5243                (l_po_info.source_blanket_reference_id IS NULL
5244                  AND p_line.po_release_number(l_line_index) IS NOT NULL)
5245              ) THEN
5246 
5247              raise FND_API.G_EXC_ERROR;
5248           END IF;
5249 
5250 
5251           --Validate the PO for correct status.
5252           Validate_PO(
5253              p_header_id              => l_po_info.source_header_id,
5254              p_header                 => p_line.po_header_number(l_line_index),
5255              p_line_id                => l_po_info.source_line_id,
5256              p_line_location_id       => l_po_info.po_shipment_line_id,
5257              p_release_id             => l_po_info.source_blanket_reference_id,
5258              x_return_status          => l_return_status);
5259           IF l_debug_on THEN
5260              WSH_DEBUG_SV.log(l_module_name,'Validate_PO l_return_status',l_return_status);
5261           END IF;
5262 
5263           wsh_util_core.api_post_call(
5264            p_return_status => l_return_status,
5265            x_num_warnings  => l_num_warnings,
5266            x_num_errors    => l_num_errors);
5267 
5268 
5269           IF l_debug_on THEN
5270              WSH_DEBUG_SV.log(l_module_name,'Before updates');
5271              WSH_DEBUG_SV.log(l_module_name,'l_po_info.delivery_detail_id',l_po_info.delivery_detail_id);
5272              WSH_DEBUG_SV.log(l_module_name,'l_po_info.requested_quantity',l_po_info.requested_quantity);
5273              WSH_DEBUG_SV.log(l_module_name,'l_total_req_qty',l_total_req_qty);
5274              WSH_DEBUG_SV.log(l_module_name,'l_total_req_qty2',l_total_req_qty2);
5275              WSH_DEBUG_SV.log(l_module_name,'l_dd_net_weight',l_dd_net_weight);
5276              WSH_DEBUG_SV.log(l_module_name,'l_dd_gross_weight',l_dd_gross_weight);
5277              WSH_DEBUG_SV.log(l_module_name,'l_dd_volume',l_dd_volume);
5278              WSH_DEBUG_SV.log(l_module_name,'l_wv_frozen_flag',l_wv_frozen_flag);
5279           END IF;
5280 
5281           --Collect the attributes of detail line and
5282           --sum of requested quantities,weight and volume.
5283           l_detail_ids(l_detail_ids.count+1) := l_po_info.delivery_detail_id;
5284           l_total_req_qty := l_total_req_qty + l_po_info.requested_quantity;
5285           l_total_req_qty2 := l_total_req_qty2 + nvl(l_po_info.requested_quantity2,0);
5286           l_detail_att.inventory_item_id := l_po_info.inventory_item_id;
5287           l_detail_att.requested_quantity_uom := l_po_info.requested_quantity_uom;
5288           l_detail_att.requested_quantity_uom2 := l_po_info.requested_quantity_uom2;
5289           l_organization_id:=l_po_info.organization_id;
5290 
5291           l_dd_net_weight:= l_dd_net_weight + l_po_info.net_weight;
5292           l_dd_gross_weight:= l_dd_gross_weight + l_po_info.gross_weight;
5293           l_dd_volume:= l_dd_volume + l_po_info.volume;
5294 
5295           IF (l_po_info.wv_frozen_flag='Y') THEN
5296              l_wv_frozen_flag:='Y';
5297           END IF;
5298 
5299           IF l_debug_on THEN
5300              WSH_DEBUG_SV.log(l_module_name,'After updates');
5301              WSH_DEBUG_SV.log(l_module_name,'l_total_req_qty',l_total_req_qty);
5302              WSH_DEBUG_SV.log(l_module_name,'l_total_req_qty2',l_total_req_qty2);
5303              WSH_DEBUG_SV.log(l_module_name,'l_dd_net_weight',l_dd_net_weight);
5304              WSH_DEBUG_SV.log(l_module_name,'l_dd_gross_weight',l_dd_gross_weight);
5305              WSH_DEBUG_SV.log(l_module_name,'l_dd_volume',l_dd_volume);
5306              WSH_DEBUG_SV.log(l_module_name,'l_wv_frozen_flag',l_wv_frozen_flag);
5307           END IF;
5308        END LOOP; --}
5309 
5310 
5311        --If PO information not found in above case,
5312        --try to get the PO line information based on header,line,release
5313        --and shipment number using cursor get_po_not_found_detail.
5314        IF (NOT l_po_rec_found) THEN --{
5315           IF l_debug_on THEN
5316              WSH_DEBUG_SV.logmsg(l_module_name,'No WDD line found');
5317           END IF;
5318 
5319           OPEN get_po_not_found_detail (l_detail_att.org_id,
5320 			    p_line.po_header_number(l_line_index),
5321                             p_line.po_line_number(l_line_index),
5322                             p_line.po_release_number(l_line_index),
5323                             p_line.po_shipment_number(l_line_index),
5324 			    l_detail_att.vendor_id);
5325 
5326           FETCH get_po_not_found_detail INTO  l_po_not_found_detail;
5327 
5328           IF (get_po_not_found_detail%FOUND) THEN
5329 
5330              --If transportation is not arranged by Buyer than error.
5331              IF (l_po_not_found_detail.shipping_control <> 'BUYER') THEN
5332                 CLOSE get_po_not_found_detail;
5333                 FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_BUYER_PO');
5334                 FND_MESSAGE.SET_TOKEN('PO_NUMBER', p_line.po_header_number(l_line_index));
5335                 fnd_msg_pub.add;
5336 
5337                 raise FND_API.G_EXC_ERROR;
5338              END IF;
5339 
5340              IF ( (l_po_not_found_detail.source_blanket_reference_id IS NOT NULL
5341                     AND p_line.po_release_number(l_line_index) IS NULL)
5342                   OR
5343                   (l_po_not_found_detail.source_blanket_reference_id IS NULL
5344                     AND p_line.po_release_number(l_line_index) IS NOT NULL)
5345                 ) THEN
5346                 raise FND_API.G_EXC_ERROR;
5347              END IF;
5348 
5349              --PO line found, validate for correct PO status.
5350              Validate_PO(
5351                 p_header_id              => l_po_not_found_detail.source_header_id,
5352                 p_header                 => p_line.po_header_number(l_line_index),
5353                 p_line_id                => l_po_not_found_detail.source_line_id,
5354                 p_line_location_id       => l_po_not_found_detail.po_shipment_line_id,
5355                 p_release_id             => l_po_not_found_detail.source_blanket_reference_id,
5356                 x_return_status          => l_return_status);
5357 
5358              IF l_debug_on THEN
5359                 WSH_DEBUG_SV.log(l_module_name,'Validate_PO l_return_status',l_return_status);
5360              END IF;
5361 
5362              wsh_util_core.api_post_call(
5363                p_return_status => l_return_status,
5364                x_num_warnings  => l_num_warnings,
5365                x_num_errors    => l_num_errors);
5366 
5367              --Collect the line attributes for creating new line in wsh_delivery_details.
5368              l_detail_att.source_header_number := p_line.po_header_number(l_line_index);
5369              l_detail_att.inventory_item_id := l_po_not_found_detail.inventory_item_id;
5370              l_detail_att.requested_quantity_uom := l_po_not_found_detail.requested_quantity_uom;
5371              l_detail_att.requested_quantity_uom2 := l_po_not_found_detail.requested_quantity_uom2;
5372              l_detail_att.org_id := l_po_not_found_detail.org_id;
5373              l_detail_att.source_code := l_po_not_found_detail.source_code;
5374              l_detail_att.released_status := 'X';
5375              l_detail_att.source_header_type_id := l_po_not_found_detail.source_header_type_id;
5376              l_detail_att.source_header_type_name := l_po_not_found_detail.source_header_type_name;
5377              l_detail_att.date_requested:= l_po_not_found_detail.date_requested;
5378              l_detail_att.earliest_dropoff_date:= l_po_not_found_detail.earliest_dropoff_date;
5379              l_detail_att.latest_dropoff_date:= l_po_not_found_detail.latest_dropoff_date;
5380              l_organization_id:=l_po_not_found_detail.organization_id;
5381 
5382              --Create a PO line in wsh_delivery_detail for over picked qty.
5383              Create_PO( p_po_line_location_id      => l_po_not_found_detail.po_shipment_line_id,
5384                         p_detail_att               => l_detail_att,
5385                      	x_delivery_detail_id       => l_detail_att.delivery_detail_id,
5386                      	x_return_status            => l_return_status);
5387 
5388              IF l_debug_on THEN
5389                 WSH_DEBUG_SV.log(l_module_name,'Create_PO l_return_status',l_return_status);
5390              END IF;
5391              wsh_util_core.api_post_call(
5392                p_return_status => l_return_status,
5393                x_num_warnings  => l_num_warnings,
5394                x_num_errors    => l_num_errors);
5395 
5396              l_detail_ids(l_detail_ids.count+1) := l_detail_att.delivery_detail_id;
5397              l_total_req_qty := 0;
5398              l_total_req_qty2 :=  0;
5399           ELSE
5400              --Detail lines are not found for input PO, error out.
5401              CLOSE get_po_not_found_detail;
5402              FND_MESSAGE.SET_NAME('WSH','WSH_RR_NO_PO_INFO');
5403              FND_MESSAGE.SET_TOKEN('SUPPLIER', l_supplier_name);
5404              FND_MESSAGE.SET_TOKEN('HRD_NUMBER', p_line.po_header_number(l_line_index));
5405              FND_MESSAGE.SET_TOKEN('REL_NUMBER', p_line.po_release_number(l_line_index));
5406              FND_MESSAGE.SET_TOKEN('LINE_NUMBER', p_line.po_line_number(l_line_index));
5407              FND_MESSAGE.SET_TOKEN('SHIP_NUMBER', p_line.po_shipment_number(l_line_index));
5408              FND_MESSAGE.SET_TOKEN('OP_UNIT', p_line.po_operating_unit(l_line_index));
5409              fnd_msg_pub.add;
5410              raise FND_API.G_EXC_ERROR;
5411           END IF;
5412 
5413           CLOSE get_po_not_found_detail;
5414        END IF; --}
5415 
5416 
5417        --If delivery changes in line, validate the delivery for UOM's.
5418        --This is done after getting the line information because
5419        --organization_id is need for UOM's validation.
5420        IF (nvl(l_prev_delivery_index,-99) <> l_delivery_index) THEN --{
5421           IF ( p_delivery.error_flag(l_delivery_index) <> 'Y' ) THEN
5422              Validate_Delivery_uom(
5423                 p_organization_id => l_organization_id,
5424                 p_delivery_index => l_delivery_index,
5425                 p_delivery       => p_delivery,
5426                 x_return_status  => l_return_status);
5427 
5428              IF l_debug_on THEN
5429                 WSH_DEBUG_SV.log(l_module_name,'Validate_Delivery_uom l_return_status',l_return_status);
5430              END IF;
5431 
5432              wsh_util_core.api_post_call(
5433               p_return_status => l_return_status,
5434               x_num_warnings  => l_num_warnings,
5435               x_num_errors    => l_num_errors);
5436 
5437           END IF;
5438        END IF; --}
5439 
5440 
5441        --Validate line level data of Routing Request.
5442        Validate_line(
5443              p_organization_id        => l_organization_id,
5444              p_item_id                => l_detail_att.inventory_item_id,
5445              p_detail_item_uom_code   => l_detail_att.requested_quantity_uom,
5446              x_detail_item_qty        => l_item_qty,
5447              p_detail_weight_uom_code => l_detail_att.weight_uom,
5448              x_detail_weight_qty      => l_weight,
5449              p_detail_volume_uom_code => l_detail_att.volume_uom,
5450              x_detail_volume_qty      => l_volume,
5451              p_line_index             => l_line_index,
5452              p_line                   => p_line,
5453              x_return_status          => l_return_status);
5454 
5455        IF l_debug_on THEN
5456              WSH_DEBUG_SV.log(l_module_name,'Validate_line l_return_status',l_return_status);
5457              WSH_DEBUG_SV.log(l_module_name,'l_item_qty',l_item_qty);
5458        END IF;
5459        wsh_util_core.api_post_call(
5460                p_return_status => l_return_status,
5461                x_num_warnings  => l_num_warnings,
5462                x_num_errors    => l_num_errors);
5463 
5464 
5465        l_detail_att.requested_quantity := l_total_req_qty;
5466        l_detail_att.requested_quantity2 := l_total_req_qty2;
5467        l_detail_att.item_quantity := l_item_qty;
5468        l_detail_att.weight := p_line.weight(l_line_index);
5469        l_detail_att.weight_uom := p_line.weight_uom(l_line_index);
5470        l_detail_att.volume := p_line.volume(l_line_index);
5471        l_detail_att.volume_uom := p_line.volume_uom(l_line_index);
5472        l_detail_att.Earliest_pickup_date := p_line.Earliest_pickup_date(l_line_index);
5473        l_detail_att.Latest_pickup_date := p_line.Latest_pickup_date(l_line_index);
5474 
5475        l_detail_att.dd_net_weight:= l_dd_net_weight;
5476        l_detail_att.dd_gross_weight:= l_dd_gross_weight;
5477        l_detail_att.dd_volume:= l_dd_volume;
5478        l_detail_att.dd_wv_frozen_flag:=l_wv_frozen_flag;
5479 
5480 
5481        --Update and Split the detail line with routing request line information.
5482        Update_Split_Details(
5483         p_detail_att            => l_detail_att,
5484         p_detail_ids            => l_detail_ids,
5485         x_new_detail_ids        => l_new_detail_ids,
5486         x_return_status         => l_return_status);
5487 
5488        IF l_debug_on THEN
5489           WSH_DEBUG_SV.log(l_module_name,'Update_Split_Details l_return_status',l_return_status);
5490        END IF;
5491        wsh_util_core.api_post_call(
5492                p_return_status => l_return_status,
5493                x_num_warnings  => l_num_warnings,
5494                x_num_errors    => l_num_errors);
5495 
5496        IF (l_new_detail_ids.count > 1) THEN
5497           raise FND_API.G_EXC_ERROR;
5498        END IF;
5499 
5500 
5501     EXCEPTION
5502       WHEN FND_API.G_EXC_ERROR THEN
5503        IF l_debug_on THEN
5504           WSH_DEBUG_SV.log(l_module_name,'Line e_line_error :',l_return_status);
5505        END IF;
5506 
5507           p_line.error_flag(l_line_index):='Y';
5508           p_delivery.error_flag(l_delivery_index):='Y';
5509           FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5510           FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5511           fnd_msg_pub.add;
5512 
5513         IF (get_po_not_found_detail%ISOPEN) THEN
5514           CLOSE get_po_not_found_detail;
5515         END IF;
5516 
5517         IF l_debug_on THEN
5518               WSH_DEBUG_SV.logmsg(l_module_name,'Line Rollback to save point l_delivery_savepoint');
5519         END IF;
5520         rollback to savepoint l_delivery_savepoint;
5521 
5522       --halock
5523       WHEN e_wdd_locked THEN
5524           IF l_debug_on THEN
5525              WSH_DEBUG_SV.log(l_module_name,'Detail lines are locked:',l_line_index);
5526           END IF;
5527 
5528           p_line.error_flag(l_line_index):='Y';
5529           p_delivery.error_flag(l_delivery_index):='Y';
5530 
5531           FND_MESSAGE.SET_NAME('WSH','WSH_DELIVERY_LINES_LOCKED');
5532           fnd_msg_pub.add;
5533 
5534           FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5535           FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5536           fnd_msg_pub.add;
5537 
5538           IF (get_po_not_found_detail%ISOPEN) THEN
5539              CLOSE get_po_not_found_detail;
5540           END IF;
5541 
5542            IF l_debug_on THEN
5543               WSH_DEBUG_SV.logmsg(l_module_name,'Line Rollback to save point l_delivery_savepoint');
5544            END IF;
5545            rollback to savepoint l_delivery_savepoint;
5546       --halock
5547 
5548       WHEN e_ignore_line THEN
5549        IF l_debug_on THEN
5550           WSH_DEBUG_SV.logmsg(l_module_name,'Line e_ignore_line');
5551        END IF;
5552 
5553 
5554       WHEN e_delivery_invalid THEN
5555        IF l_debug_on THEN
5556           WSH_DEBUG_SV.logmsg(l_module_name,'Line e_delivery_invalid');
5557        END IF;
5558 
5559       WHEN others THEN
5560        IF l_debug_on THEN
5561           WSH_DEBUG_SV.logmsg(l_module_name,'Line others');
5562        END IF;
5563         p_line.error_flag(l_line_index):='Y';
5564         p_delivery.error_flag(l_delivery_index):='Y';
5565 
5566         FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
5567         FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
5568         fnd_msg_pub.add;
5569 
5570         FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5571         FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5572         fnd_msg_pub.add;
5573     END;
5574 
5575 
5576     l_id := l_new_detail_ids.first;
5577     WHILE (l_id IS NOT NULL ) LOOP
5578           IF l_debug_on THEN
5579              WSH_DEBUG_SV.log(l_module_name,'Collecting detail ids',l_new_detail_ids(l_id));
5580           END IF;
5581           l_sum_new_detail_ids(l_sum_new_detail_ids.count + 1):=l_new_detail_ids(l_id);
5582 
5583     l_id := l_new_detail_ids.next(l_id);
5584     END LOOP;
5585 
5586     l_new_detail_ids.delete;
5587 
5588 
5589     IF ( l_line_last = l_line_index  and p_delivery.error_flag(l_delivery_index) <> 'Y' and l_sum_new_detail_ids.count > 0) THEN
5590     --{
5591 
5592           IF l_debug_on THEN
5593              WSH_DEBUG_SV.logmsg(l_module_name,'Creating last delivery');
5594              WSH_DEBUG_SV.log(l_module_name,'l_sum_new_detail_ids.count',l_sum_new_detail_ids.count);
5595           END IF;
5596 
5597          Create_Delivery(
5598               p_detail_ids            => l_sum_new_detail_ids,
5599               p_delivery_index        => l_delivery_index,
5600               p_delivery              => p_delivery,
5601               x_new_deliveries        => l_new_deliveries,
5602               x_return_status         => l_return_status);
5603 
5604 
5605           IF l_debug_on THEN
5606              WSH_DEBUG_SV.log(l_module_name,'Create_Delivery l_return_status',l_return_status);
5607              WSH_DEBUG_SV.log(l_module_name,'l_new_deliveries.count',l_new_deliveries.count);
5608           END IF;
5609 
5610           IF (l_return_status IN (WSH_UTIL_CORE.G_RET_STS_SUCCESS,WSH_UTIL_CORE.G_RET_STS_WARNING)) THEN
5611              l_del_new_index:=l_new_deliveries.first;
5612              WHILE (l_del_new_index IS NOT NULL) LOOP
5613                 IF (p_in_param.caller='ISP') THEN
5614                    --If caller ic ISP than do not displayed the delivery name.
5615                    IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5616                       l_warn_count:=l_warn_count + 1;
5617                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_WARN');
5618                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5619                       fnd_msg_pub.add;
5620                    ELSE
5621                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_SUCCESS');
5622                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5623                    END IF;
5624                 ELSE
5625                    IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
5626                       l_warn_count:=l_warn_count + 1;
5627                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_WSH_DEL_WARN');
5628                       FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(l_new_deliveries(l_del_new_index)));
5629                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5630                       fnd_msg_pub.add;
5631                    ELSE
5632                       FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_WSH_DEL_SUCCESS');
5633                       FND_MESSAGE.SET_TOKEN('DEL_NAME', wsh_new_deliveries_pvt.get_name(l_new_deliveries(l_del_new_index)));
5634                       FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5635                    END IF;
5636                 END IF;
5637 
5638                 IF (l_return_status=WSH_UTIL_CORE.G_RET_STS_SUCCESS) THEN
5639                    l_msg_count:= l_msg_count + 1;
5640                    x_success_tbl.extend;
5641                    x_success_tbl(l_msg_count):= FND_MESSAGE.GET;
5642                 END IF;
5643 
5644              l_del_new_index:=l_new_deliveries.next(l_del_new_index);
5645              END LOOP;
5646 
5647           ELSE
5648                 p_delivery.error_flag(l_delivery_index):='Y';
5649                 FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5650                 FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_delivery_index);
5651                 fnd_msg_pub.add;
5652 
5653                 IF l_debug_on THEN
5654                    WSH_DEBUG_SV.logmsg(l_module_name,'Delivery Rollback to save point l_delivery_savepoint');
5655                 END IF;
5656                 rollback to savepoint l_delivery_savepoint;
5657           END IF;
5658 
5659           --Once Delivery created, initialized the table for line id's.
5660           l_sum_new_detail_ids.delete;
5661          l_new_deliveries.delete;
5662 
5663     END IF; --}
5664 
5665 
5666     --Store the current delivery for comparison with next delivery.
5667     l_prev_delivery_index := l_delivery_index;
5668 
5669 
5670     l_line_index := p_line.po_header_number.next(l_line_index);
5671     END LOOP; --} Line Loop
5672 
5673 
5674 EXCEPTION
5675    WHEN  FND_API.G_EXC_ERROR THEN
5676        IF l_debug_on THEN
5677           WSH_DEBUG_SV.log(l_module_name,'Header error: ',l_return_status);
5678        END IF;
5679 
5680         l_header_error := l_header_error + 1;
5681         p_header.error_flag(l_header_index):='Y';
5682         FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_HEADER_FAILED');
5683         FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_header_index);
5684         fnd_msg_pub.add;
5685 
5686 
5687    WHEN others THEN
5688        IF l_debug_on THEN
5689           WSH_DEBUG_SV.logmsg(l_module_name,'Header others');
5690        END IF;
5691      l_header_error := l_header_error + 1;
5692      p_header.error_flag(l_header_index):='Y';
5693 
5694      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
5695      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
5696      fnd_msg_pub.add;
5697 
5698      FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_HEADER_FAILED');
5699      FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_header_index);
5700      fnd_msg_pub.add;
5701 
5702 END;
5703 
5704 l_header_index := p_header.supplier_name.next(l_header_index);
5705 END LOOP; --} Header Loop
5706 
5707 
5708 IF l_debug_on THEN
5709     WSH_DEBUG_SV.log(l_module_name,'l_warn_count',l_warn_count);
5710 END IF;
5711 IF (l_warn_count > 0 ) THEN
5712      raise wsh_util_core.g_exc_warning;
5713 END IF;
5714 
5715 
5716 IF l_debug_on THEN
5717     WSH_DEBUG_SV.log(l_module_name,'l_header_error',l_header_error);
5718 END IF;
5719 
5720 IF (l_header_error >= p_header.supplier_name.count) THEN
5721      --All header records are error.
5722      raise FND_API.G_EXC_ERROR;
5723 ELSIF (l_header_error < p_header.supplier_name.count and l_header_error > 0 ) THEN
5724      --Error header record is grater than one and less the total header records.
5725      raise wsh_util_core.g_exc_warning;
5726 END IF;
5727 
5728 --If all the deliveries are error than error out.
5729 Is_All_Line_Error(p_error_tbl          => p_delivery.error_flag,
5730                    x_return_status      => x_return_status);
5731 IF l_debug_on THEN
5732    WSH_DEBUG_SV.log(l_module_name,'Is_All_Line_Error x_return_status',x_return_status);
5733 END IF;
5734 
5735 IF l_debug_on THEN
5736     WSH_DEBUG_SV.pop(l_module_name);
5737 END IF;
5738 
5739 EXCEPTION
5740 WHEN FND_API.G_EXC_ERROR THEN
5741      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
5742 
5743      IF l_debug_on THEN
5744       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
5745 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5746       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
5747      END IF;
5748 
5749 WHEN wsh_util_core.g_exc_warning THEN
5750      x_return_status := WSH_UTIL_CORE.G_RET_STS_WARNING ;
5751 
5752      IF l_debug_on THEN
5753       WSH_DEBUG_SV.logmsg(l_module_name,'wsh_util_core.g_exc_warning
5754 exception has occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
5755       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
5756      END IF;
5757 
5758 
5759 WHEN OTHERS THEN
5760     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
5761 
5762     IF l_debug_on THEN
5763        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
5764 Oracle error message is '||
5765 
5766 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
5767        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
5768     END IF;
5769 
5770      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
5771      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
5772      fnd_msg_pub.add;
5773 
5774 END Process_Routing_Request;
5775 
5776 
5777 -- Start of comments
5778 -- API name : Process_Routing_Request_File
5779 -- Type     : Private
5780 -- Pre-reqs : None.
5781 -- Procedure : API to create header,delivery and line records from input of Routing Request records as passed by UI. Api does.
5782 --            1.Create blank header,delivery and line record.
5783 --            2.Loop through routing request record as pass by UI.
5784 --            3.Validate header,delivery and line field and assign field
5785 --              value to corresponding level.
5786 --            4.Scan through record created to find missing column.
5787 --            5.Check if not all the records have errors..
5788 --            6.Finally call api Process_Routing_request to process
5789 --              Routing Request records.
5790 --
5791 -- Parameters :
5792 -- IN:
5793 --      p_in_param      IN  Hold additional parameter passed by UI.
5794 --      p_file_fields   IN  Hold Routing Request records as passed by UI
5795 -- OUT:
5796 --      x_message_tbl   OUT NOCOPY List of Success/Error messages passed back to UI for display.
5797 --      x_return_status OUT NOCOPY      Standard to output api status.
5798 -- End of comments
5799 PROCEDURE Process_Routing_Request_File(
5800         p_in_param	IN	In_param_Rec_Type,
5801         p_file_fields   IN WSH_FILE_RECORD_TYPE ,
5802         x_message_tbl   OUT  NOCOPY  WSH_FILE_MSG_TABLE,
5803         x_return_status OUT NOCOPY      varchar2) IS
5804 
5805 l_debug_on BOOLEAN;
5806 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' || 'Process_Routing_Request_File';
5807 l_return_status	varchar2(1);
5808 l_index	number;
5809 l_hi	number;
5810 l_di	number;
5811 l_li	number;
5812 l_debugfile	varchar2(2000);
5813 l_line_index	number:=0;
5814 l_msg_count	number:=0;
5815 
5816 l_last_index    number;
5817 l_prev_line_number      number;
5818 l_prev_level_number	number;
5819 
5820 l_header		Header_Rec_Type;
5821 l_delivery		Delivery_Rec_Type;
5822 l_line	      		Line_Rec_Type;
5823 --Bugfix 4070732
5824 l_api_session_name CONSTANT VARCHAR2(150) := G_PKG_NAME ||'.' || l_module_name;
5825 l_reset_flags BOOLEAN;
5826 l_num_warnings   NUMBER;
5827 l_num_errors     NUMBER;
5828 
5829 BEGIN
5830 
5831 --Bugfix 4070732
5832 l_num_warnings := 0;
5833 l_num_errors   := 0;
5834 IF WSH_UTIL_CORE.G_START_OF_SESSION_API is null THEN
5835    WSH_UTIL_CORE.G_START_OF_SESSION_API     := l_api_session_name;
5836    WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API := FALSE;
5837 END IF;
5838 
5839 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
5840 IF l_debug_on IS NULL THEN
5841     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
5842 END IF;
5843 
5844 IF l_debug_on THEN
5845     WSH_DEBUG_SV.push(l_module_name);
5846     WSH_DEBUG_SV.log(l_module_name,'p_file_fields.level_number.count',p_file_fields.level_number.count);
5847 END IF;
5848 
5849 x_return_status := WSH_UTIL_CORE.G_RET_STS_SUCCESS;
5850 
5851 --Initialized message and validation meta data.
5852 x_message_tbl := WSH_FILE_MSG_TABLE();
5853 g_error_tbl.delete;
5854 Init_Routing_Req_Validation;
5855 
5856 l_last_index:= p_file_fields.level_number.last;
5857 l_index := p_file_fields.level_number.first;
5858 l_prev_line_number:= p_file_fields.file_line_number(l_index);
5859 
5860 --Based on level information, create blank record for that level.
5861 IF (p_file_fields.level_number(l_index) = 1 ) THEN
5862     Create_Header_Record(p_header	=>l_header,
5863 	       p_index		=>l_prev_line_number,
5864                x_return_status  =>l_return_status);
5865 ELSIF (p_file_fields.level_number(l_index) = 2 ) THEN
5866     Create_Delivery_Record(p_delivery	=>l_delivery,
5867 	       p_index		=>l_prev_line_number,
5868                x_return_status  =>l_return_status);
5869 ELSIF (p_file_fields.level_number(l_index) = 3 ) THEN
5870     Create_Line_Record(p_line	=>l_line,
5871 	       p_index		=>l_prev_line_number,
5872                x_return_status  =>l_return_status);
5873 END IF;
5874 
5875 
5876 IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5877    raise FND_API.G_EXC_ERROR;
5878 END IF;
5879 
5880 WHILE (l_index IS NOT NULL ) LOOP --{
5881    g_file_line_number := p_file_fields.file_line_number(l_index);
5882 
5883    IF l_debug_on THEN
5884       WSH_DEBUG_SV.log(l_module_name,'l_index',l_index);
5885       WSH_DEBUG_SV.log(l_module_name,'l_prev_line_number',l_prev_line_number);
5886       WSH_DEBUG_SV.log(l_module_name,'g_file_line_number',g_file_line_number);
5887       WSH_DEBUG_SV.log(l_module_name,'l_prev_level_number',l_prev_level_number);
5888    END IF;
5889 
5890    --When file number changes
5891    IF ( l_prev_line_number <> g_file_line_number) THEN --{
5892       --Create Record when level changes
5893       IF (p_file_fields.level_number(l_index) = 1 ) THEN
5894          Create_Header_Record(p_header	=>l_header,
5895 	       p_index		=>g_file_line_number,
5896                x_return_status  =>l_return_status);
5897       ELSIF (p_file_fields.level_number(l_index) = 2 ) THEN
5898          Create_Delivery_Record(p_delivery	=>l_delivery,
5899 	       p_index		=>g_file_line_number,
5900                x_return_status  =>l_return_status);
5901       ELSIF (p_file_fields.level_number(l_index) = 3 ) THEN
5902          Create_Line_Record(p_line	=>l_line,
5903 	       p_index		=>g_file_line_number,
5904                x_return_status  =>l_return_status);
5905       END IF;
5906 
5907       --Check for missing column
5908       IF (Find_Miss_Column(l_prev_level_number) ) THEN
5909          IF (l_prev_level_number = 1) THEN
5910               l_header.error_flag(l_prev_line_number):='Y';
5911          ELSIF (l_prev_level_number = 2) THEN
5912               l_delivery.error_flag(l_prev_line_number):='Y';
5913          ELSIF (l_prev_level_number = 3) THEN
5914               l_line.error_flag(l_prev_line_number):='Y';
5915               l_delivery.error_flag(l_line.delivery_line_number(l_prev_line_number)):='Y';
5916          END IF;
5917       END IF;
5918 
5919       --Display error for corresponding level.
5920       IF (l_prev_level_number = 1) THEN
5921          IF ( l_header.error_flag(l_prev_line_number)='Y') THEN
5922            FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_HEADER_FAILED');
5923            FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_line_number);
5924            fnd_msg_pub.add;
5925          END IF;
5926       ELSIF (l_prev_level_number = 2) THEN
5927          IF (l_delivery.error_flag(l_prev_line_number)='Y') THEN
5928            FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5929            FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_line_number);
5930            fnd_msg_pub.add;
5931          END IF;
5932       ELSIF (l_prev_level_number = 3) THEN
5933          IF (l_line.error_flag(l_prev_line_number)='Y') THEN
5934            FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
5935            FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line.delivery_line_number(l_prev_line_number));
5936            fnd_msg_pub.add;
5937          END IF;
5938       END IF;
5939 
5940    END IF; --}
5941 
5942 
5943    IF (p_file_fields.level_number(l_index) = 1 ) THEN
5944       --Validate Header data and assign to newly created record.
5945       Process_Header(
5946         p_col_name	=> p_file_fields.col_name(l_index),
5947         p_col_value   	=> ltrim(rtrim(p_file_fields.col_value(l_index))),
5948         p_index         => p_file_fields.file_line_number(l_index),
5949         p_header        => l_header,
5950         x_return_status => l_return_status);
5951 
5952       IF l_debug_on THEN
5953          WSH_DEBUG_SV.log(l_module_name,'Process_header l_return_status',l_return_status);
5954       END IF;
5955       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5956          l_header.error_flag(g_file_line_number):='Y';
5957       END IF;
5958 
5959    ELSIF (p_file_fields.level_number(l_index) = 2 ) THEN
5960        l_delivery.header_line_number(p_file_fields.file_line_number(l_index)):= p_file_fields.Level_Ref_Number(l_index);
5961 
5962       --Validate Delivery data and assign to newly created record.
5963        Process_Delivery (
5964         p_col_name	=> p_file_fields.col_name(l_index),
5965         p_col_value   	=> ltrim(rtrim(p_file_fields.col_value(l_index))),
5966         p_index         => p_file_fields.file_line_number(l_index),
5967         p_delivery      => l_delivery,
5968         x_return_status => l_return_status);
5969 
5970       IF l_debug_on THEN
5971          WSH_DEBUG_SV.log(l_module_name,'Process_Delivery l_return_status',l_return_status);
5972       END IF;
5973       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5974          l_delivery.error_flag(g_file_line_number):='Y';
5975       END IF;
5976 
5977    ELSIF (p_file_fields.level_number(l_index) = 3 ) THEN
5978       l_line.delivery_line_number(p_file_fields.file_line_number(l_index)):= p_file_fields.Level_Ref_Number(l_index);
5979 
5980       --Validate Line data and assign to newly created record.
5981         Process_Line(
5982         p_col_name	=> p_file_fields.col_name(l_index),
5983         p_col_value   	=> ltrim(rtrim(p_file_fields.col_value(l_index))),
5984         p_index         => p_file_fields.file_line_number(l_index),
5985         p_Line        	=> l_Line,
5986         x_return_status => l_return_status);
5987 
5988       IF l_debug_on THEN
5989          WSH_DEBUG_SV.log(l_module_name,'Process_Line l_return_status',l_return_status);
5990       END IF;
5991       IF (l_return_status <> WSH_UTIL_CORE.G_RET_STS_SUCCESS ) THEN
5992          l_Line.error_flag(g_file_line_number):='Y';
5993          l_delivery.error_flag(p_file_fields.Level_Ref_Number(l_index)):='Y';
5994       END IF;
5995    END IF;
5996 
5997    l_prev_level_number:= p_file_fields.level_number(l_index);
5998    l_prev_line_number:= g_file_line_number;
5999 
6000 l_index :=p_file_fields.level_number.next(l_index);
6001 END LOOP; --}
6002 
6003 --Check for missing column in last level
6004 IF (Find_Miss_Column(l_prev_level_number) ) THEN
6005    IF (l_prev_level_number = 1) THEN
6006       l_header.error_flag(l_prev_line_number):='Y';
6007    ELSIF (l_prev_level_number = 2) THEN
6008       l_delivery.error_flag(l_prev_line_number):='Y';
6009    ELSIF (l_prev_level_number = 3) THEN
6010       l_line.error_flag(l_prev_line_number):='Y';
6011       l_delivery.error_flag(l_line.delivery_line_number(l_prev_line_number)):='Y';
6012    END IF;
6013 END IF;
6014 
6015 --Display error for corresponding level.
6016 IF (l_prev_level_number = 1) THEN
6017       IF ( l_header.error_flag(l_prev_line_number)='Y') THEN
6018         FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_HEADER_FAILED');
6019         FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_line_number);
6020         fnd_msg_pub.add;
6021       END IF;
6022 ELSIF (l_prev_level_number = 2) THEN
6023       IF (l_delivery.error_flag(l_prev_line_number)='Y') THEN
6024         FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
6025         FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_prev_line_number);
6026         fnd_msg_pub.add;
6027       END IF;
6028 ELSIF (l_prev_level_number = 3) THEN
6029       IF (l_line.error_flag(l_prev_line_number)='Y') THEN
6030         FND_MESSAGE.SET_NAME('WSH', 'WSH_RR_DEL_ERROR');
6031         FND_MESSAGE.SET_TOKEN('LINE_NUMBER', l_line.delivery_line_number(l_prev_line_number));
6032         fnd_msg_pub.add;
6033       END IF;
6034 END IF;
6035 
6036 
6037 IF l_debug_on THEN
6038     WSH_DEBUG_SV.logmsg(l_module_name,'***************************');
6039     WSH_DEBUG_SV.logmsg(l_module_name,'Printing Header');
6040 END IF;
6041 
6042 l_hi := l_header.Supplier_name.first;
6043 WHILE (l_hi IS NOT NULL ) LOOP
6044     IF l_debug_on THEN
6045       WSH_DEBUG_SV.logmsg(l_module_name,'-------------------------');
6046       WSH_DEBUG_SV.log(l_module_name,'Index',l_hi);
6047       WSH_DEBUG_SV.log(l_module_name,'Supplier_name',l_header.Supplier_name(l_hi));
6048       WSH_DEBUG_SV.log(l_module_name,'Request_date',l_header.Request_date(l_hi));
6049       WSH_DEBUG_SV.log(l_module_name,'Request_Number',l_header.Request_Number(l_hi));
6050       WSH_DEBUG_SV.log(l_module_name,'Request_revision',l_header.Request_revision(l_hi));
6051       WSH_DEBUG_SV.log(l_module_name,'error_flag',l_header.error_flag(l_hi));
6052     END IF;
6053 
6054 l_hi :=l_header.Supplier_name.next(l_hi);
6055 END LOOP;
6056 
6057 
6058 IF l_debug_on THEN
6059     WSH_DEBUG_SV.logmsg(l_module_name,'***************************');
6060     WSH_DEBUG_SV.logmsg(l_module_name,'Printing Delivery');
6061 END IF;
6062 
6063 l_di := l_delivery.Ship_From_Address1.first;
6064 WHILE (l_di IS NOT NULL ) LOOP
6065     IF l_debug_on THEN
6066       WSH_DEBUG_SV.logmsg(l_module_name,'-------------------------');
6067       WSH_DEBUG_SV.log(l_module_name,'Index',l_di);
6068       WSH_DEBUG_SV.log(l_module_name,'Header_line_number',l_delivery.Header_line_number(l_di));
6069       WSH_DEBUG_SV.log(l_module_name,'Ship_From_Address1',l_delivery.Ship_From_Address1(l_di));
6070       WSH_DEBUG_SV.log(l_module_name,'Ship_From_Address2',l_delivery.Ship_From_Address2(l_di));
6071       WSH_DEBUG_SV.log(l_module_name,'Ship_From_Address3',l_delivery.Ship_From_Address3(l_di));
6072       WSH_DEBUG_SV.log(l_module_name,'Ship_From_Address4',l_delivery.Ship_From_Address4(l_di));
6073       WSH_DEBUG_SV.log(l_module_name,'Ship_From_city',l_delivery.Ship_From_city(l_di));
6074       WSH_DEBUG_SV.log(l_module_name,'Ship_From_state',l_delivery.Ship_From_state(l_di));
6075       WSH_DEBUG_SV.log(l_module_name,'Ship_From_county',l_delivery.Ship_From_county(l_di));
6076       WSH_DEBUG_SV.log(l_module_name,'Ship_From_country',l_delivery.Ship_From_country(l_di));
6077       WSH_DEBUG_SV.log(l_module_name,'Ship_From_province',l_delivery.Ship_From_province(l_di));
6078       WSH_DEBUG_SV.log(l_module_name,'Ship_From_postal_code',l_delivery.Ship_From_postal_code(l_di));
6079       WSH_DEBUG_SV.log(l_module_name,'Ship_From_code',l_delivery.Ship_From_code(l_di));
6080       WSH_DEBUG_SV.log(l_module_name,'Shipper_name',l_delivery.Shipper_name(l_di));
6081       WSH_DEBUG_SV.log(l_module_name,'Phone',l_delivery.Phone(l_di));
6082       WSH_DEBUG_SV.log(l_module_name,'email',l_delivery.email(l_di));
6083       WSH_DEBUG_SV.log(l_module_name,'Number_of_containers',l_delivery.Number_of_containers(l_di));
6084       WSH_DEBUG_SV.log(l_module_name,'total_weight',l_delivery.total_weight(l_di));
6085       WSH_DEBUG_SV.log(l_module_name,'weight_uom',l_delivery.weight_uom(l_di));
6086       WSH_DEBUG_SV.log(l_module_name,'total_volume',l_delivery.total_volume(l_di));
6087       WSH_DEBUG_SV.log(l_module_name,'volume_UOM',l_delivery.volume_UOM(l_di));
6088       WSH_DEBUG_SV.log(l_module_name,'remark',l_delivery.remark(l_di));
6089       WSH_DEBUG_SV.log(l_module_name,'error_flag',l_delivery.error_flag(l_di));
6090     END IF;
6091 
6092 
6093 l_di :=l_delivery.Ship_From_Address1.next(l_di);
6094 END LOOP;
6095 
6096 
6097 IF l_debug_on THEN
6098     WSH_DEBUG_SV.logmsg(l_module_name,'***************************');
6099     WSH_DEBUG_SV.logmsg(l_module_name,'Printing Line');
6100 END IF;
6101 
6102 l_li := l_line.Po_Header_number.first;
6103 WHILE (l_li IS NOT NULL ) LOOP
6104     IF l_debug_on THEN
6105       WSH_DEBUG_SV.logmsg(l_module_name,'-------------------------');
6106       WSH_DEBUG_SV.log(l_module_name,'Index',l_li);
6107       WSH_DEBUG_SV.log(l_module_name,'Delivery_line_number',l_line.Delivery_line_number(l_li));
6108       WSH_DEBUG_SV.log(l_module_name,'Po_Header_number',l_line.Po_Header_number(l_li));
6109       WSH_DEBUG_SV.log(l_module_name,'Po_Release_number',l_line.Po_Release_number(l_li));
6110       WSH_DEBUG_SV.log(l_module_name,'PO_Line_number',l_line.PO_Line_number(l_li));
6111       WSH_DEBUG_SV.log(l_module_name,'PO_Shipment_number',l_line.PO_Shipment_number(l_li));
6112       WSH_DEBUG_SV.log(l_module_name,'Po_Operating_unit',l_line.Po_Operating_unit(l_li));
6113       WSH_DEBUG_SV.log(l_module_name,'Item_quantity',l_line.Item_quantity(l_li));
6114       WSH_DEBUG_SV.log(l_module_name,'Item_uom',l_line.Item_uom(l_li));
6115       WSH_DEBUG_SV.log(l_module_name,'weight',l_line.weight(l_li));
6116       WSH_DEBUG_SV.log(l_module_name,'Weight_uom',l_line.Weight_uom(l_li));
6117       WSH_DEBUG_SV.log(l_module_name,'volume',l_line.volume(l_li));
6118       WSH_DEBUG_SV.log(l_module_name,'Volume_UOM',l_line.Volume_UOM(l_li));
6119       WSH_DEBUG_SV.log(l_module_name,'Earliest_pickup_date',l_line.Earliest_pickup_date(l_li));
6120       WSH_DEBUG_SV.log(l_module_name,'Latest_pickup_date',l_line.Latest_pickup_date(l_li));
6121       WSH_DEBUG_SV.log(l_module_name,'error_flag',l_line.error_flag(l_li));
6122     END IF;
6123 
6124 l_li :=l_line.Po_Header_number.next(l_li);
6125 END LOOP;
6126 
6127 
6128 --If all the headers failed format level validation then error.
6129 Is_All_Line_Error(p_error_tbl          => l_header.error_flag,
6130                    x_return_status      => x_return_status);
6131 
6132 IF l_debug_on THEN
6133       WSH_DEBUG_SV.log(l_module_name,'Is_All_Line_Error for Headers
6134 x_return_status',x_return_status);
6135 END IF;
6136 
6137 IF (x_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
6138 WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) ) THEN
6139 
6140     --If all the deliveries failed format level validation then error.
6141     Is_All_Line_Error(p_error_tbl          => l_delivery.error_flag,
6142                    x_return_status      => x_return_status);
6143 
6144     IF l_debug_on THEN
6145       WSH_DEBUG_SV.log(l_module_name,'Is_All_Line_Error x_return_status',x_return_status);
6146     END IF;
6147     get_message;
6148 
6149     IF (x_return_status NOT IN (WSH_UTIL_CORE.G_RET_STS_ERROR, WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) ) THEN
6150        --Process the Routing Request information.
6151        Process_Routing_request(
6152 	  p_in_param     => p_in_param,
6153         p_header       => l_header,
6154         p_delivery     => l_delivery,
6155         p_line         => l_line,
6156         x_success_tbl  => x_message_tbl,
6157         x_return_status=> x_return_status);
6158 
6159        IF l_debug_on THEN
6160           WSH_DEBUG_SV.log(l_module_name,'Process_Routing_request x_return_status',x_return_status);
6161        END IF;
6162     END IF;
6163 
6164 END IF;
6165 
6166 --Merge Message from fnd message stack and global message table
6167 --to output message table.
6168 get_message;
6169 
6170 l_msg_count:= x_message_tbl.count;
6171 l_index := g_error_tbl.first;
6172 WHILE (l_index IS NOT NULL) LOOP
6173      l_msg_count:= l_msg_count + 1;
6174      x_message_tbl.extend;
6175      x_message_tbl(l_msg_count):= g_error_tbl(l_index);
6176 
6177 l_index := g_error_tbl.next(l_index);
6178 END LOOP;
6179 
6180 
6181 
6182   --
6183   -- Start code for Bugfix 4070732
6184   --
6185   IF  x_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR)
6186   AND UPPER(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = UPPER(l_api_session_name) THEN
6187   --{
6188       IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
6189       --{
6190           IF l_debug_on THEN
6191             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6192           END IF;
6193 
6194           WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
6195                                                     x_return_status => l_return_status);
6196 
6197 
6198           IF l_debug_on THEN
6199             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6200           END IF;
6201 
6202           IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6203             x_return_status := l_return_status;
6204           END IF;
6205       --}
6206       END IF;
6207   --}
6208   ELSIF UPPER(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = UPPER(l_api_session_name) THEN
6209   --{
6210       IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
6211       --{
6212           l_reset_flags := TRUE;
6213 
6214           IF l_debug_on THEN
6215             WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Process_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6216           END IF;
6217 
6218           WSH_UTIL_CORE.Process_stops_for_load_tender(p_reset_flags   => l_reset_flags,
6219                                                       x_return_status => l_return_status);
6220 
6221           IF l_debug_on THEN
6222             WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6223           END IF;
6224 
6225           IF l_return_status IN (WSH_UTIL_CORE.G_RET_STS_ERROR,
6226                                  WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR,
6227                                  WSH_UTIL_CORE.G_RET_STS_WARNING) THEN
6228             x_return_status := l_return_status;
6229           END IF;
6230       --}
6231       END IF;
6232   --}
6233   END IF;
6234   --
6235   -- End of Code Bugfix 4070732
6236   --
6237 
6238 
6239 --Insert Debug information as message ,if debugger is on.
6240 IF l_debug_on THEN
6241     fnd_profile.get('WSH_DEBUG_LOG_DIRECTORY',l_debugfile);
6242     l_debugfile := l_debugfile||'/'||WSH_DEBUG_SV.g_file;
6243 
6244     FND_MESSAGE.SET_NAME('WSH','WSH_DEBUG_FILE_NAME');
6245     FND_MESSAGE.SET_TOKEN('DEBUG_FILE_NAME',l_debugfile);
6246 
6247     l_msg_count:= l_msg_count + 1;
6248     x_message_tbl.extend;
6249     x_message_tbl(l_msg_count):= FND_MESSAGE.GET;
6250 END IF;
6251 
6252 IF l_debug_on THEN
6253     WSH_DEBUG_SV.pop(l_module_name);
6254 END IF;
6255 
6256 EXCEPTION
6257 WHEN FND_API.G_EXC_ERROR THEN
6258      x_return_status := WSH_UTIL_CORE.G_RET_STS_ERROR ;
6259      --
6260      -- Start code for Bugfix 4070732
6261      --
6262      IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
6263      --{
6264          IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
6265          --{
6266              IF l_debug_on THEN
6267                WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6268              END IF;
6269 
6270              WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
6271                                                        x_return_status => l_return_status);
6272 
6273 
6274              IF l_debug_on THEN
6275                WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6276              END IF;
6277 
6278              IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6279                x_return_status := l_return_status;
6280              END IF;
6281          --}
6282          END IF;
6283      --}
6284      END IF;
6285      --
6286      -- End of Code Bugfix 4070732
6287      --
6288      IF l_debug_on THEN
6289       WSH_DEBUG_SV.logmsg(l_module_name,'FND_API.G_EXC_ERROR exception has
6290 occured.',WSH_DEBUG_SV.C_EXCEP_LEVEL);
6291       WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:FND_API.G_EXC_ERROR');
6292      END IF;
6293 
6294 WHEN OTHERS THEN
6295     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6296     --
6297     -- Start code for Bugfix 4070732
6298     --
6299     IF  upper(WSH_UTIL_CORE.G_START_OF_SESSION_API)  = upper(l_api_session_name) THEN
6300     --{
6301         IF NOT(WSH_UTIL_CORE.G_CALL_FTE_LOAD_TENDER_API) THEN
6302         --{
6303             IF l_debug_on THEN
6304               WSH_DEBUG_SV.logmsg(l_module_name,'Calling program unit WSH_UTIL_CORE.Reset_stops_for_load_tender',WSH_DEBUG_SV.C_PROC_LEVEL);
6305             END IF;
6306 
6307             WSH_UTIL_CORE.Reset_stops_for_load_tender(p_reset_flags   => TRUE,
6308                                                       x_return_status => l_return_status);
6309 
6310 
6311             IF l_debug_on THEN
6312               WSH_DEBUG_SV.log(l_module_name,'l_return_status',l_return_status);
6313             END IF;
6314 
6315             IF (l_return_status = WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR) THEN
6316               x_return_status := l_return_status;
6317             END IF;
6318         --}
6319         END IF;
6320     --}
6321     END IF;
6322     --
6323     -- End of Code Bugfix 4070732
6324     --
6325 
6326     IF l_debug_on THEN
6327        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occured.
6328 Oracle error message is '||
6329 
6330 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6331        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6332     END IF;
6333 
6334      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
6335      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
6336 
6337      l_msg_count:= l_msg_count + 1;
6338      x_message_tbl.extend;
6339      x_message_tbl(l_msg_count):= FND_MESSAGE.GET;
6340 END Process_Routing_Request_File;
6341 
6342 
6343 -- Start of comments
6344 -- API name : Process_File
6345 -- Type     : Public
6346 -- Pre-reqs : None.
6347 -- Procedure: API to upload routing request and Supplier Address Book. This api is called
6348 --            from Routing Request/Supplier Address Book UI. Api does
6349 --           1.Intilized the message global table.
6350 --           2.Based on transaction type called the corresponding
6351 --             wrapper api for processing.
6352 -- Parameters :
6353 -- IN:
6354 --      p_caller        IN              WSH/ISP
6355 --      p_txn_type      IN              RREQ -For Routing Request, SAB for Supplier Address Book.
6356 --      p_user_id       IN              Passed if caller is ISP.
6357 --      p_date_format   IN              UI date format need to be same with server date format.
6358 --      p_file_fields   IN              List of fields as parse from Routing Request/Supplier Address book file.
6359 -- OUT:
6360 --      x_message_tbl   OUT NOCOPY      List of success/error messages return to calling api.
6361 --      x_return_status OUT NOCOPY      Standard to output api status.
6362 -- End of comments
6363 PROCEDURE Process_File(
6364         p_caller      	IN  VARCHAR2,
6365         p_txn_type      IN  VARCHAR2,
6366         p_user_id       IN  NUMBER,
6367         p_date_format   IN  VARCHAR2,
6368         p_file_fields   IN  WSH_FILE_RECORD_TYPE ,
6369         x_message_tbl   OUT NOCOPY WSH_FILE_MSG_TABLE,
6370         x_return_status OUT NOCOPY      varchar2) IS
6371 
6372 l_debug_on BOOLEAN;
6373 l_module_name CONSTANT VARCHAR2(100) := 'wsh.plsql.' || G_PKG_NAME || '.' ||
6374 'Process_File';
6375 l_return	varchar2(1);
6376 l_in_param	In_param_Rec_Type;
6377 l_msg_count	number:=1;
6378 BEGIN
6379 x_message_tbl:= WSH_FILE_MSG_TABLE();
6380 x_message_tbl.delete;
6381 
6382 l_debug_on := WSH_DEBUG_INTERFACE.g_debug;
6383 IF l_debug_on IS NULL THEN
6384     l_debug_on := WSH_DEBUG_SV.is_debug_enabled;
6385 END IF;
6386 
6387 IF l_debug_on THEN
6388     WSH_DEBUG_SV.push(l_module_name);
6389     WSH_DEBUG_SV.log(l_module_name,'p_caller',p_caller);
6390     WSH_DEBUG_SV.log(l_module_name,'p_txn_type',p_txn_type);
6391     WSH_DEBUG_SV.log(l_module_name,'p_user_id',p_user_id);
6392     WSH_DEBUG_SV.log(l_module_name,'p_date_format',p_date_format);
6393 
6394 WSH_DEBUG_SV.log(l_module_name,'x_message_tbl.count',x_message_tbl.count);
6395     WSH_DEBUG_SV.log(l_module_name,'g_error_tbl.count',g_error_tbl.count);
6396 END IF;
6397 
6398 --Initialize error message and fnd message table.
6399 g_error_tbl.delete;
6400 FND_MSG_PUB.Initialize;
6401 
6402 --Colleted the input scalar parameter to record to facilities
6403 --passing as parameter between api's.
6404 l_in_param.caller:=p_caller;
6405 l_in_param.txn_type:=p_txn_type ;
6406 l_in_param.user_id:=p_user_id;
6407 l_in_param.date_format:=p_date_format;
6408 g_date_format:=p_date_format;
6409 
6410 
6411 IF (p_txn_type = 'RREQ' ) THEN
6412     --Process Routing Request
6413     Process_Routing_Request_File(
6414 	   p_in_param	=> l_in_param,
6415         p_file_fields   => p_file_fields,
6416         x_message_tbl   => x_message_tbl,
6417         x_return_status => x_return_status);
6418 
6419     IF l_debug_on THEN
6420        WSH_DEBUG_SV.log(l_module_name,'Process_Routing_Request_File x_return_status',x_return_status);
6421     END IF;
6422 ELSE
6423     --Process Supplier Address Book.
6424     Process_Address_File(
6425 	   p_in_param	=> l_in_param,
6426         p_file_fields   => p_file_fields,
6427         x_message_tbl   => x_message_tbl,
6428         x_return_status => x_return_status);
6429 
6430     IF l_debug_on THEN
6431        WSH_DEBUG_SV.log(l_module_name,'Process_Address_File x_return_status',x_return_status);
6432     END IF;
6433 END IF;
6434 
6435 IF l_debug_on THEN
6436     WSH_DEBUG_SV.log(l_module_name,'After x_message_tbl.count',x_message_tbl.count);
6437     WSH_DEBUG_SV.log(l_module_name,'After g_error_tbl.count',g_error_tbl.count);
6438     WSH_DEBUG_SV.pop(l_module_name);
6439 END IF;
6440 EXCEPTION
6441 WHEN OTHERS THEN
6442     x_return_status := WSH_UTIL_CORE.G_RET_STS_UNEXP_ERROR;
6443 
6444     IF l_debug_on THEN
6445        WSH_DEBUG_SV.logmsg(l_module_name,'Unexpected error has occurred.
6446 Oracle error message is '||
6447 
6448 SQLERRM,WSH_DEBUG_SV.C_UNEXPEC_ERR_LEVEL);
6449        WSH_DEBUG_SV.pop(l_module_name,'EXCEPTION:OTHERS');
6450     END IF;
6451 
6452      FND_MESSAGE.SET_NAME('WSH','WSH_UTIL_MESSAGE_U');
6453      FND_MESSAGE.SET_TOKEN('MSG_TEXT',sqlerrm);
6454      x_message_tbl.extend;
6455      x_message_tbl(l_msg_count):= FND_MESSAGE.GET;
6456 END Process_File;
6457 
6458 
6459 END WSH_ROUTING_REQUEST;