예제 #1
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.drivers.ReceivedResponse += reciveResponse;

            // обновим из базы статистические данные
            data.statistic = GlobalDb.GlobalBase.GetMoneyStatistic();

            //
            moneySumm.Text = "Сумма денег в кассете: " + data.statistic.AllMoneySumm + " руб.";

            data.drivers.printer.StartPrint(data.drivers.printer.getNamePrinter());

            // печатаем чек c инкассацией
            if (data.drivers.printer.prn.PrinterIsOpen)
            {
                data.drivers.printer.PrintCheckСollection(data.statistic);
            }

            data.log.Write(LogMessageType.Information, "==============================================================================");
            data.log.Write(LogMessageType.Information, "INCASS: Сумма денег в кассете: " + data.statistic.AllMoneySumm + " руб.");
            data.log.Write(LogMessageType.Information, "INCASS: Сумма денег на чеках: " + data.statistic.BarCodeMoneySumm + " руб.");
            data.log.Write(LogMessageType.Information, "INCASS: Сумма денег на аккаунтах: " + data.statistic.AccountMoneySumm + " руб.");
            data.log.Write(LogMessageType.Information, "INCASS: Количество банкнот: " + data.statistic.CountBankNote + " руб.");
            data.log.Write(LogMessageType.Information, "INCASS: Оказано услуг: " + data.statistic.ServiceMoneySumm + " руб.");
            data.log.Write(LogMessageType.Information, "==============================================================================");
        }
예제 #2
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;

                    Interval = data.timework * 60;
                }
            }

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxStopService, Globals.DesignConfiguration.Settings.ButtonRetToMain);

            timerService.Enabled = true;

            ServiceText.Text = "Идет оказание услуги. Осталось еще " + (Interval / 60).ToString() + " минуты и " + (Interval % 60).ToString() + " секунд";

            // оказываем услугу пока так (перепутали устройства - поменял местами)
            if (data.numberCurrentDevice == (int)ControlDeviceEnum.dev3)
            {
                data.drivers.control.SendOpenControl((int)ControlDeviceEnum.dev3);
                data.drivers.control.SendOpenControl((int)ControlDeviceEnum.dev4);
            }
            else
            {
                data.drivers.control.SendOpenControl((int)ControlDeviceEnum.dev3);
            }

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #3
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.drivers.ReceivedResponse += reciveResponse;

            if (Globals.ClientConfiguration.Settings.ScreenServerType == 0)
            {
                Globals.DesignConfiguration.Settings.LoadPictureBox(ScreenSever, Globals.DesignConfiguration.Settings.ScreenSaver);
            }
            else
            {
                gifImage = new GifImage(Globals.GetPath(PathEnum.Image) + "\\" + Globals.DesignConfiguration.Settings.ScreenSaver);
                gifImage.ReverseAtEnd = false; //dont reverse at end
            }

            timer1.Enabled = true;
            timer2.Enabled = true;
        }
예제 #4
0
        // запуск приложения
        public MainForm()
        {
            InitializeComponent();

            // сначала база данных
            if (GlobalDb.GlobalBase.CreateDB())
            {
            }
            else
            {
            }

            if (GlobalDb.GlobalBase.Connect())
            {
            }
            else
            {
            }

            GlobalDb.GlobalBase.CreateTables();
            GlobalDb.GlobalBase.FillSystemValues();

            // запустим задачу очистки от логов директории
            ClearFilesTask = new ClearFilesControlServiceTask(Program.Log);

            result = new FormResultData(Program.Log);
            // инициализируем задачи
            result.drivers.InitAllTask();
        }
예제 #5
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            gifImage = new GifImage(Globals.GetPath(PathEnum.Image) + "\\" + Globals.DesignConfiguration.Settings.ButtonGetOxigen);
            gifImage.ReverseAtEnd = false; //dont reverse at end

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxReturnBack, Globals.DesignConfiguration.Settings.ButtonRetToMain);

            AmountServiceText.Text      = "Внесено: 0 руб.";
            AmountServiceText.ForeColor = System.Drawing.Color.Red;
            SecondMessageText.Text      = "";

            LabelNameService2.Text = Globals.ClientConfiguration.Settings.services[data.numberService].caption;

            TextPayBill.LoadFile(Globals.GetPath(PathEnum.Text) + "\\WaitPayCheck.rtf");

            // заменим обработчик событий
            data.drivers.ReceivedResponse += reciveResponse;

            // при старте сканер разбудим
            data.drivers.scaner.Request(ZebexCommandEnum.wakeUp);
        }
예제 #6
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            timer1.Enabled   = true;
            this.WindowState = FormWindowState.Maximized;

            data.drivers.ReceivedResponse += reciveResponse;

            if (data.retLogin != "")
            {
                numberTelefon.Text = "+7";
            }
            else
            {
                numberTelefon.Text = "";
            }

            numberTelefon.Text += data.retLogin;

            if (data.retLogin != "")
            {
                AmountText.Text = "Сумма: " + Globals.UserConfiguration.Amount + " руб.";
            }
            else
            {
                AmountText.Text = "";
            }
        }
예제 #7
0
 public override void LoadData()
 {
     foreach (object obj in Params.Objects.Where(obj => obj != null))
     {
         if (obj.GetType() == typeof(FormResultData))
         {
             data = (FormResultData)obj;
         }
     }
 }
예제 #8
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #9
0
 public override void LoadData()
 {
     foreach (object obj in Params.Objects.Where(obj => obj != null))
     {
         if (obj.GetType() == typeof(FormResultData))
         {
             data = (FormResultData)obj;
         }
         else if (obj.GetType() == typeof(string))
         {
             NewUserinfo.Text = (string)obj;
         }
     }
 }
예제 #10
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            rTBxHelp.LoadFile(Globals.GetPath(PathEnum.Text) + "\\HelpAccount.rtf");

            if (Globals.ClientConfiguration.Settings.offModem == 1)
            {
                tableLayoutPanel11.Visible = false;
            }
        }
예제 #11
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxMainMenu, Globals.DesignConfiguration.Settings.ButtonRetToMain);
            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxStartService, Globals.DesignConfiguration.Settings.ButtonStartServices);

            InstructionText.LoadFile(Globals.HelpFileName);

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #12
0
        public override void LoadData()
        {
            Nominal = "0";

            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
                else if (obj.GetType() == typeof(string))
                {
                    Nominal = (string)obj;
                }
                else if (obj.GetType() == typeof(int))
                {
                    Amount = (int)obj;
                }
                else if (obj.GetType() == typeof(bool))
                {
                    check = (bool)obj;
                }
            }

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxTakeAwayMoney, Globals.DesignConfiguration.Settings.ButtonTakeAwayMoney);
            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxreturnMoney, Globals.DesignConfiguration.Settings.ButtonreturnMoney);

            if (check)
            {
                label1.Text = "Вы внесли чек на сумму " + Amount + " руб.";
            }
            else
            {
                label1.Text = "Вы внесли купюру " + Nominal + " руб.";
            }

            if (data.retLogin != "" && Globals.ClientConfiguration.Settings.changeToAccount == 1)
            {
                scalableLabel1.Text = "Сдача будет зачислена на Ваш аккаунт";
            }
            else
            {
                scalableLabel1.Text = "Ваша сдача будет на чеке";
            }
        }
예제 #13
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.drivers.ReceivedResponse += reciveResponse;
            timer1.Enabled = true;

            VideoPlayer.uiMode = "none";
            VideoPlayer.settings.setMode("loop", true);

            VideoPlayer.URL = Globals.GetPath(PathEnum.Video) + "\\" + Globals.DesignConfiguration.Settings.ScreenSaverVideo;
            VideoPlayer.Ctlcontrols.play();
        }
예제 #14
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxFinish, Globals.DesignConfiguration.Settings.ButtonRetToMain);

            FTimeWork = data.serv.timeLightUrn;

            timer1.Enabled = true;

            // включаем подсветку урны
            data.drivers.control.SendOpenControl((int)ControlDeviceEnum.light2);

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #15
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.drivers.ReceivedResponse += reciveResponse;

            Globals.DesignConfiguration.Settings.LoadPictureBox(pictureError, Globals.DesignConfiguration.Settings.ButtonFail);

            // список ошибок
            if (data.stage == WorkerStateStage.BillFull)
            {
                error.Text = "Ошибка E030";
            }
            else if (data.stage == WorkerStateStage.ErrorBill)
            {
                error.Text = "Ошибка E020";
            }
            else if (data.stage == WorkerStateStage.ResursEnd)
            {
                error.Text = "Ошибка E040";
            }
            else if (data.stage == WorkerStateStage.ErrorControl)
            {
                error.Text = "Ошибка E010";
            }
            else if (data.stage == WorkerStateStage.PaperEnd)
            {
                error.Text = "Ошибка E050";
            }
            else if (data.stage == WorkerStateStage.ErrorPrinter)
            {
                error.Text = "Ошибка E060";
            }
        }
예제 #16
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;

                    interval = data.timework;
                }
            }

            LabelNameService2.Text = Globals.ClientConfiguration.Settings.services[data.numberService].caption.ToLower();

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxStartService, Globals.DesignConfiguration.Settings.ButtonStartServices);

            intervalLabel.Text = interval.ToString() + " мин";

            pBxMinus.Load(Globals.GetPath(PathEnum.Image) + "\\back.png");
            pBxPlus.Load(Globals.GetPath(PathEnum.Image) + "\\forward.png");

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #17
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxStart, Globals.DesignConfiguration.Settings.ButtonStartServices);

            LabelNameService2.Text = Globals.ClientConfiguration.Settings.services[data.numberService].caption.ToLower();

            FTimeWork   = data.timeRecognize;
            CurrentWork = 0;

            timer1.Enabled = true;

            // включаем подсветку расходников
            data.drivers.control.SendOpenControl((int)ControlDeviceEnum.light1);

            data.drivers.ReceivedResponse += reciveResponse;
        }
예제 #18
0
        public override void LoadData()
        {
            foreach (object obj in Params.Objects.Where(obj => obj != null))
            {
                if (obj.GetType() == typeof(FormResultData))
                {
                    data = (FormResultData)obj;
                }
            }

            data.log.Write(LogMessageType.Information, "========================НАЧАЛО ОБСЛУЖИВАНИЯ==========================");

            if (Globals.ClientConfiguration.Settings.style == 1)
            {
                gifImage = new GifImage(Globals.GetPath(PathEnum.Image) + "\\" + Globals.DesignConfiguration.Settings.ButtonGetOxigen);
                gifImage.ReverseAtEnd = false; //dont reverse at end
            }
            else
            {
                Globals.DesignConfiguration.Settings.LoadPictureBox(pBxGiveOxigen, Globals.DesignConfiguration.Settings.ButtonGetOxigen_style1);
            }

            //Globals.DesignConfiguration.Settings.LoadPictureBox(pBxGiveOxigen, Globals.DesignConfiguration.Settings.ButtonGetOxigen);
            Globals.DesignConfiguration.Settings.LoadPictureBox(pBxReturnBack, Globals.DesignConfiguration.Settings.ButtonRetToMain);

            AmountServiceText.Text      = "Внесено: 0 руб.";
            AmountServiceText.ForeColor = System.Drawing.Color.Red;
            SecondMessageText.Text      = "";

            LabelNameService2.Text = Globals.ClientConfiguration.Settings.services[data.numberService].caption;

            TextPayBill.LoadFile(Globals.GetPath(PathEnum.Text) + "\\WaitPayBill.rtf");

            // сразу проверим - если авторизовались и достаточно денег на счете - сразу списываем деньги со счета
            if (data.retLogin != "")
            {
                int sum = GlobalDb.GlobalBase.GetUserMoney(data.CurrentUserId);

                data.log.Write(LogMessageType.Information, "ACCOUNT: На счету у пользователя " + data.retLogin + " " + sum + " руб.");

                if (sum >= data.serv.price)
                {
                    // денег на счете достаточно
                    data.log.Write(LogMessageType.Information, "ACCOUNT: Оказываем услугу с денег со счета...");

                    amount += data.serv.price;

                    AmountServiceText.Text      = "Внесено: " + data.serv.price + " руб.";
                    AmountServiceText.ForeColor = System.Drawing.Color.Green;
                    SecondMessageText.Text      = "Остаток на счете: " + (sum - data.serv.price) + " руб.";

                    data.log.Write(LogMessageType.Information, "ACCOUNT: Внесли достаточную для оказания услуги сумму со счета.");

                    // все можно уже пользоваться
                    pBxGiveOxigen.Enabled = true;

                    moneyFixed   = false;
                    StopHardware = true;

                    // обновим счет
                    GlobalDb.GlobalBase.AddToAmount(data.CurrentUserId, 0 - data.serv.price);

                    pBxReturnBack.Enabled = false;

                    return;
                }
                else if (sum > 0)
                {
                    // денег не достаточно - все равно списываем все подчистую
                    data.log.Write(LogMessageType.Information, "ACCOUNT: Оказываем услугу с денег со счета...");

                    amount += sum;

                    AmountServiceText.Text = "Внесено: " + sum + " руб.";
                    SecondMessageText.Text = "Недостаточно денег для оказания услуги";

                    // обновим счет
                    GlobalDb.GlobalBase.AddToAmount(data.CurrentUserId, 0 - sum);

                    pBxReturnBack.Enabled = false;
                }
            }
            //

            // заменим обработчик событий
            data.drivers.ReceivedResponse += reciveResponse;

            if (data.serv.price == 0)
            {
                // может быть цена нулевая - и это демо режим - можно сразу без денег работать
                AmountServiceText.ForeColor = System.Drawing.Color.Green;
                pBxGiveOxigen.Enabled       = true;

                data.log.Write(LogMessageType.Information, "WAIT BILL: работаем в демо режиме.");
            }
            else if (Globals.ClientConfiguration.Settings.offHardware == 0)
            {
                // перейдем в режим ожидания купюр
                if (data.drivers.CCNETDriver.NoConnectBill == false)
                {
                    data.drivers.CCNETDriver.WaitBillEscrow();
                    data.log.Write(LogMessageType.Information, "WAIT BILL: запускаем режим ожидания купюр.");
                }

                // при старте сканер разбудим, если не отключена возможность оплаты чеком
                if (Globals.ClientConfiguration.Settings.offCheck != 1)
                {
                    data.drivers.scaner.Request(ZebexCommandEnum.wakeUp);
                    data.log.Write(LogMessageType.Information, "WAIT CHECK: запускаем режим ожидания чеков.");
                }
            }
        }
예제 #19
0
        /// <summary>
        /// Проверка статистических данных
        /// </summary>
        private FormResultData CheckStatistic(FormResultData result)
        {
            result.stage = WorkerStateStage.None;

            if (result.statistic.CountBankNote >= Globals.ClientConfiguration.Settings.MaxCountBankNote)
            {
                // сообщим о необходимоcти изъятия денег
                result.drivers.modem.SendSMS(Globals.ClientConfiguration.Settings.SMSMessageNeedCollect, result.log);

                // Пора слать смс с необходимостью обслуживания
                result.stage = WorkerStateStage.BillFull;

                Program.Log.Write(LogMessageType.Error, "CHECK_STAT: необходимо изъять купюры. Предел " + Globals.ClientConfiguration.Settings.MaxCountBankNote + " сейчас " + result.statistic.CountBankNote);
            }

            // сообщение о ресурсе устройств
            DateTime dt = GlobalDb.GlobalBase.GetLastRefreshTime();

            int count = 0;

            if (dt != null)
            {
                count = GlobalDb.GlobalBase.GetWorkTime(dt);
            }
            else
            {
                count = GlobalDb.GlobalBase.GetWorkTime(new DateTime(2000, 1, 1));
            }

            if (count >= Globals.ClientConfiguration.Settings.limitServiceTime)
            {
                // ресурс выработали - сообщим об этом
                result.drivers.modem.SendSMS(Globals.ClientConfiguration.Settings.SMSMessageTimeEnd, result.log);

                // аппарат не работает
                result.stage = WorkerStateStage.ResursEnd;

                Program.Log.Write(LogMessageType.Error, "CHECK_STAT: выработали ресурс. Было установлено:" + Globals.ClientConfiguration.Settings.limitServiceTime + " проработали " + count);
            }

            // читаем состояние устройства
            byte[] res;
            res = result.drivers.control.GetStatusControl(Program.Log);

            if (res != null)
            {
                if (res[0] == 0)
                {
                    result.drivers.modem.SendSMS("Отказ управляющего устройства", result.log);

                    result.stage = WorkerStateStage.ErrorControl;

                    Program.Log.Write(LogMessageType.Error, "CHECK_STAT: ошибка управляющего устройства.");
                }
            }

            // проверяем наличие бумаги в принтере
            //if(result.drivers.printer.status.CheckPaper(Program.Log) == PaperEnableEnum.PaperEnd)
            //{
            //    // бумага кончилась

            //    if (Globals.ClientConfiguration.Settings.NoPaperWork == 0)
            //    {
            //        // с такой ошибкой не работаем
            //        result.stage = WorkerStateStage.PaperEnd;
            //    }

            //    Program.Log.Write(LogMessageType.Error, "CHECK_STAT: кончилась бумага.");
            //}

            PrinterStatus status = result.drivers.printer.GetStatus();

            if ((status & (PrinterStatus.PRINTER_STATUS_PAPER_OUT
                           | PrinterStatus.PRINTER_STATUS_PAPER_JAM
                           | PrinterStatus.PRINTER_STATUS_PAPER_PROBLEM
                           | PrinterStatus.PRINTER_STATUS_DOOR_OPEN
                           | PrinterStatus.PRINTER_STATUS_ERROR)) > 0)
            {
                // что то с бумагой
                if (Globals.ClientConfiguration.Settings.NoPaperWork == 0)
                {
                    // с такой ошибкой не работаем
                    result.stage = WorkerStateStage.PaperEnd;
                }

                if (result.PrinterError == false)
                {
                    result.drivers.modem.SendSMS("Кончилась бумага", result.log);
                    Program.Log.Write(LogMessageType.Error, "CHECK_STAT: кончилась бумага.");
                }

                result.PrinterError = true;
            }
            else if ((status & PrinterStatus.PRINTER_STATUS_OFFLINE) > 0)
            {
                if (Globals.ClientConfiguration.Settings.NoPaperWork == 0)
                {
                    // нет связи с принтером
                    result.stage = WorkerStateStage.ErrorPrinter;
                }

                if (result.PrinterError == false)
                {
                    result.drivers.modem.SendSMS("Нет связи с принтером.", result.log);
                    Program.Log.Write(LogMessageType.Error, "CHECK_STAT: нет связи с принтером.");
                }

                result.PrinterError = true;
            }
            else
            {
                if (result.PrinterError == true)
                {
                    Program.Log.Write(LogMessageType.Error, "CHECK_STAT: ошибка принтера снялась.");
                }

                result.PrinterError = false;
            }

            return(result);
        }
예제 #20
0
        /// <summary>
        /// Основной обработчик
        /// </summary>
        private void MainWorker()
        {
            if (Globals.admin)
            {
                Program.Log.Write(LogMessageType.Information, "MAIN WORK: Входим в режим настройки приложения.");

                result.drivers.InitAllDevice();
                result = (FormResultData)FormManager.OpenForm <FormSettings>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выходим из режима настройки приложения.");

                // на выход сразу - не надо в настроечном режиме продолжать работать
                Close();
                return;
            }

initDevice:

            if (Globals.ClientConfiguration.Settings.offHardware == 0)   // если не отключено
            {
                // инициализация оборудования
                switch (result.drivers.InitAllDevice())
                {
                case WorkerStateStage.None:
                    break;

                case WorkerStateStage.NoCOMPort:
                    //result = (FormResultData)FormManager.OpenForm<FormWelcomeUser>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                    Program.Log.Write(LogMessageType.Information, "MAIN WORK: Нет оборудования.");
                    break;

                case WorkerStateStage.NeedSettingProgram:
                {
                    Program.Log.Write(LogMessageType.Information, "MAIN WORK: Не все оборудование настроено верно.");

                    result = (FormResultData)FormManager.OpenForm <FormSettings>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                    if (Globals.ClientConfiguration.Settings.offHardware == 0)
                    {
                        goto initDevice;
                    }
                }
                break;
                }
            }
            else
            {
            }

            bool check = true;

            while (true)
            {
                try
                {
                    // местный обработчик
                    result.drivers.ReceivedResponse += reciveResponse;

                    // забудем пользователя
                    result.CurrentUserId = 0;
                    result.stage         = WorkerStateStage.None;
                    result.retLogin      = "";
                    result.retPassword   = "";

                    // Проверка статистических данных - может пора заканчивать работать
                    if (check)
                    {
                        result = CheckStatistic(result);
                    }

                    check = true;

NoCheckStatistic:
                    if (result.stage == WorkerStateStage.ErrorBill)
                    {
                        if (result.BillError == false)
                        {
                            result.drivers.modem.SendSMS("Bill acceptor неисправен.", result.log);
                            Program.Log.Write(LogMessageType.Error, "MAIN WORK: Bill acceptor неисправен.");
                        }

                        if (Globals.ClientConfiguration.Settings.changeOn > 0)
                        {
                            // со сдачей - не будем показывать экран смерти - продолжим работать
                            result.stage = WorkerStateStage.None;
                        }

                        result.BillError = true;
                    }
                    else if (result.stage == WorkerStateStage.BillFull)
                    {
                        if (result.BillError == false)
                        {
                            result.drivers.modem.SendSMS("Bill acceptor полон.", result.log);
                            Program.Log.Write(LogMessageType.Error, "MAIN WORK: Bill acceptor полон.");
                        }

                        if (Globals.ClientConfiguration.Settings.changeOn > 0)
                        {
                            // со сдачей - не будем показывать экран смерти
                            result.stage = WorkerStateStage.None;
                        }

                        result.BillError = true;
                    }
                    else
                    {
                        // это не ошибки приемника - с приемником все ок
                        result.BillError = false;
                    }

                    if (result.stage != WorkerStateStage.None)
                    {
                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Аппарат не работает.");

                        // аппарат не работает
                        result = (FormResultData)FormManager.OpenForm <FormTemporallyNoWork>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.BillErrorEnd)
                        {
                        }

                        continue;
                    }

WaitClient:
                    // ожидание клиента
                    result = (FormResultData)FormManager.OpenForm <FormMainMenu>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                    if (result.stage == WorkerStateStage.ExitProgram)
                    {
                        // выход
                        Close();
                        return;
                    }
                    else if (result.stage == WorkerStateStage.PaperEnd)
                    {
                        // ошибки принтера есть
                        continue;
                    }
                    else if (result.stage == WorkerStateStage.ErrorPrinter)
                    {
                        // ошибки принтера есть
                        continue;
                    }
                    else if (result.stage == WorkerStateStage.ErrorBill)
                    {
                        // ошибки купюроприемника
                        goto NoCheckStatistic;
                    }
                    else if (result.stage == WorkerStateStage.BillFull)
                    {
                        // купюроприемник полон
                        goto NoCheckStatistic;
                    }
                    else if (result.stage == WorkerStateStage.InterUser)
                    {
                        // авторизация пользователя
                        result = (FormResultData)FormManager.OpenForm <UserRequest>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        // проверим результат
                        if ((result.stage == WorkerStateStage.AuthorizeUser || result.stage == WorkerStateStage.RegisterNewUser) && result.retLogin != "")
                        {
                            // авторизовались или внесли нового пользователя
                            UserInfo ui = GlobalDb.GlobalBase.GetUserByName(result.retLogin, result.retPassword);

                            if (ui != null && result.stage == WorkerStateStage.RegisterNewUser)
                            {
                                // Новый пользователь - сообщим об этом
                                result = (FormResultData)FormManager.OpenForm <FormRegisterNewUser>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result, "Зарегистрировали нового пользователя: +7" + result.retLogin);

                                if (result.stage == WorkerStateStage.ExitProgram)
                                {
                                    // выход
                                    Close();
                                    return;
                                }
                            }
                            else if (ui != null)
                            {
                                // здесь покажем какого пользователя авторизовали
                            }
                        }
                        else if (result.stage == WorkerStateStage.FindPhone)
                        {
                            result = (FormResultData)FormManager.OpenForm <FormRegisterNewUser>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result, "На Ваш телефон " + result.retLogin + " отправлен пароль");

                            if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }

                            continue;
                        }
                        else if (result.stage == WorkerStateStage.NotFindPhone)
                        {
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ErrorRegisterNewUser)
                        {
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.NotAuthorizeUser)
                        {
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.MainScreen)
                        {
                            // сброс авторизации
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.TimeOut)
                        {
                            // тайм аут
                            continue;
                        }

                        // нормально зарегистрировались
                        goto WaitClient;
                    }
                    else if (result.stage == WorkerStateStage.ErrorControl)
                    {
                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Аппарат не работает.");

                        // аппарат временно не работает
                        result = (FormResultData)FormManager.OpenForm <FormTemporallyNoWork>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }

                        continue;
                    }
                    else if (result.stage == WorkerStateStage.ChooseService)
                    {
                        // уходим на выбор услуг
                    }
                    else if (result.stage == WorkerStateStage.Rules || result.stage == WorkerStateStage.Philosof)
                    {
                        // ознакомление с правилами
                        result = (FormResultData)FormManager.OpenForm <FormRules>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.MainScreen)
                        {
                            // ознакомились - возвращаемся обратно
                            check = false;
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.ErrorBill)
                        {
                            // ошибки купюроприемника
                            goto NoCheckStatistic;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            // выемка денег
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.ChooseService)
                        {
                            // уходим на выбор услуг
                            check = false;
                        }
                    }
                    else if (result.stage == WorkerStateStage.DropCassettteBill)
                    {
                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                        // выемка денег
                        result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.EndDropCassette)
                        {
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                    }
                    else if (result.stage == WorkerStateStage.TimeOut)
                    {
                        // по тайм ауту вышли в рекламу
                        //result = (FormResultData)FormManager.OpenForm<FormWaitStage>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                        if (Globals.ClientConfiguration.Settings.ScreenServerType == 0 || Globals.ClientConfiguration.Settings.ScreenServerType == 1)
                        {
                            result = (FormResultData)FormManager.OpenForm <FormWaitClientGif>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                        }
                        else
                        {
                            result = (FormResultData)FormManager.OpenForm <FormWaitClientVideo>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                        }

                        if (result.stage == WorkerStateStage.ErrorBill)
                        {
                            // ошибки купюроприемника
                            goto NoCheckStatistic;
                        }
                        else if (result.stage == WorkerStateStage.BillFull)
                        {
                            // купюроприемник полон
                            goto NoCheckStatistic;
                        }
                        else if (result.stage == WorkerStateStage.PaperEnd)
                        {
                            // ошибки принтера есть
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ErrorPrinter)
                        {
                            // ошибки принтера есть
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.ErrorControl)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Аппарат временно не работает.");

                            // аппарат временно не работает
                            result = (FormResultData)FormManager.OpenForm <FormTemporallyNoWork>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                            else if (result.stage == WorkerStateStage.DropCassettteBill)
                            {
                                Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                                // выемка денег
                                result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                                if (result.stage == WorkerStateStage.ExitProgram)
                                {
                                    // выход
                                    Close();
                                    return;
                                }
                            }
                            else if (result.stage == WorkerStateStage.BillErrorEnd)
                            {
                            }

                            continue;
                        }
                        else
                        {
                            // вышли из рекламы
                            check = false;
                            continue;
                        }
                    }

ChooseService:

                    // выбор услуг
                    result = (FormResultData)FormManager.OpenForm <FormChooseService1>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                    if (result.stage == WorkerStateStage.ExitProgram)
                    {
                        // выход
                        Close();
                        return;
                    }
                    else if (result.stage == WorkerStateStage.ErrorBill)
                    {
                        // ошибки купюроприемника
                        goto NoCheckStatistic;
                    }
                    else if (result.stage == WorkerStateStage.DropCassettteBill)
                    {
                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                        // выемка денег
                        result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.EndDropCassette)
                        {
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                    }
                    else if (result.stage == WorkerStateStage.WhatsDiff)
                    {
                        result = (FormResultData)FormManager.OpenForm <FormWhatsDiff>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.ErrorBill)
                        {
                            // ошибки купюроприемника
                            goto NoCheckStatistic;
                        }

                        // вернемся в выбор услуги (уж не думал что goto буду использовать)
                        goto ChooseService;
                    }
                    else if (result.stage == WorkerStateStage.TimeOut)
                    {
                        check = false;
                        continue;
                    }

                    //if (Globals.ClientConfiguration.Settings.offCheck != 1)
                    //{
                    //    // выбор формы оплаты - если есть оплата чеком
                    //    result = (FormResultData)FormManager.OpenForm<FormChoosePay>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);
                    //}
                    //else
                    {
                        // платим только деньгами и чеками
                        result.stage = WorkerStateStage.PayBillService;
                    }

                    // загрузим выбранную услугу
                    Service serv = Globals.ClientConfiguration.ServiceByIndex(result.numberService);
                    result.serv = serv;

                    Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выбрали услугу: " + serv.caption);

                    if (result.stage == WorkerStateStage.PayBillService)
                    {
                        // ожидание внесение денег
                        result = (FormResultData)FormManager.OpenForm <FormWaitPayBill>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.Fail || result.stage == WorkerStateStage.EndDropCassette)
                        {
                            // отказ - выход в выбор услуг
                            goto ChooseService;
                        }
                        else if (result.stage == WorkerStateStage.ErrorBill)
                        {
                            // ошибки купюроприемника
                            goto NoCheckStatistic;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.TimeOut)
                        {
                            check = false;
                            continue;
                        }
                    }
                    else if (result.stage == WorkerStateStage.PayCheckService)
                    {
                        // ожидание считывания чека - сюда не попадаем - отказались от оплаты только чеками
                        result = (FormResultData)FormManager.OpenForm <FormWaitPayCheck>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.Fail || result.stage == WorkerStateStage.EndDropCassette)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Отказались от оплаты.");

                            // отказ - выход в начало
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.TimeOut)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выход из оплаты по тайм ауту.");

                            check = false;
                            continue;
                        }
                    }
                    else if (result.stage == WorkerStateStage.Fail)
                    {
                        // в начало
                        continue;
                    }
                    else if (result.stage == WorkerStateStage.ExitProgram)
                    {
                        // выход
                        Close();
                        return;
                    }
                    else if (result.stage == WorkerStateStage.TimeOut)
                    {
                        check = false;
                        continue;
                    }

                    // оказание услуги
                    //Device dev = serv.GetActualDevice();  // устройств пока всего 2 - поэтому решаем в лоб

                    //if (dev != null)
                    {
                        result.timework = serv.timework;

                        // пока так
                        if (result.numberService == 0)
                        {
                            // первая услуга - устройство 3
                            result.numberCurrentDevice = (int)ControlDeviceEnum.dev3;
                        }
                        else
                        {
                            // вторая услуга - устройство 4
                            result.numberCurrentDevice = (int)ControlDeviceEnum.dev4;
                        }

                        result.timeRecognize = serv.timeRecognize;
                        result.ServName      = serv.caption;

                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Начали оказывать услугу: " + serv.caption + " Забор аксессуаров.");

                        // сначала включим подсветку и разрешим забрать аксессуары
                        result = (FormResultData)FormManager.OpenForm <FormProgress>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }

                        // теперь собственно окажем услугу - сначала спросим надо ли
                        result = (FormResultData)FormManager.OpenForm <FormProvideServiceStart>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.ExitProgram)
                        {
                            // выход
                            Close();
                            return;
                        }
                        else if (result.stage == WorkerStateStage.Fail)
                        {
                            // услуга не нужна
                            continue;
                        }
                        else if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }
                        else if (result.stage == WorkerStateStage.TimeOut)
                        {
                            continue;
                        }

                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Начали оказывать услугу: " + serv.caption);

                        // Будем оказывать услугу
                        result = (FormResultData)FormManager.OpenForm <FormProvideService>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.Fail)
                        {
                            // отказались от услуги
                        }

                        // Услугу оказали - выбросим расходники
                        result = (FormResultData)FormManager.OpenForm <FormMessageEndService>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                        if (result.stage == WorkerStateStage.DropCassettteBill)
                        {
                            Program.Log.Write(LogMessageType.Information, "MAIN WORK: Выемка денег.");

                            // выемка денег
                            result = (FormResultData)FormManager.OpenForm <FormMoneyRecess>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, result);

                            if (result.stage == WorkerStateStage.EndDropCassette)
                            {
                                continue;
                            }
                            else if (result.stage == WorkerStateStage.ExitProgram)
                            {
                                // выход
                                Close();
                                return;
                            }
                        }

                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Закончили оказывать услугу: " + serv.caption);
                        Program.Log.Write(LogMessageType.Information, "MAIN WORK: Проработали: " + result.timework);
                        Program.Log.Write(LogMessageType.Information, "========================КОНЕЦ ОБСЛУЖИВАНИЯ===========================");

                        // пишем в базу строку с временем работы
                        GlobalDb.GlobalBase.WriteWorkTime(serv.id, result.numberCurrentDevice, result.timework);
                    }
                    //else
                    //{
                    //    MessageBox.Show("Услуга " + serv.caption + " не может быть предоставлена");
                    //}
                }
                catch (Exception exp)
                {
                    // вернемся к исходной позиции - какая то ошибка
                    Program.Log.Write(LogMessageType.Error, "MAIN WORK: Ошибка.");
                    Program.Log.Write(LogMessageType.Error, "MAIN WORK: " + exp.GetDebugInformation());

                    // все переинициализируем
                    result = new FormResultData(Program.Log);

                    // инициализируем задачи
                    result.drivers.InitAllTask();
                    // инициализируем устройства
                    result.drivers.InitAllDevice();
                }
            }
        }
예제 #21
0
        private void CreditMoney(ServiceClientResponseEventArgs e)
        {
            pBxReturnBack.Enabled  = true;  // блокировать возврат не будем - можем ведь чеком сдачу давать
            SecondMessageText.Text = "";

            lock (Params)
            {
                try
                {
                    data.log.Write(LogMessageType.Information, "SCANER: Обработаем получение чека");

                    // сбросим таймаут
                    Timeout = 0;

                    // прочли чек

                    // поищем такой чек
                    CheckInfo info = GlobalDb.GlobalBase.GetCheckByStr((string)e.Message.Content);

                    data.log.Write(LogMessageType.Information, "WAIT CHECK: Внесли чек номер " + (string)e.Message.Content);

                    if (info == null)
                    {
                        // нет такого чека
                        SecondMessageText.Text = "Чек не существует.";

                        if (amount == 0)
                        {
                            pBxReturnBack.Enabled = true;
                        }

                        data.log.Write(LogMessageType.Information, "WAIT CHECK: Чек не существует.");

                        return;
                    }

                    if (info.active == true)
                    {
                        // чек погашен - отклоним его
                        SecondMessageText.Text = "Чек уже был использован ранее";

                        if (amount == 0)
                        {
                            pBxReturnBack.Enabled = true;
                        }

                        data.log.Write(LogMessageType.Information, "WAIT CHECK: Чек уже был использован ранее.");

                        return;
                    }

                    int count = info.Amount;

                    if (count < data.serv.price)
                    {
                        // на чеке слишком мало денег - пока так - может в будущем и по другому сделаем
                        AmountServiceText.Text = "Недостаточно денег";
                        SecondMessageText.Text = "Остаток на чеке: " + count + " руб.";

                        data.log.Write(LogMessageType.Information, "WAIT CHECK: Недостаточно денег.");
                        data.log.Write(LogMessageType.Information, "WAIT CHECK: Остаток на чеке: " + count + " руб.");

                        return;
                    }

                    amount += count;

                    // всегда со сдачей - сразу забираем деньгу c чека - никого не спрашиваем - гасим текущий чек - распечатаем новый
                    GlobalDb.GlobalBase.FixedCheck(info.Id);

                    // внесли достаточную для услуги сумму
                    data.log.Write(LogMessageType.Information, "WAIT CHECK: Внесли достаточную для оказания услуги сумму.");

                    // сдача
                    int diff = 0;

                    if (Globals.ClientConfiguration.Settings.changeOn > 0)
                    {
                        // посчитаем размер сдачи
                        diff = amount - data.serv.price;

                        // денег не достаточно - сдачи нет
                        if (diff < 0)
                        {
                            diff = 0;
                        }

                        // сдача на чек
                        if (amount > data.serv.price)
                        {
                            ChooseChangeEnum ch = ChooseChangeEnum.None;

                            if (Globals.ClientConfiguration.Settings.changeToAccount == 1 && Globals.ClientConfiguration.Settings.changeToCheck == 1)
                            {
                                // тут надо решить как выдать сдачу - спросим пользователя
                                ch = (ChooseChangeEnum)FormManager.OpenForm <FormChooseChange>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, diff.ToString());
                            }
                            else if (Globals.ClientConfiguration.Settings.changeToAccount == 1)
                            {
                                ch = ChooseChangeEnum.ChangeToAccount;
                            }
                            else if (Globals.ClientConfiguration.Settings.changeToCheck == 1)
                            {
                                ch = ChooseChangeEnum.ChangeToCheck;
                            }

                            if (ch == ChooseChangeEnum.ChangeToAccount)
                            {
                                data.log.Write(LogMessageType.Information, "WAIT CHECK: сдача на аккаунт. Сумма сдачи " + diff);

                                // заносим в аккаунт - если не авторизовались - нужна авторизация в аккаунт
                                if (data.CurrentUserId == 0)
                                {
                                    // форма регистрации
                                    data = (FormResultData)FormManager.OpenForm <UserRequest>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, data);
                                }

                                // запомним сколько внесли на аккаунт
                                data.statistic.AccountMoneySumm += diff;

                                difftoAccount += diff;

                                // внесем на счет
                                GlobalDb.GlobalBase.AddToAmount(data.CurrentUserId, diff);
                            }
                            else
                            {
                                // выдаем чек
                                data.log.Write(LogMessageType.Information, "WAIT CHECK: сдача на чек. Сумма сдачи " + diff);

                                // запомним сколько выдали на чеке - печатаем новый чек - часть денег отоварили
                                data.statistic.BarCodeMoneySumm -= data.serv.price;

                                difftoCheck += diff;

                                // запомним такой чек
                                string check = CheckHelper.GetUniqueNumberCheck(12);
                                GlobalDb.GlobalBase.AddToCheck(data.CurrentUserId, diff, check);

                                data.drivers.printer.StartPrint(data.drivers.printer.getNamePrinter());

                                int numberCheck = GlobalDb.GlobalBase.GetCurrentNumberDeliveryCheck();

                                // и напечатем его
                                data.drivers.printer.PrintHeader(1);
                                data.drivers.printer.PrintBarCode(check, diff);
                                data.drivers.printer.PrintFooter();
                                data.drivers.printer.EndPrint();

                                GlobalDb.GlobalBase.SetNumberDeliveryCheck(numberCheck + 1);
                            }
                        }
                    }

                    // напишем на экране
                    if (amount >= data.serv.price)
                    {
                        AmountServiceText.Text = "ПРИНЯТО: " + data.serv.price + " руб.";

                        if (diff > 0)
                        {
                            SecondMessageText.Text = "Остаток на чеке: " + diff + " руб.";
                        }
                        else
                        {
                            SecondMessageText.Text = "";
                        }
                    }
                    else
                    {
                        AmountServiceText.Text = "ПРИНЯТО: " + amount + " руб.";
                        SecondMessageText.Text = "Недостаточно денег для оказания услуги.";
                    }

                    data.log.Write(LogMessageType.Information, "WAIT CHECK: Внесено " + amount + " руб.");

                    // деньги внесли - нет пути назад
                    TimeOutTimer.Enabled = false;

                    if (amount >= data.serv.price)
                    {
                        AmountServiceText.ForeColor = System.Drawing.Color.Green;
                        pBxGiveOxigen.Enabled       = true;
                    }
                }
                catch (Exception exp)
                {
                    data.log.Write(LogMessageType.Error, "WAIT CHECK: ошибка управляющего устройства.");
                    data.log.Write(LogMessageType.Error, "WAIT CHECK: " + exp.ToString());

                    // при ошибке сканер усыпим
                    data.drivers.scaner.Request(ZebexCommandEnum.sleep);
                }
            }
        }