posSettingsChanges function
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;
}