67 lines
2.3 KiB
PHP
67 lines
2.3 KiB
PHP
<?php
|
|
|
|
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)
|
|
{
|
|
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');
|
|
}
|
|
}
|