posSettingsChanges function

Map<String, dynamic> posSettingsChanges(
  1. Map<String, dynamic> before,
  2. Map<String, dynamic> after
)

Was sich zwischen zwei Ständen eines Teils (toJson von Betrieb oder Gerät) geändert hat, als Nutzlast für saveBusiness bzw. saveDevice: nur geänderte Felder (der Server mischt; ein nicht geänderter, hier unbekannter Wert geht so nie verloren). vatRates geht bei einer Änderung als ganze Karte (Nachtrag §11.7.2), shortcuts ebenfalls ganz, aber nur mit den Aktionen, die dieses Paket kennt: so sieht die Doppelbelegungsprüfung die ganze Belegung, und eine unbekannte Aktion bleibt am Server stehen. tipSteps geht nur mit den geänderten Einträgen. Zwilling von posSettingsChanges.

Implementation

Map<String, dynamic> posSettingsChanges(Map<String, dynamic> before, Map<String, dynamic> after) {
  final raus = <String, dynamic>{};
  for (final k in after.keys) {
    final neu = after[k];
    final alt = before[k];
    if (_gleich(alt, neu)) continue;
    if (k == 'shortcuts' && neu is Map) {
      raus[k] = <String, dynamic>{
        for (final e in neu.entries)
          if (posShortcutActions.contains(e.key)) e.key.toString(): e.value,
      };
      continue;
    }
    if (k != 'vatRates' && neu is Map && alt is Map) {
      final teil = <String, dynamic>{
        for (final e in neu.entries)
          if (!_gleich(alt[e.key], e.value)) e.key.toString(): e.value,
      };
      if (teil.isNotEmpty) raus[k] = teil;
      continue;
    }
    raus[k] = neu;
  }
  return raus;
}