#include "receiptgenerator.h" #include #include #include #include const QString ReceiptGenerator::DIACRITIC = "ÂâÁáÄäĂ㥹ĆćČčÇçĎďĐđÉéËëĚěĘęÍíÎîĹ弾ŁłŃńŇňÓóÖöÔôŐőŔŕŘřŚśŠšŞşŤťŢţÚúÜüŮůŰűÝýŹźŽžŻż"; const QString ReceiptGenerator::NON_DIACRITIC = "AaAaAaAaAaCcCcCcDdDdEeEeEeEeIiIiLlLlLlNnNnOoOoOoOoRrRrSsSsSsTtTtUuUuUuUuYyZzZzZz"; ReceiptGenerator::ReceiptGenerator() { } void ReceiptGenerator::setVoucher(const QSharedPointer &voucher) { m_voucher = voucher; } void ReceiptGenerator::setSettings(const ShopSettingsPtr &settings) { m_settings = settings; } void ReceiptGenerator::save() { SettingsService srvShopSettings("SHOP"); ShopSettingsPtr shopSettings = srvShopSettings.loadSettings(); QString outFile = m_outputFile; if (outFile.isEmpty()) { outFile = shopSettings->output(); } QFile file(outFile); file.open(QIODevice::WriteOnly); file.write(generate()); file.close(); } void ReceiptGenerator::print() { save(); } QString ReceiptGenerator::outputFile() const { return m_outputFile; } void ReceiptGenerator::setOutputFile(const QString &outputFile) { m_outputFile = outputFile; } QByteArray ReceiptGenerator::generate() { QByteArray out; char printMode = 8 | 16 ; SettingsService srvGsSettings("CORE"); SettingsService srvShopSettings("SHOP"); 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("\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"); foreach (QSharedPointer item, m_voucher->items()) { QString name = item->name(); QString price = QString::number(item->price().toDouble(), 'f', 2); int numSpaces = 0; 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"); } for (int i = 0; i < numSpaces; i++) { out.append(" "); } out.append(prepareString(price)); 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"); out.append("\x1b\x21"); out.append(printMode); out.append("Celekem:"); 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("\x0a"); out.append("\x0a"); out.append("\x0a"); out.append("\x0a"); return out; } QByteArray ReceiptGenerator::prepareString(const QString &str) { QString strOut = str; //ToDo - dát do nastavení for (int i = 0; i < DIACRITIC.length(); i++) { strOut = strOut.replace(DIACRITIC.at(i), NON_DIACRITIC.at(i)); } QTextCodec *codec = QTextCodec::codecForName("IBM850"); return codec->fromUnicode(strOut); }