diff --git a/InventorySales/Plugin/Quote/Api/ValidateQtyBeforeSave.php b/InventorySales/Plugin/Quote/Api/ValidateQtyBeforeSave.php new file mode 100644 index 000000000000..ec4101481367 --- /dev/null +++ b/InventorySales/Plugin/Quote/Api/ValidateQtyBeforeSave.php @@ -0,0 +1,65 @@ +validator = $validator; + $this->observerFactory = $observerFactory; + } + + /** + * @param CartItemRepositoryInterface $subject + * @param CartItemInterface $item + * + * @return array + * @throws LocalizedException + */ + public function beforeSave(CartItemRepositoryInterface $subject, CartItemInterface $item): array + { + /** @var Event $event */ + $event = $this->observerFactory->create(Event::class, ['data' => ['item' => $item]]); + /** @var Observer $observer */ + $observer = $this->observerFactory->create(Observer::class, ['data' => ['event' => $event]]); + + $this->validator->validate($observer); + + if (!empty($item->getMessage()) && $item->getHasError()) { + throw new LocalizedException(__($item->getMessage())); + } + + return [$item]; + } +} diff --git a/InventorySales/Plugin/Quote/Model/Quote/Item/CartItemPersister/ValidateQtyBeforePersist.php b/InventorySales/Plugin/Quote/Model/Quote/Item/CartItemPersister/ValidateQtyBeforePersist.php new file mode 100644 index 000000000000..e4527a56aaad --- /dev/null +++ b/InventorySales/Plugin/Quote/Model/Quote/Item/CartItemPersister/ValidateQtyBeforePersist.php @@ -0,0 +1,72 @@ +qtyValidator = $validator; + $this->observerFactory = $observerFactory; + } + + /** + * Validate item qty before save. + * + * @param CartItemPersister $subject + * @param CartInterface $quote + * @param CartItemInterface $item + * + * @return array + * @throws LocalizedException + * + * @SuppressWarnings(PHPMD.UnusedFormalParameter) + */ + public function beforeSave(CartItemPersister $subject, CartInterface $quote, CartItemInterface $item): array + { + /** @var Event $event */ + $event = $this->observerFactory->create(Event::class, ['data' => ['item' => $item]]); + /** @var Observer $observer */ + $observer = $this->observerFactory->create(Observer::class, ['data' => ['event' => $event]]); + + $this->qtyValidator->validate($observer); + if (!empty($item->getMessage()) && $item->getHasError()) { + throw new LocalizedException(__($item->getMessage())); + } + + return [ + $quote, + $item + ]; + } +} diff --git a/InventorySales/composer.json b/InventorySales/composer.json index e6a579643343..f401f79a71e7 100644 --- a/InventorySales/composer.json +++ b/InventorySales/composer.json @@ -19,7 +19,8 @@ "magento/module-sales": "*" }, "suggest": { - "magento/module-inventory-catalog": "*" + "magento/module-inventory-catalog": "*", + "magento/module-quote": "*" }, "require-dev": { "magento/module-inventory-indexer": "*" diff --git a/InventorySales/etc/di.xml b/InventorySales/etc/di.xml index e98fa584ef90..b664f83a2817 100644 --- a/InventorySales/etc/di.xml +++ b/InventorySales/etc/di.xml @@ -189,4 +189,10 @@ + + + + + + diff --git a/InventorySales/etc/events.xml b/InventorySales/etc/events.xml index 63cfbdac4429..5d7a1bcbb668 100644 --- a/InventorySales/etc/events.xml +++ b/InventorySales/etc/events.xml @@ -23,4 +23,8 @@ + + + +