예제 #1
0
        /// <summary>
        /// Get order status name
        /// </summary>
        /// <param name="os">Order status</param>
        /// <returns>Order status name</returns>
        public static string GetOrderStatusName(this OrderStatusEnum os)
        {
            string name = IoC.Resolve <ILocalizationManager>().GetLocaleResourceString(
                string.Format("OrderStatus.{0}", os.ToString()),
                NopContext.Current.WorkingLanguage.LanguageId,
                true,
                CommonHelper.ConvertEnum(os.ToString()));

            return(name);
        }
예제 #2
0
        /// <summary>
        /// 收货订单
        /// </summary>
        /// <param name="list"></param>
        /// <param name="userName"></param>
        /// <param name="status"></param>
        /// <returns></returns>
        /// <remarks>
        /// 1. 增加库存,2. 增加入库记录 3. 修改订单状态
        /// </remarks>
        public async Task <Result <int> > receiveOrder(List <InStorageRecord> list, string userName, OrderStatusEnum status)
        {
            Result <int> result  = new Result <int>();
            string       orderNo = list.First().orderNo;

            try
            {
                using (LayerDbContext context = new LayerDbContext())
                {
                    var model = context.orderInfo.Where(x => x.orderNo == orderNo).Single();
                    if (model.status == status.ToString())
                    {
                        result.addError("进货单已被" + model.receivedBy + "收货");
                    }
                    else
                    {
                        //订单状态
                        model.status       = status.ToString();
                        model.receivedDate = DateTime.Now;
                        model.receivedBy   = userName;
                        model.sumPriceReal = list.Sum(x => x.countReal * x.priceIn);
                        //入库记录
                        context.inStorageRecord.AddRange(list);
                        //库存
                        List <Inventory> inventoryList = new List <Inventory>();
                        Inventory        model1        = null;
                        foreach (var item in list)
                        {
                            model1 = new Inventory()
                            {
                                count      = item.countReal,
                                materialId = item.materialId,
                                priceIn    = item.priceIn
                            };
                            inventoryList.Add(model1);
                        }
                        context.inventory.AddRange(inventoryList);

                        await context.SaveChangesAsync();
                    }
                }
            }
            catch (Exception err)
            {
                result.addError(err.Message);
            }

            return(result);
        }
예제 #3
0
 public ReceivableBooked(Guid orderId, Money receivableTotal, int customerBalanceId, OrderStatusEnum orderStatus)
 {
     this.OrderId           = orderId;
     this.ReceivableTotal   = receivableTotal;
     this.CustomerBalanceId = customerBalanceId;
     this.OrderStatus       = orderStatus;
     this.Topic             = orderStatus.ToString();
 }
예제 #4
0
        // кисти фона и текста
        public static void SetStateButtonBrushes(OrderStatusEnum eState, out Brush backgroundBrush, out Brush foregroundBrush)
        {
            Dictionary <string, BrushesPair> appBrushes = BrushHelper.AppBrushes;

            BrushesPair bp = appBrushes[eState.ToString()];

            backgroundBrush = bp.Background;
            foregroundBrush = bp.Foreground;
        }  // method
예제 #5
0
        private string getDishStrForNoticeFile(OrderDishModel dishModel)
        {
            OrderStatusEnum toFileStatus = (OrderStatusEnum)dishModel.DishStatusId;

            if (toFileStatus == OrderStatusEnum.ReadyConfirmed)
            {
                toFileStatus = OrderStatusEnum.Ready;
            }

            return(string.Format("Dish: {1};{2}{0}Dish Status: {3} ({4})",
                                 Environment.NewLine,
                                 dishModel.Id, dishModel.Name,
                                 (int)toFileStatus, toFileStatus.ToString()));
        }
예제 #6
0
 public OrderItemAdded(
     Guid orderId,
     int customerId,
     Money orderTotal,
     OrderItem orderItem,
     Read.OrderStatusEnum orderStatus,
     OrderStatusEnum itemOrderStatus)
 {
     Guard.NotNull(orderItem, nameof(orderItem));
     this.OrderId     = orderId;
     this.CustomerId  = customerId;
     this.OrderTotal  = orderTotal;
     this.OrderItem   = orderItem;
     this.OrderStatus = orderStatus;
     this.Topic       = itemOrderStatus.ToString();
 }
        public async Task <Order> ChangeStatus(int orderId, OrderStatusEnum statusEnum)
        {
            var order = await this.orderRepository
                        .All()
                        .Where(o => o.Id == orderId)
                        .Include(o => o.OrderStatus)
                        .FirstOrDefaultAsync();

            if (order == null)
            {
                return(null);
            }

            order.OrderStatus = await this.orderStatusService.GetByName(statusEnum.ToString());

            this.orderRepository.Update(order);
            await this.orderRepository.SaveChangesAsync();

            return(null);
        }
예제 #8
0
        private bool saveStatusToDB(OrderStatusEnum status, string machineName = null)
        {
            string   sLogMsg = string.Format("   - save ORDER {0}/{1}, status = {2}", this.Id, this.Number.ToString(), status.ToString());
            DateTime dtTmr   = DateTime.Now;

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg + " - START");
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            // записать в поле QueueStatusId значение для очереди заказов
            string sqlSetQueueValueText = null;

            if (status == OrderStatusEnum.Cooking)
            {
                sqlSetQueueValueText = "[QueueStatusId] = 0";
            }
            else if ((!_isUseReadyConfirmed && (status == OrderStatusEnum.Ready)) ||
                     (_isUseReadyConfirmed && (status == OrderStatusEnum.ReadyConfirmed)))
            {
                sqlSetQueueValueText = "[QueueStatusId] = 1";
            }
            else if (status == OrderStatusEnum.Took)
            {
                sqlSetQueueValueText = "[QueueStatusId] = 2";
            }

            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.AppendFormat("UPDATE [Order] SET [OrderStatusId] = {0}", ((int)status).ToString());
            if ((sqlSetQueueValueText.IsNull() == false) && (sqlSetQueueValueText.Length > 0))
            {
                sb.Append(", " + sqlSetQueueValueText);
            }
            sb.AppendFormat(" WHERE ([Id] = {0})", this.Id.ToString());
            string sqlText = sb.ToString();

            sb = null;

            int result = 0; string dbError = null;

            using (DBContext db = new DBContext())
            {
                result  = db.ExecuteCommand(sqlText);
                dbError = db.ErrMsg;
            }
            sLogMsg += " - FINISH - " + (DateTime.Now - dtTmr).ToString();

            bool retVal = false;

            if (result == 1)
            {
                retVal   = true;
                sLogMsg += " - Ok";
            }
            else
            {
                _serviceErrorMessage = string.Format("Ошибка записи в БД: {0}", dbError);
                sLogMsg += " - error: " + dbError;
            }

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg);
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            return(retVal);
        }
예제 #9
0
        }     // method UpdateFromDBEntity

        // внешнее обновление СОСТОЯНИЯ заказа
        // параметр isUpdateDishStatus = true, если заказ БЫЛ обновлен ИЗВНЕ (из БД/КДС), то в этом случае дату входа в новое состояние для блюд берем из заказа
        //          isUpdateDishStatus = false, если заказ БУДЕТ обновлен по общему состоянию всех блюд
        public bool UpdateStatus(OrderStatusEnum newStatus, bool isUpdateDishStatus, string machineName = null)
        {
            // если статус не поменялся, то попытаться обновить только статус блюд
            if (this.Status == newStatus)
            {
                return(false);
            }

            bool     retVal  = false;
            string   sLogMsg = string.Format(" - ORDER.UpdateStatus() Id/Num {0}/{1}, from {2} to {3}", this.Id, this.Number, this.Status.ToString(), newStatus.ToString());
            DateTime dtTmr   = DateTime.Now;

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg + " - START");
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg + " - START");
            }

            // время нахождения в ПРЕДЫДУЩЕМ состоянии, в секундах
            int secondsInPrevState = 0;

            if (_curTimer != null) // если есть таймер предыдущего состояния
            {
                _curTimer.Stop();  // остановить таймер состояния
                // получить время нахождения в состоянии с момента последнего входа
                secondsInPrevState = _curTimer.IncrementTS;
            }
            // дата входа в новое состояние
            DateTime dtEnterToNewStatus = DateTime.Now;

            // обновление заказа по ПОСЛЕДНЕМУ состоянию блюд, если они есть
            if ((isUpdateDishStatus == false) && (_dishesDict.Values.Count > 0))
            {
                dtEnterToNewStatus = getMaxDishEnterStateDate(newStatus);
            }

            // сохранить новый статус ОБЪЕКТА в БД
            if (saveStatusToDB(newStatus, machineName))
            {
                // изменить статус в ОБЪЕКТЕ
                OrderStatusEnum preStatus = this.Status;
                this.Status   = newStatus;
                OrderStatusId = (int)Status;

                // сохраняем в записи RunTimeRecord дату входа в новое состояние
                setStatusRunTimeDTS(this.Status, dtEnterToNewStatus, -1);
                //  и время нахождения в предыдущем состоянии
                setStatusRunTimeDTS(preStatus, DateTime.MinValue, secondsInPrevState);
                // и в БД
                saveRunTimeRecord();

                // запуск таймера для нового состояния
                StatusDTS statusDTS = getStatusRunTimeDTS(this.Status);
                startStatusTimer(statusDTS);

                // обновить уже существующие блюда при внешнем изменении статуса заказа
                if (isUpdateDishStatus)
                {
                    bool dishUpdSuccess = true;  // для получения результата обновления через AND
                    try
                    {
                        foreach (OrderDishModel modelDish in _dishesDict.Values)
                        {
                            // только для блюд
                            if (modelDish.ParentUid.IsNull())
                            {
                                // дату входа в состояние берем из заказа, а время нахожд.в предыд.состоянии из самого блюда
                                dishUpdSuccess &= modelDish.UpdateStatus(newStatus, statusDTS.DateEntered);
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        AppLib.WriteLogErrorMessage("Ошибка обновления статуса блюд при обновлении статуса заказа {0}/{1} с {2} на {3}: {4}", this.Id, this.Number, this.Status, newStatus, ex.ToString());
                        dishUpdSuccess = false;
                    }
                }
                retVal = true;
            }

            sLogMsg += " - FINISH - " + (DateTime.Now - dtTmr).ToString();
            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg);
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            // различные действия после успешного изменения статуса заказа
            if (retVal)
            {
                // создание файла для Одермана (feature enable, ready status is terminal)
                if (OrdermanNotifier.IsEnable && IsReadyStatusFinal())
                {
                    OrdermanNotifier omanNotifier = new OrdermanNotifier(this);
                    bool             result       = omanNotifier.CreateNoticeFileForOrder();
                }
            }

            return(retVal);
        }  // method
예제 #10
0
        /// <summary>
        /// Sets an order status
        /// </summary>
        /// <param name="order">Order</param>
        /// <param name="os">New order status</param>
        /// <param name="notifyCustomer">True to notify customer</param>
        protected void SetOrderStatus(Order order,
            OrderStatusEnum os, bool notifyCustomer)
        {
            if (order == null)
                throw new ArgumentNullException("order");

            OrderStatusEnum prevOrderStatus = order.OrderStatus;
            if (prevOrderStatus == os)
                return;

            //set and save new order status
            order.OrderStatusId = (int)os;
            UpdateOrder(order);

            //order notes, notifications
            InsertOrderNote(order.OrderId, string.Format("Order status has been changed to {0}", os.ToString()), false, DateTime.UtcNow);

            if (prevOrderStatus != OrderStatusEnum.Complete &&
                os == OrderStatusEnum.Complete
                && notifyCustomer)
            {
                int orderCompletedCustomerNotificationQueuedEmailId = IoC.Resolve<IMessageService>().SendOrderCompletedCustomerNotification(order, order.CustomerLanguageId);
                if (orderCompletedCustomerNotificationQueuedEmailId > 0)
                {
                    InsertOrderNote(order.OrderId, string.Format("\"Order completed\" email (to customer) has been queued. Queued email identifier: {0}.", orderCompletedCustomerNotificationQueuedEmailId), false, DateTime.UtcNow);
                }
            }

            if (prevOrderStatus != OrderStatusEnum.Cancelled &&
                os == OrderStatusEnum.Cancelled
                && notifyCustomer)
            {
                int orderCancelledCustomerNotificationQueuedEmailId = IoC.Resolve<IMessageService>().SendOrderCancelledCustomerNotification(order, order.CustomerLanguageId);
                if (orderCancelledCustomerNotificationQueuedEmailId > 0)
                {
                    InsertOrderNote(order.OrderId, string.Format("\"Order cancelled\" email (to customer) has been queued. Queued email identifier: {0}.", orderCancelledCustomerNotificationQueuedEmailId), false, DateTime.UtcNow);
                }
            }

            //reward points
            if (this.RewardPointsEnabled)
            {
                if (this.RewardPointsForPurchases_Amount > decimal.Zero)
                {
                    //Ensure that reward points are applied only to registered users
                    if (order.Customer != null && !order.Customer.IsGuest)
                    {
                        int points = (int)Math.Truncate(order.OrderTotal / this.RewardPointsForPurchases_Amount * this.RewardPointsForPurchases_Points);
                        if (points != 0)
                        {
                            if (this.RewardPointsForPurchases_Awarded == order.OrderStatus)
                            {
                                InsertRewardPointsHistory(order.CustomerId,
                                    0, points, decimal.Zero,
                                    decimal.Zero, string.Empty,
                                    string.Format(IoC.Resolve<ILocalizationManager>().GetLocaleResourceString("RewardPoints.Message.EarnedForOrder"), order.OrderId),
                                    DateTime.UtcNow);
                            }

                            if (this.RewardPointsForPurchases_Canceled == order.OrderStatus)
                            {
                               InsertRewardPointsHistory(order.CustomerId,
                                    0, -points, decimal.Zero,
                                    decimal.Zero, string.Empty,
                                    string.Format(IoC.Resolve<ILocalizationManager>().GetLocaleResourceString("RewardPoints.Message.ReducedForOrder"), order.OrderId),
                                    DateTime.UtcNow);
                            }
                        }
                    }
                }
            }

            //gift cards activation
            if (this.GiftCards_Activated.HasValue &&
               this.GiftCards_Activated.Value == order.OrderStatus)
            {
                var giftCards = GetAllGiftCards(order.OrderId, null, null, null, null, null, null, false, string.Empty);
                foreach (var gc in giftCards)
                {
                    bool isRecipientNotified = gc.IsRecipientNotified;
                    switch (gc.PurchasedOrderProductVariant.ProductVariant.GiftCardType)
                    {
                        case (int)GiftCardTypeEnum.Virtual:
                            {
                                //send email for virtual gift card
                                if (!String.IsNullOrEmpty(gc.RecipientEmail) &&
                                    !String.IsNullOrEmpty(gc.SenderEmail))
                                {
                                    Language customerLang = IoC.Resolve<ILanguageService>().GetLanguageById(order.CustomerLanguageId);
                                    if (customerLang == null)
                                        customerLang = NopContext.Current.WorkingLanguage;
                                    int queuedEmailId = IoC.Resolve<IMessageService>().SendGiftCardNotification(gc, customerLang.LanguageId);
                                    if (queuedEmailId > 0)
                                    {
                                        isRecipientNotified = true;
                                    }
                                }
                            }
                            break;
                        case (int)GiftCardTypeEnum.Physical:
                            {
                            }
                            break;
                        default:
                            break;
                    }

                    gc.IsGiftCardActivated = true;
                    gc.IsRecipientNotified = isRecipientNotified;
                    this.UpdateGiftCard(gc);
                }
            }

            //gift cards deactivation
            if (this.GiftCards_Deactivated.HasValue &&
               this.GiftCards_Deactivated.Value == order.OrderStatus)
            {
                var giftCards = GetAllGiftCards(order.OrderId,
                    null, null, null, null, null, null, true, string.Empty);
                foreach (var gc in giftCards)
                {
                    gc.IsGiftCardActivated = false;
                    this.UpdateGiftCard(gc);
                }
            }
        }
예제 #11
0
        /// <summary>
        /// 处理异常,补充收货
        /// </summary>
        /// <param name="supplementList">补充产品list</param>
        /// <param name="userName">操作人</param>
        /// <returns></returns>
        public async Task <Result <int> > supplementReceiveOrder(List <InStorageRecord> supplementList, string userName)
        {
            Result <int> result  = new Result <int>();
            string       orderNo = supplementList.First().orderNo;

            try
            {
                using (LayerDbContext context = new LayerDbContext())
                {
                    //1.插入入库记录  2.查询本订单下 根据物料group by  应收与实收是否相等,修改订单状态与订单实际总成本   3. 增加库存
                    var orderModel = context.orderInfo.Where(x => x.orderNo == orderNo).Single();
                    context.inStorageRecord.AddRange(supplementList);

                    //入库记录中 本订单 各物料的应收实收数量
                    //DONE: 验证此时的入库记录是否包含补录的记录  不包含
                    //TODO: left join orderdetailinfo
                    var inStorageRecodes         = context.inStorageRecord.Where(x => x.orderNo == orderNo).GroupBy(x => x.materialId).Select(x => new { materialId = x.Key, countReal = x.Sum(item => item.countReal), priceIn = x.Max(item => item.priceIn) });
                    var inStorageRecodesEntities = (from x in inStorageRecodes
                                                    join y in context.orderDetailInfo.Where(x => x.orderNo == orderNo) on x.materialId equals y.materialId
                                                    select new
                    {
                        materialId = x.materialId,
                        priceIn = x.priceIn,
                        countReal = x.countReal,
                        countReference = y.num,
                    }).ToList();
                    List <InStorageRecord> inStorageRecodeCopy = new List <InStorageRecord>();
                    InStorageRecord        model = null;
                    foreach (var item in inStorageRecodesEntities)
                    {
                        model                = new InStorageRecord();
                        model.materialId     = item.materialId;
                        model.priceIn        = item.priceIn;
                        model.countReal      = item.countReal;
                        model.countReference = item.countReference;
                        inStorageRecodeCopy.Add(model);
                    }
                    //订单状态
                    OrderStatusEnum status = OrderStatusEnum.completed;
                    //实际进价总和
                    float sumPriceReal = 0;
                    foreach (var item in supplementList)
                    {
                        inStorageRecodeCopy.Where(x => x.materialId == item.materialId).Single().countReal += item.countReal;
                    }
                    if (inStorageRecodeCopy.Where(x => x.countReal != x.countReference).Count() > 0)
                    {
                        status = OrderStatusEnum.excepted;
                    }
                    sumPriceReal               = inStorageRecodeCopy.Sum(x => x.priceIn * x.countReal);
                    orderModel.status          = status.ToString();
                    orderModel.lastUpdatedBy   = userName;
                    orderModel.lastUpdatedDate = DateTime.Now;
                    orderModel.sumPriceReal    = sumPriceReal;

                    //库存
                    List <Inventory> inventoryList = new List <Inventory>();
                    Inventory        model1        = null;
                    foreach (var item in supplementList)
                    {
                        model1 = new Inventory()
                        {
                            count      = item.countReal,
                            materialId = item.materialId,
                            priceIn    = item.priceIn
                        };
                        inventoryList.Add(model1);
                    }
                    context.inventory.AddRange(inventoryList);

                    await context.SaveChangesAsync();
                }
            }
            catch (Exception err)
            {
                result.addError(err.Message);
            }
            return(result);
        }
예제 #12
0
 public static string Str(this OrderStatusEnum en)
 {
     return(en.ToString());
 }
예제 #13
0
        private bool saveStatusToDB(OrderStatusEnum status, string machineName = null)
        {
            int iStatus = (int)status;

            string   sLogMsg = string.Format("   - save DISH {0}/{1}, status = {2}", this.Id, this.Name, status.ToString());
            DateTime dtTmr   = DateTime.Now;

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg + " - START");
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            string sqlText = $"UPDATE [OrderDish] SET [DishStatusId] = {((int)status).ToString()} WHERE ([Id] = {this.Id})";

            int result = 0; string dbError = null;

            using (DBContext db = new DBContext())
            {
                result  = db.ExecuteCommand(sqlText);
                dbError = db.ErrMsg;
            }

            sLogMsg += " - FINISH - " + (DateTime.Now - dtTmr).ToString();
            bool retVal = false;

            if (result == 1)
            {
                retVal = true;
            }
            else if (dbError != null)
            {
                sLogMsg += ". Error: " + dbError;
                _serviceErrorMessage = string.Format("Ошибка записи в БД: {0}", dbError);
            }

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg);
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            return(retVal);
        }
예제 #14
0
        }     // method

        // ******************************************
        //    ОСНОВНАЯ ПРОЦЕДУРА БИЗНЕС-ЛОГИКИ
        //    ПРИ ИЗМЕНЕНИИ СТАТУСА БЛЮДА или НЕЗАВИСИМОГО ИНГРЕДИЕНТА
        // ******************************************
        // команды на изменение статуса блюда могут приходить как от КДС, так и из FrontOffice (при чтении из БД)
        // состояния и даты сохраняются в БД при каждом изменении
        //  isUpdateParentOrder = true, если запрос на изменение состояния пришел от КДС, иначе запрос из внутренней логики, напр. автоматическое изменение статуса из ожидания в готовку
        public bool UpdateStatus(OrderStatusEnum newStatus,
                                 DateTime dtEnterState = default(DateTime), int preStateTS = 0, string machineName = null)
        {
            // если статус не поменялся для существующей записи, то ничего не делать
            if (this.Status == newStatus)
            {
                return(false);
            }

            // автоматический переход из Готово в ПодтвГотово: вход в режим отслеживания нахождения в состоянии Готов
            if ((_isUseReadyConfirmed == true) && (_autoGotoReadyConfirmPeriod > 0) &&
                (newStatus == OrderStatusEnum.Ready) && (this.Status != OrderStatusEnum.Ready))
            {
                _dtReadyStatusInput = DateTime.Now;
            }

            string   sLogMsg = string.Format(" - DISH.UpdateStatus() Id {0}/{1}, from {2} to {3}", this.Id, this.Name, this.Status.ToString(), newStatus.ToString());
            DateTime dtTmr   = DateTime.Now;

            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg + " - START");
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg + " - START");
            }

            bool isUpdSuccess = false;

            // здесь тоже лочить, т.к. вызовы могут быть как циклческие (ингр.для блюд), так и из заказа / КДС-а
            lock (this)
            {
                // время нахождения в ПРЕДЫДУЩЕМ состоянии, в секундах
                int secondsInPrevState = 0;
                if (_curTimer != null) // если есть таймер предыдущего состояния
                {
                    _curTimer.Stop();  // остановить таймер состояния
                    // получить время нахождения в состоянии с момента последнего входа
                    secondsInPrevState = _curTimer.IncrementTS;
                    // Debug.Print("secondsInPrevState {0}", secondsInPrevState);
                }
                if (preStateTS != 0)
                {
                    secondsInPrevState = preStateTS;
                }

                // дата входа в новое состояние: или то, что передано, или текущую
                DateTime dtEnterToNewStatus = DateTime.Now;
                // если переданы данные из родительского объекта (заказ или блюдо для ингредиентов)
                if (!dtEnterState.IsZero())
                {
                    dtEnterToNewStatus = dtEnterState;
                }

                // сохранить новый статус ОБЪЕКТА в БД
                if (saveStatusToDB(newStatus, machineName))
                {
                    // изменить статус в ОБЪЕКТЕ
                    OrderStatusEnum preStatus = this.Status;
                    this.Status       = newStatus;
                    this.DishStatusId = (int)newStatus;

                    // **** запись или в RunTimeRecord или в ReturnTable
                    StatusDTS statusDTS = getStatusRunTimeDTS(this.Status);
                    if (statusDTS.DateEntered.IsZero())
                    {
                        // сохраняем дату входа в новое состояние
                        setStatusRunTimeDTS(this.Status, dtEnterToNewStatus, -1);
                        // сохраняем в записи RunTimeRecord время нахождения в предыдущем состоянии
                        setStatusRunTimeDTS(preStatus, DateTime.MinValue, secondsInPrevState);

                        saveRunTimeRecord();
                    }
                    // возврат в предыдущие состояния, создать новую запись в Return table
                    else
                    {
                        saveReturnTimeRecord(preStatus, newStatus, dtEnterToNewStatus, secondsInPrevState);
                        // при возврате из Ready в Cooking обнулять в RunTime-record дату входа в состояние Ready
                        // чтобы при следующем входе в Ready таймер ожидания выноса начал считаться с периода ExpectedTake
                        if (!_isUseReadyConfirmed && (preStatus == OrderStatusEnum.Ready) && (newStatus == OrderStatusEnum.Cooking))
                        {
                            _dbRunTimeRecord.ReadyDate = DateTime.MinValue;
                        }
                        if (_isUseReadyConfirmed && (preStatus == OrderStatusEnum.ReadyConfirmed) &&
                            ((newStatus == OrderStatusEnum.Cooking) || (newStatus == OrderStatusEnum.Ready)))
                        {
                            _dbRunTimeRecord.ReadyConfirmedDate = DateTime.MinValue;
                        }
                    }

                    // запуск таймера для нового состояния
                    statusDTS = getStatusRunTimeDTS(this.Status);
                    startStatusTimer(statusDTS);

                    // попытка обновить статус ЗАКАЗА проверкой состояний всех блюд/ингредиентов
                    _modelOrder.UpdateStatusByVerificationDishes();

                    isUpdSuccess = true;
                }
            }

            sLogMsg += " - FINISH - " + (DateTime.Now - dtTmr).ToString();
            if (machineName == null)
            {
                AppLib.WriteLogOrderDetails(sLogMsg);
            }
            else
            {
                AppLib.WriteLogClientAction(machineName, sLogMsg);
            }

            return(isUpdSuccess);
        }  // method UpdateStatus
예제 #15
0
        public bool CreateNoticeFileForOrder()
        {
            OrderStatusEnum status = (OrderStatusEnum)_order.OrderStatusId;
            string          logMsg = $"Создание файла-уведомления для заказа № {_order.Number} (id {_order.Id}, status {status.ToString()})...";

            writeLogMsg(logMsg);

            // check notice folder
            string sResult = null;
            string folder  = (string)AppProperties.GetProperty("NoticeOrdermanFolder");
            bool   bResult = IntegraLib.AppEnvironment.CheckFolder(folder, out sResult);

            if (bResult == false)
            {
                writeLogMsg(" - " + sResult);
                return(false);
            }
            folder = sResult;

            bool            retVal = false;
            string          fileName = null, fileText = null;
            OrderStatusEnum toFileStatus = (OrderStatusEnum)_order.OrderStatusId;

            if (toFileStatus == OrderStatusEnum.ReadyConfirmed)
            {
                toFileStatus = OrderStatusEnum.Ready;
            }
            fileText = string.Format("Order UID: {1}{0}Order Id: {2}{0}Order Number: {3}{0}Order Status: {4} ({5}){0}Write Time: {7}{0}Waiter Name: {6}{0}Table Name: {8}",
                                     Environment.NewLine, _order.Uid, _order.Id, _order.Number,
                                     ((int)toFileStatus).ToString(), toFileStatus.ToString(),
                                     _order.Waiter, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                     _order.TableName);

            // для терминального состояния Готов ЗАКАЗА
            if (_order.IsReadyStatusFinal() == true)
            {
                fileName = $"{folder}ordNumber_{_order.Number}" + ".txt";
            }

            // иначе вывести в файл-уведомление БЛЮДА в состоянии Готово
            else
            {
                List <OrderDishModel> readyDishes = _order.GetDishesReadyStatFin();
                int cnt = readyDishes.Count;
                if (cnt > 0)
                {
                    IntegraLib.StringHelper.SBufClear();
                    foreach (OrderDishModel dish in readyDishes)
                    {
                        logMsg = $"   - блюдо '{dish.Name}' id {dish.Id}, status {((OrderStatusEnum)dish.DishStatusId).ToString()}";
                        writeLogMsg(logMsg);
                        IntegraLib.StringHelper.SBufAppendText(Environment.NewLine + getDishStrForNoticeFile(dish));
                    }
                    fileText += IntegraLib.StringHelper.SBufGetString();
                    fileName  = $"{folder}ordNumber_{_order.Number} ({cnt.ToString()} dishes)" + ".txt";
                }
                else
                {
                    writeLogMsg(" - нет блюд в состоянии ГОТОВ");
                }
            }

            if ((fileName != null) && (fileText != null))
            {
                try
                {
                    System.IO.File.WriteAllText(fileName, fileText);

                    writeLogMsg($" - файл '{fileName}' создан успешно");
                    retVal = true;
                }
                catch (Exception ex)
                {
                    writeLogMsg(" - Error: " + ex.Message);
                }
            }

            return(retVal);
        }
예제 #16
0
        /// <summary>
        /// Sets an order status
        /// </summary>
        /// <param name="orderId">Order identifier</param>
        /// <param name="os">New order status</param>
        /// <param name="notifyCustomer">True to notify customer</param>
        /// <returns>Order</returns>
        protected static Order SetOrderStatus(int orderId, 
            OrderStatusEnum os, bool notifyCustomer)
        {
            var order = GetOrderById(orderId);
            if (order != null)
            {
                if (order.OrderStatus == os)
                    return order;

                OrderStatusEnum prevOrderStatus = order.OrderStatus;

                var updatedOrder = UpdateOrder(order.OrderId,
                    order.OrderGuid,
                    order.CustomerId,
                    order.CustomerLanguageId,
                    order.CustomerTaxDisplayType,
                    order.CustomerIP,
                    order.OrderSubtotalInclTax,
                    order.OrderSubtotalExclTax,
                    order.OrderShippingInclTax,
                    order.OrderShippingExclTax,
                    order.PaymentMethodAdditionalFeeInclTax,
                    order.PaymentMethodAdditionalFeeExclTax,
                    order.TaxRates,
                    order.OrderTax,
                    order.OrderTotal,
                    order.RefundedAmount,
                    order.OrderDiscount,
                    order.OrderSubtotalInclTaxInCustomerCurrency,
                    order.OrderSubtotalExclTaxInCustomerCurrency,
                    order.OrderShippingInclTaxInCustomerCurrency,
                    order.OrderShippingExclTaxInCustomerCurrency,
                    order.PaymentMethodAdditionalFeeInclTaxInCustomerCurrency,
                    order.PaymentMethodAdditionalFeeExclTaxInCustomerCurrency,
                    order.TaxRatesInCustomerCurrency,
                    order.OrderTaxInCustomerCurrency,
                    order.OrderTotalInCustomerCurrency,
                    order.OrderDiscountInCustomerCurrency,
                    order.CheckoutAttributeDescription,
                    order.CheckoutAttributesXml,
                    order.CustomerCurrencyCode,
                    order.OrderWeight,
                    order.AffiliateId,
                    os,
                    order.AllowStoringCreditCardNumber,
                    order.CardType,
                    order.CardName, order.CardNumber,
                    order.MaskedCreditCardNumber,
                    order.CardCvv2, order.CardExpirationMonth,
                    order.CardExpirationYear,
                    order.PaymentMethodId,
                    order.PaymentMethodName,
                    order.AuthorizationTransactionId,
                    order.AuthorizationTransactionCode,
                    order.AuthorizationTransactionResult,
                    order.CaptureTransactionId,
                    order.CaptureTransactionResult,
                    order.SubscriptionTransactionId,
                    order.PurchaseOrderNumber,
                    order.PaymentStatus, order.PaidDate,
                    order.BillingFirstName,
                    order.BillingLastName,
                    order.BillingPhoneNumber,
                    order.BillingEmail,
                    order.BillingFaxNumber,
                    order.BillingCompany,
                    order.BillingAddress1,
                    order.BillingAddress2,
                    order.BillingCity,
                    order.BillingStateProvince,
                    order.BillingStateProvinceId,
                    order.BillingZipPostalCode,
                    order.BillingCountry,
                    order.BillingCountryId,
                    order.ShippingStatus,
                    order.ShippingFirstName,
                    order.ShippingLastName,
                    order.ShippingPhoneNumber,
                    order.ShippingEmail,
                    order.ShippingFaxNumber,
                    order.ShippingCompany,
                    order.ShippingAddress1,
                    order.ShippingAddress2,
                    order.ShippingCity,
                    order.ShippingStateProvince,
                    order.ShippingStateProvinceId,
                    order.ShippingZipPostalCode,
                    order.ShippingCountry,
                    order.ShippingCountryId,
                    order.ShippingMethod,
                    order.ShippingRateComputationMethodId,
                    order.ShippedDate,
                    order.DeliveryDate,
                    order.TrackingNumber,
                    order.VatNumber,
                    order.Deleted,
                    order.CreatedOn);

                //order notes, notifications
                InsertOrderNote(orderId, string.Format("Order status has been changed to {0}", os.ToString()), false, DateTime.UtcNow);

                if (prevOrderStatus != OrderStatusEnum.Complete &&
                    os == OrderStatusEnum.Complete
                    && notifyCustomer)
                {
                    int orderCompletedCustomerNotificationQueuedEmailId = MessageManager.SendOrderCompletedCustomerNotification(updatedOrder, updatedOrder.CustomerLanguageId);
                    if (orderCompletedCustomerNotificationQueuedEmailId > 0)
                    {
                        InsertOrderNote(orderId, string.Format("\"Order completed\" email (to customer) has been queued. Queued email identifier: {0}.", orderCompletedCustomerNotificationQueuedEmailId), false, DateTime.UtcNow);
                    }
                }

                if (prevOrderStatus != OrderStatusEnum.Cancelled &&
                    os == OrderStatusEnum.Cancelled
                    && notifyCustomer)
                {
                    int orderCancelledCustomerNotificationQueuedEmailId = MessageManager.SendOrderCancelledCustomerNotification(updatedOrder, updatedOrder.CustomerLanguageId);
                    if (orderCancelledCustomerNotificationQueuedEmailId > 0)
                    {
                        InsertOrderNote(orderId, string.Format("\"Order cancelled\" email (to customer) has been queued. Queued email identifier: {0}.", orderCancelledCustomerNotificationQueuedEmailId), false, DateTime.UtcNow);
                    }
                }

                //reward points
                if (OrderManager.RewardPointsEnabled)
                {
                    if (OrderManager.RewardPointsForPurchases_Amount > decimal.Zero)
                    {
                        int points = (int)Math.Truncate(updatedOrder.OrderTotal / OrderManager.RewardPointsForPurchases_Amount * OrderManager.RewardPointsForPurchases_Points);
                        if (points != 0)
                        {
                            if (OrderManager.RewardPointsForPurchases_Awarded == updatedOrder.OrderStatus)
                            {
                                var rph = InsertRewardPointsHistory(order.CustomerId,
                                    0, points, decimal.Zero,
                                    decimal.Zero, string.Empty,
                                    string.Format(LocalizationManager.GetLocaleResourceString("RewardPoints.Message.EarnedForOrder"), order.OrderId),
                                    DateTime.UtcNow);
                            }

                            if (OrderManager.RewardPointsForPurchases_Canceled == updatedOrder.OrderStatus)
                            {
                                var rph = InsertRewardPointsHistory(order.CustomerId,
                                    0, -points, decimal.Zero,
                                    decimal.Zero, string.Empty,
                                    string.Format(LocalizationManager.GetLocaleResourceString("RewardPoints.Message.ReducedForOrder"), order.OrderId),
                                    DateTime.UtcNow);
                            }
                        }
                    }
                }

                //gift cards activation
                if (OrderManager.GiftCards_Activated.HasValue &&
                   OrderManager.GiftCards_Activated.Value == updatedOrder.OrderStatus)
                {
                    var giftCards = GetAllGiftCards(order.OrderId,
                        null, null,null,null,null,null,false, string.Empty);
                    foreach (var gc in giftCards)
                    {
                        bool isRecipientNotified = gc.IsRecipientNotified;
                        switch (gc.PurchasedOrderProductVariant.ProductVariant.GiftCardType)
                        {
                            case (int)GiftCardTypeEnum.Virtual:
                                {
                                    //send email for virtual gift card
                                    if (!String.IsNullOrEmpty(gc.RecipientEmail) &&
                                        !String.IsNullOrEmpty(gc.SenderEmail))
                                    {
                                        Language customerLang = LanguageManager.GetLanguageById(updatedOrder.CustomerLanguageId);
                                        if (customerLang == null)
                                            customerLang = NopContext.Current.WorkingLanguage;
                                        int queuedEmailId = MessageManager.SendGiftCardNotification(gc, customerLang.LanguageId);
                                        if (queuedEmailId > 0)
                                        {
                                            isRecipientNotified = true;
                                        }
                                    }
                                }
                                break;
                            case (int)GiftCardTypeEnum.Physical:
                                {
                                }
                                break;
                            default:
                                break;
                        }

                        OrderManager.UpdateGiftCard(gc.GiftCardId,
                            gc.PurchasedOrderProductVariantId, gc.Amount, true,
                            gc.GiftCardCouponCode, gc.RecipientName, gc.RecipientEmail,
                            gc.SenderName, gc.SenderEmail, gc.Message,
                            isRecipientNotified, gc.CreatedOn);
                    }
                }

                //gift cards deactivation
                if (OrderManager.GiftCards_Deactivated.HasValue &&
                   OrderManager.GiftCards_Deactivated.Value == updatedOrder.OrderStatus)
                {
                    var giftCards = GetAllGiftCards(order.OrderId,
                        null, null, null, null, null, null, true, string.Empty);
                    foreach (var gc in giftCards)
                    {
                        OrderManager.UpdateGiftCard(gc.GiftCardId,
                            gc.PurchasedOrderProductVariantId, gc.Amount, false,
                            gc.GiftCardCouponCode, gc.RecipientName, gc.RecipientEmail,
                            gc.SenderName, gc.SenderEmail, gc.Message,
                            gc.IsRecipientNotified, gc.CreatedOn);
                    }
                }

                return updatedOrder;
            }
            return null;
        }
예제 #17
0
파일: App.xaml.cs 프로젝트: AlCher2018/KDS
        // из обработчика MouseUp объектов DishPanel и OrderPanelHeader
        internal static void OpenStateChangeWindow(OrderViewModel orderModel, OrderDishViewModel dishModel)
        {
            if ((orderModel == null) && (dishModel == null))
            {
                return;
            }

            // из РАЗРЕШЕННЫХ переходов выбрать переходы, ДОСТУПНЫЕ для текущего состояния
            OrderStatusEnum currentState = (OrderStatusEnum)((dishModel == null) ? orderModel.OrderStatusId : dishModel.DishStatusId);
            KDSModeEnum     kdsMode      = KDSModeHelper.CurrentKDSMode; // текущий режим КДС

            List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > allowedActions = KDSModeHelper.DefinedKDSModes[kdsMode].AllowedActions;

            if (allowedActions != null)
            {
                List <OrderStatusEnum> allowedStates = allowedActions.Where(p => (p.Key == currentState)).Select(p => p.Value).ToList();
                // при клике по ЗАКАЗУ проверить статус отображаемых на данном КДСе позиций
                if (dishModel == null)
                {
                    OrderStatusEnum statAllDishes = (OrderStatusEnum)(int)orderModel.StatusAllowedDishes;  //AppLib.GetStatusAllDishes(orderModel.Dishes);
                    if (orderModel.StatusAllowedDishes != StatusEnum.None)
                    {
                        currentState = statAllDishes;  // текущее состояние - по блюдам!
                        // и, если в разрешенных переходах есть пары с таким ключем, т.е. ВСЕ блюда находятся в состоянии, которое есть в разрешенных переходах
                        var tmpList = allowedActions.Where(s => s.Key == statAllDishes).ToList();
                        // то отображаем эти переходы, а не переходы из состояния заказа!
                        if (tmpList != null)
                        {
                            allowedStates = tmpList.Select(p => p.Value).ToList();
                        }
                    }
                }

                StringBuilder sb = new StringBuilder();
                allowedStates.ForEach(status => sb.Append(status.ToString()));
                AppLib.WriteLogClientAction("Open StateChange win, allowedStates: " + sb.ToString());

                // открываем окно изменения статуса
                if (allowedStates.Count != 0)
                {
                    StateChange win = (StateChange)WpfHelper.GetAppGlobalValue("StateChangeWindow");
                    win.CurrentState  = currentState;
                    win.Order         = orderModel;
                    win.Dish          = dishModel;
                    win.AllowedStates = allowedStates;
                    WpfHelper.SetWinSizeToMainWinSize(win);

                    win.ShowDialog();
                    AppLib.WriteLogClientAction("Close StateChange win, result: {0}", win.CurrentState.ToString());

                    // изменить статус
                    AppDataProvider dataProvider = (AppDataProvider)WpfHelper.GetAppGlobalValue("AppDataProvider");
                    OrderStatusEnum newState     = win.CurrentState;
                    if ((newState != OrderStatusEnum.None) && (newState != currentState) && (dataProvider != null))
                    {
                        string sLogMsg;
                        bool   result   = false;
                        bool   finReady = getFinReadyValue(newState); // флаг терминального окончания готовки

                        #region изменение статуса
                        try
                        {
                            // проверить set-канал
                            if (!dataProvider.EnableSetChannel)
                            {
                                dataProvider.CreateSetChannel();
                            }
                            if (!dataProvider.EnableSetChannel)
                            {
                                dataProvider.CreateSetChannel();
                            }

                            // изменение состояния БЛЮДА и разрешенных ингредиентов (2017-07-26)
                            if (dishModel != null)
                            {
                                sLogMsg = string.Format("orderId {0} (num {1}) for change status dishId {2} ({3}) to {4}", orderModel.Id, orderModel.Number, dishModel.Id, dishModel.DishName, newState.ToString());
                                DateTime dtTmr = DateTime.Now;
                                if (dataProvider.LockOrder(orderModel.Id))
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": success");

                                    OrderStatusEnum preState = dishModel.Status;
                                    // изменить статус блюда с ингредиентами
                                    result = changeStatusDishWithIngrs(dataProvider, orderModel, dishModel, newState);

                                    string sBuf = "delock " + sLogMsg + " - " + (DateTime.Now - dtTmr).ToString();
                                    if (dataProvider.DelockOrder(orderModel.Id))
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": success");
                                    }
                                    else
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": NOT success");
                                    }
                                }
                                else
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": NOT success");
                                }
                            }

                            // изменение состояния ЗАКАЗА, то изменяем все равно поблюдно
                            else if (dishModel == null)
                            {
                                sLogMsg = string.Format("orderId {0} (num {1}) for change order status to {2}", orderModel.Id, orderModel.Number, newState.ToString());
                                DateTime dtTmr = DateTime.Now;

                                if (dataProvider.LockOrder(orderModel.Id))
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": success");
                                    List <int> dishIds = new List <int>(); // dishes id has changed
                                    // меняем статус БЛЮД в заказе, если блюдо разрешено для данного КДСа
                                    foreach (OrderDishViewModel item in orderModel.Dishes.Where(d => d.ParentUID.IsNull()))
                                    {
                                        if (DishesFilter.Instance.Checked(item))
                                        {
                                            // изменить статус блюда с ингредиентами
                                            result = changeStatusDishWithIngrs(dataProvider, orderModel, item, newState);
                                            if (result)
                                            {
                                                dishIds.Add(item.Id);
                                            }
                                        }
                                    }  // foreach

                                    string sBuf = "delock " + sLogMsg + " - " + (DateTime.Now - dtTmr).ToString();
                                    if (dataProvider.DelockOrder(orderModel.Id))
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": success");
                                    }
                                    else
                                    {
                                        AppLib.WriteLogClientAction(sBuf + ": NOT success");
                                    }
                                }
                                else
                                {
                                    AppLib.WriteLogClientAction("lock " + sLogMsg + ": NOT success");
                                }
                            }  // order status
                        }
                        catch (Exception ex)
                        {
                            AppLib.WriteLogErrorMessage(ex.ToString());
                            MessageBox.Show("Ошибка изменения состояния. Попробуйте еще раз.", "Ошибка записи нового состояния", MessageBoxButton.OK);
                        }
                        #endregion
                    }
                } // if (allowedStates.Count != 0)
            }     // if (allowedActions != null)
        }         // method
예제 #18
0
        }                             //For EF

        private OrderStatuses(OrderStatusEnum @enum)
        {
            this.Id         = (int)@enum;
            this.StatusName = @enum.ToString();
        }
예제 #19
0
		/// <summary>
		/// Sets an order status
		/// </summary>
		/// <param name="OrderID">Order identifier</param>
		/// <param name="OS">New order status</param>
		/// <param name="notifyCustomer">True to notify customer</param>
		/// <returns>Order</returns>
		protected static Order SetOrderStatus(int OrderID, OrderStatusEnum OS, bool notifyCustomer)
		{
			Order order = GetOrderByID(OrderID);
			if (order != null)
			{
				if (order.OrderStatus == OS)
					return order;

				InsertOrderNote(OrderID, string.Format("Order status has been changed to {0}", OS.ToString()), DateTime.Now);

				if (order.OrderStatus != OrderStatusEnum.Complete &&
					OS == OrderStatusEnum.Complete
					&& notifyCustomer)
				{
					int orderCompletedCustomerNotificationQueuedEmailID = MessageManager.SendOrderCompletedCustomerNotification(order, order.CustomerLanguageID);
					InsertOrderNote(OrderID, string.Format("\"Order completed\" email (to customer) has been queued. Queued email identifier: {0}.", orderCompletedCustomerNotificationQueuedEmailID), DateTime.Now);
				}

				if (order.OrderStatus != OrderStatusEnum.Cancelled &&
					OS == OrderStatusEnum.Cancelled
					&& notifyCustomer)
				{
					int orderCancelledCustomerNotificationQueuedEmailID = MessageManager.SendOrderCancelledCustomerNotification(order, order.CustomerLanguageID);
					InsertOrderNote(OrderID, string.Format("\"Order cancelled\" email (to customer) has been queued. Queued email identifier: {0}.", orderCancelledCustomerNotificationQueuedEmailID), DateTime.Now);
				}

				order = UpdateOrder(order.OrderID, order.OrderGUID, order.CustomerID, order.CustomerLanguageID,
					order.CustomerTaxDisplayType, order.OrderSubtotalInclTax, order.OrderSubtotalExclTax, order.OrderShippingInclTax,
					order.OrderShippingExclTax, order.PaymentMethodAdditionalFeeInclTax, order.PaymentMethodAdditionalFeeExclTax,
					order.OrderTax, order.OrderTotal, order.OrderDiscount,
					order.OrderSubtotalInclTaxInCustomerCurrency, order.OrderSubtotalExclTaxInCustomerCurrency,
					order.OrderShippingInclTaxInCustomerCurrency, order.OrderShippingExclTaxInCustomerCurrency,
					order.PaymentMethodAdditionalFeeInclTaxInCustomerCurrency, order.PaymentMethodAdditionalFeeExclTaxInCustomerCurrency,
					order.OrderTaxInCustomerCurrency, order.OrderTotalInCustomerCurrency, order.CustomerCurrencyCode, order.OrderWeight,
					order.AffiliateID, OS, order.AllowStoringCreditCardNumber, order.CardType,
					order.CardName, order.CardNumber, order.MaskedCreditCardNumber,
					order.CardCVV2, order.CardExpirationMonth, order.CardExpirationYear,
					order.PaymentMethodID, order.PaymentMethodName,
					order.AuthorizationTransactionID,
					order.AuthorizationTransactionCode, order.AuthorizationTransactionResult,
					order.CaptureTransactionID, order.CaptureTransactionResult,
					order.PurchaseOrderNumber, order.PaymentStatus,
					order.BillingFirstName, order.BillingLastName, order.BillingPhoneNumber,
					order.BillingEmail, order.BillingFaxNumber, order.BillingCompany, order.BillingAddress1,
					order.BillingAddress2, order.BillingCity,
					order.BillingStateProvince, order.BillingStateProvinceID, order.BillingZipPostalCode,
					order.BillingCountry, order.BillingCountryID, order.ShippingStatus,
					order.ShippingFirstName, order.ShippingLastName, order.ShippingPhoneNumber,
					order.ShippingEmail, order.ShippingFaxNumber, order.ShippingCompany,
					order.ShippingAddress1, order.ShippingAddress2, order.ShippingCity,
					order.ShippingStateProvince, order.ShippingStateProvinceID, order.ShippingZipPostalCode,
					order.ShippingCountry, order.ShippingCountryID,
					order.ShippingMethod, order.ShippingRateComputationMethodID, order.ShippedDate,
					order.Deleted, order.CreatedOn);
			}
			return order;
		}
예제 #20
0
        // создание файла уведомления о состоянии БЛЮДА
        // для заказа создается файл [номер заказа].txt, для блюда - [номер заказа]([id блюда]).txt
        // для блюда, не ингредиента, только, если сам заказ еще не готов и NoticeOrdermanDishNotice = 1 (создавать файл-уведомления для блюда)
        public bool CreateNoticeFileForDishes(string orderDishIds)
        {
            string logMsg = $"Создание файла состояния для блюд/id {orderDishIds} заказа № {_order.Number} (id {_order.Id})...";

            writeLogMsg(logMsg);

            if (orderDishIds.IsNull())
            {
                writeLogMsg(" - перечень id блюд - пустой!");
                return(false);
            }

            // check notice folder
            string sResult = null;
            string folder  = (string)AppProperties.GetProperty("NoticeOrdermanFolder");
            bool   bResult = IntegraLib.AppEnvironment.CheckFolder(folder, out sResult);

            if (bResult == false)
            {
                writeLogMsg(" - " + sResult);
                return(false);
            }
            folder = sResult;

            bool            retVal = false;
            string          fileName = null, fileText = null;
            OrderStatusEnum toFileStatus = (OrderStatusEnum)_order.OrderStatusId;

            if (toFileStatus == OrderStatusEnum.ReadyConfirmed)
            {
                toFileStatus = OrderStatusEnum.Ready;
            }
            fileText = string.Format("Order UID: {1}{0}Order Id: {2}{0}Order Number: {3}{0}Order Status: {4} ({5}){0}Waiter Name: {6}",
                                     Environment.NewLine, _order.Uid, _order.Id, _order.Number,
                                     ((int)toFileStatus).ToString(), toFileStatus.ToString(),
                                     _order.Waiter);

            int[] ids = orderDishIds.Split(';').Select(s => s.ToInt()).ToArray();
            if (ids.Length > 0)
            {
                IntegraLib.StringHelper.SBufClear();
                OrderDishModel dish;
                foreach (int dishId in ids)
                {
                    if (_order.Dishes.ContainsKey(dishId))
                    {
                        dish = _order.Dishes[dishId];
                        IntegraLib.StringHelper.SBufAppendText(Environment.NewLine + getDishStrForNoticeFile(dish));
                    }
                }
                fileText += IntegraLib.StringHelper.SBufGetString();

                fileName = $"{folder}ordNumber_{_order.Number} (dishes {orderDishIds})" + ".txt";
                try
                {
                    System.IO.File.WriteAllText(fileName, fileText);

                    writeLogMsg($" - файл '{fileName}' создан успешно");
                    retVal = true;
                }
                catch (Exception ex)
                {
                    writeLogMsg(" - Error: " + ex.Message);
                }
            }

            return(retVal);
        }