OrderSprinter 1.5.25

This commit is contained in:
Geno 2020-11-19 23:12:37 +01:00
parent ab07fb4203
commit 279efdd31f
50 changed files with 1135 additions and 463 deletions

View File

@ -53,3 +53,8 @@
text-align: right;
font-style: italic;
}
.centermobileimg {
top:0;bottom:0;margin:auto;position:absolute;
height:70px;
}

View File

@ -9,8 +9,8 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" href="css/gueststyle.css?v=1.5.24" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css?v=1.5.24" />
<link rel="stylesheet" href="css/gueststyle.css?v=1.5.25" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css?v=1.5.25" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
@ -41,6 +41,7 @@
<div data-role="collapsible" data-content-theme="c" data-collapsed="false" data-theme="e" id="tableselection" style="display:none;" class="notcollapsible">
<H2>Tischauswahl</H2>
<p style="text-align: center;"><img src="php/ossystem.php?command=getlogo" style="max-height:300px;"/>
<p>Bitte wählen Sie den Tisch aus:
<div id="tableselectionbox"></div>
</div>
@ -105,7 +106,7 @@
<div data-role="footer" data-theme="b" id="thefooter1">
<div class="ui-grid-a">
<div class="ui-block-a">&nbsp;&nbsp;OrderSprinter</div>
<div class="ui-block-b grid_right" id="versioninfo">1.5.24&nbsp;&nbsp;</div>
<div class="ui-block-b grid_right" id="versioninfo">1.5.25&nbsp;&nbsp;</div>
</div><!-- /grid-a -->
</div>
</div>

View File

@ -19,6 +19,18 @@ class Installer {
self::dropTable($pdo, "%ossystem%");
self::dropTable($pdo, "%gueststatus%");
self::dropTable($pdo, "%queue%");
self::dropTable($pdo, "%images%");
$sql = "
CREATE TABLE `%images%` (
`id` INT (2) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR ( 100 ) ,
`content` MEDIUMBLOB,
`contenttype` INT(1) NULL,
`productid` INT(10) NULL
) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDb ;
";
DbUtils::execSql($pdo, $sql, null);
$sql = "
CREATE TABLE `%ossystem%` (
@ -90,10 +102,10 @@ if (isset($_POST['code'])) {
} else {
echo "<html>";
echo "<head><title>Installation Gastsystem</title>";
echo '<link rel="stylesheet" type="text/css" href="css/gueststyle.css?v=1.5.24">';
echo '<link rel="stylesheet" type="text/css" href="css/gueststyle.css?v=1.5.25">';
echo "</head>";
echo "<body><div class=surround>";
echo "<span class=headerline>Installation OrderSprinter-Gastsystem 1.5.24</span><br><br>";
echo "<span class=headerline>Installation OrderSprinter-Gastsystem 1.5.25</span><br><br>";
echo "<form action='install.php' method='post'><input class=installfield name=code id=code type=text placeholder='Installationscode' />";
echo "<br><input type=submit value='Installation starten' class=installbtn />";
echo "</form></div></html>";

File diff suppressed because one or more lines are too long

View File

@ -3,6 +3,8 @@
require_once ('config.php');
class DbUtils {
public static $TYPE_LOGO = 1;
public static $TYPE_PRODIMG = 2;
public static function openDbAndReturnPdoStatic () {
$dsn = 'mysql:host=' . MYSQL_HOST . ';dbname=' . MYSQL_DB;
@ -24,6 +26,7 @@ class DbUtils {
$out = str_replace("%ossystem%",TAB_PREFIX . 'ossystem',$sqlString);
$out = str_replace("%gueststatus%", TAB_PREFIX . 'gueststatus',$out);
$out = str_replace("%queue%", TAB_PREFIX . 'queue',$out);
$out = str_replace("%images%", TAB_PREFIX . 'images',$out);
return $out;
}

View File

@ -22,9 +22,34 @@ class Menu {
}
$types = json_decode($result[0]["value"], true);
foreach ($types as &$t) {
$typeid = $t["id"];
$t["hasprodimages"] = self::hasTypeProdImages($pdo, $types, $products, $typeid);
}
return array("status" => "OK","msg" => array("types" => $types,"products" => $products));
}
private static function hasTypeProdImages($pdo,$alltypes,$allproducts,$typeid) {
$prodids = array();
foreach($allproducts as $p) {
if ($p["ref"] == $typeid) {
$prodids[] = $p["id"];
}
}
$sql = "SELECT IFNULL(content,'') as content FROM %images% WHERE contenttype=? AND productid=?";
foreach($prodids as $prodid) {
$img = DbUtils::fetchSqlAll($pdo, $sql, array(DbUtils::$TYPE_PRODIMG,$prodid));
if (count($img) > 0) {
$imgdata = $img[0]["content"];
if ($imgdata != '') {
return 1;
}
}
}
return 0;
}
}
if (isset($_GET["command"])) {

108
gastsystem/php/ossystem.php Normal file
View File

@ -0,0 +1,108 @@
<?php
require_once 'dbutils.php';
require_once 'config.php';
class OsSystem {
private static function outputEmptyImage() {
$my_img = imagecreate( 1,1 );
$background = imagecolorallocate( $my_img, 0, 0, 255 );
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($my_img, $black);
header( "Content-type: image/png" );
imagepng( $my_img );
imagecolordeallocate( $background );
imagedestroy( $my_img );
}
public static function getlogo($pdo) {
$sql = "SELECT content as img FROM %images% WHERE name='logo'";
self::outputImageFromDb($pdo, $sql, null);
}
public static function getprodimage($pdo,$prodid) {
$sql = "SELECT content as img FROM %images% WHERE contenttype=? AND productid=?";
$params = array(DbUtils::$TYPE_PRODIMG,$prodid);
self::outputImageFromDb($pdo, $sql, $params);
}
private static function outputImageFromDb($pdo,$sql,$params) {
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
header('Content-Type: ' . image_type_to_mime_type(IMAGETYPE_PNG));
$result = DbUtils::fetchSqlAll($pdo, $sql, $params);
if (count($result) > 0) {
$logoImg = $result[0]["img"];
if ($logoImg != '') {
$img = base64_decode($logoImg);
$php_img = imagecreatefromstring($img);
imagesavealpha($php_img, true);
$color = imagecolorallocatealpha($php_img, 0, 0, 0, 127);
imagepng($php_img, NULL);
imagecolordeallocate( $color );
imagedestroy($php_img);
return;
}
}
self::outputEmptyImage();
}
public static function checkLastOsAccess($pdo) {
$timezone = self::getTimeZone($pdo);
date_default_timezone_set($timezone);
$sql = "SELECT date FROM %gueststatus% WHERE item=?";
$result = DbUtils::fetchSqlAll($pdo, $sql, array('lastosaccess'));
if (count($result) == 0) {
$msg = "0";
} else {
$lastaccess = $result[0]["date"];
$date = new DateTime();
$currentTimeStamp = $date->getTimestamp();
if (($currentTimeStamp - $lastaccess) > 60) {
$msg = 0;
} else {
$msg = 1;
}
}
return array("status" => "OK","msg" => $msg);
}
public static function getTimeZone($pdo) {
$sql = "select value from %ossystem% where item=?";
$result = DbUtils::fetchSqlAll($pdo, $sql, array("timezone"));
if (count($result) == 1) {
return $result[0]["value"];
} else {
return "Europe/Berlin";
}
}
}
if (isset($_GET["command"])) {
$command = $_GET["command"];
$pdo = DbUtils::openDbAndReturnPdoStatic();
switch ($command) {
case "getlastosaccess":
$ret = OsSystem::checkLastOsAccess($pdo);
echo json_encode($ret);
break;
case "getlogo":
OsSystem::getlogo($pdo);
break;
case "getprodimage":
OsSystem::getprodimage($pdo,$_GET["prodid"]);
break;
default:
break;
}
}

View File

@ -2,11 +2,11 @@
require_once 'dbutils.php';
require_once 'config.php';
require_once 'system.php';
require_once 'ossystem.php';
class Queue {
public static function putintoqueue($pdo,$prodid,$tableid,$tablecode,$dailycode) {
$timezone = System::getTimeZone($pdo);
$timezone = OsSystem::getTimeZone($pdo);
date_default_timezone_set($timezone);
$ordertime = date('Y-m-d H:i:s');
$pdo->beginTransaction();

View File

@ -1,57 +0,0 @@
<?php
require_once 'dbutils.php';
require_once 'config.php';
class System {
public static function checkLastOsAccess($pdo) {
$timezone = self::getTimeZone($pdo);
date_default_timezone_set($timezone);
$sql = "SELECT date FROM %gueststatus% WHERE item=?";
$result = DbUtils::fetchSqlAll($pdo, $sql, array('lastosaccess'));
if (count($result) == 0) {
$msg = "0";
} else {
$lastaccess = $result[0]["date"];
$date = new DateTime();
$currentTimeStamp = $date->getTimestamp();
if (($currentTimeStamp - $lastaccess) > 60) {
$msg = 0;
} else {
$msg = 1;
}
}
return array("status" => "OK","msg" => $msg);
}
public static function getTimeZone($pdo) {
$sql = "select value from %ossystem% where item=?";
$result = DbUtils::fetchSqlAll($pdo, $sql, array("timezone"));
if (count($result) == 1) {
return $result[0]["value"];
} else {
return "Europe/Berlin";
}
}
}
if (isset($_GET["command"])) {
$command = $_GET["command"];
$pdo = DbUtils::openDbAndReturnPdoStatic();
switch ($command) {
case "getlastosaccess":
$ret = System::checkLastOsAccess($pdo);
echo json_encode($ret);
break;
default:
break;
}
}

View File

@ -31,6 +31,22 @@ class Sync {
if (isset($systemdata["timezone"])) {
self::updateOsAccessStatus($pdo, $systemdata["timezone"]);
}
if (isset($systemdata["logo"])) {
$logo = $systemdata["logo"];
} else {
$logo = "";
}
DbUtils::execSql($pdo, "DELETE FROM %images% WHERE name='logo'",null);
$sql = "INSERT INTO %images% (name,content,contenttype,productid) VALUES('logo',?,?,?)";
DbUtils::execSql($pdo, $sql, array($logo, DbUtils::$TYPE_LOGO,null));
$sql = "DELETE FROM %images% WHERE contenttype=?";
DbUtils::execSql($pdo, $sql, array(DbUtils::$TYPE_PRODIMG));
DbUtils::execSql($pdo, "OPTIMIZE TABLE %images%",null);
if (isset($systemdata["prodimages"])) {
self::insertProdImages($pdo, $systemdata["prodimages"]);
}
return array("status" => "OK");
} catch (Exception $ex) {
@ -59,6 +75,15 @@ class Sync {
}
}
private static function insertProdImages($pdo,$imagedata) {
$sql = "INSERT INTO %images% (name,content,contenttype,productid) VALUES(?,?,?,?)";
foreach ($imagedata as $img) {
$prodid = $img['prodid'];
$imgl = $img['imagedata'];
DbUtils::execSql($pdo, $sql, array('',$imgl, DbUtils::$TYPE_PRODIMG,$prodid));
}
}
private static function updateOsAccessStatus($pdo,$timezone) {
date_default_timezone_set($timezone);
$date = new DateTime();
@ -87,17 +112,8 @@ class Sync {
}
}
//ob_start();
//echo "111";
//var_dump($_POST);
//$result = ob_get_clean();
//echo "RESULT: $result ENDE";
//
//return;
if (isset($_POST["data"])) {
$pdo = DbUtils::openDbAndReturnPdoStatic();
$data = $_POST["data"];

View File

@ -85,7 +85,7 @@ class Installer {
}
Database::dropTables($pdo);
Database::createEmptyTables($pdo, $prefix);
Database::setVersion($pdo,$prefix,"1.5.24");
Database::setVersion($pdo,$prefix,"1.5.25");
Database::setAccessPassword($pdo,$prefix,$adminpass);
Database::setRefreshRate($pdo,$prefix,"5"); // default: 5 times per hour
return array("status" => "OK","msg" => "Installation successful");

Binary file not shown.

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -13,8 +13,8 @@
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
<script src="php/3rdparty/jquery-2.0.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.0.min.js"></script>
<script src="utilities.js?v=1.5.24"></script>
<script src="kitchenbar.js?v=1.5.24"></script>
<script src="utilities.js?v=1.5.25"></script>
<script src="kitchenbar.js?v=1.5.25"></script>
<style>
#tableWithEntriesToCook,#tableWithCookedEntries,#headertableToCook

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
.roompanel{display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:row nowrap;flex-flow:row nowrap;background-color:#5d6d7e;width:100%;-webkit-align-items:stretch;align-items:stretch}.roomitem{background-color:#fff6b5;padding:10px;color:black;font-weight:bold;text-align:center;border:2px solid #aaa;-webkit-flex:1;flex:10;box-shadow:10px 10px 5px #888;word-wrap:break-word}.roomitemselected{background-color:#eee6b5;height:65px;padding:10px;color:black;font-weight:bold;text-align:center;border:2px solid red;-webkit-flex:1;flex:15;box-shadow:10px 10px 5px #888}.roomtogo{display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:row wrap;flex-flow:row wrap}.osroom-desk-0{height:40px}.osroom-desk-1{height:60px}.osroom-desk-2{height:80px}.osroom-desk-sel-0{height:45px}.osroom-desk-sel-1{height:65px}.osroom-desk-sel-2{height:85px}.roomname{width:100%}.roomtogoaccounted{background:white;color:black;-webkit-flex:1;flex:1;order:2;font-weight:normal}.roomchangeitem{padding:8px 16px;border-bottom:1px solid #ddd;background-color:#dd0;height:40px;font-size:16px;font-weight:bold}
.roompanel{display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:row nowrap;flex-flow:row nowrap;background-color:#5d6d7e;width:100%;-webkit-align-items:stretch;align-items:stretch}.roomitem{background-color:#fff6b5;padding:10px;color:black;font-weight:bold;text-align:center;border:2px solid #aaa;-webkit-flex:1;flex:10;box-shadow:10px 10px 5px #888;word-wrap:break-word}.roomitemselected{background-color:#eee6b5;height:65px;padding:10px;color:black;font-weight:bold;text-align:center;border:2px solid red;-webkit-flex:1;flex:15;box-shadow:10px 10px 5px #888}.roomtogo{display:-webkit-flex;display:flex;-webkit-justify-content:center;justify-content:center;-webkit-flex-wrap:row wrap;flex-flow:row wrap}.osroom-desk-0{height:40px}.osroom-desk-1{height:60px}.osroom-desk-2{height:80px}.osroom-desk-sel-0{height:45px}.osroom-desk-sel-1{height:65px}.osroom-desk-sel-2{height:85px}.roomname{width:100%}.roomtogoaccounted{background:white;color:black;-webkit-flex:1;flex:1;order:2;font-weight:normal}.roomchangeitem{padding:8px 16px;border-bottom:1px solid #ddd;background-color:#dd0;height:40px;font-size:16px;font-weight:bold}.tablereservations{font-size:7px}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -3,12 +3,12 @@
*/
function createProdTableHeaderLine() {
var txt = "<tr><th>Name"
var txt = "<tr><th>Produktname"
+ "<th>Typ&nbsp;&nbsp;"
+ "<th>Durchlauf Küche"
+ "<th>Durchlauf Bereitst."
+ "<th>Drucker" +
"<th id=shortnameheader class='prodheader'>Kurzname<th>Preis (A)" +
"<th id=shortnameheader class='prodheader'>Name in Bestellansicht<th>Preis (A)" +
"<th class='prodheader'>Preis (B)" +
"<th class='prodheader'>Preis (C)" +
"<th class='prodheader'>Barcode" +

View File

@ -4,7 +4,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

View File

@ -9,8 +9,8 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.5.25">
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -231,7 +231,7 @@ function handleResultOfInstallCheck(is_installed) {
if (is_installed == "Yes") {
useInstallation();
} else {
setTimeout(function(){document.location.href = "install.html?v=1.5.24"},500);
setTimeout(function(){document.location.href = "install.html?v=1.5.25"},500);
}
}
@ -274,13 +274,13 @@ $(document).on("pageinit", "#index-page", function () {
<div data-role="content">
<p><div style="text-align: center;"><img src="php/contenthandler.php?module=printqueue&command=getLogoAsPng&v=1.5.25&style=always" style="max-height:150px;"/></div>
<div data-role="collapsible" data-content-theme="c" data-collapsed="false" data-theme="e" id="loginmask">
<H2>Anmelden</H2>
<form method="post">
<table border=0>
<tr><td>Username: <td id="userlist"></tr>
<tr><td>Name: <td id="userlist"></tr>
<tr><td>Modus: <td id="moduscell">
<select name="modus" id="modus" data-theme="e">
<option value="0">Mobil</option>

View File

@ -912,7 +912,7 @@ El servicio web OrderSprinter no requiere una conexión a Internet. Sin embargo,
<tr id=updateline>
<td>&nbsp;</td>
<td align=center>
<button id="updatebtn">Update -> 1.5.24</button>
<button id="updatebtn">Update -> 1.5.25</button>
<span id="updateinprogresstxt" style="display:none;">Update... bitte warten.</span>
</td>
<td>&nbsp;</td>

View File

@ -449,7 +449,7 @@ $zones[] = $timezone_identifiers[$i];
echo json_encode($zones);
} else if ($command == 'update') {
set_time_limit(60*30);
$installerVersion = "1.5.24";
$installerVersion = "1.5.25";
$admin = new InstallAdmin();
$pdo = $admin->openDbAndReturnPdo($_POST['host'],$_POST['db'],$_POST['user'],$_POST['password']);

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -13,8 +13,8 @@
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
<script src="php/3rdparty/jquery-2.0.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.0.min.js"></script>
<script src="utilities.js?v=1.5.24"></script>
<script src="kitchenbar.js?v=1.5.24"></script>
<script src="utilities.js?v=1.5.25"></script>
<script src="kitchenbar.js?v=1.5.25"></script>
<style>
#tableWithEntriesToCook,#tableWithCookedEntries,#headertableToCook

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -13,10 +13,10 @@
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.5.min.js"></script>
<script src="utilities.js?v=1.5.24"></script>
<script src="elements/tablemap.js?v=1.5.24"></script>
<script src="elements/roommap.js?v=1.5.24"></script>
<script src="elements/groundplan.js?v=1.5.24"></script>
<script src="utilities.js?v=1.5.25"></script>
<script src="elements/tablemap.js?v=1.5.25"></script>
<script src="elements/roommap.js?v=1.5.25"></script>
<script src="elements/groundplan.js?v=1.5.25"></script>
<link href="php/3rdparty/hayageek_uploadfile.css" rel="stylesheet">
<script src="php/3rdparty/hayageek_jquery_uploadfile.js"></script>
@ -401,6 +401,7 @@ var MAN_SHOWPAYMENT6 = ["Lastschrift","debitsCard","Débito"];
var MAN_SHOWPAYMENT7 = ["Hotelzimmer","Hotel room","Habitación"];
var MAN_SHOWPAYMENT8 = ["Gast","Guest","Huésped"];
var MAN_DBLOG = ["Debug-Logging","Debug logging","Debug logging"];
var MAN_SHOWTRANSFERBTNS = ["'Bestellung senden'- und/oder 'Arbeitsbon'-Button einblenden","Show buttons for send orders and/or work receipts","Mostrar botones para transmitir ordenes"];
var MAN_PRINT_EXTRAS = ["Extras auf Kassenbon","Print extras on receipts","Imprimir extras en tiquet"];
var MAN_PRINT_EXTRAS_HINT = ["Hinweis: Extras auf Kassenbon erst ab Printserverversion 1.4.17 möglich.","Hint: Extras on receipt require printserver version 1.4.17+","Nota: Imprimir extras exije printserver 1.4.17+"];
var MAN_FORCE_PRINT = ["Erzwinge Bondruck","Force print of receipt","Siempre imprimir tique"];
@ -417,7 +418,7 @@ var MAN_USE_BARCODE = ["Barcodeeingabe","Input by barcode","Usar Codigo de barra
var MAN_REST_MODE_HINT = ["Hinweis: Wird der Restaurantmodus auf <i>Nein</i> gesetzt, wird in der <b>Desktopansicht</b> die Tischauswahl deaktiviert. Alle Produkte werden als Außer-Haus-Verkauf gebucht.","Hint: If the restautant mode is set to <i>no</i> in the <b>desktop view</b> the table selection is deactivated and all products are ordered as <i>to-go</i>","Nota: Si el modus del restaurante es configurado a <i>no</i> en la vista de <b>Desktop</b> la selección de las mesas es deactivada y todos los productos son ordenados como <i>to-go</i>"];
var MAN_SPECIAL_SETTINGS_TXT = ["Einstellungen für spezielle Abläufe:","Settings for special workflows:","Configuración para workflows muy escpeciales:"];
var MAN_DASH_SECTION_TXT = ["Dashboard:","Dashboard:","Dashboard:"];
var MAN_GUEST_SYSTEM_TXT = ["Einstellungen für das Gastsystem","Settings for the Guest system","Especificación del sistema de clientes"];
var MAN_GUEST_SYSTEM_TXT = ["Einstellungen für das Gastbestellsystem","Settings for the Guest system","Especificación del sistema de clientes"];
var MAN_PRINT_ON_CLOSINGS = ["Tageserfassungsbons","Closing receipts","Tiques de cerramiento"];
var MAN_SHOW_PAYMENTS_DLG = ["Zahlungswege im Zahldialog","Payment ways in payment dialog","Que modos de pagar"];
var MAN_ROOMCHANGE_WARNING = ["Alten Raumplan löschen und neuen festlegen? Bestellungen offener Tische gehen verloren!","Replace room map? Orders of open tables will be lost!","Sustituir mapa de mesas? Orders de mesas abiertas van a ser borradas!"];
@ -497,7 +498,7 @@ var MAN_LAST_CLOSING = ["Letzte Tageserfassung","Last closing","Cerrada última"
var MAN_PDF_REPORT_HINT = ["Erste und letzte Tageserfassung des Reports nach Eingrenzung des Datumsbereich (oben) auswählen:","Choose first and last closing after limit the time frame (above):","Seleccione la cerrada primera y última después de delimitar el intervalo de fechas (arriba):"];
var lang = 0;
var generalVals = [12,2,0,3,0,1,1,0,0,1, 0,50,20,10,1,0,0,0,1,0,1,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 1,2,3, 1,0, 1,0,1, 1,1,0,0, 0,0,0, 0,0,0,1,1, 0,1,0,1,1, 1,2,0, 0,0,1];
var generalVals = [12,2,0,3,0,1,1,0,0,1, 0,50,20,10,1,0,0,0,1,0,1,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 1,2,3, 1,0, 1,0,1, 1,1,0,0, 0,0,0, 0,0,0,1,1, 0,1,0,1,1, 1,2,0, 0,0,1,1];
var numberOfClosings = 0;
@ -648,7 +649,8 @@ var generalValuesSettings = [
["appid","App-Id","i",0],
["sumupfailuretext",MAN_SUMUPFAILURETEXT[lang],"i",0,""],
["printcash",MAN_PRINTCASH[lang],"s",64],
["showerrorlog",MAN_SHOW_ERRORLOG[lang],"s",65]
["showerrorlog",MAN_SHOW_ERRORLOG[lang],"s",65],
["showtransferbtns",MAN_SHOWTRANSFERBTNS[lang],"s",66]
];
var predef = "";
@ -852,6 +854,20 @@ function setLanguage(l) {
$("#pdfreporthint").html(MAN_PDF_REPORT_HINT[l]);
}
function toggleinlinedisplayelem(iconid) {
var mydiv = document.getElementById(iconid);
mydiv.style.display = (mydiv.style.display=='inline'?'none':'inline');
}
function showconfsection(id) {
if(document.getElementById) {
var mydiv = document.getElementById(id);
mydiv.style.display = (mydiv.style.display=='block'?'none':'block');
toggleinlinedisplayelem(id + "_expandicon");
toggleinlinedisplayelem(id + "_collapseicon");
}
}
function createMonthSelection(label) {
var monthHtml = '<label for="' + label + '">' + MAN_MONTH[lang] + '</label>'
+ '<select name="' + label + '" id="' + label + '" data-theme="e">'
@ -1001,6 +1017,7 @@ function insertGeneralConfigItems(configResult) {
$("#partOfRestaurantmode").html(createYesNo("restaurantmode",MAN_RESTAURANT_MODE, values.restaurantmode));
$("#partOfUsebarcode").html(createYesNo("usebarcode",MAN_USE_BARCODE, values.usebarcode));
$("#partOfDblog").html(createYesNo("dblog",MAN_DBLOG, values.dblog));
$("#partOfShowtransferbtns").html(createYesNo("showtransferbtns",MAN_SHOWTRANSFERBTNS, values.showtransferbtns));
$("#partOfPrintpickups").html(createPickupConfigPart(values.printpickups));
$("#partOfBillprintjobs").html(createBillprintjobsConfigPart(values.billprintjobs));
$("#partOfForceprint").html(createYesNo("forceprint",MAN_FORCE_PRINT, values.forceprint));
@ -1130,6 +1147,7 @@ function insertGeneralConfigItems(configResult) {
generalVals[63] = values.sumupforcard;
generalVals[64] = values.printcash;
generalVals[65] = values.showerrorlog;
generalVals[66] = values.showtransferbtns;
defaulttmp = values.defaulttmp;
@ -1591,7 +1609,7 @@ function initRestoreFileUpload() {
} else {
alert("Import war erfolgreich.");
setTimeout(function(){
document.location.href = "index.html?v=1.5.24";
document.location.href = "index.html?v=1.5.25";
},250);
}
},
@ -2262,7 +2280,7 @@ function updateOneSingleFile() {
setTimeout(function(){
$("#sliderarea").hide();
var millis=getMillis();
document.location.href = "install.html?v=1.5.24&mode=onlyupdate&n=" + millis;
document.location.href = "install.html?v=1.5.25&mode=onlyupdate&n=" + millis;
},250);
}
}
@ -3730,9 +3748,9 @@ $(document).on("pageinit", "#admin-page", function () {
<h3><span id="configtxt">Konfiguration</span></h3>
<form action="#" method="get">
<br><b><u><span id="generalsectiontxt">GENERAL</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confgensection'); return false">
<span id="generalsectiontxt">GENERAL</span> <span id="confgensection_expandicon" style="display:inline;">&#8690;</span><span id="confgensection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confgensection">
<div id="partOfDefaultView"></div>
@ -3831,9 +3849,12 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="cbirdfolder"><span id="cbirdfoldertxt">CBird Imporfolder:</span></label>
<input type="text" value="" data-mini="true" placeholder="" id="cbirdfolder" data-theme="c" class="genConfigEl"/>
</div>
</div>
</div> <!-- partIfAustriaEnabled -->
</div> <!-- confgensection -->
<br><b><u><span id="transfersectiontxt">Datentransfer</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confdatatransfersection'); return false">
<span id="transfersectiontxt">Datentransfer</span> <span id="confdatatransfersection_expandicon" style="display:inline;">&#8690;</span><span id="confdatatransfersection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confdatatransfersection">
<div data-role="fieldcontain">
<label for="ftphost"><span id="ftphosttxt">FTP-Server:</span></label>
@ -3847,9 +3868,12 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="ftppass"><span id="ftppasstxt">FTP-Pass:</span></label>
<input type="password" value="" data-mini="true" placeholder="" id="ftppass" data-theme="c" class="genConfigEl"/>
</div>
</div> <!-- confdatatransfersection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('conftaxsection'); return false">
<span id="taxessectiontxt">Steuern</span> <span id="conftaxsection_expandicon" style="display:inline;">&#8690;</span><span id="conftaxsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="conftaxsection">
<br><b><u><span id="taxessectiontxt">Steuern</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="usstval">MwSt/Tax/IVA:</label>
<input type="text" value="" data-mini="true" placeholder="19,0" id="usstval" data-theme="c" class="genConfigEl"/>
@ -3859,9 +3883,12 @@ $(document).on("pageinit", "#admin-page", function () {
<input type="text" value="" data-mini="true" placeholder="7,0" id="togotaxval" data-theme="c" class="genConfigEl"/>
</div>
<i id="taxusage" style="padding-left: 50px;padding-right: 50px;">Hinweis zu Steuern</i><br><br>
</div> <!-- conftaxsection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confsecsection'); return false">
<span id="securitysectiontxt">Sicherheit</span> <span id="confsecsection_expandicon" style="display:inline;">&#8690;</span><span id="confsecsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confsecsection">
<br><b><u><span id="securitysectiontxt">Sicherheit</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="stornocode">Stornocode (Bons):</label>
<input type="password" value="" data-mini="true" id="stornocode" class="genConfigEl"/>
@ -3879,8 +3906,11 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="remoteaccesscode">Fernzugriffscode:</label>
<input type="password" value="" data-mini="true" id="remoteaccesscode" class="genConfigEl"/>
</div>
</div> <!-- consecsection -->
<br><b><u><span id="generalprintsectiontxt">Drucken allg.:</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confprintsection'); return false">
<span id="generalprintsectiontxt">Drucken allg.:</span> <span id="confprintsection_expandicon" style="display:inline;">&#8690;</span><span id="confprintsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confprintsection">
<div id="partOfPayPrintType" style="display:none;"></div>
<div data-role="fieldcontain">
@ -3898,8 +3928,11 @@ $(document).on("pageinit", "#admin-page", function () {
<span id=addrecprinterhint></span>
</div>
<div id="partOfPrintcash"></div>
</div> <!-- confprintsection -->
<br><b><u><span id="workreceiptssectiontxt">Arbeitsbons</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confworkrecsection'); return false">
<span id="workreceiptssectiontxt">Arbeitsbons</span> <span id="confworkrecsection_expandicon" style="display:inline;">&#8690;</span><span id="confworkrecsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confworkrecsection">
<div id="partOfDigiprintworkContainer">
<div id="partOfDigiprintwork"></div>
@ -3920,8 +3953,12 @@ $(document).on("pageinit", "#admin-page", function () {
<div id="partOfGroupWorkItemsf"></div>
<div id="partOfGroupWorkItemsd"></div>
<div id="partOfBillprintjobs"></div>
</div> <!-- confworkrecsection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confdiscountssection'); return false">
<span id="discountsectiontxt">Rabatte</span> <span id="confdiscountssection_expandicon" style="display:inline;">&#8690;</span><span id="confdiscountssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confdiscountssection">
<br><b><u><span id="discountsectiontxt">Rabatte</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="discountname1"><span id="discountname1txt">Rabattname 1:</span></label>
<input type="text" value="" data-mini="true" placeholder="Bezeichnung" id="discountname1" data-theme="c" class="genConfigEl"/>
@ -3938,8 +3975,12 @@ $(document).on("pageinit", "#admin-page", function () {
<div id="partOfDiscount1"></div>
<div id="partOfDiscount2"></div>
<div id="partOfDiscount3"></div>
</div> <!-- confdiscountssection -->
<br><b><u><span id="pickupsectiontxt">Abholansicht</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confpickupsection'); return false">
<span id="pickupsectiontxt">Abholansicht</span> <span id="confpickupsection_expandicon" style="display:inline;">&#8690;</span>
<span id="confpickupsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confpickupsection">
<div id="partOfPrintpickups"></div>
@ -3949,8 +3990,12 @@ $(document).on("pageinit", "#admin-page", function () {
</div>
<div id="partOfShowpickupdelbtn"></div>
<div id="partOfShowpickhelp"></div>
</div> <!-- confpickupsection -->
<br><b><u><span id="emailconfigsectiontxt">Email</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confemailsection'); return false">
<span id="emailconfigsectiontxt">Email</span> <span id="confemailsection_expandicon" style="display:inline;">&#8690;</span>
<span id="confemailsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confemailsection">
<div data-role="fieldcontain">
<label for="smtphost"><span id="smtphosttxt">SMTP Host:</span></label>
@ -3991,8 +4036,13 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="receiveremail"><span id="toemailtxt">Standard Emailempfänger:</span></label>
<input type="email" value="" data-mini="true" placeholder="gastwirt@anbieter.de" id="receiveremail" data-theme="c" class="genConfigEl"/>
</div>
</div> <!-- confemailsection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('conftemplatessection'); return false">
<span id="templatesectiontxt">Templates</span> <span id="conftemplatessection_expandicon" style="display:inline;">&#8690;</span>
<span id="conftemplatessection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="conftemplatessection">
<br><b><u><span id="templatesectiontxt">Templates</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="rectemplate">Kassenbonvorlage:</label>
<textarea cols="40" rows="8" name="rectemplate" id="rectemplate" class="genConfigEl" style="background-color:#FFFFFF;color:black;"></textarea>
@ -4031,8 +4081,13 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="reservationnote">Reservierungstemplate Email:</label>
<textarea cols="40" rows="8" name="reservationnote" id="reservationnote" class="genConfigEl" style="background-color:#FFFFFF;color:black;"></textarea>
</div>
</div> <!-- conftemplatessection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confsumupsection'); return false">
<span id="sumuptxt">SumUp-Anbindung</span> <span id="confsumupsection_expandicon" style="display:inline;">&#8690;</span>
<span id="confsumupsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confsumupsection">
<br><b><u><span id="sumuptxt">SumUp-Anbindung</span></u></b><br><br>
<div id="partOfSumupforcard"></div>
<div data-role="fieldcontain">
<label for="affiliatekey">Affiliate Key:</label>
@ -4046,8 +4101,13 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="sumupfailuretext"><span id="sumupfailuretexttxt">Stornotext:</span></label>
<input type="text" value="" data-mini="true" placeholder="" id="sumupfailuretext" data-theme="c" class="genConfigEl"/>
</div>
</div> <!-- confsumupsection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('conftimetracksection'); return false">
<span id="timetrackingtxt">Zeitmanagement</span> <span id="conftimetracksection_expandicon" style="display:inline;">&#8690;</span>
<span id="conftimetracksection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="conftimetracksection">
<br><b><u><span id="timetrackingtxt">Zeitmanagement</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="minbeforecome"><span id="minbeforecometxt">Stempelminuten früher:</span></label>
<input type="text" value="" data-mini="true" placeholder="0" id="minbeforecome" data-theme="c" class="genConfigEl"/>
@ -4056,13 +4116,21 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="minaftergo"><span id="minaftergotxt">Stempelminuten später</span></label>
<input type="text" value="" data-mini="true" placeholder="0" id="minaftergo" data-theme="c" class="genConfigEl"/>
</div>
</div> <!-- conftimetracksection -->
<br><b><u><span id="tasktxt">Aufgaben</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('conftaskssection'); return false">
<span id="tasktxt">Aufgaben</span> <span id="conftaskssection_expandicon" style="display:inline;">&#8690;</span>
<span id="conftaskssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="conftaskssection">
<div id="partOfTaskallasssign"></div>
<div id="partOfTaskifempty"></div>
<div id="partOfTaskownerempty"></div>
</div> <!-- conftaskssection -->
<br><b><u><span id="mobilviewsectiontxt">MOBILANSICHT</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confmobilsection'); return false">
<span id="mobilviewsectiontxt">MOBILANSICHT</span> <span id="confmobilsection_expandicon" style="display:inline;">&#8690;</span>
<span id="confmobilsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confmobilsection">
<div id="partOfProminentSearch"></div>
@ -4072,21 +4140,34 @@ $(document).on("pageinit", "#admin-page", function () {
</div>
<div id="partOfPriceinlist"></div>
</div> <!-- confmobilsection -->
<br><b><u><span id="desktopviewsectiontxt">DESKTOPANSICHT</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confdesksection'); return false">
<span id="desktopviewsectiontxt">DESKTOPANSICHT</span> <span id="confdesksection_expandicon" style="display:inline;">&#8690;</span>
<span id="confdesksection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confdesksection">
<div>
<div id="partOfReturntoorder"></div>
<i id=returntoorderhint style="padding-left: 50px;padding-right: 50px;">Hinweis: siehe Anleitung</i>
</div>
<br><b><u><span id="closingprintstxt">Tageserfassungsbons</span></u></b><br><br>
</div> <!-- confdesksection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confclosingssection'); return false">
<span id="closingprintstxt">Tageserfassungsbons</span> <span id="confclosingssection_expandicon" style="display:inline;">&#8690;</span>
<span id="confclosingssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confclosingssection">
<div id="partOfclosshowci"></div>
<div id="partOfclosshowpaytaxes"></div>
<div id="partOfclosshowprods"></div>
</div> <!-- confclosingssection -->
<br><b><u><span id="showpaymentstxt">Zahlungswege</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confpaywaysection'); return false">
<span id="showpaymentstxt">Zahlungswege</span> <span id="confpaywaysection_expandicon" style="display:inline;">&#8690;</span>
<span id="confpaywaysection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confpaywaysection">
<div id="partOfshowpayments"></div>
<i id=showpaymentshint style="padding-left: 50px;padding-right: 50px;">Hinweis: alles Bar</i><br>
@ -4097,13 +4178,21 @@ $(document).on("pageinit", "#admin-page", function () {
<div id="partOfshowpayment6"></div>
<div id="partOfshowpayment7"></div>
<div id="partOfshowpayment8"></div>
</div> <!-- confpaywaysection -->
<br><b><u><span id="dashsectiontxt">Dashboard</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confdashsection'); return false">
<span id="dashsectiontxt">Dashboard</span> <span id="confdashsection_expandicon" style="display:inline;">&#8690;</span>
<span id="confdashsection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confdashsection">
<div id="partOfDashslot1"></div>
<div id="partOfDashslot2"></div>
<div id="partOfDashslot3"></div>
</div> <!-- confdashsection -->
<br><b><u><span id="guestsystemsectiontxt">Gastsystem</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confguestsyssection'); return false">
<span id="guestsystemsectiontxt">Gastsystem</span> <span id="confguestsyssection_expandicon" style="display:inline;">&#8690;</span>
<span id="confguestsyssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confguestsyssection">
<div data-role="fieldcontain">
<label for="guesturl">Webserver-Gastsystem:</label>
@ -4124,13 +4213,18 @@ $(document).on("pageinit", "#admin-page", function () {
<div id="partOfAskdaycode"></div>
<div id="partOfAsktablecode"></div>
<div id="partOfShowdaycode"></div>
<div data-role="fieldcontain">
<label for="guesttimeout"><span id="guesttimeoutxt">Timeout</span>:</label>
<input type="text" value="" data-mini="true" placeholder="5" id="guesttimeout" data-theme="c" class="genConfigEl"/><br>
<i id=guesttimeouthint style="padding-left: 50px;padding-right: 50px;">Hinweis: 0 = kein Timeout</i>
</div>
</div> <!-- confguestsyssection -->
<br><b><u><span id="specialsettingssectiontxt">Spezialeinstellungen</span></u></b><br><br>
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confspecialssection'); return false">
<span id="specialsettingssectiontxt">Spezialeinstellungen</span> <span id="confspecialssection_expandicon" style="display:inline;">&#8690;</span>
<span id="confspecialssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confspecialssection">
<div id="partOfOneclickcooked"></div>
@ -4148,9 +4242,15 @@ $(document).on("pageinit", "#admin-page", function () {
<div id="partOfBeepCooked"></div>
<div id="partOfShowtogo"></div>
<div id="partOfShowprepinwaiter"></div>
<div id="partOfShowtransferbtns"></div>
<div id="partOfDblog"></div>
</div> <!-- confspecialssection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confprintpollssection'); return false">
<span id="pollssectiontxt">Druckabfrageintervalle</span> <span id="confprintpollssection_expandicon" style="display:inline;">&#8690;</span>
<span id="confprintpollssection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confprintpollssection">
<br><b><u><span id="pollssectiontxt">Druckabfrageintervalle</span></u></b><br><br>
<i id=pollhint style="padding-left: 50px;padding-right: 50px;">Hinweis: Printserverversion 1.5.6+</i>
<div data-role="fieldcontain">
<label for="pollbills"><span id="pollbillstxt">Abfrageintervall Rechnungen:</span></label>
@ -4172,8 +4272,13 @@ $(document).on("pageinit", "#admin-page", function () {
<label for="pollpickups"><span id="pollpickupstxt">Abfrageintervall Abh.bons</span></label>
<input type="text" value="" data-mini="true" placeholder="2" id="pollpickups" data-theme="c" class="genConfigEl"/>
</div>
</div> <!-- confprintpollssection -->
<p><a class="genconflink" href="" onclick="javascript:showconfsection('confserversection'); return false">
<span id="serversectiontxt">Server</span> <span id="confserversection_expandicon" style="display:inline;">&#8690;</span>
<span id="confserversection_collapseicon" style="display:none;">&#8689</span></a>
<div style="display: none" id="confserversection">
<br><b><u><span id="serversectiontxt">Server</span></u></b><br><br>
<div data-role="fieldcontain">
<label for="memorylimit"><span id="memorylimittxt">PHP Memory Limit:</span></label>
<input type="text" value="" data-mini="true" placeholder="256" id="memorylimit" data-theme="c" class="genConfigEl"/>
@ -4196,6 +4301,7 @@ $(document).on("pageinit", "#admin-page", function () {
</div>
<p>&nbsp;
</div> <!-- confserversection -->
<br><b><u><span id="applysectiontxt">Ändern</span></u></b><br><br>
<div style="margin-left:30px;margin-right:30px;">
@ -4289,7 +4395,7 @@ $(document).on("pageinit", "#admin-page", function () {
<p>Einrückungen bilden das Produktangebot hierarchisch ab. Die tiefsten Einrückungen stellen die <i>Produkte</i> dar,
alle Eebenen darüber die <i>Kategorien</i>.
<p>Die einfachste Form einer Speisekarte (Angabe des Langnames und des Preises für alle Preisstufen) sieht folgendermaßen aus:
<p>Die einfachste Form einer Speisekarte (Angabe des Produktnamens und des Preises für alle Preisstufen) sieht folgendermaßen aus:
<pre>
Speisen
@ -4306,7 +4412,7 @@ $(document).on("pageinit", "#admin-page", function () {
<h3>Produkteinträge</h3>
<p>Ein Produkteintrag hat in der einfachsten Schreibweise folgende Syntax: <i>Produktname; Preis</i>. Sollen jedoch weitere Eigenschaften
festgelegt werden, können diese hinter einem Doppelkreuz per Semikolon getrennt angegeben werden: <i>Langname des Produkts; Preis # Eigenschaft1:Wert1; Eigenschaft2: Wert2</i>.
festgelegt werden, können diese hinter einem Doppelkreuz per Semikolon getrennt angegeben werden: <i>Produktname; Preis # Eigenschaft1:Wert1; Eigenschaft2: Wert2</i>.
<p>Folgende Eigenschaften können angegeben werden:
@ -4315,10 +4421,10 @@ $(document).on("pageinit", "#admin-page", function () {
so sollte man die ID-Kennzeichnung beibehalten. Nur so kann das System das Produkt eindeutig identifizieren und in der
Statistik später eindeutig zuordnen. Es ist wichtig, keine eigenen IDs zu vergeben, denn neue IDs werden stets
vom OrderSprinter erzeugt!
<li><b>Kurzname</b>: Der Kurzname ist die Produktbezeichnung, die auf dem Bestellterminal erscheint. Wenn beispielsweise die übergeordnete
Kategorie <i>Cola</i> lautet, kann man darunter Produkte mit den Kurznamen <i>0,3l</i> und <i>0,5l</i> eintragen und damit die Übersicht auf
mobilen Geräten verbessern. Der Langname sollte jedoch die komplette Bezeichnung enthalten (<i>Cola 0,2l</i> und <i>Cola 0,5l</i>). Wird
der Kurzname nicht angegeben, wird automatisch der Langname verwendet.
<li><b>Kurzname</b>: Dies ist die Produktbezeichnung, die auf dem Bestellterminal erscheint. Wenn beispielsweise die übergeordnete
Kategorie <i>Cola</i> lautet, kann man darunter Produkte mit den Bestellansichtsnamen <i>0,3l</i> und <i>0,5l</i> eintragen und damit die Übersicht auf
mobilen Geräten verbessern. Der Produktname sollte jedoch die komplette Bezeichnung enthalten (<i>Cola 0,2l</i> und <i>Cola 0,5l</i>). Wird
der Name für die Bestellansicht nicht angegeben, wird automatisch der Produktname verwendet.
<li><b>vorhanden</b>: Wenn ein Produkt zwar in der Speisekarte eingetragen werden soll, jedoch temporär nicht verfügbar ist, kann man dies
kennzeichnen, indem man den Wert auf <i>0</i> oder <i>nein</i> setzt.
<li><b>PreisB</b>: Preis der Preisstufe B. Wird diese Eigenschaft nicht angegeben, wird der Preis A verwendet, d.h. der Preis vor dem Doppelkreuz.
@ -4349,6 +4455,7 @@ $(document).on("pageinit", "#admin-page", function () {
<pre>
Cola 0,2l; 2,30 # Kurzname: 0.2l; vorhanden:nein; PreisB: 1,90
</pre>
Der Kurzname ist der Name des Produktes, wie es in der Bestellansicht aufgeführt ist.
<h3>Kategorien</h3>
@ -4372,7 +4479,7 @@ $(document).on("pageinit", "#admin-page", function () {
hat demnach folgendes Aussehen (Beispiel):
<pre>
!Extraname (ID:8) 12,34 ; (45),Langname eines Produkts,(49),(50)
!Extraname (ID:8) 12,34 ; (45),Produktname,(49),(50)
</pre>
<p>Dabei gilt:
@ -4381,10 +4488,10 @@ $(document).on("pageinit", "#admin-page", function () {
beibehalten. Ein selbt erstellter neuer Extras-Eintrag sollte keine ID-Nummer enthalten.
<li>Der Wert 12,34 ist der Aufpreis.
<li>Hinter dem Semikolon wurden Komma-getrennt Produkte angegeben, die mit diesem Extra bestellt werden können, in diesem Fall
die Produkte mit der ID 45, 49 und 50 sowie ein Produkt mit dem Langnamen <i>Langname eines Produkts</i>.
die Produkte mit der ID 45, 49 und 50 sowie ein Produkt mit dem Namen <i>Produktname</i>.
</ul>
<p><i>Hinweis:</i> Gibt es den Langnamen mehrfach, wird das Extra auch mehrfach zugewiesen.
<p><i>Hinweis:</i> Gibt es den Produktnamen mehrfach, wird das Extra auch mehrfach zugewiesen.
<h3>Reservierte Buchstaben</h3>

File diff suppressed because one or more lines are too long

View File

@ -1029,7 +1029,7 @@ class Admin {
return;
}
$configItems = join(",",array("'decpoint'","'version'","'cancelunpaidcode'","'tax'","'togotax'","'taxaustrianormal'","'taxaustriaerm1'","'taxaustriaerm2'","'taxaustriaspecial'","'currency'","'workflowconfig'","'prominentsearch'","'discount1'","'discount2'","'discount3'","'discountname1'","'discountname2'","'discountname3'","'waitergopayprint'","'cashenabled'","'returntoorder'","'restaurantmode'","'usebarcode'","'startprodsearch'","'priceinlist'","'showdaycode'","'dailycode'","'showtogo'","'billprintjobs'"));
$configItems = join(",",array("'decpoint'","'version'","'cancelunpaidcode'","'tax'","'togotax'","'taxaustrianormal'","'taxaustriaerm1'","'taxaustriaerm2'","'taxaustriaspecial'","'currency'","'workflowconfig'","'prominentsearch'","'discount1'","'discount2'","'discount3'","'discountname1'","'discountname2'","'discountname3'","'waitergopayprint'","'cashenabled'","'returntoorder'","'restaurantmode'","'usebarcode'","'startprodsearch'","'priceinlist'","'showdaycode'","'dailycode'","'showtogo'","'billprintjobs'","'showtransferbtns'"));
$sql = "select name,setting FROM %config% WHERE name in ($configItems)";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
@ -1173,6 +1173,7 @@ class Admin {
array("usebarcode",0,false),
array("defaultview",0,false),
array("dblog",1,false),
array("showtransferbtns",1,false),
array("printpickups",0,false),
array("billprintjobs",2,false),
array("printextras",0,false),
@ -1411,7 +1412,7 @@ class Admin {
$view = "preferences.html";
}
echo json_encode($view . "?v=1.5.24");
echo json_encode($view . "?v=1.5.25");
}
}
@ -1632,31 +1633,31 @@ class Admin {
if (!self::isOnlyRatingUser($rights, $right_rating, true)) {
if ($_SESSION['modus'] == 0) {
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waitertxt[$lang], "link" => "waiter.html?v=1.5.24"); }
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waitertxt[$lang], "link" => "waiter.html?v=1.5.25"); }
} else {
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.5.24"); }
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.5.25"); }
}
if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.5.24"); }
if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.5.24"); }
if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.5.24"); }
if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.5.25"); }
if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.5.25"); }
if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.5.25"); }
if ($_SESSION['modus'] == 0) {
if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.5.24"); }
if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.5.25"); }
}
if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.5.24"); }
if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.5.24"); }
if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.5.24"); }
if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.5.24"); }
if ($_SESSION['right_tasks'] || $_SESSION['right_tasksmanagement']) { $mainMenu[] = array("name" => $taskstxt[$lang], "link" => "tasks.html?v=1.5.24"); }
if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.5.24"); }
if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.5.24"); }
if ($_SESSION['right_pickups']) { $mainMenu[] = array("name" => $pickupstxt[$lang], "link" => "pickups.html?v=1.5.24"); }
if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.5.24"); }
if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.5.24"); }
$mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.5.24");
if ($_SESSION['right_timetracking'] || $_SESSION['right_timemanager']) { $mainMenu[] = array("name" => $timetrackingtxt[$lang], "link" => "timetracking.html?v=1.5.24"); }
if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.5.25"); }
if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.5.25"); }
if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.5.25"); }
if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.5.25"); }
if ($_SESSION['right_tasks'] || $_SESSION['right_tasksmanagement']) { $mainMenu[] = array("name" => $taskstxt[$lang], "link" => "tasks.html?v=1.5.25"); }
if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.5.25"); }
if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.5.25"); }
if ($_SESSION['right_pickups']) { $mainMenu[] = array("name" => $pickupstxt[$lang], "link" => "pickups.html?v=1.5.25"); }
if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.5.25"); }
if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.5.25"); }
$mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.5.25");
if ($_SESSION['right_timetracking'] || $_SESSION['right_timemanager']) { $mainMenu[] = array("name" => $timetrackingtxt[$lang], "link" => "timetracking.html?v=1.5.25"); }
$mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.5.24");
$mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.5.24");
$mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.5.25");
$mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.5.25");
}
$mainMenu[] = array("name" => $logout[$lang], "link" => "logout.php");
@ -2086,22 +2087,17 @@ class Admin {
exit();
}
$content = file_get_contents($_FILES['logofile']['tmp_name']);
if ($_FILES['logofile']['error'] != UPLOAD_ERR_OK //checks for errors
&& is_uploaded_file($_FILES['logofile']['tmp_name'])) { //checks that file is uploaded
header("Location: ../infopage.html?e=manager.html=Kann_Datei_nicht_laden.");
exit();
}
if (strlen($content) > 65535) {
header("Location: ../infopage.html?e=manager.html=Logobild_muss_kleiner_als_64_Kilobytes_sein!");
exit();
}
$pdo = DbUtils::openDbAndReturnPdoStatic();
self::changeItemInTable($pdo, "logoimg", $content, "%logo%");
$imageScaled = CommonUtils::scaleImg($_FILES['logofile']['tmp_name'], 300);
self::changeItemInTable($pdo, "logoimg", $imageScaled, "%logo%");
header("Location: ../infopage.html?i=manager.html=Import_war_erfolgreich."); /* Browser umleiten */
exit;
@ -2215,6 +2211,7 @@ class Admin {
"usebarcode" => array("dbcol" => "usebarcode","checknum" => 0),
"defaultview" => array("dbcol" => "defaultview", "checknum" => 0),
"dblog" => array("dbcol" => "dblog","checknum" => 0),
"showtransferbtns" => array("dbcol" => "showtransferbtns","checknum" => 0),
"printpickups" => array("dbcol" => "printpickups","checknum" => 0),
"billprintjobs" => array("dbcol" => "billprintjobs","checknum" => 0),
"printextras" => array("dbcol" => "printextras","checknum" => 0),

View File

@ -639,16 +639,27 @@ class Bill {
}
$cashByGuestsAndInsertTakeOut = 0.0;
$sql = "SELECT sum(brutto) as sumtotal FROM %bill% WHERE closingid is null AND paymentid='1' AND userid='$userId' AND (status is null OR status ='c')";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$row =$stmt->fetchObject();
if ($row != null) {
if ($row->sumtotal != null) {
$cashByGuestsAndInsertTakeOut = $row->sumtotal;
$sql = "SELECT sum(brutto) as sumtotal FROM %bill% WHERE closingid is null AND paymentid='1' AND userid=? AND (status is null OR status ='c')";
$res = CommonUtils::fetchSqlAll($pdo, $sql, array($userId));
if (count($res) > 0) {
$cashVal = $res[0]["sumtotal"];
if (!is_null($cashVal)) {
$cashByGuestsAndInsertTakeOut = $cashVal;
}
}
echo json_encode(array("cashperpayments" => $cashPerPayments,"total" => $cashByGuestsAndInsertTakeOut));
$onlyCash = 0.0;
$sql = "SELECT sum(brutto) as sumtotal FROM %bill% WHERE closingid is null AND paymentid='1' AND userid=? AND status ='c'";
CommonUtils::fetchSqlAll($pdo, $sql, array($userId));
$res = CommonUtils::fetchSqlAll($pdo, $sql, array($userId));
if (count($res) > 0) {
$cashVal = $res[0]["sumtotal"];
if (!is_null($cashVal)) {
$onlyCash = $cashVal;
}
}
echo json_encode(array("cashperpayments" => $cashPerPayments,"total" => $cashByGuestsAndInsertTakeOut,"onlycash" => $onlyCash));
}
function getLastBillsWithContent($day,$month,$year) {

View File

@ -441,4 +441,32 @@ class CommonUtils {
return $unit;
}
public static function scaleImg($fn,$maxDim) {
list($width, $height, $type, $attr) = getimagesize($fn);
$size = getimagesize($fn);
$ratio = $size[0] / $size[1]; // width/height
if ($ratio > 1) {
$width = $maxDim;
$height = $maxDim / $ratio;
} else {
$width = $maxDim * $ratio;
$height = $maxDim;
}
$src = imagecreatefromstring(file_get_contents($fn));
$dst = imagecreatetruecolor($width, $height);
imagealphablending($dst, false);
imagesavealpha($dst, true);
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
imagefilledrectangle($dst, 0, 0, $width, $height, $transparent);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagedestroy($src);
ob_start();
imagepng($dst); // adjust format as needed
$imagedata = ob_get_contents();
ob_end_clean();
imagedestroy($dst);
return $imagedata;
}
}

View File

@ -853,7 +853,7 @@ class Customers {
$txt = "<head>";
$txt .= "<title>" . self::$CUS_OVERVIEW[$lang] . "</title>";
$txt .= '<meta http-equiv="content-type" content="text/html; charset=utf-8">';
$txt .= '<link rel="stylesheet" type="text/css" href="../css/guestreport.css?v=1.5.24">';
$txt .= '<link rel="stylesheet" type="text/css" href="../css/guestreport.css?v=1.5.25">';
$txt .= "</head>";
return $txt;
}

View File

@ -27,7 +27,7 @@ if (isset($_POST["cmd"])) {
if (strlen($status) > 150) {
$status = substr($status, 0,149);
}
$version = "1.5.24";
$version = "1.5.25";
$arr = array("cmd" => $cmd,"fct" => $fct, "xhr" => $xhr,"errormsg" => $errormsg,"status" => $status,"version" => $version,"phpversion" => $phpversion);
} else {

View File

@ -51,6 +51,16 @@ class Guestsync {
$asktablecode = CommonUtils::getConfigValue($pdo, 'asktablecode', "1");
$guesttimeout = CommonUtils::getConfigValue($pdo, 'guesttimeout', "5");
$sql = "SELECT setting from %logo% WHERE name=? HAVING setting is not null";
$logoImg = CommonUtils::fetchSqlAll($pdo, $sql, array("logoimg"));
if (count($logoImg) > 0) {
$logo = base64_encode($logoImg[0]["setting"]);
} else {
$logo = '';
}
$prodimages = self::getImagesForGuestProducs($pdo);
$transferdata = array(
"timezone" => $timezone,
"dailycode" => $dailycode,
@ -62,7 +72,9 @@ class Guestsync {
"decpoint" => $decpoint,
"askdaycode" => $askdaycode,
"asktablecode" => $asktablecode,
"guesttimeout" => $guesttimeout
"guesttimeout" => $guesttimeout,
"logo" => $logo,
"prodimages" => $prodimages
);
$data = json_encode($transferdata);
@ -184,6 +196,24 @@ class Guestsync {
private static $typesWithContent = array();
private static function getImagesForGuestProducs($pdo) {
date_default_timezone_set(DbUtils::getTimeZone());
$dayofweek = date('N');
if ($dayofweek == 7) {
$dayofweek = 0;
}
$sql = "SELECT P.id as prodid,I.imgl as imagedata ";
$sql .= " FROM %products% P,%prodimages% I WHERE P.available='1' AND P.removed is null ";
$sql .= " AND P.prodimageid=I.id ";
$sql .= " AND (days is null OR days like ?) AND (display = 'KG' OR display = 'G' OR display is null) ";
$sql .= " AND (unit is null OR unit='0') ";
$allProductImgs = CommonUtils::fetchSqlAll($pdo, $sql, array("%$dayofweek%"));
return $allProductImgs;
}
private static function getMenuForGuests($pdo) {
date_default_timezone_set(DbUtils::getTimeZone());
$dayofweek = date('N');

View File

@ -489,10 +489,26 @@ class PrintQueue {
}
function getLogoAsPng() {
$pdo = $this->dbutils->openDbAndReturnPdo();
private static function outputEmptyImage() {
$my_img = imagecreate( 1,1 );
$background = imagecolorallocate( $my_img, 0, 0, 255 );
$black = imagecolorallocate($im, 0, 0, 0);
imagecolortransparent($my_img, $black);
imagepng( $my_img );
imagecolordeallocate( $background );
imagedestroy( $my_img );
}
header("Content-Disposition: attachment; filename=logo.png");
function getLogoAsPng() {
$sendEmptyImageInsteadOfNone = false;
if (isset($_GET["style"])) {
if ($_GET["style"] == "always") {
$sendEmptyImageInsteadOfNone = true;
}
}
$pdo = DbUtils::openDbAndReturnPdoStatic();
//header("Content-Disposition: attachment; filename=logo.png");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
header("Expires: Mon, 20 Dec 1998 01:00:00 GMT" );
@ -506,10 +522,24 @@ class PrintQueue {
if ($stmt->rowCount() > 0) {
$img = $row->setting;
if (is_null($img)) {
if ($sendEmptyImageInsteadOfNone) {
self::outputEmptyImage();
}
} else {
$php_img = imagecreatefromstring($img);
imagesavealpha($php_img, true);
$color = imagecolorallocatealpha($php_img, 0, 0, 0, 127);
imagepng($php_img, NULL);
imagecolordeallocate( $color );
imagedestroy($php_img);
}
} else {
if ($sendEmptyImageInsteadOfNone) {
self::outputEmptyImage();
}
}
}
function getLogoAsWbmp() {

View File

@ -190,8 +190,8 @@ class Products {
private static $proddefs = array(
array("id" => "id","get" => "%products%.id as id","histid" => "prodid","histget" => "prodid","histexportname" => "Produktid","isnumber" => "0"),
array("id" => "shortname", "get" => "shortname","histid" => "shortname","histget" => "shortname","histexportname" => "Kurzname","isnumber" => "0"),
array("id" => "longname", "get" => "longname","histid" => "longname","histget" => "longname","histexportname" => "Langname","isnumber" => "0"),
array("id" => "shortname", "get" => "shortname","histid" => "shortname","histget" => "shortname","histexportname" => "Name in Bestellansicht","isnumber" => "0"),
array("id" => "longname", "get" => "longname","histid" => "longname","histget" => "longname","histexportname" => "Produktname","isnumber" => "0"),
array("id" => "available", "get" => "available","histid" => "available","histget" => "available","histexportname" => "","histexportname" => "Verfügbarkeit","isnumber" => "0", "exportvals" => array("default" => "Nein","1" => "Ja")),
array("id" => "priceA", "get" => "priceA","histid" => "priceA","histget" => "priceA","histexportname" => "Preis (Stufe A)","isnumber" => "1"),
array("id" => "priceB", "get" => "priceB","histid" => "priceB","histget" => "priceB","histexportname" => "Preis (Stufe B)","isnumber" => "1"),
@ -1306,7 +1306,6 @@ class Products {
}
function getprodimage($prodid,$size='h') {
$imgcol = 'imgh';
if ($size == 'm') {
$imgcol = 'imgm';
@ -1334,34 +1333,6 @@ class Products {
exit;
}
private static function scaleImg($fn,$maxDim) {
list($width, $height, $type, $attr) = getimagesize($_FILES['imagefile']['tmp_name']);
$size = getimagesize($fn);
$ratio = $size[0] / $size[1]; // width/height
if ($ratio > 1) {
$width = $maxDim;
$height = $maxDim / $ratio;
} else {
$width = $maxDim * $ratio;
$height = $maxDim;
}
$src = imagecreatefromstring(file_get_contents($fn));
$dst = imagecreatetruecolor($width, $height);
imagealphablending($dst, false);
imagesavealpha($dst, true);
$transparent = imagecolorallocatealpha($dst, 255, 255, 255, 127);
imagefilledrectangle($dst, 0, 0, $width, $height, $transparent);
imagecopyresampled($dst, $src, 0, 0, 0, 0, $width, $height, $size[0], $size[1]);
imagedestroy($src);
ob_start();
imagepng($dst); // adjust format as needed
$imagedata = ob_get_contents();
ob_end_clean();
imagedestroy($dst);
return $imagedata;
}
private function deleteImageProdAssignment($prodid) {
$pdo = DbUtils::openDbAndReturnPdoStatic();
$pdo->beginTransaction();
@ -1398,13 +1369,13 @@ class Products {
$fn = $_FILES['imagefile']['tmp_name'];
$imageh = self::scaleImg($fn, 300);
$imageh = CommonUtils::scaleImg($fn, 300);
$imageBaseh_64 = base64_encode($imageh);
$imagem = self::scaleImg($fn, 150);
$imagem = CommonUtils::scaleImg($fn, 150);
$imageBasem_64 = base64_encode($imagem);
$imagel = self::scaleImg($fn, 80);
$imagel = CommonUtils::scaleImg($fn, 80);
$imageBasel_64 = base64_encode($imagel);
$pdo->beginTransaction();

View File

@ -13,11 +13,11 @@ class Reservation {
echo json_encode(array("status" => "ERROR", "code" => ERROR_RES_NOT_AUTHOTRIZED, "msg" => ERROR_RES_NOT_AUTHOTRIZED_MSG));
} else {
if ($command == 'createReservation') {
$this->createReservation($_POST['day'],$_POST['month'],$_POST['year'],$_POST['start'],$_POST['name'],$_POST['email'],$_POST['persons'],$_POST['duration'],$_POST['phone'],$_POST['remark']);
$this->createReservation($_POST['day'],$_POST['month'],$_POST['year'],$_POST['start'],$_POST['name'],$_POST['email'],$_POST['persons'],$_POST['duration'],$_POST['phone'],$_POST['remark'],$_POST["tableid"]);
} else if ($command == 'getReservations') {
$this->getReservations($_GET['day'],$_GET['month'],$_GET['year']);
} else if ($command == 'changeReservation') {
$this->changeReservation($_POST['id'],$_POST['day'],$_POST['month'],$_POST['year'],$_POST['start'],$_POST['name'],$_POST['email'],$_POST['persons'],$_POST['duration'],$_POST['phone'],$_POST['remark']);
$this->changeReservation($_POST['id'],$_POST['day'],$_POST['month'],$_POST['year'],$_POST['start'],$_POST['name'],$_POST['email'],$_POST['persons'],$_POST['duration'],$_POST['phone'],$_POST['remark'],$_POST["tableid"]);
} else if ($command == 'delReservation') {
$this->delReservation($_POST['id']);
} else if ($command == 'emailConfirmReservation') {
@ -40,22 +40,25 @@ class Reservation {
}
}
private function createReservation($day,$month,$year,$start,$name,$email,$persons,$duration,$phone,$remark) {
private function createReservation($day,$month,$year,$start,$name,$email,$persons,$duration,$phone,$remark,$tableid) {
$userid = $_SESSION['userid'];
date_default_timezone_set(DbUtils::getTimeZone());
$currentTime = date('Y-m-d H:i:s');
$scheduledDate = "$year-$month-$day 00:00:00";
if ($tableid <= 0) {
$tableid = null;
}
$pdo = DbUtils::openDbAndReturnPdoStatic();
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$sql = "INSERT INTO `%reservations%` (
`id` , `creator`,`creationdate`,`scheduledate`,`name`,`email`,`starttime`,`duration`,`persons`,`phone`,`remark`)
`id` , `creator`,`creationdate`,`scheduledate`,`name`,`email`,`starttime`,`duration`,`persons`,`phone`,`remark`,`tableid`)
VALUES (
NULL , ?,?,?,?,?,?,?,?,?,?)";
NULL , ?,?,?,?,?,?,?,?,?,?,?)";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($userid,$currentTime,$scheduledDate,$name,$email,$start,$duration,$persons,$phone,$remark));
$stmt->execute(array($userid,$currentTime,$scheduledDate,$name,$email,$start,$duration,$persons,$phone,$remark,$tableid));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
@ -65,20 +68,18 @@ class Reservation {
}
}
private function changeReservation($id,$day,$month,$year,$start,$name,$email,$persons,$duration,$phone,$remark) {
private function changeReservation($id,$day,$month,$year,$start,$name,$email,$persons,$duration,$phone,$remark,$tableid) {
$userid = $_SESSION['userid'];
date_default_timezone_set(DbUtils::getTimeZone());
$currentTime = date('Y-m-d H:i:s');
$scheduledDate = "$year-$month-$day 00:00:00";
$pdo = DbUtils::openDbAndReturnPdoStatic();
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$sql = "UPDATE `%reservations%` SET creator=?,creationdate=?,scheduledate=?,name=?,email=?,starttime=?,duration=?,persons=?,phone=?,remark=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($userid,$currentTime,$scheduledDate,$name,$email,$start,$duration,$persons,$phone,$remark,$id));
$sql = "UPDATE `%reservations%` SET creator=?,creationdate=?,scheduledate=?,name=?,email=?,starttime=?,duration=?,persons=?,phone=?,remark=?,tableid=? WHERE id=?";
CommonUtils::execSql($pdo, $sql, array($userid,$currentTime,$scheduledDate,$name,$email,$start,$duration,$persons,$phone,$remark,$tableid,$id));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
@ -89,12 +90,11 @@ class Reservation {
}
private function delReservation($id) {
$pdo = DbUtils::openDbAndReturnPdoStatic();
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$sql = "DELETE FROM `%reservations%` WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
CommonUtils::execSql($pdo, $sql, array($id));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
@ -119,32 +119,68 @@ class Reservation {
}
}
private function getGeneralItemFromDbWithPdo($pdo,$field) {
$aValue="";
$sql = "SELECT setting FROM %config% where name='$field'";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$row =$stmt->fetchObject();
if ($row != null) {
$aValue = $row->setting;
}
return $aValue;
}
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 = "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,'-1',(SELECT T.sorting as tablesorting FROM %room% RO,%resttables% T WHERE T.id=tableid AND T.roomid=RO.id)) as tablesorting ";
$sql .= "FROM %reservations% R,%user% U ";
$sql .= "WHERE DATE(scheduledate)=? AND R.creator=U.id ";
$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 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 00:00:00";
$scheduledDate = "$year-$month-$day";
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "SELECT DISTINCT %reservations%.id,%user%.username as username,creationdate,scheduledate,starttime,name,email,persons,duration,phone,remark FROM %reservations%,%user% WHERE scheduledate=? AND %reservations%.creator=%user%.id ORDER BY starttime";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($scheduledDate));
$pdo = DbUtils::openDbAndReturnPdoStatic();
$result = CommonUtils::fetchSqlAll($pdo, $sql, array($scheduledDate));
$result = $stmt->fetchAll();
$resArray = array();
foreach($result as $row) {
@ -165,13 +201,32 @@ class Reservation {
"duration" => $row['duration'],
"phone" => $row['phone'],
"remark" => $row['remark'],
"roomid" => $row['roomid'],
"tableid" => $row['tableid']
);
}
echo json_encode(array("status" => "OK", "msg" => $resArray));
return $resArray;
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
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();
}
}
}
?>

View File

@ -210,8 +210,21 @@ class Roomtables {
return $row->area;
}
private static function getTimesFromArray($tableid,$reservations) {
foreach($reservations as $res) {
if ($res["tableid"] == $tableid) {
return $res["times"];
}
}
return '';
}
private function getAllTablesAndRooms($pdo)
{
$sql = "SELECT tableid,GROUP_CONCAT(DISTINCT CONCAT(starttime,':00-',(starttime+duration),':00') ORDER BY starttime) as times from %reservations% R ";
$sql .= "WHERE DATE(scheduledate)=CURDATE() AND (HOUR(NOW())-1) <= starttime GROUP BY tableid";
$reservations = CommonUtils::fetchSqlAll($pdo, $sql);
$userarea = self::getUserArea($pdo);
$queue = new QueueContent();
@ -228,6 +241,7 @@ class Roomtables {
if (($showprepinwaiter == 1) && (($workflowconfig == 0) || ($workflowconfig == 1))) {
$queryprodForTableView = true;
}
foreach($dbresult as $zeile) {
$roomid = $zeile['id'];
@ -258,6 +272,8 @@ class Roomtables {
foreach ($tablesArray as $tableEntry) {
$resTxt = self::getTimesFromArray($tableEntry->id, $reservations);
$arrayOfProdsAndIdsOfATable = array("prods" => array(), "ids" => '');
if ($queryprodForTableView) {
$arrayOfProdsAndIdsOfATable = $queue->getAllPreparedProductsForTableidAsArray($pdo,$tableEntry->id);
@ -270,6 +286,7 @@ class Roomtables {
$tableEntry->prodcount = $numberOfProductsTotalToServe;
$tableEntry->prodready = $numberOfReadyProducts;
$tableEntry->readyQueueIds = $queueids;
$tableEntry->reservations = $resTxt;
}
$aRoomEntry = array ("id" => $roomid, "name" => $zeile['roomname'], "tables" => $tablesArray);
@ -389,6 +406,13 @@ class Roomtables {
$hist = new HistFiller();
$hist->updateConfigInHist($pdo, "togoworkprinter", $togoworkprinter);
$sql = "SELECT R.id as resid FROM %reservations% R,%resttables% T WHERE R.tableid=T.id AND T.removed is not null";
$allReservIds = CommonUtils::fetchSqlAll($pdo, $sql, null);
$sql = "DELETE FROM %reservations% WHERE id=?";
foreach($allReservIds as $resid) {
CommonUtils::execSql($pdo, $sql, array($resid["resid"]));
}
$pdo->commit();
} catch (Exception $ex) {
echo json_encode(array("status" => "ERROR","msg" => $ex->getMessage()));

View File

@ -1200,6 +1200,25 @@ class Version {
}
}
public static function upd_1524_1525($pdo, $prefix, $dbname) {
try {
self::insertOrUpdateConfigItem($pdo, 'showtransferbtns', '1');
self::execSql($pdo, "ALTER TABLE %reservations% ADD tableid INT(10) NULL AFTER phone");
$sql = "ALTER TABLE %reservations% ADD INDEX tresdate (scheduledate)";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
$sql = "ALTER TABLE %logo% MODIFY setting MEDIUMBLOB NULL";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
return array(true);
} catch (PDOException $e) {
return array(false,$e);
}
}
public static $updateOrder = array(
"1.3.0" => array("upd_1300_1301","1.3.1"),
"1.3.1" => array("upd_1301_1302","1.3.2"),
@ -1271,7 +1290,8 @@ class Version {
"1.5.20" => array("upd_1520_1521","1.5.21"),
"1.5.21" => array("upd_1521_1522","1.5.22"),
"1.5.22" => array("upd_1522_1523","1.5.23"),
"1.5.23" => array("upd_1523_1524","1.5.24")
"1.5.23" => array("upd_1523_1524","1.5.24"),
"1.5.24" => array("upd_1524_1525","1.5.25")
);
public static function runUpdateProcess($pdo,$prefix, $dbname, $untilVersion,$checkValidVersion) {

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -13,7 +13,7 @@
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.5.min.js"></script>
<script src="utilities.js?v=1.5.24"></script>
<script src="utilities.js?v=1.5.25"></script>
<link rel="stylesheet" href="php/3rdparty/jqueryui1-11-4/jquery-ui.min.css" />
<script src="php/3rdparty/jqueryui1-11-4/jquery-ui.min.js"></script>

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

View File

@ -7,7 +7,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -15,8 +15,8 @@
<script src="php/3rdparty/jquery-2.0.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.0.min.js"></script>
<script src="utilities.js"></script>
<script src="elements/product.js?v=1.5.24"></script>
<script src="elements/extra.js?v=1.5.24"></script>
<script src="elements/product.js?v=1.5.25"></script>
<script src="elements/extra.js?v=1.5.25"></script>
<link href="php/3rdparty/hayageek_uploadfile.css" rel="stylesheet">
<script src="php/3rdparty/hayageek_jquery_uploadfile.js"></script>
</head>
@ -36,9 +36,9 @@ var PROD_DISPLAY = ["Anzeige","Display","Publicar"];
var PROD_TAX = ["Steuersatz immer","Tax always","Impuesto siempre"];
var PROD_TAXAUSTRIA = ["Steuersatz Österreich","Tax Austria","Impuesto Austria"];
var PROD_AMOUNT = ["Verfügbare Menge","Available amount","Cuanto hay"];
var PROD_SHORTNAME = ["Kurzname:","Short name:","Nombre corto"];
var PROD_SHORTNAME = ["Name in Bestellansicht","Name in order view","Nombre en vista del orden"];
var PROD_BARCODE = ["Barcode","Barcode","Código de barras"];
var PROD_LONG_NAME = ["Langname:","Long name:","Nombre largo"];
var PROD_LONG_NAME = ["Produktname","Product name:","Nombre del producto"];
var PROD_AVAILABLE = ["Verfügbar","Available","Disponible"];
var PROD_FAVORITE = ["Favorit","Favorite","Favorito"];
var PROD_APPLY = ["Anwenden","Apply","Aplicar"];

View File

@ -4,7 +4,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="css/ospage.css" />
<link rel="stylesheet" href="css/tablepanel.css" />
@ -20,8 +20,8 @@
<script>
var PRODDESK_LONG_NAME = ["Langname","Long name","Nombre largo"];
var PRODDESK_SHORTNAME = ["Kurzname","Short name","Nombre corto"];
var PRODDESK_LONG_NAME = ["Produktname","Product name:","Nombre del producto"];
var PRODDESK_SHORTNAME = ["Name in Bestellansicht","Name in order view","Nombre en vista del orden"];
var PRODDESK_PRICE = ["Preis","Price","Precio"];
var lang = 0;

View File

@ -7,7 +7,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

View File

@ -7,7 +7,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -29,10 +29,10 @@
<style>
.schbtn {
font-size: 10px;
width: 150px;
height: 45px;
.schbtn,.schtablebtn {
font-size: 9px;
width: 170px;
height: 65px;
word-wrap: break-word !important;
white-space: normal !important;
background:Red;
@ -69,7 +69,7 @@ var RES_CHANGE_TITLE = ["Reservierung ändern","Change Reservation","Modificar R
var RES_LASTCREATOR = ["Letzte Änderung von","Last change by","Ultima modificación de"];
var RES_LASTUPDATE = ["Zuletzt geändert","Last changed","Ultimo cambio"];
var RES_HOUR = ["Uhrzeit","Time","Hora"];
var RES_RES = ["Res.","Res.","Res."];
var RES_RES = ["Reservierungen","Reservations","Reservaciones"];
var RES_NORES = ["Keine Reservierungen an diesem Tag","No reservations at the selected day","No hay ningúna reserva"];
var RES_DEL = ["Löschen","Delete","Borrar"];
var RES_EMAIL_IMPOSSIBLE = ["(Eine Email-Reservierungsbestätigung ist erst nach Konfiguration des Emailsystems möglich.)",
@ -82,6 +82,11 @@ var RES_CUS_LABEL = ["Kunden aus Datenbank auswählen","Choose customer from dat
var RES_CUSTOMERS = ["Kunden","Customers","Clientes"];
var RES_NO_CUS_FOUND = ["Kein Kunde gefunden","No customer found","Ningún cliente en base de datos"];
var RES_HINT_CUS_CHOOSE = ["Oder manuell eingeben:","or type in manually:","o insertar por teclado:"];
var RES_TABLESPEC = ["Tischangabe","Table","Mesa"];
var RES_ROOM = ["Raum","Room","Habitación"];
var RES_TABLE = ["Tisch","Table","Mesa"];
var RES_BY_TIMES = ["Reservierungen nach Uhrzeit","Reservations sorted by times","Reservaciones ordenado por tiempos"];
var RES_BY_TABLES = ["Reservierungen nach Tisch","Reservations sorted by table","Reservaciones ordenado por mesa"];
var lang = (-1);
var reservationnote = "";
@ -89,6 +94,7 @@ var companyinfo = "";
var emailIsPossible = false;
var emailTemplate = "";
var filteredCustomers = [];
var tableoverview = [];
function setLanguage(language) {
lang = language;
@ -116,6 +122,8 @@ function setLanguage(language) {
$("#cemailtxt").html(RES_EMAIL[lang]);
$("#cteltxt").html(RES_TEL[lang]);
$("#cremarktxt").html(RES_REMARK[lang]);
$("#tablespecheadertxt").html(RES_TABLESPEC[lang]);
$("#ctablespecheadertxt").html(RES_TABLESPEC[lang]);
$("#canceltxt").html(RES_CANCEL[lang]);
$("#changedlgbtn").html(RES_APPLY[lang]);
$("#clastcreatortxt").html(RES_LASTCREATOR[lang]);
@ -127,6 +135,8 @@ function setLanguage(language) {
$("#sendemailtotxt").html(RES_TO[lang]);
$("#reshintchoosecustomer").html(RES_HINT_CUS_CHOOSE[lang]);
$("#resbytimesheadertxt").html(RES_BY_TIMES[lang]);
$("#resbytablesheadertxt").html(RES_BY_TABLES[lang]);
var langtxt = "de";
if (lang == 1) {
@ -182,18 +192,53 @@ function handleDateChangeEvents() {
$("#datepicker").off("change").on("change", function (e) {
var date = $("#datepicker").datepicker("getDate");
$("#res-page").data("date",date);
displayDateSchedule(date);
displayTodaySchedule(date);
});
}
function displayDateSchedule(date) {
function displayTodaySchedule(date) {
var data = {
day: date.getDate(),
month: (date.getMonth() + 1),
year: date.getFullYear()
};
doAjax("GET","php/contenthandler.php?module=reservation&command=getReservations",data,insertReservations,"Reservierungsinfos");
getReservationsOfDate(data);
}
function displaySpecificDateSchedule() {
var urlsuffix = location.search;
if (urlsuffix.indexOf('date=') >= 0) {
var datestamp = '';
var urlParts = urlsuffix.split(/&|\?/);
for (var i=0;i<urlParts.length;i++) {
var aPart = urlParts[i];
if (aPart.indexOf('date=') == 0) {
var parts = aPart.split("=");
datestamp = parts[1];
}
}
var dateParts = datestamp.split("-");
var year = dateParts[0];
var month = dateParts[1];
var day = dateParts[2];
data = {
day: day,
month: month,
year: year
};
var theSelectedDate = new Date(year,month - 1,day);
$('#datepicker').datepicker('setDate', theSelectedDate);
$('#cdatepicker').datepicker('setDate', theSelectedDate);
getReservationsOfDate(data);
} else {
displayTodaySchedule(new Date());
}
}
function getReservationsOfDate(dateObj) {
doAjax("GET","php/contenthandler.php?module=reservation&command=getReservations",dateObj,insertReservations,"Reservierungsinfos");
}
function bindNewReservationBtn() {
@ -208,6 +253,22 @@ function bindNewReservationBtn() {
var phone = $("#telno").val();
var remark = $("#remark").val();
var roomkeys = Object.keys(tableoverview);
var roomid = -1;
var tableid = -1;
if (roomkeys.length == 0) {
tableid = -1;
} else if (roomkeys.length == 1) {
roomid = roomkeys[0];
tableid = $("#tableselect").val();
} else {
roomid = $("#roomselect").val();
tableid = -1;
if (roomid >= 0) {
tableid = $("#tableselect").val();
}
}
if (name.length == 0) {
alert(RES_NO_NAME[lang]);
} else {
@ -221,7 +282,8 @@ function bindNewReservationBtn() {
duration: duration,
persons: persons,
phone: phone,
remark: remark
remark: remark,
tableid: tableid
};
var emailtext = emailTemplate;
@ -268,7 +330,7 @@ function handleCreateNewReservation(answer) {
doAjax("POST","php/contenthandler.php?module=reservation&command=emailConfirmReservation",data,handleEmailSendResult,"Emailbestätigung");
});
displayDateSchedule($("#res-page").data("date"));
displayTodaySchedule($("#res-page").data("date"));
}
}
@ -299,18 +361,30 @@ function handleChangedReservation(answer) {
alert("Fehler " + answer.code + ": " + answer.msg);
return;
} else {
setTimeout(function(){document.location.href = "reservation.html"},500);
setTimeout(function(){document.location.href = "reservation.html";},500);
}
}
function insertReservations(answer) {
if (answer.status != "OK") {
alert("Fehler " + answer.code + ": " + answer.msg);
return;
} else {
var res = answer.msg;
$("#res-page").data("res",res);
function getTableName(roomid,tableid) {
var tablename = "";
if ((tableid >= 0) && (roomid >= 0)) {
var abbr = tableoverview[roomid].roomabbreviation;
if (abbr != "") {
tablename = abbr + "-";
}
var tables = tableoverview[roomid].tables;
for (var i=0;i<tables.length;i++) {
var aTable = tables[i];
if (aTable.id == tableid) {
tablename += aTable.tablename;
break;
}
}
}
return tablename;
}
function createTableOfReservationsByTime(res) {
var number = res.length;
var times = [];
@ -351,12 +425,16 @@ function insertReservations(answer) {
for (h=0;h<=23;h++) {
var hasRes = false;
var col=0;
dayTxt = '<tr>' + aTimeField(h);
var dayTxt = '<tr>' + aTimeField(h);
var aResLine = times[h];
for (col=0;col<=maxCol;col++) {
var residx = aResLine[col];
if (residx != null) {
dayTxt += aButtonField(residx,res[residx].persons,res[residx].guest);
var roomid = res[residx].roomid;
var tableid = res[residx].tableid;
var tablename = getTableName(roomid,tableid);
dayTxt += aButtonField(residx,res[residx].persons,res[residx].guest,tablename);
hasRes = true;
} else {
dayTxt += "<td>&nbsp;";
@ -375,6 +453,59 @@ function insertReservations(answer) {
bindHourButton();
bindCustomerField();
bindChangeButton();
}
function createTableOfReservationsByTables(res) {
var number = res.length;
var html = "";
if (number == 0) {
html += "<tr><td>&nbsp;<td><b>" + RES_NORES[lang] + "</b></tr>";
} else {
html += "<tr><td>" + RES_TABLE[lang] + "<td>" + RES_RES[lang] + "</tr>";
for (var i=0;i<number;i++) {
var aRes = res[i];
var roomid = aRes.roomid;
var tableid = aRes.tableid;
var tablename = "?";
if (tableid >= 0) {
tablename = getTableName(roomid,tableid);
}
html += '<tr>' + aTableField(tablename);
var reservations = aRes.reservations;
for (var col=0;col<=reservations.length;col++) {
var aRes = reservations[col];
if (aRes != null) {
var starttime = aRes.start;
var endhour = aRes.endhour;
var period = starttime + ":00-" + endhour + ":00";
html += aResFieldForTableSort(aRes.id,aRes.persons,aRes.guest,period);
}
}
html += "</tr>";
}
}
$("#tableschedule").html(html);
$("#tableschedule").trigger("create");
bindChangeResByTableButton();
}
function insertReservations(answer) {
if (answer.status != "OK") {
alert("Fehler " + answer.code + ": " + answer.msg);
return;
} else {
tableoverview = answer.tableoverview;
fillRoomList("tablespecinforoomarea","roomselect","tablespecinfotablearea","tableselect",null,null);
var res = answer.msg.bytimes;
$("#res-page").data("res",res);
var resbytables = answer.msg.bytables;
$("#res-page").data("resbytables",resbytables);
createTableOfReservationsByTime(res);
createTableOfReservationsByTables(resbytables);
}
}
@ -396,13 +527,24 @@ function fitsInCol(times,maxCol,start,end) {
return maxCol+1;
}
function aTableField(tableid) {
return '<td><button data-theme="a" class="timeschbtn">' + tableid + '</button>';
}
function aResFieldForTableSort(resid,persons,name,timeperiod) {
var txt = timeperiod + "<br>" + toHtml(name) + " - " + toHtml(persons) + " Pers.";
return '<td style="width:110px;"><button data-theme="e" class="schtablebtn" style="width:120px;height:50px;" id="residbytable_'+ resid + '">' + txt + '</button>';
}
function aTimeField(theVal) {
var nextHour = parseInt(theVal) + 1;
return '<td><button data-theme="c" class="timeschbtn">' + theVal + ' - ' + nextHour + '</button>';
return '<td><button data-theme="a" class="timeschbtn">' + theVal + ' - ' + nextHour + '</button>';
}
function aButtonField(theVal,persons,name) {
return '<td style="width:110px;"><button data-theme="e" class="schbtn" style="width:100px;" id="resid_'+ theVal + '">' + persons + ": " + name + '</button>';
function aButtonField(theVal,persons,name,tablename) {
var txt = toHtml(name) + " - " + toHtml(persons) + " Pers.";
if (tablename != '') {
txt += "<br>Tisch: " + tablename;
}
return '<td style="width:110px;"><button data-theme="e" class="schbtn" style="width:120px;height:50px;" id="resid_'+ theVal + '">' + txt + '</button>';
}
function bindHourButton() {
@ -471,23 +613,21 @@ function bindCusElem() {
});
}
function txtToHtml(txt) {
return (txt.replace(/"/g, '&quot;').replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&#39;"));
}
function bindCancelButtn() {
$("#cancelbtn").off("click").on("click", function (e) {
e.stopImmediatePropagation();
e.preventDefault();
setTimeout(function(){document.location.href = "reservation.html?"},500);
var date = $("#datepicker").datepicker("getDate");
var day = date.getDate();
var month = date.getMonth() + 1;
var year = date.getFullYear();
var dateStr = year + "-" + month + "-" + day;
setTimeout(function(){document.location.href = "reservation.html?v=1.5.25&date=" + dateStr;},500);
});
}
function bindChangeButton() {
$(".schbtn").off("click").on("click", function (e) {
var resid = ((this.id).split("_"))[1];
var res = ($("#res-page").data("res"))[resid];
function openEditPageForRes(res) {
$("#changeres-page").data("id",res.id);
var day = res.day;
@ -500,6 +640,11 @@ function bindChangeButton() {
var noOfGuests = res.persons;
var phone = res.phone;
var remark = res.remark;
var roomid = res.roomid;
var tableid = res.tableid;
if (tableid < 0) {
roomid = -1;
}
var changeDate = new Date(year, month, day, 0,0,0,0);
@ -512,13 +657,41 @@ function bindChangeButton() {
$("#cemail").val(email);
$("#ctelno").val(phone);
$("#cremark").val(remark);
fillRoomList("ctablespecinforoomarea","croomselect","ctablespecinfotablearea","ctableselect",roomid,tableid);
$("#clastcreator").html("<i>" + txtToHtml(res.creator) + "</i>");
$("#clastchanged").html("<i>" + txtToHtml(res.creationdate) + "</i>");
$("#clastcreator").html("<i>" + toHtml(res.creator) + "</i>");
$("#clastchanged").html("<i>" + toHtml(res.creationdate) + "</i>");
bindDlgChangeBtn();
bindDlgDelBtn();
$.mobile.changePage("#changeres-page");
}
function bindChangeButton() {
$(".schbtn").off("click").on("click", function (e) {
var resid = ((this.id).split("_"))[1];
var res = ($("#res-page").data("res"))[resid];
openEditPageForRes(res);
});
}
function bindChangeResByTableButton() {
$(".schtablebtn").off("click").on("click", function (e) {
var resid = ((this.id).split("_"))[1];
var allRes = $("#res-page").data("resbytables");
var theRes = null;
for (var i=0;i<allRes.length;i++) {
var tableReservations = allRes[i].reservations;
for (var j=0;j<tableReservations.length;j++) {
var aRes = tableReservations[j];
if (aRes.id == resid) {
theRes = aRes;
break;
}
}
}
if (theRes != null) {
openEditPageForRes(theRes);
}
});
}
@ -534,6 +707,22 @@ function bindDlgChangeBtn() {
var phone = $("#ctelno").val();
var remark = $("#cremark").val();
var roomkeys = Object.keys(tableoverview);
var roomid = -1;
var tableid = -1;
if (roomkeys.length == 0) {
tableid = -1;
} else if (roomkeys.length == 1) {
roomid = roomkeys[0];
tableid = $("#ctableselect").val();
} else {
roomid = $("#croomselect").val();
tableid = -1;
if (roomid >= 0) {
tableid = $("#ctableselect").val();
}
}
var date = $("#cdatepicker").datepicker("getDate");
var id = $("#changeres-page").data("id");
@ -549,7 +738,8 @@ function bindDlgChangeBtn() {
duration: duration,
persons: persons,
phone: phone,
remark: remark
remark: remark,
tableid: tableid
};
doAjax("POST","php/contenthandler.php?module=reservation&command=changeReservation",data,handleChangedReservation,"Reservierung");
@ -576,7 +766,7 @@ $(document).on("pageinit", "#res-page", function () {
getGeneralConfigItems();
handleDateChangeEvents();
displayDateSchedule(new Date());
displaySpecificDateSchedule();
bindNewReservationBtn();
@ -601,6 +791,78 @@ $(document).on("pagebeforeshow", "#changeres-page", function () {
});
function fillRoomList(roomsectionid,roomselectid,tablesectionid,tableselectid,selectedRoomid,selectedTableid) {
var roomkeys = Object.keys(tableoverview);
if (roomkeys.length > 1) {
var txt = '<label for="' + roomselectid + '">' + RES_ROOM[lang] + ':</label>';
txt += "<SELECT id='" + roomselectid + "'>";
txt += "<option value='-1'>-</option>";
for (var i=0;i<roomkeys.length ;i++) {
var aRoomKey = roomkeys[i];
var aRoom = tableoverview[aRoomKey];
var selected = "";
if (aRoom.roomid == selectedRoomid) {
selected = " selected";
}
txt += "<option value='" + aRoom.roomid + "' " + selected + ">" + toHtml(aRoom.roomname) + "</option>";
}
txt += "</SELECT>";
$("#" + roomsectionid).html(txt);
$("#" + roomsectionid).trigger("create");
fillTableList(roomselectid,tablesectionid,tableselectid,selectedTableid);
bindRoomSelect(roomsectionid,roomselectid,tablesectionid,tableselectid,selectedTableid);
} else {
fillTableList(roomselectid,tablesectionid,tableselectid,selectedTableid);
}
}
function fillTableList(roomsectionid,tablesectionid,tableselectid,selectedTableid) {
var roomkeys = Object.keys(tableoverview);
var allowNoTableToSelect = false;
var roomid = null;
if (roomkeys.length == 0) {
return;
} else if (roomkeys.length == 1) {
allowNoTableToSelect = true;
roomid = roomkeys[0]
} else {
roomid = $("#" + roomsectionid).val();
}
var txt = "";
if (roomid >= 0) {
var tables = tableoverview[roomid]["tables"];
txt += '<label for="' + tableselectid + '">' + RES_TABLE[lang] + ':</label>';
txt += "<SELECT id='" + tableselectid + "'>";
if (allowNoTableToSelect) {
txt += "<option value='-1'>-</option>";
}
for (var i=0;i<tables.length;i++) {
var aTable = tables[i];
var selected = "";
if (aTable.id == selectedTableid) {
selected = " selected";
}
txt += "<option value='" + aTable.id + "' " + selected + ">" + toHtml(aTable.tablename) + "</option>";
}
txt += "</SELECT>";
}
$("#" + tablesectionid).html(txt);
$("#" + tablesectionid).trigger("create");
}
function bindRoomSelect(roomsectionid,roomselectid,tablesectionid,tableselectid,selectedTableid) {
$("#" + roomsectionid).off("change").on("change", function (e) {
e.stopImmediatePropagation();
e.preventDefault();
var selectedRoomid = $("#" + roomselectid).val();
selectedTableid = null;
fillRoomList(roomsectionid,roomselectid,tablesectionid,tableselectid,selectedRoomid,selectedTableid);
});
}
</script>
<div data-role="page" id="res-page" data-theme="c">
<div data-role="panel" id="modulepanel" data-position="right" data-display="overlay">
@ -721,6 +983,12 @@ $(document).on("pagebeforeshow", "#changeres-page", function () {
<input type="text" id="remark" class="reservationinputfield whiteinput" value="" data-mini="true" />
</div> <!-- fieldcontain name -->
<div id="tableinfo" data-role="collapsible" data-theme="c" data-content-theme="e" data-collapsed="true">
<h3><span id="tablespecheadertxt">Tischang.</span></h3>
<div id="tablespecinforoomarea"></div>
<div id="tablespecinfotablearea"></div>
</div>
<a href="#" data-role="button" data-theme="f" id="newbtn"><span id="newtxt">Neu</span></a>
</form>
@ -730,7 +998,15 @@ $(document).on("pagebeforeshow", "#changeres-page", function () {
<br>
<div id="resbytimes" data-role="collapsible" data-theme="c" data-content-theme="c" data-collapsed="false">
<h3><span id="resbytimesheadertxt">Reservierungen nach Z.</span></h3>
<table id="dayschedule"></table>
</div> <!-- resbytimes -->
<div id="resbytables" data-role="collapsible" data-theme="c" data-content-theme="c" data-collapsed="false">
<h3><span id="resbytablesheadertxt">Reservierungen nach T.</span></h3>
<table id="tableschedule"></table>
</div> <!-- resbytimes -->
</div>
<div data-role="footer" data-theme="b" id="thefooterr" style="background-color:black;">
@ -874,6 +1150,12 @@ $(document).on("pagebeforeshow", "#changeres-page", function () {
<input type="text" id="cremark" class="reservationinputfield whiteinput" value="" data-mini="true" />
</div> <!-- fieldcontain cremark -->
<div id="ctableinfo" data-role="collapsible" data-theme="c" data-content-theme="e" data-collapsed="true">
<h3><span id="ctablespecheadertxt">Tischang.</span></h3>
<div id="ctablespecinforoomarea"></div>
<div id="ctablespecinfotablearea"></div>
</div>
<p>
<fieldset class="ui-grid-b" id="changecancelarea">
<div class="ui-block-a"><button type="submit" data-theme="d" class="cancelButton" data-icon="back" id="cancelbtn"><span id="canceltxt">Abbruch</span></button></div>

View File

@ -30,7 +30,7 @@ var SUM_REASON = ["Grund","Reason","Razón"];
var SUM_CANCEL_ITEM = ["Stornierung","Cancellation","Revocación"];
var SUM_CANCELLATION_OK = ["Die Zahlung wurde in OrderSprinter storniert.","The payment was cancelled in OrderSprinter.","El pago se canceló en OrderSprinter."];
var nextpage = "paydesk.html?version=1.5.24";
var nextpage = "paydesk.html?version=1.5.25";
var lang;
@ -84,10 +84,10 @@ function setLanguage(language) {
if (nextPage == "p") {
$("#nextpagebtntxt").html(SUM_TO_PAYMENT[lang]);
nextpage = "paydesk.html?t=" + tableid + "&version=1.5.24";
nextpage = "paydesk.html?t=" + tableid + "&version=1.5.25";
} else {
$("#nextpagebtntxt").html(SUM_TO_ORDER[lang]);
nextpage = "waiter.html?version=1.5.24";
nextpage = "waiter.html?version=1.5.25";
}
var txt = "<table class='viewtable'>";

View File

@ -5,7 +5,7 @@
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
@ -13,7 +13,7 @@
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
<script src="php/3rdparty/jquery.mobile-1.4.5.min.js"></script>
<script src="utilities.js?v=1.5.24"></script>
<script src="utilities.js?v=1.5.25"></script>
<link rel="stylesheet" href="php/3rdparty/jqueryui1-11-4/jquery-ui.min.css" />
<script src="php/3rdparty/jqueryui1-11-4/jquery-ui.min.js"></script>

View File

@ -5,7 +5,7 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="author" content="Stefan Pichel">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.24">
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.25">
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long