diff --git a/local/modules/PlanificationLivraison/EventListeners/DeliveryListener.php b/local/modules/PlanificationLivraison/EventListeners/DeliveryListener.php index 04105395..449ca6ca 100644 --- a/local/modules/PlanificationLivraison/EventListeners/DeliveryListener.php +++ b/local/modules/PlanificationLivraison/EventListeners/DeliveryListener.php @@ -5,6 +5,7 @@ namespace PlanificationLivraison\EventListeners; use ClickAndCollect\ClickAndCollect; use DateTime; use LivraisonParSecteurs\LivraisonParSecteurs; +use LivraisonParSecteurs\Model\LpsAreaCityQuery; use LivraisonParSecteurs\Model\LpsAreaScheduleQuery; use PlanificationLivraison\Model\OrderDeliverySchedule; use PlanificationLivraison\PlanificationLivraison; @@ -20,6 +21,7 @@ use Thelia\Core\Event\TheliaEvents; use Thelia\Core\HttpFoundation\Request; use Thelia\Core\HttpFoundation\Session\Session; use Thelia\Exception\TheliaProcessException; +use Thelia\Model\AddressQuery; use Thelia\Model\ModuleQuery; use PlanificationLivraison\Model\SessionData; @@ -59,20 +61,31 @@ class DeliveryListener extends BaseAction implements EventSubscriberInterface if (null !== $scheduleId = $request->get('lps-choosen-day', null)) { $sessionData = new SessionData(); - $sessionData->setDeliveryAddressId($session->getOrder()->getChoosenDeliveryAddress()); - $sessionData->setScheduleId($scheduleId); + $con = Propel::getConnection(); - // On sauvegarde la date de livraison choisie avec les heures, pour affichage ultérieur. - $schedule = LpsAreaScheduleQuery::create()->findOneById($scheduleId); - $chosenDate = PlanificationLivraison::calculateRelativeDate($schedule->getDay()); - $completeDay = PlanificationLivraison::getDayLabel($schedule->getDay()); - $completeDay .= " " . $chosenDate->format(PlanificationLivraison::FORMAT_DATES); + $choosenAddressId = $session->getOrder()->getChoosenDeliveryAddress(); + $zipcode = AddressQuery::create()->filterById($choosenAddressId)->findOne($con)->getZipcode(); + $areaFromZipcode = LpsAreaCityQuery::create()->filterByZipcode($zipcode)->findOne($con); + if (null !== $areaFromZipcode) { + $sessionData->setDeliveryAddressId($areaFromZipcode->getIdArea()); + $sessionData->setScheduleId($scheduleId); - $sessionData->setDeliveryDate($completeDay); - $sessionData->setDeliveryStartTime($schedule->getBeginTime()); - $sessionData->setDeliveryEndTime($schedule->getEndTime()); + // On sauvegarde la date de livraison choisie avec les heures, pour affichage ultérieur. + $schedule = LpsAreaScheduleQuery::create()->findOneById($scheduleId); + $chosenDate = PlanificationLivraison::calculateRelativeDate($schedule->getDay()); + $completeDay = PlanificationLivraison::getDayLabel($schedule->getDay()); + $completeDay .= " " . $chosenDate->format(PlanificationLivraison::FORMAT_DATES); - $session->set('lpsData', $sessionData); + $sessionData->setDeliveryDate($completeDay); + $sessionData->setDeliveryStartTime($schedule->getBeginTime()); + $sessionData->setDeliveryEndTime($schedule->getEndTime()); + + $session->set('lpsData', $sessionData); + } + else { + // Pas de Area trouvée à partir du ZipCode + $session->set('lspData', null); + } } } diff --git a/local/modules/PlanificationLivraison/Loop/ScheduledDeliveriesLoop.php b/local/modules/PlanificationLivraison/Loop/ScheduledDeliveriesLoop.php index 8ae96134..08726448 100644 --- a/local/modules/PlanificationLivraison/Loop/ScheduledDeliveriesLoop.php +++ b/local/modules/PlanificationLivraison/Loop/ScheduledDeliveriesLoop.php @@ -56,7 +56,7 @@ class ScheduledDeliveriesLoop extends BaseLoop implements PropelSearchLoopInterf if (null != $deliveries->getDeliveryAddressId()) { $city = OrderAddressQuery::create()->findOneById($order->getDeliveryOrderAddressId())->getCity(); - $area = LpsAreaQuery::create()->findOneById(LpsAreaCityQuery::create()->findOneById($deliveries->getDeliveryAddressId())->getIdArea())->getTitle(); + $area = LpsAreaQuery::create()->findOneById($deliveries->getDeliveryAddressId())->getTitle(); } if (null != $deliveries->getDeliveryPlaceId())