diff --git a/README.md b/README.md index 36a6bff..69f1d70 100644 --- a/README.md +++ b/README.md @@ -2,28 +2,28 @@ [![Build Status](https://app.travis-ci.com/AmpersandHQ/magento2-disable-stock-reservation.svg?branch=master)](https://app.travis-ci.com/AmpersandHQ/magento2-disable-stock-reservation) -This module disables the inventory reservation logic introduced as part of MSI in Magento 2.3.3 - see +This module disables the inventory reservation logic introduced as part of MSI in Magento 2.3.3 - see https://github.com/magento/inventory/issues/2269 for more information about the way MSI was implemented, and the issues that can happen with external WMS integrations. ## The Problem -During the order placement and fulfilment processes, Magento's MSI implementation will not decrement stock on order +During the order placement and fulfilment processes, Magento's MSI implementation will not decrement stock on order placement - it will only do so on order shipment and refund. ## Our Approach This module will: -* Prevent all writes to the inventory_reservations table. It does so by using an `around` plugin on `PlaceReservationsForSalesEventInterface` +* Prevent all writes to the `inventory_reservation` table. It does so by using an `around` plugin on `PlaceReservationsForSalesEventInterface` * Trigger stock deductions on order placement. See `inventory_sales_source_deduction_processor` plugin on `Magento\Sales\Model\Service\OrderService`. * Prevent stock deductions on order shipment. See disabled `inventory_sales_source_deduction_processor` observer on `sales_order_shipment_save_after` event. * Replenish stock for cancelled order items. See `inventory` observer on `sales_order_item_cancel` event. * Replenish stock when a credit memo is issued. See `src/Observer/RestoreSourceItemQuantityOnRefundObserver.php` * Requires that "Back to stock" is checked or "Automatically Return Credit Memo Item to Stock" is configured * https://docs.magento.com/user-guide/configuration/catalog/inventory.html#product-stock-options +* Truncate (ie, remove all historic entries from) the `inventory_reservation` table upon installation. ## Additional Notes -* Make sure to truncate any existing reservations after installing this module, see https://github.com/AmpersandHQ/magento2-disable-stock-reservation/issues/41 * Both the `inventory` and `cataloginventory_stock` should be on the same mode (`Update on Save` or `Schedule`) for this module to work as expected. If you are running this on `Schedule` you should have crons activated. diff --git a/src/Setup/Patch/Schema/RemoveExistingReservations.php b/src/Setup/Patch/Schema/RemoveExistingReservations.php new file mode 100644 index 0000000..acaf49e --- /dev/null +++ b/src/Setup/Patch/Schema/RemoveExistingReservations.php @@ -0,0 +1,47 @@ +setup = $setup; + } + + /** + * {@inheritdoc} + */ + public function apply() + { + $connection = $this->setup->getConnection(); + $tableName = $connection->getTableName(self::INVENTORY_RESERVATION_TABLE_NAME); + + if ($connection->isTableExists($tableName)) { + $connection->truncateTable($tableName); + } + } + + /** + * {@inheritdoc} + */ + public static function getDependencies(): array + { + return []; + } + + /** + * {@inheritdoc} + */ + public function getAliases(): array + { + return []; + } +}