ChronoFlow/ChronoFlow.View/Mitarbeiter/EmployeeTasksViewModel.axaml.cs
2025-06-21 11:32:41 +02:00

86 lines
2.9 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using ChronoFlow.Model;
using ChronoFlow.Persistence;
namespace ChronoFlow.ViewModels.Mitarbeiter
{
public partial class EmployeeTasksViewModel : ObservableObject
{
private readonly User _benutzer;
private readonly IZeiterfassungsRepository _repository;
private readonly string aktuellerBenutzername;
[ObservableProperty]
private ObservableCollection<Zeiteintrag> eintraege = new();
[ObservableProperty]
private string? statusText;
public bool HatKeineEintraege => Eintraege.Count == 0;
partial void OnEintraegeChanged(ObservableCollection<Zeiteintrag>? oldValue, ObservableCollection<Zeiteintrag> newValue)
{
OnPropertyChanged(nameof(HatKeineEintraege));
}
public EmployeeTasksViewModel(User benutzer, IZeiterfassungsRepository repository)
{
_benutzer = benutzer;
_repository = repository;
aktuellerBenutzername = benutzer.Username;
Console.WriteLine($"[DEBUG] ViewModel erstellt für Benutzer: {aktuellerBenutzername}");
_ = LadeEintraegeAsync(); // Lade Daten automatisch beim Öffnen
}
[RelayCommand]
public async Task LadeEintraegeAsync()
{
var eintraegeAusDb = await _repository.GetEintraegeFuerMitarbeiterAsync(aktuellerBenutzername);
var offene = eintraegeAusDb
.Where(e => !e.Erledigt)
.OrderBy(e => e.Endzeit)
.ToList();
// 🔔 Setze Markierung für geänderte Aufgaben
foreach (var eintrag in offene)
{
eintrag.WurdeSeitLoginBearbeitet = eintrag.LetzteBearbeitung > _benutzer.LetzterLogin;
// 🔍 Debug-Ausgabe zur Prüfung
Console.WriteLine($"[DEBUG] Eintrag {eintrag.Id}: Endzeit={eintrag.Endzeit}, LetzteBearbeitung={eintrag.LetzteBearbeitung}, LetzterLogin={_benutzer.LetzterLogin}, Markiert={eintrag.WurdeSeitLoginBearbeitet}");
}
if (offene.Any(e => e.WurdeSeitLoginBearbeitet))
StatusText = "📢 Es wurden Aufgaben seit Ihrem letzten Login geändert.";
Eintraege = new ObservableCollection<Zeiteintrag>(offene);
}
[RelayCommand]
public async Task SpeichereEintraegeAsync()
{
foreach (var eintrag in Eintraege)
{
await _repository.UpdateStatusUndKommentarAsync(
eintrag.Id,
eintrag.Erledigt,
eintrag.MitarbeiterKommentar
);
}
StatusText = "✅ Änderungen gespeichert.";
await LadeEintraegeAsync(); // automatisch neu laden
}
}
}