diff --git a/src/Controller/TestController.php b/src/Controller/TestController.php deleted file mode 100644 index c3c15a8..0000000 --- a/src/Controller/TestController.php +++ /dev/null @@ -1,24 +0,0 @@ -dumpFile('test.pdf', $content); - - return $this->render('test.html.twig', ['qr' => (new QRCode())->render('https://www.google.com')]); - } -} diff --git a/src/Enum/TicketData.php b/src/Enum/TicketData.php index 2f6e1d5..a04673e 100644 --- a/src/Enum/TicketData.php +++ b/src/Enum/TicketData.php @@ -6,7 +6,7 @@ class TicketData { public const TICKET_DATA = [ 1 => [ - 'name' => 'Ticket', + 'name' => 'All-Inclusive Ticket', 'price' => 50, ], 2 => [ diff --git a/src/Service/TicketEmailService.php b/src/Service/TicketEmailService.php index b9db500..1ce7498 100644 --- a/src/Service/TicketEmailService.php +++ b/src/Service/TicketEmailService.php @@ -7,6 +7,7 @@ use App\Controller\Admin\TicketCrudController; use App\Entity\Payment; use App\Entity\Ticket; use chillerlan\QRCode\QRCode; +use Doctrine\Common\Collections\Collection; use Nucleos\DompdfBundle\Factory\DompdfFactory; use Nucleos\DompdfBundle\Wrapper\DompdfWrapper; use Symfony\Bridge\Twig\Mime\TemplatedEmail; @@ -37,28 +38,14 @@ class TicketEmailService ->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname())) ->context([ 'payment' => $payment, - ]); - - $i = 0; - foreach ($payment->getCustomer()?->getTickets() as $ticket) { - ++$i; - $mail->addPart(new DataPart($this->generateTicket($ticket), "ticket-$i.pdf", 'application/pdf')); - } + ]) + ->addPart(new DataPart($this->generateTicket($payment->getCustomer()?->getTickets()), 'ticket.pdf', 'application/pdf')); $this->mailer->send($mail); } - private function generateTicket(Ticket $ticket): string + private function generateTicket(Collection $tickets): string { - return (new DompdfWrapper(new DompdfFactory()))->getPdf($this->twig->render('test.html.twig', ['qr' => (new QRCode())->render($this->generateUrl($ticket))])); - } - - private function generateUrl(Ticket $ticket): string - { - return $this->urlGenerator->generate('admin', [ - 'crudAction' => 'detail', - 'crudControllerFqcn' => TicketCrudController::class, - 'entityId' => $ticket->getCustomer()?->getId() - ], UrlGeneratorInterface::ABSOLUTE_URL); + return (new DompdfWrapper(new DompdfFactory()))->getPdf($this->twig->render('test.html.twig', ['tickets' => $tickets])); } } \ No newline at end of file diff --git a/src/Twig/Ticket.php b/src/Twig/Ticket.php index 1515c91..07c0ae9 100644 --- a/src/Twig/Ticket.php +++ b/src/Twig/Ticket.php @@ -2,20 +2,26 @@ namespace App\Twig; +use App\Controller\Admin\TicketCrudController; use App\Enum\FoodData; use App\Enum\TicketData; +use chillerlan\QRCode\QRCode; +use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Twig\Extension\AbstractExtension; use Twig\TwigFilter; -use Twig\TwigFunction; class Ticket extends AbstractExtension { + public function __construct(private readonly UrlGeneratorInterface $urlGenerator) + { + } + public function getFilters(): array { return [ new TwigFilter('food', $this->getFoodName(...)), new TwigFilter('ticket', $this->getTicket(...)), - + new TwigFilter('qr', $this->generateUrl(...)), ]; } @@ -28,4 +34,13 @@ class Ticket extends AbstractExtension { return TicketData::TICKET_DATA[$id] ?? ['name' => 'N/A', 'price' => 'N/A']; } + + public function generateUrl(\App\Entity\Ticket $ticket): string + { + return (new QRCode)->render($this->urlGenerator->generate('admin', [ + 'crudAction' => 'detail', + 'crudControllerFqcn' => TicketCrudController::class, + 'entityId' => $ticket->getCustomer()?->getId() + ], UrlGeneratorInterface::ABSOLUTE_URL)); + } } \ No newline at end of file diff --git a/templates/test.html.twig b/templates/test.html.twig index b395a8a..f35f0cd 100644 --- a/templates/test.html.twig +++ b/templates/test.html.twig @@ -1,13 +1,15 @@ -
+{% for ticket in tickets %} +
- Kind (0-6 Jahre) + {{ (ticket.type | ticket)['name'] }}
- +
+{% endfor %} \ No newline at end of file