<?php
namespace App\EventSubscriber;
use ApiPlatform\Core\EventListener\EventPriorities;
use App\Entity\Payment;
use App\Entity\Reservation;
use App\Repository\ReservationRepository;
use App\Service\ReservationService;
use App\Service\Utils;
use Doctrine\ORM\EntityManagerInterface;
use JetBrains\PhpStorm\ArrayShape;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
class PayementSubscriber implements EventSubscriberInterface
{
public function __construct(
private UserPasswordHasherInterface $encoder,
private ReservationRepository $reservationRepository,
private EntityManagerInterface $em
) {
}
#[
ArrayShape([KernelEvents::VIEW => "array"])
]
public static function getSubscribedEvents(): array
{
return [
KernelEvents::VIEW => [
['prePersistePayement', EventPriorities::PRE_WRITE],
['postPersistePayement', EventPriorities::POST_WRITE]
]
];
}
public function prePersistePayement(ViewEvent $event): void
{
$payement = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$payement instanceof Payment || Request::METHOD_POST !== $method) {
return;
}
if ($payement->getModePayment() !==null && $payement->getModePayment()->getLabel() === "Espèce") {
$payement->setStatut('succes');
}
if ($payement->getReservation() !==null) {
$reservation = $payement->getReservation();
$montant = $reservation->getPrice()->getMontant() ?? 0;
$montant = $reservation->getQuantityTime() * $montant;
$reservation->setIsSold(ReservationService::isSold($montant, $reservation->getPayements()->toArray()));
$this->em->persist($reservation);
$this->em->flush();
}
}
public function postPersistePayement(ViewEvent $event): void
{
$payement = $event->getControllerResult();
$method = $event->getRequest()->getMethod();
if (!$payement instanceof Payment || Request::METHOD_POST !== $method) {
return;
}
// if ($payement->getReservation() !==null) {
// $reservation = $payement->getReservation();
// $montant = $reservation->getPrice()->getMontant() ?? 0;
// $montant = $reservation->getQuantityTime() * $montant;
// $reservation->setIsSold(ReservationService::isSold($montant, $reservation->getPayements()->toArray()));
// $this->em->persist($reservation);
// $this->em->flush();
// }
}
}