diff --git a/src/Domains/Inventory/Variants/Models/VariantsWarehouses.php b/src/Domains/Inventory/Variants/Models/VariantsWarehouses.php index 399f7448b..5d64f5db3 100644 --- a/src/Domains/Inventory/Variants/Models/VariantsWarehouses.php +++ b/src/Domains/Inventory/Variants/Models/VariantsWarehouses.php @@ -119,4 +119,10 @@ public function getStatusHistory(): array return $statusHistories; } + + public function getTotalProducts() + { + $total = VariantsWarehouses::where('is_deleted', 0)->sum('quantity'); + return $total; + } } diff --git a/src/Domains/Inventory/Warehouses/Models/Warehouses.php b/src/Domains/Inventory/Warehouses/Models/Warehouses.php index fd80eaa62..e96429fe7 100644 --- a/src/Domains/Inventory/Warehouses/Models/Warehouses.php +++ b/src/Domains/Inventory/Warehouses/Models/Warehouses.php @@ -174,9 +174,12 @@ public function isVariantPublished(): ?Attribute public function getTotalProducts(): int { if (! $totalProducts = $this->get('total_products')) { - $this->set('total_products', $this->variantsWarehouses()->count()); + $this->set( + 'total_products', + $this->variantsWarehouses()->first()->getTotalProducts() + ); return $this->get('total_products'); } - return $totalProducts; + return (int) $totalProducts; } } diff --git a/src/Domains/Inventory/Warehouses/Observers/VariantsWarehouseObserver.php b/src/Domains/Inventory/Warehouses/Observers/VariantsWarehouseObserver.php index 7abb10c51..14738a94a 100644 --- a/src/Domains/Inventory/Warehouses/Observers/VariantsWarehouseObserver.php +++ b/src/Domains/Inventory/Warehouses/Observers/VariantsWarehouseObserver.php @@ -20,6 +20,13 @@ public function saved(VariantsWarehouses $variantWarehouse): void ))->execute(); } + if ($variantWarehouse->wasChanged('quantity')) { + $variantWarehouse->warehouse->set( + 'total_products', + $variantWarehouse->getTotalProducts() + ); + } + if ($variantWarehouse->wasChanged('status_id')) { (new CreateStatusHistoryAction( StatusRepository::getById($variantWarehouse->status_id), @@ -27,4 +34,12 @@ public function saved(VariantsWarehouses $variantWarehouse): void ))->execute(); } } + + public function created(VariantsWarehouses $variantWarehouse): void + { + $variantWarehouse->warehouse->set( + 'total_products', + $variantWarehouse->getTotalProducts() + ); + } }