ChronoFlow/ChronoFlow.View/ZeiterfassungView.axaml.cs
2025-04-27 21:28:33 +02:00

135 lines
4.5 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq; // Wichtig für .Where und .Select
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Media;
using ChronoFlow.Controller;
using ChronoFlow.Model;
using ChronoFlow.Persistence; // Wichtig für SqliteZeiterfassungsService
namespace ChronoFlow.View
{
public partial class ZeiterfassungView : UserControl
{
private readonly ZeiterfassungsController _controller;
private readonly ObservableCollection<Zeiteintrag> _anzeigeEinträge;
private readonly User _user;
public ZeiterfassungView(User user)
{
InitializeComponent();
_user = user;
_controller = new ZeiterfassungsController();
_anzeigeEinträge = new ObservableCollection<Zeiteintrag>();
// ✅ Benutzer aus Datenbank laden und Dropdown füllen
var benutzer = new SqliteZeiterfassungsService().LadeAlleBenutzer();
var nurMitarbeiter = benutzer
.Where(b => b.Role == "Mitarbeiter")
.Select(b => b.Username)
.ToList();
MitarbeiterBoxDropdown.ItemsSource = nurMitarbeiter;
// Einträge aus SQLite laden
var geladeneEintraege = _controller.LadeAlleEintraege();
foreach (var eintrag in geladeneEintraege)
{
_anzeigeEinträge.Add(eintrag);
}
Eintragsliste.ItemsSource = _anzeigeEinträge;
// Eingabeformular nur für Admin sichtbar
if (_user.Role != "Admin" && EingabePanel != null)
{
EingabePanel.IsVisible = false;
}
}
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
{
try
{
string mitarbeiter = MitarbeiterBoxDropdown.SelectedItem?.ToString() ?? "";
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,
Erledigt = false
};
_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;
}
}
}