From 9c431e0a4bb9f3c6d678c24881b7aa33dc2a05a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Till=20Gl=C3=B6ggler?= <till@gundk.it> Date: Mon, 11 Oct 2021 12:47:21 +0200 Subject: [PATCH] exlcude booked rooms from overlap check, give info about number of booked dates for each room --- app/controllers/resources/room_request.php | 4 +++- .../resources/room_request/resolve_room_tr.php | 14 ++++++++++++++ lib/models/resources/ResourceRequest.class.php | 12 ++++++++++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/app/controllers/resources/room_request.php b/app/controllers/resources/room_request.php index 2b25b7f9d6e..0592b119cf2 100644 --- a/app/controllers/resources/room_request.php +++ b/app/controllers/resources/room_request.php @@ -380,13 +380,15 @@ class Resources_RoomRequestController extends AuthenticatedController protected function getRoomAvailability(Room $room, $time_intervals = []) { $availability = []; + foreach ($time_intervals as $interval) { $begin = new DateTime(); $end = new DateTime(); $begin->setTimestamp($interval['begin']); $end->setTimestamp($interval['end']); - $availability[] = $room->isAvailable($begin, $end); + $availability[] = $room->isAvailable($begin, $end, [$interval['booking_id']]); } + return $availability; } diff --git a/app/views/resources/room_request/resolve_room_tr.php b/app/views/resources/room_request/resolve_room_tr.php index edac4b509a5..83b6ae7cacb 100644 --- a/app/views/resources/room_request/resolve_room_tr.php +++ b/app/views/resources/room_request/resolve_room_tr.php @@ -55,6 +55,20 @@ ? 'checked="checked"' : ''?>> <?= Icon::create('check-circle', Icon::ROLE_STATUS_GREEN)->asImg(['class' => 'text-bottom']) ?> + + <? $stats = 0; array_walk($data['intervals'], function(&$item, $key, $room_id) use (&$stats) { + if ($item['booked_room'] == $room_id) { + $stats++; + } + }, $room->id) ?> + + <? if ($stats > 0) : ?> + <?= tooltipIcon(sprintf( + _('%s von %s Terminen sind in diesem Raum'), + $stats, sizeof($data['intervals']) + )); + ?> + <? endif ?> <? else: ?> <input type="radio" name="<?= htmlReady($room_radio_name) ?>" value="1" disabled="disabled" diff --git a/lib/models/resources/ResourceRequest.class.php b/lib/models/resources/ResourceRequest.class.php index d7435c8cde8..b65e39ca3d0 100644 --- a/lib/models/resources/ResourceRequest.class.php +++ b/lib/models/resources/ResourceRequest.class.php @@ -926,9 +926,12 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen 'end' => $appointment->appointment->end_time ]; } + + $date = CourseDate::find($appointment->appointment_id); $interval['range'] = 'CourseDate'; $interval['range_id'] = $appointment->appointment_id; - $interval['booked_room'] = CourseDate::find($appointment->appointment_id)->room_booking->resource_id; + $interval['booked_room'] = $date->room_booking->resource_id; + $interval['booking_id'] = $date->room_booking->id; $time_intervals['']['intervals'][] = $interval; } @@ -949,9 +952,12 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen 'end' => $this->date->end_time ]; } + + $date = CourseDate::find($this->termin_id); $interval['range'] = 'CourseDate'; $interval['range_id'] = $this->termin_id; - $interval['booked_room'] = CourseDate::find($this->termin_id)->room_booking->resource_id; + $interval['booked_room'] = $date->room_booking->resource_id; + $interval['booking_id'] = $date->room_booking->id; if (!empty($interval)) { return [ @@ -985,6 +991,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen $interval['range'] = 'CourseDate'; $interval['range_id'] = $date->id; $interval['booked_room'] = $date->room_booking->resource_id; + $interval['booking_id'] = $date->room_booking->id; $time_intervals[$this->metadate_id]['intervals'][] = $interval; } return $time_intervals; @@ -1012,6 +1019,7 @@ class ResourceRequest extends SimpleORMap implements PrivacyObject, Studip\Calen $interval['range'] = 'CourseDate'; $interval['range_id'] = $date->id; $interval['booked_room'] = $date->room_booking->resource_id; + $interval['booking_id'] = $date->room_booking->id; $time_intervals[$cycle->id]['intervals'][] = $interval; } } -- GitLab