// коллекция разрешенных состояний для фильтра public void SetAllowedStatuses(KDSUserStatesSet statesSet) { _allowedStatuses.Clear(); // для фильтра берем список Ид состояний _allowedStatuses = statesSet.States.Select(s => (int)s).ToList(); }
} // method // пользовательские наборы состояний для их фильтрации public static List <KDSUserStatesSet> CreateUserStatesList(List <OrderStatusEnum> statesList) { if ((statesList == null) || (statesList.Count < 2)) { return(null); } List <KDSUserStatesSet> retVal = new List <Model.KDSUserStatesSet>(); KDSUserStatesSet curSet; int initIdx; // начальный индекс Brush bBrush, fBrush; // отсортировать по значению перечисления //List<OrderStatusEnum> sortedStates = statesList.OrderBy(s => (int)s).ToList(); // если есть состояния Ожидание и Готовка, то объединить их в один набор "В процессе" if ((statesList.Count >= 2) && (statesList[0] == OrderStatusEnum.WaitingCook) && (statesList[1] == OrderStatusEnum.Cooking)) { StateGraphHelper.SetStateButtonBrushes(OrderStatusEnum.Cooking, out bBrush, out fBrush); curSet = new KDSUserStatesSet() { Name = "В процессе", BackBrush = bBrush, FontBrush = fBrush }; curSet.States.AddRange(new[] { OrderStatusEnum.WaitingCook, OrderStatusEnum.Cooking }); retVal.Add(curSet); initIdx = 2; } else { initIdx = 0; } // добавить состояния по одному string tabName; for (int i = initIdx; i < statesList.Count; i++) { OrderStatusEnum curState = statesList[i]; StateGraphHelper.SetStateButtonBrushes(curState, out bBrush, out fBrush); tabName = StateGraphHelper.GetStateTabName(curState); curSet = new KDSUserStatesSet() { Name = tabName, BackBrush = bBrush, FontBrush = fBrush }; curSet.States.Add(curState); retVal.Add(curSet); } // первый элемент - все состояния, если есть более одного состояния в списке if (statesList.Count > 1) { curSet = new KDSUserStatesSet() { Name = "Все статусы", BackBrush = new SolidColorBrush(Colors.MediumSeaGreen), FontBrush = new SolidColorBrush(Colors.Navy) }; curSet.States.AddRange(statesList); // и удалить, если есть, Выдано if (curSet.States.Contains(OrderStatusEnum.Took)) { curSet.States.Remove(OrderStatusEnum.Took); } retVal.Insert(0, curSet); } // список из менее 2-х элементов не рассматриваем return((retVal.Count < 2) ? null : retVal); }