diff --git a/app/Http/Controllers/Admin/EntryController.php b/app/Http/Controllers/Admin/EntryController.php index ba2a3af..529788c 100644 --- a/app/Http/Controllers/Admin/EntryController.php +++ b/app/Http/Controllers/Admin/EntryController.php @@ -6,6 +6,7 @@ use App\Http\Controllers\Controller; use App\Models\Audition; use App\Models\Entry; use App\Models\School; +use App\Models\Seat; use App\Models\Student; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; @@ -138,4 +139,18 @@ class EntryController extends Controller return redirect('/admin/entries'); } + + public function destroy(Request $request, Entry $entry) + { + if (! Auth::user()->is_admin) { + abort(403); + } + if (Seat::where('entry_id', $entry->id)->exists()) { + return redirect()->route('admin.entries.index')->with('error', 'Cannot delete an entry that is seated'); + } + + $entry->delete(); + + return redirect()->route('admin.entries.index')->with('success', 'Entry Deleted'); + } } diff --git a/app/Models/Entry.php b/app/Models/Entry.php index db37e65..680a4f4 100644 --- a/app/Models/Entry.php +++ b/app/Models/Entry.php @@ -6,6 +6,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasMany; +use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOneThrough; class Entry extends Model @@ -94,4 +95,9 @@ class Entry extends Model return $this->attributes['score_sheets_count']; } + + public function seat(): HasOne + { + return $this->hasOne(Seat::class); + } } diff --git a/app/Models/ScoreSheet.php b/app/Models/ScoreSheet.php index 5f36770..cf93064 100644 --- a/app/Models/ScoreSheet.php +++ b/app/Models/ScoreSheet.php @@ -2,7 +2,6 @@ namespace App\Models; -use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Relations\HasOneThrough; @@ -12,7 +11,7 @@ class ScoreSheet extends Model protected $fillable = [ 'user_id', 'entry_id', - 'subscores' + 'subscores', ]; protected $casts = ['subscores' => 'json']; @@ -44,11 +43,11 @@ class ScoreSheet extends Model return $this->subscores[$id]['score'] ?? false; } - public function isValid() { + public function isValid() + { // TODO move to either TabulationService or a specific service for scoreValidation - $judges = $this->audition->judges(); + $judges = $this->audition->judges; + return $judges->contains('id', $this->judge->id); } - - } diff --git a/resources/views/admin/entries/edit.blade.php b/resources/views/admin/entries/edit.blade.php index 62592f1..225b26a 100644 --- a/resources/views/admin/entries/edit.blade.php +++ b/resources/views/admin/entries/edit.blade.php @@ -1,28 +1,50 @@ +@php use App\Models\Seat; @endphp - Edit Entry #{{ $entry->id }} + + Edit Entry #{{ $entry->id }} + + + @if(! Seat::where('entry_id', $entry->id)->exists()) +
+ @csrf + @method('DELETE') + + + @else + Seated: {{ $entry->seat->ensemble->name }} #{{ $entry->seat->seat }} + @endif +
+ +
+ @if(! Seat::where('entry_id', $entry->id)->exists()) + + Student + @php($student = $students->find($entry->student_id)) - - Student - @foreach ($students as $student) + + + @else +

{{ $entry->student->full_name() }} - {{ $entry->student->school->name }}

+ @endif - - - @endforeach - -
- Audition - @foreach ($auditions as $audition) - - - @endforeach - + @if(! Seat::where('entry_id', $entry->id)->exists()) + + Audition + @foreach ($auditions as $audition) + @continue($entry->student->grade < $audition->minimum_grade || $entry->student->grade > $audition->maximum_grade) + + @endforeach + + @else +

{{ $entry->audition->name }}

+ @endif @if(auditionSetting('advanceTo'))
@@ -38,7 +60,6 @@ @else @endif -{{-- TODO need to be able to delete an entry--}} Edit Entry @@ -46,31 +67,31 @@ + Scores - @foreach($scores as $score) - @php($score->isValid()) - -
{{ $score->judge->full_name() }}
- @foreach($score->subscores as $subscore) -{{-- TODO make this look better--}} -
-

{{$subscore['subscore_name']}}

-

{{$subscore['score'] }}

-
- @endforeach - @if(! $score->isValid()) -
- @csrf - @method('DELETE') - INVALID SCORE - DELETE - @endif - -{{-- // TODO make the invalid prettier--}} - @endforeach +
+ @foreach($scores as $score) + @php($score->isValid()) +
+

{{ $score->judge->full_name() }}

+ @foreach($score->subscores as $subscore) +

+ {{$subscore['subscore_name'] }} + {{$subscore['score']}} +

+ @endforeach + @if(! $score->isValid()) + + @csrf + @method('DELETE') + + @endif +
+ @endforeach +
+ - -{{--TODO apply javascript to only show appropriate auditions for the students grade--}} diff --git a/routes/admin.php b/routes/admin.php index 6b58ed4..c391001 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -74,11 +74,12 @@ Route::middleware(['auth', 'verified', CheckIfAdmin::class])->prefix('admin/')-> // Admin Entries Routes Route::prefix('entries')->controller(\App\Http\Controllers\Admin\EntryController::class)->group(function () { - Route::get('/', 'index'); + Route::get('/', 'index')->name('admin.entries.index'); Route::get('/create', 'create'); Route::post('/', 'store'); Route::get('/{entry}/edit', 'edit')->name('admin.entries.edit'); Route::patch('/{entry}', 'update'); + Route::delete('/{entry}', 'destroy')->name('admin.entries.destroy'); });