6 declare(strict_types=1);
15 use Magento\Customer\Api\Data\AddressInterfaceFactory as AddressFactory;
16 use Magento\Customer\Api\Data\RegionInterfaceFactory as RegionFactory;
17 use Magento\Customer\Api\Data\CustomerInterfaceFactory as CustomerFactory;
18 use Magento\Quote\Api\Data\AddressInterfaceFactory as QuoteAddressFactory;
29 private $orderRepository;
34 private $customerRepository;
39 private $objectCopyService;
44 private $addressFactory;
49 private $regionFactory;
54 private $customerFactory;
59 private $quoteAddressFactory;
74 AddressFactory $addressFactory,
75 RegionFactory $regionFactory,
76 CustomerFactory $customerFactory,
77 QuoteAddressFactory $quoteAddressFactory
81 $this->objectCopyService = $objectCopyService;
83 $this->regionFactory = $regionFactory;
85 $this->quoteAddressFactory = $quoteAddressFactory;
96 $order = $this->orderRepository->get($orderId);
99 if (
$order->getCustomerId()) {
100 return $this->customerRepository->getById(
$order->getCustomerId());
104 $customerData = $this->objectCopyService->copyFieldsetToTarget(
107 $order->getBillingAddress(),
111 $processedAddressData = [];
112 $customerAddresses = [];
113 foreach (
$order->getAddresses() as $orderAddress) {
115 ->copyFieldsetToTarget(
'order_address',
'to_customer_address', $orderAddress, []);
123 if (is_string($orderAddress->getRegion())) {
125 $region = $this->regionFactory->create();
126 $region->setRegion($orderAddress->getRegion());
127 $region->setRegionCode($orderAddress->getRegionCode());
128 $region->setRegionId($orderAddress->getRegionId());
134 $index = count($processedAddressData) - 1;
139 if ($orderAddress->getAddressType() == OrderAddress::TYPE_BILLING) {
142 if ($orderAddress->getAddressType() == OrderAddress::TYPE_SHIPPING) {
149 return $this->customerFactory->create([
'data' =>
$customerData]);