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

153 lines
4.9 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

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;
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");
}
}