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.1 2005/08/30 15:49:51 yulin noship $ */
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
516 		FROM bom_operational_routings
513         AND ((alternate_routing_designator IS NULL) OR
514 		(alternate_routing_designator IS NOT NULL
515 		AND priority = (SELECT min(priority)
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 
690 RETURN NUMBER
687 END Get_Mps_Scheduled_Comp_Date;
688 
689 FUNCTION Get_Organization
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 
867 RETURN NUMBER
864 END Get_Overhead_Variance_Account;
865 
866 FUNCTION Get_Planned_Quantity
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;
1056 
1053 l_error_number		NUMBER := 1;
1054 l_revision_date 	DATE := NULL;
1055 BEGIN
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 BEGIN
1132 
1133     IF g_flow_schedule_rec.scheduled_completion_date IS NOT NULL AND
1134         g_flow_schedule_rec.scheduled_completion_date <> FND_API.G_MISS_DATE AND
1135         g_flow_schedule_rec.organization_id IS NOT NULL AND
1136         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM AND
1137         g_flow_schedule_rec.primary_item_id IS NOT NULL AND
1138         g_flow_schedule_rec.primary_item_id <> FND_API.G_MISS_NUM AND
1139         g_flow_schedule_rec.planned_quantity IS NOT NULL AND
1140         g_flow_schedule_rec.planned_quantity <> FND_API.G_MISS_NUM AND
1141         g_flow_schedule_rec.line_id IS NOT NULL AND
1142         g_flow_schedule_rec.line_id <> FND_API.G_MISS_NUM
1143     THEN
1144 
1145         SELECT NVL(FIXED_LEAD_TIME,0),
1146 		NVL(VARIABLE_LEAD_TIME,0)
1147 	INTO l_fixed_lead_time, l_variable_lead_time
1148         FROM MTL_SYSTEM_ITEMS
1149         WHERE INVENTORY_ITEM_ID = g_flow_schedule_rec.primary_item_id
1150         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
1151 
1152         SELECT start_time, stop_time
1153         INTO   l_start_time, l_end_time
1154         FROM   wip_lines
1155         WHERE  line_id = g_flow_schedule_rec.line_id
1156         AND  organization_id = g_flow_schedule_rec.organization_id;
1157 
1158         --fix bug#3827600
1159         if (l_end_time < l_start_time) then
1160           l_new_end_time := 86400+l_end_time;
1161         else
1162           l_new_end_time := l_end_time;
1163         end if;
1164 
1165         l_completion_date := trunc(g_flow_schedule_rec.scheduled_completion_date);
1166 	l_completion_time := to_char(g_flow_schedule_rec.scheduled_completion_date,'SSSSS');
1167 
1168 	if (l_completion_time > l_new_end_time) then
1169    	  l_completion_date_time := l_completion_date + (l_new_end_time/86400);
1170 
1171 	elsif (l_completion_time < l_start_time) then
1172 	  l_completion_date := mrp_calendar.prev_work_day(
1173 				g_flow_schedule_rec.organization_id,
1174 				1,
1175 				flm_timezone.server_to_calendar(l_completion_date)-1);
1176 
1177           l_completion_date := flm_timezone.calendar_to_server(l_completion_date,l_completion_time);
1178           l_completion_date_time := trunc(l_completion_date) + (l_new_end_time/86400);
1179 
1180         else
1181           l_completion_date_time := l_completion_date + (l_completion_time/86400);
1182 
1183 	end if;
1184         --end of fix bug#3827600
1185 
1186         l_lead_time := l_fixed_lead_time + (l_variable_lead_time *
1187                        (g_flow_schedule_rec.planned_quantity-1));
1188 
1189         l_temp_date := MRP_LINE_SCHEDULE_ALGORITHM.calculate_begin_time(
1190                                 g_flow_schedule_rec.organization_id,
1191                                 l_completion_date_time,
1192                                 l_lead_time,
1193                                 l_start_time,
1194                                 l_new_end_time);
1195 
1196         RETURN l_temp_date;
1197 
1198     ELSE
1199 
1200         RETURN NULL;
1201 
1205 
1202     END IF;
1203 
1204 EXCEPTION
1206     WHEN OTHERS THEN
1207 
1208         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1209         THEN
1210             FND_MSG_PUB.Add_Exc_Msg
1211             (   G_PKG_NAME,
1212                 'Get_Scheduled_Start_Date'
1213             );
1214         END IF;
1215 
1216         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1217 
1218 END Get_Scheduled_Start_Date;
1219 
1220 FUNCTION Get_Schedule_Group
1221 RETURN NUMBER
1222 IS
1223 BEGIN
1224 
1225     RETURN NULL;
1226 
1227 END Get_Schedule_Group;
1228 
1229 FUNCTION Get_Schedule_Number
1230 RETURN VARCHAR2
1231 IS
1232 l_schedule_number	VARCHAR2(30) := NULL;
1233 l_error_number		NUMBER := 1;
1234 BEGIN
1235 
1236     l_error_number := WIP_FLOW_DERIVE.Schedule_Number(l_schedule_number);
1237 
1238     IF l_error_number = 1 THEN
1239 
1240         RETURN l_schedule_number;
1241 
1242     ELSE
1243 
1244         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1245         THEN
1246             FND_MSG_PUB.Add_Exc_Msg
1247             (   G_PKG_NAME,
1248                 'Get_Schedule_Number'
1249              );
1250         END IF;
1251 
1252         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1253 
1254         RETURN NULL;
1255 
1256     END IF;
1257 
1258 END Get_Schedule_Number;
1259 
1260 FUNCTION Get_Status
1261 RETURN NUMBER
1262 IS
1263 BEGIN
1264 
1265     -- Return Open (1)
1266     RETURN 1;
1267 
1268 END Get_Status;
1269 
1270 FUNCTION Get_Std_Cost_Adjustment_Acct
1271 RETURN NUMBER
1272 IS
1273 l_std_cost_adjustment_acct	NUMBER := NULL;
1274 BEGIN
1275 
1276     IF g_flow_schedule_rec.class_code IS NOT NULL AND
1277 	g_flow_schedule_rec.class_code <> FND_API.G_MISS_CHAR AND
1278         g_flow_schedule_rec.organization_id IS NOT NULL AND
1279         g_flow_schedule_rec.organization_id <> FND_API.G_MISS_NUM
1280     THEN
1281 
1282         SELECT STD_COST_ADJUSTMENT_ACCOUNT
1283         INTO l_std_cost_adjustment_acct
1284         FROM WIP_ACCOUNTING_CLASSES
1285         WHERE CLASS_CODE = g_flow_schedule_rec.class_code
1286         AND ORGANIZATION_ID = g_flow_schedule_rec.organization_id;
1287 
1288         RETURN l_std_cost_adjustment_acct;
1289 
1290     ELSE
1291 
1292         RETURN NULL;
1293 
1294     END IF;
1295 
1296 EXCEPTION
1297 
1298     WHEN OTHERS THEN
1299 
1300         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1301         THEN
1302             FND_MSG_PUB.Add_Exc_Msg
1303             (   G_PKG_NAME,
1304                 'Get_Std_Cost_Adjustment_Acct'
1305             );
1306         END IF;
1307 
1308         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1309 
1310 END Get_Std_Cost_Adjustment_Acct;
1311 
1312 FUNCTION Get_Task
1313 RETURN NUMBER
1314 IS
1315 BEGIN
1316 
1317     RETURN NULL;
1318 
1319 END Get_Task;
1320 
1321 FUNCTION Get_Wip_Entity
1322 RETURN NUMBER
1323 IS
1324 l_wip_entity_id		NUMBER := NULL;
1325 BEGIN
1326 
1327     -- Select from sequence
1328     SELECT WIP_ENTITIES_S.nextval
1329     INTO l_wip_entity_id
1330     FROM DUAL;
1331 
1332     RETURN l_wip_entity_id;
1333 
1334 EXCEPTION
1335 
1336     WHEN OTHERS THEN
1337 
1338         IF FND_MSG_PUB.Check_Msg_Level (FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR)
1339         THEN
1340             FND_MSG_PUB.Add_Exc_Msg
1341             (   G_PKG_NAME,
1342                 'Get_Wip_Entity'
1343             );
1344         END IF;
1345 
1346         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1347 
1348 END Get_Wip_Entity;
1349 
1350 
1351 
1352 
1353 FUNCTION Get_End_Item_Unit_Number
1354 RETURN NUMBER
1355 IS
1356 BEGIN
1357 RETURN NULL;
1358 
1359 END Get_End_Item_Unit_Number;
1360 
1361 FUNCTION Get_Quantity_Scrapped
1362 RETURN NUMBER
1363 IS
1364 BEGIN
1365 RETURN 0;
1366 
1367 END Get_Quantity_Scrapped;
1368 
1369 PROCEDURE Get_Flex_Wip_Flow_Schedule
1370 IS
1371 BEGIN
1372 
1373     --  In the future call Flex APIs for defaults
1374 
1375     IF g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR THEN
1376         g_flow_schedule_rec.attribute1 := NULL;
1377     END IF;
1378 
1379     IF g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR THEN
1380         g_flow_schedule_rec.attribute10 := NULL;
1381     END IF;
1382 
1383     IF g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR THEN
1384         g_flow_schedule_rec.attribute11 := NULL;
1385     END IF;
1386 
1387     IF g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR THEN
1388         g_flow_schedule_rec.attribute12 := NULL;
1389     END IF;
1390 
1391     IF g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR THEN
1392         g_flow_schedule_rec.attribute13 := NULL;
1393     END IF;
1394 
1395     IF g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR THEN
1396         g_flow_schedule_rec.attribute14 := NULL;
1397     END IF;
1398 
1402 
1399     IF g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR THEN
1400         g_flow_schedule_rec.attribute15 := NULL;
1401     END IF;
1403     IF g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR THEN
1404         g_flow_schedule_rec.attribute2 := NULL;
1405     END IF;
1406 
1407     IF g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR THEN
1408         g_flow_schedule_rec.attribute3 := NULL;
1409     END IF;
1410 
1411     IF g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR THEN
1412         g_flow_schedule_rec.attribute4 := NULL;
1413     END IF;
1414 
1415     IF g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR THEN
1416         g_flow_schedule_rec.attribute5 := NULL;
1417     END IF;
1418 
1419     IF g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR THEN
1420         g_flow_schedule_rec.attribute6 := NULL;
1421     END IF;
1422 
1423     IF g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR THEN
1424         g_flow_schedule_rec.attribute7 := NULL;
1425     END IF;
1426 
1427     IF g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR THEN
1428         g_flow_schedule_rec.attribute8 := NULL;
1429     END IF;
1430 
1431     IF g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR THEN
1432         g_flow_schedule_rec.attribute9 := NULL;
1433     END IF;
1434 
1435     IF g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR THEN
1436         g_flow_schedule_rec.attribute_category := NULL;
1437     END IF;
1438 
1439 END Get_Flex_Wip_Flow_Schedule;
1440 
1441 --  Procedure Attributes
1442 
1443 PROCEDURE Attributes
1444 (   p_flow_schedule_rec             IN  MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1445 ,   p_iteration                     IN  NUMBER DEFAULT NULL
1446 ,   x_flow_schedule_rec             IN  OUT NOCOPY MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type
1447 )
1448 IS
1449 	l_old_flow_schedule_rec     MRP_Flow_Schedule_PVT.Flow_Schedule_PVT_Rec_Type;
1450 BEGIN
1451 
1452     --  Check number of iterations.
1453     -- If p_iteration is null, default to 1
1454     IF nvl(p_iteration, 1) > MRP_GLOBALS.G_MAX_DEF_ITERATIONS THEN
1455 
1456         IF FND_MSG_PUB.Check_Msg_Level(FND_MSG_PUB.G_MSG_LVL_ERROR)
1457         THEN
1458 
1459             FND_MESSAGE.SET_NAME('MRP','MRP_DEF_MAX_ITERATION');
1460             FND_MSG_PUB.Add;
1461 
1462         END IF;
1463 
1464         RAISE FND_API.G_EXC_ERROR;
1465 
1466     END IF;
1467     --  Initialize g_flow_schedule_rec
1468 
1469     g_flow_schedule_rec := p_flow_schedule_rec;
1470 
1471     --  Default missing attributes.
1472 
1473     IF g_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR or g_flow_schedule_rec.alternate_bom_designator IS NULL THEN
1474 
1475         g_flow_schedule_rec.alternate_bom_designator := Get_Alternate_Bom_Designator;
1476 
1477         IF g_flow_schedule_rec.alternate_bom_designator IS NOT NULL THEN
1478 
1479             IF MRP_Validate.Alternate_Bom_Designator(g_flow_schedule_rec.alternate_bom_designator)
1480             THEN
1481                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1482                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ALTERNATE_BOM_DESIGNATOR
1483                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1484 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1485                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1486                 );
1487             ELSE
1488                 g_flow_schedule_rec.alternate_bom_designator := NULL;
1489             END IF;
1490 
1491         END IF;
1492 
1493     END IF;
1494 
1495     IF g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR or g_flow_schedule_rec.alternate_routing_desig IS NULL THEN
1496 
1497         g_flow_schedule_rec.alternate_routing_desig := Get_Alternate_Routing_Desig;
1498 
1499         IF g_flow_schedule_rec.alternate_routing_desig IS NOT NULL THEN
1500 
1501             IF MRP_Validate.Alternate_Routing_Desig(g_flow_schedule_rec.alternate_routing_desig)
1502             THEN
1503                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1504                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ALTERNATE_ROUTING_DESIG
1505                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1506 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1507                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1508                 );
1509             ELSE
1510                 g_flow_schedule_rec.alternate_routing_desig := NULL;
1511             END IF;
1512 
1513         END IF;
1514 
1515     END IF;
1516 
1517 /* Fix for bug 2977987: Moved this code to ensure that bom_revision is calculated after calculating
1518    bom_revision_date
1519 
1520     IF g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.bom_revision  IS NULL THEN
1521 
1522         g_flow_schedule_rec.bom_revision := Get_Bom_Revision;
1523 
1524         IF g_flow_schedule_rec.bom_revision IS NOT NULL THEN
1525 
1526             IF MRP_Validate.Bom_Revision(g_flow_schedule_rec.bom_revision)
1527             THEN
1528                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1529                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BOM_REVISION
1530                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1534             ELSE
1531 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1532                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1533                 );
1535                 g_flow_schedule_rec.bom_revision := NULL;
1536             END IF;
1537 
1538         END IF;
1539 
1540     END IF;
1541 */
1542 
1543     IF g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE OR g_flow_schedule_rec.bom_revision_date  IS NULL THEN
1544 
1545         g_flow_schedule_rec.bom_revision_date := Get_Bom_Revision_Date;
1546 
1547         IF g_flow_schedule_rec.bom_revision_date IS NOT NULL THEN
1548 
1549             IF MRP_Validate.Bom_Revision_Date(g_flow_schedule_rec.bom_revision_date)
1550             THEN
1551                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1552                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BOM_REVISION_DATE
1553                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1554 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1555                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1556                 );
1557             ELSE
1558                 g_flow_schedule_rec.bom_revision_date := NULL;
1559             END IF;
1560 
1561         END IF;
1562 
1563     END IF;
1564 
1565     /* Fix for bug 2977987: bom_revision is being calculated after calculating bom_revision_date. */
1566 
1567     IF g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.bom_revision  IS NULL THEN
1568 
1569         g_flow_schedule_rec.bom_revision := Get_Bom_Revision;
1570 
1571         IF g_flow_schedule_rec.bom_revision IS NOT NULL THEN
1572 
1573             IF MRP_Validate.Bom_Revision(g_flow_schedule_rec.bom_revision)
1574             THEN
1575                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1576                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BOM_REVISION
1577                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1578                 ,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1579                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1580                 );
1581             ELSE
1582                 g_flow_schedule_rec.bom_revision := NULL;
1583             END IF;
1584 
1585         END IF;
1586 
1587     END IF;
1588 
1589 
1590     IF g_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.build_sequence IS NULL THEN
1591 
1592         g_flow_schedule_rec.build_sequence := Get_Build_Sequence;
1593 
1594         IF g_flow_schedule_rec.build_sequence IS NOT NULL THEN
1595 
1596             IF MRP_Validate.Build_Sequence(g_flow_schedule_rec.build_sequence)
1597             THEN
1598                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1599                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_BUILD_SEQUENCE
1600                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1601 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1602                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1603                 );
1604             ELSE
1605                 g_flow_schedule_rec.build_sequence := NULL;
1606             END IF;
1607 
1608         END IF;
1609 
1610     END IF;
1611 
1612     IF g_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR OR g_flow_schedule_rec.class_code IS NULL THEN
1613 
1614         g_flow_schedule_rec.class_code := Get_Class;
1615 
1616         IF g_flow_schedule_rec.class_code IS NOT NULL THEN
1617 
1618             IF MRP_Validate.Class(g_flow_schedule_rec.class_code)
1619             THEN
1620                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1621                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_CLASS
1622                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1623 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1624                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1625                 );
1626             ELSE
1627                 g_flow_schedule_rec.class_code := NULL;
1628             END IF;
1629 
1630         END IF;
1631 
1632     END IF;
1633 
1634     IF g_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.completion_locator_id IS NULL THEN
1635 
1636         g_flow_schedule_rec.completion_locator_id := Get_Completion_Locator;
1637 
1638         IF g_flow_schedule_rec.completion_locator_id IS NOT NULL THEN
1639 
1640             IF MRP_Validate.Completion_Locator(g_flow_schedule_rec.completion_locator_id)
1641             THEN
1642                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1643                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_COMPLETION_LOCATOR
1644                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1645 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1646                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1647                 );
1648             ELSE
1649                 g_flow_schedule_rec.completion_locator_id := NULL;
1650             END IF;
1651 
1652         END IF;
1653 
1654     END IF;
1655 
1656     IF g_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.completion_subinventory IS NULL THEN
1657 
1661 
1658         g_flow_schedule_rec.completion_subinventory := Get_Completion_Subinventory;
1659 
1660         IF g_flow_schedule_rec.completion_subinventory IS NOT NULL THEN
1662             IF MRP_Validate.Completion_Subinventory(g_flow_schedule_rec.completion_subinventory)
1663             THEN
1664                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1665                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_COMPLETION_SUBINVENTORY
1666                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1667 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1668                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1669                 );
1670             ELSE
1671                 g_flow_schedule_rec.completion_subinventory := NULL;
1672             END IF;
1673 
1674         END IF;
1675 
1676     END IF;
1677 
1678     IF g_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.date_closed IS NULL THEN
1679 
1680         g_flow_schedule_rec.date_closed := Get_Date_Closed;
1681 
1682         IF g_flow_schedule_rec.date_closed IS NOT NULL THEN
1683 
1684             IF MRP_Validate.Date_Closed(g_flow_schedule_rec.date_closed)
1685             THEN
1686                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1687                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DATE_CLOSED
1688                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1689 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1690                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1691                 );
1692             ELSE
1693                 g_flow_schedule_rec.date_closed := NULL;
1694             END IF;
1695 
1696         END IF;
1697 
1698     END IF;
1699 
1700     IF g_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.demand_class IS NULL THEN
1701 
1702         g_flow_schedule_rec.demand_class := Get_Demand_Class;
1703 
1704         IF g_flow_schedule_rec.demand_class IS NOT NULL THEN
1705 
1706             IF MRP_Validate.Demand_Class(g_flow_schedule_rec.demand_class)
1707             THEN
1708                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1709                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_CLASS
1710                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1711 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1712                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1713                 );
1714             ELSE
1715                 g_flow_schedule_rec.demand_class := NULL;
1716             END IF;
1717 
1718         END IF;
1719 
1720     END IF;
1721 
1722     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
1723 
1724         g_flow_schedule_rec.end_item_unit_number := Get_end_item_unit_number;
1725 
1726         IF g_flow_schedule_rec.end_item_unit_number IS NOT NULL THEN
1727 
1728             IF MRP_Validate.end_item_unit_number(g_flow_schedule_rec.end_item_unit_number)
1729             THEN
1730                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1731                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_END_ITEM_UNIT_NUMBER
1732                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1733 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1734                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1735                 );
1736             ELSE
1737                 g_flow_schedule_rec.end_item_unit_number := NULL;
1738             END IF;
1739 
1740         END IF;
1741 
1742     END IF;
1743 
1744     IF g_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM or g_flow_schedule_rec.quantity_scrapped IS NULL THEN
1745 
1746         g_flow_schedule_rec.quantity_scrapped := Get_quantity_scrapped;
1747 
1748         IF g_flow_schedule_rec.quantity_scrapped IS NOT NULL THEN
1749 
1750             IF MRP_Validate.quantity_scrapped(g_flow_schedule_rec.quantity_scrapped)
1751             THEN
1752                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1753                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_quantity_scrapped
1754                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1755 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1756                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1757                 );
1758             ELSE
1759                 g_flow_schedule_rec.quantity_scrapped := NULL;
1760             END IF;
1761 
1762         END IF;
1763 
1764     END IF;
1765 
1766     IF g_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR OR  g_flow_schedule_rec.demand_source_delivery IS NULL THEN
1767 
1768         g_flow_schedule_rec.demand_source_delivery := Get_Demand_Source_Delivery;
1769 
1770         IF g_flow_schedule_rec.demand_source_delivery IS NOT NULL THEN
1771 
1772             IF MRP_Validate.Demand_Source_Delivery(g_flow_schedule_rec.demand_source_delivery)
1773             THEN
1774                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1778                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1775                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_DELIVERY
1776                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1777 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1779                 );
1780             ELSE
1781                 g_flow_schedule_rec.demand_source_delivery := NULL;
1782             END IF;
1783 
1784         END IF;
1785 
1786     END IF;
1787 
1788     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
1789 
1790         g_flow_schedule_rec.demand_source_header_id := Get_Demand_Source_Header;
1791 
1792         IF g_flow_schedule_rec.demand_source_header_id IS NOT NULL THEN
1793 
1794             IF MRP_Validate.Demand_Source_Header(g_flow_schedule_rec.demand_source_header_id)
1795             THEN
1796                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1797                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_HEADER
1798                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1799 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1800                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1801                 );
1802             ELSE
1803                 g_flow_schedule_rec.demand_source_header_id := NULL;
1804             END IF;
1805 
1806         END IF;
1807 
1808     END IF;
1809 
1810     IF g_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.demand_source_line IS NULL THEN
1811 
1812         g_flow_schedule_rec.demand_source_line := Get_Demand_Source_Line;
1813 
1814         IF g_flow_schedule_rec.demand_source_line IS NOT NULL THEN
1815 
1816             IF MRP_Validate.Demand_Source_Line(g_flow_schedule_rec.demand_source_line)
1817             THEN
1818                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1819                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_LINE
1820                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1821 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1822                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1823                 );
1824             ELSE
1825                 g_flow_schedule_rec.demand_source_line := NULL;
1826             END IF;
1827 
1828         END IF;
1829 
1830     END IF;
1831 
1832     IF g_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.demand_source_type IS NULL THEN
1833 
1834         g_flow_schedule_rec.demand_source_type := Get_Demand_Source_Type;
1835 
1836         IF g_flow_schedule_rec.demand_source_type IS NOT NULL THEN
1837 
1838             IF MRP_Validate.Demand_Source_Type(g_flow_schedule_rec.demand_source_type)
1839             THEN
1840                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1841                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_DEMAND_SOURCE_TYPE
1842                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1843 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1844                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1845                 );
1846             ELSE
1847                 g_flow_schedule_rec.demand_source_type := NULL;
1848             END IF;
1849 
1850         END IF;
1851 
1852     END IF;
1853 
1854     IF g_flow_schedule_rec.line_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.line_id IS NULL THEN
1855 
1856         g_flow_schedule_rec.line_id := Get_Line;
1857 
1858         IF g_flow_schedule_rec.line_id IS NOT NULL THEN
1859 
1860             IF MRP_Validate.Line(g_flow_schedule_rec.line_id)
1861             THEN
1862                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1863                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_LINE
1864                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1865 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1866                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1867                 );
1868             ELSE
1869                 g_flow_schedule_rec.line_id := NULL;
1870             END IF;
1871 
1872         END IF;
1873 
1874     END IF;
1875 
1876     IF g_flow_schedule_rec.material_account = FND_API.G_MISS_NUM OR g_flow_schedule_rec.material_account IS NULL THEN
1877 
1878         g_flow_schedule_rec.material_account := Get_Material_Account;
1879 
1880         IF g_flow_schedule_rec.material_account IS NOT NULL THEN
1881 
1882             IF MRP_Validate.Material_Account(g_flow_schedule_rec.material_account)
1883             THEN
1884                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1885                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_ACCOUNT
1886                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1887 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1888                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1889                 );
1890             ELSE
1891                 g_flow_schedule_rec.material_account := NULL;
1892             END IF;
1893 
1894         END IF;
1895 
1899 
1896     END IF;
1897 
1898     IF g_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.material_overhead_account IS NULL THEN
1900         g_flow_schedule_rec.material_overhead_account := Get_Material_Overhead_Account;
1901 
1902         IF g_flow_schedule_rec.material_overhead_account IS NOT NULL THEN
1903 
1904             IF MRP_Validate.Material_Overhead_Account(g_flow_schedule_rec.material_overhead_account)
1905             THEN
1906                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1907                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_OVERHEAD_ACCOUNT
1908                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1909 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1910                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1911                 );
1912             ELSE
1913                 g_flow_schedule_rec.material_overhead_account := NULL;
1914             END IF;
1915 
1916         END IF;
1917 
1918     END IF;
1919 
1920     IF g_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.material_variance_account IS NULL THEN
1921 
1922         g_flow_schedule_rec.material_variance_account := Get_Material_Variance_Account;
1923 
1924         IF g_flow_schedule_rec.material_variance_account IS NOT NULL THEN
1925 
1926             IF MRP_Validate.Material_Variance_Account(g_flow_schedule_rec.material_variance_account)
1927             THEN
1928                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1929                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MATERIAL_VARIANCE_ACCOUNT
1930                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1931 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1932                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1933                 );
1934             ELSE
1935                 g_flow_schedule_rec.material_variance_account := NULL;
1936             END IF;
1937 
1938         END IF;
1939 
1940     END IF;
1941 
1942     IF g_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.mps_net_quantity IS NULL THEN
1943 
1944         g_flow_schedule_rec.mps_net_quantity := Get_Mps_Net_Quantity;
1945 
1946         IF g_flow_schedule_rec.mps_net_quantity IS NOT NULL THEN
1947 
1948             IF MRP_Validate.Mps_Net_Quantity(g_flow_schedule_rec.mps_net_quantity)
1949             THEN
1950                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1951                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MPS_NET_QUANTITY
1952                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1953 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1954                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1955                 );
1956             ELSE
1957                 g_flow_schedule_rec.mps_net_quantity := NULL;
1958             END IF;
1959 
1960         END IF;
1961 
1962     END IF;
1963 
1964     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
1965 
1966         g_flow_schedule_rec.mps_scheduled_comp_date := Get_Mps_Scheduled_Comp_Date;
1967 
1968         IF g_flow_schedule_rec.mps_scheduled_comp_date IS NOT NULL THEN
1969 
1970             IF MRP_Validate.Mps_Scheduled_Comp_Date(g_flow_schedule_rec.mps_scheduled_comp_date)
1971             THEN
1972                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1973                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_MPS_SCHEDULED_COMP_DATE
1974                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1975 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1976                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1977                 );
1978             ELSE
1979                 g_flow_schedule_rec.mps_scheduled_comp_date := NULL;
1980             END IF;
1981 
1982         END IF;
1983 
1984     END IF;
1985 
1986     IF g_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.organization_id IS NULL THEN
1987 
1988         g_flow_schedule_rec.organization_id := Get_Organization;
1989 
1990         IF g_flow_schedule_rec.organization_id IS NOT NULL THEN
1991 
1992             IF MRP_Validate.Organization(g_flow_schedule_rec.organization_id)
1993             THEN
1994                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
1995                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ORGANIZATION
1996                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
1997 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
1998                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
1999                 );
2000             ELSE
2001                 g_flow_schedule_rec.organization_id := NULL;
2002             END IF;
2003 
2004         END IF;
2005 
2006     END IF;
2007 
2008     IF g_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.outside_processing_acct IS NULL THEN
2009 
2010         g_flow_schedule_rec.outside_processing_acct := Get_Outside_Processing_Acct;
2011 
2012         IF g_flow_schedule_rec.outside_processing_acct IS NOT NULL THEN
2013 
2017                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OUTSIDE_PROCESSING_ACCT
2014             IF MRP_Validate.Outside_Processing_Acct(g_flow_schedule_rec.outside_processing_acct)
2015             THEN
2016                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2018                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2019 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2020                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2021                 );
2022             ELSE
2023                 g_flow_schedule_rec.outside_processing_acct := NULL;
2024             END IF;
2025 
2026         END IF;
2027 
2028     END IF;
2029 
2030     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
2031 
2032         g_flow_schedule_rec.outside_proc_var_acct := Get_Outside_Proc_Var_Acct;
2033 
2034         IF g_flow_schedule_rec.outside_proc_var_acct IS NOT NULL THEN
2035 
2036             IF MRP_Validate.Outside_Proc_Var_Acct(g_flow_schedule_rec.outside_proc_var_acct)
2037             THEN
2038                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2039                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OUTSIDE_PROC_VAR_ACCT
2040                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2041 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2042                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2043                 );
2044             ELSE
2045                 g_flow_schedule_rec.outside_proc_var_acct := NULL;
2046             END IF;
2047 
2048         END IF;
2049 
2050     END IF;
2051 
2052     IF g_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.overhead_account IS NULL THEN
2053 
2054         g_flow_schedule_rec.overhead_account := Get_Overhead_Account;
2055 
2056         IF g_flow_schedule_rec.overhead_account IS NOT NULL THEN
2057 
2058             IF MRP_Validate.Overhead_Account(g_flow_schedule_rec.overhead_account)
2059             THEN
2060                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2061                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OVERHEAD_ACCOUNT
2062                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2063 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2064                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2065                 );
2066             ELSE
2067                 g_flow_schedule_rec.overhead_account := NULL;
2068             END IF;
2069 
2070         END IF;
2071 
2072     END IF;
2073 
2074     IF g_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.overhead_variance_account IS NULL THEN
2075 
2076         g_flow_schedule_rec.overhead_variance_account := Get_Overhead_Variance_Account;
2077 
2078         IF g_flow_schedule_rec.overhead_variance_account IS NOT NULL THEN
2079 
2080             IF MRP_Validate.Overhead_Variance_Account(g_flow_schedule_rec.overhead_variance_account)
2081             THEN
2082                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2083                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_OVERHEAD_VARIANCE_ACCOUNT
2084                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2085 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2086                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2087                 );
2088             ELSE
2089                 g_flow_schedule_rec.overhead_variance_account := NULL;
2090             END IF;
2091 
2092         END IF;
2093 
2094     END IF;
2095 
2096     IF g_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.planned_quantity IS NULL THEN
2097 
2098         g_flow_schedule_rec.planned_quantity := Get_Planned_Quantity;
2099 
2100         IF g_flow_schedule_rec.planned_quantity IS NOT NULL THEN
2101 
2102             IF MRP_Validate.Planned_Quantity(g_flow_schedule_rec.planned_quantity)
2103             THEN
2104                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2105                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PLANNED_QUANTITY
2106                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2107 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2108                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2109                 );
2110             ELSE
2111                 g_flow_schedule_rec.planned_quantity := NULL;
2112             END IF;
2113 
2114         END IF;
2115 
2116     END IF;
2117 
2118     IF g_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.primary_item_id IS NULL THEN
2119 
2120         g_flow_schedule_rec.primary_item_id := Get_Primary_Item;
2121 
2122         IF g_flow_schedule_rec.primary_item_id IS NOT NULL THEN
2123 
2124             IF MRP_Validate.Primary_Item(g_flow_schedule_rec.primary_item_id)
2125             THEN
2126                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2127                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PRIMARY_ITEM
2131                 );
2128                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2129 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2130                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2132             ELSE
2133                 g_flow_schedule_rec.primary_item_id := NULL;
2134             END IF;
2135 
2136         END IF;
2137 
2138     END IF;
2139 
2140     IF g_flow_schedule_rec.project_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.project_id IS NULL THEN
2141 
2142         g_flow_schedule_rec.project_id := Get_Project;
2143 
2144         IF g_flow_schedule_rec.project_id IS NOT NULL THEN
2145 
2146             IF MRP_Validate.Project(g_flow_schedule_rec.project_id)
2147             THEN
2148                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2149                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_PROJECT
2150                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2151 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2152                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2153                 );
2154             ELSE
2155                 g_flow_schedule_rec.project_id := NULL;
2156             END IF;
2157 
2158         END IF;
2159 
2160     END IF;
2161 
2162     IF g_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM OR g_flow_schedule_rec.quantity_completed IS NULL THEN
2163 
2164         g_flow_schedule_rec.quantity_completed := Get_Quantity_Completed;
2165 
2166         IF g_flow_schedule_rec.quantity_completed IS NOT NULL THEN
2167 
2168             IF MRP_Validate.Quantity_Completed(g_flow_schedule_rec.quantity_completed)
2169             THEN
2170                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2171                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_QUANTITY_COMPLETED
2172                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2173 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2174                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2175                 );
2176             ELSE
2177                 g_flow_schedule_rec.quantity_completed := NULL;
2178             END IF;
2179 
2180         END IF;
2181 
2182     END IF;
2183 
2184     IF g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.request_id IS NULL THEN
2185 
2186 -- bug 4529167
2187 --        g_flow_schedule_rec.request_id := Get_Request_Id;
2188         g_flow_schedule_rec.request_id := null;
2189 
2190     END IF;
2191 
2192     IF g_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.resource_account IS NULL THEN
2193 
2194         g_flow_schedule_rec.resource_account := Get_Resource_Account;
2195 
2196         IF g_flow_schedule_rec.resource_account IS NOT NULL THEN
2197 
2198             IF MRP_Validate.Resource_Account(g_flow_schedule_rec.resource_account)
2199             THEN
2200                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2201                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_RESOURCE_ACCOUNT
2202                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2203 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2204                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2205                 );
2206             ELSE
2207                 g_flow_schedule_rec.resource_account := NULL;
2208             END IF;
2209 
2210         END IF;
2211 
2212     END IF;
2213 
2214     IF g_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.resource_variance_account IS NULL THEN
2215 
2216         g_flow_schedule_rec.resource_variance_account := Get_Resource_Variance_Account;
2217 
2218         IF g_flow_schedule_rec.resource_variance_account IS NOT NULL THEN
2219 
2220             IF MRP_Validate.Resource_Variance_Account(g_flow_schedule_rec.resource_variance_account)
2221             THEN
2222                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2223                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_RESOURCE_VARIANCE_ACCOUNT
2224                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2225 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2226                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2227                 );
2228             ELSE
2229                 g_flow_schedule_rec.resource_variance_account := NULL;
2230             END IF;
2231 
2232         END IF;
2233 
2234     END IF;
2235 
2236 /* Fix for bug 2977987: Moved this code to ensure that routing_revision is calculated after calculating
2237    routing_revision_date
2238 
2239     IF g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.routing_revision IS NULL THEN
2240 
2241         g_flow_schedule_rec.routing_revision := Get_Routing_Revision;
2242 
2243         IF g_flow_schedule_rec.routing_revision IS NOT NULL THEN
2244 
2245             IF MRP_Validate.Routing_Revision(g_flow_schedule_rec.routing_revision)
2246             THEN
2247                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2251                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2248                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION
2249                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2250 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2252                 );
2253             ELSE
2254                 g_flow_schedule_rec.routing_revision := NULL;
2255             END IF;
2256 
2257         END IF;
2258 
2259     END IF;
2260 */
2261 
2262     IF g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.routing_revision_date IS NULL THEN
2263 
2264         g_flow_schedule_rec.routing_revision_date := Get_Routing_Revision_Date;
2265 
2266         IF g_flow_schedule_rec.routing_revision_date IS NOT NULL THEN
2267 
2268             IF MRP_Validate.Routing_Revision_Date(g_flow_schedule_rec.routing_revision_date)
2269             THEN
2270                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2271                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION_DATE
2272                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2273 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2274                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2275                 );
2276             ELSE
2277                 g_flow_schedule_rec.routing_revision_date := NULL;
2278             END IF;
2279 
2280         END IF;
2281 
2282     END IF;
2283 
2284 /* Fix for bug 2977987: routing_revision is being calculated after calculating routing_revision_date */
2285 
2286     IF g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR  OR g_flow_schedule_rec.routing_revision IS NULL THEN
2287 
2288         g_flow_schedule_rec.routing_revision := Get_Routing_Revision;
2289 
2290         IF g_flow_schedule_rec.routing_revision IS NOT NULL THEN
2291 
2292             IF MRP_Validate.Routing_Revision(g_flow_schedule_rec.routing_revision)
2293             THEN
2294                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2295                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_ROUTING_REVISION
2296                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2297                 ,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2298                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2299                 );
2300             ELSE
2301                 g_flow_schedule_rec.routing_revision := NULL;
2302             END IF;
2303 
2304         END IF;
2305 
2306     END IF;
2307 
2308     IF g_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE  OR g_flow_schedule_rec.scheduled_completion_date IS NULL THEN
2309 
2310         g_flow_schedule_rec.scheduled_completion_date := Get_Scheduled_Completion_Date;
2311 
2312         IF g_flow_schedule_rec.scheduled_completion_date IS NOT NULL THEN
2313 
2314             IF MRP_Validate.Scheduled_Completion_Date(g_flow_schedule_rec.scheduled_completion_date)
2315             THEN
2316                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2317                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED_COMPLETION_DATE
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
2326         END IF;
2323                 g_flow_schedule_rec.scheduled_completion_date := NULL;
2324             END IF;
2325 
2327 
2328     END IF;
2329 
2330     IF g_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM or g_flow_schedule_rec.scheduled_flag IS NULL THEN
2331 
2332         g_flow_schedule_rec.scheduled_flag := Get_Scheduled;
2333 
2334         IF g_flow_schedule_rec.scheduled_flag IS NOT NULL THEN
2335 
2336             IF MRP_Validate.Scheduled(g_flow_schedule_rec.scheduled_flag)
2337             THEN
2338                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2339                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED
2340                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2341 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2342                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2343                 );
2344             ELSE
2345                 g_flow_schedule_rec.scheduled_flag := NULL;
2346             END IF;
2347 
2348         END IF;
2349 
2350     END IF;
2351 
2352     IF g_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE OR g_flow_schedule_rec.scheduled_start_date IS NULL THEN
2353 
2354         g_flow_schedule_rec.scheduled_start_date := Get_Scheduled_Start_Date;
2355 
2356         IF g_flow_schedule_rec.scheduled_start_date IS NOT NULL THEN
2357 
2358             IF MRP_Validate.Scheduled_Start_Date(g_flow_schedule_rec.scheduled_start_date)
2359             THEN
2360                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2361                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULED_START_DATE
2362                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2363 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2364                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2365                 );
2366             ELSE
2367                 g_flow_schedule_rec.scheduled_start_date := NULL;
2368             END IF;
2369 
2370         END IF;
2371 
2372     END IF;
2373 
2374     IF g_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.schedule_group_id IS NULL THEN
2375 
2376         g_flow_schedule_rec.schedule_group_id := Get_Schedule_Group;
2377 
2378         IF g_flow_schedule_rec.schedule_group_id IS NOT NULL THEN
2379 
2380             IF MRP_Validate.Schedule_Group(g_flow_schedule_rec.schedule_group_id)
2381             THEN
2382                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2383                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULE_GROUP
2384                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2385 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2386                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2387                 );
2388             ELSE
2389                 g_flow_schedule_rec.schedule_group_id := NULL;
2390             END IF;
2391 
2392         END IF;
2393 
2394     END IF;
2395 
2396     IF g_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR OR g_flow_schedule_rec.schedule_number IS NULL THEN
2397 
2398         g_flow_schedule_rec.schedule_number := Get_Schedule_Number;
2399 
2400         IF g_flow_schedule_rec.schedule_number IS NOT NULL THEN
2401 
2402             IF MRP_Validate.Schedule_Number(g_flow_schedule_rec.schedule_number)
2403             THEN
2404                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2405                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_SCHEDULE_NUMBER
2406                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2407 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2408                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2409                 );
2410             ELSE
2411                 g_flow_schedule_rec.schedule_number := NULL;
2412             END IF;
2413 
2414         END IF;
2415 
2416     END IF;
2417 
2418     IF g_flow_schedule_rec.status = FND_API.G_MISS_NUM OR g_flow_schedule_rec.status IS NULL THEN
2419 
2420         g_flow_schedule_rec.status := Get_Status;
2421 
2422         IF g_flow_schedule_rec.status IS NOT NULL THEN
2423 
2424             IF MRP_Validate.Status(g_flow_schedule_rec.status)
2425             THEN
2426                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2427                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_STATUS
2428                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2429 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2430                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2431                 );
2432             ELSE
2433                 g_flow_schedule_rec.status := NULL;
2434             END IF;
2435 
2436         END IF;
2437 
2438     END IF;
2439 
2440     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
2441 
2442         g_flow_schedule_rec.std_cost_adjustment_acct := Get_Std_Cost_Adjustment_Acct;
2443 
2444         IF g_flow_schedule_rec.std_cost_adjustment_acct IS NOT NULL THEN
2445 
2449                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_STD_COST_ADJUSTMENT_ACCT
2446             IF MRP_Validate.Std_Cost_Adjustment_Acct(g_flow_schedule_rec.std_cost_adjustment_acct)
2447             THEN
2448                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2450                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2451 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2452                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2453                 );
2454             ELSE
2455                 g_flow_schedule_rec.std_cost_adjustment_acct := NULL;
2456             END IF;
2457 
2458         END IF;
2459 
2460     END IF;
2461 
2462     IF g_flow_schedule_rec.task_id = FND_API.G_MISS_NUM  OR g_flow_schedule_rec.task_id IS NULL THEN
2463 
2464         g_flow_schedule_rec.task_id := Get_Task;
2465 
2466         IF g_flow_schedule_rec.task_id IS NOT NULL THEN
2467 
2468             IF MRP_Validate.Task(g_flow_schedule_rec.task_id)
2469             THEN
2470                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2471                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_TASK
2472                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2473 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2474                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2475                 );
2476             ELSE
2477                 g_flow_schedule_rec.task_id := NULL;
2478             END IF;
2479 
2480         END IF;
2481 
2482     END IF;
2483 
2484     IF g_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM OR g_flow_schedule_rec.wip_entity_id IS NULL THEN
2485 
2486         g_flow_schedule_rec.wip_entity_id := Get_Wip_Entity;
2487 
2488         IF g_flow_schedule_rec.wip_entity_id IS NOT NULL THEN
2489 
2490             IF MRP_Validate.Wip_Entity(g_flow_schedule_rec.wip_entity_id)
2491             THEN
2492                 MRP_Flow_Schedule_Util.Clear_Dependent_Attr
2493                 (   p_attr_id                     => MRP_Flow_Schedule_Util.G_WIP_ENTITY
2494                 ,   p_flow_schedule_rec           => g_flow_schedule_rec
2495 		,   p_old_flow_schedule_rec       => l_old_flow_schedule_rec
2496                 ,   x_flow_schedule_rec           => g_flow_schedule_rec
2497                 );
2498             ELSE
2499                 g_flow_schedule_rec.wip_entity_id := NULL;
2500             END IF;
2501 
2502         END IF;
2503 
2504     END IF;
2505 
2506     IF g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR
2507     OR  g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR
2508     OR  g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR
2509     OR  g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR
2510     OR  g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR
2511     OR  g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR
2512     OR  g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR
2513     OR  g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR
2514     OR  g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR
2515     OR  g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR
2516     OR  g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR
2517     OR  g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR
2518     OR  g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR
2519     OR  g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR
2520     OR  g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR
2521     OR  g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR
2522     THEN
2523 
2524         Get_Flex_Wip_Flow_Schedule;
2525 
2526     END IF;
2527 
2528     IF g_flow_schedule_rec.created_by = FND_API.G_MISS_NUM THEN
2529 
2530         g_flow_schedule_rec.created_by := NULL;
2531 
2532     END IF;
2533 
2534     IF g_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE THEN
2535 
2536         g_flow_schedule_rec.creation_date := NULL;
2537 
2538     END IF;
2539 
2540     IF g_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM THEN
2541 
2542         g_flow_schedule_rec.last_updated_by := NULL;
2543 
2544     END IF;
2545 
2546     IF g_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE THEN
2547 
2548         g_flow_schedule_rec.last_update_date := NULL;
2549 
2550     END IF;
2551 
2552     IF g_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM THEN
2553 
2554         g_flow_schedule_rec.last_update_login := NULL;
2555 
2556     END IF;
2557 
2558     IF g_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM THEN
2559 
2560         g_flow_schedule_rec.program_application_id := NULL;
2561 
2562     END IF;
2563 
2564     IF g_flow_schedule_rec.program_id = FND_API.G_MISS_NUM THEN
2565 
2566         g_flow_schedule_rec.program_id := NULL;
2567 
2568     END IF;
2569 
2570     IF g_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE THEN
2571 
2572         g_flow_schedule_rec.program_update_date := NULL;
2573 
2574     END IF;
2575 
2576     IF g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM THEN
2577 
2578         g_flow_schedule_rec.request_id := NULL;
2579 
2580     END IF;
2581 
2582     IF g_flow_schedule_rec.kanban_card_id = FND_API.G_MISS_NUM THEN
2583 
2584         g_flow_schedule_rec.kanban_card_id := NULL;
2585 
2586     END IF;
2587 
2588     --  Redefault if there are any missing attributes.
2589 
2590     IF  g_flow_schedule_rec.alternate_bom_designator = FND_API.G_MISS_CHAR
2591     OR  g_flow_schedule_rec.alternate_routing_desig = FND_API.G_MISS_CHAR
2592     OR  g_flow_schedule_rec.attribute1 = FND_API.G_MISS_CHAR
2593     OR  g_flow_schedule_rec.attribute10 = FND_API.G_MISS_CHAR
2594     OR  g_flow_schedule_rec.attribute11 = FND_API.G_MISS_CHAR
2595     OR  g_flow_schedule_rec.attribute12 = FND_API.G_MISS_CHAR
2596     OR  g_flow_schedule_rec.attribute13 = FND_API.G_MISS_CHAR
2597     OR  g_flow_schedule_rec.attribute14 = FND_API.G_MISS_CHAR
2598     OR  g_flow_schedule_rec.attribute15 = FND_API.G_MISS_CHAR
2599     OR  g_flow_schedule_rec.attribute2 = FND_API.G_MISS_CHAR
2600     OR  g_flow_schedule_rec.attribute3 = FND_API.G_MISS_CHAR
2601     OR  g_flow_schedule_rec.attribute4 = FND_API.G_MISS_CHAR
2602     OR  g_flow_schedule_rec.attribute5 = FND_API.G_MISS_CHAR
2603     OR  g_flow_schedule_rec.attribute6 = FND_API.G_MISS_CHAR
2604     OR  g_flow_schedule_rec.attribute7 = FND_API.G_MISS_CHAR
2605     OR  g_flow_schedule_rec.attribute8 = FND_API.G_MISS_CHAR
2606     OR  g_flow_schedule_rec.attribute9 = FND_API.G_MISS_CHAR
2607     OR  g_flow_schedule_rec.attribute_category = FND_API.G_MISS_CHAR
2608     OR  g_flow_schedule_rec.bom_revision = FND_API.G_MISS_CHAR
2609     OR  g_flow_schedule_rec.bom_revision_date = FND_API.G_MISS_DATE
2610     OR  g_flow_schedule_rec.build_sequence = FND_API.G_MISS_NUM
2611     OR  g_flow_schedule_rec.class_code = FND_API.G_MISS_CHAR
2612     OR  g_flow_schedule_rec.completion_locator_id = FND_API.G_MISS_NUM
2613     OR  g_flow_schedule_rec.completion_subinventory = FND_API.G_MISS_CHAR
2614     OR  g_flow_schedule_rec.created_by = FND_API.G_MISS_NUM
2615     OR  g_flow_schedule_rec.creation_date = FND_API.G_MISS_DATE
2616     OR  g_flow_schedule_rec.date_closed = FND_API.G_MISS_DATE
2617     OR  g_flow_schedule_rec.end_item_unit_number = FND_API.G_MISS_CHAR
2618     OR  g_flow_schedule_rec.quantity_scrapped = FND_API.G_MISS_NUM
2619     OR  g_flow_schedule_rec.demand_class = FND_API.G_MISS_CHAR
2620     OR  g_flow_schedule_rec.demand_source_delivery = FND_API.G_MISS_CHAR
2621     OR  g_flow_schedule_rec.demand_source_header_id = FND_API.G_MISS_NUM
2622     OR  g_flow_schedule_rec.demand_source_line = FND_API.G_MISS_CHAR
2623     OR  g_flow_schedule_rec.demand_source_type = FND_API.G_MISS_NUM
2624     OR  g_flow_schedule_rec.last_updated_by = FND_API.G_MISS_NUM
2625     OR  g_flow_schedule_rec.last_update_date = FND_API.G_MISS_DATE
2626     OR  g_flow_schedule_rec.last_update_login = FND_API.G_MISS_NUM
2627     OR  g_flow_schedule_rec.line_id = FND_API.G_MISS_NUM
2628     OR  g_flow_schedule_rec.material_account = FND_API.G_MISS_NUM
2629     OR  g_flow_schedule_rec.material_overhead_account = FND_API.G_MISS_NUM
2630     OR  g_flow_schedule_rec.material_variance_account = FND_API.G_MISS_NUM
2631     OR  g_flow_schedule_rec.mps_net_quantity = FND_API.G_MISS_NUM
2632     OR  g_flow_schedule_rec.mps_scheduled_comp_date = FND_API.G_MISS_DATE
2633     OR  g_flow_schedule_rec.organization_id = FND_API.G_MISS_NUM
2634     OR  g_flow_schedule_rec.outside_processing_acct = FND_API.G_MISS_NUM
2635     OR  g_flow_schedule_rec.outside_proc_var_acct = FND_API.G_MISS_NUM
2636     OR  g_flow_schedule_rec.overhead_account = FND_API.G_MISS_NUM
2637     OR  g_flow_schedule_rec.overhead_variance_account = FND_API.G_MISS_NUM
2638     OR  g_flow_schedule_rec.planned_quantity = FND_API.G_MISS_NUM
2639     OR  g_flow_schedule_rec.primary_item_id = FND_API.G_MISS_NUM
2640     OR  g_flow_schedule_rec.program_application_id = FND_API.G_MISS_NUM
2641     OR  g_flow_schedule_rec.program_id = FND_API.G_MISS_NUM
2642     OR  g_flow_schedule_rec.program_update_date = FND_API.G_MISS_DATE
2643     OR  g_flow_schedule_rec.project_id = FND_API.G_MISS_NUM
2644     OR  g_flow_schedule_rec.quantity_completed = FND_API.G_MISS_NUM
2645     OR  g_flow_schedule_rec.request_id = FND_API.G_MISS_NUM
2646     OR  g_flow_schedule_rec.resource_account = FND_API.G_MISS_NUM
2647     OR  g_flow_schedule_rec.resource_variance_account = FND_API.G_MISS_NUM
2648     OR  g_flow_schedule_rec.routing_revision = FND_API.G_MISS_CHAR
2649     OR  g_flow_schedule_rec.routing_revision_date = FND_API.G_MISS_DATE
2650     OR  g_flow_schedule_rec.scheduled_completion_date = FND_API.G_MISS_DATE
2651     OR  g_flow_schedule_rec.scheduled_flag = FND_API.G_MISS_NUM
2652     OR  g_flow_schedule_rec.scheduled_start_date = FND_API.G_MISS_DATE
2653     OR  g_flow_schedule_rec.schedule_group_id = FND_API.G_MISS_NUM
2654     OR  g_flow_schedule_rec.schedule_number = FND_API.G_MISS_CHAR
2655     OR  g_flow_schedule_rec.status = FND_API.G_MISS_NUM
2656     OR  g_flow_schedule_rec.std_cost_adjustment_acct = FND_API.G_MISS_NUM
2657     OR  g_flow_schedule_rec.task_id = FND_API.G_MISS_NUM
2658     OR  g_flow_schedule_rec.wip_entity_id = FND_API.G_MISS_NUM
2659     THEN
2660 
2661         MRP_Default_Flow_Schedule.Attributes
2662         (   p_flow_schedule_rec           => g_flow_schedule_rec
2663         ,   p_iteration                   => nvl(p_iteration, 1) + 1
2664         ,   x_flow_schedule_rec           => x_flow_schedule_rec
2665         );
2666 
2667     ELSE
2668 
2669         --  Done defaulting attributes
2670 
2671         x_flow_schedule_rec := g_flow_schedule_rec;
2672 
2673     END IF;
2674 
2675 END Attributes;
2676 
2677 END MRP_Default_Flow_Schedule;