Files
LehrerApp/LehrerApp.Desktop/Views/Groups/ExamDialog.axaml
T
adminandClaude Sonnet 5.5 41649b0a05 Förderschüler je Gruppe markieren und Förderarbeit darauf beschränken
GroupMembership.IsSupportStudent markiert Förderschüler unabhängig von der
Niveaudifferenzierung (Checkbox-Spalte in der Schülerliste; in differenzierten
Gruppen zählt das Förderniveau). Punkteeingabe und Deckblätter einer
Förderarbeit zeigen nur Förderschüler und Schüler mit vorhandenem Ergebnis.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-22 21:00:56 +02:00

227 lines
14 KiB
XML
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.
<Window xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:LehrerApp.Desktop.ViewModels.Groups"
xmlns:models="clr-namespace:LehrerApp.Core.Models;assembly=LehrerApp.Core"
x:Class="LehrerApp.Desktop.Views.Groups.ExamDialog"
x:DataType="vm:ExamDialogViewModel"
Title="{Binding DialogTitle}"
Width="640" Height="680" MinWidth="560" MinHeight="420"
CanResize="True" WindowStartupLocation="CenterOwner">
<Grid RowDefinitions="*,Auto" Margin="24">
<ScrollViewer Grid.Row="0">
<StackPanel Spacing="14" Margin="0,0,12,0">
<StackPanel Spacing="2">
<TextBlock Text="{Binding DialogTitle}" Classes="dialogtitle"/>
<TextBlock Text="{Binding SubjectDisplay}" FontSize="12" Opacity="0.6"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Titel *" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Title}" PlaceholderText="z.B. 1. Klausur Kinetik"/>
<TextBlock Text="{Binding TitleError}" Foreground="Red" FontSize="11"
IsVisible="{Binding TitleError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Art der Arbeit" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding KindOptions}" SelectedItem="{Binding KindName}"
IsEnabled="{Binding CanChooseKind}" HorizontalAlignment="Stretch"
ToolTip.Tip="Nur Klausuren zählen als schriftliche Note. Tests, kontrollierte Hausaufgaben und sonstige Arbeiten fließen unter &quot;Sonstige&quot; in die Zeugnisnote ein. Folgearbeiten übernehmen die Art der ersten Arbeit."/>
</StackPanel>
<StackPanel Spacing="4" IsVisible="{Binding IsDifferentiated}">
<TextBlock Text="Niveau" FontSize="12" Opacity="0.7"/>
<ComboBox ItemsSource="{Binding NiveauOptions}" SelectedItem="{Binding SelectedNiveauName}"
HorizontalAlignment="Stretch"
ToolTip.Tip="Strich = für alle Schüler der Gruppe. Bei E/G/Förder zeigt die Punkteeingabe nur die Schüler mit passendem Niveau."/>
</StackPanel>
<Grid ColumnDefinitions="*,12,*,12,*">
<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 DateTextError}" Foreground="Red" FontSize="11"
IsVisible="{Binding DateTextError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<TextBlock Text="{Binding WeekLoadHint}" Foreground="#F59E0B" FontSize="11"
IsVisible="{Binding WeekLoadHint, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Grid.Column="2" Spacing="4">
<TextBlock Text="Klausurnummer" FontSize="12" Opacity="0.7"/>
<NumericUpDown Value="{Binding ExamNumber}" Minimum="1" Maximum="20" FormatString="0"
ShowButtonSpinner="False"/>
</StackPanel>
<StackPanel Grid.Column="4" Spacing="4">
<TextBlock Text="Rückgabedatum" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding ReturnedAtText}" PlaceholderText="TT.MM.JJJJ"/>
<TextBlock Text="{Binding ReturnedAtTextError}" Foreground="Red" FontSize="11"
IsVisible="{Binding ReturnedAtTextError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
</Grid>
<StackPanel Spacing="4">
<TextBlock Text="{Binding LinkedExamLabel}" FontSize="12" Opacity="0.7"/>
<Grid ColumnDefinitions="*,Auto" ColumnSpacing="8">
<ComboBox ItemsSource="{Binding AvailableOriginalExams}" SelectedItem="{Binding SelectedOriginalExam}"
PlaceholderText="Keine Verknüpfung" HorizontalAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:Exam">
<StackPanel Orientation="Horizontal" Spacing="8">
<TextBlock Text="{Binding Date}"/>
<TextBlock Text="{Binding Title}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Grid.Column="1" Content="Auswahl löschen" Command="{Binding ClearOriginalExamCommand}"
IsVisible="{Binding HasSelectedOriginalExam}"/>
</Grid>
<ComboBox ItemsSource="{Binding FollowUpKindOptions}" SelectedItem="{Binding FollowUpKindName}"
IsVisible="{Binding HasSelectedOriginalExam}" HorizontalAlignment="Stretch"
ToolTip.Tip="Wiederholung: Arbeit für alle, es zählt die gewählte Regel. Nachschreibarbeit: inhaltlich eigene Arbeit nur für Schüler, die die erste Arbeit versäumt haben. Förderarbeit: inhaltlich eigene Arbeit für die als Förderschüler markierten Schüler der Gruppe, die sie statt der ersten Arbeit schreiben (darf am selben Tag liegen; das Datum der ersten Arbeit wird vorgeschlagen). Bei Nachschreib- und Förderarbeit ersetzt die Note eine fehlende Note der ersten Arbeit, und die Punkteeingabe blendet Schüler mit vorhandener Note der ersten Arbeit aus."/>
<ComboBox ItemsSource="{Binding RepeatRuleOptions}" SelectedItem="{Binding RepeatRuleName}"
IsVisible="{Binding ShowRepeatRule}"/>
<TextBlock Text="{Binding RepeatError}" Foreground="Red" FontSize="11"
IsVisible="{Binding RepeatError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
</StackPanel>
<StackPanel Spacing="4">
<TextBlock Text="Notizen" FontSize="12" Opacity="0.7"/>
<TextBox Text="{Binding Notes}" AcceptsReturn="True" Height="56" TextWrapping="Wrap"/>
</StackPanel>
<Separator Margin="0,4"/>
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="Aufgaben" FontSize="14" FontWeight="SemiBold" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="+ Aufgabe" Command="{Binding AddTaskCommand}"/>
</Grid>
<CheckBox Content="Gewichtung verwenden" IsChecked="{Binding UseWeighting}"/>
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="{Binding TotalPointsDisplay}" FontSize="12" Opacity="0.7"
VerticalAlignment="Center"/>
<TextBlock Grid.Column="1" Text="Achtung: noch keine Punkte vergeben" Foreground="Red" FontSize="12"
IsVisible="{Binding TotalPointsWarning}" VerticalAlignment="Center"/>
</Grid>
<TextBlock Text="{Binding TaskPointsError}" Foreground="Red" FontSize="11"
IsVisible="{Binding TaskPointsError, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<ItemsControl ItemsSource="{Binding Tasks}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:ExamTaskEditItem">
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}"
BorderThickness="1" CornerRadius="4" Padding="8" Margin="0,0,0,6">
<StackPanel Spacing="6">
<Grid ColumnDefinitions="26,*,Auto,Auto,Auto,Auto,Auto">
<TextBlock Grid.Column="0" Text="{Binding DisplayNr}" VerticalAlignment="Center" Opacity="0.6"/>
<TextBox Grid.Column="1" Text="{Binding Title}" PlaceholderText="Titel der Aufgabe" Margin="0,0,6,0"/>
<NumericUpDown Grid.Column="2" Value="{Binding MaxPoints}" Minimum="0" FormatString="0.##"
Width="72" ShowButtonSpinner="False" Margin="0,0,6,0" ToolTip.Tip="Maximalpunkte"/>
<NumericUpDown Grid.Column="3" Value="{Binding Weight}" Minimum="0" FormatString="0.##"
Width="72" ShowButtonSpinner="False" Margin="0,0,6,0" ToolTip.Tip="Gewichtung"
IsVisible="{Binding ShowWeight}"/>
<Button Grid.Column="4" Content="↑" Command="{Binding MoveUpCommand}" Padding="6,2"
ToolTip.Tip="Nach oben"/>
<Button Grid.Column="5" Content="↓" Command="{Binding MoveDownCommand}" Padding="6,2"
ToolTip.Tip="Nach unten" Margin="4,0,0,0"/>
<Button Grid.Column="6" Content="✕" Command="{Binding RemoveCommand}" Padding="6,2"
ToolTip.Tip="Entfernen" Margin="4,0,0,0"/>
</Grid>
<StackPanel Orientation="Horizontal" Spacing="12">
<StackPanel Orientation="Horizontal" Spacing="5" VerticalAlignment="Center">
<TextBlock Text="Fassung" VerticalAlignment="Center" FontSize="11"/>
<ComboBox ItemsSource="{Binding VariantOptions}" SelectedItem="{Binding VariantName}" Width="90"/>
</StackPanel>
<CheckBox Content="Bonusaufgabe" IsChecked="{Binding IsBonus}"
ToolTip.Tip="Erreichte Bonuspunkte erhöhen die Punktzahl; die Maximalpunkte zählen nicht zum Grundwert."/>
</StackPanel>
<Button Content="{Binding CompetencySummary}" Command="{Binding ToggleCompetencyPanelCommand}"
HorizontalAlignment="Left" FontSize="11" Padding="6,2"/>
<ItemsControl ItemsSource="{Binding CompetencyTagGroups}" IsVisible="{Binding IsCompetencyPanelOpen}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:CompetencyTagGroup">
<StackPanel Margin="12,2">
<TextBlock Text="{Binding DisplayName}" FontSize="11" Opacity="0.6"/>
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:CompetencyTag">
<ToggleButton Content="{Binding Display}" IsChecked="{Binding IsSelected}"
Margin="0,2,6,2" FontSize="11" Padding="6,2"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Separator Margin="0,4"/>
<Grid ColumnDefinitions="*,Auto">
<TextBlock Grid.Column="0" Text="Notenschlüssel" FontSize="14" FontWeight="SemiBold" VerticalAlignment="Center"/>
<Button Grid.Column="1" Content="+ Stufe" Command="{Binding AddGradingKeyRowCommand}"/>
</Grid>
<Grid ColumnDefinitions="*,8,Auto">
<ComboBox Grid.Column="0" ItemsSource="{Binding AvailableTemplates}"
SelectedItem="{Binding SelectedTemplate}"
PlaceholderText="Vorlage auswählen" HorizontalAlignment="Stretch">
<ComboBox.ItemTemplate>
<DataTemplate x:DataType="models:GradingKeyTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Grid.Column="2" Content="Anwenden" Command="{Binding ApplyTemplateCommand}"/>
</Grid>
<ItemsControl ItemsSource="{Binding GradingKeyEntries}">
<ItemsControl.ItemTemplate>
<DataTemplate x:DataType="vm:GradingKeyEntryEditItem">
<Grid ColumnDefinitions="90,90,*,Auto" Margin="0,0,0,6">
<TextBox Grid.Column="0" Text="{Binding Grade}" PlaceholderText="Note" Margin="0,0,6,0"/>
<NumericUpDown Grid.Column="1" Value="{Binding MinPercent}" Minimum="0" Maximum="100"
FormatString="0.##" Width="90" ShowButtonSpinner="False" Margin="0,0,6,0"
ToolTip.Tip="Mindest-Prozentgrenze"/>
<TextBlock Grid.Column="2" Text="{Binding AbsolutePointsDisplay}" FontSize="12" Opacity="0.65"
VerticalAlignment="Center"/>
<Button Grid.Column="3" Content="✕" Command="{Binding RemoveCommand}" Padding="6,2"
ToolTip.Tip="Entfernen"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock Text="{Binding GradingKeyValidation}" Foreground="Red" FontSize="12"
IsVisible="{Binding GradingKeyValidation, Converter={x:Static StringConverters.IsNotNullOrEmpty}}"/>
<Grid ColumnDefinitions="*,8,Auto">
<TextBox Grid.Column="0" Text="{Binding NewTemplateName}" PlaceholderText="Name für neue Vorlage"/>
<Button Grid.Column="2" Content="Als Vorlage speichern" Command="{Binding SaveAsTemplateCommand}"/>
</Grid>
</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="{Binding SaveButtonText}"
HorizontalAlignment="Stretch" Click="OnSave"/>
</Grid>
</Grid>
</Window>