197 lines
7.0 KiB
C#
197 lines
7.0 KiB
C#
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 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");
|
||
}
|
||
}
|