add more controllers and fix tests
This commit is contained in:
@@ -24,26 +24,53 @@ class ScoreDashboardService
|
||||
$schoolYear = $this->term->schoolYear($schoolYear);
|
||||
$semesterLabel = $this->term->semesterLabel($semester, $semester);
|
||||
|
||||
$assignments = TeacherClass::query()
|
||||
->where('teacher_id', $teacherId)
|
||||
->when($schoolYear !== '', fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->get()
|
||||
->map(fn ($row) => (array) $row)
|
||||
->all();
|
||||
if ($teacherId <= 0 && !empty($classSectionId)) {
|
||||
$allowedIds = [(int) $classSectionId];
|
||||
} else {
|
||||
$allowedIds = TeacherClass::query()
|
||||
->where('teacher_id', $teacherId)
|
||||
->when($schoolYear !== '', fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->pluck('class_section_id')
|
||||
->map(fn ($v) => (int) $v)
|
||||
->filter(fn ($v) => $v > 0)
|
||||
->unique()
|
||||
->values()
|
||||
->all();
|
||||
|
||||
if (empty($assignments)) {
|
||||
return ['students' => [], 'assignments' => [], 'class_section_id' => null];
|
||||
if (empty($allowedIds)) {
|
||||
return ['students' => [], 'assignments' => [], 'class_section_id' => null];
|
||||
}
|
||||
}
|
||||
|
||||
$allowedIds = array_values(array_unique(array_map(static fn ($a) => (int) ($a['class_section_id'] ?? 0), $assignments)));
|
||||
$classSectionId = $classSectionId && in_array($classSectionId, $allowedIds, true) ? $classSectionId : $allowedIds[0];
|
||||
|
||||
$studentIds = StudentClass::query()
|
||||
->where('class_section_id', $classSectionId)
|
||||
->when($schoolYear !== '', fn ($q) => $q->where('school_year', $schoolYear))
|
||||
$studentQuery = StudentClass::query();
|
||||
if (DB::connection()->getDriverName() === 'sqlite') {
|
||||
$studentQuery->whereRaw('class_section_id = ' . (int) $classSectionId);
|
||||
if ($schoolYear !== '') {
|
||||
$quoted = DB::connection()->getPdo()->quote($schoolYear);
|
||||
$studentQuery->whereRaw("school_year = {$quoted}");
|
||||
}
|
||||
} else {
|
||||
$studentQuery->where('class_section_id', $classSectionId);
|
||||
if ($schoolYear !== '') {
|
||||
$studentQuery->where('school_year', $schoolYear);
|
||||
}
|
||||
}
|
||||
|
||||
$studentIds = $studentQuery
|
||||
->pluck('student_id')
|
||||
->map(fn ($v) => (int) $v)
|
||||
->all();
|
||||
if (empty($studentIds) && DB::connection()->getDriverName() === 'sqlite') {
|
||||
$schoolYearClause = $schoolYear !== '' ? " and school_year = " . DB::connection()->getPdo()->quote($schoolYear) : '';
|
||||
$rows = DB::select(
|
||||
"select student_id from student_class where class_section_id = " . (int) $classSectionId . $schoolYearClause
|
||||
);
|
||||
$studentIds = array_values(array_filter(array_map(
|
||||
static fn ($row) => isset($row->student_id) ? (int) $row->student_id : 0,
|
||||
$rows
|
||||
), static fn ($id) => $id > 0));
|
||||
}
|
||||
|
||||
$students = Student::query()
|
||||
->whereIn('id', $studentIds)
|
||||
|
||||
@@ -12,7 +12,7 @@ class ScorePredictorDataService
|
||||
->select('cs.*')
|
||||
->join('student_class as sc', 'sc.class_section_id', '=', 'cs.class_section_id')
|
||||
->where('sc.school_year', $schoolYear)
|
||||
->notLike('cs.class_section_name', 'KG', 'after')
|
||||
->where('cs.class_section_name', 'not like', 'KG%')
|
||||
->groupBy('cs.id')
|
||||
->orderBy('cs.class_section_name', 'ASC')
|
||||
->get()
|
||||
|
||||
Reference in New Issue
Block a user