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); }
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); }