PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]); } catch (PDOException $e) { die("Database Connection Failed: " . $e->getMessage()); } // ฟังก์ชันคำนวณ % Progress ตามขั้นตอน Workflow function getProgressByStatus($status) { return match ($status) { 'รอการยืนยันแผน' => 15, 'อยู่ระหว่างดำเนินการ' => 50, 'ใบส่งซื้อ/ทำสัญญา' => 85, 'ดำเนินการเสร็จสิ้น' => 100, default => 0 }; } // ฟังก์ชันประเมินสถานะ Timeline สี (เขียว, เหลือง, แดง) function getTimelineBadge($dueDate, $status) { if ($status === 'ดำเนินการเสร็จสิ้น') { return ' เสร็จสิ้น'; } if (empty($dueDate)) { return 'ยังไม่ระบุวัน'; } $today = new DateTime(); $due = new DateTime($dueDate); $diff = $today->diff($due)->days * ($today > $due ? -1 : 1); if ($diff < 0) { return ' ล่าช้า (' . abs($diff) . ' วัน)'; } elseif ($diff <= 15) { return ' ใกล้กำหนด (เหลือ ' . $diff . ' วัน)'; } else { return ' ตรงเวลา (เหลือ ' . $diff . ' วัน)'; } }