add new eet and qt 6.12
This commit is contained in:
+88
-80
@@ -4,10 +4,11 @@
|
||||
|
||||
#include "settings/shopsettings.h"
|
||||
|
||||
#ifdef EET
|
||||
#include <eetcpp.h>
|
||||
#ifdef PRODEJNA_EET_V4
|
||||
#include "eet/eetv4adapter.h"
|
||||
#include <eetv4client.h>
|
||||
#endif
|
||||
#include <QEventLoop>
|
||||
#include <QProcessEnvironment>
|
||||
#include <seasonservice.h>
|
||||
#include <cmath>
|
||||
|
||||
@@ -15,6 +16,15 @@
|
||||
inline double round(double value) { return value < 0 ? -std::floor(0.5 - value) : std::floor(0.5 + value); }
|
||||
#endif
|
||||
|
||||
namespace
|
||||
{
|
||||
bool &eetOnlineState()
|
||||
{
|
||||
static bool online = true;
|
||||
return online;
|
||||
}
|
||||
}
|
||||
|
||||
VoucherPtr ShopService::createVoucher()
|
||||
{
|
||||
QSharedPointer<Voucher> voucher(new Voucher);
|
||||
@@ -189,96 +199,95 @@ void ShopService::updateRelatedItem(VoucherItem* item, int countAdded)
|
||||
|
||||
bool ShopService::processEet(VoucherPtr voucher, QString &message)
|
||||
{
|
||||
#ifdef EET
|
||||
#ifdef PRODEJNA_EET_V4
|
||||
if (voucher->eetStatus() == Voucher::EET_NOT_ENTERING)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (!eetOnlineState())
|
||||
{
|
||||
message = QStringLiteral("EET is offline; the voucher remains queued for sending.");
|
||||
return false;
|
||||
}
|
||||
|
||||
SettingsService srvSettings("SHOP");
|
||||
ShopSettingsPtr settings = srvSettings.loadSettings<ShopSettings>();
|
||||
|
||||
loadSettings();
|
||||
EetRequest request;
|
||||
request.setCelkTrzba(voucher->totalPrice().toDouble());
|
||||
request.setDatTrzby(voucher->payDateTime());
|
||||
request.setIdPokl(settings->eetRegisterId());
|
||||
request.setIdProvoz(settings->eetShopId());
|
||||
request.setPrvniZaslani(voucher->eetStatus() == Voucher::EET_FOR_SEND);
|
||||
request.setDicPopl(m_gs->dic());
|
||||
request.setPoradCis(voucher->numSer());
|
||||
request.setDatOdesl(QDateTime::currentDateTime());
|
||||
request.setRezim((EetRequest::EetRezim)settings->eetMode());
|
||||
EetV4ShopConfig adapterConfig;
|
||||
adapterConfig.endpoint = QUrl(settings->eetEndpoint());
|
||||
adapterConfig.taxpayerEic = settings->eetShopId();
|
||||
adapterConfig.unitId = settings->eetUnitId();
|
||||
adapterConfig.cashRegisterId = settings->eetRegisterId();
|
||||
adapterConfig.timeoutMilliseconds = settings->eetTimeout();
|
||||
adapterConfig.verificationMode = settings->eetTest();
|
||||
|
||||
if (m_gs->vatPayer())
|
||||
EetV4SaleRequest request;
|
||||
QString adapterError;
|
||||
if (!EetV4ShopAdapter::createRequest(*voucher, adapterConfig, &request, &adapterError))
|
||||
{
|
||||
request.setDan1(voucher->vatAmountHigh().toDouble());
|
||||
request.setDan2(voucher->vatAmountFirstLower().toDouble());
|
||||
request.setDan3(voucher->VatAmountSecondLower().toDouble());
|
||||
|
||||
request.setZaklDan1(voucher->priceVatHigh().toDouble());
|
||||
request.setZaklDan2(voucher->priceVatFirstLower().toDouble());
|
||||
request.setZaklDan3(voucher->priceVatSecondLower().toDouble());
|
||||
request.setZaklNepodlDph(voucher->priceNoVat().toDouble());
|
||||
message = adapterError;
|
||||
voucher->setEetStatus(Voucher::EET_ERROR);
|
||||
update(voucher);
|
||||
return false;
|
||||
}
|
||||
|
||||
EetSender *sender = new EetSender(this);
|
||||
sender->setupSigner(settings->eetCertificate(), settings->eetKeyPassword());
|
||||
sender->setPlayground(settings->eetPlayground());
|
||||
|
||||
QEventLoop loop;
|
||||
bool replyFinished = false;
|
||||
|
||||
connect(sender, &EetSender::sendFinished, [this, voucher, sender, &loop, &replyFinished](){
|
||||
Transaction tx;
|
||||
|
||||
voucher->setEetBkp(sender->resut()->bkp());
|
||||
voucher->setEetPkp(sender->resut()->pkp());
|
||||
voucher->setEetFik(sender->resut()->fik());
|
||||
|
||||
if (sender->resut()->status() == EetResult::RESPONSE_OK)
|
||||
{
|
||||
voucher->setEetSendDateTime(QDateTime::currentDateTime());
|
||||
voucher->setEetStatus(Voucher::EET_SENT);
|
||||
}
|
||||
else
|
||||
{
|
||||
voucher->setEetStatus(Voucher::EET_ERROR);
|
||||
}
|
||||
|
||||
this->update(voucher);
|
||||
tx.commit();
|
||||
sender->deleteLater();
|
||||
|
||||
loop.quit();
|
||||
replyFinished = true;
|
||||
});
|
||||
|
||||
sender->sendRequest(&request);
|
||||
|
||||
if (!replyFinished)
|
||||
const QString passwordVariable = settings->eetKeyPassword().trimmed();
|
||||
const QByteArray password = QProcessEnvironment::systemEnvironment()
|
||||
.value(passwordVariable)
|
||||
.toUtf8();
|
||||
if (passwordVariable.isEmpty() || password.isEmpty())
|
||||
{
|
||||
loop.exec();
|
||||
message = QStringLiteral("EET certificate password environment variable is missing.");
|
||||
voucher->setEetStatus(Voucher::EET_ERROR);
|
||||
update(voucher);
|
||||
return false;
|
||||
}
|
||||
|
||||
auto addMessage = [&message](EetMessage *msg, const QString &label){
|
||||
if (message.isEmpty())
|
||||
EetV4ClientConfig clientConfig;
|
||||
clientConfig.endpoint = adapterConfig.endpoint;
|
||||
clientConfig.timeoutMilliseconds = adapterConfig.timeoutMilliseconds;
|
||||
EetV4Client client(clientConfig);
|
||||
EetV4Response response;
|
||||
QString clientError;
|
||||
if (!client.sendSale(request,
|
||||
settings->eetCertificate(),
|
||||
password,
|
||||
&response,
|
||||
&clientError))
|
||||
{
|
||||
message = clientError;
|
||||
voucher->setEetStatus(Voucher::EET_ERROR);
|
||||
update(voucher);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!response.isSuccess() || response.pok.isEmpty())
|
||||
{
|
||||
message = response.message.isEmpty()
|
||||
? QStringLiteral("EET returned an unsuccessful response.")
|
||||
: response.message;
|
||||
voucher->setEetStatus(Voucher::EET_ERROR);
|
||||
update(voucher);
|
||||
return false;
|
||||
}
|
||||
|
||||
voucher->setEetPok(response.pok);
|
||||
voucher->setEetSendDateTime(QDateTime::currentDateTime());
|
||||
voucher->setEetStatus(Voucher::EET_SENT);
|
||||
update(voucher);
|
||||
if (!response.warningCodes.isEmpty())
|
||||
{
|
||||
message = QStringLiteral("EET warning codes: ");
|
||||
for (int i = 0; i < response.warningCodes.size(); ++i)
|
||||
{
|
||||
message = label + "\n";
|
||||
if (i > 0)
|
||||
{
|
||||
message += QStringLiteral(", ");
|
||||
}
|
||||
message += QString::number(response.warningCodes.at(i));
|
||||
}
|
||||
|
||||
message += QString::number(msg->code()) + ": " + msg->message();
|
||||
};
|
||||
|
||||
foreach (EetMessage *msg, sender->resut()->errors()) {
|
||||
addMessage(msg, "Errors:");
|
||||
}
|
||||
|
||||
foreach (EetMessage *msg, sender->resut()->warnings()) {
|
||||
addMessage(msg, "Warnings:");
|
||||
}
|
||||
|
||||
return voucher->eetStatus() == Voucher::EET_SENT;
|
||||
return true;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
@@ -286,15 +295,15 @@ bool ShopService::processEet(VoucherPtr voucher, QString &message)
|
||||
|
||||
void ShopService::setEetOnline(bool online)
|
||||
{
|
||||
#ifdef EET
|
||||
EetSender::m_online = online;
|
||||
#ifdef PRODEJNA_EET_V4
|
||||
eetOnlineState() = online;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool ShopService::isEetOnline()
|
||||
{
|
||||
#ifdef EET
|
||||
return EetSender::m_online;
|
||||
#ifdef PRODEJNA_EET_V4
|
||||
return eetOnlineState();
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
@@ -562,4 +571,3 @@ VoucherSum ShopService::summary(const QString& where) {
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user