<?php
namespace App\EventSubscriber;
use App\Entity\Action;
use App\Entity\Payment;
use App\Repository\ActionRepository;
use App\Repository\ControleActivityRepository;
use App\Repository\PaymentRepository;
use App\Repository\ReservationRepository;
use App\Service\CinetPayService;
use DateTimeImmutable;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\Event\ViewEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\RequestEvent;
use Symfony\Component\Security\Core\Security;
class getActionSubscriber implements EventSubscriberInterface
{
public function __construct(
private EntityManagerInterface $entityManager,
private ReservationRepository $reservationRepository,
private PaymentRepository $paymentRepository,
private CinetPayService $cinetPayService,
private Security $security,
) {
}
public static function getSubscribedEvents(): array
{
return [
KernelEvents::REQUEST => ['getAction'],
];
}
public function getAction(RequestEvent $event): void
{
$payments = $this->paymentRepository->findBy(['statut'=>['await','refused']]);
$dateTimeNow = new DateTimeImmutable();
foreach ($payments as $key => $payment) {
if ($dateTimeNow->getTimestamp() - $payment->getDate()->getTimestamp() < 120) {
continue;
}
$reservation = $payment->getReservation() === null ? $payment->getAbonnement() : $payment->getReservation();
$arrayPayment = $reservation->getPayements()->toArray();
$result = array_filter($arrayPayment, function (Payment $payment) {
return $payment->getStatut() === 'succes';
});
if (count($result) !=0) {
continue;
}
$this->entityManager->remove($reservation);
}
$this->entityManager->flush();
}
public function autoNotificationCinepay(): void
{
$payement = $this->paymentRepository->findOneBy(['statut'=>'await'], ['id'=>'DESC']);
if ($payement !==null) {
$this->cinetPayService->notificationPayement($payement);
}
}
}