Added pay voucher feature. Added dialog with paied vouchers. Added
support for printing receipts on POS printer.
This commit is contained in:
@@ -0,0 +1,151 @@
|
||||
#include "receiptgenerator.h"
|
||||
#include <settingsservice.h>
|
||||
#include <settings/globalsettings.h>
|
||||
|
||||
#include <QTextCodec>
|
||||
#include <QFile>
|
||||
|
||||
const QString ReceiptGenerator::DIACRITIC = "ÂâÁáÄäĂ㥹ĆćČčÇçĎďĐđÉéËëĚěĘęÍíÎîĹĺĽľŁłŃńŇňÓóÖöÔôŐőŔŕŘřŚśŠšŞşŤťŢţÚúÜüŮůŰűÝýŹźŽžŻż";
|
||||
const QString ReceiptGenerator::NON_DIACRITIC = "AaAaAaAaAaCcCcCcDdDdEeEeEeEeIiIiLlLlLlNnNnOoOoOoOoRrRrSsSsSsTtTtUuUuUuUuYyZzZzZz";
|
||||
|
||||
ReceiptGenerator::ReceiptGenerator()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void ReceiptGenerator::setVoucher(const QSharedPointer<Voucher> &voucher)
|
||||
{
|
||||
m_voucher = voucher;
|
||||
}
|
||||
|
||||
void ReceiptGenerator::setSettings(const ShopSettingsPtr &settings)
|
||||
{
|
||||
m_settings = settings;
|
||||
}
|
||||
|
||||
void ReceiptGenerator::save()
|
||||
{
|
||||
SettingsService srvShopSettings("SHOP");
|
||||
ShopSettingsPtr shopSettings = srvShopSettings.loadSettings<ShopSettings>();
|
||||
|
||||
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;
|
||||
|
||||
SettingsService srvGsSettings("CORE");
|
||||
SettingsService srvShopSettings("SHOP");
|
||||
|
||||
ShopSettingsPtr shopSettings = srvShopSettings.loadSettings<ShopSettings>();
|
||||
GlobalSettingsPtr gs = srvGsSettings.loadSettings<GlobalSettings>();
|
||||
|
||||
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: " + gs->ic()));
|
||||
out.append("\x0a");
|
||||
out.append("\x1b\x61\0");
|
||||
|
||||
for (int i = 0; i < shopSettings->lettersPerLine(); i++ )
|
||||
{
|
||||
out.append("_");
|
||||
}
|
||||
out.append("\x0a");
|
||||
|
||||
foreach (QSharedPointer<VoucherItem> 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");
|
||||
}
|
||||
|
||||
for (int i = 0; i < shopSettings->lettersPerLine(); i++ )
|
||||
{
|
||||
out.append("_");
|
||||
}
|
||||
out.append("\x0a");
|
||||
|
||||
char printMode = 8 | 16 ;
|
||||
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 * 2 + totalPrice.length() * 2);
|
||||
for (int i = 0; i < numSpaces; i++)
|
||||
{
|
||||
out.append(" ");
|
||||
}
|
||||
|
||||
out.append(prepareString(totalPrice));
|
||||
out.append("\x1b\x21\0");
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user