private void closeRCheck_Click(object sender, RoutedEventArgs e) { string sendingSuccess = CRM.SendManDocPack( login.Text, CRM.password, 1, moneyForRCheck.Text, allRCenters.Text, allVisas.Text, returnDate.Text, reception: true ); string[] sendingData = sendingSuccess.Split('|'); if (sendingData[0] == "OK") { Log.Add("успешно закрыт чек ресепшена"); BlockRCheckButton(block: true, checkClosed: true); } else if (sendingData[0] == "WARNING") { Log.Add("некоторые услуги из чека не имеют цены: " + sendingData[1]); if (MessageBoxes.NullInServices(sendingData[1]) == MessageBoxResult.Yes) { BlockRCheckButton(block: true, checkClosed: true); } else { CleanCheck(); } } else { Log.Add("во время формирования чека произошла ошибка: " + sendingData[1]); ShowError(receptionPlace, sendingData[1]); } }
private void UpdateCenters() { allCenters.Items.Clear(); allRCenters.Items.Clear(); foreach (string center_name in CRM.GetAllCenters(login.Text)) { allCenters.Items.Add(center_name); allRCenters.Items.Add(center_name); } allCenters.SelectedIndex = 0; allRCenters.SelectedIndex = 0; }
private void UpdateStatuses() { string port, speed, version, model; status1.Content = CURRENT_VERSION; status2.Content = CRM.GetMyIP(); status3.Content = String.Format("отправки {0} / сервер {1}", Secret.PROTOCOL_PORT_SEND, Secret.PROTOCOL_PORT_RECEIVE); status4.Content = Secret.PROTOCOL_IP_SERVER; Cashbox.GetStatusData(out port, out speed, out version, out model); status5.Content = port; status6.Content = speed; status7.Content = model; }
private void UpdateVTypes() { if (allCenters.SelectedItem == null) { return; } allVisas.Items.Clear(); foreach (string visa_name in CRM.GetAllVType(allCenters.SelectedItem.ToString())) { allVisas.Items.Add(visa_name); } allVisas.SelectedIndex = 0; }
private void ShowError(Canvas from, string error, string agrNumber = "") { if (error == "Ошибок нет") { error = "Неизвестная ошибка (возможно искажение данных)"; } loginFailText.Content = error; returnFromErrorTo = from; MoveCanvas( moveCanvas: loginFail, prevCanvas: from, direction: moveDirection.vertical ); CRM.SendError(error, agrNumber); }
public static void RepeatPrint(object obj, ElapsedEventArgs e) { PrepareDriver(currentDrvPassword); Driver.RepeatDocument(); int printSuccess = GetResultCodeInner(); Log.AddWithCode("распечатка повтора"); if (printSuccess == 0) { repeatPrintingTimer.Enabled = false; repeatPrintingTimer.Stop(); CRM.CashboxPaymentControl( agreement: currentDocPack, paymentType: MainWindow.Cashbox.manDocPackForPrinting.MoneyType.ToString() ); } }
private static void worker_CashboxAndSockets(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; ShowStartStatus("Пожалуйста, подождите пока программа соединится с кассой..."); Cashbox = CRM.FindCashbox(); if (Cashbox == null) { ShowStartError("Ошибка подключения к кассе. Проверьте подключение и перезапустите приложение", onlyExit: true); return; } Cashbox.serialNumber = Cashbox.GetSerialNumber(); Log.Add(String.Format("нашли {0} {1}", Cashbox.Name(), Cashbox.serialNumber)); ShowStartStatus("Пожалуйста, подождите пока программа соединится с сервером..."); if (!CRM.SocketsConnect()) { ShowStartError("Ошибка подключения к серверу системы VMS", onlyExit: true); return; } Thread.Sleep(1000); ShowStartStatus("Пожалуйста, подождите пока программа проверит номер кассы..."); if (!CRM.CashboxSerialNumberIsOk(Cashbox.serialNumber)) { ShowStartError(String.Format("Серийный номер кассы {0} не найден в системе", Cashbox.serialNumber), onlyExit: true); return; } Instance.ShowEntrance(); }
public bool ReportRegion(string reportType) { Dictionary <uint, string> agreements = new Dictionary <uint, string>(); atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_DOCUMENT); atolDriver.fnQueryData(); uint lastDoc = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER); atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_SHIFT); atolDriver.fnQueryData(); uint docsInLine = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_NUMBER); uint firstDoc = lastDoc - docsInLine + 1; string[] FDData = CRM.GetFDData(firstDoc, reportType); if (FDData.Length <= 0 || FDData[0] == "ERR") { return(false); } else { for (int i = 1; i < FDData.Length; i++) { if (String.IsNullOrEmpty(FDData[i])) { continue; } string[] fd = FDData[i].Split(':'); agreements.Add(uint.Parse(fd[0]), fd[1]); } } PrintLine(line: true); PrintLine("ОТЧЁТ до ЗАКРЫТИЯ СМЕНЫ"); for (uint i = firstDoc; i <= lastDoc; i++) { atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER); atolDriver.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, i); atolDriver.fnQueryData(); uint documentType = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_FN_DOCUMENT_TYPE); uint documentNumber = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER); DateTime dateTime = atolDriver.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME); String fiscalSign = atolDriver.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN); double sum = atolDriver.getParamDouble(1020); uint type = atolDriver.getParamInt(1054); PrintLine(line: true); PrintLine("документ ФД: " + documentNumber.ToString()); PrintLine("договор: " + (agreements.ContainsKey(documentNumber) ? agreements[documentNumber] : "не найден")); PrintLine("тип: " + (type == 1 ? "приход" : (type == 2 ? "возврат" : "ИНОЕ"))); PrintLine("дата: " + dateTime.ToString()); PrintLine("ФП: " + fiscalSign.ToString()); PrintLine("сумма чека: " + (type == 2 ? "-" : "") + sum.ToString()); } PrintLine(line: true); for (int i = 0; i < 10; i++) { PrintLine(" "); } atolDriver.cut(); return(true); }
public string DirectPayment(decimal?moneyPrice, decimal?moneySumm, string forPrinting, string sending, int department, int moneyType, bool returnSale, bool VAT) { Log.Add("прямая печать чека (" + (returnSale ? "возврат" : "оплата") + ")"); Log.Add("услуга '" + forPrinting + "', цена " + moneyPrice.ToString() + ", сумма " + moneySumm.ToString()); Driver.CheckType = (returnSale ? 2 : 0); Driver.Password = currentDirectPassword; Driver.OpenCheck(); if ((moneyType == 2) || returnSale) { moneySumm = moneyPrice; } if (!String.IsNullOrEmpty(sending)) { PrepareDriver(currentDirectPassword); Driver.CustomerEmail = sending; Driver.FNSendCustomerEmail(); Log.Add("отправка СМС/email на адрес: " + sending); } PrepareDriver(currentDirectPassword); PrintLine("Кассир: " + CRM.cashier, line: true, password: currentDirectPassword); Driver.Timeout = timeout; Driver.Quantity = 1; Driver.Price = moneyPrice ?? 0; Driver.StringForPrinting = forPrinting; Driver.Department = department; Driver.Tax1 = (VAT ? 1 : 0); Driver.Tax2 = 0; Driver.Tax3 = 0; Driver.Tax4 = 0; if (returnSale) { Driver.ReturnSale(); } else { Driver.Sale(); } PrintLine(line: true, password: currentDirectPassword); PrepareDriver(currentDirectPassword); if (moneyType == 1) { Log.Add("тип оплаты: наличными"); Driver.Summ1 = moneySumm ?? 0; Driver.Summ2 = 0; } else { Log.Add("тип оплаты: безнал"); Driver.Summ2 = moneySumm ?? 0; Driver.Summ1 = 0; } PrepareDriver(currentDirectPassword); Driver.StringForPrinting = String.Empty; Driver.CloseCheck(); int checkClosingResult = Driver.ResultCode; string checkClosingErrorText = Driver.ResultCodeDescription; Log.AddWithCode("распечатка чека"); if (checkClosingResult != 0) { PrepareDriver(currentDirectPassword); Driver.CancelCheck(); Log.AddWithCode("отмена чека"); } else if (!MainWindow.TEST_VERSION) { repeatPrintingTimer.Enabled = true; repeatPrintingTimer.Start(); } if (checkClosingResult == 0) { return("OK:" + Driver.Change); } else { CRM.SendError(checkClosingErrorText); return("ERR2:" + checkClosingErrorText); } }
public string PrintDocPack(DocPack doc, int MoneyType = -1, bool returnSale = false, decimal?MoneySumm = null, string sendingAddress = "") { currentDrvPassword = doc.CashierPass; currentDocPack = doc.AgrNumber; if (MoneyType != -1) { doc.MoneyType = MoneyType; } if (doc.Services.Count > 0 && doc.Services[0].ReturnShipping == 1) { returnSale = true; } PrepareDriver(currentDrvPassword); Driver.CheckType = (returnSale ? 2 : 0); Driver.OpenCheck(); string sendingCheck = String.Empty; if (!String.IsNullOrEmpty(sendingAddress)) { sendingCheck = sendingAddress; } else if (!String.IsNullOrEmpty(doc.Mobile)) { sendingCheck = doc.Mobile; } else if (!String.IsNullOrEmpty(doc.Email)) { sendingCheck = doc.Email; } if (!String.IsNullOrEmpty(sendingCheck)) { Driver.CustomerEmail = sendingCheck; Driver.FNSendCustomerEmail(); } PrintLine("Кассир: " + CRM.cashier, line: true); if (doc.Region) { PrintLine("Договор: " + doc.AgrNumber); PrintLine("BankID : " + doc.BankID, line: true); } foreach (Service service in doc.Services) { Driver.Password = currentDrvPassword; Driver.Timeout = timeout; Driver.Quantity = service.Quantity; Driver.Price = service.Price; Driver.StringForPrinting = service.Name; Driver.Department = service.Department; Driver.Tax1 = service.VAT; Driver.Tax2 = 0; Driver.Tax3 = 0; Driver.Tax4 = 0; if (returnSale) { Driver.ReturnSale(); } else { Driver.Sale(); } PrintLine(line: true); } PrepareDriver(currentDrvPassword); Driver.StringForPrinting = String.Empty; if (doc.MoneyType == 1) { Log.Add("тип оплаты: наличными"); Driver.Summ1 = MoneySumm ?? doc.Money; Driver.Summ2 = 0; } else { Log.Add("тип оплаты: безнал (реальный: " + doc.MoneyType.ToString() + ")"); Driver.Summ2 = MoneySumm ?? doc.Money; Driver.Summ1 = 0; } Driver.CloseCheck(); int checkClosingResult = Driver.ResultCode; string checkClosingErrorText = Driver.ResultCodeDescription; Log.AddWithCode("распечатка чека"); if (checkClosingResult != 0) { PrepareDriver(currentDrvPassword); Driver.CancelCheck(); Log.AddWithCode("отмена чека"); } else if (!MainWindow.TEST_VERSION && !doc.Region) { repeatPrintingTimer.Enabled = true; repeatPrintingTimer.Start(); } if (checkClosingResult == 0) { return("OK:" + Driver.Change); } else { CRM.SendError(checkClosingErrorText, doc.AgrNumber); return("ERR2:" + checkClosingErrorText); } }
public bool ReportRegion(string reportTypeString) { int reportType = Int32.Parse(reportTypeString); Dictionary <uint, string> agreements = new Dictionary <uint, string>(); atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_LAST_DOCUMENT); atolDriver.fnQueryData(); uint lastDoc = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER); atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_SHIFT); atolDriver.fnQueryData(); uint docsInLine = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_RECEIPT_NUMBER); uint firstDoc = lastDoc - docsInLine + 1; bool verySmall = false; if (reportType == 5) { reportType = 3; verySmall = true; } string[] FDData = CRM.GetFDData(firstDoc, (reportType <= 2 ? reportType : (reportType - 2))); if (FDData.Length <= 0 || FDData[0] == "ERR") { return(false); } else { for (int i = 1; i < FDData.Length; i++) { if (String.IsNullOrEmpty(FDData[i])) { continue; } string[] fd = FDData[i].Split(':'); if (fd.Length < 2) { return(false); } agreements.Add(uint.Parse(fd[0]), fd[1]); } } PrintLine(line: true); PrintLine("ОТЧЁТ до ЗАКРЫТИЯ СМЕНЫ"); if (verySmall) { PrintLine(line: true); PrintLine("дата | время | чек | договор | сумма"); PrintLine(line: true); } else if (reportType > 2) { PrintLine(line: true); PrintLine("дата | время | чек | ФП"); PrintLine("договор | приход/возврат | сумма"); } for (uint i = firstDoc; i <= lastDoc; i++) { atolDriver.setParam(Constants.LIBFPTR_PARAM_FN_DATA_TYPE, Constants.LIBFPTR_FNDT_DOCUMENT_BY_NUMBER); atolDriver.setParam(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER, i); atolDriver.fnQueryData(); uint documentType = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_FN_DOCUMENT_TYPE); uint documentNumber = atolDriver.getParamInt(Constants.LIBFPTR_PARAM_DOCUMENT_NUMBER); DateTime dateTime = atolDriver.getParamDateTime(Constants.LIBFPTR_PARAM_DATE_TIME); string fiscalSign = atolDriver.getParamString(Constants.LIBFPTR_PARAM_FISCAL_SIGN); double sum = atolDriver.getParamDouble(1020); uint type = atolDriver.getParamInt(1054); string doc = (agreements.ContainsKey(documentNumber) ? agreements[documentNumber] : "[не найден]"); string typeLine = (type == 1 ? "приход" : (type == 2 ? "возврат" : "ИНОЕ")); if (verySmall) { PrintGraphicLine(String.Format( "{0}.{1}.{2} {3}:{4} {5} {6} {7} {8} р", dateTime.Day.ToString("D2"), dateTime.Month.ToString("D2"), dateTime.Year.ToString("D4"), dateTime.Hour.ToString("D2"), dateTime.Minute.ToString("D2"), documentNumber, DocNumber(doc), typeLine, (type == 2 ? "-" : String.Empty) + sum.ToString() )); } else if (reportType > 2) { PrintLine(line: true); PrintLine(String.Format( "{0}.{1} {2}:{3} {4} {5}", dateTime.Day, dateTime.Month, dateTime.Hour, dateTime.Minute, documentNumber, fiscalSign )); PrintLine(String.Format( "{0} {1} {2} р", doc, typeLine, (type == 2 ? "-" : "") + sum.ToString() )); } else { PrintLine(line: true); PrintLine("документ ФД: " + documentNumber.ToString()); PrintLine("договор: " + doc); PrintLine("тип: " + typeLine); PrintLine("дата: " + dateTime.ToString()); PrintLine("ФП: " + fiscalSign.ToString()); PrintLine("сумма чека: " + (type == 2 ? "-" : "") + sum.ToString()); } } PrintLine(line: true); for (int i = 0; i < 10; i++) { PrintLine(" "); } atolDriver.cut(); if (verySmall) { CleanOldGraphicLine(); } return(true); }
public static string PrintReceipt(string appDataString, DocPack doc) { string[] appData = appDataString.Split('|'); decimal[] receptionServices = { 0, 0, 0, 0, 0 }; if (appData[0] != "OK") { Log.AddWeb("Ошибка вернувшихся данных записи"); return("Ошибка вернувшихся данных записи"); } int receiptIndex = int.Parse(appData[5]) + 1; if (!Directory.Exists(RECEIPT_DIR)) { Directory.CreateDirectory(RECEIPT_DIR); } string fileName = RECEIPT_DIR + "\\" + appData[2] + "_D_" + receiptIndex.ToString() + ".pdf"; document = new Document(); FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write); PdfWriter writer = PdfWriter.GetInstance(document, fs); document.Open(); cb = writer.DirectContent; BaseFont bf = BaseFont.CreateFont("FONT.TTF", Encoding.GetEncoding(1251).BodyName, BaseFont.NOT_EMBEDDED); cb.SetColorFill(BaseColor.BLACK); cb.SetFontAndSize(bf, 10); string actNum = AppNumber(appData[2]) + "/ДОП" + receiptIndex.ToString(); for (int i = 0; i < 2; i++) { if (i > 0) { AddText(); AddText(); AddText( "- - - - - - - - - - - - - - - - - - - - - - - -" + " линия отрыва " + "- - - - - - - - - - - - - - - - - - - - - - -" + " линия отрыва " + "- - - - - - - - - - - - - - - - - - - - - - -" ); AddText(); AddText(); CURRENT_ROW = 0; } AddTitle("Акт N " + actNum); AddTitle("выполненных работ на дополнительные услуги"); AddText("г.Москва"); AddText(DateTime.Now.ToString("dd MMMM yyyy"), x: 500, y: CurrentY(), noNewLine: true); AddText(); AddText("Заявитель: " + appData[1] + " (номер записи " + AppNumber(appData[2]) + ")"); AddText("Исполнитель: "); AddText("Оказаны следующие виды работ:"); AddRow("", "", "", "", "Цена", "Сумма", header: true, aligment: 1); AddRow(" " + "п/п", "Наименование работы(услуги)", "Ед.изм.", "Кол-во", "(с учетом", "(с учетом", withBox: false, header: true, aligment: 1); AddRow("", "", "", "", "НДС 20%), руб", "НДС 20%), руб", withBox: false, header: true, aligment: 1); foreach (Service service in doc.Services) { decimal total = service.Price * service.Quantity; AddRow("N", service.Name, "шт", service.Quantity.ToString(), service.Price.ToString() + ".00", total.ToString() + ".00"); } AddText(); AddText("ИТОГО : " + MainWindow.Cashbox.manDocPackSumm + " руб 00 коп", x: 450, y: CurrentY(), noNewLine: true); AddText("Услуги оказаны в полном объеме и в срок."); AddText("Услуги оплачены Заказчиком в сумме: " + appData[3].ToLower()); AddText("в т.ч. НДС 20% " + appData[4].ToLower()); AddText("Стороны друг к другу претензий не имеют."); AddText(); AddText(); AddText("Подписи сторон:"); AddText(); AddText( "Исполнитель: _______________ / __________________ /" + " " + "заказчик: _______________ / " + appData[1] + " /" ); AddText(); AddText("(ФИО)", x: 175, y: CurrentY(), noNewLine: true); AddText("(ФИО)", x: 415, y: CurrentY(), noNewLine: true); AddText("М.П."); } document.Close(); fs.Close(); writer.Close(); System.Diagnostics.Process.Start(fileName); CURRENT_LINE = 0; CURRENT_ROW = 0; Log.Add("Сформирован акт " + fileName); foreach (Service service in doc.Services) { decimal total = service.Price * service.Quantity; if (service.ReceptionID > 0) { receptionServices[service.ReceptionID] += total; } } CRM.SendFile( pathToFile: fileName, appID: appData[6], actNum: actNum, xerox: receptionServices[1].ToString(), form: receptionServices[2].ToString(), print: receptionServices[3].ToString(), photo: receptionServices[4].ToString() ); return(String.Empty); }
private void sendLogin_Click(object sender, RoutedEventArgs e) { Canvas canvasToGo = mainPlace; string passwordHash = CRM.GenerateMySQLHash(password.Password); if (!CRM.CrmAuthentication(login.Text, passwordHash, Cashbox.serialNumber)) { loginFailText.Content = CRM.loginError; returnFromErrorTo = loginPlace; canvasToGo = loginFail; Log.Add("ошибка входа с логином " + login.Text); } else if (Diagnostics.FailCashbox()) { loginFailText.Content = "Ошибка подключения к кассе. Проверьте подключение и перезапустите приложение"; returnFromErrorTo = loginPlace; canvasToGo = loginFail; Log.Add("ошибка подключения к кассе"); } else if (Cashbox.CheckCashboxTables().Count() != 0) { int index = 0; foreach (string field in Cashbox.CheckCashboxTables()) { index += 1; settingText2.Items.Add(index.ToString() + ". " + field); } returnFromErrorTo = loginPlace; canvasToGo = cashboxSettingsFail; Log.Add("ошибка настроек кассы"); if (Cashbox.CurrentMode() != 4) { settingText5.Visibility = Visibility.Visible; reportAndRessetting.Content = "закрыть смену, распечатать отчёт и перенастроить"; } else { settingText5.Visibility = Visibility.Hidden; reportAndRessetting.Content = "перенастроить таблицы настроек"; } } else { Server.StartServer(); CRM.currentLogin = login.Text; CRM.currentPassword = passwordHash; status10.Content = login.Text.Replace("_", "__"); } MoveCanvas( moveCanvas: canvasToGo, prevCanvas: loginPlace, direction: moveDirection.vertical ); if (Cashbox != null) { UpdateStatuses(); } }
public static string ResponsePrepare(string request, bool empty, string clientIP) { string err = String.Empty; if (empty) { Log.Add("пустой запрос с " + clientIP); CRM.SendError("Пустой запрос с " + clientIP); return("403"); } else if (!CheckRequest.CheckValidRequest(request)) { Log.Add("невалидный запрос " + clientIP); CRM.SendError("Невалидный запрос с " + clientIP); return("404"); } if (!CheckRequest.CheckLoginInRequest(request, out err)) { Log.Add("конфликт логинов: " + err); CRM.SendError("Конфликт логинов: " + err); return("ERR3:Кассовая программа запущена пользователем " + CRM.currentLogin); } if (CheckRequest.CheckConnection(request)) { Log.Add("бип-тест подключения к кассе"); string testResult = Diagnostics.MakeBeepTest(); return(testResult); } if (!CheckRequest.CheckXml(request)) { Log.Add("CRC ошибочна, возвращаем ошибку данных"); CRM.SendError("CRC ошибка"); return("ERR1:Ошибка переданных данных"); } else { Log.Add("CRC запроса корректна, логин соответствует"); DocPack docPack = new DocPack(); docPack.DocPackFromXML(request); if (!String.IsNullOrWhiteSpace(docPack.AgrNumber)) { Log.Add("номер договора: " + docPack.AgrNumber); } MainWindow.Cashbox.manDocPackForPrinting = docPack; if (docPack.RequestOnly == 1) { MainWindow.Cashbox.manDocPackSumm = docPack.Total; ShowTotal(docPack.Total.ToString()); return("OK:Callback запрос получен"); } else { return(MainWindow.Cashbox.PrintDocPack(docPack)); } } }