135 lines
4.5 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|