# MVP Leave Bot
ระบบบอท Telegram สำหรับการจัดการการลา และ Work From Home พร้อมระบบลงทะเบียนใหม่ที่เรียบง่าย
## การตั้งค่าระบบลงทะเบียน
### ไฟล์คอนฟิก: `config/db_config.php`
```php
// การตั้งค่าการลงทะเบียน
define('ALLOW_SELF_REGISTRATION', true); // true = เปิดให้ลงทะเบียนด้วยตัวเอง, false = ใช้เฉพาะสมาชิกในฐานข้อมูล
define('DEFAULT_MANAGER_ID', 1); // ผู้จัดการเริ่มต้นสำหรับพนักงานใหม่ (ID ของ HR หรือ Manager)
define('AUTO_GENERATE_EMPLOYEE_CODE', true); // สร้างรหัสพนักงานอัตโนมัติ
define('EMPLOYEE_CODE_PREFIX', 'EMP'); // คำนำหน้ารหัสพนักงาน
```
## ระบบลงทะเบียนใหม่
### เมื่อ `ALLOW_SELF_REGISTRATION = true`
- ผู้ใช้สามารถลงทะเบียนด้วยตัวเองผ่านคำสั่ง `/register`
- ระบบจะขอข้อมูล: ชื่อจริง, นามสกุล, อีเมล
- ข้อมูลจะถูกบันทึกลงตาราง `employees` โดยตรง
- ค่าเริ่มต้น: `is_manager = 0`, `is_hr = 0`
### เมื่อ `ALLOW_SELF_REGISTRATION = false`
- การลงทะเบียนด้วยตัวเองถูกปิดใช้งาน
- เฉพาะผู้ใช้ที่มีข้อมูลในตาราง `employees` เท่านั้นที่สามารถใช้บอทได้
- ผู้ดูแลระบบต้องเพิ่มข้อมูลผู้ใช้ผ่าน SQL โดยตรง
## การใช้งาน
### คำสั่งหลัก
- `/start` - เริ่มการสนทนา
- `/register` - ลงทะเบียนเข้าใช้งานระบบ (เมื่อเปิดใช้งาน)
- `/status` - ตรวจสอบสถานะการลงทะเบียน
- `/help` - แสดงคำสั่งที่ใช้ได้
### คำสั่งสำหรับผู้ใช้ที่ลงทะเบียนแล้ว
- `/ลา` หรือ `/leave` - เริ่มขั้นตอนการขอลา
- `/wfh` - เริ่มขั้นตอนการขอ Work From Home
- `/เช็คยอด` หรือ `/balance` - ตรวจสอบยอดวันลาคงเหลือ
- `/ยกเลิกคำขอ` หรือ `/cancelrequest` - ยกเลิกคำขอที่รออนุมัติ
- `/สรุปวันนี้` หรือ `/whosout` - (HR) สรุปผู้ที่ไม่อยู่ในออฟฟิศวันนี้
- `/cancel` - ยกเลิกการดำเนินการปัจจุบัน
## กระบวนการลงทะเบียน
1. **เริ่มต้น**: ผู้ใช้พิมพ์ `/register`
2. **ชื่อจริง**: ระบบขอชื่อจริง (อย่างน้อย 2 ตัวอักษร)
3. **นามสกุล**: ระบบขอนามสกุล (อย่างน้อย 2 ตัวอักษร)
4. **อีเมล**: ระบบขออีเมล (ตรวจสอบรูปแบบและไม่ซ้ำในระบบ)
5. **ยืนยัน**: แสดงข้อมูลให้ยืนยัน (พิมพ์ "ถูกต้อง" หรือ "ยกเลิก")
6. **เสร็จสิ้น**: บันทึกข้อมูลลงฐานข้อมูลและแสดงข้อมูลสมาชิกใหม่
## ไฟล์ State การลงทะเบียน
- เก็บไว้ในโฟลเดอร์ `logs/`
- รูปแบบ: `registration_{userId}_{chatId}.json`
- หมดอายุใน 30 นาที
- ลบอัตโนมัติเมื่อเสร็จสิ้นหรือยกเลิก
## การติดตั้ง
1. **Database**: นำเข้า `leave_bot.sql` เพื่อสร้างตารางและข้อมูลตัวอย่าง
2. **Config**: แก้ไข `config/db_config.php` และ `config/telegram_config.php`
3. **Permissions**: ตรวจสอบว่าโฟลเดอร์ `logs/` สามารถเขียนได้
4. **Webhook**: ตั้งค่า webhook ไปที่ `webhook_handler.php` (ไฟล์หลัก)
## ตารางฐานข้อมูลหลัก
- **`employees`**: ข้อมูลพนักงาน
- **`leave_types`**: ประเภทการลา
- **`leave_requests`**: คำขอลา/WFH
- **`leave_balances`**: ยอดวันลาคงเหลือ
## การจัดการสิทธิ์
- **พนักงานทั่วไป**: `is_manager = 0`, `is_hr = 0`
- **ผู้จัดการ**: `is_manager = 1`, `is_hr = 0`
- **HR**: `is_manager = 1`, `is_hr = 1`
## ข้อมูลสำคัญ
- การลงทะเบียนทำผ่านการกรอกข้อมูลโดยตรงและบันทึกลงตาราง `employees`
- การตั้งค่าทั้งหมดอยู่ในไฟล์ PHP config แทนการเก็บในฐานข้อมูล
- ระบบง่ายขึ้น ลดขั้นตอน และเหมาะสำหรับการใช้งานจริง
- **ไฟล์หลักถูกย้ายออกจาก `public/` มาที่ root directory เพื่อความสะดวกในการจัดการ**
## Structure
```
├── config/
│ ├── db_config.php # Database configuration + Registration settings
│ └── telegram_config.php # Telegram bot token
├── src/
│ ├── Core/
│ │ └── Database.php # Database connection class
│ ├── Handlers/
│ │ ├── LeaveApplicationHandler.php
│ │ ├── BalanceCheckHandler.php
│ │ ├── CancelRequestHandler.php
│ │ ├── ManagerActionHandler.php
│ │ ├── HrSummaryHandler.php
│ │ └── SelfRegistrationHandler.php # NEW: Self registration
│ ├── Models/
│ │ ├── Employee.php
│ │ ├── LeaveRequest.php
│ │ ├── LeaveBalance.php
│ │ └── LeaveType.php
│ └── Services/
│ └── TelegramService.php
├── assets/ # CSS, JS, images (if needed)
├── logs/ # Registration state files & webhook logs
├── index.php # Optional web interface
├── webhook_handler.php # Main webhook handler (MOVED from public/)
└── leave_bot.sql # Database schema (simplified)
```