78 lines
2.6 KiB
C#
78 lines
2.6 KiB
C#
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");
|
||
}
|
||
}
|