add success email #14

Merged
csimonis merged 12 commits from feature/success-email into main 2025-02-13 20:14:35 +00:00
2 changed files with 20 additions and 8 deletions
Showing only changes of commit ae7b6e6a05 - Show all commits

View File

@ -17,8 +17,6 @@ class TestController extends AbstractController
#[Route('/test')] #[Route('/test')]
public function index(Filesystem $filesystem): Response public function index(Filesystem $filesystem): Response
{ {
$dompdfWrapper = new DompdfWrapper(new DompdfFactory());
$content = $dompdfWrapper->getPdf($this->renderView('test.html.twig', ['qr' => (new QRCode())->render('https://www.google.com')]));
$filesystem->dumpFile('test.pdf', $content); $filesystem->dumpFile('test.pdf', $content);
return $this->render('test.html.twig', ['qr' => (new QRCode())->render('https://www.google.com')]); return $this->render('test.html.twig', ['qr' => (new QRCode())->render('https://www.google.com')]);

View File

@ -3,16 +3,19 @@ declare(strict_types=1);
namespace App\Service; namespace App\Service;
use App\Controller\Admin\CustomerCrudController; use App\Controller\Admin\TicketCrudController;
use App\Entity\Payment; use App\Entity\Payment;
use App\Entity\Ticket;
use chillerlan\QRCode\QRCode; use chillerlan\QRCode\QRCode;
use Nucleos\DompdfBundle\Factory\DompdfFactory;
use Nucleos\DompdfBundle\Wrapper\DompdfWrapper;
use Symfony\Bridge\Twig\Mime\TemplatedEmail; use Symfony\Bridge\Twig\Mime\TemplatedEmail;
use Symfony\Component\DependencyInjection\Attribute\Autowire; use Symfony\Component\DependencyInjection\Attribute\Autowire;
use Symfony\Component\Mailer\MailerInterface; use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Address; use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Part\DataPart; use Symfony\Component\Mime\Part\DataPart;
use Symfony\Component\Mime\Part\File;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
use Twig\Environment;
class TicketEmailService class TicketEmailService
{ {
@ -21,6 +24,7 @@ class TicketEmailService
#[Autowire(env: 'SENDER_MAIL')] #[Autowire(env: 'SENDER_MAIL')]
private readonly string $senderMail, private readonly string $senderMail,
private readonly UrlGeneratorInterface $urlGenerator, private readonly UrlGeneratorInterface $urlGenerator,
private readonly Environment $twig,
) { ) {
} }
@ -33,18 +37,28 @@ class TicketEmailService
->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname())) ->to(new Address($payment->getCustomer()?->getEmail(), $payment->getCustomer()?->getFirstname() . ' ' . $payment->getCustomer()?->getLastname()))
->context([ ->context([
'payment' => $payment, 'payment' => $payment,
'qr' => (new QRCode())->render($this->generateUrl($payment))
]); ]);
$i = 0;
foreach ($payment->getCustomer()?->getTickets() as $ticket) {
++$i;
$mail->addPart(new DataPart($this->generateTicket($ticket), "ticket-$i.pdf", 'application/pdf'));
}
$this->mailer->send($mail); $this->mailer->send($mail);
} }
private function generateUrl(Payment $payment): string private function generateTicket(Ticket $ticket): 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', [ return $this->urlGenerator->generate('admin', [
'crudAction' => 'detail', 'crudAction' => 'detail',
'crudControllerFqcn' => CustomerCrudController::class, 'crudControllerFqcn' => TicketCrudController::class,
'entityId' => $payment->getCustomer()?->getId() 'entityId' => $ticket->getCustomer()?->getId()
], UrlGeneratorInterface::ABSOLUTE_URL); ], UrlGeneratorInterface::ABSOLUTE_URL);
} }
} }