144 lines
4.4 KiB
C#
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.");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|