";
echo $txt;
}
private static function getSqlForResByTime() {
// REM* roomname and tablename only for the html output
$sql = "SELECT R.id,U.username as username,creationdate,scheduledate,starttime,name,email,persons,duration,phone,remark,tableid, ";
$sql .= "IF(tableid is null,'-1',(SELECT RO.id as roomid FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as roomid, ";
$sql .= "IF(tableid is null,'-1',(SELECT RO.sorting as roomsorting FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as roomsorting, ";
$sql .= "IF(tableid is null,'',(SELECT RO.roomname as roomname FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as roomname, ";
$sql .= "IF(tableid is null,'-1',(SELECT T.sorting as tablesorting FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as tablesorting, ";
$sql .= "IF(tableid is null,'',(SELECT T.tableno as tablename FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as tablename ";
$sql .= "FROM %reservations% R,%user% U ";
$sql .= "WHERE DATE(scheduledate)=? AND R.creator=U.id ";
return $sql;
}
private function getReservations($day,$month,$year) {
$pdo = DbUtils::openDbAndReturnPdoStatic();
// REM* the many sortings in the sql allow the sorting by time, room-sort and table-sort
$sql = self::getSqlForResByTime();
$timeSortedReservations = $this->getReservationsCore($pdo,$day,$month,$year,$sql . " ORDER BY starttime,roomsorting,tablesorting");
// REM* and now by table
$sql = "SELECT DISTINCT R.tableid as tableid,ROOM.id as roomid,ROOM.sorting as roomsorting,T.sorting as tablesorting FROM %reservations% R,%room% ROOM,%resttables% T ";
$sql .= " WHERE DATE(scheduledate)=? AND tableid is not null AND tableid >= '0' ";
$sql .= " AND R.tableid = T.id AND T.roomid=ROOM.id ";
$sql .= " ORDER BY ROOM.sorting,T.sorting ";
$day = sprintf("%02s", $day);
$month = sprintf("%02s", $month);
$scheduledDate = "$year-$month-$day";
$allTablesOfResAtThatDate = CommonUtils::fetchSqlAll($pdo, $sql, array($scheduledDate));
$byTables = array();
foreach($allTablesOfResAtThatDate as $tableRes) {
$sql = "SELECT R.id,U.username as creator,creationdate,scheduledate,starttime as start,name as guest,email,persons,duration,(starttime + duration) as endhour,";
$sql .= " phone,remark,tableid,'" . $tableRes["roomid"] . "' as roomid ";
$sql .= "FROM %reservations% R,%user% U ";
$sql .= "WHERE DATE(scheduledate)=? AND R.creator=U.id AND tableid=? ";
$sql .= "ORDER BY starttime";
$allResOfThatTable = CommonUtils::fetchSqlAll($pdo, $sql, array($scheduledDate,$tableRes["tableid"]));
$byTables[] = array("tableid" => $tableRes["tableid"],"roomid" => $tableRes["roomid"], "reservations" => $allResOfThatTable);
}
// REM* these were all reservations by table at the given date. Let's add all reservations without a table assignment
$sql = "SELECT R.id,U.username as creator,creationdate,scheduledate,starttime as start,name as guest,email,persons,duration,(starttime + duration) as endhour,";
$sql .= " phone,remark,'-1' as tableid,'-1' as roomid ";
$sql .= "FROM %reservations% R,%user% U ";
$sql .= "WHERE DATE(scheduledate)=? AND R.creator=U.id AND (tableid is null OR tableid='-1') ";
$sql .= "ORDER BY starttime";
$allResOfUndefinedTable = CommonUtils::fetchSqlAll($pdo, $sql, array($scheduledDate));
if (count($allResOfUndefinedTable) > 0) {
$byTables[] = array("tableid" => '-1',"roomid" => '-1', "reservations" => $allResOfUndefinedTable);
}
$msg = array("bytimes" => $timeSortedReservations,"bytables" => $byTables);
// REM* now attach a list of rooms and tables to select for new reservations
$tableoverview = self::gettablesoverview($pdo);
echo json_encode(array("status" => "OK", "msg" => $msg,"tableoverview" => $tableoverview));
}
private function getReservationsCore($pdo,$day,$month,$year,$sql) {
$day = sprintf("%02s", $day);
$month = sprintf("%02s", $month);
$scheduledDate = "$year-$month-$day";
try {
$pdo = DbUtils::openDbAndReturnPdoStatic();
$result = CommonUtils::fetchSqlAll($pdo, $sql, array($scheduledDate));
$resArray = array();
foreach($result as $row) {
$datetimeparts = explode(" ",$row['scheduledate']);
$thedate = $datetimeparts[0];
$thedateparts = explode("-",$thedate);
$resArray[] = array(
"id" => $row['id'],
"creator" => $row['username'],
"creationdate" => $row['creationdate'],
"day" => $thedateparts[2],
"month" => $thedateparts[1],
"year" => $thedateparts[0],
"start" => $row['starttime'],
"guest" => $row['name'],
"email" => $row['email'],
"persons" => $row['persons'],
"duration" => $row['duration'],
"phone" => $row['phone'],
"remark" => $row['remark'],
"roomid" => $row['roomid'],
"tableid" => $row['tableid'],
"roomname" => $row['roomname'],
"tablename" => $row['tablename']
);
}
return $resArray;
}
catch (PDOException $e) {
return array();
}
}
private static function gettablesoverview($pdo) {
try {
$tableoverview = array();
// REM* get only the rooms with not removed tables (active flag is ignored because it may be that the room is active at date for reservation)
$sql = "SELECT R.id as roomid,R.roomname as roomname,IFNULL(R.abbreviation,'') as abbreviation from %room% R WHERE R.removed is null HAVING (SELECT COUNT(id) FROM %resttables% T WHERE T.roomid=R.id AND T.removed is null) > 0 ORDER BY sorting";
$rooms = CommonUtils::fetchSqlAll($pdo, $sql);
foreach($rooms as $aRoom) {
$sql = "SELECT id,tableno as tablename FROM %resttables% WHERE roomid=? ORDER BY sorting";
$tablesOfRoom = CommonUtils::fetchSqlAll($pdo, $sql, array($aRoom['roomid']));
$tableoverview[$aRoom['roomid']] = array("roomid" => $aRoom['roomid'], "roomname" => $aRoom["roomname"],"roomabbreviation" => $aRoom["abbreviation"], "tables" => $tablesOfRoom);
}
return $tableoverview;
} catch (Exception $ex) {
return array();
}
}
}