-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprinter.cpp
More file actions
83 lines (71 loc) · 2.01 KB
/
Copy pathprinter.cpp
File metadata and controls
83 lines (71 loc) · 2.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <QApplication>
#include <math.h>
#include "printer.h"
#include "terminal.h"
#include "debug.h"
#include "config.h"
Printer::Printer(const JConfig &conf, Terminal *terminal)
{
m_device = new QFile(conf["printer"]["device"].toString());
if (m_device->exists() && m_device->open(QIODevice::ReadWrite | QIODevice::Truncate | QIODevice::Unbuffered))
m_device->flush();
else
{
delete m_device;
m_device = NULL;
return;
}
m_formatDate = conf["global"]["format"]["date"].toString(DEF_FORMAT_DATE);
m_formatTime = conf["global"]["format"]["time"].toString(DEF_FORMAT_TIME);
tplLoad(conf["printer"]["tpl"]["eject"].toPath(PRN_DEF_TPL_EJECT), m_tplEject);
tplLoad(conf["printer"]["tpl"]["payment"].toPath(PRN_DEF_TPL_PAYMENT), m_tplPayment);
m_terminal = terminal;
m_codec = QTextCodec::codecForName("IBM 866");
}
Printer::~Printer()
{
if (m_device)
{
m_device->close();
delete m_device;
}
}
void Printer::ejected(int amount)
{
print(m_tplEject, amount * -1);
}
void Printer::payment(int amount)
{
print(m_tplPayment, amount);
}
void Printer::print(QString receipt, int amount)
{
if (!m_device)
return;
QString cardnumber = m_terminal->cardreader()->cardnum();
QDateTime current = QDateTime::currentDateTime();
receipt.replace("__DATE__", current.toString(m_formatDate))
.replace("__TIME__", current.toString(m_formatTime))
.replace("__TERMINAL_ID__", m_terminal->id())
.replace("__CARDNUMBER__", cardnumber.replace(4, cardnumber.size() - 8, " [...] "))
.replace("__AMOUNT__", QString::number(amount))
.replace("__BALANCE__", QString::number((int)floor(m_terminal->balance())));
#ifdef DEBUG
dbg << "\n" << receipt;
#endif
QTextCodec::setCodecForCStrings(m_codec);
m_device->write(receipt.toAscii());
m_device->write("\f\n");
m_device->flush();
}
void Printer::tplLoad(const QString &file, QString &tpl)
{
QFile tplFile(file);
if (!tplFile.exists() || !tplFile.open(QIODevice::ReadOnly))
{
tpl = "";
return;
}
tpl = QString::fromUtf8(tplFile.readAll().data());
tplFile.close();
}