Final commit.
This commit is contained in:
28
lib/widget/scanner/scan_code_parser.dart
Normal file
28
lib/widget/scanner/scan_code_parser.dart
Normal file
@ -0,0 +1,28 @@
|
||||
/// 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,
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user