Files
admin 0800832ae5 Klausurtermine im Kalender (4.4.3) + Stundenplan: Ausnahme eintragen, Zahnrad-Settings-Link
- 4.4.3: Box "ANSTEHENDE KLAUSUREN" im Heute-Tab, gruppenübergreifend, nächste 21 Tage.
  IExamRepository um GetAll() erweitert.
- Nutzer-Feedback: "Vertretung eintragen" deckt auch Ausfall/Sondereinsatz ab, daher
  umbenannt in "Ausnahme eintragen". "Stundenplan bearbeiten" (redundant zum Bearbeiten-Tab)
  ersetzt durch Zahnrad-Button, der direkt in die Einstellungen springt.
2026-08-15 22:24:04 +02:00

145 lines
8.0 KiB
XML

<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Planning"
xmlns:models="clr-namespace:LehrerApp.Core.Models;assembly=LehrerApp.Core"
x:Class="LehrerApp.Desktop.Views.Planning.SubstitutionEntryDialog"
x:DataType="vm:SubstitutionEntryDialogViewModel"
Title="Ausnahme eintragen"
Width="440" Height="560" MinWidth="400" MinHeight="480"
CanResize="True" WindowStartupLocation="CenterOwner">
<Grid RowDefinitions="*,Auto" Margin="24">
<ScrollViewer Grid.Row="0">
<StackPanel Spacing="14" Margin="0,0,12,0">
<TextBlock Text="Ausnahme eintragen" Classes="dialogtitle"/>
<TextBlock FontSize="12" Opacity="0.6" TextWrapping="Wrap"
Text="Für einmalige Ausnahmen — Vertretungsaufsicht, Vertretungsstunde, Sondereinsatz (Ausflug, Berufsmesse, ...) oder schlichter Ausfall an einem konkreten Tag. Wiederkehrende Aufsicht wird in den Einstellungen gepflegt."/>
<Grid ColumnDefinitions="*,8,*">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Datum *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding DateText}" PlaceholderText="TT.MM.JJJJ"/>
<TextBlock Text="{Binding DateError}" Foreground="Red" FontSize="11"
IsVisible="{Binding DateError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Art *" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding KindOptions}" SelectedItem="{Binding KindName}"
HorizontalAlignment="Stretch"/>
</StackPanel>
</Grid>
<!-- Aufsicht -->
<StackPanel Spacing="14" IsVisible="{Binding IsSupervisionKind}">
<StackPanel Spacing="4">
<TextBlock Text="Nach Stunde (0 = davor) *" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding AfterPeriod}" Minimum="0" Maximum="10" FormatString="0"
Width="140" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Grund / Ort *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Description}" PlaceholderText="z.B. Vertretung für Hr. Müller, Pausenhof"/>
</StackPanel>
</StackPanel>
<!-- Stunde -->
<StackPanel Spacing="14" IsVisible="{Binding IsLessonKind}">
<StackPanel Spacing="4">
<TextBlock Text="Stunde Nr. *" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding PeriodNumber}" Minimum="1" Maximum="10" FormatString="0"
Width="140" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Eigene Gruppe (optional)" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding OwnGroups}" SelectedItem="{Binding SelectedOwnGroup}"
HorizontalAlignment="Stretch" PlaceholderText="Fremde/unbekannte Gruppe">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:LearningGroup">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Bezeichnung *" FontSize="12" Opacity="0.7"
ToolTip.Tip="Wird im Stundenplan angezeigt, z.B. Klasse/Kurs-Kürzel."/>
<TextBox Text="{Binding GroupLabel}" PlaceholderText="z.B. 8a"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Thema *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Description}" PlaceholderText="z.B. Stillarbeit, Erdkunde-Vertretung"/>
</StackPanel>
<StackPanel Spacing="6" IsVisible="{Binding CanPromoteToLesson}">
<Separator/>
<CheckBox Content="Direkt als Stunde in der Einheit übernehmen" IsChecked="{Binding PromoteToLesson}"
ToolTip.Tip="Nur sinnvoll, wenn tatsächlich echter Stoff aus der Einheit behandelt wurde — sonst bleibt es beim einfachen Plan-Eintrag."/>
<ComboBox ItemsSource="{Binding UnitsOfSelectedGroup}" SelectedItem="{Binding SelectedUnit}"
IsVisible="{Binding PromoteToLesson}" HorizontalAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:Unit">
<TextBlock Text="{Binding Title}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
</StackPanel>
<!-- Sondereinsatz -->
<StackPanel Spacing="14" IsVisible="{Binding IsSpecialAssignmentKind}">
<CheckBox Content="Ganztägig" IsChecked="{Binding IsAllDay}"/>
<Grid ColumnDefinitions="*,8,*" IsVisible="{Binding !IsAllDay}">
<StackPanel Grid.Column="0" Spacing="4">
<TextBlock Text="Von Stunde *" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding FromPeriod}" Minimum="1" Maximum="10" FormatString="0"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Bis Stunde *" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding ToPeriod}" Minimum="1" Maximum="10" FormatString="0"/>
</StackPanel>
</Grid>
<StackPanel Spacing="4">
<TextBlock Text="Eigene Gruppe (optional)" FontSize="12" Opacity="0.7"
ToolTip.Tip="Nur ausfüllen, wenn der Sondereinsatz eine konkrete Lerngruppe betrifft (z.B. Ausflug) — bei Einsätzen ohne Gruppenbezug (z.B. Berufsmesse) leer lassen."/>
<ComboBox ItemsSource="{Binding OwnGroups}" SelectedItem="{Binding SelectedOwnGroup}"
HorizontalAlignment="Stretch" PlaceholderText="Kein Gruppenbezug">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:LearningGroup">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Bezeichnung *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Description}" PlaceholderText="z.B. Ausflug ins Museum, Berufsmesse"/>
</StackPanel>
</StackPanel>
<!-- Ausfall -->
<StackPanel Spacing="14" IsVisible="{Binding IsCancelledKind}">
<TextBlock FontSize="12" Opacity="0.6" TextWrapping="Wrap"
Text="Für Stunden, die schlicht ausfallen, ohne dass jemand vertritt — z.B. weil die andere Gruppe selbst nicht da ist (Klassenfahrt, Exkursion o.ä.). Fach/Klasse werden automatisch aus dem Stundenplan übernommen."/>
<StackPanel Spacing="4">
<TextBlock Text="Stunde Nr. *" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding PeriodNumber}" Minimum="1" Maximum="10" FormatString="0"
Width="140" HorizontalAlignment="Left"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Grund (optional)" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Description}" PlaceholderText="z.B. 6a auf Klassenfahrt"/>
</StackPanel>
</StackPanel>
<TextBlock Text="{Binding ValidationError}" Foreground="Red" FontSize="12" TextWrapping="Wrap"
IsVisible="{Binding ValidationError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
</ScrollViewer>
<Grid Grid.Row="1" ColumnDefinitions="*,8,*" Margin="0,20,0,0">
<Button Grid.Column="0" Content="Abbrechen" HorizontalAlignment="Stretch" Click="OnCancel"/>
<Button Grid.Column="2" Content="Eintragen" HorizontalAlignment="Stretch" Click="OnSave"/>
</Grid>
</Grid>
</Window>