| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
- namespace App\Http\Controllers;
- use App\Http\Controllers\Concerns\ResolvesActiveUnit;
- use App\Models\Student;
- use App\Models\StudentContract;
- use Illuminate\Http\JsonResponse;
- class FranchiseeDashboardController extends Controller
- {
- use ResolvesActiveUnit;
- public function summary(): JsonResponse
- {
- $unitId = $this->activeUnitId();
- abort_if(! $unitId, 404, 'Unidade não encontrada.');
- $students = Student::where('unit_id', $unitId)->get(['id', 'name', 'birth_date', 'created_at']);
- $contracts = StudentContract::latestVersion()->where('unit_id', $unitId)->get(['id', 'status']);
- $unit = \App\Models\Unit::find($unitId);
- $studentsByStatus = Student::where('unit_id', $unitId)->get(['status']);
- return $this->successResponse(payload: [
- 'students_count' => $students->count(),
- 'students_by_status' => [
- 'lead' => $studentsByStatus->where('status', Student::STATUS_LEAD)->count(),
- 'active' => $studentsByStatus->where('status', Student::STATUS_ACTIVE)->count(),
- 'ex_student' => $studentsByStatus->where('status', Student::STATUS_EX_STUDENT)->count(),
- 'locked' => $studentsByStatus->where('status', Student::STATUS_LOCKED)->count(),
- ],
- 'unit_config' => [
- 'active_students_min' => $unit->active_students_min ?? 30,
- 'active_students_max' => $unit->active_students_max ?? 80,
- ],
- 'contracts' => [
- 'active' => $contracts->where('status', 'active')->count(),
- 'frozen' => $contracts->where('status', 'frozen')->count(),
- 'cancelled' => $contracts->where('status', 'cancelled')->count(),
- ],
- 'birthdays' => $students
- ->filter(fn (Student $student) => $student->birth_date?->month === now()->month)
- ->map(fn (Student $student) => [
- 'day' => $student->birth_date->day,
- 'name' => $student->name,
- ])
- ->sortBy('day')
- ->values(),
- 'enrollments' => $students->map(fn (Student $student) => [
- 'created_at' => $student->created_at?->toISOString(),
- ])->values(),
- ]);
- }
- }
|