Initial commit

This commit is contained in:
Porawit Dongwang
2026-09-16 23:20:08 +07:00
commit 0041668dbb
32577 changed files with 3687927 additions and 0 deletions
@@ -0,0 +1,132 @@
# เอกสารวิเคราะห์ระบบและ ER Diagram (System Analysis & ER Diagram)
## 1. ภาพรวมของระบบ (System Overview)
ระบบขออนุมัติเดินทางประชุม-อบรม เป็นระบบที่ช่วยให้บุคลากรสามารถสร้างคำขออนุมัติเดินทางไปราชการ ประชุม หรืออบรม ผ่านทางออนไลน์ โดยมีการอนุมัติผ่านสายงาน (Workflow) บันทึกประวัติการทำรายการ (Audit Log) สามารถสร้างแบบฟอร์ม PDF อัตโนมัติตามเทมเพลต และดึงข้อมูล/เชื่อมโยงกับ Google Sheets
## 2. โครงสร้างฐานข้อมูล (Database Design)
ระบบแบ่งออกเป็น 2 ฐานข้อมูล (หรืออาจเป็น 2 Schema ในเซิร์ฟเวอร์เดียวกัน)
1. **HR Database (`hosoffice_2566`)**: ใช้เป็นข้อมูลอ้างอิงและตรวจสอบสิทธิ์เข้าใช้งาน
2. **System Database (`system`)**: เก็บข้อมูลการขออนุมัติและการตั้งค่าระบบ
### ตารางใน System Database
1. **`system_roles`**: เก็บชื่อบทบาท (เช่น Admin, User, Approver_L1, Approver_L2)
2. **`system_user_roles`**: แมปผู้ใช้งาน (จาก `hr_person.id`) กับบทบาท
3. **`trip_requests`**: ข้อมูลคำขอเดินทาง (ชื่อเรื่อง, วันที่, สถานที่, งบประมาณ, สถานะ)
4. **`trip_approvals`**: ประวัติและสถานะการอนุมัติตามลำดับขั้น (Workflow)
5. **`pdf_templates`**: เก็บไฟล์แบบฟอร์มตั้งต้นที่ใช้วางตัวแปร
6. **`pdf_template_fields`**: พิกัด (X, Y) และข้อมูลของแต่ละช่องตัวแปรบน PDF
7. **`google_sheet_settings`**: ตั้งค่าการเชื่อมต่อและ Mapping Google Sheets
8. **`audit_logs`**: เก็บประวัติการใช้งานระบบ (ใคร ทำอะไร เมื่อไหร่)
## 3. ER Diagram
```mermaid
erDiagram
%% HR Database Reference
HR_PERSON {
int id PK
string username
string password_hash
string firstname
string lastname
string position
int department_id
}
%% System Database
SYSTEM_ROLES {
int id PK
string name "e.g. Admin, User, Manager"
string description
}
SYSTEM_USER_ROLES {
int user_id PK, FK "Refers to HR_PERSON.id"
int role_id PK, FK "Refers to SYSTEM_ROLES.id"
}
TRIP_REQUESTS {
int id PK
int user_id FK "Refers to HR_PERSON.id"
string doc_number "เลขที่หนังสือ"
string title "ชื่อเรื่อง"
text objective "วัตถุประสงค์"
date start_date
date end_date
string location
decimal budget
string status "Draft, Pending, Approved, Rejected"
datetime created_at
datetime updated_at
}
TRIP_APPROVALS {
int id PK
int request_id FK
int approver_id FK "Refers to HR_PERSON.id"
int step "ลำดับการอนุมัติ"
string status "Pending, Approved, Rejected"
text comments
datetime created_at
}
PDF_TEMPLATES {
int id PK
string name
string file_path
int version
datetime created_at
datetime updated_at
}
PDF_TEMPLATE_FIELDS {
int id PK
int template_id FK
string field_name "e.g. {firstname}"
string field_type "Text, Image, QR, Signature"
decimal x_pos
decimal y_pos
int page_num
decimal width
decimal height
int font_size
}
GOOGLE_SHEET_SETTINGS {
int id PK
string spreadsheet_id
string sheet_name
string sync_range
json column_mapping
datetime last_synced_at
string status
}
AUDIT_LOGS {
int id PK
int user_id FK "Refers to HR_PERSON.id"
string action "CREATE, UPDATE, DELETE, LOGIN"
string entity_type "TableName"
int entity_id
text details
string ip_address
datetime created_at
}
%% Relationships
HR_PERSON ||--o{ SYSTEM_USER_ROLES : "has"
SYSTEM_ROLES ||--o{ SYSTEM_USER_ROLES : "assigned_to"
HR_PERSON ||--o{ TRIP_REQUESTS : "creates"
TRIP_REQUESTS ||--o{ TRIP_APPROVALS : "has_workflow_steps"
HR_PERSON ||--o{ TRIP_APPROVALS : "approves"
PDF_TEMPLATES ||--o{ PDF_TEMPLATE_FIELDS : "contains"
HR_PERSON ||--o{ AUDIT_LOGS : "performs"
```
## 4. ข้อสังเกตเพิ่มเติม (Notes)
- การอนุมัติ (Trip Approvals) จะตรวจสอบแบบลำดับขั้น (Step-by-Step)
- PDF Template Fields เก็บพิกัดเพื่อใช้ในการ Render ด้วย TCPDF/FPDI
- การเก็บรหัสผ่าน (Password Hash) ฝั่ง HR จะถูกเรียกใช้โดย PDO ตัวแรก ส่วนเนื้อหาอื่นๆ จะเรียกใช้โดย PDO ตัวที่สอง
- โครงสร้างนี้สามารถรองรับได้ถึง OWASP Top 10 โดยการบังคับใช้ Prepared Statements (PDO) ตลอดทั้งแอปพลิเคชัน