示例#1
0
        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;
        }