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