2020-11-19 22:44:19 +01:00
< ? php
// Datenbank-Verbindungsparameter
require_once ( 'dbutils.php' );
require_once ( 'commonutils.php' );
2020-11-19 22:47:44 +01:00
require_once ( 'queuecontent.php' );
2020-11-19 22:44:19 +01:00
// require_once ('content.php');
class Roomtables {
var $dbutils ;
function __construct () {
$this -> dbutils = new DbUtils ();
}
function handleCommand ( $command ) {
if ( session_id () == '' ) {
session_start ();
if ( ! isset ( $_SESSION [ 'angemeldet' ]) || ! $_SESSION [ 'angemeldet' ]) {
2020-11-19 22:47:44 +01:00
// no user logged in
echo json_encode ( array ( " status " => " ERROR " , " code " => ERROR_NOT_AUTHOTRIZED , " msg " => ERROR_NOT_AUTHOTRIZED_MSG ));
2020-11-19 22:44:19 +01:00
}
}
header ( " Cache-Control: no-store, no-cache, must-revalidate, max-age=0 " );
header ( " Cache-Control: post-check=0, pre-check=0 " , false );
header ( " Pragma: no-cache " );
if ( $command == 'showAllRooms' ) {
$this -> showAllRooms ();
} else if ( $command == 'getRooms' ) {
$this -> getRooms (); // only rooms!
} else if ( $command == 'showAllRoomsAndTablesWithUnpaidItems' ) {
$this -> showAllRoomsAndTablesWithUnpaidItems ();
} else if ( $command == 'getUnpaidTables' ) {
2020-11-19 22:54:51 +01:00
$this -> getUnpaidTables ( $_GET [ 'roomid' ]);
2020-11-19 22:44:19 +01:00
} else if ( $command == 'getRoomfield' ) {
$this -> getRoomfield ();
} else if ( $command == 'setRoomInfo' ) {
if ( $this -> hasCurrentUserAdminRights ()) {
$this -> setRoomInfo ( $_POST [ 'rooms' ]);
}
}
}
private function hasCurrentUserAdminRights () {
if ( session_id () == '' ) {
session_start ();
}
if ( ! isset ( $_SESSION [ 'angemeldet' ]) || ! $_SESSION [ 'angemeldet' ]) {
// no user logged in
return false ;
} else {
return ( $_SESSION [ 'is_admin' ]);
}
}
function showAllRooms () {
2020-11-19 22:47:44 +01:00
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
$roomtables = $this -> getAllTablesAndRooms ( $pdo );
2020-11-19 22:44:19 +01:00
echo json_encode ( $roomtables );
}
2020-11-19 22:47:44 +01:00
public static function getUnpaidTablesCore ( $pdo , $roomid ) {
2020-11-19 22:44:19 +01:00
// first get all tables of that rooms
$tablesSql = " SELECT id,tableno FROM %resttables% WHERE %resttables%.roomid =? AND removed is null " ;
2020-11-19 22:47:44 +01:00
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $tablesSql ));
2020-11-19 22:44:19 +01:00
$stmt -> execute ( array ( $roomid ));
$result = $stmt -> fetchAll ();
$tablesArr = array ();
foreach ( $result as $row ) {
$entry = array ( " id " => $row [ 'id' ], " name " => $row [ 'tableno' ]);
$tablesArr [] = $entry ;
}
$tableresult = array ();
foreach ( $tablesArr as $aTable ) {
$tableid = $aTable [ 'id' ];
$sql = " SELECT sum(%queue%.price) as sumprice,count(%queue%.price) as prodcount
FROM % queue %
INNER JOIN % products % ON % queue %. productid = % products %. id
INNER JOIN % pricelevel % ON % queue %. pricelevel = % pricelevel %. id
WHERE tablenr = ? AND paidtime is null AND toremove <> '1'
2020-11-19 22:50:09 +01:00
AND ordertime is not null AND isclosed is null " ;
2020-11-19 22:44:19 +01:00
2020-11-19 22:47:44 +01:00
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
2020-11-19 22:44:19 +01:00
$stmt -> execute ( array ( $tableid ));
$row = $stmt -> fetchObject ();
if ( $row != null ) {
$prodcount = $row -> prodcount ;
$sumprice = $row -> sumprice ;
if ( $prodcount > 0 ) {
2020-11-19 22:47:44 +01:00
$aTableEntry = array ( " id " => $tableid , " name " => $aTable [ " name " ], " pricesum " => $sumprice );
2020-11-19 22:44:19 +01:00
$tableresult [] = $aTableEntry ;
}
}
}
2020-11-19 22:47:44 +01:00
return ( $tableresult );
}
function getUnpaidTables ( $roomid ) {
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
$priceTakeAway = $this -> getUnpaidSumOfTakeAway ( $pdo );
echo json_encode ( array ( " tables " => self :: getUnpaidTablesCore ( $pdo , $roomid ), " takeawayprice " => $priceTakeAway ));
2020-11-19 22:44:19 +01:00
}
function showAllRoomsAndTablesWithUnpaidItems () {
2020-11-19 22:47:44 +01:00
$pdo = $this -> dbutils -> openDbAndReturnPdo ( $pdo );
$roomtables = $this -> getAllTablesAndRooms ( $pdo );
2020-11-19 22:44:19 +01:00
for ( $i = 0 ; $i < count ( $roomtables ); $i ++ ) {
$tablesArr = $roomtables [ $i ][ " tables " ];
$newtablesArr = array ();
for ( $j = 0 ; $j < count ( $tablesArr ); $j ++ ) {
$tableentry = $tablesArr [ $j ];
$tableid = $tableentry [ " id " ];
if ( $this -> hasTableUnpaidItems ( $tableid )) {
$newtablesArr [] = $tableentry ;
}
}
$roomtables [ $i ][ " tables " ] = $newtablesArr ;
}
echo json_encode ( $roomtables );
}
function hasTableUnpaidItems ( $tableid ) {
// sql copied from getJsonProductsOfTableToPay
$sql = " SELECT %queue%.id as id,longname,%queue%.price as price,%pricelevel%.name as pricelevelname,%products%.id as prodid
FROM % queue %
INNER JOIN % products % ON % queue %. productid = % products %. id
INNER JOIN % pricelevel % ON % queue %. pricelevel = % pricelevel %. id
WHERE tablenr = $tableid AND paidtime is null AND toremove <> '1'
AND ordertime is not null
ORDER BY ordertime ; " ;
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ();
$count = $stmt -> rowCount ();
if ( $count > 0 ) {
return true ;
} else {
return false ;
}
}
/*
* get only the rooms ( for paydesk , because tables are dynamic due to their pay status )
*/
function getRooms () {
$sql = " SELECT id,roomname FROM %room% WHERE removed is null " ;
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ();
$result = $stmt -> fetchAll ();
$roomArr = array ();
foreach ( $result as $row ) {
$roomEntry = array ( " id " => $row [ 'id' ], " name " => $row [ 'roomname' ]);
$roomArr [] = $roomEntry ;
}
2020-11-19 22:47:44 +01:00
$priceTakeAway = $this -> getUnpaidSumOfTakeAway ( $pdo );
echo json_encode ( array ( " roomstables " => $roomArr , " takeawayprice " => $priceTakeAway ));
}
private function getUnpaidSumOfTakeAway ( $pdo ) {
$sql = " SELECT IFNULL(SUM(IF(%queue%.ordertime is not null AND %queue%.paidtime is null,%queue%.price,0.00)),0.00) as pricesum FROM %queue% " ;
$sql .= " WHERE %queue%.tablenr is null " ;
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
$stmt -> execute ();
$row = $stmt -> fetchObject ();
return $row -> pricesum ;
2020-11-19 22:44:19 +01:00
}
// Part of chain to choose a product , here we start with chosing a room
2020-11-19 22:47:44 +01:00
private function getAllTablesAndRooms ( $pdo )
{
$queue = new QueueContent ();
$sql = " SELECT id,roomname FROM %room% WHERE removed is null ORDER BY id " ;
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
$stmt -> execute ();
$dbresult = $stmt -> fetchAll ( PDO :: FETCH_ASSOC );
$arrayOfRooms = array ();
foreach ( $dbresult as $zeile ) {
2020-11-19 22:44:19 +01:00
$roomid = $zeile [ 'id' ];
// now find the tables that are in that room
$tablesArray = array ();
2020-11-19 22:47:44 +01:00
2020-11-19 22:50:09 +01:00
$sql = " SELECT %resttables%.id as id,%resttables%.tableno as name,IFNULL(SUM(IF(%queue%.ordertime is not null AND %queue%.paidtime is null AND %queue%.isclosed is null,%queue%.price,0.00)),0.00) as pricesum FROM %resttables% " ;
2020-11-19 22:47:44 +01:00
$sql .= " LEFT OUTER JOIN %queue% ON %queue%.tablenr=%resttables%.id WHERE %resttables%.removed is null AND " ;
$sql .= " %resttables%.roomid=? GROUP BY %resttables%.id " ;
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
$stmt -> execute ( array ( $roomid ));
$tablesArray = $stmt -> fetchAll ( PDO :: FETCH_OBJ );
foreach ( $tablesArray as $tableEntry ) {
$arrayOfProdsAndIdsOfATable = $queue -> getAllPreparedProductsForTableidAsArray ( $pdo , $tableEntry -> id );
$arrayOfProdsOfATable = $arrayOfProdsAndIdsOfATable [ 'prods' ];
$numberOfProductsTotalToServe = $queue -> numberOfProductsForTableNotDelivered ( $pdo , $tableEntry -> id );
$numberOfReadyProducts = count ( $arrayOfProdsOfATable );
$queueids = $this -> getIdsFromProdList ( $arrayOfProdsOfATable );
$tableEntry -> prodcount = $numberOfProductsTotalToServe ;
$tableEntry -> prodready = $numberOfReadyProducts ;
$tableEntry -> readyQueueIds = $queueids ;
}
2020-11-19 22:44:19 +01:00
$aRoomEntry = array ( " id " => $roomid , " name " => $zeile [ 'roomname' ], " tables " => $tablesArray );
$arrayOfRooms [] = $aRoomEntry ;
2020-11-19 22:47:44 +01:00
}
$priceTakeAway = $this -> getUnpaidSumOfTakeAway ( $pdo );
$arrayOfProdsAndIdsOfATable = $queue -> getAllPreparedProductsForTableidAsArray ( $pdo , null );
$arrayOfProdsOfATable = $arrayOfProdsAndIdsOfATable [ 'prods' ];
$numberOfProductsTotalToServe = $queue -> numberOfProductsForTableNotDelivered ( $pdo , null );
$numberOfReadyProducts = count ( $arrayOfProdsOfATable );
$queueids = $this -> getIdsFromProdList ( $arrayOfProdsOfATable );
return array ( " roomstables " => $arrayOfRooms , " takeawayprice " => $priceTakeAway ,
" takeawayprodcount " => $numberOfProductsTotalToServe ,
" takeawayprodready " => $numberOfReadyProducts ,
" takeawayReadyQueueIds " => $queueids
);
2020-11-19 22:44:19 +01:00
}
2020-11-19 22:47:44 +01:00
function getIdsFromProdList ( $arrayOfProdsOfATable ) {
$idArr = array ();
if ( ! is_null ( $arrayOfProdsOfATable ) && ( count ( $arrayOfProdsOfATable ) > 0 )) {
foreach ( $arrayOfProdsOfATable as $queueEntry ) {
$idArr [] = $queueEntry [ " id " ];
}
return $idArr ;
} else {
return array ();
}
}
2020-11-19 22:54:51 +01:00
2020-11-19 22:44:19 +01:00
function setRoomInfo ( $rooms ) {
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
$pdo -> beginTransaction ();
// clear room table
$sql = " UPDATE %room% SET removed=? " ;
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ( array ( '1' ));
// clear resttables table
$sql = " UPDATE %resttables% SET removed=? " ;
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ( array ( '1' ));
2020-11-19 22:47:44 +01:00
// clear table positions and maps
$sql = " DELETE FROM %tablepos% " ;
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
$stmt -> execute ();
$sql = " DELETE FROM %tablemaps% " ;
$stmt = $pdo -> prepare ( DbUtils :: substTableAlias ( $sql ));
$stmt -> execute ();
2020-11-19 22:44:19 +01:00
$noOfRooms = count ( $rooms );
for ( $roomindex = 0 ; $roomindex < $noOfRooms ; $roomindex ++ ) {
$aRoom = $rooms [ $roomindex ];
$aRoomName = $aRoom [ 0 ];
2020-11-19 22:47:44 +01:00
$roomPrinter = $aRoom [ 1 ];
if ( $roomPrinter == 0 ) {
$roomPrinter = null ;
}
2020-11-19 22:44:19 +01:00
2020-11-19 22:47:44 +01:00
$sql = " INSERT INTO `%room%` (`id`, `roomname`, `printer`) VALUES (NULL,?,?) " ;
2020-11-19 22:44:19 +01:00
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
2020-11-19 22:47:44 +01:00
$stmt -> execute ( array ( $aRoomName , $roomPrinter ));
2020-11-19 22:44:19 +01:00
$roomId = $pdo -> lastInsertId ();
2020-11-19 22:47:44 +01:00
$tablesArr = $aRoom [ 2 ];
2020-11-19 22:44:19 +01:00
$noOfTables = count ( $tablesArr );
for ( $tableindex = 0 ; $tableindex < $noOfTables ; $tableindex ++ ) {
$aTableName = $tablesArr [ $tableindex ];
$sql = " INSERT INTO `%resttables%` (`id` , `tableno`, `roomid`) VALUES (NULL ,?,?) " ;
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ( array ( $aTableName , $roomId ));
}
}
$pdo -> commit ();
echo json_encode ( " OK " );
}
function getRoomfield () {
$pdo = $this -> dbutils -> openDbAndReturnPdo ();
2020-11-19 22:47:44 +01:00
$sql = " SELECT id,roomname,IFNULL(printer,0) as printer FROM %room% WHERE removed is null ORDER BY 'sorting' " ;
2020-11-19 22:44:19 +01:00
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ();
$result = $stmt -> fetchAll ();
$numberOfRooms = $stmt -> rowCount ();
$roomIdNameArray = array ();
$maxTables = 0 ;
$roomArr = array ();
foreach ( $result as $row ) {
$roomid = $row [ 'id' ];
$roomname = $row [ 'roomname' ];
2020-11-19 22:47:44 +01:00
$printer = $row [ 'printer' ];
2020-11-19 22:44:19 +01:00
// now get the tables of this room
$sql = " SELECT id,tableno FROM %resttables% WHERE roomid=? AND removed is null ORDER BY 'sorting' " ;
$stmt = $pdo -> prepare ( $this -> dbutils -> resolveTablenamesInSqlString ( $sql ));
$stmt -> execute ( array ( $row [ 'id' ]));
$numberOfTables = $stmt -> rowCount ();
$maxTables = ( $maxTables < $numberOfTables ? $numberOfTables : $maxTables );
$tableresult = $stmt -> fetchAll ();
$tableArr = array ();
foreach ( $tableresult as $aTable ) {
$tableArr [] = array ( " id " => $aTable [ 'id' ], " tablename " => $aTable [ 'tableno' ]);
}
2020-11-19 22:47:44 +01:00
$roomArr [] = array ( " roomid " => $roomid , " roomname " => $roomname , " printer " => $printer , " tables " => $tableArr , " noOfTables " => $numberOfTables );
2020-11-19 22:44:19 +01:00
}
2020-11-19 22:47:44 +01:00
echo json_encode ( array ( " status " => " OK " , " noOfRooms " => $numberOfRooms , " maxTables " => $maxTables , " roomfield " => $roomArr ));
2020-11-19 22:44:19 +01:00
}
}
?>