listRegisterUsersForDevice method

Future<RegisterDeviceUsers> listRegisterUsersForDevice({
  1. required String ownerUid,
  2. required String deviceId,
  3. required String deviceSecret,
})

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