<?php
namespace App\EventSubscriber\Residence;
use App\Entity\School\Student\StudentReachCloud;
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 StudentProfileBookingSubscriber 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)
{
if(!$event->getBookings()->getStudent())
return;
$student = $event->getBookings()->getStudent();
$student->setAddress($event->getBookings()->getBedSpace()->getRoom()->getBuilding()->getAddress1());
$student->setAddress2($event->getBookings()->getBedSpace()->getName());
$student->setResidence($event->getBookings()->getBedSpace()->getRoom()->getBuilding());
$student->setResidenceBookingCurrent($event->getBookings());
$student->setResidenceCode($event->getBookings()->getBedSpace()->getRoom()->getBuilding()->getShortCode());
if(!$student->getReach()) {
$student->setReach(new StudentReachCloud());
$student->getReach()->setAccountActive(1);
}
$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();
$student->setAddress('Moved out of Residence');
$student->setAddress2('Requires Update');
$student->setResidence(NULL);
$student->setResidenceCode('OUT');
$student->setResidenceBookingPrevious($student->getResidenceBookingCurrent());
$student->setResidenceBookingCurrent(NULL);
$this->em->persist($student);
$this->em->flush();
}
}