src/EventSubscriber/BuildingAdminSubscriber.php line 38
<?phpnamespace App\EventSubscriber;use App\Entity\Building;use App\Entity\BuildingEditHistory;use App\Entity\BuildingReportingHistory;use App\Entity\User;use App\Services\Admin\BuildingReportingHistory\PersistBuildingReportingHistoryService;use Doctrine\ORM\EntityManagerInterface;use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;use Symfony\Contracts\HttpClient\HttpClientInterface;class BuildingAdminSubscriber implements EventSubscriberInterface{public function __construct(private EntityManagerInterface $entityManager,private PersistBuildingReportingHistoryService $buildingReportingHistoryService,private HttpClientInterface $client,private ParameterBagInterface $parameterBag) {}public static function getSubscribedEvents(){return [AfterEntityPersistedEvent::class => ['afterEntityPersisted'],BeforeEntityUpdatedEvent::class => ['beforeEntityUpdated'],AfterEntityUpdatedEvent::class => ['afterEntityUpdated'],];}public function afterEntityPersisted(AfterEntityPersistedEvent $event){$entity = $event->getEntityInstance();if (!($entity instanceof Building)) {return;}if ($entity->getId() && !$entity->getNumberId()) {$entity->setNumberId(sprintf('N°%s%s%s%s', $entity->getCreatedAt()->format('Y'), $entity->getCreatedAt()->format('m'), $entity->getCreatedAt()->format('d'), str_pad($entity->getId(), 8, '0', STR_PAD_LEFT)));}if ($entity->getId() && $entity->getNumberId() == "NULL") {$entity->setNumberId(sprintf('N°%s%s%s%s', $entity->getCreatedAt()->format('Y'), $entity->getCreatedAt()->format('m'), $entity->getCreatedAt()->format('d'), str_pad($entity->getId(), 8, '0', STR_PAD_LEFT)));}if ($entity->getStreetNumber() && $entity->getStreet() && $entity->getCityEntity()) {$address = sprintf('%s %s, %s', $entity->getStreetNumber(), $entity->getStreet(), $entity->getCityEntity()->getCityName());$address = urlencode($address);$response = $this->client->request('GET', 'https://maps.googleapis.com/maps/api/geocode/json', ['query' => ['address' => $address,'key' => $this->parameterBag->get('app.googlemapkey'),],]);$content = $response->toArray();if ($content['status'] === 'OK') {$lat = $content['results'][0]['geometry']['location']['lat'];$lng = $content['results'][0]['geometry']['location']['lng'];$entity->setLat($lat);$entity->setLng($lng);}}$this->entityManager->persist($entity);$this->entityManager->flush();}public function beforeEntityUpdated(BeforeEntityUpdatedEvent $event){$entity = $event->getEntityInstance();if (!($entity instanceof Building)) {return;}$entity->setIsEnd(true);$lastBuildingReportingHistory = $entity->getBuildingReportingHistories()->last();if ($lastBuildingReportingHistory && $lastBuildingReportingHistory->getId() == null) {$this->buildingReportingHistoryService->persist($entity, $lastBuildingReportingHistory);}$buildingEditHistory = new BuildingEditHistory();$buildingEditHistory->setBuilding($entity);$buildingEditHistory->setEditedAt(new \DateTimeImmutable('now', new \DateTimeZone('Europe/Paris')));$this->entityManager->persist($buildingEditHistory);$this->entityManager->flush();$entity->setEditedAt(new \DateTime());$this->entityManager->persist($entity);$this->entityManager->flush();}public function afterEntityUpdated(AfterEntityUpdatedEvent $event){$entity = $event->getEntityInstance();if (!($entity instanceof Building)) {return;}if ($entity->getStreetNumber() && $entity->getStreet() && $entity->getCityEntity()) {$address = sprintf('%s %s, %s', $entity->getStreetNumber(), $entity->getStreet(), $entity->getCityEntity()->getCityName());$address = urlencode($address);$response = $this->client->request('GET', 'https://maps.googleapis.com/maps/api/geocode/json', ['query' => ['address' => $address,'key' => $this->parameterBag->get('app.googlemapkey'),],]);$content = $response->toArray();if ($content['status'] === 'OK') {$lat = $content['results'][0]['geometry']['location']['lat'];$lng = $content['results'][0]['geometry']['location']['lng'];$entity->setLat($lat);$entity->setLng($lng);}$this->entityManager->persist($entity);$this->entityManager->flush();}}}