add controllers, servoices

This commit is contained in:
root
2026-03-09 02:52:13 -04:00
parent c8de5f7edc
commit d76c871cb7
501 changed files with 34439 additions and 21843 deletions
@@ -2,179 +2,6 @@
namespace App\Services\AttendanceTracking;
use App\Models\AttendanceData;
use App\Models\AttendanceTracking;
use App\Models\Configuration;
use App\Models\Student;
use App\Models\StudentClass;
use Carbon\Carbon;
class AttendanceTrackingService
{
protected string $semester;
protected string $schoolYear;
public function __construct(
protected Student $studentModel,
protected StudentClass $studentClassModel,
protected AttendanceData $attendanceDataModel,
protected AttendanceTracking $attendanceTrackingModel,
protected Configuration $configModel,
protected AttendanceMailerService $attendanceMailerService,
protected ViolationRuleEngineService $violationRuleEngine,
protected AttendanceParentLookupService $parentLookupService,
protected AttendanceEmailComposerService $emailComposerService,
protected AttendanceNotificationLogService $notificationLogService,
protected AttendanceViolationStudentResolverService $studentResolverService,
protected AttendanceCaseQueryService $attendanceCaseQueryService,
protected AttendanceNotificationWorkflowService $attendanceNotificationWorkflowService,
protected AttendanceCommunicationSupportService $attendanceCommunicationSupportService,
protected AttendancePendingViolationService $attendancePendingViolationService
) {
$this->semester = (string) ($this->configModel->getConfig('semester') ?? '');
$this->schoolYear = (string) ($this->configModel->getConfig('school_year') ?? '');
}
public function getPendingViolations(?string $schoolYearParam = null, ?string $semesterParam = null): array
{
return $this->attendancePendingViolationService->getPendingViolations(
$this->schoolYear,
$schoolYearParam,
$semesterParam
);
}
public function getStudentCase(
int $studentId,
?string $codeParam = null,
?string $incidentDate = null,
bool $includeNotified = false,
bool $pendingOnly = false,
?string $schoolYearFilter = null,
?string $semesterFilter = null
): array {
return $this->attendanceCaseQueryService->getStudentCase(
$studentId,
$codeParam,
$incidentDate,
$includeNotified,
$pendingOnly,
$schoolYearFilter,
$semesterFilter,
$this->schoolYear,
$this->semester
);
}
public function getNotifiedViolations(?string $schoolYearParam = null, ?string $semesterParam = null): array
{
return $this->attendanceCaseQueryService->getNotifiedViolations(
$schoolYearParam,
$semesterParam,
$this->schoolYear,
$this->semester
);
}
public function compose(
int $studentId,
string $code = 'ABS_1',
string $variant = 'default',
?string $incidentDate = null
): array {
return $this->attendanceCommunicationSupportService->compose(
$studentId,
$code,
$variant,
$incidentDate
);
}
public function parentsInfo(int $studentId): array
{
return $this->attendanceCommunicationSupportService->parentsInfo($studentId);
}
public function record(array $data): array
{
return $this->attendanceNotificationWorkflowService->record($data);
}
public function sendAutoEmails(?string $variantOverride = null): array
{
$classStudentsQuery = $this->studentClassModel->query();
if (method_exists($this->studentClassModel, 'scopeActive')) {
$classStudentsQuery->active();
}
$classStudents = $classStudentsQuery
->where('school_year', $this->schoolYear)
->get()
->toArray();
if (empty($classStudents)) {
return [
'success' => true,
'sent' => 0,
'skipped' => 0,
'errors' => 0,
'details' => [],
];
}
$studentIds = array_column($classStudents, 'student_id');
$students = $this->studentModel->query()
->whereIn('id', $studentIds)
->where('is_active', 1)
->get()
->toArray();
$attendanceQuery = $this->attendanceDataModel->query()
->whereIn('student_id', $studentIds)
->where('school_year', $this->schoolYear)
->where('date', '>=', Carbon::today()->subWeeks(5)->format('Y-m-d'));
$this->violationRuleEngine->applyUnreportedAttendanceFilter(
$attendanceQuery,
$this->attendanceDataModel->getTable()
);
$attendanceData = $attendanceQuery
->whereRaw("LOWER(TRIM(status)) IN ('absent','late')")
->orderByDesc('date')
->get()
->toArray();
$violations = $this->violationRuleEngine->computeViolations(
$students,
$attendanceData,
$this->schoolYear,
null,
$attendanceData
);
return $this->attendanceNotificationWorkflowService->sendAutoEmails($violations, $variantOverride);
}
public function sendEmailManual(array $data): array
{
$sid = (int) $data['student_id'];
$code = (string) $data['code'];
$ymdRaw = (string) ($data['incident_date'] ?? '');
$ymd = $ymdRaw !== '' ? substr($ymdRaw, 0, 10) : '';
$violationDates = $this->attendanceCommunicationSupportService->getViolationDatesForStudent(
$sid,
$code,
$ymd
);
return $this->attendanceNotificationWorkflowService->sendEmailManual($data, $violationDates);
}
public function saveNotificationNote(array $data): array
{
return $this->attendanceNotificationWorkflowService->saveNotificationNote($data);
}
}
}