using System; using System.Collections.Generic; 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; 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(); List mitarbeiter = dbService.LadeAlleMitarbeiterNamen(); MitarbeiterDropdown.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.Foreground = Brushes.Red; FeedbackText.IsVisible = true; } } private void SpeichernButton_Click(object? sender, RoutedEventArgs e) { 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() ?? ""; // 🛑 Pflichtfeldprüfung if (string.IsNullOrWhiteSpace(projektname) || string.IsNullOrWhiteSpace(mitarbeiter) || string.IsNullOrWhiteSpace(projektleiter)) { 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, Projekt = projektname, Startzeit = startDateTime, Endzeit = endDateTime, Kommentar = kommentar, 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()); } } 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."; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } var service = new SqliteZeiterfassungsService(); var heute = DateTime.Today; 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 = 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 } }; 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"); } }