From b113d5fca1864336754d8921263bf52c29ecaa4d Mon Sep 17 00:00:00 2001 From: Josef Rokos Date: Tue, 19 Jun 2018 19:55:18 +0200 Subject: [PATCH] Added setting for bill double printing. --- shop/receiptgenerator.cpp | 331 +++++++++++++++-------------- shop/settings/shopsettings.cpp | 22 ++ shop/settings/shopsettings.h | 12 ++ shop/settings/shopsettingsform.cpp | 3 + shop/settings/shopsettingsform.ui | 25 +++ 5 files changed, 237 insertions(+), 156 deletions(-) diff --git a/shop/receiptgenerator.cpp b/shop/receiptgenerator.cpp index a2f9481..8548634 100644 --- a/shop/receiptgenerator.cpp +++ b/shop/receiptgenerator.cpp @@ -114,207 +114,226 @@ QByteArray ReceiptGenerator::generate() ShopSettingsPtr shopSettings = srvShopSettings.loadSettings(); GlobalSettingsPtr gs = srvGsSettings.loadSettings(); - out.append("\x1b\x40\x1b\x61\x01"); - out.append(prepareString(gs->firmName())); - out.append("\x0a"); - out.append(prepareString(gs->street() + " " + gs->houseNumber())); - out.append("\x0a"); - out.append(prepareString(gs->zipCode() + " " + gs->city())); - out.append("\x0a"); - out.append(prepareString("IC: " + QString::number(gs->ic()))); - out.append("\x0a"); - out.append(prepareString("DIC: " + gs->dic())); - out.append("\x0a"); - out.append(prepareString("ID provozovny: " + shopSettings->eetShopId())); - out.append("\x0a"); - out.append(prepareString("ID pokladny: " + shopSettings->eetRegisterId())); - out.append("\x0a"); - out.append(prepareString("Cislo uctenky: " + m_voucher->numSer())); - out.append("\x0a"); - - out.append("\x1b\x21"); - out.append(printMode); - for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) - { - out.append("-"); - } - out.append("\x1b\x21"); - out.append((char)0); - out.append("\x0a"); + bool hasDoubleItem = false; + bool first = true; - foreach (QSharedPointer item, m_voucher->items()) { - QString count = QString::number(item->count()); - QString name = item->name(); - QString price = QString::number(item->price().toDouble(), 'f', 2); - - int numSpaces = 0; - name = count + "x " + name; + do + { + out.append("\x1b\x40\x1b\x61\x01"); + out.append(prepareString(gs->firmName())); + out.append("\x0a"); + out.append(prepareString(gs->street() + " " + gs->houseNumber())); + out.append("\x0a"); + out.append(prepareString(gs->zipCode() + " " + gs->city())); + out.append("\x0a"); + out.append(prepareString("IC: " + QString::number(gs->ic()))); + out.append("\x0a"); + out.append(prepareString("DIC: " + gs->dic())); + out.append("\x0a"); + out.append(prepareString("ID provozovny: " + shopSettings->eetShopId())); + out.append("\x0a"); + out.append(prepareString("ID pokladny: " + shopSettings->eetRegisterId())); + out.append("\x0a"); + out.append(prepareString("Cislo uctenky: " + m_voucher->numSer())); + out.append("\x0a"); - if (gs->vatPayer()) + out.append("\x1b\x21"); + out.append(printMode); + for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) { - out.append(prepareString("DPH " + QString::number(item->vatRate().toDouble(), 'f', 0)) + "%"); - out.append("\x0a"); + out.append("-"); } + out.append("\x1b\x21"); + out.append((char)0); + out.append("\x0a"); - if ((name.length() + price.length()) < shopSettings->lettersPerLine()) - { - numSpaces = shopSettings->lettersPerLine() - (name.length() + price.length()); - out.append(prepareString(name)); - } - else - { - numSpaces = shopSettings->lettersPerLine() - (name.length() + price.length()); - out.append(prepareString(name)); - out.append("\x0a"); - } + foreach (QSharedPointer item, m_voucher->items()) { + QString count = QString::number(item->count()); + QString name = item->name(); + QString price = QString::number(item->price().toDouble(), 'f', 2); - for (int i = 0; i < numSpaces; i++) - { - out.append(" "); - } - out.append(prepareString(price)); - out.append("\x0a"); - } + hasDoubleItem = name == shopSettings->doublePrintItem(); - out.append("\x1b\x21"); - out.append(printMode); - for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) - { - out.append("-"); - } - out.append("\x1b\x21"); - out.append((char)0); - out.append("\x0a"); + int numSpaces = 0; + name = count + "x " + name; - if (gs->vatPayer()) - { - QString zaklad = "Zaklad DPH "; - QString dph = "DPH "; - QString output; - QDecDouble zero(0); + if (gs->vatPayer()) + { + out.append(prepareString("DPH " + QString::number(item->vatRate().toDouble(), 'f', 0)) + "%"); + out.append("\x0a"); + } - if (m_voucher->vatAmountHigh() > zero) - { - output = zaklad + QString::number(m_voucher->vatRateHigh().toDouble()) + "%"; - out.append(prepareString(output)); - QString amount = QString::number(m_voucher->priceVatHigh().toDouble(), 'f', 2); - int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); - for (int i = 0; i < numSpaces; i++) + if ((name.length() + price.length()) < shopSettings->lettersPerLine()) { - out.append(" "); + numSpaces = shopSettings->lettersPerLine() - (name.length() + price.length()); + out.append(prepareString(name)); + } + else + { + numSpaces = shopSettings->lettersPerLine() - (name.length() + price.length()); + out.append(prepareString(name)); + out.append("\x0a"); } - out.append(prepareString(amount)); - out.append("\x0a"); - output = dph + QString::number(m_voucher->vatRateHigh().toDouble()) + "%"; - out.append(prepareString(output)); - amount = QString::number(m_voucher->vatAmountHigh().toDouble(), 'f', 2); - numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); for (int i = 0; i < numSpaces; i++) { out.append(" "); } - out.append(prepareString(amount)); + out.append(prepareString(price)); out.append("\x0a"); } - if (m_voucher->vatAmountFirstLower() > zero) + out.append("\x1b\x21"); + out.append(printMode); + for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) { - output = zaklad + QString::number(m_voucher->vatRateFirstLower().toDouble()) + "%"; - out.append(prepareString(output)); - QString amount = QString::number(m_voucher->priceVatFirstLower().toDouble(), 'f', 2); - int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); - for (int i = 0; i < numSpaces; i++) + out.append("-"); + } + out.append("\x1b\x21"); + out.append((char)0); + out.append("\x0a"); + + if (gs->vatPayer()) + { + QString zaklad = "Zaklad DPH "; + QString dph = "DPH "; + QString output; + QDecDouble zero(0); + + if (m_voucher->vatAmountHigh() > zero) { - out.append(" "); + output = zaklad + QString::number(m_voucher->vatRateHigh().toDouble()) + "%"; + out.append(prepareString(output)); + QString amount = QString::number(m_voucher->priceVatHigh().toDouble(), 'f', 2); + int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); + + output = dph + QString::number(m_voucher->vatRateHigh().toDouble()) + "%"; + out.append(prepareString(output)); + amount = QString::number(m_voucher->vatAmountHigh().toDouble(), 'f', 2); + numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); } - out.append(prepareString(amount)); - out.append("\x0a"); - output = dph + QString::number(m_voucher->vatRateFirstLower().toDouble()) + "%"; - out.append(prepareString(output)); - amount = QString::number(m_voucher->vatAmountFirstLower().toDouble(), 'f', 2); - numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); - for (int i = 0; i < numSpaces; i++) + if (m_voucher->vatAmountFirstLower() > zero) { - out.append(" "); + output = zaklad + QString::number(m_voucher->vatRateFirstLower().toDouble()) + "%"; + out.append(prepareString(output)); + QString amount = QString::number(m_voucher->priceVatFirstLower().toDouble(), 'f', 2); + int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); + + output = dph + QString::number(m_voucher->vatRateFirstLower().toDouble()) + "%"; + out.append(prepareString(output)); + amount = QString::number(m_voucher->vatAmountFirstLower().toDouble(), 'f', 2); + numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); } - out.append(prepareString(amount)); - out.append("\x0a"); - } - if (m_voucher->VatAmountSecondLower() > zero) - { - output = zaklad + QString::number(m_voucher->vatRateSecondLower().toDouble()) + "%"; - out.append(prepareString(output)); - QString amount = QString::number(m_voucher->priceVatSecondLower().toDouble(), 'f', 2); - int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); - for (int i = 0; i < numSpaces; i++) + if (m_voucher->VatAmountSecondLower() > zero) { - out.append(" "); + output = zaklad + QString::number(m_voucher->vatRateSecondLower().toDouble()) + "%"; + out.append(prepareString(output)); + QString amount = QString::number(m_voucher->priceVatSecondLower().toDouble(), 'f', 2); + int numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); + + output = dph + QString::number(m_voucher->vatRateSecondLower().toDouble()) + "%"; + out.append(prepareString(output)); + amount = QString::number(m_voucher->VatAmountSecondLower().toDouble(), 'f', 2); + numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); + for (int i = 0; i < numSpaces; i++) + { + out.append(" "); + } + out.append(prepareString(amount)); + out.append("\x0a"); } - out.append(prepareString(amount)); - out.append("\x0a"); - output = dph + QString::number(m_voucher->vatRateSecondLower().toDouble()) + "%"; - out.append(prepareString(output)); - amount = QString::number(m_voucher->VatAmountSecondLower().toDouble(), 'f', 2); - numSpaces = shopSettings->lettersPerLine() - (output.length() + amount.length()); - for (int i = 0; i < numSpaces; i++) + out.append("\x1b\x21"); + out.append(printMode); + for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) { - out.append(" "); + out.append("-"); } - out.append(prepareString(amount)); + out.append("\x1b\x21"); + out.append((char)0); out.append("\x0a"); + } out.append("\x1b\x21"); out.append(printMode); - for (int i = 0; i < shopSettings->lettersPerLine(); i++ ) + out.append("Celkem:"); + + QString totalPrice = QString::number(m_voucher->totalPrice().toDouble(), 'f', 2); + int numSpaces = shopSettings->lettersPerLine() - (8 + totalPrice.length()); + for (int i = 0; i < numSpaces; i++) { - out.append("-"); + out.append(" "); } + + out.append(prepareString(totalPrice)); out.append("\x1b\x21"); out.append((char)0); out.append("\x0a"); - - } - - out.append("\x1b\x21"); - out.append(printMode); - out.append("Celkem:"); - - QString totalPrice = QString::number(m_voucher->totalPrice().toDouble(), 'f', 2); - int numSpaces = shopSettings->lettersPerLine() - (8 + totalPrice.length()); - for (int i = 0; i < numSpaces; i++) - { - out.append(" "); - } - - out.append(prepareString(totalPrice)); - out.append("\x1b\x21"); - out.append((char)0); - out.append("\x0a"); - out.append("Datum:"); - out.append(prepareString(m_voucher->payDateTime().toString())); - out.append("\x0a"); - if (!m_voucher->eetBkp().isEmpty()) - { - out.append("Rezim EET: bezny"); - out.append("\x0a"); - out.append("BKP:"); - out.append("\x0a"); - out.append(prepareString(m_voucher->eetBkp())); + out.append("Datum:"); + out.append(prepareString(m_voucher->payDateTime().toString())); out.append("\x0a"); - out.append("FIK:"); + if (!m_voucher->eetBkp().isEmpty()) + { + out.append("Rezim EET: bezny"); + out.append("\x0a"); + out.append("BKP:"); + out.append("\x0a"); + out.append(prepareString(m_voucher->eetBkp())); + out.append("\x0a"); + out.append("FIK:"); + out.append("\x0a"); + out.append(prepareString(m_voucher->eetFik())); + out.append("\x0a"); + out.append("\x0a"); + } out.append("\x0a"); - out.append(prepareString(m_voucher->eetFik())); out.append("\x0a"); out.append("\x0a"); - } - out.append("\x0a"); - out.append("\x0a"); - out.append("\x0a"); + + if (shopSettings->doublePrint() && hasDoubleItem && first) + { + out.append("\x0a"); + out.append("\x0a"); + first = false; + } + else if (!first) + { + first = true; + } + } while (shopSettings->doublePrint() && hasDoubleItem && !first); return out; } diff --git a/shop/settings/shopsettings.cpp b/shop/settings/shopsettings.cpp index 167f5bf..ba42f1b 100644 --- a/shop/settings/shopsettings.cpp +++ b/shop/settings/shopsettings.cpp @@ -16,6 +16,8 @@ ShopSettings::ShopSettings(QObject *parent) : QObject(parent) m_rounding = Enums::R_NONE; m_decimalPlaces = 0; + + m_doublePrint = false; } QString ShopSettings::output() const @@ -197,3 +199,23 @@ void ShopSettings::setRoundingItem(const QString &roundingItem) { m_roundingItem = roundingItem; } + +bool ShopSettings::doublePrint() const +{ + return m_doublePrint; +} + +void ShopSettings::setDoublePrint(bool doublePrint) +{ + m_doublePrint = doublePrint; +} + +QString ShopSettings::doublePrintItem() const +{ + return m_doublePrintItem; +} + +void ShopSettings::setDoublePrintItem(const QString &doublePrintItem) +{ + m_doublePrintItem = doublePrintItem; +} diff --git a/shop/settings/shopsettings.h b/shop/settings/shopsettings.h index 8e5fbb6..b7b8b11 100644 --- a/shop/settings/shopsettings.h +++ b/shop/settings/shopsettings.h @@ -23,6 +23,9 @@ class ShopSettings : public QObject Q_PROPERTY(int favBtnRows READ favBtnRows WRITE setFavBtnRows) Q_PROPERTY(int favBtnSize READ favBtnSize WRITE setFavBtnSize) + Q_PROPERTY(bool doublePrint READ doublePrint WRITE setDoublePrint) + Q_PROPERTY(QString doublePrintItem READ doublePrintItem WRITE setDoublePrintItem) + Q_PROPERTY(Enums::Rounding rounding READ rounding WRITE setRounding) Q_PROPERTY(int decimalPlaces READ decimalPlaces WRITE setDecimalPlaces) Q_PROPERTY(QString roundingItem READ roundingItem WRITE setRoundingItem) @@ -91,6 +94,12 @@ public: QString roundingItem() const; void setRoundingItem(const QString &roundingItem); + bool doublePrint() const; + void setDoublePrint(bool doublePrint); + + QString doublePrintItem() const; + void setDoublePrintItem(const QString &doublePrintItem); + private: QString m_output; CODEPAGE m_codepage; @@ -106,6 +115,9 @@ private: bool m_eetTest; bool m_eetPlayground; + bool m_doublePrint; + QString m_doublePrintItem; + int m_favBtnCols; int m_favBtnRows; int m_favBtnSize; diff --git a/shop/settings/shopsettingsform.cpp b/shop/settings/shopsettingsform.cpp index 5bf9b4a..21b3d2f 100644 --- a/shop/settings/shopsettingsform.cpp +++ b/shop/settings/shopsettingsform.cpp @@ -45,6 +45,9 @@ ShopSettingsForm::ShopSettingsForm(QWidget *parent) : registerBinding(ui->decimalPlaces); registerBinding(ui->roundingItem); + registerBinding(ui->doublePrint); + registerBinding(ui->doublePrintItem); + m_itemModel = new AutoTableModel(); } diff --git a/shop/settings/shopsettingsform.ui b/shop/settings/shopsettingsform.ui index b0222fd..fde28d8 100644 --- a/shop/settings/shopsettingsform.ui +++ b/shop/settings/shopsettingsform.ui @@ -320,6 +320,31 @@ + + + + Doub&le print bill + + + true + + + false + + + + + + Item name + + + + + + + + +