ChronoFlow/ChronoFlow.View/Admin/ProjektErstellenView.axaml.cs
2025-06-29 17:50:02 +02:00

256 lines
8.9 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 System.Linq;
using Avalonia;
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;
private readonly Dictionary<string, CheckBox> _mitarbeiterCheckBoxMap = new();
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();
var mitarbeiter = dbService.LadeAlleMitarbeiterNamen();
if (mitarbeiter is { Count: > 0 })
{
Console.WriteLine("✅ Mitarbeitende erfolgreich geladen:");
foreach (var name in mitarbeiter)
Console.WriteLine("- " + name);
ProjektleiterDropdown.ItemsSource = mitarbeiter;
// Liste manuell aufbauen und Checkboxen erzeugen
_mitarbeiterCheckBoxMap.Clear();
var checkBoxen = new List<CheckBox>();
foreach (var name in mitarbeiter)
{
var cb = new CheckBox
{
Content = name,
Foreground = Brushes.White,
FontSize = 14,
Margin = new Thickness(4)
};
_mitarbeiterCheckBoxMap[name] = cb;
checkBoxen.Add(cb);
}
// ItemsSource der ListBox mit den Checkboxen befüllen
MitarbeiterCheckList.ItemsSource = checkBoxen;
}
else
{
Console.WriteLine("⚠️ Achtung: Mitarbeitendenliste ist leer.");
}
}
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 List<string> ErmittleAusgewaehlteMitarbeiter()
{
return _mitarbeiterCheckBoxMap
.Where(kvp => kvp.Value.IsChecked == true)
.Select(kvp => kvp.Key)
.ToList();
}
private void AlleMitarbeiterAuswaehlen_Click(object? sender, RoutedEventArgs e)
{
foreach (var cb in _mitarbeiterCheckBoxMap.Values)
{
cb.IsChecked = true;
}
}
private void KeineMitarbeiterAuswaehlen_Click(object? sender, RoutedEventArgs e)
{
foreach (var cb in _mitarbeiterCheckBoxMap.Values)
{
cb.IsChecked = false;
}
}
private void SpeichernButton_Click(object? sender, RoutedEventArgs e)
{
FeedbackText.IsVisible = false;
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 kommentar = KommentarBox.Text ?? "";
string projektleiter = ProjektleiterDropdown.SelectedItem?.ToString() ?? "";
var ausgewaehlteMitarbeiter = ErmittleAusgewaehlteMitarbeiter();
if (string.IsNullOrWhiteSpace(projektname) || ausgewaehlteMitarbeiter.Count == 0 || string.IsNullOrWhiteSpace(projektleiter))
{
FeedbackText.Text = "⚠ Bitte alle Pflichtfelder ausfüllen (Projektname, mindestens ein Mitarbeiter, Projektleiter)!";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
if (!TimeSpan.TryParse(startzeitText, out var startzeit) || !TimeSpan.TryParse(endzeitText, out var endzeit))
{
FeedbackText.Text = "⚠ Ungültige Zeitangaben (Format HH:mm)!";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
DateTime startDateTime = startdatum + startzeit;
DateTime endDateTime = enddatum + endzeit;
try
{
var dbService = new SqliteZeiterfassungsService();
foreach (var name in ausgewaehlteMitarbeiter)
{
dbService.SpeichereEintrag(new Zeiteintrag
{
Mitarbeiter = name,
Projekt = projektname,
Startzeit = startDateTime,
Endzeit = endDateTime,
Kommentar = kommentar,
Projektleiter = projektleiter,
Erledigt = false
});
}
FeedbackText.Text = "✅ Projekt erfolgreich gespeichert.";
FeedbackText.Foreground = Brushes.Green;
FeedbackText.IsVisible = true;
ProjektnameBox.Text = "";
KommentarBox.Text = "";
StartdatumPicker.SelectedDate = DateTime.Today;
EnddatumPicker.SelectedDate = DateTime.Today;
StartzeitBox.Text = "09:00";
EndzeitBox.Text = "17:00";
ProjektleiterDropdown.SelectedItem = null;
foreach (var cb in _mitarbeiterCheckBoxMap.Values)
cb.IsChecked = false;
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);
}
}
private void DemoProjekteButton_Click(object? sender, RoutedEventArgs e)
{
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 ausgewaehlteMitarbeiter = ErmittleAusgewaehlteMitarbeiter();
if (ausgewaehlteMitarbeiter.Count == 0)
{
FeedbackText.Text = "❗ Bitte wähle mindestens einen Mitarbeiter für die Demo-Projekte.";
FeedbackText.Foreground = Brushes.Red;
FeedbackText.IsVisible = true;
return;
}
var service = new SqliteZeiterfassungsService();
var heute = DateTime.Today;
foreach (var name in ausgewaehlteMitarbeiter)
{
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 = name,
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 = name,
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 = name,
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");
}
}