|
|
@@ -28,9 +28,11 @@ public function getAllByUnit(int $unitId): Collection
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- public function findById(int $id): ?SchoolClass
|
|
|
+ public function findByIdForUnit(int $id, int $unitId): SchoolClass
|
|
|
{
|
|
|
- return SchoolClass::with('packageUnit')->find($id);
|
|
|
+ return SchoolClass::with('packageUnit')
|
|
|
+ ->where('unit_id', $unitId)
|
|
|
+ ->findOrFail($id);
|
|
|
}
|
|
|
|
|
|
public function create(array $data): SchoolClass
|
|
|
@@ -38,25 +40,17 @@ public function create(array $data): SchoolClass
|
|
|
return SchoolClass::create($data)->load('packageUnit');
|
|
|
}
|
|
|
|
|
|
- public function update(int $id, array $data): ?SchoolClass
|
|
|
+ public function update(int $id, int $unitId, array $data): SchoolClass
|
|
|
{
|
|
|
- $model = SchoolClass::find($id);
|
|
|
-
|
|
|
- if (!$model) {
|
|
|
- return null;
|
|
|
- }
|
|
|
+ $model = $this->findByIdForUnit($id, $unitId);
|
|
|
|
|
|
$model->update($data);
|
|
|
return $model->fresh('packageUnit');
|
|
|
}
|
|
|
|
|
|
- public function delete(int $id): bool
|
|
|
+ public function delete(int $id, int $unitId): bool
|
|
|
{
|
|
|
- $model = SchoolClass::find($id);
|
|
|
-
|
|
|
- if (!$model) {
|
|
|
- return false;
|
|
|
- }
|
|
|
+ $model = $this->findByIdForUnit($id, $unitId);
|
|
|
|
|
|
return (bool) $model->delete();
|
|
|
}
|
|
|
@@ -65,12 +59,9 @@ public function delete(int $id): bool
|
|
|
* Lista os alunos com contrato ATIVO no pacote vinculado à aula,
|
|
|
* já mesclando a presença registrada (se houver) para aquela aula.
|
|
|
*/
|
|
|
- public function getStudentsForClass(int $classId): array
|
|
|
+ public function getStudentsForClass(int $classId, int $unitId): array
|
|
|
{
|
|
|
- $class = SchoolClass::find($classId);
|
|
|
- if (!$class) {
|
|
|
- return [];
|
|
|
- }
|
|
|
+ $class = $this->findByIdForUnit($classId, $unitId);
|
|
|
|
|
|
$students = $this->activeStudentsQuery($class->class_package_unit_id, $class->unit_id)
|
|
|
->orderBy('students.name')
|
|
|
@@ -108,8 +99,15 @@ public function getStudentsForClass(int $classId): array
|
|
|
*
|
|
|
* @param array<int, array{student_id:int, in_class:bool, justified?:bool, notes?:string|null}> $items
|
|
|
*/
|
|
|
- public function saveAttendance(int $classId, array $items): void
|
|
|
+ public function saveAttendance(int $classId, int $unitId, array $items): void
|
|
|
{
|
|
|
+ $class = $this->findByIdForUnit($classId, $unitId);
|
|
|
+ $allowedStudentIds = $this->activeStudentsQuery($class->class_package_unit_id, $unitId)
|
|
|
+ ->whereIn('students.id', collect($items)->pluck('student_id'))
|
|
|
+ ->pluck('students.id');
|
|
|
+
|
|
|
+ abort_unless($allowedStudentIds->count() === count($items), 422, 'A lista contém alunos que não pertencem a esta aula.');
|
|
|
+
|
|
|
DB::transaction(function () use ($classId, $items) {
|
|
|
foreach ($items as $item) {
|
|
|
$inClass = (bool) ($item['in_class'] ?? false);
|