public DueTime GetEarliestPossibleStartTimeOf( ProductionOrderOperation productionOrderOperation) { DueTime maximumOfEarliestStartTimes = null; Providers providers = ZppConfiguration.CacheManager.GetAggregator() .GetAllChildStockExchangeProvidersOf(productionOrderOperation); foreach (var stockExchangeProvider in providers) { DueTime earliestStartTime = productionOrderOperation.GetStartTimeBackward(); if (earliestStartTime.IsGreaterThanOrEqualTo(stockExchangeProvider .GetStartTimeBackward())) { earliestStartTime = stockExchangeProvider.GetStartTimeBackward(); } else { throw new MrpRunException( "A provider of a demand cannot have a later dueTime."); } Demands stockExchangeDemands = ZppConfiguration.CacheManager.GetAggregator() .GetAllChildDemandsOf(stockExchangeProvider); if (stockExchangeDemands.Any() == false) // StockExchangeProvider has no childs (stockExchangeDemands), // take that from stockExchangeProvider { DueTime childDueTime = stockExchangeProvider.GetStartTimeBackward(); if (childDueTime.IsGreaterThan(earliestStartTime)) { earliestStartTime = childDueTime; } } else // StockExchangeProvider has childs (stockExchangeDemands) { foreach (var stockExchangeDemand in stockExchangeDemands) { DueTime stockExchangeDemandDueTime = stockExchangeDemand.GetStartTimeBackward(); if (stockExchangeDemandDueTime.IsGreaterThan(earliestStartTime)) { earliestStartTime = stockExchangeDemandDueTime; } } } if (maximumOfEarliestStartTimes == null || earliestStartTime.IsGreaterThan(maximumOfEarliestStartTimes)) { maximumOfEarliestStartTimes = earliestStartTime; } } return(maximumOfEarliestStartTimes); }
public DueTime GetEarliestPossibleStartTimeOf(ProductionOrderBom productionOrderBom) { DueTime earliestStartTime = productionOrderBom.GetStartTimeBackward(); Providers providers = ZppConfiguration.CacheManager.GetAggregator() .GetAllChildProvidersOf(productionOrderBom); if (providers.Count() > 1) { throw new MrpRunException("A productionOrderBom can only have one provider !"); } Provider stockExchangeProvider = providers.GetAny(); if (earliestStartTime.IsGreaterThanOrEqualTo( stockExchangeProvider.GetStartTimeBackward())) { earliestStartTime = stockExchangeProvider.GetStartTimeBackward(); } else { throw new MrpRunException("A provider of a demand cannot have a later dueTime."); } Demands stockExchangeDemands = ZppConfiguration.CacheManager.GetAggregator() .GetAllChildDemandsOf(stockExchangeProvider); if (stockExchangeDemands.Any() == false) // StockExchangeProvider has no childs (stockExchangeDemands), // take that from stockExchangeProvider { DueTime childDueTime = stockExchangeProvider.GetStartTimeBackward(); if (childDueTime.IsGreaterThan(earliestStartTime)) { earliestStartTime = childDueTime; } } else // StockExchangeProvider has childs (stockExchangeDemands) { foreach (var stockExchangeDemand in stockExchangeDemands) { DueTime stockExchangeDemandDueTime = stockExchangeDemand.GetStartTimeBackward(); if (stockExchangeDemandDueTime.IsGreaterThan(earliestStartTime)) { earliestStartTime = stockExchangeDemandDueTime; } } } return(earliestStartTime); }
public void TestParentsDueTimeIsGreaterThanOrEqualToChildsDueTime( string testConfigurationFileName) { // init InitThisTest(testConfigurationFileName); IDbTransactionData dbTransactionData = ZppConfiguration.CacheManager.ReloadTransactionData(); foreach (var demandToProvider in dbTransactionData.DemandToProviderGetAll()) { Demand parentDemand = dbTransactionData.DemandsGetById(demandToProvider.GetDemandId()); if (parentDemand.GetType() == typeof(CustomerOrderPart)) { continue; } Provider childProvider = dbTransactionData.ProvidersGetById(demandToProvider.GetProviderId()); DueTime parentDueTime = parentDemand.GetStartTimeBackward(); DueTime childDueTime = childProvider.GetEndTimeBackward(); Assert.True(parentDueTime.IsGreaterThanOrEqualTo(childDueTime), "ParentDemand's dueTime cannot be smaller than childProvider's dueTime."); } foreach (var providerToDemand in dbTransactionData.ProviderToDemandGetAll()) { Provider parentProvider = dbTransactionData.ProvidersGetById(providerToDemand.GetProviderId()); Demand childDemand = dbTransactionData.DemandsGetById(providerToDemand.GetDemandId()); DueTime parentDueTime = parentProvider.GetStartTimeBackward(); DueTime childDueTime = childDemand.GetEndTimeBackward(); Assert.True(parentDueTime.IsGreaterThanOrEqualTo(childDueTime), "ParentProvider's dueTime cannot be smaller than childDemand's dueTime."); } }