/home/techb158/workloadmatch.com/Manager/Inc
NameSizeModeActions
LLMProviders/-0755rm
AddCourse.php25560644editdlrm
AddCourseTime.php19040644editdlrm
AddGroup - Copy.php46330644editdlrm
AddGroup.php56980644editdlrm
AddHoliday.php17720644editdlrm
AddTeacherLevel.php23070644editdlrm
AddUser.php128210644editdlrm
Add_Retake_Remediation.php13340644editdlrm
AIScheduleOptimizer.php119190644editdlrm
Assignment-1.php753800644editdlrm
Assignment-2.php753800644editdlrm
Assignment - BackUp- orgenal.php732720644editdlrm
Assignment - BackUp.php627610644editdlrm
Assignment - Copy (Last File Updated 2025-05-15).php729330644editdlrm
Assignment - Copy.php618260644editdlrm
Assignment.php743080644editdlrm
Assignment_BackUp.php790470644editdlrm
Assign_Teacher_Manual.php209570644editdlrm
Assign_Teacher_Manual_bak.php.disabled205350644editdlrm
Assign_Teacher_Manual_Force_conflict.php211060644editdlrm
Available_Teacher_Report.php23420644editdlrm
BatchScheduler.php35880644editdlrm
CombinedScheduler.php81300644editdlrm
ConflictResolver.php49200644editdlrm
error_log8690644editdlrm
Lockup_to_Assign.php63670644editdlrm
Process_Assignment - Copy.php42330644editdlrm
Process_Assignment.php58130644editdlrm
ScheduleEngine.php55960644editdlrm
ScheduleGenerator.php88110644editdlrm
Schedule_Report_by_Group.php30740644editdlrm
TeacherAssignmentEngine.php124870644editdlrm
Update_Course.php27170644editdlrm
Update_Course_Time.php19470644editdlrm
Update_Group - Copy.php34890644editdlrm
Update_Group.php96570644editdlrm
Update_Holiday.php23570644editdlrm
Update_Profile.php49230644editdlrm
Update_User.php55470644editdlrm
Edit: /home/techb158/workloadmatch.com/Manager/Inc/ScheduleEngine.php (5596B)
db = $db; } public function getGroupInfo(int $groupId): ?array { $stmt = $this->db->prepare(" SELECT Time_Slot, Time_From, Time_To, class_days, Weekend_Class, Group_Name FROM manager_group_name WHERE Group_ID = ? "); $stmt->bind_param("i", $groupId); $stmt->execute(); $result = $stmt->get_result()->fetch_assoc(); $stmt->close(); return $result ?: null; } public function fetchSlotTimes(array $slotLabels, DateTime $managerStart, DateTime $managerEnd): array { $timeFrom = []; $timeTo = []; foreach ($slotLabels as $label) { $label = trim($label); $stmt = $this->db->prepare("SELECT Time_From, Time_To FROM time_slot_programs WHERE Time_Slot = ?"); $stmt->bind_param("s", $label); $stmt->execute(); $result = $stmt->get_result(); $validSlotFound = false; while ($row = $result->fetch_assoc()) { $slotStart = new DateTime($row['Time_From']); $slotEnd = new DateTime($row['Time_To']); if ($slotStart >= $managerStart && $slotEnd <= $managerEnd) { $timeFrom[] = $slotStart->format("H:i:s"); $timeTo[] = $slotEnd->format("H:i:s"); $validSlotFound = true; break; } } if (!$validSlotFound && count($slotLabels) === 1) { $timeFrom[] = $managerStart->format("H:i:s"); $timeTo[] = $managerEnd->format("H:i:s"); } $stmt->close(); } return [$timeFrom, $timeTo]; } public function getHolidays(string $startDate): array { $holidays = []; $res = $this->db->query("SELECT Event_Start, Event_End FROM Events WHERE Calendar_Year = YEAR('$startDate')"); while ($row = $res->fetch_assoc()) { $start = new DateTime($row['Event_Start']); $end = new DateTime($row['Event_End']); while ($start <= $end) { $holidays[] = $start->format('Y-m-d'); $start->modify('+1 day'); } } return $holidays; } public function getRetakeDates(int $programId, int $groupId): array { $retakeDates = []; $stmt = $this->db->prepare("SELECT Retake_Date FROM retake_records WHERE Program_ID = ? AND Group_ID = ?"); $stmt->bind_param("ii", $programId, $groupId); $stmt->execute(); $res = $stmt->get_result(); while ($row = $res->fetch_assoc()) { $retakeDates[] = $row['Retake_Date']; } $stmt->close(); return $retakeDates; } public function generateValidDates(string $startDate, ?string $endDate, array $classDays, array $holidayDates, array $retakeDates): array { $validDates = []; $cur = new DateTime($startDate); $end = $endDate ? new DateTime($endDate) : null; while (!$end || $cur <= $end) { $day = $cur->format('l'); $dateStr = $cur->format('Y-m-d'); $month = (int)$cur->format('m'); if ($month === 7 || !in_array($day, $classDays) || in_array($dateStr, $holidayDates) || in_array($dateStr, $retakeDates)) { $cur->modify('+1 day'); continue; } $validDates[] = $dateStr; $cur->modify('+1 day'); if ($end === null && count($validDates) > 365) break; } return $validDates; } public function calculateSessionLength(array $timeFrom, array $timeTo): float { $sessionLength = 0; foreach ($timeFrom as $i => $from) { $fromTime = new DateTime($from); $toTime = new DateTime($timeTo[$i]); $sessionLength += ($toTime->getTimestamp() - $fromTime->getTimestamp()) / 3600; } $slotCount = count($timeFrom); return $slotCount > 0 ? $sessionLength / $slotCount : 3; } public function calculateCourseSessions(int $programId, float $sessionLength): array { $courseSessions = []; $res = $this->db->query("SELECT Course_ID, Course_Time FROM Courses WHERE Program_ID = $programId"); while ($row = $res->fetch_assoc()) { $courseSessions[$row['Course_ID']] = (int)ceil($row['Course_Time'] / $sessionLength); } return $courseSessions; } public function formatTimeSlotLabel(string $slot, string $day): string { if ($day === 'Saturday') { if (stripos($slot, 'evening') !== false) return 'Morning (Sat)'; if (stripos($slot, 'morning') !== false) return 'Morning'; } return $slot; } public function formatTimeSlotRange(string $slot, string $start, string $end, string $day): string { if ($day === 'Saturday') { if (stripos($slot, 'morning') !== false) return "08:30 AM - 12:30 PM"; if (stripos($slot, 'evening') !== false) return "09:00 AM - 01:00 PM"; } return date('h:i A', strtotime($start)) . ' - ' . date('h:i A', strtotime($end)); } public function getCourseNames(): array { $names = []; $res = $this->db->query("SELECT Course_ID, Course_Name FROM Courses"); while ($row = $res->fetch_assoc()) { $names[$row['Course_ID']] = $row['Course_Name']; } return $names; } }