153 lines
4.9 KiB
C#
153 lines
4.9 KiB
C#
using System;
|
||
using System.Collections.ObjectModel;
|
||
using System.Linq;
|
||
using Avalonia.Controls;
|
||
using Avalonia.Interactivity;
|
||
using Avalonia.Input;
|
||
using ChronoFlow.Model;
|
||
using ChronoFlow.Persistence;
|
||
|
||
namespace ChronoFlow.View.Admin;
|
||
|
||
/// <summary>
|
||
/// Diese View zeigt alle noch nicht abgeschlossenen Projekte.
|
||
/// Admins können Projekte bearbeiten, löschen oder abschließen.
|
||
/// </summary>
|
||
public partial class AlleProjekteView : UserControl
|
||
{
|
||
private readonly ViewManager? _viewManager;
|
||
private readonly ObservableCollection<Zeiteintrag> _alleProjekte = new();
|
||
private readonly SqliteZeiterfassungsService _dbService = new();
|
||
|
||
/// <summary>
|
||
/// Öffentlicher, parameterloser Konstruktor – notwendig für Avalonia XAML-Runtime (AVLN0005).
|
||
/// Wird nur verwendet, wenn kein ViewManager übergeben wird.
|
||
/// </summary>
|
||
public AlleProjekteView()
|
||
{
|
||
InitializeComponent();
|
||
Console.WriteLine("⚠ AlleProjekteView mit Standard-Konstruktor initialisiert.");
|
||
LadeAlleProjekte();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Konstruktor mit ViewManager zur Navigation (z.B. zurück zum Admin-Dashboard).
|
||
/// </summary>
|
||
public AlleProjekteView(ViewManager viewManager)
|
||
{
|
||
InitializeComponent();
|
||
_viewManager = viewManager;
|
||
LadeAlleProjekte();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Lädt alle nicht erledigten Projekte aus der Datenbank und zeigt sie in der Liste an.
|
||
/// </summary>
|
||
private void LadeAlleProjekte()
|
||
{
|
||
|
||
try
|
||
{
|
||
_alleProjekte.Clear();
|
||
var alle = _dbService.LadeAlleZeiteintraege();
|
||
Console.WriteLine($"🧪 Aus DB geladen: {alle.Count} Einträge");
|
||
|
||
foreach (var e in alle)
|
||
Console.WriteLine($"➡️ {e.Projekt} | {e.Mitarbeiter} | {e.Projektleiter}");
|
||
|
||
var ausDb = alle
|
||
//.Where(p => !p.Erledigt)
|
||
.OrderBy(p => p.Endzeit)
|
||
.ToList();
|
||
|
||
foreach (var eintrag in ausDb)
|
||
_alleProjekte.Add(eintrag);
|
||
|
||
ProjekteListe.ItemsSource = _alleProjekte;
|
||
|
||
Console.WriteLine($"🔄 {ausDb.Count} offene Projekte geladen.");
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
Console.WriteLine($"❌ Fehler beim Laden der Projekte: {ex.Message}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Filtert die Projektliste nach Projekt- oder Mitarbeitername bei Tasteneingabe im Suchfeld.
|
||
/// </summary>
|
||
private void Suchfeld_KeyUp(object? sender, KeyEventArgs e)
|
||
{
|
||
var text = Suchfeld?.Text?.ToLower() ?? "";
|
||
|
||
ProjekteListe.ItemsSource = _alleProjekte
|
||
.Where(p => (p.Projekt?.ToLower().Contains(text) ?? false) ||
|
||
(p.Mitarbeiter?.ToLower().Contains(text) ?? false))
|
||
.ToList();
|
||
}
|
||
|
||
/// <summary>
|
||
/// Öffnet einen Dialog zum Bearbeiten des ausgewählten Projekts.
|
||
/// Änderungen werden gespeichert und die Liste neu geladen.
|
||
/// </summary>
|
||
private async void Bearbeiten_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button button && button.Tag is Zeiteintrag projekt)
|
||
{
|
||
var dialog = new ProjektBearbeitenDialog(projekt);
|
||
|
||
if (this.VisualRoot is Window parentWindow)
|
||
{
|
||
var updatedProjekt = await dialog.ShowDialog<Zeiteintrag>(parentWindow);
|
||
|
||
if (updatedProjekt != null)
|
||
{
|
||
_dbService.UpdateProjekt(updatedProjekt);
|
||
LadeAlleProjekte();
|
||
Console.WriteLine($"✏️ Projekt aktualisiert: {updatedProjekt.Projekt}");
|
||
}
|
||
}
|
||
else
|
||
{
|
||
Console.WriteLine("❌ Bearbeiten_Click: VisualRoot ist kein Window.");
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Löscht das ausgewählte Projekt dauerhaft aus der Datenbank.
|
||
/// </summary>
|
||
private void Loeschen_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button button && button.Tag is Zeiteintrag projekt)
|
||
{
|
||
_dbService.LoescheProjekt(projekt.Id);
|
||
LadeAlleProjekte();
|
||
Console.WriteLine($"🗑️ Projekt gelöscht: {projekt.Projekt}");
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Markiert ein Projekt als erledigt (abgeschlossen) und aktualisiert die Anzeige.
|
||
/// </summary>
|
||
private void Abschliessen_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
if (sender is Button button && button.Tag is Zeiteintrag projekt)
|
||
{
|
||
projekt.Erledigt = true;
|
||
_dbService.UpdateProjekt(projekt);
|
||
|
||
Console.WriteLine($"✅ Projekt abgeschlossen: {projekt.Projekt}");
|
||
LadeAlleProjekte();
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// Navigiert zurück zur Admin-Startansicht.
|
||
/// </summary>
|
||
private void ZurueckButton_Click(object? sender, RoutedEventArgs e)
|
||
{
|
||
_viewManager?.Show("AdminMain");
|
||
}
|
||
}
|