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;