src/EventSubscriber/BuildingAdminSubscriber.php line 34

  1. <?php
  2. namespace App\EventSubscriber;
  3. use App\Entity\Building;
  4. use App\Entity\BuildingEditHistory;
  5. use App\Entity\BuildingReportingHistory;
  6. use App\Entity\User;
  7. use App\Services\Admin\BuildingReportingHistory\PersistBuildingReportingHistoryService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityPersistedEvent;
  10. use EasyCorp\Bundle\EasyAdminBundle\Event\AfterEntityUpdatedEvent;
  11. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityPersistedEvent;
  12. use EasyCorp\Bundle\EasyAdminBundle\Event\BeforeEntityUpdatedEvent;
  13. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  14. use Symfony\Contracts\HttpClient\HttpClientInterface;
  15. class BuildingAdminSubscriber implements EventSubscriberInterface
  16. {
  17.     public function __construct(private EntityManagerInterface $entityManager, private PersistBuildingReportingHistoryService $buildingReportingHistoryService, private HttpClientInterface $client)
  18.     {
  19.     }
  20.     public static function getSubscribedEvents()
  21.     {
  22.         return [
  23.             AfterEntityPersistedEvent::class => ['afterEntityPersisted'],
  24.             BeforeEntityUpdatedEvent::class => ['beforeEntityUpdated'],
  25.             AfterEntityUpdatedEvent::class => ['afterEntityUpdated'],
  26.         ];
  27.     }
  28.     public function afterEntityPersisted(AfterEntityPersistedEvent $event)
  29.     {
  30.         $entity $event->getEntityInstance();
  31.         if (!($entity instanceof Building)) {
  32.             return;
  33.         }
  34.         if ($entity->getId() && !$entity->getNumberId()) {
  35.             $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)));
  36.         }
  37.         if ($entity->getId() && $entity->getNumberId() == "NULL") {
  38.             $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)));
  39.         }
  40.         if ($entity->getStreetNumber() && $entity->getStreet() && $entity->getCityEntity()) {
  41.             $address sprintf('%s %s, %s'$entity->getStreetNumber(), $entity->getStreet(), $entity->getCityEntity()->getCityName());
  42.             $address urlencode($address);
  43.             $response $this->client->request('GET''https://maps.googleapis.com/maps/api/geocode/json', [
  44.                 'query' => [
  45.                     'address' => $address,
  46.                     'key' => $this->getParameter('app.googlemapkey'),
  47.                 ],
  48.             ]);
  49.             $content $response->toArray();
  50.             if ($content['status'] === 'OK') {
  51.                 $lat $content['results'][0]['geometry']['location']['lat'];
  52.                 $lng $content['results'][0]['geometry']['location']['lng'];
  53.                 $entity->setLat($lat);  // Assumes you have a setLat() method in your Building entity
  54.                 $entity->setLng($lng);  // Assumes you have a setLng() method in your Building entity
  55.             }
  56.         }
  57.         $this->entityManager->persist($entity);
  58.         $this->entityManager->flush();
  59.     }
  60.     public function beforeEntityUpdated(BeforeEntityUpdatedEvent $event)
  61.     {
  62.         $entity $event->getEntityInstance();
  63.         if (!($entity instanceof Building)) {
  64.             return;
  65.         }
  66.         $entity->setIsEnd(true);
  67.         $lastBuildingReportingHistory $entity->getBuildingReportingHistories()->last();
  68.         if ($lastBuildingReportingHistory && $lastBuildingReportingHistory->getId() == null) {
  69.             $this->buildingReportingHistoryService->persist($entity$lastBuildingReportingHistory);
  70.         }
  71.         $buildingEditHistory = new BuildingEditHistory();
  72.         $buildingEditHistory->setBuilding($entity);
  73.         $buildingEditHistory->setEditedAt(new \DateTimeImmutable('now', new \DateTimeZone('Europe/Paris')));
  74.         $this->entityManager->persist($buildingEditHistory);
  75.         $this->entityManager->flush();
  76.         $entity->setEditedAt(new \DateTime());
  77.         $this->entityManager->persist($entity);
  78.         $this->entityManager->flush();
  79.     }
  80.     public function afterEntityUpdated(AfterEntityUpdatedEvent $event)
  81.     {
  82.         $entity $event->getEntityInstance();
  83.         if (!($entity instanceof Building)) {
  84.             return;
  85.         }
  86.         if ($entity->getStreetNumber() && $entity->getStreet() && $entity->getCityEntity()) {
  87.             $address sprintf('%s %s, %s'$entity->getStreetNumber(), $entity->getStreet(), $entity->getCityEntity()->getCityName());
  88.             $address urlencode($address);
  89.             $response $this->client->request('GET''https://maps.googleapis.com/maps/api/geocode/json', [
  90.                 'query' => [
  91.                     'address' => $address,
  92.                     'key' =>  $this->getParameter('app.googlemapkey'),
  93.                 ],
  94.             ]);
  95.             $content $response->toArray();
  96.             if ($content['status'] === 'OK') {
  97.                 $lat $content['results'][0]['geometry']['location']['lat'];
  98.                 $lng $content['results'][0]['geometry']['location']['lng'];
  99.                 $entity->setLat($lat);  // Assumes you have a setLat() method in your Building entity
  100.                 $entity->setLng($lng);  // Assumes you have a setLng() method in your Building entity
  101.             }
  102.             $this->entityManager->persist($entity);
  103.             $this->entityManager->flush();
  104.         }
  105.     }
  106. }