DBA Data[Home] [Help]

PACKAGE BODY: APPS.OE_SET_UTIL

Source


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