DBA Data[Home] [Help]

PACKAGE BODY: APPS.MRP_ASSIGNMENT_PVT

Source


1 PACKAGE BODY MRP_Assignment_PVT AS
2 /* $Header: MRPVASNB.pls 120.2 2005/06/24 13:57:28 ichoudhu noship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'MRP_Assignment_PVT';
7 
8 --  Assignment_Set
9 
10 PROCEDURE Assignment_Set
11 (   p_validation_level              IN  NUMBER
12 ,   p_control_rec                   IN  MRP_GLOBALS.Control_Rec_Type
13 ,   p_Assignment_Set_rec            IN  MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
14 ,   p_old_Assignment_Set_rec        IN  MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
15 ,   x_Assignment_Set_rec            OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
16 ,   x_old_Assignment_Set_rec        OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
17 )
18 IS
19 l_return_status               VARCHAR2(1);
20 l_control_rec                 MRP_GLOBALS.Control_Rec_Type;
21 l_Assignment_Set_rec          MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_Assignment_Set_rec;
22 l_old_Assignment_Set_rec      MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_old_Assignment_Set_rec;
23 
24 l_Assignment_Set_rec_out          MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_Assignment_Set_rec;
25 l_old_Assignment_Set_rec_out      MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_old_Assignment_Set_rec;
26 BEGIN
27 
28     --  Load API control record
29 
30     l_control_rec := MRP_GLOBALS.Init_Control_Rec
31     (   p_operation     => l_Assignment_Set_rec.operation
32     ,   p_control_rec   => p_control_rec
33     );
34 
35     --  Set record return status.
36 
37     l_Assignment_Set_rec.return_status := FND_API.G_RET_STS_SUCCESS;
38 
39     --  Prepare record.
40 
41     IF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_CREATE THEN
42 
43         l_Assignment_Set_rec.db_flag := FND_API.G_FALSE;
44 
45         --  Set missing old record elements to NULL.
46 
47         l_old_Assignment_Set_rec :=
48         MRP_Assignment_Set_Util.Convert_Miss_To_Null (l_old_Assignment_Set_rec);
49 
50     ELSIF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_UPDATE
51     OR    l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_DELETE
52     THEN
53 
54         l_Assignment_Set_rec.db_flag := FND_API.G_TRUE;
55 
56         --  Query Old if missing
57 
58         IF  l_old_Assignment_Set_rec.Assignment_Set_Id = FND_API.G_MISS_NUM
59         THEN
60 
61             l_old_Assignment_Set_rec := MRP_Assignment_Set_Handlers.Query_Row
62             (   p_Assignment_Set_Id           => l_Assignment_Set_rec.Assignment_Set_Id
63             );
64 
65         ELSE
66 
67             --  Set missing old record elements to NULL.
68 
69             l_old_Assignment_Set_rec :=
70             MRP_Assignment_Set_Util.Convert_Miss_To_Null (l_old_Assignment_Set_rec);
71 
72         END IF;
73 
74         --  Complete new record from old
75 
76         l_Assignment_Set_rec := MRP_Assignment_Set_Util.Complete_Record
77         (   p_Assignment_Set_rec          => l_Assignment_Set_rec
78         ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
79         );
80 
81     END IF;
82 
83     --  Attribute level validation.
84 
85     IF  l_control_rec.default_attributes
86     OR  l_control_rec.change_attributes
87     THEN
88 
89         IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
90 
91             MRP_Validate_Assignment_Set.Attributes
92             (   x_return_status               => l_return_status
93             ,   p_Assignment_Set_rec          => l_Assignment_Set_rec
94             ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
95             );
96 
97             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
98                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
99             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
100                 RAISE FND_API.G_EXC_ERROR;
101             END IF;
102 
103         END IF;
104 
105     END IF;
106 
107         --  Clear dependent attributes.
108 
109     IF  l_control_rec.change_attributes THEN
110 
111         MRP_Assignment_Set_Util.Clear_Dependent_Attr
112         (   p_Assignment_Set_rec          => l_Assignment_Set_rec
113         ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
114         ,   x_Assignment_Set_rec          => l_Assignment_Set_rec_out
115         );
116         l_Assignment_Set_rec := l_Assignment_Set_rec_out;
117 
118     END IF;
119 
120     --  Default missing attributes
121 
122     IF  l_control_rec.default_attributes
123     OR  l_control_rec.change_attributes
124     THEN
125 
126         MRP_Default_Assignment_Set.Attributes
127         (   p_Assignment_Set_rec          => l_Assignment_Set_rec
128         ,   x_Assignment_Set_rec          => l_Assignment_Set_rec_out
129         );
130         l_Assignment_Set_rec := l_Assignment_Set_rec_out;
131 
132     END IF;
133 
134     --  Apply attribute changes
135 
136     IF  l_control_rec.default_attributes
137     OR  l_control_rec.change_attributes
138     THEN
139 
140         MRP_Assignment_Set_Util.Apply_Attribute_Changes
141         (   p_Assignment_Set_rec          => l_Assignment_Set_rec
142         ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
143         ,   x_Assignment_Set_rec          => l_Assignment_Set_rec_out
144         );
145         l_Assignment_Set_rec := l_Assignment_Set_rec_out;
146 
147     END IF;
148 
149     --  Entity level validation.
150 
151     IF l_control_rec.validate_entity THEN
152 
153         IF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_DELETE THEN
154 
155             MRP_Validate_Assignment_Set.Entity_Delete
156             (   x_return_status               => l_return_status
157             ,   p_Assignment_Set_rec          => l_Assignment_Set_rec
158             );
159 
160         ELSE
161 
162             MRP_Validate_Assignment_Set.Entity
163             (   x_return_status               => l_return_status
164             ,   p_Assignment_Set_rec          => l_Assignment_Set_rec
165             ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
166             );
167 
168         END IF;
169 
170         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
171             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
172         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
173             RAISE FND_API.G_EXC_ERROR;
174         END IF;
175 
176     END IF;
177 
178     --  Step 4. Write to DB
179 
180     IF l_control_rec.write_to_db THEN
181 
182         IF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_DELETE THEN
183 
184             MRP_Assignment_Set_Handlers.Delete_Row
185             (   p_Assignment_Set_Id           => l_Assignment_Set_rec.Assignment_Set_Id
186             );
187 
188         ELSE
189 
190             --  Get Who Information
191 
192             l_Assignment_Set_rec.last_update_date := SYSDATE;
193             l_Assignment_Set_rec.last_updated_by := FND_GLOBAL.USER_ID;
194             l_Assignment_Set_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
195 
196             IF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_UPDATE THEN
197 
198                 MRP_Assignment_Set_Handlers.Update_Row (l_Assignment_Set_rec);
199 
200             ELSIF l_Assignment_Set_rec.operation = MRP_Globals.G_OPR_CREATE THEN
201 
202                 l_Assignment_Set_rec.creation_date := SYSDATE;
203                 l_Assignment_Set_rec.created_by := FND_GLOBAL.USER_ID;
204 
205                 MRP_Assignment_Set_Handlers.Insert_Row (l_Assignment_Set_rec);
206 
207             END IF;
208 
209         END IF;
210 
211     END IF;
212 
213     --  Load OUT parameters
214 
215     x_Assignment_Set_rec           := l_Assignment_Set_rec;
216     x_old_Assignment_Set_rec       := l_old_Assignment_Set_rec;
217 
218 EXCEPTION
219 
220     WHEN FND_API.G_EXC_ERROR THEN
221 
222         l_Assignment_Set_rec.return_status := FND_API.G_RET_STS_ERROR;
223         x_Assignment_Set_rec           := l_Assignment_Set_rec;
224         x_old_Assignment_Set_rec       := l_old_Assignment_Set_rec;
225         RAISE;
226 
227     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
228 
229         l_Assignment_Set_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
230         x_Assignment_Set_rec           := l_Assignment_Set_rec;
231         x_old_Assignment_Set_rec       := l_old_Assignment_Set_rec;
232 
233         RAISE;
234 
235     WHEN OTHERS THEN
236 
237         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
238         THEN
239             FND_MSG_PUB.Add_Exc_Msg
240             (   G_PKG_NAME
241             ,   'Assignment_Set'
242             );
243         END IF;
244 
245         l_Assignment_Set_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
246         x_Assignment_Set_rec           := l_Assignment_Set_rec;
247         x_old_Assignment_Set_rec       := l_old_Assignment_Set_rec;
248 
249         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
250 
251 END Assignment_Set;
252 
253 --  Assignments
254 
255 PROCEDURE Assignments
256 (   p_validation_level              IN  NUMBER
257 ,   p_control_rec                   IN  MRP_GLOBALS.Control_Rec_Type
258 ,   p_Assignment_tbl                IN  MRP_Src_Assignment_PUB.Assignment_Tbl_Type
259 ,   p_old_Assignment_tbl            IN  MRP_Src_Assignment_PUB.Assignment_Tbl_Type
260 ,   x_Assignment_tbl                OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Tbl_Type
261 ,   x_old_Assignment_tbl            OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Tbl_Type
262 )
263 IS
264 l_return_status               VARCHAR2(1);
265 l_control_rec                 MRP_GLOBALS.Control_Rec_Type;
266 l_Assignment_rec              MRP_Src_Assignment_PUB.Assignment_Rec_Type;
267 l_Assignment_rec_out          MRP_Src_Assignment_PUB.Assignment_Rec_Type;
268 l_Assignment_tbl              MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
269 l_old_Assignment_rec          MRP_Src_Assignment_PUB.Assignment_Rec_Type;
270 l_old_Assignment_tbl          MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
271 BEGIN
272 
273     --  Init local table variables.
274 
275     l_Assignment_tbl               := p_Assignment_tbl;
276     l_old_Assignment_tbl           := p_old_Assignment_tbl;
277 
278     FOR I IN 1..l_Assignment_tbl.COUNT LOOP
279     BEGIN
280 
281         --  Load local records.
282 
283         l_Assignment_rec := l_Assignment_tbl(I);
284 
285         IF l_old_Assignment_tbl.EXISTS(I) THEN
286             l_old_Assignment_rec := l_old_Assignment_tbl(I);
287         ELSE
288             l_old_Assignment_rec := MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_REC;
289         END IF;
290 
291         --  Load API control record
292 
293         l_control_rec := MRP_GLOBALS.Init_Control_Rec
294         (   p_operation     => l_Assignment_rec.operation
295         ,   p_control_rec   => p_control_rec
296         );
297 
298         --  Set record return status.
299 
300         l_Assignment_rec.return_status := FND_API.G_RET_STS_SUCCESS;
301 
302         --  Prepare record.
303 
304         IF l_Assignment_rec.operation = MRP_Globals.G_OPR_CREATE THEN
305 
306             l_Assignment_rec.db_flag := FND_API.G_FALSE;
307 
308             --  Set missing old record elements to NULL.
309 
310             l_old_Assignment_rec :=
311             MRP_Assignment_Util.Convert_Miss_To_Null (l_old_Assignment_rec);
312 
313         ELSIF l_Assignment_rec.operation = MRP_Globals.G_OPR_UPDATE
314         OR    l_Assignment_rec.operation = MRP_Globals.G_OPR_DELETE
315         THEN
316 
317             l_Assignment_rec.db_flag := FND_API.G_TRUE;
318 
319             --  Query Old if missing
320 
321             IF  l_old_Assignment_rec.Assignment_Id = FND_API.G_MISS_NUM
322             THEN
323 
324                 l_old_Assignment_rec := MRP_Assignment_Handlers.Query_Row
325                 (   p_Assignment_Id               => l_Assignment_rec.Assignment_Id
326                 );
327 
328             ELSE
329 
330                 --  Set missing old record elements to NULL.
331 
332                 l_old_Assignment_rec :=
333                 MRP_Assignment_Util.Convert_Miss_To_Null (l_old_Assignment_rec);
334 
335             END IF;
336 
337             --  Complete new record from old
338 
339             l_Assignment_rec := MRP_Assignment_Util.Complete_Record
340             (   p_Assignment_rec              => l_Assignment_rec
341             ,   p_old_Assignment_rec          => l_old_Assignment_rec
342             );
343 
344         END IF;
345 
346         --  Attribute level validation.
347 
348         IF  l_control_rec.default_attributes
349         OR  l_control_rec.change_attributes
350         THEN
351 
352             IF p_validation_level > FND_API.G_VALID_LEVEL_NONE THEN
353 
354                 MRP_Validate_Assignment.Attributes
355                 (   x_return_status               => l_return_status
356                 ,   p_Assignment_rec              => l_Assignment_rec
357                 ,   p_old_Assignment_rec          => l_old_Assignment_rec
358                 );
359 
360                 IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
361                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
362                 ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
363                     RAISE FND_API.G_EXC_ERROR;
364                 END IF;
365 
366             END IF;
367 
368         END IF;
369 
370             --  Clear dependent attributes.
371 
372         IF  l_control_rec.change_attributes THEN
373 
374             MRP_Assignment_Util.Clear_Dependent_Attr
375             (   p_Assignment_rec              => l_Assignment_rec
376             ,   p_old_Assignment_rec          => l_old_Assignment_rec
377             ,   x_Assignment_rec              => l_Assignment_rec_out
378             );
379         l_Assignment_rec := l_Assignment_rec_out;
380 
381         END IF;
382 
383         --  Default missing attributes
384 
385         IF  l_control_rec.default_attributes
386         OR  l_control_rec.change_attributes
387         THEN
388 
389             MRP_Default_Assignment.Attributes
390             (   p_Assignment_rec              => l_Assignment_rec
391             ,   x_Assignment_rec              => l_Assignment_rec_out
392             );
393         l_Assignment_rec := l_Assignment_rec_out;
394 
395         END IF;
396 
397         --  Apply attribute changes
398 
399         IF  l_control_rec.default_attributes
400         OR  l_control_rec.change_attributes
401         THEN
402 
403             MRP_Assignment_Util.Apply_Attribute_Changes
404             (   p_Assignment_rec              => l_Assignment_rec
405             ,   p_old_Assignment_rec          => l_old_Assignment_rec
406             ,   x_Assignment_rec              => l_Assignment_rec_out
407             );
408         l_Assignment_rec := l_Assignment_rec_out;
409 
410         END IF;
411 
412         --  Entity level validation.
413 
414         IF l_control_rec.validate_entity THEN
415 
416             IF l_Assignment_rec.operation = MRP_Globals.G_OPR_DELETE THEN
417 
418                 MRP_Validate_Assignment.Entity_Delete
419                 (   x_return_status               => l_return_status
420                 ,   p_Assignment_rec              => l_Assignment_rec
421                 );
422 
423             ELSE
424 
425                 MRP_Validate_Assignment.Entity
426                 (   x_return_status               => l_return_status
427                 ,   p_Assignment_rec              => l_Assignment_rec
428                 ,   p_old_Assignment_rec          => l_old_Assignment_rec
429                 );
430 
431             END IF;
432 
433             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
434                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
435             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
436                 RAISE FND_API.G_EXC_ERROR;
437             END IF;
438 
439         END IF;
440 
441         --  Step 4. Write to DB
442 
443         IF l_control_rec.write_to_db THEN
444 
445             IF l_Assignment_rec.operation = MRP_Globals.G_OPR_DELETE THEN
446 
447                 MRP_Assignment_Handlers.Delete_Row
448                 (   p_Assignment_Id               => l_Assignment_rec.Assignment_Id
449                 );
450 
451             ELSE
452 
453                 --  Get Who Information
454 
455                 l_Assignment_rec.last_update_date := SYSDATE;
456                 l_Assignment_rec.last_updated_by := FND_GLOBAL.USER_ID;
457                 l_Assignment_rec.last_update_login := FND_GLOBAL.LOGIN_ID;
458 
459                 IF l_Assignment_rec.operation = MRP_Globals.G_OPR_UPDATE THEN
460 
461                     MRP_Assignment_Handlers.Update_Row (l_Assignment_rec);
462 
463                 ELSIF l_Assignment_rec.operation = MRP_Globals.G_OPR_CREATE THEN
464 
465                     l_Assignment_rec.creation_date := SYSDATE;
466                     l_Assignment_rec.created_by    := FND_GLOBAL.USER_ID;
467 
468                     MRP_Assignment_Handlers.Insert_Row (l_Assignment_rec);
469 
470                 END IF;
471 
472             END IF;
473 
474         END IF;
475 
476         --  Load tables.
477 
478         l_Assignment_tbl(I)            := l_Assignment_rec;
479         l_old_Assignment_tbl(I)        := l_old_Assignment_rec;
480 
481     --  For loop exception handler.
482 
483 
484     EXCEPTION
485 
486         WHEN FND_API.G_EXC_ERROR THEN
487 
488             l_Assignment_rec.return_status := FND_API.G_RET_STS_ERROR;
489             l_Assignment_tbl(I)            := l_Assignment_rec;
490             l_old_Assignment_tbl(I)        := l_old_Assignment_rec;
491 
492         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
493 
494             l_Assignment_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
495             l_Assignment_tbl(I)            := l_Assignment_rec;
496             l_old_Assignment_tbl(I)        := l_old_Assignment_rec;
497             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
498 
499         WHEN OTHERS THEN
500 
501             l_Assignment_rec.return_status := FND_API.G_RET_STS_UNEXP_ERROR;
502             l_Assignment_tbl(I)            := l_Assignment_rec;
503             l_old_Assignment_tbl(I)        := l_old_Assignment_rec;
504 
505             IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
506             THEN
507                 FND_MSG_PUB.Add_Exc_Msg
508                 (   G_PKG_NAME
509                 ,   'Assignments'
510                 );
511             END IF;
512 
513             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
514 
515     END;
516     END LOOP;
517 
518     --  Load OUT parameters
519 
520     x_Assignment_tbl               := l_Assignment_tbl;
521     x_old_Assignment_tbl           := l_old_Assignment_tbl;
522 
523 EXCEPTION
524 
525     WHEN FND_API.G_EXC_ERROR THEN
526 
527         RAISE;
528 
529     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
530 
531 
532         RAISE;
533 
534     WHEN OTHERS THEN
535 
536         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
537         THEN
538             FND_MSG_PUB.Add_Exc_Msg
539             (   G_PKG_NAME
540             ,   'Assignments'
541             );
542         END IF;
543 
544 
545         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
546 
547 END Assignments;
548 
549 --  Start of Comments
550 --  API name    Process_Assignment
551 --  Type        Private
552 --  Function
553 --
554 --  Pre-reqs
555 --
556 --  Parameters
557 --
558 --  Version     Current version = 1.0
559 --              Initial version = 1.0
560 --
561 --  Notes
562 --
563 --  End of Comments
564 
565 PROCEDURE Process_Assignment
566 (   p_api_version_number            IN  NUMBER
567 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
568 ,   p_commit                        IN  VARCHAR2 := FND_API.G_FALSE
569 ,   p_validation_level              IN  NUMBER := FND_API.G_VALID_LEVEL_FULL
570 ,   p_control_rec                   IN  MRP_GLOBALS.Control_Rec_Type :=
571                                         MRP_GLOBALS.G_MISS_CONTROL_REC
572 ,   x_return_status                 OUT NOCOPY VARCHAR2
573 ,   x_msg_count                     OUT NOCOPY NUMBER
574 ,   x_msg_data                      OUT NOCOPY VARCHAR2
575 ,   p_Assignment_Set_rec            IN  MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type :=
576                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_SET_REC
577 ,   p_old_Assignment_Set_rec        IN  MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type :=
578                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_SET_REC
579 ,   p_Assignment_tbl                IN  MRP_Src_Assignment_PUB.Assignment_Tbl_Type :=
580                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_TBL
581 ,   p_old_Assignment_tbl            IN  MRP_Src_Assignment_PUB.Assignment_Tbl_Type :=
582                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_TBL
583 ,   x_Assignment_Set_rec            OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
584 ,   x_Assignment_tbl                OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Tbl_Type
585 )
586 IS
587 l_api_version_number          CONSTANT NUMBER := 1.0;
588 l_api_name                    CONSTANT VARCHAR2(30):= 'Process_Assignment';
589 l_return_status               VARCHAR2(1);
590 l_control_rec                 MRP_GLOBALS.Control_Rec_Type;
591 l_Assignment_Set_rec          MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_Assignment_Set_rec;
592 l_old_Assignment_Set_rec      MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_old_Assignment_Set_rec;
593 l_Assignment_rec              MRP_Src_Assignment_PUB.Assignment_Rec_Type;
594 l_Assignment_tbl              MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
595 l_old_Assignment_rec          MRP_Src_Assignment_PUB.Assignment_Rec_Type;
596 l_old_Assignment_tbl          MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
597 l_old_Assignment_tbl_out          MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
598 
599 l_Assignment_Set_rec_out          MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_Assignment_Set_rec;
600 l_old_Assignment_Set_rec_out      MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type := p_old_Assignment_Set_rec;
601 l_Assignment_rec_out              MRP_Src_Assignment_PUB.Assignment_Rec_Type;
602 l_Assignment_tbl_out              MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
603 
604 l_src_rule_org_id	      NUMBER;
605 l_category_set_id	      NUMBER;
606 l_organization_id             NUMBER := FND_API.G_MISS_NUM;
607 
608 BEGIN
609 
610     --  Standard call to check for call compatibility
611 
612     IF NOT FND_API.Compatible_API_Call
613            (   l_api_version_number
614            ,   p_api_version_number
615            ,   l_api_name
616            ,   G_PKG_NAME
617            )
618     THEN
619         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
620     END IF;
621 
622     --  Set Save point.
623     SAVEPOINT Process_Assignment_PVT;
624 
625     --  Initialize message list.
626 
627     IF FND_API.to_Boolean(p_init_msg_list) THEN
628         FND_MSG_PUB.initialize;
629     END IF;
630 
631     --  Init local table variables.
632 
633     l_Assignment_tbl               := p_Assignment_tbl;
634     l_old_Assignment_tbl           := p_old_Assignment_tbl;
635 
636     --  Assignment_Set
637 
638     Assignment_Set
639     (   p_validation_level            => p_validation_level
640     ,   p_control_rec                 => p_control_rec
641     ,   p_Assignment_Set_rec          => l_Assignment_Set_rec
642     ,   p_old_Assignment_Set_rec      => l_old_Assignment_Set_rec
643     ,   x_Assignment_Set_rec          => l_Assignment_Set_rec_out
644     ,   x_old_Assignment_Set_rec      => l_old_Assignment_Set_rec_out
645     );
646     l_Assignment_Set_rec := l_Assignment_Set_rec_out;
647     l_old_Assignment_Set_rec := l_old_Assignment_Set_rec_out;
648 
649     --  Perform Assignment_Set group requests.
650 
651     IF p_control_rec.process AND
652         (p_control_rec.process_entity = MRP_GLOBALS.G_ENTITY_ALL OR
653         p_control_rec.process_entity = MRP_GLOBALS.G_ENTITY_ASSIGNMENT_SET)
654     THEN
655 
656         NULL;
657 
658     END IF;
659 
660     --  Load parent key if missing and operation is create.
661 
662     FOR I IN 1..l_Assignment_tbl.COUNT LOOP
663 
664         l_Assignment_rec := l_Assignment_tbl(I);
665 
666         IF l_Assignment_rec.operation = MRP_Globals.G_OPR_CREATE
667         AND (l_Assignment_rec.Assignment_Set_Id IS NULL OR
668             l_Assignment_rec.Assignment_Set_Id = FND_API.G_MISS_NUM)
669         THEN
670 
671             --  Copy parent_id.
672 
673             l_Assignment_tbl(I).Assignment_Set_Id := l_Assignment_Set_rec.Assignment_Set_Id;
674         END IF;
675     END LOOP;
676 
677     --  Assignments
678 
679     Assignments
680     (   p_validation_level            => p_validation_level
681     ,   p_control_rec                 => p_control_rec
682     ,   p_Assignment_tbl              => l_Assignment_tbl
683     ,   p_old_Assignment_tbl          => l_old_Assignment_tbl
684     ,   x_Assignment_tbl              => l_Assignment_tbl_out
685     ,   x_old_Assignment_tbl          => l_old_Assignment_tbl_out
686     );
687     l_Assignment_tbl := l_Assignment_tbl_out;
688     l_old_Assignment_tbl := l_old_Assignment_tbl_out;
689 
690     --  Perform Assignment group requests.
691 
692     IF p_control_rec.process AND
693         (p_control_rec.process_entity = MRP_GLOBALS.G_ENTITY_ALL OR
694         p_control_rec.process_entity = MRP_GLOBALS.G_ENTITY_ASSIGNMENT)
695     THEN
696 
697     FOR I IN 1..l_Assignment_tbl.COUNT LOOP
698 
699         l_Assignment_rec := l_Assignment_tbl(I);
700 
701 	BEGIN
702             SELECT organization_id
703 	    INTO   l_src_rule_org_id
704 	    FROM   MRP_SOURCING_RULES
705 	    WHERE  sourcing_rule_id = l_Assignment_rec.sourcing_rule_id;
706 	EXCEPTION
707 	    WHEN NO_DATA_FOUND THEN
708 		NULL;
709 	END;
710 
711 	IF (l_Assignment_rec.assignment_type = 1 OR
712 	    	l_Assignment_rec.assignment_type = 2 OR
713 		    l_Assignment_rec.assignment_type = 3) AND
714 	    (l_src_rule_org_id <> NULL AND
715 			l_Assignment_rec.Sourcing_Rule_Type <> 2) THEN
716             FND_MESSAGE.SET_NAME('MRP','MRP_ATTRIBUTE_VALUE_ERROR');
717             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Sourcing_Rule_Type');
718             FND_MESSAGE.SET_TOKEN('DETAILS',
719 		'Cannot use local Sourcing Rule for this assignment');
720             FND_MSG_PUB.Add;
721 	    l_Assignment_tbl(I).return_status := FND_API.G_RET_STS_ERROR;
722   	END IF;
723 
724 	IF (l_Assignment_rec.assignment_type = 4 OR
725 	    	l_Assignment_rec.assignment_type = 5 OR
726 		    l_Assignment_rec.assignment_type = 6) AND
727 			l_Assignment_rec.Sourcing_Rule_Type = 2 THEN
728             FND_MESSAGE.SET_NAME('MRP','MRP_ATTRIBUTE_VALUE_ERROR');
729             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Sourcing_Rule_Type');
730             FND_MESSAGE.SET_TOKEN('DETAILS',
731 		'Cannot use a Bill of Distribution for this assignment');
732             FND_MSG_PUB.Add;
733 	    l_Assignment_tbl(I).return_status := FND_API.G_RET_STS_ERROR;
734 	END IF;
735 
736 	l_category_set_id := FND_PROFILE.value('MRP_SRA_CATEGORY_SET');
737 
738 	IF l_category_set_id is NULL AND
739 			l_Assignment_rec.category_id IS NOT NULL THEN
740             FND_MESSAGE.SET_NAME('MRP','MRP_ATTRIBUTE_VALUE_ERROR');
741             FND_MESSAGE.SET_TOKEN('ATTRIBUTE','Category_Set_Id');
742             FND_MESSAGE.SET_TOKEN('DETAILS',
743 		'Category_Set_Id cannot be NULL');
744             FND_MSG_PUB.Add;
745 	    l_Assignment_tbl(I).return_status := FND_API.G_RET_STS_ERROR;
746 	END IF;
747 
748         -- if Customer and Ship to site are passed in and there is
749         -- an organization modelled as this Customer at this site,
750         -- populate the source_organization_id
751 
752         l_organization_id := FND_API.G_MISS_NUM;
753         BEGIN
754             SELECT organization_id
755             INTO   l_organization_id
756             FROM   mrp_cust_sup_org_v
757             WHERE  Customer_Id = to_char(l_Assignment_rec.Customer_Id)
758             AND    Ship_To_Site_Id = to_char(l_Assignment_rec.Ship_To_Site_Id);
759 
760             IF l_organization_id IS NOT NULL AND
761                            l_organization_id <> FND_API.G_MISS_NUM THEN
762                UPDATE mrp_sr_assignments
763                SET    organization_id = l_organization_id
764                WHERE  assignment_id = l_Assignment_rec.assignment_id;
765 
766            END IF;
767        EXCEPTION
768             WHEN NO_DATA_FOUND THEN
769                NULL;
770        END;
771 
772     END LOOP;
773 
774     END IF;
775 
776     --  Step 6. Perform Object group logic
777 
778     IF p_control_rec.process AND
779         p_control_rec.process_entity = MRP_GLOBALS.G_ENTITY_ALL
780     THEN
781 
782         NULL;
783 
784     END IF;
785 
786     --  Done processing, load OUT parameters.
787 
788     x_Assignment_Set_rec           := l_Assignment_Set_rec;
789     x_Assignment_tbl               := l_Assignment_tbl;
790 
791     --  Clear API cache.
792 
793     IF p_control_rec.clear_api_cache THEN
794 
795         NULL;
796 
797     END IF;
798 
799     --  Clear API request tbl.
800 
801     IF p_control_rec.clear_api_requests THEN
802 
803         NULL;
804 
805     END IF;
806 
807     --  Derive return status.
808 
809     x_return_status := FND_API.G_RET_STS_SUCCESS;
810 
811     IF l_Assignment_Set_rec.return_status = FND_API.G_RET_STS_ERROR THEN
812     	ROLLBACK TO Process_Assignment_PVT;
813         x_return_status := FND_API.G_RET_STS_ERROR;
814     END IF;
815 
816     FOR I IN 1..l_Assignment_tbl.COUNT LOOP
817 
818         IF l_Assignment_tbl(I).return_status = FND_API.G_RET_STS_ERROR THEN
819     	    ROLLBACK TO Process_Assignment_PVT;
820             x_return_status := FND_API.G_RET_STS_ERROR;
821         END IF;
822 
823     END LOOP;
824 
825     --  Get message count and data
826 
827     FND_MSG_PUB.Count_And_Get
828     (   p_count                       => x_msg_count
829     ,   p_data                        => x_msg_data
830     );
831 
832 
833 EXCEPTION
834 
835     WHEN FND_API.G_EXC_ERROR THEN
836 
837         x_return_status := FND_API.G_RET_STS_ERROR;
838 
839         --  Get message count and data
840 
841         FND_MSG_PUB.Count_And_Get
842         (   p_count                       => x_msg_count
843         ,   p_data                        => x_msg_data
844         );
845 
846     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
847 
848         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
849 
850         --  Get message count and data
851 
852         FND_MSG_PUB.Count_And_Get
853         (   p_count                       => x_msg_count
854         ,   p_data                        => x_msg_data
855         );
856 
857     WHEN OTHERS THEN
858 
859         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
860 
861         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
862         THEN
863             FND_MSG_PUB.Add_Exc_Msg
864             (   G_PKG_NAME
865             ,   'Process_Assignment'
866             );
867         END IF;
868 
869         --  Get message count and data
870 
871         FND_MSG_PUB.Count_And_Get
872         (   p_count                       => x_msg_count
873         ,   p_data                        => x_msg_data
874         );
875 
876 END Process_Assignment;
877 
878 --  Start of Comments
879 --  API name    Lock_Assignment
880 --  Type        Private
881 --  Function
882 --
883 --  Pre-reqs
884 --
885 --  Parameters
886 --
887 --  Version     Current version = 1.0
888 --              Initial version = 1.0
889 --
890 --  Notes
891 --
892 --  End of Comments
893 
894 PROCEDURE Lock_Assignment
895 (   p_api_version_number            IN  NUMBER
896 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
897 ,   x_return_status                 OUT NOCOPY VARCHAR2
898 ,   x_msg_count                     OUT NOCOPY NUMBER
899 ,   x_msg_data                      OUT NOCOPY VARCHAR2
900 ,   p_Assignment_Set_rec            IN  MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type :=
901                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_SET_REC
902 ,   p_Assignment_tbl                IN  MRP_Src_Assignment_PUB.Assignment_Tbl_Type :=
903                                         MRP_Src_Assignment_PUB.G_MISS_ASSIGNMENT_TBL
904 ,   x_Assignment_Set_rec            OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
905 ,   x_Assignment_tbl                OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Tbl_Type
906 )
907 IS
908 l_api_version_number          CONSTANT NUMBER := 1.0;
909 l_api_name                    CONSTANT VARCHAR2(30):= 'Lock_Assignment';
910 l_return_status               VARCHAR2(1) := FND_API.G_RET_STS_SUCCESS;
911 l_Assignment_rec              MRP_Src_Assignment_PUB.Assignment_Rec_Type;
912 BEGIN
913 
914     --  Standard call to check for call compatibility
915 
916     IF NOT FND_API.Compatible_API_Call
917            (   l_api_version_number
918            ,   p_api_version_number
919            ,   l_api_name
920            ,   G_PKG_NAME
921            )
922     THEN
923         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
924     END IF;
925 
926     --  Initialize message list.
927 
928     IF FND_API.to_Boolean(p_init_msg_list) THEN
929         FND_MSG_PUB.initialize;
930     END IF;
931 
932     --  Set Savepoint
933 
934     SAVEPOINT Lock_Assignment_PVT;
935 
936     --  Lock Assignment_Set
937 
938     IF p_Assignment_Set_rec.operation = MRP_Globals.G_OPR_LOCK THEN
939 
940         MRP_Assignment_Set_Handlers.Lock_Row
941         (   p_Assignment_Set_rec          => p_Assignment_Set_rec
942         ,   x_Assignment_Set_rec          => x_Assignment_Set_rec
943         ,   x_return_status               => l_return_status
944         );
945 
946         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
947             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
948         ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
949             RAISE FND_API.G_EXC_ERROR;
950         END IF;
951 
952 
953     END IF;
954 
955     --  Lock Assignment
956 
957     FOR I IN 1..p_Assignment_tbl.COUNT LOOP
958 
959         IF p_Assignment_tbl(I).operation = MRP_Globals.G_OPR_LOCK THEN
960 
961             MRP_Assignment_Handlers.Lock_Row
962             (   p_Assignment_rec              => p_Assignment_tbl(I)
963             ,   x_Assignment_rec              => l_Assignment_rec
964             ,   x_return_status               => l_return_status
965             );
966 
967             IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
968                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
969             ELSIF l_return_status = FND_API.G_RET_STS_ERROR THEN
970                 RAISE FND_API.G_EXC_ERROR;
971             END IF;
972 
973             x_Assignment_tbl(I)            := l_Assignment_rec;
974 
975         END IF;
976 
977     END LOOP;
978 
979     --  Set return status
980 
981     x_return_status := FND_API.G_RET_STS_SUCCESS;
982 
983     --  Get message count and data
984 
985     FND_MSG_PUB.Count_And_Get
986     (   p_count                       => x_msg_count
987     ,   p_data                        => x_msg_data
988     );
989 
990 
991 EXCEPTION
992 
993     WHEN FND_API.G_EXC_ERROR THEN
994 
995         x_return_status := FND_API.G_RET_STS_ERROR;
996 
997         --  Get message count and data
998 
999         FND_MSG_PUB.Count_And_Get
1000         (   p_count                       => x_msg_count
1001         ,   p_data                        => x_msg_data
1002         );
1003 
1004         --  Rollback
1005 
1006         ROLLBACK TO Lock_Assignment_PVT;
1007 
1008     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1009 
1010         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1011 
1012         --  Get message count and data
1013 
1014         FND_MSG_PUB.Count_And_Get
1015         (   p_count                       => x_msg_count
1016         ,   p_data                        => x_msg_data
1017         );
1018 
1019         --  Rollback
1020 
1021         ROLLBACK TO Lock_Assignment_PVT;
1022 
1023     WHEN OTHERS THEN
1024 
1025         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1026 
1027         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1028         THEN
1029             FND_MSG_PUB.Add_Exc_Msg
1030             (   G_PKG_NAME
1031             ,   'Lock_Assignment'
1032             );
1033         END IF;
1034 
1035         --  Get message count and data
1036 
1037         FND_MSG_PUB.Count_And_Get
1038         (   p_count                       => x_msg_count
1039         ,   p_data                        => x_msg_data
1040         );
1041 
1042         --  Rollback
1043 
1044         ROLLBACK TO Lock_Assignment_PVT;
1045 
1046 END Lock_Assignment;
1047 
1048 --  Start of Comments
1049 --  API name    Get_Assignment
1050 --  Type        Private
1051 --  Function
1052 --
1053 --  Pre-reqs
1054 --
1055 --  Parameters
1056 --
1057 --  Version     Current version = 1.0
1058 --              Initial version = 1.0
1059 --
1060 --  Notes
1061 --
1062 --  End of Comments
1063 
1064 PROCEDURE Get_Assignment
1065 (   p_api_version_number            IN  NUMBER
1066 ,   p_init_msg_list                 IN  VARCHAR2 := FND_API.G_FALSE
1067 ,   x_return_status                 OUT NOCOPY VARCHAR2
1068 ,   x_msg_count                     OUT NOCOPY NUMBER
1069 ,   x_msg_data                      OUT NOCOPY VARCHAR2
1070 ,   p_Assignment_Set_Id             IN  NUMBER
1071 ,   x_Assignment_Set_rec            OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type
1072 ,   x_Assignment_tbl                OUT NOCOPY MRP_Src_Assignment_PUB.Assignment_Tbl_Type
1073 )
1074 IS
1075 l_api_version_number          CONSTANT NUMBER := 1.0;
1076 l_api_name                    CONSTANT VARCHAR2(30):= 'Get_Assignment';
1077 l_Assignment_Set_rec          MRP_Src_Assignment_PUB.Assignment_Set_Rec_Type;
1078 l_Assignment_tbl              MRP_Src_Assignment_PUB.Assignment_Tbl_Type;
1079 BEGIN
1080 
1081     --  Standard call to check for call compatibility
1082 
1083     IF NOT FND_API.Compatible_API_Call
1084            (   l_api_version_number
1085            ,   p_api_version_number
1086            ,   l_api_name
1087            ,   G_PKG_NAME
1088            )
1089     THEN
1090         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1091     END IF;
1092 
1093     --  Initialize message list.
1094 
1095     IF FND_API.to_Boolean(p_init_msg_list) THEN
1096         FND_MSG_PUB.initialize;
1097     END IF;
1098 
1099     --  Get Assignment_Set
1100 
1101     l_Assignment_Set_rec :=  MRP_Assignment_Set_Handlers.Query_Row
1102     (   p_Assignment_Set_Id           => p_Assignment_Set_Id
1103     );
1104 
1105     --  Get Assignment ( parent = Assignment_Set )
1106 
1107     l_Assignment_tbl :=  MRP_Assignment_Handlers.Query_Rows
1108     (   p_Assignment_Set_Id           => l_Assignment_Set_rec.Assignment_Set_Id
1109     );
1110 
1111 
1112     --  Load out parameters
1113 
1114     x_Assignment_Set_rec           := l_Assignment_Set_rec;
1115     x_Assignment_tbl               := l_Assignment_tbl;
1116 
1117     --  Set return status
1118 
1119     x_return_status := FND_API.G_RET_STS_SUCCESS;
1120 
1121     --  Get message count and data
1122 
1123     FND_MSG_PUB.Count_And_Get
1124     (   p_count                       => x_msg_count
1125     ,   p_data                        => x_msg_data
1126     );
1127 
1128 
1129 EXCEPTION
1130 
1131     WHEN FND_API.G_EXC_ERROR THEN
1132 
1133         x_return_status := FND_API.G_RET_STS_ERROR;
1134 
1135         --  Get message count and data
1136 
1137         FND_MSG_PUB.Count_And_Get
1138         (   p_count                       => x_msg_count
1139         ,   p_data                        => x_msg_data
1140         );
1141 
1142     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1143 
1144         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1145 
1146         --  Get message count and data
1147 
1148         FND_MSG_PUB.Count_And_Get
1149         (   p_count                       => x_msg_count
1150         ,   p_data                        => x_msg_data
1151         );
1152 
1153     WHEN OTHERS THEN
1154 
1155         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1156 
1157         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1158         THEN
1159             FND_MSG_PUB.Add_Exc_Msg
1160             (   G_PKG_NAME
1161             ,   'Get_Assignment'
1162             );
1163         END IF;
1164 
1165         --  Get message count and data
1166 
1167         FND_MSG_PUB.Count_And_Get
1168         (   p_count                       => x_msg_count
1169         ,   p_data                        => x_msg_data
1170         );
1171 
1172 END Get_Assignment;
1173 
1174 END MRP_Assignment_PVT;