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

112 lines
3.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 Avalonia.Controls;
using Avalonia.Interactivity;
using ChronoFlow.Model;
using ChronoFlow.Persistence;
using ChronoFlow.View.Admin;
using ChronoFlow.View.Mitarbeiter;
namespace ChronoFlow.View;
/// <summary>
/// Hauptfenster der Anwendung je nach Benutzerrolle wird die passende Startansicht geladen.
/// </summary>
public partial class MainWindow : Window
{
private readonly ViewManager _viewManager;
private readonly User _loggedInUser;
/// <summary>
/// Parameterloser Konstruktor erforderlich für Avalonia Runtime Loader.
/// Startet mit einem Dummy-Nutzer (Demo-Zwecke oder Designer-Unterstützung).
/// </summary>
public MainWindow() : this(new User
{
Username = "DemoUser",
Role = "Mitarbeiter"
})
{
Console.WriteLine("⚠ Achtung: MainWindow ohne echten Benutzer gestartet (Demo-Modus).");
}
/// <summary>
/// Konstruktor bekommt den eingeloggten Benutzer übergeben.
/// Registriert alle möglichen Views und zeigt die Startansicht je nach Rolle.
/// </summary>
public MainWindow(User user)
{
InitializeComponent();
_loggedInUser = user;
Console.WriteLine($"[DEBUG] MainWindow gestartet für Benutzer: {_loggedInUser.Username} ({_loggedInUser.Role})");
// Initialisierung des ViewManagers mit der ContentArea (wird in XAML gesetzt)
_viewManager = new ViewManager(ContentArea);
// 🔄 Registrierung aller Views, die im Projekt vorkommen
_viewManager.Register("ProjektErstellen", () => new ProjektErstellenView(_viewManager));
_viewManager.Register("MitarbeiterHinzufuegen", () => new MitarbeiterHinzufuegenView());
_viewManager.Register("AdminMain", () => new AdminMainView(_viewManager));
_viewManager.Register("AlleProjekte", () => new AlleProjekteView(_viewManager));
_viewManager.Register("MitarbeiterListe", () => new MitarbeiterListeView(_viewManager));
_viewManager.Register("AbgeschlosseneProjekte", () => new AbgeschlosseneProjekteView(_viewManager));
_viewManager.Register("Zeiterfassung", () => new EmployeeTasksView(_loggedInUser, new SqliteZeiterfassungsService()));
// 🧭 Starte mit der passenden Ansicht je nach Rolle
if (_loggedInUser.Role == "Admin")
{
_viewManager.Show("AdminMain");
}
else if (_loggedInUser.Role == "Mitarbeiter")
{
_viewManager.Show("Zeiterfassung");
}
// 🖼️ Fenster-Titel setzen (optional für Nutzerfreundlichkeit)
this.Title = $"ChronoFlow - Willkommen {_loggedInUser.Username} ({_loggedInUser.Role})";
}
/// <summary>
/// Öffnet die Mitarbeiter-Zeiterfassung (nur für Mitarbeiter-Sidebar-Button).
/// </summary>
private void Zeiterfassung_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("Zeiterfassung");
}
/// <summary>
/// Öffnet das Formular zum Anlegen eines neuen Mitarbeiters.
/// </summary>
private void MitarbeiterHinzufuegen_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("MitarbeiterHinzufuegen");
}
/// <summary>
/// Öffnet das Admin-Dashboard (Übersicht).
/// </summary>
private void AdminDashboard_Click(object? sender, RoutedEventArgs e)
{
_viewManager.Show("AdminMain");
}
/// <summary>
/// Extern aufrufbar für "Zurück zum Dashboard"-Funktion (z.B. in anderen Views).
/// </summary>
public void ShowAdminDashboard()
{
_viewManager.Show("AdminMain");
}
/// <summary>
/// Führt einen Logout durch öffnet das Loginfenster neu und schließt sich selbst.
/// </summary>
private void Logout_Click(object? sender, RoutedEventArgs e)
{
var loginWindow = new LoginWindow();
loginWindow.Show();
this.Close(); // Schließt das aktuelle Fenster
}
}