DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_SET_UTIL

Source


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