listRegisterUsersForDevice method
Kassen-Benutzer dieses Betriebs auflisten — die Auswahl des Anmeldebildschirms. Die Antwort trägt nur Kennung, Name und Art: keine Rechte, keine Hashes; gesperrte Benutzer fehlen bereits.
Implementation
Future<RegisterDeviceUsers> listRegisterUsersForDevice({
required String ownerUid,
required String deviceId,
required String deviceSecret,
}) async {
const name = Aufrufe.listRegisterUsersForDevice;
_ausweisPflicht(name, ownerUid, deviceId, deviceSecret);
final daten = await _rufen(name, {
'ownerUid': ownerUid,
'deviceId': deviceId,
'deviceSecret': deviceSecret,
});
final liste = daten['users'];
if (liste is! List) {
throw const KasseneckValidationError(
Aufrufe.listRegisterUsersForDevice, 'Antwort enthaelt keine Benutzerliste (data.users fehlt)', 'response');
}
final users = liste.map((eintrag) {
final roh = eintrag is Map ? Map<String, dynamic>.from(eintrag) : <String, dynamic>{};
return RegisterUserSummary(
// Ein Eintrag ohne Kennung ist nicht anmeldbar — ihn anzuzeigen hieße,
// dem Kassier eine Schaltfläche zu geben, die nichts tun kann.
id: _pflichtfeld(name, roh, 'id'),
name: _text(roh['name']),
kind: roh['kind'] == 'device' ? RegisterUserKind.device : RegisterUserKind.person,
pinPolicyOutdated: roh['pinPolicyOutdated'] == true,
);
}).toList();
final settings = daten['settings'];
final kopf = daten['receiptHeader'];
final kasse = daten['cashregister'];
return RegisterDeviceUsers(
users: users,
policy: _regel(daten['policy']),
loginMode: daten['loginMode'] == 'pin' ? RegisterLoginMode.pin : RegisterLoginMode.selectUser,
locationLock: daten['locationLock'] == true,
testEnvironment: daten['testEnvironment'] == true,
settings: PosSettings.fromJson({
'business': settings is Map ? settings['business'] : null,
'device': settings is Map ? settings['device'] : null,
}),
receiptHeader: kopf is Map ? Map<String, dynamic>.from(kopf) : null,
cashregister: kasse is Map && kasse['ready'] is bool
? RegisterCashregisterState(
ready: kasse['ready'] as bool,
reason: kasse['reason'] is String ? kasse['reason'] as String : null,
// Fehlt oder leer = Standard-Standort (wie npm: nur ein Text mit Inhalt).
stockLocationId: kasse['stockLocationId'] is String && (kasse['stockLocationId'] as String).isNotEmpty
? kasse['stockLocationId'] as String
: null,
)
: null,
);
}