dbutils = new DbUtils(); } function handleCommand($command) { if(session_id() == '') { session_start(); if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) { // no user logged in echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG)); } } 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') { $this->getUnpaidTables($_GET['roomid']); } 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() { $pdo = $this->dbutils->openDbAndReturnPdo(); $roomtables = $this->getAllTablesAndRooms($pdo); echo json_encode($roomtables); } public static function getUnpaidTablesCore($pdo,$roomid) { // first get all tables of that rooms $tablesSql = "SELECT id,tableno FROM %resttables% WHERE %resttables%.roomid =? AND removed is null"; $stmt = $pdo->prepare(DbUtils::substTableAlias($tablesSql)); $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' AND ordertime is not null AND isclosed is null"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(array($tableid)); $row = $stmt->fetchObject(); if ($row != null) { $prodcount = $row->prodcount; $sumprice = $row->sumprice; if ($prodcount > 0) { $aTableEntry = array("id" => $tableid,"name" => $aTable["name"], "pricesum" => $sumprice); $tableresult[] = $aTableEntry; } } } return($tableresult); } function getUnpaidTables($roomid) { $pdo = $this->dbutils->openDbAndReturnPdo(); $priceTakeAway = $this->getUnpaidSumOfTakeAway($pdo); echo json_encode(array("tables" => self::getUnpaidTablesCore($pdo,$roomid), "takeawayprice" => $priceTakeAway)); } function showAllRoomsAndTablesWithUnpaidItems() { $pdo = $this->dbutils->openDbAndReturnPdo($pdo); $roomtables = $this->getAllTablesAndRooms($pdo); for ($i=0;$ihasTableUnpaidItems($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; } $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; } // Part of chain to choose a product , here we start with chosing a room 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) { $roomid = $zeile['id']; // now find the tables that are in that room $tablesArray = array(); $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% "; $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; } $aRoomEntry = array ("id" => $roomid, "name" => $zeile['roomname'], "tables" => $tablesArray); $arrayOfRooms[] = $aRoomEntry; } $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 ); } function getIdsFromProdList($arrayOfProdsOfATable) { $idArr = array(); if (!is_null($arrayOfProdsOfATable) && (count($arrayOfProdsOfATable) > 0)) { foreach($arrayOfProdsOfATable as $queueEntry) { $idArr[] = $queueEntry["id"]; } return $idArr; } else { return array(); } } 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')); // 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(); $noOfRooms = count($rooms); for ($roomindex = 0;$roomindex < $noOfRooms; $roomindex++) { $aRoom = $rooms[$roomindex]; $aRoomName = $aRoom[0]; $aRoomAbbr = $aRoom[1]; if ($aRoomAbbr == "") { $aRoomAbbr = null; } $roomPrinter = $aRoom[2]; if ($roomPrinter == 0) { $roomPrinter = null; } $sql = "INSERT INTO `%room%` (`id`, `roomname`, `abbreviation`, `printer`) VALUES (NULL,?,?,?)"; $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); $stmt->execute(array($aRoomName,$aRoomAbbr,$roomPrinter)); $roomId = $pdo->lastInsertId(); $tablesArr = $aRoom[3]; $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(); $sql = "SELECT id,roomname,IFNULL(abbreviation,'') as abbreviation,IFNULL(printer,0) as printer FROM %room% WHERE removed is null ORDER BY 'sorting'"; $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']; $abbreviation = $row['abbreviation']; $printer = $row['printer']; // 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']); } $roomArr[] = array("roomid" => $roomid, "roomname" => $roomname, "abbreviation" => $abbreviation, "printer" => $printer, "tables" => $tableArr, "noOfTables" => $numberOfTables); } echo json_encode(array("status" => "OK", "noOfRooms" => $numberOfRooms, "maxTables" => $maxTables, "roomfield" => $roomArr)); } } ?>