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

/**
 * QliroOne order address converter class
 */
class AddressConverter
{
    /**
     * Convert given quote address from QliroOne address and other parameters
     *
     * @param \Qliro\QliroOne\Api\Data\QliroOrderCustomerAddressInterface $qliroAddress
     * @param \Qliro\QliroOne\Api\Data\QliroOrderCustomerInterface $qliroCustomer
     * @param \Magento\Quote\Model\Quote\Address $address
     * @param string|null $countryCode
     */
    public function convert(
        $qliroAddress,
        $qliroCustomer,
        Address $address,
        $countryCode = null
    ) {
        $addressData = [
            'firstname' => $qliroAddress ? $qliroAddress->getFirstName() : null,
            'lastname' => $qliroAddress ? $qliroAddress->getLastName() : null,
            'email' => $qliroCustomer? $qliroCustomer->getEmail() : null,
            'care_of' => $qliroAddress ? $qliroAddress->getCareOf() : null, // Is ignored for now if no attribute
            'street' => $qliroAddress ? $qliroAddress->getStreet() : null,
            'telephone' => $qliroCustomer ? $qliroCustomer->getMobileNumber() : null,
            'city' => $qliroAddress ? $qliroAddress->getCity() : null,
            'postcode' => $qliroAddress ? $qliroAddress->getPostalCode() : null,
            'company' => $qliroAddress ? $qliroAddress->getCompanyName() : null,
        ];

        $changed = false;
        foreach ($addressData as $key => $value) {
            if ($value !== null && $address->getData($key) != $value) {
                $address->setData($key, $value);
                $changed = true;
            }
        }

        if (!$address->getCountryId() && $countryCode !== null) {
            $address->setCountryId($countryCode);
            $changed = true;
        }

        if ($changed && $address->getCustomerAddressId()) {
            $address->setCustomerAddressId(null);
        }
    }
}