Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit e05daaa

Browse files
authored
Drop stock reservation when removing item from cart via the Store API (#3468)
* Remove Blocks version of ReserveStock Class * When a cart item is removed, remove holds on stock * Move maybe_release_stock to abstract * Update ReserveStockException usage
1 parent a0c27bf commit e05daaa

File tree

8 files changed

+29
-309
lines changed

8 files changed

+29
-309
lines changed

src/StoreApi/Routes/AbstractCartRoute.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,21 @@ protected function maybe_recalculate_totals() {
4444
}
4545
}
4646

47+
/**
48+
* If there is a draft order, releases stock.
49+
*
50+
* @return void
51+
*/
52+
protected function maybe_release_stock() {
53+
$draft_order = wc()->session->get( 'store_api_draft_order', 0 );
54+
55+
if ( ! $draft_order ) {
56+
return;
57+
}
58+
59+
wc_release_stock_for_order( $draft_order );
60+
}
61+
4762
/**
4863
* Get route response when something went wrong.
4964
*

src/StoreApi/Routes/CartRemoveItem.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ protected function get_route_post_response( \WP_REST_Request $request ) {
5757
}
5858

5959
$cart->remove_cart_item( $request['key'] );
60+
$this->maybe_release_stock();
6061

6162
return rest_ensure_response( $this->schema->get_item_response( $cart ) );
6263
}

src/StoreApi/Routes/Checkout.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@
1111
use Automattic\WooCommerce\Blocks\Domain\Services\CreateAccount;
1212
use Automattic\WooCommerce\Blocks\StoreApi\Utilities\CartController;
1313
use Automattic\WooCommerce\Blocks\StoreApi\Utilities\OrderController;
14-
use Automattic\WooCommerce\Blocks\StoreApi\Utilities\ReserveStock;
15-
use Automattic\WooCommerce\Blocks\StoreApi\Utilities\ReserveStockException;
14+
use Automattic\WooCommerce\Checkout\Helpers\ReserveStock;
15+
use Automattic\WooCommerce\Checkout\Helpers\ReserveStockException;
1616
use Automattic\WooCommerce\Blocks\Payments\PaymentResult;
1717
use Automattic\WooCommerce\Blocks\Payments\PaymentContext;
1818

@@ -332,7 +332,7 @@ private function is_valid_draft_order( $order_object ) {
332332
private function create_or_update_draft_order() {
333333
$cart_controller = new CartController();
334334
$order_controller = new OrderController();
335-
$reserve_stock = \class_exists( '\Automattic\WooCommerce\Checkout\Helpers\ReserveStock' ) ? new \Automattic\WooCommerce\Checkout\Helpers\ReserveStock() : new ReserveStock();
335+
$reserve_stock = new ReserveStock();
336336
$this->order = $this->get_draft_order_id() ? wc_get_order( $this->get_draft_order_id() ) : null;
337337

338338
// Validate items etc are allowed in the order before it gets created.

src/StoreApi/Schemas/CartItemSchema.php

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
namespace Automattic\WooCommerce\Blocks\StoreApi\Schemas;
33

44
use Automattic\WooCommerce\Blocks\Domain\Services\ExtendRestApi;
5-
5+
use Automattic\WooCommerce\Checkout\Helpers\ReserveStock;
66

77
/**
88
* CartItemSchema class.
@@ -346,15 +346,10 @@ protected function get_remaining_stock( \WC_Product $product ) {
346346
return null;
347347
}
348348

349-
$draft_order = wc()->session->get( 'store_api_draft_order', 0 );
350-
351-
if ( \class_exists( '\Automattic\WooCommerce\Checkout\Helpers\ReserveStock' ) ) {
352-
$reserve_stock = new \Automattic\WooCommerce\Checkout\Helpers\ReserveStock();
353-
} else {
354-
$reserve_stock = new \Automattic\WooCommerce\Blocks\StoreApi\Utilities\ReserveStock();
355-
}
356-
349+
$draft_order = wc()->session->get( 'store_api_draft_order', 0 );
350+
$reserve_stock = new ReserveStock();
357351
$reserved_stock = $reserve_stock->get_reserved_stock( $product, $draft_order );
352+
358353
return $product->get_stock_quantity() - $reserved_stock;
359354
}
360355

src/StoreApi/Utilities/CartController.php

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
use Automattic\WooCommerce\Blocks\StoreApi\Routes\RouteException;
55
use Automattic\WooCommerce\Blocks\StoreApi\Utilities\NoticeHandler;
6+
use Automattic\WooCommerce\Checkout\Helpers\ReserveStock;
67

78
/**
89
* Woo Cart Controller class.
@@ -630,14 +631,9 @@ protected function get_product_quantity_in_cart( $product ) {
630631
* @return int
631632
*/
632633
protected function get_remaining_stock_for_product( $product ) {
633-
if ( \class_exists( '\Automattic\WooCommerce\Checkout\Helpers\ReserveStock' ) ) {
634-
$reserve_stock_controller = new \Automattic\WooCommerce\Checkout\Helpers\ReserveStock();
635-
} else {
636-
$reserve_stock_controller = new \Automattic\WooCommerce\Blocks\StoreApi\Utilities\ReserveStock();
637-
}
638-
639-
$draft_order = wc()->session->get( 'store_api_draft_order', 0 );
640-
$qty_reserved = $reserve_stock_controller->get_reserved_stock( $product, $draft_order );
634+
$reserve_stock = new ReserveStock();
635+
$draft_order = wc()->session->get( 'store_api_draft_order', 0 );
636+
$qty_reserved = $reserve_stock->get_reserved_stock( $product, $draft_order );
641637

642638
return $product->get_stock_quantity() - $qty_reserved;
643639
}

src/StoreApi/Utilities/ReserveStock.php

Lines changed: 0 additions & 230 deletions
This file was deleted.

src/StoreApi/Utilities/ReserveStockException.php

Lines changed: 0 additions & 57 deletions
This file was deleted.

0 commit comments

Comments
 (0)