66 lines
2.2 KiB
PHP
66 lines
2.2 KiB
PHP
<?php
|
|
namespace Stemcell\ChineseDirectory\Plugin\ShippingAddress;
|
|
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Quote\Model\Quote;
|
|
use Psr\Log\LoggerInterface;
|
|
use Magento\Framework\DataObject\Copy\Config;
|
|
use \Magento\Quote\Api\Data\AddressInterface;
|
|
|
|
class ExtensionAttribute
|
|
{
|
|
/**
|
|
* @var Config
|
|
*/
|
|
protected Config $fieldsetConfig;
|
|
|
|
public function __construct(
|
|
Config $config
|
|
) {
|
|
$this->fieldsetConfig = $config;
|
|
}
|
|
|
|
public function afterGetShippingAddress(Quote $quote, Quote\Address $result) {
|
|
/* @var $logger LoggerInterface */
|
|
$logger = ObjectManager::getInstance()->get(LoggerInterface::class);
|
|
$aspect = 'to_customer_address';
|
|
$fields = $this->fieldsetConfig->getFieldset('sales_convert_quote_address');
|
|
$extensionAttributes = $result->getExtensionAttributes();
|
|
|
|
foreach ($fields as $code => $node) {
|
|
if (empty($node[$aspect])) {
|
|
continue;
|
|
}
|
|
$method = 'set' . str_replace('_', '', ucwords($code, '_'));
|
|
|
|
if (method_exists($extensionAttributes, $method) && $result->getData($code)) {
|
|
$extensionAttributes->$method($result->getData($code));
|
|
$result->setCustomAttribute($code, $result->getData($code));
|
|
}
|
|
}
|
|
return $result;
|
|
|
|
}
|
|
|
|
public function beforeSetShippingAddress(Quote $quote, AddressInterface $address) {
|
|
|
|
$aspect = 'to_customer_address';
|
|
$fields = $this->fieldsetConfig->getFieldset('sales_convert_quote_address');
|
|
$extensionAttributes = $address->getExtensionAttributes();
|
|
$shippingAddress = $quote->getAddressesCollection()->getItemById($address->getId())
|
|
?? $quote->getShippingAddress();
|
|
foreach ($fields as $code => $node) {
|
|
if (empty($node[$aspect])) {
|
|
continue;
|
|
}
|
|
$method = 'get' . str_replace('_', '', ucwords($code, '_'));
|
|
|
|
if (method_exists($extensionAttributes, $method) && $extensionAttributes->$method()) {
|
|
$shippingAddress->addData([ $code => $extensionAttributes->$method()]);
|
|
}
|
|
}
|
|
return [$address];
|
|
|
|
}
|
|
}
|