L'administration a besoin de construire et maintenir les emplois du temps hebdomadaires pour chaque classe, en s'assurant que les enseignants ne sont pas en conflit (même créneau, classes différentes) et que les affectations enseignant-matière-classe sont respectées. Cette implémentation couvre le CRUD complet des créneaux (ScheduleSlot), la détection de conflits (classe, enseignant, salle) avec possibilité de forcer, la validation des affectations côté serveur (AC2), l'intégration calendrier pour les jours bloqués, une vue mobile-first avec onglets jour par jour, et le drag-and-drop pour réorganiser les créneaux sur desktop.
44 lines
1.2 KiB
PHP
44 lines
1.2 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Scolarite\Application\Query\GetScheduleSlots;
|
|
|
|
use App\Scolarite\Domain\Model\Schedule\ScheduleSlot;
|
|
use DateTimeImmutable;
|
|
|
|
final readonly class ScheduleSlotDto
|
|
{
|
|
public function __construct(
|
|
public string $id,
|
|
public string $classId,
|
|
public string $subjectId,
|
|
public string $teacherId,
|
|
public int $dayOfWeek,
|
|
public string $startTime,
|
|
public string $endTime,
|
|
public ?string $room,
|
|
public bool $isRecurring,
|
|
public DateTimeImmutable $createdAt,
|
|
public DateTimeImmutable $updatedAt,
|
|
) {
|
|
}
|
|
|
|
public static function fromDomain(ScheduleSlot $slot): self
|
|
{
|
|
return new self(
|
|
id: (string) $slot->id,
|
|
classId: (string) $slot->classId,
|
|
subjectId: (string) $slot->subjectId,
|
|
teacherId: (string) $slot->teacherId,
|
|
dayOfWeek: $slot->dayOfWeek->value,
|
|
startTime: $slot->timeSlot->startTime,
|
|
endTime: $slot->timeSlot->endTime,
|
|
room: $slot->room,
|
|
isRecurring: $slot->isRecurring,
|
|
createdAt: $slot->createdAt,
|
|
updatedAt: $slot->updatedAt,
|
|
);
|
|
}
|
|
}
|