92 lines
3.0 KiB
C#
92 lines
3.0 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.Mitarbeiter;
|
|
|
|
/// <summary>
|
|
/// ViewModel für die Mitarbeiter-Aufgabenansicht.
|
|
/// Enthält alle Aufgaben für den eingeloggten Benutzer und erlaubt das Speichern von Änderungen.
|
|
/// </summary>
|
|
public partial class EmployeeTasksViewModel : 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 EmployeeTasksViewModel(User benutzer)
|
|
{
|
|
_benutzer = benutzer;
|
|
aktuellerBenutzername = benutzer.Username;
|
|
|
|
controller = new ZeiterfassungsController(); // falls du das oben nicht hast
|
|
_ = LadeEintraegeAsync();
|
|
}
|
|
|
|
|
|
[RelayCommand]
|
|
public async Task LadeEintraegeAsync()
|
|
{
|
|
// 🔄 Einträge synchron laden, aber async verpacken
|
|
var alleEintraege = await Task.Run(() => controller.LadeAlleEintraege());
|
|
|
|
var relevanteEintraege = alleEintraege
|
|
.Where(e => !e.Erledigt &&
|
|
(e.Mitarbeiter == aktuellerBenutzername || 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 = "📢 Es wurden Aufgaben seit Ihrem letzten Login geändert.";
|
|
|
|
Eintraege = new ObservableCollection<Zeiteintrag>(relevanteEintraege);
|
|
}
|
|
|
|
[RelayCommand]
|
|
public async Task SpeichereEintraegeAsync()
|
|
{
|
|
// Achtung: Hier verwendest du noch das Repository, obwohl du oben mit dem Controller arbeitest.
|
|
// Du kannst entweder:
|
|
// A) Das Repository auch im ViewModel übergeben
|
|
// B) Die Methode UpdateStatusUndKommentarAsync auch in den Controller packen
|
|
|
|
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();
|
|
}
|
|
}
|