DBA Data[Home] [Help]

PACKAGE BODY: APPS.MRP_FLOW_SCHEDULE_PUB

Source


1 PACKAGE BODY MRP_Flow_Schedule_PUB AS
2 /* $Header: MRPPWFSB.pls 120.1.12010000.2 2008/08/20 19:26:14 adasa ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'MRP_Flow_Schedule_PUB';
7 
8 --  Forward declaration of Procedure Id_To_Value
9 /*
10 Enhancement : 2665434
11 Description : Changed the usage of the record type from old record type
12 (MRP_FLow_Schedule_PUB.Flow_Schedule_Rec_Type) to new record type
13 (MRP_FLow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type)
14 */
15 PROCEDURE Id_To_Value
16 (   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
17 ,   x_flow_schedule_val_rec         OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
18 );
19 
20 --  Forward declaration of procedure Value_To_Id
21 /*
22 Enhancement : 2665434
23 Description : Changed the usage of the record type from old record type
24 (MRP_FLow_Schedule_PUB.Flow_Schedule_Rec_Type) to new record type
25 (MRP_FLow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type)
26 */
27 PROCEDURE Value_To_Id
28 (   x_return_status                 OUT NOCOPY VARCHAR2
29 ,   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
30 ,   p_flow_schedule_val_rec         IN  MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
31 ,   x_flow_schedule_rec             OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
32 );
33 
34 --  Start of Comments
35 --  API name    Process_Flow_Schedule
36 --  Type        Public
37 --  Function
38 --
39 --  Pre-reqs
40 --
41 --  Parameters
42 --
43 --  Version     Current version = 1.0
44 --              Initial version = 1.0
45 --
46 --  Notes
47 --
48 --  End of Comments
49 
50 PROCEDURE Process_Flow_Schedule
51 (   p_api_version_number            IN  NUMBER
52 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
53 ,   p_return_values                 IN  VARCHAR2 := FND_API.G_FALSE
54 ,   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE
55 ,   x_return_status                 OUT NOCOPY VARCHAR2
56 ,   x_msg_count                     OUT NOCOPY NUMBER
57 ,   x_msg_data                      OUT NOCOPY VARCHAR2
58 ,   p_flow_schedule_rec             IN  Flow_Schedule_Rec_Type :=
59                                         G_MISS_FLOW_SCHEDULE_REC
60 ,   p_flow_schedule_val_rec         IN  Flow_Schedule_Val_Rec_Type :=
61                                         G_MISS_FLOW_SCHEDULE_VAL_REC
62 ,   x_flow_schedule_rec             OUT NOCOPY Flow_Schedule_Rec_Type
63 ,   x_flow_schedule_val_rec         OUT NOCOPY Flow_Schedule_Val_Rec_Type
64 ,   p_explode_bom		    IN	VARCHAR2 := 'N'
65 )
66 IS
67 l_api_version_number          CONSTANT NUMBER := 1.0;
68 l_api_name                    CONSTANT VARCHAR2(30):= 'Process_Flow_Schedule';
69 l_control_rec                 MRP_GLOBALS.Control_Rec_Type;
70 l_return_status               VARCHAR2(1);
71 l_flow_schedule_rec           MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
72 l_p_flow_schedule_rec         MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
73 l_p_old_flow_schedule_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
74 l_p_flow_schedule_val_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type;
75 l_x_flow_schedule_val_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type;
76 l_error_msg		VARCHAR2(2000);
77 l_error_code		NUMBER;
78 BEGIN
79 
80     --  Standard call to check for call compatibility
81 
82     IF NOT FND_API.Compatible_API_Call
83            (   l_api_version_number
84            ,   p_api_version_number
85            ,   l_api_name
86            ,   G_PKG_NAME
87            )
88     THEN
89         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
90     END IF;
91 
92     /*bug 5292986 - set the operation unit so project/task can be validated correctly */
93     fnd_profile.PUT('MFG_ORGANIZATION_ID', p_flow_schedule_rec.organization_id);
94 
95     MRP_Flow_Schedule_PVT.PUB_Flow_Sched_Rec_To_PVT(p_flow_schedule_rec,l_p_flow_schedule_rec);
96     MRP_Flow_Schedule_PVT.PUB_Flow_Sched_Val_Rec_To_PVT(p_flow_schedule_val_rec,l_p_flow_schedule_val_rec);
97 
98     --  Perform Value to Id conversion
99 
100     Value_To_Id
101     (   x_return_status               => l_return_status
102     ,   p_flow_schedule_rec           => l_p_flow_schedule_rec
103     ,   p_flow_schedule_val_rec       => l_p_flow_schedule_val_rec
104     ,   x_flow_schedule_rec           => l_flow_schedule_rec
105     );
106 
107     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
108         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
110         RAISE FND_API.G_EXC_ERROR;
111     END IF;
112 
113 
114     --  Call MRP_Flow_Schedule_PVT.Process_Flow_Schedule
115 
116     MRP_Flow_Schedule_PVT.Process_Flow_Schedule
117     (   p_api_version_number          => 1.0
118     ,   p_init_msg_list               => p_init_msg_list
119     ,   p_validation_level            => FND_API.G_VALID_LEVEL_FULL
120     ,   p_commit                      => p_commit
121     ,   x_return_status               => x_return_status
122     ,   x_msg_count                   => x_msg_count
123     ,   x_msg_data                    => x_msg_data
124     ,   p_control_rec                 => l_control_rec
125     ,   p_flow_schedule_rec           => l_flow_schedule_rec
126     ,   p_old_flow_schedule_rec       => l_p_old_flow_schedule_rec
127     ,   x_flow_schedule_rec           => l_flow_schedule_rec
128     ,   p_explode_bom		      => 'Y'
129     );
130 
131     --  Load Id OUT parameters.
132 
133     MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Rec_To_PUB(l_flow_schedule_rec,x_flow_schedule_rec);
134 
135 
136     --  If p_return_values is TRUE then convert Ids to Values.
137 
138     IF FND_API.to_Boolean(p_return_values) THEN
139 
140         Id_To_Value
141         (   p_flow_schedule_rec           => l_flow_schedule_rec
142         ,   x_flow_schedule_val_rec       => l_x_flow_schedule_val_rec
143         );
144 
145 	MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Val_Rec_To_PUB(l_x_flow_schedule_val_rec,x_flow_schedule_val_rec);
146 
147     END IF;
148 
149 EXCEPTION
150 
151     WHEN FND_API.G_EXC_ERROR THEN
152 
153         x_return_status := FND_API.G_RET_STS_ERROR;
154 
155         --  Get message count and data
156 
157         FND_MSG_PUB.Count_And_Get
158         (   p_count                       => x_msg_count
159         ,   p_data                        => x_msg_data
160         );
161 
162     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
163 
164         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
165 
166         --  Get message count and data
167 
168         FND_MSG_PUB.Count_And_Get
169         (   p_count                       => x_msg_count
170         ,   p_data                        => x_msg_data
171         );
172 
173     WHEN OTHERS THEN
174 
175         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
176 
177         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
178         THEN
179             FND_MSG_PUB.Add_Exc_Msg
180             (   G_PKG_NAME
181             ,   'Process_Flow_Schedule'
182             );
183         END IF;
184 
185         --  Get message count and data
186 
187         FND_MSG_PUB.Count_And_Get
188         (   p_count                       => x_msg_count
189         ,   p_data                        => x_msg_data
190         );
191 
192 END Process_Flow_Schedule;
193 
194 --  Start of Comments
195 --  API name    Lock_Flow_Schedule
196 --  Type        Public
197 --  Function
198 --
199 --  Pre-reqs
200 --
201 --  Parameters
202 --
203 --  Version     Current version = 1.0
204 --              Initial version = 1.0
205 --
206 --  Notes
207 --
208 --  End of Comments
209 
210 PROCEDURE Lock_Flow_Schedule
211 (   p_api_version_number            IN  NUMBER
212 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
213 ,   p_return_values                 IN  VARCHAR2 := FND_API.G_FALSE
214 ,   x_return_status                 OUT NOCOPY VARCHAR2
215 ,   x_msg_count                     OUT NOCOPY NUMBER
216 ,   x_msg_data                      OUT NOCOPY VARCHAR2
217 ,   p_flow_schedule_rec             IN  Flow_Schedule_Rec_Type :=
218                                         G_MISS_FLOW_SCHEDULE_REC
219 ,   p_flow_schedule_val_rec         IN  Flow_Schedule_Val_Rec_Type :=
220                                         G_MISS_FLOW_SCHEDULE_VAL_REC
221 ,   x_flow_schedule_rec             OUT NOCOPY Flow_Schedule_Rec_Type
222 ,   x_flow_schedule_val_rec         OUT NOCOPY Flow_Schedule_Val_Rec_Type
223 )
224 IS
225 l_api_version_number          CONSTANT NUMBER := 1.0;
226 l_api_name                    CONSTANT VARCHAR2(30):= 'Lock_Flow_Schedule';
227 l_return_status               VARCHAR2(1);
228 l_flow_schedule_rec           MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
229 l_p_flow_schedule_rec         MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
230 l_p_flow_schedule_val_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type;
231 l_x_flow_schedule_val_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type;
232 BEGIN
233 
234     --  Standard call to check for call compatibility
235 
236     IF NOT FND_API.Compatible_API_Call
237            (   l_api_version_number
238            ,   p_api_version_number
239            ,   l_api_name
240            ,   G_PKG_NAME
241            )
242     THEN
243         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
244     END IF;
245 
246     MRP_Flow_Schedule_PVT.PUB_Flow_Sched_Rec_To_PVT(p_flow_schedule_rec,l_p_flow_schedule_rec);
247     MRP_Flow_Schedule_PVT.PUB_Flow_Sched_Val_Rec_To_PVT(p_flow_schedule_val_rec,l_p_flow_schedule_val_rec);
248 
249     --  Perform Value to Id conversion
250 
251     Value_To_Id
252     (   x_return_status               => l_return_status
253     ,   p_flow_schedule_rec           => l_p_flow_schedule_rec
254     ,   p_flow_schedule_val_rec       => l_p_flow_schedule_val_rec
255     ,   x_flow_schedule_rec           => l_flow_schedule_rec
256     );
257 
258     IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
259         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
260     ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
261         RAISE FND_API.G_EXC_ERROR;
262     END IF;
263 
264 
265     --  Call MRP_Flow_Schedule_PVT.Lock_Flow_Schedule
266 
267     MRP_Flow_Schedule_PVT.Lock_Flow_Schedule
268     (   p_api_version_number          => 1.0
269     ,   p_init_msg_list               => p_init_msg_list
270     ,   x_return_status               => x_return_status
271     ,   x_msg_count                   => x_msg_count
272     ,   x_msg_data                    => x_msg_data
273     ,   p_flow_schedule_rec           => l_flow_schedule_rec
274     ,   x_flow_schedule_rec           => l_flow_schedule_rec
275     );
276 
277     --  Load Id OUT parameters.
278 
279     MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Rec_To_PUB(l_flow_schedule_rec,x_flow_schedule_rec);
280 
281     --  If p_return_values is TRUE then convert Ids to Values.
282 
283     IF FND_API.to_Boolean(p_return_values) THEN
284 
285         Id_To_Value
286         (   p_flow_schedule_rec           => l_flow_schedule_rec
287         ,   x_flow_schedule_val_rec       => l_x_flow_schedule_val_rec
288         );
289 
290         MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Val_Rec_To_PUB(l_x_flow_schedule_val_rec,x_flow_schedule_val_rec);
291 
292     END IF;
293 
294 EXCEPTION
295 
296     WHEN FND_API.G_EXC_ERROR THEN
297 
298         x_return_status := FND_API.G_RET_STS_ERROR;
299 
300         --  Get message count and data
301 
302         FND_MSG_PUB.Count_And_Get
303         (   p_count                       => x_msg_count
304         ,   p_data                        => x_msg_data
305         );
306 
307     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
308 
309         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
310 
311         --  Get message count and data
312 
313         FND_MSG_PUB.Count_And_Get
314         (   p_count                       => x_msg_count
315         ,   p_data                        => x_msg_data
316         );
317 
318     WHEN OTHERS THEN
319 
320         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
321 
322         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
323         THEN
324             FND_MSG_PUB.Add_Exc_Msg
325             (   G_PKG_NAME
326             ,   'Lock_Flow_Schedule'
327             );
328         END IF;
329 
330         --  Get message count and data
331 
332         FND_MSG_PUB.Count_And_Get
333         (   p_count                       => x_msg_count
334         ,   p_data                        => x_msg_data
335         );
336 
337 END Lock_Flow_Schedule;
338 
339 --  Start of Comments
340 --  API name    Get_Flow_Schedule
341 --  Type        Public
342 --  Function
343 --
344 --  Pre-reqs
345 --
346 --  Parameters
347 --
348 --  Version     Current version = 1.0
349 --              Initial version = 1.0
350 --
351 --  Notes
352 --
353 --  End of Comments
354 
355 PROCEDURE Get_Flow_Schedule
356 (   p_api_version_number            IN  NUMBER
357 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
358 ,   p_return_values                 IN  VARCHAR2 := FND_API.G_FALSE
359 ,   x_return_status                 OUT NOCOPY VARCHAR2
360 ,   x_msg_count                     OUT NOCOPY NUMBER
361 ,   x_msg_data                      OUT NOCOPY VARCHAR2
362 ,   p_wip_entity_id                 IN  NUMBER :=
363                                         FND_API.G_MISS_NUM
364 ,   p_wip_entity                    IN  VARCHAR2 :=
365                                         FND_API.G_MISS_CHAR
366 ,   x_flow_schedule_rec             OUT NOCOPY Flow_Schedule_Rec_Type
367 ,   x_flow_schedule_val_rec         OUT NOCOPY Flow_Schedule_Val_Rec_Type
368 )
369 IS
370 l_api_version_number          CONSTANT NUMBER := 1.0;
371 l_api_name                    CONSTANT VARCHAR2(30):= 'Get_Flow_Schedule';
372 l_wip_entity_id               NUMBER := p_wip_entity_id;
373 l_flow_schedule_rec           MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
374 l_x_flow_schedule_val_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type;
375 BEGIN
376 
377     --  Standard call to check for call compatibility
378 
379     IF NOT FND_API.Compatible_API_Call
380            (   l_api_version_number
381            ,   p_api_version_number
382            ,   l_api_name
383            ,   G_PKG_NAME
384            )
385     THEN
386         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
387     END IF;
388 
389     --  Standard check for Val/ID conversion
390 
391     IF  p_wip_entity = FND_API.G_MISS_CHAR
392     THEN
393 
394         l_wip_entity_id := p_wip_entity_id;
395 
396     ELSIF p_wip_entity_id <> FND_API.G_MISS_NUM THEN
397 
398         l_wip_entity_id := p_wip_entity_id;
399 
400         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_SUCCESS)
401         THEN
402 
403             FND_MESSAGE.SET_NAME('MRP','MRP_BOTH_VAL_AND_ID_EXIST');
404             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','wip_entity');
405             FND_MSG_PUB.Add;
406 
407         END IF;
408 
409     ELSE
410 
411         --  Convert Value to Id
412 
413         l_wip_entity_id := MRP_Value_To_Id.wip_entity
414         (   p_wip_entity                  => p_wip_entity
415         );
416 
417         IF l_wip_entity_id = FND_API.G_MISS_NUM THEN
418             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
419             THEN
420 
421                 FND_MESSAGE.SET_NAME('MRP','MRP_INVALID_BUSINESS_OBJ_VALUE');
422                 FND_MESSAGE.SET_TOKEN('ATTRIBUTE','wip_entity');
423                 FND_MSG_PUB.Add;
424 
425             END IF;
426         END IF;
427 
428         RAISE FND_API.G_EXC_ERROR;
429 
430     END IF;
431 
432 
433     --  Call MRP_Flow_Schedule_PVT.Get_Flow_Schedule
434 
435     MRP_Flow_Schedule_PVT.Get_Flow_Schedule
436     (   p_api_version_number          => 1.0
437     ,   p_init_msg_list               => p_init_msg_list
438     ,   x_return_status               => x_return_status
439     ,   x_msg_count                   => x_msg_count
440     ,   x_msg_data                    => x_msg_data
441     ,   p_wip_entity_id               => l_wip_entity_id
442     ,   x_flow_schedule_rec           => l_flow_schedule_rec
443     );
444 
445     --  Load Id OUT parameters.
446 
447     MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Rec_To_PUB(l_flow_schedule_rec,x_flow_schedule_rec);
448 
449     --  If p_return_values is TRUE then convert Ids to Values.
450 
451     IF FND_API.TO_BOOLEAN(p_return_values) THEN
452 
453         Id_To_Value
454         (   p_flow_schedule_rec           => l_flow_schedule_rec
455         ,   x_flow_schedule_val_rec       => l_x_flow_schedule_val_rec
456         );
457 
458 	    MRP_Flow_Schedule_PVT.PVT_Flow_Sched_Val_Rec_To_PUB(l_x_flow_schedule_val_rec,x_flow_schedule_val_rec);
459 
460     END IF;
461 
462     --  Set return status
463 
464     x_return_status := FND_API.G_RET_STS_SUCCESS;
465 
466     --  Get message count and data
467 
468     FND_MSG_PUB.Count_And_Get
469     (   p_count                       => x_msg_count
470     ,   p_data                        => x_msg_data
471     );
472 
473 
474 EXCEPTION
475 
476     WHEN FND_API.G_EXC_ERROR THEN
477 
478         x_return_status := FND_API.G_RET_STS_ERROR;
479 
480         --  Get message count and data
481 
482         FND_MSG_PUB.Count_And_Get
483         (   p_count                       => x_msg_count
484         ,   p_data                        => x_msg_data
485         );
486 
487     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
488 
489         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
490 
491         --  Get message count and data
492 
493         FND_MSG_PUB.Count_And_Get
494         (   p_count                       => x_msg_count
495         ,   p_data                        => x_msg_data
496         );
497 
498     WHEN OTHERS THEN
499 
500         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
501 
502         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
503         THEN
504             FND_MSG_PUB.Add_Exc_Msg
505             (   G_PKG_NAME
506             ,   'Get_Flow_Schedule'
507             );
508         END IF;
509 
510         --  Get message count and data
511 
512         FND_MSG_PUB.Count_And_Get
513         (   p_count                       => x_msg_count
514         ,   p_data                        => x_msg_data
515         );
516 
517 END Get_Flow_Schedule;
518 
519 --  Procedure Id_To_Value
520 
521 PROCEDURE Id_To_Value
522 (   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
523 ,   x_flow_schedule_val_rec         OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
524 )
525 IS
526   l_p_old_flow_schedule_rec         MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type ;
527 BEGIN
528 
529     --  Convert flow_schedule
530 
531     x_flow_schedule_val_rec := MRP_Flow_Schedule_Util.Get_Values(p_flow_schedule_rec,l_p_old_flow_schedule_rec);
532 
533 EXCEPTION
534 
535     WHEN OTHERS THEN
536 
537         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
538         THEN
539             FND_MSG_PUB.Add_Exc_Msg
540             (   G_PKG_NAME
541             ,   'Id_To_Value'
542             );
543         END IF;
544 
545         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
546 
547 END Id_To_Value;
548 
549 --  Procedure Value_To_Id
550 
551 PROCEDURE Value_To_Id
552 (   x_return_status                 OUT NOCOPY VARCHAR2
553 ,   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
554 ,   p_flow_schedule_val_rec         IN  MRP_Flow_Schedule_PVT.Flow_Schedule_Val_PVT_Rec_Type
555 ,   x_flow_schedule_rec             OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
556 )
557 IS
558 l_flow_schedule_rec           MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
559 l_index                       BINARY_INTEGER;
560 BEGIN
561 
562     --  Init x_return_status.
563 
564     x_return_status := FND_API.G_RET_STS_SUCCESS;
565 
566     --  Convert flow_schedule
567 
568     l_flow_schedule_rec := MRP_Flow_Schedule_Util.Get_Ids
569     (   p_flow_schedule_rec           => p_flow_schedule_rec
570     ,   p_flow_schedule_val_rec       => p_flow_schedule_val_rec
571     );
572 
573     x_flow_schedule_rec            := l_flow_schedule_rec;
574 
575     IF l_flow_schedule_rec.return_status = FND_API.G_RET_STS_ERROR THEN
576         x_return_status := FND_API.G_RET_STS_ERROR;
577     END IF;
578 
579 EXCEPTION
580 
581     WHEN OTHERS THEN
582 
583         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
584         THEN
585             FND_MSG_PUB.Add_Exc_Msg
586             (   G_PKG_NAME
587             ,   'Value_To_Id'
588             );
589         END IF;
590 
591         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
592 
593 END Value_To_Id;
594 
595 --  Start of Comments
596 --  API name    Line_Schedule
597 --  Type        Public
598 --  Function
599 --
600 --  Pre-reqs
601 --
602 --  Parameters
603 --
604 --  Version     Current version = 1.0
605 --              Initial version = 1.0
606 --
607 --  Notes
608 --
609 --  End of Comments
610 
611 PROCEDURE Line_Schedule
612 (   p_api_version_number            IN  NUMBER
613 ,   x_return_status                 OUT NOCOPY VARCHAR2
614 ,   x_msg_count                     OUT NOCOPY NUMBER
615 ,   x_msg_data                      OUT NOCOPY VARCHAR2
616 ,   p_rule_id                       IN NUMBER
617 ,   p_line_id                       IN NUMBER
618 ,   p_org_id                        IN NUMBER
619 ,   p_sched_start_date              IN DATE
620 ,   p_sched_end_date                IN DATE
621 ,   p_update                        IN NUMBER
622 )
623 IS
624 l_api_version_number          CONSTANT NUMBER := 1.0;
625 l_api_name                    CONSTANT VARCHAR2(30):= 'Line_Schedule';
626 l_return_status               VARCHAR2(1);
627 BEGIN
628 
629     --  Standard call to check for call compatibility
630 
631     IF NOT FND_API.Compatible_API_Call
632            (   l_api_version_number
633            ,   p_api_version_number
634            ,   l_api_name
635            ,   G_PKG_NAME
636            )
637     THEN
638         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
639     END IF;
640 
641     MRP_Flow_Schedule_Util.Line_Schedule (
642                      p_rule_id          ,
643                      p_line_id          ,
644                      p_org_id           ,
645                      p_sched_start_date ,
646                      p_sched_end_date   ,
647                      p_update           ,
648 		     2			,
649                      x_return_status    ,
650                      x_msg_count        ,
651                      x_msg_data         );
652 
653 EXCEPTION
654 
655     WHEN FND_API.G_EXC_ERROR THEN
656 
657         x_return_status := FND_API.G_RET_STS_ERROR;
658 
659         --  Get message count and data
660 
661         FND_MSG_PUB.Count_And_Get
662         (   p_count                       => x_msg_count
663         ,   p_data                        => x_msg_data
664         );
665 
666     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
667 
668         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
669 
670         --  Get message count and data
671 
672         FND_MSG_PUB.Count_And_Get
673         (   p_count                       => x_msg_count
674         ,   p_data                        => x_msg_data
675         );
676 
677     WHEN OTHERS THEN
678 
679         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
680 
681         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
682         THEN
683             FND_MSG_PUB.Add_Exc_Msg
684             (   G_PKG_NAME
685             ,   'Line_Schedule'
686             );
687         END IF;
688 
689         --  Get message count and data
690 
691         FND_MSG_PUB.Count_And_Get
692         (   p_count                       => x_msg_count
693         ,   p_data                        => x_msg_data
694         );
695 
696 END Line_Schedule;
697 
698 --  Start of Comments
699 --  API name    get_first_unit_completion_date
700 --  Type        Public
701 --  Function
702 --
703 --  Pre-reqs
704 --
705 --  Parameters
706 --
707 --  Version     Current version = 1.0
708 --              Initial version = 1.0
709 --
710 --  Notes
711 --
712 --  End of Comments
713 
714 FUNCTION get_first_unit_completion_date
715 (   p_api_version_number            IN  NUMBER
716 ,   x_return_status                 OUT NOCOPY VARCHAR2
717 ,   x_msg_count                     OUT NOCOPY NUMBER
718 ,   x_msg_data                      OUT NOCOPY VARCHAR2
719 ,   p_org_id                        IN NUMBER
720 ,   p_item_id                       IN NUMBER
721 ,   p_qty                           IN NUMBER
722 ,   p_line_id                       IN NUMBER
723 ,   p_start_date                    IN DATE
724 ) RETURN DATE
725 IS
726 l_api_version_number          CONSTANT NUMBER := 1.0;
727 l_api_name                    CONSTANT VARCHAR2(30):= 'get_first_unit_completion_date';
728 l_date			      DATE;
729 l_qty                         NUMBER := 1;/* Added l_qty for bugfix:7211657 */
730 BEGIN
731 
732     --  Standard call to check for call compatibility
733 
734     IF NOT FND_API.Compatible_API_Call
735            (   l_api_version_number
736            ,   p_api_version_number
737            ,   l_api_name
738            ,   G_PKG_NAME
739            )
740     THEN
741         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
742     END IF;
743 
744     x_return_status := FND_API.G_RET_STS_SUCCESS;
745 
746      /* Changed p_qty to l_qty in below call as we need only first unit completion date.Setting for bugfix:7211657 */
747 
748     l_date := MRP_LINE_SCHEDULE_ALGORITHM.calculate_completion_time (
749                      p_org_id   ,
750                      p_item_id  ,
751                      --p_qty    ,
752                      l_qty,
753                      p_line_id  ,
754                      p_start_date );
755 
756     return l_date;
757 EXCEPTION
758 
759     WHEN FND_API.G_EXC_ERROR THEN
760 
761         x_return_status := FND_API.G_RET_STS_ERROR;
762 
763         --  Get message count and data
764 
765         FND_MSG_PUB.Count_And_Get
766         (   p_count                       => x_msg_count
767         ,   p_data                        => x_msg_data
768         );
769 
770         return NULL;
771 
772     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
773 
774         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
775 
776         --  Get message count and data
777 
778         FND_MSG_PUB.Count_And_Get
779         (   p_count                       => x_msg_count
780         ,   p_data                        => x_msg_data
781         );
782 
783         return NULL;
784 
785     WHEN OTHERS THEN
786 
787         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
788 
789         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
790         THEN
791             FND_MSG_PUB.Add_Exc_Msg
792             (   G_PKG_NAME
793             ,   'get_first_unit_completion_date'
794             );
795         END IF;
796 
797         --  Get message count and data
798 
799         FND_MSG_PUB.Count_And_Get
800         (   p_count                       => x_msg_count
801         ,   p_data                        => x_msg_data
802         );
803 
804         return NULL;
805 
806 END get_first_unit_completion_date;
807 
808 --  Start of Comments
809 --  API name    get_operation_offset_date
810 --  Type        Public
811 --  Function
812 --
813 --  Pre-reqs
814 --
815 --  Parameters
816 --
817 --  Version     Current version = 1.0
818 --              Initial version = 1.0
819 --
820 --  Notes
821 --
822 --  End of Comments
823 --  This API is a wrapper to feeder_line_comp_date function that is used to find
824 --  the time in which the operation in the network routing start.
825 --  If the p_calculate_option = 0, the API will calculate the operation start time of the last quantity.
826 --  If the p_calculate_option = 1, the API will calculate the operation start time of the 1st quantity.
827 
828 FUNCTION get_operation_offset_date
829 (p_api_version_number           IN NUMBER,
830 x_return_status                 OUT NOCOPY VARCHAR2,
831 x_msg_count                     OUT NOCOPY NUMBER,
832 x_msg_data                      OUT NOCOPY VARCHAR2,
833 p_org_id                        IN NUMBER,
834 p_assembly_item_id              IN NUMBER,
835 p_routing_sequence_id           IN NUMBER,
836 p_operation_sequence_id         IN NUMBER,
837 p_assembly_qty                  IN NUMBER,
838 p_assembly_comp_date            IN DATE,
839 p_calculate_option              IN NUMBER
840 ) return DATE
841 IS
842 l_op_date 			DATE;
843 l_line_id 			NUMBER;
844 l_cnt 				NUMBER;
845 l_api_version_number          	CONSTANT NUMBER := 1.0;
846 l_api_name                    	CONSTANT VARCHAR2(30):= 'get_operation_offset_date';
847 
848 BEGIN
849   --  Standard call to check for call compatibility
850 
851   IF NOT FND_API.Compatible_API_Call
852            (   l_api_version_number
853            ,   p_api_version_number
854            ,   l_api_name
855            ,   G_PKG_NAME
856            )
857   THEN
858     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
859   END IF;
860 
861   x_return_status := FND_API.G_RET_STS_SUCCESS;
862 
863   SELECT line_id
864   INTO l_line_id
865   FROM BOM_OPERATIONAL_ROUTINGS
866   WHERE ROUTING_SEQUENCE_ID = p_routing_sequence_id
867     AND ASSEMBLY_ITEM_ID = p_assembly_item_id
868     AND ORGANIZATION_ID = p_org_id;
869 
870   IF (p_calculate_option NOT IN (0,1)) THEN
871     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
872       FND_MESSAGE.SET_NAME('MRP','MRP_INVALID_BUSINESS_OBJ_VALUE');
873       FND_MESSAGE.SET_TOKEN('ATTRIBUTE','calculate_option');
874       FND_MSG_PUB.Add;
875     END IF;
876     RAISE FND_API.G_EXC_ERROR;
877   END IF;
878 
879   SELECT count(*)
880   INTO l_cnt
881   FROM BOM_OPERATION_SEQUENCES
882   WHERE OPERATION_SEQUENCE_ID = p_operation_sequence_id
883     AND ROUTING_SEQUENCE_ID = p_routing_sequence_id;
884   IF (l_cnt = 0) THEN
885     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
886       FND_MESSAGE.SET_NAME('MRP','MRP_INVALID_BUSINESS_OBJ_VALUE');
887       FND_MESSAGE.SET_TOKEN('ATTRIBUTE','operation_sequence_id');
888       FND_MSG_PUB.Add;
889     END IF;
890     RAISE FND_API.G_EXC_ERROR;
891   END IF;
892 
893   l_op_date := FLM_CREATE_PRODUCT_SYNCH.feeder_line_comp_date (p_org_id,
894                              l_line_id,
895                              p_assembly_item_id,
896                              p_assembly_comp_date,
897                              p_assembly_comp_date,
898                              p_operation_sequence_id,
899                              p_assembly_qty,
900                              p_calculate_option);
901 
902   return l_op_date;
903 EXCEPTION
904 
905     WHEN FND_API.G_EXC_ERROR THEN
906 
907         x_return_status := FND_API.G_RET_STS_ERROR;
908 
909         --  Get message count and data
910 
911         FND_MSG_PUB.Count_And_Get
912         (   p_count                       => x_msg_count
913         ,   p_data                        => x_msg_data
914         );
915 
916         return NULL;
917 
918     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
919 
920         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
921 
922         --  Get message count and data
923 
924         FND_MSG_PUB.Count_And_Get
925         (   p_count                       => x_msg_count
926         ,   p_data                        => x_msg_data
927         );
928 
929         return NULL;
930 
931     WHEN OTHERS THEN
932 
933         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
934 
935         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
936         THEN
937             FND_MSG_PUB.Add_Exc_Msg
938             (   G_PKG_NAME
939             ,   'get_operation_offset_date'
940             );
941         END IF;
942 
943         --  Get message count and data
944 
945         FND_MSG_PUB.Count_And_Get
946         (   p_count                       => x_msg_count
947         ,   p_data                        => x_msg_data
948         );
949 
950         return NULL;
951 
952 END get_operation_offset_date;
953 
954 
955 --  Start of Comments
956 --  API name    unlink_order_line
957 --  Type        Public
958 --  Procedure
959 --
960 --  Pre-reqs
961 --
962 --  Parameters
963 --
964 --  Version     Current version = 1.0
965 --              Initial version = 1.0
966 --
967 --  Notes
968 --  This API removes sales order line reference in the flow
969 --  schedules. It finds flow schedules that has this order line
970 --  as demand, then null the demand fields.
971 --  It is only for sales order.
972 --
973 --  End of Comments
974 
975 
976 procedure unlink_order_line
977 (
978 p_api_version_number 		IN NUMBER,
979 x_return_status		 	OUT NOCOPY VARCHAR2,
980 x_msg_count 			OUT NOCOPY NUMBER,
981 x_msg_data 			OUT NOCOPY VARCHAR2,
982 p_assembly_item_id 		IN NUMBER,
983 p_line_id IN NUMBER
984 )
985 IS
986 l_api_version_number          	CONSTANT NUMBER := 1.0;
987 l_api_name                    	CONSTANT VARCHAR2(30):= 'unlink_order_line';
988 
989 l_item_id NUMBER;
990 
991 BEGIN
992   --  Standard call to check for call compatibility
993   IF NOT FND_API.Compatible_API_Call
994            (   l_api_version_number
995            ,   p_api_version_number
996            ,   l_api_name
997            ,   G_PKG_NAME
998            )
999   THEN
1000     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1001   END IF;
1002 
1003   x_return_status := FND_API.G_RET_STS_SUCCESS;
1004 
1005   BEGIN
1006     select inventory_item_id
1007     into l_item_id
1008     from oe_order_lines_all
1009     where line_id = p_line_id;
1010   EXCEPTION WHEN OTHERS THEN
1011     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1012       FND_MESSAGE.SET_NAME('MRP','MRP_INVALID_OE_LINE_ID');
1013       FND_MSG_PUB.Add;
1014     END IF;
1015     RAISE FND_API.G_EXC_ERROR;
1016   END;
1017 
1018   if( p_assembly_item_id is null or l_item_id <> p_assembly_item_id ) then
1019     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR) THEN
1020       FND_MESSAGE.SET_NAME('MRP','MRP_ITEM_OE_LINE_ID_NOT_MATCH');
1021       FND_MSG_PUB.Add;
1022     END IF;
1023     RAISE FND_API.G_EXC_ERROR;
1024   end if;
1025 
1026   update wip_flow_schedules
1027   set demand_source_header_id = null,
1028       demand_source_line = null,
1029       demand_source_type = null,
1030       demand_source_delivery = null
1031   where demand_source_line = to_char(p_line_id)
1032     and primary_item_id = p_assembly_item_id
1033     and demand_source_type = 2 ;
1034 
1035 EXCEPTION
1036 
1037     WHEN FND_API.G_EXC_ERROR THEN
1038         x_return_status := FND_API.G_RET_STS_ERROR;
1039         --  Get message count and data
1040         FND_MSG_PUB.Count_And_Get
1041         (   p_count                       => x_msg_count
1042         ,   p_data                        => x_msg_data
1043         );
1044 
1045     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1046 
1047         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1048         --  Get message count and data
1049         FND_MSG_PUB.Count_And_Get
1050         (   p_count                       => x_msg_count
1051         ,   p_data                        => x_msg_data
1052         );
1053 
1054     WHEN OTHERS THEN
1055 
1056         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1057         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1058         THEN
1059             FND_MSG_PUB.Add_Exc_Msg
1060             (   G_PKG_NAME
1061             ,   'get_operation_offset_date'
1062             );
1063         END IF;
1064 
1065         --  Get message count and data
1066         FND_MSG_PUB.Count_And_Get
1067         (   p_count                       => x_msg_count
1068         ,   p_data                        => x_msg_data
1069         );
1070 
1071 END unlink_order_line;
1072 
1073 END MRP_Flow_Schedule_PUB;