custom/plugins/CioBudget/src/Subscriber/DeactivateBudgetOnDeleteStore.php line 31

Open in your IDE?
  1. <?php
  2. namespace CioBudget\Subscriber;
  3. use CioBudget\Definition\Budget\BudgetEntity;
  4. use CioBudget\Definition\BudgetStore\BudgetStoreEntity;
  5. use Shopware\Core\Framework\Context;
  6. use Shopware\Core\Framework\DataAbstractionLayer\Event\BeforeDeleteEvent;
  7. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  8. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  9. use Shopware\Core\Framework\Uuid\Uuid;
  10. use Symfony\Component\DependencyInjection\ContainerInterface;
  11. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12. class DeactivateBudgetOnDeleteStore implements EventSubscriberInterface
  13. {
  14.     private ContainerInterface $container;
  15.     public function __construct(ContainerInterface $container)
  16.     {
  17.         $this->container $container;
  18.     }
  19.     public static function getSubscribedEvents()
  20.     {
  21.         return [
  22.             BeforeDeleteEvent::class => 'onEntityDeletedEvent'
  23.         ];
  24.     }
  25.     public function onEntityDeletedEvent(BeforeDeleteEvent $event)
  26.     {
  27.         $ids $event->getIds('cio_budget_store');
  28.         // allow only valid uuids in the array
  29.         $ids array_filter($ids, function ($id) {
  30.             return is_string($id) && Uuid::isValid($id);
  31.         });
  32.         // don't search for entities if there are no ids
  33.         if (count($ids) > 0) {
  34.             $cioBudgetStoreRepository $this->container->get('cio_budget_store.repository');
  35.             $entities $cioBudgetStoreRepository->search(new Criteria($ids), Context::createDefaultContext())->getEntities();
  36.             /** @var BudgetStoreEntity $entity */
  37.             foreach ($entities as $entity) {
  38.                 $cioBudgetRepository $this->container->get('cio_budget.repository');
  39.                 $criteria = new Criteria();
  40.                 $criteria->addFilter(new EqualsFilter('store_id'$entity->getId()));
  41.                 $budgets $cioBudgetRepository->search($criteriaContext::createDefaultContext())->getEntities();
  42.                 /** @var BudgetEntity $budget */
  43.                 foreach ($budgets as $budget) {
  44.                     $cioBudgetRepository->update([
  45.                         [
  46.                             'id' => $budget->getId(),
  47.                             'active_from' => '1999-01-01',
  48.                             'active_to' => '1999-01-02'
  49.                         ]
  50.                     ], Context::createDefaultContext());
  51.                 }
  52.             }
  53.         }
  54.     }
  55. }