insertSql(null, array(__DIR__ . '/Config/thelia.sql')); } public function isValidDelivery(Country $country, State $state = null) { if (0 == self::getConfigValue(FedExConfigValue::ENABLED, 1)) { return false; } if (null !== $area = $this->getAreaForCountry($country, $state)) { $areaId = $area->getId(); $prices = self::getPrices(); /* Check if FedEx delivers the area */ if (isset($prices[$areaId]) && isset($prices[$areaId]["slices"])) { // Yes ! Check if the cart weight is below slice limit $areaPrices = $prices[$areaId]["slices"]; ksort($areaPrices); /* Check cart weight is below the maximum weight */ end($areaPrices); $maxWeight = key($areaPrices); $cartWeight = $this->getRequest()->getSession()->getSessionCart($this->getDispatcher())->getWeight(); if ($cartWeight <= $maxWeight) { return true; } } } return false; } /** * @param $areaId * @param $weight * * @return mixed * @throws \Thelia\Exception\OrderException */ public static function getPostageAmount($areaId, $weight) { $prices = self::getPrices(); /* check if FedEx delivers the asked area */ if (!isset($prices[$areaId]) || !isset($prices[$areaId]["slices"])) { throw new DeliveryException( Translator::getInstance()->trans( "FedEx delivery unavailable for the delivery country", [], self::DOMAIN_NAME ) ); } $areaPrices = $prices[$areaId]["slices"]; ksort($areaPrices); /* Check cart weight is below the maximum weight */ end($areaPrices); $maxWeight = key($areaPrices); if ($weight > $maxWeight) { throw new DeliveryException( Translator::getInstance()->trans( "FedEx delivery unavailable for this cart weight (%weight kg)", array("%weight" => $weight), self::DOMAIN_NAME ) ); } $postage = current($areaPrices); while (prev($areaPrices)) { if ($weight > key($areaPrices)) { break; } $postage = current($areaPrices); } return $postage; } /** * * calculate and return delivery price * * @param Country $country * @param State $state * @return mixed */ public function getPostage(Country $country, State $state = null) { $cartWeight = $this->getRequest()->getSession()->getSessionCart($this->getDispatcher())->getWeight(); $postage = self::getPostageAmount( $this->getAreaForCountry($country, $state)->getId(), $cartWeight ); return $postage; } public function update($currentVersion, $newVersion, ConnectionInterface $con = null) { $uploadDir = __DIR__ . '/Config/prices.json'; // $database = new Database($con); // $tableExists = $database->execute("SHOW TABLES LIKE 'FedEx_freeshipping'")->rowCount(); // if (FedEx::getConfigValue(FedExConfigValue::FREE_SHIPPING, null) == null && $tableExists) { // $result = $database->execute('SELECT active FROM FedEx_freeshipping WHERE id=1')->fetch()["active"]; // FedEx::setConfigValue(FedExConfigValue::FREE_SHIPPING, $result); // $database->execute("DROP TABLE `FedEx_freeshipping`"); // } if (is_readable($uploadDir) && FedEx::getConfigValue(FedExConfigValue::PRICES, null) == null) { FedEx::setConfigValue(FedExConfigValue::PRICES, file_get_contents($uploadDir)); } } }