@page "/standorte" @using Microsoft.EntityFrameworkCore @using TrafagSalesExporter.Data @using TrafagSalesExporter.Services @inject IDbContextFactory DbFactory @inject HanaQueryService HanaService @inject ISnackbar Snackbar @inject IDialogService DialogService Standorte Standorte @* HANA Server Section *@ HANA Server Server hinzufügen Name Host Port Username Aktionen @context.Name @context.Host @context.Port @context.Username @* Sites Section *@ Standorte (Sites) Neuen Standort hinzufügen Land TSC Schema Server Aktiv Aktionen @context.Land @context.TSC @context.Schema @(context.HanaServer?.Name ?? "-") @if (context.IsActive) { } else { } @* Server Dialog *@ @(_editingServer.Id == 0 ? "Server hinzufügen" : "Server bearbeiten") Abbrechen Speichern @* Site Dialog *@ @(_editingSite.Id == 0 ? "Standort hinzufügen" : "Standort bearbeiten") @foreach (var s in _servers) { @s.Name } Abbrechen Speichern @code { private List _servers = new(); private List _sites = new(); private HanaServer _editingServer = new(); private Site _editingSite = new(); private bool _serverDialogVisible; private bool _siteDialogVisible; private readonly DialogOptions _dialogOptions = new() { MaxWidth = MaxWidth.Small, FullWidth = true }; protected override async Task OnInitializedAsync() { await LoadDataAsync(); } private async Task LoadDataAsync() { using var db = await DbFactory.CreateDbContextAsync(); _servers = await db.HanaServers.OrderBy(s => s.Name).ToListAsync(); _sites = await db.Sites.Include(s => s.HanaServer).OrderBy(s => s.Land).ToListAsync(); } // Server CRUD private void AddServer() { _editingServer = new HanaServer { Port = 30015 }; _serverDialogVisible = true; } private void EditServer(HanaServer server) { _editingServer = new HanaServer { Id = server.Id, Name = server.Name, Host = server.Host, Port = server.Port, Username = server.Username, Password = server.Password, DatabaseName = server.DatabaseName, UseSsl = server.UseSsl, ValidateCertificate = server.ValidateCertificate, AdditionalParams = server.AdditionalParams }; _serverDialogVisible = true; } private async Task SaveServer() { using var db = await DbFactory.CreateDbContextAsync(); if (_editingServer.Id == 0) { db.HanaServers.Add(_editingServer); } else { var existing = await db.HanaServers.FindAsync(_editingServer.Id); if (existing is not null) { existing.Name = _editingServer.Name; existing.Host = _editingServer.Host; existing.Port = _editingServer.Port; existing.Username = _editingServer.Username; existing.Password = _editingServer.Password; existing.DatabaseName = _editingServer.DatabaseName; existing.UseSsl = _editingServer.UseSsl; existing.ValidateCertificate = _editingServer.ValidateCertificate; existing.AdditionalParams = _editingServer.AdditionalParams; } } await db.SaveChangesAsync(); _serverDialogVisible = false; await LoadDataAsync(); Snackbar.Add("Server gespeichert", Severity.Success); } private async Task DeleteServer(HanaServer server) { var result = await DialogService.ShowMessageBox( "Server löschen", $"Server '{server.Name}' wirklich löschen?", yesText: "Löschen", cancelText: "Abbrechen"); if (result != true) return; using var db = await DbFactory.CreateDbContextAsync(); var entity = await db.HanaServers.FindAsync(server.Id); if (entity is not null) { db.HanaServers.Remove(entity); await db.SaveChangesAsync(); } await LoadDataAsync(); Snackbar.Add("Server gelöscht", Severity.Info); } private async Task TestServerConnection(HanaServer server) { try { await Task.Run(() => HanaService.TestConnection(server)); Snackbar.Add($"Verbindung zu '{server.Name}' erfolgreich!", Severity.Success); } catch (Exception ex) { Snackbar.Add($"Verbindung fehlgeschlagen: {ex.Message}", Severity.Error); } } // Site CRUD private void AddSite() { _editingSite = new Site { IsActive = true, HanaServerId = _servers.FirstOrDefault()?.Id ?? 0 }; _siteDialogVisible = true; } private void EditSite(Site site) { _editingSite = new Site { Id = site.Id, HanaServerId = site.HanaServerId, Schema = site.Schema, TSC = site.TSC, Land = site.Land, IsActive = site.IsActive }; _siteDialogVisible = true; } private async Task SaveSite() { using var db = await DbFactory.CreateDbContextAsync(); if (_editingSite.Id == 0) { db.Sites.Add(_editingSite); } else { var existing = await db.Sites.FindAsync(_editingSite.Id); if (existing is not null) { existing.HanaServerId = _editingSite.HanaServerId; existing.Schema = _editingSite.Schema; existing.TSC = _editingSite.TSC; existing.Land = _editingSite.Land; existing.IsActive = _editingSite.IsActive; } } await db.SaveChangesAsync(); _siteDialogVisible = false; await LoadDataAsync(); Snackbar.Add("Standort gespeichert", Severity.Success); } private async Task DeleteSite(Site site) { var result = await DialogService.ShowMessageBox( "Standort löschen", $"Standort '{site.Land}' wirklich löschen?", yesText: "Löschen", cancelText: "Abbrechen"); if (result != true) return; using var db = await DbFactory.CreateDbContextAsync(); var entity = await db.Sites.FindAsync(site.Id); if (entity is not null) { db.Sites.Remove(entity); await db.SaveChangesAsync(); } await LoadDataAsync(); Snackbar.Add("Standort gelöscht", Severity.Info); } }