This commit is contained in:
2026-07-16 09:53:14 +07:00
parent 0fc112a2e8
commit 29cec708a3
1236 changed files with 212848 additions and 0 deletions

View File

@@ -0,0 +1,295 @@
# Prompt: ปรับปุ่มบันทึก Draft และ Validation ก่อนเปลี่ยนสถานะ Training Record
## Objective
ปรับปรุงหน้าแก้ไขประวัติการอบรมที่มาจากสถานะ **ฉบับร่าง** หรือ **ตีกลับ** ให้ปุ่มและ Workflow ชัดเจนขึ้น โดยยังคงให้ผู้ใช้สามารถบันทึกฉบับร่างได้ และเพิ่มการตรวจสอบข้อมูลก่อนเปลี่ยนสถานะเป็น **รอตรวจสอบ**
## Scope
ให้ตรวจสอบและปรับปรุงทุกส่วนที่เกี่ยวข้อง เช่น
- หน้า `training-records/new`
- หน้า Edit Training Record
- Training Record Form Component
- Validation Schema
- API / Server Action / Mutation
- Status Workflow
- หน้า List `training-records`
- เอกสารรายงานผลใน `docs/`
## Requirement
### 1. ปรับชื่อปุ่มในหน้า Edit Draft
เมื่อ Employee เปิดรายการสถานะ **ฉบับร่าง** มาแก้ไข
จากเดิม:
```text
อัปเดตประวัติการอบรม
```
ให้เปลี่ยนเป็น:
```text
บันทึกประวัติการอบรม
```
โดยปุ่มนี้ทำงานเหมือนการ **ส่งตรวจสอบ**
### 2. ยังคงมีปุ่มบันทึกฉบับร่าง
ในหน้า Edit ของรายการสถานะ **ฉบับร่าง** ต้องมีปุ่ม:
```text
[บันทึกฉบับร่าง] [บันทึกประวัติการอบรม]
```
ความหมาย:
- `บันทึกฉบับร่าง` = อัปเดตข้อมูล แต่ยังคงสถานะเป็น **ฉบับร่าง**
- `บันทึกประวัติการอบรม` = ตรวจสอบข้อมูลให้ครบ แล้วเปลี่ยนสถานะเป็น **รอตรวจสอบ**
### 3. Validation ก่อนเปลี่ยนสถานะ
เมื่อกดปุ่ม:
```text
บันทึกประวัติการอบรม
```
ระบบต้องใช้ Validation ชุดเดียวกับตอน Create / ส่งตรวจสอบ
ต้องตรวจสอบอย่างน้อย:
- ชื่อหลักสูตร
- วันที่อบรม
- ประเภทการอบรม
- จำนวนชั่วโมง
- ข้อมูลที่จำเป็นอื่นตาม Schema เดิม
- เงื่อนไข Public Training Attachment ตาม Requirement เดิม
กรณีประเภทการอบรมเป็น **อบรมภายนอก (Public Training)** ต้องแนบ Attachment ให้ครบก่อนจึงจะเปลี่ยนสถานะได้
### 4. กรณี Validation ไม่ผ่าน
ถ้าข้อมูลไม่ครบหรือไฟล์แนบไม่ถูกต้อง:
- ห้ามเปลี่ยนสถานะ
- รายการต้องยังคงเป็น **ฉบับร่าง**
- แสดง Error ทุกจุดที่ผิด
- ให้ผู้ใช้แก้ไขแล้วกดใหม่ได้
### 5. กรณี Validation ผ่าน
ถ้าข้อมูลครบถ้วน:
- บันทึกข้อมูลล่าสุด
- เปลี่ยนสถานะจาก **ฉบับร่าง** เป็น **รอตรวจสอบ**
- Redirect กลับไปหน้า:
```text
training-records
```
### 6. หน้า List หลังเปลี่ยนสถานะ
หลังเปลี่ยนสถานะเป็น **รอตรวจสอบ**
- รายการต้องไม่อยู่ในกลุ่ม/ตัวกรอง **ฉบับร่าง**
- รายการต้องไปอยู่ในสถานะ **รอตรวจสอบ**
- Badge / Status ต้องแสดงถูกต้องตาม Pattern เดิมของระบบ
### 7. กรณี HRD ตีกลับ
เมื่อ HRD ตีกลับรายการ แล้ว Employee เปิดมาแก้ไข
ให้แสดงปุ่ม:
```text
[บันทึกฉบับร่าง] [ส่งตรวจสอบอีกครั้ง]
```
ความหมาย:
- `บันทึกฉบับร่าง` = บันทึกการแก้ไขไว้ก่อน ยังไม่ส่ง HRD
- `ส่งตรวจสอบอีกครั้ง` = Validate ข้อมูล แล้วเปลี่ยนสถานะกลับเป็น **รอตรวจสอบ**
### 8. Logic ของปุ่มแต่ละสถานะ
ให้จัดการปุ่มตามสถานะดังนี้:
| สถานะ | ปุ่มที่แสดง | ผลลัพธ์ |
| --------- | ------------------------------------- | ------------------------------------- |
| สร้างใหม่ | บันทึกฉบับร่าง / ส่งตรวจสอบ | สร้าง Draft หรือสร้างรายการรอตรวจสอบ |
| ฉบับร่าง | บันทึกฉบับร่าง / บันทึกประวัติการอบรม | อัปเดต Draft หรือเปลี่ยนเป็นรอตรวจสอบ |
| ตีกลับ | บันทึกฉบับร่าง / ส่งตรวจสอบอีกครั้ง | บันทึก Draft หรือส่งตรวจสอบใหม่ |
| รอตรวจสอบ | ไม่ให้ Employee แก้ไข | อ่านอย่างเดียว |
| อนุมัติ | ไม่ให้ Employee แก้ไข | อ่านอย่างเดียว |
## Technical Requirement
ก่อนแก้ไขต้องตรวจสอบ Pattern เดิมของโปรเจกต์ เช่น
- Form ใช้ React Hook Form / TanStack Form หรือ Pattern อื่น
- Validation ใช้ Zod หรือ Schema ใด
- Submit แยก Action ด้วย intent หรือ status หรือไม่
- API / Mutation / Server Action เดิมรับค่า status อย่างไร
- Status enum / constant ใช้ค่าอะไร
- หน้า List แยกสถานะหรือ filter อย่างไร
ห้ามเดาค่าเอง ต้องตรวจสอบจาก Source Code เดิมก่อนเสมอ
## Implementation Steps
1. ตรวจสอบหน้า Create และ Edit Training Record
2. ตรวจสอบปุ่ม Submit เดิม
3. ตรวจสอบ Workflow ของ Draft / Returned / Pending
4. ตรวจสอบ Validation Schema เดิม
5. ตรวจสอบ Public Training Attachment Requirement เดิม
6. แยก Logic ระหว่าง Draft Save กับ Final Submit
7. ปรับชื่อปุ่ม `อัปเดตประวัติการอบรม` เป็น `บันทึกประวัติการอบรม` เฉพาะสถานะ Draft
8. เพิ่มปุ่ม `ส่งตรวจสอบอีกครั้ง` สำหรับรายการที่ถูก HRD ตีกลับ
9. ตรวจสอบให้ Validation ไม่ผ่านแล้วไม่เปลี่ยนสถานะ
10. ตรวจสอบให้ Validation ผ่านแล้วเปลี่ยนสถานะเป็น `รอตรวจสอบ`
11. Redirect กลับหน้า `training-records`
12. ตรวจสอบหน้า List และ Badge สถานะ
13. ตรวจสอบ TypeScript, ESLint และ Build
14. สร้างรายงานผลไว้ใน `docs/`
## Expected Behavior
### Case 1: เปิด Draft แล้วกดบันทึกฉบับร่าง
- บันทึกข้อมูลล่าสุด
- สถานะยังเป็น **ฉบับร่าง**
- ไม่บังคับ Validation เต็ม
- Redirect หรืออยู่หน้าเดิมตาม Pattern เดิมของระบบ
### Case 2: เปิด Draft แล้วกดบันทึกประวัติการอบรม แต่ข้อมูลไม่ครบ
- Submit ไม่สำเร็จ
- สถานะยังเป็น **ฉบับร่าง**
- แสดง Error ทุกจุดที่ผิด
- ไม่เปลี่ยนเป็นรอตรวจสอบ
### Case 3: เปิด Draft แล้วกดบันทึกประวัติการอบรม และข้อมูลครบ
- บันทึกข้อมูลล่าสุด
- เปลี่ยนสถานะเป็น **รอตรวจสอบ**
- Redirect กลับหน้า `training-records`
### Case 4: Public Training Draft ไม่แนบไฟล์ แล้วกดบันทึกประวัติการอบรม
- Submit ไม่สำเร็จ
- แสดง Error ว่าต้องแนบ Attachment
- สถานะยังเป็น **ฉบับร่าง**
### Case 5: Public Training Draft แนบไฟล์ครบ แล้วกดบันทึกประวัติการอบรม
- Submit สำเร็จ
- สถานะเปลี่ยนเป็น **รอตรวจสอบ**
- Redirect กลับหน้า List
### Case 6: รายการถูก HRD ตีกลับ
- Employee แก้ไขได้
- มีปุ่ม `บันทึกฉบับร่าง`
- มีปุ่ม `ส่งตรวจสอบอีกครั้ง`
- หาก Validation ผ่าน ให้เปลี่ยนสถานะกลับเป็น **รอตรวจสอบ**
## Testing Checklist
- [ ] Draft แสดงปุ่ม `บันทึกฉบับร่าง`
- [ ] Draft แสดงปุ่ม `บันทึกประวัติการอบรม`
- [ ] ปุ่ม `อัปเดตประวัติการอบรม` ไม่แสดงใน Draft
- [ ] กด `บันทึกฉบับร่าง` แล้วสถานะยังเป็น Draft
- [ ] กด `บันทึกประวัติการอบรม` แล้ว Validation ทำงานเต็ม
- [ ] Validation ไม่ผ่านแล้วสถานะยังเป็น Draft
- [ ] Validation ผ่านแล้วสถานะเปลี่ยนเป็นรอตรวจสอบ
- [ ] Public Training ไม่แนบไฟล์แล้วส่งไม่ได้
- [ ] Public Training แนบไฟล์ครบแล้วส่งได้
- [ ] หลังส่งสำเร็จ Redirect กลับหน้า `training-records`
- [ ] หน้า List แสดงสถานะ `รอตรวจสอบ` ถูกต้อง
- [ ] รายการไม่อยู่ในกลุ่ม Draft หลังส่งตรวจสอบแล้ว
- [ ] รายการตีกลับแสดงปุ่ม `บันทึกฉบับร่าง`
- [ ] รายการตีกลับแสดงปุ่ม `ส่งตรวจสอบอีกครั้ง`
- [ ] รายการรอตรวจสอบ Employee แก้ไขไม่ได้
- [ ] รายการอนุมัติ Employee แก้ไขไม่ได้
- [ ] Layout ไม่เสียบน Desktop
- [ ] Layout ไม่เสียบน Mobile
- [ ] ไม่มี TypeScript Error
- [ ] ไม่มี ESLint Error
- [ ] Build ผ่าน
## Report Requirement
หลังดำเนินการเสร็จ ให้สร้างเอกสารรายงานผลไว้ในโฟลเดอร์:
```text
docs/
```
ตั้งชื่อไฟล์ประมาณนี้:
```text
docs/training-record-draft-submit-workflow-report.md
```
ในรายงานต้องมีหัวข้อดังนี้:
```md
# Training Record Draft Submit Workflow Report
## Summary
สรุปสิ่งที่ดำเนินการ
## Files Changed
รายการไฟล์ที่แก้ไข
## Requirement Mapping
Mapping ระหว่าง Requirement กับสิ่งที่แก้ไข
## Implementation Details
รายละเอียดการปรับปุ่มและ Workflow
## Button Behavior
สรุปพฤติกรรมของแต่ละปุ่มตามสถานะ
## Validation Rules
สรุป Validation ของ Draft Save และ Submit
## Status Workflow
อธิบาย Flow สถานะ ฉบับร่าง → รอตรวจสอบ → อนุมัติ/ตีกลับ
## Testing Result
ผลการทดสอบตาม Checklist
## Impact Analysis
ผลกระทบต่อระบบเดิม
## Notes / Limitations
ข้อจำกัดหรือสิ่งที่ควรตรวจสอบเพิ่มเติม
```
## Important Rules
- ห้ามแก้ไขส่วนที่ไม่เกี่ยวข้อง
- ห้ามเปลี่ยน Database Schema หากไม่จำเป็น
- ห้ามเปลี่ยน Role Permission เดิมโดยไม่จำเป็น
- ต้องใช้ Pattern เดิมของโปรเจกต์
- ต้องรองรับ Public Training Attachment Requirement เดิม
- ต้องรองรับ Draft Feature เดิม
- ต้องตรวจสอบก่อนเปลี่ยนสถานะเสมอ
- Validation ไม่ผ่านต้องไม่เปลี่ยนสถานะ
- ต้องสร้างรายงานผลไว้ใน `docs/` หลังดำเนินการเสร็จ