From 56931ca39161570d5dc0e4f9fc894a7cacc1fee0 Mon Sep 17 00:00:00 2001 From: Matt Young Date: Tue, 8 Apr 2025 18:15:50 -0500 Subject: [PATCH] Add school rosters with shirt sizes to SCOBDA nomination ensembles. --- ...obdaNominationAdminUtilitiesController.php | 55 ++++++++++++++++++- .../scobda/admin/seating/index.blade.php | 6 ++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/NominationEnsembles/ScobdaNominationAdminUtilitiesController.php b/app/Http/Controllers/NominationEnsembles/ScobdaNominationAdminUtilitiesController.php index de9e3e8..bdb8921 100644 --- a/app/Http/Controllers/NominationEnsembles/ScobdaNominationAdminUtilitiesController.php +++ b/app/Http/Controllers/NominationEnsembles/ScobdaNominationAdminUtilitiesController.php @@ -3,11 +3,64 @@ namespace App\Http\Controllers\NominationEnsembles; use App\Http\Controllers\Controller; +use App\Models\School; +use Codedge\Fpdf\Fpdf\Fpdf; class ScobdaNominationAdminUtilitiesController extends Controller implements NominationAdminUtilitiesController { public function __invoke(string $action) { - // TODO: Implement __invoke() method. + match ($action) { + 'school_shirt_distribution_report' => $this->printShirtDistributionLists(), + default => $this->invalidAction(), + }; + } + + private function printShirtDistributionLists() + { + $output = ''; + $schools = School::with('nominations.student')->orderBy('name')->get(); + + $pdf = new Fpdf('P', 'in', 'letter'); + + foreach ($schools as $school) { + if ($school->nominations->count() < 1) { + continue; + } + $pdf->AddPage(); + $pdf->SetFont('Arial', 'B', 16); + $pdf->Cell(0, .3, $school->name, 1, 1, 'L'); + $director_text = 'Directors: '; + $first_director = true; + foreach ($school->users as $user) { + if (! $first_director) { + $director_text .= ', '; + } + $director_text .= $user->full_name(); + $first_director = false; + } + $pdf->SetFont('Arial', 'B', 12); + $pdf->MultiCell(0, .3, $director_text, 0, 'L', 0); + $pdf->SetFont('Arial', '', 10); + $nominations = $school->nominations; + $nominations = $nominations->sortBy(function ($entry) { + return $entry->student->full_name(true); + }); + foreach ($nominations as $nomination) { + $accepted = $nomination->data['accepted'] ?? false; + if (! $accepted) { + continue; + } + $text = $nomination->student->full_name().' - '; + if ($nomination->student->optional_data && array_key_exists('shirt_size', + $nomination->student->optional_data)) { + $text .= $nomination->student->optional_data['shirt_size']; + } else { + $text .= 'No size provided'; + } + $pdf->Cell(0, .25, $text, 0, 1, 'L'); + } + } + $pdf->Output('D', 'ShirtRosters.pdf'); } } diff --git a/resources/views/nomination_ensembles/scobda/admin/seating/index.blade.php b/resources/views/nomination_ensembles/scobda/admin/seating/index.blade.php index 06467b7..ec401c4 100644 --- a/resources/views/nomination_ensembles/scobda/admin/seating/index.blade.php +++ b/resources/views/nomination_ensembles/scobda/admin/seating/index.blade.php @@ -30,6 +30,12 @@ By School +
  • + + School Rosters + +