<?php
namespace App\EventSubscriber;
use App\Entity\PropertyOccupancyLog;
use App\Event\AppEvents;
use App\Event\PropertyOccupancyLogEvent;
//use App\Service\LogPropertyOccupancyService; // Replace with your logging service
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class PropertyOccupancyLogSubscriber implements EventSubscriberInterface
{
private $entityManager;
public function __construct(EntityManagerInterface $entityManager)
{
$this->entityManager = $entityManager;
}
public static function getSubscribedEvents()
{
return [
AppEvents::PROPERTY_OCCUPANCY_CHANGE => 'onPropertyOccupancyChange',
];
}
public function onPropertyOccupancyChange(PropertyOccupancyLogEvent $event)
{
$property = $event->getProperty();
$oldOccupancyStatus = $event->getOldOccupancyStatus();
$newOccupancyStatus = $event->getNewOccupancyStatus();
$user = $event->getUser();
$propertyOccupancyLog = new PropertyOccupancyLog();
$propertyOccupancyLog->setProperty($property);
$propertyOccupancyLog->setOldOccupancy($oldOccupancyStatus);
$propertyOccupancyLog->setNewOccupancy($newOccupancyStatus);
$propertyOccupancyLog->setUpdatedDate(new \DateTime());
$propertyOccupancyLog->setUpdatedBy($user);
$this->entityManager->persist($propertyOccupancyLog);
$this->entityManager->flush();
}
}