This commit is contained in:
1 parent
0942a8ebcf
commit
0f2a25feb5
4 files changed
+78
-1
No files matched your search
@@ -513,6 +513,35 @@ public sealed class SettingsViewModelTests
|
||||
Assert.Equal([0, 1], stored.Select(x => x.SortOrder));
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Kompetenzkatalog_Aktualisieren_ZeigtNachtraeglicheMcpAenderung()
|
||||
{
|
||||
var subject = new Subject { Name = "Naturwissenschaften", ShortName = "Nawi" };
|
||||
var repository = new FakeCompetencyDomains();
|
||||
var versions = new FakeCompetencyCatalogVersions();
|
||||
var version = versions.GetOrCreateDefault(subject.Id);
|
||||
var vm = BuildViewModel(subjects: new FakeSubjects([subject]), competencyDomains: repository,
|
||||
competencyVersions: versions);
|
||||
vm.CatalogSubject = vm.Subjects.Single();
|
||||
|
||||
Assert.True(vm.HasNoCatalogDomains);
|
||||
|
||||
repository.Add(new CompetencyDomain
|
||||
{
|
||||
SubjectId = subject.Id,
|
||||
GradeLevel = 10,
|
||||
VersionId = version.Id,
|
||||
Name = "Erkenntnisgewinnung",
|
||||
Items = [new CompetencyItem { Code = "EG1", Description = "Modelle verwenden" }],
|
||||
});
|
||||
|
||||
vm.RefreshCompetencyCatalogCommand.Execute(null);
|
||||
|
||||
var domain = Assert.Single(vm.Domains);
|
||||
Assert.Equal("Erkenntnisgewinnung", domain.Name);
|
||||
Assert.False(vm.HasNoCatalogDomains);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Kompetenzen_Umsortieren_PersistiertSortOrder()
|
||||
{
|
||||
|
||||
@@ -31,6 +31,10 @@ public partial class SettingsViewModel
|
||||
|
||||
public ObservableCollection<DomainEditItem> Domains { get; } = [];
|
||||
public ObservableCollection<CompetencyCatalogVersion> CatalogVersions { get; } = [];
|
||||
public bool HasNoCatalogDomains => CatalogSubject is not null && CatalogVersion is not null && Domains.Count == 0;
|
||||
public string EmptyCatalogMessage => CatalogSubject is null || CatalogVersion is null
|
||||
? ""
|
||||
: $"Keine Kompetenzbereiche für {CatalogSubject.Name}, Klasse {CatalogGradeLevel}, Version „{CatalogVersion.Name}“ hinterlegt.";
|
||||
|
||||
// ── Katalog: Laden ────────────────────────────────────────────────────────
|
||||
|
||||
@@ -38,6 +42,28 @@ public partial class SettingsViewModel
|
||||
partial void OnCatalogGradeLevelChanged(int value) => LoadCatalog();
|
||||
partial void OnCatalogVersionChanged(CompetencyCatalogVersion? value) => LoadCatalog();
|
||||
|
||||
[RelayCommand]
|
||||
private void RefreshCompetencyCatalog()
|
||||
{
|
||||
var selectedSubjectId = CatalogSubject?.Id;
|
||||
var selectedVersionId = CatalogVersion?.Id;
|
||||
|
||||
LoadSubjects();
|
||||
if (selectedSubjectId is not Guid subjectId)
|
||||
{
|
||||
LoadCatalog();
|
||||
return;
|
||||
}
|
||||
|
||||
CatalogSubject = Subjects.FirstOrDefault(s => s.Id == subjectId);
|
||||
if (CatalogSubject is null) return;
|
||||
|
||||
CatalogVersion = CatalogVersions.FirstOrDefault(v => v.Id == selectedVersionId)
|
||||
?? CatalogVersions.FirstOrDefault(v => v.IsDefault)
|
||||
?? CatalogVersions.FirstOrDefault();
|
||||
LoadCatalog();
|
||||
}
|
||||
|
||||
private void LoadVersions()
|
||||
{
|
||||
var selectedId = CatalogVersion?.Id;
|
||||
@@ -56,10 +82,17 @@ public partial class SettingsViewModel
|
||||
{
|
||||
Domains.Clear();
|
||||
CatalogValidation = "";
|
||||
if (CatalogSubject is null || CatalogVersion is null) return;
|
||||
if (CatalogSubject is null || CatalogVersion is null)
|
||||
{
|
||||
OnPropertyChanged(nameof(HasNoCatalogDomains));
|
||||
OnPropertyChanged(nameof(EmptyCatalogMessage));
|
||||
return;
|
||||
}
|
||||
foreach (var d in _domainRepo.GetBySubjectAndGrade(CatalogSubject.Id, CatalogGradeLevel, CatalogVersion.Id))
|
||||
Domains.Add(CreateDomainEditItem(d));
|
||||
RefreshDomainMoveState();
|
||||
OnPropertyChanged(nameof(HasNoCatalogDomains));
|
||||
OnPropertyChanged(nameof(EmptyCatalogMessage));
|
||||
}
|
||||
|
||||
// ── Versionen (Bildungspläne) verwalten ──────────────────────────────────
|
||||
@@ -120,6 +153,8 @@ public partial class SettingsViewModel
|
||||
_domainRepo.Save(domain);
|
||||
Domains.Add(CreateDomainEditItem(domain));
|
||||
RefreshDomainMoveState();
|
||||
OnPropertyChanged(nameof(HasNoCatalogDomains));
|
||||
OnPropertyChanged(nameof(EmptyCatalogMessage));
|
||||
NewDomainName = ""; NewDomainCode = ""; CatalogValidation = "";
|
||||
}
|
||||
|
||||
@@ -130,6 +165,8 @@ public partial class SettingsViewModel
|
||||
_domainRepo.Delete(item.Id);
|
||||
Domains.Remove(item);
|
||||
PersistDomainOrder();
|
||||
OnPropertyChanged(nameof(HasNoCatalogDomains));
|
||||
OnPropertyChanged(nameof(EmptyCatalogMessage));
|
||||
}
|
||||
|
||||
private DomainEditItem CreateDomainEditItem(CompetencyDomain domain) =>
|
||||
|
||||
@@ -67,6 +67,12 @@ public partial class SettingsViewModel : ObservableObject
|
||||
|
||||
[ObservableProperty] private int _activeTabIndex;
|
||||
|
||||
partial void OnActiveTabIndexChanged(int value)
|
||||
{
|
||||
if (value == (int)SettingsTab.Competencies)
|
||||
RefreshCompetencyCatalog();
|
||||
}
|
||||
|
||||
// ── Konstruktor ───────────────────────────────────────────────────────────
|
||||
|
||||
private readonly ISchoolHolidayRepository _schoolHolidays;
|
||||
|
||||
@@ -149,6 +149,9 @@
|
||||
IsEnabled="{Binding CatalogSubject, Converter={x:Static ObjectConverters.IsNotNull}}"
|
||||
ToolTip.Tip="Katalog in eine andere Klassenstufe (derselben Version) kopieren"/>
|
||||
</Grid>
|
||||
<Button Content="Katalog aktualisieren" Command="{Binding RefreshCompetencyCatalogCommand}"
|
||||
HorizontalAlignment="Right"
|
||||
ToolTip.Tip="Fächer, Versionen und Kompetenzen neu aus der Datenbank laden"/>
|
||||
|
||||
<!-- Bildungsplan-Versionen verwalten -->
|
||||
<Border BorderBrush="{DynamicResource SystemControlForegroundBaseLowBrush}"
|
||||
@@ -193,6 +196,8 @@
|
||||
<!-- Leerer Zustand -->
|
||||
<TextBlock Text="Kein Fach ausgewählt." Classes="emptyhint"
|
||||
IsVisible="{Binding CatalogSubject, Converter={x:Static ObjectConverters.IsNull}}"/>
|
||||
<TextBlock Text="{Binding EmptyCatalogMessage}" Classes="emptyhint" TextWrapping="Wrap"
|
||||
IsVisible="{Binding HasNoCatalogDomains}"/>
|
||||
|
||||
<!-- Domain-Liste -->
|
||||
<ItemsControl ItemsSource="{Binding Domains}"
|
||||
|
||||
Reference in new issue
Block a user