using System;
using System.Collections.Generic;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Media;
using ChronoFlow.Model;
using ChronoFlow.Persistence;
namespace ChronoFlow.View.Admin;
///
/// Ansicht für Admins zum Erstellen neuer Projekte.
/// Wird intern als Zeiteintrag gespeichert.
///
public partial class ProjektErstellenView : UserControl
{
private readonly ViewManager _viewManager;
public ProjektErstellenView() : this(new ViewManager(new ContentControl()))
{
Console.WriteLine("⚠ Parameterloser Konstruktor genutzt. Dummy-ViewManager initialisiert.");
}
public ProjektErstellenView(ViewManager viewManager)
{
InitializeComponent();
_viewManager = viewManager;
try
{
var dbService = new SqliteZeiterfassungsService();
List mitarbeiter = dbService.LadeAlleMitarbeiterNamen();
MitarbeiterDropdown.ItemsSource = mitarbeiter;
ProjektleiterDropdown.ItemsSource = mitarbeiter;
}
catch (Exception ex)
{
Console.WriteLine($"❌ Fehler beim Laden der Mitarbeiterauswahl: {ex.Message}");
FeedbackText.Text = "⚠ Fehler beim Laden der Mitarbeiter.";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
}
}
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
{
string projektname = ProjektnameBox.Text ?? "";
DateTime startdatum = StartdatumPicker.SelectedDate?.Date ?? DateTime.Today;
DateTime enddatum = EnddatumPicker.SelectedDate?.Date ?? DateTime.Today;
string startzeitText = StartzeitBox.Text ?? "00:00";
string endzeitText = EndzeitBox.Text ?? "00:00";
string mitarbeiter = MitarbeiterDropdown.SelectedItem?.ToString() ?? "";
string kommentar = KommentarBox.Text ?? "";
string projektleiter = ProjektleiterDropdown.SelectedItem?.ToString() ?? "";
// 🛑 Pflichtfeldprüfung
if (string.IsNullOrWhiteSpace(projektname) || string.IsNullOrWhiteSpace(mitarbeiter) || string.IsNullOrWhiteSpace(projektleiter))
{
FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen (Projektname, Mitarbeiter, Projektleiter)!";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
if (!TimeSpan.TryParse(startzeitText, out var startzeit))
{
FeedbackText.Text = "⚠ Ungültige Startzeit (Format HH:mm)!";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
if (!TimeSpan.TryParse(endzeitText, out var endzeit))
{
FeedbackText.Text = "⚠ Ungültige Endzeit (Format HH:mm)!";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
DateTime startDateTime = startdatum + startzeit;
DateTime endDateTime = enddatum + endzeit;
try
{
var dbService = new SqliteZeiterfassungsService();
dbService.SpeichereEintrag(new Zeiteintrag
{
Mitarbeiter = mitarbeiter,
Projekt = projektname,
Startzeit = startDateTime,
Endzeit = endDateTime,
Kommentar = kommentar,
Projektleiter = projektleiter,
Erledigt = false
});
FeedbackText.Text = "✅ Projekt erfolgreich gespeichert.";
FeedbackText.Foreground = Brushes.Green;
FeedbackText.IsVisible = true;
// Felder leeren
ProjektnameBox.Text = "";
KommentarBox.Text = "";
StartdatumPicker.SelectedDate = DateTime.Today;
EnddatumPicker.SelectedDate = DateTime.Today;
StartzeitBox.Text = "09:00";
EndzeitBox.Text = "17:00";
MitarbeiterDropdown.SelectedItem = null;
ProjektleiterDropdown.SelectedItem = null;
// Ansicht aktualisieren
if (_viewManager.TryGetView("AdminMain", out var adminView) && adminView != null)
{
adminView.AktualisiereLetzteProjekte();
}
}
catch (Exception ex)
{
FeedbackText.Text = $"❌ Fehler beim Speichern: {ex.Message}";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
Console.WriteLine("❌ Ausnahme beim Speichern:");
Console.WriteLine(ex.ToString());
}
}
private void DemoProjekteButton_Click(object? sender, RoutedEventArgs e)
{
if (MitarbeiterDropdown.SelectedItem is not string mitarbeiterName)
{
FeedbackText.Text = "❗ Bitte zuerst einen Mitarbeiter auswählen.";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
if (ProjektleiterDropdown.SelectedItem is not string projektleiterName)
{
FeedbackText.Text = "❗ Bitte wähle auch einen Projektleiter für die Demo-Projekte.";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
var service = new SqliteZeiterfassungsService();
var heute = DateTime.Today;
var projekte = new List
{
new()
{
Projekt = "Demo: Langfristig (grün)",
Kommentar = "✅ Deadline in mehr als 7 Tagen.",
Startzeit = heute.AddDays(-1).AddHours(9),
Endzeit = heute.AddDays(10).AddHours(17),
Mitarbeiter = mitarbeiterName,
Projektleiter = projektleiterName,
Erledigt = false
},
new()
{
Projekt = "Demo: Mittel (Orange)",
Kommentar = "🟡 Deadline in 3–7 Tagen.",
Startzeit = heute.AddDays(-1).AddHours(9),
Endzeit = heute.AddDays(5).AddHours(17),
Mitarbeiter = mitarbeiterName,
Projektleiter = projektleiterName,
Erledigt = false
},
new()
{
Projekt = "Demo: Kurzfristig (rot)",
Kommentar = "🔴 Deadline in weniger als 3 Tagen.",
Startzeit = heute.AddDays(-1).AddHours(9),
Endzeit = heute.AddDays(1).AddHours(17),
Mitarbeiter = mitarbeiterName,
Projektleiter = projektleiterName,
Erledigt = false
}
};
foreach (var p in projekte)
service.SpeichereEintrag(p);
FeedbackText.Text = "✔️ 3 Demo-Projekte wurden erfolgreich erstellt.";
FeedbackText.Foreground = Brushes.Green;
FeedbackText.IsVisible = true;
}
private void ZurueckButton_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("AdminMain");
}
}