# Test Case — #27166 Job Schedule Shift Dropdown

## TC-01: สร้าง Job ใหม่ — Single Slot (DatePicker + Shift)

**Precondition:** มี Shift ในระบบ (Shift-1: 08:00, Shift-2: 16:55, Shift-3: 00:30)

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิดหน้า Job Setting → กด Add | แสดง form New Job |
| 2 | กรอกข้อมูล Job Name, Target, Model, Machine ครบ | - |
| 3 | ที่ Job Schedule → Mode = "Single" | แสดง DatePicker + Shift dropdown |
| 4 | เลือกวันที่ 2026-06-01 | DatePicker แสดง 2026-06-01 |
| 5 | เลือก Shift-1 (08:00) | Dropdown แสดง "Shift-1 (08:00)" |
| 6 | กด Save | บันทึกสำเร็จ, ms_job_plan มี ms_shift_id, plan_date=2026-06-01, start_ts=2026-06-01 08:00:00, end_ts=2026-06-01 16:55:00 |

---

## TC-02: สร้าง Job ใหม่ — Date Range Mode (สร้าง plan ทุกวัน)

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด form New Job |  |
| 2 | ที่ Job Schedule → สลับ Mode เป็น "Date Range" | แสดง RangePicker + Shift dropdown |
| 3 | เลือกวันที่ 2026-06-01 ~ 2026-06-05 | - |
| 4 | เลือก Shift-1 (08:00) | - |
| 5 | กด Save | บันทึกสำเร็จ, ms_job_plan มี 5 records (วันละ 1) ทุก record มี ms_shift_id, plan_date, start_ts, end_ts ถูกต้อง |

---

## TC-03: สร้าง Job ใหม่ — หลาย Slot (คนละวัน คนละกะ)

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด form New Job, Mode = "Single" | - |
| 2 | Slot 1: เลือกวันที่ 2026-06-01, Shift-1 | - |
| 3 | กดปุ่ม + เพิ่ม Slot 2 | แสดง row ใหม่ |
| 4 | Slot 2: เลือกวันที่ 2026-06-01, Shift-2 | - |
| 5 | กดปุ่ม + เพิ่ม Slot 3 | แสดง row ใหม่ |
| 6 | Slot 3: เลือกวันที่ 2026-06-02, Shift-1 | - |
| 7 | กด Save | บันทึกสำเร็จ, ms_job_plan มี 3 records ถูกต้อง |

---

## TC-04: กะข้ามวัน (Shift-3 start=01:30, end=08:00)

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด form New Job, Mode = "Single" | - |
| 2 | เลือกวันที่ 2026-05-28, Shift-3 (01:30) | - |
| 3 | กด Save | start_ts=2026-05-29 01:30:00, end_ts=2026-05-29 08:00:00 (ข้ามวัน — เลือกวันที่ 28 แต่ Shift-3 เริ่ม 01:30 ซึ่งเป็นช่วงหลังเที่ยงคืน ต้องบันทึกเป็นวันที่ 29) |

**หมายเหตุ:** Shift-3 start=01:30 เป็นกะดึกที่เริ่มหลังเที่ยงคืน เมื่อเลือกวันที่ 28 หมายถึงคืนวันที่ 28→29 ดังนั้น start_ts/end_ts ต้องเป็นวันที่ 29

**กรณี Shift-3 start=23:00:**

| Step | Action | Expected |
|------|--------|----------|
| 1 | เลือกวันที่ 2026-06-01, Shift ที่ start=23:00 | - |
| 2 | กด Save | start_ts=2026-06-01 23:00:00, end_ts=2026-06-02 08:00:00 (ข้ามวัน) |

---

## TC-04.1: Delete Job — ต้องลบ ms_job_plan ด้วย

| Step | Action | Expected |
|------|--------|----------|
| 1 | สร้าง Job ใหม่พร้อม Job Schedule (มี record ใน ms_job_plan) | บันทึกสำเร็จ |
| 2 | เปิดหน้า Job Setting → เลือก Job ที่สร้าง → กด Delete | - |
| 3 | Confirm ลบ | ลบ Job สำเร็จ, ข้อมูลใน ms_job_plan ที่อ้างอิง ms_job_id นั้นต้องถูกลบด้วย |

---

## TC-05: Validation — ห้าม Duplicate (วันที่ + กะ ซ้ำ)

| Step | Action | Expected |
|------|--------|----------|
| 1 | Slot 1: เลือกวันที่ 2026-06-01, Shift-1 | - |
| 2 | Slot 2: เลือกวันที่ 2026-06-01, Shift-1 (ซ้ำ) | - |
| 3 | กด Save | แสดง error/warning ว่า duplicate |

---

## TC-06: Validation — Check Overlap กับ Job อื่น

| Step | Action | Expected |
|------|--------|----------|
| 1 | มี Job A ที่ assign เครื่อง LP01, plan วันที่ 2026-06-01 Shift-1 | - |
| 2 | สร้าง Job B assign เครื่อง LP01 | - |
| 3 | เลือกวันที่ 2026-06-01, Shift-1 | แสดง popup warning overlap กับ Job A |

---

## TC-07: Edit Job เดิม (Legacy) — Match Shift ได้

**Precondition:** Job เดิมมี ms_job_plan ที่ start_ts=2026-05-20 08:00:00, ms_shift_id=NULL

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด Edit Job เดิม | - |
| 2 | ดู Job Schedule section | แสดงเป็น DatePicker (2026-05-20) + Shift dropdown (Shift-1) เพราะ match time part 08:00:00 กับ Shift-1 ได้ |

---

## TC-08: Edit Job เดิม (Legacy) — Match Shift ไม่ได้

**Precondition:** Job เดิมมี ms_job_plan ที่ start_ts=2026-05-20 09:30:00, ms_shift_id=NULL (ไม่ตรงกับ shift ใดเลย)

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด Edit Job เดิม | - |
| 2 | ดู Job Schedule section | แสดงเป็น RangePicker เหมือนเดิม (legacy mode) |

---

## TC-09: แก้เวลา Master Shift — Popup Confirm + Recalculate

**Precondition:** มี Job Plan อนาคต 5 รายการที่อ้างอิง Shift-1

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิดหน้า Shift Setting → Edit Shift-1 | - |
| 2 | เปลี่ยน start_ts จาก 08:00 เป็น 08:30 | - |
| 3 | กด Save | แสดง popup confirm: "การแก้ไขเวลากะจะอัปเดต Job Plan ในอนาคต 5 รายการ..." |
| 4 | กด ยืนยัน | Save shift สำเร็จ, Job Plan อนาคต 5 รายการถูก recalculate (start_ts เปลี่ยนเป็น 08:30), มี setting edit log |
| 5 | ตรวจ Job Plan อดีต | ไม่ถูกแก้ไข (เก็บเวลาเดิม) |

---

## TC-10: แก้เวลา Master Shift — กด Cancel

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด Edit Shift-1, เปลี่ยน start_ts | - |
| 2 | กด Save → แสดง popup confirm | - |
| 3 | กด ยกเลิก | ไม่ save, shift เวลาเดิม, Job Plan ไม่เปลี่ยน |

---

## TC-11: ลบ Shift ที่มี Job Plan อ้างอิง (อนาคต)

**Precondition:** มี Job Plan อนาคตที่อ้างอิง Shift-1

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิดหน้า Shift Setting → เลือก Shift-1 → กด Delete | - |
| 2 | - | แสดง error: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ" |

---

## TC-12: ลบ Shift ที่ไม่มี Job Plan อ้างอิง

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิดหน้า Shift Setting → เลือก Shift ที่ไม่มี Job Plan อ้างอิง → กด Delete | - |
| 2 | Confirm ลบ | ลบสำเร็จ |

---

## TC-13: Import/Export CSV — Format เดิม

| Step | Action | Expected |
|------|--------|----------|
| 1 | สร้าง Job ด้วย Shift dropdown (Shift-1, วันที่ 2026-06-01) | - |
| 2 | Export CSV | Job Schedule column แสดงเป็น `2026-06-01 08:00:00_2026-06-01 16:55:00` (format เดิม) |
| 3 | Import CSV ด้วย format เดิม | Import สำเร็จ, สร้าง ms_job_plan ถูกต้อง |

---

## TC-14: Dropdown แสดงถูกต้อง

| Step | Action | Expected |
|------|--------|----------|
| 1 | เปิด form Job → ดู Shift dropdown | แสดง `shift_name (start_ts)` เรียงตาม `seq` เช่น "Shift-1 (08:00:00)", "Shift-2 (16:55:00)", "Shift-3 (00:30:00)" |
