actually complete order

This commit is contained in:
Constantin Simonis 2025-01-31 10:28:12 +01:00
parent be64eb12aa
commit 443ebe5c0d
Signed by: csimonis
GPG Key ID: 758DD9C506603183
3 changed files with 30 additions and 11 deletions

View File

@ -3,7 +3,6 @@
namespace App\Controller; namespace App\Controller;
use App\DataObjects\TicketFormData; use App\DataObjects\TicketFormData;
use App\Repository\PaymentRepository;
use App\Service\TicketService; use App\Service\TicketService;
use Stripe\Stripe; use Stripe\Stripe;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
@ -17,7 +16,6 @@ final class TicketController extends AbstractController
public function __construct( public function __construct(
private TicketService $service, private TicketService $service,
private SerializerInterface $serializer, private SerializerInterface $serializer,
private PaymentRepository $repository,
) { ) {
} }
@ -40,7 +38,19 @@ final class TicketController extends AbstractController
#[Route(path: '/success', name: 'app_success', methods: Request::METHOD_GET)] #[Route(path: '/success', name: 'app_success', methods: Request::METHOD_GET)]
public function success(Request $request): Response public function success(Request $request): Response
{ {
$payment = $this->repository->findOneBy(['sessionId' => $request->query->get('session_id')]); $sessionId = $request->query->get('session_id');
if (!$sessionId) {
noty()->error('Etwas ist schiefgelaufen');
return $this->redirectToRoute('app_ticket');
}
if (!$this->service->completePayment($sessionId)) {
noty()->error('Etwas ist schiefgelaufen');
return $this->redirectToRoute('app_ticket');
}
return $this->render('ticket/success.html.twig'); return $this->render('ticket/success.html.twig');
} }

View File

@ -8,7 +8,7 @@ use App\Entity\Customer;
use App\Entity\Payment; use App\Entity\Payment;
use App\Entity\Ticket; use App\Entity\Ticket;
use App\Enum\TicketData as TicketEnum; use App\Enum\TicketData as TicketEnum;
use Cassandra\Custom; use App\Repository\PaymentRepository;
use Doctrine\ORM\EntityManagerInterface; use Doctrine\ORM\EntityManagerInterface;
use Stripe\Checkout\Session; use Stripe\Checkout\Session;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface; use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
@ -18,6 +18,7 @@ class TicketService
public function __construct( public function __construct(
private readonly UrlGeneratorInterface $generator, private readonly UrlGeneratorInterface $generator,
private readonly EntityManagerInterface $em, private readonly EntityManagerInterface $em,
private readonly PaymentRepository $paymentRepository,
) { ) {
} }
@ -108,4 +109,18 @@ class TicketService
return $entities; return $entities;
} }
public function completePayment(string $sessionId): bool
{
$payment = $this->paymentRepository->findOneBy(['sessionId' => $sessionId]);
if (!$payment) {
return false;
}
$payment->setCompleted(true);
$this->em->flush();
return true;
}
} }

View File

@ -1,11 +1,9 @@
<div class="bg-white/80 backdrop-blur-sm rounded-2xl border border-gray-100 p-5 hover:shadow-lg transition-all duration-300 group"> <div class="bg-white/80 backdrop-blur-sm rounded-2xl border border-gray-100 p-5 hover:shadow-lg transition-all duration-300 group">
<div class="grid grid-cols-12 gap-5"> <div class="grid grid-cols-12 gap-5">
<div class="relative col-span-5"> <div class="relative col-span-5">
<label for="ticket" class="block text-sm font-medium text-gray-700 mb-1 ml-1">Ticket Kategorie</label>
<div class="relative group"> <div class="relative group">
<twig:ux:icon name="mingcute:ticket-fill" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" /> <twig:ux:icon name="mingcute:ticket-fill" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" />
<select name="ticket" <select name="ticket"
id="ticket"
required required
data-form-target="ticketType" data-form-target="ticketType"
class="w-full pl-11 pr-10 py-3.5 rounded-xl appearance-none bg-white border border-gray-200 text-gray-800 font-medium text-[15px] focus:border-orange-500 focus:ring-2 focus:ring-orange-200 transition-all hover:border-orange-300"> class="w-full pl-11 pr-10 py-3.5 rounded-xl appearance-none bg-white border border-gray-200 text-gray-800 font-medium text-[15px] focus:border-orange-500 focus:ring-2 focus:ring-orange-200 transition-all hover:border-orange-300">
@ -22,11 +20,9 @@
</div> </div>
<div class="relative col-span-4"> <div class="relative col-span-4">
<label for="food" class="block text-sm font-medium text-gray-700 mb-1 ml-1">Menü-Auswahl</label>
<div class="relative group"> <div class="relative group">
<twig:ux:icon name="mdi:food" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" /> <twig:ux:icon name="mdi:food" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" />
<select name="food" <select name="food"
id="food"
required required
data-form-target="foodType" data-form-target="foodType"
class="w-full pl-11 pr-10 py-3.5 rounded-xl appearance-none bg-white border border-gray-200 text-gray-800 font-medium text-[15px] focus:border-orange-500 focus:ring-2 focus:ring-orange-200 transition-all hover:border-orange-300"> class="w-full pl-11 pr-10 py-3.5 rounded-xl appearance-none bg-white border border-gray-200 text-gray-800 font-medium text-[15px] focus:border-orange-500 focus:ring-2 focus:ring-orange-200 transition-all hover:border-orange-300">
@ -42,11 +38,9 @@
</div> </div>
<div class="relative col-span-2"> <div class="relative col-span-2">
<label for="note" class="block text-sm font-medium text-gray-700 mb-1 ml-1">Anmerkungen</label>
<div class="relative group"> <div class="relative group">
<twig:ux:icon name="mdi:note" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" /> <twig:ux:icon name="mdi:note" class="absolute left-3.5 top-1/2 -translate-y-1/2 w-5 h-5 text-orange-400 pointer-events-none transition-colors group-hover:text-orange-500" />
<input type="text" <input type="text"
id="note"
placeholder="Optional" placeholder="Optional"
name="note" name="note"
data-form-target="note" data-form-target="note"