custom/plugins/PickwareErpStarter/src/SupplierOrder/Model/Subscriber/DeliveryDateUpdateSubscriber.php line 37

Open in your IDE?
  1. <?php
  2. /*
  3.  * Copyright (c) Pickware GmbH. All rights reserved.
  4.  * This file is part of software that is released under a proprietary license.
  5.  * You must not copy, modify, distribute, make publicly available, or execute
  6.  * its contents or parts thereof without express permission by the copyright
  7.  * holder, unless otherwise permitted by law.
  8.  */
  9. declare(strict_types=1);
  10. namespace Pickware\PickwareErpStarter\SupplierOrder\Model\Subscriber;
  11. use DateInterval;
  12. use DateTime;
  13. use Pickware\DalBundle\EntityManager;
  14. use Pickware\PickwareErpStarter\SupplierOrder\Model\SupplierOrderDefinition;
  15. use Pickware\PickwareErpStarter\SupplierOrder\Model\SupplierOrderEntity;
  16. use Pickware\PickwareErpStarter\SupplierOrder\SupplierOrderStateMachine;
  17. use Shopware\Core\System\StateMachine\Event\StateMachineTransitionEvent;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. class DeliveryDateUpdateSubscriber implements EventSubscriberInterface
  20. {
  21.     public EntityManager $entityManager;
  22.     public function __construct(EntityManager $entityManager)
  23.     {
  24.         $this->entityManager $entityManager;
  25.     }
  26.     public static function getSubscribedEvents(): array
  27.     {
  28.         return [StateMachineTransitionEvent::class => 'setDeliveryDateForSupplierOrdersOnStateChange'];
  29.     }
  30.     public function setDeliveryDateForSupplierOrdersOnStateChange(StateMachineTransitionEvent $event): void
  31.     {
  32.         if ($event->getEntityName() !== SupplierOrderDefinition::ENTITY_NAME
  33.             || $event->getToPlace()->getTechnicalName() !== SupplierOrderStateMachine::STATE_CONFIRMED
  34.         ) {
  35.             return;
  36.         }
  37.         /** @var SupplierOrderEntity $supplierOrder */
  38.         $supplierOrder $this->entityManager->getByPrimaryKey(
  39.             SupplierOrderDefinition::class,
  40.             $event->getEntityId(),
  41.             $event->getContext(),
  42.             ['supplier'],
  43.         );
  44.         $defaultDeliveryTime $supplierOrder->getSupplier()->getDefaultDeliveryTime();
  45.         // Do not overwrite the delivery date if any is set
  46.         if (!$defaultDeliveryTime || $supplierOrder->getDeliveryDate()) {
  47.             return;
  48.         }
  49.         $this->entityManager->update(
  50.             SupplierOrderDefinition::class,
  51.             [
  52.                 [
  53.                     'id' => $event->getEntityId(),
  54.                     'deliveryDate' => (new DateTime('today'))->add(new DateInterval(sprintf('P%sD'$defaultDeliveryTime))),
  55.                 ],
  56.             ],
  57.             $event->getContext(),
  58.         );
  59.     }
  60. }