# ABIMS — บทบาท Admin (ผู้ดูแลระบบ)

เอกสารสรุปว่าแต่ละเมนูในโซน Admin **ทำอะไรได้** — ภาษาไทยเป็นหลัก อธิบายเหตุผลและโฟลใช้งาน ไม่ลงรายละเอียดปุ่มทุกจุด — ตรงกับเมนูในระบบจริง

---

## หลักการ (เข้าใจง่าย)

**Admin คืออะไร:** คนที่ตั้งกติกาและของในระบบให้ทั้งองค์กรใช้ได้ถูกต้อง — กำหนดห้อง อุปกรณ์ เวลาทำการ และว่าใครเป็นผู้จัดการหรือพนักงาน

**โฟลโดยรวม:** ตั้งค่าห้องและอุปกรณ์ → เปิดบัญชีผู้ใช้ → พนักงาน/ผู้จัดการส่งคำขอจองหรือยืม → รออนุมัติ (ถ้าห้องกำหนด) → ใช้งานจริง → คืนอุปกรณ์เมื่อครบกำหนด

**ทำไมต้องมี Settings ก่อน:** แต่ละองค์กรห้องและของไม่เหมือนกัน — ถ้าไม่ตั้งไว้ พนักงานจะจองหรือยืมไม่ตรงนโยบาย

**ทำไมแยกจาก Manager:** ผู้จัดการดูแลทีมรายวัน Admin ดูภาพใหญ่ ตั้งค่า และออกรายงานทั้งบริษัท

---

## สรุปเมนู (8 กลุ่ม)

| เมนู | ทำอะไร |
|------|--------|
| Dashboard | KPI กราฟ ปฏิทินเดือน คิวอนุมัติ แจ้งเตือนคืน ปุ่มจองใหม่ |
| Calendar | ปฏิทินจองห้องเต็มรูปแบบ |
| Borrow Equipment | คลังอุปกรณ์และสร้างคำขอยืม (อนุมัติทันที) |
| Approvals | อนุมัติยืมอุปกรณ์และจองห้อง |
| Manager activity logs | ประวัติยืมที่ผู้จัดการเกี่ยวข้อง + มุมมองค้างคืน |
| Export report | Excel / PDF |
| System settings | ห้อง · หมวดอุปกรณ์ · รายการอุปกรณ์ · ชุดเวลาทำการ |
| User management | บัญชีและบทบาท |

**ทางลัดจากแดชบอร์ด:** ปุ่ม **จองใหม่** — จองห้องไปปฏิทิน · ยืมอุปกรณ์ไปคลัง (เทียบเท่าเมนู Borrow Equipment)

**หน้าแรกเอกสาร ABIMS:** กราฟสองอันเป็นตัวอย่างหน้าตาเท่านั้น ไม่ใช่ตัวเลขจริงจากระบบ

### Tree — เมนู Admin

```text
Admin
├── Dashboard
├── Calendar
├── Borrow Equipment   คลัง · สร้างคำขอยืม (อนุมัติทันที)
├── Approvals          ยืมอุปกรณ์ + จองห้อง
├── Manager activity logs
├── Export report      Excel / PDF
├── System settings
│   ├── Rooms
│   ├── Categories
│   ├── Equipments
│   └── Time presets
└── User management    รวม Admin คนแรก (ล็อก role/status)
```

---

## Dashboard (`index`)

หน้าแรกหลังล็อกอิน — ข้อมูลสดจากฐานข้อมูล

- **KPI สี่การ์ด:** จำนวนคำขอรวม · รออนุมัติ · อัตราใช้ห้อง (%) · อุปกรณ์กำลังยืม
- **กราฟแนวโน้ม (เส้น):** จองห้องและยืมอุปกรณ์ตามช่วงเวลา — สลับทั้งหมด/ห้อง/อุปกรณ์ + ตัวกรองขั้นสูง
- **กราฟสัดส่วนสถานะ (วง):** รอ · อนุมัติ · ปฏิเสธ · คืนแล้ว · ยกเลิก — ตามประเภทที่เลือกในกราฟเส้น (ไม่ใช่แยกสองวงห้อง/อุปกรณ์)
- **ปฏิทินย่อ:** เดือนปัจจุบันบนแดชบอร์ด + ลิงก์เปิดปฏิทินเต็ม
- **คิวรออนุมัติ:** ตารางบนแดชบอร์ด — อนุมัติ/ปฏิเสธได้จากที่นี่
- **แจ้งเตือนคืนอุปกรณ์:** รายการใกล้ครบหรือเกินกำหนด — ลิงก์ไปบันทึกกิจกรรมผู้จัดการ (มุมมองค้างคืน)
- **จองใหม่:** ทางลัดจองห้องหรือยืมอุปกรณ์ (admin ไม่ต้องรออนุมัติแบบ role อื่น)

---

## Calendar (`calendar`)

ปฏิทินจองห้องประชุมแบบเต็มหน้าจอ

- ดูการจองห้องและช่วงเวลาที่ถูกบล็อก (วันหยุด / ปิดห้อง) ในมุมมองวัน / สัปดาห์ / เดือน
- กรองตามห้องที่ต้องการ
- **จองห้องใหม่** ในช่องเวลาว่าง (admin สร้างจองได้โดยตรง)
- **บล็อกเวลา** ปิดห้องหรือช่วงเวลาที่ห้ามจอง
- เปิดรายละเอียดการจองหรือบล็อกจากปฏิทิน — ดูข้อมูล, แก้ไข หรือยกเลิกตามสิทธิ์
- ระบบตรวจไม่ให้จองซ้อนเวลากับรายการที่มีอยู่

---

## Borrow Equipment (`equipment_catalog`)

- ดูคลังและสร้างคำขอยืม — หน้าจอเดียวกับผู้จัดการ (เปิดผ่าน portal Admin)
- คำขอของ Admin **อนุมัติทันที** ไม่เข้าคิวรออนุมัติแบบพนักงานหรือผู้จัดการ
- เลือกหลายชนิดในคำขอเดียวได้ **ไม่จำกัดจำนวนบรรทัดใน UI** (ฝั่งระบบรองรับสูงสุด 999 ชนิดต่อคำขอ)
- แต่ละบรรทัดจำกัดจำนวนตามสต็อกคงเหลือและ `max_per_request` ของรายการ
- ตะกร้ายืมและยืนยันแบบ modal — ธีม Light/Dark ตามพอร์ทัล

---

## Approvals (`approvals`)

จัดการคำขอที่ยังไม่จบ — แยกประเภท **ยืมอุปกรณ์** และ **จองห้อง**

**ยืมอุปกรณ์**

- ดูรายการรออนุมัติ, อนุมัติ, ปฏิเสธ, บันทึกการรับคืน
- กรองตามสถานะ, หมวดหมู่, ผู้ยืม, กำหนดคืน (รวมค้างคืน)
- ดูรายละเอียดคำขอและเปิด **ใบยืนยันการยืม** เมื่อสถานะเหมาะสม

**จองห้อง**

- ดูคำขอจองที่รออนุมัติ (กรณีห้องตั้งให้ต้องอนุมัติ)
- อนุมัติหรือปฏิเสธ — รวมคำขอจากพนักงานและผู้จัดการตามกฎของห้อง

---

## Manager activity logs (`manager_logs`)

บันทึกกิจกรรมที่เกี่ยวกับคำขอ **ยืมอุปกรณ์** โดยเฉพาะเมื่อผู้จัดการเป็นผู้ดำเนินการ

- ตารางประวัติคำขอ — ค้นหา, กรองสถานะ / หมวด / ผู้ยืม / แจ้งเตือนที่ยังไม่อ่าน / เฉพาะที่ manager เป็นผู้อนุมัติ
- ดูรายละเอียดใน modal
- ลิงก์จากแดชบอร์ดหรือการแจ้งเตือนเมื่อมีรายการค้างคืน (`overdue`)

---

## Export report

ดึงรายงานกิจกรรมออกเป็นไฟล์ — เลือกตัวกรองก่อนสร้างไฟล์

| หน้า | รูปแบบ |
|------|--------|
| Export Excel | สเปรดชีต (ข้อมูล + สรุปกราฟ) |
| Export PDF | รายงาน PDF |

- กรองประเภทกิจกรรม, ช่วงเวลา, บทบาทผู้ขอ, บุคคล, สถานะ, หมวด, ห้อง
- Admin เห็นขอบเขตข้อมูลกว้างกว่า manager (ตามบทบาทในระบบ)

---

## System settings

### Room settings (`rooms`)

- เพิ่ม / แก้ไข / ปิดใช้งานห้องประชุม — ความจุ, สีปฏิทิน, รูป, สิทธิ์จอง, กฎอนุมัติ, ย้ายการจอง
- ส่วนนี้เอาไว้ตั้งค่าห้องให้ Employee และ Manager ใช้จองในปฏิทินและฟอร์มจอง
- กำหนดว่า role ใดจองห้องนี้ได้ และว่าต้องรออนุมัติหรือจองแล้วใช้ได้ทันที
- ฝั่ง Admin จองในปฏิทินไม่ต้องรออนุมัติ แม้ห้องจะบังคับอนุมัติสำหรับ role อื่น

### Equipment categories (`categories_manage`)

- จัดการหมวดหมู่อุปกรณ์
- หมวดที่ Employee/Manager เห็นตอนเลือกยืมและตอนกรองใน Approvals
- จัดกลุ่มรายงาน — รายการชิ้นจริงอยู่ที่ Inventory

### Equipment inventory (`equipments_manage`)

- รายการอุปกรณ์ จำนวนคงเหลือ สถานะ รูป
- รายการที่ Employee/Manager ยืมได้ — สต็อกลดเมื่ออนุมัติและยืมจริง
- สถานะซ่อมช่วยกันยืมของที่ยังไม่พร้อม

### Business hours presets (`presets_manage`)

- ชุดเวลาทำการสำหรับตรวจการจองห้อง
- กำหนดวันและช่วงเวลาที่ระบบยอมรับการจอง (เช่น นอกเวลาทำการจองไม่ได้)
- Employee/Manager ไม่แก้ preset เอง — Admin ตั้งครั้งเดียวใช้ทั้งระบบ

---

## User management (`users`)

- ดูรายชื่อผู้ใช้ทุก role
- เพิ่ม / แก้ไข / ปิดการใช้งานบัญชี (ระบบไม่มีปุ่มลบผู้ใช้ทิ้งจากฐานข้อมูล — ใช้ปิดสถานะแทน)
- กำหนดบทบาท Admin, Manager หรือ Employee

### Admin คนแรก (บัญชี default หลังติดตั้ง)

หลัง import `abims.sql` จะมี **Admin หลัก** อย่างน้อยหนึ่งบัญชี (เช่น `username` = `admin`) — ใช้ล็อกอินครั้งแรกแล้วเพิ่ม Manager/Employee

ระบบมอง **Admin คนแรก** เป็นบัญชี Admin (`role = 1`) ที่สร้างก่อนสุด (`created_at` เก่าสุด · ถ้าเท่ากันใช้ `user_id` น้อยสุด):

| กฎ | ความหมาย |
|----|----------|
| **เปลี่ยน Role ไม่ได้** | ต้องคงเป็นผู้ดูแลระบบ — ไม่ให้เปลี่ยนเป็นผู้จัดการหรือพนักงาน |
| **ปิดบัญชี (Inactive) ไม่ได้** | สถานะ Active ถูกล็อก — มุมมองรายชื่อผู้ใช้แสดงไอคอนล็อก |
| **จุดประสงค์** | ให้เสมอมี Admin อย่างน้อยหนึ่งคนเปิดทางตั้งค่าและเพิ่มคนอื่นเข้าระบบ |

บัญชี Admin คนอื่นที่ Admin หลักสร้างทีหลัง **ยังเปลี่ยน role / ปิดได้ตามปกติ** (ยกเว้นปิดตัวเองขณะยัง Active)

---

*อัปเดตตามเมนู Admin ใน `app/includes/admin/sidebar.php` — คู่กับ `docs/app/roles.html` (แท็บ Admin) · รวมทุก role ใน `00-roles-complete.md`*
