Skip to content

Commit fe86d50

Browse files
Derrick HeesbeenDerrick Heesbeen
authored andcommitted
[BUGFIX] Billingaddress extra address field save and transport to order, removed duplicate code
1 parent d1cb296 commit fe86d50

6 files changed

Lines changed: 84 additions & 48 deletions

File tree

Helper/Data.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,26 @@ public function getExtraCheckoutAddressFields($fieldset='extra_checkout_billing_
3232
return $extraCheckoutFields;
3333

3434
}
35+
36+
public function transportFieldsFromExtensionAttributesToObject(
37+
$fromObject,
38+
$toObject,
39+
$fieldset='extra_checkout_billing_address_fields'
40+
)
41+
{
42+
foreach($this->getExtraCheckoutAddressFields($fieldset) as $extraField) {
43+
44+
$set = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
45+
$get = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
46+
47+
$value = $fromObject->$get();
48+
try {
49+
$toObject->$set($value);
50+
} catch (\Exception $e) {
51+
$this->logger->critical($e->getMessage());
52+
}
53+
}
54+
55+
return $toObject;
56+
}
3557
}

Observer/Sales/ModelServiceQuoteSubmitBefore.php

Lines changed: 11 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -38,27 +38,16 @@ public function execute(
3838

3939
$quote = $this->quoteRepository->get($order->getQuoteId());
4040

41-
foreach($this->helper->getExtraCheckoutAddressFields('extra_checkout_billing_address_fields') as $extraField) {
42-
$set = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
43-
$get = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
44-
45-
try {
46-
$order->getBillingAddress()->$set($quote->getBillingAddress()->$get())->save();
47-
} catch (\Exception $e) {
48-
$this->logger->critical($e->getMessage());
49-
}
50-
}
51-
52-
foreach($this->helper->getExtraCheckoutAddressFields('extra_checkout_shipping_address_fields') as $extraField) {
53-
$set = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
54-
$get = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
55-
56-
try {
57-
$order->getShippingAddress()->$set($quote->getShippingAddress()->$get())->save();
58-
} catch (\Exception $e) {
59-
$this->logger->critical($e->getMessage());
60-
}
61-
}
62-
41+
$this->helper->transportFieldsFromExtensionAttributesToObject(
42+
$quote->getBillingAddress(),
43+
$order->getBillingAddress(),
44+
'extra_checkout_billing_address_fields'
45+
);
46+
47+
$this->helper->transportFieldsFromExtensionAttributesToObject(
48+
$quote->getShippingAddress(),
49+
$order->getShippingAddress(),
50+
'extra_checkout_shipping_address_fields'
51+
);
6352
}
6453
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
<?php
2+
3+
4+
namespace Experius\ExtraCheckoutAddressFields\Plugin\Magento\Checkout\Model;
5+
6+
class PaymentInformationManagement
7+
{
8+
9+
protected $helper;
10+
11+
protected $logger;
12+
13+
public function __construct(
14+
\Psr\Log\LoggerInterface $logger,
15+
\Experius\ExtraCheckoutAddressFields\Helper\Data $helper
16+
) {
17+
$this->logger = $logger;
18+
$this->helper = $helper;
19+
}
20+
21+
public function beforeSavePaymentInformation(
22+
\Magento\Checkout\Model\PaymentInformationManagement $subject,
23+
$cartId,
24+
\Magento\Quote\Api\Data\PaymentInterface $paymentMethod,
25+
\Magento\Quote\Api\Data\AddressInterface $address
26+
) {
27+
28+
$extAttributes = $address->getExtensionAttributes();
29+
if (!empty($extAttributes)) {
30+
$this->helper->transportFieldsFromExtensionAttributesToObject(
31+
$extAttributes,
32+
$address,
33+
'extra_checkout_billing_address_fields'
34+
);
35+
}
36+
37+
}
38+
}

Plugin/Magento/Quote/Model/BillingAddressManagement.php

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,11 @@ public function beforeAssign(
2727

2828
$extAttributes = $address->getExtensionAttributes();
2929
if (!empty($extAttributes)) {
30-
31-
foreach($this->helper->getExtraCheckoutAddressFields('extra_checkout_billing_address_fields') as $extraField) {
32-
33-
$set = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
34-
$get = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
35-
36-
$value = $extAttributes->$get();
37-
try {
38-
$address->$set($value);
39-
} catch (\Exception $e) {
40-
$this->logger->critical($e->getMessage());
41-
}
42-
}
30+
$this->helper->transportFieldsFromExtensionAttributesToObject(
31+
$extAttributes,
32+
$address,
33+
'extra_checkout_billing_address_fields'
34+
);
4335
}
4436

4537
}

Plugin/Magento/Quote/Model/ShippingAddressManagement.php

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,11 @@ public function beforeAssign(
2727
$extAttributes = $address->getExtensionAttributes();
2828

2929
if (!empty($extAttributes)) {
30-
31-
foreach($this->helper->getExtraCheckoutAddressFields('extra_checkout_shipping_address_fields') as $extraField) {
32-
33-
$set = 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
34-
$get = 'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $extraField)));
35-
36-
$value = $extAttributes->$get();
37-
try {
38-
$address->$set($value);
39-
} catch (\Exception $e) {
40-
$this->logger->critical($e->getMessage());
41-
}
42-
}
30+
$this->helper->transportFieldsFromExtensionAttributesToObject(
31+
$extAttributes,
32+
$address,
33+
'extra_checkout_shipping_address_fields'
34+
);
4335
}
4436

4537
}

etc/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,7 @@
66
<type name="Magento\Quote\Model\ShippingAddressManagement">
77
<plugin disabled="false" name="Experius_ExtraCheckoutAddressFields_Plugin_Magento_Quote_Model_ShippingAddressManagement" sortOrder="10" type="Experius\ExtraCheckoutAddressFields\Plugin\Magento\Quote\Model\ShippingAddressManagement"/>
88
</type>
9+
<type name="Magento\Checkout\Model\PaymentInformationManagement">
10+
<plugin disabled="false" name="Experius_ExtraCheckoutAddressFields_Plugin_Magento_Checkout_Model_PaymentInformationManagement" sortOrder="10" type="Experius\ExtraCheckoutAddressFields\Plugin\Magento\Checkout\Model\PaymentInformationManagement"/>
11+
</type>
912
</config>

0 commit comments

Comments
 (0)