Kurs-Übersicht: fehlende Hausaufgaben; Erinnerungen als eigene Aufgabenart; Kalender-/Sitzplan-Bugfixes
Kurs-Übersicht: neue Karte "Fehlende Hausaufgaben" listet Schüler mit nicht gemachter Hausaufgabe aus der letzten Mitarbeitssitzung. Aufgabenverwaltung: WorkTask.Kind unterscheidet jetzt Arbeitsaufträge von reinen Erinnerungen ohne Zeitbezug (z.B. "morgen Ansage an die Klasse machen") - eigener Button "🔔 Erinnerung", eigenes Icon in Liste/Dashboard, läuft nicht in die Zeitauswertung ein. Drei Bugfixes aus Nutzer-Feedback: - Dashboard-Kalender zeigte eine Stunde doppelt, wenn sie über "Sitzung erzeugen" mit einer Mitarbeitssitzung verknüpft war. - Der Sitzplan-Tab legte beim bloßen Öffnen einer Gruppe (nicht erst bei echter Nutzung) eine leere "Sitzplan"-Sitzung für heute an. - Der "Meine Klasse"-Ring im Kalender erschien erst, sobald für den Tag eine Lesson existierte, statt schon laut Stundenplan. Außerdem: Drawer-Icons pinnen jetzt explizit auf die farbige Emoji-Schrift (Windows kann sonst je nach Font-Fallback auf eine einfarbige Variante ausweichen). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -108,10 +108,13 @@
|
||||
<ItemsControl ItemsSource="{Binding OpenTasks}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate DataType="vm:TaskItem">
|
||||
<Grid ColumnDefinitions="*,Auto" Margin="0,3">
|
||||
<TextBlock Grid.Column="0" Text="{Binding Title}"
|
||||
<Grid ColumnDefinitions="Auto,*,Auto" Margin="0,3">
|
||||
<TextBlock Grid.Column="0" Text="🔔" FontSize="12" Margin="0,0,4,0"
|
||||
IsVisible="{Binding IsReminder}"
|
||||
ToolTip.Tip="Erinnerung — kein Zeitbezug"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding Title}"
|
||||
FontSize="13" TextTrimming="CharacterEllipsis"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding DueDate}"
|
||||
<TextBlock Grid.Column="2" Text="{Binding DueDate}"
|
||||
FontSize="12" Opacity="0.6" Margin="8,0,0,0"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
|
||||
@@ -143,6 +143,28 @@
|
||||
</ItemsControl>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
|
||||
<!-- Fehlende Hausaufgaben aus der letzten Sitzung -->
|
||||
<Border Classes="card" MinWidth="340" MaxWidth="420"
|
||||
IsVisible="{Binding HasMissingHomework}">
|
||||
<StackPanel>
|
||||
<TextBlock Text="FEHLENDE HAUSAUFGABEN" Classes="cardTitle"/>
|
||||
<TextBlock Text="{Binding MissingHomeworkSessionLabel}" FontSize="11" Opacity="0.6" Margin="0,-6,0,6"/>
|
||||
<ItemsControl ItemsSource="{Binding MissingHomeworkStudents}">
|
||||
<ItemsControl.ItemTemplate>
|
||||
<DataTemplate x:DataType="vm:MissingHomeworkItem">
|
||||
<Grid ColumnDefinitions="*,Auto" Margin="0,4">
|
||||
<TextBlock Grid.Column="0" Text="{Binding StudentName}" FontSize="13"
|
||||
TextTrimming="CharacterEllipsis" VerticalAlignment="Center"/>
|
||||
<TextBlock Grid.Column="1" Text="{Binding StatusLabel}" FontSize="11"
|
||||
Opacity="0.7" VerticalAlignment="Center" TextAlignment="Right"/>
|
||||
</Grid>
|
||||
</DataTemplate>
|
||||
</ItemsControl.ItemTemplate>
|
||||
</ItemsControl>
|
||||
<Button Content="Zur Mitarbeit ›" Classes="cardLink" Command="{Binding NavigateToParticipationCommand}"/>
|
||||
</StackPanel>
|
||||
</Border>
|
||||
</WrapPanel>
|
||||
</StackPanel>
|
||||
</ScrollViewer>
|
||||
|
||||
@@ -67,10 +67,14 @@
|
||||
<DockPanel Classes.compact="{Binding !#RootDrawer.IsOpen}">
|
||||
<DockPanel.Styles>
|
||||
<!-- Basisgröße der Icons als Style (nicht lokal), damit der Compact-Selector sie
|
||||
überschreiben kann – lokale Werte hätten immer Vorrang vor Style-Settern. -->
|
||||
überschreiben kann – lokale Werte hätten immer Vorrang vor Style-Settern.
|
||||
FontFamily explizit auf die farbige Emoji-Schrift gepinnt: Windows kann für
|
||||
Emoji-Codepoints je nach Fallback-Auflösung sonst auf "Segoe UI Symbol"
|
||||
(einfarbig/schwarz) statt "Segoe UI Emoji" (farbig) ausweichen. -->
|
||||
<Style Selector="TextBlock.navicon">
|
||||
<Setter Property="FontSize" Value="15"/>
|
||||
<Setter Property="Width" Value="24"/>
|
||||
<Setter Property="FontFamily" Value="Segoe UI Emoji,Segoe UI Symbol,Segoe UI"/>
|
||||
</Style>
|
||||
<Style Selector="Button.navitem">
|
||||
<Setter Property="Background" Value="Transparent"/>
|
||||
|
||||
@@ -20,6 +20,9 @@
|
||||
IsVisible="{Binding TitleError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||||
</StackPanel>
|
||||
|
||||
<CheckBox Content="🔔 Nur Erinnerung (kein Zeitbezug, läuft nicht in die Zeiterfassung ein)"
|
||||
IsChecked="{Binding IsReminder}"/>
|
||||
|
||||
<Grid ColumnDefinitions="*,8,*">
|
||||
<StackPanel Grid.Column="0" Spacing="4">
|
||||
<TextBlock Text="Kategorie *" FontSize="12" Opacity="0.7"/>
|
||||
@@ -46,7 +49,7 @@
|
||||
<TextBlock Text="{Binding DueDateError}" Foreground="Red" FontSize="11"
|
||||
IsVisible="{Binding DueDateError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
|
||||
</StackPanel>
|
||||
<StackPanel Grid.Column="2" Spacing="4">
|
||||
<StackPanel Grid.Column="2" Spacing="4" IsVisible="{Binding !IsReminder}">
|
||||
<TextBlock Text="Geschätzte Dauer in min (optional)" FontSize="12" Opacity="0.7"/>
|
||||
<TextBox Text="{Binding EstimatedMinutesText}" PlaceholderText="z.B. 90"/>
|
||||
<TextBlock Text="{Binding EstimatedMinutesError}" Foreground="Red" FontSize="11"
|
||||
|
||||
@@ -11,7 +11,11 @@
|
||||
SelectedItem="{Binding CategoryFilter}" Margin="0,0,8,0"/>
|
||||
<ComboBox Grid.Column="2" ItemsSource="{Binding GroupFilterOptions}"
|
||||
SelectedItem="{Binding GroupFilter}"/>
|
||||
<Button Grid.Column="4" Content="+ Neue Aufgabe" Command="{Binding AddTaskCommand}"/>
|
||||
<StackPanel Grid.Column="4" Orientation="Horizontal" Spacing="8">
|
||||
<Button Content="🔔 + Erinnerung" Command="{Binding AddReminderCommand}"
|
||||
ToolTip.Tip="Kurze Notiz ohne Zeitbezug, z.B. 'morgen Ansage an die Klasse machen' — läuft nicht in die Zeiterfassung/Auswertung ein."/>
|
||||
<Button Content="+ Neue Aufgabe" Command="{Binding AddTaskCommand}"/>
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<ScrollViewer Grid.Row="1" Margin="16,10,16,16">
|
||||
@@ -30,7 +34,11 @@
|
||||
<TextBlock Text="{Binding StatusLabel}" FontSize="12" Foreground="White"/>
|
||||
</Button>
|
||||
<StackPanel Grid.Column="1" Margin="10,0" VerticalAlignment="Center">
|
||||
<TextBlock Text="{Binding Title}" FontWeight="SemiBold" FontSize="13"/>
|
||||
<StackPanel Orientation="Horizontal" Spacing="4">
|
||||
<TextBlock Text="🔔" FontSize="12" IsVisible="{Binding IsReminder}"
|
||||
ToolTip.Tip="Erinnerung — kein Zeitbezug, nicht Teil der Auswertung"/>
|
||||
<TextBlock Text="{Binding Title}" FontWeight="SemiBold" FontSize="13"/>
|
||||
</StackPanel>
|
||||
<TextBlock FontSize="11" Opacity="0.6">
|
||||
<Run Text="{Binding CategoryLabel}"/>
|
||||
<Run Text=" · "/>
|
||||
|
||||
@@ -17,13 +17,13 @@ public partial class WorkTaskListView : UserControl
|
||||
vm.OnEditTask = ShowEditDialog;
|
||||
}
|
||||
|
||||
private async Task<WorkTask?> ShowEditDialog(WorkTask? source)
|
||||
private async Task<WorkTask?> ShowEditDialog(WorkTask? source, bool startAsReminder)
|
||||
{
|
||||
var owner = TopLevel.GetTopLevel(this) as Window;
|
||||
if (owner is null) return null;
|
||||
|
||||
var groups = App.Services.GetRequiredService<IGroupRepository>().GetAll(includeInactive: true);
|
||||
var vm = new AddEditWorkTaskDialogViewModel(source, groups);
|
||||
var vm = new AddEditWorkTaskDialogViewModel(source, groups, startAsReminder);
|
||||
var dialog = new AddEditWorkTaskDialog { DataContext = vm };
|
||||
await dialog.ShowDialog<bool>(owner);
|
||||
return vm.Result;
|
||||
|
||||
Reference in New Issue
Block a user