/home/techb158/workloadmatch.com/Manager/Inc
Edit: /home/techb158/workloadmatch.com/Manager/Inc/BatchScheduler.php (3588B)
db = $db;
$this->scheduler = new CombinedScheduler($db);
if ($provider) {
$this->scheduler->setProvider($provider);
}
}
public function setProvider(ProviderInterface $provider): void {
$this->scheduler->setProvider($provider);
}
public function getGroupsForProgram(int $programId): array {
$stmt = $this->db->prepare("
SELECT g.Group_ID, g.Group_Name, g.class_days, g.Time_Slot, g.Time_From, g.Time_To,
(SELECT COUNT(*) FROM course_group_schedule_main WHERE Group_ID = g.Group_ID AND Assigned = 0) AS unassigned
FROM manager_group_name g
WHERE g.Program_ID = ?
ORDER BY g.Group_Name
");
$stmt->bind_param('i', $programId);
$stmt->execute();
$groups = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
$stmt->close();
return $groups;
}
public function getCoursesForProgram(int $programId): array {
$stmt = $this->db->prepare("SELECT Course_ID, Course_Name, Course_Time FROM Courses WHERE Program_ID = ?");
$stmt->bind_param('i', $programId);
$stmt->execute();
$courses = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
$stmt->close();
return $courses;
}
public function generateAll(int $programId, array $groupIds, string $startDate, ?string $endDate = null, bool $saveToDb = false, bool $useAi = true): array {
$results = [];
$totalSessions = 0;
$successGroups = 0;
$failedGroups = 0;
foreach ($groupIds as $groupId) {
$courses = $this->getCoursesForProgram($programId);
$courseIds = array_column($courses, 'Course_ID');
try {
$result = $this->scheduler->generateAndAssign(
$programId, (int)$groupId, $startDate, $endDate,
$courseIds, [], $saveToDb, $useAi
);
$scheduleResult = $result['schedule_result'];
$sessionCount = count($scheduleResult['schedule'] ?? []);
$totalSessions += $sessionCount;
$results[] = [
'group_id' => (int)$groupId,
'success' => true,
'sessions' => $sessionCount,
'ai_generated' => $scheduleResult['ai_generated'] ?? false,
'saved_entries' => count($result['saved_entries'] ?? []),
'assignments' => $result['assignment_results'] ?? [],
'message' => "Generated $sessionCount sessions",
];
$successGroups++;
} catch (Throwable $e) {
$results[] = [
'group_id' => (int)$groupId,
'success' => false,
'message' => $e->getMessage(),
];
$failedGroups++;
error_log("BatchScheduler: Group $groupId failed: " . $e->getMessage());
}
}
return [
'results' => $results,
'total_groups' => count($groupIds),
'success_count' => $successGroups,
'failed_count' => $failedGroups,
'total_sessions' => $totalSessions,
];
}
}