data); } if (!$id) { return []; } $sellerUtil = ServiceContainer::getService(SellerUtil::class); $seller = $sellerUtil->getSeller((int) $id); return [ 'id' => $seller['id'] ?? '', 'name' => $seller['title'] ?? '', 'address' => ($seller['psc'] ?? '').', '.($seller['title'] ?? ''), 'street' => implode(' ', array_filter([$seller['street'] ?? '', $seller['number'] ?? ''])), 'zip' => $seller['psc'] ?? '', 'city' => $seller['city'] ?? '', 'country' => $seller['country'] ?? 'CZ', ]; } public function storeDeliveryInfo($data) { $id = trim($data['seller_id'] ?? ''); // Potrebuju to tady invalidovat kvuli napr. manipulacnim poplatkum, ktere jsou udelane pres slevy ServiceContainer::getService(\KupShop\OrderingBundle\Cart::class)->invalidatePurchaseState(); return empty($id) ? [] : ($this->data = array_merge($data, ['seller_id' => $id])); } public function setPointId($id): self { $this->data['seller_id'] = $id; return $this; } public function getPointId() { return $this->data['seller_id'] ?? null; } public function applyToOrder(&$data, $order) { parent::applyToOrder($data, $order); $info = $this->getInfo(); if (empty($info['id'])) { return 'Není zvolena pobočka pro vyzvednutí!'; } $data['delivery_firm'] = $info['name']; $data['delivery_zip'] = $info['zip']; $data['delivery_street'] = $info['street']; $data['delivery_city'] = $info['city']; $data['delivery_country'] = $info['country']; return true; } public function applyToCart(CartBase $cart) { parent::applyToCart($cart); $info = $this->getInfo(); if (empty($info['id'])) { return; } if (isset($cart->invoice['name'])) { $cart->delivery['name'] = $cart->invoice['name']; $cart->delivery['surname'] = $cart->invoice['surname']; } $cart->delivery['zip'] = $info['zip']; $cart->delivery['street'] = $info['street']; $cart->delivery['city'] = $info['city']; $cart->delivery['country'] = $info['country']; } public function checkSelected(Cart $cart, ?Payment $payment = null) { if (empty($this->data['seller_id']) && $cart->hasData('delivery')) { throw new DeliveryException('Nevybrali jste pobočku pro vyzvednutí!'); } return parent::checkSelected($cart, $payment); } public function requiresDeliveryAddress() { return false; } public function printDeliveryInfo() { $info = $this->getInfo(); return "{$info['city']}, {$info['street']}, {$info['name']}, {$info['zip']}"; } public function getDeliveryDate() { $purchaseState = ServiceContainer::getService(\KupShop\OrderingBundle\Cart::class)->getPurchaseState(); $sellerUtil = ServiceContainer::getService(SellerUtil::class); $sellers = $sellerUtil->getSellers(); $sellerUtil->loadSellersDeliveryInfoByPurchaseState($purchaseState, $sellers); if ($sellers[$this->getPointId()]['deliveryDate'] ?? false) { return $sellers[$this->getPointId()]['deliveryDate']; } return parent::getDeliveryDate(); } }