isInPerson()) { return parent::calculateCollectionDate($productList, $delivery, $cache); } $deliveryTime = 0; foreach ($productList as $product) { $productDeliveryTime = $this->getProductDeliveryTime($product); $deliveryTime = max($deliveryTime, $productDeliveryTime); } return DateUtil::calcWorkingDays($deliveryTime); } private function getProductDeliveryTime(\Product $product): int { $piecesOrdered = $product['piecesOrdered'] ?? 1; // nactu sklady ktere maji pozadovane mnozstvi skladem $stores = $this->storesInStore->getProductInStores($product->id, $product->variationId ?? null); $storesWithSufficientStock = array_filter($stores, fn ($x) => $x >= $piecesOrdered); // nactu data fyzickejch skladu $relevantStoresData = array_filter( array_intersect_key($this->storesInStore->getStores(), $storesWithSufficientStock), fn ($x) => $x['type'] === 0 ); // vyberu nejnizsi deliveryTime $deliveryTimes = array_map(function ($storeData) { return empty($storeData['data']['deliveryTime']) ? self::DEFAULT_DELIVERY_TIME : $storeData['data']['deliveryTime']; }, $relevantStoresData); if (empty($deliveryTimes)) { return 0; } return min($deliveryTimes); } }