<?php
namespace CioBudget\Subscriber;
use CioBudget\Definition\Budget\BudgetEntity;
use CioBudget\Definition\BudgetStore\BudgetStoreEntity;
use Shopware\Core\Framework\Context;
use Shopware\Core\Framework\DataAbstractionLayer\Event\BeforeDeleteEvent;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
use Shopware\Core\Framework\Uuid\Uuid;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class DeactivateBudgetOnDeleteStore implements EventSubscriberInterface
{
private ContainerInterface $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public static function getSubscribedEvents()
{
return [
BeforeDeleteEvent::class => 'onEntityDeletedEvent'
];
}
public function onEntityDeletedEvent(BeforeDeleteEvent $event)
{
$ids = $event->getIds('cio_budget_store');
// allow only valid uuids in the array
$ids = array_filter($ids, function ($id) {
return is_string($id) && Uuid::isValid($id);
});
// don't search for entities if there are no ids
if (count($ids) > 0) {
$cioBudgetStoreRepository = $this->container->get('cio_budget_store.repository');
$entities = $cioBudgetStoreRepository->search(new Criteria($ids), Context::createDefaultContext())->getEntities();
/** @var BudgetStoreEntity $entity */
foreach ($entities as $entity) {
$cioBudgetRepository = $this->container->get('cio_budget.repository');
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('store_id', $entity->getId()));
$budgets = $cioBudgetRepository->search($criteria, Context::createDefaultContext())->getEntities();
/** @var BudgetEntity $budget */
foreach ($budgets as $budget) {
$cioBudgetRepository->update([
[
'id' => $budget->getId(),
'active_from' => '1999-01-01',
'active_to' => '1999-01-02'
]
], Context::createDefaultContext());
}
}
}
}
}