query("SELECT stocktakeNumber FROM WarehouseStocktake WHERE stocktakeNumber LIKE '{$prefix}%' ORDER BY stocktakeNumber DESC LIMIT 1"); if ($row = $result->fetch_assoc()) { $lastNumber = intval(substr($row['stocktakeNumber'], -6)); $nextNumber = $lastNumber + 1; } else { $nextNumber = 1; } return $prefix . str_pad((string)$nextNumber, 6, '0', STR_PAD_LEFT); } /** * Get location object */ public function getLocation(): ?WarehouseLocationModel { return WarehouseLocationModel::get($this->warehouseLocationId); } /** * Get user who started the stocktake */ public function getStartedByUser(): ?UserModel { if (!$this->startedBy) return null; return UserModel::get($this->startedBy); } /** * Get items for this stocktake */ public function getItems(): array { return WarehouseStocktakeItemModel::getAll(['stocktakeId' => $this->id]); } /** * Update progress counters */ public function updateProgress(): void { $items = $this->getItems(); $this->totalScannedItems = count($items); $db = FronkDB::singleton(); $db->query("UPDATE WarehouseStocktake SET totalScannedItems = {$this->totalScannedItems} WHERE id = {$this->id}"); } }