ไม่พบข้อมูลนักศึกษา'; require_once __DIR__ . '/../includes/footer.php'; exit; } if (isset($_GET['added'])) { $msg_class = 'success'; $msg_text = 'เพิ่มรายวิชาเรียบร้อยแล้ว'; if ($_GET['added'] === '0') $msg_text = 'ไม่พบรายวิชาใหม่จากไฟล์ (อาจซ้ำหรือไม่ตรงหลักสูตร)'; echo "
$msg_text
"; } if (isset($_GET['error'])) { $err = $_GET['error']; $map = ['upload_failed' => 'อัปโหลดไฟล์ล้มเหลว', 'no_text' => 'ไม่พบข้อความในไฟล์ PDF', 'invalid_data' => 'ข้อมูลไม่ถูกต้อง']; $txt = $map[$err] ?? $err; echo "
$txt
"; } $summary = getStudentSummary($id); $student_courses = getStudentCourses($id); // เรียง: ลงเรียนปกติ+ยังไม่ออกเกรด → เทียบโอน/ออกเกรดแล้ว usort($student_courses, function($a, $b) { $isUngraded = fn($r) => $r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; $a_ungraded = $isUngraded($a); $b_ungraded = $isUngraded($b); if ($a_ungraded && !$b_ungraded) return -1; if (!$a_ungraded && $b_ungraded) return 1; return strcasecmp($a['course_code'], $b['course_code']); }); $total_curriculum_credits = getTotalCurriculumCredits($student['curriculum_id']); $total_completed = getCompletedCreditsTotal($id); $transfer_credits = getTransferCreditsTotal($id); $remaining_credits = max(0, $total_curriculum_credits - $total_completed); $is_dbc = ($student['curriculum_code'] == 'DBC'); ?>

-

-
แก้ไข ผลการประเมินเทียบโอน พิมพ์สรุปผล

ข้อมูลนักศึกษา

รหัสนักศึกษา:
ชื่อ-นามสกุล: ()
อีเมล:
สาขาวิชา: -
คณะ:
สถาบันที่จบ:
วุฒิเดิม:
ปีการศึกษาที่เข้าศึกษา:
หน่วยกิตที่เทียบโอนได้
หน่วยกิตที่เรียนผ่านแล้วทั้งหมด
หน่วยกิตที่ต้องเรียนอีก
/
0 ? round(($total_completed / $total_curriculum_credits) * 100) : 0 ?>%
รายวิชาตามหลักสูตร
เรียนแล้ว เทียบโอน ยังไม่เรียน
นำเข้าข้อมูลเทียบโอน
ระบบจะอ่านรหัสวิชา ชื่อวิชา และหน่วยกิตโดยอัตโนมัติ เฉพาะรายวิชาที่ตรงตามหลักสูตรจะได้รับการเทียบโอน
เพิ่มรายวิชาที่กำลังเรียน
นำเข้า CSV
รายวิชาเทียบโอนและกำลังเรียนรอออกเกรด
0): ?> รอออกเกรด วิชา รายการ | หน่วยกิต
ยังไม่มีรายวิชาที่บันทึก
$r['grade'] === null || $r['grade'] === '' || $r['grade'] === '-' || mb_strpos((string)$r['grade'], 'กำลัง') === 0; foreach ($student_courses as $sc_check) { if ($isUngraded2($sc_check)) $ungraded_count++; else $graded_count++; } $printed_ungraded_header = false; $printed_separator = false; foreach ($student_courses as $sc): $t += $sc['credits']; $is_ungraded = $isUngraded2($sc); if ($is_ungraded && !$printed_ungraded_header) { $printed_ungraded_header = true; echo ''; } if (!$is_ungraded && !$printed_separator && $printed_ungraded_header) { $printed_separator = true; echo ''; } ?>
รหัสวิชา ชื่อวิชา หน่วยกิต เกรด ภาคเรียน ปีการศึกษา ประเภท
รายวิชาที่กำลังเรียน/รอออกเกรด
รายวิชาที่เทียบโอน/ออกเกรดแล้ว
รวม
'; echo '
' . htmlspecialchars($g['name_th']); if ($g['min_credits'] > 0) { echo ' (' . $g['min_credits'] . ' หน่วยกิต)'; } echo '
'; foreach ($node['courses'] as $course) { $status_class = ''; $status_badge = 'ยังไม่เรียน'; if (isset($course['_completed'])) { $sc = $course['_completed']; $label = $sc['course_type'] ?: ($sc['source_type'] == 'transfer' ? 'เทียบโอน' : 'เรียนแล้ว'); $grade_part = $sc['grade'] ? ' เกรด ' . htmlspecialchars($sc['grade']) : ''; if ($sc['source_type'] == 'transfer') { $status_class = 'bg-warning bg-opacity-10'; $status_badge = ' ' . $label . $grade_part . ''; } else { $status_class = 'bg-success bg-opacity-10'; $status_badge = ' ' . $label . $grade_part . ''; } } echo '
'; echo '
' . htmlspecialchars($course['code']) . ' ' . htmlspecialchars($course['name_th']) . '
'; echo '
' . $course['credits'] . '(' . $course['lecture_hours'] . '-' . $course['practice_hours'] . '-' . $course['self_study_hours'] . ') ' . $status_badge . '
'; echo '
'; } if (!empty($node['children'])) { renderStudentTree($node['children'], $level + 1); } echo ''; } }