#include "eetresult.h" #include "eettemplate.h" #include #include EetTemplate::EetTemplate(QObject *parent) : QObject(parent) { m_result = nullptr; } EetTemplate::EetTemplate(const QString &tmp, QObject *parent) : QObject(parent) { QFile tmpFile(tmp); tmpFile.open(QFile::ReadOnly | QFile::Text); QTextStream stream(&tmpFile); m_template = stream.readAll(); m_result = nullptr; } QString EetTemplate::fillTemplate(EetRequest *request) { m_template = fillTemplateInternal(request, nullptr); QString pkp = getPkpString(request); QByteArray signedPkp = m_signer->signData(pkp.toUtf8()); QByteArray sha1Bkp = m_signer->sha1HashData(signedPkp); QString base64Sign(signedPkp.toBase64()); QString base16bkp(sha1Bkp.toHex()); QString splitedBkp; for (int i = 0; i < base16bkp.length(); i++) { if (i > 0 && i % 8 == 0) { splitedBkp += "-"; } splitedBkp += base16bkp[i]; } if (m_result != nullptr) { m_result->setPkp(base64Sign); m_result->setBkp(splitedBkp.toUpper()); } QMap varMap; varMap["pkp"] = base64Sign; varMap["bkp"] = splitedBkp.toUpper(); return fillTemplate(varMap); } QString EetTemplate::fillTemplate(QMap map) { return fillTemplateInternal(nullptr, &map); } QString EetTemplate::fillTemplateInternal(EetRequest *request, QMap *map) { QString ret; QString phStart; if (request != nullptr) { phStart = "@{"; } else { phStart = "${"; } for (int i = 0; i < m_template.size(); i++) { QChar c = m_template[i]; if (!m_template.mid(i).startsWith(phStart)) { if ((i > 0 && c == ' ' && m_template[i - 1] == ' ')) { continue; } else { ret += c; continue; } } int p = m_template.indexOf("}", i + 2); if (p < 0) { return ret; } QString var = m_template.mid(i + 2, p - i - 2); QString value; if (request != nullptr) { value = request->property(var.toStdString().c_str()).toString(); } else { value = map->value(var, NULL_VAL); } if (value != NULL_VAL) { QString attrib; if (request != NULL) { attrib = QString("%1=\"%2\"").arg(var, value); } else { attrib = value; } ret += attrib; } i = p; } return ret.replace(QRegExp("\" >"), "\">"); } QString EetTemplate::getPkpString(EetRequest *request) { QString ret = QString("%1|%2|%3|%4|%5|%6").arg(request->property("dic_popl").toString(), request->property("id_provoz").toString(), request->property("id_pokl").toString(), request->property("porad_cis").toString(), request->property("dat_trzby").toString(), request->property("celk_trzba").toString()); return ret; } void EetTemplate::setResult(EetResult *result) { m_result = result; }