PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.15
VikBooking Hotel Booking Engine & PMS v1.8.15
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 1.7.3 All 36 releases
vikbooking / admin / helpers / src / rms / pace / data / metric / abrn.php

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

57 lines 1.9 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 ABRN (As Booked Room Nights) implementation.
16 *
17 * @since 1.18.6 (J) - 1.8.6 (WP)
18 */
19 final class VBORmsPaceDataMetricAbrn extends VBORmsPaceDataMetric
20 {
21 /**
22 * @inheritDoc
23 */
24 public function extract(VBORmsPaceDataperiod $paceDataPeriod, ?array $periodPaceMetrics = null)
25 {
26 // start counter
27 $abrnCount = 0;
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 // multi or single room booking multiplier factor
38 $unitsFactor = ($booking['roomsnum'] ?? 1) ?: 1;
39
40 // increase counter depending on period interval type
41 if ($intervalType === 'DAY') {
42 // single day period will count the number of booked listings
43 $abrnCount += $unitsFactor;
44 } else {
45 // period interval is longer than one day, count the affected nights of stay
46 $startTs = max($periodTsFrom, $booking['checkin']);
47 $endTs = min($periodTsTo, $booking['checkout']);
48 $inclusive = $endTs === $periodTsTo;
49 $abrnCount += VBORmsPace::getInstance()->countNightsDifferenceTs($startTs, $endTs, $inclusive) * $unitsFactor;
50 }
51 }
52
53 // return the number of as booked room nights
54 return $abrnCount;
55 }
56 }
57