# Team Manager Validation - Complete ✅ ## Overview Added validation to ensure each shift manager can only be assigned to one team at a time. --- ## Features Implemented ### 1. Manager Availability Check ✅ **Create Team Page:** - Validates that selected manager doesn't already have a team - Shows error message if manager is already assigned - Displays team assignments in dropdown options - Prevents form submission if validation fails **Edit Team Page:** - Validates only if manager is being changed - Allows keeping the same manager (no validation needed) - Shows error message if new manager is already assigned - Displays team assignments in dropdown options --- ## Implementation Details ### New API Endpoint **`GET /api/admin/managers-with-teams`** - Returns all active managers with their team assignments - Includes team data for validation - Used by both create and edit forms ### Validation Logic **Create Team:** ```typescript // Check if selected manager already has a team const selectedManager = managers.find(m => m.id === formData.shiftManagerId) if (selectedManager && selectedManager.teams && selectedManager.teams.length > 0) { setError(`This manager is already assigned to: ${selectedManager.teams.map(t => t.name).join(", ")}`) return } ``` **Edit Team:** ```typescript // Only check if manager changed if (formData.shiftManagerId !== originalManagerId) { const selectedManager = managers.find(m => m.id === formData.shiftManagerId) if (selectedManager && selectedManager.teams && selectedManager.teams.length > 0) { setError(`This manager is already assigned to: ${selectedManager.teams.map(t => t.name).join(", ")}`) return } } ``` --- ## User Experience ### Visual Indicators **Dropdown Options:** - Shows manager name and employee number - Displays existing team assignments inline - Example: "John Smith (SM001) - Already assigned to: Red Team" **Error Messages:** - Red alert box appears when validation fails - Clear message indicating which team(s) the manager is assigned to - Error clears when user changes selection **Form Behavior:** - Submit button disabled during loading - Error prevents form submission - User must select a different manager to proceed --- ## Files Modified ### Pages 1. ✅ `app/admin/teams/create/page.tsx` - Added manager validation - Added error state - Enhanced dropdown with team info 2. ✅ `app/admin/teams/[id]/page.tsx` - Added manager validation (only on change) - Added error state - Enhanced dropdown with team info - Tracks original manager ID ### API Routes 1. ✅ `app/api/admin/managers-with-teams/route.ts` (NEW) - Returns managers with team relationships - Filters active managers only - Ordered by employee number --- ## Validation Rules ### One Manager Per Team - ✅ Each team must have exactly one shift manager - ✅ Each shift manager can only manage one team - ✅ Validation happens before form submission - ✅ Clear error messages guide the user ### Edit Behavior - ✅ Can keep the same manager (no validation) - ✅ Can change to unassigned manager (allowed) - ✅ Cannot change to manager with existing team (blocked) --- ## Testing Scenarios ### Create Team 1. ✅ Select manager without team → Success 2. ✅ Select manager with team → Error shown 3. ✅ Change selection after error → Error clears 4. ✅ Submit with valid manager → Team created ### Edit Team 1. ✅ Keep same manager → Success (no validation) 2. ✅ Change to unassigned manager → Success 3. ✅ Change to manager with team → Error shown 4. ✅ Change back to original → Success ### Dropdown Display 1. ✅ Managers without teams show normally 2. ✅ Managers with teams show assignment info 3. ✅ Current team's manager doesn't show warning (edit only) --- ## Error Messages ### Format ``` This manager is already assigned to: [Team Name(s)] ``` ### Examples - "This manager is already assigned to: Red Team" - "This manager is already assigned to: Blue Team, Green Team" --- ## Benefits ### Data Integrity - Prevents duplicate team assignments - Ensures one-to-one manager-team relationship - Validates before database operation ### User Experience - Clear visual feedback - Helpful error messages - Prevents invalid submissions - Shows team assignments in dropdown ### System Reliability - Client-side validation (fast feedback) - Can add server-side validation for extra safety - Consistent validation logic --- ## Future Enhancements ### Possible Additions - [ ] Server-side validation in API route - [ ] Show available managers count - [ ] Filter dropdown to show only available managers - [ ] Bulk team assignment interface - [ ] Manager reassignment workflow - [ ] Team history tracking --- ## Summary ✅ **Validation implemented for team manager assignments** ✅ **One manager per team rule enforced** ✅ **Clear error messages and visual feedback** ✅ **Works in both create and edit forms** ✅ **New API endpoint for manager data with teams** The system now ensures that each shift manager can only be assigned to one team at a time, preventing conflicts and maintaining data integrity!