diff --git a/.idea/.idea.ChronoFlow/.idea/avalonia.xml b/.idea/.idea.ChronoFlow/.idea/avalonia.xml
index 9932faa..b21e8d0 100644
--- a/.idea/.idea.ChronoFlow/.idea/avalonia.xml
+++ b/.idea/.idea.ChronoFlow/.idea/avalonia.xml
@@ -6,6 +6,7 @@
+
diff --git a/ChronoFlow.Model/User.cs b/ChronoFlow.Model/User.cs
index e42e874..8d2e916 100644
--- a/ChronoFlow.Model/User.cs
+++ b/ChronoFlow.Model/User.cs
@@ -22,5 +22,6 @@ namespace ChronoFlow.Model
Abteilung = "";
OriginalUsername = "";
}
+ public DateTime LetzterLogin { get; set; } = DateTime.MinValue;
}
}
\ No newline at end of file
diff --git a/ChronoFlow.Model/Zeiteintrag.cs b/ChronoFlow.Model/Zeiteintrag.cs
index aaf11bb..410080d 100644
--- a/ChronoFlow.Model/Zeiteintrag.cs
+++ b/ChronoFlow.Model/Zeiteintrag.cs
@@ -37,5 +37,8 @@ namespace ChronoFlow.Model
return "Green";
}
}
+ public DateTime LetzteBearbeitung { get; set; }
+ public bool IstNeu { get; set; } // wird im ViewModel gesetzt
+ public bool WurdeSeitLoginBearbeitet { get; set; }
}
}
\ No newline at end of file
diff --git a/ChronoFlow.Persistence/SqliteZeiterfassungsService.cs b/ChronoFlow.Persistence/SqliteZeiterfassungsService.cs
index 3fa80eb..18f8cf3 100644
--- a/ChronoFlow.Persistence/SqliteZeiterfassungsService.cs
+++ b/ChronoFlow.Persistence/SqliteZeiterfassungsService.cs
@@ -92,6 +92,7 @@ namespace ChronoFlow.Persistence
AddColumnIfMissing(connection, "Benutzer", "Mitarbeitennummer", "TEXT");
AddColumnIfMissing(connection, "Benutzer", "Abteilung", "TEXT");
AddColumnIfMissing(connection, "Benutzer", "MussPasswortAendern", "INTEGER DEFAULT 1");
+ AddColumnIfMissing(connection, "Zeiteintraege", "LetzteBearbeitung", "TEXT");
}
private void AddColumnIfMissing(SqliteConnection connection, string tableName, string columnName, string columnType)
@@ -247,9 +248,10 @@ namespace ChronoFlow.Persistence
var cmd = connection.CreateCommand();
cmd.CommandText = @"
INSERT INTO Zeiteintraege
- (Mitarbeiter, Startzeit, Endzeit, Projekt, Kommentar, Erledigt, MitarbeiterKommentar)
- VALUES ($Mitarbeiter, $Startzeit, $Endzeit, $Projekt, $Kommentar, $Erledigt, $MitarbeiterKommentar);
- ";
+(Mitarbeiter, Startzeit, Endzeit, Projekt, Kommentar, Erledigt, MitarbeiterKommentar, LetzteBearbeitung)
+VALUES
+($Mitarbeiter, $Startzeit, $Endzeit, $Projekt, $Kommentar, $Erledigt, $MitarbeiterKommentar, $LetzteBearbeitung);";
+
cmd.Parameters.AddWithValue("$Mitarbeiter", eintrag.Mitarbeiter);
cmd.Parameters.AddWithValue("$Startzeit", eintrag.Startzeit.ToString("o"));
@@ -258,6 +260,7 @@ namespace ChronoFlow.Persistence
cmd.Parameters.AddWithValue("$Kommentar", eintrag.Kommentar ?? "");
cmd.Parameters.AddWithValue("$Erledigt", eintrag.Erledigt ? 1 : 0);
cmd.Parameters.AddWithValue("$MitarbeiterKommentar", eintrag.MitarbeiterKommentar ?? "");
+ cmd.Parameters.AddWithValue("$LetzteBearbeitung", DateTime.Now.ToString("o"));
cmd.ExecuteNonQuery();
@@ -302,13 +305,13 @@ namespace ChronoFlow.Persistence
cmd.CommandText = @"
UPDATE Zeiteintraege
SET Projekt = $Projekt,
- Kommentar = $Kommentar,
- Startzeit = $Startzeit,
- Endzeit = $Endzeit,
- Mitarbeiter = $Mitarbeiter,
- Erledigt = $Erledigt
- WHERE Id = $Id;
- ";
+ Kommentar = $Kommentar,
+ Startzeit = $Startzeit,
+ Endzeit = $Endzeit,
+ Mitarbeiter = $Mitarbeiter,
+ Erledigt = $Erledigt,
+ LetzteBearbeitung = $LetzteBearbeitung
+ WHERE Id = $Id;";
cmd.Parameters.AddWithValue("$Projekt", projekt.Projekt);
cmd.Parameters.AddWithValue("$Kommentar", projekt.Kommentar ?? "");
@@ -317,6 +320,7 @@ namespace ChronoFlow.Persistence
cmd.Parameters.AddWithValue("$Mitarbeiter", projekt.Mitarbeiter);
cmd.Parameters.AddWithValue("$Erledigt", projekt.Erledigt ? 1 : 0);
cmd.Parameters.AddWithValue("$Id", projekt.Id);
+ cmd.Parameters.AddWithValue("$LetzteBearbeitung", DateTime.Now.ToString("o"));
int rowsAffected = cmd.ExecuteNonQuery();
Console.WriteLine($"✏ Projekt aktualisiert (Id={projekt.Id}, Rows affected: {rowsAffected})");
@@ -464,34 +468,39 @@ namespace ChronoFlow.Persistence
Console.WriteLine($"🔒 Passwort für Benutzer '{username}' zurückgesetzt (Rows affected: {rowsAffected})");
}
- public async Task> GetEintraegeFuerMitarbeiterAsync(string mitarbeiterName)
+ public async Task> GetEintraegeFuerMitarbeiterAsync(string name)
{
var eintraege = new List();
+
using var connection = new SqliteConnection($"Data Source={_dbPath}");
await connection.OpenAsync();
var cmd = connection.CreateCommand();
cmd.CommandText = @"
- SELECT * FROM Zeiteintraege
- WHERE Mitarbeiter = $Mitarbeiter;
- ";
- cmd.Parameters.AddWithValue("$Mitarbeiter", mitarbeiterName);
+ SELECT Id, Mitarbeiter, Startzeit, Endzeit, Projekt, Kommentar, Erledigt, MitarbeiterKommentar, LetzteBearbeitung
+ FROM Zeiteintraege
+ WHERE Mitarbeiter = $Name;
+ ";
+ cmd.Parameters.AddWithValue("$Name", name);
using var reader = await cmd.ExecuteReaderAsync();
+
while (await reader.ReadAsync())
{
eintraege.Add(new Zeiteintrag
{
Id = reader.GetInt32(0),
Mitarbeiter = reader.GetString(1),
- Startzeit = DateTime.Parse(reader.GetString(2)),
- Endzeit = DateTime.Parse(reader.GetString(3)),
+ Startzeit = reader.GetDateTime(2),
+ Endzeit = reader.GetDateTime(3),
Projekt = reader.GetString(4),
Kommentar = reader.GetString(5),
- Erledigt = Convert.ToInt32(reader["Erledigt"]) == 1,
- MitarbeiterKommentar = reader.GetString(7)
+ Erledigt = reader.GetBoolean(6),
+ MitarbeiterKommentar = reader.GetString(7),
+ LetzteBearbeitung = reader.IsDBNull(8) ? DateTime.MinValue : reader.GetDateTime(8)
});
}
+
return eintraege;
}
@@ -502,19 +511,22 @@ namespace ChronoFlow.Persistence
var cmd = connection.CreateCommand();
cmd.CommandText = @"
- UPDATE Zeiteintraege
- SET Erledigt = $Erledigt,
- MitarbeiterKommentar = $Kommentar
- WHERE Id = $Id;
- ";
+ UPDATE Zeiteintraege
+ SET Erledigt = $Erledigt,
+ MitarbeiterKommentar = $Kommentar,
+ LetzteBearbeitung = $Bearbeitet
+ WHERE Id = $Id;
+";
cmd.Parameters.AddWithValue("$Erledigt", erledigt ? 1 : 0);
cmd.Parameters.AddWithValue("$Kommentar", mitarbeiterKommentar ?? "");
+ cmd.Parameters.AddWithValue("$Bearbeitet", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
cmd.Parameters.AddWithValue("$Id", id);
int rowsAffected = await cmd.ExecuteNonQueryAsync();
- Console.WriteLine($"✏ Zeiteintrag (Id={id}) aktualisiert: erledigt={erledigt}, kommentar gesetzt.");
+ Console.WriteLine($"✏ Zeiteintrag (Id={id}) aktualisiert: erledigt={erledigt}, LetzteBearbeitung gesetzt.");
}
+
}
}
\ No newline at end of file
diff --git a/ChronoFlow.View/Admin/AdminMainView.axaml b/ChronoFlow.View/Admin/AdminMainView.axaml
index c58b125..77f9785 100644
--- a/ChronoFlow.View/Admin/AdminMainView.axaml
+++ b/ChronoFlow.View/Admin/AdminMainView.axaml
@@ -3,57 +3,37 @@
xmlns:model="clr-namespace:ChronoFlow.Model;assembly=ChronoFlow.Model"
x:Class="ChronoFlow.View.Admin.AdminMainView">
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ChronoFlow.View/Admin/AdminMainView.axaml.cs b/ChronoFlow.View/Admin/AdminMainView.axaml.cs
index f0db60c..5d4af99 100644
--- a/ChronoFlow.View/Admin/AdminMainView.axaml.cs
+++ b/ChronoFlow.View/Admin/AdminMainView.axaml.cs
@@ -67,12 +67,6 @@ namespace ChronoFlow.View.Admin
{
_viewManager.Show("ProjektErstellen");
}
-
- private void Dashboard_Click(object sender, RoutedEventArgs e)
- {
- _viewManager.Show("AdminMain");
- }
-
private void AlleProjekte_Click(object sender, RoutedEventArgs e)
{
_viewManager.Show("AlleProjekte");
@@ -83,15 +77,9 @@ namespace ChronoFlow.View.Admin
_viewManager.Show("MitarbeiterListe");
}
- private void Einstellungen_Click(object sender, RoutedEventArgs e)
- {
- _viewManager.Show("Einstellungen");
- }
+
- private void TogglePane_Click(object sender, RoutedEventArgs e)
- {
- AdminPane.IsPaneOpen = !AdminPane.IsPaneOpen;
- }
+
public void AktualisiereLetzteProjekte()
{
@@ -102,5 +90,7 @@ namespace ChronoFlow.View.Admin
{
_viewManager.Show("AbgeschlosseneProjekte");
}
+
+
}
}
diff --git a/ChronoFlow.View/Admin/MitarbeiterBearbeitenDialog.axaml b/ChronoFlow.View/Admin/MitarbeiterBearbeitenDialog.axaml
index e8a2383..0723c82 100644
--- a/ChronoFlow.View/Admin/MitarbeiterBearbeitenDialog.axaml
+++ b/ChronoFlow.View/Admin/MitarbeiterBearbeitenDialog.axaml
@@ -3,8 +3,8 @@
x:Class="ChronoFlow.View.Admin.MitarbeiterBearbeitenDialog"
Width="450" Height="600"
Title="Mitarbeiter bearbeiten">
-
-
+
+
@@ -28,4 +28,5 @@
IsVisible="False"
Margin="0,10,0,0" />
+
\ No newline at end of file
diff --git a/ChronoFlow.View/Admin/ProjektBearbeitenDialog.axaml b/ChronoFlow.View/Admin/ProjektBearbeitenDialog.axaml
index 2e912dd..195557e 100644
--- a/ChronoFlow.View/Admin/ProjektBearbeitenDialog.axaml
+++ b/ChronoFlow.View/Admin/ProjektBearbeitenDialog.axaml
@@ -4,7 +4,8 @@
Width="500" Height="600"
Title="Projekt bearbeiten">
-
+
+
@@ -25,4 +26,5 @@
+
\ No newline at end of file
diff --git a/ChronoFlow.View/Admin/ProjektErstellenView.axaml b/ChronoFlow.View/Admin/ProjektErstellenView.axaml
index 07c870f..1496f35 100644
--- a/ChronoFlow.View/Admin/ProjektErstellenView.axaml
+++ b/ChronoFlow.View/Admin/ProjektErstellenView.axaml
@@ -2,7 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ChronoFlow.View.Admin.ProjektErstellenView">
-
+
+
@@ -29,11 +30,12 @@
-
+
+
\ No newline at end of file
diff --git a/ChronoFlow.View/App.axaml b/ChronoFlow.View/App.axaml
index 0988159..759a388 100644
--- a/ChronoFlow.View/App.axaml
+++ b/ChronoFlow.View/App.axaml
@@ -1,8 +1,15 @@
+ xmlns:conv="clr-namespace:ChronoFlow.View.Converter"
+ x:Class="ChronoFlow.App">
+
+
+
+
+
diff --git a/ChronoFlow.View/ChronoFlow.View.csproj b/ChronoFlow.View/ChronoFlow.View.csproj
index e987b80..cde7747 100644
--- a/ChronoFlow.View/ChronoFlow.View.csproj
+++ b/ChronoFlow.View/ChronoFlow.View.csproj
@@ -13,6 +13,9 @@
+
+
+
diff --git a/ChronoFlow.View/Converter/BoolToBrushConverter.cs b/ChronoFlow.View/Converter/BoolToBrushConverter.cs
new file mode 100644
index 0000000..2bc15b4
--- /dev/null
+++ b/ChronoFlow.View/Converter/BoolToBrushConverter.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Globalization;
+using Avalonia.Data.Converters;
+using Avalonia.Media;
+
+namespace ChronoFlow.View.Converter
+{
+ public class BoolToBrushConverter : IValueConverter
+ {
+ public IBrush TrueBrush { get; set; } = Brushes.Blue;
+ public IBrush FalseBrush { get; set; } = Brushes.Gray;
+
+ public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
+ {
+ if (value is bool b)
+ return b ? TrueBrush : FalseBrush;
+
+ return FalseBrush;
+ }
+
+ public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) =>
+ throw new NotSupportedException();
+ }
+}
\ No newline at end of file
diff --git a/ChronoFlow.View/LoginWindow.axaml.cs b/ChronoFlow.View/LoginWindow.axaml.cs
index 93429c8..255b5c8 100644
--- a/ChronoFlow.View/LoginWindow.axaml.cs
+++ b/ChronoFlow.View/LoginWindow.axaml.cs
@@ -106,6 +106,7 @@ namespace ChronoFlow.View
try
{
Console.WriteLine("🚀 Öffne MainWindow...");
+ user.LetzterLogin = DateTime.Now;
var main = new MainWindow(user);
main.Show();
Console.WriteLine("✅ MainWindow wurde geöffnet.");
@@ -120,5 +121,6 @@ namespace ChronoFlow.View
ErrorText.IsVisible = true;
}
}
+
}
}
diff --git a/ChronoFlow.View/MainWindow.axaml b/ChronoFlow.View/MainWindow.axaml
index 40b44ab..dcbb468 100644
--- a/ChronoFlow.View/MainWindow.axaml
+++ b/ChronoFlow.View/MainWindow.axaml
@@ -5,9 +5,18 @@
mc:Ignorable="d" d:DesignWidth="1000" d:DesignHeight="600"
x:Class="ChronoFlow.View.MainWindow"
Title="ChronoFlow">
-
+
+
+
\ No newline at end of file
diff --git a/ChronoFlow.View/MainWindow.axaml.cs b/ChronoFlow.View/MainWindow.axaml.cs
index 0fd0e6c..e634b6f 100644
--- a/ChronoFlow.View/MainWindow.axaml.cs
+++ b/ChronoFlow.View/MainWindow.axaml.cs
@@ -2,6 +2,7 @@ using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using ChronoFlow.Model;
+using ChronoFlow.Persistence;
using ChronoFlow.View.Admin;
using ChronoFlow.View.Mitarbeiter;
@@ -27,7 +28,8 @@ namespace ChronoFlow.View
_viewManager.Register("AlleProjekte", () => new AlleProjekteView(_viewManager));
_viewManager.Register("MitarbeiterListe", () => new MitarbeiterListeView(_viewManager));
_viewManager.Register("AbgeschlosseneProjekte", () => new AbgeschlosseneProjekteView(_viewManager));
- _viewManager.Register("Zeiterfassung", () => new EmployeeTasksView(_loggedInUser.Username));
+ _viewManager.Register("Zeiterfassung", () =>
+ new EmployeeTasksView(_loggedInUser, new SqliteZeiterfassungsService()));
if (_loggedInUser.Role == "Admin")
{
@@ -60,5 +62,12 @@ namespace ChronoFlow.View
{
_viewManager.Show("AdminMain");
}
+ private void Logout_Click(object? sender, RoutedEventArgs e)
+ {
+ var loginWindow = new LoginWindow();
+ loginWindow.Show();
+
+ this.Close(); // Aktuelles Fenster schließen
+ }
}
}
diff --git a/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml b/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml
index fe6713b..0b81b5b 100644
--- a/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml
+++ b/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml
@@ -1,28 +1,45 @@
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml.cs b/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml.cs
index e57da44..ee83f24 100644
--- a/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml.cs
+++ b/ChronoFlow.View/Mitarbeiter/EmployeeTasksView.axaml.cs
@@ -1,20 +1,16 @@
using Avalonia.Controls;
using ChronoFlow.ViewModels.Mitarbeiter;
using ChronoFlow.Persistence;
+using ChronoFlow.Model;
namespace ChronoFlow.View.Mitarbeiter
{
public partial class EmployeeTasksView : UserControl
{
- public EmployeeTasksView(string benutzername)
+ public EmployeeTasksView(User user, IZeiterfassungsRepository repository)
{
InitializeComponent();
-
- // Benutzername dynamisch übergeben
- DataContext = new EmployeeTasksViewModel(
- new SqliteZeiterfassungsService(),
- benutzername
- );
+ DataContext = new EmployeeTasksViewModel(user, repository);
}
}
}
\ No newline at end of file
diff --git a/ChronoFlow.View/Mitarbeiter/EmployeeTasksViewModel.axaml.cs b/ChronoFlow.View/Mitarbeiter/EmployeeTasksViewModel.axaml.cs
index 9269d42..69c23c4 100644
--- a/ChronoFlow.View/Mitarbeiter/EmployeeTasksViewModel.axaml.cs
+++ b/ChronoFlow.View/Mitarbeiter/EmployeeTasksViewModel.axaml.cs
@@ -1,4 +1,6 @@
+using System;
using System.Collections.ObjectModel;
+using System.Linq;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
@@ -9,46 +11,75 @@ namespace ChronoFlow.ViewModels.Mitarbeiter
{
public partial class EmployeeTasksViewModel : ObservableObject
{
- // Liste aller Zeiteinträge für den aktuell eingeloggten Mitarbeiter
+ private readonly User _benutzer;
+ private readonly IZeiterfassungsRepository _repository;
+ private readonly string aktuellerBenutzername;
+
[ObservableProperty]
private ObservableCollection eintraege = new();
- // Ausgabe für Erfolg/Nachricht
[ObservableProperty]
private string? statusText;
- private readonly IZeiterfassungsRepository repository;
- private readonly string aktuellerBenutzername;
+ public bool HatKeineEintraege => Eintraege.Count == 0;
- // Konstruktor erhält Repository (z. B. SqliteZeiterfassungsService) + aktuellen Benutzernamen
- public EmployeeTasksViewModel(IZeiterfassungsRepository repository, string aktuellerBenutzername)
+ partial void OnEintraegeChanged(ObservableCollection? oldValue, ObservableCollection newValue)
{
- this.repository = repository;
- this.aktuellerBenutzername = aktuellerBenutzername;
-
- // Direkt beim Start laden
- _ = LadeEintraegeAsync();
+ OnPropertyChanged(nameof(HatKeineEintraege));
+ }
+
+ public EmployeeTasksViewModel(User benutzer, IZeiterfassungsRepository repository)
+ {
+ _benutzer = benutzer;
+ _repository = repository;
+ aktuellerBenutzername = benutzer.Username;
+
+ Console.WriteLine($"[DEBUG] ViewModel erstellt für Benutzer: {aktuellerBenutzername}");
+
+ _ = LadeEintraegeAsync(); // Lade Daten automatisch beim Öffnen
}
- // Lädt alle Einträge für den Benutzer aus der Datenbank
[RelayCommand]
public async Task LadeEintraegeAsync()
{
- var eintraegeAusDb = await repository.GetEintraegeFuerMitarbeiterAsync(aktuellerBenutzername);
- Eintraege = new ObservableCollection(eintraegeAusDb);
- StatusText = $"🔄 {Eintraege.Count} Einträge geladen.";
+ var eintraegeAusDb = await _repository.GetEintraegeFuerMitarbeiterAsync(aktuellerBenutzername);
+
+ var offene = eintraegeAusDb
+ .Where(e => !e.Erledigt)
+ .OrderBy(e => e.Endzeit)
+ .ToList();
+
+ // 🔔 Setze Markierung für geänderte Aufgaben
+ foreach (var eintrag in offene)
+ {
+ eintrag.WurdeSeitLoginBearbeitet = eintrag.LetzteBearbeitung > _benutzer.LetzterLogin;
+
+ // 🔍 Debug-Ausgabe zur Prüfung
+ Console.WriteLine($"[DEBUG] Eintrag {eintrag.Id}: Endzeit={eintrag.Endzeit}, LetzteBearbeitung={eintrag.LetzteBearbeitung}, LetzterLogin={_benutzer.LetzterLogin}, Markiert={eintrag.WurdeSeitLoginBearbeitet}");
+ }
+
+
+ if (offene.Any(e => e.WurdeSeitLoginBearbeitet))
+ StatusText = "📢 Es wurden Aufgaben seit Ihrem letzten Login geändert.";
+
+ Eintraege = new ObservableCollection(offene);
}
- // Speichert Änderungen (Status + Kommentar) für alle sichtbaren Einträge
+
[RelayCommand]
public async Task SpeichereEintraegeAsync()
{
foreach (var eintrag in Eintraege)
{
- await repository.UpdateStatusUndKommentarAsync(eintrag.Id, eintrag.Erledigt, eintrag.MitarbeiterKommentar);
+ await _repository.UpdateStatusUndKommentarAsync(
+ eintrag.Id,
+ eintrag.Erledigt,
+ eintrag.MitarbeiterKommentar
+ );
}
StatusText = "✅ Änderungen gespeichert.";
+ await LadeEintraegeAsync(); // automatisch neu laden
}
}
-}
\ No newline at end of file
+}
diff --git a/ChronoFlow.View/MitarbeiterHinzufuegenView.axaml b/ChronoFlow.View/MitarbeiterHinzufuegenView.axaml
index cfc866f..6ca6574 100644
--- a/ChronoFlow.View/MitarbeiterHinzufuegenView.axaml
+++ b/ChronoFlow.View/MitarbeiterHinzufuegenView.axaml
@@ -2,7 +2,8 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="ChronoFlow.View.MitarbeiterHinzufuegenView">
-
+
+
@@ -20,4 +21,5 @@
+
\ No newline at end of file