Manche Räume sind unregelmäßig bestückt (z.B. eine Klasse mit 3 Reihen, in zwei davon fehlt ein Einzeltisch) - das feste Rows x Columns-Raster kennt aber keine per-Reihe abweichende Spaltenzahl. Neues Feld SeatingPlan.HiddenSeats für Plätze ohne physischen Tisch. Ein ausgeblendeter Platz bleibt Teil des Rasters (für die Spalten-/Reihenausrichtung von SeatingPlanPanel), wird im Ansichtsmodus aber nicht gerendert; im Bearbeitungsmodus bleibt er sichtbar (abgeblendet) mit einem Umschalt-Button direkt auf dem Platz. Nur leere Plätze lassen sich ausblenden; Zuweisen/ Verschieben eines Schülers auf einen ausgeblendeten Platz wird sowohl im ViewModel als auch im Drag&Drop-Ziel-Check verhindert. SeatingPlanRepository.Save filtert HiddenSeats zusätzlich auf das gültige Raster und blendet einen Platz automatisch wieder ein, falls er trotzdem belegt wird. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
49 lines
1.8 KiB
C#
49 lines
1.8 KiB
C#
namespace LehrerApp.Core.Models;
|
|
|
|
/// <summary>
|
|
/// Ein Sitzplan einer Lerngruppe. Eine Gruppe kann mehrere Pläne besitzen,
|
|
/// beispielsweise für unterschiedliche Unterrichtsräume.
|
|
/// </summary>
|
|
public class SeatingPlan
|
|
{
|
|
public Guid Id { get; set; } = Guid.NewGuid();
|
|
public Guid GroupId { get; set; }
|
|
public string Name { get; set; } = "";
|
|
public string Room { get; set; } = "";
|
|
public int Rows { get; set; } = 4;
|
|
public int Columns { get; set; } = 4;
|
|
/// <summary>
|
|
/// Zeigt die Tafel unterhalb des Sitzrasters an. Der Standardwert <c>false</c>
|
|
/// erhält für bestehende Pläne die bisherige Darstellung oberhalb des Rasters.
|
|
/// </summary>
|
|
public bool IsBoardAtBottom { get; set; }
|
|
/// <summary>
|
|
/// Zusätzlicher horizontaler Abstand nach jeder Spalte, in Pixeln. Der Eintrag mit Index 0
|
|
/// liegt zwischen der ersten und zweiten Spalte. Fehlende Einträge bedeuten keinen Abstand.
|
|
/// </summary>
|
|
public List<double> ColumnGapWidths { get; set; } = [];
|
|
public List<SeatAssignment> Assignments { get; set; } = [];
|
|
/// <summary>
|
|
/// Plätze, für die im Raum physisch kein Tisch existiert (z. B. eine Reihe mit einer Lücke) —
|
|
/// werden im Sitzplan ausgeblendet, bleiben aber Teil des Rasters, damit Reihen/Spalten
|
|
/// weiterhin korrekt ausgerichtet sind. Ein ausgeblendeter Platz kann nie belegt sein, siehe
|
|
/// SeatingPlanRepository.Save.
|
|
/// </summary>
|
|
public List<HiddenSeat> HiddenSeats { get; set; } = [];
|
|
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
|
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
|
}
|
|
|
|
public class SeatAssignment
|
|
{
|
|
public int Row { get; set; }
|
|
public int Column { get; set; }
|
|
public Guid StudentId { get; set; }
|
|
}
|
|
|
|
public class HiddenSeat
|
|
{
|
|
public int Row { get; set; }
|
|
public int Column { get; set; }
|
|
}
|