muller-reporting-sys/TEAM_MANAGER_VALIDATION.md
2025-11-12 22:21:35 +03:00

193 lines
5.1 KiB
Markdown

# 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!