belegSenden method

Future<Belegmailergebnis> belegSenden({
  1. required String fullReceiptId,
  2. required String an,
  3. String? sprache,
})

Einen bereits ausgestellten Beleg als Link auf die oeffentliche Belegseite an an schicken (sendReceiptEmail).

Der Beleg bleibt dabei byteidentisch: das Backend schreibt den Versand in die Unter-Sammlung receipts/{id}/mails, nie an den Beleg selbst (DEP, BAO §131). Welcher Beleg gemeint ist, sagt fullReceiptId; welche Kasse, entscheidet die angemeldete Sitzung — ein Beleg einer anderen Kasse kommt als beleg_nicht_gefunden zurueck, genau wie ein Beleg, den es nicht gibt.

sprache nimmt das Backend heute entgegen, ohne es auszuwerten (es gibt eine Fassung, Deutsch). Es steht im Vertrag, damit eine zweite Sprache spaeter kein neuer Aufruf wird.

Die Adresse wird hier nicht auf Form geprueft. Es gibt genau eine Adresspruefung, und die steht im Backend; eine zweite, anders strenge wiese Adressen ab, die dort durchgehen — und mit einem Fehlertyp, an dem die Kasse nicht entscheiden kann. Abgewiesen wird hier nur die leere Angabe, die gar keine Adresse ist.

Fachliche Ablehnungen kommen als KasseneckApiError mit einem Code aus belegMailFehlercodes — daran entscheiden, nie am Text.

Implementation

Future<Belegmailergebnis> belegSenden({
  required String fullReceiptId,
  required String an,
  String? sprache,
}) async {
  const name = Aufrufe.sendReceiptEmail;
  final beleg = fullReceiptId.trim();
  final adresse = an.trim();
  if (beleg.isEmpty) {
    throw const KasseneckValidationError(name, 'fullReceiptId fehlt', 'request');
  }
  if (adresse.isEmpty) {
    throw const KasseneckValidationError(name, 'to fehlt', 'request');
  }
  final gewuenschteSprache = sprache?.trim() ?? '';

  // Die Kasse steht im Transport (er legt `cashregisterId` zu jeder Nutzlast)
  // — hier nicht ein zweites Mal, sonst gaebe es zwei Angaben, die sich
  // widersprechen koennten.
  final daten = await transport.rufen(
    name,
    params: {
      'fullReceiptId': beleg,
      'to': adresse,
      if (gewuenschteSprache.isNotEmpty) 'sprache': gewuenschteSprache,
    },
  );

  return Belegmailergebnis.aus(daten, gesendetAn: adresse);
}