src/Component/Core/Vendor/EventListener/OrganizationVendorRegisterListener.php line 35

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Core\Vendor\EventListener;
  4. use BitBag\OpenMarketplace\Component\Customer\Model\CustomerInterface;
  5. use BitBag\OpenMarketplace\Component\Organization\Entity\OrganizationInterface;
  6. use BitBag\OpenMarketplace\Component\Vendor\Entity\Address;
  7. use BitBag\OpenMarketplace\Component\Vendor\Entity\VendorInterface;
  8. use BitBag\OpenMarketplace\Component\Vendor\Profile\Factory\ProfileFactoryInterface;
  9. use Doctrine\ORM\EntityManager;
  10. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  11. use Sylius\Component\Addressing\Model\CountryInterface;
  12. use Sylius\Component\Core\Formatter\StringInflector;
  13. use Sylius\Component\Resource\Repository\RepositoryInterface;
  14. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  15. class OrganizationVendorRegisterListener implements EventSubscriberInterface
  16. {
  17.     public function __construct(
  18.         private ProfileFactoryInterface $profileFactory,
  19.         private EntityManager $entityManager,
  20.         private RepositoryInterface $countryRepository,
  21.         ) {
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             'sylius.customer.post_register' => ['onOrganizationVendorCreate'99],
  27.         ];
  28.     }
  29.     public function onOrganizationVendorCreate(ResourceControllerEvent $event): void
  30.     {
  31.         /** @var CustomerInterface $customer */
  32.         $customer $event->getSubject();
  33.         /** @var OrganizationInterface $organization */
  34.         $organization $customer->getOrganization();
  35.         if (true === $organization->isVendorRegister()) {
  36.             $billingData $organization->getBillingData();
  37.             /** @var CountryInterface $country */
  38.             $country $this->countryRepository->findOneBy(
  39.                 ['code' => $billingData->getCountry()],
  40.             );
  41.             $vendorAddress = new Address();
  42.             $vendorAddress->setPostalCode($billingData->getPostcode());
  43.             $vendorAddress->setCountry($country);
  44.             $vendorAddress->setCity($billingData->getCity());
  45.             $vendorAddress->setStreet($billingData->getStreet());
  46.             /** @var VendorInterface $vendor */
  47.             $vendor $this->profileFactory->createVendor(
  48.                 $organization->getName(),
  49.                 $billingData->getTaxId(),
  50.                 $organization->getPhoneNumber(),
  51.                 $vendorAddress
  52.             );
  53.             $vendor->setSlug(
  54.                 StringInflector::nameToSlug($organization->getName())
  55.             );
  56.             $vendor->setOrganization($organization);
  57.             $this->entityManager->persist($vendor);
  58.             $organization->setVendor($vendor);
  59.             $this->entityManager->persist($organization);
  60.             $this->entityManager->flush();
  61.         }
  62.     }
  63. }