getWrappedConnection()); $database->insertSql(null, array(__DIR__ . '/Config/thelia.sql')); $database->insertSql(null, array(__DIR__ . '/Config/insert.sql')); } /** * This method is called by the Delivery loop, to check if the current module has to be displayed to the customer. * Override it to implements your delivery rules/ * * If you return true, the delivery method will de displayed to the customer * If you return false, the delivery method will not be displayed * * @param Country $country the country to deliver to. * * @return boolean */ public function isValidDelivery(Country $country) { $isValid = false; $con = Propel::getConnection(); $currentAddressId = $this->getRequest()->getSession()->getOrder()->getChoosenDeliveryAddress(); if (!empty($currentAddressId)) { $zipcode = AddressQuery::create()->filterById($currentAddressId)->findOne($con)->getZipcode(); // Condition 1 : le client doit être situé dans un secteur couvert par la livraison à domicile. if (null !== $areaId = LpsAreaCityQuery::create()->filterByZipcode($zipcode)->findOne($con)) { $area = LpsAreaQuery::create()->findOneById($areaId); // Condition 2 : le secteur doit être actif à date. if ($area->getActive() === self::SECTEUR_ACTIF) $isValid = true; } } return $isValid; } /** * Calculate and return delivery price in the shop's default currency * * @param Country $country the country to deliver to. * * @return OrderPostage|float the delivery price * @throws DeliveryException if the postage price cannot be calculated. */ public function getPostage(Country $country) { if (! $this->isValidDelivery($country)) { throw new DeliveryException( Translator::getInstance()->trans("This module cannot be used on the current cart.") ); } $price = 0; $con = Propel::getConnection(); $currentAddressId = $this->getRequest()->getSession()->getOrder()->getChoosenDeliveryAddress(); if (!empty($currentAddressId)) { $zipcode = AddressQuery::create()->filterById($currentAddressId)->findOne($con)->getZipcode(); $areaId = LpsAreaCityQuery::create()->findOneByZipcode($zipcode)->getIdArea(); $price = LpsAreaQuery::create()->findOneById($areaId)->getPrice(); } return $price; } static public function getDayLabel($int) { $translator = Translator::getInstance(); $days = [ $translator->trans("Monday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Tuesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Wednesday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Thursday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Friday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Saturday", [], LivraisonParSecteurs::MESSAGE_DOMAIN), $translator->trans("Sunday", [], LivraisonParSecteurs::MESSAGE_DOMAIN) ]; if ($int === null) return $days; else return $days[$int]; } static public function calculateRelativeDate($baseDay) { $minimumDelayBeforeOrder = PlanificationLivraison::getConfigValue(PlanificationLivraison::CONFIG_PREPARATION_DELAY, 0, "en_US"); $date = new \DateTime(); $date->add(new DateInterval('P'. $minimumDelayBeforeOrder . 'D')); $nextPossibleDay = ''; switch ($baseDay) { case 0 : $nextPossibleDay = $date->modify('next monday'); break; case 1 : $nextPossibleDay = $date->modify('next tuesday'); break; case 2 : $nextPossibleDay = $date->modify('next wednesday'); break; case 3 : $nextPossibleDay = $date->modify('next thursday'); break; case 4 : $nextPossibleDay = $date->modify('next friday'); break; case 5 : $nextPossibleDay = $date->modify('next saturday'); break; case 6 : $nextPossibleDay = $date->modify('next sunday'); break; } return $nextPossibleDay; } }