From ae59e77dbac6b446853cb0596a2b2346bd7dc480 Mon Sep 17 00:00:00 2001 From: Siegfried Siegert Date: Fri, 12 Jun 2026 08:40:50 +0200 Subject: [PATCH] add printfiscal functions --- src/ATBAPP/ATBDeviceControllerPlugin.cpp | 89 ++++++++++++++++++++++-- src/ATBAPP/ATBDeviceControllerPlugin.h | 2 + src/ATBAPP/DeviceControllerInterface.h | 5 ++ 3 files changed, 92 insertions(+), 4 deletions(-) diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.cpp b/src/ATBAPP/ATBDeviceControllerPlugin.cpp index a8c1380..2fbe505 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.cpp +++ b/src/ATBAPP/ATBDeviceControllerPlugin.cpp @@ -43,8 +43,8 @@ PLUGIN_STATE ATBDeviceControllerPlugin::initDCPlugin(QObject *eventReceiver, con // read variables from setting this->serialPortName = settings.value("ATBDeviceControllerPlugin/serialPort", "ttymxc2").toString(); -// QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); - QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "Windows-1250").toString().toLatin1(); + QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "ISO 8859-2").toString().toLatin1(); +// QByteArray printerEncoding = settings.value("ATBDeviceControllerPlugin/printerEncoding", "Windows-1250").toString().toLatin1(); QString printerLocaleString = settings.value("ATBDeviceControllerPlugin/printerLocale", "de_DE").toString().toLatin1(); this->printerLocale = QLocale(printerLocaleString); @@ -833,6 +833,35 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QHashcodec = QTextCodec::codecForName("ISO 8859-2"); + + QByteArray ba_receipt = this->codec->fromUnicode(printingString); + + //QByteArray ba = printingString.toUtf8(); + hw->prn_switchPower(true); + hw->prn_setFonts(printerDefaultFont.font, + printerDefaultFont.size, + printerDefaultFont.width, + printerDefaultFont.height); + + qCritical().noquote() << ba_receipt.toHex(' '); + hw->prn_sendText(&ba_receipt); + // DEBUG + //qCritical() << "---------------------------------------------------------------"; + //qCritical() << "ATBDeviceControllerPlugin::requestPrintReceipt()"; + //qCritical() << " receipt data:"; + //qCritical() << QString(ba_receipt); + //qCritical() << "---------------------------------------------------------------"; + + + this->printResultCheckCounter = 0; + QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + + //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); +} + +void ATBDeviceControllerPlugin::requestPrintFiscal(const QString & printingString) { this->codec = QTextCodec::codecForName("Windows-1250"); @@ -855,7 +884,7 @@ void ATBDeviceControllerPlugin::requestPrintReceipt(const QString & printingStri hw->prn_sendText(&ba_receipt); // DEBUG //qCritical() << "---------------------------------------------------------------"; - //qCritical() << "ATBDeviceControllerPlugin::requestPrintReceipt()"; + //qCritical() << "ATBDeviceControllerPlugin::requestPrintFiscal()"; //qCritical() << " receipt data:"; //qCritical() << QString(ba_receipt); //qCritical() << "---------------------------------------------------------------"; @@ -871,10 +900,15 @@ void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) { QByteArray ba_qr = this->codec->fromUnicode(printingString); + QString nl = "\n"; + QByteArray ba_nl = this->codec->fromUnicode(nl); + //QByteArray ba = printingString.toUtf8(); hw->prn_switchPower(true); + hw->prn_sendText(&ba_nl); hw->prn_sendQRdata(&ba_qr); hw->prn_printQRcode(); + hw->prn_sendText(&ba_nl); // DEBUG qCritical() << "---------------------------------------------------------------"; qCritical() << "ATBDeviceControllerPlugin::requestPrintQR()"; @@ -884,7 +918,7 @@ void ATBDeviceControllerPlugin::requestPrintQR(const QString & printingString) this->printResultCheckCounter = 0; - //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + //QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingFiscal())); //QTimer::singleShot(2000, this, [this](){ hw->prn_cut(3); } ); } @@ -940,6 +974,53 @@ void ATBDeviceControllerPlugin::onPrinterWaitForPrintingReceipt() } +void ATBDeviceControllerPlugin::onPrinterWaitForPrintingFiscal() +{ + quint8 printerResult = this->hw->prn_getPrintResult(); + + switch (printerResult) { + case 0: // still printing + qCritical() << "--> printer: WaitForPrintingReceipt"; + QTimer::singleShot(2000, this, SLOT(onPrinterWaitForPrintingReceipt())); + break; + case 1: // printing finished, Ok + qCritical() << "DC Finished printing fiscal"; + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::SUCCESS, + // TODO: TicketNumber + "", + ""); + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + break; + case 2: // printing finished, Error + qCritical() << "DC Error: wait for printing fiscal"; + this->errorCode = "PRINTER"; // TODO: get more detailed error code from low level API + this->errorDescription = "Printer error"; // TODO: get more detailed error description from low level API + + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND, + this->errorCode, + this->errorDescription); + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + break; + default: + qCritical() << "DC Error: wait for printing fiscal: printerResult = " << printerResult; + this->errorCode = "PRINTER"; // TODO: get more detailed error code from low level API + this->errorDescription = "Printer error(" + QString(printerResult) + ")"; + + emit this->printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE::ERROR_BACKEND, + this->errorCode, + this->errorDescription); + // do an emergency cut + hw->prn_switchPower(true); + QTimer::singleShot(200, this, [this](){ hw->prn_cut(3); } ); + + break; + } + +} + + void ATBDeviceControllerPlugin::requestPrintTicket(const QHash & printingData) { diff --git a/src/ATBAPP/ATBDeviceControllerPlugin.h b/src/ATBAPP/ATBDeviceControllerPlugin.h index 40b16d7..1c2d224 100644 --- a/src/ATBAPP/ATBDeviceControllerPlugin.h +++ b/src/ATBAPP/ATBDeviceControllerPlugin.h @@ -79,6 +79,7 @@ public: void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData); void requestPrintReceipt(const QHash & printingData); void requestPrintReceipt(const QString & printingString); + void requestPrintFiscal(const QString & printingString); void requestPrintQR(const QString & printingString); void requestPrintCut(const qint16 & printTimer); @@ -187,6 +188,7 @@ private slots: void onPrinterPrintNextTemplate(); void onPrinterWaitForPrintingTicket(); void onPrinterWaitForPrintingReceipt(); + void onPrinterWaitForPrintingFiscal(); void onPrinterPrepareDynTemplateData(); diff --git a/src/ATBAPP/DeviceControllerInterface.h b/src/ATBAPP/DeviceControllerInterface.h index d31d433..cdec72d 100644 --- a/src/ATBAPP/DeviceControllerInterface.h +++ b/src/ATBAPP/DeviceControllerInterface.h @@ -77,6 +77,7 @@ public: virtual void requestPrintTicket(nsDeviceControllerInterface::TICKET_VARIANT ticketVariant, const QHash & printingData) = 0; virtual void requestPrintReceipt(const QHash & printingData) = 0; virtual void requestPrintReceipt(const QString & printingString) = 0; + virtual void requestPrintFiscal(const QString & printingString) = 0; virtual void requestPrintQR(const QString & printingSTring) = 0; virtual void requestPrintCut(const qint16 & printTimer) = 0; @@ -117,6 +118,10 @@ signals: void printReceiptFinished(nsDeviceControllerInterface::RESULT_STATE resultState, const QString & errorCode, const QString & errorDescription); + void printFiscalFinished(nsDeviceControllerInterface::RESULT_STATE resultState, + const QString & errorCode, + const QString & errorDescription); + void coinAttached();