147 lines
4.9 KiB
PHP
147 lines
4.9 KiB
PHP
<?php
|
|
|
|
namespace App\Actions\Print;
|
|
|
|
use App\Models\Entry;
|
|
use Codedge\Fpdf\Fpdf\Fpdf;
|
|
use Illuminate\Support\Collection;
|
|
|
|
use function auditionSetting;
|
|
|
|
/**
|
|
* @codeCoverageIgnore
|
|
*/
|
|
// TODO figure out testing for QuarterPageCards
|
|
class QuarterPageCards implements PrintCards
|
|
{
|
|
protected $pdf;
|
|
|
|
protected $margin = .3;
|
|
|
|
protected $quadOn = 1;
|
|
|
|
protected $offset = [
|
|
1 => [0, 0],
|
|
2 => [5.5, 0],
|
|
3 => [0, 4.25],
|
|
4 => [5.5, 4.25],
|
|
];
|
|
|
|
public function print(Collection $entries): void
|
|
{
|
|
$this->pdf = new Fpdf('L', 'in', 'letter');
|
|
$this->pdf->setMargins($this->margin, $this->margin);
|
|
$this->pdf->SetAutoPageBreak(false);
|
|
$this->addPage();
|
|
foreach ($entries as $entry) {
|
|
$this->addCard($entry);
|
|
}
|
|
$this->pdf->Output('D', auditionSetting('auditionAbbreviation').'cards.pdf');
|
|
}
|
|
|
|
protected function addCard(Entry $entry)
|
|
{
|
|
// Reset to first slot if we're out of slots
|
|
if ($this->quadOn > 4) {
|
|
$this->addPage();
|
|
$this->quadOn = 1;
|
|
}
|
|
|
|
// Fill in Entry ID
|
|
$this->pdf->setXY($this->offset[$this->quadOn][0] + 3.85, $this->offset[$this->quadOn][1] + $this->margin);
|
|
$this->pdf->SetFont('Arial', '', 12);
|
|
$this->pdf->Cell(1.17, .25, $entry->id);
|
|
|
|
// Fill in Audition Name
|
|
$this->pdf->setXY($this->offset[$this->quadOn][0] + $this->margin + .1, $this->offset[$this->quadOn][1] + 1.55);
|
|
$this->pdf->SetFont('Arial', 'B', 18);
|
|
$this->pdf->Cell(4.5, .5, $entry->audition->name.' #'.$entry->draw_number);
|
|
|
|
// Fill in student information
|
|
$nameLine = $entry->student->full_name();
|
|
if ($entry->student->isDoublerInEvent($entry->audition->event_id)) {
|
|
$nameLine .= ' (D)';
|
|
}
|
|
$this->pdf->SetFont('Arial', '', 10);
|
|
$xLoc = $this->offset[$this->quadOn][0] + 1;
|
|
$yLoc = $this->offset[$this->quadOn][1] + 3.1;
|
|
$this->pdf->setXY($xLoc, $yLoc);
|
|
$this->pdf->Cell(4.5, .25, $nameLine);
|
|
$this->pdf->setXY($xLoc, $yLoc + .25);
|
|
$this->pdf->Cell(4.5, .25, $entry->student->school->name);
|
|
$this->pdf->setXY($xLoc, $yLoc + .5);
|
|
if (! is_null($entry->audition->room_id)) {
|
|
$this->pdf->Cell(4.5, .25, $entry->audition->room->name);
|
|
}
|
|
if (auditionSetting('advanceTo')) {
|
|
$as = false;
|
|
$this->pdf->setXY($xLoc, $yLoc - 1);
|
|
$auditioningFor = 'Auditioning for: ';
|
|
if ($entry->for_seating) {
|
|
$auditioningFor .= auditionSetting('auditionAbbreviation');
|
|
$as = true;
|
|
}
|
|
if ($entry->for_advancement) {
|
|
if ($as) {
|
|
$auditioningFor .= ' / ';
|
|
}
|
|
$auditioningFor .= auditionSetting('advanceTo');
|
|
}
|
|
$this->pdf->Cell(4.5, .25, $auditioningFor);
|
|
}
|
|
$this->quadOn++;
|
|
}
|
|
|
|
protected function addPage()
|
|
{
|
|
// Create a new page
|
|
$this->pdf->AddPage();
|
|
|
|
// Draw dividing lines
|
|
$this->pdf->line(5.5, 0, 5.5, 8.5);
|
|
$this->pdf->line(0, 4.25, 11, 4.25);
|
|
|
|
// Format card areas
|
|
foreach ($this->offset as $thisOffset) {
|
|
// Organization Abbreviation
|
|
$topLeftX = 0 + $thisOffset[0] + $this->margin;
|
|
$topLeftY = $thisOffset[1] + $this->margin;
|
|
$this->pdf->SetXY($topLeftX, $topLeftY);
|
|
$this->pdf->SetFont('Arial', 'B', 16);
|
|
$this->pdf->Cell(2, .25, auditionSetting('auditionAbbreviation'), 0);
|
|
|
|
// Entry ID Block
|
|
$topLeftX = 3.5 + $thisOffset[0] - $this->margin;
|
|
$topLeftY = $thisOffset[1] + $this->margin;
|
|
$this->pdf->SetXY($topLeftX, $topLeftY);
|
|
$this->pdf->SetFont('Arial', 'B', 10);
|
|
$this->pdf->Cell(2, .25, 'Entry ID:', 1);
|
|
|
|
// Audition Name Block
|
|
$topLeftX = $thisOffset[0] + $this->margin;
|
|
$topLeftY = $thisOffset[1] + 1.25 + $this->margin;
|
|
$this->pdf->SetFont('Arial', 'B', 9);
|
|
$this->pdf->SetXY($topLeftX, $topLeftY - .2);
|
|
$this->pdf->Cell(1, .2, 'Audition (monitor use this to introduce)');
|
|
$this->pdf->Rect($topLeftX, $topLeftY, 4.5, .5);
|
|
|
|
// Student Info Block
|
|
$topLeftX = $thisOffset[0] + $this->margin;
|
|
$topLeftY = 2.8 + $thisOffset[1] + $this->margin;
|
|
|
|
$this->pdf->SetXY($topLeftX, $topLeftY);
|
|
$this->pdf->SetFont('Arial', 'B', 10);
|
|
$this->pdf->Cell(4.5, .25, 'Name:', 1);
|
|
|
|
$this->pdf->SetXY($topLeftX, $topLeftY + .25);
|
|
$this->pdf->SetFont('Arial', 'B', 10);
|
|
$this->pdf->Cell(4.5, .25, 'School:', 1);
|
|
|
|
$this->pdf->SetXY($topLeftX, $topLeftY + .5);
|
|
$this->pdf->SetFont('Arial', 'B', 10);
|
|
$this->pdf->Cell(4.5, .25, 'Room:', 1);
|
|
|
|
}
|
|
}
|
|
}
|