Skip to content

goragodwiriya/booking

Repository files navigation

ระบบจองห้องประชุม Now.js + Kotchasan

โปรเจ็กต์นี้เป็นระบบจองห้องประชุมและบริหารทรัพยากรห้องสำหรับองค์กร ทำงานในรูปแบบ SPA frontend + PHP API โดยออกแบบมาให้รองรับทั้งฝั่งผู้จอง ผู้อนุมัติ และผู้ดูแลระบบในชุดเดียว

ภาพรวม

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

จุดเด่นของโปรเจ็กต์นี้คือการรวมงาน 3 ส่วนไว้ด้วยกัน

  • ระบบจองห้องสำหรับผู้ใช้งานทั่วไป
  • ระบบอนุมัติหลายขั้นสำหรับหัวหน้า/เจ้าหน้าที่
  • ระบบจัดการข้อมูลห้องและกติกาการใช้งานสำหรับผู้ดูแลระบบ

คุณสมบัติหลัก

  • แค็ตตาล็อกห้องประชุมพร้อมรูปภาพ รายละเอียดอาคาร เลขห้อง และจำนวนที่นั่ง
  • ฟอร์มจองห้องที่ระบุหัวข้อการใช้งาน จำนวนผู้เข้าร่วม อุปกรณ์ประกอบ และหมายเหตุได้
  • รองรับการจองหลายวันแบบ daily slot คือเลือกช่วงวันและใช้เวลาเดียวกันทุกวันในช่วงที่เลือก
  • ตรวจสอบเวลาซ้ำของห้องอัตโนมัติก่อนบันทึกและก่อนอนุมัติ
  • ปฏิทินการจองห้องสำหรับดูรายการที่อนุมัติแล้ว
  • ผู้จองดู แก้ไข ยกเลิก หรือลบรายการได้ตาม policy ที่ตั้งไว้
  • ผู้ดูแลจัดการข้อมูลห้อง เปิด/ปิดการใช้งาน และอัปโหลดรูปภาพประกอบได้
  • แจ้งเตือนผ่าน Email, LINE และ Telegram
  • ตั้งค่ากฎการอนุมัติ การแก้ไข และการยกเลิกได้จากหน้า settings

Daily Slot Booking

ระบบปัจจุบันใช้รูปแบบการจองหลายวันแบบรายวัน

ตัวอย่าง:

  • วันที่เริ่ม 1 เวลา 08:00
  • วันที่สิ้นสุด 10 เวลา 10:00

จะถูกตีความเป็น “จองทุกวันในช่วงวันที่ 1 ถึง 10 เวลา 08:00-10:00” ไม่ใช่การล็อกห้องต่อเนื่อง 24 ชั่วโมงตลอดทั้งช่วง

สำหรับฐานข้อมูลเดิมที่เคยบันทึกแบบต่อเนื่อง ระบบรองรับผ่านฟิลด์ schedule_type เพื่อรักษาความถูกต้องของข้อมูลย้อนหลัง

Stack และสถาปัตยกรรม

Frontend

  • ใช้ Now.js สำหรับ router, component manager, form binding, i18n และ UI manager ต่าง ๆ
  • ใช้ index.html เป็น SPA shell หลัก
  • bootstrapping หลักอยู่ที่ js/main.js
  • หน้าใช้งานจริงอยู่ใน templates/booking/
  • route ของโมดูลจองห้องถูกลงทะเบียนใน modules/booking/admin.js

Backend

  • ใช้ Kotchasan เป็น PHP framework สำหรับ routing, request/response, model และ utility layer
  • ใช้ GCMS layer สำหรับ table controller, API controller และ shared platform behavior
  • business logic หลักของระบบจองห้องอยู่ใน modules/booking/

Entry Points สำคัญ

Entry point หน้าที่
index.html SPA shell หลักของระบบ
js/main.js bootstrap frontend managers, router, auth, csrf, i18n
api.php จุดเข้า API หลักของแอป
export.php จุดเข้างาน export/print
line/webhook.php รับ LINE webhook
load.php bootstrap ค่าระบบและ include framework

โครงสร้างโมดูลสำคัญ

modules/booking/

โมดูลหลักของระบบจองห้อง

  • controllers/booking.php โหลดและบันทึกคำขอจอง
  • controllers/calendar.php ส่งข้อมูลให้ปฏิทินการจอง
  • controllers/approvals.php และ controllers/review.php ดูแลฝั่งอนุมัติ
  • controllers/rooms.php และ controllers/room.php ใช้จัดการข้อมูลห้อง
  • controllers/settings.php ใช้กำหนดกติกาของโมดูล
  • controllers/email.php ส่ง notification ไปยังผู้เกี่ยวข้อง
  • models/ รวม query และ data shaping สำหรับ booking, review, approvals และ rooms
  • views/view.php ใช้ render รายละเอียดการจองสำหรับ modal และ notification

modules/index/

shared platform layer ของระบบ เช่น login, profile, users, settings, permissions และ integrations ระดับแพลตฟอร์ม

modules/download/

ใช้ช่วยจัดการ attachments และรูปภาพห้อง

Route ฝั่งผู้ใช้และผู้ดูแล

route สำคัญของระบบจองห้อง

  • / ปฏิทินการจองห้อง
  • /rooms แค็ตตาล็อกห้อง
  • /booking ฟอร์มจองห้อง
  • /my-bookings รายการจองของผู้ใช้
  • /approvals คิวงานอนุมัติ
  • /booking-review หน้าตรวจสอบและตัดสินคำขอ
  • /room-management จัดการข้อมูลห้อง
  • /booking-settings ตั้งค่ากติกาของระบบจองห้อง
  • /booking-categories จัดการหมวดหมู่การใช้งานและอุปกรณ์

Workflow การทำงาน

ฝั่งผู้จอง

  1. เปิดดูรายการห้องจากหน้ารวม
  2. ตรวจสอบรายละเอียดห้อง เช่น อาคาร เลขห้อง จำนวนที่นั่ง และรูปภาพ
  3. เลือกวันเริ่ม วันสิ้นสุด เวลาเริ่ม เวลาสิ้นสุด และกรอกรายละเอียดการใช้งาน
  4. ระบบตรวจเวลาซ้ำก่อนบันทึก
  5. ติดตามสถานะได้จากหน้า My bookings

ฝั่งผู้อนุมัติ

  1. เปิดหน้า approvals เพื่อดูรายการรอตรวจสอบ
  2. ตรวจสอบรายละเอียดการจองจากหน้า review
  3. อนุมัติ ปฏิเสธ ส่งกลับให้แก้ไข หรือยกเลิกในฐานะเจ้าหน้าที่ได้
  4. ระบบตรวจเวลาซ้ำอีกครั้งก่อน final approve

ฝั่งผู้ดูแลระบบ

  1. จัดการข้อมูลห้อง
  2. เปิด/ปิดการใช้งานห้อง
  3. อัปโหลดรูปภาพประกอบห้อง
  4. ตั้งค่า approval workflow, cancellation policy และ deletion policy

กฎสำคัญของระบบ

  • การจองใหม่ต้องมีวันสิ้นสุดมากกว่าหรือเท่ากับวันเริ่มต้น
  • เวลาสิ้นสุดต้องมากกว่าเวลาเริ่มต้น
  • รายการใหม่ถูกบันทึกเป็น daily-slot
  • ข้อมูลเก่าที่อัปเกรดมาจากระบบเดิมยังคงรองรับผ่าน schedule_type = continuous
  • การยกเลิกและการแก้ไขขึ้นอยู่กับ policy ที่ตั้งในระบบ

การแจ้งเตือน

ระบบรองรับการแจ้งเตือนผู้เกี่ยวข้องผ่าน

  • Email
  • LINE
  • Telegram

ข้อความแจ้งเตือนจะถูกส่งทั้งไปยังผู้จอง และผู้เกี่ยวข้องตามขั้นอนุมัติหรือสถานะของรายการ

การติดตั้งและอัปเกรด

ระบบมี installer ในโฟลเดอร์ install/ สำหรับติดตั้งใหม่และอัปเกรดระบบ

ติดตั้งใหม่

  1. ตั้งค่าฐานข้อมูล
  2. import schema จาก install/database.sql
  3. กำหนดค่าระบบใน settings/
  4. สร้าง admin account เริ่มต้น

อัปเกรดจากระบบเดิม

สำหรับ deployment เดิม ควรรัน install/upgrade2.php เพื่อเพิ่มฟิลด์ schedule_type และแยกข้อมูลเก่าออกจากรายการแบบ daily slot ให้ถูกต้อง

Build และ Runtime

  • npm run dev สำหรับพัฒนา frontend ด้วย Vite
  • npm run build สำหรับ build asset ทั้งชุด
  • npm run build:<target> สำหรับ build เฉพาะ bundle

About

ระบบจองห้องประชุม

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors