diff --git a/ChronoFlow.View/Admin/ProjektErstellenView.axaml b/ChronoFlow.View/Admin/ProjektErstellenView.axaml index b71adcd..1fb5f3e 100644 --- a/ChronoFlow.View/Admin/ProjektErstellenView.axaml +++ b/ChronoFlow.View/Admin/ProjektErstellenView.axaml @@ -35,13 +35,28 @@ - - - - - - - + + + + + + + + + + + + + + diff --git a/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs b/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs index a67084f..ca6baf0 100644 --- a/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs +++ b/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Media; @@ -31,63 +32,76 @@ public partial class ProjektErstellenView : UserControl var dbService = new SqliteZeiterfassungsService(); List mitarbeiter = dbService.LadeAlleMitarbeiterNamen(); - MitarbeiterDropdown.ItemsSource = mitarbeiter; - ProjektleiterDropdown.ItemsSource = mitarbeiter; + // 🔍 Konsolenausgabe zur Kontrolle + if (mitarbeiter is { Count: > 0 }) + { + Console.WriteLine("✅ Mitarbeitende erfolgreich geladen:"); + foreach (var name in mitarbeiter) + { + Console.WriteLine($"- {name}"); + } + } + else + { + Console.WriteLine("⚠️ Achtung: Mitarbeitendenliste ist leer."); + } + + // Items in GUI setzen + MitarbeiterListBox!.ItemsSource = mitarbeiter; + ProjektleiterDropdown!.ItemsSource = mitarbeiter; } catch (Exception ex) { Console.WriteLine($"❌ Fehler beim Laden der Mitarbeiterauswahl: {ex.Message}"); - FeedbackText.Text = "⚠ Fehler beim Laden der Mitarbeiter."; + FeedbackText!.Text = "⚠ Fehler beim Laden der Mitarbeiter."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; } } + 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 = MitarbeiterListBox?.SelectedItems?.Cast().ToList() ?? new List(); + + if (string.IsNullOrWhiteSpace(projektname) || ausgewaehlteMitarbeiter.Count == 0 || string.IsNullOrWhiteSpace(projektleiter)) { - 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 mitarbeiter = MitarbeiterDropdown.SelectedItem?.ToString() ?? ""; - string kommentar = KommentarBox.Text ?? ""; - string projektleiter = ProjektleiterDropdown.SelectedItem?.ToString() ?? ""; + FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen (Projektname, mindestens ein Mitarbeiter, Projektleiter)!"; + FeedbackText.Foreground = Brushes.Red; + FeedbackText.IsVisible = true; + return; + } - // 🛑 Pflichtfeldprüfung - if (string.IsNullOrWhiteSpace(projektname) || string.IsNullOrWhiteSpace(mitarbeiter) || string.IsNullOrWhiteSpace(projektleiter)) + 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 einzelnerMitarbeiter in ausgewaehlteMitarbeiter) { - FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen (Projektname, Mitarbeiter, Projektleiter)!"; - FeedbackText.Foreground = Brushes.Red; - FeedbackText.IsVisible = true; - return; - } - - if (!TimeSpan.TryParse(startzeitText, out var startzeit)) - { - FeedbackText.Text = "⚠ Ungültige Startzeit (Format HH:mm)!"; - FeedbackText.Foreground = Brushes.Red; - FeedbackText.IsVisible = true; - return; - } - - if (!TimeSpan.TryParse(endzeitText, out var endzeit)) - { - FeedbackText.Text = "⚠ Ungültige Endzeit (Format HH:mm)!"; - FeedbackText.Foreground = Brushes.Red; - FeedbackText.IsVisible = true; - return; - } - - DateTime startDateTime = startdatum + startzeit; - DateTime endDateTime = enddatum + endzeit; - - try - { - var dbService = new SqliteZeiterfassungsService(); dbService.SpeichereEintrag(new Zeiteintrag { - Mitarbeiter = mitarbeiter, + Mitarbeiter = einzelnerMitarbeiter, Projekt = projektname, Startzeit = startDateTime, Endzeit = endDateTime, @@ -95,47 +109,38 @@ public partial class ProjektErstellenView : UserControl Projektleiter = projektleiter, Erledigt = false }); - - FeedbackText.Text = "✅ Projekt erfolgreich gespeichert."; - FeedbackText.Foreground = Brushes.Green; - FeedbackText.IsVisible = true; - - // Felder leeren - ProjektnameBox.Text = ""; - KommentarBox.Text = ""; - StartdatumPicker.SelectedDate = DateTime.Today; - EnddatumPicker.SelectedDate = DateTime.Today; - StartzeitBox.Text = "09:00"; - EndzeitBox.Text = "17:00"; - MitarbeiterDropdown.SelectedItem = null; - ProjektleiterDropdown.SelectedItem = null; - - // Ansicht aktualisieren - 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.ToString()); } + + 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"; + MitarbeiterListBox.SelectedItems?.Clear(); + MitarbeiterListBox.SelectedIndex = -1; + ProjektleiterDropdown.SelectedItem = null; + + 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.ToString()); + } +} + private void DemoProjekteButton_Click(object? sender, RoutedEventArgs e) { - if (MitarbeiterDropdown.SelectedItem is not string mitarbeiterName) - { - FeedbackText.Text = "❗ Bitte zuerst einen Mitarbeiter auswählen."; - FeedbackText.Foreground = Brushes.Red; - FeedbackText.IsVisible = true; - return; - } - if (ProjektleiterDropdown.SelectedItem is not string projektleiterName) { FeedbackText.Text = "❗ Bitte wähle auch einen Projektleiter für die Demo-Projekte."; @@ -144,45 +149,57 @@ public partial class ProjektErstellenView : UserControl return; } + if (MitarbeiterListBox.SelectedItems?.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; - var projekte = new List + var mitarbeiter = MitarbeiterListBox?.SelectedItems?.Cast().ToList() ?? new List(); + foreach (var name in mitarbeiter) { - new() + var projekte = new List { - 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 = mitarbeiterName, - 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 = mitarbeiterName, - 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 = mitarbeiterName, - Projektleiter = projektleiterName, - Erledigt = false - } - }; + 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); + foreach (var p in projekte) + service.SpeichereEintrag(p); + } FeedbackText.Text = "✔️ 3 Demo-Projekte wurden erfolgreich erstellt."; FeedbackText.Foreground = Brushes.Green;