Exemple #1
0
        private void VerifyQuantities(IDbTransactionData dbTransactionData, bool isArchive)
        {
            foreach (var demandToProvider in dbTransactionData.DemandToProviderGetAll())
            {
                Demand   demand   = dbTransactionData.DemandsGetById(demandToProvider.GetDemandId());
                Provider provider =
                    dbTransactionData.ProvidersGetById(demandToProvider.GetProviderId());

                // every quantity > 0
                Assert.True(demand.GetQuantity().IsGreaterThan(Quantity.Null()));
                Assert.True(provider.GetQuantity().IsGreaterThan(Quantity.Null()));
                Assert.True(demandToProvider.GetQuantity().IsGreaterThan(Quantity.Null()));

                // demand's quantity == provider's quantity
                Assert.True(demand.GetQuantity().Equals(provider.GetQuantity()));
                // demand's quantity == demandToProvider's quantity
                Assert.True(demand.GetQuantity().Equals(demandToProvider.GetQuantity()));
                // provider's quantity == demandToProvider's quantity
                Assert.True(provider.GetQuantity().Equals(demandToProvider.GetQuantity()));
            }

            foreach (var providerToDemand in dbTransactionData.ProviderToDemandGetAll())
            {
                Demand   demand   = dbTransactionData.DemandsGetById(providerToDemand.GetDemandId());
                Provider provider =
                    dbTransactionData.ProvidersGetById(providerToDemand.GetProviderId());

                // this is a special case, doc can be found at TODO
                if (provider == null && demand.GetType() == typeof(StockExchangeDemand) && isArchive)
                {
                    continue;
                }

                // every quantity > 0
                Assert.True(demand.GetQuantity().IsGreaterThan(Quantity.Null()));
                Assert.True(provider.GetQuantity().IsGreaterThan(Quantity.Null()));
                Assert.True(providerToDemand.GetQuantity().IsGreaterThan(Quantity.Null()));

                if (provider.GetType() == typeof(StockExchangeProvider))
                {
                    // stockExchangeProvider's quantity >= providerToDemand's quantity
                    Assert.True(
                        provider.GetQuantity().IsGreaterThanOrEqualTo(providerToDemand.GetQuantity()));
                }
                else if (provider.GetType() == typeof(ProductionOrder))
                {
                    // no condition
                }
                else if (provider.GetType() == typeof(PurchaseOrderPart))
                {
                    Assert.True(false, "This arrow is not allowed.");
                }
                else
                {
                    Assert.True(false, "Unexpected type.");
                }
            }
        }
        public void AddDemand(Demand oneDemand, Quantity reservedQuantity)
        {
            if (_demands.GetDemandById(oneDemand.GetId()) != null)
            {
                throw new MrpRunException("You cannot add an already added demand.");
            }


            // if it has quantity that is not reserved, remember it for later reserving
            if (oneDemand.GetType() == typeof(StockExchangeDemand) &&
                reservedQuantity.IsSmallerThan(oneDemand.GetQuantity()))
            {
                _openDemands.Add(oneDemand.GetArticle(),
                                 new OpenNode <Demand>(oneDemand, oneDemand.GetQuantity().Minus(reservedQuantity),
                                                       oneDemand.GetArticle()));
            }

            // save demand
            _demands.Add(oneDemand);
        }
Exemple #3
0
        private EntityCollector MaterialRequirementsPlanningForOneDemand(Demand demand,
                                                                         IProviderManager providerManager)
        {
            EntityCollector entityCollector = new EntityCollector();

            EntityCollector response = providerManager.Satisfy(demand, demand.GetQuantity());

            entityCollector.AddAll(response);
            response = providerManager.CreateDependingDemands(entityCollector.GetProviders());
            entityCollector.AddAll(response);

            if (entityCollector.IsSatisfied(demand) == false)
            {
                throw new MrpRunException($"'{demand}' was NOT satisfied: remaining is " +
                                          $"{entityCollector.GetRemainingQuantity(demand)}");
            }

            return(entityCollector);
        }
Exemple #4
0
 private string ToGraphizString(Demand demand)
 {
     return($"\\n{demand.GetId()}: {demand.GetArticle().Name};Anzahl: {demand.GetQuantity()};"
            + $"\\nStart/End: {demand.GetStartTimeBackward()}/{demand.GetEndTimeBackward()};"
            );
 }