Newer
Older
TillQliro / Model / QliroOrder / Builder / ShippingConfigBuilder.php
@Jonas Jonsson Jonas Jonsson on 2 Apr 2024 2 KB Initial
<?php
/**
 * Copyright © Qliro AB. All rights reserved.
 * See LICENSE.txt for license details.
 */

namespace Qliro\QliroOne\Model\QliroOrder\Builder;

use Magento\Framework\Event\ManagerInterface;
use Magento\Quote\Model\Quote;
use Qliro\QliroOne\Api\Data\QliroOrderShippingConfigInterfaceFactory;
use Qliro\QliroOne\Model\Config;

/**
 * Shipping Config Builder class
 */
class ShippingConfigBuilder
{
    /**
     * @var \Magento\Quote\Model\Quote
     */
    private $quote;

    /**
     * @var \Qliro\QliroOne\Api\Data\QliroOrderShippingConfigInterfaceFactory
     */
    private $shippingConfigFactory;

    /**
     * @var ShippingConfigUnifaunBuilder
     */
    private $shippingConfigUnifaunBuilder;

    /**
     * @var \Magento\Framework\Event\ManagerInterface
     */
    private $eventManager;

    /**
     * @var Config
     */
    private $qliroConfig;
    /**
     * Inject dependencies
     *
     * @param \Qliro\QliroOne\Api\Data\QliroOrderShippingConfigInterfaceFactory $shippingConfigFactory
     * @param ShippingConfigUnifaunBuilder $shippingConfigUnifaunBuilder
     * @param \Magento\Framework\Event\ManagerInterface $eventManager
     * @param Config $qliroConfig
     */
    public function __construct(
        QliroOrderShippingConfigInterfaceFactory $shippingConfigFactory,
        ShippingConfigUnifaunBuilder $shippingConfigUnifaunBuilder,
        ManagerInterface $eventManager,
        Config $qliroConfig
    ) {
        $this->shippingConfigFactory = $shippingConfigFactory;
        $this->shippingConfigUnifaunBuilder = $shippingConfigUnifaunBuilder;
        $this->eventManager = $eventManager;
        $this->qliroConfig = $qliroConfig;
    }

    /**
     * Set quote for data extraction
     *
     * @param \Magento\Quote\Model\Quote $quote
     * @return $this
     */
    public function setQuote(Quote $quote)
    {
        $this->quote = $quote;

        return $this;
    }

    /**
     * Create a QliroOne order shipping Config container
     *
     * @return \Qliro\QliroOne\Api\Data\QliroOrderShippingConfigInterface
     */
    public function create()
    {
        if (empty($this->quote)) {
            throw new \LogicException('Quote entity is not set.');
        }
        if (!$this->qliroConfig->isUnifaunEnabled($this->quote->getStoreId())) {
            return null;
        }
        if ($this->quote->isVirtual()) {
            return null;
        }

        /** @var \Qliro\QliroOne\Api\Data\QliroOrderShippingConfigInterface $container */
        $container = $this->shippingConfigFactory->create();
        $unifaunContainer = $this->shippingConfigUnifaunBuilder->setQuote($this->quote)->create();
        $container->setUnifaun($unifaunContainer);

        $this->eventManager->dispatch(
            'qliroone_shipping_config_build_after',
            [
                'quote' => $this->quote,
                'container' => $container,
            ]
        );

        $this->quote = null;

        return $container;
    }
}