100.0, // Maximální rozměr strany položky 'maxSumOfDimensions' => 300.0, // Maximální součet rozměrů všech tří stran položky // legacy config: 'max_length' => 98, // Maximální rozměr jedné strany zásilky 'max_dimensions' => 300, // Maximální součet rozměrů všech tří stran zásilky ]; public function getName() { $info = self::getInfo($this->psc); return parent::getName().' - '.$info['name']; } public function storeDeliveryInfo($data) { parent::storeDeliveryInfo($data); $psc = trim($data['balik_na_postu_zip'] ?? ''); if (!empty($psc)) { if (strlen($psc) != 5) { return $this->data; } return $this->data += [ 'psc' => $psc, ]; } $point = $data['balik_na_postu_point'] ?? ''; $point = json_decode($point, true); if (empty($point)) { return $this->data; } return $this->data += [ 'psc' => getVal('zip', $point) ?? getVal('psc', $point), 'point_name' => getVal('name', $point), 'address' => getVal('address', $point), ]; } public function getInfo($PSC = null) { if (is_null($PSC) && getVal('point_name', $this->data)) { $data = []; $data['psc'] = getVal('psc', $this->data); $data['name'] = getVal('point_name', $this->data); $data['address'] = getVal('address', $this->data); } else { if (is_null($PSC)) { $PSC = getVal('psc', $this->data); } $data = sqlQueryBuilder()->select('*')->from(self::$tableName) ->andWhere(\Query\Operator::equals(['psc' => $PSC])) ->execute()->fetch(); if (!$data) { return ['name' => 'Neznámá pošta']; } $data['hours'] = unserialize($data['hours']); } return $data; } /** * @param $data admin order data */ public function applyToOrder(&$data, $order) { parent::applyToOrder($data, $order); $info = $this->getInfo(); if (empty($info['psc'])) { return 'Není zvolena žádná pošta!'; } $data['delivery_zip'] = $info['psc']; $address = explode(', ', $info['address']); $data['delivery_street'] = reset($address); $data['delivery_city'] = $info['name']; $data['delivery_country'] = 'CZ'; $data['delivery_firm'] = ''; return true; } /** * @param $cart CartBase */ public function applyToCart(CartBase $cart) { parent::applyToCart($cart); $info = $this->getInfo(); if (empty($info['psc'])) { return; } if (isset($cart->invoice['name'])) { $cart->delivery['name'] = $cart->invoice['name']; $cart->delivery['surname'] = $cart->invoice['surname']; } $cart->delivery['zip'] = $info['psc']; $address = explode(', ', $info['address']); $cart->delivery['street'] = reset($address); $cart->delivery['city'] = end($address); $cart->delivery['country'] = 'CZ'; $cart->delivery['firm'] = ''; } public function printDeliveryInfo() { $info = $this->getInfo(); return "{$info['name']} PSČ: {$info['psc']}"; } public function getPointId() { return $this->data['psc'] ?? null; } public static function generateOpeningHours($days) { $hours = []; foreach ($days->den as $day) { $fromTo = []; foreach ($day->od_do as $od_do) { $fromTo[] = [strval($od_do->od), strval($od_do->do)]; } $hours[strval($day['name'])] = $fromTo; } return $hours; } public function checkSelected(Cart $cart, ?Payment $payment = null) { if (empty($this->data['psc']) && $cart->hasData('delivery')) { throw new \KupShop\OrderingBundle\Exception\DeliveryException(translate_shop('no_zipcode', 'delivery')); } return parent::checkSelected($cart, $payment); } public function import() { $xml = simplexml_load_file(self::$xmlFile); if (count($xml->row) > 1000) { sqlGetConnection()->transactional(function () use ($xml) { global $cfg; sqlQuery('DELETE FROM '.self::$tableName.' WHERE 1'); foreach ($xml->row as $post) { if (strval($post->V_PROVOZU) == 'A') { continue; } $data = [ 'psc' => strval($post->PSC), 'name' => strval($post->NAZ_PROV), 'address' => strval($post->ADRESA), 'hours' => serialize(self::generateOpeningHours($post->OTV_DOBA)), 'region' => strval($post->OKRES), ]; sqlQuery( 'INSERT INTO '.self::$tableName.' SET name=:name, psc=:psc, address=:address, hours=:hours, region=:region', $data ); } try { file_put_contents($cfg['Path']['data'].'tmp/CPpasmo.xls', fopen(self::$xlsDelivery, 'r')); $import = new AutomaticImportTransform($cfg['Path']['data'].'tmp/CPpasmo.xls'); $users_array = $import->LoadBinfileAsArray(); foreach ($users_array['Doruč_pásmo'] as $post) { $psc = substr($post['B'], 0, 5); sqlQuery('UPDATE '.self::$tableName.' SET time_zone = 1 WHERE psc = :psc', ['psc' => $psc]); } } catch (\Exception $e) { $sentry = getRaven(); $sentry->captureMessage( 'CeskaPosta odpoledni doruceni: file not found', [], [ 'extra' => [ 'err_msg' => $e->getMessage(), ], ] ); } }); } } }