示例#1
0
        // для ингредиента попытаться обновить статус блюда по всем ингредиентам
        private void updateDishStatusByIngrStatuses()
        {
            OrderDishModel parentDish = getParentDish();

            if (parentDish != null)
            {
                List <OrderDishModel> ingrs = getIngredients();

                int   iLen      = Enum.GetValues(typeof(OrderStatusEnum)).Length;
                int[] statArray = new int[iLen];

                int iStatus, iDishesCount = ingrs.Count;
                foreach (OrderDishModel modelDish in ingrs)
                {
                    iStatus = modelDish.DishStatusId;
                    statArray[iStatus]++;
                }

                // в состояние 0 заказ автоматом переходить не должен
                for (int i = 1; i < iLen; i++)
                {
                    if (statArray[i] == iDishesCount)
                    {
                        OrderStatusEnum statDishes = AppLib.GetStatusEnumFromNullableInt(i);
                        if (parentDish.Status != statDishes)
                        {
                            parentDish.UpdateStatus(statDishes);
                        }
                        break;
                    }
                }
            }
        }
示例#2
0
        public OrderDishModel Copy()
        {
            OrderDishModel retVal = (OrderDishModel)this.MemberwiseClone();

            retVal._tsTimersDict    = null;
            retVal._curTimer        = this._curTimer;
            retVal._dbRunTimeRecord = null;

            return(retVal);
        }
示例#3
0
        // обновить добавленный к списку зависимый ингредиент по родительскому блюду
        // т.е. для нового объекта в заказе
        private void updateIngredientByParentDish()
        {
            // найти уже существующее блюдо для данного ингредиента
            _parentDish = getParentDish();

            if (_parentDish != null)
            {
                StatusDTS dtsBase = _parentDish.getStatusRunTimeDTS(_parentDish.Status);
                // и если оно поменялось, то обновляем статус ингредиента
                if (this.DishStatusId != _parentDish.DishStatusId)
                {
                    StatusDTS preDtsBase = _parentDish.getStatusRunTimeDTS(this.Status);
                    UpdateStatus(_parentDish.Status, dtsBase.DateEntered, preDtsBase.TimeStanding);
                }
                else
                {
                    setStatusRunTimeDTS(this.Status, dtsBase.DateEntered, -1);
                    saveRunTimeRecord();

                    startStatusTimer(dtsBase);
                }
            }
        }
示例#4
0
        // ПОЛНОЕ ОБНОВЛЕНИЕ заказа из БД-сущности (вместе с блюдами)
        public void UpdateFromDBEntity(Order dbOrder)
        {
            lock (this)
            {
                if (Uid != dbOrder.UID)
                {
                    Uid = dbOrder.UID;
                }
                if (Number != dbOrder.Number)
                {
                    Number = dbOrder.Number;
                }
                if (TableName != dbOrder.TableNumber)
                {
                    TableName = dbOrder.TableNumber;
                }
                if (CreateDate != dbOrder.CreateDate)
                {
                    CreateDate = dbOrder.CreateDate;
                }
                if (HallName != dbOrder.RoomNumber)
                {
                    HallName = dbOrder.RoomNumber;
                }
                if (Waiter != dbOrder.Waiter)
                {
                    Waiter = dbOrder.Waiter;
                }
                if (DivisionColorRGB != dbOrder.DivisionColorRGB)
                {
                    DivisionColorRGB = dbOrder.DivisionColorRGB;
                }

                OrderStatusEnum newStatus = AppLib.GetStatusEnumFromNullableInt(dbOrder.OrderStatusId);

                if (dbOrder.OrderStatusId < 1)
                {
                    newStatus = OrderStatusEnum.Cooking;
                    saveStatusToDB(newStatus);
                }

                UpdateStatus(newStatus, false);

                // *** СЛОВАРЬ БЛЮД  ***
                // удалить блюда из внутр.модели заказа, которых уже нет в БД и которые НЕЗАБЛОКИРОВАНЫ
                List <int> idDishList  = dbOrder.Dishes.Select(d => d.Id).ToList();    // все Id блюд из БД
                List <int> idForRemove = _dishesDict.Keys.Except(idDishList).ToList(); // Id блюд для удаления
                foreach (int idDish in idForRemove)
                {
                    if (OrderLocker.IsLockDish(idDish))
                    {
                        continue;
                    }
                    _dishesDict[idDish].Dispose(); _dishesDict.Remove(idDish);
                }

                _isUpdStatusFromDishes = false;

                // обновить состояние или добавить блюда
                foreach (OrderDish dbDish in dbOrder.Dishes)
                {
                    // пропустить, если блюдо находится в словаре заблокированных от изменения по таймеру
                    if (OrderLocker.IsLockDish(dbDish.Id))
                    {
                        continue;
                    }

                    if (this._dishesDict.ContainsKey(dbDish.Id))  // есть такое блюдо во внут.словаре - обновить из БД
                    {
                        this._dishesDict[dbDish.Id].UpdateFromDBEntity(dbDish);
                    }
                    // иначе - добавить блюдо/ингр
                    else
                    {
                        OrderDishModel newDish = new OrderDishModel(dbDish, this);
                        this._dishesDict.Add(newDish.Id, newDish);
                    }
                }
            } // lock
        }     // method UpdateFromDBEntity
示例#5
0
        // *** CONSTRUCTOR  ***
        public OrderModel(Order dbOrder)
        {
            Id               = dbOrder.Id; Uid = dbOrder.UID; Number = dbOrder.Number;
            TableName        = dbOrder.TableNumber;
            CreateDate       = dbOrder.CreateDate;
            HallName         = dbOrder.RoomNumber;
            Waiter           = dbOrder.Waiter;
            DivisionColorRGB = dbOrder.DivisionColorRGB;

            OrderStatusId = dbOrder.OrderStatusId;
            Status        = (OrderStatusEnum)dbOrder.OrderStatusId; //AppLib.GetStatusEnumFromNullableInt(dbOrder.OrderStatusId);

            _isUseReadyConfirmed = AppProperties.GetBoolProperty("UseReadyConfirmedState");

            _dishesDict = new Dictionary <int, OrderDishModel>();
            // получить отсоединенную RunTime запись из таблицы состояний
            _dbRunTimeRecord = getOrderRunTimeRecord(dbOrder.Id);

            // создать словарь накопительных счетчиков
            _tsTimersDict = new Dictionary <OrderStatusEnum, TimeCounter>();
            // таймер времени приготовления
            _tsTimersDict.Add(OrderStatusEnum.Cooking, new TimeCounter()
            {
                Name = OrderStatusEnum.Cooking.ToString()
            });
            // таймер времени ожидания выдачи, нахождение в состоянии Готов
            _tsTimersDict.Add(OrderStatusEnum.Ready, new TimeCounter()
            {
                Name = OrderStatusEnum.Ready.ToString()
            });
            if (_isUseReadyConfirmed)
            {
                _tsTimersDict.Add(OrderStatusEnum.ReadyConfirmed, new TimeCounter()
                {
                    Name = OrderStatusEnum.ReadyConfirmed.ToString()
                });
            }
            // таймер времени ожидания фиксации заказа, нахождение в состоянии Выдано
            _tsTimersDict.Add(OrderStatusEnum.Took, new TimeCounter()
            {
                Name = OrderStatusEnum.Took.ToString()
            });
            // таймер нахождения в состоянии отмены
            _tsTimersDict.Add(OrderStatusEnum.Cancelled, new TimeCounter()
            {
                Name = OrderStatusEnum.Cancelled.ToString()
            });

            // для нового объекта статус по умолчанию - В ПРОЦЕССЕ ГОТОВКИ
            if (this.OrderStatusId < 1)
            {
                OrderStatusEnum newStatus = OrderStatusEnum.Cooking;
                UpdateStatus(newStatus, false);
            }
            else
            {
                // обновить статус заказа по статусам всех блюд
                OrderStatusEnum eStatusAllDishes = AppLib.GetStatusAllDishes(dbOrder.Dishes);
                if ((eStatusAllDishes != OrderStatusEnum.None) &&
                    (this.Status != eStatusAllDishes) &&
                    ((int)this.Status < (int)eStatusAllDishes))
                {
                    UpdateStatus(eStatusAllDishes, false);
                }
            }

            StatusDTS statusDTS    = getStatusRunTimeDTS(this.Status);
            DateTime  dtEnterState = statusDTS.DateEntered;

            if (dtEnterState.IsZero())
            {
                dtEnterState = DateTime.Now;
                setStatusRunTimeDTS(this.Status, dtEnterState, -1);
                saveRunTimeRecord();
                statusDTS = getStatusRunTimeDTS(this.Status);
            }
            startStatusTimer(statusDTS);

            // добавить блюда к заказу
            //   расставить сначала блюдо, потом его ингредиенты, т.к. ингр.могут идти ПЕРЕД блюдом
            List <OrderDish>            dishParentList = dbOrder.Dishes.Where(d => d.ParentUid.IsNull()).ToList();
            Dictionary <int, OrderDish> dAll           = new Dictionary <int, OrderDish>();

            foreach (OrderDish dishParent in dishParentList)
            {
                if (dAll.ContainsKey(dishParent.Id) == false)
                {
                    dAll.Add(dishParent.Id, dishParent);

                    // отобрать ингредиенты
                    List <OrderDish> ingrList = dbOrder.Dishes.Where(ingr => (ingr.ParentUid == dishParent.UID) && (ingr.Id != dishParent.Id)).ToList();
                    foreach (OrderDish ingr in ingrList)
                    {
                        if (dAll.ContainsKey(ingr.Id) == false)
                        {
                            dAll.Add(ingr.Id, ingr);
                        }
                    }
                }
            }

            foreach (OrderDish dbDish in dAll.Values)   // dbOrder.OrderDish
            {
                if (this._dishesDict.ContainsKey(dbDish.Id) == false)
                {
                    OrderDishModel newDish = new OrderDishModel(dbDish, this);
                    this._dishesDict.Add(newDish.Id, newDish);
                }
            }
        }  // ctor
示例#6
0
 public DishWithQty(OrderDishModel dishModel)
 {
     this.DishModel = dishModel;
     this.Quantity  = dishModel.Quantity;
 }