<?php
namespace App\EventSubscriber\Residence;
use App\Event\Residence\BookingResidenceCheckInEvent;
use App\Event\Residence\BookingResidenceCheckOutEvent;
use App\Event\Residence\BookingResidenceUpdatedEvent;
use CIC\DB\envLoader\db;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class BedBookingSubscriber implements EventSubscriberInterface
{
private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
public static function getSubscribedEvents()
{
return [
BookingResidenceCheckInEvent::class => 'onCheckIn',
BookingResidenceCheckOutEvent::class => 'onCheckOut',
BookingResidenceCheckInEvent::NAME => 'onCheckIn',
BookingResidenceCheckOutEvent::NAME => 'onCheckOut',
];
}
public function onCheckIn(BookingResidenceCheckInEvent $event)
{
// set the room as occupied
$bed = $event->getBookings()->getBedSpace();
$bed->setOccupancyStatus('Occuipied');
$bed->setOccupant($event->getBookings());
$this->em->persist($bed);
$this->em->flush();
}
public function onCheckOut(BookingResidenceCheckOutEvent $event)
{
$bed = $event->getBookings()->getBedSpace();
$bed->setOccupancyStatus('Available');
$bed->setOccupant(null);
$this->em->persist($bed);
$this->em->flush();
}
}