Feature #27166
[OEE][Job Setting] ปรับ Job Schedule ให้เลือกจาก Shift dropdown แทน RangePicker #kiro
Start date:
05/22/2026
Due date:
05/28/2026
% Done:
0%
Estimated time:
นำ AI มาช่วย(%):
100
Description
หน้า Job Setting — ปรับ Job Schedule จากเดิมที่เลือก from-to (RangePicker) ให้เป็น dropdown เลือก Shift + วันที่แทน
ปัจจุบัน- Job Schedule เลือกเป็น RangePicker (start_ts, end_ts) เพิ่มได้หลาย slot
- เก็บใน `ms_job_plan` → `start_ts`, `end_ts` (timestamp)
- เก็บเฉพาะ `start_ts` (เวลาเริ่มกะ เช่น "08:00:00")
- ไม่มี end_ts — end time = start_ts ของกะถัดไป (กะต่อเนื่อง 24 ชม.)
- เปลี่ยนเป็น dropdown เลือก Shift + DatePicker เลือกวันที่
- ลำดับการเลือก: วันที่ → กะ
- ส่วนใหญ่ใช้ 1 slot แต่ต้องรองรับหลาย slot ด้วย
- ตัวอย่างไฟล์แนบ - UI mockup
Dropdown แสดง: `shift_name (start_ts)` เรียงตาม `seq`
- เพิ่ม field ใน `ms_job_plan`:
Field Type Description `ms_shift_id` UUID (FK → ms_shift) กะที่เลือก (nullable สำหรับ legacy) `plan_date` DATE วันที่ของ plan (nullable สำหรับ legacy)
- คำนวณ start_ts / end_ts จาก shift + date:
- `start_ts` = plan_date + shift.start_ts
- `end_ts` = plan_date + derived_end_ts (ถ้า end <= start → ข้ามวัน: plan_date+1 + derived_end_ts)
- ตัวอย่างกะข้ามวัน: Shift-3 start=23:00, derived_end=08:00
- start_ts = 2026-05-22 23:00:00
- end_ts = 2026-05-23 08:00:00
- กระทบ 2 กะ: กะที่แก้ (start เปลี่ยน) + กะก่อนหน้า (end เปลี่ยนตาม)
Flow: - User แก้เวลา shift → กด Save
- Backend ตรวจสอบว่ามี `ms_job_plan` ที่อ้างอิงกะนี้ (หรือกะก่อนหน้า) ที่ `plan_date >= วันนี้` กี่รายการ
- ถ้ามี → ส่งจำนวนกลับไป frontend แสดง popup confirm:
"การแก้ไขเวลากะจะอัปเดต Job Plan ในอนาคต X รายการ (plan_date ≥ วันนี้) Plan ที่ผ่านไปแล้วจะไม่ถูกแก้ไข ยืนยันหรือไม่?" - User กด confirm → backend save shift + recalculate job plan อนาคต + บันทึก setting edit log (record log job edit)
- User กด cancel → ไม่ save
- ห้ามลบกะที่มี `ms_job_plan` อ้างอิงอยู่ (plan_date >= วันนี้)
- แสดง error: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ"
- ห้ามเลือกวันที่ + กะ ซ้ำกัน (duplicate plan)
- ตรวจ overlap กับ job อื่นที่ assign เครื่องเดียวกัน (ใช้ logic เดิม `check-job-overlap`)
- ใช้ format เดิม (`start_ts_end_ts`) ไม่เปลี่ยน
- Backend คำนวณ start_ts/end_ts จาก shift + date → export ออกมาเป็นเวลาเหมือนเดิม
- `ms_shift_id` = NULL, `plan_date` = NULL
- ยังทำงานได้ปกติ (code ใช้ start_ts/end_ts โดยตรง)
- ไม่ต้อง migrate ย้อนหลัง
- เมื่อเปิด edit job เดิม (ms_shift_id = NULL):
พยายาม match start_ts กับ shift ที่ตรงเวลา (เทียบ time part ของ start_ts กับ ms_shift.start_ts)
- ถ้า match ได้ → แสดงเป็น DatePicker + Shift dropdown (UI ใหม่)
- ถ้า match ไม่ได้ → fallback แสดงเป็น RangePicker เหมือนเดิม (legacy mode)
สิ่งที่ต้องทำ¶
- [ ] DB: เพิ่ม field `ms_shift_id`, `plan_date` ใน `ms_job_plan` (nullable)
- [ ] Frontend: เปลี่ยน RangePicker เป็น DatePicker + Shift dropdown (Form.List รองรับหลาย slot)
- [ ] Frontend: เพิ่ม Option A (date range + shift → สร้าง plan ทุกวัน)
- [ ] Frontend: เปิด edit job เดิม → match shift + fallback RangePicker
- [ ] Backend: คำนวณ start_ts/end_ts จาก shift + date เมื่อ save
- [ ] Backend: เมื่อแก้ ms_shift.start_ts → popup confirm + recalculate ms_job_plan (เฉพาะอนาคต) + บันทึก setting edit log
- [ ] Backend: ห้ามลบ ms_shift ที่มี job plan อ้างอิง (อนาคต)
- [ ] Validation: ห้าม duplicate + check overlap (logic เดิม)
- Frontend Job: `oee-web/src/routes/JobSetting/JobSettingModal.js` (planning section)
- Backend save: `oee-api/routes/job-v1/put-plan.js`
- Shift utils: `oee-api/lib/shift-utils.js` (deriveShiftEnds, buildShiftWindows)
- Check overlap: `oee-api/routes/job-v1/check-job-overlap.js`
Files
History
Updated by Suphawan Phiwngam 12 days ago
- File job-schedule-shift-ui-mockup.html.png job-schedule-shift-ui-mockup.html.png added
- Description updated (diff)
- Priority changed from Normal to High
Updated by Supparoek Sariphan 10 days ago
- Status changed from New to In Progress
- นำ AI มาช่วย(%) changed from 0 to 100
Updated by Supparoek Sariphan 10 days ago
- Status changed from In Progress to Resolved
- Assignee changed from Supparoek Sariphan to Suphawan Phiwngam
Updated by Suphawan Phiwngam 6 days ago
- File TC-06-overlap-job-schedule.png TC-06-overlap-job-schedule.png added
- File test-case-27166.md test-case-27166.md added
- Status changed from Resolved to Feedback
- Assignee changed from Suphawan Phiwngam to Supparoek Sariphan
Feedback ทดสอบ 2026-05-28¶
TC-04 — กะข้ามวัน- Shift-3 start=01:30 เลือกวันที่ 2026-05-28
- ระบบบันทึก: 2026-05-28 01:30:00 - 2026-05-28 08:00:00 (ผิด)
- ที่ถูกต้อง: 2026-05-29 01:30:00 - 2026-05-29 08:00:00
- ลบ Job แล้ว แต่ข้อมูลใน ms_job_plan ของ job นั้นยังไม่ถูกลบตาม
- เลือกวันที่+กะซ้ำกัน กด Save ผ่าน ไม่มี error
- ระบบบันทึกลง ms_job_plan 2 records ซ้ำ
- สร้าง Job ใหม่ assign เครื่องเดียวกัน เลือกวันที่+กะที่ซ้ำกับ Job อื่น
- ไม่แสดง popup warning overlap (ดูรูปแนบ)
- แก้ start_ts ของ Shift แล้วกด Save
- ไม่แสดง popup confirm / ไม่ recalculate Job Plan อนาคต
- ไม่แสดง popup confirm เลย (ต้องแสดงก่อน save)
- มี error block แล้ว แต่ขอปรับข้อความเป็น: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ"
Updated by Suphawan Phiwngam 6 days ago
เพิ่มเติม — ปรับ Layout
- Job Schedule section: ปรับ layout ให้ปุ่ม +/- อยู่ด้านขวาในแถวเดียวกับ DatePicker + Shift dropdown (ตอนนี้ปุ่ม ⊕⊖ อยู่บรรทัดล่าง ดูไม่เป็นระเบียบ)