From d2640427046e6f071a0459b65d4880ccaf809db3 Mon Sep 17 00:00:00 2001 From: michael-graute Date: Thu, 27 May 2021 17:04:59 +0200 Subject: [PATCH] made housingOption condition available to Duration and DepartureDate filters --- src/Pressmind/Search/Filter/DepartureDate.php | 11 ++++++++++- src/Pressmind/Search/Filter/Duration.php | 12 +++++++++++- src/Pressmind/Search/Filter/PriceRange.php | 1 + 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/Pressmind/Search/Filter/DepartureDate.php b/src/Pressmind/Search/Filter/DepartureDate.php index bd44d7c..f442fc6 100644 --- a/src/Pressmind/Search/Filter/DepartureDate.php +++ b/src/Pressmind/Search/Filter/DepartureDate.php @@ -65,7 +65,16 @@ public function getResult() foreach ($results as $result) { $media_object_ids[] = $result->id; } - $dates = $db->fetchAll("SELECT date_departure from pmt2core_cheapest_price_speed WHERE id_media_object in(" . implode(',', $media_object_ids) . ") ORDER BY date_departure ASC"); + $query = []; + $query[] = "SELECT date_departure from pmt2core_cheapest_price_speed WHERE id_media_object in(" . implode(',', $media_object_ids) . ")"; + /** @var Search\Condition\HousingOption $housing_option_condition */ + if($housing_option_condition = $this->_search->getCondition('\Pressmind\Search\Condition\HousingOption')) { + $cheapest_price_filter = new Search\CheapestPrice(); + $cheapest_price_filter->occupancy = $housing_option_condition->occupancy; + $query[] = "AND (" . $housing_option_condition->occupancy . " BETWEEN option_occupancy_min AND option_occupancy_max OR option_occupancy = " . $housing_option_condition->occupancy . ")"; + } + $query[] = "ORDER BY date_departure ASC"; + $dates = $db->fetchAll(implode(' ', $query)); if (count($dates) > 0) { $counter = count($dates) - 1; $earliest_departure_date = \DateTime::createFromFormat('Y-m-d H:i:s', $dates[0]->date_departure); diff --git a/src/Pressmind/Search/Filter/Duration.php b/src/Pressmind/Search/Filter/Duration.php index 24f7c1c..ae7a40f 100644 --- a/src/Pressmind/Search/Filter/Duration.php +++ b/src/Pressmind/Search/Filter/Duration.php @@ -42,10 +42,20 @@ public function getResult() $results = $this->_search->getResults(false, true); $durations = []; foreach ($results as $result) { - foreach ($result->booking_packages as $booking_package) { + /*foreach ($result->booking_packages as $booking_package) { if(($min == null || $max == null) || ($min <= $booking_package->duration && $max >= $booking_package->duration)) { $durations[] = $booking_package->duration; } + }*/ + $cheapest_price_filter = null; + /** @var Search\Condition\HousingOption $housing_option_condition */ + if($housing_option_condition = $this->_search->getCondition('\Pressmind\Search\Condition\HousingOption')) { + $cheapest_price_filter = new Search\CheapestPrice(); + $cheapest_price_filter->occupancy = $housing_option_condition->occupancy; + } + $cheapest_price = $result->getCheapestPrice($cheapest_price_filter); + if(!is_null($cheapest_price) && (($min == null || $max == null) || ($min <= $cheapest_price->price_total && $max >= $cheapest_price->price_total))) { + $durations[] = $cheapest_price->duration; } } sort($durations); diff --git a/src/Pressmind/Search/Filter/PriceRange.php b/src/Pressmind/Search/Filter/PriceRange.php index e4454d7..f365b38 100644 --- a/src/Pressmind/Search/Filter/PriceRange.php +++ b/src/Pressmind/Search/Filter/PriceRange.php @@ -43,6 +43,7 @@ public function getResult() $prices = []; foreach ($results as $result) { $cheapest_price_filter = null; + /** @var Search\Condition\HousingOption $housing_option_condition */ if($housing_option_condition = $this->_search->getCondition('\Pressmind\Search\Condition\HousingOption')) { $cheapest_price_filter = new Search\CheapestPrice(); $cheapest_price_filter->occupancy = $housing_option_condition->occupancy;