Admin Management

Manage departments, crews, shifts, and candidates from a single workspace.

@foreach (['departments' => 'Departments', 'crews' => 'Crews', 'shifts' => 'Shifts', 'candidates' => 'Candidates', 'users' => 'Users', 'products' => 'Products'] as $tab => $label) {{ $label }} @endforeach
@if ($activeTab === 'departments') @if (auth()->user()->hasAnyRole(['super_admin', 'admin']))
{{ $departmentForm['id'] ? 'Update Department' : (auth()->user()->hasRole('super_admin') ? 'Create Department' : 'Save Department') }}
@endif
@foreach ($departments as $department) @endforeach
Name Location Evaluation Credits Status Action
{{ $department->name }} {{ $department->city ?? 'N/A' }}, {{ $department->state ?? '--' }} {{ $department->available_evaluation_credits }} available {{ $department->is_active ? 'Active' : 'Inactive' }} @if (auth()->user()->hasAnyRole(['super_admin', 'admin']))
@if (auth()->user()->hasRole('super_admin') || auth()->user()->department_id === $department->id) Edit @endif @if (auth()->user()->hasRole('super_admin')) Archive @endif
@endif
@if (auth()->user()->hasRole('super_admin'))

Add evaluation credits directly to a department without a purchase. Every grant is recorded below.

@error('evaluationCreditGrantForm.department_id')

{{ $message }}

@enderror
Add Credits
@if ($recentCreditAdjustments->isNotEmpty())
@foreach ($recentCreditAdjustments as $adjustment) @endforeach
Date Department Added Balance After Granted By Reason
{{ $adjustment->created_at->format('M d, Y h:i A') }} {{ $adjustment->department?->name ?? 'Archived department' }} +{{ $adjustment->quantity }} {{ $adjustment->balance_after }} {{ $adjustment->adjustedBy?->name ?? 'Former user' }} {{ $adjustment->reason ?: '—' }}
@endif
@endif @endif @if ($activeTab === 'crews')
{{ $crewForm['id'] ? 'Update Crew' : 'Create Crew' }}
@foreach ($crews as $crew) @endforeach
DepartmentCrewCodeStatusAction
{{ $crew->department?->name ?? 'N/A' }} {{ $crew->name }} {{ $crew->code ?? '—' }} {{ $crew->is_active ? 'Active' : 'Inactive' }}
EditArchive
@endif @if ($activeTab === 'shifts')
{{ $shiftForm['id'] ? 'Update Shift' : 'Create Shift' }}
@foreach ($shifts as $shift) @endforeach
DepartmentShiftHoursStatusAction
{{ $shift->department?->name ?? 'N/A' }} {{ $shift->name }} {{ $shift->start_time ?: '--:--' }} - {{ $shift->end_time ?: '--:--' }} {{ $shift->is_active ? 'Active' : 'Inactive' }}
EditArchive
@endif @if ($activeTab === 'candidates')
{{ $candidateForm['id'] ? 'Update Candidate' : 'Create Candidate' }}
@foreach ($candidates as $candidate) @endforeach
NameDepartmentCrew / ShiftEmailStatusAction
{{ $candidate->full_name }} {{ $candidate->department?->name ?? 'N/A' }} {{ $candidate->crew?->name ?? '—' }} / {{ $candidate->shift?->name ?? '—' }} {{ $candidate->email ?? '—' }} {{ $candidate->is_active ? 'Active' : 'Inactive' }}
EditArchive
@endif @if ($activeTab === 'users')

Create and manage login users for Admin, Proctor, and Candidate roles. New users receive a password setup/reset link by email.

@error('userForm.role')

{{ $message }}

@enderror
@if ($userForm['role'] === 'proctor')
@foreach ($departments as $department) @endforeach

Select one or more departments. Proctors will choose their active department after login.

@error('userForm.department_ids')

{{ $message }}

@enderror @error('userForm.department_ids.*')

{{ $message }}

@enderror
@else
@error('userForm.department_id')

{{ $message }}

@enderror
@endif @if ($userForm['role'] === 'candidate')
@error('userForm.candidate_id')

{{ $message }}

@enderror
@endif @if ($userForm['role'] === 'candidate')
@error('userForm.crew_id')

{{ $message }}

@enderror
@error('userForm.shift_id')

{{ $message }}

@enderror
@endif
@error('userForm.is_active')

{{ $message }}

@enderror
{{ $userForm['id'] ? 'Update User' : 'Create User' }}
@foreach ($users as $managedUser) @endforeach
Name Email Role Departments Certification Linked Candidate Status Action
{{ $managedUser->name }} {{ $managedUser->email }} {{ ucwords(str_replace('_', ' ', $managedUser->role->value)) }} @if ($managedUser->role->value === 'proctor') {{ $managedUser->assignedDepartments->pluck('name')->join(', ') ?: ($managedUser->department?->name ?? 'N/A') }} @else {{ $managedUser->department?->name ?? 'N/A' }} @endif @if ($managedUser->role->value === 'proctor') @if ($managedUser->isCertifiedProctor()) Certified @if ($managedUser->proctorCertificationDepartment)

{{ $managedUser->proctorCertificationDepartment->name }}

@endif @else Not Certified @endif @else — @endif
{{ $managedUser->candidateProfile?->full_name ?? '—' }} {{ $managedUser->is_active ? 'Active' : 'Inactive' }}
Edit {{ $managedUser->is_active ? 'Deactivate' : 'Activate' }} @if ($managedUser->role->value === 'proctor') @if ($managedUser->isCertifiedProctor()) Revoke Certification @else Certify @endif @endif Send Reset Link
@endif @if ($activeTab === 'products')

Manage the department-purchase products used for evaluation credits and proctor certification credits. Stripe product and price records are created automatically when you save.

@error('productForm.product_type')

{{ $message }}

@enderror
@error('productForm.description')

{{ $message }}

@enderror
{{ $productForm['id'] ? 'Update Product' : 'Create Product' }}
@foreach ($products as $product) @endforeach
Name Type Credits Price Checkout Status Action
{{ $product->name }} {{ $product->product_type->label() }} {{ $product->credit_quantity }} {{ $product->formattedPrice() }} {{ $product->stripe_price_id ? 'Ready' : 'Pending sync' }} {{ $product->is_active ? 'Active' : 'Inactive' }}
Edit {{ $product->is_active ? 'Deactivate' : 'Activate' }}
@endif