143 lines
5.3 KiB
C#
143 lines
5.3 KiB
C#
using System;
|
|
using System.Linq;
|
|
using Avalonia.Controls;
|
|
using Avalonia.Interactivity;
|
|
using Avalonia.Media;
|
|
using ChronoFlow.Model;
|
|
using ChronoFlow.Persistence;
|
|
using ChronoFlow.Security;
|
|
|
|
namespace ChronoFlow.View
|
|
{
|
|
/// <summary>
|
|
/// UI-Logik zum Hinzufügen neuer Benutzer durch einen Admin.
|
|
/// </summary>
|
|
public partial class MitarbeiterHinzufuegenView : UserControl
|
|
{
|
|
public MitarbeiterHinzufuegenView()
|
|
{
|
|
InitializeComponent();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Speichert den eingegebenen Benutzer, wenn alle Pflichtfelder ausgefüllt und der Benutzername noch nicht vergeben ist.
|
|
/// </summary>
|
|
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
|
|
{
|
|
try
|
|
{
|
|
var service = new SqliteZeiterfassungsService();
|
|
|
|
string username = UsernameBox.Text?.Trim() ?? "";
|
|
string password = PasswordBox.Text?.Trim() ?? "";
|
|
string rolle = (RoleBox.SelectedItem as ComboBoxItem)?.Content?.ToString() ?? "";
|
|
string mitarbeiternummer = MitarbeiternummerBox.Text?.Trim() ?? "";
|
|
string abteilung = AbteilungBox.Text?.Trim() ?? "";
|
|
|
|
// Validierung: Pflichtfelder
|
|
if (string.IsNullOrWhiteSpace(username) || string.IsNullOrWhiteSpace(password) || string.IsNullOrWhiteSpace(rolle))
|
|
{
|
|
FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen!";
|
|
FeedbackText.Foreground = Brushes.Red;
|
|
FeedbackText.IsVisible = true;
|
|
return;
|
|
}
|
|
|
|
// Verhindern von doppelten Benutzernamen (Case-Insensitive)
|
|
if (service.LadeAlleBenutzer().Any(u => u.Username.Equals(username, StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
FeedbackText.Text = "❌ Dieser Benutzername ist bereits vergeben.";
|
|
FeedbackText.Foreground = Brushes.Red;
|
|
FeedbackText.IsVisible = true;
|
|
return;
|
|
}
|
|
|
|
// Neuen Benutzer erstellen
|
|
var neuerBenutzer = new User
|
|
{
|
|
Username = username,
|
|
Password = PasswordHasher.HashPassword(password),
|
|
Role = rolle,
|
|
Mitarbeiternummer = mitarbeiternummer,
|
|
Abteilung = abteilung,
|
|
MussPasswortAendern = true
|
|
};
|
|
|
|
// Speichern in Datenbank
|
|
service.ErstelleNeuenBenutzer(neuerBenutzer);
|
|
|
|
FeedbackText.Text = "✅ Mitarbeiter erfolgreich gespeichert.";
|
|
FeedbackText.Foreground = Brushes.Green;
|
|
FeedbackText.IsVisible = true;
|
|
|
|
ClearFields();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
FeedbackText.Text = $"❌ Fehler: {ex.Message}";
|
|
FeedbackText.Foreground = Brushes.Red;
|
|
FeedbackText.IsVisible = true;
|
|
Console.WriteLine("❌ Ausnahme beim Speichern:\n" + ex);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Setzt alle Eingabefelder zurück.
|
|
/// </summary>
|
|
private void ClearFields()
|
|
{
|
|
UsernameBox.Text = "";
|
|
PasswordBox.Text = "";
|
|
MitarbeiternummerBox.Text = "";
|
|
AbteilungBox.Text = "";
|
|
RoleBox.SelectedIndex = -1;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Wechselt zurück zum Admin-Hauptfenster.
|
|
/// </summary>
|
|
private void ZurueckZumDashboard_Click(object? sender, RoutedEventArgs e)
|
|
{
|
|
if (this.VisualRoot is MainWindow mainWindow)
|
|
mainWindow.ShowAdminDashboard();
|
|
else
|
|
Console.WriteLine("⚠️ MainWindow nicht gefunden!");
|
|
}
|
|
|
|
/// <summary>
|
|
/// Erstellt einen zufälligen Test-Mitarbeiter mit dem Passwort "newpassword" (gehasht).
|
|
/// </summary>
|
|
private void DemoBenutzerErstellen_Click(object? sender, RoutedEventArgs e)
|
|
{
|
|
var namen = new[] { "Max Mustermann", "Lena Schmidt", "Tobias Becker", "Julia Klein", "Nico Weber" };
|
|
var zufallsname = namen[new Random().Next(namen.Length)];
|
|
|
|
var service = new SqliteZeiterfassungsService();
|
|
|
|
// Prüfen, ob Name bereits vorhanden ist
|
|
if (service.LadeAlleBenutzer().Any(u => u.Username.Equals(zufallsname, StringComparison.OrdinalIgnoreCase)))
|
|
{
|
|
FeedbackText.Text = "⚠ Demo-Mitarbeiter existiert bereits.";
|
|
FeedbackText.Foreground = Brushes.OrangeRed;
|
|
FeedbackText.IsVisible = true;
|
|
return;
|
|
}
|
|
|
|
// Demo-User erstellen
|
|
var demoUser = new User
|
|
{
|
|
Username = zufallsname,
|
|
Password = PasswordHasher.HashPassword("newpassword"),
|
|
Role = "Mitarbeiter",
|
|
MussPasswortAendern = true
|
|
};
|
|
|
|
service.ErstelleNeuenBenutzer(demoUser);
|
|
|
|
FeedbackText.Text = $"✅ Demo-Mitarbeiter '{zufallsname}' erstellt (Passwort: newpassword)";
|
|
FeedbackText.Foreground = Brushes.Green;
|
|
FeedbackText.IsVisible = true;
|
|
}
|
|
}
|
|
}
|