From 607a74e311e53e7674ea251f8a9f53bceac0655e Mon Sep 17 00:00:00 2001 From: Constantin Simonis Date: Fri, 31 Jan 2025 11:36:36 +0100 Subject: [PATCH] add success email --- src/Enum/FoodData.php | 13 ++++++++++++ src/Service/TicketEmailService.php | 32 ++++++++++++++++++++++++++++++ src/Service/TicketService.php | 27 ++++++++++++++----------- src/Twig/Ticket.php | 30 ++++++++++++++++++++++++++++ templates/email/order.html.twig | 26 ++++++++++++++++++++++++ 5 files changed, 116 insertions(+), 12 deletions(-) create mode 100644 src/Enum/FoodData.php create mode 100644 src/Service/TicketEmailService.php create mode 100644 src/Twig/Ticket.php create mode 100644 templates/email/order.html.twig diff --git a/src/Enum/FoodData.php b/src/Enum/FoodData.php new file mode 100644 index 0000000..0f67660 --- /dev/null +++ b/src/Enum/FoodData.php @@ -0,0 +1,13 @@ + 'Mit Fleisch', + 2 => 'Vegetarisch', + 3 => 'Vegan' + ]; +} \ No newline at end of file diff --git a/src/Service/TicketEmailService.php b/src/Service/TicketEmailService.php new file mode 100644 index 0000000..c1f32e9 --- /dev/null +++ b/src/Service/TicketEmailService.php @@ -0,0 +1,32 @@ +htmlTemplate('email/order.html.twig') + ->subject('Abiball Ticket') + ->from(new Address($this->senderMail, 'Noreply')) + ->to($payment->getCustomer()?->getEmail()) + ->context(['payment' => $payment]); + + $this->mailer->send($mail); + } +} \ No newline at end of file diff --git a/src/Service/TicketService.php b/src/Service/TicketService.php index 3570e73..e3a1e11 100644 --- a/src/Service/TicketService.php +++ b/src/Service/TicketService.php @@ -21,6 +21,7 @@ class TicketService private readonly UrlGeneratorInterface $generator, private readonly EntityManagerInterface $em, private readonly PaymentRepository $paymentRepository, + private readonly TicketEmailService $emailService, #[Autowire(env: 'STRIPE_SECRET_KEY')] string $stripeKey ) { @@ -36,18 +37,6 @@ class TicketService return $session; } - public function saveTicketData(TicketFormData $data, string $sessionId): void - { - $payment = (new Payment()) - ->setSessionId($sessionId) - ->setCompleted(false) - ->setCustomer($this->createEntityFromData($data)); - - $this->em->persist($payment); - $this->em->flush(); - } - - public function completePayment(string $sessionId): bool { if (!$payment = $this->paymentRepository->findOneBy(['sessionId' => $sessionId])) { @@ -57,9 +46,23 @@ class TicketService $payment->setCompleted(true); $this->em->flush(); + $this->emailService->sendSuccessEmail($payment); + return true; } + + private function saveTicketData(TicketFormData $data, string $sessionId): void + { + $payment = (new Payment()) + ->setSessionId($sessionId) + ->setCompleted(false) + ->setCustomer($this->createEntityFromData($data)); + + $this->em->persist($payment); + $this->em->flush(); + } + private function getLineItems(array $tickets): array { $lineItems = []; diff --git a/src/Twig/Ticket.php b/src/Twig/Ticket.php new file mode 100644 index 0000000..cc08e4e --- /dev/null +++ b/src/Twig/Ticket.php @@ -0,0 +1,30 @@ +getFoodName(...)), + new TwigFilter('ticket', $this->getTicket(...)) + ]; + } + + public function getFoodName(int $id): string + { + return FoodData::FOOD_DATA[$id] ?? 'N/A'; + } + + public function getTicket(int $id): array + { + return TicketData::TICKET_DATA[$id] ?? ['name' => 'N/A', 'price' => 'N/A']; + } +} \ No newline at end of file diff --git a/templates/email/order.html.twig b/templates/email/order.html.twig new file mode 100644 index 0000000..6128df2 --- /dev/null +++ b/templates/email/order.html.twig @@ -0,0 +1,26 @@ + + + + + Abiball Ticket + + +Hallo {{ payment.customer.firstname }} +
+text +
+{% for ticket in payment.customer.tickets %} + {{ (ticket.type | ticket)['name'] }} ({{ (ticket.type | ticket)['price'] }}€) +
+ {{ ticket.foodType | food }} +
+ {% if ticket.note %} +
+ {{ ticket.note }} + {% endif %} + {% if not loop.last %} +
+ {% endif %} +{% endfor %} + + \ No newline at end of file