public static Interval CalculatePriceUpdates(List<ClientDrinkOrder> allOrdersItems, Interval[] intervals, int idCurrentInterval, bool predict, BeursfuifViewModelBase viewmodel) { viewmodel.PointInCode("PriceCalculation: CalculatePriceUpdates"); Interval currentInterval = intervals.FirstOrDefault(x => x.Id == idCurrentInterval); if (currentInterval == null) throw new Exception("Current interval isn't part of the Interval array"); int currentIntervalIndex = Array.IndexOf(intervals, intervals.FirstOrDefault(x => x.Id == idCurrentInterval)); //the first to intervals don't trigger an update if (currentIntervalIndex == 0) return intervals[1]; Interval previousInterval = intervals[currentIntervalIndex - 1]; //no new update possible, end of beursfuif if (currentIntervalIndex == intervals.Length - 1) return null; Interval nextInterval = (predict ? intervals[currentIntervalIndex + 1].Clone() : intervals[currentIntervalIndex + 1]); int previousAllDrinkCount = allOrdersItems.Where(x => x.IntervalId == previousInterval.Id).Sum(x => x.Count); viewmodel.SendLogMessage("Previous drink count: " + previousAllDrinkCount, LogType.SETTINGS_VM); int currentAllDrinkCount = allOrdersItems.Where(x => x.IntervalId == currentInterval.Id).Sum(x => x.Count); viewmodel.SendLogMessage("Current drink count: " + previousAllDrinkCount, LogType.SETTINGS_VM); //2 in the excel file int differenceAllDrinks = currentAllDrinkCount - previousAllDrinkCount; viewmodel.SendLogMessage("Current all drinkcount - Previous all drinkcount", LogType.SETTINGS_VM); Drink[] drinksForNextInterval = currentInterval.Drinks.Where(x => x.Available).ToArray(); int numberOfDrinks = drinksForNextInterval.Length; for (int i = 0; i < numberOfDrinks; i++) { CalculateNewPrice(allOrdersItems, predict, currentInterval, previousInterval, nextInterval, previousAllDrinkCount, currentAllDrinkCount, differenceAllDrinks, drinksForNextInterval, i); } return nextInterval; }