From ebafe021223ab0a98de52bc5b89d6656e270bba3 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 26 Feb 2025 20:49:19 +0800 Subject: [PATCH 1/3] Added Order:: fulfillOutstandingCommittedQuantity() --- src/elements/Order.php | 44 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/src/elements/Order.php b/src/elements/Order.php index ac4d862968..47892dfce3 100644 --- a/src/elements/Order.php +++ b/src/elements/Order.php @@ -21,10 +21,12 @@ use craft\commerce\base\StoreTrait; use craft\commerce\behaviors\CurrencyAttributeBehavior; use craft\commerce\behaviors\CustomerBehavior; +use craft\commerce\collections\InventoryMovementCollection; use craft\commerce\db\Table; use craft\commerce\elements\traits\OrderElementTrait; use craft\commerce\elements\traits\OrderNoticesTrait; use craft\commerce\elements\traits\OrderValidatorsTrait; +use craft\commerce\enums\InventoryTransactionType; use craft\commerce\errors\CurrencyException; use craft\commerce\errors\OrderStatusException; use craft\commerce\events\AddLineItemEvent; @@ -33,6 +35,8 @@ use craft\commerce\events\OrderNoticeEvent; use craft\commerce\helpers\Currency; use craft\commerce\helpers\Order as OrderHelper; +use craft\commerce\models\inventory\InventoryFulfillMovement; +use craft\commerce\models\InventoryFulfillmentLevel; use craft\commerce\models\LineItem; use craft\commerce\models\OrderAdjustment; use craft\commerce\models\OrderHistory; @@ -1848,6 +1852,46 @@ public function markAsComplete(): bool return true; } + /** + * Fulfills any items that are not filed for this order. + * + * @return bool + * @throws DeprecationException + * @throws InvalidConfigException + * @throws \yii\db\Exception + * @since 5.4.0 + */ + public function fulfillOutstandingCommittedQuantity(): bool + { + /** @var $levels Collection */ + $levels = Plugin::getInstance()->getInventory()->getInventoryFulfillmentLevels($this); + $movements = []; + foreach ($levels as $level) { + $outstanding = $level->outstandingCommittedQuantity; + if ($outstanding > 0) { + $inventoryLocation = $level->getInventoryLocation(); + $movement = new InventoryFulfillMovement(); + $movement->fromInventoryLocation = $inventoryLocation; + $movement->inventoryItemId = $level->inventoryItemId; + $movement->toInventoryLocation = $inventoryLocation; + $movement->fromInventoryTransactionType = InventoryTransactionType::COMMITTED; + $movement->toInventoryTransactionType = InventoryTransactionType::FULFILLED; + $movement->lineItemId = $level->lineItemId; + $movement->quantity = $outstanding; + $movement->userId = Craft::$app->getUser()->getId(); + $movements[] = $movement; + } + } + + $movements = InventoryMovementCollection::make($movements); + + if (!Plugin::getInstance()->getInventory()->executeInventoryMovements($movements)) { + return false; + } + + return true; + } + /** * Called after the order successfully completes */ From 70d4e378e1699ed5a9fe27c5abcebc2ad35c987a Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 26 Feb 2025 21:10:13 +0800 Subject: [PATCH 2/3] Not needed --- src/elements/Order.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/elements/Order.php b/src/elements/Order.php index 47892dfce3..6ffc4a835f 100644 --- a/src/elements/Order.php +++ b/src/elements/Order.php @@ -1863,7 +1863,6 @@ public function markAsComplete(): bool */ public function fulfillOutstandingCommittedQuantity(): bool { - /** @var $levels Collection */ $levels = Plugin::getInstance()->getInventory()->getInventoryFulfillmentLevels($this); $movements = []; foreach ($levels as $level) { From d349cb239b2899ca1226a9550e3ce6acb2711889 Mon Sep 17 00:00:00 2001 From: Luke Holder Date: Wed, 26 Feb 2025 22:00:10 +0800 Subject: [PATCH 3/3] Cleanup --- src/elements/Order.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/elements/Order.php b/src/elements/Order.php index 6ffc4a835f..1550ffd789 100644 --- a/src/elements/Order.php +++ b/src/elements/Order.php @@ -36,7 +36,6 @@ use craft\commerce\helpers\Currency; use craft\commerce\helpers\Order as OrderHelper; use craft\commerce\models\inventory\InventoryFulfillMovement; -use craft\commerce\models\InventoryFulfillmentLevel; use craft\commerce\models\LineItem; use craft\commerce\models\OrderAdjustment; use craft\commerce\models\OrderHistory;