ข้ามไปยังเนื้อหาหลัก
ProgrammerThailand

ไอเดีย (Idea) idea php calendar beginner

ไอเดีย #3: ระบบจองห้องประชุมในบริษัท

"ห้องนี้ผมจองไว้แล้วนะ" ประโยคนี้น่าจะเคยได้ยินกันในหลายออฟฟิศ บางที่ใช้กระดาษแปะหน้าห้อง บางที่ใช้ไฟล์ตารางแชร์กัน แต่ก็ยังมีคนจองทับ ลืมยกเลิก หรือจองห้องใหญ่ไว้ทั้งวันแต่ใช้จริงแค่ชั่วโมงเดียว คนที่ลำบากที่สุดคือฝ่ายธุรการที่ต้องคอยไกล่เกลี่ย ระบบจองห้องประชุมจึงเป็นโปรเจกต์ที่เล็กพอสำหรับมือใหม่ และมีคนอยากใช้จริงแน่นอน

ใครจะใช้

  • พนักงานทั่วไป — ดูว่าห้องไหนว่าง แล้วจองเวลาที่ต้องการ
  • หัวหน้าหรือฝ่ายธุรการ — อนุมัติการจองห้องที่ต้องขออนุญาต เช่น ห้องประชุมใหญ่หรือห้องผู้บริหาร
  • ผู้ดูแลระบบ — จัดการข้อมูลห้อง อุปกรณ์ในห้อง และสิทธิ์ผู้ใช้

ฟีเจอร์ขั้นต่ำ (MVP)

  • จัดการข้อมูลห้อง ได้แก่ ชื่อห้อง ความจุ อุปกรณ์ เช่น โปรเจกเตอร์หรือจอสำหรับประชุมออนไลน์
  • หน้าปฏิทินแสดงการจองรายวันและรายสัปดาห์ แยกสีตามห้อง ใช้ไลบรารีปฏิทินฝั่ง JavaScript ได้
  • ฟอร์มจองห้อง ระบุหัวข้อ เวลาเริ่ม เวลาสิ้นสุด และจำนวนผู้เข้าร่วม
  • ตรวจสอบเวลาชนกัน ห้องเดียวกันห้ามมีช่วงเวลาซ้อนทับ
  • ขั้นตอนอนุมัติสำหรับห้องที่กำหนด สถานะ รออนุมัติ / อนุมัติ / ไม่อนุมัติ / ยกเลิก
  • แจ้งเตือนผู้จองเมื่อได้รับการอนุมัติ และเตือนก่อนเริ่มประชุม ผ่านอีเมลหรือ LINE
  • ผู้จองยกเลิกการจองของตัวเองได้ เพื่อคืนห้องให้คนอื่น

ต่อยอดได้อีก

  • การจองแบบประจำ เช่น ประชุมทีมทุกวันจันทร์ 9 โมง
  • จอแท็บเล็ตหน้าห้องแสดงสถานะว่าง/ไม่ว่าง และให้กดยืนยันเข้าใช้ ถ้าไม่ยืนยันภายในเวลาที่กำหนดให้ปล่อยห้องอัตโนมัติ
  • ขอจัดเลี้ยงอาหารว่างหรืออุปกรณ์เพิ่มเติมไปพร้อมกับการจอง
  • รายงานอัตราการใช้ห้อง เพื่อดูว่าห้องไหนแน่นหรือห้องไหนแทบไม่มีใครใช้

โครงข้อมูลตั้งต้น

  • rooms — id, name, capacity, equipment, need_approval, is_active
  • users — id, name, email, department, role
  • bookings — id, room_id, user_id, title, start_at, end_at, attendees, status
  • booking_approvals — id, booking_id, approver_id, action, comment, created_at

ระดับความยาก และสิ่งที่จะได้เรียนรู้

ระดับ มือใหม่ ทำได้ด้วย Yii2 หรือ Laravel คู่กับ MySQL หรือ PostgreSQL ส่วนหน้าปฏิทินเลือกไลบรารีปฏิทินโอเพนซอร์สที่ถนัด จุดที่จะได้ฝึกจริงจังคือ

  • เงื่อนไขช่วงเวลาซ้อนทับ คือ start_at ของใหม่น้อยกว่า end_at ของเดิม และ end_at ของใหม่มากกว่า start_at ของเดิม
  • การส่งข้อมูลเป็น JSON ให้ปฏิทินฝั่งหน้าเว็บ
  • การออกแบบ workflow สถานะ และการเก็บประวัติการอนุมัติ
  • การตั้ง cron ส่งแจ้งเตือนล่วงหน้า

ข้อควรระวัง

  • Race condition ถ้าสองคนกดจองช่วงเวลาเดียวกันพร้อมกัน การเช็กใน PHP อย่างเดียวไม่พอ ควรใช้ transaction ร่วมกับการล็อกแถว หรือใน PostgreSQL ใช้ exclusion constraint กันไว้ที่ฐานข้อมูล
  • เรื่อง timezone ตั้งค่าให้ตรงกันทั้งเซิร์ฟเวอร์ ฐานข้อมูล และแอป ไม่อย่างนั้นการจองจะเลื่อนไปทีละ 7 ชั่วโมง
  • สิทธิ์การยกเลิกและแก้ไข ต้องเช็กว่าเป็นเจ้าของการจองหรือผู้ดูแลจริง

ออฟฟิศของเพื่อน ๆ ตอนนี้จองห้องประชุมกันแบบไหน ใช้ได้ดีหรือมีปัญหาอะไรบ้าง แล้วถ้าทำระบบนี้เอง จะจัดการเรื่องคนจองแล้วไม่มาใช้อย่างไร ใครทำเสร็จแล้วเอามาโชว์หรือขอคำแนะนำในกระทู้นี้ได้เลยครับ

0 คะแนน

0 คำตอบ

ยังไม่มีคำตอบ

รู้คำตอบ? ช่วยแบ่งปันได้เลย

ตอบคำถามนี้

เข้าสู่ระบบเพื่อตอบคำถามและโหวต

เข้าสู่ระบบ สมัครสมาชิก