Project

General

Profile

Feature #27166

[OEE][Job Setting] ปรับ Job Schedule ให้เลือกจาก Shift dropdown แทน RangePicker #kiro

Added by Suphawan Phiwngam 12 days ago. Updated 6 days ago.

Status:
Feedback
Priority:
High
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)
ข้อมูล ms_shift
  • เก็บเฉพาะ `start_ts` (เวลาเริ่มกะ เช่น "08:00:00")
  • ไม่มี end_ts — end time = start_ts ของกะถัดไป (กะต่อเนื่อง 24 ชม.)
ต้องการ
  • เปลี่ยนเป็น dropdown เลือก Shift + DatePicker เลือกวันที่
  • ลำดับการเลือก: วันที่ → กะ
  • ส่วนใหญ่ใช้ 1 slot แต่ต้องรองรับหลาย slot ด้วย
UI Design
  • ตัวอย่างไฟล์แนบ - 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
เมื่อ Master Shift แก้เวลา (start_ts)
  • กระทบ 2 กะ: กะที่แก้ (start เปลี่ยน) + กะก่อนหน้า (end เปลี่ยนตาม)
    Flow:
    1. User แก้เวลา shift → กด Save
    2. Backend ตรวจสอบว่ามี `ms_job_plan` ที่อ้างอิงกะนี้ (หรือกะก่อนหน้า) ที่ `plan_date >= วันนี้` กี่รายการ
    3. ถ้ามี → ส่งจำนวนกลับไป frontend แสดง popup confirm:
      "การแก้ไขเวลากะจะอัปเดต Job Plan ในอนาคต X รายการ (plan_date ≥ วันนี้) Plan ที่ผ่านไปแล้วจะไม่ถูกแก้ไข ยืนยันหรือไม่?"
    4. User กด confirm → backend save shift + recalculate job plan อนาคต + บันทึก setting edit log (record log job edit)
    5. User กด cancel → ไม่ save
กรณีลบกะที่มี job อ้างอิง
  • ห้ามลบกะที่มี `ms_job_plan` อ้างอิงอยู่ (plan_date >= วันนี้)
  • แสดง error: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ"
Validation
  • ห้ามเลือกวันที่ + กะ ซ้ำกัน (duplicate plan)
  • ตรวจ overlap กับ job อื่นที่ assign เครื่องเดียวกัน (ใช้ logic เดิม `check-job-overlap`)
Import/Export CSV
  • ใช้ format เดิม (`start_ts_end_ts`) ไม่เปลี่ยน
  • Backend คำนวณ start_ts/end_ts จาก shift + date → export ออกมาเป็นเวลาเหมือนเดิม
Migration: Job Plan เดิม
  • `ms_shift_id` = NULL, `plan_date` = NULL
  • ยังทำงานได้ปกติ (code ใช้ start_ts/end_ts โดยตรง)
  • ไม่ต้อง migrate ย้อนหลัง
แสดง Job เดิมเมื่อเปิด Edit
  • เมื่อเปิด 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

job-schedule-shift-ui-mockup.html (9.38 KB) job-schedule-shift-ui-mockup.html UI Mockup: Job Schedule - Shift Dropdown Suphawan Phiwngam, 05/22/2026 06:27 PM
job-schedule-shift-ui-mockup.html.png (167 KB) job-schedule-shift-ui-mockup.html.png shift-ui-mockup Suphawan Phiwngam, 05/22/2026 06:34 PM
TC-06-overlap-job-schedule.png (49.5 KB) TC-06-overlap-job-schedule.png TC-06 Job Schedule ซ้ำกันบนเครื่องเดียวกัน (highlight สีเหลือง) Suphawan Phiwngam, 05/28/2026 09:14 PM
test-case-27166.md (8.54 KB) test-case-27166.md Test Case #27166 Job Schedule Shift Dropdown Suphawan Phiwngam, 05/28/2026 09:23 PM

History

#1

Updated by Suphawan Phiwngam 12 days ago

#2

Updated by Supparoek Sariphan 10 days ago

  • Status changed from New to In Progress
  • นำ AI มาช่วย(%) changed from 0 to 100
#3

Updated by Supparoek Sariphan 10 days ago

  • Status changed from In Progress to Resolved
  • Assignee changed from Supparoek Sariphan to Suphawan Phiwngam
#4

Updated by Suphawan Phiwngam 6 days ago

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
TC-04.1 — Delete Job ไม่ลบ ms_job_plan
  • ลบ Job แล้ว แต่ข้อมูลใน ms_job_plan ของ job นั้นยังไม่ถูกลบตาม
TC-05 — Duplicate validation
  • เลือกวันที่+กะซ้ำกัน กด Save ผ่าน ไม่มี error
  • ระบบบันทึกลง ms_job_plan 2 records ซ้ำ
TC-06 — Overlap validation
  • สร้าง Job ใหม่ assign เครื่องเดียวกัน เลือกวันที่+กะที่ซ้ำกับ Job อื่น
  • ไม่แสดง popup warning overlap (ดูรูปแนบ)
TC-09 — แก้เวลา Master Shift
  • แก้ start_ts ของ Shift แล้วกด Save
  • ไม่แสดง popup confirm / ไม่ recalculate Job Plan อนาคต
TC-10 — Popup confirm แก้ Shift
  • ไม่แสดง popup confirm เลย (ต้องแสดงก่อน save)
TC-11 — ลบ Shift ที่มี Job Plan อ้างอิง
  • มี error block แล้ว แต่ขอปรับข้อความเป็น: "ไม่สามารถลบกะนี้ได้ มี Job Plan อ้างอิงอยู่ X รายการ"
#5

Updated by Suphawan Phiwngam 6 days ago

เพิ่มเติม — ปรับ Layout
  • Job Schedule section: ปรับ layout ให้ปุ่ม +/- อยู่ด้านขวาในแถวเดียวกับ DatePicker + Shift dropdown (ตอนนี้ปุ่ม ⊕⊖ อยู่บรรทัดล่าง ดูไม่เป็นระเบียบ)

Also available in: Atom PDF