예제 #1
0
        private void ReturnToFirstScreenAnimation_Completed(object sender, EventArgs e)
        {
            // MessageBox.Show("Анимация завершена");

            imgLoading.Visibility   = Visibility.Collapsed;
            txtScreenTop.Visibility = Visibility.Visible;

            // Переходим на указанный экран
            //
            curScreen         = nextScreen;
            CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen);
        }
예제 #2
0
        private void InputAnimation_Completed(object sender, EventArgs e)
        {
            // MessageBox.Show("Анимация завершена");

            // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз
            //
            if (IsAnimationCompleted)
            {
                return;
            }
            IsAnimationCompleted = true;

            imgLoading.Visibility   = Visibility.Collapsed;
            txtScreenTop.Visibility = Visibility.Visible;

            // imgLoading2.Visibility = Visibility.Collapsed;


            // пробуем внести указанное кол-во указанных купюр
            //
            string status = InputTransaction();

            if (status.Length > 0)
            {
                txtErrorInfo.Text = status; // "Банкомат не имеет возможности принять все указанные купюры.";
            }
            else
            {
                txtErrorInfo.Text = "";
            }

            // Переходим на указанный экран
            //
            curScreen         = nextScreen;
            CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen);
        }
예제 #3
0
        /// <summary>
        /// Вспомогательная функция - переход между экранами в зависимости от текущего экрана
        /// </summary>
        /// <param name="number">Цифровой код нажатой кнопки (если это цифра)</param>
        /// <param name="key">Имя нажатой кнопки (если это не цифра)</param>
        /// <param name="tag">Tag нажатой кнопки</param>
        public void SwitchScreens(int number, string key, string tag)
        {
            // Нажата кнопка "Вернуть карту" =>
            //
            if (curScreen != EnScreens.Initial && tag.ToLower().Contains("вернуть"))
            {
                //  Производим сброс всех учавствующих в экранных операциях полей
                ResetStates();

                //  Переходим на начальный экран
                // NextScreenInfo(0);

                // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию
                //
                nextScreen = EnScreens.Initial;

                // Показываем анимацию
                //
                // imgLoading
                DoubleAnimation imgAnimation = new DoubleAnimation();
                imgAnimation.From        = 0; //  imgLoading.Opacity;
                imgAnimation.To          = 1;
                imgAnimation.Duration    = TimeSpan.FromSeconds(1);
                imgAnimation.AutoReverse = true;
                imgAnimation.Completed  += ReturnToFirstScreenAnimation_Completed;

                txtScreenTop.Visibility = Visibility.Collapsed;

                imgLoading.Visibility = Visibility.Visible;
                imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation);
            }

            switch (curScreen)
            {
            //
            //----------- Начальный экран для выбора карты и нажата одна из правых экранных кнопок  -----
            //
            case EnScreens.Initial:
                if (number < 0)
                {
                    bool isPlaceholderFound = false;

                    // Запоминаем индекс текущего владельца карты
                    //
                    if (key.StartsWith("btnScreen") && tag.Length > 0)
                    {
                        for (int k = 0; k < listCardholders.Count; k++)
                        {
                            string name = listCardholders[k].Name;
                            if (name.Equals(tag, StringComparison.CurrentCultureIgnoreCase))
                            {
                                curCardholderIndex = k;
                                isPlaceholderFound = true;
                                break;
                            }
                        }
                    }

                    // Переходим на экран для ввода ПИН-кода
                    //
                    if (isPlaceholderFound)
                    {
                        NextScreenInfo(EnScreens.Password);

                        //// Запоминаем индекс требуемого к переходу экрана и запускаем анимацию
                        ////
                        //nextScreenIndex = 1;

                        //// Показываем анимацию
                        ////
                        //// imgLoading
                        //DoubleAnimation imgAnimation = new DoubleAnimation();
                        //imgAnimation.From = 0; //  imgLoading.Opacity;
                        //imgAnimation.To = 1;
                        //imgAnimation.Duration = TimeSpan.FromSeconds(1);
                        //imgAnimation.AutoReverse = true;
                        //imgAnimation.Completed += ReturnToFirstScreenAnimation_Completed;

                        //txtScreenTop.Visibility = Visibility.Collapsed;

                        //imgLoading.Visibility = Visibility.Visible;
                        //imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation);
                    }
                }
                break;

            //
            //-----------    Экран для ввода ПИН-кода + нажата одна из цифр   -----------------
            //
            case EnScreens.Password:
                if (number >= 0 && !key.Equals("btnEnter"))
                {
                    // Если введено 4 цифры - то считаем, что ПИН-код принят, запоминаем держателя карты и переходим на следующий экран
                    //
                    if (++curPinCodeLength < 4)
                    {
                        txtScreenPass.Text += "*";
                    }
                    else if (curPinCodeLength >= 3)
                    {
                        curPinCodeLength   = 0;
                        txtScreenPass.Text = "";

                        // Запоминаем держателя карты
                        //
                        CurrentCardholder = listCardholders[curCardholderIndex];

                        // Переходим на экран выбора действия (снятие или внесение наличных)
                        //
                        NextScreenInfo(EnScreens.Actions);

                        //// Запоминаем индекс требуемого к переходу экрана и запускаем анимацию
                        ////
                        //nextScreenIndex = 2;

                        //// Показываем анимацию
                        ////
                        //// imgLoading
                        //DoubleAnimation imgAnimation = new DoubleAnimation();
                        //imgAnimation.From = 0; //  imgLoading.Opacity;
                        //imgAnimation.To = 1;
                        //imgAnimation.Duration = TimeSpan.FromSeconds(1);
                        //imgAnimation.AutoReverse = true;
                        //imgAnimation.Completed += ReturnToFirstScreenAnimation_Completed;

                        //txtScreenTop.Visibility = Visibility.Collapsed;

                        //imgLoading.Visibility = Visibility.Visible;
                        //imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation);
                    }
                }
                break;

            //
            //------ Экран для выбора действия (снятие или внесение наличных) и нажата одна из кнопок: btnScreen5 или btnScreen6  -------
            //
            case EnScreens.Actions:
                if (key.StartsWith("btnScreen") && tag.Length > 0)
                {
                    if (tag.ToLower().Contains("внесен"))
                    {
                        // Переходим на экран внесения наличных
                        NextScreenInfo(EnScreens.InputBanknote);
                    }
                    else if (tag.ToLower().Contains("выдач"))
                    {
                        // Переходим на экран снятия наличных
                        NextScreenInfo(EnScreens.OutputSum);
                    }
                }
                break;

            //
            //------    Экран для выбора суммы снятия наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.OutputSum:
                if (key.StartsWith("btnScreen"))
                {
                    // Запоминаем запрашиваемую к снятию сумму
                    //
                    if (key.StartsWith("btnScreen") && tag.Length > 0)
                    {
                        int amount = 0;
                        if (int.TryParse(tag, out amount))
                        {
                            requestedAmount = amount;
                        }
                        else
                        {
                            requestedAmount = 0;
                        }
                    }

                    // Проверяем, что наличие средств на карте клиента - позволяет выполнить текущую операцию
                    //
                    if (requestedAmount > CurrentCardholder.Balans)
                    {
                        txtErrorInfo.Text = "Ваш текущий баланс не позволяет выполнить запрошенную операцию.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else if (!CheckAtmOutputTotal())
                    {
                        // есть ли у банкомата возможность выдать указанную сумму
                        //
                        txtErrorInfo.Text = "Банкомат не имеет возможности выдать указанную сумму.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else
                    {
                        txtErrorInfo.Text = "";

                        // Переходим на экран выбора типа выдаваемых купюр
                        NextScreenInfo(EnScreens.OutputBanknote);
                        return;
                    }
                }
                break;

            //
            //-------  Экран выбора типа выдаваемых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.OutputBanknote:
                if (tag.ToLower().Contains("назад"))
                {
                    // Нажата кнопка "Назад" => Переходим на предыдущий экран (Экран выбора выдаваемой суммы)
                    //
                    requestedAmount   = 0;
                    requestedBanknote = 0;

                    txtErrorInfo.Text = "";

                    NextScreenInfo(EnScreens.OutputSum);
                }
                else if (key.StartsWith("btnScreen") && tag.Length > 0)
                {
                    // Запоминаем  запрошенный к выдаче текущим пользователем тип купюр - requestedBanknote
                    //
                    int amount = 0;
                    if (int.TryParse(tag, out amount))
                    {
                        requestedBanknote = amount;
                    }
                    else
                    {
                        requestedBanknote = 0;
                    }


                    // Проверяем, что запрошенная сумма больше запрошенного к выдаче типа купюр
                    //
                    if (requestedAmount < requestedBanknote)
                    {
                        txtErrorInfo.Text = "Запрошенная сумма не может быть выдана указанными купюрами.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else if (!CheckAtmOutputStatus())
                    {
                        // есть ли у банкомата возможность выдать запрошенные купюры
                        //
                        txtErrorInfo.Text = "Банкомат не имеет запрошенных купюр.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else
                    {
                        txtErrorInfo.Text = "";

                        // Переходим на экран выдачи денег
                        NextScreenInfo(EnScreens.OutputResult);
                        return;
                    }
                }
                break;


            //
            //-------  Экран выдачи наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.OutputResult:
                if (tag.ToLower().Contains("другие"))
                {
                    // Нажата кнопка "Другие операции" => Переходим на экран выбора доступных для пользователя операций
                    //
                    requestedBanknote = 0;
                    requestedAmount   = 0;
                    txtErrorInfo.Text = "";

                    NextScreenInfo(EnScreens.Actions);
                }
                break;


            //
            //-------  Экран выбора типа вносимых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.InputBanknote:
                if (key.StartsWith("btnScreen") && tag.Length > 0)
                {
                    // Запоминаем  запрошенный к внесению текущим пользователем тип купюр - requestedBanknote
                    //
                    int amount = 0;
                    if (int.TryParse(tag, out amount))
                    {
                        requestedBanknote = amount;
                    }
                    else
                    {
                        requestedBanknote = 0;
                    }


                    if (!CheckAtmInputStatus())
                    {
                        // есть ли у банкомата возможность принять предлагаемые купюры
                        //
                        txtErrorInfo.Text = "Банкомат не имеет возможности принять такие купюры.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else
                    {
                        txtErrorInfo.Text = "";

                        // Переходим на экран выбора кол-ва вносимих купюр
                        NextScreenInfo(EnScreens.InputQuantity);
                        return;
                    }
                }
                break;

            //
            //------    Экран для выбора количества вносимых купюр + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.InputQuantity:
                if (tag.ToLower().Contains("назад"))
                {
                    // Нажата кнопка "Назад" => Переходим на предыдущий экран (Экран выбора типа вносимых купюр)
                    //
                    requestedAmount   = 0;
                    requestedBanknote = 0;

                    txtErrorInfo.Text = "";

                    NextScreenInfo(EnScreens.InputBanknote);
                }
                else if (key.StartsWith("btnScreen") && tag.Length > 0)
                {
                    // Запоминаем кол-во вносимых купюр
                    //
                    int amount = 0;
                    if (int.TryParse(tag, out amount))
                    {
                        requestedAmount = amount;
                    }
                    else
                    {
                        requestedAmount = 0;
                    }


                    if (!CheckAtmInputTotal())
                    {
                        // есть ли у банкомата возможность принять указанное количество купюр
                        //
                        txtErrorInfo.Text = "Банкомат не имеет возможности принять указанное кол-во купюр.";

                        // Возврат к текущему экрану
                        return;
                    }
                    else
                    {
                        txtErrorInfo.Text = "";

                        // Переходим на экран внесения наличных
                        NextScreenInfo(EnScreens.InputResult);
                        return;
                    }
                }
                break;


            //
            //-------  Экран приема наличных + нажата одна из экранных кнопок: btnScreen1 - btnScreen8     ------
            //
            case EnScreens.InputResult:
                if (tag.ToLower().Contains("другие"))
                {
                    // Нажата кнопка "Другие операции" => Переходим на экран выбора доступных для пользователя операций
                    //
                    requestedBanknote = 0;
                    requestedAmount   = 0;
                    txtErrorInfo.Text = "";

                    NextScreenInfo(EnScreens.Actions);
                }
                break;

            default:
                break;
            }
        }
예제 #4
0
        //
        //-----------    Вспомогательные функции  ---------------
        //

        #region NextScreenInfo()

        /// <summary>
        /// Переходим на указанный экран
        /// </summary>
        /// <param name="nextScreen">Требуемый экран, к которому хотим перейти</param>
        /// <returns></returns>
        bool NextScreenInfo(EnScreens screen)
        {
            if (screen == EnScreens.OutputResult)
            {
                //
                //----------   Экран выдачи денег     ------
                //

                // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию
                //
                nextScreen = screen;


                // Показываем анимацию
                //
                // imgLoading
                DoubleAnimation imgAnimation = new DoubleAnimation();
                imgAnimation.From        = 0; //  imgLoading.Opacity;
                imgAnimation.To          = 1;
                imgAnimation.Duration    = TimeSpan.FromSeconds(1);
                imgAnimation.AutoReverse = true;
                imgAnimation.Completed  += OutputAnimation_Completed;

                txtScreenTop.Visibility = Visibility.Collapsed;

                // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз
                //
                IsAnimationCompleted = false;

                imgLoading.Visibility = Visibility.Visible;
                imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation);

                //// Дополнительно показываем анимацию в блоке состояния банкомата
                ////
                //imgLoading2.Visibility = Visibility.Visible;
                //imgLoading2.BeginAnimation(Image.OpacityProperty, imgAnimation);
            }
            else if (screen == EnScreens.InputResult)
            {
                //
                //----------   Экран внесения денег     ------
                //

                // Запоминаем индекс требуемого к переходу экрана и запускаем анимацию
                //
                nextScreen = screen;


                // Показываем анимацию
                //
                // imgLoading
                DoubleAnimation imgAnimation = new DoubleAnimation();
                imgAnimation.From        = 0; //  imgLoading.Opacity;
                imgAnimation.To          = 1;
                imgAnimation.Duration    = TimeSpan.FromSeconds(1);
                imgAnimation.AutoReverse = true;
                imgAnimation.Completed  += InputAnimation_Completed;

                txtScreenTop.Visibility = Visibility.Collapsed;

                // Выставляем флаг отработки транзакции - чтобы она отработала только 1 раз
                //
                IsAnimationCompleted = false;

                imgLoading.Visibility = Visibility.Visible;
                imgLoading.BeginAnimation(Image.OpacityProperty, imgAnimation);

                //// Дополнительно показываем анимацию в блоке состояния банкомата
                ////
                //imgLoading2.Visibility = Visibility.Visible;
                //imgLoading2.BeginAnimation(Image.OpacityProperty, imgAnimation);
            }
            else
            {
                // Переходим на указанный экран
                //
                curScreen         = screen;
                CurrentScreenInfo = listScreenInfo.FirstOrDefault(s => s.CurrentEnScreen == curScreen);
            }
            return(true);
        }