using System.Collections.ObjectModel; using System.Linq; using Avalonia.Controls; using Avalonia.Input; using Avalonia.Interactivity; using ChronoFlow.Model; using ChronoFlow.Persistence; namespace ChronoFlow.View.Admin; /// /// Zeigt eine Liste aller abgeschlossenen Projekte an. /// Ermöglicht Suche und Navigation zurück zum Admin-Dashboard. /// public partial class AbgeschlosseneProjekteView : UserControl { private readonly ViewManager? _viewManager; // Nur gesetzt, wenn Konstruktor mit Parameter verwendet wird private readonly ObservableCollection _abgeschlosseneProjekte = new(); private readonly SqliteZeiterfassungsService _dbService = new(); /// /// Öffentlicher, parameterloser Konstruktor für Avalonia (zur Laufzeit erforderlich). /// Wird z. B. vom XAML-Loader genutzt, daher AVLN0005-Warnung ohne ihn. /// public AbgeschlosseneProjekteView() { InitializeComponent(); LadeAbgeschlosseneProjekte(); } /// /// Konstruktor mit ViewManager zur Navigation – wird typischerweise aus Code aufgerufen. /// public AbgeschlosseneProjekteView(ViewManager viewManager) { InitializeComponent(); _viewManager = viewManager; LadeAbgeschlosseneProjekte(); } /// /// Lädt alle abgeschlossenen Projekte aus der Datenbank /// und aktualisiert die Liste in der Benutzeroberfläche. /// private void LadeAbgeschlosseneProjekte() { _abgeschlosseneProjekte.Clear(); var ausDb = _dbService.LadeAbgeschlosseneProjekte(); foreach (var eintrag in ausDb) _abgeschlosseneProjekte.Add(eintrag); AbgeschlosseneListe.ItemsSource = _abgeschlosseneProjekte; } /// /// Wird aufgerufen, wenn eine Taste im Suchfeld gedrückt wird. /// Filtert die Liste der Projekte anhand von Projektname oder Mitarbeitername. /// private void Suchfeld_KeyUp(object? sender, KeyEventArgs e) { var text = Suchfeld?.Text?.ToLower() ?? ""; AbgeschlosseneListe.ItemsSource = _abgeschlosseneProjekte .Where(p => (p.Projekt?.ToLower().Contains(text) ?? false) || (p.Mitarbeiter?.ToLower().Contains(text) ?? false)) .ToList(); } /// /// Navigiert zurück zur Admin-Hauptansicht (z. B. Dashboard). /// private void ZurueckButton_Click(object? sender, RoutedEventArgs e) { _viewManager?.Show("AdminMain"); } }