'decimal:2', ]; public function warehouse() { return $this->belongsTo(Warehouse::class); } public function unit() { return $this->belongsTo(Unit::class); } public static function adjustStock(int $warehouseId, int $unitId, bool $isBroken, float $quantity): void { if ($isBroken) { return; } $stock = self::firstOrCreate([ 'warehouse_id' => $warehouseId, 'unit_id' => $unitId, ], [ 'quantity' => 0, ]); $stock->increment('quantity', $quantity); } public static function getQuantity(int $warehouseId, int $unitId): float { return (float) (self::where('warehouse_id', $warehouseId) ->where('unit_id', $unitId) ->first()?->quantity ?? 0); } public static function hasSufficientStock(int $warehouseId, int $unitId, float|int $neededQuantity): bool { return self::getQuantity($warehouseId, $unitId) >= $neededQuantity; } }