80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
#include "eetv4xml.h"
|
|
|
|
#include <QXmlStreamWriter>
|
|
|
|
namespace
|
|
{
|
|
QString booleanValue(bool value)
|
|
{
|
|
return value ? QStringLiteral("true") : QStringLiteral("false");
|
|
}
|
|
}
|
|
|
|
QByteArray EetV4Xml::serializeSale(const EetV4SaleRequest &request, QString *error)
|
|
{
|
|
QStringList validationErrors;
|
|
if (!request.validate(&validationErrors))
|
|
{
|
|
if (error != nullptr)
|
|
{
|
|
*error = validationErrors.join(QStringLiteral(" "));
|
|
}
|
|
return {};
|
|
}
|
|
|
|
QByteArray output;
|
|
QXmlStreamWriter writer(&output);
|
|
writer.setAutoFormatting(false);
|
|
writer.writeStartDocument(QStringLiteral("1.0"));
|
|
writer.writeStartElement(QStringLiteral("Trzba"));
|
|
writer.writeDefaultNamespace(QStringLiteral("http://fs.gov.cz/eet/schema/v4"));
|
|
|
|
writer.writeStartElement(QStringLiteral("Hlavicka"));
|
|
writer.writeAttribute(QStringLiteral("uuid_zpravy"), request.messageUuid.toString(QUuid::WithoutBraces));
|
|
writer.writeAttribute(QStringLiteral("dat_odesl"), EetV4SaleRequest::formatDateTime(request.sentAt));
|
|
writer.writeAttribute(QStringLiteral("prvni_zaslani"), booleanValue(request.firstSubmission));
|
|
if (request.verificationMode)
|
|
{
|
|
writer.writeAttribute(QStringLiteral("overeni"), QStringLiteral("true"));
|
|
}
|
|
writer.writeEndElement();
|
|
|
|
writer.writeStartElement(QStringLiteral("Data"));
|
|
writer.writeAttribute(QStringLiteral("eic_popl"), request.taxpayerEic);
|
|
if (!request.authorizingTaxpayerEic.isEmpty())
|
|
{
|
|
writer.writeAttribute(QStringLiteral("eic_poverujiciho"), request.authorizingTaxpayerEic);
|
|
}
|
|
if (request.multipleTaxpayerAuthorization)
|
|
{
|
|
writer.writeAttribute(QStringLiteral("povereni_vice_popl"), QStringLiteral("true"));
|
|
}
|
|
writer.writeAttribute(QStringLiteral("id_jednotky"), QString::number(request.unitId));
|
|
writer.writeAttribute(QStringLiteral("id_pokl"), request.cashRegisterId);
|
|
writer.writeAttribute(QStringLiteral("porad_cis"), request.receiptNumber);
|
|
writer.writeAttribute(QStringLiteral("dat_trzby"), EetV4SaleRequest::formatDateTime(request.saleAt));
|
|
writer.writeAttribute(QStringLiteral("celk_trzba"), request.totalSale.toString());
|
|
if (request.hasIntendedSettlement)
|
|
{
|
|
writer.writeAttribute(QStringLiteral("urceno_cerp_zuct"), request.intendedSettlement.toString());
|
|
}
|
|
if (request.hasSettlement)
|
|
{
|
|
writer.writeAttribute(QStringLiteral("cerp_zuct"), request.settlement.toString());
|
|
}
|
|
writer.writeEndElement();
|
|
|
|
writer.writeEndElement();
|
|
writer.writeEndDocument();
|
|
|
|
if (writer.hasError())
|
|
{
|
|
if (error != nullptr)
|
|
{
|
|
*error = QStringLiteral("Failed to serialize the EET v4 XML document.");
|
|
}
|
|
return {};
|
|
}
|
|
return output;
|
|
}
|