ChronoFlow/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs
2025-06-28 14:27:18 +02:00

197 lines
7.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
/// <summary>
/// Ansicht für Admins zum Erstellen neuer Projekte.
/// Wird intern als Zeiteintrag gespeichert.
/// </summary>
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<string> 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<AdminMainView>("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<Zeiteintrag>
{
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 37 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");
}
}