/home/techb158/workloadmatch.com/Manager
Edit: /home/techb158/workloadmatch.com/Manager/fetch_workload_data.php (4520B)
'Unauthorized']);
exit;
}
$Manager_ID = get_effective_id();
$semesterYear = (int)($_POST['semester_year'] ?? 0);
if (!$semesterYear) {
echo json_encode(['error' => 'Missing semester year']);
exit;
}
$augustFirst = new DateTime("$semesterYear-08-01");
$dayOfWeek = (int)$augustFirst->format('N');
$daysUntilMonday = ($dayOfWeek === 1) ? 0 : (8 - $dayOfWeek) % 7;
$semesterStart = clone $augustFirst;
$semesterStart->modify("+$daysUntilMonday days");
$semesterEnd = new DateTime(($semesterYear + 1) . '-06-30');
$semStartStr = $semesterStart->format('Y-m-d');
$semEndStr = $semesterEnd->format('Y-m-d');
// Teacher workload chart data
$teacherLoadData = [];
$stmt = $mysqli->prepare("
SELECT
tp.Teacher_ID,
tp.First_Name,
tp.Last_Name,
tp.Load_Hours,
IFNULL(SUM(uni.Course_Hours), 0) AS AssignedHours
FROM teacher_profile tp
LEFT JOIN (
SELECT tca.Teacher_ID, cgs.Program_ID, cgs.Group_ID, cgs.Course_ID, MAX(cgs.Course_Hours) AS Course_Hours
FROM teacher_course_assignments tca
JOIN course_group_schedule_main cgs ON tca.Schedule_ID = cgs.Schedule_ID
WHERE tca.Start_Date >= ? AND tca.End_Date <= ?
GROUP BY tca.Teacher_ID, cgs.Program_ID, cgs.Group_ID, cgs.Course_ID
) AS uni ON tp.Teacher_ID = uni.Teacher_ID
WHERE tp.Manager_ID = ?
GROUP BY tp.Teacher_ID, tp.First_Name, tp.Last_Name, tp.Load_Hours
ORDER BY AssignedHours DESC
LIMIT 10
");
if ($stmt) {
$stmt->bind_param("sss", $semStartStr, $semEndStr, $Manager_ID);
$stmt->execute();
$resultTL = $stmt->get_result();
while ($row = $resultTL->fetch_assoc()) {
$teacherLoadData[] = $row;
}
$stmt->close();
}
// Available teachers list data
$availableTeachers = [];
$stmt = $mysqli->prepare("
SELECT tp.Teacher_ID, tp.First_Name, tp.Last_Name, tp.Load_Hours, tp.User_Img,
IFNULL(SUM(uni.Course_Hours), 0) AS AssignedHours
FROM teacher_profile tp
LEFT JOIN (
SELECT tca.Teacher_ID, cgs.Program_ID, cgs.Group_ID, cgs.Course_ID, MAX(cgs.Course_Hours) AS Course_Hours
FROM teacher_course_assignments tca
JOIN course_group_schedule_main cgs ON tca.Schedule_ID = cgs.Schedule_ID
WHERE tca.Start_Date >= ? AND tca.End_Date <= ?
GROUP BY tca.Teacher_ID, cgs.Program_ID, cgs.Group_ID, cgs.Course_ID
) AS uni ON tp.Teacher_ID = uni.Teacher_ID
WHERE tp.Manager_ID = ?
GROUP BY tp.Teacher_ID, tp.First_Name, tp.Last_Name, tp.Load_Hours, tp.User_Img
ORDER BY (Load_Hours - IFNULL(SUM(uni.Course_Hours), 0)) ASC
");
if ($stmt) {
$stmt->bind_param("sss", $semStartStr, $semEndStr, $Manager_ID);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
$encryptedId = encrypt_decrypt('encrypt', $row['Teacher_ID']);
$assigned = (int)$row['AssignedHours'];
$maxLoad = (int)$row['Load_Hours'];
$remaining = max(0, $maxLoad - $assigned);
$pct = $maxLoad > 0 ? round(($assigned / $maxLoad) * 100) : 0;
$labelClass = $pct >= 90 ? 'danger' : ($pct >= 70 ? 'warning' : 'success');
$img = $row['User_Img'] ?: 'avatar.png';
$name = htmlspecialchars($row['First_Name'] . ' ' . $row['Last_Name']);
$row['html'] = "
";
$row['remaining'] = $remaining;
$row['pct'] = $pct;
$row['labelClass'] = $labelClass;
$availableTeachers[] = $row;
}
$stmt->close();
}
echo json_encode([
'teacherLoadData' => $teacherLoadData,
'availableTeachers' => $availableTeachers
], JSON_UNESCAPED_UNICODE);