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; using ChronoFlow.Controller; namespace ChronoFlow.View.Projektleiter; public partial class ProjektleiterTasksViewModel : ObservableObject { private readonly User _benutzer; private readonly ZeiterfassungsController controller = new(); private readonly string aktuellerBenutzername; [ObservableProperty] private ObservableCollection eintraege = new(); [ObservableProperty] private string? statusText; public bool HatKeineEintraege => Eintraege.Count == 0; partial void OnEintraegeChanged(ObservableCollection? oldValue, ObservableCollection newValue) { OnPropertyChanged(nameof(HatKeineEintraege)); } public ProjektleiterTasksViewModel(User benutzer) { _benutzer = benutzer; aktuellerBenutzername = benutzer.Username; _ = LadeEintraegeAsync(); } [RelayCommand] public async Task LadeEintraegeAsync() { var alleEintraege = await Task.Run(() => controller.LadeAlleEintraege()); var relevanteEintraege = alleEintraege .Where(e => !e.Erledigt && e.Projektleiter == aktuellerBenutzername) .OrderBy(e => e.Endzeit) .ToList(); foreach (var eintrag in relevanteEintraege) { eintrag.WurdeSeitLoginBearbeitet = eintrag.LetzteBearbeitung > _benutzer.VorletzterLogin; } if (relevanteEintraege.Any(e => e.WurdeSeitLoginBearbeitet)) StatusText = "\ud83d\udce2 Es wurden Aufgaben seit Ihrem letzten Login geändert."; Eintraege = new ObservableCollection(relevanteEintraege); } [RelayCommand] public async Task SpeichereEintraegeAsync() { foreach (var eintrag in Eintraege) { await Task.Run(() => { var sqlite = new SqliteZeiterfassungsService(); sqlite.UpdateStatusUndKommentarAsync(eintrag.Id, eintrag.Erledigt, eintrag.MitarbeiterKommentar).Wait(); }); } StatusText = "Änderungen gespeichert."; await LadeEintraegeAsync(); } }