ChronoFlow/ChronoFlow.View/Mitarbeiter/ProjektleiterTasksViewModel.cs
2025-06-28 14:27:18 +02:00

76 lines
2.3 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;
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<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 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<Zeiteintrag>(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();
}
}