Skip to content

Commit b3a649a

Browse files
authored
Order extension attributes (#520)
* order extension attributes * order extension attributes * order extension attributes * delete unused stuff
1 parent 4456b32 commit b3a649a

File tree

6 files changed

+210
-33
lines changed

6 files changed

+210
-33
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* Copyright (c) Meta Platforms, Inc. and affiliates.
7+
*
8+
* Licensed under the Apache License, Version 2.0 (the "License");
9+
* you may not use this file except in compliance with the License.
10+
* You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing, software
15+
* distributed under the License is distributed on an "AS IS" BASIS,
16+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
* See the License for the specific language governing permissions and
18+
* limitations under the License.
19+
*/
20+
21+
namespace Meta\Sales\Helper;
22+
23+
use Meta\Sales\Api\Data\FacebookOrderInterfaceFactory;
24+
use Magento\Sales\Api\Data\OrderExtensionFactory;
25+
use Magento\Sales\Api\Data\OrderInterface;
26+
27+
class OrderHelper
28+
{
29+
/**
30+
* @var OrderExtensionFactory
31+
*/
32+
private $orderExtensionFactory;
33+
34+
/**
35+
* @var FacebookOrderInterfaceFactory
36+
*/
37+
private $facebookOrderFactory;
38+
39+
/**
40+
* @param OrderExtensionFactory $orderExtensionFactory
41+
* @param FacebookOrderInterfaceFactory $facebookOrderFactory
42+
*/
43+
public function __construct(
44+
OrderExtensionFactory $orderExtensionFactory,
45+
FacebookOrderInterfaceFactory $facebookOrderFactory,
46+
) {
47+
$this->orderExtensionFactory = $orderExtensionFactory;
48+
$this->facebookOrderFactory = $facebookOrderFactory;
49+
}
50+
51+
/**
52+
* Assign Meta order's extension attributes such as facebook_order_id to a Magento order
53+
*
54+
* @param OrderInterface $order
55+
* @return void
56+
*/
57+
public function setFacebookOrderExtensionAttributes(OrderInterface $order)
58+
{
59+
// if FB order ID present, do nothing
60+
if ($order->getExtensionAttributes()->getFacebookOrderId()) {
61+
return;
62+
}
63+
64+
/** @var \Meta\Sales\Api\Data\FacebookOrderInterface $facebookOrder */
65+
$facebookOrder = $this->facebookOrderFactory->create();
66+
$facebookOrder->load($order->getId(), 'magento_order_id');
67+
68+
if (!$facebookOrder->getId()) {
69+
return;
70+
}
71+
72+
$emailRemarketingOption = ($facebookOrder->getExtraData()['email_remarketing_option'] ?? false) === true;
73+
74+
$extensionAttributes = $order->getExtensionAttributes() ?: $this->orderExtensionFactory->create();
75+
$extensionAttributes->setFacebookOrderId($facebookOrder->getFacebookOrderId())
76+
->setChannel($facebookOrder->getChannel())
77+
->setEmailRemarketingOption($emailRemarketingOption);
78+
$order->setExtensionAttributes($extensionAttributes);
79+
}
80+
}

app/code/Meta/Sales/Model/Order/Shipper.php

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
use Meta\BusinessExtension\Helper\GraphAPIAdapter;
3030
use Meta\BusinessExtension\Model\System\Config as SystemConfig;
3131
use Meta\Catalog\Model\Config\Source\Product\Identifier as IdentifierConfig;
32+
use Meta\Sales\Helper\OrderHelper;
3233
use Meta\Sales\Helper\ShippingHelper;
3334

3435
class Shipper
@@ -52,19 +53,27 @@ class Shipper
5253
*/
5354
private ShippingHelper $shippingHelper;
5455

56+
/**
57+
* @var OrderHelper
58+
*/
59+
private OrderHelper $orderHelper;
60+
5561
/**
5662
* @param SystemConfig $systemConfig
5763
* @param GraphAPIAdapter $graphAPIAdapter
5864
* @param ShippingHelper $shippingHelper
65+
* @param OrderHelper $orderHelper
5966
*/
6067
public function __construct(
6168
SystemConfig $systemConfig,
6269
GraphAPIAdapter $graphAPIAdapter,
63-
ShippingHelper $shippingHelper
70+
ShippingHelper $shippingHelper,
71+
OrderHelper $orderHelper
6472
) {
6573
$this->systemConfig = $systemConfig;
6674
$this->graphAPIAdapter = $graphAPIAdapter;
6775
$this->shippingHelper = $shippingHelper;
76+
$this->orderHelper = $orderHelper;
6877
}
6978

7079
/**
@@ -143,12 +152,16 @@ private function validateFulfillmentAddress(array $address)
143152
*/
144153
public function markAsShipped(Shipment $shipment)
145154
{
146-
$storeId = $shipment->getOrder()->getStoreId();
147-
$fbOrderId = $shipment->getOrder()->getExtensionAttributes()->getFacebookOrderId();
155+
$order = $shipment->getOrder();
156+
157+
$this->orderHelper->setFacebookOrderExtensionAttributes($order);
158+
$fbOrderId = $order->getExtensionAttributes()->getFacebookOrderId();
148159
if (!$fbOrderId) {
149160
return;
150161
}
151162

163+
$storeId = $order->getStoreId();
164+
152165
$itemsToShip = [];
153166
/** @var Item $shipmentItem */
154167
foreach ($shipment->getAllItems() as $shipmentItem) {
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
/**
6+
* Copyright (c) Meta Platforms, Inc. and affiliates.
7+
*
8+
* Licensed under the Apache License, Version 2.0 (the "License");
9+
* you may not use this file except in compliance with the License.
10+
* You may obtain a copy of the License at
11+
*
12+
* http://www.apache.org/licenses/LICENSE-2.0
13+
*
14+
* Unless required by applicable law or agreed to in writing, software
15+
* distributed under the License is distributed on an "AS IS" BASIS,
16+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17+
* See the License for the specific language governing permissions and
18+
* limitations under the License.
19+
*/
20+
21+
namespace Meta\Sales\Observer\Facebook;
22+
23+
use Magento\Framework\Event\Observer;
24+
use Magento\Framework\Event\ObserverInterface;
25+
use Magento\Sales\Model\Order;
26+
use Meta\Sales\Helper\OrderHelper;
27+
use Psr\Log\LoggerInterface;
28+
29+
class OrderLoadAfter implements ObserverInterface
30+
{
31+
/**
32+
* @var OrderHelper
33+
*/
34+
private OrderHelper $orderHelper;
35+
36+
/**
37+
* @var LoggerInterface
38+
*/
39+
private LoggerInterface $logger;
40+
41+
/**
42+
* @param OrderHelper $orderHelper
43+
* @param LoggerInterface $logger
44+
*/
45+
public function __construct(
46+
OrderHelper $orderHelper,
47+
LoggerInterface $logger
48+
) {
49+
$this->orderHelper = $orderHelper;
50+
$this->logger = $logger;
51+
}
52+
53+
/**
54+
* Load order's extension attributes
55+
*
56+
* @param Observer $observer
57+
* @return void
58+
*/
59+
public function execute(Observer $observer)
60+
{
61+
/** @var Order $order */
62+
$order = $observer->getEvent()->getOrder();
63+
64+
if (!($order && $order->getId())) {
65+
return;
66+
}
67+
68+
try {
69+
$this->orderHelper->setFacebookOrderExtensionAttributes($order);
70+
} catch (\Exception $e) {
71+
$this->logger->critical($e);
72+
}
73+
}
74+
}

app/code/Meta/Sales/Observer/Order/Cancel.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
use Magento\Sales\Model\Order;
2929
use Meta\BusinessExtension\Helper\GraphAPIAdapter;
3030
use Meta\BusinessExtension\Model\System\Config as SystemConfig;
31+
use Meta\Sales\Helper\OrderHelper;
3132
use Meta\Sales\Model\Order\CreateCancellation;
3233

3334
class Cancel implements ObserverInterface
@@ -42,18 +43,26 @@ class Cancel implements ObserverInterface
4243
*/
4344
private GraphAPIAdapter $graphAPIAdapter;
4445

46+
/**
47+
* @var OrderHelper
48+
*/
49+
private OrderHelper $orderHelper;
50+
4551
/**
4652
* Constructor
4753
*
4854
* @param SystemConfig $systemConfig
4955
* @param GraphAPIAdapter $graphAPIAdapter
56+
* @param OrderHelper $orderHelper
5057
*/
5158
public function __construct(
5259
SystemConfig $systemConfig,
53-
GraphAPIAdapter $graphAPIAdapter
60+
GraphAPIAdapter $graphAPIAdapter,
61+
OrderHelper $orderHelper
5462
) {
5563
$this->systemConfig = $systemConfig;
5664
$this->graphAPIAdapter = $graphAPIAdapter;
65+
$this->orderHelper = $orderHelper;
5766
}
5867

5968
/**
@@ -84,6 +93,7 @@ public function execute(Observer $observer)
8493
}
8594
}
8695

96+
$this->orderHelper->setFacebookOrderExtensionAttributes($order);
8797
$facebookOrderId = $order->getExtensionAttributes()->getFacebookOrderId();
8898
if (!$facebookOrderId) {
8999
return;

app/code/Meta/Sales/Plugin/OrderGet.php

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -20,59 +20,56 @@
2020

2121
namespace Meta\Sales\Plugin;
2222

23-
use Meta\Sales\Api\Data\FacebookOrderInterfaceFactory;
24-
use Magento\Sales\Api\Data\OrderExtensionFactory;
23+
use Exception;
2524
use Magento\Sales\Api\Data\OrderInterface;
2625
use Magento\Sales\Api\OrderRepositoryInterface;
26+
use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection;
27+
use Meta\Sales\Helper\OrderHelper;
28+
use Psr\Log\LoggerInterface;
2729

2830
class OrderGet
2931
{
3032
/**
31-
* @var OrderExtensionFactory
33+
* @var OrderHelper
3234
*/
33-
private $orderExtensionFactory;
35+
private OrderHelper $orderHelper;
3436

3537
/**
36-
* @var FacebookOrderInterfaceFactory
38+
* @var LoggerInterface
3739
*/
38-
private $facebookOrderFactory;
40+
private LoggerInterface $logger;
3941

4042
/**
41-
* @param OrderExtensionFactory $orderExtensionFactory
42-
* @param FacebookOrderInterfaceFactory $facebookOrderFactory
43+
* @param OrderHelper $orderHelper
44+
* @param LoggerInterface $logger
4345
*/
4446
public function __construct(
45-
OrderExtensionFactory $orderExtensionFactory,
46-
FacebookOrderInterfaceFactory $facebookOrderFactory
47+
OrderHelper $orderHelper,
48+
LoggerInterface $logger
4749
) {
48-
$this->orderExtensionFactory = $orderExtensionFactory;
49-
$this->facebookOrderFactory = $facebookOrderFactory;
50+
$this->orderHelper = $orderHelper;
51+
$this->logger = $logger;
5052
}
5153

5254
/**
53-
* After get order plugin
55+
* After get order collection plugin
5456
*
5557
* @param OrderRepositoryInterface $subject
56-
* @param OrderInterface $order
57-
* @return OrderInterface
58+
* @param OrderCollection $orderCollection
59+
* @return OrderCollection
5860
*
5961
* @SuppressWarnings(PHPMD.UnusedFormalParameter) $subject
6062
*/
61-
public function afterGet(OrderRepositoryInterface $subject, OrderInterface $order)
63+
public function afterGetList(OrderRepositoryInterface $subject, OrderCollection $orderCollection)
6264
{
63-
$facebookOrder = $this->facebookOrderFactory->create();
64-
$facebookOrder->load($order->getId(), 'magento_order_id');
65-
66-
$emailRemarketingOption = ($facebookOrder->getExtraData()['email_remarketing_option'] ?? false) === true;
67-
68-
if ($facebookOrder->getId()) {
69-
$extensionAttributes = $order->getExtensionAttributes() ?: $this->orderExtensionFactory->create();
70-
$extensionAttributes->setFacebookOrderId($facebookOrder->getFacebookOrderId())
71-
->setChannel($facebookOrder->getChannel())
72-
->setEmailRemarketingOption($emailRemarketingOption);
73-
$order->setExtensionAttributes($extensionAttributes);
65+
try {
66+
foreach ($orderCollection->getItems() as $order) {
67+
/** @var OrderInterface $order */
68+
$this->orderHelper->setFacebookOrderExtensionAttributes($order);
69+
}
70+
} catch (Exception $e) {
71+
$this->logger->critical($e);
7472
}
75-
76-
return $order;
73+
return $orderCollection;
7774
}
7875
}

app/code/Meta/Sales/etc/events.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
<?xml version="1.0"?>
22
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
3+
<event name="sales_order_load_after">
4+
<observer name="facebook_order_load_after" instance="Meta\Sales\Observer\Facebook\OrderLoadAfter" />
5+
</event>
36
<event name="sales_order_shipment_save_after">
47
<observer name="facebook_order_mark_as_shipped" instance="Meta\Sales\Observer\Order\MarkAsShipped" />
58
</event>

0 commit comments

Comments
 (0)