feat: optionally sort pricetable by room name

This commit is contained in:
Björn Fromme
2024-04-19 16:35:19 +02:00
parent 5f674392ce
commit 51a1dba6df
3 changed files with 14 additions and 4 deletions
@@ -292,6 +292,7 @@ class AjaxTableController extends ActionController
'filterSettings' => $this->filterService->getNormalizedFilterSettings(), 'filterSettings' => $this->filterService->getNormalizedFilterSettings(),
'template' => $this->settings['bpnBookingUrlTemplateCode'], 'template' => $this->settings['bpnBookingUrlTemplateCode'],
'paCode' => $paCode, 'paCode' => $paCode,
'sortByRoom' => true,
]); ]);
$this->view->assign('pricetable', $pricetable); $this->view->assign('pricetable', $pricetable);
@@ -187,7 +187,7 @@ class ProductRepository extends AbstractRepository
; ;
} }
public function getPricetable(Product $product, Hotel $hotel, array $filterSettings, Date $date = null): array public function getPricetable(Product $product, Hotel $hotel, array $filterSettings, Date $date = null, bool $sortByRoom = false): array
{ {
$qb = $this->getDbConnection()->createQueryBuilder(); $qb = $this->getDbConnection()->createQueryBuilder();
@@ -203,7 +203,14 @@ class ProductRepository extends AbstractRepository
) )
->from('tx_epproducts_domain_model_date', 'date') ->from('tx_epproducts_domain_model_date', 'date')
->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'date.uid = room.date') ->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'date.uid = room.date')
->orderBy('date.date_start', 'ASC') ;
if (true === $sortByRoom) {
$qb->addOrderBy('room.name', 'ASC');
}
$qb
->addOrderBy('date.date_start', 'ASC')
->addOrderBy('room.pax', 'ASC') ->addOrderBy('room.pax', 'ASC')
->addOrderBy('room.price', 'ASC') ->addOrderBy('room.price', 'ASC')
->where('date.date_start >= NOW()') ->where('date.date_start >= NOW()')
@@ -350,7 +357,6 @@ class ProductRepository extends AbstractRepository
'date.date_end as dateEnd', 'date.hotel as hotelUid', 'date.hotel_name as hotelName', 'date.date_end as dateEnd', 'date.hotel as hotelUid', 'date.hotel_name as hotelName',
'date.hotel_header_title as hotelTitle', 'date.hotel_category as hotelCategory', 'date.hotel_header_title as hotelTitle', 'date.hotel_category as hotelCategory',
'room.pax as roomPax', 'room.price as roomPrice', 'room.available as available', 'room.pax as roomPax', 'room.price as roomPrice', 'room.available as available',
'room.pax as roomPax', 'room.price as roomPrice', 'room.available as available',
'hotel.detail_page as hotelDetailPageUid', 'hotel.short_name as hotelShortName', 'hotel.detail_page as hotelDetailPageUid', 'hotel.short_name as hotelShortName',
'hotel.show_as_teaser as hotelShowAsTeaser' 'hotel.show_as_teaser as hotelShowAsTeaser'
) )
@@ -109,6 +109,7 @@ class DateService implements SingletonInterface
$date = $resolvedOptions['date']; $date = $resolvedOptions['date'];
$template = $resolvedOptions['template']; $template = $resolvedOptions['template'];
$paCode = $resolvedOptions['paCode']; $paCode = $resolvedOptions['paCode'];
$sortByRoom = $resolvedOptions['sortByRoom'];
if ($filterSettings === null) { if ($filterSettings === null) {
$filterSettings = $this->filterService->getNormalizedFilterSettings(); $filterSettings = $this->filterService->getNormalizedFilterSettings();
@@ -117,7 +118,7 @@ class DateService implements SingletonInterface
$nonBookableDateUids = GeneralUtility::trimExplode(',', $product->getNonBookableDates(), true); $nonBookableDateUids = GeneralUtility::trimExplode(',', $product->getNonBookableDates(), true);
return $this->preprocessPriceTable([ return $this->preprocessPriceTable([
'priceTableData' => $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date), 'priceTableData' => $this->productRepository->getPricetable($product, $hotel, $filterSettings, $date, $sortByRoom),
'template' => $template, 'template' => $template,
'paCode' => $paCode, 'paCode' => $paCode,
'isDayTrip' => $product->isDaytrip(), 'isDayTrip' => $product->isDaytrip(),
@@ -133,10 +134,12 @@ class DateService implements SingletonInterface
$resolver->setDefaults([ $resolver->setDefaults([
'template' => 'base', 'template' => 'base',
'date' => null, 'date' => null,
'sortByRoom' => false,
]); ]);
$resolver->setAllowedTypes('product', Product::class); $resolver->setAllowedTypes('product', Product::class);
$resolver->setAllowedTypes('hotel', Hotel::class); $resolver->setAllowedTypes('hotel', Hotel::class);
$resolver->setAllowedTypes('date', [Date::class, 'null']); $resolver->setAllowedTypes('date', [Date::class, 'null']);
$resolver->setAllowedTypes('sortByRoom', 'bool');
} }
public function getDatesTable(array $options): array public function getDatesTable(array $options): array