ChronoFlow/ChronoFlow.View/Admin/MitarbeiterListeView.axaml.cs

144 lines
4.4 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using ChronoFlow.Model;
using ChronoFlow.Persistence;
using MessageBox.Avalonia;
using MessageBox.Avalonia.DTO;
using MessageBox.Avalonia.Enums;
namespace ChronoFlow.View.Admin;
public partial class MitarbeiterListeView : UserControl
{
private readonly ViewManager _viewManager;
private readonly ObservableCollection<User> _alleMitarbeiter = new();
private readonly SqliteZeiterfassungsService _dbService = new();
public MitarbeiterListeView(ViewManager viewManager)
{
InitializeComponent();
_viewManager = viewManager;
LadeMitarbeiter();
}
private void LadeMitarbeiter()
{
try
{
var mitarbeiter = _dbService.LadeAlleBenutzer()
.Where(m => m.Role == "Mitarbeiter")
.OrderBy(m => m.Username)
.ToList();
_alleMitarbeiter.Clear();
foreach (var user in mitarbeiter)
_alleMitarbeiter.Add(user);
MitarbeiterListe.ItemsSource = _alleMitarbeiter;
}
catch (Exception ex)
{
Console.WriteLine($"❌ Fehler beim Laden der Mitarbeiter: {ex.Message}");
}
}
private void Suchfeld_KeyUp(object? sender, KeyEventArgs e)
{
var text = Suchfeld?.Text?.ToLower() ?? "";
MitarbeiterListe.ItemsSource = _alleMitarbeiter
.Where(m => m.Username.ToLower().Contains(text))
.ToList();
}
private async void Bearbeiten_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.Tag is User benutzer)
{
var dialog = new MitarbeiterBearbeitenDialog(benutzer);
var updatedUser = await dialog.ShowDialog<User>((Window)this.VisualRoot!);
if (updatedUser != null)
{
updatedUser.Password = benutzer.Password;
updatedUser.Role = benutzer.Role;
updatedUser.OriginalUsername = benutzer.Username; // ← WICHTIG!
_dbService.UpdateBenutzer(updatedUser);
LadeMitarbeiter();
}
}
}
private async void Loeschen_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.Tag is User benutzer)
{
var dialog = new ConfirmDialog($"Möchten Sie den Benutzer '{benutzer.Username}' wirklich löschen?");
var result = await dialog.ShowDialog<bool>((Window)this.VisualRoot!);
if (result)
{
_dbService.LoescheBenutzer(benutzer.Username);
LadeMitarbeiter();
}
}
}
private void ZurueckButton_Click(object? sender, RoutedEventArgs e)
{
try
{
_viewManager.Show("AdminMain");
}
catch (Exception ex)
{
Console.WriteLine($"❌ Fehler beim Zurückspringen: {ex.Message}");
}
}
private async void ResetPasswort_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.Tag is User benutzer)
{
var dialog = new ConfirmDialog($"Soll das Passwort für '{benutzer.Username}' wirklich zurückgesetzt werden?");
var result = await dialog.ShowDialog<bool>((Window)this.VisualRoot!);
if (result)
{
_dbService.ResetBenutzerPasswort(benutzer.Username);
Console.WriteLine($"✅ Passwort für {benutzer.Username} zurückgesetzt.");
}
}
}
private async void PasswortReset_Click(object? sender, RoutedEventArgs e)
{
if (sender is Button button && button.Tag is User benutzer)
{
var dialog = new ConfirmDialog($"Möchten Sie das Passwort für '{benutzer.Username}' wirklich zurücksetzen?");
var result = await dialog.ShowDialog<bool>((Window)this.VisualRoot!);
if (result)
{
benutzer.Password = "newpassword"; // 💡 hier später besser: generiertes oder festgelegtes Initialpasswort
benutzer.MussPasswortAendern = true;
_dbService.UpdateBenutzer(benutzer);
Console.WriteLine($"✅ Passwort für {benutzer.Username} wurde zurückgesetzt.");
}
}
}
}