Newer
Older
TillQliro / Model / QliroOrder / Converter / CustomerConverter.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\Converter;

use Magento\Quote\Model\Quote;
use Qliro\QliroOne\Helper\Data as Helper;

/**
 * QliroOne Order customer Converter class
 */
class CustomerConverter
{
    /**
     * @var \Qliro\QliroOne\Model\QliroOrder\Converter\AddressConverter
     */
    private $addressConverter;

    /**
     * @var \Qliro\QliroOne\Helper\Data
     */
    private $helper;

    /**
     * Inject dependencies
     *
     * @param \Qliro\QliroOne\Model\QliroOrder\Converter\AddressConverter $addressConverter
     * @param \Qliro\QliroOne\Helper\Data $helper
     */
    public function __construct(
        AddressConverter $addressConverter,
        Helper $helper
    ) {
        $this->addressConverter = $addressConverter;
        $this->helper = $helper;
    }

    /**
     * Convert QliroOne order customer info into quote customer
     *
     * @param \Qliro\QliroOne\Api\Data\QliroOrderCustomerInterface $qliroCustomer
     * @param \Magento\Quote\Model\Quote $quote
     */
    public function convert($qliroCustomer, Quote $quote)
    {
        if ($qliroCustomer) {
            $customer = $quote->getCustomer();
            $qliroAddress = $qliroCustomer->getAddress();

            $customerData = [
                'email' => $qliroCustomer->getEmail(),
            ];

            foreach ($customerData as $key => $value) {
                if ($value !== null) {
                    $customer->setData($key, $value);
                }
            }

            if ($qliroAddress) {
                $billingAddress = $quote->getBillingAddress();
                $this->addressConverter->convert($qliroAddress, $qliroCustomer, $billingAddress);

                if (!$quote->isVirtual()) {
                    $shippingAddress = $quote->getShippingAddress();
                    $this->addressConverter->convert($qliroAddress, $qliroCustomer, $shippingAddress);
                    $shippingAddress->setSameAsBilling($this->helper->doAddressesMatch($shippingAddress, $billingAddress));
                }
            }
        }
    }
}