public Demands CalculateUnsatisfiedDemands(Demands demands) { Demands unSatisfiedDemands = new Demands(); Dictionary <Provider, Quantity> reservableQuantityToProvider = new Dictionary <Provider, Quantity>(); foreach (var provider in StackSet) { reservableQuantityToProvider.Add(provider, provider.GetQuantity()); } foreach (var demand in demands.GetAll()) { Quantity neededQuantity = demand.GetQuantity(); foreach (var provider in StackSet) { Quantity reservableQuantity = reservableQuantityToProvider[provider]; if (provider.GetArticleId().Equals(demand.GetArticleId()) && reservableQuantity.IsGreaterThan(Quantity.Null())) { reservableQuantityToProvider[provider] = reservableQuantity .Minus(neededQuantity); neededQuantity = neededQuantity.Minus(reservableQuantity); // neededQuantity < 0 if (neededQuantity.IsSmallerThan(Quantity.Null())) { break; } // neededQuantity > 0: continue to provide it } } if (neededQuantity.IsGreaterThan(Quantity.Null())) { unSatisfiedDemands.Add(demand); } } return(unSatisfiedDemands); }