PosSettings.fromJson constructor
Standard + Gespeichertes in der Drahtform {business, device}. Was
fehlt, bleibt beim Standard; ein Schlüssel, den der Standard nicht
führt, bleibt draußen; ein Wert der inneren Form 0.x fällt auf den
Standard; ein unbekannter englischer Wert bleibt wörtlich erhalten
(PosBusinessSettings.unknownValues).
Zwischenspeicher der Version 9.x: trägt die Map statt business und
device die alten Teile betrieb/geraet (deutsche Schlüssel und
Werte, so schrieb toJson bis 9.x), wird sie Feld für Feld übersetzt
(Tabelle renames-1.0.json). Ein alter Stand geht so beim Update nicht
verloren. Die Tastenkarte wird dabei wie am Server entwirrt
(untangleShortcuts), damit die alten Vorgaben (frei: Mod+F) keine
Doppelbelegung mit den neuen (fullscreen: Mod+F) ergeben. Übrige
9.x-Standardwerte im Stand (terminalPort 20008, kassierenModus
seite) gelten als gesetzt, bis die erste Serverantwort
(getKasseSettings, Benutzerliste) den Stand ersetzt.
Implementation
factory PosSettings.fromJson(Map<String, dynamic>? stored) {
final roh = stored ?? const <String, dynamic>{};
final alt = !roh.containsKey('business') &&
!roh.containsKey('device') &&
(roh.containsKey('betrieb') || roh.containsKey('geraet'));
Map<String, dynamic> teil(String neu, String altName, Map<String, String> schluessel) {
final w = roh[alt ? altName : neu];
if (w is! Map) return const {};
final m = Map<String, dynamic>.from(w);
if (!alt) return m;
final uebersetzt = _ausAltform(m, schluessel);
final tasten = uebersetzt['shortcuts'];
// Der 9.x-Stand trägt die gemischte Tastenkarte samt der alten
// Vorgaben (frei: Mod+F, belege: Mod+E). Wie der Server
// (`untangleShortcuts`): die gespeicherte Wahl gewinnt, eine beanspruchte
// Vorgabe-Taste fällt bei der Aktion, die nicht gespeichert war (Mod+F
// verliert das Vollbild, statt doppelt belegt zu sein).
if (tasten is Map) {
final gespeichert = <String, Object?>{
for (final e in tasten.entries)
if (!legacyShortcutActions.containsKey(e.key)) e.key.toString(): e.value,
};
uebersetzt['shortcuts'] = untangleShortcuts({...posShortcutDefaults, ...gespeichert}, gespeichert);
}
return uebersetzt;
}
return PosSettings(
business: PosBusinessSettings.fromJson(teil('business', 'betrieb', legacyBusinessKeys)),
device: PosDeviceSettings.fromJson(teil('device', 'geraet', legacyDeviceKeys)),
);
}