예제 #1
0
        private static BomDemandList GetOtherDemands(Session session, BomDemandList demandList)
        {
            BomDemandList AvailabilityDetailList       = demandList;
            XPCollection <ProjectDetails> OpenProjects = null;

            if (demandList != null && demandList.Count > 0)
            {
                OpenProjects = new XPCollection <ProjectDetails>(session, new BinaryOperator(ProjectDetails.Fields.Project.ProjectStatus.PropertyName, ProjectStatus.Completed, BinaryOperatorType.NotEqual) & new BinaryOperator(ProjectDetails.Fields.UnitsNeeded.PropertyName, 0, BinaryOperatorType.Greater));
                foreach (ProjectDetails projectLine in OpenProjects)
                {
                    foreach (BomDemand ProjectBomDemand in demandList)
                    {
                        if (ProjectBomDemand.ProjectDetailID.Oid != projectLine.Oid)
                        {
                            if (ProjectBomDemand.ItemType != "PI")
                            {
                                foreach (BOMs BomNeeded in projectLine.ProjectItem.ItemBOM)
                                {
                                    if (ProjectBomDemand.ItemID.ItemID == BomNeeded.BOMRawMatID.ItemID)
                                    {
                                        ProjectBomDemand.QuantityOnUnscheduledProjects += projectLine.UnitsNeededToSchedule * (BomNeeded.BOMQuantity + (BomNeeded.BOMQuantity * (BomNeeded.ScrapFactor / 100)));
                                        ProjectBomDemand.QuantityOnScheduledProjects   += (projectLine.UnitsNeeded - projectLine.UnitsNeededToSchedule) * (BomNeeded.BOMQuantity + (BomNeeded.BOMQuantity * (BomNeeded.ScrapFactor / 100)));
                                    }
                                }
                            }
                            else
                            {
                                foreach (PoolBom PoolBomNeeded in projectLine.ProjectItem.ItemPoolBom)
                                {
                                    if (ProjectBomDemand.PoolItemID.Oid == PoolBomNeeded.ItemPoolID.Oid)
                                    {
                                        ProjectBomDemand.QuantityOnUnscheduledProjects += projectLine.UnitsNeededToSchedule * (PoolBomNeeded.PoolBomQuantity + (PoolBomNeeded.PoolBomQuantity * (PoolBomNeeded.ScrapFactor / 100)));
                                        ProjectBomDemand.QuantityOnScheduledProjects   += (projectLine.UnitsNeeded - projectLine.UnitsNeededToSchedule) * (PoolBomNeeded.PoolBomQuantity + (PoolBomNeeded.PoolBomQuantity * (PoolBomNeeded.ScrapFactor / 100)));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            return(AvailabilityDetailList);
        }
예제 #2
0
        public static BomDemandList GetBomAvailabilityDetail(Project project)
        {
            BomDemandList AvailabilityDetailList = new BomDemandList();

            if (project != null)
            {
                BomDemand AvailabilityDetail = null;
                foreach (ProjectDetails FGDemand in project.ProjectDetails)
                {
                    foreach (BOMs BomNeeded in FGDemand.ProjectItem.ItemBOM)
                    {
                        AvailabilityDetail                            = new BomDemand();
                        AvailabilityDetail.ProjectID                  = project;
                        AvailabilityDetail.ProjectDetailID            = FGDemand;
                        AvailabilityDetail.ItemID                     = BomNeeded.BOMRawMatID;
                        AvailabilityDetail.ItemType                   = BomNeeded.BOMRawMatID.ItemType;
                        AvailabilityDetail.QuantityOnHand             = (new XPCollection <LocationInventory>(new BinaryOperator(DXDAL.SPGData.LocationInventory.Fields.LocationInventoryItem.ItemID.PropertyName, BomNeeded.BOMRawMatID.ItemID, BinaryOperatorType.Equal) & new BinaryOperator(DXDAL.SPGData.LocationInventory.Fields.Location.PropertyName, 1, BinaryOperatorType.Equal))).Sum((i) => i.QuantityOnHand);
                        AvailabilityDetail.QuantityRequiredForProject = FGDemand.UnitsNeeded * (BomNeeded.BOMQuantity + (BomNeeded.BOMQuantity * (BomNeeded.ScrapFactor / 100)));
                        AvailabilityDetailList.Add(AvailabilityDetail);
                    }
                    foreach (PoolBom PoolBomNeeded in FGDemand.ProjectItem.ItemPoolBom)
                    {
                        AvailabilityDetail                            = new BomDemand();
                        AvailabilityDetail.ProjectID                  = project;
                        AvailabilityDetail.ProjectDetailID            = FGDemand;
                        AvailabilityDetail.PoolItemID                 = PoolBomNeeded.ItemPoolID;
                        AvailabilityDetail.ItemType                   = "PI";
                        AvailabilityDetail.QuantityOnHand             = PoolBomNeeded.ItemPoolID.QuantityOnHand;
                        AvailabilityDetail.QuantityRequiredForProject = FGDemand.UnitsNeeded * (PoolBomNeeded.PoolBomQuantity + (PoolBomNeeded.PoolBomQuantity * (PoolBomNeeded.ScrapFactor / 100)));

                        AvailabilityDetailList.Add(AvailabilityDetail);
                    }
                }
                AvailabilityDetailList = GetOtherDemands(project.Session, AvailabilityDetailList);
            }

            return(AvailabilityDetailList);
        }