Beispiel #1
0
 // РАЗРЕШЕННЫЕ СОСТОЯНИЯ
 public static List <OrderStatusEnum> GetKDSModeAllowedStates(KDSModeEnum kdsMode)
 {
     if (_definedKDSModes.ContainsKey(kdsMode))
     {
         return(_definedKDSModes[kdsMode].AllowedStates);
     }
     else
     {
         return(null);
     }
 }
Beispiel #2
0
        // из обработчика 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
Beispiel #3
0
 // РАЗРЕШЕННЫЕ ПЕРЕХОДЫ МЕЖДУ СОСТОЯНИЯМИ
 public static List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > GetKDSModeAllowedActions(KDSModeEnum kdsMode)
 {
     if (_definedKDSModes.ContainsKey(kdsMode))
     {
         return(_definedKDSModes[kdsMode].AllowedActions);
     }
     else
     {
         return(null);
     }
 }
Beispiel #4
0
        }  // method

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            //  *** получить напрямую новые значения  ***
            // новые значения из списков
            _cfgValKeeper.PutNewValueDirectly("depUIDs", getIsViewDepIds());

            // роль КДС из контролов
            KDSModeEnum eMode = getKDSModeFromRadioButtons();

            if (eMode != KDSModeEnum.None)
            {
                _cfgValKeeper.PutNewValueDirectly("KDSMode", eMode.ToString());
                string sStates, sActions;
                if (eMode == KDSModeEnum.Special)
                {
                    // получить новые объектные значения разрешений
                    List <OrderStatusEnum> newAllowedStates = getStatesFromCheckBoxes(pnlStates);
                    List <KeyValuePair <OrderStatusEnum, OrderStatusEnum> > newAllowedActions = getActionsFromCheckBoxes(pnlActions);
                    sStates = KDSModeHelper.StatesListToString(newAllowedStates); if (sStates == null)
                    {
                        sStates = "";
                    }
                    sActions = KDSModeHelper.ActionsListToString(newAllowedActions); if (sActions == null)
                    {
                        sActions = "";
                    }
                }
                else
                {
                    sStates = ""; sActions = "";
                }
                // записать их новые значения в кипер
                _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialStates", sStates);
                _cfgValKeeper.PutNewValueDirectly("KDSModeSpecialActions", sActions);
            }

            _cfgValKeeper.PutNewValueDirectly("NewOrderAudioAttention", (string)cbxSelectAudio.SelectedValue);

            // *** получить новые значения из контролов  ***
            _cfgValKeeper.PutNewValueFromControls();

            // собрать словарь новых значений
            _appNewSettings = _cfgValKeeper.GetNewValuesDict();
            // сделаны ли какие-нибудь изменения?
            if (_appNewSettings.Count > 0)
            {
                string errMsg = null;
                string sBuf;
                if (CfgFileHelper.SaveAppSettings(_appNewSettings, out errMsg))  // сохранить в config-файле (все в символьном виде)
                {
                    // для объектов, взятых из AppProps, сохранить туда
                    _cfgValKeeper.SaveToAppProps();

                    // для некоторых значений может понадобиться преобразование типов для сохранения в App.Properties
                    if (_appNewSettings.ContainsKey("KDSMode") && (_appNewSettings["KDSMode"].IsNull() == false))
                    {
                        if (Enum.TryParse <KDSModeEnum>(_appNewSettings["KDSMode"], out eMode))
                        {
                            KDSModeHelper.CurrentKDSMode = eMode;
                        }
                    }
                    // особые состояния и действия хранятся не в App.Properties, а в четвертом элементе KDSModeStates и в config-e !!
                    if (_appNewSettings.ContainsKey("KDSModeSpecialStates"))
                    {
                        sBuf = _appNewSettings["KDSModeSpecialStates"];
                        KDSModeStates modeStates = KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special];
                        modeStates.StringToAllowedStates(sBuf);
                        modeStates.CreateUserStateSets();
                    }
                    if (_appNewSettings.ContainsKey("KDSModeSpecialActions"))
                    {
                        sBuf = _appNewSettings["KDSModeSpecialActions"];
                        KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special].StringToAllowedActions(sBuf);
                    }

                    MessageBox.Show("Настройки успешно сохранены в config-файле!", "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Information);
                }
                else
                {
                    MessageBox.Show("Ошибка сохранения настроек приложения:" + Environment.NewLine + "\t" + errMsg, "Сохранение настроек в config-файле", MessageBoxButton.OK, MessageBoxImage.Error);
                }
            }

            this.DialogResult = true;
        }
Beispiel #5
0
        private void ConfigEdit_Loaded(object sender, RoutedEventArgs e)
        {
            if (_deps != null)
            {
                // контрол меняет значение поля IsViewOnKDS в _deps  !!!
                listBoxDepartments.ItemsSource = _deps.Values;
            }

            _cfgValKeeper.AddPreValue("depUIDs", false, null);
            _cfgValKeeper.AddPreValue("IsWriteTraceMessages", true, chkIsWriteTraceMessages);
            _cfgValKeeper.AddPreValue("IsLogUserAction", true, chkIsLogUserAction);
            _cfgValKeeper.AddPreValue("AppFontScale", false, tbFontSizeScale);
            _cfgValKeeper.AddPreValue("OrdersColumnsCount", true, tbxOrdersColumnsCount);
            _cfgValKeeper.AddPreValue("AutoReturnOrdersGroupByTime", false, tbTimerIntervalToOrderGroupByTime);
            _cfgValKeeper.AddPreValueDirectly("NewOrderAudioAttention", (string)cbxSelectAudio.SelectedValue);
            _cfgValKeeper.AddPreValue("OrderHeaderClickable", true, cbxOrderHeaderClickable);
            _cfgValKeeper.AddPreValue("IsIngredientsIndependent", true, cbxIngrClickable);
            _cfgValKeeper.AddPreValue("ShowTimerOnDependIngr", true, cbxIngrShowTimer);
            _cfgValKeeper.AddPreValue("IsShowOrderStatusByAllShownDishes", true, cbxShowOrderStatusByAllShownDishes);
            _cfgValKeeper.AddPreValue("IsMultipleStatusTabs", true, cbxMultipleStatusTabs);
            _cfgValKeeper.AddPreValue("IsDishGroupAndSumQuantity", true, cbxTabDishGroup);


            // получить от службы
            //AppDataProvider dataProvider = (AppDataProvider)AppLib.GetAppGlobalValue("AppDataProvider");
            //int expTake = dataProvider.GetExpectedTakeValue();
            //_cfgValKeeper.AddPreValueDirectly("ExpectedTake", expTake.ToString(), tbTimerExpectedTake);

            bool        isDefault = true;
            KDSModeEnum eMode     = KDSModeHelper.CurrentKDSMode;

            _cfgValKeeper.AddPreValueDirectly("KDSMode", eMode.ToString());  // прямое сохранение только в символьном виде

            if (KDSModeHelper.DefinedKDSModes.ContainsKey(eMode))
            {
                string sStates, sActions;
                if (eMode == KDSModeEnum.Special)
                {
                    KDSModeStates modeStates = KDSModeHelper.DefinedKDSModes[KDSModeEnum.Special];
                    sStates  = modeStates.AllowedStatesToString();
                    sActions = modeStates.AllowedActionsToString();
                }
                else
                {
                    sStates = ""; sActions = "";
                }
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialStates", sStates);
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialActions", sActions);

                isDefault = false;

                // чекнуть нужную кнопку
                foreach (RadioButton item in lbxKDSMode.Children.OfType <RadioButton>())
                {
                    if ((item.Tag != null) && (Convert.ToInt32(item.Tag) == (int)eMode))
                    {
                        item.IsChecked = true;
                    }
                    else
                    {
                        item.IsChecked = false;
                    }
                }
            }
            else
            {
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialStates", "");
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialActions", "");
            }

            // роль КДС по умолчанию
            if (isDefault)
            {
                _cfgValKeeper.AddPreValueDirectly("KDSMode", "");
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialStates", "");
                _cfgValKeeper.AddPreValueDirectly("KDSModeSpecialActions", "");

                rbSpecial.IsChecked = true;
            }
        }