commit
This commit is contained in:
295
plans/training-record-draft-submit.md
Normal file
295
plans/training-record-draft-submit.md
Normal 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/` หลังดำเนินการเสร็จ
|
||||
Reference in New Issue
Block a user