setKeckReceipt method
Implementation
Future setKeckReceipt(KasseneckReceipt receipt, {bool qrAsImage = false}) async {
if (KeckPrinterService.profile == null) {
throw Exception('Printer not initialized');
}
bytes.clear();
if (receipt.logo != null) {
Image image = decodeImage(receipt.logo!)!;
Image resized = copyResize(image, width: paperSize.imageWidth);
addImage(resized);
addFeed();
}
addText(receipt.companyName, styles: PosStyles(align: PosAlign.center, bold: true));
addText(receipt.street, styles: PosStyles(align: PosAlign.center));
addText('${receipt.zip} ${receipt.city}', styles: PosStyles(align: PosAlign.center));
addText(receipt.uid, styles: PosStyles(align: PosAlign.center));
addText(receipt.phone, styles: PosStyles(align: PosAlign.center));
if (receipt.customerDetails.isNotEmpty) {
addFeed();
for (int i = 0; i < receipt.customerDetails.length; i++) {
if (i == 0) {
addDoubleText('Kunde:', receipt.customerDetails[i], leftWidth: 5, rightWidth: 7);
} else {
addDoubleText('', receipt.customerDetails[i], leftWidth: 1, rightWidth: 11);
}
}
}
addFeed();
addDoubleText('Datum:', receipt.readableTime, leftWidth: 4, rightWidth: 8);
addDoubleText('Kassen-ID:', receipt.cashregisterId);
addDoubleText('Beleg-ID:', receipt.receiptId);
addFeed();
Map<VatRate, List<KasseneckItem>> itemsByVat = {};
for (KasseneckItem item in receipt.items) {
if (itemsByVat[item.vat] == null) {
itemsByVat[item.vat] = [];
}
itemsByVat[item.vat]!.add(item);
String amount = item.quantity.toString().padRight(2);
if (item.quantity
.toString()
.length > 2) {
amount += ' x';
} else {
amount += ' x ';
}
addDoubleText('$amount${item.name.check()}', '${item.singlePrice.toStringAsFixed(2)} ${item.vat.category}', leftWidth: 7, rightWidth: 5);
}
addFeed();
_addTable('MwSt%', 'MwSt', 'Netto', 'Brutto');
itemsByVat.forEach((key, value) {
double brutto = 0;
for (KasseneckItem element in value) {
brutto += element.singlePrice * element.quantity;
}
int mwstSatz = key.rate;
double netto = brutto / (1 + (mwstSatz / 100));
double mwst = brutto - netto;
_addTable('${key.category} ${key.rate}%', mwst.toStringAsFixed(2), netto.toStringAsFixed(2), brutto.toStringAsFixed(2));
});
addFullHorizontalLine();
addDoubleText('Gesamt:', '${receipt.sum.toStringAsFixed(2)} EUR');
addFeed();
if (receipt.legalMessage.isNotEmpty) {
for (String line in receipt.legalMessage) {
addText(line, styles: PosStyles(align: PosAlign.center));
}
addFeed();
}
if (receipt.isSigFailed) {
addText(RKSVService.signatureDeviceDamagedKey, styles: PosStyles(align: PosAlign.center));
addFeed();
}
if (qrAsImage) {
QrPainter painter = QrPainter(
data: receipt.qr,
version: QrVersions.auto,
gapless: true,
);
ByteData? byteData = await painter.toImageData(250);
if (byteData == null) {
if (kDebugMode) {
print('Error decoding image');
}
}
Image? img = decodeImage(byteData!.buffer.asUint8List());
if (img == null) {
if (kDebugMode) {
print('Error decoding image');
}
}
addImage(img!);
} else {
addQrCode(receipt.qr);
}
addFeed();
if (receipt.cardPaymentData != null) {
try {
switch (receipt.creditCardProvider) {
case CreditCardProvider.gpTomAndroid:
case CreditCardProvider.gpTomIos:
_gpTom(receipt.cardPaymentData!);
break;
case CreditCardProvider.hobexCloudApi:
_hobexApi(receipt.cardPaymentData!);
break;
default:
break;
}
addFeed();
} catch (e) {}
}
if (receipt.thanksMessage.isNotEmpty) {
addFeed();
for (String message in receipt.thanksMessage) {
addText(message, styles: PosStyles(align: PosAlign.center));
}
}
addText(receipt.footer1, styles: PosStyles(align: PosAlign.center));
addText(receipt.footer2, styles: PosStyles(align: PosAlign.center));
if (receipt.footer3 != null) {
addText(receipt.footer3!, styles: PosStyles(align: PosAlign.center));
}
if (receipt.footer4 != null) {
addText(receipt.footer4!, styles: PosStyles(align: PosAlign.center));
}
addCut();
}