|
1
|
# Test Case — #27166 Job Schedule Shift Dropdown
|
|
2
|
|
|
3
|
## TC-01: สร้าง Job ใหม่ — Single Slot (DatePicker + Shift)
|
|
4
|
|
|
5
|
**Precondition:** มี Shift ในระบบ (Shift-1: 08:00, Shift-2: 16:55, Shift-3: 00:30)
|
|
6
|
|
|
7
|
| Step | Action | Expected |
|
|
8
|
|------|--------|----------|
|
|
9
|
| 1 | เปิดหน้า Job Setting → กด Add | แสดง form New Job |
|
|
10
|
| 2 | กรอกข้อมูล Job Name, Target, Model, Machine ครบ | - |
|
|
11
|
| 3 | ที่ Job Schedule → Mode = "Single" | แสดง DatePicker + Shift dropdown |
|
|
12
|
| 4 | เลือกวันที่ 2026-06-01 | DatePicker แสดง 2026-06-01 |
|
|
13
|
| 5 | เลือก Shift-1 (08:00) | Dropdown แสดง "Shift-1 (08:00)" |
|
|
14
|
| 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 |
|
|
15
|
|
|
16
|
---
|
|
17
|
|
|
18
|
## TC-02: สร้าง Job ใหม่ — Date Range Mode (สร้าง plan ทุกวัน)
|
|
19
|
|
|
20
|
| Step | Action | Expected |
|
|
21
|
|------|--------|----------|
|
|
22
|
| 1 | เปิด form New Job | |
|
|
23
|
| 2 | ที่ Job Schedule → สลับ Mode เป็น "Date Range" | แสดง RangePicker + Shift dropdown |
|
|
24
|
| 3 | เลือกวันที่ 2026-06-01 ~ 2026-06-05 | - |
|
|
25
|
| 4 | เลือก Shift-1 (08:00) | - |
|
|
26
|
| 5 | กด Save | บันทึกสำเร็จ, ms_job_plan มี 5 records (วันละ 1) ทุก record มี ms_shift_id, plan_date, start_ts, end_ts ถูกต้อง |
|
|
27
|
|
|
28
|
---
|
|
29
|
|
|
30
|
## TC-03: สร้าง Job ใหม่ — หลาย Slot (คนละวัน คนละกะ)
|
|
31
|
|
|
32
|
| Step | Action | Expected |
|
|
33
|
|------|--------|----------|
|
|
34
|
| 1 | เปิด form New Job, Mode = "Single" | - |
|
|
35
|
| 2 | Slot 1: เลือกวันที่ 2026-06-01, Shift-1 | - |
|
|
36
|
| 3 | กดปุ่ม + เพิ่ม Slot 2 | แสดง row ใหม่ |
|
|
37
|
| 4 | Slot 2: เลือกวันที่ 2026-06-01, Shift-2 | - |
|
|
38
|
| 5 | กดปุ่ม + เพิ่ม Slot 3 | แสดง row ใหม่ |
|
|
39
|
| 6 | Slot 3: เลือกวันที่ 2026-06-02, Shift-1 | - |
|
|
40
|
| 7 | กด Save | บันทึกสำเร็จ, ms_job_plan มี 3 records ถูกต้อง |
|
|
41
|
|
|
42
|
---
|
|
43
|
|
|
44
|
## TC-04: กะข้ามวัน (Shift-3 start=01:30, end=08:00)
|
|
45
|
|
|
46
|
| Step | Action | Expected |
|
|
47
|
|------|--------|----------|
|
|
48
|
| 1 | เปิด form New Job, Mode = "Single" | - |
|
|
49
|
| 2 | เลือกวันที่ 2026-05-28, Shift-3 (01:30) | - |
|
|
50
|
| 3 | กด Save | start_ts=2026-05-29 01:30:00, end_ts=2026-05-29 08:00:00 (ข้ามวัน — เลือกวันที่ 28 แต่ Shift-3 เริ่ม 01:30 ซึ่งเป็นช่วงหลังเที่ยงคืน ต้องบันทึกเป็นวันที่ 29) |
|
|
51
|
|
|
52
|
**หมายเหตุ:** Shift-3 start=01:30 เป็นกะดึกที่เริ่มหลังเที่ยงคืน เมื่อเลือกวันที่ 28 หมายถึงคืนวันที่ 28→29 ดังนั้น start_ts/end_ts ต้องเป็นวันที่ 29
|
|
53
|
|
|
54
|
**กรณี Shift-3 start=23:00:**
|
|
55
|
|
|
56
|
| Step | Action | Expected |
|
|
57
|
|------|--------|----------|
|
|
58
|
| 1 | เลือกวันที่ 2026-06-01, Shift ที่ start=23:00 | - |
|
|
59
|
| 2 | กด Save | start_ts=2026-06-01 23:00:00, end_ts=2026-06-02 08:00:00 (ข้ามวัน) |
|
|
60
|
|
|
61
|
---
|
|
62
|
|
|
63
|
## TC-04.1: Delete Job — ต้องลบ ms_job_plan ด้วย
|
|
64
|
|
|
65
|
| Step | Action | Expected |
|
|
66
|
|------|--------|----------|
|
|
67
|
| 1 | สร้าง Job ใหม่พร้อม Job Schedule (มี record ใน ms_job_plan) | บันทึกสำเร็จ |
|
|
68
|
| 2 | เปิดหน้า Job Setting → เลือก Job ที่สร้าง → กด Delete | - |
|
|
69
|
| 3 | Confirm ลบ | ลบ Job สำเร็จ, ข้อมูลใน ms_job_plan ที่อ้างอิง ms_job_id นั้นต้องถูกลบด้วย |
|
|
70
|
|
|
71
|
---
|
|
72
|
|
|
73
|
## TC-05: Validation — ห้าม Duplicate (วันที่ + กะ ซ้ำ)
|
|
74
|
|
|
75
|
| Step | Action | Expected |
|
|
76
|
|------|--------|----------|
|
|
77
|
| 1 | Slot 1: เลือกวันที่ 2026-06-01, Shift-1 | - |
|
|
78
|
| 2 | Slot 2: เลือกวันที่ 2026-06-01, Shift-1 (ซ้ำ) | - |
|
|
79
|
| 3 | กด Save | แสดง error/warning ว่า duplicate |
|
|
80
|
|
|
81
|
---
|
|
82
|
|
|
83
|
## TC-06: Validation — Check Overlap กับ Job อื่น
|
|
84
|
|
|
85
|
| Step | Action | Expected |
|
|
86
|
|------|--------|----------|
|
|
87
|
| 1 | มี Job A ที่ assign เครื่อง LP01, plan วันที่ 2026-06-01 Shift-1 | - |
|
|
88
|
| 2 | สร้าง Job B assign เครื่อง LP01 | - |
|
|
89
|
| 3 | เลือกวันที่ 2026-06-01, Shift-1 | แสดง popup warning overlap กับ Job A |
|
|
90
|
|
|
91
|
---
|
|
92
|
|
|
93
|
## TC-07: Edit Job เดิม (Legacy) — Match Shift ได้
|
|
94
|
|
|
95
|
**Precondition:** Job เดิมมี ms_job_plan ที่ start_ts=2026-05-20 08:00:00, ms_shift_id=NULL
|
|
96
|
|
|
97
|
| Step | Action | Expected |
|
|
98
|
|------|--------|----------|
|
|
99
|
| 1 | เปิด Edit Job เดิม | - |
|
|
100
|
| 2 | ดู Job Schedule section | แสดงเป็น DatePicker (2026-05-20) + Shift dropdown (Shift-1) เพราะ match time part 08:00:00 กับ Shift-1 ได้ |
|
|
101
|
|
|
102
|
---
|
|
103
|
|
|
104
|
## TC-08: Edit Job เดิม (Legacy) — Match Shift ไม่ได้
|
|
105
|
|
|
106
|
**Precondition:** Job เดิมมี ms_job_plan ที่ start_ts=2026-05-20 09:30:00, ms_shift_id=NULL (ไม่ตรงกับ shift ใดเลย)
|
|
107
|
|
|
108
|
| Step | Action | Expected |
|
|
109
|
|------|--------|----------|
|
|
110
|
| 1 | เปิด Edit Job เดิม | - |
|
|
111
|
| 2 | ดู Job Schedule section | แสดงเป็น RangePicker เหมือนเดิม (legacy mode) |
|
|
112
|
|
|
113
|
---
|
|
114
|
|
|
115
|
## TC-09: แก้เวลา Master Shift — Popup Confirm + Recalculate
|
|
116
|
|
|
117
|
**Precondition:** มี Job Plan อนาคต 5 รายการที่อ้างอิง Shift-1
|
|
118
|
|
|
119
|
| Step | Action | Expected |
|
|
120
|
|------|--------|----------|
|
|
121
|
| 1 | เปิดหน้า Shift Setting → Edit Shift-1 | - |
|
|
122
|
| 2 | เปลี่ยน start_ts จาก 08:00 เป็น 08:30 | - |
|
|
123
|
| 3 | กด Save | แสดง popup confirm: "การแก้ไขเวลากะจะอัปเดต Job Plan ในอนาคต 5 รายการ..." |
|
|
124
|
| 4 | กด ยืนยัน | Save shift สำเร็จ, Job Plan อนาคต 5 รายการถูก recalculate (start_ts เปลี่ยนเป็น 08:30), มี setting edit log |
|
|
125
|
| 5 | ตรวจ Job Plan อดีต | ไม่ถูกแก้ไข (เก็บเวลาเดิม) |
|
|
126
|
|
|
127
|
---
|
|
128
|
|
|
129
|
## TC-10: แก้เวลา Master Shift — กด Cancel
|
|
130
|
|
|
131
|
| Step | Action | Expected |
|
|
132
|
|------|--------|----------|
|
|
133
|
| 1 | เปิด Edit Shift-1, เปลี่ยน start_ts | - |
|
|
134
|
| 2 | กด Save → แสดง popup confirm | - |
|
|
135
|
| 3 | กด ยกเลิก | ไม่ save, shift เวลาเดิม, Job Plan ไม่เปลี่ยน |
|
|
136
|
|
|
137
|
---
|
|
138
|
|
|
139
|
## TC-11: ลบ Shift ที่มี Job Plan อ้างอิง (อนาคต)
|
|
140
|
|
|
141
|
**Precondition:** มี Job Plan อนาคตที่อ้างอิง Shift-1
|
|
142
|
|
|
143
|
| Step | Action | Expected |
|
|
144
|
|------|--------|----------|
|
|
145
|
| 1 | เปิดหน้า Shift Setting → เลือก Shift-1 → กด Delete | - |
|
|
146
|
| 2 | - | แสดง error: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ" |
|
|
147
|
|
|
148
|
---
|
|
149
|
|
|
150
|
## TC-12: ลบ Shift ที่ไม่มี Job Plan อ้างอิง
|
|
151
|
|
|
152
|
| Step | Action | Expected |
|
|
153
|
|------|--------|----------|
|
|
154
|
| 1 | เปิดหน้า Shift Setting → เลือก Shift ที่ไม่มี Job Plan อ้างอิง → กด Delete | - |
|
|
155
|
| 2 | Confirm ลบ | ลบสำเร็จ |
|
|
156
|
|
|
157
|
---
|
|
158
|
|
|
159
|
## TC-13: Import/Export CSV — Format เดิม
|
|
160
|
|
|
161
|
| Step | Action | Expected |
|
|
162
|
|------|--------|----------|
|
|
163
|
| 1 | สร้าง Job ด้วย Shift dropdown (Shift-1, วันที่ 2026-06-01) | - |
|
|
164
|
| 2 | Export CSV | Job Schedule column แสดงเป็น `2026-06-01 08:00:00_2026-06-01 16:55:00` (format เดิม) |
|
|
165
|
| 3 | Import CSV ด้วย format เดิม | Import สำเร็จ, สร้าง ms_job_plan ถูกต้อง |
|
|
166
|
|
|
167
|
---
|
|
168
|
|
|
169
|
## TC-14: Dropdown แสดงถูกต้อง
|
|
170
|
|
|
171
|
| Step | Action | Expected |
|
|
172
|
|------|--------|----------|
|
|
173
|
| 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)" |
|