178 lines
4.0 KiB
Markdown
178 lines
4.0 KiB
Markdown
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:
|
|
|
|
1. 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
|
|
|
|
2. Custom course option
|
|
|
|
Add option:
|
|
|
|
- อื่น ๆ / กรอกชื่อหลักสูตรเอง
|
|
|
|
When selected:
|
|
|
|
- courseId = null
|
|
- Show text input:
|
|
ชื่อหลักสูตรอื่น ๆ
|
|
- This input is required
|
|
|
|
3. 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
|
|
|
|
4. 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:
|
|
|
|
- กรุณาเลือกหลักสูตร หรือกรอกชื่อหลักสูตร
|
|
- กรุณากรอกชื่อหลักสูตร
|
|
- กรุณาระบุจำนวนชั่วโมงอบรม
|
|
|
|
5. Database behavior
|
|
|
|
Training record should save:
|
|
|
|
- courseId when selected from master
|
|
- courseName always
|
|
- courseId = null for custom course
|
|
|
|
Do not remove existing courseName field.
|
|
|
|
6. API / data fetching
|
|
|
|
Add or reuse course list API/query:
|
|
|
|
- GET active courses
|
|
- Support search keyword
|
|
- Return:
|
|
- id
|
|
- courseCode
|
|
- name
|
|
- category
|
|
- standardHours
|
|
- organizer
|
|
- certificateRequired
|
|
|
|
7. UI
|
|
|
|
Use existing shadcn/ui components if available:
|
|
|
|
- Command
|
|
- Popover
|
|
- Button
|
|
- Input
|
|
- Select
|
|
|
|
Combobox UX:
|
|
|
|
- Placeholder: เลือกหรือค้นหาหลักสูตร
|
|
- Empty state: ไม่พบหลักสูตร
|
|
- Custom option: อื่น ๆ / กรอกชื่อหลักสูตรเอง
|
|
- Mobile friendly
|
|
|
|
8. 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
|
|
|
|
9. Output Review File
|
|
|
|
Create:
|
|
docs/management-change-course-selection-review.md
|
|
|
|
Include:
|
|
|
|
1. Summary
|
|
2. Files Changed
|
|
3. UI Changes
|
|
4. Course Selection Behavior
|
|
5. Custom Course Behavior
|
|
6. Validation Rules
|
|
7. Database Behavior
|
|
8. Manual Test Checklist
|
|
9. 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.
|