<?php
namespace App\EventSubscriber\Residence;
use App\Event\Residence\BookingResidenceCheckInEvent;
use App\Event\Residence\BookingResidenceCheckOutEvent;
use App\Event\Residence\BookingResidenceUpdatedEvent;
use App\Service\CsscHelperService;
use CIC\DB\envLoader\db;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class StudentReachBookingSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $em;
private db $db;
private ParameterBagInterface $parameterBag;
private CsscHelperService $cssc;
public function __construct(ParameterBagInterface $parameterBag,EntityManagerInterface $em, db $db, CsscHelperService $cssc)
{
$this->em = $em;
$this->db = $db;
$this->parameterBag = $parameterBag;
$this->cssc = $cssc;
}
public static function getSubscribedEvents()
{
return [
BookingResidenceCheckInEvent::class => 'onCheckIn',
BookingResidenceCheckOutEvent::class => 'onCheckOut',
BookingResidenceCheckInEvent::NAME => 'onCheckIn',
BookingResidenceCheckOutEvent::NAME => 'onCheckOut',
];
}
public function onCheckIn(BookingResidenceCheckInEvent $event)
{
if(!$event->getBookings()->getStudent())
return;
$student = $event->getBookings()->getStudent();
$student->getReach()
->setHouse($event->getBookings()->getBedSpace()->getRoom()->getBuilding()->getReachId());
$this->em->persist($student);
$this->em->flush();
}
public function onCheckOut(BookingResidenceCheckOutEvent $event)
{
if(!$event->getBookings()->getStudent())
return;
$student = $event->getBookings()->getStudent();
if(!$student->getReach())
return;
$student->getReach()
->setHouse(null);
$this->em->persist($student);
$this->em->flush();
}
}