# ABIMS — เอกสารรวมบทบาท (Admin · Manager · Employee)

ไฟล์นี้ **รวมเนื้อหาจาก** `01-roles-admin.md`, `02-roles-manager.md`, `03-roles-employee.md` ในที่เดียว — สำหรับโหลดไปอ่าน offline หรือแจกในทีม/ชั้นเรียน  
ฐานข้อมูลแยกอยู่ที่ [`04-database.md`](04-database.md) · หน้าเว็บ [`docs/app/roles.html`](../app/roles.html)

---

## สารบัญ

1. [ภาพรวมระบบและสามบทบาท](#ภาพรวมระบบและสามบทบาท)
2. [Admin คนแรก — บัญชี default](#admin-คนแรก--บัญชี-default-ของระบบ)
3. [ลำดับการอนุมัติ](#ลำดับการอนุมัติ)
4. [ฟีเจอร์ที่ทุก role ใช้ร่วมกัน](#ฟีเจอร์ที่ทุก-role-ใช้ร่วมกัน)
5. [ส่วนที่ 1 — Admin (ผู้ดูแลระบบ)](#ส่วนที่-1--admin-ผู้ดูแลระบบ)
6. [ส่วนที่ 2 — Manager (ผู้จัดการ)](#ส่วนที่-2--manager-ผู้จัดการ)
7. [ส่วนที่ 3 — Employee (พนักงาน)](#ส่วนที่-3--employee-พนักงาน)

---

## ภาพรวมระบบและสามบทบาท

**ABIMS** (Asset Booking Information Management System) ใช้จองห้องประชุมและยืมอุปกรณ์ภายในองค์กร — ทุกคำขอผูกกับบัญชีใน `tbl_users`

| บทบาท | `role` | ทำอะไรโดยสรุป |
|--------|--------|----------------|
| **Admin** | 1 | ตั้งห้อง อุปกรณ์ เวลาทำการ บัญชีผู้ใช้ อนุมัติ รายงานทั้งระบบ |
| **Manager** | 2 | อนุมัติทีม ปฏิทิน ติดตามยืมค้างคืน รายงานในขอบเขตผู้จัดการ |
| **Employee** | 3 | จองห้อง ยืมอุปกรณ์ ดูเฉพาะกิจกรรมของตัวเอง |

**โฟลร่วม:** Admin ตั้งกติกา → พนักงาน/ผู้จัดการส่งคำขอ → อนุมัติ (ถ้าห้องกำหนด) → ใช้งาน → คืนอุปกรณ์ตามวันที่ตกลง

### แผนภาพสั้น — สองงานในระบบ

```mermaid
flowchart LR
  subgraph equip [ยืมอุปกรณ์]
    E1[เลือกของ] --> E2[ส่งคำขอ]
    E2 --> E3[อนุมัติ]
    E3 --> E4[ใช้งาน]
    E4 --> E5[คืน]
  end
  subgraph room [จองห้อง]
    R1[เลือกห้อง/เวลา] --> R2[ส่งคำขอ]
    R2 --> R3{ต้องอนุมัติ?}
    R3 -->|ไม่| R4[ใช้ห้อง]
    R3 -->|ใช่| R5[อนุมัติ] --> R4
  end
```

### Tree — โครงเอกสารและบทบาท

```text
ABIMS (เอกสาร 00–04)
├── 00-roles-complete.md    รวม Admin + Manager + Employee
├── 01-roles-admin.md       ผู้ดูแลระบบ
├── 02-roles-manager.md     ผู้จัดการ
├── 03-roles-employee.md    พนักงาน
└── 04-database.md          ฐานข้อมูล tbl

บทบาทในระบบ (tbl_users.role)
├── 1 Admin     ตั้งค่า · อนุมัติ · รายงานทั้งองค์กร
├── 2 Manager   อนุมัติทีม · ปฏิทิน · ติดตามยืมค้างคืน
└── 3 Employee  จอง/ยืมของตัวเอง · ดูประวัติตนเอง
```

---

## Admin คนแรก — บัญชี default ของระบบ

### หลังติดตั้งฐานข้อมูล

ไฟล์ [`abims.sql`](../../abims.sql) ในโปรเจกต์ถูกล้างให้เหลือ **Admin หลัก 1 แถว** (เช่น `username` = **admin**, `user_id` = `1z38ml5XLUUH`) — import แล้วล็อกอินได้ทันที แต่ยังไม่มีห้อง อุปกรณ์ หรือประวัติคำขอ

ลำดับที่แนะนำ:

1. ล็อกอิน Admin หลัก  
2. ตั้งห้อง · หมวด/อุปกรณ์ · ชุดเวลาทำการ  
3. เพิ่มบัญชี Manager และ Employee จาก **User management**  
4. ให้ทีมเริ่มจอง/ยืม

### ทำไมต้องมี “Admin คนแรก” แยกจาก Admin คนอื่น

ระบบไม่ให้องค์กร “ไม่มีผู้ดูแลเลย” — จึงมีกฎพิเศษกับ **Admin คนแรก**:

- **นิยามในโค้ด:** บัญชีที่ `role = 1` (Admin) และมี `created_at` **เก่าที่สุด** (ถ้าเท่ากันใช้ `user_id` น้อยสุด)  
- **ไม่สามารถเปลี่ยน Role** เป็นผู้จัดการหรือพนักงาน  
- **ไม่สามารถปิดสถานะ (Inactive)** — ต้อง Active เสมอ (หน้ารายชื่อผู้ใช้แสดงล็อก)  
- **ไม่มีเมนูลบผู้ใช้ออกจากฐานข้อมูล** — บัญชีอื่นปิดใช้งานได้ แต่ Admin คนแรกคือ **anchor** หลังติดตั้งเพื่อเพิ่มคนอื่นเข้าระบบ

ใน dump เริ่มต้น บัญชี `admin` มักเป็น Admin คนแรกนี้ · ถ้าสร้าง Admin ใหม่ภายหลัง บัญชีใหม่ **ไม่** แทนที่สถานะ Admin คนแรก

---

## ลำดับการอนุมัติ

### จองห้อง

Admin ตั้งกฎต่อห้องใน **Room settings** (`requires_booking_approval`):

| ผู้จอง | ห้อง “จองทันที” (`0`) | ห้อง “ต้องอนุมัติ” (`1`) | ใครอนุมัติ |
|--------|----------------------|--------------------------|-------------|
| Employee | ได้ทันที | รออนุมัติ | **Manager** (Admin ทำแทนได้) |
| Manager | ได้ทันที | รออนุมัติ | **Admin** เท่านั้น |
| Admin | ได้ทันที | ได้ทันที (ข้ามคิว) | — |

**กฎ:** ห้ามอนุมัติคำขอของตัวเอง · ระบบตรวจเวลาทำการและไม่ให้จองซ้อนเวลา

```mermaid
flowchart TD
  subgraph pending [ห้องต้องอนุมัติ status=1]
    Emp[Employee จอง] --> MgrAppr[Manager อนุมัติ]
    MgrAppr -->|Admin ทำแทนได้| Done[status=2 ใช้ห้อง]
    Mgr[Manager จอง] --> AdmAppr[Admin อนุมัติ]
    AdmAppr --> Done
    Adm[Admin จอง] --> Instant[status=2 ทันที]
  end
```

```text
จองห้อง (สรุป)
├── ห้อง requires_booking_approval = 0  → ทุก role ได้ทันที
└── ห้อง requires_booking_approval = 1
    ├── Employee จอง → Manager อนุมัติ (Admin แทนได้)
    ├── Manager จอง → Admin อนุมัติ
    └── Admin จอง → ไม่เข้าคิว
```

### ยืมอุปกรณ์

ทุกคำขอเริ่มที่ **รออนุมัติ** → Manager หรือ Admin อนุมัติ / ปฏิเสธ → เมื่อคืนของ ฝ่ายอนุมัติกด **รับคืน**  
ถ้าเลยวันคืนยังไม่คืน = **ค้างคืน (overdue)** — ไม่เกี่ยวกับการใช้ห้องเกินเวลา

```mermaid
flowchart LR
  A[ส่งคำขอ] --> B[รออนุมัติ]
  B --> C[อนุมัติ]
  B --> D[ปฏิเสธ]
  C --> E[ยืมใช้]
  E --> F[คืน / รับคืน]
  E --> G[ค้างคืน ถ้าเลยวันคืน]
```

```text
ยืมอุปกรณ์ (tbl_bookings)
├── 1 รออนุมัติ
├── 2 อนุมัติ / กำลังยืม
├── 3 ปฏิเสธ
├── 4 คืนแล้ว
└── 5 ผู้ขอยกเลิก
```

---

## ฟีเจอร์ที่ทุก role ใช้ร่วมกัน

| ฟีเจอร์ | ทำอะไร |
|---------|--------|
| **การแจ้งเตือน (กระดิ่ง)** | ผลอนุมัติ / ปฏิเสธ คำขอใหม่ ย้ายห้อง ยกเลิกจอง · Manager และ Employee มีหน้ารวมแจ้งเตือนแยก · Admin เห็นกิจกรรมของผู้จัดการในกระดิ่งด้วย |
| **โปรไฟล์** | ดูข้อมูลส่วนตัวและรูปโปรไฟล์ของบัญชีที่ล็อกอิน — ข้อมูลบัญชีหลักแก้โดย Admin ใน User management |
| **ลืมรหัสผ่าน** | ขอรหัส OTP ทางอีเมล แล้วตั้งรหัสผ่านใหม่ (OTP มีวันหมดอายุ) |
| **ใบยืนยัน** | พิมพ์หรือโหลด PDF / Excel — ยืมอุปกรณ์เมื่ออนุมัติแล้วหรือคืนแล้ว · จองห้องเมื่ออนุมัติแล้ว |
| **ภาษาและธีม** | สลับไทย / อังกฤษ และโหมดสว่าง / มืด |

---

# ส่วนที่ 1 — 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`*

---

# ส่วนที่ 2 — Manager (ผู้จัดการ)

สรุปเมนูผู้จัดการ — ภาษาไทยเป็นหลัก อธิบายโฟลและเหตุผลที่ระบบแยกบทบาท — คู่กับ `docs/app/roles.html` (แท็บ Manager)

---

## หลักการ (เข้าใจง่าย)

**ผู้จัดการคืออะไร:** คนกลางระหว่างพนักงานกับกติกาที่ผู้ดูแลระบบตั้งไว้ — อนุมัติคำขอ ติดตามปฏิทิน และช่วยตามของที่ยืมไปแล้วยังไม่คืน

**โฟลโดยรวม:** พนักงานส่งคำขอ → ผู้จัดการอนุมัติหรือปฏิเสธ → เมื่อยืมแล้วต้องคืนตามวันที่ตกลง → ถ้าคืนช้า ระบบเตือนและให้ตามจากเมนูบันทึกการยืม

**ทำไมแดชบอร์ดเน้นพนักงาน:** หน้าที่หลักคือดูแลทีม ตัวเลขและกราฟจึงโฟกัสที่พนักงาน ไม่ใช่ภาพรวมทั้งบริษัทแบบ Admin

**สองเมนูที่มักสับสน:** *บันทึกการยืม* (ในเมนูผู้จัดการ) ใช้งานทุกวัน · *บันทึกกิจกรรมผู้จัดการ* (ในโซน Admin) เป็นหน้าที่ผู้ดูแลระบบใช้ตรวจภาพรวม

---

## สรุปเมนู (6 กลุ่ม)

| เมนู (UI) | ทำอะไร |
|-----------|--------|
| Dashboard | ตัวเลข กราฟ ปฏิทิน คิวอนุมัติ แจ้งเตือนคืน — เน้นข้อมูลพนักงานเป็นหลัก |
| Schedules | ปฏิทินจองห้อง (ในเอกสาร TOC อาจเรียก Calendar) |
| Borrow Equipment | คลังและสร้างคำขอยืม |
| Approvals | อนุมัติ/ปฏิเสธ/รับคืน อุปกรณ์และห้อง |
| Borrowing logs | ประวัติยืม — จุดหลักติดตาม overdue |
| Export report | Excel / PDF |

**ไม่ใช่เมนู Manager:** หน้า **Manager activity logs** ของ Admin (`admin/manager_logs`) — ผู้ดูแลระบบดูประวัติกิจกรรมที่เกี่ยวกับผู้จัดการ ต่างจาก **Borrowing logs** (`manager/logs`)

**ต่างจาก Admin บนแดชบอร์ด:** ไม่มีปุ่ม New booking — จองห้องผ่าน Schedules · ยืมผ่าน Borrow Equipment

ลิงก์ portal: `https://abims.website/manager`

### Tree — เมนู Manager

```text
Manager
├── Dashboard
├── Schedules / Calendar
├── Borrow Equipment
├── Approvals          ยืม + จองห้อง (อนุมัติ Employee)
├── Borrowing logs     ทีม + ประวัติตัวเอง (/mylogs → redirect มาที่นี่)
└── Export report
```

---

## ยืมอุปกรณ์เกินกำหนด (ค้างคืน)

หมายถึงของที่**อนุมัติให้ยืมไปแล้ว แต่ยังไม่คืน** และเลยวันที่ตกลงไว้ — **ไม่เกี่ยว**กับการใช้ห้องเลยเวลาที่จอง (ในระบบแยกเรื่องห้องกับอุปกรณ์)

### ที่ Manager ใช้ติดตาม

| จุด | สิ่งที่ทำได้ | ขอบเขตผู้ยืมที่นับ (โดยทั่วไป) |
|-----|----------------|--------------------------------|
| Dashboard | แผง return alerts, จำนวน overdue, ลิงก์ไป logs | **Employee เท่านั้น** |
| Borrowing logs | แถบ overdue, ตัวกรอง Overdue / Not overdue, `?overdue=1` | แถบนับ **Manager + Employee**; ตารางค่าเริ่มต้น role 2+3 |
| Approvals (อุปกรณ์) | กรอง overdue, แถวเน้น `is-overdue` | ตามตัวกรองคำขอ |
| การแจ้งเตือน (bell) | รายการ overdue ล่าสุด | อาจรวม **ทุก role** — ตัวเลขอาจไม่ตรง Dashboard |

ลิงก์ production: `https://abims.website/manager/logs?overdue=1`

---

## Dashboard (`/manager`)

หน้าตาเหมือนแดชบอร์ด Admin แต่ตัวเลขและกราฟเน้นพนักงานเป็นหลัก:

- **ตัวเลขสรุปสี่การ์ด:** คำขอรวม · รออนุมัติ · ห้องถูกใช้ประมาณกี่เปอร์เซ็นต์ · อุปกรณ์ที่กำลังถูกยืม — นับในขอบเขตพนักงาน
- **กราฟเส้น:** แนวโน้มจองห้อง/ยืมอุปกรณ์ — สลับทั้งหมด/ห้อง/อุปกรณ์ + ตัวกรองขั้นสูง
- **กราฟวง:** สัดส่วนสถานะ (รอ · อนุมัติ · ปฏิเสธ · คืนแล้ว · ยกเลิก) ตามประเภทในกราฟเส้น
- **ปฏิทินย่อ:** เดือนปัจจุบัน + ลิงก์ปฏิทินเต็ม
- **คิวรออนุมัติ:** อนุมัติ/ปฏิเสธจากแดชบอร์ด
- **แจ้งเตือนคืน:** ใกล้ครบ/เกินกำหนด → `manager/logs?overdue=1`
- **กราฟ:** อัปเดตจากข้อมูลจริงในระบบ (ไม่ใช่ตัวอย่างในเอกสาร ABIMS)
- **จอง/ยืม:** ไม่มีปุ่มจองด่วนบนแดชบอร์ด — ใช้เมนู Schedules และ Borrow Equipment

## Schedules / Calendar (`/manager/calendar`)

- ปฏิทินจองห้อง จอง/บล็อก ตามกฎห้องที่ Admin ตั้ง
- **ลำดับอนุมัติ:** Employee จอง → Manager อนุมัติ · Manager จอง → **Admin** อนุมัติ (อนุมัติการจองของตัวเองไม่ได้)

## Equipment catalog (`/manager/equipment_catalog`)

- ดูคลังและสร้างคำขอยืม

## Approvals (`/manager/approvals`)

- อุปกรณ์: อนุมัติ ปฏิเสธ รับคืน กรอง overdue (ไม่มีแถบ overdue แยกแบบหน้า Logs)
- ห้อง: อนุมัติคำขอจองเมื่อห้องต้องรออนุมัติ

## Borrowing logs (`/manager/logs`)

- ประวัติยืม — จุดหลักติดตาม overdue
- Modal รายละเอียดแสดงจำนวนวันเกินกำหนด
- ประวัติยืมของ Manager เองอยู่ในตารางเดียวกัน (กรองตาม role ผู้ยืมได้) — ลิงก์เก่า `/manager/mylogs` redirect มาหน้านี้

## Export (`/manager/export_excel`, `/manager/export_pdf`)

- รายงานในขอบเขต Manager

---

*อัปเดตตาม `shell_menu.php`, `dashboard/scope.php`, และ logic overdue ใน `config/functions.php`*

---

# ส่วนที่ 3 — Employee (พนักงาน)

สรุปเมนูพนักงาน — ภาษาไทยเป็นหลัก อธิบายโฟลประจำวันและเหตุผลที่เห็นแค่งานของตัวเอง — คู่กับ `docs/app/roles.html` (แท็บ Employee)

---

## หลักการ (เข้าใจง่าย)

**พนักงานคืออะไร:** คนที่ใช้ระบบจองห้องและยืมอุปกรณ์ตามที่องค์กรเปิดให้ — ไม่ตั้งค่าระบบ ไม่มีเมนูอนุมัติทีม

**โฟลโดยรวม:** เลือกห้องหรืออุปกรณ์ → ส่งคำขอ → รอผลอนุมัติ (ถ้าห้องกำหนด) → ใช้ตามเวลา → คืนอุปกรณ์ภายในวันที่ตกลง

**ทำไมบางอย่างรออนุมัติ:** ผู้ดูแลระบบตั้งไว้ว่าห้องนั้นต้องมีคนตรวจก่อน — ไม่ใช่ระบบชะลอโดยไม่จำเป็น

**ทำไมเห็นแค่ของตัวเอง:** เพื่อความเป็นส่วนตัว — ผู้จัดการและผู้ดูแลระบบมีเมนูแยกสำหรับดูทีมหรือทั้งองค์กร

---

## สรุปเมนู (4 กลุ่ม)

| เมนู | ทำอะไร |
|------|--------|
| Dashboard | ตัวเลขและกิจกรรมของฉัน — ไม่ใช่แดชบอร์ดกราฟใหญ่แบบผู้จัดการ |
| Rooms | ปฏิทินและจองห้องประชุม |
| Equipment catalog | ส่งคำขอยืมจากคลัง |
| My activity hub | รวมประวัติจองห้อง + ยืมอุปกรณ์ ค้นหา กรอง overdue |

**ขอบเขต:** ทุกคำขอผูกกับบัญชีที่ล็อกอิน — ไม่เห็นคำขอของคนอื่นหรือภาพรวมทีม

ลิงก์ portal: `https://abims.website/employee`

### Tree — เมนู Employee

```text
Employee
├── Dashboard
├── Rooms / Calendar   จองห้อง → รอ Manager อนุมัติ (ถ้าห้องกำหนด)
├── Equipment catalog  ยืม → รอ Manager/Admin อนุมัติ
└── My activity hub    ประวัติจอง + ยืมของตัวเอง
```

---

## ยืมอุปกรณ์เกินกำหนด (ค้างคืน)

ความหมายเดียวกับฝั่งผู้จัดการ: ยืมไปแล้วยังไม่คืนเลยวันที่ตกลง — ไม่เกี่ยวกับการใช้ห้องเลยเวลาที่จอง

| จุด | พฤติกรรม |
|-----|----------|
| **กิจกรรมของฉัน** | แถบแจ้งค้างคืน ตัวกรองเกินกำหนด / ยังไม่เกิน ลิงก์เปิดมุมมองค้างคืน |
| **แดชบอร์ด** | ตารางกิจกรรมล่าสุดเน้นรายการที่คืนช้า |
| **การแจ้งเตือน** | อัปเดตคำขอของบัญชีตนเอง — ไม่เหมือน Manager ที่เห็น overdue ทั้งระบบ |

ลิงก์: `https://abims.website/employee/my_requests?overdue=1`

---

## Dashboard (`/employee`)

หน้าแรกเฉพาะพนักงาน — ไม่ใช่แดชบอร์ดกราฟแบบผู้จัดการ:

- **ตัวเลข:** จองห้องไปแล้วกี่ครั้ง · นัดที่ใกล้ถึง · คำขอที่ยังรอคนอนุมัติ (ทั้งห้องและอุปกรณ์)
- **นัดถัดไป:** การจองห้องที่ใกล้เริ่ม
- **แนะนำ:** ห้องและอุปกรณ์จากประวัติและของที่พร้อมให้ยืม
- **กิจกรรมล่าสุด:** ตารางและแถบด้านข้าง — รายการคืนช้าถูกเน้นให้เห็น
- **ต่างจากผู้จัดการ:** ไม่มีกราฟภาพรวมทีม คิวอนุมัติคนอื่น หรือแผงแจ้งเตือนคืนทั้งบริษัท

## Rooms (`/employee/calendar`)

- ปฏิทินจองห้องตามสิทธิ์ห้องที่ Admin ตั้ง
- ห้องต้องอนุมัติ → รอ **Manager** อนุมัติ (Admin ทำแทนได้) · ห้องจองทันทีใช้ได้เลย
- อยู่ใน preset เวลาทำการและไม่จองซ้อน

## Equipment catalog (`/employee/equipment_catalog`)

- ส่งคำขอยืมจากคลังที่ Admin ดูแล
- หลังอนุมัติต้องคืนตาม `return_date`

## My activity hub (`/employee/my_requests`)

- รวมประวัติและสถานะจองห้อง + ยืมอุปกรณ์
- ค้นหา กรอง เปิดรายละเอียด / ใบยืนยัน (เมื่อมี)
- Deep link: `?tab=rooms`, `?tab=equipment`, `?overdue=1`
- Redirect เก่า: `my_room_bookings.php` → `my_requests?tab=rooms`

---

*อัปเดตตาม `shell_menu.php` และ `employee/index.php` / `dashboard_helpers.php`*

---

*เอกสารรวม — รัน `python scripts/build_00_roles_complete_md.py` หลังแก้ 01–03 · ฐานข้อมูล: [`04-database.md`](04-database.md)*
