Stundenplan: verwaiste Stunden per "FixIt"-Button verknüpfen
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
Der Stundenplan erkennt eine Stunde nur über Datum+Stundennummer (kein gespeichertes Verknüpfungsfeld). Per JSON-Import oder KI ohne Stundenplan-Bezug angelegte Stunden ohne passende Stundennummer tauchten dort nie auf - ein Klick auf den Termin bot nur "neu anlegen" an und hätte eine Dublette erzeugt. Neuer Button im Anlegen-Dialog sucht stattdessen nach einer passenden vorhandenen Stunde und hängt sie auf den geklickten Termin um. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,7 +6,9 @@ using LehrerApp.Core.Models;
|
||||
using LehrerApp.Desktop.Services;
|
||||
using LehrerApp.Desktop.ViewModels.Groups;
|
||||
using LehrerApp.Desktop.ViewModels.Students;
|
||||
using LehrerApp.Desktop.Views.Shared;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.Globalization;
|
||||
|
||||
namespace LehrerApp.Desktop.Views.Groups;
|
||||
|
||||
@@ -200,4 +202,59 @@ public partial class LessonDialog : Window
|
||||
if (updated is not null) vm.MarkAppliedExternally(updated);
|
||||
Close(true);
|
||||
}
|
||||
|
||||
/// Deckt die Lücke ab, dass der Stundenplan eine Stunde nur über Datum+Stundennummer findet
|
||||
/// (kein gespeichertes Verknüpfungsfeld) — eine per JSON-Import oder KI ohne Stundennummer
|
||||
/// angelegte Stunde taucht dort nie auf und würde sonst beim Klick auf den Termin dupliziert.
|
||||
/// Statt neu anzulegen, wird die gefundene vorhandene Stunde auf diesen Termin umgehängt.
|
||||
private async void OnFixIt(object? s, RoutedEventArgs e)
|
||||
{
|
||||
if (DataContext is not LessonDialogViewModel vm) return;
|
||||
if (!DateOnly.TryParseExact(vm.DateText, "dd.MM.yyyy", null, DateTimeStyles.None, out var date))
|
||||
{
|
||||
App.Services.GetRequiredService<NotificationService>()
|
||||
.ShowError("Bitte zuerst ein gültiges Datum eintragen.");
|
||||
return;
|
||||
}
|
||||
|
||||
var lessonRepo = App.Services.GetRequiredService<ILessonRepository>();
|
||||
var candidates = LessonFixItSearch.FindCandidates(lessonRepo, vm.GroupId, date);
|
||||
|
||||
if (candidates.Count == 0)
|
||||
{
|
||||
App.Services.GetRequiredService<NotificationService>()
|
||||
.ShowError("Keine passende bestehende Stunde gefunden.");
|
||||
return;
|
||||
}
|
||||
|
||||
Lesson chosen;
|
||||
if (candidates.Count == 1)
|
||||
{
|
||||
var info = new ConfirmDialogInfo
|
||||
{
|
||||
Title = "Vorhandene Stunde verknüpfen?",
|
||||
Message = $"Vorhandene Stunde „{candidates[0].Topic}“ vom {candidates[0].Date:dd.MM.yyyy} gefunden. " +
|
||||
"Mit diesem Termin verknüpfen, statt eine neue Stunde anzulegen?",
|
||||
ConfirmText = "Verknüpfen",
|
||||
};
|
||||
var confirm = new ConfirmDialog { DataContext = info };
|
||||
if (!await confirm.ShowDialog<bool>(this)) return;
|
||||
chosen = candidates[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
var pickerVm = new LinkExistingLessonDialogViewModel(candidates,
|
||||
App.Services.GetRequiredService<IUnitRepository>());
|
||||
var picker = new LinkExistingLessonDialog { DataContext = pickerVm };
|
||||
if (!await picker.ShowDialog<bool>(this) || pickerVm.Result is not { } picked) return;
|
||||
chosen = picked;
|
||||
}
|
||||
|
||||
chosen.UnitId = vm.UnitId;
|
||||
chosen.Date = date;
|
||||
chosen.LessonNumber = vm.LessonNumber;
|
||||
lessonRepo.Save(chosen);
|
||||
vm.MarkAppliedExternally(chosen);
|
||||
Close(true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user