เอกสารอธิบายการทำงานของระบบแจ้งเตือนส่งงาน ========================================= 1. การทำงานของระบบแจ้งเตือน และวิธีการแจ้งเตือนผู้ใช้เมื่อใกล้กำหนดส่ง ระบบแจ้งเตือนถูกออกแบบมาเพื่อป้องกันการลืมส่งงานของนักเรียน โดยแบ่งการทำงานออกเป็น 2 ช่องทางหลัก: - แจ้งเตือนบนหน้าเว็บไซต์ (In-app Popup Alert): ทันทีที่นักเรียนเข้าสู่ระบบ (Login) สำเร็จ ระบบจะเช็คข้อมูลงานทั้งหมดที่สถานะยังเป็น "รอดำเนินการ" และตรวจสอบว่ามีงานใดที่เข้าข่าย "ใกล้ถึงกำหนดส่ง" หรือ "เลยกำหนดส่ง" ไปแล้ว หากพบระบบจะเด้งหน้าต่าง Popup แสดงรายการงานเหล่านั้นขึ้นมากลางหน้าจอทันที (โดยจะแสดงแค่ 1 ครั้งต่อการล็อกอิน เพื่อไม่ให้รบกวนการใช้งานหน้าอื่นๆ) - แจ้งเตือนผ่านแอปพลิเคชันแชท (LINE Notify / Telegram): ระบบจะมีสคริปต์ทำงานอยู่เบื้องหลัง (Cron Job) ที่จะถูกสั่งให้รันตามเวลาที่กำหนดไว้ทุกวัน (เช่น 08:00 น. ของทุกวัน) สคริปต์นี้จะกวาดข้อมูลงานที่ใกล้ถึงกำหนดส่งทั้งหมด แล้วส่งข้อความสรุปแจ้งเตือนเข้าไปยังกลุ่มแชทของห้องเรียนผ่าน API แบบอัตโนมัติ 2. วิธีการนำวันและเวลามาใช้ เพื่อคำนวณและแจ้งเตือน ระบบใช้หลักการเปรียบเทียบ "วันปัจจุบัน" กับ "กำหนดส่ง" เพื่อสร้างเงื่อนไขการแจ้งเตือนดังนี้: - การเก็บข้อมูล: วันกำหนดส่ง (Due Date) จะถูกบันทึกลงในฐานข้อมูลในรูปแบบ YYYY-MM-DD - การหาจำนวนวันที่เหลือ: ระบบใช้ฟังก์ชันหาส่วนต่างของวัน (เช่น DATEDIFF ใน SQL) โดยนำ "วันที่กำหนดส่ง" มาลบด้วย "วันที่ปัจจุบัน" เพื่อหาค่า "จำนวนวันที่เหลือ" - เงื่อนไขการแจ้งเตือน: แอดมินสามารถกำหนดค่า "จำนวนวันล่วงหน้าที่จะให้ระบบเริ่มเตือน" ได้ในหน้าตั้งค่า (ตัวอย่างเช่น กำหนดไว้ 3 วัน) * ถ้า (วันกำหนดส่ง - วันปัจจุบัน) < 0 หมายถึง "เลยกำหนดส่ง" ระบบจะขึ้นป้ายสีดำ * ถ้า (วันกำหนดส่ง - วันปัจจุบัน) <= 3 หมายถึง "ใกล้กำหนดส่ง" ระบบจะขึ้นป้ายสีส้ม และนำงานนี้ไปใส่ใน Popup แจ้งเตือน และส่งเข้าแชท LINE/Telegram * ถ้าเหลือมากกว่า 3 วัน หมายถึงเวลายังเหลือเยอะ ระบบจะยังไม่แจ้งเตือน เพื่อป้องกันข้อความขยะ (Spam) 3. ส่วนประกอบหลักของระบบ ระบบถูกแบ่งการทำงานออกเป็นส่วนต่างๆ อย่างชัดเจน ดังนี้: - หน้าบันทึกงาน (หน้า "จัดการงาน"): เป็นส่วนของแอดมินหรือครู มีฟอร์มสำหรับเพิ่มงานใหม่ ระบุชื่องาน/ชื่อวิชา, ใส่รายละเอียด, เลือกตัวนักเรียน, และตั้งวันกำหนดส่ง ทันทีที่บันทึก ข้อมูลจะถูกลงฐานข้อมูลและเริ่มเข้าสู่กระบวนการนับถอยหลังทันที - หน้าดูรายการงาน (หน้า "Dashboard" และ "งานของฉัน"): เป็นหน้าแสดงผลรายการงานทั้งหมดในรูปแบบตาราง (DataTables) โดยมีการเรียงลำดับจากงานที่ถูกสั่งล่าสุด (รัน Running Number) และแสดง "ป้ายสี" ท้ายวันที่กำหนดส่งเพื่อบอกสถานะความเร่งด่วน - หน้า/ส่วนของการแจ้งเตือน (Notification Module): * แจ้งเตือนฝั่งผู้ใช้งานเว็บ: มีการฝังสคริปต์ไว้ในส่วน Footer ของเว็บ เมื่อนักเรียนล็อกอิน ระบบจะเรียกใช้ AJAX ไปดึงข้อมูลงานที่เข้าเงื่อนไขเตือน มาแสดงเป็นกราฟิกสวยงามผ่าน SweetAlert2 * แจ้งเตือนฝั่งแชท: มีไฟล์ cron_notify.php ที่ทำหน้าที่สรุปข้อมูลเป็นข้อความตัวอักษร และยิงข้อมูลไปที่ Server ของ LINE หรือ Telegram ตาม Token ที่แอดมินตั้งค่าไว้