PosSettings.fromJson constructor

PosSettings.fromJson(
  1. Map<String, dynamic>? stored
)

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)),
  );
}