From 0d5fb6d146b9e324454d07662f2fea579683b2b5 Mon Sep 17 00:00:00 2001 From: Baddi86 Date: Tue, 1 Sep 2026 23:08:59 +0200 Subject: [PATCH] =?UTF-8?q?Vorg=C3=A4nge:=20verkn=C3=BCpfte=20Dokumentatio?= =?UTF-8?q?n=20direkt=20zum=20Nachlesen=20=C3=B6ffnen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "Bearbeiten"-Button an jedem verknüpften bzw. verknüpfbaren Eintrag öffnet den bestehenden Dokumentations-Dialog, ohne den Vorgänge-Tab zu verlassen — bisher musste man dafür in den Schülerdatensatz wechseln. Co-Authored-By: Claude Sonnet 5 --- .../ClassTeacher/ClassTeacherCasesViewModel.cs | 16 +++++++++++++++- .../ClassTeacher/VorgangViewModels.cs | 13 ++++++++++++- .../ClassTeacher/ClassTeacherCasesView.axaml | 18 ++++++++++++++---- TODO.md | 10 ++++++++++ 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/LehrerApp.Desktop/ViewModels/ClassTeacher/ClassTeacherCasesViewModel.cs b/LehrerApp.Desktop/ViewModels/ClassTeacher/ClassTeacherCasesViewModel.cs index ff01c95..65c9288 100644 --- a/LehrerApp.Desktop/ViewModels/ClassTeacher/ClassTeacherCasesViewModel.cs +++ b/LehrerApp.Desktop/ViewModels/ClassTeacher/ClassTeacherCasesViewModel.cs @@ -97,7 +97,8 @@ public partial class ClassTeacherCasesViewModel : ObservableObject var names = vorgang.StudentIds.Select(id => nameById.GetValueOrDefault(id, "")) .Where(n => n != ""); var item = new VorgangItem(vorgang, string.Join(", ", names), LinkDocumentation, - UnlinkDocumentation, RemoveClassRegisterEntry) { IsRevealed = revealedIds.Contains(vorgang.Id) }; + UnlinkDocumentation, RemoveClassRegisterEntry, EditDocumentation) + { IsRevealed = revealedIds.Contains(vorgang.Id) }; var linkedIds = vorgang.DocumentationIds.ToHashSet(); foreach (var doc in allDocs.Where(d => linkedIds.Contains(d.Id))) @@ -169,6 +170,19 @@ public partial class ClassTeacherCasesViewModel : ObservableObject await LoadInternal(); } + /// Öffnet eine verknüpfte oder noch verknüpfbare Dokumentation im vollen Bearbeiten-Dialog, ohne + /// den Vorgänge-Tab zu verlassen (Nutzer-Feedback: bisher musste man dafür zum Nachlesen in den + /// Schülerdatensatz wechseln). Reine Bearbeitung der Dokumentation selbst — welche Vorgänge sie + /// verlinken, ändert sich dadurch nicht. + private async Task EditDocumentation(DocumentationItem doc) + { + if (OnEditDocumentation is null) return; + var result = await OnEditDocumentation(doc.Model.StudentId, _rosterStudentOptions, doc.Model); + if (result is null) return; + _documentation.Save(result); + await LoadInternal(); + } + /// Dokumentation der Vorgangs-Schüler*innen, die noch nicht mit diesem Vorgang verknüpft ist — /// reine, ohne Repository-Zugriff testbare Filterlogik (gleiches Muster wie /// ). diff --git a/LehrerApp.Desktop/ViewModels/ClassTeacher/VorgangViewModels.cs b/LehrerApp.Desktop/ViewModels/ClassTeacher/VorgangViewModels.cs index b6de0a5..7cbf8b2 100644 --- a/LehrerApp.Desktop/ViewModels/ClassTeacher/VorgangViewModels.cs +++ b/LehrerApp.Desktop/ViewModels/ClassTeacher/VorgangViewModels.cs @@ -58,6 +58,7 @@ public partial class VorgangItem : ObservableObject private readonly Func _onLink; private readonly Func _onUnlink; private readonly Func _onRemoveClassRegisterEntry; + private readonly Func _onEditDocumentation; public Vorgang Model { get; } public string StudentNames { get; } @@ -79,7 +80,8 @@ public partial class VorgangItem : ObservableObject public VorgangItem(Vorgang model, string studentNames, Func onLink, Func onUnlink, - Func onRemoveClassRegisterEntry) + Func onRemoveClassRegisterEntry, + Func onEditDocumentation) { Model = model; StudentNames = studentNames; @@ -87,10 +89,19 @@ public partial class VorgangItem : ObservableObject _onLink = onLink; _onUnlink = onUnlink; _onRemoveClassRegisterEntry = onRemoveClassRegisterEntry; + _onEditDocumentation = onEditDocumentation; } [RelayCommand] private void Reveal() => IsRevealed = !IsRevealed; + /// Öffnet den vollen Dokumentations-Dialog zum Nachlesen/Bearbeiten, ohne den Vorgänge-Tab zu + /// verlassen (Nutzer-Feedback: bisher musste man dafür in den Schülerdatensatz wechseln). + [RelayCommand] + private async Task EditDocumentation(DocumentationItem? doc) + { + if (doc is not null) await _onEditDocumentation(doc); + } + [RelayCommand] private async Task Link(DocumentationItem? doc) { diff --git a/LehrerApp.Desktop/Views/ClassTeacher/ClassTeacherCasesView.axaml b/LehrerApp.Desktop/Views/ClassTeacher/ClassTeacherCasesView.axaml index ab53b82..e8f73f0 100644 --- a/LehrerApp.Desktop/Views/ClassTeacher/ClassTeacherCasesView.axaml +++ b/LehrerApp.Desktop/Views/ClassTeacher/ClassTeacherCasesView.axaml @@ -99,7 +99,7 @@ - + @@ -111,7 +111,13 @@