14 KiB
Prompt: เพิ่มปุ่มบันทึกฉบับร่างใน Training Record Form
Objective
ปรับปรุงหน้า training-records/new และหน้าที่เกี่ยวข้องกับการแก้ไขประวัติการอบรม ให้รองรับการ บันทึกฉบับร่าง เพื่อให้พนักงานสามารถบันทึกข้อมูลการอบรมไว้ก่อนได้ แม้ข้อมูลหรือเอกสารแนบยังไม่ครบ และสามารถกลับมาแก้ไข/ส่งตรวจสอบภายหลังได้
Scope
ให้ตรวจสอบและปรับปรุงทุกส่วนที่เกี่ยวข้อง เช่น
- หน้า
training-records/new - หน้า Edit Training Record
- Training Record Form Component
- Validation Schema
- API / Server Action / Mutation
- Status ของ Training Record
- ตารางรายการประวัติการอบรม
- สิทธิ์การแก้ไขตามสถานะ
- เอกสารรายงานผลใน
docs/
Requirement
1. เพิ่มสถานะฉบับร่าง
เพิ่มหรือรองรับสถานะรายการเป็น
ฉบับร่าง
หากระบบใช้ enum/status code ให้ตรวจสอบ Pattern เดิมก่อน เช่น
DRAFT;
ห้ามเดาค่าเอง ให้ตรวจสอบ status เดิมของระบบก่อนแก้ไข
2. เพิ่มปุ่มในหน้า Create
ในหน้า training-records/new ให้เพิ่มปุ่ม
บันทึกฉบับร่าง
โดยตำแหน่งปุ่มแนะนำเป็น
[ยกเลิก] [บันทึกฉบับร่าง] [ส่งตรวจสอบ]
หรือปรับตาม Layout เดิมของระบบ โดยต้องไม่ทำให้ UI เดิมเสีย
3. เพิ่มปุ่มในหน้า Edit
กรณีเปิดรายการที่มีสถานะ ฉบับร่าง หรือ ตีกลับ ให้มีปุ่ม
[บันทึกฉบับร่าง] [ส่งตรวจสอบ]
เพื่อให้ผู้ใช้เลือกได้ว่าจะบันทึกไว้ก่อน หรือส่งให้ HRD ตรวจสอบ
4. พฤติกรรมของปุ่มบันทึกฉบับร่าง
เมื่อกด บันทึกฉบับร่าง
ระบบต้องบันทึกรายการด้วยสถานะ
ฉบับร่าง
และหลังบันทึกสำเร็จให้ Redirect กลับไปหน้า
training-records
5. Validation สำหรับ Draft
กรณีกด บันทึกฉบับร่าง ให้ผ่อนปรน Validation บางส่วนได้ เช่น
- ยังไม่แนบไฟล์ได้
- ยังไม่กรอก URL ได้
- ยังไม่กรอกหมายเหตุได้
- ยังไม่กรอก Provider ได้
- ยังไม่กรอก Location ได้
แต่ยังควรบังคับข้อมูลหลัก เช่น
- ชื่อหลักสูตร
- วันที่อบรม
- ประเภทการอบรม
- จำนวนชั่วโมง
ให้ตรวจสอบ Validation เดิมก่อน และปรับให้เหมาะสมตาม Pattern เดิมของโปรเจกต์
6. Validation สำหรับส่งตรวจสอบ
กรณีกด ส่งตรวจสอบ
ให้ใช้ Validation เต็มตามเงื่อนไขเดิมของระบบ
เพิ่มเติมจาก Requirement ก่อนหน้า:
หากประเภทการอบรมเป็น อบรมภายนอก (Public Training) ต้องบังคับแนบ Attachment ก่อนส่งตรวจสอบ
แต่หากกด บันทึกฉบับร่าง ไม่ต้องบังคับแนบ Attachment แม้จะเป็น Public Training
7. สิทธิ์การมองเห็น Draft
รายการสถานะ ฉบับร่าง
- Employee เห็นเฉพาะ Draft ของตัวเอง
- HRD/Admin ไม่ต้องนำ Draft ไปเข้าคิวตรวจสอบ
- HRD/Admin จะเห็นหรือไม่เห็น Draft ให้ตรวจสอบ Pattern เดิมของระบบก่อน หากไม่มี Requirement ชัดเจน ให้แนะนำแนวทางใน
plan.mdก่อนแก้ไข
8. Workflow สถานะ
ให้รองรับ Flow ดังนี้
ฉบับร่าง → รอตรวจสอบ → อนุมัติ / ตีกลับ
รายละเอียด:
- Draft ยังไม่ส่งให้ HRD ตรวจ
- Draft ยังแก้ไขได้โดยเจ้าของรายการ
- เมื่อกดส่งตรวจสอบ ให้เปลี่ยนสถานะเป็น
รอตรวจสอบ - เมื่อส่งตรวจสอบแล้ว Employee แก้ไขไม่ได้
- หาก HRD ตีกลับ รายการกลับมาให้ Employee แก้ไขและส่งใหม่ได้
9. ตารางรายการ Training Records
ให้ตรวจสอบหน้า List ของ training-records
ต้องแสดงรายการ Draft ของ Employee เจ้าของรายการด้วย
ควรแสดงสถานะเป็น Badge เช่น
ฉบับร่าง
และควรมี Action สำหรับแก้ไข Draft ได้ เช่น
แก้ไข
โดยใช้ UI Pattern เดิมของระบบ
10. Technical Requirement
ก่อนแก้ไขต้องตรวจสอบก่อนว่าโปรเจกต์ใช้ Pattern ใด เช่น
- React Hook Form
- TanStack Form
- Zod Validation
- Server Action
- API Route
- TanStack Query Mutation
- Prisma / SQL Server
- Status enum / constant / master data
ให้แก้ไขตาม Pattern เดิมเท่านั้น
ห้ามสร้าง Logic ซ้ำ หากมี Shared Component หรือ Shared Schema อยู่แล้ว
Implementation Steps
- ตรวจสอบโครงสร้างหน้า
training-records/new - ตรวจสอบหน้า Edit Training Record
- ตรวจสอบ Training Record Form Component
- ตรวจสอบ Validation Schema เดิม
- ตรวจสอบ API / Mutation / Server Action สำหรับ Create/Update
- ตรวจสอบ Status เดิมของ Training Record
- เพิ่มหรือรองรับสถานะ
ฉบับร่าง - เพิ่มปุ่ม
บันทึกฉบับร่าง - แยก Logic ระหว่าง Draft Submit กับ Final Submit
- ปรับ Validation ให้ Draft ผ่อนปรนได้
- ปรับ Public Training Attachment Rule ให้บังคับเฉพาะตอน
ส่งตรวจสอบ - ปรับหน้า List ให้แสดง Draft ของ Employee เจ้าของรายการ
- ทดสอบ Create Draft, Edit Draft, Submit Draft
- ตรวจสอบ TypeScript, ESLint และ Build
- สร้างเอกสารรายงานผลใน
docs/
Expected Behavior
Case 1: สร้างรายการแล้วกดบันทึกฉบับร่าง
- ระบบบันทึกสถานะเป็น
ฉบับร่าง - ไม่บังคับแนบ Attachment
- Redirect กลับไปหน้า
training-records - รายการแสดงใน List ของ Employee เจ้าของรายการ
Case 2: Public Training แล้วกดบันทึกฉบับร่างโดยไม่แนบไฟล์
- บันทึกได้
- สถานะเป็น
ฉบับร่าง - ไม่ส่งให้ HRD ตรวจ
Case 3: Public Training แล้วกดส่งตรวจสอบโดยไม่แนบไฟล์
- Submit ไม่ได้
- แสดง Validation Error
- แจ้งว่าต้องแนบเอกสารก่อนส่งตรวจสอบ
Case 4: เปิด Draft มาแก้ไข
- แก้ไขข้อมูลได้
- มีปุ่ม
บันทึกฉบับร่าง - มีปุ่ม
ส่งตรวจสอบ
Case 5: Draft ถูกส่งตรวจสอบ
- สถานะเปลี่ยนเป็น
รอตรวจสอบ - Employee ไม่สามารถแก้ไขได้
- รายการเข้าสู่ Flow HRD Review
Case 6: HRD ตีกลับ
- Employee สามารถแก้ไขรายการได้
- สามารถกด
บันทึกฉบับร่างหรือส่งตรวจสอบใหม่ได้
Testing Checklist
- หน้า
training-records/newมีปุ่มบันทึกฉบับร่าง - กด Draft แล้วบันทึกสำเร็จ
- Draft Redirect กลับไปหน้า
training-records - Draft แสดงใน List ของ Employee เจ้าของรายการ
- Draft ไม่เข้าคิว HRD Review
- Draft ไม่บังคับแนบ Attachment
- Public Training Draft ไม่บังคับแนบ Attachment
- Public Training ส่งตรวจสอบโดยไม่แนบ Attachment ต้อง Submit ไม่ได้
- Public Training ส่งตรวจสอบพร้อม Attachment ต้อง Submit ได้
- Edit Draft ได้
- Edit Draft มีปุ่ม
บันทึกฉบับร่างและส่งตรวจสอบ - ส่ง Draft ไปตรวจสอบแล้วสถานะเปลี่ยนเป็น
รอตรวจสอบ - รายการที่ส่งตรวจสอบแล้ว Employee แก้ไขไม่ได้
- รายการที่ HRD ตีกลับ Employee แก้ไขและส่งใหม่ได้
- Badge สถานะ
ฉบับร่างแสดงถูกต้อง - Layout ไม่เสียบน Desktop
- Layout ไม่เสียบน Mobile
- ไม่มี TypeScript Error
- ไม่มี ESLint Error
- Build ผ่าน
Report Requirement
หลังดำเนินการเสร็จ ให้สร้างเอกสารรายงานผลไว้ในโฟลเดอร์
docs/
ตั้งชื่อไฟล์ประมาณนี้
docs/training-record-draft-feature-report.md
ในรายงานต้องมีหัวข้อดังนี้
# Training Record Draft Feature Report
## Summary
สรุปสิ่งที่ดำเนินการ
## Files Changed
รายการไฟล์ที่แก้ไข
## Requirement Mapping
Mapping ระหว่าง Requirement กับสิ่งที่แก้ไข
## Implementation Details
รายละเอียดการเพิ่มปุ่ม Draft, Workflow, Validation และ Permission
## Status Workflow
อธิบาย Flow สถานะ ฉบับร่าง → รอตรวจสอบ → อนุมัติ/ตีกลับ
## Validation Rules
สรุป Validation ของ Draft และ Submit
## Testing Result
ผลการทดสอบตาม Checklist
## Impact Analysis
ผลกระทบต่อระบบเดิม
## Notes / Limitations
ข้อจำกัดหรือสิ่งที่ควรตรวจสอบเพิ่มเติม
Important Rules
- ห้ามแก้ไขส่วนที่ไม่เกี่ยวข้อง
- ห้ามเปลี่ยน Role Permission เดิมโดยไม่จำเป็น
- ห้ามเปลี่ยน Database Schema หากไม่จำเป็น
- หากจำเป็นต้องเพิ่ม Status/Enum/Database Field ต้องอธิบายเหตุผลใน
plan.mdก่อน - ต้องใช้ Pattern เดิมของโปรเจกต์
- ต้องรองรับ Requirement Public Training Attachment เดิม
- ต้องสร้างรายงานผลไว้ใน
docs/หลังดำเนินการเสร็จ - หากพบความเสี่ยงหรือจุดที่กระทบหลายหน้า ให้สรุปใน
plan.mdก่อนแก้ไข
Implementation Notes
- This feature requires a real DB enum extension because the current
approval_statusonly supportspending,approved,rejected, andneeds_revision; there is no existing persisted draft value to reuse safely. - Implementation decision: add
drafttoapproval_statusand use the existingneeds_revisionstatus as the employee-editable returned-for-revision state. - Implementation decision: drafts will be excluded from the HRD
pending-reviewqueue, but remain visible in the maintraining-recordslisting for HRD/Admin to preserve the current organization-wide visibility pattern unless a later requirement says otherwise.