UI Improvements: Planungsdialog, Fehlzeitendarstellung, Vorauswahl der Einheit
CI / build-and-test (push) Canceled after 0s
CI / build-and-test (push) Canceled after 0s
This commit is contained in:
@@ -102,10 +102,10 @@ public partial class PlanningTabViewModel : ObservableObject
|
||||
GradeLevel = group?.GradeLevel ?? 0;
|
||||
SubjectName = SubjectId is Guid sid ? _subjects.GetById(sid)?.Name ?? "" : "";
|
||||
GroupLabel = group?.Name ?? "";
|
||||
LoadUnits();
|
||||
LoadUnits(preferActive: true);
|
||||
}
|
||||
|
||||
private void LoadUnits()
|
||||
private void LoadUnits(bool preferActive = false)
|
||||
{
|
||||
var selectedId = SelectedUnit?.Id;
|
||||
Units.Clear();
|
||||
@@ -128,7 +128,11 @@ public partial class PlanningTabViewModel : ObservableObject
|
||||
KnownMaterials = materials.OrderBy(m => m, StringComparer.CurrentCultureIgnoreCase).ToList();
|
||||
KnownShorthands = shorthands.OrderBy(s => s, StringComparer.CurrentCultureIgnoreCase).ToList();
|
||||
|
||||
SelectedUnit = Units.FirstOrDefault(u => u.Id == selectedId) ?? Units.FirstOrDefault();
|
||||
// Beim ersten Öffnen bzw. beim Wechsel aus dem Stundenplan steht die laufende Einheit im
|
||||
// Fokus. Eine bewusste Auswahl innerhalb derselben Gruppe bleibt bei Refreshes erhalten.
|
||||
SelectedUnit = !preferActive && selectedId is not null
|
||||
? Units.FirstOrDefault(u => u.Id == selectedId) ?? Units.FirstOrDefault(u => u.Status == UnitStatus.Active) ?? Units.FirstOrDefault()
|
||||
: Units.FirstOrDefault(u => u.Status == UnitStatus.Active) ?? Units.FirstOrDefault();
|
||||
}
|
||||
|
||||
partial void OnSelectedUnitChanged(UnitSummary? value)
|
||||
@@ -574,6 +578,7 @@ public partial class UnitDialogViewModel : ObservableObject
|
||||
[ObservableProperty] private string _startDateText = "";
|
||||
[ObservableProperty] private string _endDateText = "";
|
||||
[ObservableProperty] private string _statusName = UnitStatusDisplay.Options[0];
|
||||
[ObservableProperty] private string _statusNotice = "";
|
||||
[ObservableProperty] private string _notes = "";
|
||||
[ObservableProperty] private bool _isCompetencyPanelOpen;
|
||||
[ObservableProperty] private string _titleError = "";
|
||||
@@ -594,6 +599,20 @@ public partial class UnitDialogViewModel : ObservableObject
|
||||
public string DialogTitle => _editingUnit is null ? "Neue Einheit anlegen" : "Einheit bearbeiten";
|
||||
public string SaveButtonText => _editingUnit is null ? "Anlegen" : "Speichern";
|
||||
|
||||
partial void OnStatusNameChanged(string value)
|
||||
{
|
||||
if (UnitStatusDisplay.FromName(value) != UnitStatus.Active)
|
||||
{
|
||||
StatusNotice = "";
|
||||
return;
|
||||
}
|
||||
|
||||
var previous = _units.GetByGroup(_groupId)
|
||||
.FirstOrDefault(u => u.Status == UnitStatus.Active && u.Id != _editingUnit?.Id);
|
||||
StatusNotice = previous is null ? ""
|
||||
: $"„{previous.Title}“ wird beim Speichern automatisch abgeschlossen.";
|
||||
}
|
||||
|
||||
public UnitDialogViewModel(IUnitRepository units, ICompetencyDomainRepository competencyDomains,
|
||||
Guid groupId, Guid? subjectId, int gradeLevel, string groupName, string subjectName, Unit? editingUnit)
|
||||
{
|
||||
@@ -679,6 +698,17 @@ public partial class UnitDialogViewModel : ObservableObject
|
||||
Result.Status = UnitStatusDisplay.FromName(StatusName);
|
||||
Result.Notes = string.IsNullOrWhiteSpace(Notes) ? null : Notes.Trim();
|
||||
Result.Competencies = _competencyCodes;
|
||||
if (Result.Status == UnitStatus.Active)
|
||||
{
|
||||
// Pro Lerngruppe gibt es genau einen aktuellen Arbeitskontext. Frühere laufende
|
||||
// Einheiten werden nicht verworfen, sondern fachlich sauber abgeschlossen.
|
||||
foreach (var previous in _units.GetByGroup(_groupId)
|
||||
.Where(u => u.Status == UnitStatus.Active && u.Id != Result.Id))
|
||||
{
|
||||
previous.Status = UnitStatus.Completed;
|
||||
_units.Save(previous);
|
||||
}
|
||||
}
|
||||
_units.Save(Result);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user