diff --git a/Model/Order/CompleteOrder.php b/Model/Order/CompleteOrder.php
new file mode 100644
index 00000000..3ac3f47b
--- /dev/null
+++ b/Model/Order/CompleteOrder.php
@@ -0,0 +1,98 @@
+client = $client;
+ $this->orderExtensionDataFactory = $orderExtensionDataFactory;
+ $this->orderExtensionDataResource = $orderExtensionDataResource;
+ $this->logger = $logger;
+ }
+
+ /**
+ * Mark the Order as created on the Bold side.
+ *
+ * @param OrderInterface $order
+ * @return void
+ * @throws LocalizedException
+ */
+ public function execute(OrderInterface $order): void
+ {
+ $websiteId = (int)$order->getStore()->getWebsiteId();
+ $publicOrderId = $this->getOrderPublicId($order);
+ $orderId = $order->getEntityId();
+ $body = [
+ 'platform_order_id' => $orderId,
+ ];
+ $url = sprintf(self::COMPLETE_URL, $publicOrderId);
+ $response = $this->client->post($websiteId, $url, $body);
+ if ($response->getStatus() !== 200) {
+ $this->logger->error(__('Failed to complete order with id="%1"', $orderId));
+ }
+ }
+
+ /**
+ * Retrieve order public id.
+ *
+ * @param OrderInterface $order
+ * @return string
+ * @throws LocalizedException
+ */
+ private function getOrderPublicId(OrderInterface $order): string
+ {
+ $orderExtensionData = $this->orderExtensionDataFactory->create();
+ $this->orderExtensionDataResource->load($orderExtensionData, $order->getId(), OrderExtensionData::ORDER_ID);
+ if (!$orderExtensionData->getPublicId()) {
+ throw new LocalizedException(__('Order public id is not set.'));
+ }
+
+ return $orderExtensionData->getPublicId();
+ }
+}
diff --git a/Model/Order/PlaceOrder/CreateOrderFromPayload/CreateOrderFromQuote.php b/Model/Order/PlaceOrder/CreateOrderFromPayload/CreateOrderFromQuote.php
index 5743c335..470bc012 100644
--- a/Model/Order/PlaceOrder/CreateOrderFromPayload/CreateOrderFromQuote.php
+++ b/Model/Order/PlaceOrder/CreateOrderFromPayload/CreateOrderFromQuote.php
@@ -141,6 +141,7 @@ public function create(CartInterface $quote, OrderDataInterface $orderPayload):
[
'order' => $order,
'quote' => $quote,
+ 'order_payload' => $orderPayload,
]
);
diff --git a/Observer/Order/SaveOrderExtensionDataObserver.php b/Observer/Order/CheckoutSubmitAllAfterObserver.php
similarity index 77%
rename from Observer/Order/SaveOrderExtensionDataObserver.php
rename to Observer/Order/CheckoutSubmitAllAfterObserver.php
index c84bf4cf..37508392 100644
--- a/Observer/Order/SaveOrderExtensionDataObserver.php
+++ b/Observer/Order/CheckoutSubmitAllAfterObserver.php
@@ -3,6 +3,8 @@
namespace Bold\Checkout\Observer\Order;
+use Bold\Checkout\Api\Data\PlaceOrder\Request\OrderDataInterface;
+use Bold\Checkout\Model\Order\CompleteOrder;
use Bold\Checkout\Model\Order\OrderExtensionDataFactory;
use Bold\Checkout\Model\ResourceModel\Order\OrderExtensionData as OrderExtensionDataResource;
use Exception;
@@ -10,11 +12,12 @@
use Magento\Framework\Event\ManagerInterface as EventManagerInterface;
use Magento\Framework\Event\Observer;
use Magento\Framework\Event\ObserverInterface;
+use Magento\Framework\Exception\LocalizedException;
/**
- * Save order extension data.
+ * Perform after order submit actions.
*/
-class SaveOrderExtensionDataObserver implements ObserverInterface
+class CheckoutSubmitAllAfterObserver implements ObserverInterface
{
/**
* @var OrderExtensionDataFactory
@@ -41,11 +44,17 @@ class SaveOrderExtensionDataObserver implements ObserverInterface
*/
private $boldPaymentMethods;
+ /**
+ * @var CompleteOrder
+ */
+ private $completeOrder;
+
/**
* @param OrderExtensionDataFactory $orderExtensionDataFactory
* @param OrderExtensionDataResource $orderExtensionDataResource
* @param Session $checkoutSession
* @param EventManagerInterface $eventManager
+ * @param CompleteOrder $completeOrder
* @param array $boldPaymentMethods
*/
public function __construct(
@@ -53,6 +62,7 @@ public function __construct(
OrderExtensionDataResource $orderExtensionDataResource,
Session $checkoutSession,
EventManagerInterface $eventManager,
+ CompleteOrder $completeOrder,
array $boldPaymentMethods = []
) {
$this->orderExtensionDataFactory = $orderExtensionDataFactory;
@@ -60,13 +70,15 @@ public function __construct(
$this->checkoutSession = $checkoutSession;
$this->eventManager = $eventManager;
$this->boldPaymentMethods = $boldPaymentMethods;
+ $this->completeOrder = $completeOrder;
}
/**
- * Save order extension data.
+ * Perform after order submit actions.
*
* @param Observer $observer
* @return void
+ * @throws LocalizedException
*/
public function execute(Observer $observer)
{
@@ -80,6 +92,11 @@ public function execute(Observer $observer)
$orderId = (int)$order->getEntityId();
$publicOrderId = $this->checkoutSession->getBoldCheckoutData()['data']['public_order_id'] ?? null;
$this->checkoutSession->setBoldCheckoutData(null);
+ if (!$publicOrderId) {
+ /** @var OrderDataInterface $orderPayload */
+ $orderPayload = $observer->getEvent()->getOrderPayload();
+ $publicOrderId = $orderPayload ? $orderPayload->getPublicId() : null;
+ }
if (!$publicOrderId) {
return;
}
@@ -95,5 +112,6 @@ public function execute(Observer $observer)
} catch (Exception $e) {
return;
}
+ $this->completeOrder->execute($order);
}
}
diff --git a/etc/di.xml b/etc/di.xml
index e262cd68..d6cd5acf 100644
--- a/etc/di.xml
+++ b/etc/di.xml
@@ -62,6 +62,11 @@
Bold\Checkout\Model\Http\BoldClient
+
+
+ Bold\Checkout\Model\Http\BoldClient
+
+
Bold\Checkout\Model\Http\BoldClient
@@ -146,7 +151,7 @@
-
+
- bold
diff --git a/etc/events.xml b/etc/events.xml
index 079d32e9..03e95311 100644
--- a/etc/events.xml
+++ b/etc/events.xml
@@ -1,7 +1,7 @@
-
+