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