private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } switch (e.Message.Event) { case DeviceEvent.DropCassetteBillAcceptor: break; case DeviceEvent.DropCassetteFullBillAcceptor: break; case DeviceEvent.BillAcceptorError: break; default: // другие события if (!((string)e.Message.Content).Contains("Drop Cassette out of position")) { // не выемка data.stage = WorkerStateStage.EndDropCassette; this.Close(); } break; } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } switch (e.Message.Event) { case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; this.Close(); } break; case DeviceEvent.DropCassetteFullBillAcceptor: break; case DeviceEvent.BillAcceptorError: break; } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } if (data.log != null) { data.log.Write(LogMessageType.Debug, "WAIT CHECK: Событие: " + e.Message.Content + "."); } switch (e.Message.Event) { case DeviceEvent.Scaner: CreditMoney(e); break; case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; data.log.Write(LogMessageType.Debug, "WAIT CHECK: Вытащили купюроприемник."); this.Close(); } break; default: // Остальные события нас не интересуют break; } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } switch (e.Message.Event) { case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; this.Close(); } break; case DeviceEvent.DropCassetteFullBillAcceptor: break; case DeviceEvent.BillAcceptorError: break; case DeviceEvent.ConnectBillErrorEnd: // связь с приемником возобновилась - ошибки ушли { data.stage = WorkerStateStage.BillErrorEnd; this.Close(); } break; default: // другие события if (data.stage == WorkerStateStage.BillFull) { //// только если вошли сюда с полным баком денег //if (!((string)e.Message.Content).Contains("Drop Cassette out of position") //|| !((string)e.Message.Content).Contains("Drop Cassette Full")) //{ // // не выемка // data.stage = WorkerStateStage.EndBillFull; // this.Close(); //} } else if (data.stage == WorkerStateStage.ErrorBill) { } else if (data.stage == WorkerStateStage.ResursEnd) { } else if (data.stage == WorkerStateStage.ErrorControl) { } break; } }
private void LabelNameService1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt & e.KeyCode == Keys.F4) { data.stage = WorkerStateStage.ExitProgram; } else if (e.Alt & e.KeyCode == Keys.F5) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = new BillNominal(); ((BillNominal)message.Content).nominalNumber = 3; ((BillNominal)message.Content).Denomination = "500"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditMoney(e1); } } else if (e.Alt & e.KeyCode == Keys.F6) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = new BillNominal(); ((BillNominal)message.Content).nominalNumber = 3; ((BillNominal)message.Content).Denomination = "50"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditMoney(e1); } } else if (e.Alt & e.KeyCode == Keys.F7) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = "0000000000"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditCheck(e1); } } }
private void FormWaitPayCheck_KeyDown(object sender, KeyEventArgs e) { if (e.Alt & e.KeyCode == Keys.F4) { data.stage = WorkerStateStage.ExitProgram; this.Close(); } else if (e.Alt & e.KeyCode == Keys.F5) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = "834141186725"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditMoney(e1); } } else if (e.Alt & e.KeyCode == Keys.F6) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = "047759717704"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditMoney(e1); } } else if (e.Alt & e.KeyCode == Keys.F7) { if (Globals.IsDebug) { // в дебаге - вносим деньги руками Drivers.Message message = new Drivers.Message(); message.Content = "0000000000"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); CreditMoney(e1); } } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } if (data.log != null) { data.log.Write(LogMessageType.Debug, "MAIN MENU: Событие: " + e.Message.Content + "."); } switch (e.Message.Event) { case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; this.Close(); } break; case DeviceEvent.DropCassetteFullBillAcceptor: { data.stage = WorkerStateStage.BillFull; this.Close(); } break; case DeviceEvent.BillAcceptorError: case DeviceEvent.DropCassetteJammed: case DeviceEvent.BillCheated: { // ошибка купюроприемника data.stage = WorkerStateStage.ErrorBill; this.Close(); } break; case DeviceEvent.ConnectBillError: { // нет связи с купюроприемником data.stage = WorkerStateStage.ErrorBill; this.Close(); } break; } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new MachineDrivers.ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } switch (e.Message.Event) { case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; this.Close(); } break; case DeviceEvent.DropCassetteFullBillAcceptor: { data.stage = WorkerStateStage.BillFull; this.Close(); } break; case DeviceEvent.BillAcceptorError: case DeviceEvent.DropCassetteJammed: case DeviceEvent.BillCheated: { // ошибка купюроприемника data.stage = WorkerStateStage.ErrorBill; this.Close(); } break; case DeviceEvent.ConnectBillError: { // нет связи с купюроприемником data.stage = WorkerStateStage.ErrorBill; this.Close(); } break; } }
private void FormMainMenu_KeyDown(object sender, KeyEventArgs e) { if (e.Alt & e.KeyCode == Keys.F4) { data.stage = WorkerStateStage.ExitProgram; } else if (e.Alt & e.KeyCode == Keys.F5) { if (Globals.IsDebug) { // пошлем событие вынимания приемника Drivers.Message message = new Drivers.Message(); message.Event = DeviceEvent.DropCassetteBillAcceptor; message.Content = "Drop bill"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); reciveResponse(null, e1); } } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } switch (e.Message.Event) { case DeviceEvent.Scaner: LabelCode.Text = (string)e.Message.Content; break; case DeviceEvent.BillAcceptor: richTextBox1.Text = (string)e.Message.Content + "\n" + richTextBox1.Text; break; case DeviceEvent.BillAcceptorCredit: label5.Text = (string)e.Message.Content + " руб"; break; } }
private void scalableLabel2_KeyDown(object sender, KeyEventArgs e) { if (e.Alt & e.KeyCode == Keys.F4) { data.stage = WorkerStateStage.ExitProgram; Close(); } else if (e.Alt & e.KeyCode == Keys.F5) { if (Globals.IsDebug) { // пошлем событие вставки обратно приемника Drivers.Message message = new Drivers.Message(); message.Event = DeviceEvent.InitializationOK; message.Content = "Insert bill"; ServiceClientResponseEventArgs e1 = new ServiceClientResponseEventArgs(message); reciveResponse(null, e1); } } }
private void CreditCheck(ServiceClientResponseEventArgs e) { if (StopHardware) { return; } pBxReturnBack.Enabled = false; // блокировать возврат не будем - можем ведь чеком сдачу давать SecondMessageText.Text = ""; lock (Params) { try { data.log.Write(LogMessageType.Information, "SCANER: Обработаем получение чека"); // сбросим таймаут Timeout = 0; // прочли чек // поищем такой чек CheckInfo info; if (((string)e.Message.Content).Contains("0000000000")) { info = new CheckInfo(); info.active = false; info.Amount = 50; } else { 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; amount += count; amountCheck += count; // всегда со сдачей - сразу забираем деньгу c чека - никого не спрашиваем - гасим текущий чек - распечатаем новый GlobalDb.GlobalBase.FixedCheck(info.Id); // сдача int diff = 0; ChooseChangeEnum ch = ChooseChangeEnum.None; if (Globals.ClientConfiguration.Settings.changeOn > 0) { // посчитаем размер сдачи diff = amount - data.serv.price; // денег не достаточно - сдачи нет if (diff < 0) { diff = 0; } // сдача на чек if (amount > data.serv.price) { //if (data.retLogin != "" && Globals.ClientConfiguration.Settings.changeToAccount == 1 && Globals.ClientConfiguration.Settings.changeToCheck == 1) //{ // // тут надо решить как выдать сдачу - спросим пользователя // ch = (ChooseChangeEnum)FormManager.OpenForm<FormChooseChange>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, diff.ToString()); //} //else if (data.retLogin != "" && 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); // запомним сколько внесли на аккаунт 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(); data.log.Write(LogMessageType.Information, "WAIT CHECK: Печатаем чек со сдачей под номером " + numberCheck + ". На сумму " + diff + " руб."); data.log.Write(LogMessageType.Information, "WAIT CHECK: BarCode " + check); data.log.Write(LogMessageType.Information, "WAIT CHECK: Выход на оказание услуги."); } } } // напишем на экране if (amount >= data.serv.price) { if (diff > 0) { AmountServiceText.Text = "ПРИНЯТО: " + data.serv.price + " руб."; if (ch == ChooseChangeEnum.ChangeToAccount) { SecondMessageText.Text = "Сдача в размере " + diff + " руб. будет зачислена на Ваш аккаунт"; } else { SecondMessageText.Text = "Остаток на чеке: " + diff + " руб."; } } else { AmountServiceText.Text = "Внесено: " + amount + " руб."; SecondMessageText.Text = ""; } } else { AmountServiceText.Text = "Внесено: " + amount + " руб."; SecondMessageText.Text = "Недостаточно денег для оказания услуги"; } data.log.Write(LogMessageType.Information, "WAIT CHECK: Внесено " + amount + " руб."); // деньги внесли - нет пути назад TimeOutTimer.Enabled = false; if (amount >= data.serv.price) { // внесли достаточную для услуги сумму data.log.Write(LogMessageType.Information, "WAIT CHECK: Внесли достаточную для оказания услуги сумму."); AmountServiceText.ForeColor = System.Drawing.Color.Green; pBxGiveOxigen.Enabled = true; StopHardware = true; if (Globals.ClientConfiguration.Settings.offHardware == 0) { data.drivers.CCNETDriver.ReturnBill(); data.drivers.scaner.Request(ZebexCommandEnum.sleep); data.log.Write(LogMessageType.Information, "WAIT BILL: Остановим работу оборудования для приема средств."); } } } catch (Exception exp) { data.log.Write(LogMessageType.Error, "WAIT CHECK: ошибка управляющего устройства."); data.log.Write(LogMessageType.Error, "WAIT CHECK: " + exp.GetDebugInformation()); // при ошибке сканер усыпим data.drivers.scaner.Request(ZebexCommandEnum.sleep); } } }
private void CreditMoney(ServiceClientResponseEventArgs e) { if (StopHardware) { return; } pBxReturnBack.Enabled = false; SecondMessageText.Text = ""; lock (Params) { try { if (moneyFixed) { return; } moneyFixed = true; data.log.Write(LogMessageType.Information, "BILL: Обработаем получение денег"); // сбросим таймаут Timeout = 0; int numberNominal = ((BillNominal)e.Message.Content).nominalNumber; if (Globals.ClientConfiguration.Settings.nominals[numberNominal] > 0) { // такую купюру мы обрабатываем } else { // такая купюра не пойдет - вернем ее moneyFixed = false; if (Globals.ClientConfiguration.Settings.offHardware == 0) { data.drivers.CCNETDriver.ReturnBill(); } data.log.Write(LogMessageType.Information, "WAIT BILL: Купюру c номером номинала равным " + numberNominal + " не принимаем"); SecondMessageText.Text = "Внесите купюру другого номинала."; return; } // прошли проверку // внесли деньги int count = 0; int.TryParse(((BillNominal)e.Message.Content).Denomination, out count); data.log.Write(LogMessageType.Information, "WAIT BILL: Внесли купюру номиналом " + count + " руб."); amount += count; amountMoney += count; // сдача int diff = 0; bool res = true; // купюру забираем всегда - предлагаем вернуть - только если перебор if (Globals.ClientConfiguration.Settings.changeOn == 0) { // без сдачи if (amount > data.serv.price) { // купюра великовата - вернем ее amount -= count; amountMoney -= count; moneyFixed = false; if (Globals.ClientConfiguration.Settings.offHardware == 0) { data.drivers.CCNETDriver.ReturnBill(); } if (amount == 0) { pBxReturnBack.Enabled = true; } // сообщим о том что купюра великовата SecondMessageText.Text = "Внесите купюру меньшего номинала."; data.log.Write(LogMessageType.Information, "WAIT BILL: Внесите купюру меньшего номинала. Нет сдачи."); return; } } else { // со сдачей if (amount > data.serv.price) { // купюра великовата - спросим может вернуть ее res = (bool)FormManager.OpenForm <FormInsertBill>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, data, ((BillNominal)e.Message.Content).Denomination); } } if (res) { // забираем купюру if (Globals.ClientConfiguration.Settings.offHardware == 0) { moneyFixed = false; data.drivers.CCNETDriver.StackBill(); data.log.Write(LogMessageType.Information, "WAIT BILL: Забираем купюру в приемник."); } else { moneyFixed = false; } } else { // возвращаем ее обратно amount -= count; amountMoney -= count; data.log.Write(LogMessageType.Information, "WAIT BILL: Возвращаем купюру обратно покупателю."); moneyFixed = false; if (Globals.ClientConfiguration.Settings.offHardware == 0) { data.drivers.CCNETDriver.ReturnBill(); } if (amount == 0) { pBxReturnBack.Enabled = true; } return; } ChooseChangeEnum ch = ChooseChangeEnum.None; if (Globals.ClientConfiguration.Settings.changeOn > 0) { // посчитаем размер сдачи diff = amount - data.serv.price; // денег не достаточно - сдачи нет if (diff < 0) { diff = 0; } // сдача на чек if (amount > data.serv.price) { data.log.Write(LogMessageType.Information, "WAIT BILL: Сумма сдачи " + diff + " руб."); //if (data.retLogin != "" && Globals.ClientConfiguration.Settings.changeToAccount == 1 && Globals.ClientConfiguration.Settings.changeToCheck == 1) //{ // // тут надо решить как выдать сдачу - спросим пользователя // ch = (ChooseChangeEnum)FormManager.OpenForm<FormChooseChange>(this, FormShowTypeEnum.Dialog, FormReasonTypeEnum.Modify, diff.ToString()); //} //else if (data.retLogin != "" && 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 BILL: сдача на аккаунт. Сумма сдачи " + diff); // запомним сколько внесли на аккаунт data.statistic.AccountMoneySumm += diff; difftoAccount += diff; // внесем на счет GlobalDb.GlobalBase.AddToAmount(data.CurrentUserId, diff); } else { // выдаем чек data.log.Write(LogMessageType.Information, "WAIT BILL: сдача на чек. Сумма сдачи " + diff); // запомним сколько выдали на чеке data.statistic.BarCodeMoneySumm += diff; difftoCheck += diff; // запомним такой чек string check = CheckHelper.GetUniqueNumberCheck(12); // Здесь также наращивается номер чека GlobalDb.GlobalBase.AddToCheck(data.CurrentUserId, diff, check); data.drivers.printer.StartPrint(data.drivers.printer.getNamePrinter()); // и напечатем его data.drivers.printer.PrintHeader(1); data.drivers.printer.PrintBarCode(check, diff); data.drivers.printer.PrintFooter(); data.drivers.printer.EndPrint(); } } } // напишем на экране if (amount >= data.serv.price) { if (diff > 0) { AmountServiceText.Text = "ПРИНЯТО: " + data.serv.price + " руб."; if (ch == ChooseChangeEnum.ChangeToAccount) { SecondMessageText.Text = "Сдача в размере " + diff + " руб. будет зачислена на Ваш аккаунт"; } else { SecondMessageText.Text = "Остаток на чеке: " + diff + " руб."; } } else { AmountServiceText.Text = "Внесено: " + amount + " руб."; SecondMessageText.Text = ""; } } else { AmountServiceText.Text = "Внесено: " + amount + " руб."; SecondMessageText.Text = "Недостаточно денег для оказания услуги"; } data.log.Write(LogMessageType.Information, "WAIT BILL: Внесено " + amount + " руб."); // деньги внесли - нет пути назад TimeOutTimer.Enabled = false; // Количество банкнот data.statistic.CountBankNote++; // заносим банкноту GlobalDb.GlobalBase.InsertBankNote(); if (amount >= data.serv.price) { // внесли достаточную для услуги сумму data.log.Write(LogMessageType.Information, "WAIT BILL: Внесли достаточную для оказания услуги сумму."); AmountServiceText.ForeColor = System.Drawing.Color.Green; pBxGiveOxigen.Enabled = true; moneyFixed = false; StopHardware = true; if (Globals.ClientConfiguration.Settings.offHardware == 0) { data.drivers.CCNETDriver.ReturnBill(); data.drivers.scaner.Request(ZebexCommandEnum.sleep); data.log.Write(LogMessageType.Information, "WAIT BILL: Остановим работу оборудования для приема средств."); } } } catch (Exception exp) { data.log.Write(LogMessageType.Error, "WAIT BILL: ошибка управляющего устройства."); data.log.Write(LogMessageType.Error, "WAIT BILL: " + exp.GetDebugInformation()); // если какая либо ошибка - вернем купюру data.drivers.CCNETDriver.ReturnBill(); moneyFixed = false; } } }
private void reciveResponse(object sender, ServiceClientResponseEventArgs e) { if (InvokeRequired) { BeginInvoke(new MachineDrivers.ServiceClientResponseEventHandler(reciveResponse), sender, e); return; } if (data.log != null) { data.log.Write(LogMessageType.Debug, "WAIT BILL: Событие: " + e.Message.Content + "."); } switch (e.Message.Event) { case DeviceEvent.BillAcceptor: break; case DeviceEvent.BillAcceptorEscrow: CreditMoney(e); break; case DeviceEvent.Scaner: CreditCheck(e); break; case DeviceEvent.BillAcceptorCredit: //CreditMoney(e); break; case DeviceEvent.DropCassetteBillAcceptor: { data.stage = WorkerStateStage.DropCassettteBill; if (data.log != null) { data.log.Write(LogMessageType.Debug, "WAIT BILL: Вытащили купюроприемник."); } this.Close(); } break; case DeviceEvent.ConnectBillError: { // нет связи с купюроприемником data.stage = WorkerStateStage.ErrorBill; if (data.log != null) { data.log.Write(LogMessageType.Error, "WAIT BILL: Нет связи с купюроприемником."); } this.Close(); } break; default: // Остальные события нас не интересуют break; } }
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); } } }