DBA Data[Home] [Help]

PACKAGE BODY: APPS.MRP_DEFAULT_FLOW_SCHEDULE

Source


1 PACKAGE BODY MRP_Default_Flow_Schedule AS
2 /* $Header: MRPDSCNB.pls 120.4 2011/12/02 09:35:00 sisankar ship $ */
3 
4 --  Global constant holding the package name
5 
6 G_PKG_NAME                    CONSTANT VARCHAR2(30) := 'MRP_Default_Flow_Schedule';
7 
8 --  Package global used within the package.
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 g_flow_schedule_rec           MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
16 
17 --  Get functions.
18 
19 FUNCTION Get_Alternate_Bom_Designator
20 RETURN VARCHAR2
21 IS
22 BEGIN
23 
24     RETURN NULL;
25 
26 END Get_Alternate_Bom_Designator;
27 
28 FUNCTION Get_Alternate_Routing_Desig
29 RETURN VARCHAR2
30 IS
31 
32   CURSOR C1(p_item_id	IN	NUMBER,
33 	p_org_id	IN	NUMBER,
34 	p_line_id	IN	NUMBER) IS
35   SELECT alternate_routing_designator
36   FROM bom_operational_routings
37   WHERE line_id = p_line_id
38   AND assembly_item_id = p_item_id
39   AND organization_id = p_org_id
40   AND cfm_routing_flag = 1
41   ORDER BY alternate_routing_designator desc;
42 
43   l_alt_rtg_desig	VARCHAR2(10);
44 
45 BEGIN
46 
47     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
48         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
49         g_flow_schedule_rec.organization_id IS NOT NULL AND
50         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
51         g_flow_schedule_rec.line_id IS NOT NULL AND
52         g_flow_schedule_rec.line_id <> FND_API.G_MISS_NUM
53     THEN
54 
55         OPEN C1(g_flow_schedule_rec.primary_item_id,
56 		g_flow_schedule_rec.organization_id,
57 		g_flow_schedule_rec.line_id);
58         LOOP
59             FETCH C1 into l_alt_rtg_desig;
60             /* We just want one row so exit */
61             EXIT;
62         END LOOP;
63         CLOSE C1;
64 
65         RETURN l_alt_rtg_desig;
66 
67     ELSE
68 
69         RETURN NULL;
70 
71     END IF;
72 
73 EXCEPTION
74 
75     WHEN NO_DATA_FOUND THEN
76 
77         RETURN NULL;
78 
79     WHEN OTHERS THEN
80 
81         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
82         THEN
83             FND_MSG_PUB.Add_Exc_Msg
84             (   G_PKG_NAME,
85                 'Get_Alternate_Routing_Desig'
86             );
87         END IF;
88 
89         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
90 
91 END Get_Alternate_Routing_Desig;
92 
93 FUNCTION Get_Bom_Revision
94 RETURN VARCHAR2
95 IS
96 l_bom_revision		VARCHAR(3) := NULL;
97 l_revision		VARCHAR(3) := NULL;
98 l_error_number 		NUMBER := 1;
99 l_revision_date		DATE := NULL;
100 BEGIN
101 
102     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
103         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
104         g_flow_schedule_rec.organization_id IS NOT NULL AND
105         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
106         g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
107         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE
108     THEN
109 
110         IF g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE THEN
111             l_revision_date := NULL;
112         ELSE
113             l_revision_date := g_flow_schedule_rec.bom_revision_date;
114         END IF;
115 
116         l_error_number := WIP_FLOW_DERIVE.Bom_Revision(
117 				l_bom_revision,
118 				l_revision,
119 				l_revision_date,
120 				g_flow_schedule_rec.primary_item_id,
121 				g_flow_schedule_rec.scheduled_completion_date,
122  				g_flow_schedule_rec.organization_id
123 			  );
124 
125         IF l_error_number = 1 THEN
126 
127             RETURN l_bom_revision;
128 
129         ELSE
130 
131             -- If we couldn't retrieve the BOM, we don't care because
132             -- it is not a required field so we just return null.
133             RETURN NULL;
134 
135         END IF;
136 
137     ELSE
138 
139         RETURN NULL;
140 
141     END IF;
142 
143 END Get_Bom_Revision;
144 
145 FUNCTION Get_Bom_Revision_Date
146 RETURN DATE
147 IS
148 l_bom_revision		VARCHAR(3) := NULL;
149 l_revision		VARCHAR(3) := NULL;
150 l_error_number 		NUMBER := 1;
151 l_revision_date		DATE := NULL;
152 BEGIN
153 
154     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
155         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
156         g_flow_schedule_rec.organization_id IS NOT NULL AND
157         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
158         g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
159         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE
160     THEN
161 
162         /* Fix for bug 2977987: Initialized l_revision_date instead of
163            l_bom_revision so that scheduled_completion_date is returned
164            instead of sysdate */
165 
166         IF g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE THEN
167             l_revision_date := NULL;
168         ELSE
169             l_revision_date := g_flow_schedule_rec.bom_revision_date;
170         END IF;
171 
172         l_error_number := WIP_FLOW_DERIVE.Bom_Revision(
173 				l_bom_revision,
174 				l_revision,
175 				l_revision_date,
176 				g_flow_schedule_rec.primary_item_id,
177 				g_flow_schedule_rec.scheduled_completion_date,
178  				g_flow_schedule_rec.organization_id
179 			  );
180 
181         -- revision_date should be null if revision is null
182         IF (l_error_number = 1 and l_bom_revision is not null) THEN
183 
184             RETURN l_revision_date;
185 
186         ELSE
187 
188             -- If we couldn't retrieve the BOM, we don't care because
189             -- it is not a required field so we just return null.
190             RETURN NULL;
191 
192         END IF;
193 
194     ELSE
195 
196         RETURN NULL;
197 
198     END IF;
199 
200 END Get_Bom_Revision_Date;
201 
202 FUNCTION Get_Build_Sequence
203 RETURN NUMBER
204 IS
205 BEGIN
206 
207     RETURN NULL;
208 
209 END Get_Build_Sequence;
210 
211 FUNCTION Get_Class
212 RETURN VARCHAR2
213 IS
214 l_class_code        VARCHAR2(10) := NULL;
215 l_project_id        NUMBER := NULL;
216 l_project_name      VARCHAR2(30) := NULL;
217 l_error_number      NUMBER := 1;
218 l_err_mesg          VARCHAR2(80) := NULL;
219 l_default_class     VARCHAR2(10) := NULL;
220 BEGIN
221 
222     -- Use wip procedure to get class code.  Class code is dependent
223     -- on item, organization, and project.
224 
225     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
226         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
227         g_flow_schedule_rec.organization_id IS NOT NULL AND
228         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
229     THEN
230 
231         IF g_flow_schedule_rec.project_id = FND_API.G_MISS_NUM THEN
232             l_project_id := NULL;
233         ELSE
234             l_project_id := g_flow_schedule_rec.project_id;
235         END IF;
236 
237         -- If the project is defined then we need to have a class code
238         -- defined at the project level.
239         -- If not, raise an expected error to the user.
240         IF l_project_id IS NOT NULL THEN
241           BEGIN
242 
243             SELECT wip_acct_class_code, project_number
244             INTO l_class_code, l_project_name
245             FROM mrp_project_parameters_v
246             WHERE project_id = l_project_id
247             AND organization_id = g_flow_schedule_rec.organization_id;
248 
249           EXCEPTION
250             WHEN NO_DATA_FOUND THEN
251 
252               IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
253               THEN
254 
255                 FND_MESSAGE.SET_NAME('MRP','MRP_NO_PROJ_CLASS_CODE');
256                 FND_MESSAGE.SET_TOKEN('PROJECT',l_project_name);
257                 FND_MSG_PUB.Add;
258 
259                 RAISE FND_API.G_EXC_ERROR;
260 
261               END IF;
262 
263           END;
264 
265         END IF;
266 
267         l_error_number := WIP_FLOW_DERIVE.Class_Code(l_class_code,
268 				l_err_mesg,
269 				g_flow_schedule_rec.organization_id,
270 				g_flow_schedule_rec.primary_item_id,
271 				4,
272 				l_project_id);
273 
274         IF l_error_number = 1 THEN
275 
276              RETURN l_class_code;
277 
278         ELSE
279 
280             -- If the procedure returns with error, then was it
281             -- because there is no default defined at the org level.
282             -- If so, raise an expected error to the user.
283             BEGIN
284 
285                 SELECT default_discrete_class
286                 INTO l_default_class
287                 FROM wip_parameters
288                 WHERE organization_id = g_flow_schedule_rec.organization_id;
289 
290                 RETURN l_default_class;
291 
292             EXCEPTION
293                 WHEN NO_DATA_FOUND THEN
294 
295                     IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
296                     THEN
297 
298                         FND_MESSAGE.SET_NAME('MRP','MRP-NO_DEFAULT_CLASS');
299                         FND_MSG_PUB.Add;
300 
301                     END IF;
302 
303                     RAISE FND_API.G_EXC_ERROR;
304 
305                 WHEN OTHERS THEN
306 
307                     -- l_err_mesg is not used because class code procedure
308                     -- returns translated message
309 
310                     IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
311                     THEN
312                         FND_MSG_PUB.Add_Exc_Msg
313                         (   G_PKG_NAME,
314                             'Get_Class: '||l_err_mesg
315                         );
316                     END IF;
317 
318                     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
319 
320             END;
321 
322         END IF;
323 
324     ELSE
325 
326         RETURN NULL;
327 
328     END IF;
329 
330 END Get_Class;
331 
332 FUNCTION Get_Completion_Locator
333 RETURN NUMBER
334 IS
335 l_alt_routing		VARCHAR(10) := NULL;
336 l_subinventory		VARCHAR(10) := NULL;
337 l_locator_id		NUMBER := NULL;
338 l_error_number		NUMBER := 1;
339 BEGIN
340 
341     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
342         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
343         g_flow_schedule_rec.organization_id IS NOT NULL AND
344         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
345     THEN
346 
347         IF g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR
348         THEN
349             l_alt_routing := NULL;
350         ELSE
351             l_alt_routing := g_flow_schedule_rec.alternate_routing_desig;
352         END IF;
353 
354         l_error_number := WIP_FLOW_DERIVE.Routing_Completion_Sub_Loc(
355 				l_subinventory,
356 				l_locator_id,
357 				g_flow_schedule_rec.primary_item_id,
358  				g_flow_schedule_rec.organization_id,
359                                 l_alt_routing
360 			  );
361 
362         IF l_error_number = 1 THEN
363 
364             RETURN l_locator_id;
365 
366         ELSE
367 
368             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
369             THEN
370                 FND_MSG_PUB.Add_Exc_Msg
371                 (   G_PKG_NAME,
372                     'Get_Completion_Locator'
373                 );
374             END IF;
375 
376             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
377 
378         END IF;
379 
380     ELSE
381 
382         RETURN NULL;
383 
384     END IF;
385 
386 END Get_Completion_Locator;
387 
388 FUNCTION Get_Completion_Subinventory
389 RETURN VARCHAR2
390 IS
391 l_alt_routing		VARCHAR(10) := NULL;
392 l_subinventory		VARCHAR(10) := NULL;
393 l_locator_id		NUMBER := NULL;
394 l_error_number		NUMBER := 1;
395 BEGIN
396 
397     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
398         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
399         g_flow_schedule_rec.organization_id IS NOT NULL AND
400         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
401     THEN
402 
403         IF g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR
404         THEN
405             l_alt_routing := NULL;
406         ELSE
407             l_alt_routing := g_flow_schedule_rec.alternate_routing_desig;
408         END IF;
409 
410         l_error_number := WIP_FLOW_DERIVE.Routing_Completion_Sub_Loc(
411 				l_subinventory,
412 				l_locator_id,
413 				g_flow_schedule_rec.primary_item_id,
414  				g_flow_schedule_rec.organization_id,
415                                 l_alt_routing
416 			  );
417 
418         IF l_error_number = 1 THEN
419 
420             RETURN l_subinventory;
421 
422         ELSE
423 
424             IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
425             THEN
426                 FND_MSG_PUB.Add_Exc_Msg
427                 (   G_PKG_NAME,
428                     'Get_Completion_Subinventory'
429                 );
430             END IF;
431 
432             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
433 
434         END IF;
435 
436     ELSE
437 
438         RETURN NULL;
439 
440     END IF;
441 
442 END Get_Completion_Subinventory;
443 
444 FUNCTION Get_Date_Closed
445 RETURN DATE
446 IS
447 BEGIN
448 
449     RETURN NULL;
450 
451 END Get_Date_Closed;
452 
453 FUNCTION Get_Demand_Class
454 RETURN VARCHAR2
455 IS
456 BEGIN
457 
458     RETURN NULL;
459 
460 END Get_Demand_Class;
461 
462 FUNCTION Get_Demand_Source_Delivery
463 RETURN VARCHAR2
464 IS
465 BEGIN
466 
467     RETURN NULL;
468 
469 END Get_Demand_Source_Delivery;
470 
471 FUNCTION Get_Demand_Source_Header
472 RETURN NUMBER
473 IS
474 BEGIN
475 
476     RETURN NULL;
477 
478 END Get_Demand_Source_Header;
479 
480 FUNCTION Get_Demand_Source_Line
481 RETURN VARCHAR2
482 IS
483 BEGIN
484 
485     RETURN NULL;
486 
487 END Get_Demand_Source_Line;
488 
489 FUNCTION Get_Demand_Source_Type
490 RETURN NUMBER
491 IS
492 BEGIN
493 
494     RETURN NULL;
495 
496 END Get_Demand_Source_Type;
497 
498 FUNCTION Get_Line
499 RETURN NUMBER
500 IS
501   l_line_id	NUMBER;
502 BEGIN
503 
504     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
505         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
506         g_flow_schedule_rec.organization_id IS NOT NULL AND
507         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
508     THEN
509       SELECT line_id
510       INTO l_line_id
511       FROM bom_operational_routings
512       WHERE cfm_routing_flag = 1
513         AND ((alternate_routing_designator IS NULL) OR
514 		(alternate_routing_designator IS NOT NULL
515 		AND priority = (SELECT min(priority)
516 		FROM bom_operational_routings
517 		WHERE cfm_routing_flag = 1
518                   AND assembly_item_id = g_flow_schedule_rec.primary_item_id
519                   AND organization_id = g_flow_schedule_rec.organization_id
520                   AND NOT EXISTS (SELECT line_id FROM bom_operational_routings
521               		WHERE cfm_routing_flag = 1
522 			AND alternate_routing_designator IS NULL
523                         AND assembly_item_id = g_flow_schedule_rec.primary_item_id
524                         AND organization_id = g_flow_schedule_rec.organization_id
525 			))))
526         AND assembly_item_id = g_flow_schedule_rec.primary_item_id
527         AND organization_id = g_flow_schedule_rec.organization_id;
528 
529       RETURN l_line_id;
530 
531     ELSE
532 
533        RETURN NULL;
534 
535     END IF;
536 
537 EXCEPTION
538 
539     WHEN OTHERS THEN
540 
541         RETURN NULL;
542 
543 END Get_Line;
544 
545 FUNCTION Get_Material_Account
546 RETURN NUMBER
547 IS
548 l_material_account	NUMBER := NULL;
549 BEGIN
550 
551     IF g_flow_schedule_rec.class_code IS NOT NULL AND
552 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
553         g_flow_schedule_rec.organization_id IS NOT NULL AND
554         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
555     THEN
556 
557         SELECT MATERIAL_ACCOUNT
558         INTO l_material_account
559         FROM WIP_ACCOUNTING_CLASSES
560         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
561         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
562 
563         RETURN l_material_account;
564 
565     ELSE
566 
567         RETURN NULL;
568 
569     END IF;
570 
571 EXCEPTION
572 
573     WHEN OTHERS THEN
574 
575         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
576         THEN
577             FND_MSG_PUB.Add_Exc_Msg
578             (   G_PKG_NAME,
579                 'Get_Material_Account'
580             );
581         END IF;
582 
583         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
584 
585 END Get_Material_Account;
586 
587 FUNCTION Get_Material_Overhead_Account
588 RETURN NUMBER
589 IS
590 l_material_overhead_account	NUMBER := NULL;
591 BEGIN
592 
593     IF g_flow_schedule_rec.class_code IS NOT NULL AND
594 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
595         g_flow_schedule_rec.organization_id IS NOT NULL AND
596         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
597     THEN
598 
599         SELECT MATERIAL_OVERHEAD_ACCOUNT
600         INTO l_material_overhead_account
601         FROM WIP_ACCOUNTING_CLASSES
602         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
603         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
604 
605         RETURN l_material_overhead_account;
606 
607     ELSE
608 
609         RETURN NULL;
610 
611     END IF;
612 
613 EXCEPTION
614 
615     WHEN OTHERS THEN
616 
617         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
618         THEN
619             FND_MSG_PUB.Add_Exc_Msg
620             (   G_PKG_NAME,
621                 'Get_Material_Overhead_Account'
622             );
623         END IF;
624 
625         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
626 
627 END Get_Material_Overhead_Account;
628 
629 FUNCTION Get_Material_Variance_Account
630 RETURN NUMBER
631 IS
632 l_material_variance_account	NUMBER := NULL;
633 BEGIN
634 
635     IF g_flow_schedule_rec.class_code IS NOT NULL AND
636 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
637         g_flow_schedule_rec.organization_id IS NOT NULL AND
638         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
639     THEN
640 
641         SELECT MATERIAL_VARIANCE_ACCOUNT
642         INTO l_material_variance_account
643         FROM WIP_ACCOUNTING_CLASSES
644         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
645         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
646 
647         RETURN l_material_variance_account;
648 
649     ELSE
650 
651         RETURN NULL;
652 
653     END IF;
654 
655 EXCEPTION
656 
657     WHEN OTHERS THEN
658 
659         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
660         THEN
661             FND_MSG_PUB.Add_Exc_Msg
662             (   G_PKG_NAME,
663                 'Get_Material_Variance_Account'
664             );
665         END IF;
666 
667         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
668 
669 END Get_Material_Variance_Account;
670 
671 FUNCTION Get_Mps_Net_Quantity
672 RETURN NUMBER
673 IS
674 BEGIN
675 
676     RETURN NULL;
677 
678 END Get_Mps_Net_Quantity;
679 
680 FUNCTION Get_Mps_Scheduled_Comp_Date
681 RETURN DATE
682 IS
683 BEGIN
684 
685     RETURN NULL;
686 
687 END Get_Mps_Scheduled_Comp_Date;
688 
689 FUNCTION Get_Organization
690 RETURN NUMBER
691 IS
692 BEGIN
693 
694     RETURN NULL;
695 
696 END Get_Organization;
697 
698 FUNCTION Get_Outside_Processing_Acct
699 RETURN NUMBER
700 IS
701 l_outside_processing_acct	NUMBER := NULL;
702 BEGIN
703 
704     IF g_flow_schedule_rec.class_code IS NOT NULL AND
705 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
706         g_flow_schedule_rec.organization_id IS NOT NULL AND
707         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
708     THEN
709 
710         SELECT OUTSIDE_PROCESSING_ACCOUNT
711         INTO l_outside_processing_acct
712         FROM WIP_ACCOUNTING_CLASSES
713         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
714         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
715 
716         RETURN l_outside_processing_acct;
717 
718     ELSE
719 
720         RETURN NULL;
721 
722     END IF;
723 
724 EXCEPTION
725 
726     WHEN OTHERS THEN
727 
728         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
729         THEN
730             FND_MSG_PUB.Add_Exc_Msg
731             (   G_PKG_NAME,
732                 'Get_Outside_Processing_Acct'
733             );
734         END IF;
735 
736         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
737 
738 END Get_Outside_Processing_Acct;
739 
740 FUNCTION Get_Outside_Proc_Var_Acct
741 RETURN NUMBER
742 IS
743 l_outside_proc_var_acct		NUMBER := NULL;
744 BEGIN
745 
746     IF g_flow_schedule_rec.class_code IS NOT NULL AND
747 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
748         g_flow_schedule_rec.organization_id IS NOT NULL AND
749         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
750     THEN
751 
752         SELECT OUTSIDE_PROC_VARIANCE_ACCOUNT
753         INTO l_outside_proc_var_acct
754         FROM WIP_ACCOUNTING_CLASSES
755         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
756         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
757 
758         RETURN l_outside_proc_var_acct;
759 
760     ELSE
761 
762         RETURN NULL;
763 
764     END IF;
765 
766 EXCEPTION
767 
768     WHEN OTHERS THEN
769 
770         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
771         THEN
772             FND_MSG_PUB.Add_Exc_Msg
773             (   G_PKG_NAME,
774                 'Get_Outside_Proc_Var_Acct'
775             );
776         END IF;
777 
778         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
779 
780 END Get_Outside_Proc_Var_Acct;
781 
782 FUNCTION Get_Overhead_Account
783 RETURN NUMBER
784 IS
785 l_overhead_account	NUMBER := NULL;
786 BEGIN
787 
788     IF g_flow_schedule_rec.class_code IS NOT NULL AND
789 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
790         g_flow_schedule_rec.organization_id IS NOT NULL AND
791         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
792     THEN
793 
794         SELECT OVERHEAD_ACCOUNT
795         INTO l_overhead_account
796         FROM WIP_ACCOUNTING_CLASSES
797         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
798         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
799 
800         RETURN l_overhead_account;
801 
802     ELSE
803 
804         RETURN NULL;
805 
806     END IF;
807 
808 EXCEPTION
809 
810     WHEN OTHERS THEN
811 
812         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
813         THEN
814             FND_MSG_PUB.Add_Exc_Msg
815             (   G_PKG_NAME,
816                 'Get_Overhead_Account'
817             );
818         END IF;
819 
820         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
821 
822 END Get_Overhead_Account;
823 
824 FUNCTION Get_Overhead_Variance_Account
825 RETURN NUMBER
826 IS
827 l_overhead_variance_account	NUMBER := NULL;
828 BEGIN
829 
830     IF g_flow_schedule_rec.class_code IS NOT NULL AND
831 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
832         g_flow_schedule_rec.organization_id IS NOT NULL AND
833         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
834     THEN
835 
836         SELECT OVERHEAD_VARIANCE_ACCOUNT
837         INTO l_overhead_variance_account
838         FROM WIP_ACCOUNTING_CLASSES
839         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
840         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
841 
842         RETURN l_overhead_variance_account;
843 
844     ELSE
845 
846         RETURN NULL;
847 
848     END IF;
849 
850 EXCEPTION
851 
852     WHEN OTHERS THEN
853 
854         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
855         THEN
856             FND_MSG_PUB.Add_Exc_Msg
857             (   G_PKG_NAME,
858                 'Get_Overhead_Variance_Account'
859             );
860         END IF;
861 
862         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
863 
864 END Get_Overhead_Variance_Account;
865 
866 FUNCTION Get_Planned_Quantity
867 RETURN NUMBER
868 IS
869 BEGIN
870 
871     RETURN NULL;
872 
873 END Get_Planned_Quantity;
874 
875 FUNCTION Get_Primary_Item
876 RETURN NUMBER
877 IS
878 BEGIN
879 
880     RETURN NULL;
881 
882 END Get_Primary_Item;
883 
884 FUNCTION Get_Project
885 RETURN NUMBER
886 IS
887 BEGIN
888 
889     RETURN NULL;
890 
891 END Get_Project;
892 
893 FUNCTION Get_Quantity_Completed
894 RETURN NUMBER
895 IS
896 BEGIN
897 
898     RETURN 0;
899 
900 END Get_Quantity_Completed;
901 
902 FUNCTION Get_Request_Id
903 RETURN NUMBER
904 IS
905   l_request_id		NUMBER := 0;
906 BEGIN
907 
908     SELECT USERENV( 'SESSIONID' )
909     INTO l_request_id
910     FROM DUAL;
911 
912     RETURN l_request_id;
913 
914 END Get_Request_Id;
915 
916 FUNCTION Get_Resource_Account
917 RETURN NUMBER
918 IS
919 l_resource_account	NUMBER := NULL;
920 BEGIN
921 
922     IF g_flow_schedule_rec.class_code IS NOT NULL AND
923 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
924         g_flow_schedule_rec.organization_id IS NOT NULL AND
925         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
926     THEN
927 
928         SELECT RESOURCE_ACCOUNT
929         INTO l_resource_account
930         FROM WIP_ACCOUNTING_CLASSES
931         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
932         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
933 
934         RETURN l_resource_account;
935 
936     ELSE
937 
938         RETURN NULL;
939 
940     END IF;
941 
942 EXCEPTION
943 
944     WHEN OTHERS THEN
945 
946         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
947         THEN
948             FND_MSG_PUB.Add_Exc_Msg
949             (   G_PKG_NAME,
950                 'Get_Resource_Account'
951             );
952         END IF;
953 
954         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
955 
956 END Get_Resource_Account;
957 
958 FUNCTION Get_Resource_Variance_Account
959 RETURN NUMBER
960 IS
961 l_resource_variance_account	NUMBER := NULL;
962 BEGIN
963 
964     IF g_flow_schedule_rec.class_code IS NOT NULL AND
965 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
966         g_flow_schedule_rec.organization_id IS NOT NULL AND
967         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
968     THEN
969 
970         SELECT RESOURCE_VARIANCE_ACCOUNT
971         INTO l_resource_variance_account
972         FROM WIP_ACCOUNTING_CLASSES
973         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
974         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
975 
976         RETURN l_resource_variance_account;
977 
978     ELSE
979 
980         RETURN NULL;
981 
982     END IF;
983 
984 EXCEPTION
985 
986     WHEN OTHERS THEN
987 
988         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
989         THEN
990             FND_MSG_PUB.Add_Exc_Msg
991             (   G_PKG_NAME,
992                 'Get_Resource_Variance_Account'
993             );
994         END IF;
995 
996         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
997 
998 END Get_Resource_Variance_Account;
999 
1000 FUNCTION Get_Routing_Revision
1001 RETURN VARCHAR2
1002 IS
1003 l_routing_revision	VARCHAR(3) := NULL;
1004 l_error_number		NUMBER := 1;
1005 l_revision_date 	DATE := NULL;
1006 BEGIN
1007 
1008     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
1009         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
1010         g_flow_schedule_rec.organization_id IS NOT NULL AND
1011         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
1012         g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
1013         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE
1014     THEN
1015 
1016         IF g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE THEN
1017             l_revision_date := NULL;
1018         ELSE
1019             l_revision_date := g_flow_schedule_rec.routing_revision_date;
1020         END IF;
1021 
1022         l_error_number := WIP_FLOW_DERIVE.Routing_Revision(
1023 				l_routing_revision,
1024 				l_revision_date,
1025 				g_flow_schedule_rec.primary_item_id,
1026 				g_flow_schedule_rec.scheduled_completion_date,
1027  				g_flow_schedule_rec.organization_id
1028 			  );
1029 
1030         IF l_error_number = 1 THEN
1031 
1032             RETURN l_routing_revision;
1033 
1034         ELSIF l_routing_revision IS NULL THEN
1035 
1036             RETURN NULL;
1037 
1038         END IF;
1039 
1040     ELSE
1041 
1042         RETURN NULL;
1043 
1044     END IF;
1045 
1046 END Get_Routing_Revision;
1047 
1048 
1049 FUNCTION Get_Routing_Revision_Date
1050 RETURN DATE
1051 IS
1052 l_routing_revision	VARCHAR(3) := NULL;
1053 l_error_number		NUMBER := 1;
1054 l_revision_date 	DATE := NULL;
1055 BEGIN
1056 
1057     IF g_flow_schedule_rec.primary_item_id IS NOT NULL AND
1058         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
1059         g_flow_schedule_rec.organization_id IS NOT NULL AND
1060         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
1061         g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
1062         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE
1063     THEN
1064 
1065         IF g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE THEN
1066             l_revision_date := NULL;
1067         ELSE
1068             l_revision_date := g_flow_schedule_rec.routing_revision_date;
1069         END IF;
1070 
1071         l_error_number := WIP_FLOW_DERIVE.Routing_Revision(
1072 				l_routing_revision,
1073 				l_revision_date,
1074 				g_flow_schedule_rec.primary_item_id,
1075 				g_flow_schedule_rec.scheduled_completion_date,
1076  				g_flow_schedule_rec.organization_id
1077 			  );
1078 
1079         -- revision_date should be null, if revision is null
1080         IF (l_error_number = 1 and l_routing_revision is not null) THEN
1081 
1082             RETURN l_revision_date;
1083 
1084         ELSE
1085             RETURN NULL;
1086 
1087         END IF;
1088 
1089     ELSE
1090 
1091         RETURN NULL;
1092 
1093     END IF;
1094 
1095 END Get_Routing_Revision_Date;
1096 
1097 
1098 FUNCTION Get_Scheduled_Completion_Date
1099 RETURN DATE
1100 IS
1101 BEGIN
1102 
1103     RETURN NULL;
1104 
1105 END Get_Scheduled_Completion_Date;
1106 
1107 FUNCTION Get_Scheduled
1108 RETURN NUMBER
1109 IS
1110 BEGIN
1111 
1112     -- Return yes (1)
1113     RETURN 1;
1114 
1115 END Get_Scheduled;
1116 
1117 FUNCTION Get_Scheduled_Start_Date
1118 RETURN DATE
1119 IS
1120 l_variable_lead_time		NUMBER := 0;
1121 l_fixed_lead_time		NUMBER := 0;
1122 l_temp_date			DATE;
1123 l_lead_time                     NUMBER := 0;
1124 l_start_time                    NUMBER;
1125 l_end_time                      NUMBER;
1126 l_completion_date_time		DATE;
1127 l_completion_date		DATE;
1128 l_completion_time		NUMBER;
1129 l_new_end_time			NUMBER;
1130 
1131 /*Added below variables for bugfix:8261414 */
1132 l_completion_date_num           NUMBER;
1133 l_cal_code                      VARCHAR2(10);
1134 l_excep_code                    NUMBER;
1135 l_valid_date                    NUMBER;
1136 l_hr_line_rate                  NUMBER;
1137 l_sec                           NUMBER;
1138 l_last_comp_time                NUMBER;
1139 BEGIN
1140 
1141     IF g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
1142         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE AND
1143         g_flow_schedule_rec.organization_id IS NOT NULL AND
1144         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
1145         g_flow_schedule_rec.primary_item_id IS NOT NULL AND
1146         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
1147         g_flow_schedule_rec.planned_quantity IS NOT NULL AND
1148         g_flow_schedule_rec.planned_quantity <> FND_API.G_MISS_NUM AND
1149         g_flow_schedule_rec.line_id IS NOT NULL AND
1150         g_flow_schedule_rec.line_id <> FND_API.G_MISS_NUM
1151     THEN
1152 
1153         SELECT NVL(FIXED_LEAD_TIME,0),
1154 		NVL(VARIABLE_LEAD_TIME,0)
1155 	INTO l_fixed_lead_time, l_variable_lead_time
1156         FROM MTL_SYSTEM_ITEMS
1157         WHERE INVENTORY_ITEM_ID = g_flow_schedule_rec.primary_item_id
1158         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
1159 
1160         SELECT start_time, stop_time,maximum_rate
1161         INTO   l_start_time, l_end_time,l_hr_line_rate /*8261414 */
1162         FROM   wip_lines
1163         WHERE  line_id = g_flow_schedule_rec.line_id
1164         AND  organization_id = g_flow_schedule_rec.organization_id;
1165 
1166         --fix bug#3827600 /*Bugfix:8261414.Added equal to operator in below condition */
1167         if (l_end_time <= l_start_time) then
1168            l_new_end_time := 86400+l_end_time;
1169         else
1170           l_new_end_time := l_end_time;
1171         end if;
1172 
1173         l_completion_date := trunc(g_flow_schedule_rec.scheduled_completion_date);
1174 	l_completion_time := to_char(g_flow_schedule_rec.scheduled_completion_date,'SSSSS');
1175 
1176          /*Bug fix 8261414*. Below code will get the correct schedule completion date
1177           to be passed to calculate_begin_time function.
1178            If scheduled completion date given is in time slot when line is active then
1179            it is passed as it is.And when completion date falls in the time slot
1180           when line is inactive,next nearest time when line is active is considered as
1181           completion date.*/
1182 
1183           SELECT calendar_code,calendar_exception_set_id
1184           INTO   l_cal_code,l_excep_code
1185           FROM   mtl_parameters
1186           WHERE  organization_id = g_flow_schedule_rec.organization_id;
1187 
1188          l_completion_date_num := to_number(to_char(l_completion_date,'J'));
1189 
1190            if (l_end_time <= l_start_time) then
1191 
1192                       if (l_completion_time < l_end_time ) then
1193                           l_completion_date_num := l_completion_date_num - 1 ;
1194                           l_completion_time     := l_completion_time + 24*3600 ;
1195                       end if;
1196 
1197 
1198                       SELECT min(to_number(to_char(bom_cal.calendar_date,'J')))
1199                       into   l_valid_date
1200                       FROM   bom_calendar_dates bom_cal
1201                       WHERE  bom_cal.calendar_code = l_cal_code
1202                       AND    bom_cal.exception_set_id = l_excep_code
1203                       AND    bom_cal.calendar_date >= to_date(l_completion_date_num,'j')
1204                       AND    bom_cal.seq_num is NOT NULL;
1205 
1206                       l_last_comp_time := l_start_time;
1207 
1208                       if (l_valid_date = l_completion_date_num) then
1209                               if (l_completion_time > l_new_end_time) then
1210                                 l_last_comp_time := l_new_end_time;
1211                               elsif (l_completion_time > l_start_time ) then
1212                                 --l_sec := 3600/l_hr_line_rate;
1213                                 l_last_comp_time := l_completion_time;/*l_start_time+
1214                                   ceil((l_completion_time-l_start_time)/l_sec) * l_sec;
1215                                 l_last_comp_time := l_last_comp_time - l_sec; */
1216                               end if;
1217                      end if;
1218                      l_completion_time := l_last_comp_time;
1219                      l_completion_date :=  to_date(l_valid_date,'j');
1220 
1221 
1222          elsif (l_completion_time > l_start_time AND l_completion_time < l_new_end_time ) then
1223 
1224 
1225                  SELECT min(to_number(to_char(bom_cal.calendar_date,'J')))
1226                       into   l_valid_date
1227                       FROM   bom_calendar_dates bom_cal
1228                       WHERE  bom_cal.calendar_code = l_cal_code
1229                       AND    bom_cal.exception_set_id = l_excep_code
1230                       AND    bom_cal.calendar_date >= to_date(l_completion_date_num,'j')
1231                       AND    bom_cal.seq_num is NOT NULL;
1232 
1233                   if(l_valid_date <> l_completion_date_num) then
1234                     l_completion_date :=  to_date(l_valid_date,'j');
1235                     l_completion_time := l_start_time;
1236                   end if;
1237 
1238 
1239          end if;
1240 
1241 /*End Bug fix  8261414*/
1242 
1243 
1244                   /*Bugfix:8261414.Added additional AND condition */
1245         if (l_completion_time > l_new_end_time AND l_end_time > l_start_time ) then
1246           l_completion_date_time := l_completion_date + (l_new_end_time/86400);
1247         /*Bugfix:8261414.Added additional AND condition */
1248         elsif (l_completion_time < l_start_time AND l_end_time > l_start_time) then
1249           l_completion_date := mrp_calendar.prev_work_day(
1250                                 g_flow_schedule_rec.organization_id,
1251                                 1,
1252                                 flm_timezone.server_to_calendar(l_completion_date)-1);
1253 
1254           l_completion_date := flm_timezone.calendar_to_server(l_completion_date,l_completion_time);
1255           l_completion_date_time := trunc(l_completion_date) + (l_new_end_time/86400);
1256 
1257         else
1258           l_completion_date_time := l_completion_date + (l_completion_time/86400);
1259 
1260         end if;
1261         --end of fix bug#3827600
1262 
1263         l_lead_time := l_fixed_lead_time + (l_variable_lead_time *
1264                        (g_flow_schedule_rec.planned_quantity-1));
1265 
1266         l_temp_date := MRP_LINE_SCHEDULE_ALGORITHM.calculate_begin_time(
1267                                 g_flow_schedule_rec.organization_id,
1268                                 l_completion_date_time,
1269                                 l_lead_time,
1270                                 l_start_time,
1271                                 l_end_time /*l_new_end_time */);/*Bugfix:8261414.Passed l_end_time as l_end_time is converted to l_new_end_time in called function. */
1272 
1273         RETURN l_temp_date;
1274 
1275     ELSE
1276 
1277         RETURN NULL;
1278 
1279     END IF;
1280 
1281 EXCEPTION
1282 
1283     WHEN OTHERS THEN
1284 
1285         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1286         THEN
1287             FND_MSG_PUB.Add_Exc_Msg
1288             (   G_PKG_NAME,
1289                 'Get_Scheduled_Start_Date'
1290             );
1291         END IF;
1292 
1293         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1294 
1295 END Get_Scheduled_Start_Date;
1296 
1297 FUNCTION Get_Schedule_Group
1298 RETURN NUMBER
1299 IS
1300 BEGIN
1301 
1302     RETURN NULL;
1303 
1304 END Get_Schedule_Group;
1305 
1306 FUNCTION Get_Schedule_Number
1307 RETURN VARCHAR2
1308 IS
1309 l_schedule_number	VARCHAR2(30) := NULL;
1310 l_error_number		NUMBER := 1;
1311 BEGIN
1312 
1313     l_error_number := WIP_FLOW_DERIVE.Schedule_Number(l_schedule_number);
1314 
1315     IF l_error_number = 1 THEN
1316 
1317         RETURN l_schedule_number;
1318 
1319     ELSE
1320 
1321         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1322         THEN
1323             FND_MSG_PUB.Add_Exc_Msg
1324             (   G_PKG_NAME,
1325                 'Get_Schedule_Number'
1326              );
1327         END IF;
1328 
1329         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1330 
1331         RETURN NULL;
1332 
1333     END IF;
1334 
1335 END Get_Schedule_Number;
1336 
1337 FUNCTION Get_Status
1338 RETURN NUMBER
1339 IS
1340 BEGIN
1341 
1342     -- Return Open (1)
1343     RETURN 1;
1344 
1345 END Get_Status;
1346 
1347 FUNCTION Get_Std_Cost_Adjustment_Acct
1348 RETURN NUMBER
1349 IS
1350 l_std_cost_adjustment_acct	NUMBER := NULL;
1351 BEGIN
1352 
1353     IF g_flow_schedule_rec.class_code IS NOT NULL AND
1354 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
1355         g_flow_schedule_rec.organization_id IS NOT NULL AND
1356         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
1357     THEN
1358 
1359         SELECT STD_COST_ADJUSTMENT_ACCOUNT
1360         INTO l_std_cost_adjustment_acct
1361         FROM WIP_ACCOUNTING_CLASSES
1362         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
1363         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
1364 
1365         RETURN l_std_cost_adjustment_acct;
1366 
1367     ELSE
1368 
1369         RETURN NULL;
1370 
1371     END IF;
1372 
1373 EXCEPTION
1374 
1375     WHEN OTHERS THEN
1376 
1377         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1378         THEN
1379             FND_MSG_PUB.Add_Exc_Msg
1380             (   G_PKG_NAME,
1381                 'Get_Std_Cost_Adjustment_Acct'
1382             );
1383         END IF;
1384 
1385         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1386 
1387 END Get_Std_Cost_Adjustment_Acct;
1388 
1389 FUNCTION Get_Task
1390 RETURN NUMBER
1391 IS
1392 BEGIN
1393 
1394     RETURN NULL;
1395 
1396 END Get_Task;
1397 
1398 FUNCTION Get_Wip_Entity
1399 RETURN NUMBER
1400 IS
1401 l_wip_entity_id		NUMBER := NULL;
1402 BEGIN
1403 
1404     -- Select from sequence
1405     SELECT WIP_ENTITIES_S.nextval
1406     INTO l_wip_entity_id
1407     FROM DUAL;
1408 
1409     RETURN l_wip_entity_id;
1410 
1411 EXCEPTION
1412 
1413     WHEN OTHERS THEN
1414 
1415         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1416         THEN
1417             FND_MSG_PUB.Add_Exc_Msg
1418             (   G_PKG_NAME,
1419                 'Get_Wip_Entity'
1420             );
1421         END IF;
1422 
1423         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1424 
1425 END Get_Wip_Entity;
1426 
1427 
1428 
1429 
1430 FUNCTION Get_End_Item_Unit_Number
1431 RETURN NUMBER
1432 IS
1433 BEGIN
1434 RETURN NULL;
1435 
1436 END Get_End_Item_Unit_Number;
1437 
1438 FUNCTION Get_Quantity_Scrapped
1439 RETURN NUMBER
1440 IS
1441 BEGIN
1442 RETURN 0;
1443 
1444 END Get_Quantity_Scrapped;
1445 
1446 PROCEDURE Get_Flex_Wip_Flow_Schedule
1447 IS
1448 BEGIN
1449 
1450     --  In the future call Flex APIs for defaults
1451 
1452     IF g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR THEN
1453         g_flow_schedule_rec.attribute1 := NULL;
1454     END IF;
1455 
1456     IF g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR THEN
1457         g_flow_schedule_rec.attribute10 := NULL;
1458     END IF;
1459 
1460     IF g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR THEN
1461         g_flow_schedule_rec.attribute11 := NULL;
1462     END IF;
1463 
1464     IF g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR THEN
1465         g_flow_schedule_rec.attribute12 := NULL;
1466     END IF;
1467 
1468     IF g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR THEN
1469         g_flow_schedule_rec.attribute13 := NULL;
1470     END IF;
1471 
1472     IF g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR THEN
1473         g_flow_schedule_rec.attribute14 := NULL;
1474     END IF;
1475 
1476     IF g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR THEN
1477         g_flow_schedule_rec.attribute15 := NULL;
1478     END IF;
1479 
1480     IF g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR THEN
1481         g_flow_schedule_rec.attribute2 := NULL;
1482     END IF;
1483 
1484     IF g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR THEN
1485         g_flow_schedule_rec.attribute3 := NULL;
1486     END IF;
1487 
1488     IF g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR THEN
1489         g_flow_schedule_rec.attribute4 := NULL;
1490     END IF;
1491 
1492     IF g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR THEN
1493         g_flow_schedule_rec.attribute5 := NULL;
1494     END IF;
1495 
1496     IF g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR THEN
1497         g_flow_schedule_rec.attribute6 := NULL;
1498     END IF;
1499 
1500     IF g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR THEN
1501         g_flow_schedule_rec.attribute7 := NULL;
1502     END IF;
1503 
1504     IF g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR THEN
1505         g_flow_schedule_rec.attribute8 := NULL;
1506     END IF;
1507 
1508     IF g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR THEN
1509         g_flow_schedule_rec.attribute9 := NULL;
1510     END IF;
1511 
1512     IF g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR THEN
1513         g_flow_schedule_rec.attribute_category := NULL;
1514     END IF;
1515 
1516 END Get_Flex_Wip_Flow_Schedule;
1517 
1518 --  Procedure Attributes
1519 
1520 PROCEDURE Attributes
1521 (   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1522 ,   p_iteration                     IN  NUMBER DEFAULT NULL
1523 ,   x_flow_schedule_rec             IN  OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1524 )
1525 IS
1526 	l_old_flow_schedule_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
1527 BEGIN
1528 
1529     --  Check number of iterations.
1530     -- If p_iteration is null, default to 1
1531     IF nvl(p_iteration, 1) > MRP_GLOBALS.G_MAX_DEF_ITERATIONS THEN
1532 
1533         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1534         THEN
1535 
1536             FND_MESSAGE.SET_NAME('MRP','MRP_DEF_MAX_ITERATION');
1537             FND_MSG_PUB.Add;
1538 
1539         END IF;
1540 
1541         RAISE FND_API.G_EXC_ERROR;
1542 
1543     END IF;
1544     --  Initialize g_flow_schedule_rec
1545 
1546     g_flow_schedule_rec := p_flow_schedule_rec;
1547 
1548     --  Default missing attributes.
1549 
1550     IF g_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR or g_flow_schedule_rec.alternate_bom_designator IS NULL THEN
1551 
1552         g_flow_schedule_rec.alternate_bom_designator := Get_Alternate_Bom_Designator;
1553 
1554         IF g_flow_schedule_rec.alternate_bom_designator IS NOT NULL THEN
1555 
1556             IF MRP_Validate.Alternate_Bom_Designator(g_flow_schedule_rec.alternate_bom_designator)
1557             THEN
1558                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1559                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ALTERNATE_BOM_DESIGNATOR
1560                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1561 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1562                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1563                 );
1564             ELSE
1565                 g_flow_schedule_rec.alternate_bom_designator := NULL;
1566             END IF;
1567 
1568         END IF;
1569 
1570     END IF;
1571 
1572     IF g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR or g_flow_schedule_rec.alternate_routing_desig IS NULL THEN
1573 
1574         g_flow_schedule_rec.alternate_routing_desig := Get_Alternate_Routing_Desig;
1575 
1576         IF g_flow_schedule_rec.alternate_routing_desig IS NOT NULL THEN
1577 
1578             IF MRP_Validate.Alternate_Routing_Desig(g_flow_schedule_rec.alternate_routing_desig)
1579             THEN
1580                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1581                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ALTERNATE_ROUTING_DESIG
1582                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1583 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1584                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1585                 );
1586             ELSE
1587                 g_flow_schedule_rec.alternate_routing_desig := NULL;
1588             END IF;
1589 
1590         END IF;
1591 
1592     END IF;
1593 
1594 /* Fix for bug 2977987: Moved this code to ensure that bom_revision is calculated after calculating
1595    bom_revision_date
1596 
1597     IF g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.bom_revision  IS NULL THEN
1598 
1599         g_flow_schedule_rec.bom_revision := Get_Bom_Revision;
1600 
1601         IF g_flow_schedule_rec.bom_revision IS NOT NULL THEN
1602 
1603             IF MRP_Validate.Bom_Revision(g_flow_schedule_rec.bom_revision)
1604             THEN
1605                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1606                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BOM_REVISION
1607                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1608 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1609                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1610                 );
1611             ELSE
1612                 g_flow_schedule_rec.bom_revision := NULL;
1613             END IF;
1614 
1615         END IF;
1616 
1617     END IF;
1618 */
1619 
1620     IF g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE OR g_flow_schedule_rec.bom_revision_date  IS NULL THEN
1621 
1622         g_flow_schedule_rec.bom_revision_date := Get_Bom_Revision_Date;
1623 
1624         IF g_flow_schedule_rec.bom_revision_date IS NOT NULL THEN
1625 
1626             IF MRP_Validate.Bom_Revision_Date(g_flow_schedule_rec.bom_revision_date)
1627             THEN
1628                 -- Modified for Bug 9667180
1629                 g_flow_schedule_rec.bom_revision := Get_Bom_Revision;
1630             ELSE
1631                 g_flow_schedule_rec.bom_revision_date := NULL;
1632             END IF;
1633 
1634         END IF;
1635 
1636     END IF;
1637 
1638     /* Fix for bug 2977987: bom_revision is being calculated after calculating bom_revision_date. */
1639 
1640     IF g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.bom_revision  IS NULL THEN
1641 
1642         g_flow_schedule_rec.bom_revision := Get_Bom_Revision;
1643 
1644         IF g_flow_schedule_rec.bom_revision IS NOT NULL THEN
1645 
1646             IF MRP_Validate.Bom_Revision(g_flow_schedule_rec.bom_revision)
1647             THEN
1648                 -- Modified for Bug 9667180
1649                 null;
1650             ELSE
1651                 g_flow_schedule_rec.bom_revision := NULL;
1652             END IF;
1653 
1654         END IF;
1655 
1656     END IF;
1657 
1658 
1659     IF g_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.build_sequence IS NULL THEN
1660 
1661         g_flow_schedule_rec.build_sequence := Get_Build_Sequence;
1662 
1663         IF g_flow_schedule_rec.build_sequence IS NOT NULL THEN
1664 
1665             IF MRP_Validate.Build_Sequence(g_flow_schedule_rec.build_sequence)
1666             THEN
1667                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1668                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BUILD_SEQUENCE
1669                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1670 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1671                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1672                 );
1673             ELSE
1674                 g_flow_schedule_rec.build_sequence := NULL;
1675             END IF;
1676 
1677         END IF;
1678 
1679     END IF;
1680 
1681     IF g_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR OR g_flow_schedule_rec.class_code IS NULL THEN
1682 
1683         g_flow_schedule_rec.class_code := Get_Class;
1684 
1685         IF g_flow_schedule_rec.class_code IS NOT NULL THEN
1686 
1687             IF MRP_Validate.Class(g_flow_schedule_rec.class_code)
1688             THEN
1689                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1690                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_CLASS
1691                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1692 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1693                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1694                 );
1695             ELSE
1696                 g_flow_schedule_rec.class_code := NULL;
1697             END IF;
1698 
1699         END IF;
1700 
1701     END IF;
1702 
1703     IF g_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.completion_locator_id IS NULL THEN
1704 
1705         g_flow_schedule_rec.completion_locator_id := Get_Completion_Locator;
1706 
1707         IF g_flow_schedule_rec.completion_locator_id IS NOT NULL THEN
1708 
1709             IF MRP_Validate.Completion_Locator(g_flow_schedule_rec.completion_locator_id)
1710             THEN
1711                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1712                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_COMPLETION_LOCATOR
1713                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1714 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1715                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1716                 );
1717             ELSE
1718                 g_flow_schedule_rec.completion_locator_id := NULL;
1719             END IF;
1720 
1721         END IF;
1722 
1723     END IF;
1724 
1725     IF g_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.completion_subinventory IS NULL THEN
1726 
1727         g_flow_schedule_rec.completion_subinventory := Get_Completion_Subinventory;
1728 
1729         IF g_flow_schedule_rec.completion_subinventory IS NOT NULL THEN
1730 
1731             IF MRP_Validate.Completion_Subinventory(g_flow_schedule_rec.completion_subinventory)
1732             THEN
1733                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1734                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_COMPLETION_SUBINVENTORY
1735                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1736 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1737                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1738                 );
1739             ELSE
1740                 g_flow_schedule_rec.completion_subinventory := NULL;
1741             END IF;
1742 
1743         END IF;
1744 
1745     END IF;
1746 
1747     IF g_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.date_closed IS NULL THEN
1748 
1749         g_flow_schedule_rec.date_closed := Get_Date_Closed;
1750 
1751         IF g_flow_schedule_rec.date_closed IS NOT NULL THEN
1752 
1753             IF MRP_Validate.Date_Closed(g_flow_schedule_rec.date_closed)
1754             THEN
1755                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1756                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DATE_CLOSED
1757                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1758 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1759                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1760                 );
1761             ELSE
1762                 g_flow_schedule_rec.date_closed := NULL;
1763             END IF;
1764 
1765         END IF;
1766 
1767     END IF;
1768 
1769     IF g_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.demand_class IS NULL THEN
1770 
1771         g_flow_schedule_rec.demand_class := Get_Demand_Class;
1772 
1773         IF g_flow_schedule_rec.demand_class IS NOT NULL THEN
1774 
1775             IF MRP_Validate.Demand_Class(g_flow_schedule_rec.demand_class)
1776             THEN
1777                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1778                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_CLASS
1779                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1780 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1781                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1782                 );
1783             ELSE
1784                 g_flow_schedule_rec.demand_class := NULL;
1785             END IF;
1786 
1787         END IF;
1788 
1789     END IF;
1790 
1791     IF g_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.end_item_unit_number IS NULL THEN
1792 
1793         g_flow_schedule_rec.end_item_unit_number := Get_end_item_unit_number;
1794 
1795         IF g_flow_schedule_rec.end_item_unit_number IS NOT NULL THEN
1796 
1797             IF MRP_Validate.end_item_unit_number(g_flow_schedule_rec.end_item_unit_number)
1798             THEN
1799                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1800                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_END_ITEM_UNIT_NUMBER
1801                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1802 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1803                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1804                 );
1805             ELSE
1806                 g_flow_schedule_rec.end_item_unit_number := NULL;
1807             END IF;
1808 
1809         END IF;
1810 
1811     END IF;
1812 
1813     IF g_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM or g_flow_schedule_rec.quantity_scrapped IS NULL THEN
1814 
1815         g_flow_schedule_rec.quantity_scrapped := Get_quantity_scrapped;
1816 
1817         IF g_flow_schedule_rec.quantity_scrapped IS NOT NULL THEN
1818 
1819             IF MRP_Validate.quantity_scrapped(g_flow_schedule_rec.quantity_scrapped)
1820             THEN
1821                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1822                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_quantity_scrapped
1823                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1824 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1825                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1826                 );
1827             ELSE
1828                 g_flow_schedule_rec.quantity_scrapped := NULL;
1829             END IF;
1830 
1831         END IF;
1832 
1833     END IF;
1834 
1835     IF g_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR OR  g_flow_schedule_rec.demand_source_delivery IS NULL THEN
1836 
1837         g_flow_schedule_rec.demand_source_delivery := Get_Demand_Source_Delivery;
1838 
1839         IF g_flow_schedule_rec.demand_source_delivery IS NOT NULL THEN
1840 
1841             IF MRP_Validate.Demand_Source_Delivery(g_flow_schedule_rec.demand_source_delivery)
1842             THEN
1843                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1844                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_DELIVERY
1845                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1846 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1847                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1848                 );
1849             ELSE
1850                 g_flow_schedule_rec.demand_source_delivery := NULL;
1851             END IF;
1852 
1853         END IF;
1854 
1855     END IF;
1856 
1857     IF g_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.demand_source_header_id IS NULL THEN
1858 
1859         g_flow_schedule_rec.demand_source_header_id := Get_Demand_Source_Header;
1860 
1861         IF g_flow_schedule_rec.demand_source_header_id IS NOT NULL THEN
1862 
1863             IF MRP_Validate.Demand_Source_Header(g_flow_schedule_rec.demand_source_header_id)
1864             THEN
1865                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1866                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_HEADER
1867                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1868 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1869                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1870                 );
1871             ELSE
1872                 g_flow_schedule_rec.demand_source_header_id := NULL;
1873             END IF;
1874 
1875         END IF;
1876 
1877     END IF;
1878 
1879     IF g_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.demand_source_line IS NULL THEN
1880 
1881         g_flow_schedule_rec.demand_source_line := Get_Demand_Source_Line;
1882 
1883         IF g_flow_schedule_rec.demand_source_line IS NOT NULL THEN
1884 
1885             IF MRP_Validate.Demand_Source_Line(g_flow_schedule_rec.demand_source_line)
1886             THEN
1887                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1888                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_LINE
1889                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1890 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1891                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1892                 );
1893             ELSE
1894                 g_flow_schedule_rec.demand_source_line := NULL;
1895             END IF;
1896 
1897         END IF;
1898 
1899     END IF;
1900 
1901     IF g_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.demand_source_type IS NULL THEN
1902 
1903         g_flow_schedule_rec.demand_source_type := Get_Demand_Source_Type;
1904 
1905         IF g_flow_schedule_rec.demand_source_type IS NOT NULL THEN
1906 
1907             IF MRP_Validate.Demand_Source_Type(g_flow_schedule_rec.demand_source_type)
1908             THEN
1909                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1910                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_TYPE
1911                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1912 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1913                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1914                 );
1915             ELSE
1916                 g_flow_schedule_rec.demand_source_type := NULL;
1917             END IF;
1918 
1919         END IF;
1920 
1921     END IF;
1922 
1923     IF g_flow_schedule_rec.line_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.line_id IS NULL THEN
1924 
1925         g_flow_schedule_rec.line_id := Get_Line;
1926 
1927         IF g_flow_schedule_rec.line_id IS NOT NULL THEN
1928 
1929             IF MRP_Validate.Line(g_flow_schedule_rec.line_id)
1930             THEN
1931                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1932                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_LINE
1933                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1934 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1935                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1936                 );
1937             ELSE
1938                 g_flow_schedule_rec.line_id := NULL;
1939             END IF;
1940 
1941         END IF;
1942 
1943     END IF;
1944 
1945     IF g_flow_schedule_rec.material_account = FND_API.G_MISS_NUM OR g_flow_schedule_rec.material_account IS NULL THEN
1946 
1947         g_flow_schedule_rec.material_account := Get_Material_Account;
1948 
1949         IF g_flow_schedule_rec.material_account IS NOT NULL THEN
1950 
1951             IF MRP_Validate.Material_Account(g_flow_schedule_rec.material_account)
1952             THEN
1953                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1954                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_ACCOUNT
1955                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1956 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1957                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1958                 );
1959             ELSE
1960                 g_flow_schedule_rec.material_account := NULL;
1961             END IF;
1962 
1963         END IF;
1964 
1965     END IF;
1966 
1967     IF g_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.material_overhead_account IS NULL THEN
1968 
1969         g_flow_schedule_rec.material_overhead_account := Get_Material_Overhead_Account;
1970 
1971         IF g_flow_schedule_rec.material_overhead_account IS NOT NULL THEN
1972 
1973             IF MRP_Validate.Material_Overhead_Account(g_flow_schedule_rec.material_overhead_account)
1974             THEN
1975                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1976                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_OVERHEAD_ACCOUNT
1977                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1978 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1979                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1980                 );
1981             ELSE
1982                 g_flow_schedule_rec.material_overhead_account := NULL;
1983             END IF;
1984 
1985         END IF;
1986 
1987     END IF;
1988 
1989     IF g_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.material_variance_account IS NULL THEN
1990 
1991         g_flow_schedule_rec.material_variance_account := Get_Material_Variance_Account;
1992 
1993         IF g_flow_schedule_rec.material_variance_account IS NOT NULL THEN
1994 
1995             IF MRP_Validate.Material_Variance_Account(g_flow_schedule_rec.material_variance_account)
1996             THEN
1997                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1998                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_VARIANCE_ACCOUNT
1999                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2000 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2001                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2002                 );
2003             ELSE
2004                 g_flow_schedule_rec.material_variance_account := NULL;
2005             END IF;
2006 
2007         END IF;
2008 
2009     END IF;
2010 
2011     IF g_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.mps_net_quantity IS NULL THEN
2012 
2013         g_flow_schedule_rec.mps_net_quantity := Get_Mps_Net_Quantity;
2014 
2015         IF g_flow_schedule_rec.mps_net_quantity IS NOT NULL THEN
2016 
2017             IF MRP_Validate.Mps_Net_Quantity(g_flow_schedule_rec.mps_net_quantity)
2018             THEN
2019                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2020                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MPS_NET_QUANTITY
2021                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2022 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2023                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2024                 );
2025             ELSE
2026                 g_flow_schedule_rec.mps_net_quantity := NULL;
2027             END IF;
2028 
2029         END IF;
2030 
2031     END IF;
2032 
2033     IF g_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.mps_scheduled_comp_date IS NULL THEN
2034 
2035         g_flow_schedule_rec.mps_scheduled_comp_date := Get_Mps_Scheduled_Comp_Date;
2036 
2037         IF g_flow_schedule_rec.mps_scheduled_comp_date IS NOT NULL THEN
2038 
2039             IF MRP_Validate.Mps_Scheduled_Comp_Date(g_flow_schedule_rec.mps_scheduled_comp_date)
2040             THEN
2041                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2042                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MPS_SCHEDULED_COMP_DATE
2043                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2044 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2045                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2046                 );
2047             ELSE
2048                 g_flow_schedule_rec.mps_scheduled_comp_date := NULL;
2049             END IF;
2050 
2051         END IF;
2052 
2053     END IF;
2054 
2055     IF g_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.organization_id IS NULL THEN
2056 
2057         g_flow_schedule_rec.organization_id := Get_Organization;
2058 
2059         IF g_flow_schedule_rec.organization_id IS NOT NULL THEN
2060 
2061             IF MRP_Validate.Organization(g_flow_schedule_rec.organization_id)
2062             THEN
2063                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2064                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ORGANIZATION
2065                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2066 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2067                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2068                 );
2069             ELSE
2070                 g_flow_schedule_rec.organization_id := NULL;
2071             END IF;
2072 
2073         END IF;
2074 
2075     END IF;
2076 
2077     IF g_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.outside_processing_acct IS NULL THEN
2078 
2079         g_flow_schedule_rec.outside_processing_acct := Get_Outside_Processing_Acct;
2080 
2081         IF g_flow_schedule_rec.outside_processing_acct IS NOT NULL THEN
2082 
2083             IF MRP_Validate.Outside_Processing_Acct(g_flow_schedule_rec.outside_processing_acct)
2084             THEN
2085                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2086                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OUTSIDE_PROCESSING_ACCT
2087                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2088 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2089                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2090                 );
2091             ELSE
2092                 g_flow_schedule_rec.outside_processing_acct := NULL;
2093             END IF;
2094 
2095         END IF;
2096 
2097     END IF;
2098 
2099     IF g_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.outside_proc_var_acct IS NULL THEN
2100 
2101         g_flow_schedule_rec.outside_proc_var_acct := Get_Outside_Proc_Var_Acct;
2102 
2103         IF g_flow_schedule_rec.outside_proc_var_acct IS NOT NULL THEN
2104 
2105             IF MRP_Validate.Outside_Proc_Var_Acct(g_flow_schedule_rec.outside_proc_var_acct)
2106             THEN
2107                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2108                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OUTSIDE_PROC_VAR_ACCT
2109                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2110 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2111                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2112                 );
2113             ELSE
2114                 g_flow_schedule_rec.outside_proc_var_acct := NULL;
2115             END IF;
2116 
2117         END IF;
2118 
2119     END IF;
2120 
2121     IF g_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.overhead_account IS NULL THEN
2122 
2123         g_flow_schedule_rec.overhead_account := Get_Overhead_Account;
2124 
2125         IF g_flow_schedule_rec.overhead_account IS NOT NULL THEN
2126 
2127             IF MRP_Validate.Overhead_Account(g_flow_schedule_rec.overhead_account)
2128             THEN
2129                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2130                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OVERHEAD_ACCOUNT
2131                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2132 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2133                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2134                 );
2135             ELSE
2136                 g_flow_schedule_rec.overhead_account := NULL;
2137             END IF;
2138 
2139         END IF;
2140 
2141     END IF;
2142 
2143     IF g_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.overhead_variance_account IS NULL THEN
2144 
2145         g_flow_schedule_rec.overhead_variance_account := Get_Overhead_Variance_Account;
2146 
2147         IF g_flow_schedule_rec.overhead_variance_account IS NOT NULL THEN
2148 
2149             IF MRP_Validate.Overhead_Variance_Account(g_flow_schedule_rec.overhead_variance_account)
2150             THEN
2151                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2152                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OVERHEAD_VARIANCE_ACCOUNT
2153                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2154 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2155                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2156                 );
2157             ELSE
2158                 g_flow_schedule_rec.overhead_variance_account := NULL;
2159             END IF;
2160 
2161         END IF;
2162 
2163     END IF;
2164 
2165     IF g_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.planned_quantity IS NULL THEN
2166 
2167         g_flow_schedule_rec.planned_quantity := Get_Planned_Quantity;
2168 
2169         IF g_flow_schedule_rec.planned_quantity IS NOT NULL THEN
2170 
2171             IF MRP_Validate.Planned_Quantity(g_flow_schedule_rec.planned_quantity)
2172             THEN
2173                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2174                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PLANNED_QUANTITY
2175                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2176 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2177                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2178                 );
2179             ELSE
2180                 g_flow_schedule_rec.planned_quantity := NULL;
2181             END IF;
2182 
2183         END IF;
2184 
2185     END IF;
2186 
2187     IF g_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.primary_item_id IS NULL THEN
2188 
2189         g_flow_schedule_rec.primary_item_id := Get_Primary_Item;
2190 
2191         IF g_flow_schedule_rec.primary_item_id IS NOT NULL THEN
2192 
2193             IF MRP_Validate.Primary_Item(g_flow_schedule_rec.primary_item_id)
2194             THEN
2195                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2196                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PRIMARY_ITEM
2197                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2198 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2199                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2200                 );
2201             ELSE
2202                 g_flow_schedule_rec.primary_item_id := NULL;
2203             END IF;
2204 
2205         END IF;
2206 
2207     END IF;
2208 
2209     IF g_flow_schedule_rec.project_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.project_id IS NULL THEN
2210 
2211         g_flow_schedule_rec.project_id := Get_Project;
2212 
2213         IF g_flow_schedule_rec.project_id IS NOT NULL THEN
2214 
2215             IF MRP_Validate.Project(g_flow_schedule_rec.project_id)
2216             THEN
2217                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2218                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PROJECT
2219                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2220 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2221                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2222                 );
2223             ELSE
2224                 g_flow_schedule_rec.project_id := NULL;
2225             END IF;
2226 
2227         END IF;
2228 
2229     END IF;
2230 
2231     IF g_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM OR g_flow_schedule_rec.quantity_completed IS NULL THEN
2232 
2233         g_flow_schedule_rec.quantity_completed := Get_Quantity_Completed;
2234 
2235         IF g_flow_schedule_rec.quantity_completed IS NOT NULL THEN
2236 
2237             IF MRP_Validate.Quantity_Completed(g_flow_schedule_rec.quantity_completed)
2238             THEN
2239                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2240                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_QUANTITY_COMPLETED
2241                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2242 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2243                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2244                 );
2245             ELSE
2246                 g_flow_schedule_rec.quantity_completed := NULL;
2247             END IF;
2248 
2249         END IF;
2250 
2251     END IF;
2252 
2253     IF g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.request_id IS NULL THEN
2254 
2255 -- bug 4529167
2256 --        g_flow_schedule_rec.request_id := Get_Request_Id;
2257         g_flow_schedule_rec.request_id := null;
2258 
2259     END IF;
2260 
2261     IF g_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.resource_account IS NULL THEN
2262 
2263         g_flow_schedule_rec.resource_account := Get_Resource_Account;
2264 
2265         IF g_flow_schedule_rec.resource_account IS NOT NULL THEN
2266 
2267             IF MRP_Validate.Resource_Account(g_flow_schedule_rec.resource_account)
2268             THEN
2269                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2270                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_RESOURCE_ACCOUNT
2271                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2272 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2273                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2274                 );
2275             ELSE
2276                 g_flow_schedule_rec.resource_account := NULL;
2277             END IF;
2278 
2279         END IF;
2280 
2281     END IF;
2282 
2283     IF g_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.resource_variance_account IS NULL THEN
2284 
2285         g_flow_schedule_rec.resource_variance_account := Get_Resource_Variance_Account;
2286 
2287         IF g_flow_schedule_rec.resource_variance_account IS NOT NULL THEN
2288 
2289             IF MRP_Validate.Resource_Variance_Account(g_flow_schedule_rec.resource_variance_account)
2290             THEN
2291                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2292                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_RESOURCE_VARIANCE_ACCOUNT
2293                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2294 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2295                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2296                 );
2297             ELSE
2298                 g_flow_schedule_rec.resource_variance_account := NULL;
2299             END IF;
2300 
2301         END IF;
2302 
2303     END IF;
2304 
2305 /* Fix for bug 2977987: Moved this code to ensure that routing_revision is calculated after calculating
2306    routing_revision_date
2307 
2308     IF g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.routing_revision IS NULL THEN
2309 
2310         g_flow_schedule_rec.routing_revision := Get_Routing_Revision;
2311 
2312         IF g_flow_schedule_rec.routing_revision IS NOT NULL THEN
2313 
2314             IF MRP_Validate.Routing_Revision(g_flow_schedule_rec.routing_revision)
2315             THEN
2316                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2317                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION
2318                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2319 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2320                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2321                 );
2322             ELSE
2323                 g_flow_schedule_rec.routing_revision := NULL;
2324             END IF;
2325 
2326         END IF;
2327 
2328     END IF;
2329 */
2330 
2331     IF g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.routing_revision_date IS NULL THEN
2332 
2333         g_flow_schedule_rec.routing_revision_date := Get_Routing_Revision_Date;
2334 
2335         IF g_flow_schedule_rec.routing_revision_date IS NOT NULL THEN
2336 
2337             IF MRP_Validate.Routing_Revision_Date(g_flow_schedule_rec.routing_revision_date)
2338             THEN
2339                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2340                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION_DATE
2341                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2342 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2343                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2344                 );
2345             ELSE
2346                 g_flow_schedule_rec.routing_revision_date := NULL;
2347             END IF;
2348 
2349         END IF;
2350 
2351     END IF;
2352 
2353 /* Fix for bug 2977987: routing_revision is being calculated after calculating routing_revision_date */
2354 
2355     IF g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.routing_revision IS NULL THEN
2356 
2357         g_flow_schedule_rec.routing_revision := Get_Routing_Revision;
2358 
2359         IF g_flow_schedule_rec.routing_revision IS NOT NULL THEN
2360 
2361             IF MRP_Validate.Routing_Revision(g_flow_schedule_rec.routing_revision)
2362             THEN
2363                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2364                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION
2365                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2366                 ,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2367                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2368                 );
2369             ELSE
2370                 g_flow_schedule_rec.routing_revision := NULL;
2371             END IF;
2372 
2373         END IF;
2374 
2375     END IF;
2376 
2377     IF g_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.scheduled_completion_date IS NULL THEN
2378 
2379         g_flow_schedule_rec.scheduled_completion_date := Get_Scheduled_Completion_Date;
2380 
2381         IF g_flow_schedule_rec.scheduled_completion_date IS NOT NULL THEN
2382 
2383             IF MRP_Validate.Scheduled_Completion_Date(g_flow_schedule_rec.scheduled_completion_date)
2384             THEN
2385                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2386                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED_COMPLETION_DATE
2387                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2388 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2389                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2390                 );
2391             ELSE
2392                 g_flow_schedule_rec.scheduled_completion_date := NULL;
2393             END IF;
2394 
2395         END IF;
2396 
2397     END IF;
2398 
2399     IF g_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM or g_flow_schedule_rec.scheduled_flag IS NULL THEN
2400 
2401         g_flow_schedule_rec.scheduled_flag := Get_Scheduled;
2402 
2403         IF g_flow_schedule_rec.scheduled_flag IS NOT NULL THEN
2404 
2405             IF MRP_Validate.Scheduled(g_flow_schedule_rec.scheduled_flag)
2406             THEN
2407                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2408                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED
2409                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2410 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2411                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2412                 );
2413             ELSE
2414                 g_flow_schedule_rec.scheduled_flag := NULL;
2415             END IF;
2416 
2417         END IF;
2418 
2419     END IF;
2420 
2421     IF g_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE OR g_flow_schedule_rec.scheduled_start_date IS NULL THEN
2422 
2423         g_flow_schedule_rec.scheduled_start_date := Get_Scheduled_Start_Date;
2424 
2425         IF g_flow_schedule_rec.scheduled_start_date IS NOT NULL THEN
2426 
2427             IF MRP_Validate.Scheduled_Start_Date(g_flow_schedule_rec.scheduled_start_date)
2428             THEN
2429                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2430                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED_START_DATE
2431                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2432 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2433                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2434                 );
2435             ELSE
2436                 g_flow_schedule_rec.scheduled_start_date := NULL;
2437             END IF;
2438 
2439         END IF;
2440 
2441     END IF;
2442 
2443     IF g_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.schedule_group_id IS NULL THEN
2444 
2445         g_flow_schedule_rec.schedule_group_id := Get_Schedule_Group;
2446 
2447         IF g_flow_schedule_rec.schedule_group_id IS NOT NULL THEN
2448 
2449             IF MRP_Validate.Schedule_Group(g_flow_schedule_rec.schedule_group_id)
2450             THEN
2451                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2452                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULE_GROUP
2453                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2454 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2455                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2456                 );
2457             ELSE
2458                 g_flow_schedule_rec.schedule_group_id := NULL;
2459             END IF;
2460 
2461         END IF;
2462 
2463     END IF;
2464 
2465     IF g_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR OR g_flow_schedule_rec.schedule_number IS NULL THEN
2466 
2467         g_flow_schedule_rec.schedule_number := Get_Schedule_Number;
2468 
2469         IF g_flow_schedule_rec.schedule_number IS NOT NULL THEN
2470 
2471             IF MRP_Validate.Schedule_Number(g_flow_schedule_rec.schedule_number)
2472             THEN
2473                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2474                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULE_NUMBER
2475                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2476 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2477                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2478                 );
2479             ELSE
2480                 g_flow_schedule_rec.schedule_number := NULL;
2481             END IF;
2482 
2483         END IF;
2484 
2485     END IF;
2486 
2487     IF g_flow_schedule_rec.status = FND_API.G_MISS_NUM OR g_flow_schedule_rec.status IS NULL THEN
2488 
2489         g_flow_schedule_rec.status := Get_Status;
2490 
2491         IF g_flow_schedule_rec.status IS NOT NULL THEN
2492 
2493             IF MRP_Validate.Status(g_flow_schedule_rec.status)
2494             THEN
2495                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2496                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_STATUS
2497                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2498 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2499                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2500                 );
2501             ELSE
2502                 g_flow_schedule_rec.status := NULL;
2503             END IF;
2504 
2505         END IF;
2506 
2507     END IF;
2508 
2509     IF g_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.std_cost_adjustment_acct IS NULL THEN
2510 
2511         g_flow_schedule_rec.std_cost_adjustment_acct := Get_Std_Cost_Adjustment_Acct;
2512 
2513         IF g_flow_schedule_rec.std_cost_adjustment_acct IS NOT NULL THEN
2514 
2515             IF MRP_Validate.Std_Cost_Adjustment_Acct(g_flow_schedule_rec.std_cost_adjustment_acct)
2516             THEN
2517                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2518                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_STD_COST_ADJUSTMENT_ACCT
2519                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2520 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2521                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2522                 );
2523             ELSE
2524                 g_flow_schedule_rec.std_cost_adjustment_acct := NULL;
2525             END IF;
2526 
2527         END IF;
2528 
2529     END IF;
2530 
2531     IF g_flow_schedule_rec.task_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.task_id IS NULL THEN
2532 
2533         g_flow_schedule_rec.task_id := Get_Task;
2534 
2535         IF g_flow_schedule_rec.task_id IS NOT NULL THEN
2536 
2537             IF MRP_Validate.Task(g_flow_schedule_rec.task_id)
2538             THEN
2539                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2540                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_TASK
2541                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2542 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2543                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2544                 );
2545             ELSE
2546                 g_flow_schedule_rec.task_id := NULL;
2547             END IF;
2548 
2549         END IF;
2550 
2551     END IF;
2552 
2553     IF g_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM OR g_flow_schedule_rec.wip_entity_id IS NULL THEN
2554 
2555         g_flow_schedule_rec.wip_entity_id := Get_Wip_Entity;
2556 
2557         IF g_flow_schedule_rec.wip_entity_id IS NOT NULL THEN
2558 
2559             IF MRP_Validate.Wip_Entity(g_flow_schedule_rec.wip_entity_id)
2560             THEN
2561                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2562                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_WIP_ENTITY
2563                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2564 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2565                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2566                 );
2567             ELSE
2568                 g_flow_schedule_rec.wip_entity_id := NULL;
2569             END IF;
2570 
2571         END IF;
2572 
2573     END IF;
2574 
2575     IF g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR
2576     OR  g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR
2577     OR  g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR
2578     OR  g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR
2579     OR  g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR
2580     OR  g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR
2581     OR  g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR
2582     OR  g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR
2583     OR  g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR
2584     OR  g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR
2585     OR  g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR
2586     OR  g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR
2587     OR  g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR
2588     OR  g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR
2589     OR  g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR
2590     OR  g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR
2591     THEN
2592 
2593         Get_Flex_Wip_Flow_Schedule;
2594 
2595     END IF;
2596 
2597     IF g_flow_schedule_rec.created_by = FND_API.G_MISS_NUM THEN
2598 
2599         g_flow_schedule_rec.created_by := NULL;
2600 
2601     END IF;
2602 
2603     IF g_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE THEN
2604 
2605         g_flow_schedule_rec.creation_date := NULL;
2606 
2607     END IF;
2608 
2609     IF g_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM THEN
2610 
2611         g_flow_schedule_rec.last_updated_by := NULL;
2612 
2613     END IF;
2614 
2615     IF g_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE THEN
2616 
2617         g_flow_schedule_rec.last_update_date := NULL;
2618 
2619     END IF;
2620 
2621     IF g_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM THEN
2622 
2623         g_flow_schedule_rec.last_update_login := NULL;
2624 
2625     END IF;
2626 
2627     IF g_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM THEN
2628 
2629         g_flow_schedule_rec.program_application_id := NULL;
2630 
2631     END IF;
2632 
2633     IF g_flow_schedule_rec.program_id = FND_API.G_MISS_NUM THEN
2634 
2635         g_flow_schedule_rec.program_id := NULL;
2636 
2637     END IF;
2638 
2639     IF g_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE THEN
2640 
2641         g_flow_schedule_rec.program_update_date := NULL;
2642 
2643     END IF;
2644 
2645     IF g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM THEN
2646 
2647         g_flow_schedule_rec.request_id := NULL;
2648 
2649     END IF;
2650 
2651     IF g_flow_schedule_rec.kanban_card_id = FND_API.G_MISS_NUM THEN
2652 
2653         g_flow_schedule_rec.kanban_card_id := NULL;
2654 
2655     END IF;
2656 
2657     --  Redefault if there are any missing attributes.
2658 
2659     IF  g_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR
2660     OR  g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR
2661     OR  g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR
2662     OR  g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR
2663     OR  g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR
2664     OR  g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR
2665     OR  g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR
2666     OR  g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR
2667     OR  g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR
2668     OR  g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR
2669     OR  g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR
2670     OR  g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR
2671     OR  g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR
2672     OR  g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR
2673     OR  g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR
2674     OR  g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR
2675     OR  g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR
2676     OR  g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR
2677     OR  g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR
2678     OR  g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE
2679     OR  g_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM
2680     OR  g_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR
2681     OR  g_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM
2682     OR  g_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR
2683     OR  g_flow_schedule_rec.created_by = FND_API.G_MISS_NUM
2684     OR  g_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE
2685     OR  g_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE
2686     OR  g_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR
2687     OR  g_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM
2688     OR  g_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR
2689     OR  g_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR
2690     OR  g_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM
2691     OR  g_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR
2692     OR  g_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM
2693     OR  g_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM
2694     OR  g_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE
2695     OR  g_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM
2696     OR  g_flow_schedule_rec.line_id = FND_API.G_MISS_NUM
2697     OR  g_flow_schedule_rec.material_account = FND_API.G_MISS_NUM
2698     OR  g_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM
2699     OR  g_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM
2700     OR  g_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM
2701     OR  g_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE
2702     OR  g_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM
2703     OR  g_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM
2704     OR  g_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM
2705     OR  g_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM
2706     OR  g_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM
2707     OR  g_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM
2708     OR  g_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM
2709     OR  g_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM
2710     OR  g_flow_schedule_rec.program_id = FND_API.G_MISS_NUM
2711     OR  g_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE
2712     OR  g_flow_schedule_rec.project_id = FND_API.G_MISS_NUM
2713     OR  g_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM
2714     OR  g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM
2715     OR  g_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM
2716     OR  g_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM
2717     OR  g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR
2718     OR  g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE
2719     OR  g_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE
2720     OR  g_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM
2721     OR  g_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE
2722     OR  g_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM
2723     OR  g_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR
2724     OR  g_flow_schedule_rec.status = FND_API.G_MISS_NUM
2725     OR  g_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM
2726     OR  g_flow_schedule_rec.task_id = FND_API.G_MISS_NUM
2727     OR  g_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM
2728     THEN
2729 
2730         MRP_Default_Flow_Schedule.Attributes
2731         (   p_flow_schedule_rec           => g_flow_schedule_rec
2732         ,   p_iteration                   => nvl(p_iteration, 1) + 1
2733         ,   x_flow_schedule_rec           => x_flow_schedule_rec
2734         );
2735 
2736     ELSE
2737 
2738         --  Done defaulting attributes
2739 
2740         x_flow_schedule_rec := g_flow_schedule_rec;
2741 
2742     END IF;
2743 
2744 END Attributes;
2745 
2746 END MRP_Default_Flow_Schedule;