QR Scanner final fertig
This commit is contained in:
parent
0c2a83a31f
commit
fda4543775
@ -105,33 +105,26 @@
|
||||
}
|
||||
|
||||
|
||||
protected override void OnInitialized()
|
||||
{
|
||||
var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
|
||||
var query = System.Web.HttpUtility.ParseQueryString(uri.Query);
|
||||
var stationIdStr = query.Get("stationId");
|
||||
if (int.TryParse(stationIdStr, out int stationId))
|
||||
{
|
||||
filter.StationId = stationId;
|
||||
}
|
||||
}
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
var uri = NavManager.ToAbsoluteUri(NavManager.Uri);
|
||||
var query = System.Web.HttpUtility.ParseQueryString(uri.Query);
|
||||
|
||||
// Standardwerte setzen
|
||||
if (int.TryParse(query.Get("customerId"), out int customerId))
|
||||
filter.CustomerId = customerId;
|
||||
|
||||
if (int.TryParse(query.Get("stationId"), out int stationId))
|
||||
filter.StationId = stationId;
|
||||
|
||||
if (int.TryParse(query.Get("filterId"), out int filterId))
|
||||
if (int.TryParse(query.Get("filterId"), out int filterId) && filterId > 0)
|
||||
{
|
||||
var existing = await FilterService.GetFilterByIdAsync(filterId);
|
||||
if (existing != null)
|
||||
{
|
||||
filter = existing;
|
||||
StateHasChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -115,12 +115,45 @@
|
||||
private async Task StartScan() => await JS.InvokeVoidAsync("QRScanner.start");
|
||||
private async Task StopScan() => await JS.InvokeVoidAsync("QRScanner.stop");
|
||||
|
||||
[JSInvokable]
|
||||
public void OnQrDetected(string code)
|
||||
[JSInvokable]
|
||||
public async Task OnQrDetected(string code)
|
||||
{
|
||||
scanResult = code;
|
||||
StateHasChanged();
|
||||
|
||||
// QR-Code bereinigen (falls Leerzeichen oder Zeilenumbrüche drin sind)
|
||||
string qrCode = code.Trim();
|
||||
|
||||
if (string.IsNullOrEmpty(qrCode))
|
||||
{
|
||||
scanResult = code;
|
||||
// TODO: später Filter anhand QR-Code öffnen
|
||||
// Nav.NavigateTo($"/stations/{customerId}/filterdetail/{code}");
|
||||
StateHasChanged();
|
||||
await JS.InvokeVoidAsync("showToast", "Ungültiger QR-Code", "error");
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
// Suche in Offline-DB nach Filter mit diesem QR-Code
|
||||
var filter = await FilterService.GetFilterByQrCodeAsync(qrCode);
|
||||
|
||||
if (filter != null)
|
||||
{
|
||||
await JS.InvokeVoidAsync("showToast", $"Filter gefunden: {filter.Bezeichnung}", "success");
|
||||
|
||||
// Stoppe Kamera sofort
|
||||
await StopScan();
|
||||
|
||||
// Navigiere direkt zur Bearbeitung – mit allen nötigen IDs
|
||||
Nav.NavigateTo($"/filterform?filterId={filter.Id}&customerId={filter.CustomerId}&stationId={filter.StationId}");
|
||||
}
|
||||
else
|
||||
{
|
||||
await JS.InvokeVoidAsync("showToast", $"QR-Code '{qrCode}' nicht in Offline-Daten gefunden", "warning");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
await JS.InvokeVoidAsync("showToast", "Fehler beim Suchen des Filters", "error");
|
||||
Console.WriteLine(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -105,6 +105,54 @@ namespace FilterCair.Client.Services.API
|
||||
return localFilters.FirstOrDefault(f => f.Id == id);
|
||||
}
|
||||
}
|
||||
|
||||
// Füge diese Methode einfach in deine FilterService-Klasse ein:
|
||||
public async Task<FilterModel?> GetFilterByQrCodeAsync(string qrCode)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(qrCode))
|
||||
return null;
|
||||
|
||||
qrCode = qrCode.Trim();
|
||||
|
||||
// Immer zuerst offline suchen – das wollen wir beim QR-Scan ja genau!
|
||||
// Wir laden ALLE Filter aus der IndexedDB (stationId = 0 bedeutet "alle")
|
||||
var allFilters = await _local.GetFiltersAsync(0);
|
||||
|
||||
var found = allFilters.FirstOrDefault(f =>
|
||||
!string.IsNullOrEmpty(f.QRCode) &&
|
||||
f.QRCode.Trim().Equals(qrCode, StringComparison.OrdinalIgnoreCase));
|
||||
|
||||
if (found != null)
|
||||
{
|
||||
Console.WriteLine($"QR-Code '{qrCode}' gefunden → Filter ID {found.Id} ({found.Bezeichnung})");
|
||||
return found;
|
||||
}
|
||||
|
||||
// Optional: Falls online und nicht gefunden → nochmal beim Server nachfragen?
|
||||
// (Für den Techniker vor Ort meist nicht nötig – aber kann man später einbauen)
|
||||
bool isOnline = await IsOnlineAsync();
|
||||
if (isOnline)
|
||||
{
|
||||
try
|
||||
{
|
||||
var fromServer = await _http.GetFromJsonAsync<FilterModel>($"{BaseUrl}/byQr/{qrCode}");
|
||||
if (fromServer != null)
|
||||
{
|
||||
await _local.SaveFiltersAsync(fromServer.StationId, new[] { fromServer }.ToList());
|
||||
return fromServer;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Ignorieren – war nur ein Bonus-Versuch
|
||||
}
|
||||
}
|
||||
|
||||
Console.WriteLine($"QR-Code '{qrCode}' nicht gefunden");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user