diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8a56aac..167cdd9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# 6.1.16
+- Fixed issue with pending orders remaining open
+
# 6.1.15
- Fixed issue with shipping costs not being processed correctly
diff --git a/CHANGELOG_de-DE.md b/CHANGELOG_de-DE.md
index d490c5a..c8a9006 100644
--- a/CHANGELOG_de-DE.md
+++ b/CHANGELOG_de-DE.md
@@ -1,6 +1,9 @@
-# 6.1.15
+# 6.1.16
- Problem behoben, bei dem die Versandkosten nicht korrekt verarbeitet wurden
+# 6.1.15
+- Problem behoben, bei dem ausstehende Bestellungen offen blieben
+
# 6.1.14
– Warenkorb neu erstellen für Headless Storefront Order deaktivieren
– Der korrekte Ausnahmetyp wurde zur Finalisierungsmethode hinzugefügt
diff --git a/composer.json b/composer.json
index c0ce698..812ae5a 100644
--- a/composer.json
+++ b/composer.json
@@ -59,5 +59,5 @@
"vrpayment/sdk": "^4.0.0"
},
"type": "shopware-platform-plugin",
- "version": "6.1.15"
+ "version": "6.1.16"
}
diff --git a/src/Core/Storefront/Checkout/Controller/CheckoutController.php b/src/Core/Storefront/Checkout/Controller/CheckoutController.php
index e356c04..37bcad0 100644
--- a/src/Core/Storefront/Checkout/Controller/CheckoutController.php
+++ b/src/Core/Storefront/Checkout/Controller/CheckoutController.php
@@ -10,7 +10,9 @@ use Shopware\Core\{
Checkout\Cart\SalesChannel\CartService,
Checkout\Order\Aggregate\OrderLineItem\OrderLineItemCollection,
Checkout\Order\Aggregate\OrderLineItem\OrderLineItemEntity,
+ Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler,
Checkout\Order\OrderEntity,
+ Checkout\Order\OrderDefinition,
Checkout\Order\SalesChannel\AbstractOrderRoute,
Framework\Context,
Framework\DataAbstractionLayer\Search\Criteria,
@@ -21,7 +23,9 @@ use Shopware\Core\{
Framework\Uuid\Uuid,
Framework\Uuid\Exception\InvalidUuidException,
Framework\Validation\DataBag\RequestDataBag,
- System\SalesChannel\SalesChannelContext
+ System\SalesChannel\SalesChannelContext,
+ System\StateMachine\StateMachineRegistry,
+ System\StateMachine\Transition,
};
use Shopware\Storefront\{
Controller\StorefrontController,
@@ -43,7 +47,8 @@ use VRPaymentPayment\Core\{
Settings\Options\Integration,
Settings\Service\SettingsService,
Storefront\Checkout\Struct\CheckoutPageData,
- Util\Payload\CustomProducts\CustomProductsLineItemTypes
+ Util\Payload\CustomProducts\CustomProductsLineItemTypes,
+ Util\Payload\TransactionPayload
};
@@ -57,6 +62,18 @@ use VRPaymentPayment\Core\{
#[Route(defaults: ['_routeScope' => ['storefront']])]
class CheckoutController extends StorefrontController {
+ public const ORDER_STATE_CANCEL = 'cancel';
+
+ /**
+ * @var \Shopware\Core\System\StateMachine\StateMachineRegistry
+ */
+ private $stateMachineRegistry;
+
+ /**
+ * @var \Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler
+ */
+ protected $orderTransactionStateHandler;
+
/**
* @var \Shopware\Storefront\Page\GenericPageLoader
*/
@@ -106,6 +123,8 @@ class CheckoutController extends StorefrontController {
* @param \VRPaymentPayment\Core\Api\Transaction\Service\TransactionService $transactionService
* @param \Shopware\Storefront\Page\GenericPageLoaderInterface $genericLoader
* @param \Shopware\Core\Checkout\Order\SalesChannel\AbstractOrderRoute $orderRoute
+ * @param \Shopware\Core\Checkout\Order\Aggregate\OrderTransaction\OrderTransactionStateHandler $orderTransactionStateHandler
+ * @param \Shopware\Core\System\StateMachine\StateMachineRegistry $stateMachineRegistry
*/
public function __construct(
LineItemFactoryRegistry $lineItemFactoryRegistry,
@@ -113,7 +132,9 @@ class CheckoutController extends StorefrontController {
SettingsService $settingsService,
TransactionService $transactionService,
GenericPageLoaderInterface $genericLoader,
- AbstractOrderRoute $orderRoute
+ AbstractOrderRoute $orderRoute,
+ OrderTransactionStateHandler $orderTransactionStateHandler,
+ StateMachineRegistry $stateMachineRegistry
)
{
$this->cartService = $cartService;
@@ -122,6 +143,8 @@ class CheckoutController extends StorefrontController {
$this->transactionService = $transactionService;
$this->lineItemFactoryRegistry = $lineItemFactoryRegistry;
$this->orderRoute = $orderRoute;
+ $this->orderTransactionStateHandler = $orderTransactionStateHandler;
+ $this->stateMachineRegistry = $stateMachineRegistry;
}
/**
@@ -380,6 +403,7 @@ class CheckoutController extends StorefrontController {
}
$transaction = $this->getTransaction($orderId, $salesChannelContext->getContext());
+ $orderTransactionId = $transaction->getMetaData()[TransactionPayload::VRPAYMENT_METADATA_ORDER_TRANSACTION_ID];
if (!empty($transaction->getUserFailureMessage())) {
$this->addFlash('danger', $transaction->getUserFailureMessage());
}
@@ -414,6 +438,18 @@ class CheckoutController extends StorefrontController {
}
+ // Close the old, existing order to prevent confusion for the customer
+ $this->orderTransactionStateHandler->cancel($orderTransactionId, $salesChannelContext->getContext());
+ $this->stateMachineRegistry->transition(
+ new Transition(
+ OrderDefinition::ENTITY_NAME,
+ $orderId,
+ self::ORDER_STATE_CANCEL,
+ 'stateId'
+ ),
+ $salesChannelContext->getContext()
+ );
+
} catch (\Exception $exception) {
$this->addFlash('danger', $this->trans('error.addToCartError'));
$this->logger->critical($exception->getMessage());
diff --git a/src/Core/Util/Analytics/Analytics.php b/src/Core/Util/Analytics/Analytics.php
index cf2fd15..e3ff536 100644
--- a/src/Core/Util/Analytics/Analytics.php
+++ b/src/Core/Util/Analytics/Analytics.php
@@ -25,7 +25,7 @@ class Analytics {
self::SHOP_SYSTEM => 'shopware',
self::SHOP_SYSTEM_VERSION => '6',
self::SHOP_SYSTEM_AND_VERSION => 'shopware-6',
- self::PLUGIN_SYSTEM_VERSION => '6.1.15',
+ self::PLUGIN_SYSTEM_VERSION => '6.1.16',
];
}
diff --git a/src/Resources/config/services/core/storefront/checkout.xml b/src/Resources/config/services/core/storefront/checkout.xml
index f022b03..1980601 100644
--- a/src/Resources/config/services/core/storefront/checkout.xml
+++ b/src/Resources/config/services/core/storefront/checkout.xml
@@ -13,6 +13,8 @@
+
+