5.3 KiB
5.3 KiB
Worker Team Assignment - Complete ✅
Overview
Added team assignment functionality to workers, allowing each worker to be assigned to a specific team.
Database Changes
Schema Updates
Worker Model:
- Added
teamIdfield (optional String) - Added
teamrelation to Team model - Workers can now be assigned to a team
Team Model:
- Added
workersrelation (one-to-many) - Teams can now have multiple workers
Migration
npx prisma db push
- Schema successfully updated
- New fields added to database
- Existing workers have
teamIdas null (no team)
UI Changes
1. Workers List Page ✅
New Column Added:
- "Team" column shows worker's assigned team
- Displays team name as colored badge (blue)
- Shows "No team" in italics if worker has no team
- Includes team data in query with
include: { team: true }
Table Structure:
Emp No | Name | Email | Job Position | Team | Status | Actions
2. Create Worker Form ✅
New Field Added:
- "Team" dropdown selector
- Shows all available teams
- Optional field (can select "No Team")
- Loads teams from API on page load
Form Fields:
- Employee Number *
- First Name *
- Surname *
- Phone
- Job Position *
- Team (NEW)
- Status *
3. Edit Worker Form ✅
New Field Added:
- "Team" dropdown selector
- Shows current team selection
- Can change team or remove team assignment
- Loads teams from API on page load
- Preserves existing team selection
Features:
- Displays current team if assigned
- Allows changing to different team
- Allows removing team (select "No Team")
- Updates worker's team assignment
API Integration
Existing Endpoints Used
GET /api/teams- Fetch all teams for dropdownPOST /api/admin/workers- Create worker with teamPUT /api/admin/workers/[id]- Update worker with teamGET /api/admin/workers/[id]- Get worker with team
Data Flow
Create Worker:
{
empNo: "EMP001",
firstName: "John",
surname: "Doe",
email: "john@example.com",
phone: "555-0100",
jobPosition: "Blow Moulder Level 1",
teamId: "team-id-here", // or "" for no team
status: "active"
}
Worker Response:
{
id: "worker-id",
empNo: "EMP001",
firstName: "John",
surname: "Doe",
teamId: "team-id",
team: {
id: "team-id",
name: "Red Team"
},
// ... other fields
}
Features
Team Assignment
- ✅ Workers can be assigned to a team
- ✅ Workers can have no team (optional)
- ✅ Workers can be reassigned to different teams
- ✅ Team assignment can be removed
Visual Indicators
- ✅ Team badge in workers list (blue)
- ✅ "No team" indicator for unassigned workers
- ✅ Dropdown shows all available teams
- ✅ Clear visual distinction
Data Integrity
- ✅ Optional relationship (workers can exist without team)
- ✅ Foreign key constraint (teamId references Team.id)
- ✅ Cascade behavior handled by Prisma
- ✅ Existing workers not affected (null teamId)
Use Cases
Organizing Workers
- Group workers by their primary team
- Track team composition
- Manage team assignments
- View team members
Shift Planning
- See which workers belong to which team
- Assign shifts based on team membership
- Balance workload across teams
- Track team availability
Reporting
- Generate team-based reports
- Analyze team performance
- Track team metrics
- Monitor team assignments
Files Modified
Database
- ✅
prisma/schema.prisma- Added
teamIdandteamto Worker model - Added
workersto Team model
- Added
Pages
-
✅
app/admin/workers/page.tsx- Added Team column to table
- Included team data in query
- Display team badge or "No team"
-
✅
app/admin/workers/create/page.tsx- Added team dropdown field
- Fetch teams on load
- Include teamId in form data
-
✅
app/admin/workers/[id]/page.tsx- Added team dropdown field
- Fetch teams on load
- Load current team selection
- Include teamId in update
Testing Checklist
Create Worker
- Create worker with team selected
- Create worker with no team
- Verify team appears in workers list
- Verify "No team" shows for unassigned
Edit Worker
- Edit worker and change team
- Edit worker and remove team
- Edit worker and add team
- Verify changes persist
Workers List
- Team column displays correctly
- Team badges show proper colors
- "No team" shows for unassigned
- All workers display properly
Data Integrity
- Existing workers still work (null teamId)
- Team deletion doesn't break workers
- Team changes reflect immediately
- No orphaned references
Future Enhancements
Possible Additions
- Filter workers by team
- Bulk team assignment
- Team capacity limits
- Team member count in teams list
- Team-based worker statistics
- Team assignment history
- Automatic team assignment rules
- Team balance recommendations
Summary
✅ Database schema updated with team relationship ✅ Workers list shows team column ✅ Create form includes team selector ✅ Edit form includes team selector ✅ Team assignment is optional ✅ Visual indicators for team status
Workers can now be organized by teams, making it easier to manage team composition and plan shifts!