using Avalonia.Controls; using LehrerApp.Core.Interfaces; using LehrerApp.Core.Models; using LehrerApp.Desktop.ViewModels.Students; using LehrerApp.Desktop.Views.Students; using LehrerApp.Templating; using Microsoft.Extensions.DependencyInjection; namespace LehrerApp.Desktop.Services; /// Öffnet den bestehenden Elternbrief-Dialog für einen Schüler, egal ob der Aufruf aus /// der Schülerdetailansicht (Student schon im DataContext) oder aus dem Formulare-Menü (Student /// erst per Picker gewählt) kommt. public static class LetterDialogs { public static async Task ShowCreateLetterDialogAsync(Window owner, Student student) { var vm = new CreateLetterDialogViewModel(student, App.Services.GetRequiredService(), App.Services.GetRequiredService(), App.Services.GetRequiredService(), App.Services.GetRequiredService(), (options, contentWidth, millimeterScale) => App.Services.GetRequiredService() .Build(student, options, contentWidth, millimeterScale), (options, contentWidth, millimeterScale) => App.Services.GetRequiredService() .BuildAbsenceDayList(student, options, contentWidth, millimeterScale), RefreshAttendanceDataAsync); var dialog = new CreateLetterDialog { DataContext = vm }; var path = await dialog.ShowDialog(owner); if (!string.IsNullOrEmpty(path) && File.Exists(path)) System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(path) { UseShellExecute = true }); } /// Holt genau den im Anwesenheitskalender-Dialog gewählten Zeitraum gezielt per /// WebUntis nach (ausgelöst durch den expliziten "Konfigurieren…"-Klick, kein Hintergrundabruf /// beim bloßen Öffnen des Briefdialogs). Damit sieht /// anschließend frische Daten im lokalen Cache, statt stillschweigend "keine Fehltage" zu /// melden, nur weil die Klassenlehrer-Übersicht für diesen Zeitraum noch nie geöffnet wurde. private static async Task RefreshAttendanceDataAsync(AttendanceCalendarOptions options, CancellationToken token) { var className = App.Services.GetRequiredService().HomeroomClassName; if (string.IsNullOrWhiteSpace(className)) return; var cache = App.Services.GetRequiredService(); var start = options.NormalizedStartMonth; var end = start.AddMonths(options.NormalizedMonthCount).AddDays(-1); await cache.GetAbsencesAsync(className, start, end, token: token); await cache.GetClassRegisterEventsAsync(className, start, end, token: token); } }