custom/plugins/CioBudget/src/Subscriber/OrderPlaced.php line 113

Open in your IDE?
  1. <?php
  2. namespace CioBudget\Subscriber;
  3. use CioBudget\Definition\BudgetDivision\BudgetDivisionEntity;
  4. use CioBudget\Service\SessionService;
  5. use CioMasterdata\Definition\Masterdata\MasterdataEntity;
  6. use CioMasterdata\Service\MasterdataService;
  7. use CioPromotionalOfficeApi\Event\AdditionalDataCollectAfterEvent;
  8. use CioPromotionalOfficeApi\Event\ImportFieldsCollectAfterEvent;
  9. use CioPromotionalOfficeApi\Event\ItemAddEvent;
  10. use Shopware\Core\Checkout\Cart\Event\CheckoutOrderPlacedEvent;
  11. use Shopware\Core\Checkout\Customer\CustomerEntity;
  12. use Shopware\Core\Framework\Context;
  13. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepositoryInterface;
  14. use Shopware\Core\Framework\DataAbstractionLayer\Search\Criteria;
  15. use Shopware\Core\Framework\DataAbstractionLayer\Search\Filter\EqualsFilter;
  16. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  17. class OrderPlaced implements EventSubscriberInterface
  18. {
  19.     const KEY_SALESREP_ORDERNUMBER 'salesrepresentative_ordernumber';
  20.     private EntityRepositoryInterface $orderRepository;
  21.     private SessionService $sessionService;
  22.     private EntityRepositoryInterface $budgetDivisionRepository;
  23.     private EntityRepositoryInterface $customerRepository;
  24.     private MasterdataService $masterdataService;
  25.     public function __construct(EntityRepositoryInterface $orderRepositoryEntityRepositoryInterface $budgetDivisionRepositoryEntityRepositoryInterface $customerRepositoryMasterdataService $masterdataService)
  26.     {
  27.         $this->orderRepository $orderRepository;
  28.         $this->budgetDivisionRepository $budgetDivisionRepository;
  29.         $this->customerRepository $customerRepository;
  30.         $this->masterdataService $masterdataService;
  31.     }
  32.     public function setSessionService(SessionService $sessionService)
  33.     {
  34.         $this->sessionService $sessionService;
  35.     }
  36.     public static function getSubscribedEvents(): array
  37.     {
  38.         return [
  39.             CheckoutOrderPlacedEvent::class => 'onCheckoutOrderPlaced',
  40.             ImportFieldsCollectAfterEvent::class => 'onImportFieldsCollectAfter',
  41.             AdditionalDataCollectAfterEvent::class => 'onAdditionalDataCollectAfter',
  42.             ItemAddEvent::class => 'onItemAddEvent'
  43.         ];
  44.     }
  45.     public function onCheckoutOrderPlaced(CheckoutOrderPlacedEvent $event): void
  46.     {
  47.         $order $event->getOrder();
  48.         $budget $this->sessionService->getBudgetEntityFromSession($event->getContext());
  49.         if ($budget) {
  50.             $customFields $order->getCustomFields();
  51.             $division $this->budgetDivisionRepository->search(new Criteria([$budget->getStore()->getDivisionId()]), $event->getContext())->first();
  52.             if ($division instanceof BudgetDivisionEntity) {
  53.                 $customFields[self::KEY_SALESREP_ORDERNUMBER] = $division->getOrdernumber();
  54.                 $order->setCustomFields($customFields);
  55.                 $this->orderRepository->update([
  56.                     [
  57.                         'id' => $order->getId(),
  58.                         'customFields' => $order->getCustomFields()
  59.                     ]
  60.                 ], Context::createDefaultContext());
  61.             }
  62.         }
  63.     }
  64.     public function onImportFieldsCollectAfter(ImportFieldsCollectAfterEvent $event): void
  65.     {
  66.         $order $event->getOrder();
  67.         $customFields $order->getCustomFields();
  68.         $customerCriteria = (new Criteria())->addFilter(new EqualsFilter('id'$order->getOrderCustomer()->getCustomerId()));
  69.         $customerEntity $this->customerRepository->search($customerCriteriaContext::createDefaultContext())->first();
  70.         $vpNumber null;
  71.         if ($customerEntity instanceof CustomerEntity) {
  72.             $masterDataEntities $this->masterdataService->getMasterdatasForCustomer($customerEntity);
  73.             if (count($masterDataEntities) && $masterDataEntities->first() instanceof MasterdataEntity) {
  74.                 /** @var MasterdataEntity $masterDataEntity */
  75.                 $masterDataEntity $masterDataEntities->first();
  76.                 $vpNumber $masterDataEntity->getVpNummer();
  77.             }
  78.         }
  79.         if (is_array($customFields)) {
  80.             foreach ($event->getImportFields()->ImportFieldDataItem as $importField) {
  81.                 if ($importField->FieldIdentifier == 'Indent.CustomerText') {
  82.                     $importField->FieldData join(' / ', [$importField->FieldData$vpNumber]);
  83.                 }
  84.             }
  85.         }
  86.         $event->getImportFields()->Add('Indent.PaymentModes''Indent.PaymentModes1');
  87.     }
  88.     public function onAdditionalDataCollectAfter(AdditionalDataCollectAfterEvent $event): void
  89.     {
  90.         $event->getAdditionalData()->Add('Indent.PaymentModes1.Name'14);
  91.     }
  92.     public function onItemAddEvent(ItemAddEvent $event): void
  93.     {
  94.         $customFields $event->getOrder()->getCustomFields();
  95.         if (array_key_exists(self::KEY_SALESREP_ORDERNUMBER$customFields)) {
  96.             $event->getAdditionalData()->Add($event->getApi()->getItemPositionKey('CustomerArticleIndentText'), $customFields[self::KEY_SALESREP_ORDERNUMBER]);
  97.         }
  98.     }
  99. }