commerce_signifyd-1.0.x-dev/modules/user_order_data/src/EventSubscriber/SignifydCreateCaseSubscriber.php

modules/user_order_data/src/EventSubscriber/SignifydCreateCaseSubscriber.php
<?php

namespace Drupal\user_order_data\EventSubscriber;

use Drupal\commerce_exchanger\ExchangerCalculatorInterface;
use Drupal\commerce_order\Entity\OrderInterface;
use Drupal\commerce_price\Price;
use Drupal\commerce_signifyd\Event\SignifydCreateCaseEvent;
use Drupal\commerce_signifyd\Event\SignifydEvents;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Adds value for AggregateOrderDollars in payload data for createCase.
 */
class SignifydCreateCaseSubscriber implements EventSubscriberInterface {

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * The commerce exchange calculate service.
   *
   * @var \Drupal\commerce_exchanger\ExchangerCalculatorInterface
   */
  protected $commerceExchangerCalculate;

  /**
   * Creates a new SignifydCreateCaseSubscriber object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   * @param \Drupal\commerce_exchanger\ExchangerCalculatorInterface $commerce_exchanger_calculate
   *   The commerce exchange calculate service.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager, ExchangerCalculatorInterface $commerce_exchanger_calculate) {
    $this->entityTypeManager = $entity_type_manager;
    $this->commerceExchangerCalculate = $commerce_exchanger_calculate;
  }

  /**
   * {@inheritdoc}
   */
  public static function getSubscribedEvents(): array {
    return [
      SignifydEvents::SIGNIFYD_CREATE_CASE => ['beforeCreateCase'],
    ];
  }

  /**
   * Sets value for aggregate number in USD.
   *
   * @param \Drupal\commerce_signifyd\Event\SignifydCreateCaseEvent $event
   *   The event.
   */
  public function beforeCreateCase(SignifydCreateCaseEvent $event) {
    $case = $event->getCase();
    if (!empty($case['userAccount']['accountNumber'])) {
      $uid = $case['userAccount']['accountNumber'];
      $user = $this->entityTypeManager->getStorage('user')->load($uid);
      $user_orders = $this->entityTypeManager->getStorage('commerce_order')->loadByProperties(
        [
          'uid' => $user->id(),
          'cart' => 0,
        ]);
      $aggregate_order_dollars = new Price(0, 'USD');
      /** @var \Drupal\commerce_order\Entity\OrderInterface $user_order */
      foreach ($user_orders as $user_order) {
        if ($user_order->getTotalPrice()) {
          if ($user_order->getTotalPrice()->getCurrencyCode() === 'USD') {
            $aggregate_order_dollars = $aggregate_order_dollars->add($user_order->getTotalPrice());
          }
          else {
            $converted_total_price = $this->commerceExchangerCalculate->priceConversion($user_order->getTotalPrice(), 'USD');
            $aggregate_order_dollars = $aggregate_order_dollars->add($converted_total_price);
          }
        }
      }

      $last_order = end($user_orders);

      $case['userAccount']['lastOrderId'] = ($last_order instanceof OrderInterface) ? $last_order->id() : NULL;
      $case['userAccount']['lastUpdateDate'] = ($last_order instanceof OrderInterface) ? date(DATE_ATOM, $last_order->getChangedTime()) : NULL;
      $case['userAccount']['aggregateOrderDollars'] = $aggregate_order_dollars->getNumber();
      $case['userAccount']['aggregateOrderCount'] = count($user_orders);
      $event->setCase($case);
    }

  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc