[Back] <?php
/*
* Copyright (c) 2022 LatePoint LLC. All rights reserved.
*/
namespace LatePoint\Misc;
class BookingSlot{
public string $start_date;
public int $start_time;
public int $min_capacity = 1;
public int $max_capacity = 1;
public int $min_capacity_to_be_blocked = 1;
public int $booked_capacity = 0;
public int $price;
function __construct($args = []){
$allowed_props = self::allowed_props();
foreach($args as $key => $arg){
if(in_array($key, $allowed_props)) $this->$key = $arg;
}
}
/**
* @param \LatePoint\Misc\BookingSlot[] $booking_slots
* @return int
*/
public static function find_minimum_gap_between_slots(array $booking_slots): int{
$minimum_slot_gap = 0;
// calculate minimum gap between slots
if(count($booking_slots) > 1){
$prev_start_time = $booking_slots[0]->start_time;
$intervals = [];
foreach($booking_slots as $booking_slot){
if($prev_start_time){
$gap = $booking_slot->start_time - $prev_start_time;
if($gap) $intervals[] = $gap;
}
$prev_start_time = $booking_slot->start_time;
}
if($intervals) $minimum_slot_gap = min($intervals);
}
return $minimum_slot_gap;
}
public function can_accomodate($total_attendees){
if($this->booked_capacity >= $this->min_capacity_to_be_blocked){
return false;
}else{
return $this->available_capacity() >= $total_attendees;
}
}
public function available_capacity(){
return $this->max_capacity - $this->booked_capacity;
}
public static function allowed_props(): array{
return ['start_time',
'start_date',
'min_capacity',
'max_capacity',
'min_capacity_to_be_blocked',
'booked_capacity',
'available_capacity',
'price'];
}
}