ChronoFlow/ChronoFlow.View/Admin/AbgeschlosseneProjekteView.axaml.cs
2025-06-28 14:27:18 +02:00

78 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
/// <summary>
/// Zeigt eine Liste aller abgeschlossenen Projekte an.
/// Ermöglicht Suche und Navigation zurück zum Admin-Dashboard.
/// </summary>
public partial class AbgeschlosseneProjekteView : UserControl
{
private readonly ViewManager? _viewManager; // Nur gesetzt, wenn Konstruktor mit Parameter verwendet wird
private readonly ObservableCollection<Zeiteintrag> _abgeschlosseneProjekte = new();
private readonly SqliteZeiterfassungsService _dbService = new();
/// <summary>
/// Öffentlicher, parameterloser Konstruktor für Avalonia (zur Laufzeit erforderlich).
/// Wird z.B. vom XAML-Loader genutzt, daher AVLN0005-Warnung ohne ihn.
/// </summary>
public AbgeschlosseneProjekteView()
{
InitializeComponent();
LadeAbgeschlosseneProjekte();
}
/// <summary>
/// Konstruktor mit ViewManager zur Navigation wird typischerweise aus Code aufgerufen.
/// </summary>
public AbgeschlosseneProjekteView(ViewManager viewManager)
{
InitializeComponent();
_viewManager = viewManager;
LadeAbgeschlosseneProjekte();
}
/// <summary>
/// Lädt alle abgeschlossenen Projekte aus der Datenbank
/// und aktualisiert die Liste in der Benutzeroberfläche.
/// </summary>
private void LadeAbgeschlosseneProjekte()
{
_abgeschlosseneProjekte.Clear();
var ausDb = _dbService.LadeAbgeschlosseneProjekte();
foreach (var eintrag in ausDb)
_abgeschlosseneProjekte.Add(eintrag);
AbgeschlosseneListe.ItemsSource = _abgeschlosseneProjekte;
}
/// <summary>
/// Wird aufgerufen, wenn eine Taste im Suchfeld gedrückt wird.
/// Filtert die Liste der Projekte anhand von Projektname oder Mitarbeitername.
/// </summary>
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();
}
/// <summary>
/// Navigiert zurück zur Admin-Hauptansicht (z.B. Dashboard).
/// </summary>
private void ZurueckButton_Click(object? sender, RoutedEventArgs e)
{
_viewManager?.Show("AdminMain");
}
}