commit
This commit is contained in:
170
docs/sprint-6-12-employee-directory-ui-review.md
Normal file
170
docs/sprint-6-12-employee-directory-ui-review.md
Normal file
@@ -0,0 +1,170 @@
|
||||
# Sprint 6.12 Employee Directory UI Review
|
||||
|
||||
## 1. Summary
|
||||
|
||||
Employee Directory was redesigned into a dedicated HR Employee Master screen backed by `employees` as the primary source.
|
||||
|
||||
This update separates Employee Directory from user management and adds:
|
||||
|
||||
- HR-oriented page header actions
|
||||
- richer employee table with training-hour summary columns
|
||||
- search and filter controls for employee master data
|
||||
- employee create/edit flows under Employee Directory routes
|
||||
- employee-specific K/S/A target management
|
||||
- improved employee detail presentation
|
||||
|
||||
## 2. Files Changed
|
||||
|
||||
Employee Directory pages and UI:
|
||||
|
||||
- `src/app/dashboard/employee-directory/page.tsx`
|
||||
- `src/app/dashboard/employee-directory/[id]/page.tsx`
|
||||
- `src/app/dashboard/employee-directory/create/page.tsx`
|
||||
- `src/app/dashboard/employee-directory/[id]/edit/page.tsx`
|
||||
- `src/app/dashboard/employee-directory/[id]/targets/page.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-listing.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-table.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-columns.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-toolbar.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-action-menu.tsx`
|
||||
- `src/features/employee-directory/components/employee-directory-detail-page.tsx`
|
||||
- `src/features/employee-directory/components/employee-target-form.tsx`
|
||||
|
||||
Employee Directory API/data layer:
|
||||
|
||||
- `src/app/api/employee-directory/route.ts`
|
||||
- `src/app/api/employee-directory/[id]/target/route.ts`
|
||||
- `src/features/employee-directory/api/types.ts`
|
||||
- `src/features/employee-directory/api/service.ts`
|
||||
- `src/features/employee-directory/api/queries.ts`
|
||||
- `src/features/employee-directory/api/mutations.ts`
|
||||
- `src/features/employee-directory/server/employee-directory-data.ts`
|
||||
|
||||
Employee CRUD support reused by directory:
|
||||
|
||||
- `src/app/api/employees/route.ts`
|
||||
- `src/app/api/employees/[id]/route.ts`
|
||||
- `src/features/employees/server/employee-data.ts`
|
||||
- `src/features/employees/components/employee-form.tsx`
|
||||
|
||||
Shared search params:
|
||||
|
||||
- `src/lib/searchparams.ts`
|
||||
|
||||
## 3. UI Improvements
|
||||
|
||||
- Added page-level primary action: `สร้างรายชื่อพนักงาน`
|
||||
- Added page-level secondary action: `Import รายชื่อพนักงาน`
|
||||
- Reworked table columns into an HR-focused layout:
|
||||
- รหัสพนักงาน
|
||||
- ชื่อพนักงาน
|
||||
- ฝ่าย
|
||||
- ตำแหน่ง
|
||||
- grouped training-hour columns
|
||||
- action menu
|
||||
- Added responsive search + filter toolbar
|
||||
- Expanded action menu:
|
||||
- ดูข้อมูลพนักงาน
|
||||
- แก้ไขข้อมูลพนักงาน
|
||||
- กำหนดเป้าหมาย K/S/A
|
||||
- Improved detail page with:
|
||||
- employee identity summary
|
||||
- hour summary cards
|
||||
- progress bar
|
||||
- K/S/A summary cards
|
||||
- training history table
|
||||
|
||||
## 4. Data Source Validation
|
||||
|
||||
Primary source for Employee Directory list/detail:
|
||||
|
||||
- `employees`
|
||||
|
||||
Related sources:
|
||||
|
||||
- `training_records`
|
||||
- `employee_training_targets`
|
||||
- `departments`
|
||||
- `positions`
|
||||
- `organizations`
|
||||
|
||||
Validation notes:
|
||||
|
||||
- list data does not depend on `users`
|
||||
- employees without login accounts are still returned
|
||||
- detail data resolves directly from employee master records
|
||||
|
||||
## 5. Training Hour Calculation
|
||||
|
||||
Training-hour summary is calculated from:
|
||||
|
||||
- `training_records.employee_id`
|
||||
|
||||
Current logic:
|
||||
|
||||
- Approved Hours:
|
||||
- `approval_status = approved`
|
||||
- uses `approved_hours`, fallback to submitted hours when applicable
|
||||
- Pending Hours:
|
||||
- `approval_status in (pending, needs_revision)`
|
||||
- Rejected Hours:
|
||||
- `approval_status = rejected`
|
||||
- Total Hours:
|
||||
- approved + pending + rejected
|
||||
|
||||
Employee target screen writes to:
|
||||
|
||||
- `employee_training_targets.employee_id`
|
||||
|
||||
## 6. Responsive Changes
|
||||
|
||||
- page header actions stack vertically on mobile and align horizontally on larger screens
|
||||
- toolbar wraps cleanly on tablet
|
||||
- table stays inside a horizontal scroll container
|
||||
- detail page cards stack on smaller viewports
|
||||
- edit/target actions on detail page wrap instead of overflowing
|
||||
|
||||
## 7. Permission Rules
|
||||
|
||||
Allowed:
|
||||
|
||||
- HRD/Admin can view employee directory
|
||||
- HRD/Admin can create employee records
|
||||
- HRD/Admin can edit employee records
|
||||
- HRD/Admin can manage employee K/S/A targets
|
||||
|
||||
Blocked:
|
||||
|
||||
- Employee role cannot access Employee Directory by page guard
|
||||
|
||||
## 8. Manual Test Checklist
|
||||
|
||||
- [ ] Employee Directory reads from `employees`
|
||||
- [ ] Employees without user account are displayed
|
||||
- [ ] Search works by employee code, name, email, department, and position
|
||||
- [ ] Company / department / position / status filters work
|
||||
- [ ] `สร้างรายชื่อพนักงาน` opens the create page
|
||||
- [ ] `Import รายชื่อพนักงาน` opens the import page
|
||||
- [ ] Training hour calculation uses `training_records.employee_id`
|
||||
- [ ] Employee detail page loads correctly
|
||||
- [ ] Edit employee flow saves successfully
|
||||
- [ ] K/S/A target page saves successfully
|
||||
- [ ] Mobile/tablet layout does not overflow
|
||||
|
||||
## 9. Known Limitations
|
||||
|
||||
- Employee Directory filters currently use employee master text fields and related department/position names; there is no separate companies table yet.
|
||||
- The K/S/A target editor is implemented as a dedicated page route, not an inline modal.
|
||||
- Existing legacy compatibility paths in auth/training ownership were intentionally left in place from Sprint 6.12 migration work.
|
||||
|
||||
## Validation
|
||||
|
||||
TypeScript verification completed:
|
||||
|
||||
```bash
|
||||
npx tsc --noEmit
|
||||
```
|
||||
|
||||
## Migration Commands
|
||||
|
||||
No new database migration is required for this UI enhancement.
|
||||
Reference in New Issue
Block a user