296 lines
15 KiB
Markdown
296 lines
15 KiB
Markdown
# 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/` หลังดำเนินการเสร็จ
|