154 lines
5.8 KiB
C#
154 lines
5.8 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)
|
|
{
|
|
string[] vornamen = { "Max", "Lena", "Tobias", "Julia", "Nico", "Emma", "Finn", "Sophie", "Noah", "Laura" };
|
|
string[] nachnamen = { "Mustermann", "Schmidt", "Becker", "Klein", "Weber", "Meier", "Schulz", "Huber", "Lang", "Richter" };
|
|
|
|
var service = new SqliteZeiterfassungsService();
|
|
var existierendeUsernames = service.LadeAlleBenutzer().Select(u => u.Username).ToHashSet(StringComparer.OrdinalIgnoreCase);
|
|
|
|
var rnd = new Random();
|
|
int versuche = 0;
|
|
|
|
while (versuche < 100)
|
|
{
|
|
string vorname = vornamen[rnd.Next(vornamen.Length)];
|
|
string nachname = nachnamen[rnd.Next(nachnamen.Length)];
|
|
string name = $"{vorname} {nachname}";
|
|
|
|
if (!existierendeUsernames.Contains(name))
|
|
{
|
|
var demoUser = new User
|
|
{
|
|
Username = name,
|
|
Password = PasswordHasher.HashPassword("newpassword"),
|
|
Role = "Mitarbeiter",
|
|
MussPasswortAendern = true
|
|
};
|
|
|
|
service.ErstelleNeuenBenutzer(demoUser);
|
|
|
|
FeedbackText.Text = $"✅ Demo-Mitarbeiter '{name}' erstellt (Passwort: newpassword)";
|
|
FeedbackText.Foreground = Brushes.Green;
|
|
FeedbackText.IsVisible = true;
|
|
return;
|
|
}
|
|
|
|
versuche++;
|
|
}
|
|
|
|
FeedbackText.Text = "❌ Fehler: Konnte keinen eindeutigen Demo-Mitarbeiter generieren.";
|
|
FeedbackText.Foreground = Brushes.Red;
|
|
FeedbackText.IsVisible = true;
|
|
}
|
|
}
|
|
}
|