1 PACKAGE BODY OE_Set_util AS
2 /* $Header: OEXUSETB.pls 120.24.12020000.5 2013/03/28 10:18:50 sahvivek ship $ */
3
4
5 G_PKG_NAME CONSTANT VARCHAR2(30):='OE_Line_Set';
6
7 --Bug4080531
8 --g_set_rec OE_ORDER_CACHE.set_rec_type;
9
10 g_cust_pref_set boolean := FALSE;
11 g_old_line_tbl OE_ORDER_PUB.Line_tbl_Type;
12 g_process_options boolean := TRUE;
13 g_old_arrival_set_path boolean := FALSE;
14
15 Procedure Validate_Fulfillment_Set
16 ( p_x_line_rec IN OUT NOCOPY oe_order_pub.line_rec_type,
17 p_old_line_rec IN oe_order_pub.line_rec_type,
18 p_system_set IN VARCHAR2 DEFAULT 'N'
19 );
20
21 FUNCTION IS_SET_CLOSED(p_set_id number)
22 return BOOLEAN
23 IS
24 l_set_rec OE_ORDER_CACHE.set_rec_type;
25
26 --
27 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
28 --
29 Begin
30 l_set_rec := get_set_rec(p_set_id);
31 IF l_set_rec.set_status = 'C' THEN
32 RETURN TRUE;
33 ELSE
34 RETURN FALSE;
35 END IF;
36
37 RETURN FALSE;
38
39 EXCEPTION
40 WHEN FND_API.G_EXC_ERROR THEN
41
42 RAISE FND_API.G_EXC_ERROR;
43
44
45 WHEN OTHERS THEN
46
47 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
48 THEN
49 OE_MSG_PUB.Add_Exc_Msg
50 ( G_PKG_NAME ,
51 'Is Set Closed'
52 );
53 END IF;
54
55 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
56
57 END IS_SET_CLOSED;
58
59 FUNCTION Get_Fulfillment_Set(p_line_id NUMBER,
60 p_set_id NUMBER)
61 RETURN BOOLEAN
62 IS
63 lcount number := 0;
64 --
65 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
66 --
67 Begin
68
69 -- 4236316 start
70 select 1
71 into lcount
72 from dual
73 where exists (select 1
74 from oe_line_sets
75 where set_id = p_set_id
76 and line_id = p_line_id);
77
78 -- 4236316 end
79
80
81 IF lcount > 0 THEN
82 IF l_debug_level > 0 THEN
83 oe_debug_pub.add( 'THIS LINE EXIST IN FULLFILLMENT SET' ) ;
84 END IF;
85 RETURN TRUE;
86 ELSE
87 IF l_debug_level > 0 THEN
88 oe_debug_pub.add( 'DOES NOT EXIST' ) ;
89 END IF;
90 RETURN FALSE;
91 END IF;
92
93 Exception
94 WHEN FND_API.G_EXC_ERROR THEN
95
96 RAISE FND_API.G_EXC_ERROR;
97
98 WHEN NO_DATA_FOUND THEN
99 IF l_debug_level > 0 THEN
100 oe_debug_pub.add( 'DOES NOT EXIST- IN NO DATA FOUND' ) ;
101 END IF;
102 RETURN FALSE;
103
104 End Get_Fulfillment_Set;
105
106
107 Procedure Validate_ShipSet
108 ( p_line_rec IN OE_Order_PUB.Line_Rec_Type
109 ,p_old_line_rec IN OE_Order_PUB.Line_Rec_Type
110 ,x_return_status OUT NOCOPY VARCHAR2
111 )
112 IS
113 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
114 l_shipset_enforce VARCHAR2(1);
115 l_set_name VARCHAR2(30);
116 l_ship_set NUMBER := 0;
117 BEGIN
118
119 x_return_status := FND_API.G_RET_STS_SUCCESS;
120
121 IF l_debug_level > 0 then
122 OE_DEBUG_PUB.Add('Entering OE_SET_UTIL.Validate_Shipset',1);
123 END IF;
124
125 -- Select statement to check the Ship Set Enforce Parameter.
126 BEGIN
127 SELECT Enforce_Ship_Set_And_Smc
128 INTO l_shipset_enforce
129 FROM Wsh_Shipping_Parameters
130 WHERE Organization_Id = p_line_rec.ship_from_org_Id;
131 EXCEPTION
132 WHEN NO_DATA_FOUND THEN
133 NULL;
134 WHEN OTHERS THEN
135 NULL;
136 END;
137
138
139 IF NOT OE_GLOBALS.Equal(p_line_rec.ship_set_id,
140 p_old_line_rec.ship_set_id) THEN
141
142 -- Select statement to check whether the set is pick released.
143 /*
144 SELECT count(*)
145 INTO l_ship_set
146 FROM Wsh_Delivery_Details
147 WHERE Ship_Set_Id = p_line_rec.ship_set_id
148 AND Source_Code = 'OE'
149 AND Source_Header_Id = p_line_rec.header_id
150 AND Released_Status In ('S','Y','C')
151 AND ROWNUM = 1; -- 3229707 Removed 'B' from Released_Status check
152 */
153
154 SELECT count(*)
155 INTO l_ship_set
156 FROM wsh_delivery_details wdd
157 WHERE wdd.ship_set_id = p_line_rec.ship_set_id
158 AND wdd.source_code = 'OE'
159 AND wdd.source_header_id = p_line_rec.header_id
160 AND ((wdd.released_status = 'C')
161 OR EXISTS (select wda.delivery_detail_id
162 FROM wsh_delivery_assignments wda, wsh_new_deliveries wnd
163 WHERE wda.delivery_detail_id = wdd.delivery_detail_id
164 AND wda.delivery_id = wnd.delivery_id
165 AND wnd.status_code in ('CO', 'IT', 'CL', 'SA')))
166 AND rownum = 1;
167
168 IF l_ship_set > 0 AND l_shipset_enforce = 'Y' THEN
169 FND_MESSAGE.Set_Name ('ONT','ONT_SET_PICK_RELEASED');
170 BEGIN
171 SELECT SET_NAME
172 INTO l_set_name
173 FROM OE_SETS
174 WHERE set_id = p_line_rec.ship_set_id;
175 EXCEPTION
176 WHEN NO_DATA_FOUND THEN
177 l_set_name := null;
178 END;
179 x_return_status := FND_API.G_RET_STS_ERROR;
180 END IF;
181
182 END IF;
183 IF l_debug_level > 0 then
184 OE_DEBUG_PUB.Add('Exiting OE_SET_UTIL.Validate_Shipset:'
185 ||x_return_status,1);
186 END IF;
187
188 EXCEPTION
189 WHEN FND_API.G_EXC_ERROR THEN
190 if l_debug_level > 0 then
191 OE_DEBUG_PUB.Add('Expected Error in Validate_Shipset ',2);
192 End if;
193
194 x_return_status := FND_API.G_RET_STS_ERROR;
195
196 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
197 if l_debug_level > 0 then
198 OE_DEBUG_PUB.Add('Unexpected Error in Validate_Shipset:'||SqlErrm, 1);
199 End if;
200
201 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
202
203 WHEN OTHERS THEN
204 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
205 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
206 THEN
207 OE_MSG_PUB.Add_Exc_Msg
208 ( 'OE_SET_UTIL',
209 'Validate_Shipset');
210 END IF;
211 END Validate_Shipset;
212
213
214 Function Is_Service_Eligible (p_line_rec IN OE_Order_Pub.Line_Rec_Type)
215 RETURN BOOLEAN
216 IS
217 l_header_id Number;
218 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
219 BEGIN
220
221 IF l_debug_level > 0 then
222 OE_DEBUG_PUB.Add('Entering Is_Service_Eligible',1);
223 END IF;
224
225 -- sol_ord_er #16014165
226 IF p_line_rec.subscription_enable_flag = 'Y' then
227 IF l_debug_level > 0 then
228 OE_DEBUG_PUB.Add('Subscription Line, Elligible',1);
229 END IF;
230 RETURN TRUE;
231 End IF;
232 -- sol_ord_er #16014165 end
233 IF p_line_rec.SERVICE_REFERENCE_TYPE_CODE <> 'ORDER'
234 THEN
235
236 RETURN TRUE;
237 ELSE
238
239 BEGIN
240
241 Select header_id
242 Into l_header_id
243 From oe_order_lines_all
244 Where line_id = p_line_rec.service_reference_line_id;
245
246 EXCEPTION
247 WHEN No_Data_Found THEN RETURN FALSE; -- Bug 16561155
248 END;
249 IF p_line_rec.header_id = l_header_id THEN
250
251 RETURN FALSE;
252 ELSE
253
254 RETURN TRUE;
255 END IF;
256 END IF;
257
258 RETURN FALSE;
259 EXCEPTION
260 WHEN OTHERS THEN
261 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
262 THEN
263 OE_MSG_PUB.Add_Exc_Msg
264 ( 'OE_SET_UTIL',
265 'Is_Service_Eligible');
266 END IF;
267 RETURN FALSE;
268 END Is_Service_Eligible;
269
270 Procedure Create_Fulfillment_Set(p_line_id NUMBER,
271 -- 4925992
272 p_top_model_line_id NUMBER := NULL,
273 p_set_id NUMBER) IS
274 l_set_rec OE_ORDER_CACHE.set_rec_type;
275 x_msg_count number;
276 x_msg_data varchar2(2000);
277 Cursor C1 is
278 Select line_id from
279 oe_order_lines_all where
280 top_model_line_id = p_line_id and
281 --item_type_code = 'INCLUDED' and
282 nvl(cancelled_flag,'N') <> 'Y' and
283 nvl(model_remnant_flag,'N') <> 'Y' and
284 line_id not in
285 (select line_id from oe_line_sets where
286 set_id = p_set_id );
287 --
288 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
289
290 l_set_s VARCHAR2(2); --bug8420761
291 --
292 BEGIN
293
294 IF NOT Get_Fulfillment_Set(p_line_id => p_line_id,
295 p_set_id => p_set_id) THEN
296
297 IF l_debug_level > 0 THEN
298 oe_debug_pub.add( 'CREATE FULLFILLMENT SET' ) ;
299 END IF;
300
301 l_set_rec := get_set_rec(p_set_id);
302
303 -- Begin changes for bug8420761
304 BEGIN
305 oe_debug_pub.add('Locking The Set Status ');
306
307 SELECT set_status
308 INTO l_set_s
309 FROM oe_sets
310 WHERE set_id = p_set_id
311 FOR UPDATE NOWAIT;
312
313 EXCEPTION
314 WHEN Others THEN
315 l_set_s := 'U' ;
316 oe_debug_pub.add('Error while locking Set status : '||SQLERRM);
317 fnd_message.set_name('ONT', 'OE_SET_LOCKED');
318 oe_msg_pub.add;
319 RAISE FND_API.G_EXC_ERROR ;
320 END;
321
322 oe_debug_pub.add('Create_Fulfillment_Set:'||OE_Set_util.g_set_rec.set_status ||' l_set_s ' || l_set_s);
323
324 -- End changes for bug8420761
325
326 IF is_set_closed(p_set_id => p_set_id) THEN
327 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
328 FND_MESSAGE.SET_TOKEN('SET',
329 l_set_rec.set_name);
330 oe_msg_pub.add;
331 RAISE FND_API.G_EXC_ERROR ;
332 END IF;
333
334 Insert into oe_line_sets(
335 Line_id,
336 Set_id,
337 SYSTEM_REQUIRED_FLAG )
338 Values
339 (p_line_id,
340 p_set_id,
341 'Y');
342
343 -- 4925992
344 IF p_top_model_line_id IS NOT NULL THEN
345 FOR c1rec in C1
346 loop
347
348 Insert into oe_line_sets(Line_id,
349 Set_id,
350 SYSTEM_REQUIRED_FLAG )
351 Values (c1rec.line_id,
352 p_set_id,
353 'Y');
354
355 end loop;
356 END IF;
357
358
359 END IF;
360 IF l_debug_level > 0 THEN
361 oe_debug_pub.add( 'EXIT - CREATE FULLFILLMENT SET' ) ;
362 END IF;
363
364 EXCEPTION
365 WHEN FND_API.G_EXC_ERROR THEN
366
367
368 -- Get message count and data
369 oe_msg_pub.count_and_get
370 ( p_count => x_msg_count
371 , p_data => x_msg_data
372 );
373 IF l_debug_level > 0 THEN
374 oe_debug_pub.add( 'IN FULFILLMENT CREATE EXCEPTION ' , 1 ) ;
375 END IF;
376
377 RAISE FND_API.G_EXC_ERROR;
378
379
380 WHEN OTHERS THEN
381
382 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
383 THEN
384 OE_MSG_PUB.Add_Exc_Msg
385 ( G_PKG_NAME ,
386 'Create_Fulfillment_Set'
387 );
388 END IF;
389
390 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
391
392 End Create_Fulfillment_Set;
393
394 /* Fulfill_Sts was added for 2525203 to get status of FULFILL_LINE activity */
395 Function Fulfill_Sts(p_line_id IN NUMBER) RETURN VARCHAR2 IS
396
397 l_activity_status VARCHAR2(8);
398 l_activity_result VARCHAR2(30);
399 l_activity_id NUMBER;
400 l_return_status VARCHAR2(1);
401 --
402 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
403 --
404 BEGIN
405 IF l_debug_level > 0 THEN
406 oe_debug_pub.add( 'ENTER OE_SET_UTIL.FULFILL_STS' , 5 ) ;
407 END IF;
408 OE_LINE_FULLFILL.Get_Activity_Result (
409 p_item_type => OE_GLOBALS.G_WFI_LIN
410 , p_item_key => to_char(p_line_id)
411 , p_activity_name => 'FULFILL_LINE'
412 , x_return_status => l_return_status
413 , x_activity_result => l_activity_result
414 , x_activity_status_code => l_activity_status
415 , x_activity_id => l_activity_id);
416
417 IF l_debug_level > 0 THEN
418 oe_debug_pub.add( 'RETURN STATUS FROM GET ACTIVITY RESULT : '||L_RETURN_STATUS , 5 ) ;
419 END IF;
420
421 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
422 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
423 ELSIF l_return_status = FND_API.G_RET_STS_SUCCESS AND
424 nvl(l_activity_status,'ERROR') = 'NOTIFIED' THEN
425 NULL;
426 ELSE
427 l_activity_status := 'ERROR';
428 END IF;
429 IF l_debug_level > 0 THEN
430 oe_debug_pub.add( 'EXIT OE_SET_UTIL.FULFILL_STS:'||L_ACTIVITY_STATUS , 5 ) ;
431 END IF;
432 RETURN l_activity_status;
433
434 END Fulfill_Sts;
435
436 Procedure Delete_Fulfillment_Set(p_line_id NUMBER,
437 p_set_id NUMBER) IS
438 l_return_status varchar2(30);
439 -- l_line_rec oe_order_pub.line_rec_type; removed for 2525203
440 --
441 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
442 --
443 BEGIN
444
445 IF Get_Fulfillment_Set(p_line_id => p_line_id,
446 p_set_id => p_set_id) THEN
447
448 IF l_debug_level > 0 THEN
449 oe_debug_pub.add( 'DELETE FULLFILLMENT SET' ) ;
450 END IF;
451
452 /* The next check is redundant and harmful if a child line is being deleted from
453 set. The check has already been done in process_sets(). Commented for 2525203.
454 -- See if this is already fulfilled . if fulfilled raise error
455 oe_line_util.query_row(p_line_id => p_line_id,
456 x_line_rec => l_line_rec);
457 IF (nvl(l_line_rec.fulfilled_flag,'N') = 'Y') THEN
458 fnd_message.set_name('ONT', 'OE_LINE_FULFILLED');
459 oe_msg_pub.add;
460 RAISE FND_API.G_EXC_ERROR ;
461 END IF;
462 2525203 */
463
464 /*Delete oe_line_sets
465 Where line_id = p_line_id
466 and set_id = p_set_id;*/
467
468 -- Call this fulfillment api for removal of sets
469 -- Bug 2068310: Pass 'Y' to a newly added IN parameter p_operation_fulfill.
470
471 oe_line_fullfill.cancel_line(p_line_id => p_line_id,
472 x_return_status => l_return_status,
473 p_fulfill_operation => 'Y',
474 p_set_id => p_set_id); -- p_set_id added for 2525203
475
476 if l_return_status <> FND_API.G_RET_STS_SUCCESS then
477 if l_return_status = FND_API.G_RET_STS_ERROR then
478 raise FND_API.G_EXC_ERROR;
479 else
480 raise FND_API.G_EXC_UNEXPECTED_ERROR;
481 end if;
482 end if;
483
484 -- 2695403
485 g_set_rec := OE_ORDER_CACHE.Load_Set(p_set_id); -- refresh the cache record
486 ---
487
488 Delete oe_line_sets
489 Where line_id = p_line_id
490 and set_id = p_set_id;
491
492 END IF;
493 IF l_debug_level > 0 THEN
494 oe_debug_pub.add( 'EXIT - DELETE FULLFILLMENT SET' ) ;
495 END IF;
496
497 EXCEPTION
498 WHEN FND_API.G_EXC_ERROR THEN
499
500 RAISE FND_API.G_EXC_ERROR;
501
502 WHEN OTHERS THEN
503
504 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
505 THEN
506 OE_MSG_PUB.Add_Exc_Msg
507 ( G_PKG_NAME ,
508 'Delete Fulfillment Set'
509 );
510 END IF;
511
512 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
513
514 End Delete_Fulfillment_Set;
515
516 FUNCTION Find_line(p_line_id IN NUMBER)
517 Return NUMBER
518 IS
519 --
520 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
521 --
522 BEGIN
523
524 IF l_debug_level > 0 THEN
525 oe_debug_pub.add( 'ENTERING FIND_LINE: ' || P_LINE_ID , 1 ) ;
526 END IF;
527
528 FOR J IN 1..g_old_line_tbl.count LOOP
529
530 IF p_line_id = g_old_line_tbl(J).line_id THEN
531
532 IF l_debug_level > 0 THEN
533 oe_debug_pub.add( ' LINE EXISTS IN THE TABLE' , 1 ) ;
534 END IF;
535
536 RETURN J;
537 END IF;
538 END LOOP;
539
540 RETURN Null;
541
542 END Find_line;
543
544
545 Procedure Process_Options IS
546 l_line_id NUMBER;
547 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
548 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
549 l_control_rec OE_GLOBALS.control_rec_type;
550 l_api_name CONSTANT VARCHAR2(30) := 'Insert_Into_Set';
551 x_msg_count number;
552 x_msg_data varchar2(2000);
553
554 l_return_status VARCHAR2(30);
555 l_set_rec OE_ORDER_CACHE.set_rec_type;
556 l_atp_rec OE_ATP.atp_tbl_type;
557 l_atp_tbl OE_ATP.atp_tbl_type;
558
559 Cursor optiontbl IS
560 Select Ordered_quantity,
561 header_id,
562 Line_id
563 from
564 oe_order_lines_all where
565 top_model_line_id = l_line_id and
566 --and line_id <> l_line_id and
567 nvl(cancelled_flag,'N') <> 'Y' and
568 nvl(model_remnant_flag,'N') <> 'Y'
569 ORDER BY arrival_set_id,ship_set_id,line_number,shipment_number,nvl(option_number,-1);
570 -- order by line_id;
571 l_count number;
572 l_perform_sch boolean := FALSE;
573 l_found NUMBER;
574 --
575 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
576 --
577 BEGIN
578
579 FOR I in 1 .. g_set_opt_tbl.count
580 LOOP
581 l_count := 0;
582 l_line_id := g_set_opt_tbl(I).line_id;
583
584 FOR optionrec in optiontbl
585 Loop
586 l_count := l_count + 1;
587 l_line_tbl(l_count).line_id := optionrec.line_id;
588 oe_line_util.query_row(p_line_id => optionrec.line_id,
589 x_line_rec => l_line_tbl(l_count));
590 g_old_line_tbl(l_count) :=
591 l_line_tbl(l_count);
592 l_old_line_tbl(l_count) := l_line_tbl(l_count);
593 l_line_tbl(l_count).operation := oe_globals.g_opr_update;
594 IF g_set_opt_tbl(I).set_id IS NOT NULL THEN
595 l_set_rec := get_set_rec(g_set_opt_tbl(I).set_id);
596 l_perform_sch := TRUE;
597 END IF;
598 IF g_set_opt_tbl(I).set_type = 'SHIP_SET' THEN
599 l_line_tbl(l_count).ship_set_id := g_set_opt_tbl(I).set_id;
600 l_line_tbl(l_count).ship_to_org_id := l_set_rec.ship_to_org_id;
601 l_line_tbl(l_count).ship_from_org_id := l_set_rec.ship_from_org_id;
602 l_line_tbl(l_count).schedule_ship_Date := l_set_rec.schedule_ship_date;
603
604
605 ELSIF g_set_opt_tbl(I).set_type = 'ARRIVAL_SET' THEN
606 l_line_tbl(l_count).arrival_set_id := g_set_opt_tbl(I).set_id;
607 l_line_tbl(l_count).ship_to_org_id := l_set_rec.ship_to_org_id;
608 l_line_tbl(l_count).schedule_arrival_Date := l_set_rec.schedule_arrival_date;
609
610 ELSIF g_set_opt_tbl(I).set_type = 'FULFILLMENT_SET' THEN
611 l_line_tbl(l_count).fulfillment_set_id := g_set_opt_tbl(I).set_id;
612 END IF;
613 l_line_tbl(l_count).schedule_action_code :=
614 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
615
616 End Loop;
617 g_set_recursive_flag := TRUE;
618 IF l_line_tbl.count > 0 AND L_Perform_Sch THEN
619 OE_GRP_SCH_UTIL.Schedule_set_of_lines
620 (p_x_line_tbl => l_line_tbl,
621 p_old_line_tbl => g_old_line_tbl,
622 x_return_status => l_return_status);
623
624 l_old_line_tbl.delete;
625
626 FOR I IN 1..l_line_tbl.count LOOP
627
628 l_found := find_line(l_line_tbl(I).line_id);
629 IF l_found is null THEN
630
631 l_old_line_tbl(I) := l_line_tbl(I);
632 ELSE
633
634 l_old_line_tbl(I) := g_old_line_tbl(l_found);
635 END IF;
636
637
638 END LOOP;
639
640 g_old_line_tbl.delete;
641 END IF;
642
643 IF l_debug_level > 0 THEN
644 oe_debug_pub.add( 'AFTER GROUP SCHEDULING' || L_LINE_TBL.COUNT , 1 ) ;
645 END IF;
646 IF l_debug_level > 0 THEN
647 oe_debug_pub.add( 'AFTER GROUP SCHEDULING' || L_OLD_LINE_TBL.COUNT , 1 ) ;
648 END IF;
649 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
650 IF l_debug_level > 0 THEN
651 oe_debug_pub.add( 'RETURNSTATUS UNEXPECTED SCHEDULING' , 1 ) ;
652 END IF;
653 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
654 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
655 IF l_debug_level > 0 THEN
656 oe_debug_pub.add( 'RETURNSTATUS ERROR SCHEDULING' , 1 ) ;
657 END IF;
658 RAISE FND_API.G_EXC_ERROR;
659 END IF;
660
661 l_control_rec.controlled_operation := TRUE;
662 l_control_rec.write_to_db := TRUE;
663 l_control_rec.PROCESS := FALSE;
664 l_control_rec.default_attributes := TRUE;
665 l_control_rec.change_attributes := TRUE;
666 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'N';
667 g_set_recursive_flag := TRUE;
668
669 IF l_debug_level > 0 THEN
670 oe_debug_pub.add( 'PROCESS OPTIONS- BEFORE CALLING PROCESS ORDER IN SETS' ) ;
671 END IF;
672
673 FOR I in 1 .. l_line_tbl.count
674 Loop
675 IF l_debug_level > 0 THEN
676 oe_debug_pub.add( 'SHIP_SET: ' || L_LINE_TBL ( I ) .SHIP_SET_ID ) ;
677 END IF;
678 IF l_debug_level > 0 THEN
679 oe_debug_pub.add( 'LINE_ID :' || L_LINE_TBL ( I ) .LINE_ID , 1 ) ;
680 END IF;
681 end loop;
682 IF l_line_tbl.count > 0 THEN
683
684 oe_order_pvt.Lines
685 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
686 , p_control_rec => l_control_rec
687 , p_x_line_tbl => l_line_tbl
688 , p_x_old_line_tbl => l_old_line_tbl
689 , x_return_status => l_return_status
690
691 );
692 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
693 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
694 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
695 RAISE FND_API.G_EXC_ERROR;
696 END IF;
697
698 /* jolin start comment out nocopy for notification project
699
700 -- Api to call notify OC and ACK and to process delayed requests
701
702 OE_Order_PVT.Process_Requests_And_Notify
703 ( p_process_requests => FALSE
704 , p_notify => TRUE
705 , x_return_status => l_return_status
706 , p_line_tbl => l_line_tbl
707 , p_old_line_tbl => l_old_line_tbl
708 );
709
710 jolin end */
711
712 END IF;
713 IF l_debug_level > 0 THEN
714 oe_debug_pub.add( 'PROCESS OPTIONS- AFTER CALLING PROCESS ORDER IN SETS' ) ;
715 END IF;
716
717 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'Y';
718 g_set_recursive_flag := FALSE;
719 l_line_tbl.delete;
720
721 END LOOP;
722
723 EXCEPTION
724 WHEN FND_API.G_EXC_ERROR THEN
725
726 RAISE FND_API.G_EXC_ERROR;
727
728 WHEN OTHERS THEN
729
730 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
731 THEN
732 OE_MSG_PUB.Add_Exc_Msg
733 ( G_PKG_NAME ,
734 'Process Options'
735 );
736 END IF;
737
738 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
739
740
741 END Process_Options;
742
743
744
745 procedure Get_Options(p_x_line_tbl IN OUT NOCOPY OE_ORDER_PUB.line_tbl_type,
746 p_set_type IN VARCHAR2,
747 p_index IN NUMBER,
748 p_line_id IN NUMBER := NULL,
749 p_line_rec OE_ORDER_PUB.line_rec_type
750 := OE_ORDER_PUB.g_miss_line_rec
751 ) IS
752 l_line_id NUMBER;
753 Cursor optiontbl IS
754 Select Ordered_quantity,
755 header_id,
756 Line_id
757 from
758 oe_order_lines_all where
759 top_model_line_id = l_line_id
760 and line_id <> l_line_id and
761 nvl(cancelled_flag,'N') <> 'Y' and
762 nvl(model_remnant_flag,'N') <> 'Y'
763 order by line_id;
764 l_count number;
765 lexist boolean := FALSE;
766 l_return_status varchar2(1);
767 l_line_rec OE_ORDER_PUB.line_rec_type := p_line_rec;
768
769 --
770 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
771 --
772 BEGIN
773 IF l_debug_level > 0 THEN
774 oe_debug_pub.add( 'ENTER GET OPTIONS' ) ;
775 END IF;
776 IF l_debug_level > 0 THEN
777 oe_debug_pub.add( 'ENTER COUNT GET OPTIONS'|| P_X_LINE_TBL.COUNT ) ;
778 END IF;
779 IF p_x_line_tbl.count = 0 THEN
780 l_line_id := p_line_id;
781 else
782 l_line_id := p_x_line_tbl(p_index).line_id;
783 end if;
784 l_count := p_x_line_tbl.count + 1;
785 IF l_line_rec.line_id is null OR
786 l_line_rec.line_id = FND_API.G_MISS_NUM THEN
787 l_line_rec := p_x_line_tbl(p_index);
788 END IF;
789
790 FOR Optionrec IN Optiontbl
791 Loop
792 IF l_debug_level > 0 THEN
793 oe_debug_pub.add( 'ENTER INTO OPTIONS' ) ;
794 END IF;
795
796 lexist := FALSE;
797 IF g_process_options THEN
798 FOR I in 1..g_auto_set_tbl.count
799 LOOP
800 IF optionrec.line_id = g_auto_set_tbl(I).line_id THEN
801 lexist := TRUE;
802 EXIT;
803 END IF;
804 END LOOP;
805
806 END IF;
807
808 IF NOT lexist THEN
809 p_x_line_tbl(l_count).line_id := optionrec.line_id;
810 oe_line_util.query_row(p_line_id => optionrec.line_id,
811 x_line_rec => p_x_line_tbl(l_count));
812
813 g_old_line_tbl(g_old_line_tbl.count + 1) :=
814 p_x_line_tbl(l_count);
815 IF l_debug_level > 0 THEN
816 oe_debug_pub.add( 'ENTER INTO OPTIONS' || P_X_LINE_TBL ( L_COUNT ) .ITEM_TYPE_CODE ) ;
817 END IF;
818
819 IF p_set_type = 'SHIP_SET' THEN
820 IF l_debug_level > 0 THEN
821 oe_debug_pub.add( 'IN SHIP SET:' ) ;
822 END IF;
823 p_x_line_tbl(l_count).ship_from_org_id
824 := l_line_rec.ship_from_org_id;
825 p_x_line_tbl(l_count).ship_to_org_id
826 := l_line_rec.ship_to_org_id;
827 p_x_line_tbl(l_count).schedule_ship_date
828 := l_line_rec.schedule_ship_date;
829 /*p_x_line_tbl(l_count).schedule_arrival_date
830 := p_x_line_tbl(p_index).schedule_arrival_date;
831 p_x_line_tbl(l_count).freight_carrier_code
832 := p_x_line_tbl(p_index).freight_carrier_code; */
833 p_x_line_tbl(l_count).ship_set
834 := l_line_rec.ship_set;
835 ELSIF p_set_type = 'ARRIVAL_SET' THEN
836 p_x_line_tbl(l_count).ship_to_org_id :=
837 l_line_rec.ship_to_org_id;
838 p_x_line_tbl(l_count).schedule_arrival_date
839 := l_line_rec.schedule_arrival_date;
840 p_x_line_tbl(l_count).arrival_set
841 := l_line_rec.arrival_set;
842 END IF;
843 p_x_line_tbl(l_count).operation := oe_globals.g_opr_update;
844 p_x_line_tbl(l_count).schedule_action_code
845 := OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
846 l_count := l_count + 1;
847 END IF; -- if not exists
848 End Loop;
849
850 IF l_debug_level > 0 THEN
851 oe_debug_pub.add( 'COUNT GET OPTIONS'|| P_X_LINE_TBL.COUNT ) ;
852 END IF;
853 IF l_debug_level > 0 THEN
854 oe_debug_pub.add( 'EXIT GET OPTIONS' ) ;
855 END IF;
856
857 EXCEPTION
858 WHEN FND_API.G_EXC_ERROR THEN
859
860 RAISE FND_API.G_EXC_ERROR;
861
862 WHEN OTHERS THEN
863 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
864 THEN
865 OE_MSG_PUB.Add_Exc_Msg
866 ( G_PKG_NAME ,
867 'Get_Options'
868 );
869 END IF;
870 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
871 END Get_Options;
872
873 -- This procedure is added for to seperate arrival sets from the ship set
874 -- logic given to DWL customer. The arrival set behaves the same
875 --way as it does
876
877
878
879 Procedure Insert_Into_arrival_Set
880 (p_Set_request_tbl oe_order_pub.Request_Tbl_Type,
881 p_Push_Set_Date IN VARCHAR2 := FND_API.G_FALSE,
882 X_Return_Status OUT NOCOPY VARCHAR2,
883
884 x_msg_count OUT NOCOPY NUMBER,
885
886 x_msg_data OUT NOCOPY VARCHAR2
887
888 )IS
889 l_line_rec OE_ORDER_PUB.line_rec_type;
890 l_model_line_rec OE_ORDER_PUB.line_rec_type;
891 l_header_rec OE_ORDER_PUB.header_rec_type;
892 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
893 l_temp_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
894 l_sch_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
895 l_set_request_tbl oe_order_pub.Request_Tbl_Type;
896 set_request_tbl oe_order_pub.Request_Tbl_Type := p_Set_request_tbl ;
897 l_set_tbl OE_ORDER_PUB.Line_Tbl_Type;
898 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type ;
899 l_line_query_tbl OE_ORDER_PUB.Line_Tbl_Type;
900 l_control_rec OE_GLOBALS.control_rec_type;
901 l_api_name CONSTANT VARCHAR2(30) := 'Insert_Into_Set';
902 l_return_status VARCHAR2(30);
903 l_query_clause VARCHAR2(2000);
904 l_exist BOOLEAN := FALSE;
905 l_line_exist BOOLEAN := FALSE;
906 l_set_id NUMBER ;
907 l_ship_set_id NUMBER ;
908 l_arrival_set_id NUMBER ;
909 l_sch_count NUMBER := 0 ;
910 l_header_id NUMBER ;
911 l_line_id NUMBER ;
912 l_set_type VARCHAR2(30) ;
913 l_set_name VARCHAR2(30) ;
914 l_set_rec OE_ORDER_CACHE.set_rec_type;
915 l_atp_rec OE_ATP.atp_tbl_type;
916 l_atp_tbl OE_ATP.atp_tbl_type;
917 lcnt number := 0;
918 l_Ship_from_org_id NUMBER ;
919 l_Ship_to_org_id NUMBER ;
920 l_Schedule_Ship_Date DATE ;
921 l_Schedule_Arrival_Date DATE ;
922 l_Freight_Carrier_Code VARCHAR2(30) ;
923 l_Shipping_Method_Code VARCHAR2(30) ;
924 l_Shipment_priority_code VARCHAR2(30);
925 LCOUNT NUMBER := 0;
926 lsettempname number;
927 l_top_model_line_id number;
928 l_line_tbl_model_exists varchar2(1) := 'N' ;
929
930 Cursor shipset is
931 Select set_id from
932 oe_sets where
933 set_type = 'SHIP_SET'
934 and header_id = l_header_id
935 and ship_from_org_id = l_ship_from_org_id
936 and ship_to_org_id = l_ship_to_org_id
937 and trunc(schedule_ship_date) = trunc(l_Schedule_Ship_Date)
938 and nvl(set_status,'X') <> 'C'
939 ;
940
941 Cursor arrivalset is
942 Select set_id from
943 oe_sets where
944 set_type = 'ARRIVAL_SET' and
945 header_id = l_header_id
946 and ship_to_org_id = l_ship_to_org_id
947 and trunc(schedule_arrival_date) = trunc(l_Schedule_arrival_Date)
948 and nvl(set_status,'X') <> 'C';
949
950 Cursor C1 is
951 select Max(to_number(set_name)) from
952 oe_sets
953 where
954 set_status = 'T'
955 and header_id = l_header_id and
956 set_type = l_set_type;
957
958 Cursor C2 is
959 Select Schedule_ship_date,
960 Ship_from_org_id,
961 ship_to_org_id,
962 schedule_arrival_date,
963 ship_set_id,
964 arrival_set_id
965 from
966 oe_order_lines_all
967 where
968 line_id = l_top_model_line_id ;
969 /*nvl(cancelled_flag,'N') <> 'Y' and
970 nvl(model_remnant_flag,'N') <> 'Y'
971 and (
972 ship_model_complete_flag = 'Y' OR
973 ato_line_id IS NOT NULL) */
974
975 Cursor C3 is
976 select Max(to_number(set_name)) from
977 oe_sets
978 where
979 header_id = l_header_id and
980 set_type = l_set_type and
981 set_name = lsettempname;
982
983 tempname varchar2(240);
984
985 l_perform_sch boolean := TRUE;
986 l_model_exists boolean := FALSE;
987 l_x_ship_set_id number;
988 l_x_arrival_set_id number;
989
990
991 --
992 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
993 --
994 Begin
995 IF l_debug_level > 0 THEN
996 oe_debug_pub.add( 'INSERT_INTO ARRIVAL SETSS' , 1 ) ;
997 END IF;
998 g_old_arrival_set_path := TRUE;
999
1000 IF p_set_request_tbl.count > 0 THEN
1001 --g_cust_pref_set := TRUE;
1002 IF l_debug_level > 0 THEN
1003 oe_debug_pub.add( 'PROCESS REQUEST RECORD ' , 1 ) ;
1004 END IF;
1005
1006 l_header_id := p_set_request_tbl(1).entity_id;
1007 oe_header_util.query_row(p_header_id => l_header_id,
1008 x_header_rec => l_header_rec);
1009 IF l_header_rec.customer_preference_set_code = 'ARRIVAL' THEN
1010 l_set_type := 'ARRIVAL_SET';
1011 ELSIF l_header_rec.customer_preference_set_code = 'SHIP' THEN
1012 l_set_type := 'SHIP_SET';
1013 ELSE
1014 GOTO END_1;
1015 END IF;
1016
1017
1018 FOR I in 1..g_auto_set_tbl.count
1019 Loop
1020 Begin
1021 l_temp_line_tbl.delete;
1022 g_old_line_tbl.delete;
1023 IF l_debug_level > 0 THEN
1024 oe_debug_pub.add( 'ENTER INTO AUTO SET TABLE LOOP ' , 1 ) ;
1025 END IF;
1026 oe_line_util.query_row(p_line_id => g_auto_set_tbl(I).line_id,
1027 x_line_rec => l_line_rec);
1028 IF (l_line_rec.split_from_line_id is not null) THEN
1029 IF l_debug_level > 0 THEN
1030 oe_debug_pub.add( 'INVALID ITEM SPLIT'||L_LINE_REC.LINE_ID ) ;
1031 END IF;
1032 RAISE NO_DATA_FOUND;
1033 END IF;
1034 IF l_line_rec.line_category_code = 'RETURN' OR
1035 l_line_rec.item_type_code = 'INCLUDED' THEN
1036 RAISE NO_DATA_FOUND;
1037 END IF;
1038 l_temp_line_tbl(1) := l_line_rec;
1039
1040 g_old_line_tbl(g_old_line_tbl.count +1 ) :=
1041 l_temp_line_tbl(1);
1042
1043 IF l_debug_level > 0 THEN
1044 oe_debug_pub.add( 'ITEM TYPE CODE IS: '||L_LINE_REC.ITEM_TYPE_CODE , 1 ) ;
1045 END IF;
1046 IF l_debug_level > 0 THEN
1047 oe_debug_pub.add( 'SHIP FROM : '||L_LINE_REC.SHIP_FROM_ORG_ID , 1 ) ;
1048 END IF;
1049 IF l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_MODEL
1050 OR l_line_rec.item_type_code = 'KIT' THEN
1051 l_model_exists := TRUE;
1052 Get_Options(p_x_line_tbl => l_temp_line_tbl,
1053 p_set_type => l_set_type,
1054 p_index => 1);
1055 ELSIF l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_CLASS OR
1056 l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_OPTION OR
1057 l_line_rec.item_type_code = 'INCLUDED' OR
1058 l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_CONFIG THEN
1059 l_top_model_line_id := l_line_rec.top_model_line_id;
1060 l_line_tbl_model_exists := 'N';
1061 FOR T in 1..l_line_tbl.count loop
1062 IF l_top_model_line_id = l_line_tbl(T).line_id THEN
1063 l_line_tbl_model_exists := 'Y';
1064 IF l_set_type = 'SHIP_SET' THEN
1065 l_schedule_ship_date := l_line_tbl(T).schedule_ship_date;
1066 l_ship_from_org_id := l_line_tbl(T).ship_from_org_id;
1067 l_ship_to_org_id := l_line_tbl(T).ship_to_org_id;
1068 l_ship_set_id := l_line_tbl(T).ship_set_id;
1069 ELSIF l_set_type = 'ARRIVAL_SET' THEN
1070 l_ship_to_org_id := l_line_tbl(T).ship_to_org_id;
1071 l_schedule_arrival_date := l_line_tbl(T).schedule_arrival_date;
1072 l_arrival_set_id := l_line_tbl(T).arrival_set_id;
1073 END IF;
1074 EXIT;
1075 END IF;
1076 END LOOP;
1077 IF l_line_tbl_model_exists = 'N' THEN
1078 OPEN C2;
1079 FETCH C2 into
1080 l_schedule_ship_date,
1081 l_ship_from_org_id,
1082 l_ship_to_org_id,
1083 l_schedule_arrival_date,
1084 l_ship_set_id,
1085 l_arrival_set_id;
1086 CLOSE C2;
1087 END IF;
1088 IF l_set_type = 'SHIP_SET'
1089 /*-- AND
1090 l_schedule_ship_date IS NOT NULL AND
1091 l_ship_from_org_id IS NOT NULL AND
1092 l_ship_to_org_id IS NOT NULL */
1093 THEN
1094 IF l_debug_level > 0 THEN
1095 oe_debug_pub.add( 'INTO SHIP SET' , 1 ) ;
1096 END IF;
1097 l_temp_line_tbl(1).schedule_ship_date := l_schedule_ship_date;
1098 l_temp_line_tbl(1).ship_from_org_id := l_ship_from_org_id;
1099 l_temp_line_tbl(1).ship_to_org_id := l_ship_to_org_id;
1100 l_temp_line_tbl(1).ship_set_id := l_ship_set_id;
1101 --l_perform_sch := FALSE;
1102 ELSIF l_set_type = 'ARRIVAL_SET' THEN
1103 /*
1104 l_schedule_arrival_date IS NOT NULL AND
1105 l_ship_to_org_id IS NOT NULL THEN */
1106 l_temp_line_tbl(1).schedule_arrival_date := l_schedule_arrival_date;
1107 l_temp_line_tbl(1).ship_to_org_id := l_ship_to_org_id;
1108 l_temp_line_tbl(1).arrival_set_id := l_arrival_set_id;
1109 --l_perform_sch := FALSE;
1110 END IF;
1111 END IF;
1112 -- IF l_line_rec.schedule_status_code IS NULL THEN
1113 IF l_debug_level > 0 THEN
1114 oe_debug_pub.add( 'COUNT OF TEMP TABLE' || L_TEMP_LINE_TBL.COUNT , 1 ) ;
1115 END IF;
1116 IF l_debug_level > 0 THEN
1117 oe_debug_pub.add( 'ITEM TYPE CODE' || L_TEMP_LINE_TBL ( 1 ) .ITEM_TYPE_CODE , 1 ) ;
1118 END IF;
1119 IF l_debug_level > 0 THEN
1120 oe_debug_pub.add( 'SHIP SET' || L_TEMP_LINE_TBL ( 1 ) .SHIP_SET_ID , 1 ) ;
1121 END IF;
1122 FOR J in 1..l_temp_line_tbl.count
1123 LOOP
1124 l_temp_line_tbl(J).schedule_action_code :=
1125 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
1126 l_sch_count := l_sch_count + 1;
1127 l_sch_line_tbl(l_sch_count) := l_temp_line_tbl(J);
1128 IF l_debug_level > 0 THEN
1129 oe_debug_pub.add( 'COUNT OF TEMP TABLE' || L_TEMP_LINE_TBL.COUNT , 1 ) ;
1130 END IF;
1131 IF l_debug_level > 0 THEN
1132 oe_debug_pub.add( 'ITEM TYPE CODE' || L_TEMP_LINE_TBL ( 1 ) .ITEM_TYPE_CODE , 1 ) ;
1133 END IF;
1134 IF l_debug_level > 0 THEN
1135 oe_debug_pub.add( 'SHIP SET' || L_TEMP_LINE_TBL ( 1 ) .SHIP_SET_ID , 1 ) ;
1136 END IF;
1137 l_model_exists := false;
1138 IF l_temp_line_tbl(J).item_type_code = 'INCLUDED' OR
1139 l_temp_line_tbl(J).item_type_code = 'OPTION' OR
1140 l_temp_line_tbl(J).item_type_code = 'CLASS' OR
1141 l_temp_line_tbl(J).item_type_code = 'CONFIG' THEN
1142 FOR L in 1..g_auto_set_tbl.count
1143 LOOP
1144 IF l_temp_line_tbl(J).top_model_line_id =
1145 g_auto_set_tbl(L).line_id THEN
1146 l_model_exists := true;
1147 exit;
1148 END IF;
1149 END LOOP;
1150 IF l_debug_level > 0 THEN
1151 oe_debug_pub.add( 'COUNT OF TEMP TABLE' || L_TEMP_LINE_TBL.COUNT , 1 ) ;
1152 END IF;
1153 IF l_debug_level > 0 THEN
1154 oe_debug_pub.add( 'ITEM TYPE CODE' || L_TEMP_LINE_TBL ( 1 ) .ITEM_TYPE_CODE , 1 ) ;
1155 END IF;
1156 IF l_debug_level > 0 THEN
1157 oe_debug_pub.add( 'SHIP SET' || L_TEMP_LINE_TBL ( 1 ) .SHIP_SET_ID , 1 ) ;
1158 END IF;
1159 if not l_model_exists then
1160 oe_line_util.query_row(p_line_id => l_temp_line_tbl(J).top_model_line_id,
1161 x_line_rec => l_model_line_rec);
1162 if l_model_line_rec.ship_set_id is null and
1163 l_model_line_rec.arrival_set_id is null THEN
1164
1165 l_sch_line_tbl.delete(l_sch_count) ;
1166 l_sch_count := l_sch_count - 1;
1167
1168
1169 END IF;
1170 END IF;
1171 END IF;
1172
1173 l_temp_line_tbl(J).schedule_action_code :=
1174 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
1175 END LOOP;
1176
1177 -- Call scheduling
1178 IF l_debug_level > 0 THEN
1179 oe_debug_pub.add( 'BEFORE CALLING SCHEDULING ' , 1 ) ;
1180 END IF;
1181 IF l_debug_level > 0 THEN
1182 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||G_OLD_LINE_TBL.COUNT , 1 ) ;
1183 END IF;
1184 IF l_debug_level > 0 THEN
1185 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||G_OLD_LINE_TBL.LAST , 1 ) ;
1186 END IF;
1187 IF l_debug_level > 0 THEN
1188 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||L_SCH_LINE_TBL.COUNT , 1 ) ;
1189 END IF;
1190 IF l_debug_level > 0 THEN
1191 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||L_SCH_LINE_TBL.LAST , 1 ) ;
1192 END IF;
1193 IF l_debug_level > 0 THEN
1194 oe_debug_pub.add( 'SHIP FROM : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_FROM_ORG_ID , 1 ) ;
1195 END IF;
1196 IF l_debug_level > 0 THEN
1197 oe_debug_pub.add( 'LINE : '||L_TEMP_LINE_TBL ( 1 ) .LINE_ID , 1 ) ;
1198 END IF;
1199 IF l_debug_level > 0 THEN
1200 oe_debug_pub.add( 'SHIP TO : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_TO_ORG_ID , 1 ) ;
1201 END IF;
1202 IF l_debug_level > 0 THEN
1203 oe_debug_pub.add( 'SHIP FROM : '||L_SCH_LINE_TBL ( 1 ) .SHIP_FROM_ORG_ID , 1 ) ;
1204 END IF;
1205 IF l_debug_level > 0 THEN
1206 oe_debug_pub.add( 'LINE : '||L_SCH_LINE_TBL ( 1 ) .LINE_ID , 1 ) ;
1207 END IF;
1208 IF l_debug_level > 0 THEN
1209 oe_debug_pub.add( 'SHIP TO : '||L_SCH_LINE_TBL ( 1 ) .SHIP_TO_ORG_ID , 1 ) ;
1210 END IF;
1211 IF l_debug_level > 0 THEN
1212 oe_debug_pub.add( 'SHIP FROM : '||G_OLD_LINE_TBL ( 1 ) .SHIP_FROM_ORG_ID , 1 ) ;
1213 END IF;
1214 IF l_debug_level > 0 THEN
1215 oe_debug_pub.add( 'LINE : '||G_OLD_LINE_TBL ( 1 ) .LINE_ID , 1 ) ;
1216 END IF;
1217 IF l_debug_level > 0 THEN
1218 oe_debug_pub.add( 'SHIP TO : '||G_OLD_LINE_TBL ( 1 ) .SHIP_TO_ORG_ID , 1 ) ;
1219 END IF;
1220 IF l_debug_level > 0 THEN
1221 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||L_SCH_LINE_TBL.COUNT , 1 ) ;
1222 END IF;
1223 IF l_debug_level > 0 THEN
1224 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||G_OLD_LINE_TBL.COUNT , 1 ) ;
1225 END IF;
1226 IF l_perform_sch and l_sch_line_tbl.count > 0 THEN
1227 OE_GRP_SCH_UTIL.Schedule_set_of_lines
1228 (p_x_line_tbl => l_sch_line_tbl,
1229 p_old_line_tbl => g_old_line_tbl,
1230 x_return_status => l_return_status);
1231 g_old_line_tbl.delete;
1232 END IF;
1233 l_perform_sch := TRUE;
1234
1235 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1236 IF l_debug_level > 0 THEN
1237 oe_debug_pub.add( ' SCHEDULING UNEXPECTED ERROR ' , 1 ) ;
1238 END IF;
1239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1240 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1241 IF l_debug_level > 0 THEN
1242 oe_debug_pub.add( ' EXPECTED ERROR ' , 1 ) ;
1243 END IF;
1244 l_sch_line_tbl.delete;
1245 l_sch_count := 0;
1246 goto END_2;
1247
1248 -- RAISE FND_API.G_EXC_ERROR;
1249 END IF;
1250 -- END IF; -- Schedule Action Code
1251 IF l_debug_level > 0 THEN
1252 oe_debug_pub.add( 'AFTER CALLIN SCHEDULING ' , 1 ) ;
1253 END IF;
1254 IF l_sch_line_tbl.count > 0 THEN
1255 l_temp_line_tbl.delete;
1256 --END IF;
1257 l_temp_line_tbl := l_sch_line_tbl;
1258 l_sch_line_tbl.delete;
1259 l_sch_count := 0;
1260 END IF;
1261 l_ship_from_org_id := l_temp_line_tbl(1).ship_from_org_id;
1262 l_ship_to_org_id := l_temp_line_tbl(1).ship_to_org_id;
1263 l_schedule_ship_date := l_temp_line_tbl(1).schedule_ship_date;
1264 l_schedule_arrival_date := l_temp_line_tbl(1).schedule_arrival_date;
1265 l_freight_carrier_code := l_temp_line_tbl(1).freight_carrier_code;
1266 l_shipping_method_code := l_temp_line_tbl(1).shipping_method_code;
1267 l_shipment_priority_code := l_temp_line_tbl(1).shipment_priority_code;
1268 l_set_id := null;
1269
1270 IF l_set_type = 'SHIP_SET' THEN
1271 Open shipset;
1272 Fetch shipset into l_set_id;
1273 Close shipset;
1274 ELSIF l_set_type = 'ARRIVAL_SET' THEN
1275 IF l_debug_level > 0 THEN
1276 oe_debug_pub.add( 'SHIP FROM : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_FROM_ORG_ID , 1 ) ;
1277 END IF;
1278 IF l_debug_level > 0 THEN
1279 oe_debug_pub.add( 'LINE : '||L_TEMP_LINE_TBL ( 1 ) .LINE_ID , 1 ) ;
1280 END IF;
1281 IF l_debug_level > 0 THEN
1282 oe_debug_pub.add( 'SHIP TO : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_TO_ORG_ID , 1 ) ;
1283 END IF;
1284 Open arrivalset;
1285 Fetch arrivalset into l_set_id;
1286 Close arrivalset;
1287 END IF;
1288
1289 IF l_set_id IS NULL THEN
1290 IF l_debug_level > 0 THEN
1291 oe_debug_pub.add( 'SHIP FROM : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_FROM_ORG_ID , 1 ) ;
1292 END IF;
1293 IF l_debug_level > 0 THEN
1294 oe_debug_pub.add( 'LINE : '||L_TEMP_LINE_TBL ( 1 ) .LINE_ID , 1 ) ;
1295 END IF;
1296 IF l_debug_level > 0 THEN
1297 oe_debug_pub.add( 'SHIP TO : '||L_TEMP_LINE_TBL ( 1 ) .SHIP_TO_ORG_ID , 1 ) ;
1298 END IF;
1299 OPEN C1;
1300 FETCH C1 INTO lsettempname;
1301 CLOSE C1;
1302 IF lsettempname IS NULL THEN
1303 lsettempname := 1;
1304
1305 LOOP
1306 OPEN C3;
1307 FETCH C3 INTO tempname;
1308 CLOSE C3;
1309 IF tempname is not null then
1310 lsettempname := lsettempname + 1;
1311 ELSE
1312 EXIT;
1313 END IF;
1314 END LOOP ;
1315
1316 ELSE
1317 lsettempname := lsettempname + 1;
1318 END IF;
1319 IF l_debug_level > 0 THEN
1320 oe_debug_pub.add( ' BEFORE CREATING SET ' , 1 ) ;
1321 END IF;
1322 Create_Set
1323 (p_Set_Name => to_char(lsettempname),
1324 p_Set_Type => l_set_type,
1325 p_Header_Id => l_header_id,
1326 p_Ship_From_Org_Id => l_ship_from_org_id,
1327 p_Ship_To_Org_Id => l_Ship_To_Org_Id,
1328 p_Schedule_Ship_Date => l_schedule_ship_Date,
1329 p_Schedule_Arrival_Date => l_Schedule_Arrival_Date,
1330 p_Freight_Carrier_Code => l_Freight_Carrier_Code,
1331 p_Shipping_Method_Code => l_Shipping_Method_Code,
1332 p_Shipment_priority_code => l_Shipment_priority_code,
1333 x_Set_Id => l_set_id,
1334 X_Return_Status => l_return_status,
1335 x_msg_count => x_msg_count,
1336 x_msg_data => x_msg_data);
1337 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1338 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1339 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1340 RAISE FND_API.G_EXC_ERROR;
1341 END IF;
1342
1343 END IF; -- if set id is null
1344
1345 IF l_debug_level > 0 THEN
1346 oe_debug_pub.add( ' SET ID IS '|| L_SET_ID , 1 ) ;
1347 END IF;
1348
1349 FOR K in 1..l_temp_line_tbl.count
1350 LOOP
1351 IF l_set_type = 'SHIP_SET' THEN
1352 l_temp_line_tbl(K).ship_Set_id := l_set_id;
1353 ELSIF l_set_type = 'ARRIVAL_SET' THEN
1354 l_temp_line_tbl(K).arrival_Set_id := l_set_id;
1355 END IF;
1356 l_temp_line_tbl(K).operation := oe_globals.g_opr_update;
1357 END LOOP;
1358
1359 FOR L in 1..l_temp_line_tbl.count
1360 LOOP
1361 l_line_tbl(l_line_tbl.count+1) := l_temp_line_tbl(L);
1362 END LOOP;
1363
1364 <<END_2>>
1365 null;
1366
1367 Exception
1368
1369 WHEN NO_DATA_FOUND THEN
1370 NULL;
1371 WHEN FND_API.G_EXC_ERROR THEN
1372
1373 x_return_status := FND_API.G_RET_STS_ERROR;
1374
1375 -- Get message count and data
1376
1377
1378 oe_msg_pub.count_and_get
1379 ( p_count => x_msg_count
1380 , p_data => x_msg_data
1381 );
1382 IF l_debug_level > 0 THEN
1383 oe_debug_pub.add( 'IN INSERINTO EXCEPTION ' , 1 ) ;
1384 END IF;
1385 RAISE FND_API.G_EXC_ERROR;
1386
1387 WHEN OTHERS THEN
1388 oe_msg_pub.count_and_get
1389 ( p_count => x_msg_count
1390 , p_data => x_msg_data
1391 );
1392 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1393
1394 /*x_return_status := FND_API.G_EXC_UNEXPECTED_ERROR ;
1395
1396 OE_DEBUG_PUB.Add('In Inserinto exception ',1);
1397 RAISE FND_API.G_EXC_UNEXPECTED_ERROR ;*/
1398
1399 NULL;
1400
1401 END ;-- End of get line
1402 END LOOP;
1403 FOR I in 1..l_line_tbl.count
1404 LOOP
1405 l_model_exists := false;
1406 IF l_line_tbl(I).item_type_code = 'INCLUDED' OR
1407 l_line_tbl(I).item_type_code = 'OPTION' OR
1408 l_line_tbl(I).item_type_code = 'CLASS' THEN
1409 FOR J in 1..l_line_tbl.count
1410 LOOP
1411 IF l_line_tbl(I).top_model_line_id =
1412 l_line_tbl(J).line_id THEN
1413 l_model_exists := true;
1414 exit;
1415 END IF;
1416 END LOOP;
1417 if not l_model_exists then
1418 oe_line_util.query_row(p_line_id => l_line_tbl(I).top_model_line_id,
1419 x_line_rec => l_model_line_rec);
1420 IF l_model_line_rec.ship_set_id is null then
1421 l_line_tbl(I).ship_set_id := NULL;
1422 ELSIF l_model_line_rec.ship_set_id is not null then
1423 l_line_tbl(I).ship_set_id :=
1424 l_model_line_rec.ship_set_id;
1425
1426
1427 END IF;
1428 IF l_model_line_rec.arrival_set_id is null then
1429 l_line_tbl(I).arrival_set_id := NULL;
1430 ELSIF l_model_line_rec.arrival_set_id is not null then
1431 l_line_tbl(I).arrival_set_id :=
1432 l_model_line_rec.arrival_set_id;
1433 END IF;
1434 END IF;
1435 END IF;
1436
1437
1438 IF l_debug_level > 0 THEN
1439 oe_debug_pub.add( 'SHIP SET IS-'||L_LINE_TBL ( I ) .SHIP_SET_ID , 1 ) ;
1440 END IF;
1441 IF l_debug_level > 0 THEN
1442 oe_debug_pub.add( 'LINE -'||L_LINE_TBL ( I ) .LINE_ID , 1 ) ;
1443 END IF;
1444 IF l_debug_level > 0 THEN
1445 oe_debug_pub.add( 'ITEM TYPE -'||L_LINE_TBL ( I ) .ITEM_TYPE_CODE , 1 ) ;
1446 END IF;
1447 END LOOP;
1448
1449 IF l_line_tbl.count > 0 THEN
1450
1451
1452 -- Call Process Order
1453 l_control_rec.controlled_operation := TRUE;
1454 l_control_rec.write_to_db := TRUE;
1455 l_control_rec.PROCESS := FALSE;
1456 l_control_rec.default_attributes := TRUE;
1457 l_control_rec.change_attributes := TRUE;
1458 l_control_rec.validate_entity :=TRUE;
1459
1460
1461 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'N';
1462 g_set_recursive_flag := TRUE;
1463 oe_order_pvt.Lines
1464 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
1465 , p_control_rec => l_control_rec
1466 , p_x_line_tbl => l_line_tbl
1467 , p_x_old_line_tbl => l_old_line_tbl
1468 , x_return_status => l_return_status
1469
1470 );
1471
1472 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1473 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1474 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1475 RAISE FND_API.G_EXC_ERROR;
1476 END IF;
1477
1478 /* jolin start comment out nocopy for notification project
1479
1480 -- Api to call notify OC and ACK and to process delayed requests
1481
1482 OE_Order_PVT.Process_Requests_And_Notify
1483 ( p_process_requests => FALSE
1484 , p_notify => TRUE
1485 , x_return_status => l_return_status
1486 , p_line_tbl => l_line_tbl
1487 , p_old_line_tbl => l_old_line_tbl
1488 );
1489
1490 jolin end */
1491
1492 l_line_tbl.delete;
1493
1494
1495 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'Y';
1496 g_set_recursive_flag := FALSE;
1497 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1498 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1499 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1500 RAISE FND_API.G_EXC_ERROR;
1501 END IF;
1502
1503 END IF; -- IF line table is greate than Zero
1504
1505 g_cust_pref_set := TRUE;
1506
1507 END IF;
1508 g_auto_set_tbl.delete;
1509 IF l_debug_level > 0 THEN
1510 oe_debug_pub.add( ' EXIT INSERT INTO SETS' , 1 ) ;
1511 END IF;
1512
1513 <<END_1>>
1514 NULL;
1515 g_auto_set_tbl.delete;
1516 g_old_arrival_set_path := FALSE;
1517 --g_cust_pref_set := TRUE;
1518
1519
1520 EXCEPTION
1521
1522 WHEN FND_API.G_EXC_ERROR THEN
1523
1524 x_return_status := FND_API.G_RET_STS_ERROR;
1525
1526 -- Get message count and data
1527
1528
1529 oe_msg_pub.count_and_get
1530 ( p_count => x_msg_count
1531 , p_data => x_msg_data
1532 );
1533 IF l_debug_level > 0 THEN
1534 oe_debug_pub.add( 'IN INSERINTO EXCEPTION ' , 1 ) ;
1535 END IF;
1536 RAISE FND_API.G_EXC_ERROR;
1537
1538 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1539
1540 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1541 -- Get message count and data
1542
1543 oe_msg_pub.count_and_get
1544 ( p_count => x_msg_count
1545 , p_data => x_msg_data
1546 );
1547 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1548 WHEN OTHERS THEN
1549
1550 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1551
1552 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1553 THEN
1554 oe_msg_pub.Add_Exc_Msg
1555 ( G_PKG_NAME
1556 , 'Insert_Into_Set'
1557 );
1558 END IF;
1559
1560 -- Get message count and data
1561
1562 oe_msg_pub.count_and_get
1563 ( p_count => x_msg_count
1564 , p_data => x_msg_data
1565 );
1566
1567 End Insert_Into_arrival_Set;
1568
1569
1570 Procedure New_Process_Sets
1571 ( p_selected_line_tbl IN OE_GLOBALS.Selected_Record_Tbl, --(R12.MOAC)
1572 p_record_count IN NUMBER,
1573 p_set_name IN VARCHAR2,
1574 p_set_type IN VARCHAR2 := FND_API.G_MISS_CHAR,
1575 p_operation IN VARCHAR2,
1576 p_header_id IN VARCHAR2 := FND_API.G_MISS_CHAR,
1577 x_Set_Id OUT NOCOPY NUMBER,
1578
1579 x_return_status OUT NOCOPY VARCHAR2,
1580
1581 x_msg_count OUT NOCOPY NUMBER,
1582
1583 x_msg_data OUT NOCOPY VARCHAR2
1584
1585 ) IS
1586
1587 l_num_of_records NUMBER := p_record_count;
1588 l_line_rec OE_ORDER_PUB.line_rec_type;
1589 l_in_line_rec OE_ORDER_PUB.line_rec_type;
1590 l_control_rec OE_GLOBALS.Control_Rec_Type;
1591 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
1592 l_line_opt_tbl OE_ORDER_PUB.Line_Tbl_Type;
1593 l_line_opt_temp_tbl OE_ORDER_PUB.Line_Tbl_Type;
1594 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
1595 l_api_name CONSTANT VARCHAR2(30) := 'New_Process_sets';
1596 l_line_id Number;
1597 l_return_status VARCHAR2(30);
1598 l_header_id number := to_number(p_header_id);
1599
1600 j Integer;
1601 initial Integer;
1602 nextpos Integer;
1603 --l_record_ids varchar2(32000) := p_record_ids || ','; --R12.MOAC
1604 l_set_id number;
1605 l_set_type varchar2(80);
1606 l_exists BOOLEAN := FALSE ;
1607 l_Ship_from_org_id NUMBER ;
1608 l_Ship_to_org_id NUMBER ;
1609 l_Schedule_Ship_Date DATE ;
1610 l_Schedule_Arrival_Date DATE ;
1611 l_Freight_Carrier_Code VARCHAR2(30) ;
1612 l_Shipping_Method_Code VARCHAR2(30) ;
1613 l_Shipment_priority_code VARCHAR2(30);
1614 l_set_rec OE_ORDER_CACHE.set_rec_type;
1615 --
1616 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1617 --
1618 BEGIN
1619 SAVEPOINT New_Process_sets;
1620 x_return_status := FND_API.G_RET_STS_SUCCESS;
1621
1622
1623
1624 IF l_debug_level > 0 THEN
1625 oe_debug_pub.add( 'PROCEDURE NEW PROCESS SETS' , 1 ) ;
1626 END IF;
1627
1628 j := 1;
1629 initial := 1;
1630 --nextpos := INSTR(l_record_ids,',',1,j) ; --R12.MOAC
1631
1632 IF l_debug_level > 0 THEN
1633 oe_debug_pub.add( 'SET NAME IS-' || P_SET_NAME , 1 ) ;
1634 END IF;
1635 IF l_debug_level > 0 THEN
1636 oe_debug_pub.add( 'SET TYPE IS-' || P_OPERATION , 1 ) ;
1637 END IF;
1638 if p_set_name is not null then
1639 IF l_debug_level > 0 THEN
1640 oe_debug_pub.add( 'SET TYPE IS-' || P_SET_TYPE , 1 ) ;
1641 END IF;
1642 IF l_debug_level > 0 THEN
1643 oe_debug_pub.add( 'SET TYPE IS-' || P_OPERATION , 1 ) ;
1644 END IF;
1645
1646 if p_set_type = 'ARRIVAL' THEN
1647 l_set_type := 'ARRIVAL_SET';
1648 elsif p_set_type = 'SHIP' THEN
1649 l_set_type := 'SHIP_SET';
1650 end if;
1651 l_exists := Set_Exist(p_set_name => p_set_name,
1652 p_set_type => l_set_type,
1653 p_header_id =>l_header_id,
1654 x_set_id => l_set_id);
1655 IF l_set_id IS NOT NULL THEN
1656 IF is_set_closed(l_set_id) THEN
1657 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
1658 FND_MESSAGE.SET_TOKEN('SET',
1659 p_set_name);
1660 oe_msg_pub.add;
1661 RAISE FND_API.G_EXC_ERROR;
1662 END IF;
1663 END IF;
1664 if (p_operation = 'REMOVE' ) THEN
1665 IF l_debug_level > 0 THEN
1666 oe_debug_pub.add( 'INTO REMOVE' , 1 ) ;
1667 END IF;
1668 l_exists := TRUE;
1669 l_set_id := NULL;
1670 end if;
1671
1672 end if; -- Set name is not null
1673
1674
1675 IF l_exists and p_operation <> 'REMOVE' THEN
1676 l_set_rec := get_set_rec(l_set_id);
1677 END IF;
1678
1679
1680 --R12.MOAC Start
1681 /*
1682 FOR I IN 1..l_num_of_records LOOP
1683
1684 l_line_id := to_number(substr(l_record_ids,initial, nextpos-initial));
1685 initial := nextpos + 1.0;
1686 j := j + 1.0;
1687 nextpos := INSTR(l_record_ids,',',1,j) ;
1688 */
1689 FOR I IN 1..p_selected_line_tbl.COUNT LOOP
1690 l_line_id := p_selected_line_tbl(I).id1;
1691 -- R12.MOAC End
1692 OE_LINE_UTIL.lock_row
1693 ( p_line_id => l_line_id,
1694 p_x_line_rec => l_line_rec
1695 ,x_return_status => l_return_status);
1696
1697 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1698 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1699 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1700 RAISE FND_API.G_EXC_ERROR;
1701 END IF;
1702
1703 OE_MSG_PUB.set_msg_context
1704 ( p_entity_code => 'LINE'
1705 ,p_entity_id => l_line_rec.line_id
1706 ,p_header_id => l_line_rec.header_id
1707 ,p_line_id => l_line_rec.line_id
1708 ,p_orig_sys_document_ref =>
1709 l_line_rec.orig_sys_document_ref
1710 ,p_orig_sys_document_line_ref =>
1711 l_line_rec.orig_sys_line_ref
1712 ,p_orig_sys_shipment_ref =>
1713 l_line_rec.orig_sys_shipment_ref
1714 ,p_change_sequence => l_line_rec.change_sequence
1715 ,p_source_document_id =>
1716 l_line_rec.source_document_id
1717 ,p_source_document_line_id =>
1718 l_line_rec.source_document_line_id
1719 ,p_order_source_id =>
1720 l_line_rec.order_source_id
1721 ,p_source_document_type_id =>
1722 l_line_rec.source_document_type_id);
1723
1724 IF l_line_rec.ship_set = FND_API.G_MISS_CHAR THEN
1725 l_line_rec.ship_set := Null;
1726 END IF;
1727 IF l_line_rec.arrival_set = FND_API.G_MISS_CHAR THEN
1728 l_line_rec.arrival_set := Null;
1729 END IF;
1730 l_line_tbl(I) := l_line_rec;
1731
1732 --{ Bug 3692277 starts
1733 IF l_debug_level > 0 THEN
1734 OE_DEBUG_PUB.Add('RMC: Versioning with Reason');
1735 END IF;
1736 l_line_tbl(I).change_reason := 'SYSTEM';
1737 l_line_tbl(I).change_comments := 'Set Action';
1738 -- bug 3692277 ends }
1739
1740 IF (l_line_tbl(I).top_model_line_id <> l_line_tbl(I).line_id AND
1741 l_line_tbl(I).item_type_code <> 'STANDARD'
1742 AND
1743 nvl(l_line_tbl(I).model_remnant_flag,'N') <> 'Y') OR
1744 l_line_tbl(I).line_category_code = 'RETURN' OR
1745 l_line_tbl(I).source_type_code = 'EXTERNAL' OR
1746 (l_line_tbl(I).item_type_code = 'SERVICE'
1747 AND NVL(l_line_tbl(I).subscription_enable_flag,'N')='N'
1748 ) OR -- sol_ord_er #16014165
1749 nvl(l_line_tbl(I).fulfilled_flag,'N') = 'Y' OR
1750 nvl(l_line_tbl(I).open_flag,'N') = 'N' OR
1751 l_line_tbl(I).shipped_quantity is not null
1752 THEN
1753 /* and
1754 p_operation <> 'REMOVE' )) THEN*/
1755
1756 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
1757 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE',
1758 -- l_line_tbl(I).item_type_code);
1759 OE_MSG_PUB.ADD;
1760 IF l_debug_level > 0 THEN
1761 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' ) ;
1762 END IF;
1763 RAISE FND_API.G_EXC_ERROR;
1764 END IF;
1765
1766
1767 g_old_line_tbl(I) :=
1768 l_line_tbl(I);
1769
1770 IF p_set_type = 'ARRIVAL' THEN
1771 IF (p_operation = 'ADD' ) THEN
1772 /* Added the following if condition to fix the bug 2802249 */
1773
1774 IF l_line_tbl(I).ship_set_id is not null or
1775 l_line_tbl(I).ship_set is not null THEN
1776 IF l_debug_level > 0 THEN
1777 oe_debug_pub.add( 'ship_set:' || l_line_tbl(I).ship_set,2 ) ;
1778 oe_debug_pub.add( 'ship_set_id:' || l_line_tbl(I).ship_set_id,2 ) ;
1779 END IF;
1780 /* Changed the message to fix the bug 2862565 */
1781 -- FND_MESSAGE.Set_Name('ONT', 'OE_INVALID_SET_COMB');
1782 FND_MESSAGE.Set_Name('ONT','OE_SCH_NOT_IN_SHIP_ARR');
1783 oe_msg_pub.add;
1784 /* Changed the message to fix the bug 2862565 */
1785 RAISE FND_API.G_EXC_ERROR;
1786 END IF;
1787
1788 IF (l_set_id IS NULL) THEN
1789 l_line_tbl(I).arrival_set := p_set_name ;
1790 ELSE
1791 l_line_tbl(I).arrival_set_id := l_set_id ;
1792 END IF;
1793 ELSIF (p_operation = 'MOVE') THEN
1794 IF l_debug_level > 0 THEN
1795 oe_debug_pub.add( 'PROCEDURE PROCESS SETS'||TO_CHAR ( L_SET_ID ) , 1 ) ;
1796 END IF;
1797 IF l_set_id IS NOT NULL THEN
1798 l_line_tbl(I).arrival_set_id := l_set_id ;
1799 ELSE
1800 l_line_tbl(I).arrival_set_id := NULL ;
1801 l_line_tbl(I).arrival_set := p_set_name ;
1802 END IF;
1803 ELSIF (p_operation = 'REMOVE') THEN
1804 l_line_tbl(I).arrival_set_id := NULL ;
1805 END IF;
1806 ELSIF p_set_type = 'SHIP' THEN
1807 IF (p_operation = 'ADD' ) THEN
1808 IF (l_set_id IS NULL) THEN
1809 l_line_tbl(I).ship_set := p_set_name ;
1810 ELSE
1811 l_line_tbl(I).ship_set_id := l_set_id ;
1812 END IF;
1813 ELSIF (p_operation = 'MOVE') THEN
1814 IF l_debug_level > 0 THEN
1815 oe_debug_pub.add( 'PROCEDURE NEW PROCESS SETS'||TO_CHAR ( L_SET_ID ) , 1 ) ;
1816 END IF;
1817 IF l_set_id IS NOT NULL THEN
1818 l_line_tbl(I).ship_set_id := l_set_id ;
1819 ELSE
1820 l_line_tbl(I).ship_set_id := NULL ;
1821 l_line_tbl(I).ship_set := p_set_name ;
1822 END IF;
1823 ELSIF (p_operation = 'REMOVE') THEN
1824 l_line_tbl(I).ship_set_id := NULL ;
1825 END IF;
1826 END IF;
1827
1828 l_line_tbl(I).operation := OE_GLOBALS.G_OPR_UPDATE;
1829
1830 END LOOP;
1831
1832
1833 l_control_rec.write_to_db := TRUE;
1834 l_control_rec.PROCESS := TRUE;
1835 l_control_rec.default_attributes := TRUE;
1836 l_control_rec.change_attributes := TRUE;
1837 l_control_rec.validate_entity := TRUE;
1838
1839 -- Call OE_Order_PVT.Process_order
1840
1841 oe_order_pvt.Lines
1842 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
1843 , p_control_rec => l_control_rec
1844 , p_x_line_tbl => l_line_tbl
1845 , p_x_old_line_tbl => l_old_line_tbl
1846 , x_return_status => l_return_status
1847
1848 );
1849 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1850 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1851 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1852 RAISE FND_API.G_EXC_ERROR;
1853 END IF;
1854
1855
1856 -- jolin start comment out nocopy for notification project
1857
1858 -- Api to call notify OC and ACK and to process delayed requests
1859
1860 OE_Order_PVT.Process_Requests_And_Notify
1861 ( p_process_requests => TRUE
1862 , p_notify => TRUE
1863 , x_return_status => l_return_status
1864 , p_line_tbl => l_line_tbl
1865 , p_old_line_tbl => l_old_line_tbl
1866 );
1867
1868 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1869 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1870 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
1871 RAISE FND_API.G_EXC_ERROR;
1872 END IF;
1873 --jolin end
1874
1875 x_return_status := l_return_status;
1876
1877
1878 EXCEPTION
1879
1880 WHEN FND_API.G_EXC_ERROR THEN
1881
1882 x_return_status := FND_API.G_RET_STS_ERROR;
1883
1884 -- Get message count and data
1885
1886
1887 oe_msg_pub.count_and_get
1888 ( p_count => x_msg_count
1889 , p_data => x_msg_data
1890 );
1891 IF l_debug_level > 0 THEN
1892 oe_debug_pub.add( 'BEFORE ROLLING BACK' , 1 ) ;
1893 END IF;
1894 ROLLBACK TO SAVEPOINT New_Process_sets;
1895 IF l_debug_level > 0 THEN
1896 oe_debug_pub.add( 'AFTER ROLLING BACK' , 1 ) ;
1897 END IF;
1898
1899 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1900
1901 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1902 -- Get message count and data
1903
1904 oe_msg_pub.count_and_get
1905 ( p_count => x_msg_count
1906 , p_data => x_msg_data
1907 );
1908 IF l_debug_level > 0 THEN
1909 oe_debug_pub.add( 'BEFORE ROLLING BACK' , 1 ) ;
1910 END IF;
1911
1912 ROLLBACK TO SAVEPOINT New_Process_sets;
1913 IF l_debug_level > 0 THEN
1914 oe_debug_pub.add( 'AFTER ROLLING BACK' , 1 ) ;
1915 END IF;
1916 WHEN OTHERS THEN
1917
1918 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1919
1920 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
1921 THEN
1922 oe_msg_pub.Add_Exc_Msg
1923 ( G_PKG_NAME
1924 , 'Process_Sets'
1925 );
1926 END IF;
1927
1928 -- Get message count and data
1929
1930 oe_msg_pub.count_and_get
1931 ( p_count => x_msg_count
1932 , p_data => x_msg_data
1933 );
1934 ROLLBACK TO SAVEPOINT New_Process_sets;
1935
1936 END New_Process_Sets;
1937
1938 FUNCTION Set_Exist(p_set_name IN VARCHAR2,
1939 p_set_type IN VARCHAR2,
1940 p_Header_Id IN NUMBER,
1941 x_set_id OUT NOCOPY NUMBER)
1942
1943 RETURN BOOLEAN IS
1944 row_exists VARCHAR2(1);
1945 --
1946 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1947 --
1948 Begin
1949 SELECT set_id
1950 INTO x_set_id
1951 FROM OE_SETS
1952 where set_name = p_set_name
1953 and set_type = p_set_type and
1954 header_id = p_header_id ;
1955 --and nvl(set_status,'X') <> 'C';
1956
1957 RETURN TRUE;
1958
1959 EXCEPTION
1960 WHEN FND_API.G_EXC_ERROR THEN
1961
1962 RAISE FND_API.G_EXC_ERROR;
1963
1964 WHEN NO_DATA_FOUND THEN
1965
1966 RETURN FALSE;
1967
1968 End Set_Exist;
1969
1970 FUNCTION Set_Exist(p_set_id IN NUMBER,
1971 p_header_id IN NUMBER := FND_API.G_MISS_NUM)
1972 RETURN BOOLEAN IS
1973 row_exists VARCHAR2(1);
1974 l_header_id NUMBER := p_header_id;
1975 --
1976 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
1977 --
1978 Begin
1979 IF p_header_id = FND_API.G_MISS_NUM THEN
1980 l_header_id := NULL;
1981 ELSE
1982 l_header_id := p_header_id;
1983 END IF;
1984
1985
1986 SELECT 'Y'
1987 INTO row_exists
1988 FROM OE_SETS
1989 WHERE set_id = p_set_id
1990 and header_id = nvl(l_header_id,header_id);
1991
1992 RETURN TRUE;
1993 EXCEPTION
1994 WHEN FND_API.G_EXC_ERROR THEN
1995
1996 RAISE FND_API.G_EXC_ERROR;
1997
1998 WHEN NO_DATA_FOUND THEN
1999
2000 RETURN FALSE;
2001
2002 Null;
2003 End Set_Exist;
2004
2005 Procedure Create_Set
2006 (p_Set_Name IN VARCHAR2,
2007 p_Set_Type IN VARCHAR2,
2008 p_Header_Id IN NUMBER := NULL,
2009 p_Ship_From_Org_Id IN NUMBER := NULL,
2010 p_Ship_To_Org_Id IN NUMBER := NULL,
2011 p_shipment_priority_code IN VARCHAR2 := NULL,
2012 p_Schedule_Ship_Date IN DATE := NULL,
2013 p_Schedule_Arrival_Date IN DATE := NULL,
2014 p_Freight_Carrier_Code IN VARCHAR2 := NULL,
2015 p_Shipping_Method_Code IN VARCHAR2 := NULL,
2016 p_system_set IN VARCHAR2 DEFAULT 'N',
2017 x_Set_Id OUT NOCOPY NUMBER,
2018
2019 x_return_status OUT NOCOPY VARCHAR2,
2020
2021 x_msg_count OUT NOCOPY NUMBER,
2022
2023 x_msg_data OUT NOCOPY VARCHAR2
2024
2025 )IS
2026 l_set_id NUMBER;
2027 lcustpref varchar2(1) := 'A';
2028 l_header_rec OE_ORDER_PUB.Header_Rec_Type; -- Bug 14760471
2029 --
2030 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2031 --
2032 Begin
2033 x_return_status := FND_API.G_RET_STS_SUCCESS;
2034 IF l_debug_level > 0 THEN
2035 oe_debug_pub.add( 'ENTER:CREATE SETS ' , 1 ) ;
2036 END IF;
2037 IF l_debug_level > 0 THEN
2038 oe_debug_pub.add( 'HEADER ' || P_HEADER_ID , 1 ) ;
2039 END IF;
2040 IF l_debug_level > 0 THEN
2041 oe_debug_pub.add( 'SET NAME ' || P_SET_NAME , 1 ) ;
2042 END IF;
2043 IF l_debug_level > 0 THEN
2044 oe_debug_pub.add( 'SET TYPE ' || P_SET_TYPE , 1 ) ;
2045 END IF;
2046 IF (p_header_id IS NULL OR
2047 p_set_name IS NULL OR
2048 p_set_type IS NULL) THEN
2049 fnd_message.set_name('ONT', 'OE_SET_REQ_ARG');
2050 FND_MESSAGE.SET_TOKEN('SET',p_set_name);
2051 oe_msg_pub.add;
2052 RAISE FND_API.G_EXC_ERROR ;
2053 -- Require all three header,set name ane set type to create
2054 END IF;
2055 IF l_debug_level > 0 THEN
2056 oe_debug_pub.add( 'BEFORE SETEXISTS ' , 1 ) ;
2057 END IF;
2058
2059 IF NOT Set_Exist(p_set_name => p_set_name,
2060 p_set_type => p_set_type,
2061 p_header_id =>p_header_id,
2062 x_set_id => x_set_id) THEN
2063 NULL;
2064
2065 /* IF (p_set_type = 'SHIP_SET') AND
2066 (p_Ship_from_org_id IS NULL OR
2067 p_Ship_to_org_id IS NULL OR
2068 p_Schedule_Ship_Date IS NULL ) THEN
2069 --p_Freight_Carrier_Code IS NULL OR
2070 --p_Shipping_Method_Code IS NULL) THEN
2071 fnd_message.set_name('ONT', 'OE_INVALID_SET_ATTR');
2072 FND_MESSAGE.SET_TOKEN('SET',p_set_name);
2073 oe_msg_pub.add;
2074 RAISE FND_API.G_EXC_ERROR;
2075 -- set attributes cannot be null
2076 ELSIF (p_set_type = 'ARRIVAL_SET') AND
2077 (p_Ship_to_org_id IS NULL OR
2078 p_Schedule_arrival_date IS NULL)THEN
2079 -- Arrival set attributes cannot be null
2080 fnd_message.set_name('ONT', 'OE_INVALID_SET_ATTR');
2081 FND_MESSAGE.SET_TOKEN('SET',p_set_name);
2082 oe_msg_pub.add;
2083 RAISE FND_API.G_EXC_ERROR;
2084
2085 END IF; */
2086
2087 -- Bug 14760471 : START
2088 -- Lock header record
2089 OE_Header_Util.Lock_Row
2090 (p_header_id => p_header_id
2091 ,p_x_header_rec => l_header_rec
2092 ,x_return_status => x_return_status);
2093
2094 IF x_return_status = FND_API.G_RET_STS_ERROR THEN
2095 RAISE FND_API.G_EXC_ERROR;
2096 ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2097 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2098 END IF;
2099 -- Bug 14760471 : END
2100
2101
2102 SELECT OE_SETS_S.NEXTVAL
2103 INTO l_set_id
2104 FROM DUAL;
2105 IF l_debug_level > 0 THEN
2106 oe_debug_pub.add( 'AFTERSEQUECEVALUE ' , 1 ) ;
2107 END IF;
2108 IF g_cust_pref_set AND (p_set_type = 'SHIP_SET'
2109 OR p_set_type = 'ARRIVAL_SET')
2110 THEN
2111 lcustpref := 'T';
2112 END IF;
2113
2114 IF p_system_set = 'Y' AND (p_set_type = 'FULFILLMENT_SET') THEN
2115 lcustpref := 'T';
2116 END IF;
2117
2118 INSERT INTO OE_SETS(
2119 SET_ID
2120 , SET_NAME
2121 , SET_TYPE
2122 , Header_Id
2123 , Ship_from_org_id
2124 , Ship_to_org_id
2125 , Schedule_Ship_Date
2126 , Schedule_Arrival_Date
2127 , Freight_Carrier_Code
2128 , Shipping_Method_Code
2129 , Shipment_priority_code
2130 , Set_Status
2131 , CREATED_BY
2132 ,CREATION_DATE
2133 ,UPDATE_DATE
2134 ,UPDAtED_BY
2135 )
2136 VALUES(
2137 l_set_id
2138 , p_set_name
2139 , p_Set_type
2140 , p_Header_Id
2141 , p_Ship_from_org_id
2142 , p_Ship_to_org_id
2143 , p_Schedule_Ship_Date
2144 , p_Schedule_Arrival_Date
2145 , p_Freight_Carrier_Code
2146 , p_Shipping_Method_Code
2147 ,p_shipment_priority_code
2148 , lcustpref
2149 ,1
2150 ,sysdate
2151 ,sysdate
2152 ,1001
2153 );
2154 x_set_id := l_Set_id;
2155
2156 IF l_debug_level > 0 THEN
2157 oe_debug_pub.add( 'AFTERINSERT ' , 1 ) ;
2158 END IF;
2159 END IF; -- set EXISTS
2160
2161
2162 EXCEPTION
2163
2164 WHEN FND_API.G_EXC_ERROR THEN
2165
2166 x_return_status := FND_API.G_RET_STS_ERROR;
2167
2168 -- Get message count and data
2169
2170
2171 oe_msg_pub.count_and_get
2172 ( p_count => x_msg_count
2173 , p_data => x_msg_data
2174 );
2175 IF l_debug_level > 0 THEN
2176 oe_debug_pub.add( 'IN CREATE EXCEPTION ' , 1 ) ;
2177 END IF;
2178
2179 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2180
2181 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2182 -- Get message count and data
2183
2184 oe_msg_pub.count_and_get
2185 ( p_count => x_msg_count
2186 , p_data => x_msg_data
2187 );
2188 WHEN OTHERS THEN
2189
2190 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2191
2192 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2193 THEN
2194 oe_msg_pub.Add_Exc_Msg
2195 ( G_PKG_NAME
2196 , 'create_Set'
2197 );
2198 END IF;
2199
2200 -- Get message count and data
2201
2202 oe_msg_pub.count_and_get
2203 ( p_count => x_msg_count
2204 , p_data => x_msg_data
2205 );
2206
2207
2208 End Create_Set;
2209
2210 Procedure Insert_Into_Set
2211 (p_Set_request_tbl oe_order_pub.Request_Tbl_Type,
2212 p_Push_Set_Date IN VARCHAR2 := FND_API.G_FALSE,
2213 X_Return_Status OUT NOCOPY VARCHAR2,
2214
2215 x_msg_count OUT NOCOPY NUMBER,
2216
2217 x_msg_data OUT NOCOPY VARCHAR2
2218
2219 )IS
2220 l_line_rec OE_ORDER_PUB.line_rec_type;
2221 l_old_line_rec OE_ORDER_PUB.line_rec_type;
2222 l_model_line_rec OE_ORDER_PUB.line_rec_type;
2223 l_header_rec OE_ORDER_PUB.header_rec_type;
2224 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
2225 l_temp_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
2226 l_sch_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
2227 l_set_request_tbl oe_order_pub.Request_Tbl_Type;
2228 set_request_tbl oe_order_pub.Request_Tbl_Type := p_Set_request_tbl ;
2229 l_set_tbl OE_ORDER_PUB.Line_Tbl_Type;
2230 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type ;
2231 l_line_query_tbl OE_ORDER_PUB.Line_Tbl_Type;
2232 l_control_rec OE_GLOBALS.control_rec_type;
2233 l_api_name CONSTANT VARCHAR2(30) := 'Insert_Into_Set';
2234 l_return_status VARCHAR2(30);
2235 l_query_clause VARCHAR2(2000);
2236 l_exist BOOLEAN := FALSE;
2237 l_line_exist BOOLEAN := FALSE;
2238 l_set_id NUMBER ;
2239 l_ship_set_id NUMBER ;
2240 l_sch_count NUMBER := 0 ;
2241 l_header_id NUMBER ;
2242 l_line_id NUMBER ;
2243 l_set_type VARCHAR2(30) ;
2244 l_set_name VARCHAR2(30) ;
2245 l_set_rec OE_ORDER_CACHE.set_rec_type;
2246 l_atp_rec OE_ATP.atp_tbl_type;
2247 l_atp_tbl OE_ATP.atp_tbl_type;
2248 lcnt number := 0;
2249 l_Ship_from_org_id NUMBER ;
2250 l_Ship_to_org_id NUMBER ;
2251 l_Schedule_Ship_Date DATE ;
2252 l_Schedule_Arrival_Date DATE ;
2253 l_Freight_Carrier_Code VARCHAR2(30) ;
2254 l_Shipping_Method_Code VARCHAR2(30) ;
2255 l_Shipment_priority_code VARCHAR2(30);
2256 LCOUNT NUMBER := 0;
2257 lsettempname number;
2258 l_top_model_line_id number;
2259
2260 Cursor shipset is
2261 Select set_id from
2262 oe_sets where
2263 set_type = 'SHIP_SET'
2264 and header_id = l_header_id
2265 and ship_from_org_id = l_ship_from_org_id
2266 and ship_to_org_id = l_ship_to_org_id
2267 and trunc(schedule_ship_date) = trunc(l_Schedule_Ship_Date)
2268 and nvl(set_status,'X') <> 'C'
2269 ;
2270
2271 Cursor arrivalset is
2272 Select set_id from
2273 oe_sets where
2274 set_type = 'ARRIVAL_SET' and
2275 header_id = l_header_id
2276 and ship_to_org_id = l_ship_to_org_id
2277 and trunc(schedule_arrival_date) = trunc(l_Schedule_arrival_Date)
2278 and nvl(set_status,'X') <> 'C';
2279
2280 Cursor C1 is
2281 select Max(to_number(set_name)) from
2282 oe_sets
2283 where
2284 set_status = 'T'
2285 and header_id = l_header_id and
2286 set_type = l_set_type;
2287
2288 Cursor C2 is
2289 Select Schedule_ship_date,
2290 Ship_from_org_id,
2291 ship_to_org_id,
2292 schedule_arrival_date
2293 from
2294 oe_order_lines_all
2295 where
2296 line_id = l_top_model_line_id ;
2297 /*nvl(cancelled_flag,'N') <> 'Y' and
2298 nvl(model_remnant_flag,'N') <> 'Y'
2299 and (
2300 ship_model_complete_flag = 'Y' OR
2301 ato_line_id IS NOT NULL) */
2302
2303 Cursor C3 is
2304 select Max(to_number(set_name)) from
2305 oe_sets
2306 where
2307 header_id = l_header_id and
2308 set_type = l_set_type and
2309 set_name = lsettempname;
2310
2311 Cursor C4 is
2312 select set_id,
2313 Schedule_ship_date,
2314 Ship_from_org_id,
2315 ship_to_org_id
2316 from
2317 oe_sets
2318 where
2319 header_id = l_header_id and
2320 set_type = 'SHIP_SET' and
2321 set_status = 'T';
2322
2323 tempname varchar2(240);
2324
2325 l_perform_sch boolean := TRUE;
2326 l_model_exists boolean := FALSE;
2327 l_x_ship_set_id number;
2328 l_x_arrival_set_id number;
2329
2330
2331 --
2332 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2333 --
2334 Begin
2335 IF l_debug_level > 0 THEN
2336 oe_debug_pub.add( 'INSERT_INTO SETSS' , 1 ) ;
2337 END IF;
2338
2339 IF p_set_request_tbl.count > 0 THEN
2340 g_cust_pref_set := TRUE;
2341 IF l_debug_level > 0 THEN
2342 oe_debug_pub.add( 'PROCESS REQUEST RECORD ' , 1 ) ;
2343 END IF;
2344
2345 l_header_id := p_set_request_tbl(1).entity_id;
2346 oe_header_util.query_row(p_header_id => l_header_id,
2347 x_header_rec => l_header_rec);
2348 IF l_header_rec.customer_preference_set_code = 'ARRIVAL' THEN
2349 l_set_type := 'ARRIVAL_SET';
2350 ELSIF l_header_rec.customer_preference_set_code = 'SHIP' THEN
2351 l_set_type := 'SHIP_SET';
2352 ELSE
2353 GOTO END_1;
2354 END IF;
2355
2356 IF l_set_type = 'ARRIVAL_SET' THEN
2357 IF l_debug_level > 0 THEN
2358 oe_debug_pub.add( ' INTO CALLING ARRIVAL SET ' , 1 ) ;
2359 END IF;
2360 Insert_Into_arrival_Set
2361 (p_Set_request_tbl => p_Set_request_tbl ,
2362 X_Return_Status => l_return_status ,
2363 x_msg_count => x_msg_count,
2364 x_msg_data => x_msg_data);
2365 IF l_debug_level > 0 THEN
2366 oe_debug_pub.add( ' EXIT CALLING ARRIVAL SET ' , 1 ) ;
2367 END IF;
2368
2369 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2370 IF l_debug_level > 0 THEN
2371 oe_debug_pub.add( ' ARRIVAL SET UNEXPECTED ERROR ' , 1 ) ;
2372 END IF;
2373 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2374 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2375 IF l_debug_level > 0 THEN
2376 oe_debug_pub.add( ' ARRIVAL SET ' , 1 ) ;
2377 END IF;
2378 RAISE FND_API.G_EXC_ERROR;
2379 END IF;
2380
2381 GOTO END_1;
2382 END IF;
2383
2384
2385
2386 l_temp_line_tbl.delete;
2387 g_old_line_tbl.delete;
2388
2389 FOR I in 1..g_auto_set_tbl.count
2390 Loop
2391 Begin
2392 IF l_debug_level > 0 THEN
2393 oe_debug_pub.add( 'ENTER INTO AUTO SET TABLE LOOP ' , 1 ) ;
2394 END IF;
2395 oe_line_util.query_row(p_line_id => g_auto_set_tbl(I).line_id,
2396 x_line_rec => l_line_rec);
2397 IF (l_line_rec.split_from_line_id IS NOT NULL) THEN
2398 IF l_debug_level > 0 THEN
2399 oe_debug_pub.add( 'INVALID SPLIT LINEE'||L_LINE_REC.LINE_ID ) ;
2400 END IF;
2401 RAISE NO_DATA_FOUND;
2402 END IF;
2403 IF l_line_rec.line_category_code = 'RETURN' THEN
2404 RAISE NO_DATA_FOUND;
2405 END IF;
2406 g_old_line_tbl(g_old_line_tbl.count + 1) :=
2407 l_line_rec;
2408
2409 -- Default ship set if it is already created
2410
2411 OPEN C4;
2412 FETCH C4
2413 into
2414 l_ship_set_id,
2415 l_schedule_ship_date,
2416 l_ship_from_org_id,
2417 l_ship_to_org_id;
2418 close C4;
2419 IF l_ship_set_id is not null then
2420 l_line_rec.schedule_ship_date := l_schedule_ship_date;
2421 l_line_rec.ship_Set_id := l_ship_set_id;
2422 l_line_rec.ship_to_org_id := l_ship_to_org_id;
2423 l_line_rec.ship_from_org_id := l_ship_from_org_id;
2424 l_set_id := l_ship_set_id;
2425
2426
2427 IF I = 1 -- Validation added as part of 2502504
2428 AND l_line_rec.booked_flag = 'Y' THEN
2429
2430 Oe_Validate_Line.Validate_Shipset_SMC
2431 ( p_line_rec => l_line_rec
2432 ,p_old_line_rec => l_old_line_rec
2433 ,x_return_status => l_return_status);
2434
2435 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2436 GOTO END_1;
2437 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2438 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2439 END IF;
2440
2441 END IF;
2442
2443 ELSE
2444 l_line_rec.ship_Set := '1';
2445 END IF;
2446 l_temp_line_tbl(l_temp_line_tbl.count + 1) := l_line_rec;
2447
2448
2449
2450 IF l_debug_level > 0 THEN
2451 oe_debug_pub.add( 'ITEM TYPE CODE IS: '||L_LINE_REC.ITEM_TYPE_CODE , 1 ) ;
2452 END IF;
2453 IF l_debug_level > 0 THEN
2454 oe_debug_pub.add( 'SHIP FROM : '||L_LINE_REC.SHIP_FROM_ORG_ID , 1 ) ;
2455 END IF;
2456 IF l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_MODEL
2457 OR l_line_rec.item_type_code = 'KIT' THEN
2458 l_model_exists := TRUE;
2459 Get_Options(p_x_line_tbl => l_temp_line_tbl,
2460 p_set_type => l_set_type,
2461 p_index => l_temp_line_tbl.count);
2462 ELSIF l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_CLASS OR
2463 l_line_rec.item_type_code = OE_GLOBALS.G_ITEM_OPTION OR
2464 l_line_rec.item_type_code = 'INCLUDED' OR
2465 l_line_rec.item_type_code = 'CONFIG' THEN
2466 l_top_model_line_id := l_line_rec.top_model_line_id;
2467 /*OPEN C2;
2468 FETCH C2 into
2469 l_schedule_ship_date,
2470 l_ship_from_org_id,
2471 l_ship_to_org_id,
2472 l_schedule_arrival_date;
2473 CLOSE C2;
2474 IF l_set_type = 'SHIP_SET' THEN
2475 OE_DEBUG_PUB.Add('Into Ship Set',1);
2476 l_temp_line_tbl(l_temp_line_tbl.count).schedule_ship_date := l_schedule_ship_date;
2477 l_temp_line_tbl(l_temp_line_tbl.count).ship_from_org_id := l_ship_from_org_id;
2478 l_temp_line_tbl(l_temp_line_tbl.count).ship_to_org_id := l_ship_to_org_id;
2479 --l_perform_sch := FALSE;
2480 ELSIF l_set_type = 'ARRIVAL_SET' THEN
2481 l_temp_line_tbl(l_temp_line_tbl.count).schedule_arrival_date := l_schedule_arrival_date;
2482 l_temp_line_tbl(l_temp_line_tbl.count).ship_to_org_id := l_ship_to_org_id;
2483 --l_perform_sch := FALSE;
2484 END IF; */
2485 END IF;
2486
2487 Exception
2488
2489 WHEN NO_DATA_FOUND THEN
2490 NULL;
2491 WHEN OTHERS THEN
2492 NULL;
2493
2494 END ;-- End of get line
2495 END LOOP;
2496
2497 -- IF l_line_rec.schedule_status_code IS NULL THEN
2498 IF l_temp_line_tbl.count > 0 THEN
2499 FOR J in 1..l_temp_line_tbl.count
2500 LOOP
2501 l_temp_line_tbl(J).schedule_action_code :=
2502 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
2503 l_sch_count := l_sch_count + 1;
2504 l_sch_line_tbl(l_sch_count) := l_temp_line_tbl(J);
2505 l_model_exists := false;
2506 IF l_temp_line_tbl(J).item_type_code = 'INCLUDED' OR
2507 l_temp_line_tbl(J).item_type_code = 'OPTION' OR
2508 l_temp_line_tbl(J).item_type_code = 'CLASS' OR
2509 l_temp_line_tbl(J).item_type_code = 'CONFIG' THEN
2510 FOR L in 1..g_auto_set_tbl.count
2511 LOOP
2512 IF l_temp_line_tbl(J).top_model_line_id =
2513 g_auto_set_tbl(L).line_id THEN
2514 l_model_exists := true;
2515 exit;
2516 END IF;
2517 END LOOP;
2518 if not l_model_exists then
2519 oe_line_util.query_row(p_line_id => l_temp_line_tbl(J).top_model_line_id,
2520 x_line_rec => l_model_line_rec);
2521 if l_model_line_rec.ship_set_id is null and
2522 l_model_line_rec.arrival_set_id is null THEN
2523
2524 l_sch_line_tbl.delete(l_sch_count) ;
2525 l_sch_count := l_sch_count - 1;
2526
2527 END IF;
2528 END IF;
2529 END IF;
2530
2531 l_temp_line_tbl(J).schedule_action_code :=
2532 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
2533 END LOOP;
2534
2535 -- Call scheduling
2536 IF l_debug_level > 0 THEN
2537 oe_debug_pub.add( 'BEFORE CALLING SCHEDULING ' , 1 ) ;
2538 END IF;
2539 IF l_debug_level > 0 THEN
2540 oe_debug_pub.add( 'COUNT BEFORE CALLING : '||L_SCH_LINE_TBL.COUNT , 1 ) ;
2541 END IF;
2542
2543 IF l_perform_sch and l_sch_line_tbl.count > 0 THEN
2544
2545 OE_GRP_SCH_UTIL.Schedule_set_of_lines(p_x_line_tbl => l_sch_line_tbl,
2546 p_old_line_tbl => g_old_line_tbl,
2547 x_return_status => l_return_status);
2548 g_old_line_tbl.delete;
2549 END IF;
2550 l_perform_sch := TRUE;
2551
2552 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2553 IF l_debug_level > 0 THEN
2554 oe_debug_pub.add( ' SCHEDULING UNEXPECTED ERROR ' , 1 ) ;
2555 END IF;
2556 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2557 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2558 GOTO END_1;
2559 IF l_debug_level > 0 THEN
2560 oe_debug_pub.add( ' EXPECTED ERROR ' , 1 ) ;
2561 END IF;
2562 --RAISE FND_API.G_EXC_ERROR;
2563 END IF;
2564
2565 -- END IF; -- Schedule Action Code
2566 IF l_debug_level > 0 THEN
2567 oe_debug_pub.add( 'AFTER CALLIN SCHEDULING ' , 1 ) ;
2568 END IF;
2569 l_temp_line_tbl.delete;
2570 l_temp_line_tbl := l_sch_line_tbl;
2571 IF l_temp_line_tbl.count > 0 and l_ship_set_id is null THEN
2572 l_ship_from_org_id := l_temp_line_tbl(1).ship_from_org_id;
2573 l_ship_to_org_id := l_temp_line_tbl(1).ship_to_org_id;
2574 l_schedule_ship_date := l_temp_line_tbl(1).schedule_ship_date;
2575 l_schedule_arrival_date := l_temp_line_tbl(1).schedule_arrival_date;
2576 l_freight_carrier_code := l_temp_line_tbl(1).freight_carrier_code;
2577 l_shipping_method_code := l_temp_line_tbl(1).shipping_method_code;
2578 l_shipment_priority_code := l_temp_line_tbl(1).shipment_priority_code;
2579 l_set_id := null;
2580 IF l_debug_level > 0 THEN
2581 oe_debug_pub.add( 'INTO CREATING SET ' , 1 ) ;
2582 END IF;
2583
2584 IF l_set_type = 'SHIP_SET' THEN
2585 Open shipset;
2586 Fetch shipset into l_set_id;
2587 Close shipset;
2588 ELSIF l_set_type = 'ARRIVAL_SET' THEN
2589 Open arrivalset;
2590 Fetch arrivalset into l_set_id;
2591 Close arrivalset;
2592 END IF;
2593
2594 IF l_set_id IS NULL THEN
2595 OPEN C1;
2596 FETCH C1 INTO lsettempname;
2597 CLOSE C1;
2598 IF lsettempname IS NULL THEN
2599 lsettempname := 1;
2600
2601 LOOP
2602 OPEN C3;
2603 FETCH C3 INTO tempname;
2604 CLOSE C3;
2605 IF tempname is not null then
2606 lsettempname := lsettempname + 1;
2607 ELSE
2608 EXIT;
2609 END IF;
2610 END LOOP ;
2611
2612 ELSE
2613 lsettempname := lsettempname + 1;
2614 END IF;
2615 IF l_debug_level > 0 THEN
2616 oe_debug_pub.add( ' BEFORE CREATING SET ' , 1 ) ;
2617 END IF;
2618 Create_Set
2619 (p_Set_Name => to_char(lsettempname),
2620 p_Set_Type => l_set_type,
2621 p_Header_Id => l_header_id,
2622 p_Ship_From_Org_Id => l_ship_from_org_id,
2623 p_Ship_To_Org_Id => l_Ship_To_Org_Id,
2624 p_Schedule_Ship_Date => l_schedule_ship_Date,
2625 p_Schedule_Arrival_Date => l_Schedule_Arrival_Date,
2626 p_Freight_Carrier_Code => l_Freight_Carrier_Code,
2627 p_Shipping_Method_Code => l_Shipping_Method_Code,
2628 p_Shipment_priority_code => l_Shipment_priority_code,
2629 x_Set_Id => l_set_id,
2630 X_Return_Status => l_return_status,
2631 x_msg_count => x_msg_count,
2632 x_msg_data => x_msg_data);
2633 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2634 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2635 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2636 RAISE FND_API.G_EXC_ERROR;
2637 END IF;
2638
2639 END IF; -- if set id is null
2640 END IF; -- Temp table intenal if condition
2641 END IF ; -- If temp table is greater than zero
2642
2643 IF l_debug_level > 0 THEN
2644 oe_debug_pub.add( ' SET ID IS '|| L_SET_ID , 1 ) ;
2645 END IF;
2646
2647 FOR K in 1..l_temp_line_tbl.count
2648 LOOP
2649 IF l_set_type = 'SHIP_SET' THEN
2650 l_temp_line_tbl(K).ship_Set_id := l_set_id;
2651 ELSIF l_set_type = 'ARRIVAL_SET' THEN
2652 l_temp_line_tbl(K).arrival_Set_id := l_set_id;
2653 END IF;
2654 l_temp_line_tbl(K).operation := oe_globals.g_opr_update;
2655 END LOOP;
2656
2657 FOR L in 1..l_temp_line_tbl.count
2658 LOOP
2659 l_line_tbl(l_line_tbl.count+1) := l_temp_line_tbl(L);
2660 END LOOP;
2661
2662
2663
2664 /* Exception
2665
2666 WHEN NO_DATA_FOUND THEN
2667 NULL;
2668 WHEN OTHERS THEN
2669 NULL;
2670
2671 END ;-- End of get line
2672 END LOOP; */
2673 FOR I in 1..l_line_tbl.count
2674 LOOP
2675 l_model_exists := false;
2676 IF l_line_tbl(I).item_type_code = 'INCLUDED' OR
2677 l_line_tbl(I).item_type_code = 'OPTION' OR
2678 l_line_tbl(I).item_type_code = 'CLASS' THEN
2679 FOR J in 1..l_line_tbl.count
2680 LOOP
2681 IF l_line_tbl(I).top_model_line_id =
2682 l_line_tbl(J).line_id THEN
2683 l_model_exists := true;
2684 exit;
2685 END IF;
2686 END LOOP;
2687 if not l_model_exists then
2688 oe_line_util.query_row(p_line_id => l_line_tbl(I).top_model_line_id,
2689 x_line_rec => l_model_line_rec);
2690 IF l_model_line_rec.ship_set_id is null then
2691 l_line_tbl(I).ship_set_id := NULL;
2692 ELSIF l_model_line_rec.ship_set_id is not null then
2693 l_line_tbl(I).ship_set_id :=
2694 l_model_line_rec.ship_set_id;
2695
2696
2697 END IF;
2698 IF l_model_line_rec.arrival_set_id is null then
2699 l_line_tbl(I).arrival_set_id := NULL;
2700 ELSIF l_model_line_rec.arrival_set_id is not null then
2701 l_line_tbl(I).arrival_set_id :=
2702 l_model_line_rec.arrival_set_id;
2703 END IF;
2704 END IF;
2705 END IF;
2706
2707
2708 IF l_debug_level > 0 THEN
2709 oe_debug_pub.add( 'SHIP SET IS-'||L_LINE_TBL ( I ) .SHIP_SET_ID , 1 ) ;
2710 END IF;
2711 IF l_debug_level > 0 THEN
2712 oe_debug_pub.add( 'LINE -'||L_LINE_TBL ( I ) .LINE_ID , 1 ) ;
2713 END IF;
2714 IF l_debug_level > 0 THEN
2715 oe_debug_pub.add( 'ITEM TYPE -'||L_LINE_TBL ( I ) .ITEM_TYPE_CODE , 1 ) ;
2716 END IF;
2717 END LOOP;
2718
2719 IF l_line_tbl.count > 0 THEN
2720
2721
2722 -- Call Process Order
2723 l_control_rec.controlled_operation := TRUE;
2724 l_control_rec.write_to_db := TRUE;
2725 l_control_rec.PROCESS := FALSE;
2726 l_control_rec.default_attributes := TRUE;
2727 l_control_rec.change_attributes := TRUE;
2728 l_control_rec.validate_entity :=TRUE;
2729
2730
2731 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'N';
2732 g_set_recursive_flag := TRUE;
2733 oe_order_pvt.Lines
2734 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
2735 , p_control_rec => l_control_rec
2736 , p_x_line_tbl => l_line_tbl
2737 , p_x_old_line_tbl => l_old_line_tbl
2738 , x_return_status => l_return_status
2739
2740 );
2741
2742 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2743 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2744 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2745 RAISE FND_API.G_EXC_ERROR;
2746 END IF;
2747
2748 /* jolin start comment out nocopy for notification project
2749
2750 -- Api to call notify OC and ACK and to process delayed requests
2751
2752 OE_Order_PVT.Process_Requests_And_Notify
2753 ( p_process_requests => FALSE
2754 , p_notify => TRUE
2755 , x_return_status => l_return_status
2756 , p_line_tbl => l_line_tbl
2757 , p_old_line_tbl => l_old_line_tbl
2758 );
2759 jolin end */
2760
2761 l_line_tbl.delete;
2762
2763 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'Y';
2764 g_set_recursive_flag := FALSE;
2765 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2767 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
2768 RAISE FND_API.G_EXC_ERROR;
2769 END IF;
2770
2771 END IF; -- IF line table is greate than Zero
2772
2773 g_cust_pref_set := TRUE;
2774
2775 END IF;
2776 g_auto_set_tbl.delete;
2777 IF l_debug_level > 0 THEN
2778 oe_debug_pub.add( ' EXIT INSERT INTO SETS' , 1 ) ;
2779 END IF;
2780
2781 <<END_1>>
2782 NULL;
2783 g_auto_set_tbl.delete;
2784 g_cust_pref_set := TRUE;
2785
2786
2787 EXCEPTION
2788
2789 WHEN FND_API.G_EXC_ERROR THEN
2790
2791 x_return_status := FND_API.G_RET_STS_ERROR;
2792
2793 -- Get message count and data
2794
2795
2796 oe_msg_pub.count_and_get
2797 ( p_count => x_msg_count
2798 , p_data => x_msg_data
2799 );
2800 IF l_debug_level > 0 THEN
2801 oe_debug_pub.add( 'IN INSERINTO EXCEPTION ' , 1 ) ;
2802 END IF;
2803 RAISE FND_API.G_EXC_ERROR;
2804
2805 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2806
2807 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2808 -- Get message count and data
2809
2810 oe_msg_pub.count_and_get
2811 ( p_count => x_msg_count
2812 , p_data => x_msg_data
2813 );
2814 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2815 WHEN OTHERS THEN
2816
2817 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2818
2819 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2820 THEN
2821 oe_msg_pub.Add_Exc_Msg
2822 ( G_PKG_NAME
2823 , 'Insert_Into_Set'
2824 );
2825 END IF;
2826
2827 -- Get message count and data
2828
2829 oe_msg_pub.count_and_get
2830 ( p_count => x_msg_count
2831 , p_data => x_msg_data
2832 );
2833
2834 End Insert_Into_Set;
2835
2836
2837
2838 Procedure Update_Set
2839 (p_Set_Id IN NUMBER,
2840 p_Ship_From_Org_Id IN NUMBER := FND_API.G_MISS_NUM,
2841 p_Ship_To_Org_Id IN NUMBER := FND_API.G_MISS_NUM,
2842 p_Schedule_Ship_Date IN DATE := FND_API.G_MISS_DATE,
2843 p_Schedule_Arrival_Date IN DATE := FND_API.G_MISS_DATE,
2844 p_Freight_Carrier_Code IN VARCHAR2 := FND_API.G_MISS_CHAR,
2845 p_Shipping_Method_Code IN VARCHAR2 := FND_API.G_MISS_CHAR,
2846 p_shipment_priority_code IN VARCHAR2 := FND_API.G_MISS_CHAR,
2847 X_Return_Status OUT NOCOPY VARCHAR2,
2848
2849 x_msg_count OUT NOCOPY NUMBER,
2850
2851 x_msg_data OUT NOCOPY VARCHAR2
2852
2853 )IS
2854 l_set_rec OE_ORDER_CACHE.set_rec_type;
2855 l_init_set_rec OE_ORDER_CACHE.set_rec_type;
2856 l_Ship_From_Org_Id NUMBER ;
2857 l_Ship_To_Org_Id NUMBER ;
2858 l_Schedule_Ship_Date DATE ;
2859 l_Schedule_Arrival_Date DATE ;
2860 l_Freight_Carrier_Code VARCHAR2(30);
2861 l_Shipping_Method_Code VARCHAR2(30) ;
2862 l_shipment_priority_code VARCHAR2(30);
2863 l_Return_Status VARCHAR2(30);
2864
2865 --
2866 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2867 --
2868 Begin
2869 l_set_rec := get_set_rec(p_set_id);
2870 IF (p_ship_from_org_id = fnd_api.g_miss_num or
2871 p_ship_from_org_id IS NULL )THEN
2872 l_Ship_From_Org_Id := l_set_rec.Ship_From_Org_Id ;
2873 ELSE
2874 l_Ship_From_Org_Id := p_Ship_From_Org_Id ;
2875 END IF;
2876
2877 IF (p_ship_to_org_id = fnd_api.g_miss_num or
2878 p_ship_from_org_id IS NULL )THEN
2879 l_Ship_to_Org_Id := l_set_rec.Ship_to_Org_Id ;
2880 ELSE
2881 l_Ship_to_Org_Id := p_Ship_to_Org_Id ;
2882 END IF;
2883
2884 IF (p_Schedule_Arrival_Date = fnd_api.g_miss_date or
2885 p_Schedule_Arrival_Date IS NULL )THEN
2886 l_Schedule_Arrival_Date := l_set_rec.Schedule_Arrival_Date;
2887 ELSE
2888 l_Schedule_Arrival_Date := p_Schedule_Arrival_Date ;
2889 END IF;
2890
2891 IF (p_Schedule_ship_Date = fnd_api.g_miss_date or
2892 p_Schedule_ship_Date IS NULL )THEN
2893 l_Schedule_ship_Date := l_set_rec.Schedule_ship_Date;
2894 ELSE
2895 l_Schedule_ship_Date := p_Schedule_ship_Date ;
2896 END IF;
2897
2898 IF (p_Freight_Carrier_Code = fnd_api.g_miss_char or
2899 p_Freight_Carrier_Code IS NULL )THEN
2900 l_Freight_Carrier_Code := l_set_rec.Freight_Carrier_Code;
2901 ELSE
2902 l_Freight_Carrier_Code := p_Freight_Carrier_Code ;
2903 END IF;
2904
2905 IF p_Shipping_Method_Code = fnd_api.g_miss_char
2906 THEN
2907 l_Shipping_Method_Code := l_set_rec.Shipping_Method_Code;
2908 ELSE
2909 l_Shipping_Method_Code := p_Shipping_Method_Code ;
2910 END IF;
2911
2912 IF (p_shipment_priority_code = fnd_api.g_miss_char or
2913 p_shipment_priority_code IS NULL )THEN
2914 l_shipment_priority_code := l_set_rec.shipment_priority_code;
2915 ELSE
2916 l_shipment_priority_code := p_shipment_priority_code ;
2917 END IF;
2918
2919 UPDATE OE_SETS SET
2920 ship_from_org_id = l_ship_from_org_id,
2921 ship_to_org_id = l_ship_to_org_id,
2922 Schedule_Arrival_Date = l_Schedule_Arrival_Date,
2923 Schedule_Ship_Date = l_Schedule_Ship_Date,
2924 Freight_Carrier_Code = l_Freight_Carrier_Code ,
2925 Shipping_Method_Code = l_Shipping_Method_Code,
2926 shipment_priority_code = l_shipment_priority_code
2927 WHERE SET_ID = P_SET_ID;
2928
2929
2930 Null;
2931 g_set_rec := l_init_set_rec;
2932 --FP bug 3891395: setting the return status
2933 x_return_status := FND_API.G_RET_STS_SUCCESS;
2934 EXCEPTION
2935
2936 WHEN FND_API.G_EXC_ERROR THEN
2937
2938 x_return_status := FND_API.G_RET_STS_ERROR;
2939
2940 -- Get message count and data
2941
2942
2943 oe_msg_pub.count_and_get
2944 ( p_count => x_msg_count
2945 , p_data => x_msg_data
2946 );
2947
2948 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2949
2950 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2951 -- Get message count and data
2952
2953 oe_msg_pub.count_and_get
2954 ( p_count => x_msg_count
2955 , p_data => x_msg_data
2956 );
2957 WHEN OTHERS THEN
2958
2959 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2960
2961 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
2962 THEN
2963 oe_msg_pub.Add_Exc_Msg
2964 ( G_PKG_NAME
2965 , 'Update_set'
2966 );
2967 END IF;
2968
2969 -- Get message count and data
2970
2971 oe_msg_pub.count_and_get
2972 ( p_count => x_msg_count
2973 , p_data => x_msg_data
2974 );
2975 End Update_Set;
2976
2977 FUNCTION get_set_rec(p_set_id IN NUMBER)
2978 RETURN OE_ORDER_CACHE.set_rec_type IS
2979 --
2980 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
2981 --
2982 begin
2983 --Performance regression. Reverted the changes made earlier for Bug4080531
2984 IF g_set_rec.set_id IS NULL OR
2985 g_set_rec.set_id <> p_set_id THEN
2986
2987 g_set_rec := OE_ORDER_CACHE.Load_Set(p_set_id);
2988 RETURN g_set_rec;
2989
2990 ELSE
2991 RETURN g_set_rec;
2992 END IF;
2993
2994 END get_set_rec;
2995
2996 PROCEDURE Validate_set_attributes(p_set_id IN NUMBER ,
2997 p_Ship_From_Org_Id IN NUMBER := FND_API.G_MISS_NUM,
2998 p_Ship_To_Org_Id IN NUMBER := FND_API.G_MISS_NUM,
2999 p_Schedule_Ship_Date IN DATE := FND_API.G_MISS_DATE,
3000 p_Schedule_Arrival_Date IN DATE := FND_API.G_MISS_DATE,
3001 p_Freight_Carrier_Code IN VARCHAR2 := FND_API.G_MISS_CHAR,
3002 p_Shipping_Method_Code IN VARCHAR2 := FND_API.G_MISS_CHAR,
3003 p_shipment_priority_code IN VARCHAR2 := FND_API.G_MISS_CHAR,
3004 X_Return_Status OUT NOCOPY VARCHAR2) IS
3005
3006 l_set_rec OE_ORDER_CACHE.set_rec_type;
3007 x_msg_count NUMBER;
3008 x_msg_data VARCHAR2(254);
3009 --
3010 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3011 --
3012 BEGIN
3013
3014 l_set_rec := get_set_rec(p_set_id);
3015 IF (l_set_rec.set_type = 'SHIP_SET') THEN
3016 IF (p_Ship_From_Org_Id <> l_set_rec.ship_from_org_id) OR
3017 (p_Ship_To_Org_Id <> l_Set_rec.Ship_To_Org_Id) OR
3018 (p_Schedule_Ship_Date <> l_set_rec.Schedule_ship_Date) OR
3019 (p_Freight_Carrier_Code <> l_set_rec.Freight_Carrier_Code) OR
3020 (p_Shipping_Method_Code <> l_set_rec.Shipping_Method_Code) OR
3021 (p_shipment_priority_code <> l_set_rec.shipment_priority_code) THEN
3022 --RAISE FND_API.G_EXC_ERROR;
3023 fnd_message.set_name('ONT', 'OE_INVALID_SET_ATTR');
3024 FND_MESSAGE.SET_TOKEN('SET','SHIP');
3025 oe_msg_pub.add;
3026 -- RAISE FND_API.G_EXC_ERROR ;
3027
3028 NULL;
3029 END IF;
3030 ELSIF (l_set_rec.set_type = 'ARRIVAL_SET') THEN
3031 IF (p_Schedule_Arrival_Date <> l_set_rec.Schedule_Arrival_Date) OR
3032 (p_Ship_To_Org_Id <> l_Set_rec.Ship_To_Org_Id) THEN
3033 fnd_message.set_name('ONT', 'OE_INVALID_SET_ATTR');
3034 FND_MESSAGE.SET_TOKEN('SET','ARRIVAL');
3035 oe_msg_pub.add;
3036 --RAISE FND_API.G_EXC_ERROR ;
3037 NULL;
3038 END IF;
3039 END IF;
3040 EXCEPTION
3041
3042 WHEN FND_API.G_EXC_ERROR THEN
3043
3044 x_return_status := FND_API.G_RET_STS_ERROR;
3045
3046 -- Get message count and data
3047
3048
3049 oe_msg_pub.count_and_get
3050 ( p_count => x_msg_count
3051 , p_data => x_msg_data
3052 );
3053
3054 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3055
3056 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3057 -- Get message count and data
3058
3059 oe_msg_pub.count_and_get
3060 ( p_count => x_msg_count
3061 , p_data => x_msg_data
3062 );
3063 WHEN OTHERS THEN
3064
3065 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3066
3067 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
3068 THEN
3069 oe_msg_pub.Add_Exc_Msg
3070 ( G_PKG_NAME
3071 , 'Validate_Set_Attributes'
3072 );
3073 END IF;
3074
3075 -- Get message count and data
3076
3077 oe_msg_pub.count_and_get
3078 ( p_count => x_msg_count
3079 , p_data => x_msg_data
3080 );
3081 NULL;
3082 END Validate_set_attributes;
3083
3084
3085
3086 Procedure Process_Sets
3087 ( p_selected_line_tbl IN OE_GLOBALS.Selected_Record_Tbl, -- R12.MOAC
3088 p_record_count IN NUMBER,
3089 p_set_name IN VARCHAR2,
3090 p_set_type IN VARCHAR2 := FND_API.G_MISS_CHAR,
3091 p_operation IN VARCHAR2,
3092 p_header_id IN VARCHAR2 := FND_API.G_MISS_CHAR,
3093 x_Set_Id OUT NOCOPY NUMBER,
3094
3095 x_return_status OUT NOCOPY VARCHAR2,
3096
3097 x_msg_count OUT NOCOPY NUMBER,
3098
3099 x_msg_data OUT NOCOPY VARCHAR2
3100
3101 ) IS
3102 l_num_of_records NUMBER := p_record_count;
3103 l_line_rec OE_ORDER_PUB.line_rec_type;
3104 l_in_line_rec OE_ORDER_PUB.line_rec_type;
3105 l_control_rec OE_GLOBALS.Control_Rec_Type;
3106 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
3107 l_line_opt_tbl OE_ORDER_PUB.Line_Tbl_Type;
3108 l_line_opt_temp_tbl OE_ORDER_PUB.Line_Tbl_Type;
3109 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
3110 l_api_name CONSTANT VARCHAR2(30) := 'Process_sets';
3111 l_line_id NUMBER;
3112 l_return_status VARCHAR2(30);
3113 l_header_id NUMBER := to_number(p_header_id);
3114 I NUMBER := 0;
3115 j INTEGER;
3116 initial INTEGER;
3117 nextpos INTEGER;
3118 --l_record_ids varchar2(32000) := p_record_ids || ','; --R12.MOAC
3119 l_set_id NUMBER;
3120 l_set_type VARCHAR2(80);
3121 l_exists BOOLEAN := FALSE ;
3122 l_Ship_from_org_id NUMBER ;
3123 l_Ship_to_org_id NUMBER ;
3124 l_Schedule_Ship_Date DATE ;
3125 l_Schedule_Arrival_Date DATE ;
3126 l_Freight_Carrier_Code VARCHAR2(30) ;
3127 l_Shipping_Method_Code VARCHAR2(30) ;
3128 l_Shipment_priority_code VARCHAR2(30);
3129 l_set_rec OE_ORDER_CACHE.set_rec_type;
3130 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
3131 -- 4925992
3132 l_top_model_line_id NUMBER;
3133 BEGIN
3134
3135 SAVEPOINT Process_sets;
3136 x_return_status := FND_API.G_RET_STS_SUCCESS;
3137
3138 /* If the profile to process new set schduling functioanlity after
3139 performance changes is set to Yest then branch the code to new
3140 procedure or continue */
3141
3142 --Bug4504362
3143 IF p_set_type <> 'FULFILLMENT' THEN
3144
3145 --R12.MOAC
3146 New_Process_Sets
3147 (p_selected_line_tbl => p_selected_line_tbl,
3148 p_record_count => p_record_count,
3149 p_set_name => p_set_name,
3150 p_set_type => p_set_type,
3151 p_operation => p_operation,
3152 p_header_id => p_header_id ,
3153 x_Set_Id => x_set_id ,
3154 x_return_status => x_return_status,
3155 x_msg_count => x_msg_count,
3156 x_msg_data => x_msg_data );
3157
3158 IF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3159 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3160 ELSIF x_return_status = FND_API.G_RET_STS_ERROR THEN
3161 RAISE FND_API.G_EXC_ERROR;
3162 END IF;
3163
3164 GOTO END_NEW_PROCESS_SETS;
3165
3166 END IF;
3167
3168
3169 IF l_debug_level > 0 THEN
3170 oe_debug_pub.add( 'PROCEDURE PROCESS SETS' , 1 ) ;
3171 END IF;
3172
3173 j := 1;
3174 initial := 1;
3175 --nextpos := INSTR(l_record_ids,',',1,j) ; --R12.MOAC
3176
3177 IF l_debug_level > 0 THEN
3178 oe_debug_pub.add( 'SET NAME IS-' || P_SET_NAME , 1 ) ;
3179 END IF;
3180 IF l_debug_level > 0 THEN
3181 oe_debug_pub.add( 'SET TYPE IS-' || P_OPERATION , 1 ) ;
3182 END IF;
3183
3184 IF p_set_name is not null THEN
3185
3186 IF l_debug_level > 0 THEN
3187 oe_debug_pub.add( 'SET TYPE IS-' || P_SET_TYPE , 1 ) ;
3188 END IF;
3189 IF l_debug_level > 0 THEN
3190 oe_debug_pub.add( 'SET TYPE IS-' || P_OPERATION , 1 ) ;
3191 END IF;
3192
3193 IF p_set_type = 'ARRIVAL' THEN
3194 l_set_type := 'ARRIVAL_SET';
3195 ELSIF p_set_type = 'SHIP' THEN
3196 l_set_type := 'SHIP_SET';
3197 ELSIF p_set_type = 'FULFILLMENT' THEN
3198 IF l_debug_level > 0 THEN
3199 oe_debug_pub.add( 'INTO FULFILLMENT SETS' , 1 ) ;
3200 END IF;
3201 l_set_type := 'FULFILLMENT_SET';
3202 END IF;
3203
3204 l_exists := Set_Exist(p_set_name => p_set_name,
3205 p_set_type => l_set_type,
3206 p_header_id => l_header_id,
3207 x_set_id => l_set_id);
3208
3209 IF l_set_id IS NOT NULL THEN
3210
3211 -- bug8420761
3212 g_set_rec := OE_ORDER_CACHE.Load_Set(l_set_id); -- refresh the cache record
3213 ---end bug8420761
3214
3215 IF is_set_closed(l_set_id) THEN
3216
3217 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
3218 FND_MESSAGE.SET_TOKEN('SET', p_set_name);
3219 oe_msg_pub.add;
3220 RAISE FND_API.G_EXC_ERROR;
3221 END IF;
3222 END IF;
3223
3224 IF (p_operation = 'REMOVE' AND
3225 l_set_type <> 'FULFILLMENT_SET') THEN
3226
3227 IF l_debug_level > 0 THEN
3228 oe_debug_pub.add( 'INTO REMOVE' , 1 ) ;
3229 END IF;
3230 l_exists := TRUE;
3231 l_set_id := NULL;
3232 END IF;
3233
3234 END IF; -- Set name.
3235
3236
3237 IF (p_operation = 'REMOVE' AND
3238 p_set_type <> 'FULFILLMENT_SET') THEN
3239
3240 IF l_debug_level > 0 THEN
3241 oe_debug_pub.add( 'INTO REMOVE' , 1 ) ;
3242 END IF;
3243 l_exists := TRUE;
3244
3245 END IF;
3246
3247
3248 IF l_exists and p_operation <> 'REMOVE' THEN
3249 l_set_rec := get_set_rec(l_set_id);
3250 END IF;
3251
3252
3253 --R12.MOAC Start
3254 FOR K IN 1..p_selected_line_tbl.count LOOP
3255
3256 l_line_id := p_selected_line_tbl(K).id1;
3257 /*
3258 FOR K IN 1..l_num_of_records LOOP
3259
3260 l_line_id := to_number(substr(l_record_ids,initial, nextpos-initial));
3261 initial := nextpos + 1.0;
3262 j := j + 1.0;
3263 nextpos := INSTR(l_record_ids,',',1,j) ;
3264 */
3265 --R12.MOAC End
3266 OE_LINE_UTIL.lock_row
3267 (p_line_id => l_line_id
3268 ,p_x_line_rec => l_line_rec
3269 ,x_return_status => l_return_status);
3270
3271 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3273 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3274 RAISE FND_API.G_EXC_ERROR;
3275 END IF;
3276
3277 OE_MSG_PUB.set_msg_context
3278 ( p_entity_code => 'LINE'
3279 ,p_entity_id => l_line_rec.line_id
3280 ,p_header_id => l_line_rec.header_id
3281 ,p_line_id => l_line_rec.line_id
3282 ,p_order_source_id => l_line_rec.order_source_id
3283 ,p_orig_sys_document_ref => l_line_rec.orig_sys_document_ref
3284 ,p_orig_sys_document_line_ref => l_line_rec.orig_sys_line_ref
3285 ,p_orig_sys_shipment_ref => l_line_rec.orig_sys_shipment_ref
3286 ,p_change_sequence => l_line_rec.change_sequence
3287 ,p_source_document_type_id => l_line_rec.source_document_type_id
3288 ,p_source_document_id => l_line_rec.source_document_id
3289 ,p_source_document_line_id => l_line_rec.source_document_line_id);
3290
3291
3292 -- Bug 2427798/2446437
3293 IF ((nvl(l_line_rec.source_type_code,'X') = 'EXTERNAL')
3294 AND (p_set_type <> 'FULFILLMENT'))
3295 OR (nvl(l_line_rec.shipped_quantity,0) > 0 AND p_set_type <> 'FULFILLMENT') -- 2525203
3296 OR (nvl(l_line_rec.fulfilled_flag,'N') = 'Y' AND
3297 (p_set_type <> 'FULFILLMENT' OR Fulfill_Sts(l_line_id)<>'NOTIFIED')) -- 2525203
3298 OR nvl(l_line_rec.open_flag,'N') = 'N'
3299 OR (l_line_rec.line_category_code = 'RETURN' AND
3300 p_set_type <> 'FULFILLMENT') THEN
3301
3302 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
3303 OE_MSG_PUB.ADD;
3304 IF l_debug_level > 0 THEN
3305 oe_debug_pub.add( 'LINE IS NOT VALID TO ADD: ' || L_LINE_REC.LINE_ID , 1 ) ;
3306 END IF;
3307 GOTO do_not_process;
3308
3309 END IF;
3310
3311 I := I +1;
3312 l_line_tbl(I) := l_line_rec;
3313
3314 g_old_line_tbl(I) := l_line_tbl(I);
3315
3316 /* IF (nvl(l_line_tbl(I).source_type_code,'X') = 'EXTERNAL' OR
3317 nvl(l_line_tbl(I).shipped_quantity,0) > 0 OR
3318 nvl(l_line_tbl(I).fulfilled_flag,'N') = 'Y' OR
3319 nvl(l_line_tbl(I).open_flag,'N') = 'N' OR
3320 l_line_tbl(I).line_category_code = 'RETURN' ) THEN
3321 GOTO do_not_process;
3322 END IF;
3323 */
3324
3325
3326 IF (l_line_tbl(I).item_type_code <> 'MODEL' AND
3327 l_line_tbl(I).item_type_code <> 'STANDARD' AND
3328 l_line_tbl(I).item_type_code <> 'KIT' AND
3329 l_line_tbl(I).item_type_code <> 'SERVICE' AND
3330 nvl(l_line_tbl(I).model_remnant_flag,'N') <> 'Y')
3331 OR (l_line_tbl(I).item_type_code = 'SERVICE'
3332 AND p_set_type = 'FULFILLMENT'
3333 AND NOT Is_Service_Eligible(l_line_tbl(I)))
3334 OR (l_line_tbl(I).item_type_code = 'SERVICE'
3335 AND (p_set_type = 'ARRIVAL'
3336 OR p_set_type = 'SHIP')) THEN
3337
3338
3339 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
3340 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE',
3341 -- l_line_tbl(I).item_type_code);
3342 OE_MSG_PUB.ADD;
3343 IF l_debug_level > 0 THEN
3344 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' ) ;
3345 END IF;
3346 RAISE FND_API.G_EXC_ERROR;
3347 END IF;
3348
3349 IF p_set_type = 'ARRIVAL' THEN
3350
3351 IF (p_operation = 'ADD' ) THEN
3352
3353 /* Added the following if condition to fix the bug 2802249 */
3354
3355 IF l_line_tbl(I).ship_set_id is not null or
3356 l_line_tbl(I).ship_set is not null THEN
3357 /* Changed the message to fix the bug 2862565 */
3358 -- FND_MESSAGE.Set_Name('ONT', 'OE_INVALID_SET_COMB');
3359 FND_MESSAGE.Set_Name('ONT','OE_SCH_NOT_IN_SHIP_ARR');
3360 /* Changed the message to fix the bug 2862565 */
3361 oe_msg_pub.add;
3362 RAISE FND_API.G_EXC_ERROR;
3363 END IF;
3364
3365 IF (l_set_id IS NULL) THEN
3366 l_line_tbl(I).arrival_set := p_set_name ;
3367 ELSE
3368 l_line_tbl(I).arrival_set_id := l_set_id ;
3369 END IF;
3370
3371 ELSIF (p_operation = 'MOVE') THEN
3372
3373 IF l_debug_level > 0 THEN
3374 oe_debug_pub.add( 'PROCEDURE PROCESS SETS'||TO_CHAR ( L_SET_ID ) , 1 ) ;
3375 END IF;
3376 IF l_set_id IS NOT NULL THEN
3377 l_line_tbl(I).arrival_set_id := l_set_id ;
3378 l_line_tbl(I).arrival_set := p_set_name ;
3379 ELSE
3380 l_line_tbl(I).arrival_set_id := NULL ;
3381 l_line_tbl(I).arrival_set := p_set_name ;
3382 END IF;
3383
3384 ELSIF (p_operation = 'REMOVE') THEN
3385
3386 l_line_tbl(I).arrival_set_id := NULL ;
3387 END IF;
3388
3389 ELSIF p_set_type = 'SHIP' THEN
3390
3391 IF (p_operation = 'ADD' ) THEN
3392
3393 IF (l_set_id IS NULL) THEN
3394 l_line_tbl(I).ship_set := p_set_name ;
3395 ELSE
3396 l_line_tbl(I).ship_set_id := l_set_id ;
3397 END IF;
3398
3399 ELSIF (p_operation = 'MOVE') THEN
3400
3401 IF l_debug_level > 0 THEN
3402 oe_debug_pub.add( 'PROCEDURE PROCESS SETS'||TO_CHAR ( L_SET_ID ) , 1 ) ;
3403 END IF;
3404 IF l_set_id IS NOT NULL THEN
3405 l_line_tbl(I).ship_set_id := l_set_id ;
3406 l_line_tbl(I).ship_set := p_set_name ;
3407 ELSE
3408 l_line_tbl(I).ship_set_id := NULL ;
3409 l_line_tbl(I).ship_set := p_set_name ;
3410 END IF;
3411
3412 ELSIF (p_operation = 'REMOVE') THEN
3413
3414 l_line_tbl(I).ship_set_id := NULL ;
3415 END IF;
3416
3417 ELSIF p_set_type = 'FULFILLMENT' THEN
3418
3419 IF l_debug_level > 0 THEN
3420 oe_debug_pub.add( 'INTO FULFILLMENT SETS-2' , 1 ) ;
3421 END IF;
3422 IF (p_operation = 'ADD' ) THEN
3423
3424 IF l_debug_level > 0 THEN
3425 oe_debug_pub.add( 'INTO FULFILLMENT SETS-3' , 1 ) ;
3426 END IF;
3427 IF (l_set_id IS NULL) THEN
3428 l_line_tbl(I).fulfillment_set := p_set_name ;
3429 ELSE
3430 l_line_tbl(I).fulfillment_set_id := l_set_id ;
3431 IF l_line_tbl(I).item_type_code = 'MODEL' OR
3432 l_line_tbl(I).item_type_code = 'KIT' THEN
3433
3434 l_line_opt_tbl(1) := l_line_tbl(I);
3435 Get_Options(p_x_line_tbl => l_line_opt_tbl,
3436 p_set_type => l_set_type,
3437 p_index => 1);
3438
3439 FOR Optrec in 1..l_line_opt_tbl.count
3440 LOOP
3441 -- 4925992
3442 IF l_line_opt_tbl(optrec).line_id = l_line_opt_tbl(optrec).top_model_line_id
3443 AND l_line_opt_tbl(optrec).operation <> 'CREATE'
3444 THEN
3445 l_top_model_line_id := l_line_opt_tbl(optrec).line_id;
3446 ELSE
3447 l_top_model_line_id := NULL;
3448 END IF;
3449 Create_Fulfillment_Set(p_line_id => l_line_opt_tbl(optrec).line_id,
3450 -- 4925992
3451 p_top_model_line_id => l_top_model_line_id,
3452 p_set_id => l_set_id);
3453 END LOOP;
3454 l_line_opt_tbl.delete;
3455
3456 END IF;
3457 IF l_line_tbl(I).item_type_code <> 'MODEL' THEN
3458
3459 Create_Fulfillment_Set
3460 (p_line_id => l_line_id,
3461 p_set_id => l_set_id);
3462 END IF;
3463 END IF;
3464 ELSIF (p_operation = 'MOVE') THEN
3465
3466 IF l_debug_level > 0 THEN
3467 oe_debug_pub.add( 'PROCEDURE PROCESS SETS'||TO_CHAR ( L_SET_ID ) , 1 ) ;
3468 END IF;
3469 IF l_set_id IS NOT NULL THEN
3470 l_line_tbl(I).fulfillment_set_id := l_set_id ;
3471 l_line_tbl(I).fulfillment_set := p_set_name ;
3472
3473 IF l_line_tbl(I).item_type_code = 'MODEL' OR
3474 l_line_tbl(I).item_type_code = 'KIT' THEN
3475
3476 l_line_opt_tbl(1) := l_line_tbl(I);
3477 Get_Options(p_x_line_tbl => l_line_opt_tbl,
3478 p_set_type => l_set_type,
3479 p_index => 1);
3480
3481 FOR Optrec in 1..l_line_opt_tbl.count
3482 LOOP
3483 -- 4925992
3484 IF l_line_opt_tbl(optrec).line_id = l_line_opt_tbl(optrec).top_model_line_id
3485 AND l_line_opt_tbl(optrec).operation <> 'CREATE'
3486 THEN
3487 l_top_model_line_id := l_line_opt_tbl(optrec).line_id;
3488 ELSE
3489 l_top_model_line_id := NULL;
3490 END IF;
3491 Create_Fulfillment_Set(p_line_id => l_line_opt_tbl(optrec).line_id,
3492 -- 4925992
3493 p_top_model_line_id => l_top_model_line_id,
3494 p_set_id => l_set_id);
3495 END LOOP;
3496
3497 l_line_opt_tbl.delete;
3498
3499 END IF;
3500
3501 IF l_line_tbl(I).item_type_code <> 'MODEL' THEN
3502 Create_Fulfillment_Set
3503 (p_line_id => l_line_id,
3504 p_set_id => l_set_id);
3505 END IF;
3506 ELSE
3507
3508 l_line_tbl(I).fulfillment_set_id := NULL ;
3509 l_line_tbl(I).fulfillment_set := p_set_name ;
3510 END IF;
3511 ELSIF (p_operation = 'REMOVE') THEN
3512
3513 l_line_tbl(I).fulfillment_set_id := l_set_id ;
3514 IF l_line_tbl(I).item_type_code = 'MODEL' OR
3515 l_line_tbl(I).item_type_code = 'KIT' THEN
3516
3517 l_line_opt_tbl(1) := l_line_tbl(I);
3518 Get_Options(p_x_line_tbl => l_line_opt_tbl,
3519 p_set_type => l_set_type,
3520 p_index => 1);
3521
3522 FOR Optrec in 1..l_line_opt_tbl.count
3523 LOOP
3524
3525 Delete_Fulfillment_Set
3526 (p_line_id => l_line_opt_tbl(optrec).line_id,
3527 p_set_id => l_Set_id);
3528 END LOOP;
3529
3530 l_line_opt_tbl.delete;
3531
3532 END IF;
3533
3534 IF l_line_tbl(I).item_type_code <> 'MODEL' THEN
3535
3536 Delete_Fulfillment_Set
3537 (p_line_id => l_line_id,
3538 p_set_id => l_Set_id);
3539 END IF;
3540
3541 END IF; -- Action
3542
3543 END IF; -- type of set
3544
3545 IF p_set_type <> 'FULFILLMENT' THEN
3546
3547 -- Get Options
3548 l_line_tbl(I).schedule_action_code :=
3549 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
3550
3551 IF l_line_tbl(I).item_type_code = OE_GLOBALS.G_ITEM_MODEL
3552 OR l_line_tbl(I).item_type_code = OE_GLOBALS.G_ITEM_KIT THEN
3553 l_in_line_rec := l_line_tbl(I);
3554 Get_Options(p_x_line_tbl => l_line_opt_temp_tbl,
3555 p_set_type => l_set_type,
3556 p_index => I,
3557 p_line_id => l_line_tbl(I).line_id,
3558 p_line_rec => l_in_line_rec);
3559 END IF;
3560
3561 END IF;
3562
3563 l_line_tbl(I).operation := OE_GLOBALS.G_OPR_UPDATE;
3564 FOR t in 1..l_line_tbl.count
3565 LOOP
3566 IF l_debug_level > 0 THEN
3567 oe_debug_pub.add( 'IN LOOP' ) ;
3568 END IF;
3569 IF l_debug_level > 0 THEN
3570 oe_debug_pub.add( 'SHIP SET' || L_LINE_TBL ( T ) .SHIP_SET_ID ) ;
3571 END IF;
3572 IF l_debug_level > 0 THEN
3573 oe_debug_pub.add( 'SHIP TO' || L_LINE_TBL ( T ) .SHIP_TO_ORG_ID ) ;
3574 END IF;
3575 IF l_debug_level > 0 THEN
3576 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .SHIP_FROM_ORG_ID ) ;
3577 END IF;
3578 IF l_debug_level > 0 THEN
3579 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .ITEM_TYPE_CODE ) ;
3580 END IF;
3581 IF l_debug_level > 0 THEN
3582 oe_debug_pub.add( 'SCH DATE' || TO_CHAR ( L_LINE_TBL ( T ) .SCHEDULE_SHIP_DATE , 'DD-MON-YY' ) ) ;
3583 END IF;
3584 END LOOP;
3585
3586 FOR t in 1..l_line_opt_temp_tbl.count
3587 LOOP
3588 IF l_debug_level > 0 THEN
3589 oe_debug_pub.add( 'OPTION TABLE' ) ;
3590 END IF;
3591 IF l_debug_level > 0 THEN
3592 oe_debug_pub.add( 'ITEM TYPE' || L_LINE_OPT_TEMP_TBL ( T ) .ITEM_TYPE_CODE ) ;
3593 END IF;
3594 l_line_opt_tbl(l_line_opt_tbl.count +1 ) := l_line_opt_temp_tbl(t);
3595 END LOOP;
3596
3597 l_line_opt_temp_tbl.delete;
3598
3599 << do_not_process >>
3600 NULL;
3601
3602 END LOOP;
3603
3604 I := Null;
3605 For t in 1..l_line_opt_tbl.count
3606 loop
3607 l_line_tbl(l_line_tbl.count +1 ) := l_line_opt_tbl(t);
3608 IF l_debug_level > 0 THEN
3609 oe_debug_pub.add( 'OPTION TABLE' ) ;
3610 END IF;
3611 IF l_debug_level > 0 THEN
3612 oe_debug_pub.add( 'ITEM TYPE' || L_LINE_OPT_TBL ( T ) .ITEM_TYPE_CODE ) ;
3613 END IF;
3614 end loop;
3615
3616 g_old_line_tbl.delete;
3617 For t in 1..l_line_tbl.count
3618 loop
3619 oe_line_util.query_row(p_line_id => l_line_tbl(t).line_id,
3620 x_line_rec => l_line_rec);
3621 g_old_line_tbl(t) := l_line_rec;
3622
3623 IF l_debug_level > 0 THEN
3624 oe_debug_pub.add( 'OUT LOOP' ) ;
3625 END IF;
3626 IF l_debug_level > 0 THEN
3627 oe_debug_pub.add( 'SHIP SET' || L_LINE_TBL ( T ) .SHIP_SET_ID ) ;
3628 END IF;
3629 IF l_debug_level > 0 THEN
3630 oe_debug_pub.add( 'SHIP TO' || L_LINE_TBL ( T ) .SHIP_TO_ORG_ID ) ;
3631 END IF;
3632 IF l_debug_level > 0 THEN
3633 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .SHIP_FROM_ORG_ID ) ;
3634 END IF;
3635 IF l_debug_level > 0 THEN
3636 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .ITEM_TYPE_CODE ) ;
3637 END IF;
3638 IF l_debug_level > 0 THEN
3639 oe_debug_pub.add( 'SCH DATE' || TO_CHAR ( L_LINE_TBL ( T ) .SCHEDULE_SHIP_DATE , 'DD-MON-YY' ) ) ;
3640 END IF;
3641 end loop;
3642
3643 IF p_set_type <> 'FULFILLMENT' THEN
3644
3645 FOR Setrec in 1..l_line_tbl.count
3646 LOOP
3647 l_line_tbl(setrec).schedule_action_code :=
3648 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
3649 IF p_set_type = 'SHIP' THEN
3650 IF p_operation = 'REMOVE' THEN
3651 l_line_tbl(setrec).ship_set_id := NULL;
3652 ELSE
3653 l_line_tbl(setrec).ship_set_id := l_set_id;
3654 END IF;
3655 ELSIF p_set_type = 'ARRIVAL' THEN
3656 IF p_operation = 'REMOVE' THEN
3657 l_line_tbl(setrec).arrival_set_id := NULL;
3658 ELSE
3659 l_line_tbl(setrec).arrival_set_id := l_set_id;
3660 END IF;
3661 END IF;
3662 END LOOP;
3663
3664 END IF;
3665
3666
3667 IF l_exists AND p_operation <> 'REMOVE' THEN
3668
3669 IF p_set_type <> 'FULFILLMENT' THEN
3670 FOR I IN 1 .. l_line_tbl.COUNT
3671 LOOP
3672 IF l_set_type = 'SHIP_SET' THEN
3673 IF l_debug_level > 0 THEN
3674 oe_debug_pub.add( 'SHIP_TO_ORG_ID'||L_LINE_TBL ( I ) .SHIP_TO_ORG_ID ) ;
3675 END IF;
3676 IF l_debug_level > 0 THEN
3677 oe_debug_pub.add( 'SHIP_FROM_ORG_ID'||L_LINE_TBL ( I ) .SHIP_FROM_ORG_ID ) ;
3678 END IF;
3679 IF l_debug_level > 0 THEN
3680 oe_debug_pub.add( 'SHIP_RG_ID'||L_SET_REC.SHIP_FROM_ORG_ID ) ;
3681 END IF;
3682 l_line_tbl(I).schedule_ship_date := l_set_rec.schedule_ship_date;
3683 l_line_tbl(I).ship_to_org_id := l_set_rec.ship_to_org_id;
3684 l_line_tbl(I).ship_from_org_id := l_set_rec.ship_from_org_id;
3685 ELSIF l_set_type = 'ARRIVAL_SET' THEN
3686 l_line_tbl(I).schedule_arrival_date := l_set_rec.schedule_arrival_date;
3687 l_line_tbl(I).ship_to_org_id := l_set_rec.ship_to_org_id;
3688 END IF;
3689 END LOOP;
3690 END IF;
3691 ELSIF NOT l_exists AND p_operation <> 'REMOVE' THEN
3692
3693 IF p_set_type <> 'FULFILLMENT' THEN
3694 FOR I IN 2 .. l_line_tbl.COUNT
3695 LOOP
3696 IF l_set_type = 'SHIP_SET' THEN
3697 l_line_tbl(I).schedule_ship_date := l_line_tbl(1).schedule_ship_date;
3698 l_line_tbl(I).ship_to_org_id := l_line_tbl(1).ship_to_org_id;
3699 l_line_tbl(I).ship_from_org_id := l_line_tbl(1).ship_from_org_id;
3700 l_line_tbl(I).ship_set := l_line_tbl(1).ship_set;
3701 ELSIF l_set_type = 'ARRIVAL_SET' THEN
3702 l_line_tbl(I).schedule_arrival_date := l_line_tbl(1).schedule_arrival_date;
3703 l_line_tbl(I).ship_to_org_id := l_line_tbl(1).ship_to_org_id;
3704 l_line_tbl(I).arrival_set := l_line_tbl(1).arrival_set;
3705 END IF;
3706 END LOOP;
3707 END IF;
3708
3709
3710 END IF; -- lexists
3711
3712 IF NOT l_exists and p_set_name IS NULL THEN
3713 IF l_debug_level > 0 THEN
3714 oe_debug_pub.add( 'BEFORE FAILING AT SET NAME' , 1 ) ;
3715 END IF;
3716 fnd_message.set_name('ONT', 'OE_SET_NAME_REQ');
3717 oe_msg_pub.add;
3718 RAISE FND_API.G_EXC_ERROR ;
3719 END IF;
3720 IF p_operation <> 'REMOVE' THEN
3721 IF p_set_type <> 'FULFILLMENT'
3722 AND l_line_tbl.count > 0 THEN
3723 IF l_debug_level > 0 THEN
3724 oe_debug_pub.add( 'BEFORE CALLING SCHEDULET'|| L_LINE_TBL.COUNT ) ;
3725 END IF;
3726 IF l_debug_level > 0 THEN
3727 oe_debug_pub.add( 'BEFORE CALLING SCHEDULET'|| G_OLD_LINE_TBL.COUNT ) ;
3728 END IF;
3729 For t in 1..l_line_tbl.count
3730 loop
3731 IF l_debug_level > 0 THEN
3732 oe_debug_pub.add( 'BEFORE CALLING SCHEDULET' ) ;
3733 END IF;
3734 IF l_debug_level > 0 THEN
3735 oe_debug_pub.add( 'SHIP SET' || L_LINE_TBL ( T ) .SHIP_SET_ID ) ;
3736 END IF;
3737 IF l_debug_level > 0 THEN
3738 oe_debug_pub.add( 'SHIP TO' || L_LINE_TBL ( T ) .SHIP_TO_ORG_ID ) ;
3739 END IF;
3740 IF l_debug_level > 0 THEN
3741 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .SHIP_FROM_ORG_ID ) ;
3742 END IF;
3743 end loop;
3744
3745 OE_GRP_SCH_UTIL.Schedule_set_of_lines(p_x_line_tbl => l_line_tbl,
3746 p_old_line_tbl => g_old_line_tbl,
3747 x_return_status => l_return_status);
3748 g_old_line_tbl.delete;
3749
3750 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3751 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3752 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3753 RAISE FND_API.G_EXC_ERROR;
3754 END IF;
3755 END IF;
3756 END IF;
3757
3758
3759 IF l_line_tbl.count > 0 THEN
3760 IF NOT l_exists THEN
3761 IF p_set_type <> 'FULFILLMENT' THEN
3762
3763 IF p_set_type = 'SHIP' THEN
3764 l_ship_from_org_id := l_line_tbl(1).ship_from_org_id;
3765 l_ship_to_org_id := l_line_tbl(1).ship_to_org_id;
3766 l_schedule_ship_date := l_line_tbl(1).schedule_ship_date;
3767 ELSIF p_set_type = 'ARRIVAL' THEN
3768 l_schedule_arrival_date := l_line_tbl(1).schedule_arrival_date;
3769 l_ship_to_org_id := l_line_tbl(1).ship_to_org_id;
3770 END IF;
3771 --l_freight_carrier_code := l_line_tbl(1).freight_carrier_code;
3772 --l_shipping_method_code := l_line_tbl(1).shipping_method_code;
3773 --l_shipment_priority_code := l_line_tbl(1).shipment_priority_code;
3774 END IF;
3775 IF l_debug_level > 0 THEN
3776 oe_debug_pub.add( 'SET6' , 1 ) ;
3777 END IF;
3778
3779 IF l_debug_level > 0 THEN
3780 oe_debug_pub.add( 'BEFORE CALLING CREATE SET-4'||P_SET_NAME , 1 ) ;
3781 END IF;
3782 IF l_debug_level > 0 THEN
3783 oe_debug_pub.add( 'BEFORE CALLING SET TYPE -5'||L_SET_TYPE , 1 ) ;
3784 END IF;
3785
3786 Create_Set
3787 (p_Set_Name => p_set_name,
3788 p_Set_Type => l_set_type,
3789 p_Header_Id => l_header_id,
3790 p_Ship_From_Org_Id => l_ship_from_org_id,
3791 p_Ship_To_Org_Id => l_Ship_To_Org_Id,
3792 p_Schedule_Ship_Date => l_schedule_ship_Date,
3793 p_Schedule_Arrival_Date => l_Schedule_Arrival_Date,
3794 p_Freight_Carrier_Code => l_Freight_Carrier_Code,
3795 p_Shipping_Method_Code => l_Shipping_Method_Code,
3796 p_Shipment_priority_code => l_Shipment_priority_code,
3797 x_Set_Id => l_set_id,
3798 X_Return_Status => l_return_status,
3799 x_msg_count => x_msg_count,
3800 x_msg_data => x_msg_data);
3801
3802 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3803 IF l_debug_level > 0 THEN
3804 oe_debug_pub.add( 'INTO UNEXPECTED ERROR' , 1 ) ;
3805 END IF;
3806 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3807 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3808 IF l_debug_level > 0 THEN
3809 oe_debug_pub.add( 'INTO EXPECTED ERROR' , 1 ) ;
3810 END IF;
3811 RAISE FND_API.G_EXC_ERROR;
3812 END IF;
3813
3814 /* FOR I IN 1 .. L_line_Tbl.Count
3815 LOOP
3816 IF l_line_tbl(I).item_type_code = OE_GLOBALS.G_ITEM_MODEL THEN
3817 Get_Options(p_x_line_tbl => l_line_tbl,
3818 p_set_type => l_set_type,
3819 p_index => I);
3820 END IF;
3821 END LOOP;
3822 */
3823
3824
3825 FOR I IN 1 .. L_line_Tbl.Count
3826 LOOP
3827 l_line_tbl(I).change_reason := 'SYSTEM';
3828 IF p_set_type = 'ARRIVAL' THEN
3829 l_line_tbl(I).arrival_set_id := l_set_id ;
3830 ELSIF p_set_type = 'SHIP' THEN
3831 l_line_tbl(I).ship_set_id := l_set_id ;
3832 ELSIF p_set_type = 'FULFILLMENT' THEN
3833 l_line_tbl(I).Fulfillment_set_id := l_set_id ;
3834 IF l_debug_level > 0 THEN
3835 oe_debug_pub.add( 'INTO LOOP - CREATING FULLFILLMENT SET' ) ;
3836 END IF;
3837 -- 4925992
3838 IF l_line_tbl(I).line_id = l_line_tbl(I).top_model_line_id
3839 AND l_line_tbl(I).operation <> 'CREATE'
3840 THEN
3841 l_top_model_line_id := l_line_tbl(I).line_id;
3842 ELSE
3843 l_top_model_line_id := NULL;
3844 END IF;
3845 Create_Fulfillment_Set(p_line_id => l_line_tbl(I).line_id,
3846 -- 4925992
3847 p_top_model_line_id => l_top_model_line_id,
3848 p_set_id => l_set_id);
3849 IF l_line_tbl(I).item_type_code = 'MODEL' OR
3850 l_line_tbl(I).item_type_code = 'KIT' THEN
3851 l_line_opt_tbl(1) := l_line_tbl(I);
3852 Get_Options(p_x_line_tbl => l_line_opt_tbl,
3853 p_set_type => l_set_type,
3854 p_index => 1);
3855 FOR Optrec in 1..l_line_opt_tbl.count
3856 Loop
3857 -- 4925992
3858 IF l_line_opt_tbl(optrec).line_id = l_line_opt_tbl(optrec).top_model_line_id
3859 AND l_line_opt_tbl(optrec).operation <> 'CREATE'
3860 THEN
3861 l_top_model_line_id := l_line_opt_tbl(optrec).line_id;
3862 ELSE
3863 l_top_model_line_id := NULL;
3864 END IF;
3865 Create_Fulfillment_Set(p_line_id => l_line_opt_tbl(optrec).line_id,
3866 -- 4925992
3867 p_top_model_line_id => l_top_model_line_id,
3868 p_set_id => l_set_id);
3869 END LOOP;
3870 l_line_opt_tbl.delete;
3871 END IF;
3872
3873 END IF;
3874 END LOOP;
3875
3876
3877 END IF; -- Lexists
3878
3879 l_control_rec.controlled_operation := TRUE;
3880 l_control_rec.write_to_db := TRUE;
3881 l_control_rec.PROCESS := TRUE;
3882 l_control_rec.default_attributes := TRUE;
3883 l_control_rec.change_attributes := TRUE;
3884 l_control_rec.validate_entity := TRUE;
3885
3886 IF p_set_type <> 'FULFILLMENT' THEN
3887 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'N';
3888 g_set_recursive_flag := TRUE;
3889
3890 -- Call OE_Order_PVT.Process_order
3891 IF l_debug_level > 0 THEN
3892 oe_debug_pub.add( 'CALLING PROCESS ORDER' ) ;
3893 END IF;
3894 For t in 1..l_line_tbl.count
3895 loop
3896 IF l_debug_level > 0 THEN
3897 oe_debug_pub.add( 'SHIP SET' || L_LINE_TBL ( T ) .SHIP_SET_ID ) ;
3898 END IF;
3899 IF l_debug_level > 0 THEN
3900 oe_debug_pub.add( 'SHIP TO' || L_LINE_TBL ( T ) .SHIP_TO_ORG_ID ) ;
3901 END IF;
3902 IF l_debug_level > 0 THEN
3903 oe_debug_pub.add( 'SHIP FROM' || L_LINE_TBL ( T ) .SHIP_FROM_ORG_ID ) ;
3904 END IF;
3905 end loop;
3906 oe_order_pvt.Lines
3907 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
3908 , p_control_rec => l_control_rec
3909 , p_x_line_tbl => l_line_tbl
3910 , p_x_old_line_tbl => l_old_line_tbl
3911 , x_return_status => l_return_status
3912
3913 );
3914 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3915 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3916 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3917 RAISE FND_API.G_EXC_ERROR;
3918 END IF;
3919
3920 /* jolin start comment out nocopy for notification project
3921
3922 -- Api to call notify OC and ACK and to process delayed requests
3923
3924 OE_Order_PVT.Process_Requests_And_Notify
3925 ( p_process_requests => FALSE
3926 , p_notify => TRUE
3927 , x_return_status => l_return_status
3928 , p_line_tbl => l_line_tbl
3929 , p_old_line_tbl => l_old_line_tbl
3930 );
3931 jolin end */
3932
3933 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'Y';
3934 g_set_recursive_flag := FALSE;
3935
3936 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3937 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3938 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
3939 RAISE FND_API.G_EXC_ERROR;
3940 END IF;
3941 END IF; -- FUlfillment set
3942
3943 END IF; -- Line count
3944 << END_NEW_PROCESS_SETS >>
3945 NULL;
3946
3947 --x_return_status := l_return_status;
3948
3949 oe_msg_pub.count_and_get
3950 ( p_count => x_msg_count
3951 , p_data => x_msg_data
3952 );
3953
3954 EXCEPTION
3955
3956 WHEN FND_API.G_EXC_ERROR THEN
3957
3958 x_return_status := FND_API.G_RET_STS_ERROR;
3959
3960 -- Get message count and data
3961
3962
3963 oe_msg_pub.count_and_get
3964 ( p_count => x_msg_count
3965 , p_data => x_msg_data
3966 );
3967 IF l_debug_level > 0 THEN
3968 oe_debug_pub.add( 'BEFORE ROLLING BACK' , 1 ) ;
3969 END IF;
3970 ROLLBACK TO SAVEPOINT Process_sets;
3971 IF l_debug_level > 0 THEN
3972 oe_debug_pub.add( 'AFTER ROLLING BACK' , 1 ) ;
3973 END IF;
3974
3975 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3976
3977 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3978 -- Get message count and data
3979
3980 oe_msg_pub.count_and_get
3981 ( p_count => x_msg_count
3982 , p_data => x_msg_data
3983 );
3984 IF l_debug_level > 0 THEN
3985 oe_debug_pub.add( 'BEFORE ROLLING BACK' , 1 ) ;
3986 END IF;
3987
3988 ROLLBACK TO SAVEPOINT Process_sets;
3989 IF l_debug_level > 0 THEN
3990 oe_debug_pub.add( 'AFTER ROLLING BACK' , 1 ) ;
3991 END IF;
3992 WHEN OTHERS THEN
3993
3994 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3995
3996 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
3997 THEN
3998 oe_msg_pub.Add_Exc_Msg
3999 ( G_PKG_NAME
4000 , 'Process_Sets'
4001 );
4002 END IF;
4003
4004 -- Get message count and data
4005
4006 oe_msg_pub.count_and_get
4007 ( p_count => x_msg_count
4008 , p_data => x_msg_data
4009 );
4010 ROLLBACK TO SAVEPOINT Process_sets;
4011
4012 END Process_Sets;
4013
4014 Procedure Split_Set
4015 ( p_set_Id IN NUMBER,
4016 p_set_name VARCHAR2,
4017 X_Return_Status OUT NOCOPY VARCHAR2,
4018
4019 x_msg_count OUT NOCOPY NUMBER,
4020
4021 x_msg_data OUT NOCOPY VARCHAR2) IS
4022
4023 l_line_rec OE_ORDER_PUB.line_rec_type;
4024 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
4025 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
4026 l_control_rec OE_GLOBALS.control_rec_type;
4027 l_api_name CONSTANT VARCHAR2(30) := 'Split_set';
4028 l_Line_Adj_Assoc_tbl OE_Order_PUB.Line_Adj_Assoc_Tbl_Type;
4029
4030 l_return_status VARCHAR2(30);
4031 l_set_rec OE_ORDER_CACHE.set_rec_type;
4032 J number;
4033 l_set_tbl OE_ORDER_PUB.Line_Tbl_Type;
4034 l_set_name varchar2(240);
4035 l_set_id NUMBER;
4036 l_seq_id NUMBER;
4037 l_position NUMBER;
4038 --
4039 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4040 --
4041 BEGIN
4042 NULL;
4043 EXCEPTION
4044
4045 WHEN FND_API.G_EXC_ERROR THEN
4046
4047 x_return_status := FND_API.G_RET_STS_ERROR;
4048
4049 -- Get message count and data
4050
4051
4052 oe_msg_pub.count_and_get
4053 ( p_count => x_msg_count
4054 , p_data => x_msg_data
4055 );
4056
4057 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4058
4059 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4060 -- Get message count and data
4061
4062 oe_msg_pub.count_and_get
4063 ( p_count => x_msg_count
4064 , p_data => x_msg_data
4065 );
4066 WHEN OTHERS THEN
4067
4068 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4069
4070 IF oe_msg_pub.Check_Msg_Level(oe_msg_pub.G_MSG_LVL_UNEXP_ERROR)
4071 THEN
4072 oe_msg_pub.Add_Exc_Msg
4073 ( G_PKG_NAME
4074 , 'Split Sets'
4075 );
4076 END IF;
4077
4078 -- Get message count and data
4079
4080 oe_msg_pub.count_and_get
4081 ( p_count => x_msg_count
4082 , p_data => x_msg_data
4083 );
4084 End Split_Set;
4085
4086 Procedure Validate_multi_arr_set(p_header_id IN NUMBER,
4087 p_ship_set_id IN NUMBER,
4088 x_arrival_set_id OUT NOCOPY NUMBER) IS
4089
4090 --
4091 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4092 --
4093 BEGIN
4094
4095 SELECT arrival_set_id INTO
4096 x_arrival_set_id
4097 FROM OE_ORDER_LINES_ALL WHERE
4098 header_id = p_header_id AND
4099 ship_set_id = p_ship_set_id AND
4100 arrival_set_id IS NOT NULL AND
4101 rownum = 1;
4102 NULL;
4103 EXCEPTION
4104 WHEN FND_API.G_EXC_ERROR THEN
4105
4106 RAISE FND_API.G_EXC_ERROR;
4107 WHEN NO_DATA_FOUND THEN
4108
4109 x_arrival_set_id := NULL;
4110
4111
4112 END Validate_multi_arr_set;
4113
4114
4115 Procedure Update_Options(p_ato_line_id IN NUMBER := FND_API.G_MISS_NUM,
4116 p_config_line_id IN NUMBER := FND_API.G_MISS_NUM,
4117 p_set_id IN NUMBER,
4118 p_set_type IN VARCHAR2 )IS
4119 stmt_str varchar2(2000);
4120 Parent_line_id Number ;
4121 column1 varchar2(240);
4122 column2 varchar2(240);
4123 TYPE test1 IS TABLE OF OE_ORDER_PUB.HEADER_REC_TYPE;
4124 --
4125 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4126 --
4127 BEGIN
4128 /**********************
4129 IF p_set_type = 'SHIP_SET' THEN
4130 column1 := 'SHIP_SET_ID';
4131 ELSE
4132 column1 := 'ARRIVAL_SET_ID';
4133 END IF;
4134
4135 IF (p_ato_line_id = FND_API.G_MISS_NUM OR
4136 p_ato_line_id IS NULL ) THEN
4137 column2 := 'CONFIG_LINE_ID';
4138 parent_line_id := p_config_line_id;
4139 ELSE
4140 column2 := 'ATO_LINE_ID';
4141 parent_line_id := p_ato_line_id;
4142 END IF;
4143
4144 stmt_str := 'UPDATE OE_ORDER_LINES_ALL ' ||
4145 'SET ' || column1 || ' = ' || to_char(p_set_id) ||
4146 'WHERE ' || column2 || ' = ' ||to_char(parent_line_id);
4147
4148
4149 EXECUTE IMMEDIATE stmt_Str;
4150 ********************/
4151
4152 Null;
4153
4154 -- This procedure is not being used. Commenting the same to fix bug
4155 -- 2935346
4156 END Update_Options;
4157
4158 Procedure Get_Set_Id( p_x_line_rec IN OUT NOCOPY OE_ORDER_PUB.LINE_REC_TYPE,
4159 p_old_line_rec IN OE_ORDER_PUB.LINE_REC_TYPE,
4160 p_index IN number) IS
4161
4162 l_set_id NUMBER;
4163 l_set_rec OE_ORDER_CACHE.set_rec_type;
4164 I number := 0;
4165 J number := 0;
4166 x_arrival_set_id Number;
4167 l_exist boolean := FALSE;
4168 litemtypecode number := 0;
4169 lshpqty number := 0;
4170 --
4171 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
4172 --
4173 BEGIN
4174
4175 IF NOT (g_set_recursive_flag) THEN
4176 -- This is to supress the recursive call made from sets login itself and
4177 -- is coded before the g recursion flag is desingned
4178
4179 IF l_debug_level > 0 THEN
4180 oe_debug_pub.add( 'ENTER GET SET ID' ) ;
4181 END IF;
4182 IF (p_x_line_rec.item_type_code IS NULL OR
4183 p_x_line_rec.item_type_code = FND_API.G_MISS_CHAR) AND
4184 p_x_line_rec.operation = oe_globals.g_opr_create THEN
4185 IF l_debug_level > 0 THEN
4186 oe_debug_pub.add( 'ENTER ITEM TYPE CODE NULL' ) ;
4187 END IF;
4188
4189 IF ( NVL(p_x_line_rec.top_model_line_id,FND_API.G_MISS_NUM)
4190 <> FND_API.G_MISS_NUM
4191 OR NVL(p_x_line_rec.top_model_line_index,FND_API.G_MISS_NUM)
4192 <> FND_API.G_MISS_NUM ) THEN
4193 IF ( p_x_line_rec.top_model_line_id <> FND_API.G_MISS_NUM
4194 AND p_x_line_rec.top_model_line_id = p_x_line_rec.line_id )
4195 OR ( p_x_line_rec.top_model_line_index <> FND_API.G_MISS_NUM
4196 AND p_x_line_rec.top_model_line_index = p_index )
4197 THEN
4198 IF l_debug_level > 0 THEN
4199 oe_debug_pub.add( 'TOP MODEL LINE' , 1 ) ;
4200 END IF;
4201 litemtypecode := 1;
4202 -- OPTION/CLASS line if line is NOT the model line
4203 ELSE
4204 IF l_debug_level > 0 THEN
4205 oe_debug_pub.add( 'OPTION/CLASS LINE' , 1 ) ;
4206 END IF;
4207 litemtypecode := 0;
4208 END IF;
4209
4210 ELSE
4211 litemtypecode := 1;
4212 END IF;
4213 END IF ;
4214
4215
4216
4217 IF l_debug_level > 0 THEN
4218 oe_debug_pub.add( 'ITEM TYPE CODE' || P_X_LINE_REC.ITEM_TYPE_CODE ) ;
4219 END IF;
4220 IF l_debug_level > 0 THEN
4221 oe_debug_pub.add( 'SHIP SET' || P_X_LINE_REC.SHIP_SET_ID ) ;
4222 END IF;
4223 IF l_debug_level > 0 THEN
4224 oe_debug_pub.add( 'OLD SHIP SET' || P_OLD_LINE_REC.SHIP_SET_ID ) ;
4225 END IF;
4226 IF l_debug_level > 0 THEN
4227 oe_debug_pub.add( 'SHIP SET' || P_X_LINE_REC.SHIP_SET ) ;
4228 END IF;
4229 IF l_debug_level > 0 THEN
4230 oe_debug_pub.add( 'ARRIVAL SET' || P_X_LINE_REC.ARRIVAL_SET ) ;
4231 END IF;
4232 IF l_debug_level > 0 THEN
4233 oe_debug_pub.add( 'FULFILLMENT SET' || P_X_LINE_REC.FULFILLMENT_SET ) ;
4234 END IF;
4235 IF l_debug_level > 0 THEN
4236 oe_debug_pub.add( 'OLD SHIP SET' || P_OLD_LINE_REC.SHIP_SET ) ;
4237 END IF;
4238 IF l_debug_level > 0 THEN
4239 oe_debug_pub.add( 'ITEM TYPE CODE' || LITEMTYPECODE ) ;
4240 END IF;
4241 IF l_debug_level > 0 THEN
4242 oe_debug_pub.add( 'SOURCE TYPE' || P_X_LINE_REC.SOURCE_TYPE_CODE , 1 ) ;
4243 END IF;
4244
4245 -- Lines that are of type external(drop ships) or shipped or any line that
4246 -- is not model standard and kit are not allowed to have set operations.
4247 IF p_x_line_rec.shipped_quantity IS NULL OR
4248 p_x_line_rec.shipped_quantity = FND_API.G_MISS_NUM THEN
4249 lshpqty := 0;
4250 ELSIF p_x_line_rec.shipped_quantity > 0 THEN
4251 lshpqty := 1;
4252 END IF;
4253
4254 IF nvl(p_x_line_rec.source_type_code,'X') <> 'EXTERNAL' AND
4255 lshpqty = 0 THEN
4256 IF l_debug_level > 0 THEN
4257 oe_debug_pub.add( 'INTO THE SOURCE TYPE' , 1 ) ;
4258 END IF;
4259
4260 IF (p_x_line_rec.item_type_code = 'MODEL' AND
4261 p_x_line_rec.top_model_line_id =
4262 p_x_line_rec.line_id) OR
4263 (p_x_line_rec.item_type_code = 'STANDARD') OR
4264 (p_x_line_rec.item_type_code = 'SERVICE' AND
4265 p_x_line_rec.fulfillment_set IS NOT NULL AND
4266 p_x_line_rec.fulfillment_set <> FND_API.G_MISS_CHAR )
4267 OR
4268 (p_x_line_rec.item_type_code = 'KIT') OR
4269 (litemtypecode = 1) THEN
4270
4271 -- The g_set_tbl is used to gather the line ids that are requested for set
4272 -- operations and they are processed in the post line process when user tries
4273 -- to commit. This logic is similar to have a delayed request that gathers all
4274 -- the lines to process sets. Instead of looping through the table of dealyed
4275 -- request to identify set requests and put them together in a table
4276 --and process them by set
4277 -- together for group scheduling reasons, we decided for performance reasons
4278 -- to gather informations as and when requested and process the global table.
4279 IF l_debug_level > 0 THEN
4280 oe_debug_pub.add( 'BEFORE SETTING THE LINE '||P_X_LINE_REC.LINE_ID , 1 ) ;
4281 END IF;
4282 IF (p_x_line_rec.operation = oe_globals.g_opr_create AND
4283 (p_x_line_rec.line_id = FND_API.G_MISS_NUM OR
4284 p_x_line_rec.line_id IS NULL)) THEN
4285 IF l_debug_level > 0 THEN
4286 oe_debug_pub.add( 'BEFORE SETTING THE LINE -1' , 1 ) ;
4287 END IF;
4288 p_x_line_rec.line_id := OE_Default_Line.get_Line;
4289 IF l_debug_level > 0 THEN
4290 oe_debug_pub.add( 'AFTER SETTING THE LINE -1' , 1 ) ;
4291 END IF;
4292 END IF;
4293
4294 IF g_set_tbl.count = 0 THEN
4295 I := 1;
4296 ELSE
4297 I := g_set_tbl.count + 1;
4298 END IF;
4299
4300 IF g_set_opt_tbl.count = 0 THEN
4301 J := 1;
4302 ELSE
4303 J := g_set_opt_tbl.count + 1;
4304 END IF;
4305
4306 -- Populate the arrival_set_id and ship_set_id when names are populated.
4307 -- Bug fix 2527647
4308 IF p_x_line_rec.arrival_set IS NOT NULL
4309 AND p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR THEN
4310
4311 IF Set_Exist(p_set_name => p_x_line_rec.arrival_set,
4312 p_set_type => 'ARRIVAL_SET',
4313 p_header_id => p_x_line_rec.header_id,
4314 x_set_id => l_set_id) THEN
4315 -- p_x_line_rec.arrival_set := Null;
4316 p_x_line_rec.arrival_set_id := l_set_id;
4317
4318
4319 END IF;
4320
4321 ELSIF p_x_line_rec.ship_set IS NOT NULL
4322 AND p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR THEN
4323
4324 IF Set_Exist(p_set_name => p_x_line_rec.ship_set,
4325 p_set_type => 'SHIP_SET',
4326 p_header_id => p_x_line_rec.header_id,
4327 x_set_id => l_set_id) THEN
4328
4329 -- p_x_line_rec.ship_set := Null;
4330 p_x_line_rec.ship_set_id := l_set_id;
4331
4332
4333 END IF;
4334
4335
4336 END IF; -- name not null.
4337
4338 IF l_debug_level > 0 THEN
4339 oe_debug_pub.add( 'BEFORE CALLING ARRIVAL SET' , 1 ) ;
4340 END IF;
4341 -- The arrrival sets are processed first. User can either pass a set name or
4342 -- set id to request a set operation.
4343 -- set id will be derived from set name if passed and if set already exists
4344
4345 IF (p_x_line_rec.arrival_set IS NOT NULL AND
4346 p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR AND
4347 (p_x_line_rec.arrival_set_id IS NULL OR
4348 p_x_line_rec.arrival_set_id = FND_API.G_MISS_NUM)) OR
4349 (p_old_line_rec.arrival_set is not null AND
4350 p_old_line_rec.arrival_set <> FND_API.G_MISS_CHAR ) then
4351 IF l_debug_level > 0 THEN
4352 oe_debug_pub.add( 'ARRIVAL SET CREATION' , 1 ) ;
4353 END IF;
4354
4355 -- Validate if arrival set already exists
4356
4357 -- This logic will make sure that if line is part of a ship set and any line
4358 -- that belongs to this ship set is part of another arrival set then this
4359 -- will not allow user to create other arrival set. Concept is system cannot
4360 -- have multiple arrival sets in a ship set since a dead lock situation might
4361 -- arise while cascading scheduling attributes since there are ovelapping
4362 -- set attributes in arrival and ship sets.
4363
4364 IF (p_x_line_rec.ship_set_id IS NOT NULL AND
4365 p_x_line_rec.ship_set_id <> FND_API.G_MISS_NUM ) OR
4366 (p_x_line_rec.ship_set IS NOT NULL AND
4367 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR) THEN
4368
4369
4370 /* Changed the message to fix the bug 2862565 */
4371 -- FND_MESSAGE.Set_Name('ONT', 'OE_INVALID_SET_COMB');
4372 FND_MESSAGE.Set_Name('ONT','OE_SCH_NOT_IN_SHIP_ARR');
4373 /* Changed the message to fix the bug 2862565 */
4374 oe_msg_pub.add;
4375 RAISE FND_API.G_EXC_ERROR;
4376
4377 /*IF Set_Exist(p_set_name => p_x_line_rec.arrival_set,
4378 p_set_type => 'ARRIVAL_SET',
4379 p_header_id =>p_x_line_rec.header_id,
4380 x_set_id => l_set_id) THEN
4381 l_set_id := l_set_id;
4382 ELSE
4383 l_set_id := NULL;
4384 END IF;
4385
4386 Validate_Multi_Arr_Set(p_header_id => p_x_line_rec.header_id,
4387 p_ship_set_id => p_x_line_rec.ship_set_id,
4388 x_arrival_set_id => x_arrival_set_id);
4389
4390 IF x_arrival_set_id IS NOT NULL AND
4391 nvl(l_set_id,-99) <> x_arrival_set_id THEN
4392 FND_MESSAGE.Set_Name('ONT', 'OE_INVALID_SET_COMB');
4393 oe_msg_pub.add;
4394 RAISE FND_API.G_EXC_ERROR;
4395 END IF; */
4396
4397 END IF; -- If ship set id
4398
4399 -- If set exists and is closed you cannot insert into set
4400
4401 IF Set_Exist(p_set_name => p_x_line_rec.arrival_set,
4402 p_set_type => 'ARRIVAL_SET',
4403 p_header_id =>p_x_line_rec.header_id,
4404 x_set_id => l_set_id) THEN
4405
4406 l_set_rec := get_set_rec(l_set_id);
4407
4408 IF l_set_rec.set_status = 'C' THEN
4409 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
4410 FND_MESSAGE.SET_TOKEN('SET',
4411 l_set_rec.set_name);
4412 oe_msg_pub.add;
4413 RAISE FND_API.G_EXC_ERROR;
4414 END IF;
4415
4416 -- If set exists and line is getting inserted into an existing set then
4417 -- default set attributes.
4418
4419 p_x_line_rec.ship_to_org_id := l_set_rec.ship_to_org_id;
4420 p_x_line_rec.schedule_arrival_date := l_set_rec.schedule_arrival_date;
4421 p_x_line_rec.arrival_set_id := l_set_id;
4422
4423 -- This logic will go and check if the request for this line already exists
4424 -- in the gloabl table described above and if not exists then will insert an
4425 -- entry into the gloabal table
4426
4427 IF g_set_tbl.count > 0 THEN
4428
4429 l_exist := FALSE;
4430
4431 for Cnt In 1..g_set_tbl.count
4432 Loop
4433 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4434 p_old_line_rec.arrival_set = g_set_tbl(cnt).set_name AND
4435 g_set_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4436
4437 -- Setting the set type in global table to invalid set will ensure this
4438 -- record will not processed in post line process in creating new sets.
4439 -- This scenario will only
4440 -- happen when user puts the line into a new set first and then decides to
4441 -- move into a different existing set.
4442
4443 g_set_tbl(cnt).set_type := 'INVALID_SET';
4444 l_exist := TRUE;
4445 exit;
4446 END IF;
4447 end loop;
4448 END IF; -- Set table > 0
4449
4450 ELSE -- Set does not exists
4451 IF l_debug_level > 0 THEN
4452 oe_debug_pub.add( 'ARRIVAL SET CREATION- ' , 1 ) ;
4453 END IF;
4454
4455 IF g_set_tbl.count > 0 THEN
4456 l_exist := FALSE;
4457 for Cnt In 1..g_set_tbl.count
4458 Loop
4459 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4460 p_x_line_rec.arrival_set IS NULL AND
4461 g_set_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4462
4463 -- This if ensure if user trying to enter set name and remove it then the
4464 -- line will not be processed in the post line process
4465
4466 g_set_tbl(cnt).set_type := 'INVALID_SET';
4467 l_exist := TRUE;
4468 END IF;
4469
4470 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4471 p_old_line_rec.arrival_set = g_set_tbl(cnt).set_name AND
4472 g_set_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4473 g_set_tbl(cnt).set_name := p_x_line_rec.arrival_set;
4474 l_exist := TRUE;
4475 exit;
4476 END IF;
4477
4478 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4479 g_set_tbl(cnt).set_name = p_x_line_rec.arrival_set AND
4480 g_set_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4481 l_exist := TRUE;
4482 exit;
4483 END IF;
4484 End Loop;
4485 End IF; -- gtbl > 0
4486
4487 IF NOT l_exist THEN
4488
4489 -- This logic will add an entry into global table if already not exists one
4490
4491 IF p_x_line_rec.operation = oe_globals.g_opr_create THEN
4492 IF (p_x_line_rec.line_id IS NOT NULL AND
4493 p_x_line_rec.line_id <> FND_API.G_MISS_NUM ) THEN
4494 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4495 ELSE
4496 g_set_tbl(I).line_id := p_index;
4497 g_set_tbl(I).operation := 'C';
4498 END IF;
4499 ELSIF p_x_line_rec.operation = oe_globals.g_opr_update THEN
4500 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4501 END IF;
4502
4503 g_set_tbl(I).set_name := p_x_line_rec.arrival_set;
4504 g_set_tbl(I).set_type := 'ARRIVAL_SET';
4505 IF l_debug_level > 0 THEN
4506 oe_debug_pub.add( 'ADDING INTO GLOBAL TABLE - ARRIVAL' , 1 ) ;
4507 END IF;
4508
4509 I := I + 1;
4510
4511 END IF; -- If not lexists
4512
4513 p_x_line_rec.arrival_set_id := NULL;
4514
4515 END IF; -- set does not exists
4516
4517 -- This login will work off the set id if user chooses to pass setid
4518
4519 ELSIF (p_x_line_rec.arrival_set_id IS NOT NULL AND
4520 p_x_line_rec.arrival_set_id <> FND_API.G_MISS_NUM) then
4521 IF l_debug_level > 0 THEN
4522 oe_debug_pub.add( 'IN ARRIVAL SET ID' , 1 ) ;
4523 END IF;
4524
4525 IF NOT OE_GLOBALS.Equal
4526 (p_x_line_rec.arrival_set_id,p_old_line_rec.arrival_set_id)
4527 THEN
4528
4529 -- Check if set exists and if not set it null
4530
4531 IF NOT Set_Exist(p_set_id => p_x_line_rec.arrival_set_id) THEN
4532 p_x_line_rec.arrival_set_id := NULL;
4533 ELSE
4534 -- Assign the default set attributes from the set
4535 l_set_rec := get_set_rec(p_x_line_rec.arrival_set_id);
4536 p_x_line_rec.ship_to_org_id := l_set_rec.ship_to_org_id;
4537 p_x_line_rec.schedule_arrival_date := l_set_rec.schedule_arrival_date;
4538 -- If this is model than add an entry to process options for this model in
4539 -- the options table
4540
4541 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4542
4543 IF g_set_opt_tbl.count > 0 THEN
4544 l_exist := FALSE;
4545 for Cnt In 1..g_set_opt_tbl.count
4546 Loop
4547 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4548 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.arrival_set_id,-99)
4549 AND
4550 g_set_opt_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4551 l_exist := TRUE;
4552 exit;
4553 END IF;
4554 End Loop;
4555 End IF;
4556 IF NOT L_exist THEN
4557 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
4558 g_set_opt_tbl(J).set_id := p_x_line_rec.arrival_set_id;
4559 g_set_opt_tbl(J).set_type := 'ARRIVAL_SET';
4560 J := J + 1;
4561 END IF;
4562 END IF;
4563 END IF;
4564 END IF;
4565
4566 -- If user is trying to remove the line from the set and if its a model then
4567 -- all the options need be removed
4568
4569 ELSIF (p_old_line_rec.arrival_set_id IS NOT NULL AND
4570 p_old_line_rec.arrival_set_id <> FND_API.G_MISS_NUM) AND
4571 (p_x_line_rec.arrival_set_id IS NULL)then
4572 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4573 IF l_debug_level > 0 THEN
4574 oe_debug_pub.add( 'IN REMOVE OF ARRIVAL SET' , 1 ) ;
4575 END IF;
4576
4577 IF g_set_opt_tbl.count > 0 THEN
4578 l_exist := FALSE;
4579 for Cnt In 1..g_set_opt_tbl.count
4580 Loop
4581 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4582 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.arrival_set_id,-99)
4583 AND
4584 g_set_opt_tbl(cnt).set_type = 'ARRIVAL_SET') THEN
4585 l_exist := TRUE;
4586 exit;
4587 END IF;
4588 End Loop;
4589 End IF;
4590
4591 IF NOT L_exist THEN
4592 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
4593 g_set_opt_tbl(J).set_id := NULL;
4594 g_set_opt_tbl(J).set_type := 'ARRIVAL_SET';
4595 J := J + 1;
4596 END IF;
4597 END IF;
4598 END IF; -- END ARRIVAL SETS
4599 IF l_debug_level > 0 THEN
4600 oe_debug_pub.add( 'OUT OF ARRIVAL SET' , 1 ) ;
4601 END IF;
4602 for Cnt In 1..g_set_tbl.count
4603 Loop
4604 IF l_debug_level > 0 THEN
4605 oe_debug_pub.add( ' END OF ARRIVAL SET NAME' || G_SET_TBL ( CNT ) .SET_NAME , 1 ) ;
4606 END IF;
4607 IF l_debug_level > 0 THEN
4608 oe_debug_pub.add( 'SET TYPE' || G_SET_TBL ( CNT ) .SET_TYPE , 1 ) ;
4609 END IF;
4610 end loop;
4611
4612 -- Start Ship Sets and ship sets follow the similar logic as arrival sets
4613 -- above
4614 IF l_debug_level > 0 THEN
4615 oe_debug_pub.add( 'WHAT THE HEC ' , 1 ) ;
4616 END IF;
4617
4618 IF (p_x_line_rec.ship_set IS NOT NULL AND
4619 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR)OR
4620 ( p_old_line_rec.ship_set is not null AND
4621 p_old_line_rec.ship_set <> FND_API.G_MISS_CHAR) then
4622 IF l_debug_level > 0 THEN
4623 oe_debug_pub.add( 'BEFORE SHIP SET NAME' ) ;
4624 END IF;
4625 IF Set_Exist(p_set_name =>p_x_line_rec.ship_set,
4626 p_set_type => 'SHIP_SET',
4627 p_header_id =>p_x_line_rec.header_id,
4628 x_set_id => l_set_id) THEN
4629 IF l_debug_level > 0 THEN
4630 oe_debug_pub.add( 'SHIP SET EXISTS' ) ;
4631 END IF;
4632 l_set_rec := get_set_rec(l_set_id);
4633 IF l_set_rec.set_status = 'C' THEN
4634 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
4635 FND_MESSAGE.SET_TOKEN('SET',
4636 l_set_rec.set_name);
4637 oe_msg_pub.add;
4638 RAISE FND_API.G_EXC_ERROR;
4639 END IF;
4640 p_x_line_rec.ship_to_org_id := l_set_rec.ship_to_org_id;
4641 p_x_line_rec.ship_from_org_id := l_set_rec.ship_from_org_id;
4642 p_x_line_rec.schedule_ship_date := l_set_rec.schedule_ship_date;
4643 p_x_line_rec.freight_carrier_code := l_set_rec.freight_carrier_code;
4644 p_x_line_rec.ship_set_id := l_set_id;
4645 IF g_set_tbl.count > 0 THEN
4646
4647 l_exist := FALSE;
4648
4649 for Cnt In 1..g_set_tbl.count
4650 Loop
4651 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4652 p_old_line_rec.ship_set = g_set_tbl(cnt).set_name AND
4653 g_set_tbl(cnt).set_type = 'SHIP_SET') THEN
4654 g_set_tbl(cnt).set_type := 'INVALID_SET';
4655 l_exist := TRUE;
4656 exit;
4657 END IF;
4658 end loop;
4659 END IF;
4660 IF l_debug_level > 0 THEN
4661 oe_debug_pub.add( 'BEFORE GOING INTO OPTIONS TABLE ' , 1 ) ;
4662 END IF;
4663 IF (p_x_line_rec.item_type_code = 'MODEL' OR
4664 p_x_line_rec.item_type_code = 'KIT') AND
4665 (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4666 IF l_debug_level > 0 THEN
4667 oe_debug_pub.add( 'INTO MODEL IF CONDITON ' , 1 ) ;
4668 END IF;
4669
4670 IF g_set_opt_tbl.count > 0 THEN
4671 IF l_debug_level > 0 THEN
4672 oe_debug_pub.add( 'INTO SET OPT TABLE ' , 1 ) ;
4673 END IF;
4674 l_exist := FALSE;
4675 for Cnt In 1..g_set_opt_tbl.count
4676 Loop
4677 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4678 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.ship_set_id,-99)
4679 AND
4680 g_set_opt_tbl(cnt).set_type = 'SHIP_SET') THEN
4681 l_exist := TRUE;
4682 exit;
4683 END IF;
4684 End Loop;
4685 End IF;
4686 IF NOT L_exist THEN
4687 IF l_debug_level > 0 THEN
4688 oe_debug_pub.add( 'IF NOT EXISTS ' , 1 ) ;
4689 END IF;
4690 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
4691 g_set_opt_tbl(J).set_id := p_x_line_rec.ship_set_id;
4692 g_set_opt_tbl(J).set_type := 'SHIP_SET';
4693 J := J+1;
4694 END IF;
4695 END IF;
4696
4697
4698 ELSE
4699
4700 IF g_set_tbl.count > 0 THEN
4701 l_exist := FALSE;
4702 for Cnt In 1..g_set_tbl.count
4703 Loop
4704 IF l_debug_level > 0 THEN
4705 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .LINE_ID ) ;
4706 END IF;
4707 IF l_debug_level > 0 THEN
4708 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.LINE_ID ) ;
4709 END IF;
4710 IF l_debug_level > 0 THEN
4711 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_NAME ) ;
4712 END IF;
4713 IF l_debug_level > 0 THEN
4714 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.SHIP_SET ) ;
4715 END IF;
4716 IF l_debug_level > 0 THEN
4717 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_TYPE ) ;
4718 END IF;
4719
4720 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4721 p_x_line_rec.ship_set IS NULL AND
4722 g_set_tbl(cnt).set_type = 'SHIP_SET') THEN
4723 --g_set_tbl(cnt).set_name := null;
4724 g_set_tbl(cnt).set_type := 'INVALID_SET';
4725 l_exist := TRUE;
4726 END IF;
4727 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4728 p_old_line_rec.ship_set = g_set_tbl(cnt).set_name AND
4729 g_set_tbl(cnt).set_type = 'SHIP_SET') THEN
4730 g_set_tbl(cnt).set_name := p_x_line_rec.ship_set;
4731 l_exist := TRUE;
4732 exit;
4733 END IF;
4734 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4735 g_set_tbl(cnt).set_name = p_x_line_rec.ship_Set AND
4736 g_set_tbl(cnt).set_type = 'SHIP_SET') THEN
4737 IF l_debug_level > 0 THEN
4738 oe_debug_pub.add( 'EXISTS' ) ;
4739 END IF;
4740 l_exist := TRUE;
4741 exit;
4742 END IF;
4743 End Loop;
4744 End IF;
4745 IF Not L_Exist THEN
4746 IF l_debug_level > 0 THEN
4747 oe_debug_pub.add( 'NOT EXISTS' ) ;
4748 END IF;
4749 IF p_x_line_rec.operation = oe_globals.g_opr_create THEN
4750 IF (p_x_line_rec.line_id IS NOT NULL AND
4751 p_x_line_rec.line_id <> FND_API.G_MISS_NUM ) THEN
4752 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4753 ELSE
4754 g_set_tbl(I).line_id := p_index;
4755 g_set_tbl(I).operation := 'C';
4756 END IF;
4757 ELSIF p_x_line_rec.operation = oe_globals.g_opr_update THEN
4758 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4759 END IF;
4760 IF l_debug_level > 0 THEN
4761 oe_debug_pub.add( 'POPULATING SHIP SET S' ) ;
4762 END IF;
4763 g_set_tbl(I).set_name := p_x_line_rec.ship_set;
4764 g_set_tbl(I).set_type := 'SHIP_SET';
4765 I := I + 1;
4766 END IF;
4767
4768 p_x_line_rec.ship_set_id := NULL;
4769 END IF;
4770 ELSIF (p_x_line_rec.ship_set_id IS NOT NULL AND
4771 p_x_line_rec.ship_set_id <> FND_API.G_MISS_NUM)THEN
4772 IF NOT OE_GLOBALS.Equal(p_x_line_rec.ship_set_id,p_old_line_rec.ship_set_id)
4773 THEN
4774 IF l_debug_level > 0 THEN
4775 oe_debug_pub.add( 'ITEM TYPE CODE' || P_X_LINE_REC.SHIP_SET_ID ) ;
4776 END IF;
4777
4778 IF NOT Set_Exist(p_set_id => p_x_line_rec.ship_set_id) THEN
4779 p_x_line_rec.ship_set_id := NULL;
4780 ELSE
4781 IF l_debug_level > 0 THEN
4782 oe_debug_pub.add( 'INTO DEFAULTING SCHEDULING ATTRIBUTES' ) ;
4783 END IF;
4784 l_set_rec := get_set_rec(p_x_line_rec.ship_set_id);
4785 p_x_line_rec.ship_to_org_id := l_set_rec.ship_to_org_id;
4786 p_x_line_rec.ship_from_org_id := l_set_rec.ship_from_org_id;
4787 p_x_line_rec.schedule_ship_date := l_set_rec.schedule_ship_date;
4788 p_x_line_rec.freight_carrier_code := l_set_rec.freight_carrier_code;
4789 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4790
4791 IF g_set_opt_tbl.count > 0 THEN
4792 l_exist := FALSE;
4793 for Cnt In 1..g_set_opt_tbl.count
4794 Loop
4795 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4796 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.ship_set_id,-99)
4797 AND
4798 g_set_opt_tbl(cnt).set_type = 'SHIP_SET') THEN
4799 l_exist := TRUE;
4800 exit;
4801 END IF;
4802 End Loop;
4803 End IF;
4804 IF NOT L_exist THEN
4805 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
4806 g_set_opt_tbl(J).set_id := p_x_line_rec.ship_set_id;
4807 g_set_opt_tbl(J).set_type := 'SHIP_SET';
4808 J := J+1;
4809 END IF;
4810 END IF;
4811 END IF;
4812 END IF;
4813 ELSIF (p_old_line_rec.ship_set_id IS NOT NULL AND
4814 p_old_line_rec.ship_set_id <> FND_API.G_MISS_NUM) AND
4815 (p_x_line_rec.ship_set_id IS NULL)then
4816 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4817
4818 IF g_set_opt_tbl.count > 0 THEN
4819 l_exist := FALSE;
4820 for Cnt In 1..g_set_opt_tbl.count
4821 Loop
4822 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4823 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.ship_set_id,-99)
4824 AND
4825 g_set_opt_tbl(cnt).set_type = 'SHIP_SET') THEN
4826 l_exist := TRUE;
4827 exit;
4828 END IF;
4829 End Loop;
4830 End IF;
4831 IF NOT L_exist THEN
4832 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
4833 g_set_opt_tbl(J).set_id := NULL;
4834 g_set_opt_tbl(J).set_type := 'SHIP_SET';
4835 J := J + 1;
4836 END IF;
4837 END IF;
4838 END IF;
4839 for Cnt In 1..g_set_tbl.count
4840 Loop
4841 IF l_debug_level > 0 THEN
4842 oe_debug_pub.add( ' END OF SHIP SET NAME' || G_SET_TBL ( CNT ) .SET_NAME , 1 ) ;
4843 END IF;
4844 IF l_debug_level > 0 THEN
4845 oe_debug_pub.add( 'SET TYPE' || G_SET_TBL ( CNT ) .SET_TYPE , 1 ) ;
4846 END IF;
4847 end loop;
4848
4849 -- fulfillment sets
4850
4851 -- Fulfillment sets will have the similar logic as arrival sets
4852
4853 IF (p_x_line_rec.fulfillment_set IS NOT NULL AND
4854 p_x_line_rec.fulfillment_set <> FND_API.G_MISS_CHAR)THEN
4855
4856 IF l_debug_level > 0 THEN
4857 oe_debug_pub.add( 'INTO FULLFILLMENT SETS ' ) ;
4858 END IF;
4859
4860 /*IF Set_Exist(p_set_name =>p_x_line_rec.fulfillment_set,
4861 p_set_type => 'FULFILLMENT_SET',
4862 p_header_id =>p_x_line_rec.header_id,
4863 x_set_id => l_set_id) THEN
4864
4865 Create_Fulfillment_Set(p_line_id =>p_x_line_rec.line_id,
4866 p_set_id => l_set_id);
4867
4868 p_x_line_rec.fulfillment_set_id := l_set_id;
4869 ELSE*/
4870
4871 IF g_set_tbl.count > 0 THEN
4872 l_exist := FALSE;
4873 for Cnt In 1..g_set_tbl.count
4874 Loop
4875 IF l_debug_level > 0 THEN
4876 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .LINE_ID ) ;
4877 END IF;
4878 IF l_debug_level > 0 THEN
4879 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.LINE_ID ) ;
4880 END IF;
4881 IF l_debug_level > 0 THEN
4882 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_NAME ) ;
4883 END IF;
4884 IF l_debug_level > 0 THEN
4885 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.SHIP_SET ) ;
4886 END IF;
4887 IF l_debug_level > 0 THEN
4888 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_TYPE ) ;
4889 END IF;
4890 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4891 g_set_tbl(cnt).set_name = p_x_line_rec.fulfillment_set AND
4892 g_set_tbl(cnt).set_type = 'FULFILLMENT_SET') THEN
4893 IF l_debug_level > 0 THEN
4894 oe_debug_pub.add( 'EXISTS' ) ;
4895 END IF;
4896 l_exist := TRUE;
4897 exit;
4898 END IF;
4899 End Loop;
4900 End IF;
4901 IF Not L_Exist THEN
4902 IF l_debug_level > 0 THEN
4903 oe_debug_pub.add( 'NOT EXISTS' ) ;
4904 END IF;
4905 IF p_x_line_rec.operation = oe_globals.g_opr_create THEN
4906 IF (p_x_line_rec.line_id IS NOT NULL AND
4907 p_x_line_rec.line_id <> FND_API.G_MISS_NUM ) THEN
4908 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4909 ELSE
4910 g_set_tbl(I).line_id := p_index;
4911 g_set_tbl(I).operation := 'C';
4912 END IF;
4913 ELSIF p_x_line_rec.operation = oe_globals.g_opr_update THEN
4914 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4915 END IF;
4916 g_set_tbl(I).set_name := p_x_line_rec.fulfillment_set;
4917 g_set_tbl(I).set_type := 'FULFILLMENT_SET';
4918 END IF;
4919
4920 p_x_line_rec.fulfillment_set_id := NULL;
4921 --END IF;
4922 IF l_debug_level > 0 THEN
4923 oe_debug_pub.add( 'EXIT FULLFILLMENT SET ' ) ;
4924 END IF;
4925 ELSIF (p_x_line_rec.fulfillment_set_id IS NOT NULL AND
4926 p_x_line_rec.fulfillment_set_id <> FND_API.G_MISS_NUM)THEN
4927 IF NOT OE_GLOBALS.Equal(p_x_line_rec.fulfillment_set_id,p_old_line_rec.fulfillment_set_id)
4928 THEN
4929
4930 IF NOT Set_Exist(p_set_id => p_x_line_rec.fulfillment_set_id) THEN
4931 p_x_line_rec.fulfillment_set_id := NULL;
4932 ELSE
4933
4934 l_set_rec := get_set_rec(p_x_line_rec.fulfillment_set_id);
4935 -- Populate g_Set_tbl
4936
4937 IF g_set_tbl.count > 0 THEN
4938 l_exist := FALSE;
4939 for Cnt In 1..g_set_tbl.count
4940 Loop
4941 IF l_debug_level > 0 THEN
4942 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .LINE_ID ) ;
4943 END IF;
4944 IF l_debug_level > 0 THEN
4945 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.LINE_ID ) ;
4946 END IF;
4947 IF l_debug_level > 0 THEN
4948 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_NAME ) ;
4949 END IF;
4950 IF l_debug_level > 0 THEN
4951 oe_debug_pub.add( 'INTO GETSETID TBL' || P_X_LINE_REC.SHIP_SET ) ;
4952 END IF;
4953 IF l_debug_level > 0 THEN
4954 oe_debug_pub.add( 'INTO GETSETID TBL' || G_SET_TBL ( CNT ) .SET_TYPE ) ;
4955 END IF;
4956 IF (g_set_tbl(cnt).line_id = p_x_line_rec.line_id AND
4957 g_set_tbl(cnt).set_name = p_x_line_rec.fulfillment_set AND
4958 g_set_tbl(cnt).set_type = 'FULFILLMENT_SET') THEN
4959 IF l_debug_level > 0 THEN
4960 oe_debug_pub.add( 'EXISTS' ) ;
4961 END IF;
4962 l_exist := TRUE;
4963 exit;
4964 END IF;
4965 End Loop;
4966 End IF;
4967 IF Not L_Exist THEN
4968 IF l_debug_level > 0 THEN
4969 oe_debug_pub.add( 'NOT EXISTS' ) ;
4970 END IF;
4971 IF p_x_line_rec.operation = oe_globals.g_opr_create THEN
4972 IF (p_x_line_rec.line_id IS NOT NULL AND
4973 p_x_line_rec.line_id <> FND_API.G_MISS_NUM ) THEN
4974 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4975 ELSE
4976 g_set_tbl(I).line_id := p_index;
4977 g_set_tbl(I).operation := 'C';
4978 END IF;
4979 ELSIF p_x_line_rec.operation = oe_globals.g_opr_update THEN
4980 g_set_tbl(I).line_id := p_x_line_rec.line_id;
4981 END IF;
4982 g_set_tbl(I).set_name := l_set_rec.set_name;
4983 g_set_tbl(I).set_type := 'FULFILLMENT_SET';
4984 END IF;
4985 p_x_line_rec.fulfillment_set_id := NULL;
4986
4987 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
4988
4989 IF g_set_opt_tbl.count > 0 THEN
4990 l_exist := FALSE;
4991 for Cnt In 1..g_set_opt_tbl.count
4992 Loop
4993 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
4994 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.fulfillment_set_id,-99)
4995 AND
4996 g_set_opt_tbl(cnt).set_type = 'FULFILLMENT_SET') THEN
4997 l_exist := TRUE;
4998 exit;
4999 END IF;
5000 End Loop;
5001 End IF;
5002 IF NOT L_exist THEN
5003 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
5004 g_set_opt_tbl(J).set_id := p_x_line_rec.fulfillment_set_id;
5005 g_set_opt_tbl(J).set_type := 'FULFILLMENT_SET';
5006 END IF;
5007 END IF;
5008 END IF;
5009 END IF;
5010 ELSIF (p_old_line_rec.fulfillment_set_id IS NOT NULL AND
5011 p_old_line_rec.fulfillment_set_id <> FND_API.G_MISS_NUM) AND
5012 (p_x_line_rec.fulfillment_set_id IS NULL)then
5013 IF (p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
5014
5015 IF g_set_opt_tbl.count > 0 THEN
5016 l_exist := FALSE;
5017 for Cnt In 1..g_set_opt_tbl.count
5018 Loop
5019 IF (g_set_opt_tbl(cnt).line_id = p_x_line_rec.line_id AND
5020 nvl(g_set_opt_tbl(cnt).set_id,-99) = nvl(p_x_line_rec.fulfillment_set_id,-99)
5021 AND
5022 g_set_opt_tbl(cnt).set_type = 'FULFILLMENT_SET') THEN
5023 l_exist := TRUE;
5024 exit;
5025 END IF;
5026 End Loop;
5027 End IF;
5028 IF NOT L_exist THEN
5029 g_set_opt_tbl(J).line_id := p_x_line_rec.line_id;
5030 g_set_opt_tbl(J).set_id := NULL;
5031 g_set_opt_tbl(J).set_type := 'FULFILLMENT_SET';
5032 END IF;
5033 END IF;
5034 END IF;
5035
5036 -- End fulfillment sets
5037
5038 ELSE
5039 /*
5040 IF NOT OE_GLOBALS.Equal(p_x_line_rec.arrival_set_id,p_old_line_rec.arrival_set_id)
5041 OR
5042 NOT OE_GLOBALS.Equal(p_x_line_rec.ship_set_id,p_old_line_rec.ship_set_id)
5043 OR
5044 (p_x_line_rec.arrival_set IS NOT NULL AND
5045 p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR)
5046 OR
5047 (p_x_line_rec.ship_set IS NOT NULL AND
5048 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR)
5049 THEN
5050
5051 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
5052 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE',
5053 -- p_x_line_rec.item_type_code);
5054
5055 OE_MSG_PUB.ADD;
5056 oe_debug_pub.add('Set- not allowed for this itemtype');
5057 RAISE FND_API.G_EXC_ERROR;
5058
5059 END IF;
5060 */
5061
5062 -- Added this part of the code to fix bug 2116353.
5063 IF p_x_line_rec.arrival_set IS NOT NULL
5064 AND p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR
5065 AND p_x_line_rec.arrival_set_id IS NULL THEN
5066
5067 IF Set_Exist(p_set_name => p_x_line_rec.arrival_set,
5068 p_set_type => 'ARRIVAL_SET',
5069 p_header_id => p_x_line_rec.header_id,
5070 x_set_id => l_set_id) THEN
5071 -- p_x_line_rec.arrival_set := Null;
5072 p_x_line_rec.arrival_set_id := l_set_id;
5073
5074
5075 END IF;
5076
5077 ELSIF p_x_line_rec.ship_set IS NOT NULL
5078 AND p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR
5079 AND p_x_line_rec.ship_set_id IS NULL THEN
5080
5081 IF Set_Exist(p_set_name => p_x_line_rec.ship_set,
5082 p_set_type => 'SHIP_SET',
5083 p_header_id => p_x_line_rec.header_id,
5084 x_set_id => l_set_id) THEN
5085
5086 -- p_x_line_rec.ship_set := Null;
5087 p_x_line_rec.ship_set_id := l_set_id;
5088
5089
5090 END IF;
5091
5092 END IF; -- name not null.
5093
5094 END IF; -- Model And Standard
5095 ELSIF(p_x_line_rec.source_type_code = 'EXTERNAL') THEN
5096 -- Source type code is external
5097 p_x_line_rec.arrival_set_id := NULL;
5098 p_x_line_rec.ship_set_id := NULL;
5099
5100 END IF;
5101 IF l_debug_level > 0 THEN
5102 oe_debug_pub.add( 'EXIT GET SET ID' ) ;
5103 END IF;
5104 IF l_debug_level > 0 THEN
5105 oe_debug_pub.add( 'AFTER GET SET ID PROCESS - COMPLETE TABLE - ' ) ;
5106 END IF;
5107 for Cnt In 1..g_set_tbl.count
5108 Loop
5109 IF l_debug_level > 0 THEN
5110 oe_debug_pub.add( 'SET NAME' || G_SET_TBL ( CNT ) .SET_NAME ) ;
5111 END IF;
5112 IF l_debug_level > 0 THEN
5113 oe_debug_pub.add( 'SET TYPE' || G_SET_TBL ( CNT ) .SET_TYPE ) ;
5114 END IF;
5115 IF l_debug_level > 0 THEN
5116 oe_debug_pub.add( 'LINE ID' || G_SET_TBL ( CNT ) .LINE_ID ) ;
5117 END IF;
5118 IF l_debug_level > 0 THEN
5119 oe_debug_pub.add( 'OPERATION' || G_SET_TBL ( CNT ) .OPERATION ) ;
5120 END IF;
5121 end loop;
5122
5123
5124 END IF; -- Recursive Flag
5125
5126 EXCEPTION
5127 WHEN FND_API.G_EXC_ERROR THEN
5128
5129 RAISE FND_API.G_EXC_ERROR;
5130
5131
5132 WHEN OTHERS THEN
5133
5134 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5135 THEN
5136 OE_MSG_PUB.Add_Exc_Msg
5137 ( G_PKG_NAME
5138 , 'Get_Set_Id'
5139 );
5140 END IF;
5141
5142 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5143
5144
5145
5146 END Get_Set_Id;
5147
5148
5149
5150 PROCEDURE Query_Set_Rows
5151 ( p_set_id IN NUMBER,
5152 x_line_tbl OUT NOCOPY OE_Order_PUB.Line_Tbl_Type
5153 )
5154 IS
5155 l_line_rec OE_Order_PUB.Line_Rec_Type;
5156 l_header_id NUMBER;
5157 CURSOR c1 is
5158 SELECT line_id
5159 FROM oe_order_lines
5160 WHERE header_id = l_header_id
5161 AND (ship_set_id = p_set_id
5162 OR arrival_set_id = p_set_id)
5163 ORDER BY line_number,shipment_number,nvl(option_number,-1);
5164
5165 --
5166 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5167 --
5168 BEGIN
5169
5170 IF l_debug_level > 0 THEN
5171 oe_debug_pub.add( 'ENTERING OE_SET_UTIL.QUERY_ROWS' , 1 ) ;
5172 END IF;
5173
5174
5175 IF
5176 (p_set_id IS NULL
5177 OR
5178 p_set_id = FND_API.G_MISS_NUM)
5179 THEN
5180
5181 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5182
5183 END IF;
5184
5185 Begin
5186
5187 Select header_id
5188 Into l_header_id
5189 From Oe_sets
5190 Where set_id = p_set_id;
5191 Exception
5192 When Others Then
5193
5194 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5195 END;
5196 FOR C1REC in C1 LOOP
5197 oe_line_util.query_row(p_line_id => c1rec.line_id,
5198 x_line_rec => l_line_rec);
5199 x_line_tbl(x_line_tbl.count + 1) := l_line_rec;
5200 END LOOP;
5201
5202
5203 -- PK sent and no rows found
5204
5205 IF
5206 (p_set_id IS NOT NULL
5207 AND
5208 p_set_id <> FND_API.G_MISS_NUM)
5209 AND
5210 (x_line_tbl.COUNT = 0)
5211 THEN
5212 RAISE NO_DATA_FOUND;
5213 END IF;
5214
5215
5216 -- Return fetched table
5217 IF l_debug_level > 0 THEN
5218 oe_debug_pub.add( 'EXITING OE_LINE_UTIL.QUERY_ROWS' , 1 ) ;
5219 END IF;
5220
5221
5222 EXCEPTION
5223
5224 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5225
5226 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5227
5228 WHEN OTHERS THEN
5229
5230 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5231 THEN
5232 OE_MSG_PUB.Add_Exc_Msg
5233 ( G_PKG_NAME
5234 , 'Query_Set_Rows'
5235 );
5236 END IF;
5237
5238 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5239
5240 END Query_Set_Rows;
5241
5242 PROCEDURE Create_line_Set(p_x_line_rec IN OUT NOCOPY OE_ORDER_PUB.LINE_REC_TYPE
5243 ) IS
5244 l_set_id number;
5245 --
5246 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5247 --
5248 BEGIN
5249
5250 IF l_debug_level > 0 THEN
5251 oe_debug_pub.add( 'ENTER:CREATE LINE SETS ' , 1 ) ;
5252 END IF;
5253
5254 SELECT OE_SETS_S.NEXTVAL
5255 INTO l_set_id
5256 FROM DUAL;
5257 IF l_debug_level > 0 THEN
5258 oe_debug_pub.add( 'AFTERSEQUECEVALUE ' , 1 ) ;
5259 END IF;
5260 INSERT INTO OE_SETS(
5261 SET_ID
5262 , SET_NAME
5263 , SET_TYPE
5264 , Header_Id
5265 , inventory_item_id
5266 , ordered_quantity_uom
5267 , line_type_id
5268 , Ship_tolerance_above
5269 , ship_tolerance_below
5270 , CREATED_BY
5271 ,CREATION_DATE
5272 ,UPDATE_DATE
5273 ,UPDATED_BY
5274 )
5275 VALUES(
5276 l_set_id
5277 , to_char(p_x_line_rec.line_id)
5278 , 'SPLIT'
5279 , p_x_line_rec.Header_Id
5280 , p_x_line_rec.inventory_item_id
5281 , p_x_line_rec.order_quantity_uom
5282 , p_x_line_rec.line_type_id
5283 , p_x_line_rec.Ship_tolerance_above
5284 , p_x_line_rec.ship_tolerance_below
5285 ,1
5286 ,sysdate
5287 ,sysdate
5288 ,1001
5289 );
5290 p_x_line_rec.line_set_id := l_Set_id;
5291
5292 IF l_debug_level > 0 THEN
5293 oe_debug_pub.add( 'AFTERINSERT'||TO_CHAR ( L_SET_ID ) , 1 ) ;
5294 END IF;
5295 IF l_debug_level > 0 THEN
5296 oe_debug_pub.add( 'AFTERINSERT ' , 1 ) ;
5297 END IF;
5298
5299
5300 EXCEPTION
5301 WHEN FND_API.G_EXC_ERROR THEN
5302
5303 RAISE FND_API.G_EXC_ERROR;
5304
5305
5306 WHEN OTHERS THEN
5307 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
5308 THEN
5309 OE_MSG_PUB.Add_Exc_Msg
5310 ( G_PKG_NAME ,
5311 'create_line_set'
5312 );
5313 END IF;
5314 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5315
5316 END Create_Line_Set;
5317
5318 Procedure Process_Sets(p_x_line_tbl IN OUT NOCOPY OE_ORDER_PUB.LINE_TBL_TYPE
5319 ) IS
5320
5321 l_line_tbl OE_ORDER_PUB.Line_Tbl_Type;
5322 l_line_rec OE_ORDER_PUB.Line_rec_Type;
5323 l_old_line_tbl OE_ORDER_PUB.Line_Tbl_Type :=
5324 OE_ORDER_PUB.G_MISS_LINE_TBL;
5325 l_control_rec OE_GLOBALS.control_rec_type;
5326 l_api_name CONSTANT VARCHAR2(30) := 'Insert_Into_Set';
5327
5328 l_return_status VARCHAR2(30);
5329 l_set_id NUMBER ;
5330 l_header_id NUMBER ;
5331 l_line_id NUMBER ;
5332 l_set_type VARCHAR2(30) ;
5333 l_set_name VARCHAR2(30) ;
5334 l_set_rec OE_ORDER_CACHE.set_rec_type;
5335 l_atp_rec OE_ATP.atp_tbl_type;
5336 l_atp_tbl OE_ATP.atp_tbl_type;
5337 l_Ship_from_org_id NUMBER ;
5338 l_Ship_to_org_id NUMBER ;
5339 l_Schedule_Ship_Date DATE ;
5340 l_Schedule_Arrival_Date DATE ;
5341 l_Freight_Carrier_Code VARCHAR2(30) ;
5342 l_Shipping_Method_Code VARCHAR2(30) ;
5343 l_Shipment_priority_code VARCHAR2(30);
5344 L_COUNT NUMBER := 0;
5345 l_Loop_COUNT NUMBER := 0;
5346 x_msg_count number;
5347 x_msg_data varchar2(2000);
5348 next number;
5349 l_proc_record number := 0;
5350 x_arrival_set_id number;
5351 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
5352 -- 4925992
5353 l_top_model_line_id NUMBER;
5354 BEGIN
5355
5356
5357
5358 IF l_debug_level > 0 THEN
5359 oe_debug_pub.add( 'ENTER PROCESS SETS' ) ;
5360 END IF;
5361 IF l_debug_level > 0 THEN
5362 oe_debug_pub.add( 'RECURSION MODE' || OE_GLOBALS.G_RECURSION_MODE ) ;
5363 END IF;
5364
5365 -- To avoid this in a recursive procedure
5366
5367 IF NOT (g_set_recursive_flag ) THEN
5368 l_count := 1;
5369
5370 FOR I in 1..g_set_tbl.count
5371 Loop
5372 -- To control logic in get options procedure
5373 g_process_options := FALSE;
5374 -- for existing sets and lines we can default the set attributes and avoid this
5375 -- procedure call and also a recursive call to register the updated attributes
5376
5377 IF g_set_tbl(I).operation = 'C' THEN
5378
5379 FOR J in 1..p_x_line_tbl.count
5380 Loop
5381
5382 -- Populate line id if the index id populated and operation is create
5383 --on the line
5384 IF l_debug_level > 0 THEN
5385 oe_debug_pub.add( 'LINE ID' || G_SET_TBL ( I ) .LINE_ID ) ;
5386 END IF;
5387 IF l_debug_level > 0 THEN
5388 oe_debug_pub.add( 'OPERATION' || G_SET_TBL ( I ) .OPERATION ) ;
5389 END IF;
5390
5391 IF g_set_tbl(I).line_id = J THEN
5392 IF l_debug_level > 0 THEN
5393 oe_debug_pub.add( 'OPERATION' || P_X_LINE_TBL ( J ) .ITEM_TYPE_CODE ) ;
5394 END IF;
5395 IF p_x_line_tbl(J).item_type_code <> 'MODEL' AND
5396 p_x_line_tbl(J).item_type_code <> 'STANDARD' AND
5397 p_x_line_tbl(J).item_type_code <> 'KIT' THEN
5398 goto End_Psets;
5399 END IF;
5400 g_set_tbl(I).line_id := p_x_line_tbl(J).line_id;
5401
5402 Exit;
5403 END IF;
5404 End loop;
5405 END IF;
5406 End Loop;
5407
5408 IF l_debug_level > 0 THEN
5409 oe_debug_pub.add( 'G_LINE_TBL: COUNT' || G_SET_TBL.COUNT ) ;
5410 END IF;
5411
5412 -- Process all the lines in the set table now
5413
5414 FOR I in 1.. g_set_tbl.count
5415 Loop
5416 -- From the set table we process for each set all the lines first and
5417 -- Process the second set. If three lines are going in one set and two
5418 -- lines going in other than we process the three lines that belong to
5419 -- one set processed first before others are processed.
5420
5421 IF l_proc_record = g_set_tbl.count THEN
5422 EXIT;
5423 END IF;
5424 IF l_debug_level > 0 THEN
5425 oe_debug_pub.add( 'INTO SET COUNT' ) ;
5426 END IF;
5427
5428 -- This logic is avoid the invalid sets that are marked in get set id api
5429
5430 IF g_set_tbl(I).set_type = 'INVALID_SET' THEN
5431 g_set_tbl(I).process_flag := 'Y' ;
5432 END IF;
5433
5434 IF g_set_tbl(I).process_flag <> 'Y' THEN
5435
5436 BEGIN
5437 oe_line_util.query_row(p_line_id => g_set_tbl(I).line_id,
5438 x_line_rec => l_line_rec);
5439
5440 EXCEPTION
5441
5442 WHEN NO_DATA_FOUND THEN
5443
5444 IF l_debug_level > 0 THEN
5445 oe_debug_pub.add( 'No data found ' || g_set_tbl(I).line_id ) ;
5446 END IF;
5447 g_set_tbl(I).process_flag := 'Y' ;
5448 END;
5449
5450 END IF;
5451
5452 OE_MSG_PUB.set_msg_context
5453 ( p_entity_code => 'LINE'
5454 ,p_entity_id => l_line_rec.line_id
5455 ,p_header_id => l_line_rec.header_id
5456 ,p_line_id => l_line_rec.line_id
5457 ,p_orig_sys_document_ref =>
5458 l_line_rec.orig_sys_document_ref
5459 ,p_orig_sys_document_line_ref =>
5460 l_line_rec.orig_sys_line_ref
5461 ,p_orig_sys_shipment_ref =>
5462 l_line_rec.orig_sys_shipment_ref
5463 ,p_change_sequence => l_line_rec.change_sequence
5464 ,p_source_document_id =>
5465 l_line_rec.source_document_id
5466 ,p_source_document_line_id =>
5467 l_line_rec.source_document_line_id
5468 ,p_order_source_id =>
5469 l_line_rec.order_source_id
5470 ,p_source_document_type_id =>
5471 l_line_rec.source_document_type_id);
5472 -- Added and condition to external check to fix bug 3250887.
5473 IF g_set_tbl(I).process_flag <> 'Y' THEN
5474 IF ((nvl(l_line_rec.source_type_code,'X') = 'EXTERNAL') AND (g_set_tbl(I).set_type <> 'FULFILLMENT_SET'))
5475 OR (nvl(l_line_rec.shipped_quantity,0) > 0 AND g_set_tbl(I).set_type <> 'FULFILLMENT_SET')
5476 OR (nvl(l_line_rec.fulfilled_flag,'N') = 'Y' AND
5477 (g_set_tbl(I).set_type <> 'FULFILLMENT_SET' OR Fulfill_Sts(l_line_id)<>'NOTIFIED'))
5478 /* next two lines replaced with above two for 2525203
5479 OR nvl(l_line_rec.shipped_quantity,0) > 0
5480 OR nvl(l_line_rec.fulfilled_flag,'N') = 'Y'
5481 */
5482 OR nvl(l_line_rec.open_flag,'N') = 'N'
5483 /* Fix Bug # 2834750 : Only Fulfillment Sets allowed for RMA Lines */
5484 OR (l_line_rec.line_category_code = 'RETURN' AND
5485 g_set_tbl(I).set_type <> 'FULFILLMENT_SET') THEN
5486
5487 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
5488 OE_MSG_PUB.ADD;
5489 IF l_debug_level > 0 THEN
5490 oe_debug_pub.add( 'LINE IS NOT VALID TO PROCESS: ' || L_LINE_REC.LINE_ID , 1 ) ;
5491 END IF;
5492 g_set_tbl(I).process_flag := 'Y' ;
5493 OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
5494
5495 END IF;
5496
5497 IF (l_line_rec.item_type_code <> 'MODEL' AND
5498 l_line_rec.item_type_code <> 'STANDARD' AND
5499 l_line_rec.item_type_code <> 'KIT' AND
5500 l_line_rec.item_type_code <> 'SERVICE' AND
5501 nvl(l_line_rec.model_remnant_flag,'N') <> 'Y')
5502 OR (l_line_rec.item_type_code = 'SERVICE'
5503 AND g_set_tbl(I).set_type = 'FULFILLMENT'
5504 AND NOT Is_Service_Eligible(l_line_rec))
5505 OR (l_line_rec.item_type_code = 'SERVICE'
5506 AND (g_set_tbl(I).set_type = 'ARRIVAL'
5507 OR g_set_tbl(I).set_type = 'SHIP')) THEN
5508
5509 IF l_debug_level > 0 THEN
5510 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' || L_LINE_REC.ITEM_TYPE_CODE ) ;
5511 END IF;
5512
5513 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
5514 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE',
5515 -- l_line_rec.item_type_code);
5516 OE_MSG_PUB.ADD;
5517 IF l_debug_level > 0 THEN
5518 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' ) ;
5519 END IF;
5520 --RAISE FND_API.G_EXC_ERROR;
5521 g_set_tbl(I).process_flag := 'Y' ;
5522 END IF;
5523 END IF;
5524
5525 IF g_set_tbl(I).process_flag <> 'Y' THEN
5526 IF l_debug_level > 0 THEN
5527 oe_debug_pub.add( 'SET PROCESSING- I:' || I ) ;
5528 END IF;
5529 l_set_name := g_set_tbl(I).set_name;
5530 IF l_debug_level > 0 THEN
5531 oe_debug_pub.add( 'LINE ID :' || G_SET_TBL ( I ) .LINE_ID ) ;
5532 END IF;
5533 l_line_tbl(l_count) :=
5534 l_line_rec;
5535 l_old_line_tbl(l_count) :=
5536 l_line_rec;
5537 IF l_debug_level > 0 THEN
5538 oe_debug_pub.add( 'SCHEDULE REQUEST DATE- :' || L_LINE_REC.REQUEST_DATE , 1 ) ;
5539 END IF;
5540 IF l_debug_level > 0 THEN
5541 oe_debug_pub.add( 'SCHEDULE REQUEST DATE- :' || L_LINE_REC.SCHEDULE_SHIP_DATE , 1 ) ;
5542 END IF;
5543 g_old_line_tbl(l_count) :=
5544 l_line_tbl(l_count);
5545 IF l_debug_level > 0 THEN
5546 oe_debug_pub.add( 'AFTER QUERY_ROW :' ) ;
5547 END IF;
5548 l_line_tbl(l_count).schedule_action_code :=
5549 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
5550 IF l_debug_level > 0 THEN
5551 oe_debug_pub.add( 'AFTER SCHDULING ACITON ASSIGN:' ) ;
5552 END IF;
5553 IF g_set_tbl(I).set_type = 'SHIP_SET' THEN
5554 IF l_debug_level > 0 THEN
5555 oe_debug_pub.add( 'IN SHIP SET:' ) ;
5556 END IF;
5557 l_set_type := 'SHIP_SET';
5558 l_ship_from_org_id := l_line_tbl(l_count).ship_from_org_id;
5559 l_ship_to_org_id := l_line_tbl(l_count).ship_to_org_id;
5560 l_schedule_ship_date := l_line_tbl(l_count).schedule_ship_date;
5561 l_line_tbl(l_count).ship_set := l_set_name;
5562 --l_schedule_arrival_date := l_line_tbl(l_count).schedule_arrival_date;
5563 -- l_freight_carrier_code := l_line_tbl(l_count).freight_carrier_code;
5564 ELSIF g_set_tbl(I).set_type = 'ARRIVAL_SET' THEN
5565 l_set_type := 'ARRIVAL_SET';
5566 l_ship_to_org_id := l_line_tbl(l_count).ship_to_org_id;
5567 l_schedule_arrival_date := l_line_tbl(l_count).schedule_arrival_date;
5568 l_line_tbl(l_count).arrival_set := l_set_name;
5569 ELSIF g_set_tbl(I).set_type = 'FULFILLMENT_SET' THEN
5570 l_set_type := 'FULFILLMENT_SET';
5571 END IF;
5572
5573 -- If this is model get children
5574 IF (l_line_tbl(l_count).item_type_code = 'MODEL' AND
5575 l_line_tbl(l_count).top_model_line_id =
5576 l_line_tbl(l_count).line_id ) OR
5577 l_line_tbl(l_count).item_type_code = 'KIT' THEN
5578 Get_Options(p_x_line_tbl => l_line_tbl,
5579 p_set_type => l_set_type,
5580 p_index => l_count);
5581 END IF;
5582
5583 IF l_debug_level > 0 THEN
5584 oe_debug_pub.add( 'AFTER ASSIGNING SCHEDULE ATTRI- I:' || I ) ;
5585 END IF;
5586 g_set_tbl(I).process_flag := 'Y';
5587 l_count := l_line_tbl.count + 1;
5588 l_proc_record := l_proc_record + 1;
5589 -- This end if should be at the end since it covers the entire loop
5590 -- END IF;
5591
5592 IF g_set_tbl.count = 1 THEN
5593 Next := 1;
5594 ELSIF I = g_set_tbl.last THEN
5595 Next := I;
5596 ELSE
5597 Next := I + 1;
5598 END IF;
5599
5600
5601 FOR J in Next .. g_set_tbl.count
5602 LOOP
5603 IF l_debug_level > 0 THEN
5604 oe_debug_pub.add( 'SET PROCESSING- J:' || J ) ;
5605 END IF;
5606 IF l_debug_level > 0 THEN
5607 oe_debug_pub.add( 'SET PROCESSING- NEXT:' || NEXT ) ;
5608 END IF;
5609 IF l_debug_level > 0 THEN
5610 oe_debug_pub.add( 'SET NAME- NEXT:' || L_SET_NAME ) ;
5611 END IF;
5612 IF l_debug_level > 0 THEN
5613 oe_debug_pub.add( 'SET NAME- NEXT:' || L_SET_TYPE ) ;
5614 END IF;
5615 IF l_debug_level > 0 THEN
5616 oe_debug_pub.add( 'SET NAME- NEXT:' || G_SET_TBL ( J ) .SET_NAME ) ;
5617 END IF;
5618 IF l_debug_level > 0 THEN
5619 oe_debug_pub.add( 'SET NAME- NEXT:' || G_SET_TBL ( J ) .SET_TYPE ) ;
5620 END IF;
5621 oe_line_util.query_row(p_line_id => g_set_tbl(J).line_id,
5622 x_line_rec => l_line_rec);
5623
5624
5625 IF (l_line_rec.item_type_code <> 'MODEL' AND
5626 l_line_rec.item_type_code <> 'STANDARD' AND
5627 l_line_rec.item_type_code <> 'KIT' AND
5628 l_line_rec.item_type_code <> 'SERVICE' AND
5629 nvl(l_line_rec.model_remnant_flag,'N') <> 'Y')
5630 OR (l_line_rec.item_type_code = 'SERVICE'
5631 AND (g_set_tbl(J).set_type = 'ARRIVAL'
5632 OR g_set_tbl(J).set_type = 'SHIP')) THEN
5633
5634 OE_MSG_PUB.set_msg_context
5635 ( p_entity_code => 'LINE'
5636 ,p_entity_id => l_line_rec.line_id
5637 ,p_header_id => l_line_rec.header_id
5638 ,p_line_id => l_line_rec.line_id
5639 ,p_orig_sys_document_ref =>
5640 l_line_rec.orig_sys_document_ref
5641 ,p_orig_sys_document_line_ref =>
5642 l_line_rec.orig_sys_line_ref
5643 ,p_orig_sys_shipment_ref =>
5644 l_line_rec.orig_sys_shipment_ref
5645 ,p_change_sequence => l_line_rec.change_sequence
5646 ,p_source_document_id =>
5647 l_line_rec.source_document_id
5648 ,p_source_document_line_id =>
5649 l_line_rec.source_document_line_id
5650 ,p_order_source_id =>
5651 l_line_rec.order_source_id
5652 ,p_source_document_type_id =>
5653 l_line_rec.source_document_type_id);
5654 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
5655 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE',
5656 -- l_line_rec.item_type_code);
5657 OE_MSG_PUB.ADD;
5658 IF l_debug_level > 0 THEN
5659 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' ) ;
5660 END IF;
5661 --RAISE FND_API.G_EXC_ERROR;
5662 g_set_tbl(J).process_flag := 'Y' ;
5663 END IF;
5664 IF l_debug_level > 0 THEN
5665 oe_debug_pub.add( 'PROCES FLAG- J:' || G_SET_TBL ( J ) .PROCESS_FLAG ) ;
5666 END IF;
5667
5668 IF g_set_tbl(J).process_flag <> 'Y' THEN
5669
5670 IF l_debug_level > 0 THEN
5671 oe_debug_pub.add( 'INTO PROCESSFLAG- J:' ) ;
5672 END IF;
5673 IF g_set_tbl(J).set_name = l_set_name AND
5674 g_set_tbl(J).set_type = l_set_type THEN
5675 IF l_debug_level > 0 THEN
5676 oe_debug_pub.add( 'SET PROCESSING- J:' || J ) ;
5677 END IF;
5678 IF l_debug_level > 0 THEN
5679 oe_debug_pub.add( 'SET PROCESSING- NEXT:' || NEXT ) ;
5680 END IF;
5681
5682 IF l_debug_level > 0 THEN
5683 oe_debug_pub.add( 'INTO PROCESSING- J:' || NEXT ) ;
5684 END IF;
5685 l_line_tbl(l_count) :=
5686 l_line_rec;
5687 l_old_line_tbl(l_count) :=
5688 l_line_rec;
5689
5690 g_old_line_tbl(l_count) :=
5691 l_line_tbl(l_count);
5692
5693 l_line_tbl(l_count).schedule_action_code :=
5694 OE_ORDER_SCH_UTIL.OESCH_ACT_SCHEDULE;
5695 IF g_set_tbl(J).set_type = 'SHIP_SET' THEN
5696 l_line_tbl(l_count).ship_from_org_id := l_ship_from_org_id;
5697 l_line_tbl(l_count).ship_to_org_id:=l_ship_to_org_id;
5698 l_line_tbl(l_count).schedule_ship_date := l_schedule_ship_date;
5699 l_line_tbl(l_count).ship_set := l_set_name;
5700 --l_line_tbl(l_count).schedule_arrival_date := l_schedule_arrival_date;
5701 -- l_line_tbl(l_count).freight_carrier_code := l_freight_carrier_code;
5702 ELSIF g_set_tbl(J).set_type = 'ARRIVAL_SET' THEN
5703 IF (l_line_tbl(l_count).ship_set_id IS NOT NULL AND
5704 l_line_tbl(l_count).ship_set_id <> FND_API.G_MISS_NUM) THEN
5705
5706 IF Set_Exist(p_set_name =>g_set_tbl(J).set_name,
5707 p_set_type => 'ARRIVAL_SET',
5708 p_header_id =>l_line_tbl(l_count).header_id,
5709 x_set_id => l_set_id) THEN
5710 l_set_id := l_set_id;
5711 ELSE
5712 l_set_id := NULL;
5713 END IF;
5714
5715 Validate_Multi_Arr_Set(p_header_id => l_line_tbl(l_count).header_id,
5716 p_ship_set_id => l_line_tbl(l_count).ship_set_id,
5717 x_arrival_set_id => x_arrival_set_id);
5718
5719 IF x_arrival_set_id IS NOT NULL AND
5720 nvl(l_set_id,-99) <> x_arrival_set_id THEN
5721 /* Changed the message to fix the bug 2862565 */
5722 -- FND_MESSAGE.Set_Name('ONT', 'OE_INVALID_SET_COMB');
5723 FND_MESSAGE.Set_Name('ONT','OE_SCH_NOT_IN_SHIP_ARR');
5724 /* Changed the message to fix the bug 2862565 */
5725 oe_msg_pub.add;
5726 RAISE FND_API.G_EXC_ERROR;
5727 END IF;
5728
5729 END IF;
5730
5731 l_line_tbl(l_count).ship_to_org_id:=l_ship_to_org_id;
5732 l_line_tbl(l_count).schedule_arrival_date := l_schedule_arrival_date;
5733 l_line_tbl(l_count).arrival_set := l_set_name;
5734 END IF;
5735
5736 -- If this is model get children
5737
5738 IF (l_line_tbl(l_count).item_type_code = 'MODEL' AND
5739 l_line_tbl(l_count).top_model_line_id =
5740 l_line_tbl(l_count).line_id) OR
5741 l_line_tbl(l_count).item_type_code = 'KIT' THEN
5742 IF l_debug_level > 0 THEN
5743 oe_debug_pub.add( 'CALLING OPTIONS J:' ) ;
5744 END IF;
5745 Get_Options(p_x_line_tbl => l_line_tbl,
5746 p_set_type => l_set_type,
5747 p_index => l_count);
5748 END IF;
5749 g_set_tbl(J).process_flag := 'Y';
5750 l_proc_record := l_proc_record + 1;
5751 l_count := l_line_tbl.count + 1;
5752 END IF; -- setname and set type
5753 END IF; -- Process Flag
5754
5755 END LOOP; -- J
5756
5757 IF l_debug_level > 0 THEN
5758 oe_debug_pub.add( 'BEFORE CALLING SCHSET:'|| L_LINE_TBL.COUNT , 1 ) ;
5759 END IF;
5760 IF l_debug_level > 0 THEN
5761 oe_debug_pub.add( 'BEFORE CALLING SCHSET REQUEST DATE:'|| L_LINE_TBL ( 1 ) .REQUEST_DATE , 1 ) ;
5762 END IF;
5763 IF l_debug_level > 0 THEN
5764 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( 1 ) .SCHEDULE_SHIP_DATE , 1 ) ;
5765 END IF;
5766 IF l_debug_level > 0 THEN
5767 oe_debug_pub.add( 'BEFORE CALLING SHIP SET:'|| L_LINE_TBL ( 1 ) .SHIP_SET_ID , 1 ) ;
5768 END IF;
5769 IF l_debug_level > 0 THEN
5770 oe_debug_pub.add( 'BEFORE CALLING SHIP SET:'|| G_OLD_LINE_TBL ( 1 ) .SHIP_SET_ID , 1 ) ;
5771 END IF;
5772 --l_line_tbl(1).schedule_ship_date := l_line_tbl(1).request_date;
5773
5774 g_set_recursive_flag := TRUE;
5775 IF l_set_type <> 'FULFILLMENT_SET' THEN
5776
5777 /*FOR lrec in 2..l_line_tbl.count
5778 Loop
5779 IF l_Set_type = 'SHIP_SET' THEN
5780 l_line_tbl(lrec).schedule_ship_date := l_line_tbl(1).schedule_ship_date;
5781 l_line_tbl(lrec).ship_to_org_id := l_line_tbl(1).ship_to_org_id;
5782 l_line_tbl(lrec).ship_from_org_id := l_line_tbl(1).ship_from_org_id;
5783 ELSIF l_Set_type = 'ARRIVAL_SET' THEN
5784 l_line_tbl(lrec).schedule_arrival_date := l_line_tbl(1).schedule_arrival_date;
5785 l_line_tbl(lrec).ship_to_org_id := l_line_tbl(1).ship_to_org_id;
5786 END IF;
5787 END LOOP;*/
5788 IF l_set_type <> 'FULFILLMENT_SET' THEN
5789 for t in 1..l_line_tbl.count loop
5790 IF l_debug_level > 0 THEN
5791 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .SCHEDULE_SHIP_DATE , 1 ) ;
5792 END IF;
5793 IF l_debug_level > 0 THEN
5794 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .REQUEST_DATE , 1 ) ;
5795 END IF;
5796 IF l_debug_level > 0 THEN
5797 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .ITEM_TYPE_CODE , 1 ) ;
5798 END IF;
5799 end loop;
5800
5801
5802 OE_GRP_SCH_UTIL.Schedule_set_of_lines(p_x_line_tbl => l_line_tbl,
5803 p_old_line_tbl => g_old_line_tbl,
5804 x_return_status => l_return_status);
5805 END IF;
5806 IF l_debug_level > 0 THEN
5807 oe_debug_pub.add( 'AFTER CALLING SCHSET:'|| L_LINE_TBL.COUNT , 1 ) ;
5808 END IF;
5809 for t in 1..l_line_tbl.count loop
5810 IF l_debug_level > 0 THEN
5811 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .SCHEDULE_SHIP_DATE , 1 ) ;
5812 END IF;
5813 IF l_debug_level > 0 THEN
5814 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .REQUEST_DATE , 1 ) ;
5815 END IF;
5816 IF l_debug_level > 0 THEN
5817 oe_debug_pub.add( 'BEFORE CALLING SCHSET SCHEDULE DATE:'|| L_LINE_TBL ( T ) .ITEM_TYPE_CODE , 1 ) ;
5818 END IF;
5819 end loop;
5820 --g_old_line_tbl.delete;
5821
5822 IF l_debug_level > 0 THEN
5823 oe_debug_pub.add( 'AFTER GROUP SCHEDULING' , 1 ) ;
5824 END IF;
5825 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5826 IF l_debug_level > 0 THEN
5827 oe_debug_pub.add( 'RETURNSTATUS UNEXPECTED SCHEDULING' , 1 ) ;
5828 END IF;
5829 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5830 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5831 IF l_debug_level > 0 THEN
5832 oe_debug_pub.add( 'RETURNSTATUS ERROR SCHEDULING' , 1 ) ;
5833 END IF;
5834 RAISE FND_API.G_EXC_ERROR;
5835 END IF;
5836 --l_header_id := l_line_tbl(1).header_id;
5837 IF l_set_type = 'SHIP_SET' THEN
5838 l_ship_from_org_id := l_line_tbl(1).ship_from_org_id;
5839 l_ship_to_org_id := l_line_tbl(1).ship_to_org_id;
5840 l_schedule_ship_date := l_line_tbl(1).schedule_ship_date;
5841 ELSIF l_set_type = 'ARRIVAL_SET' THEN
5842 l_schedule_arrival_date := l_line_tbl(1).schedule_arrival_date;
5843 l_ship_to_org_id := l_line_tbl(1).ship_to_org_id;
5844 END IF;
5845 IF l_debug_level > 0 THEN
5846 oe_debug_pub.add( 'SET6' , 1 ) ;
5847 END IF;
5848 END IF;
5849 l_header_id := l_line_tbl(1).header_id;
5850 IF l_debug_level > 0 THEN
5851 oe_debug_pub.add( 'SET NAME- BEFORE CREATE:' || L_SET_NAME ) ;
5852 END IF;
5853 IF l_debug_level > 0 THEN
5854 oe_debug_pub.add( 'SET TYPE- BEFORE CREATE:' || L_SET_TYPE ) ;
5855 END IF;
5856 IF l_debug_level > 0 THEN
5857 oe_debug_pub.add( ' HEADER- BEFORE CREATE:' || L_HEADER_ID ) ;
5858 END IF;
5859
5860 Create_Set
5861 (p_Set_Name => l_set_name,
5862 p_Set_Type => l_set_type,
5863 p_Header_Id => l_header_id,
5864 p_Ship_From_Org_Id => l_ship_from_org_id,
5865 p_Ship_To_Org_Id => l_Ship_To_Org_Id,
5866 p_Schedule_Ship_Date => l_schedule_ship_Date,
5867 p_Schedule_Arrival_Date => l_Schedule_Arrival_Date,
5868 p_Freight_Carrier_Code => l_Freight_Carrier_Code,
5869 p_Shipping_Method_Code => l_Shipping_Method_Code,
5870 p_Shipment_priority_code => l_Shipment_priority_code,
5871 x_Set_Id => l_set_id,
5872 X_Return_Status => l_return_status,
5873 x_msg_count => x_msg_count,
5874 x_msg_data => x_msg_data);
5875
5876 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5877 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5878 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5879 RAISE FND_API.G_EXC_ERROR;
5880 END IF;
5881
5882 IF l_set_type = 'FULFILLMENT_SET' THEN
5883 IF l_debug_level > 0 THEN
5884 oe_debug_pub.add( 'BEFORE CREATING FULLFILLMENT SET' ) ;
5885 END IF;
5886 FOR fullrec in 1..l_line_tbl.COUNT
5887 LOOP
5888 IF l_debug_level > 0 THEN
5889 oe_debug_pub.add( 'INTO LOOP - CREATING FULLFILLMENT SET' ) ;
5890 END IF;
5891 -- 4274226
5892 IF l_line_tbl(fullrec).line_id = l_line_tbl(fullrec).top_model_line_id
5893 AND l_line_tbl(fullrec).operation <> 'CREATE'
5894 THEN
5895 l_top_model_line_id := l_line_tbl(fullrec).line_id;
5896 ELSE
5897 l_top_model_line_id := NULL;
5898 END IF;
5899 Create_Fulfillment_Set(p_line_id => l_line_tbl(fullrec).line_id,
5900 -- 4274226
5901 p_top_model_line_id => l_top_model_line_id,
5902 p_set_id => l_set_id);
5903 END LOOP;
5904 END IF;
5905
5906 FOR K IN 1 .. l_line_tbl.COUNT
5907 LOOP
5908 IF l_debug_level > 0 THEN
5909 oe_debug_pub.add( 'BEFORE ASSIGNING THE OLD RECORD IN SET' , 1 ) ;
5910 END IF;
5911 oe_line_util.query_row( l_line_tbl(K).line_id,
5912 l_line_rec);
5913 g_old_line_tbl(K) := l_line_rec;
5914
5915 IF l_Set_type = 'SHIP_SET' THEN
5916 l_line_tbl(K).ship_set_id := l_Set_id;
5917 /*IF l_line_tbl(K).item_type_code = 'KIT' THEN
5918 Update oe_order_lines_all
5919 set ship_set_id = l_set_id where
5920 top_model_line_id = l_line_tbl(K).line_id and
5921 item_type_code = 'INCLUDED';
5922 END IF; */
5923 ELSIF l_Set_type = 'ARRIVAL_SET' THEN
5924 l_line_tbl(K).arrival_set_id := l_Set_id;
5925 /*IF l_line_tbl(K).item_type_code = 'KIT' THEN
5926 Update oe_order_lines_all
5927 set arrival_set_id = l_set_id where
5928 top_model_line_id = l_line_tbl(K).line_id and
5929 item_type_code = 'INCLUDED';
5930 END IF; */
5931 ELSIF l_Set_type = 'FULFILLMENT_SET' THEN
5932 l_line_tbl(K).fulfillment_set_id := l_Set_id;
5933 END IF;
5934 IF l_Set_type <> 'FULFILLMENT_SET' THEN
5935
5936 l_line_tbl(K).operation := oe_globals.g_opr_update;
5937
5938 /* Validate_set_attributes(p_set_id => l_set_id,
5939 p_Ship_From_Org_Id => l_line_tbl(K).ship_from_org_id,
5940 p_Ship_To_Org_Id => l_line_tbl(K).Ship_To_Org_Id,
5941 p_Schedule_Ship_Date => l_line_tbl(K).schedule_ship_Date,
5942 p_Schedule_Arrival_Date => l_line_tbl(K).Schedule_Arrival_Date,
5943 p_Freight_Carrier_Code => l_line_tbl(K).Freight_Carrier_Code,
5944 p_Shipping_Method_Code => l_line_tbl(K).Shipping_Method_Code,
5945 X_Return_Status => l_return_status);*/
5946
5947 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5948 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5949 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5950 RAISE FND_API.G_EXC_ERROR;
5951 END IF;
5952 END IF;
5953 END LOOP;
5954
5955 IF l_Set_type <> 'FULFILLMENT_SET' THEN
5956 l_control_rec.controlled_operation := TRUE;
5957 l_control_rec.write_to_db := TRUE;
5958 l_control_rec.PROCESS := FALSE;
5959 l_control_rec.default_attributes := TRUE;
5960 l_control_rec.change_attributes := TRUE;
5961 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'N';
5962 g_set_recursive_flag := TRUE;
5963
5964 FOR I IN 1..l_line_tbl.count LOOP
5965
5966 IF l_debug_level > 0 THEN
5967 oe_debug_pub.add( 'LINE ID ' || L_LINE_TBL ( I ) .LINE_ID , 1 ) ;
5968 END IF;
5969 IF l_debug_level > 0 THEN
5970 oe_debug_pub.add( 'ITEM ' || L_LINE_TBL ( I ) .INVENTORY_ITEM_ID , 1 ) ;
5971 END IF;
5972 IF l_debug_level > 0 THEN
5973 oe_debug_pub.add( 'OLD ITEM ' || G_OLD_LINE_TBL ( I ) .INVENTORY_ITEM_ID , 1 ) ;
5974 END IF;
5975
5976
5977
5978 END LOOP;
5979 IF l_debug_level > 0 THEN
5980 oe_debug_pub.add( 'BEFORE CALLING PROCESS ORDER IN SETS' ) ;
5981 END IF;
5982
5983
5984 oe_order_pvt.Lines
5985 ( p_validation_level => FND_API.G_VALID_LEVEL_NONE
5986 , p_control_rec => l_control_rec
5987 , p_x_line_tbl => l_line_tbl
5988 , p_x_old_line_tbl => g_old_line_tbl
5989 , x_return_status => l_return_status
5990
5991 );
5992 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5993 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5994 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
5995 RAISE FND_API.G_EXC_ERROR;
5996 END IF;
5997
5998 /* jolin start comment out nocopy for notification project
5999
6000 -- Api to call notify OC and ACK and to process delayed requests
6001
6002 OE_Order_PVT.Process_Requests_And_Notify
6003 ( p_process_requests => FALSE
6004 , p_notify => TRUE
6005 , x_return_status => l_return_status
6006 , p_line_tbl => l_line_tbl
6007 , p_old_line_tbl => g_old_line_tbl
6008 );
6009 jolin end */
6010
6011 IF l_debug_level > 0 THEN
6012 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS' ) ;
6013 END IF;
6014
6015 OE_ORDER_SCH_UTIL.OESCH_PERFORM_SCHEDULING := 'Y';
6016 END IF;
6017 IF l_debug_level > 0 THEN
6018 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-1' ) ;
6019 END IF;
6020 g_set_recursive_flag := FALSE;
6021
6022 IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
6023 OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
6024 END IF;
6025
6026
6027 FOR M in 1..l_line_tbl.count
6028 LOOP
6029 IF l_debug_level > 0 THEN
6030 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-2' ) ;
6031 END IF;
6032 FOR H in 1..p_x_line_tbl.count
6033 Loop
6034 IF p_x_line_tbl(H).line_id = l_line_tbl(M).line_id THEN
6035 p_x_line_tbl(H):= l_line_tbl(M);
6036 EXIT;
6037 END IF;
6038 END LOOP;
6039 END LOOP;
6040 IF l_debug_level > 0 THEN
6041 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-3' ) ;
6042 END IF;
6043 l_line_tbl.delete;
6044 g_old_line_tbl.delete;
6045 l_count := 1;
6046
6047 -- END LOOP; -- J
6048 END IF; -- This is for if processed flag = Y for I
6049
6050 IF l_debug_level > 0 THEN
6051 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-4' ) ;
6052 END IF;
6053
6054 END LOOP; -- I
6055 IF g_set_tbl.count > 0 THEN
6056 g_set_tbl.delete;
6057 END IF;
6058
6059 IF g_set_opt_tbl.count <> 0 THEN
6060
6061 IF l_debug_level > 0 THEN
6062 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-5' ) ;
6063 END IF;
6064 -- This is to process options that has been effected by changes on the model
6065 -- other than creating a new set. If model is removed or moved into an
6066 -- existing sets then all the options are queried and we will put them in
6067 -- a new set.
6068 Process_Options;
6069 IF l_debug_level > 0 THEN
6070 oe_debug_pub.add( 'AFTER CALLING PROCESS ORDER IN SETS-6' ) ;
6071 END IF;
6072 g_set_opt_tbl.delete;
6073 END IF;
6074
6075 END IF;
6076 <<End_Psets>>
6077 g_process_options := TRUE;
6078 IF l_debug_level > 0 THEN
6079 oe_debug_pub.add( 'EXIT PROCESS SETS' ) ;
6080 END IF;
6081
6082
6083 EXCEPTION
6084 WHEN FND_API.G_EXC_ERROR THEN
6085
6086 RAISE FND_API.G_EXC_ERROR;
6087
6088 WHEN OTHERS THEN
6089
6090 IF OE_MSG_PUB.Check_Msg_Level (OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
6091 THEN
6092 OE_MSG_PUB.Add_Exc_Msg
6093 ( G_PKG_NAME ,
6094 'Process Sets'
6095 );
6096 END IF;
6097
6098 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6099
6100
6101
6102 END Process_Sets;
6103
6104 FUNCTION Get_Fulfillment_List(p_line_id IN NUMBER)
6105 RETURN VARCHAR2
6106 IS
6107 Cursor FULLIST IS
6108 Select os.set_name from
6109 oe_sets os,
6110 oe_line_sets ls
6111 where
6112 ls.line_id = p_line_id and
6113 os.set_id = ls.set_id;
6114 lfullist varchar2(2000);
6115 lcount number := 0;
6116 --
6117 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
6118 --
6119 BEGIN
6120
6121 FOR I in FULLIST
6122 LOOP
6123 lfullist := lfullist || I.set_name || ',';
6124 IF l_debug_level > 0 THEN
6125 oe_debug_pub.add( 'FULLFILLMENT LIST' ||LFULLIST ) ;
6126 END IF;
6127 END LOOP;
6128 lfullist := rtrim(lfullist,',');
6129 IF l_debug_level > 0 THEN
6130 oe_debug_pub.add( 'AFTER TRIM FULLFILLMENT LIST' ||LFULLIST ) ;
6131 END IF;
6132 RETURN lfullist;
6133
6134 END Get_Fulfillment_List;
6135
6136 Procedure Remove_from_fulfillment(p_line_id NUMBER)
6137 IS
6138 --
6139 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
6140 --
6141 Begin
6142
6143 Delete oe_line_sets
6144 where line_id = p_line_id;
6145
6146 Exception
6147 when no_data_found then
6148 null;
6149 when others then
6150 null;
6151 End Remove_from_fulfillment;
6152
6153 /* This procedure is added for the new set scheduling functioanlity
6154 and it takes the responsibility of creating a set if a line is requested
6155 into a set and populate set id for scheduling to be sensitive to sets */
6156
6157 Procedure Default_Line_Set(p_x_line_rec IN OUT NOCOPY oe_order_pub.line_rec_type,
6158 p_old_line_rec IN oe_order_pub.line_rec_type)
6159 IS
6160 l_set_id number;
6161 l_cascade_flag varchar2(1) := 'N';
6162 l_create_set varchar2(1) := 'N';
6163 l_set_type varchar2(30) ;
6164 l_set_name varchar2(2000);
6165 l_set_rec oe_order_cache.set_rec_type ;
6166 x_msg_data varchar2(32000);
6167 x_msg_count number ;
6168 l_return_status varchar2(30);
6169 lsettempname varchar2(2000);
6170 tempname varchar2(2000);
6171 l_ful_exists varchar2(1) := 'N';
6172 l_cust_pref varchar2(240);
6173 l_set_pref_type varchar2(240);
6174 l_fulfillment_set VARCHAR2(240);
6175 l_x_line_rec OE_ORDER_PUB.LINE_REC_TYPE;
6176 K NUMBER;
6177 l_old_set_id NUMBER;
6178 l_child_line_rec OE_ORDER_PUB.line_rec_type;
6179 l_action VARCHAR2(20);
6180 l_operation VARCHAR2(30);
6181 l_entity_type VARCHAR2(30);
6182 l_auto_schedule_sets VARCHAR2(1):='Y' ; --4241385
6183 l_schedule_ship_date DATE := NULL ; --4241385
6184 l_ship_set_id NUMBER ; --4241385
6185 l_ship_from_org_id NUMBER ; --4241385
6186 l_validate_combinition NUMBER ; --4241385
6187 l_shipping_method_code VARCHAR2(50); --4241385
6188 l_set_name_dsp VARCHAR2(20); --4241385
6189 --12866052
6190 l_set_ship_from_org_id NUMBER ;
6191 l_set_shipping_method_code VARCHAR2(50);
6192 l_set_ssd DATE;
6193 l_set_sad DATE;
6194 l_set_ship_to NUMBER;
6195 l_arrival_set_id NUMBER;
6196 l_shipset_id NUMBER;
6197 -- 2843738
6198 l_param VARCHAR2(1);
6199
6200 Cursor C1 is
6201 select Max(to_number(set_name))
6202 from oe_sets
6203 where set_status = 'T'
6204 and header_id = p_x_line_rec.header_id and
6205 set_type = l_set_pref_type;
6206
6207 Cursor C3 is
6208 select Max(to_number(set_name))
6209 from oe_sets
6210 where header_id = p_x_line_rec.header_id
6211 and set_type = l_set_pref_type
6212 and set_name = lsettempname;
6213
6214 CURSOR C4 is
6215 select set_id
6216 from oe_sets
6217 where header_id = p_x_line_rec.header_id
6218 and set_type = l_set_pref_type
6219 and set_status = 'T';
6220
6221 -- Added for ER 2843738
6222 CURSOR C_profile is
6223 select set_id
6224 from oe_sets, oe_order_lines_all
6225 where line_id = p_x_line_rec.line_id
6226 and set_type = l_set_pref_type
6227 and set_status = 'T'
6228 AND set_id = Nvl(ship_set_id, arrival_set_id);
6229
6230 -- Added for ER 2843738
6231 CURSOR C_param is
6232 select set_id
6233 from oe_sets
6234 where header_id = p_x_line_rec.header_id
6235 and set_type = 'SHIP_SET'
6236 and set_status = 'T'
6237 AND Nvl(ship_from_org_id,p_x_line_rec.ship_from_org_id) = p_x_line_rec.ship_from_org_id;
6238
6239 CURSOR C5 IS
6240 Select line_id, shipping_interfaced_flag
6241 from oe_order_lines_all
6242 where top_model_line_id = p_x_line_rec.line_id
6243 and open_flag = 'Y';
6244
6245 CURSOR C6 is
6246 select set_name
6247 from oe_sets
6248 where header_id = p_x_line_rec.header_id
6249 and set_type = 'FULFILLMENT_SET'
6250 and set_status = 'T';
6251
6252 Cursor C7 is
6253 select set_name
6254 from oe_sets
6255 where header_id = p_x_line_rec.header_id
6256 and set_type = l_set_pref_type;
6257 --and set_status = 'T';
6258
6259 CURSOR C2 is
6260 select set_id
6261 from oe_sets
6262 where header_id = p_x_line_rec.header_id
6263 and set_type = l_set_pref_type
6264 and set_status = 'T'
6265 and set_name = nvl(p_x_line_rec.arrival_set,p_x_line_rec.ship_set);
6266
6267 CURSOR C8 is
6268 select line_id,ship_set_id,arrival_set_id
6269 from oe_order_lines_all
6270 where top_model_line_id=p_x_line_rec.line_id
6271 and line_id<>p_x_line_rec.line_id
6272 and open_flag='Y';
6273
6274 CURSOR C9 IS
6275 SELECT inventory_item_id, ship_from_org_id, item_type_code,
6276 line_id,top_model_line_id,source_document_type_id, line_number,
6277 shipment_number, option_number, component_number, service_number,
6278 line_category_code --4241385
6279 FROM oe_order_lines_all
6280 WHERE ship_set_id = p_x_line_rec.ship_set_id;
6281
6282 CURSOR C10 is
6283 select set_id
6284 from oe_sets, oe_order_lines_all
6285 where line_id = p_x_line_rec.line_id
6286 and set_status = 'A'
6287 AND set_id = nvl(ship_set_id,arrival_set_id); --Bug 13691678
6288
6289 --
6290 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
6291 --
6292 BEGIN
6293
6294 -- Firstly Check if the Set is a new set Requested. We can check in the
6295 -- order of Arrival, Ship and Fulfillment set
6296
6297 IF l_debug_level > 0 THEN
6298 oe_debug_pub.add( 'ENTER PROCEDURE DEFAULT LINE SET '|| p_x_line_rec.line_id , 1 ) ;
6299 END IF;
6300
6301 l_param := NVL(oe_sys_parameters.Value('ONT_LINE_SET_WH',p_x_line_rec.org_id),'N'); --2843738
6302
6303 -- This will process only if the line is internal , standard and model and
6304 -- not shipped
6305
6306 IF NOT g_old_arrival_set_path THEN
6307 IF NOT ((p_x_line_rec.split_action_code = 'SPLIT' and
6308 p_x_line_rec.operation = OE_GLOBALS.G_OPR_UPDATE) or
6309 (p_x_line_rec.operation = OE_GLOBALS.G_OPR_CREATE and
6310 p_x_line_rec.split_from_line_id is NOT NULL)) then
6311
6312 IF ((p_x_line_rec.arrival_set is not null AND
6313 p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR) OR
6314 (p_x_line_rec.arrival_set_id is not null AND
6315 p_x_line_rec.arrival_set_id <> FND_API.G_MISS_NUM))
6316 AND ((p_x_line_rec.ship_set is not null AND
6317 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR) OR
6318 (p_x_line_rec.ship_set_id is not null AND
6319 p_x_line_rec.ship_set_id <> FND_API.G_MISS_NUM))
6320 THEN
6321
6322 IF l_debug_level > 0 THEN
6323 oe_debug_pub.add( 'INVALID SER OPR' , 2 ) ;
6324 END IF;
6325 FND_MESSAGE.Set_Name('ONT', 'OE_SCH_NOT_IN_SHIP_ARR'); -- 2724197 New message added
6326 oe_msg_pub.add;
6327 RAISE FND_API.G_EXC_ERROR;
6328
6329 END IF; -- not both sets populated.
6330
6331 -- QUOTING Changes - default line set only for lines in fulfillment phase
6332 IF nvl(p_x_line_rec.transaction_phase_code,'F') = 'F' AND
6333 p_x_line_rec.source_type_code <> 'EXTERNAL' AND
6334 p_x_line_rec.shipped_quantity IS NULL AND
6335 (nvl(p_x_line_rec.fulfilled_flag,'N') = 'N' OR
6336 (nvl(p_x_line_rec.fulfilled_flag,'N') = 'Y'
6337 AND p_x_line_rec.ship_set_id is null
6338 AND p_x_line_rec.arrival_set is null)) AND
6339 nvl(p_x_line_rec.open_flag,'N') = 'Y' AND
6340 /*(p_x_line_rec.item_type_code = 'STANDARD' OR
6341 p_x_line_rec.top_model_line_id = p_x_line_rec.line_id OR
6342 OE_Quote_Util.G_COMPLETE_NEG = 'Y' ) AND --12955144 : Allow other child lines as well-- Bug 2843738*/
6343 p_x_line_rec.line_category_code <> 'RETURN' THEN
6344
6345 IF l_debug_level > 0 THEN
6346 oe_debug_pub.add( 'IS A VALID SET REQUEST' , 1 ) ;
6347 END IF;
6348
6349 -- Check if the header preference is set to keep the line in a set
6350 -- by default
6351 -- QUOTING changes - add lines to sets based on header preference
6352 -- during complete negotiation step
6353 IF p_x_line_rec.operation = oe_globals.g_opr_create
6354 OR (p_x_line_rec.operation = oe_globals.g_opr_update --2843738
6355 AND NOT OE_Globals.Equal(p_x_line_rec.ship_from_org_id, p_old_line_rec.ship_from_org_id)) -- 13706641 and 13788287
6356 /*OR (OE_Quote_Util.G_COMPLETE_NEG = 'Y'
6357 AND NOT OE_GLOBALS.EQUAL(p_x_line_rec.transaction_phase_code
6358 ,p_old_line_rec.transaction_phase_code)
6359 )-- Comented for 2843738 */
6360 THEN
6361
6362 OE_Order_Cache.Load_Order_Header(p_x_line_rec.header_id);
6363
6364 -- 2843738
6365 IF (p_x_line_rec.item_type_code = 'STANDARD' OR
6366 p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
6367 /*OPEN C10;
6368 FETCH C10 into l_set_id;
6369 close C10*/
6370 l_set_id := Nvl(p_x_line_rec.ship_set_id,p_x_line_rec.arrival_set_id); -- 17306641
6371 ELSE
6372 BEGIN
6373 select Nvl(ship_set_id,arrival_set_id)
6374 into l_set_id
6375 from oe_order_lines_all
6376 where line_id= p_x_line_rec.top_model_line_id;
6377 EXCEPTION
6378 WHEN OTHERS THEN NULL;
6379 END;
6380 END IF;
6381 IF l_debug_level > 0 THEN
6382 oe_debug_pub.add( 'l_set_id : ' || l_set_id, 1 ) ;
6383 END IF;
6384
6385 IF (OE_ORDER_CACHE.g_header_rec.customer_preference_set_code = 'SHIP' OR
6386 OE_ORDER_CACHE.g_header_rec.customer_preference_set_code = 'ARRIVAL')
6387 AND p_x_line_rec.split_from_line_id IS null --Bug 13691678
6388 THEN
6389 l_cust_pref := OE_ORDER_CACHE.g_header_rec.customer_preference_set_code;
6390
6391 IF l_cust_pref = 'SHIP' THEN
6392 l_set_pref_type := 'SHIP_SET';
6393 ELSE
6394 l_set_pref_type := 'ARRIVAL_SET';
6395 END IF;
6396
6397 -- Added for13637523
6398 IF ( p_x_line_rec.ship_set IS NOT NULL OR p_x_line_rec.arrival_set IS NOT NULL) THEN
6399 g_cust_pref_set := FALSE;
6400 ELSE
6401 g_cust_pref_set := TRUE;
6402 END IF;
6403
6404 IF l_debug_level > 0 THEN
6405 oe_debug_pub.add( 'INTO SYSTEM SET' , 1 ) ;
6406 END IF;
6407
6408 --2843738
6409 IF l_set_id IS NULL AND
6410 (p_x_line_rec.item_type_code = 'STANDARD' OR
6411 p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
6412 IF NVL(FND_PROFILE.VALUE('ONT_SET_FOR_EACH_LINE'),'N') = 'Y' THEN
6413 OPEN C_profile;
6414 FETCH C_profile into l_set_id;
6415 close C_profile;
6416 ELSIF l_param = 'Y' AND l_cust_pref = 'SHIP' THEN
6417 -- Check if the system set is already created
6418 OPEN C_param;
6419 FETCH C_param into l_set_id;
6420 close C_param;
6421 -- Bug 13706641
6422 IF l_set_id IS NULL THEN
6423 BEGIN
6424 select Min(set_id) INTO l_set_id from oe_sets
6425 where header_id = p_x_line_rec.header_id
6426 AND set_status = 'T'
6427 AND not exists (select line_id FROM oe_order_lines_all
6428 WHERE ship_set_id = set_id);
6429 oe_debug_pub.add( 'existing ship set id retrieved :' || l_set_id) ;
6430 EXCEPTION
6431 WHEN Others THEN NULL;
6432 END;
6433 END IF;
6434 ELSE
6435 IF l_debug_level > 0 THEN
6436 oe_debug_pub.add('Profile ARRIVAL: '|| p_x_line_rec.arrival_set,2);
6437 oe_debug_pub.add('Profile SHIP: ' || p_x_line_rec.ship_set , 2);
6438 END IF;
6439
6440 IF p_x_line_rec.arrival_set is not null or
6441 p_x_line_rec.ship_set is not null THEN
6442 OPEN C2;
6443 FETCH C2 into l_set_id;
6444 close C2;
6445
6446 END IF;
6447 END IF;
6448 END IF;
6449
6450 -- Bug 13691678
6451 IF l_set_id IS NULL THEN
6452 BEGIN
6453 SELECT ol1.ship_set_id INTO l_set_id
6454 FROM oe_order_lines_all ol1
6455 WHERE ol1.line_id = p_x_line_rec.line_id
6456 AND NOT EXISTS ( SELECT 1 FROM oe_order_lines_all ol2
6457 WHERE ol2.ship_set_id = ol1.ship_set_id
6458 AND Nvl(ol2.top_model_line_id,ol2.line_id) <> ol1.line_id);
6459 EXCEPTION
6460 WHEN Others THEN NULL;
6461 END;
6462 END IF;
6463 -- Bug 13691678
6464
6465 IF l_set_id is not null then
6466
6467 IF l_cust_pref = 'SHIP' THEN
6468
6469 p_x_line_rec.ship_set_id := l_set_id;
6470 --2502504
6471 IF p_x_line_rec.booked_flag = 'Y' THEN
6472
6473 Validate_Shipset
6474 ( p_line_rec => p_x_line_rec
6475 ,p_old_line_rec => p_old_line_rec
6476 ,x_return_status => l_return_status);
6477
6478 IF l_debug_level > 0 THEN
6479 oe_debug_pub.add( 'Return Status '|| l_return_status , 1 ) ;
6480 END IF;
6481
6482 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6483 p_x_line_rec.ship_set_id := Null;
6484 GOTO NO_PROCESS;
6485 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6486 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6487 END IF;
6488
6489 END IF;
6490
6491 IF l_debug_level > 0 THEN
6492 oe_debug_pub.add( 'INTO SET EXISTS'|| L_SET_ID , 1 ) ;
6493 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
6494 END IF;
6495
6496 ELSIF l_cust_pref = 'ARRIVAL' THEN
6497 p_x_line_rec.arrival_set_id := l_set_id;
6498 IF l_debug_level > 0 THEN
6499 oe_debug_pub.add( 'INTO SET EXISTS'|| L_SET_ID , 1 ) ;
6500 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6501 END IF;
6502 END IF;
6503
6504 END IF; -- lSet_id is not null
6505
6506 IF l_set_id is null AND
6507 (p_x_line_rec.item_type_code = 'STANDARD' OR
6508 p_x_line_rec.top_model_line_id = p_x_line_rec.line_id) THEN
6509 IF NVL(FND_PROFILE.VALUE('ONT_SET_FOR_EACH_LINE'),'N') = 'N' AND NOT(l_param = 'Y' AND l_cust_pref='SHIP') THEN --2843738
6510 OPEN C1;
6511 FETCH C1 INTO lsettempname;
6512 CLOSE C1;
6513 END IF;
6514 IF lsettempname IS NULL THEN
6515 IF NVL(FND_PROFILE.VALUE('ONT_SET_FOR_EACH_LINE'),'N') = 'N' AND NOT(l_param = 'Y' AND l_cust_pref='SHIP') THEN -- 2843738
6516 lsettempname := 1;
6517 LOOP
6518 OPEN C3;
6519 FETCH C3 INTO tempname;
6520 CLOSE C3;
6521 IF tempname is not null then
6522 lsettempname := lsettempname + 1;
6523 ELSE
6524 EXIT;
6525 END IF;
6526
6527 END LOOP ;
6528 ELSE
6529 tempname := 0;
6530
6531 FOR L IN C7 LOOP
6532
6533 BEGIN
6534 IF to_number(L.set_name) > tempname THEN
6535 tempname := L.set_name;
6536 END IF;
6537 EXCEPTION
6538 WHEN OTHERS THEN
6539 Null;
6540 END;
6541 END LOOP;
6542 /*
6543 OPEN C7;
6544 FETCH C7 INTO tempname;
6545 CLOSE C7;
6546 */
6547 lsettempname := nvl(tempname,0) + 1;
6548 END IF;
6549
6550 ELSE
6551 lsettempname := lsettempname;
6552 END IF; -- L_set_temp_name
6553 IF l_cust_pref = 'SHIP' THEN
6554 --Bug 5654902
6555 --Added the condition to check if 'Ship Set' name already exists
6556 IF p_x_line_rec.ship_set IS NULL
6557 THEN
6558 p_x_line_rec.ship_set := lsettempname;
6559 ELSE
6560 oe_debug_pub.add('Using the Ship Set Name passed: '||p_x_line_rec.ship_set);
6561 END IF;
6562 ELSIF l_cust_pref = 'ARRIVAL' THEN
6563 --Bug 5654902
6564 --Added the condition to check if 'Arrival Set' name already exists
6565 IF p_x_line_rec.arrival_set IS NULL
6566 THEN
6567 p_x_line_rec.arrival_set := lsettempname;
6568 ELSE
6569 oe_debug_pub.add('Using the Arrival Set Name passed: '||p_x_line_rec.arrival_set);
6570 END IF;
6571 END IF;
6572 END IF; -- L_set_id is null
6573
6574 IF l_debug_level > 0 THEN
6575 oe_debug_pub.add( 'SYSTEM SET IS' || LSETTEMPNAME , 1 ) ;
6576 END IF;
6577
6578 END IF; -- Customer Preference
6579 END IF; -- Operation is create
6580
6581 IF l_debug_level > 0 THEN
6582 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
6583 END IF;
6584 IF l_debug_level > 0 THEN
6585 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.SHIP_SET , 1 ) ;
6586 END IF;
6587 IF l_debug_level > 0 THEN
6588 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.ARRIVAL_SET , 1 ) ;
6589 END IF;
6590 IF l_debug_level > 0 THEN
6591 oe_debug_pub.add( 'INTO SET EXISTS'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6592 END IF;
6593
6594 -- Check if the set name is populated and it is a new set
6595 -- Process for arrival sets
6596
6597 IF (p_x_line_rec.arrival_set IS NOT NULL AND
6598 p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR) THEN
6599
6600 IF l_debug_level > 0 THEN
6601 oe_debug_pub.add( 'INTO ARRIVAL SET'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6602 END IF;
6603 -- Check if this is existing set
6604 IF Set_Exist(p_set_name => p_x_line_rec.arrival_set,
6605 p_set_type => 'ARRIVAL_SET',
6606 p_header_id =>p_x_line_rec.header_id,
6607 x_set_id => l_set_id) THEN
6608
6609 l_set_rec := get_set_rec(l_set_id);
6610 IF l_set_rec.set_status = 'C' THEN
6611 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
6612 FND_MESSAGE.SET_TOKEN('SET', l_set_rec.set_name);
6613 oe_msg_pub.add;
6614 GOTO NO_PROCESS;
6615 END IF; -- Set Status = 'C'
6616
6617 IF l_debug_level > 0 THEN
6618 oe_debug_pub.add( 'ARRIVAL SET-1'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6619 END IF;
6620 p_x_line_rec.arrival_set_id := l_set_id;
6621 l_set_type := 'ARRIVAL_SET';
6622 l_set_name := p_x_line_rec.arrival_set;
6623
6624 ELSE -- If set not exists
6625 -- Create the arrival set and populate the set id;
6626 l_create_set := 'Y';
6627 l_set_type := 'ARRIVAL_SET';
6628 l_set_name := p_x_line_rec.arrival_set;
6629
6630 END IF ; -- Set Exists
6631
6632 -- Set the cascade flag if line is a model or kit
6633 IF l_debug_level > 0 THEN
6634 oe_debug_pub.add( 'ARRIVAL SET-2'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6635 END IF;
6636
6637 IF p_x_line_rec.top_model_line_id = p_x_line_rec.line_id
6638 THEN
6639 l_cascade_flag := 'Y';
6640 END IF;
6641
6642 -- Now check if the arrival set id is populated in a case when the line
6643 -- moving into existing arrival set OR removed from existing arrival set
6644 ELSIF NOT OE_GLOBALS.EQUAL (p_x_line_rec.arrival_set_id,
6645 p_old_line_rec.arrival_set_id )
6646 THEN
6647 IF l_debug_level > 0 THEN
6648 oe_debug_pub.add( 'ARRIVAL SET-3'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6649 END IF;
6650 -- Process the moving from one set to another
6651 IF p_x_line_rec.arrival_set_id IS NOT NULL THEN
6652
6653
6654 IF Set_Exist(p_set_id => p_x_line_rec.arrival_Set_id) THEN
6655
6656 l_Set_id := p_x_line_rec.arrival_Set_id;
6657
6658 l_set_rec := get_set_rec(l_set_id);
6659 IF l_set_rec.set_status = 'C' THEN
6660 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
6661 FND_MESSAGE.SET_TOKEN('SET', l_set_rec.set_name);
6662 oe_msg_pub.add;
6663 GOTO NO_PROCESS;
6664
6665 END IF; -- Set Status = 'C'
6666 p_x_line_rec.arrival_set_id := l_set_id;
6667 l_set_type := 'ARRIVAL_SET';
6668 IF l_debug_level > 0 THEN
6669 oe_debug_pub.add( 'ARRIVAL SET-4'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6670 END IF;
6671
6672 ELSE -- If set not exists
6673
6674 -- not a valid set so retain the old value;
6675 p_x_line_rec.arrival_set_id := p_old_line_rec.arrival_set_id;
6676 IF l_debug_level > 0 THEN
6677 oe_debug_pub.add( 'ARRIVAL SET-5'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6678 END IF;
6679 GOTO NO_PROCESS;
6680
6681 END IF ; -- Set Exists
6682
6683 -- See if the line is removed from the set */
6684 ELSIF p_x_line_rec.arrival_set_id IS NULL THEN
6685 p_x_line_rec.arrival_set_id := null;
6686 IF l_debug_level > 0 THEN
6687 oe_debug_pub.add( 'ARRIVAL SET-6'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6688 END IF;
6689 l_set_id := null;
6690 l_set_type := 'ARRIVAL_SET';
6691 END IF; -- Arrival set id is not null
6692
6693 IF p_x_line_rec.top_model_line_id =
6694 p_x_line_rec.line_id THEN
6695 l_cascade_flag := 'Y';
6696 END IF;
6697 IF l_debug_level > 0 THEN
6698 oe_debug_pub.add( 'ARRIVAL SET-7'|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
6699 END IF;
6700
6701 -- End Arrival Set Logic
6702 -- Begin the logic for Ship sets . The logic must go in the same way as
6703 -- arrival sets and is no different execept for set type being SHIP SET
6704
6705 ELSIF (p_x_line_rec.ship_set IS NOT NULL AND
6706 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR) THEN
6707
6708 -- Check if this is existing set
6709 IF Set_Exist(p_set_name => p_x_line_rec.ship_set,
6710 p_set_type => 'SHIP_SET',
6711 p_header_id => p_x_line_rec.header_id,
6712 x_set_id => l_set_id) THEN
6713
6714 l_set_rec := get_set_rec(l_set_id);
6715 IF l_set_rec.set_status = 'C' THEN
6716 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
6717 FND_MESSAGE.SET_TOKEN('SET', l_set_rec.set_name);
6718 oe_msg_pub.add;
6719 GOTO NO_PROCESS;
6720 END IF; -- Set Status = 'C'
6721 p_x_line_rec.ship_set_id := l_set_id;
6722 l_set_type := 'SHIP_SET';
6723 l_set_name := p_x_line_rec.ship_set;
6724 ELSE -- If set not exists
6725 -- Create the arrival set and populate the set id;
6726 l_create_set := 'Y';
6727 l_set_type := 'SHIP_SET';
6728 l_set_name := p_x_line_rec.ship_set;
6729
6730 END IF ; -- Set Exists
6731
6732 -- Set the cascade flag if line is a model or kit
6733
6734 IF p_x_line_rec.top_model_line_id = p_x_line_rec.line_id
6735 THEN
6736 l_cascade_flag := 'Y';
6737 END IF;
6738
6739 -- Now check if the arrival set id is populated in a case when the line
6740 -- moving into existing arrival set OR removed from existing arrival set
6741 ELSIF NOT OE_GLOBALS.EQUAL (p_x_line_rec.ship_set_id,
6742 p_old_line_rec.ship_set_id )
6743 THEN
6744 IF l_debug_level > 0 THEN
6745 oe_debug_pub.add( 'INTO SHIP SETS '|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
6746 END IF;
6747 -- Process the moving from one set to another
6748 IF p_x_line_rec.ship_set_id IS NOT NULL THEN
6749
6750 IF l_debug_level > 0 THEN
6751 oe_debug_pub.add( 'SHIP SET ID NOT NULL '|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
6752 END IF;
6753
6754 IF Set_Exist(p_set_id => p_x_line_rec.ship_set_id) THEN
6755
6756 l_set_id := p_x_line_rec.ship_set_id;
6757 l_set_rec := get_set_rec(l_set_id);
6758 IF l_set_rec.set_status = 'C' THEN
6759 fnd_message.set_name('ONT', 'OE_SET_CLOSED');
6760 FND_MESSAGE.SET_TOKEN('SET', l_set_rec.set_name);
6761 oe_msg_pub.add;
6762 GOTO NO_PROCESS;
6763 END IF; -- Set Status = 'C'
6764 p_x_line_rec.ship_set_id := l_set_id;
6765 l_set_type := 'SHIP_SET';
6766 l_set_name := p_x_line_rec.ship_set;
6767
6768 ELSE -- If set not exists
6769
6770 -- not a valid set so retain the old value;
6771 p_x_line_rec.ship_set_id := p_old_line_rec.ship_set_id;
6772 GOTO NO_PROCESS;
6773
6774 END IF ; -- Set Exists
6775 -- See if the line is removed from the set
6776 ELSIF p_x_line_rec.ship_set_id IS NULL THEN
6777 p_x_line_rec.ship_set_id := null;
6778 l_set_id := null;
6779 l_set_type := 'SHIP_SET';
6780 END IF; -- Ship set id is not null
6781
6782 IF p_x_line_rec.top_model_line_id = p_x_line_rec.line_id
6783 THEN
6784 l_cascade_flag := 'Y';
6785 END IF;
6786
6787
6788
6789 END IF; -- Arrival Set is NOT null
6790
6791 -- Create or Update based on the flags set above
6792
6793 /* First we will create the set if l_create_flag is set to 'Y' */
6794 IF l_debug_level > 0 THEN
6795 oe_debug_pub.add( 'CREATE FLAG IS - ' || L_CREATE_SET , 1 ) ;
6796 END IF;
6797 IF l_debug_level > 0 THEN
6798 oe_debug_pub.add( 'CASCADE FLAG IS - ' || L_CASCADE_FLAG , 1 ) ;
6799 END IF;
6800 IF l_debug_level > 0 THEN
6801 oe_debug_pub.add( 'SET NAME - ' || L_SET_NAME , 1 ) ;
6802 END IF;
6803 IF l_debug_level > 0 THEN
6804 oe_debug_pub.add( 'SET TYPE - ' || L_SET_TYPE , 1 ) ;
6805 END IF;
6806 IF l_debug_level > 0 THEN
6807 oe_debug_pub.add( 'SET ID - ' || L_SET_ID , 1 ) ;
6808 END IF;
6809 /* 4241385
6810 The below logic will come into picture only when the system parameter "OM:Auto Schedule Sets"
6811 is set to "No" and the set is not yet scheduled. Becuase if the set is scheduled, then
6812 scheduling code will take care to see that all the lines in the ship set, will have a
6813 same warehouse.Also, this piece of code is only for ship sets, becuase arrival sets can
6814 have a different warehouse on each line.
6815
6816 */
6817 l_auto_schedule_sets := NVL(oe_sys_parameters.Value('ONT_AUTO_SCH_SETS',p_x_line_rec.org_id),'Y');
6818 IF l_auto_schedule_sets = 'N' AND p_x_line_rec.schedule_ship_date IS NULL THEN --12866052
6819 IF l_debug_level > 0 THEN
6820 oe_debug_pub.add( 'p_old_line_rec.ship_from_org_id' ||p_old_line_rec.ship_from_org_id) ;
6821 oe_debug_pub.add( 'p_x_line_rec.ship_from_org_id' ||p_x_line_rec.ship_from_org_id) ;
6822 oe_debug_pub.add( 'p_old_line_rec.ship_set_id' ||p_old_line_rec.ship_set_id) ;
6823 oe_debug_pub.add( 'p_x_line_rec.ship_set_id' ||p_x_line_rec.ship_set_id) ;
6824 oe_debug_pub.add( 'p_x_line_rec.ship_set' ||p_x_line_rec.ship_set) ;
6825 oe_debug_pub.add( 'p_x_line_rec.arrival_set_id' ||p_x_line_rec.arrival_set_id) ;
6826 oe_debug_pub.add( 'p_x_line_rec.schedule_arrival_date' ||p_x_line_rec.schedule_arrival_date) ;
6827 oe_debug_pub.add( 'p_x_line_rec.schedule_ship_date' ||p_x_line_rec.schedule_ship_date) ;
6828
6829 END IF;
6830 --12866052
6831 l_set_ship_from_org_id := p_x_line_rec.ship_from_org_id;
6832 l_set_shipping_method_code := p_x_line_rec.shipping_method_code;
6833 IF p_x_line_rec.SCHEDULE_SHIP_DATE IS NOT NULL THEN
6834 l_set_ssd := p_x_line_rec.SCHEDULE_SHIP_DATE;
6835 END IF;
6836 IF p_x_line_rec.SCHEDULE_ARRIVAL_DATE IS NOT NULL THEN
6837 l_set_sad := p_x_line_rec.SCHEDULE_ARRIVAL_DATE;
6838 END IF;
6839 IF p_x_line_rec.ship_to_org_id IS NOT NULL THEN
6840 l_set_ship_to := p_x_line_rec.ship_to_org_id;
6841 END IF;
6842
6843 /*IF ((p_x_line_rec.arrival_set_id IS NOT NULL
6844 AND p_x_line_rec.arrival_set_id <> FND_API.G_MISS_NUM)
6845 OR
6846 ( p_x_line_rec.arrival_set IS NOT NULL
6847 AND p_x_line_rec.arrival_set <> FND_API.G_MISS_char ))
6848 THEN
6849
6850 IF p_x_line_rec.ship_from_org_id IS NULL THEN
6851 FND_MESSAGE.SET_NAME('ONT','ONT_ATTR_REQ_SET');
6852 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Warehouse'); --9680007 4241385
6853 OE_MSG_PUB.ADD;
6854 RAISE FND_API.G_EXC_ERROR;
6855 END IF ;
6856
6857 IF p_x_line_rec.shipping_method_code IS NULL THEN
6858 FND_MESSAGE.SET_NAME('ONT','ONT_ATTR_REQ_SET');
6859 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Ship Method');
6860 OE_MSG_PUB.ADD;
6861 RAISE FND_API.G_EXC_ERROR;
6862 END IF ;
6863
6864 END IF ;*/
6865 /*we need to ensure that all the lines in a ship set have the same warehouse, if the
6866 ship set id is passed(from PO API) or even if ship set name is passed (from UI)*/
6867 IF ((p_x_line_rec.ship_set_id IS NOT NULL
6868 AND p_x_line_rec.ship_set_id <> FND_API.G_MISS_NUM)
6869 OR
6870 ( p_x_line_rec.ship_set IS NOT NULL
6871 AND p_x_line_rec.ship_set <> FND_API.G_MISS_char ))
6872 THEN
6873
6874 /* IF p_x_line_rec.ship_from_org_id IS NULL THEN
6875 FND_MESSAGE.SET_NAME('ONT','ONT_ATTR_REQ_SET');
6876 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Warehouse');
6877 OE_MSG_PUB.ADD;
6878 RAISE FND_API.G_EXC_ERROR; --9680007 4241385
6879 END IF ;
6880
6881 IF p_x_line_rec.shipping_method_code IS NULL THEN
6882 FND_MESSAGE.SET_NAME('ONT','ONT_ATTR_REQ_SET');
6883 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Ship Method');
6884 OE_MSG_PUB.ADD;
6885 RAISE FND_API.G_EXC_ERROR;
6886 END IF ; */
6887
6888 IF l_debug_level > 0 THEN
6889 oe_debug_pub.add( ' BEFORE SET EXISTS ' , 1 ) ;
6890 END IF;
6891 IF (p_x_line_rec.ship_set_id IS NOT NULL
6892 AND p_x_line_rec.ship_set_id <> FND_API.G_MISS_NUM) THEN
6893
6894 BEGIN
6895 SELECT ship_from_org_id , schedule_ship_date ,shipping_method_code
6896 , set_name
6897 INTO l_ship_from_org_id , l_schedule_ship_Date,l_shipping_method_code
6898 , l_set_name_dsp
6899 FROM oe_sets
6900 WHERE set_id=p_x_line_rec.ship_set_id;
6901 EXCEPTION
6902 WHEN NO_DATA_FOUND THEN
6903 l_ship_set_id:= NULL ;
6904 l_ship_from_org_id := NULL ;
6905 l_schedule_ship_Date := NULL ;
6906 END ;
6907 l_ship_set_id:= p_x_line_rec.ship_set_id;
6908
6909 ELSIF ( p_x_line_rec.ship_set IS NOT NULL
6910 AND p_x_line_rec.ship_set <> FND_API.G_MISS_char ) THEN
6911
6912 /* if only the ship set name is passed, we can get the ship set id by calling the
6913 set_exists API*/
6914
6915 BEGIN
6916 SELECT ship_from_org_id , schedule_ship_date, set_id ,shipping_method_code
6917 INTO l_ship_from_org_id , l_schedule_ship_Date , l_ship_set_id ,
6918 l_shipping_method_code
6919 FROM oe_sets
6920 WHERE set_name = p_x_line_rec.ship_set
6921 and set_type = 'SHIP_SET'
6922 and header_id = p_x_line_rec.header_id ;
6923 EXCEPTION
6924 WHEN NO_DATA_FOUND THEN
6925 l_ship_set_id:= NULL ;
6926 l_ship_from_org_id := NULL ;
6927 l_schedule_ship_Date := NULL ;
6928 END ;
6929 l_set_name_dsp:=p_x_line_rec.ship_set;
6930 END IF ;
6931
6932 IF l_ship_set_id IS NOT NULL THEN
6933
6934 /* The first if condition will ensure that the warehouse on the line is different
6935 from the set warehouse, only then we need to proceed further. Then we need to see
6936 if the line is already part of the set, or getting added to the set newly.*/
6937 IF p_x_line_rec.ship_from_org_id IS NOT NULL THEN --9680007
6938 IF p_x_line_rec.ship_from_org_id <> NVL(l_ship_from_org_id,-99) THEN
6939
6940 /* we are checking that the line is already part of a set, and we are trying to
6941 change the warehouse on the set. Like if there are 4 lines already in set 1,
6942 with warehouse V1. If we change the warehouse on one line to M1, then if all the
6943 4 lines are available in M1, the warehouse should change on all the lines.*/
6944
6945 --9680007 added nvl condition to take care of null values.
6946 IF ((p_x_line_rec.ship_from_org_id <> p_old_line_rec.ship_from_org_id)
6947 AND p_old_line_rec.ship_from_org_id IS NOT NULL
6948 AND p_old_line_rec.ship_from_org_id <>FND_API.G_MISS_NUM
6949 AND l_schedule_ship_Date IS NULL)
6950 OR (p_x_line_rec.ship_from_org_id IS NOT NULL
6951 AND l_ship_from_org_id IS null )THEN --9680007 4241385 added OR condition.
6952
6953 FOR i IN c9 LOOP
6954
6955 BEGIN
6956 SELECT 1
6957 INTO l_validate_combinition
6958 FROM mtl_system_items_b msi,
6959 org_organization_definitions org
6960 WHERE msi.inventory_item_id= i.inventory_item_id
6961 AND org.organization_id=msi.organization_id
6962 AND sysdate<=nvl(org.disable_date,sysdate)
6963 AND org.organization_id=p_x_line_rec.ship_from_org_id
6964 AND rownum=1 ;
6965 EXCEPTION
6966 WHEN NO_DATA_FOUND THEN
6967 FND_MESSAGE.SET_NAME('ONT','ONT_INVALID_SET_ATTR_W');
6968 fnd_message.set_token('ATTR1',oe_order_util.GET_ATTRIBUTE_name('ITEM_ID'));
6969 fnd_message.set_token('ATTR2',oe_order_util.GET_ATTRIBUTE_name('SHIP_FROM_ORG_ID'));
6970 OE_MSG_PUB.ADD;
6971 RAISE FND_API.G_EXC_ERROR;
6972 END ;
6973 END LOOP ;
6974
6975 /* if the new warehouse is valid on all the lines in the set, then update
6976 the new warehouse on all the lines and also update the set with the new
6977 warehouse information*/
6978
6979 UPDATE oe_order_lines_all
6980 SET ship_from_org_id=p_x_line_rec.ship_from_org_id
6981 WHERE ship_set_id= p_x_line_rec.ship_set_id
6982 AND open_flag='Y';
6983
6984 Update_Set
6985 (p_Set_Id => p_x_line_rec.ship_set_id,
6986 p_Ship_From_Org_Id => p_x_line_rec.ship_from_org_id,
6987 p_Ship_To_Org_Id => p_x_line_rec.Ship_To_Org_Id,
6988 p_Schedule_Ship_Date => p_x_line_rec.Schedule_Ship_Date,
6989 p_Schedule_Arrival_Date => p_x_line_rec.Schedule_Arrival_Date,
6990 p_Freight_Carrier_Code => p_x_line_rec.Freight_Carrier_Code,
6991 p_Shipping_Method_Code => p_x_line_rec.Shipping_Method_Code,
6992 p_shipment_priority_code => p_x_line_rec.shipment_priority_code,
6993 X_Return_Status => l_return_status,
6994 x_msg_count => x_msg_count,
6995 x_msg_data => x_msg_data
6996 );
6997
6998 --bug 15871999
6999 OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
7000 --bug 15871999
7001
7002 /* we will come to the elsif block in the case where there are 3 lines in the
7003 order. First two lines with warehouse V1 and third with warehouse W1. All the
7004 lines are not scheduled. Now if we put line 1, and 2 in set 1 and try to put
7005 line 3 also in set 1 and save, it will not allow to put the line 3 in the set.
7006 This is becuase 3rd line is not part of the set yet. So we will not try to
7007 cascade the changes.*/
7008
7009 ELSIF l_schedule_ship_Date IS NULL THEN
7010 FND_MESSAGE.SET_NAME('ONT','ONT_DIFF_SET_ATTR');
7011 fnd_message.set_token('SHIP_SET',l_set_name_dsp);
7012 fnd_message.set_token('ATTRIBUTE',oe_order_util.GET_ATTRIBUTE_name('SHIP_FROM_ORG_ID'));
7013 OE_MSG_PUB.ADD;
7014 RAISE FND_API.G_EXC_ERROR;
7015 END IF ;
7016 END IF ;
7017 END IF ; --9680007
7018 /*Adding validation for ship_method also*/
7019
7020 IF NVL(p_x_line_rec.shipping_method_code,-99) <> NVL(l_shipping_method_code,-99) THEN
7021
7022 IF NVL(fnd_profile.value('ONT_SHIP_METHOD_FOR_SHIP_SET'),'N')='Y' THEN
7023
7024 /* we are checking that the line is already part of a set, and we are trying to
7025 change the ship method on the set. Like if there are 4 lines already in set 1,
7026 with warehouse V1. If we change the warehouse on one line to M1, then if all the
7027 4 lines are available in M1, the warehouse should change on all the lines.*/
7028
7029 IF ((NVL(p_x_line_rec.shipping_method_code,-99) <>
7030 NVL(p_old_line_rec.shipping_method_code,-99) ) --9680007 added nvl condition
7031 AND p_old_line_rec.shipping_method_code IS NOT NULL
7032 AND p_old_line_rec.shipping_method_code <>FND_API.G_MISS_CHAR
7033 AND l_schedule_ship_Date IS NULL)
7034 OR
7035 (p_x_line_rec.shipping_method_code IS NOT NULL
7036 AND l_shipping_method_code IS null ) -- 9680007 4241385
7037 THEN
7038
7039
7040 FOR i IN c9 LOOP
7041
7042 BEGIN
7043 SELECT 1
7044 INTO l_validate_combinition
7045 FROM OE_SHIP_METHODS_V
7046 WHERE lookup_code = p_x_line_rec.shipping_method_code
7047 AND ENABLED_FLAG = 'Y'
7048 AND SYSDATE BETWEEN NVL(START_DATE_ACTIVE, SYSDATE)
7049 AND NVL(END_DATE_ACTIVE, SYSDATE)
7050 AND ROWNUM = 1;
7051 EXCEPTION
7052 WHEN NO_DATA_FOUND THEN
7053
7054 FND_MESSAGE.SET_NAME('ONT','ONT_INVALID_SET_ATTR_S');
7055 fnd_message.set_token('ATTR',oe_order_util.GET_ATTRIBUTE_name('SHIPPING_METHOD_CODE'));
7056 OE_MSG_PUB.ADD;
7057 RAISE FND_API.G_EXC_ERROR;
7058 END ;
7059 END LOOP ;
7060
7061 /* if the new warehouse is valid on all the lines in the set, then update
7062 the new warehouse on all the lines and also update the set with the new
7063 warehouse information*/
7064
7065 UPDATE oe_order_lines_all
7066 SET shipping_method_code=p_x_line_rec.shipping_method_code
7067 WHERE ship_set_id= p_x_line_rec.ship_set_id
7068 AND open_flag='Y';
7069
7070 Update_Set
7071 (p_Set_Id => p_x_line_rec.ship_set_id,
7072 p_Ship_From_Org_Id => p_x_line_rec.ship_from_org_id,
7073 p_Ship_To_Org_Id => p_x_line_rec.Ship_To_Org_Id,
7074 p_Schedule_Ship_Date => p_x_line_rec.Schedule_Ship_Date,
7075 p_Schedule_Arrival_Date => p_x_line_rec.Schedule_Arrival_Date,
7076 p_Freight_Carrier_Code => p_x_line_rec.Freight_Carrier_Code,
7077 p_Shipping_Method_Code => p_x_line_rec.Shipping_Method_Code,
7078 p_shipment_priority_code => p_x_line_rec.shipment_priority_code,
7079 X_Return_Status => l_return_status,
7080 x_msg_count => x_msg_count,
7081 x_msg_data => x_msg_data
7082 );
7083
7084 -- bug 15871999
7085 OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
7086 -- bug 15871999
7087
7088 /* we will come to the elsif block in the case where there are 3 lines in the
7089 order. First two lines with warehouse V1 and third with warehouse W1. All the
7090 lines are not scheduled. Now if we put line 1, and 2 in set 1 and try to put
7091 line 3 also in set 1 and save, it will not allow to put the line 3 in the set.
7092 This is becuase 3rd line is not part of the set yet. So we will not try to
7093 cascade the changes.*/
7094
7095 ELSIF l_schedule_ship_Date IS NULL THEN
7096 FND_MESSAGE.SET_NAME('ONT','ONT_DIFF_SET_ATTR');
7097 fnd_message.set_token('SHIP_SET',l_set_name_dsp);
7098 fnd_message.set_token('ATTRIBUTE',oe_order_util.GET_ATTRIBUTE_name('SHIPPING_METHOD_CODE'));
7099 OE_MSG_PUB.ADD;
7100 RAISE FND_API.G_EXC_ERROR;
7101 END IF ;
7102 END IF ;
7103 END IF ;--ship methos profile option.
7104 END IF ;
7105 END IF ;
7106 END IF ; -- autoschedule sets.
7107 -- end 4241385
7108 IF l_create_set = 'Y' THEN
7109 IF l_debug_level > 0 THEN
7110 oe_debug_pub.add( ' BEFORE CREATING SET ' , 1 ) ;
7111 END IF;
7112 --12866052: Added Ship_to_org,SSD and SAD parameters
7113 Create_Set
7114 (p_Set_Name => l_set_name,
7115 p_Set_Type => l_set_type,
7116 p_Header_Id => p_x_line_rec.header_id,
7117 p_Ship_From_Org_Id => l_set_ship_from_org_id, --p_x_line_rec.ship_from_org_id, --ER 4241385
7118 p_Shipping_Method_Code => l_set_Shipping_Method_Code, --p_x_line_rec.Shipping_Method_Code, --ER 4241385
7119 p_Ship_To_Org_Id => l_set_ship_to,
7120 p_Schedule_Ship_Date => l_set_ssd,
7121 p_Schedule_Arrival_Date => l_set_sad,
7122 x_Set_Id => l_set_id,
7123 X_Return_Status => l_return_status,
7124 x_msg_count => x_msg_count,
7125 x_msg_data => x_msg_data);
7126
7127 /* Re Initialize the customer preference to false if it was set in the above
7128 if condition */
7129 g_cust_pref_set := FALSE;
7130
7131 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7132 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7133 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
7134 RAISE FND_API.G_EXC_ERROR;
7135 END IF;
7136 -- Populate set id on the line record accordingly
7137 IF l_set_type = 'ARRIVAL_SET' THEN
7138 p_x_line_rec.arrival_set_id := l_set_id;
7139 IF l_debug_level > 0 THEN
7140 oe_debug_pub.add( 'ARRIVAL SET ID IS '|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
7141 END IF;
7142 ELSIF l_set_type = 'SHIP_SET' THEN
7143 p_x_line_rec.ship_set_id := l_set_id;
7144 IF l_debug_level > 0 THEN
7145 oe_debug_pub.add( 'SHIP SET ID IS '|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
7146 END IF;
7147 END IF;
7148
7149 END IF ; -- Create Set is Y
7150 -- Now look at the cascade flag and update the children of the model
7151
7152 IF l_cascade_flag = 'Y' THEN
7153 /* Update set id on the children of the top model */
7154
7155 /*Changes for bug 6719457 start*/
7156 IF l_debug_level > 0 THEN
7157 oe_debug_pub.add( 'Cascade flag is yes',1);
7158 END IF;
7159 IF l_set_type = 'ARRIVAL_SET' THEN
7160 begin
7161 select ol.arrival_set_id
7162 into l_old_set_id
7163 from oe_order_lines_all ol
7164 where ol.top_model_line_id = p_x_line_rec.line_id
7165 and ol.line_id<>p_x_line_rec.line_id
7166 and rownum=1;
7167 exception
7168 when no_data_found then
7169 null;
7170 IF l_debug_level > 0 THEN
7171 oe_debug_pub.add('old arrival set does not exist');
7172 END IF;
7173 end;
7174 ELSIF l_set_type='SHIP_SET' THEN
7175 begin
7176 select distinct(ol.ship_set_id)
7177 into l_old_set_id
7178 from oe_order_lines_all ol
7179 where ol.top_model_line_id = p_x_line_rec.line_id
7180 and ol.line_id<>p_x_line_rec.line_id
7181 and rownum=1;
7182 exception
7183 when no_data_found then
7184 null;
7185 IF l_debug_level > 0 THEN
7186 oe_debug_pub.add('old Ship set does not exist');
7187 END IF;
7188 end;
7189 END IF;
7190 IF l_debug_level > 0 THEN
7191 oe_debug_pub.add( 'After selecting, old set id is:'||l_old_set_id,1);
7192 END IF;
7193 /*Changes for bug 6719457 End*/
7194
7195 Begin
7196 Update oe_order_lines_all l
7197 set
7198 arrival_set_id =
7199 decode(l_Set_type , 'ARRIVAL_SET', l_set_id,l.arrival_set_id),
7200 ship_set_id =
7201 decode(l_Set_type , 'SHIP_SET', l_set_id,l.ship_set_id),
7202 ship_from_org_id = p_x_line_rec.ship_from_org_id -- 2843738
7203 WHERE
7204 top_model_line_id = p_x_line_rec.line_id
7205 AND open_flag = 'Y'
7206 and l.item_type_code<>'SERVICE'; -- added for bug 8369694
7207
7208 /*Changes for bug 6719457 start*/
7209
7210 FOR i in C8 loop
7211 l_child_line_rec:=OE_LINE_UTIL.QUERY_ROW(p_line_id => i.line_id);
7212 IF l_child_line_rec.schedule_status_code is not null THEN
7213 l_action := OE_SCHEDULE_UTIL.OESCH_ACT_RESCHEDULE;
7214 ELSE
7215 l_action := OE_SCHEDULE_UTIL.OESCH_ACT_SCHEDULE;
7216 END IF;
7217
7218 IF OE_QUOTE_UTIL.G_COMPLETE_NEG='Y'
7219 THEN
7220 l_operation:=OE_GLOBALS.G_OPR_CREATE;
7221 ELSE
7222 l_operation:= l_child_line_rec.operation;
7223 END IF;
7224
7225 IF l_set_type='ARRIVAL_SET'
7226 AND i.arrival_set_id<>l_old_set_id THEN
7227
7228 l_entity_type := OE_SCHEDULE_UTIL.OESCH_ENTITY_ARRIVAL_SET;
7229
7230 IF l_debug_level > 0 THEN
7231 oe_debug_pub.add( 'new arrival set id id'||i.arrival_set_id);
7232 END IF;
7233
7234 IF OE_Delayed_Requests_PVT.Check_for_Request
7235 ( p_entity_code =>OE_GLOBALS.G_ENTITY_ALL
7236 , p_entity_id =>i.line_id
7237 , p_request_type =>OE_GLOBALS.G_GROUP_SCHEDULE)
7238 THEN
7239
7240
7241 OE_delayed_requests_Pvt.log_request
7242 (p_entity_code => OE_GLOBALS.G_ENTITY_ALL, --OE_GLOBALS.G_ENTITY_LINE,
7243 p_entity_id => l_child_line_rec.line_id,
7244 p_requesting_entity_code => OE_GLOBALS.G_ENTITY_LINE,
7245 p_requesting_entity_id => l_child_line_rec.line_id,
7246 p_request_type => OE_GLOBALS.G_GROUP_SCHEDULE,
7247 p_param1 => l_child_line_rec.arrival_set_id,
7248 p_param2 => l_child_line_rec.header_id,
7249 p_param3 => l_action,
7250 p_param4 => l_child_line_rec.ship_from_org_id,
7251 p_param5 => l_child_line_rec.ship_to_org_id,
7252 p_date_param1 => l_child_line_rec.schedule_ship_date,
7253 p_date_param2 => l_child_line_rec.schedule_arrival_date,
7254 p_date_param3 => l_child_line_rec.request_date,
7255 p_date_param4 => l_child_line_rec.request_date,
7256 p_date_param5 => l_child_line_rec.request_date,
7257 p_param6 => l_child_line_rec.ship_set_id,
7258 p_param7 => l_child_line_rec.arrival_set_id,
7259 p_param8 => l_entity_type,
7260 p_param9 => l_child_line_rec.ship_to_org_id,
7261 p_param10 => l_child_line_rec.ship_from_org_id,
7262 p_param11 =>l_child_line_rec.shipping_method_code,
7263 /* removed param11 to fix the bug 2916814 */
7264 p_param14 => l_operation,
7265 x_return_status => l_return_status
7266 );
7267 END IF;
7268 ELSIF l_set_type='SHIP_SET'
7269 AND i.ship_set_id<>l_old_set_id THEN
7270
7271 l_entity_type := OE_SCHEDULE_UTIL.OESCH_ENTITY_SHIP_SET;
7272
7273 IF l_debug_level > 0 THEN
7274 oe_debug_pub.add( 'new ship set id id'||i.ship_set_id);
7275 END IF;
7276
7277 IF OE_Delayed_Requests_PVT.Check_for_Request
7278 ( p_entity_code =>OE_GLOBALS.G_ENTITY_ALL
7279 , p_entity_id =>i.line_id
7280 , p_request_type =>OE_GLOBALS.G_GROUP_SCHEDULE)
7281 THEN
7282 OE_delayed_requests_Pvt.log_request
7283 (p_entity_code => OE_GLOBALS.G_ENTITY_ALL, --OE_GLOBALS.G_ENTITY_LINE,
7284 p_entity_id => l_child_line_rec.line_id,
7285 p_requesting_entity_code => OE_GLOBALS.G_ENTITY_LINE,
7286 p_requesting_entity_id => l_child_line_rec.line_id,
7287 p_request_type => OE_GLOBALS.G_GROUP_SCHEDULE,
7288 p_param1 => l_child_line_rec.ship_set_id,
7289 p_param2 => l_child_line_rec.header_id,
7290 p_param3 => l_action,
7291 p_param4 => l_child_line_rec.ship_from_org_id,
7292 p_param5 => l_child_line_rec.ship_to_org_id,
7293 p_date_param1 => l_child_line_rec.schedule_ship_date,
7294 p_date_param2 => l_child_line_rec.schedule_arrival_date,
7295 p_date_param3 => l_child_line_rec.request_date,
7296 p_date_param4 => l_child_line_rec.request_date,
7297 p_date_param5 => l_child_line_rec.request_date,
7298 p_param6 => l_child_line_rec.ship_set_id,
7299 p_param7 => l_child_line_rec.arrival_set_id,
7300 p_param8 => l_entity_type,
7301 p_param9 => l_child_line_rec.ship_to_org_id,
7302 p_param10 => l_child_line_rec.ship_from_org_id,
7303 p_param11 =>l_child_line_rec.shipping_method_code,
7304 /* removed param11 to fix the bug 2916814 */
7305 p_param14 => l_operation,
7306 x_return_status => l_return_status
7307 );
7308 END IF;
7309 END IF;
7310 IF l_debug_level > 0 THEN
7311 oe_debug_pub.add( 'After loggin the group_schedule request for line '||i.line_id,1);
7312 END IF;
7313 END LOOP;
7314
7315 /*Changes for bug 6719457 End*/
7316
7317
7318 FOR optionrec in C5
7319 Loop
7320 IF optionrec.shipping_interfaced_flag = 'Y' THEN
7321
7322 IF l_debug_level > 0 THEN
7323 oe_debug_pub.add( 'UPDATE SHIPPING : CHILDREN OF MODEL FOR SETS ' || TO_CHAR ( OPTIONREC.LINE_ID ) , 1 ) ;
7324 END IF;
7325
7326 OE_Delayed_Requests_Pvt.Log_Request(
7327 p_entity_code => OE_GLOBALS.G_ENTITY_LINE,
7328 p_entity_id => optionrec.line_id,
7329 p_requesting_entity_code => OE_GLOBALS.G_ENTITY_LINE,
7330 p_requesting_entity_id => optionrec.line_id,
7331 p_request_type => OE_GLOBALS.G_UPDATE_SHIPPING,
7332 p_request_unique_key1 => OE_GLOBALS.G_OPR_UPDATE,
7333 p_param1 => FND_API.G_TRUE,
7334 x_return_status => l_return_status);
7335
7336 END IF;
7337 End loop;
7338
7339
7340 -- Setting G_CASCADING_REQUEST_LOGGED to requery the lines in the form
7341 OE_GLOBALS.G_CASCADING_REQUEST_LOGGED := TRUE;
7342
7343 exception
7344 when others then
7345 null;
7346 end;-- Begin of the update
7347
7348 END IF; -- Cascade Flag
7349 ELSE -- IF not external
7350 IF NOT(p_x_line_rec.operation = OE_GLOBALS.G_OPR_CREATE
7351 AND p_x_line_rec.top_model_line_id <> p_x_line_rec.line_id)
7352 AND p_x_line_rec.top_model_line_id IS NOT NULL THEN
7353
7354 IF p_x_line_rec.ship_set IS NOT NULL AND
7355 p_x_line_rec.ship_set <> FND_API.G_MISS_CHAR THEN
7356 IF oe_set_util.Set_Exist(p_set_name => p_x_line_rec.ship_set,
7357 p_set_type => 'SHIP_SET',
7358 p_header_id =>p_x_line_rec.header_id,
7359 x_set_id => p_x_line_rec.ship_set_id) THEN
7360 null;
7361 END IF;
7362 ELSIF p_x_line_rec.arrival_set IS NOT NULL AND
7363 p_x_line_rec.arrival_set <> FND_API.G_MISS_CHAR THEN
7364 IF oe_set_util.Set_Exist(p_set_name => p_x_line_rec.arrival_set,
7365 p_set_type => 'ARRIVAL_SET',
7366 p_header_id =>p_x_line_rec.header_id,
7367 x_set_id => p_x_line_rec.arrival_set_id) THEN
7368 null;
7369 END IF;
7370 END IF;
7371
7372
7373 IF NOT OE_GLOBALS.EQUAL (p_x_line_rec.ship_set_id,
7374 p_old_line_rec.ship_set_id) OR
7375 NOT OE_GLOBALS.EQUAL (p_x_line_rec.arrival_Set_id,
7376 p_old_line_rec.arrival_Set_id) THEN
7377
7378
7379 IF l_debug_level > 0 THEN
7380 oe_debug_pub.add( 'SHIP SET NAME-' || P_X_LINE_REC.SHIP_SET ) ;
7381 END IF;
7382 IF l_debug_level > 0 THEN
7383 oe_debug_pub.add( 'OLD SHIP SET NAME-' || P_OLD_LINE_REC.SHIP_SET ) ;
7384 END IF;
7385 IF l_debug_level > 0 THEN
7386 oe_debug_pub.add( 'SHIP SET-' || P_X_LINE_REC.SHIP_SET_ID ) ;
7387 END IF;
7388 IF l_debug_level > 0 THEN
7389 oe_debug_pub.add( 'OLD SHIP SET-' || P_OLD_LINE_REC.SHIP_SET_ID ) ;
7390 END IF;
7391 IF l_debug_level > 0 THEN
7392 oe_debug_pub.add( 'ARRIVAL SET-' || P_X_LINE_REC.ARRIVAL_SET_ID ) ;
7393 END IF;
7394 IF l_debug_level > 0 THEN
7395 oe_debug_pub.add( 'ARRIVAL SHIP SET-' || P_OLD_LINE_REC.ARRIVAL_SET_ID ) ;
7396 END IF;
7397 FND_MESSAGE.SET_NAME('ONT','OE_INVALID_SET_OPR');
7398 -- FND_MESSAGE.SET_TOKEN('ITEMTYPE', p_x_line_rec.item_type_code);
7399 OE_MSG_PUB.ADD;
7400 IF l_debug_level > 0 THEN
7401 oe_debug_pub.add( 'SET- NOT ALLOWED FOR THIS ITEMTYPE' ) ;
7402 END IF;
7403 RAISE FND_API.G_EXC_ERROR;
7404 END IF;
7405
7406
7407 END IF;
7408 END IF; -- If not EXTERNAL
7409 << NO_PROCESS >>
7410 NULL;
7411 IF l_debug_level > 0 THEN
7412 oe_debug_pub.add( 'SHIP SET ID IS '|| P_X_LINE_REC.SHIP_SET_ID , 1 ) ;
7413 END IF;
7414 IF l_debug_level > 0 THEN
7415 oe_debug_pub.add( 'ARRIVAL SET ID IS '|| P_X_LINE_REC.ARRIVAL_SET_ID , 1 ) ;
7416 END IF;
7417
7418
7419 OE_DEBUG_PUB.Add('Automatic Fulfillment Set:'||p_x_line_rec.fulfillment_set);
7420
7421 IF p_x_line_rec.operation = OE_GLOBALS.G_OPR_CREATE THEN
7422
7423 OE_Order_Cache.Load_Order_Header(p_x_line_rec.header_id);
7424
7425 IF OE_ORDER_CACHE.g_header_rec.default_fulfillment_set = 'Y' THEN
7426
7427 IF l_debug_level > 0 THEN
7428 OE_DEBUG_PUB.Add('Default Fulfillment set to YES!!!',1 ) ;
7429 END IF;
7430
7431 l_set_pref_type := 'FULFILLMENT_SET';
7432
7433 -- Check if the system set is already created
7434
7435 OPEN C6;
7436 FETCH C6 INTO l_fulfillment_set;
7437 CLOSE C6;
7438
7439 IF l_debug_level > 0 THEN
7440 OE_DEBUG_PUB.Add('After Checking System Set:'||l_fulfillment_set) ;
7441 END IF;
7442
7443 l_x_line_rec := p_x_line_rec;
7444
7445 IF l_fulfillment_set IS NULL THEN
7446
7447 -- Get the Maximum Set Name of System generated sets
7448
7449 OPEN C1;
7450 FETCH C1 INTO lsettempname;
7451 CLOSE C1;
7452
7453 OE_DEBUG_PUB.Add('Temp Set Name:'||lsettempname);
7454
7455 IF lsettempname IS NULL THEN
7456 lsettempname := 1;
7457
7458 LOOP
7459 OPEN C3;
7460 FETCH C3 INTO tempname;
7461 CLOSE C3;
7462
7463 IF tempname is not null then
7464 lsettempname := lsettempname + 1;
7465
7466 ELSE
7467 EXIT;
7468 END IF;
7469
7470 END LOOP ;
7471 ELSE
7472 lsettempname := lsettempname;
7473 END IF;
7474
7475 l_x_line_rec.fulfillment_set := lsettempname;
7476
7477 ELSE
7478 l_x_line_rec.fulfillment_set := l_fulfillment_set;
7479
7480 END IF;
7481
7482 IF l_debug_level > 0 THEN
7483 OE_DEBUG_PUB.Add('Auto Fulfillment Set:'||p_x_line_rec.fulfillment_set);
7484 OE_DEBUG_PUB.Add('Item Type:'||p_x_line_rec.item_type_code);
7485 OE_DEBUG_PUB.Add('Service Reference:'||p_x_line_rec.service_reference_line_id);
7486 END IF;
7487
7488 IF p_x_line_rec.fulfillment_set IS NULL THEN
7489 p_x_line_rec.fulfillment_set := l_x_line_rec.fulfillment_set;
7490 END IF;
7491
7492 IF (l_x_line_rec.item_type_code <> 'SERVICE'
7493 OR l_x_line_rec.subscription_enable_flag='Y'
7494 ) OR --sol_ord_er #16014165
7495 (l_x_line_rec.item_type_code = 'SERVICE' AND
7496 l_x_line_rec.service_reference_line_id IS NOT NULL AND
7497 Is_Service_Eligible(l_x_line_rec) )THEN
7498
7499 Validate_Fulfillment_Set
7500 ( p_x_line_rec => l_x_line_rec,
7501 p_old_line_rec => p_old_line_rec,
7502 p_system_set => 'Y');
7503
7504 END IF;
7505 END IF;
7506
7507 END IF;
7508
7509 OE_DEBUG_PUB.Add('Before User Defined Ful Set:'||p_x_line_rec.item_type_code);
7510
7511 IF p_x_line_rec.fulfillment_set is NOT NULL AND
7512 (p_x_line_rec.item_type_code <> 'SERVICE') OR
7513 (p_x_line_rec.item_type_code = 'SERVICE' AND
7514 p_x_line_rec.service_reference_line_id IS NOT NULL AND
7515 Is_Service_Eligible(p_x_line_rec) )THEN
7516
7517 Validate_Fulfillment_Set
7518 ( p_x_line_rec => p_x_line_rec,
7519 p_old_line_rec => p_old_line_rec);
7520
7521 END IF;
7522
7523 END IF; -- Split action code
7524 END IF; -- g old arrival set path
7525
7526
7527 IF l_debug_level > 0 THEN
7528 oe_debug_pub.add( 'EXIT PROCEDURE DEFAULT LINE SET' , 1 ) ;
7529 END IF;
7530
7531
7532 EXCEPTION
7533 WHEN FND_API.G_EXC_ERROR THEN
7534
7535 RAISE FND_API.G_EXC_ERROR;
7536
7537
7538 WHEN OTHERS THEN
7539
7540 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7541 THEN
7542 OE_MSG_PUB.Add_Exc_Msg
7543 ( G_PKG_NAME
7544 , 'Default_Line_Set'
7545 );
7546 END IF;
7547
7548 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7549
7550
7551
7552
7553 END Default_Line_Set;
7554
7555 Procedure Validate_Fulfillment_Set
7556 ( p_x_line_rec IN OUT NOCOPY oe_order_pub.line_rec_type,
7557 p_old_line_rec IN oe_order_pub.line_rec_type,
7558 p_system_set IN VARCHAR2 DEFAULT 'N'
7559 )
7560 IS
7561 l_set_id number;
7562 l_cascade_flag varchar2(1) := 'N';
7563 l_create_set varchar2(1) := 'N';
7564 l_set_type varchar2(30) ;
7565 l_set_name varchar2(2000);
7566 x_msg_data varchar2(32000);
7567 x_msg_count number ;
7568 l_return_status varchar2(30);
7569 l_ful_exists varchar2(1) := 'N';
7570 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7571 -- 4925992
7572 l_top_model_line_id NUMBER;
7573 BEGIN
7574
7575 OE_DEBUG_PUB.Add('Entering Validate Fulfillment Set');
7576
7577 IF --p_x_line_rec.source_type_code <> 'EXTERNAL' AND --Bug #4537341
7578 p_x_line_rec.shipped_quantity IS NULL AND
7579 (p_x_line_rec.item_type_code = 'STANDARD' OR
7580 p_x_line_rec.top_model_line_id =
7581 p_x_line_rec.line_id OR
7582 p_x_line_rec.item_type_code = 'SERVICE') AND -- the following added for 3504787
7583 p_x_line_rec.open_flag = 'Y' and
7584 nvl(p_x_line_rec.cancelled_flag, 'N') <> 'Y' AND
7585 (p_x_line_rec.ordered_quantity <> 0 OR -- OR added for bug4024986
7586 p_x_line_rec.ordered_quantity IS NULL ) AND
7587 (nvl(p_x_line_rec.fulfilled_flag, 'N') <> 'Y' OR
7588 fulfill_sts(p_x_line_rec.line_id) = 'NOTIFIED') THEN
7589 l_set_id := null;
7590 l_set_name := null;
7591 l_set_type := null;
7592 l_create_set := 'N';
7593 l_cascade_flag := 'N';
7594 l_ful_exists := 'N';
7595
7596 IF (p_x_line_rec.fulfillment_set IS NOT NULL AND
7597 p_x_line_rec.fulfillment_set <> FND_API.G_MISS_CHAR)THEN
7598 IF Set_Exist(p_set_name =>p_x_line_rec.fulfillment_set,
7599 p_set_type => 'FULFILLMENT_SET',
7600 p_header_id =>p_x_line_rec.header_id,
7601 x_set_id => l_set_id) THEN
7602
7603 -- 4925992
7604 IF p_x_line_rec.line_id = p_x_line_rec.top_model_line_id
7605 AND p_x_line_rec.operation <> 'CREATE'
7606 THEN
7607 l_top_model_line_id := p_x_line_rec.line_id;
7608 ELSE
7609 l_top_model_line_id := NULL;
7610 END IF;
7611
7612 Create_Fulfillment_Set(p_line_id => p_x_line_rec.line_id,
7613 -- 4925992
7614 p_top_model_line_id => l_top_model_line_id,
7615 p_set_id => l_set_id);
7616 ELSE
7617 l_create_set := 'Y';
7618
7619 END IF;
7620
7621 l_ful_exists := 'Y';
7622
7623 ELSIF NOT OE_GLOBALS.EQUAL(p_x_line_rec.fulfillment_set_id,
7624 p_old_line_rec.fulfillment_set_id) THEN
7625 IF NOT Set_Exist(p_set_id => p_x_line_rec.fulfillment_set_id) THEN
7626
7627 p_x_line_rec.fulfillment_set_id := NULL;
7628 RETURN;
7629 ELSE
7630 -- 4925992
7631 IF p_x_line_rec.line_id = p_x_line_rec.top_model_line_id
7632 AND p_x_line_rec.operation <> 'CREATE'
7633 THEN
7634 l_top_model_line_id := p_x_line_rec.line_id;
7635 ELSE
7636 l_top_model_line_id := NULL;
7637 END IF;
7638
7639 Create_Fulfillment_Set(p_line_id => p_x_line_rec.line_id,
7640 -- 4925992
7641 p_top_model_line_id => l_top_model_line_id,
7642 p_set_id => l_set_id);
7643 END IF;
7644
7645 l_ful_exists := 'Y';
7646
7647 END IF;
7648
7649 -- Create the fulfillment set only if the fulfillment set
7650 -- request exists and l_create_flag is set to 'Y'
7651
7652 IF l_ful_exists = 'Y' AND l_create_set = 'Y' THEN
7653
7654 Create_Set
7655 (p_Set_Name => p_x_line_rec.fulfillment_Set,
7656 p_Set_Type => 'FULFILLMENT_SET',
7657 p_Header_Id => p_x_line_rec.header_id,
7658 p_system_set => p_system_set,
7659 x_Set_Id => l_set_id,
7660 X_Return_Status => l_return_status,
7661 x_msg_count => x_msg_count,
7662 x_msg_data => x_msg_data);
7663
7664 IF l_set_id is not null THEN
7665 -- 4925992
7666 IF p_x_line_rec.line_id = p_x_line_rec.top_model_line_id
7667 AND p_x_line_rec.operation <> 'CREATE'
7668 THEN
7669 l_top_model_line_id := p_x_line_rec.line_id;
7670 ELSE
7671 l_top_model_line_id := NULL;
7672 END IF;
7673
7674 Create_Fulfillment_Set(p_line_id => p_x_line_rec.line_id,
7675 -- 4925992
7676 p_top_model_line_id => l_top_model_line_id,
7677 p_set_id => l_set_id);
7678 END IF;
7679
7680 END IF;
7681
7682 -- Cascading of fulfillment sets to options is not required in case of
7683 -- a model since the create fulfillment will take care of cascading the line
7684 -- passed is a model line
7685
7686 END IF;
7687
7688 OE_DEBUG_PUB.Add('Exiting Validate Fulfillment Set');
7689
7690 EXCEPTION
7691 WHEN OTHERS THEN
7692
7693 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7694 THEN
7695 OE_MSG_PUB.Add_Exc_Msg
7696 ( G_PKG_NAME
7697 , 'Validate_Fulfillment_Set'
7698 );
7699 END IF;
7700
7701 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7702
7703 End Validate_Fulfillment_Set;
7704
7705 -- 4026756
7706 /*
7707 PROCEDURE: Delete_Set
7708 DESCRIPTION:This api will delete set record from oe_sets table if
7709 the set is not associated with any line.
7710 */
7711 Procedure Delete_Set(p_request_rec IN OE_ORDER_PUB.request_rec_type,
7712 x_return_status OUT NOCOPY VARCHAR2)
7713 IS
7714 l_dummy NUMBER;
7715
7716 --
7717 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7718 --
7719 BEGIN
7720 IF l_debug_level > 0 THEN
7721 oe_debug_pub.add( 'ENTERING DELETE SET' , 3 ) ;
7722 oe_debug_pub.add( 'HEADER ID '||p_request_rec.param2 , 3 ) ;
7723 oe_debug_pub.add( 'SET TYPE'||p_request_rec.param3 , 3 ) ;
7724 oe_debug_pub.add( 'SET ID'||p_request_rec.param1 , 3 ) ;
7725 END IF;
7726 x_return_status := FND_API.G_RET_STS_SUCCESS;
7727 BEGIN
7728 IF p_request_rec.param3 = oe_schedule_util.OESCH_ENTITY_SHIP_SET THEN
7729 SELECT 1
7730 INTO l_dummy
7731 FROM oe_order_lines_all
7732 WHERE header_id=p_request_rec.param2
7733 AND ship_set_id =p_request_rec.param1
7734 AND ROWNUM =1;
7735
7736 IF l_debug_level > 0 THEN
7737 oe_debug_pub.add( 'LINE EXISTS WITH THE SHIP SET' , 3 ) ;
7738 END IF;
7739 ELSIF p_request_rec.param3 = oe_schedule_util.OESCH_ENTITY_ARRIVAL_SET THEN
7740 SELECT 1
7741 INTO l_dummy
7742 FROM oe_order_lines_all
7743 WHERE header_id=p_request_rec.param2
7744 AND arrival_set_id =p_request_rec.param1
7745 AND ROWNUM =1;
7746
7747 IF l_debug_level > 0 THEN
7748 oe_debug_pub.add( 'LINE EXISTS WITH THE ARRIVAL SET' , 3 ) ;
7749 END IF;
7750 END IF;
7751 EXCEPTION
7752 WHEN NO_DATA_FOUND THEN
7753 IF l_debug_level > 0 THEN
7754 oe_debug_pub.add( 'DELETING SET '||p_request_rec.param1 , 3 ) ;
7755 END IF;
7756
7757 DELETE FROM OE_SETS
7758 WHERE set_id = p_request_rec.param1;
7759
7760 WHEN OTHERS THEN
7761 NULL;
7762 IF l_debug_level > 0 THEN
7763 oe_debug_pub.add( 'IN OTHERS EXCEPTION OF DELETE SET ' , 3 ) ;
7764 END IF;
7765 END;
7766 IF l_debug_level > 0 THEN
7767 oe_debug_pub.add( 'EXITING DELETE SET' , 3 ) ;
7768 END IF;
7769 EXCEPTION
7770 WHEN FND_API.G_EXC_ERROR THEN
7771 x_return_status := FND_API.G_RET_STS_ERROR;
7772
7773 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7774 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7775
7776 WHEN OTHERS THEN
7777 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7778
7779 IF OE_MSG_PUB.Check_Msg_Level(OE_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
7780 THEN
7781 OE_MSG_PUB.Add_Exc_Msg
7782 ( G_PKG_NAME
7783 , 'Delete_Set'
7784 );
7785 END IF;
7786 END Delete_Set;
7787
7788 /*--------------------------------------------------------------------------
7789 * Function Name : Stand_Alone_set_exists
7790 * Description : This procedure check if the set contains any Inactive Demand
7791 * Line or not.Will return TRUE if there is any Inactive Demand
7792 * Line in the set.It will return TRUE if this is a new set.
7793 * Parameters : p_ship_set_id IN NUMBER Ship Set Id
7794 * p_arrival_set_id IN NUMBER Arrival Set id
7795 * p_header_id IN NUMBER Header id
7796 * p_line_id IN NUMBER Line Id
7797 * p_sch_level IN VARCHAR2 Scheduling Level of the line
7798 * -------------------------------------------------------------------------*/
7799
7800
7801 FUNCTION Stand_Alone_set_exists (p_ship_set_id IN NUMBER,
7802 p_arrival_set_id IN NUMBER,
7803 p_header_id IN NUMBER,
7804 p_line_id IN NUMBER,
7805 p_sch_level IN VARCHAR2)
7806 RETURN BOOLEAN IS
7807 l_row_exists NUMBER;
7808 l_scheduling_Level_code VARCHAR2(30);
7809 l_line_type_id NUMBER;
7810 l_debug_level CONSTANT NUMBER := oe_debug_pub.g_debug_level;
7811 BEGIN
7812 IF l_debug_level > 0 THEN
7813 oe_debug_pub.add( 'ENTERING STAND_ALONE_SET_EXISTS '||p_ship_set_id, 1 ) ;
7814 END IF;
7815
7816 IF p_ship_set_id IS NOT NULL THEN
7817 SELECT line_type_id INTO l_line_type_id
7818 FROM OE_ORDER_LINES_ALL
7819 WHERE header_id = p_header_id
7820 AND ship_set_id = p_ship_set_id
7821 AND line_id <> p_line_id
7822 AND rownum=1;
7823 l_scheduling_level_code
7824 := Oe_Schedule_Util.Get_Scheduling_Level(p_header_id,
7825 l_line_type_id);
7826 -- Return True if sch level of new line is 4/5 and set line is also 4/5
7827 -- Also return true if line is a active demand line and set line is also
7828 -- an active demand line
7829 IF l_scheduling_level_code= Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7830 l_scheduling_level_code = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7831 IF p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7832 p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7833
7834 RETURN TRUE;
7835 ELSE
7836 RETURN FALSE;
7837 END IF;
7838 ELSIF p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7839 p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7840 RETURN FALSE;
7841 ELSE
7842 RETURN TRUE;
7843 END IF;
7844 ELSE
7845 SELECT line_type_id INTO l_line_type_id
7846 FROM OE_ORDER_LINES_ALL
7847 WHERE header_id = p_header_id
7848 AND arrival_set_id = p_arrival_set_id
7849 AND line_id <> p_line_id
7850 AND rownum=1;
7851 l_scheduling_level_code
7852 := Oe_Schedule_Util.Get_Scheduling_Level(p_header_id,
7853 l_line_type_id);
7854
7855 IF l_scheduling_level_code= Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7856 l_scheduling_level_code = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7857 IF p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7858 p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7859
7860 RETURN TRUE;
7861 ELSE
7862 RETURN FALSE;
7863 END IF;
7864 ELSIF p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FOUR OR
7865 p_sch_level = Oe_Schedule_Util.SCH_LEVEL_FIVE THEN
7866 RETURN FALSE;
7867 ELSE
7868 RETURN TRUE;
7869 END IF;
7870 END IF;
7871 EXCEPTION
7872 WHEN NO_DATA_FOUND THEN
7873 -- New set, return true.
7874 RETURN TRUE;
7875
7876 END Stand_Alone_set_exists;
7877
7878 END OE_Set_util;
7879