insertSql(null, array(__DIR__ . '/Config/thelia.sql')); } public function isValidDelivery(Country $country, State $state = null) { 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; } }