CI / build-and-test (push) Canceled after 0s
Neue Menü-Kategorie "Formulare" in der Menüleiste: "Elternbrief erzeugen..." öffnet jetzt einen Schüler-Picker statt nur aus der Schülerdetailansicht erreichbar zu sein, "Arbeitsblatt personalisieren..." ist aktiv, sobald eine einzelne Lerngruppe geöffnet ist, und erzeugt aus einer in TemplateDesigner gebauten .lavorlage-Vorlage ein PDF je aktivem Gruppenmitglied - über eine von den Elternbrief-Vorlagen getrennte WorksheetTemplateStore-Bibliothek. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
61 lines
2.4 KiB
C#
61 lines
2.4 KiB
C#
using CommunityToolkit.Mvvm.ComponentModel;
|
|
using CommunityToolkit.Mvvm.Input;
|
|
using LehrerApp.Templating;
|
|
using System.Collections.ObjectModel;
|
|
|
|
namespace LehrerApp.Desktop.ViewModels.Settings;
|
|
|
|
public partial class SettingsViewModel
|
|
{
|
|
[ObservableProperty] private string _worksheetTemplateStatus = "";
|
|
public ObservableCollection<LetterTemplateListItem> WorksheetTemplateList { get; } = [];
|
|
|
|
private void LoadWorksheetTemplates()
|
|
{
|
|
WorksheetTemplateList.Clear();
|
|
foreach (var template in _worksheetTemplates.Store.GetTemplates()) WorksheetTemplateList.Add(CreateWorksheetItem(template));
|
|
}
|
|
|
|
public void ImportWorksheetTemplate(string path)
|
|
{
|
|
WorksheetTemplateStatus = "";
|
|
try
|
|
{
|
|
var template = _worksheetTemplates.Store.Import(path);
|
|
LoadWorksheetTemplates();
|
|
WorksheetTemplateStatus = $"„{template.Name}“ wurde geprüft und lokal importiert.";
|
|
}
|
|
catch (Exception ex) when (ex is IOException or InvalidDataException or UnauthorizedAccessException or TemplateValidationException)
|
|
{ WorksheetTemplateStatus = $"Import fehlgeschlagen: {ex.Message}"; }
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void ValidateWorksheetTemplate(LetterTemplateListItem? item)
|
|
{
|
|
if (item is null) return;
|
|
try
|
|
{
|
|
var refreshed = CreateWorksheetItem(item.Model);
|
|
var index = WorksheetTemplateList.IndexOf(item);
|
|
if (index >= 0) WorksheetTemplateList[index] = refreshed;
|
|
WorksheetTemplateStatus = $"„{item.Name}“ ist gültig (Schema {refreshed.SchemaVersion}).";
|
|
}
|
|
catch (Exception ex) when (ex is IOException or InvalidDataException or TemplateValidationException)
|
|
{ WorksheetTemplateStatus = $"„{item.Name}“ ist ungültig: {ex.Message}"; }
|
|
}
|
|
|
|
[RelayCommand]
|
|
private void DeleteWorksheetTemplate(LetterTemplateListItem? item)
|
|
{
|
|
if (item is null) return;
|
|
_worksheetTemplates.Store.Delete(item.Id); WorksheetTemplateList.Remove(item); WorksheetTemplateStatus = "Vorlage gelöscht.";
|
|
}
|
|
|
|
private LetterTemplateListItem CreateWorksheetItem(InstalledTemplate template)
|
|
{
|
|
var loaded = _worksheetTemplates.Store.Load(template);
|
|
return new(template, loaded.Manifest.SchemaVersion, loaded.Manifest.Placeholders.Count(x => !x.IsConstant),
|
|
loaded.Manifest.Placeholders.Count(x => !x.IsConstant && x.Required));
|
|
}
|
|
}
|