getPaperFromReceipt static method
- KasseneckReceipt receipt,
- KeckPaperSize paperSize, {
- QrPrintMode qrMode = QrPrintMode.imageRaster,
- QrModulGroesse qrGroesse = QrModulGroesse.auto,
- @Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.') DruckLogo? logo,
- @Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.') bool marke = false,
Setzt receipt als Beleg und gibt das fertige Papier zurueck -- die
eine Stelle, an der PrintPaper fuer einen Beleg entsteht.
Der Rueckgabewert traegt neben bytes und myPosPaper auch
PrintPaper.qrFehler; dieser Weg ruehrt letzterQrFehler nicht an und
ist damit frei von globalem Zustand.
Das Logo kommt aus receipt.logoUrl -- logo greift nur noch als
Rueckfallebene fuer Belege ohne Logo-Adresse. Fuer paperSize muss es
gerastert sein (ladeDruckLogo(url, stufe, paperSize)); passt ein
DruckLogo nicht (z. B. fuer eine andere Papierbreite gerastert), gilt:
kommt es selbst aus receipt.logoUrl, druckt der Beleg ohne Logo weiter --
ein Datenfehler am Konto darf den Bon nicht verhindern. Nur ein
ausdruecklich uebergebenes logo laesst den Druck mit ArgumentError
abbrechen, bevor ein Byte entsteht.
Implementation
static Future<PrintPaper> getPaperFromReceipt(
KasseneckReceipt receipt,
KeckPaperSize paperSize, {
QrPrintMode qrMode = QrPrintMode.imageRaster,
QrModulGroesse qrGroesse = QrModulGroesse.auto,
@Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.')
DruckLogo? logo,
@Deprecated('Das Logo kommt aus dem Beleg (logoUrl); dieser Parameter greift nur ohne Adresse.')
bool marke = false,
}) async {
final PrintPaper paper =
PrintPaper(paperSize: paperSize, profile: KeckPrinterService.profile ?? CapabilityProfile());
final BelegLayout? layout = receipt.layout;
if (layout != null && receipt.layoutIstVollstaendig) {
final bool belegTraegtLogo = receipt.logoUrl != null && receipt.logoUrl!.isNotEmpty;
DruckLogo? logoAusBeleg;
if (belegTraegtLogo) {
try {
logoAusBeleg = await logoLader(receipt.logoUrl, receipt.logoStufe, paperSize);
} catch (_) {
// Ein Logo, das nicht kommt, ist kein Druckfehler: der Beleg steht
// laengst in der Signaturkette, der Bon muss hinaus.
logoAusBeleg = null;
}
}
// Traegt der Beleg eine Adresse, entscheidet AUSSCHLIESSLICH sie -- auch
// wenn der Abruf scheiterte. Sonst stuende auf dem Bon ein anderes Logo
// als im PDF und in der Online-Ansicht, und genau das soll nie wieder
// auseinanderlaufen.
final DruckLogo? wirksamesLogo = belegTraegtLogo ? logoAusBeleg : logo;
final bool wirksameMarke = receipt.showKreiseckLogo || marke;
// [wirksamesLogo] und [wirksameMarke] gelten nur fuer das Blatt; der
// Altweg kennt sein eigenes Logo (`receipt.logo`) und Branding
// (`showKreiseckLogo`).
try {
await paper.setBelegBlatt(layout,
logo: wirksamesLogo, marke: wirksameMarke, qrMode: qrMode, qrGroesse: qrGroesse);
} on ArgumentError {
// [setBelegBlatt] wirft nur ueber ein gesetztes Logo -- diese Pruefung
// war fuer den AUFRUFER gedacht, der ein eigenes Raster mitbringt. Kommt
// das Logo hier stattdessen selbst aus dem Beleg (Kontodaten), darf ein
// Datenfehler dort nicht den ganzen Bon verhindern, den gesetzlich
// vorgeschriebenen QR eingeschlossen: der Bon druckt dann ohne Logo.
// Ein ausdruecklich uebergebenes [logo] (die veraltete Rueckfallebene)
// bleibt hart -- wer ein Raster mitbringt, soll erfahren, dass es nicht passt.
if (!belegTraegtLogo) rethrow;
await paper.setBelegBlatt(layout,
marke: wirksameMarke, qrMode: qrMode, qrGroesse: qrGroesse);
}
} else {
await paper.setKeckReceipt(receipt, qrMode: qrMode, qrGroesse: qrGroesse);
}
return paper;
}