Exemplo n.º 1
0
        // ctor
        // ДЛЯ НОВОГО БЛЮДА
        public OrderDishModel(OrderDish dbDish, OrderModel modelOrder)
        {
            _modelOrder = modelOrder;

            Id               = dbDish.Id; Uid = dbDish.UID;
            DepartmentId     = dbDish.DepartmentId;
            CreateDate       = dbDish.CreateDate;
            Name             = dbDish.DishName;
            FilingNumber     = dbDish.FilingNumber;
            ParentUid        = dbDish.ParentUid;
            Comment          = dbDish.Comment;
            Quantity         = dbDish.Quantity;
            DelayedStartTime = dbDish.DelayedStartTime;
            UID1C            = dbDish.UID1C;

            // свойства объекта с зависимыми полями

            EstimatedTime       = dbDish.EstimatedTime;
            _tsCookingEstimated = TimeSpan.FromSeconds(this.EstimatedTime);

            DishStatusId = dbDish.DishStatusId;
            Status       = AppLib.GetStatusEnumFromNullableInt(dbDish.DishStatusId);

            // получить запись из таблицы состояний
            _dbRunTimeRecord = getOrderDishRunTimeRecord(dbDish.Id);

            _isDish = ParentUid.IsNull();
            _isUseReadyConfirmed        = AppProperties.GetBoolProperty("UseReadyConfirmedState");
            _autoGotoReadyConfirmPeriod = AppProperties.GetIntProperty("AutoGotoReadyConfirmPeriod");

            // словарь дат входа в состояние
            _dtEnterStatusDict = new Dictionary <OrderStatusEnum, DateTime>();
            foreach (var item in Enum.GetValues(typeof(OrderStatusEnum)))
            {
                _dtEnterStatusDict.Add((OrderStatusEnum)item, DateTime.MinValue);
            }

            // создать словарь накопительных счетчиков
            _tsTimersDict = new Dictionary <OrderStatusEnum, TimeCounter>();
            // таймер ожидания начала приготовления
            _tsTimersDict.Add(OrderStatusEnum.WaitingCook, new TimeCounter()
            {
                Name = OrderStatusEnum.WaitingCook.ToString()
            });
            // таймер времени приготовления
            _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 (Quantity < 0)
            {
                if (Status != OrderStatusEnum.Cancelled)
                {
                    UpdateStatus(OrderStatusEnum.Cancelled);
                }
                else
                {
                    startStatusTimerAtFirst();
                }
            }
            else
            {
                UpdateFromDBEntity(dbDish);  // для новой записи DTS не сохранен
                startStatusTimerAtFirst();
            }
        }  // constructor