4.0 KiB
You are a Senior Full Stack Engineer.
Project: Training Management System (TMS)
Current task: Update Employee Training Record form course selection.
Requirement: Change the course name field from plain text input to a searchable course combobox that supports both HRD Course Master and custom course name.
Important constraints:
- Do NOT change folder structure.
- Do NOT migrate ORM unless absolutely necessary.
- Reuse existing Course Master.
- Reuse existing Training Records module.
- Keep Thai UI.
- Keep responsive/mobile behavior.
- Minimal-impact changes only.
Behavior:
- Course selection field
Replace current plain text input:
- courseName
With searchable combobox:
- Select from Course Master
- Search course by course name or course code
- Show active courses only
- Display course label as: courseCode - courseName
Example: IT001 - Cyber Security Awareness
- Custom course option
Add option:
- อื่น ๆ / กรอกชื่อหลักสูตรเอง
When selected:
- courseId = null
- Show text input: ชื่อหลักสูตรอื่น ๆ
- This input is required
- When selecting Course Master
When employee selects a master course:
- courseId = selected course id
- courseName = selected course name
- Optional auto-fill:
- provider from course organizer/provider
- submittedHours from standardHours/defaultHours if available
Employee can still edit:
- training date
- training type
- submitted hours
- provider
- remark
- certificate
- Validation
Rules:
- If courseId is selected:
- courseName should come from selected course
- If custom course is selected:
- custom courseName is required
- courseName cannot be empty
- submittedHours must be greater than 0
- certificate is still required if current rule requires it
Thai validation messages:
- กรุณาเลือกหลักสูตร หรือกรอกชื่อหลักสูตร
- กรุณากรอกชื่อหลักสูตร
- กรุณาระบุจำนวนชั่วโมงอบรม
- Database behavior
Training record should save:
- courseId when selected from master
- courseName always
- courseId = null for custom course
Do not remove existing courseName field.
- API / data fetching
Add or reuse course list API/query:
- GET active courses
- Support search keyword
- Return:
- id
- courseCode
- name
- category
- standardHours
- organizer
- certificateRequired
- UI
Use existing shadcn/ui components if available:
- Command
- Popover
- Button
- Input
- Select
Combobox UX:
- Placeholder: เลือกหรือค้นหาหลักสูตร
- Empty state: ไม่พบหลักสูตร
- Custom option: อื่น ๆ / กรอกชื่อหลักสูตรเอง
- Mobile friendly
- Files likely involved:
- src/features/training-records/components/training-record-form.tsx
- src/features/training-records/schemas/training-record.ts
- src/features/training-records/api/types.ts
- src/features/training-records/server/training-record-data.ts
- src/features/courses/server/course-data.ts
- src/app/api/courses/route.ts
- Output Review File
Create: docs/management-change-course-selection-review.md
Include:
- Summary
- Files Changed
- UI Changes
- Course Selection Behavior
- Custom Course Behavior
- Validation Rules
- Database Behavior
- Manual Test Checklist
- Known Limitations
Manual Test Checklist:
- Employee can search course from Course Master.
- Employee can select course from Course Master.
- Selected course fills course name.
- Selected course fills provider if available.
- Selected course fills default hours if available.
- Employee can choose custom course.
- Custom course name is required.
- Saving master course stores courseId.
- Saving custom course stores courseId as null.
- HRD review still displays course name correctly.
- Duplicate warning still works.
- Mobile layout works.
Return:
- Complete code changes with file paths.
- Content of docs/management-change-course-selection-review.md.