using System; using System.Collections.ObjectModel; using Avalonia.Controls; using Avalonia.Interactivity; using Avalonia.Media; using ChronoFlow.Controller; using ChronoFlow.Model; namespace ChronoFlow.View { public partial class ZeiterfassungView : UserControl { private readonly ZeiterfassungsController _controller; private ObservableCollection _anzeigeEinträge = new(); private readonly User _user; public ZeiterfassungView(User user) { InitializeComponent(); _controller = new ZeiterfassungsController(); _user = user; //ListBox an Collection binden Eintragsliste.ItemsSource = _anzeigeEinträge; //Eingabe-Felder für Nicht-Admins ausblenden if (_user.Role != "Admin") { EingabePanel.IsVisible = false; } } private void SpeichernButton_Click(object? sender, RoutedEventArgs e) { try { string mitarbeiter = MitarbeiterBox.Text ?? string.Empty; DateTime datum = DatumPicker.SelectedDate?.Date ?? DateTime.Today; string startText = StartzeitBox.Text ?? ""; string endText = EndzeitBox.Text ?? ""; if (!TimeSpan.TryParse(startText, out TimeSpan startZeit)) { FeedbackText.Text = "Ungültige Startzeit!"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } if (!TimeSpan.TryParse(endText, out TimeSpan endZeit)) { FeedbackText.Text = "Ungültige Endzeit!"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; return; } var eintrag = new Zeiteintrag { Mitarbeiter = mitarbeiter, Startzeit = datum.Date + startZeit, Endzeit = datum.Date + endZeit, Projekt = ProjektBox.Text, Kommentar = KommentarBox.Text }; _controller.SpeichereEintrag(eintrag); _anzeigeEinträge.Add(eintrag); FeedbackText.Text = "Eintrag gespeichert."; FeedbackText.Foreground = Brushes.Green; FeedbackText.IsVisible = true; } catch (Exception ex) { FeedbackText.Text = $"Fehler: {ex.Message}"; FeedbackText.Foreground = Brushes.Red; FeedbackText.IsVisible = true; } } private void MarkiereErledigt_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.DataContext is Zeiteintrag eintrag) { eintrag.Erledigt = true; RefreshListe(); } } private void MarkiereNichtErledigt_Click(object? sender, RoutedEventArgs e) { if (sender is Button button && button.DataContext is Zeiteintrag eintrag) { eintrag.Erledigt = false; RefreshListe(); } } private void Kommentar_LostFocus(object? sender, RoutedEventArgs e) { if (sender is TextBox tb && tb.DataContext is Zeiteintrag eintrag) { eintrag.MitarbeiterKommentar = tb.Text; } } private void RefreshListe() { Eintragsliste.ItemsSource = null; Eintragsliste.ItemsSource = _anzeigeEinträge; } } }