fix tests
This commit is contained in:
@@ -13,8 +13,7 @@ class AttendancePendingViolationService
|
||||
protected AttendanceData $attendanceDataModel,
|
||||
protected ViolationRuleEngineService $violationRuleEngine,
|
||||
protected AttendanceViolationStudentResolverService $studentResolverService
|
||||
) {
|
||||
}
|
||||
) {}
|
||||
|
||||
public function getPendingViolations(
|
||||
string $defaultSchoolYear,
|
||||
@@ -22,52 +21,52 @@ class AttendancePendingViolationService
|
||||
?string $semesterParam = null
|
||||
): array {
|
||||
$schoolYear = filled($schoolYearParam) ? (string) $schoolYearParam : (string) $defaultSchoolYear;
|
||||
$semester = filled($semesterParam) ? (string) $semesterParam : null;
|
||||
$semester = filled($semesterParam) ? (string) $semesterParam : null;
|
||||
|
||||
$debugInfo = [
|
||||
'school_year_param' => $schoolYear,
|
||||
'semester_param' => $semester,
|
||||
'class_students' => 0,
|
||||
'student_ids' => 0,
|
||||
'attendance_rows' => 0,
|
||||
'filtered_rows' => 0,
|
||||
'violations' => 0,
|
||||
'active_weeks' => 0,
|
||||
'abs_last5' => 0,
|
||||
'late_last5' => 0,
|
||||
'semester_param' => $semester,
|
||||
'class_students' => 0,
|
||||
'student_ids' => 0,
|
||||
'attendance_rows' => 0,
|
||||
'filtered_rows' => 0,
|
||||
'violations' => 0,
|
||||
'active_weeks' => 0,
|
||||
'abs_last5' => 0,
|
||||
'late_last5' => 0,
|
||||
];
|
||||
|
||||
$resolved = $this->studentResolverService->resolveForSchoolYear($schoolYear, $semester);
|
||||
|
||||
$schoolYear = (string) ($resolved['school_year'] ?? $schoolYear);
|
||||
$semester = $resolved['semester'] ?? $semester;
|
||||
$studentIds = $resolved['student_ids'] ?? [];
|
||||
$studentCodes = $resolved['student_codes'] ?? [];
|
||||
$students = $resolved['students'] ?? [];
|
||||
$schoolYear = (string) ($resolved['school_year'] ?? $schoolYear);
|
||||
$semester = $resolved['semester'] ?? $semester;
|
||||
$studentIds = $resolved['student_ids'] ?? [];
|
||||
$studentCodes = $resolved['student_codes'] ?? [];
|
||||
$students = $resolved['students'] ?? [];
|
||||
$studentCodeToId = $resolved['student_code_to_id'] ?? [];
|
||||
$existingIds = $resolved['existing_ids'] ?? [];
|
||||
$resolverDebug = $resolved['debug'] ?? [];
|
||||
$existingIds = $resolved['existing_ids'] ?? [];
|
||||
$resolverDebug = $resolved['debug'] ?? [];
|
||||
|
||||
$debugInfo['class_students'] = $resolverDebug['class_students'] ?? 0;
|
||||
$debugInfo['student_ids'] = $resolverDebug['student_ids'] ?? 0;
|
||||
$debugInfo['student_ids'] = $resolverDebug['student_ids'] ?? 0;
|
||||
|
||||
if (empty($studentIds) && empty($studentCodes)) {
|
||||
return [
|
||||
'students' => [],
|
||||
'students' => [],
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
'error' => 'No student identifiers found for the current school year.',
|
||||
'debug' => $debugInfo,
|
||||
'semester' => $semester,
|
||||
'error' => 'No student identifiers found for the current school year.',
|
||||
'debug' => $debugInfo,
|
||||
];
|
||||
}
|
||||
|
||||
if (empty($students)) {
|
||||
return [
|
||||
'students' => [],
|
||||
'students' => [],
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
'error' => 'No students found matching attendance records.',
|
||||
'debug' => $debugInfo,
|
||||
'semester' => $semester,
|
||||
'error' => 'No students found matching attendance records.',
|
||||
'debug' => $debugInfo,
|
||||
];
|
||||
}
|
||||
|
||||
@@ -91,14 +90,14 @@ class AttendancePendingViolationService
|
||||
'is_reported',
|
||||
'is_notified',
|
||||
])
|
||||
->when(!empty($schoolYear), fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->when(!empty($semester), fn ($q) => $q->where('semester', $semester))
|
||||
->when(! empty($schoolYear), fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->when(! empty($semester), fn ($q) => $q->where('semester', $semester))
|
||||
->where(function ($q) use ($studentIds, $studentCodes) {
|
||||
if (!empty($studentIds)) {
|
||||
if (! empty($studentIds)) {
|
||||
$q->whereIn('student_id', $studentIds);
|
||||
}
|
||||
if (!empty($studentCodes)) {
|
||||
if (!empty($studentIds)) {
|
||||
if (! empty($studentCodes)) {
|
||||
if (! empty($studentIds)) {
|
||||
$q->orWhereIn('student_id', $studentCodes);
|
||||
} else {
|
||||
$q->whereIn('student_id', $studentCodes);
|
||||
@@ -118,16 +117,16 @@ class AttendancePendingViolationService
|
||||
if (empty($termRows)) {
|
||||
$latestAttendanceTerm = DB::table($this->attendanceDataModel->getTable())
|
||||
->select('school_year', 'semester', 'date')
|
||||
->when(!empty($studentIds), fn ($q) => $q->whereIn('student_id', $studentIds))
|
||||
->when(! empty($studentIds), fn ($q) => $q->whereIn('student_id', $studentIds))
|
||||
->orderByDesc('date')
|
||||
->first();
|
||||
|
||||
if ($latestAttendanceTerm) {
|
||||
$schoolYear = !empty($latestAttendanceTerm->school_year)
|
||||
$schoolYear = ! empty($latestAttendanceTerm->school_year)
|
||||
? (string) $latestAttendanceTerm->school_year
|
||||
: $schoolYear;
|
||||
|
||||
$semester = !empty($latestAttendanceTerm->semester)
|
||||
$semester = ! empty($latestAttendanceTerm->semester)
|
||||
? (string) $latestAttendanceTerm->semester
|
||||
: $semester;
|
||||
|
||||
@@ -150,14 +149,14 @@ class AttendancePendingViolationService
|
||||
'is_reported',
|
||||
'is_notified',
|
||||
])
|
||||
->when(!empty($schoolYear), fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->when(!empty($semester), fn ($q) => $q->where('semester', $semester))
|
||||
->when(! empty($schoolYear), fn ($q) => $q->where('school_year', $schoolYear))
|
||||
->when(! empty($semester), fn ($q) => $q->where('semester', $semester))
|
||||
->where(function ($q) use ($studentIds, $studentCodes) {
|
||||
if (!empty($studentIds)) {
|
||||
if (! empty($studentIds)) {
|
||||
$q->whereIn('student_id', $studentIds);
|
||||
}
|
||||
if (!empty($studentCodes)) {
|
||||
if (!empty($studentIds)) {
|
||||
if (! empty($studentCodes)) {
|
||||
if (! empty($studentIds)) {
|
||||
$q->orWhereIn('student_id', $studentCodes);
|
||||
} else {
|
||||
$q->whereIn('student_id', $studentCodes);
|
||||
@@ -177,10 +176,10 @@ class AttendancePendingViolationService
|
||||
|
||||
if (empty($termRows)) {
|
||||
return [
|
||||
'students' => [],
|
||||
'students' => [],
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -188,7 +187,7 @@ class AttendancePendingViolationService
|
||||
$attendanceRows = [];
|
||||
foreach ($termRows as $row) {
|
||||
$dStr = $row['date'] ?? null;
|
||||
if (!$dStr) {
|
||||
if (! $dStr) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -198,7 +197,7 @@ class AttendancePendingViolationService
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($d->lt($start) || !$d->lt($endEx)) {
|
||||
if ($d->lt($start) || ! $d->lt($endEx)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -222,15 +221,15 @@ class AttendancePendingViolationService
|
||||
|
||||
if (empty($attendanceRows)) {
|
||||
return [
|
||||
'students' => [],
|
||||
'students' => [],
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
];
|
||||
}
|
||||
|
||||
$debugInfo['attendance_rows'] = count($termRows);
|
||||
$debugInfo['filtered_rows'] = count($attendanceRows);
|
||||
$debugInfo['filtered_rows'] = count($attendanceRows);
|
||||
|
||||
$violations = $this->violationRuleEngine->computeViolations(
|
||||
$students,
|
||||
@@ -241,17 +240,17 @@ class AttendancePendingViolationService
|
||||
);
|
||||
|
||||
$ruleDebug = $this->violationRuleEngine->getDebugCompute();
|
||||
$debugInfo['violations'] = count($violations);
|
||||
$debugInfo['violations'] = count($violations);
|
||||
$debugInfo['active_weeks'] = $ruleDebug['active_weeks'] ?? 0;
|
||||
$debugInfo['by_student'] = $ruleDebug['by_student'] ?? 0;
|
||||
$debugInfo['abs_last5'] = $ruleDebug['abs_last5'] ?? 0;
|
||||
$debugInfo['late_last5'] = $ruleDebug['late_last5'] ?? 0;
|
||||
$debugInfo['by_student'] = $ruleDebug['by_student'] ?? 0;
|
||||
$debugInfo['abs_last5'] = $ruleDebug['abs_last5'] ?? 0;
|
||||
$debugInfo['late_last5'] = $ruleDebug['late_last5'] ?? 0;
|
||||
|
||||
return [
|
||||
'students' => $violations,
|
||||
'students' => $violations,
|
||||
'school_year' => $schoolYear,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
'semester' => $semester,
|
||||
'debug' => $debugInfo,
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user