예제 #1
0
        private string getSQLUpdStringRunTimeRecord(OrderRunTime runTimeRecord)
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.Append("UPDATE [OrderRunTime] SET ");
            sb.AppendFormat("[OrderId] = {0}", runTimeRecord.OrderId.ToString());
            sb.AppendFormat(", [InitDate] = {0}", runTimeRecord.InitDate.ToSQLExpr());
            sb.AppendFormat(", [WaitingCookTS] = {0}", runTimeRecord.WaitingCookTS.ToString());
            sb.AppendFormat(", [CookingStartDate] = {0}", runTimeRecord.CookingStartDate.ToSQLExpr());
            sb.AppendFormat(", [CookingTS] = {0}", runTimeRecord.CookingTS.ToString());
            sb.AppendFormat(", [ReadyDate] = {0}", runTimeRecord.ReadyDate.ToSQLExpr());
            sb.AppendFormat(", [WaitingTakeTS] = {0}", runTimeRecord.WaitingTakeTS.ToString());
            sb.AppendFormat(", [TakeDate] = {0}", runTimeRecord.TakeDate.ToSQLExpr());
            sb.AppendFormat(", [WaitingCommitTS] = {0}", runTimeRecord.WaitingCommitTS.ToString());
            sb.AppendFormat(", [CommitDate] = {0}", runTimeRecord.CommitDate.ToSQLExpr());
            sb.AppendFormat(", [CancelDate] = {0}", runTimeRecord.CancelDate.ToSQLExpr());
            sb.AppendFormat(", [CancelConfirmedDate] = {0}", runTimeRecord.CancelConfirmedDate.ToSQLExpr());
            sb.AppendFormat(", [ReadyTS] = {0}", runTimeRecord.ReadyTS.ToString());
            sb.AppendFormat(", [ReadyConfirmedDate] = {0}", runTimeRecord.ReadyConfirmedDate.ToSQLExpr());
            sb.AppendFormat(" WHERE ([Id]={0})", runTimeRecord.Id.ToString());
            string sqlText = sb.ToString();

            sb = null;

            return(sqlText);
        }
예제 #2
0
        private OrderRunTime newOrderRunTime(int orderId)
        {
            string sqlText = $"INSERT INTO [OrderRunTime] (OrderId) VALUES ({orderId}); SELECT @@IDENTITY";

            int newId = 0; string dbError = null;

            using (DBContext db = new DBContext())
            {
                var result = db.ExecuteScalar(sqlText);
                if (result != null)
                {
                    newId = Convert.ToInt32(result);
                }
                dbError = db.ErrMsg;
            }

            if ((newId == 0) || (dbError != null))
            {
                _serviceErrorMessage = dbError;
                return(null);
            }

            // вернуть запись с данным Id
            OrderRunTime retVal = getOrderRunTimeById(newId);

            return(retVal);
        }
예제 #3
0
        private OrderRunTime getOrderRunTime(string sqlText)
        {
            DataTable dt = null;

            using (DBContext db = new DBContext())
            {
                dt = db.GetQueryTable(sqlText);
            }
            if ((dt == null) || (dt.Rows.Count == 0))
            {
                return(null);
            }

            OrderRunTime retVal = new OrderRunTime();
            DataRow      dtRow  = dt.Rows[0];

            retVal.Id      = dtRow.ToInt("Id");
            retVal.OrderId = dtRow.ToInt("OrderId");

            retVal.InitDate      = dtRow.ToDateTime("InitDate");
            retVal.WaitingCookTS = dtRow.ToInt("WaitingCookTS");

            retVal.CookingStartDate = dtRow.ToDateTime("CookingStartDate");
            retVal.CookingTS        = dtRow.ToInt("CookingTS");

            retVal.ReadyDate     = dtRow.ToDateTime("ReadyDate");
            retVal.WaitingTakeTS = dtRow.ToInt("WaitingTakeTS");

            retVal.TakeDate        = dtRow.ToDateTime("TakeDate");
            retVal.WaitingCommitTS = dtRow.ToInt("WaitingCommitTS");

            retVal.CommitDate          = dtRow.ToDateTime("CommitDate");
            retVal.CancelDate          = dtRow.ToDateTime("CancelDate");
            retVal.CancelConfirmedDate = dtRow.ToDateTime("CancelConfirmedDate");

            retVal.ReadyTS            = dtRow.ToInt("ReadyTS");
            retVal.ReadyConfirmedDate = dtRow.ToDateTime("ReadyConfirmedDate");

            dt.Dispose();

            return(retVal);
        }
예제 #4
0
        private OrderRunTime getOrderRunTimeRecord(int orderId)
        {
            OrderRunTime runtimeRecord = null;

            runtimeRecord = getOrderRunTimeByOrderId(orderId);

            // если еще нет записи в БД, то добавить ее
            if (runtimeRecord == null)
            {
                runtimeRecord = newOrderRunTime(orderId);
                if (runtimeRecord == null)
                {
                    string _errMsg = string.Format("Ошибка создания записи в таблице OrderRunTime для заказа id {0}", orderId);
                    _serviceErrorMessage = _errMsg;
                    AppLib.WriteLogErrorMessage(_errMsg);
                    runtimeRecord = null;
                }
            }

            return(runtimeRecord);
        }
예제 #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