29 lines
1.1 KiB
Dart
29 lines
1.1 KiB
Dart
/// Geparster Scan-Code im Format
|
|
/// `<Artikelnummer>;<Kundennummer>;<Belegnummer>`.
|
|
typedef ScanCode = ({String articleNumber, int customerErpId, String beleg});
|
|
|
|
/// Parst das QR-Code-Format `<Artikelnummer>;<Kundennummer>;<Belegnummer>`.
|
|
///
|
|
/// Trimmt jedes Feld, lehnt leere Felder und nicht-numerische
|
|
/// Kundennummern ab. Liefert `null`, wenn das Format nicht stimmt — der
|
|
/// Aufrufer übersetzt das in eine einheitliche „nicht vorgesehen"-Meldung,
|
|
/// damit der Fahrer kein Backstage-Tech-Feedback bekommt.
|
|
///
|
|
/// Geteilt zwischen Beladen-Phase (`LoadingCustomerPage`) und Filial-Abholung
|
|
/// (`FilialePickupScanPage`) — beide nutzen dasselbe Sticker-Format.
|
|
ScanCode? parseScanCode(String raw) {
|
|
final parts = raw.split(';');
|
|
if (parts.length != 3) return null;
|
|
final articleNumber = parts[0].trim();
|
|
final customerStr = parts[1].trim();
|
|
final beleg = parts[2].trim();
|
|
if (articleNumber.isEmpty || beleg.isEmpty) return null;
|
|
final customerErpId = int.tryParse(customerStr);
|
|
if (customerErpId == null) return null;
|
|
return (
|
|
articleNumber: articleNumber,
|
|
customerErpId: customerErpId,
|
|
beleg: beleg,
|
|
);
|
|
}
|