PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.13
VikBooking Hotel Booking Engine & PMS v1.8.13
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
vikbooking / admin / helpers / src / rms / pace / data / metric / bookedrooms.php

bookedrooms.php in VikBooking Hotel Booking Engine & PMS 1.8.13, at admin/helpers/src/rms/pace/data/metric/bookedrooms.php

58 lines 2.1 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package VikBooking
4 * @subpackage core
5 * @author E4J s.r.l.
6 * @copyright Copyright (C) 2025 E4J s.r.l. All Rights Reserved.
7 * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 * @link https://vikwp.com
9 */
10
11 // No direct access
12 defined('ABSPATH') or die('No script kiddies please!');
13
14 /**
15 * RMS Pace Data Metric Booked Rooms implementation.
16 *
17 * @since 1.18.6 (J) - 1.8.6 (WP)
18 */
19 final class VBORmsPaceDataMetricBookedrooms extends VBORmsPaceDataMetric
20 {
21 /**
22 * @inheritDoc
23 */
24 public function extract(VBORmsPaceDataperiod $paceDataPeriod, ?array $periodPaceMetrics = null)
25 {
26 // associative list of booked room IDs and related room nights
27 $bookedRooms = [];
28
29 // determine the period interval type for evaluation
30 $intervalType = $paceDataPeriod->getIntervalType();
31
32 // get the period start and end timestamps
33 list($periodTsFrom, $periodTsTo) = $paceDataPeriod->getPeriodTimestamps();
34
35 // iterate all bookings affecting the current period
36 foreach ($paceDataPeriod as $booking) {
37 foreach (($booking['_rooms'] ?? []) as $bookingRoom) {
38 if ($intervalType === 'DAY') {
39 // single day period will count as one night
40 $bookedRooms[$bookingRoom['idroom']] = ($bookedRooms[$bookingRoom['idroom']] ?? 0) + 1;
41 } else {
42 // period interval is longer than one day, count the affected nights of stay
43 $startTs = max($periodTsFrom, $booking['checkin']);
44 $endTs = min($periodTsTo, $booking['checkout']);
45 $inclusive = $endTs === $periodTsTo;
46 $bookedRooms[$bookingRoom['idroom']] = ($bookedRooms[$bookingRoom['idroom']] ?? 0) + VBORmsPace::getInstance()->countNightsDifferenceTs($startTs, $endTs, $inclusive);
47 }
48 }
49 }
50
51 // sort descending and keep indexes
52 arsort($bookedRooms);
53
54 // return the sorted associative list
55 return $bookedRooms;
56 }
57 }
58