Improve public controls and dashboard student statistics

This commit is contained in:
2026-05-11 14:51:30 +07:00
parent d695043f37
commit e5b47a3626
7 changed files with 278 additions and 126 deletions
@@ -29,10 +29,12 @@ class BrandingSettingController extends Controller
'remove_app_logo' => ['nullable', 'boolean'],
'remove_app_favicon' => ['nullable', 'boolean'],
'remove_public_portal_logo' => ['nullable', 'boolean'],
'public_show_student_documents' => ['nullable', 'boolean'],
]);
AppSetting::setValue('app_name', $data['app_name']);
AppSetting::setValue('app_short_name', $data['app_short_name']);
AppSetting::setValue('public_show_student_documents', $request->boolean('public_show_student_documents') ? '1' : '0');
$this->handleAssetUpdate($request, 'app_logo', 'branding/app-logo', (bool) ($data['remove_app_logo'] ?? false));
$this->handleAssetUpdate($request, 'app_favicon', 'branding/app-favicon', (bool) ($data['remove_app_favicon'] ?? false));
+29 -4
View File
@@ -7,6 +7,7 @@ use App\Models\Department;
use App\Models\DocumentType;
use App\Models\SchoolClass;
use App\Models\Student;
use Illuminate\Database\Eloquent\Builder;
use App\Models\StudentAchievement;
use App\Models\StudentExit;
use App\Models\StudentTransfer;
@@ -21,7 +22,9 @@ class DashboardController extends Controller
->where('is_required', true)
->pluck('id');
$students = Student::with('documents')->get();
$students = Student::with('documents')
->where('status', 'active')
->get();
$completion = $this->calculateCompletion($students, $requiredDocumentTypeIds);
@@ -42,24 +45,46 @@ class DashboardController extends Controller
->filter(fn (array $item) => $item['total'] > 0)
->values();
$activeAcademicYearId = AcademicYear::query()->where('is_active', true)->value('id');
$studentStatisticsByClass = SchoolClass::query()
->with(['academicYear', 'department'])
->when($activeAcademicYearId, fn (Builder $query) => $query->where('academic_year_id', $activeAcademicYearId))
->withCount([
'students as active_students_count' => fn (Builder $query) => $query->where('status', 'active'),
'students as male_students_count' => fn (Builder $query) => $query->where('status', 'active')->where('gender', 'L'),
'students as female_students_count' => fn (Builder $query) => $query->where('status', 'active')->where('gender', 'P'),
])
->orderBy('level')
->orderBy('name')
->get()
->filter(fn (SchoolClass $classRoom) => $classRoom->active_students_count > 0)
->values();
return view('dashboard', [
'stats' => [
'academicYears' => AcademicYear::count(),
'departments' => Department::count(),
'classes' => SchoolClass::count(),
'documentTypes' => DocumentType::count(),
'students' => Student::count(),
'students' => Student::where('status', 'active')->count(),
'studentsDropped' => StudentExit::count(),
'studentsTransferred' => StudentTransfer::count(),
'studentsGraduated' => Student::where('status', 'graduated')->count(),
'studentAchievements' => StudentAchievement::count(),
'studentsWithAchievements' => StudentAchievement::distinct('student_id')->count('student_id'),
'studentAchievements' => StudentAchievement::query()
->whereHas('student', fn (Builder $query) => $query->where('status', 'active'))
->count(),
'studentsWithAchievements' => StudentAchievement::query()
->whereHas('student', fn (Builder $query) => $query->where('status', 'active'))
->distinct('student_id')
->count('student_id'),
'studentsCompleteDocuments' => $completion['complete'],
'studentsIncompleteDocuments' => $completion['incomplete'],
'studentsVerifiedDocuments' => $completion['verified_complete'],
'studentsUnverifiedDocuments' => $completion['verified_incomplete'],
],
'studentGenderByAcademicYear' => $studentGenderByAcademicYear,
'studentStatisticsByClass' => $studentStatisticsByClass,
]);
}