using System; using System.Collections.Generic; using System.Linq; using Avalonia; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Media; using ChronoFlow.Model; using ChronoFlow.Persistence; namespace ChronoFlow.View.Admin; /// /// Ansicht für Admins zum Erstellen neuer Projekte. /// Wird intern als Zeiteintrag gespeichert. /// public partial class ProjektErstellenView : UserControl { private readonly ViewManager _viewManager; private readonly Dictionary _mitarbeiterCheckBoxMap = new(); public ProjektErstellenView() : this(new ViewManager(new ContentControl())) { Console.WriteLine("⚠ Parameterloser Konstruktor genutzt. Dummy-ViewManager initialisiert."); } public ProjektErstellenView(ViewManager viewManager) { InitializeComponent(); _viewManager = viewManager; try { var dbService = new SqliteZeiterfassungsService(); var mitarbeiter = dbService.LadeAlleMitarbeiterNamen(); if (mitarbeiter is { Count: > 0 }) { Console.WriteLine("✅ Mitarbeitende erfolgreich geladen:"); foreach (var name in mitarbeiter) Console.WriteLine("- " + name); ProjektleiterDropdown.ItemsSource = mitarbeiter; // Liste manuell aufbauen und Checkboxen erzeugen _mitarbeiterCheckBoxMap.Clear(); var checkBoxen = new List(); foreach (var name in mitarbeiter) { var cb = new CheckBox { Content = name, Foreground = Brushes.White, FontSize = 14, Margin = new Thickness(4) }; _mitarbeiterCheckBoxMap[name] = cb; checkBoxen.Add(cb); } // ItemsSource der ListBox mit den Checkboxen befüllen MitarbeiterCheckList.ItemsSource = checkBoxen; } else { Console.WriteLine("⚠️ Achtung: Mitarbeitendenliste ist leer."); } } catch (Exception ex) { Console.WriteLine($"❌ Fehler beim Laden der Mitarbeiterauswahl: {ex.Message}"); FeedbackText.Text = "⚠ Fehler beim Laden der Mitarbeiter."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; } } private List ErmittleAusgewaehlteMitarbeiter() { return _mitarbeiterCheckBoxMap .Where(kvp => kvp.Value.IsChecked == true) .Select(kvp => kvp.Key) .ToList(); } private void AlleMitarbeiterAuswaehlen_Click(object? sender, RoutedEventArgs e) { foreach (var cb in _mitarbeiterCheckBoxMap.Values) { cb.IsChecked = true; } } private void KeineMitarbeiterAuswaehlen_Click(object? sender, RoutedEventArgs e) { foreach (var cb in _mitarbeiterCheckBoxMap.Values) { cb.IsChecked = false; } } private void SpeichernButton_Click(object? sender, RoutedEventArgs e) { FeedbackText.IsVisible = false; string projektname = ProjektnameBox.Text ?? ""; DateTime startdatum = StartdatumPicker.SelectedDate?.Date ?? DateTime.Today; DateTime enddatum = EnddatumPicker.SelectedDate?.Date ?? DateTime.Today; string startzeitText = StartzeitBox.Text ?? "00:00"; string endzeitText = EndzeitBox.Text ?? "00:00"; string kommentar = KommentarBox.Text ?? ""; string projektleiter = ProjektleiterDropdown.SelectedItem?.ToString() ?? ""; var ausgewaehlteMitarbeiter = ErmittleAusgewaehlteMitarbeiter(); if (string.IsNullOrWhiteSpace(projektname) || ausgewaehlteMitarbeiter.Count == 0 || string.IsNullOrWhiteSpace(projektleiter)) { FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen (Projektname, mindestens ein Mitarbeiter, Projektleiter)!"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } if (!TimeSpan.TryParse(startzeitText, out var startzeit) || !TimeSpan.TryParse(endzeitText, out var endzeit)) { FeedbackText.Text = "⚠ Ungültige Zeitangaben (Format HH:mm)!"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } DateTime startDateTime = startdatum + startzeit; DateTime endDateTime = enddatum + endzeit; try { var dbService = new SqliteZeiterfassungsService(); foreach (var name in ausgewaehlteMitarbeiter) { dbService.SpeichereEintrag(new Zeiteintrag { Mitarbeiter = name, Projekt = projektname, Startzeit = startDateTime, Endzeit = endDateTime, Kommentar = kommentar, Projektleiter = projektleiter, Erledigt = false }); } FeedbackText.Text = "✅ Projekt erfolgreich gespeichert."; FeedbackText.Foreground = Brushes.Green; FeedbackText.IsVisible = true; ProjektnameBox.Text = ""; KommentarBox.Text = ""; StartdatumPicker.SelectedDate = DateTime.Today; EnddatumPicker.SelectedDate = DateTime.Today; StartzeitBox.Text = "09:00"; EndzeitBox.Text = "17:00"; ProjektleiterDropdown.SelectedItem = null; foreach (var cb in _mitarbeiterCheckBoxMap.Values) cb.IsChecked = false; if (_viewManager.TryGetView("AdminMain", out var adminView) && adminView != null) adminView.AktualisiereLetzteProjekte(); } catch (Exception ex) { FeedbackText.Text = $"❌ Fehler beim Speichern: {ex.Message}"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; Console.WriteLine("❌ Ausnahme beim Speichern:"); Console.WriteLine(ex); } } private void DemoProjekteButton_Click(object? sender, RoutedEventArgs e) { if (ProjektleiterDropdown.SelectedItem is not string projektleiterName) { FeedbackText.Text = "❗ Bitte wähle auch einen Projektleiter für die Demo-Projekte."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } var ausgewaehlteMitarbeiter = ErmittleAusgewaehlteMitarbeiter(); if (ausgewaehlteMitarbeiter.Count == 0) { FeedbackText.Text = "❗ Bitte wähle mindestens einen Mitarbeiter für die Demo-Projekte."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } var service = new SqliteZeiterfassungsService(); var heute = DateTime.Today; foreach (var name in ausgewaehlteMitarbeiter) { var projekte = new List { new() { Projekt = "Demo: Langfristig (grün)", Kommentar = "✅ Deadline in mehr als 7 Tagen.", Startzeit = heute.AddDays(-1).AddHours(9), Endzeit = heute.AddDays(10).AddHours(17), Mitarbeiter = name, Projektleiter = projektleiterName, Erledigt = false }, new() { Projekt = "Demo: Mittel (Orange)", Kommentar = "🟡 Deadline in 3–7 Tagen.", Startzeit = heute.AddDays(-1).AddHours(9), Endzeit = heute.AddDays(5).AddHours(17), Mitarbeiter = name, Projektleiter = projektleiterName, Erledigt = false }, new() { Projekt = "Demo: Kurzfristig (rot)", Kommentar = "🔴 Deadline in weniger als 3 Tagen.", Startzeit = heute.AddDays(-1).AddHours(9), Endzeit = heute.AddDays(1).AddHours(17), Mitarbeiter = name, Projektleiter = projektleiterName, Erledigt = false } }; foreach (var p in projekte) service.SpeichereEintrag(p); } FeedbackText.Text = "✔️ 3 Demo-Projekte wurden erfolgreich erstellt."; FeedbackText.Foreground = Brushes.Green; FeedbackText.IsVisible = true; } private void ZurueckButton_Click(object? sender, RoutedEventArgs e) { _viewManager.Show("AdminMain"); } }