Auditionadmin 68 #85

Merged
okorpheus merged 11 commits from auditionadmin-68 into master 2024-10-31 17:22:49 +00:00
6 changed files with 110 additions and 5 deletions
Showing only changes of commit dc6fec399c - Show all commits

View File

@ -0,0 +1,40 @@
<?php
namespace App\Actions\Entries;
use App\Models\Entry;
use App\Models\Seat;
class GetEntrySeatingResult
{
public function __construct()
{
}
public function __invoke(Entry $entry): string
{
return $this->getResult($entry);
}
public function getResult(Entry $entry): string
{
if ($entry->hasFlag('no_show')) {
return 'No Show';
}
if ($entry->hasFlag('declined')) {
return 'Declined';
}
if ($entry->hasFlag('failed_prelim')) {
return 'Did not pass prelim';
}
$seat = Seat::where('entry_id', $entry->id)->first();
if ($seat) {
return $seat->ensemble->name.' '.$seat->seat;
}
return 'Entry not seated';
}
}

View File

@ -66,8 +66,10 @@ class RankAuditionEntries
return 0; return 0;
}); });
$rank = 1; $rank = 1;
$rawRank = 1;
foreach ($entries as $entry) { foreach ($entries as $entry) {
$entry->rank = $rank; $entry->rank = $rank;
$entry->raw_rank = $rawRank;
// We don't really get a rank for seating if we have certain flags // We don't really get a rank for seating if we have certain flags
if ($mode === 'seating') { if ($mode === 'seating') {
if ($entry->hasFlag('declined')) { if ($entry->hasFlag('declined')) {
@ -82,6 +84,7 @@ class RankAuditionEntries
if (is_numeric($entry->rank)) { if (is_numeric($entry->rank)) {
$rank++; $rank++;
} }
$rawRank++;
} }
return $entries; return $entries;

View File

@ -2,6 +2,9 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use App\Actions\Entries\GetEntrySeatingResult;
use App\Actions\Tabulation\CalculateEntryScore;
use App\Actions\Tabulation\RankAuditionEntries;
use App\Models\School; use App\Models\School;
use App\Services\Invoice\InvoiceDataService; use App\Services\Invoice\InvoiceDataService;
use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\Auth;
@ -22,9 +25,31 @@ class DashboardController extends Controller
return view('dashboard.profile'); return view('dashboard.profile');
} }
public function dashboard() public function dashboard(
{ CalculateEntryScore $scoreCalc,
return view('dashboard.dashboard'); GetEntrySeatingResult $resultGenerator,
RankAuditionEntries $ranker
) {
$entries = Auth::user()->entries;
$entries = $entries->filter(function ($entry) {
return $entry->audition->hasFlag('seats_published');
});
$entries = $entries->sortBy(function ($entry) {
return $entry->student->full_name(true);
});
$scores = [];
$results = [];
$ranks = [];
foreach ($entries as $entry) {
$results[$entry->id] = $resultGenerator->getResult($entry);
if (! $entry->hasFlag('no_show') && ! $entry->hasFlag('failed_prelim')) {
$scores[$entry->id] = $scoreCalc->calculate('seating', $entry);
$auditionResults = $ranker->rank('seating', $entry->audition);
$ranks[$entry->id] = $auditionResults->firstWhere('id', $entry->id)->raw_rank;
}
}
return view('dashboard.dashboard', compact('entries', 'scores', 'results', 'ranks'));
} }
public function my_school() public function my_school()

View File

@ -3,7 +3,9 @@
namespace App\Http\Controllers\Tabulation; namespace App\Http\Controllers\Tabulation;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\CalculatedScore;
use App\Models\Entry; use App\Models\Entry;
use App\Models\ScoreSheet;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\DB;
@ -79,7 +81,8 @@ class EntryFlagController extends Controller
DB::table('score_sheets')->where('entry_id', $entry->id)->delete(); DB::table('score_sheets')->where('entry_id', $entry->id)->delete();
$entry->addFlag('no_show'); $entry->addFlag('no_show');
ScoreSheet::where('entry_id', $entry->id)->delete();
CalculatedScore::where('entry_id', $entry->id)->delete();
$msg = 'No Show has been entered for '.$entry->audition->name.' #'.$entry->draw_number.' (ID: '.$entry->id.').'; $msg = 'No Show has been entered for '.$entry->audition->name.' #'.$entry->draw_number.' (ID: '.$entry->id.').';
return to_route('entry-flags.noShowSelect')->with('success', $msg); return to_route('entry-flags.noShowSelect')->with('success', $msg);

View File

@ -2,7 +2,8 @@
<x-layout.app> <x-layout.app>
<x-slot:page_title>Dashboard</x-slot:page_title> <x-slot:page_title>Dashboard</x-slot:page_title>
@if(! Auth::user()->school_id) @if(! Auth::user()->school_id)
<p class="pb-5">You aren't currently associated with a school. <a href="/my_school" class="text-blue-600">Click here to choose or create one.</a></p> <p class="pb-5">You aren't currently associated with a school. <a href="/my_school" class="text-blue-600">Click
here to choose or create one.</a></p>
@endif @endif
<div class="grid sm:grid-cols-2 md:grid-cols-4"> <div class="grid sm:grid-cols-2 md:grid-cols-4">
<div>{{-- Column 1 --}} <div>{{-- Column 1 --}}
@ -29,6 +30,15 @@
</x-card.list.body> </x-card.list.body>
</x-card.card> </x-card.card>
</div> </div>
@if(Auth::user()->school_id)
<div class="md:col-span-3 pl-3">{{-- Column 2 Results --}}
<x-card.card>
<x-card.heading>My Results</x-card.heading>
@include('dashboard.results-table')
</x-card.card>
</div>
@endif
</div> </div>
</x-layout.app> </x-layout.app>

View File

@ -0,0 +1,24 @@
<x-table.table>
<thead>
<x-table.th>Student</x-table.th>
<x-table.th>Audition</x-table.th>
<x-table.th>Score</x-table.th>
<x-table.th>Rank</x-table.th>
<x-table.th>Result</x-table.th>
</thead>
<x-table.body>
@foreach($entries as $entry)
<tr>
<x-table.td>{{ $entry->student->full_name() }}</x-table.td>
<x-table.td>{{ $entry->audition->name }}</x-table.td>
@if(! $entry->audition->hasFlag('seats_published'))
<x-table.td colspan="3">Results not available</x-table.td>
@else
<x-table.td> {{ $scores[$entry->id ][0] }}</x-table.td>
<x-table.td> {{ $ranks[$entry->id ] }}</x-table.td>
<x-table.td> {{ $results[$entry->id ] }}</x-table.td>
@endif
</tr>
@endforeach
</x-table.body>
</x-table.table>