FranchiseeDashboardController.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Concerns\ResolvesActiveUnit;
  4. use App\Models\Student;
  5. use App\Models\StudentContract;
  6. use Illuminate\Http\JsonResponse;
  7. class FranchiseeDashboardController extends Controller
  8. {
  9. use ResolvesActiveUnit;
  10. public function summary(): JsonResponse
  11. {
  12. $unitId = $this->activeUnitId();
  13. abort_if(! $unitId, 404, 'Unidade não encontrada.');
  14. $students = Student::where('unit_id', $unitId)->get(['id', 'name', 'birth_date', 'created_at']);
  15. $contracts = StudentContract::latestVersion()->where('unit_id', $unitId)->get(['id', 'status']);
  16. $unit = \App\Models\Unit::find($unitId);
  17. return $this->successResponse(payload: [
  18. 'students_count' => $students->count(),
  19. 'unit_config' => [
  20. 'active_students_min' => $unit->active_students_min ?? 30,
  21. 'active_students_medium' => $unit->active_students_medium ?? 50,
  22. 'active_students_max' => $unit->active_students_max ?? 80,
  23. ],
  24. 'contracts' => [
  25. 'active' => $contracts->where('status', 'active')->count(),
  26. 'frozen' => $contracts->where('status', 'frozen')->count(),
  27. 'cancelled' => $contracts->where('status', 'cancelled')->count(),
  28. ],
  29. 'birthdays' => $students
  30. ->filter(fn (Student $student) => $student->birth_date?->month === now()->month)
  31. ->map(fn (Student $student) => [
  32. 'day' => $student->birth_date->day,
  33. 'name' => $student->name,
  34. ])
  35. ->sortBy('day')
  36. ->values(),
  37. 'enrollments' => $students->map(fn (Student $student) => [
  38. 'created_at' => $student->created_at?->toISOString(),
  39. ])->values(),
  40. ]);
  41. }
  42. }