listRegisterSessionsForDevice method
Welche Sitzungen hält diese Kasse gerade? Für den Anmeldebildschirm,
wenn alle Lizenzplätze belegt sind: statt dass das Backend still die
älteste verdrängt, sieht der Kassier, welche — und gibt ihre Kennung als
takeoverSessionId bei registerUserLogin mit. Ausgewiesen wird sich
über das Gerätegeheimnis wie bei listRegisterUsersForDevice; die Kasse
bestimmt das Backend aus dem Gerät.
Implementation
Future<RegisterSessionsStand> listRegisterSessionsForDevice({
required String ownerUid,
required String deviceId,
required String deviceSecret,
}) async {
const name = Aufrufe.listRegisterSessionsForDevice;
_ausweisPflicht(name, ownerUid, deviceId, deviceSecret);
final daten = await _rufen(name, {
'ownerUid': ownerUid,
'deviceId': deviceId,
'deviceSecret': deviceSecret,
});
final liste = daten['sessions'];
if (liste is! List) {
throw const KasseneckValidationError(name, 'Antwort enthaelt keine Sitzungsliste (data.sessions fehlt)', 'response');
}
final sessions = liste.map((eintrag) {
final roh = eintrag is Map ? Map<String, dynamic>.from(eintrag) : <String, dynamic>{};
final id = roh['id'];
// Ohne Kennung wäre die Zeile nicht wählbar — eine Schaltfläche, die
// nichts tun kann, ist schlimmer als keine.
if (id is! String || id.isEmpty) {
throw const KasseneckValidationError(name, 'Sitzung ohne Kennung in der Antwort (id fehlt)', 'response');
}
final label = roh['deviceLabel'];
final userName = roh['userName'];
final geraet = roh['deviceId'];
return RegisterSession(
id: id,
deviceId: geraet is String && geraet.isNotEmpty ? geraet : null,
deviceLabel: label is String && label.isNotEmpty ? label : 'Kasse',
startedAt: roh['startedAt'] is num ? (roh['startedAt'] as num).toInt() : null,
expiresAt: roh['expiresAt'] is num ? (roh['expiresAt'] as num).toInt() : null,
selbst: roh['selbst'] == true,
// Nur übernehmen, wenn wirklich einer kam: ein leerer String stünde in
// der Oberfläche als namenlose Zeile, statt die Spalte wegzulassen.
userName: userName is String && userName.isNotEmpty ? userName : null,
);
}).toList(growable: false);
final lizenzen = daten['licenses'];
final licenses = lizenzen is num && lizenzen > 0 ? lizenzen.toInt() : 1;
return RegisterSessionsStand(licenses: licenses, sessions: sessions);
}