<?php
declare(strict_types=1);
/*
* This file is part of contao-weinanlieferung-bundle.
*
* (c) vonRotenberg
*
* @license commercial
*/
namespace vonRotenberg\WeinanlieferungBundle;
use Doctrine\DBAL\Connection;
class SlotChecker {
private $db;
public function __construct(Connection $connection) {
$this->db = $connection;
}
public function checkTimeApplicableForSite(int $siteId, int $startTime, int $endTime, int $buffer=0,int $exceptionId=0): bool {
// Get existing slots in the timeframe
$sql = "SELECT COUNT(id) FROM tl_vr_wa_slot
WHERE
pid = :pid
AND
(
(
time >= :start
AND time <= :end
)
OR
(
time+duration*60 > :start
AND time+duration*60 <= :end
)
OR
(
time < :start
AND time+duration*60 > :end
)
)";
$values = ['pid' => $siteId, 'start' => $startTime-$buffer, 'end' => $endTime+$buffer];
if ($exceptionId > 0)
{
$sql .= " AND id != :exceptionId";
$values['exceptionId'] = $exceptionId;
}
$ConflictingSlots = $this->db->prepare($sql)->executeQuery($values);
return $ConflictingSlots->fetchOne() == true;
}
}