From 3358ea081f8c6a8c8b3db25edc90fed71b84d86b Mon Sep 17 00:00:00 2001 From: Geno Date: Thu, 19 Nov 2020 23:03:48 +0100 Subject: [PATCH] OrderSprinter 1.3.23 --- javaprinter/javaprinter.jar | Bin 60373 -> 63164 bytes printserver/OrderSprinterPrintserver.exe | Bin 261632 -> 265728 bytes spider/install/installer.php | 2 +- webapp/OrderSprinterPrintserver.exe | Bin 261632 -> 265728 bytes webapp/bar.html | 2 +- webapp/bill.html | 2 +- webapp/feedback.html | 2 +- webapp/index.html | 8 +- webapp/install.html | 2 +- webapp/install/installer.php | 239 ++++++++++-- webapp/kitchen.html | 2 +- webapp/manager.html | 445 +++++++++++++++++------ webapp/paydesk.html | 2 +- webapp/php/admin.php | 368 +++++++++++-------- webapp/php/bill.php | 5 +- webapp/php/closing.php | 2 + webapp/php/contenthandler.php | 2 + webapp/php/dbutils.php | 1 + webapp/php/printqueue.php | 218 +++++++++-- webapp/php/queuecontent.php | 1 + webapp/php/updater.php | 3 +- webapp/php/utilities/HistFiller.php | 54 ++- webapp/php/utilities/basedb.php | 57 ++- webapp/php/utilities/roles.php | 86 +++++ webapp/php/workreceipts.php | 93 +++++ webapp/preferences.html | 2 +- webapp/products.html | 2 +- webapp/rating.html | 2 +- webapp/reports.html | 2 +- webapp/reservation.html | 2 +- webapp/supplydesk.html | 2 +- webapp/waiter.html | 6 +- 32 files changed, 1257 insertions(+), 357 deletions(-) create mode 100644 webapp/php/utilities/roles.php create mode 100644 webapp/php/workreceipts.php diff --git a/javaprinter/javaprinter.jar b/javaprinter/javaprinter.jar index acf3def2505598241905f7a05918a15ad3796316..30314750fa6265b8e8a3d0f39468992f8909046a 100644 GIT binary patch delta 20876 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 diff --git a/printserver/OrderSprinterPrintserver.exe b/printserver/OrderSprinterPrintserver.exe index 3e5fa1a77558b129835d4d0f0122966897a87050..5379dcbaf65e56ecfaa3f3b0818a138c94ee4311 100644 GIT binary patch delta 54361 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 J9i<7k{6Co7?=%1a delta 51505 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 XrX^Yqha0$r{JJiYtMgB3Zti8fEs diff --git a/spider/install/installer.php b/spider/install/installer.php index 6e33af7..a039fa5 100644 --- a/spider/install/installer.php +++ b/spider/install/installer.php @@ -85,7 +85,7 @@ class Installer { } Database::dropTables($pdo); Database::createEmptyTables($pdo, $prefix); - Database::setVersion($pdo,$prefix,"1.3.22"); + Database::setVersion($pdo,$prefix,"1.3.23"); Database::setAccessPassword($pdo,$prefix,$adminpass); Database::setRefreshRate($pdo,$prefix,"5"); // default: 5 times per hour return array("status" => "OK","msg" => "Installation successful"); diff --git a/webapp/OrderSprinterPrintserver.exe b/webapp/OrderSprinterPrintserver.exe index 3e5fa1a77558b129835d4d0f0122966897a87050..5379dcbaf65e56ecfaa3f3b0818a138c94ee4311 100644 GIT binary patch delta 54361 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 J9i<7k{6Co7?=%1a delta 51505 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 XrX^Yqha0$r{JJiYtMgB3Zti8fEs diff --git a/webapp/bar.html b/webapp/bar.html index d047211..3c8adbc 100644 --- a/webapp/bar.html +++ b/webapp/bar.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/bill.html b/webapp/bill.html index 11bb5d0..afda751 100644 --- a/webapp/bill.html +++ b/webapp/bill.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/feedback.html b/webapp/feedback.html index 4647f2d..ef4e114 100644 --- a/webapp/feedback.html +++ b/webapp/feedback.html @@ -4,7 +4,7 @@ - + diff --git a/webapp/index.html b/webapp/index.html index 9c45a33..109edb7 100644 --- a/webapp/index.html +++ b/webapp/index.html @@ -9,8 +9,8 @@ - - + + @@ -31,7 +31,7 @@ var I_TIMEDIFF_NO_ADMIN = ["Zeit am Server und am Endgerät unterscheiden sich. function fillUserList(userinfo) { var text = '
'; text += ''; + text += ''; text += '
'; return text; } -function createButtonWithTextField(aLabel,displayedName,defaultText) { - var labelid = 'userlabel_' + aLabel; +function createButtonWithTextField(id,displayedName,defaultText) { var text = '
'; - text += ''; - text += ''; + text += ''; + text += ''; text += '
'; return text; } -function createLabelWithOption(aLabel,displayedName,hasTheRight) { - var labelid = 'userlabel_' + aLabel; +function createLabelWithOption(prefix,id,aLabel,displayedName,allValues,theValue) { + var labelid = prefix + aLabel + "_" + id; var text = '
'; text += ''; - if (hasTheRight) { - text += ''; - text += ''; - text += ''; + text += '
'; - + return text; } +function createYesNoArr() { + var yesnoarr = [ + {id:1,text:MAN_YES[lang]}, + {id:0,text:MAN_NO[lang]} + ]; + return yesnoarr; +} + +function createRolesArr(roles) { + var rolesArr = []; + for (var i=0;i'; collapsiblePart += '
'; if (forNewUser) { - collapsiblePart += createLabelWithTextField("username",MAN_USER_NAME[lang],MAN_USER_NAME[lang]); - collapsiblePart += createLabelWithTextField("password",MAN_USER_PASS[lang],MAN_USER_PASS[lang]); + collapsiblePart += createLabelWithTextField("userlabel_username_new",MAN_USER_NAME[lang],MAN_USER_NAME[lang]); + collapsiblePart += createLabelWithTextField("userlabel_password_new",MAN_USER_PASS[lang],MAN_USER_PASS[lang]); } - collapsiblePart += createLabelWithOption("admin",MAN_ADMIN[lang],isAdmin); - collapsiblePart += createLabelWithOption("waiter",MAN_WAITER[lang],rWaiter); - collapsiblePart += createLabelWithOption("kitchen",MAN_KITCHEN[lang],rKitchen); - collapsiblePart += createLabelWithOption("bar",MAN_BAR[lang],rBar); - collapsiblePart += createLabelWithOption("supplydesk",MAN_SUPPLY[lang],rSupply); - collapsiblePart += createLabelWithOption("paydesk",MAN_PAYDESK[lang],rPay); - collapsiblePart += createLabelWithOption("stat",MAN_STAT[lang],rStat); - collapsiblePart += createLabelWithOption("bill",MAN_BILLS[lang],rBill); - collapsiblePart += createLabelWithOption("products",MAN_PRODUCTS[lang],rProd); - collapsiblePart += createLabelWithOption("reservation",MAN_RESERVATION[lang],rReservation); - collapsiblePart += createLabelWithOption("rating",MAN_RATING[lang],rRating); - collapsiblePart += createLabelWithOption("changeprice",MAN_CHANGEPRICE[lang],rChangeprice); - collapsiblePart += createLabelWithOption("customers",MAN_CUSTOMERS[lang],rCustomers); - collapsiblePart += createLabelWithOption("closingright",MAN_CLOSINGRIGHT[lang],rClosing); - collapsiblePart += createLabelWithOption("dash",MAN_DASHRIGHT[lang],rDash); - collapsiblePart += createLabelWithOption("manager",MAN_MANAGER[lang],rManager); + + var rolesArr = createRolesArr(roles); + + collapsiblePart += createLabelWithOption("userlabel_",id,"userrole",MAN_ROLE[lang],rolesArr,roleid); if (forNewUser) { collapsiblePart += ''; } else { - collapsiblePart += ''; - collapsiblePart += createButtonWithTextField("newpassword", "Passwort ändern", "Anderes Passwort"); - collapsiblePart += ''; + collapsiblePart += ''; + collapsiblePart += createButtonWithTextField("changepasswordbtn_"+id, "Passwort ändern", "Anderes Passwort"); + collapsiblePart += ''; + } + collapsiblePart += ''; + collapsiblePart += ''; + return collapsiblePart; +} + +function createCollapsibeOfRole(id,name,isAdmin,rWaiter,rKitchen,rBar,rSupply,rPay,rStat,rBill,rProd,rReservation,rRating,rChangeprice,rCustomers,rClosing, rDash, rManager,forNewRole) { + var collapsiblePart = '
'; + collapsiblePart += ''; + + var possibleValues = createYesNoArr(); + + collapsiblePart += createLabelWithTextField("rolelabel_name_" + id,MAN_ROLE_NAME[lang],MAN_ROLE_NAME[lang]); + collapsiblePart += createLabelWithOption("rolelabel_",id,"admin",MAN_ADMIN[lang],possibleValues,isAdmin); + collapsiblePart += createLabelWithOption("rolelabel_",id,"waiter",MAN_WAITER[lang],possibleValues,rWaiter); + collapsiblePart += createLabelWithOption("rolelabel_",id,"kitchen",MAN_KITCHEN[lang],possibleValues,rKitchen); + collapsiblePart += createLabelWithOption("rolelabel_",id,"bar",MAN_BAR[lang],possibleValues,rBar); + collapsiblePart += createLabelWithOption("rolelabel_",id,"supplydesk",MAN_SUPPLY[lang],possibleValues,rSupply); + collapsiblePart += createLabelWithOption("rolelabel_",id,"paydesk",MAN_PAYDESK[lang],possibleValues,rPay); + collapsiblePart += createLabelWithOption("rolelabel_",id,"stat",MAN_STAT[lang],possibleValues,rStat); + collapsiblePart += createLabelWithOption("rolelabel_",id,"bill",MAN_BILLS[lang],possibleValues,rBill); + collapsiblePart += createLabelWithOption("rolelabel_",id,"products",MAN_PRODUCTS[lang],possibleValues,rProd); + collapsiblePart += createLabelWithOption("rolelabel_",id,"reservation",MAN_RESERVATION[lang],possibleValues,rReservation); + collapsiblePart += createLabelWithOption("rolelabel_",id,"rating",MAN_RATING[lang],possibleValues,rRating); + collapsiblePart += createLabelWithOption("rolelabel_",id,"changeprice",MAN_CHANGEPRICE[lang],possibleValues,rChangeprice); + collapsiblePart += createLabelWithOption("rolelabel_",id,"customers",MAN_CUSTOMERS[lang],possibleValues,rCustomers); + collapsiblePart += createLabelWithOption("rolelabel_",id,"closingright",MAN_CLOSINGRIGHT[lang],possibleValues,rClosing); + collapsiblePart += createLabelWithOption("rolelabel_",id,"dash",MAN_DASHRIGHT[lang],possibleValues,rDash); + collapsiblePart += createLabelWithOption("rolelabel_",id,"manager",MAN_MANAGER[lang],possibleValues,rManager); + + if (forNewRole) { + collapsiblePart += ''; + } else { + collapsiblePart += ''; + collapsiblePart += ''; } collapsiblePart += ''; collapsiblePart += '
'; @@ -2347,8 +2438,10 @@ function createCollapsibeOfUser(id,username,isAdmin,rWaiter,rKitchen,rBar,rSuppl } -function fillUserListIntoGui(userinfo) { +function fillUserListIntoGui(answer) { var userPart = ""; + var userinfo = answer.users; + var roles = answer.roles; $.each(userinfo, function (i, aUser) { var userid = aUser.id; var username = aUser.username; @@ -2356,46 +2449,76 @@ function fillUserListIntoGui(userinfo) { userPart += createCollapsibeOfUser( "userid_" + userid, username, - aUser.is_admin == 1, - aUser.right_waiter == 1, - aUser.right_kitchen == 1, - aUser.right_bar == 1, - aUser.right_supply == 1, - aUser.right_paydesk == 1, - aUser.right_statistics == 1, - aUser.right_bill == 1, - aUser.right_products == 1, - aUser.right_reservation == 1, - aUser.right_rating == 1, - aUser.right_changeprice == 1, - aUser.right_customers == 1, - aUser.right_closing == 1, - aUser.right_dash == 1, - aUser.right_manager == 1, - false + aUser.roleid, + false, + roles ); }); - userPart += createCollapsibeOfUser( - "userid_newuser", + "userid_newuser_newuser", MAN_NEW_USER[lang], - false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true); + 0, + true,roles); + $("#userlist").html(userPart); $('#userpart').trigger('create'); - $.each(userinfo, function (i, aUser) { - var userid = aUser.id; - var deleteButtonElem = $("#userlist").find("#userid_" + userid).find(".userDeleteButton"); - deleteButtonElem.data("userid",userid); - var updateButtonElem = $("#userlist").find("#userid_" + userid).find(".userUpdateButton"); - updateButtonElem.data("userid",userid); - var passwdButtonElem = $("#userlist").find("#userid_" + userid).find(".changepassword"); - passwdButtonElem.data("userid",userid); - }); - dynamicUserBinding(); } + +function fillRoleListIntoGui(answer) { + if (answer.status != "OK") { + return; + } + + rolesOnceExtended = true; + + var roles = answer.msg; + + var rolesPart = ""; + for (var i=0;i + + diff --git a/webapp/paydesk.html b/webapp/paydesk.html index f1849ff..19e17d0 100644 --- a/webapp/paydesk.html +++ b/webapp/paydesk.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/php/admin.php b/webapp/php/admin.php index 2953de4..889945a 100644 --- a/webapp/php/admin.php +++ b/webapp/php/admin.php @@ -21,8 +21,11 @@ class Admin { private static $rights = array( "createNewUser" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), + "createNewRole" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), "updateUser" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), + "updateRole" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), "deleteUser" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), + "deleteRole" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), "changepassword" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), "changeConfig" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), "readlogo" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("manager_or_admin")), @@ -40,6 +43,7 @@ class Admin { "hasUserPaydeskRight" => array("loggedin" => 1, "isadmin" => 0, "rights" => null), "getJsonMenuItemsAndVersion" => array("loggedin" => 0, "isadmin" => 0, "rights" => null), "getUserList" => array("loggedin" => 0, "isadmin" => 0, "rights" => null), + "getRoleList" => array("loggedin" => 0, "isadmin" => 0, "rights" => null), "setTime" => array("loggedin" => 1, "isadmin" => 1, "rights" => null), "changeOwnPassword" => array("loggedin" => 1, "isadmin" => 0, "rights" => null), @@ -124,7 +128,7 @@ class Admin { echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG)); return false; } else { - if ($_SESSION['is_admin'] == 0) { + if ($_SESSION['is_admin'] == false) { echo json_encode(array("status" => "ERROR", "code" => ERROR_COMMAND_NOT_ADMIN, "msg" => ERROR_COMMAND_NOT_ADMIN_MSG)); return false; } @@ -133,11 +137,11 @@ class Admin { if (!is_null($cmdRights["rights"])) { foreach($cmdRights["rights"] as $aRight) { if ($aRight == 'manager_or_admin') { - if (($_SESSION['is_admin'] == 1) || ($_SESSION['right_manager'] == 1)) { + if (($_SESSION['is_admin']) || ($_SESSION['right_manager'])) { return true; } } else if ($aRight == 'dash') { - if ($_SESSION['right_dash'] == 1) { + if ($_SESSION['right_dash']) { return true; } } @@ -179,14 +183,22 @@ class Admin { $this->getJsonMenuItemsAndVersion(); } else if ($command == 'getUserList') { $this->getUserList(); + } else if ($command == 'getRoleList') { + $this->getRoleList(); } else if ($command == 'setTime') { $this->setTime($_POST['day'],$_POST['month'],$_POST['year'],$_POST['hour'],$_POST['minute']); } else if ($command == 'createNewUser') { $this->createNewUser(); + } else if ($command == 'createNewRole') { + $this->createNewRole(); } else if ($command == 'updateUser') { $this->updateUser(); + } else if ($command == 'updateRole') { + $this->updateRole(); } else if ($command == 'deleteUser') { $this->deleteUser($_POST['userid']); + } else if ($command == 'deleteRole') { + $this->deleteRole($_POST['roleid']); } else if ($command == 'changepassword') { $this->changepassword($_POST['userid'],$_POST['password']); } else if ($command == 'changeOwnPassword') { @@ -458,7 +470,7 @@ class Admin { } - $sql = "SELECT * FROM %user% WHERE id=? AND active='1'"; + $sql = "SELECT *,%user%.id as id FROM %user%,%roles% WHERE %user%.id=? AND active='1' AND %user%.roleid=%roles%.id"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(array($userid)); $result = $stmt->fetchAll(); @@ -923,7 +935,7 @@ class Admin { $right_changeprice = 0; $supplyRight = 0; if ($userLoggedIn) { - $sql = "SELECT language,right_supply,right_changeprice,keeptypelevel,extrasapplybtnpos,right_paydesk,IFNULL(preferimgdesk,0) as preferimgdesk,IFNULL(preferimgmobile,0) as preferimgmobile,IFNULL(showplusminus,0) as showplusminus FROM %user% WHERE id=?"; + $sql = "SELECT language,right_supply,right_changeprice,keeptypelevel,extrasapplybtnpos,right_paydesk,IFNULL(preferimgdesk,0) as preferimgdesk,IFNULL(preferimgmobile,0) as preferimgmobile,IFNULL(showplusminus,0) as showplusminus FROM %user%,%roles% WHERE %user%.id=? AND %user%.roleid=%roles%.id"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(array($_SESSION['userid'])); $row = $stmt->fetchObject(); @@ -967,6 +979,7 @@ class Admin { $rectemplate = CommonUtils::getConfigValueStmt($pdo,$stmt,"rectemplate",null); $foodtemplate = CommonUtils::getConfigValueStmt($pdo,$stmt,"foodtemplate",null); $drinktemplate = CommonUtils::getConfigValueStmt($pdo,$stmt,"drinktemplate",null); + $canceltemplate = CommonUtils::getConfigValueStmt($pdo,$stmt,"canceltemplate",null); $decpoint = CommonUtils::getConfigValueStmt($pdo,$stmt,"decpoint",null); $version = CommonUtils::getConfigValueStmt($pdo,$stmt,"version",null); $payprinttype = CommonUtils::getConfigValueStmt($pdo,$stmt,"payprinttype",null); @@ -1038,7 +1051,7 @@ class Admin { $smtpsecure = 1; $smtpport = ""; - if ( (isset($_SESSION['is_admin']) && ($_SESSION['is_admin'] == 1)) || (isset($_SESSION['right_manager']) && ($_SESSION['right_manager'] == 1))) { + if ( (isset($_SESSION['is_admin']) && ($_SESSION['is_admin'] == 1)) || (isset($_SESSION['right_manager']) && ($_SESSION['right_manager']))) { $smtphost = CommonUtils::getConfigValueStmt($pdo,$stmt,"smtphost",""); $smtpauth = CommonUtils::getConfigValueStmt($pdo,$stmt,"smtpauth",1); $smtpuser = CommonUtils::getConfigValueStmt($pdo,$stmt,"smtpuser",""); @@ -1080,7 +1093,7 @@ class Admin { date_default_timezone_set(DbUtils::getTimeZone()); $now = getdate(); - $retVal = array("companyinfo" => $companyInfo, "rectemplate" => $rectemplate, "foodtemplate" => $foodtemplate, "drinktemplate" => $drinktemplate, + $retVal = array("companyinfo" => $companyInfo, "rectemplate" => $rectemplate, "foodtemplate" => $foodtemplate, "drinktemplate" => $drinktemplate, "canceltemplate" => $canceltemplate, "version" => $version, "decpoint" => $decpoint, "serverurl" => $serverurl, "email" => $email, "receiveremail" => $receiveremail, "billlanguage" => $billlanguage, "hotelinterface" => $hotelinterface, "hsinfile" => $hsinfile, "hsoutfile" => $hsoutfile, "hscurrency" => $hscurrency, @@ -1190,11 +1203,11 @@ class Admin { if (($view == 'preferences.html') || ($view == 'feedback.html') || ($view == 'help.php')) { $valid = true; } else if ($view == 'manager.html') { - if (($_SESSION['is_admin'] == 1) || ($_SESSION['right_manager'] == 1) || ($_SESSION['right_closing'] == 1)) { + if (($_SESSION['is_admin']) || ($_SESSION['right_manager']) || ($_SESSION['right_closing'])) { $valid = true; } } else { - if (($view == "index.html") || ($_SESSION[$mapping[$view]] == 1)) { + if (($view == "index.html") || ($_SESSION[$mapping[$view]])) { $valid = true; } } @@ -1202,7 +1215,7 @@ class Admin { $view = "preferences.html"; } - echo json_encode($view . "?v=1.3.22"); + echo json_encode($view . "?v=1.3.23"); } } @@ -1409,27 +1422,27 @@ 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.3.22"); }; + if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waitertxt[$lang], "link" => "waiter.html?v=1.3.23"); }; } else { - if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.3.22"); }; + if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.3.23"); }; } - if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.3.22"); }; - if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.3.22"); }; - if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.3.22"); }; + if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.3.23"); }; + if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.3.23"); }; + if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.3.23"); }; if ($_SESSION['modus'] == 0) { - if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.3.22"); }; + if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.3.23"); }; } - if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.3.22"); }; - if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.3.22"); }; - if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.3.22"); }; - if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.3.22"); }; - if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.3.22"); }; - if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.3.22"); }; - if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.3.22"); }; - if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.3.22"); }; - $mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.3.22"); - $mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.3.22"); - $mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.3.22"); + if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.3.23"); }; + if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.3.23"); }; + if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.3.23"); }; + if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.3.23"); }; + if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.3.23"); }; + if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.3.23"); }; + if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.3.23"); }; + if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.3.23"); }; + $mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.3.23"); + $mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.3.23"); + $mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.3.23"); } $mainMenu[] = array("name" => $logout[$lang], "link" => "logout.php"); @@ -1437,7 +1450,7 @@ class Admin { $waiterMessage = $this->getMessage(null, "waitermessage"); } - $mainMenuAndVersion = array ("version" => "OrderSprinter 1.3.22", + $mainMenuAndVersion = array ("version" => "OrderSprinter 1.3.23", "user" => $currentUser, "menu" => $mainMenu, "waitermessage" => $waiterMessage, @@ -1573,13 +1586,30 @@ class Admin { } } - function getUserList() { + function getRoleList() { $pdo = DbUtils::openDbAndReturnPdoStatic(); - $sql = "SELECT * FROM %user% WHERE active='1' ORDER BY is_admin"; + $roles = $this->getRoleListCore($pdo); + echo json_encode(array("status" => "OK","msg" => $roles)); + } + + function getRoleListCore($pdo) { + $sql = "SELECT * from %roles% ORDER BY is_admin,right_manager"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(); - $result = $stmt->fetchAll(); - echo json_encode($result); + $roles = $stmt->fetchAll(PDO::FETCH_ASSOC); + return $roles; + } + + function getUserList() { + $pdo = DbUtils::openDbAndReturnPdoStatic(); + $sql = "SELECT *,%user%.id as id,is_admin,right_manager FROM %user%,%roles% WHERE active='1' AND %user%.roleid=%roles%.id ORDER BY is_admin,right_manager"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(); + $users = $stmt->fetchAll(PDO::FETCH_ASSOC); + + $roles = $this->getRoleListCore($pdo); + + echo json_encode(array("users" => $users,"roles" => $roles)); } function setTime($day,$month,$year,$hour,$min) { @@ -1607,13 +1637,93 @@ class Admin { } } + function updateRole() { + + if(session_id() == '') { + session_start(); + } + + $pdo = DbUtils::openDbAndReturnPdoStatic(); + + if ($_POST["isAdmin"] == 1) { + echo json_encode(array("status" => "ERROR","msg" => "Nicht-Admins dürfen keine Rollen mit Admin-Rechten setzen!")); + return; + } + + $roleid = $_POST["roleid"]; + $roleIsAdmin = self::isRoleAdmin($pdo, $roleid); + + if ($roleIsAdmin && !($this->isCurrentUserAdmin())) { + echo json_encode(array("status" => "ERROR","msg" => "Benutzer ist kein Admin und darf keine Admin-Rollen bearbeiten!")); + return; + } + + $sql = "SELECT id FROM %user% WHERE roleid=? AND active='1'"; + $effectedUsers = CommonUtils::fetchSqlAll($pdo, $sql, array($roleid)); + + $keys = array(); + $vals = array(); + + foreach(DbUtils::$userCols as $userCol) { + if (!is_null($userCol["update"])) { + $key = $userCol["col"]; + $keys[] = $key . "=?"; + $vals[] = $_POST[$userCol["update"]]; + } + } + $keys[] = "name=?"; + $vals[] = $_POST["username"]; + $vals[] = $roleid; + + $keysStr = join(",",$keys); + $sql = "UPDATE %roles% SET " . $keysStr . " WHERE id=?"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute($vals); + + foreach( $effectedUsers as $aUser) { + $userid = $aUser["id"]; + HistFiller::updateUserInHist($pdo, $userid); + } + + echo json_encode(array("status" => "OK")); + } + + function createNewRole() { + $pdo = DbUtils::openDbAndReturnPdoStatic(); + + $keys = array(); + $vals = array(); + $quests = array(); + + foreach(DbUtils::$userCols as $userCol) { + if (!is_null($userCol["new"])) { + $quests[] = '?'; + $key = $userCol["col"]; + if ($key == "username") { + $key = "name"; + } + $keys[] = $key; + $vals[] = $_POST[$userCol['new']]; + } + } + + $keysStr = join(",",$keys); + $questsStr = join(",",$quests); + $sql = "INSERT INTO %roles% (" . $keysStr . ") VALUES(" . $questsStr . ")"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute($vals); + + echo json_encode(array("status" => "OK")); + + } function createNewUser() { $pdo = DbUtils::openDbAndReturnPdoStatic(); - $username = $_POST['username']; - $isAdmin = $_POST['isAdmin']; + $username = $_POST['name']; $password = $_POST['password']; + $roleid = $_POST['roleid']; + $sql = "SELECT count(id) as countid FROM %user% WHERE active='1' AND username=?"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(array($username)); @@ -1629,44 +1739,24 @@ class Admin { } $lang = $_SESSION['language']; - if ($isAdmin && !($this->isCurrentUserAdmin())) { + $roleIsAdmin = self::isRoleAdmin($pdo, $roleid); + if ($roleIsAdmin && !($this->isCurrentUserAdmin())) { echo json_encode(array("status" => "ERROR", "code" => ERROR_COMMAND_NOT_ADMIN, "msg" => ERROR_COMMAND_NOT_ADMIN_MSG)); return; } else { $password_hash = md5($password); - $keys = array('id','userpassword','language'); - $vals = array(null,$password_hash,$lang); - $quests = array('?','?','?'); - - foreach(DbUtils::$userCols as $userCol) { - if (!is_null($userCol["new"])) { - $quests[] = '?'; - $keys[] = $userCol["col"]; - $vals[] = $_POST[$userCol['new']]; - } else if (isset($userCol["default"])) { - $quests[] = '?'; - $keys[] = $userCol["col"]; - $vals[] = $userCol["default"]; - } - } - - $keysStr = join(",",$keys); - $questsStr = join(",",$quests); - $userInsertSql = "INSERT INTO %user% (" . $keysStr . ") VALUES(" . $questsStr . ")"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($userInsertSql)); - $stmt->execute($vals); - + $sql = "INSERT INTO %user% (username,userpassword,roleid,language,showplusminus,keeptypelevel,extrasapplybtnpos,prefertablemap,preferimgdesk,preferimgmobile,active) VALUES(?,?,?,?,?,?,?,?,?,?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array($username,$password_hash,$roleid,$lang,1,1,1,1,1,1,1)); + $lastId = $pdo->lastInsertId(); - $sql = "UPDATE %user% SET showplusminus=? WHERE id=?"; - CommonUtils::execSql($pdo, $sql, array(1,$lastId)); + HistFiller::createUserInHist($pdo, $lastId); echo json_encode(array("status" => "OK")); } } - - HistFiller::createUserInHist($pdo,$lastId); } function getPayPrintType() { @@ -1775,6 +1865,7 @@ class Admin { "rectemplate" => array("dbcol" => "rectemplate","checknum" => 0), "foodtemplate" => array("dbcol" => "foodtemplate","checknum" => 0), "drinktemplate" => array("dbcol" => "drinktemplate","checknum" => 0), + "canceltemplate" => array("dbcol" => "canceltemplate","checknum" => 0), "serverUrl" => array("dbcol" => "serverurl","checknum" => 0), "email" => array("dbcol" => "email","checknum" => 0), "emailbadrating" => array("dbcol" => "emailbadrating","checknum" => 0), @@ -1973,77 +2064,70 @@ class Admin { return $theUserId; } + public static function isRoleAdmin($pdo,$roleid) { + $sql = "SELECT is_admin FROM %roles% WHERE id=?"; + $is_admin_role = CommonUtils::getRowSqlObject($pdo, $sql, array($roleid)); + return ($is_admin_role->is_admin == 1 ? true : false); + } + + public static function isRoleOfUserAdmin($pdo,$userid) { + $sql = "SELECT roleid FROM %user% WHERE id=?"; + $role = CommonUtils::getRowSqlObject($pdo, $sql, array($userid)); + $roleid = $role->roleid; + + return self::isRoleAdmin($pdo, $roleid); + } + function updateUser() { $pdo = DbUtils::openDbAndReturnPdoStatic(); $theUserId = $_POST['userid']; - $isAdmin = $_POST['isAdmin']; - $sql = "SELECT username,is_admin FROM %user% WHERE id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(array($theUserId)); - $row = $stmt->fetchObject(); - $userToModIsAdmin = $row->is_admin; + $roleid = $_POST['roleid']; - $doChangeAdminRights = false; - if ($isAdmin != $userToModIsAdmin) { - $doChangeAdminRights = true; - } - - if ($doChangeAdminRights && !($this->isCurrentUserAdmin())) { + $is_admin_role = self::isRoleAdmin($pdo, $roleid); + + if (!$this->isCurrentUserAdmin() && $is_admin_role) { echo json_encode("noadmin"); } else { - $keys = array(); - $vals = array(); - - foreach(DbUtils::$userCols as $userCol) { - if (!is_null($userCol["update"])) { - $keys[] = $userCol["col"] . "=?"; - $vals[] = $_POST[$userCol["update"]]; - } - } - $vals[] = $theUserId; - - $keysStr = join(",",$keys); - $sql = "UPDATE %user% SET " . $keysStr . " WHERE active='1' AND id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute($vals); - - HistFiller::updateUserInHist($pdo,$theUserId); - - echo json_encode("OK"); + $sql = "UPDATE %user% SET roleid=? WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array($roleid,$theUserId)); + HistFiller::updateUserInHist($pdo,$theUserId); + echo json_encode("OK"); + } + } + + function deleteRole($roleid) { + $pdo = DbUtils::openDbAndReturnPdoStatic(); + $sql = "SELECT id FROM %user% WHERE roleid=? AND active='1'"; + $result = CommonUtils::fetchSqlAll($pdo, $sql, array($roleid)); + if (count($result) > 0) { + echo json_encode(array("status" => "ERROR","msg" => "Rolle ist noch Benutzern zugewiesen!")); + } else { + $sql = "DELETE FROM %roles% WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array($roleid)); + echo json_encode(array("status" => "OK")); } } function deleteUser($theUserId) { $pdo = DbUtils::openDbAndReturnPdoStatic(); - $sql = "SELECT is_admin FROM %user% WHERE active='1' AND id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(array($theUserId)); - $row =$stmt->fetchObject(); - $userToDelIsAdmin = ($row->is_admin == 1 ? true : false); - - if ($userToDelIsAdmin && !($this->isCurrentUserAdmin())) { + $is_admin_role = self::isRoleOfUserAdmin($pdo, $theUserId); + if (!$this->isCurrentUserAdmin() && $is_admin_role) { echo json_encode("noadmin"); } else { - $sql = "SELECT count(id) as countid FROM %user% WHERE active='1' AND is_admin='1' AND id <> ?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(array($theUserId)); - $row = $stmt->fetchObject(); - $numberOfOtherAdmins = $row->countid; + + $sql = "UPDATE %user% set active='0' WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array($theUserId)); - if (($numberOfOtherAdmins == 0) && $userToDelIsAdmin) { - echo json_encode("lastadmin"); - } else { - $userSql = "UPDATE %user% set active='0' WHERE id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($userSql)); - $stmt->execute(array($theUserId)); - - HistFiller::updateUserInHist($pdo,$theUserId); - - echo json_encode("OK"); - } - } + HistFiller::updateUserInHist($pdo,$theUserId); + + $sql = "UPDATE %user% set roleid=? WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array(null,$theUserId)); + + echo json_encode("OK"); + + } } function getCurrentUser() { @@ -2065,33 +2149,29 @@ class Admin { echo json_encode("ERROR"); return; } - $sql = "SELECT is_admin FROM %user% WHERE active='1' AND id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(array($userid)); - $row = $stmt->fetchObject(); - $userToChgPassIsAdm = false; - if ($row->is_admin == 1) { - $userToChgPassIsAdm = true; - } + $userToChgPassIsAdm = self::isRoleOfUserAdmin($pdo, $userid); - - if(session_id() == '') { - session_start(); - } - $otherUser = false; - if ($_SESSION['userid'] != $userid) { - $otherUser = true; - } - - if ($otherUser && $userToChgPassIsAdm && !($this->isCurrentUserAdmin())) { + $currentUserAdmin = $this->isCurrentUserAdmin(); + if (!$currentUserAdmin && $userToChgPassIsAdm) { echo json_encode("noadmin"); } else { - $password_hash = md5($password); - $userSql = "UPDATE %user% set userpassword=? WHERE active='1' AND id=?"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($userSql)); - $stmt->execute(array($password_hash,$userid)); - echo json_encode("OK"); + if(session_id() == '') { + session_start(); + } + $otherUser = false; + if ($_SESSION['userid'] != $userid) { + $otherUser = true; + } + + if ($otherUser && $userToChgPassIsAdm && !($this->isCurrentUserAdmin())) { + echo json_encode("noadmin"); + } else { + $password_hash = md5($password); + $sql = "UPDATE %user% set userpassword=? WHERE active='1' AND id=?"; + CommonUtils::execSql($pdo, $sql, array($password_hash,$userid)); + echo json_encode("OK"); + } } } @@ -2301,22 +2381,22 @@ class Admin { } private function getConfigTablesToBackupRestore() { - return array("logo","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config","user","comments","histprod","histconfig","histuser","histactions","hist","extras","extrasprods"); + return array("logo","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config","roles","user","comments","histprod","histconfig","histuser","histactions","hist","extras","extrasprods"); } private function getConfigGuestsTablesToBackupRestore() { - return array("logo","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config","user","comments","histprod","histconfig","histuser","histactions","hist","extras","extrasprods","customers","groups","groupcustomer","vacations"); + return array("logo","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config","roles","user","comments","histprod","histconfig","histuser","histactions","hist","extras","extrasprods","customers","groups","groupcustomer","vacations"); } private function getAllTablesToBackupRestore() { return array("closing","logo","printjobs","ratings","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config", - "user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist", + "roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist", "extras","extrasprods","queueextras"); } private function getAllWithLogsTablesToBackupRestore() { return array("log","closing","logo","printjobs","ratings","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config", - "user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist", + "roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist", "extras","extrasprods","queueextras"); } @@ -2922,6 +3002,7 @@ class Admin { self::doSql($pdo, "OPTIMIZE TABLE %extrasprods%", null); self::doSql($pdo, "OPTIMIZE TABLE %queueextras%", null); self::doSql($pdo, "OPTIMIZE TABLE %log%", null); + self::doSql($pdo, "OPTIMIZE TABLE %roles%", null); echo json_encode(array("status" => "OK")); } catch (Exception $ex) { echo json_encode(array("status" => "ERROR", "code" => ERROR_COMMAND_ERROR, "msg" => ERROR_COMMAND_ERROR_MSG)); @@ -3037,6 +3118,7 @@ class Admin { self::doSql($pdo, "DELETE FROM %vacations%", null); self::doSql($pdo, "DELETE FROM %groups%", null); self::doSql($pdo, "DELETE FROM %customers%", null); + Workreceipts::resetWorkReceiptId($pdo); echo json_encode(array("status" => "OK")); } catch(Exception $e) { diff --git a/webapp/php/bill.php b/webapp/php/bill.php index b9b3fd3..7efd3f4 100644 --- a/webapp/php/bill.php +++ b/webapp/php/bill.php @@ -795,13 +795,16 @@ class Bill { $queueIdArray = array(); foreach($result as $row) { + if ($removeproducts == 1) { + Workreceipts::createCancelWorkReceipt($pdo, $row['id']); + } $queueIdArray[] = $row['id']; } if ($removeproducts == 0) { $sql = "UPDATE %queue% SET paidtime=null,billid=null WHERE billid=?"; } else { - $sql = "UPDATE %queue% SET ordertime=null,paidtime=null,billid=null WHERE billid=?"; + $sql = "UPDATE %queue% SET ordertime=null,paidtime=null,billid=null WHERE billid=?"; } $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); $stmt->execute(array($billid)); diff --git a/webapp/php/closing.php b/webapp/php/closing.php index 9039105..7cf04a4 100644 --- a/webapp/php/closing.php +++ b/webapp/php/closing.php @@ -257,6 +257,8 @@ $sql = "DELETE FROM %log%"; CommonUtils::execSql($pdo, $sql, null); } +workreceipts::resetWorkReceiptId($pdo); + // commit must before email, because there direct access to db happens $pdo->commit(); diff --git a/webapp/php/contenthandler.php b/webapp/php/contenthandler.php index 66a7795..556b457 100644 --- a/webapp/php/contenthandler.php +++ b/webapp/php/contenthandler.php @@ -16,7 +16,9 @@ require_once ('rating.php'); require_once ('customers.php'); require_once ('commonutils.php'); require_once ('updater.php'); +require_once ('workreceipts.php'); require_once ('utilities/Logger.php'); +require_once ('utilities/roles.php'); $module = $_GET["module"]; $command = $_GET["command"]; diff --git a/webapp/php/dbutils.php b/webapp/php/dbutils.php index bb0c62d..9749714 100644 --- a/webapp/php/dbutils.php +++ b/webapp/php/dbutils.php @@ -114,6 +114,7 @@ class DbUtils { $out = str_replace("%queueextras%",$prefix . 'queueextras', $out); $out = str_replace("%ratings%",$prefix . 'ratings', $out); $out = str_replace("%prodimages%",$prefix . 'prodimages', $out); + $out = str_replace("%roles%",$prefix . 'roles', $out); return (str_replace("%prodtype%",$prefix . 'prodtype',$out)); } diff --git a/webapp/php/printqueue.php b/webapp/php/printqueue.php index 6a48b43..3de3d56 100644 --- a/webapp/php/printqueue.php +++ b/webapp/php/printqueue.php @@ -5,6 +5,7 @@ require_once ('globals.php'); require_once ('dbutils.php'); require_once ('bill.php'); require_once ('closing.php'); +require_once ('admin.php'); class PrintQueue { var $dbutils; @@ -12,6 +13,13 @@ class PrintQueue { var $admin; var $instance = null; + private static $FOOD = 1; + private static $DRINK = 2; + private static $RECEIPT = 3; + private static $CLOSING = 4; + public static $CANCELFOOD = 5; + public static $CANCELDRINK = 6; + function __construct() { $this->dbutils = new DbUtils(); $this->userrights = new Userrights(); @@ -48,6 +56,21 @@ class PrintQueue { } else { $this->getNextDrinkWorkPrintJobs(null,$_POST['pass'],$fl); } + + } else if ($command == 'getNextCancelFoodWorkPrintJobs') { + if (isset($_GET['printer'])) { + $this->getNextCancelFoodWorkPrintJobs($_GET['printer'],$_POST['pass'],$fl); + } else { + $this->getNextCancelFoodWorkPrintJobs(null,$_POST['pass'],$fl); + } + } else if ($command == 'getNextCancelDrinkWorkPrintJobs') { + if (isset($_GET['printer'])) { + $this->getNextCancelDrinkWorkPrintJobs($_GET['printer'],$_POST['pass'],$fl); + } else { + $this->getNextCancelDrinkWorkPrintJobs(null,$_POST['pass'],$fl); + } + + } else if ($command == 'deletePrintJob') { $this->deletePrintJob($_POST['pass'],$_POST['id']); } else if ($command == 'queueReceiptPrintJob') { @@ -78,6 +101,8 @@ class PrintQueue { $this->getLastLog($_POST['pass']); } else if ($command == 'deleteSpooledPrintJob') { $this->deleteSpooledPrintJob($_POST['id']); + } else if ($command == 'reprintworkreceipt') { + $this->reprintworkreceipt($_GET["workid"]); } else { echo "Kommando nicht erkannt!"; } @@ -135,10 +160,12 @@ class PrintQueue { * Insert a "work" (food or drink) job into the printjob queue. The POS Print Server will * pick these jobs and delete them after successful printing */ - public static function queueWorkPrintJob($pdo,$table,$timestamp,$prods,$kind,$printer,$username) { + public static function queueWorkPrintJob($pdo,$table,$timestamp,$prods,$kind,$printer,$username) { + $workId = Workreceipts::getNextWorkReceiptId($pdo); + $table .= " ($username)"; - $content = json_encode(array("table" => $table, "time" => $timestamp, "products" => $prods)); + $content = json_encode(array("workid" => $workId,"table" => $table, "time" => $timestamp, "products" => $prods)); $printInsertSql = "INSERT INTO `%printjobs%` (`id` , `content`,`type`,`printer`) VALUES ( NULL,?,?,?)"; $stmt = $pdo->prepare(DbUtils::substTableAlias($printInsertSql)); @@ -146,6 +173,13 @@ class PrintQueue { $idOfWorkJob = $pdo->lastInsertId(); + $sql = "UPDATE %queue% SET printjobid=? WHERE id=?"; + foreach($prods as $aProd) { + $queueid = $aProd["id"]; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array($idOfWorkJob,$queueid)); + } + CommonUtils::log($pdo,"QUEUE","Create work job with id=$idOfWorkJob for tableid $table from user $username of kind $kind for printer=$printer"); } @@ -168,16 +202,16 @@ class PrintQueue { $jobs[] = array("printer" => $printer, "count" => count($result),"jobs" => $result); } - $sql = "SELECT %printjobs%.id as id,content FROM %printjobs% WHERE type=?"; + $sql = "SELECT %printjobs%.id as id,content FROM %printjobs% WHERE type=? AND removed is null"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(array(1)); + $stmt->execute(array(self::$FOOD)); $result = $stmt->fetchAll(); $works = array(); foreach($result as $r) { $works[] = array("id" => $r['id'],"content" => json_decode($r['content'])); } $jobs[] = array("printer" => 7, "count" => count($result),"jobs" => $works); - $stmt->execute(array(2)); + $stmt->execute(array(self::$DRINK)); $result = $stmt->fetchAll(); $works = array(); foreach($result as $r) { @@ -185,6 +219,7 @@ class PrintQueue { } $jobs[] = array("printer" => 8, "count" => count($result),"jobs" => $works); + echo json_encode(array("status" => "OK", "msg" => $jobs)); } @@ -195,9 +230,12 @@ class PrintQueue { echo json_encode(array("status" => "ERROR", "code" => ERROR_DB_PRIVS_MISSING, "msg" => ERROR_DB_PRIVS_MISSING_MSG)); return; } - $sql = "DELETE FROM %printjobs%"; - $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); - $stmt->execute(); + $sql = "DELETE FROM %printjobs% WHERE (type <> ?) AND (type <> ?)"; + CommonUtils::execSql($pdo, $sql, array(self::$FOOD,self::$DRINK)); + + $sql = "UPDATE %printjobs% SET removed=? WHERE (type = ?) OR (type = ?)"; + CommonUtils::execSql($pdo, $sql, array(1,self::$FOOD,self::$DRINK)); + $this->getPrintJobOverview($pdo); } @@ -238,18 +276,52 @@ class PrintQueue { } } - function deleteSpooledPrintJob($printjobid) { + function checkForUserRightManagerAdmin() { if (!($this->userrights->hasCurrentUserRight('right_manager')) && !($this->userrights->hasCurrentUserRight('is_admin')) ) { echo "Benutzerrechte nicht ausreichend!"; return false; + } else { + return true; + } + } + + function reprintworkreceipt($workid) { + if ($this->checkForUserRightManagerAdmin()) { + $pdo = DbUtils::openDbAndReturnPdoStatic(); + + if (is_null($workid)) { + echo json_encode(array("status" => "ERROR","msg" => "Keine gültige ID angegeben!")); + return; + } + + $workid = trim($workid); + + $sql = "SELECT id,content FROM %printjobs% WHERE type IN (?,?,?,?)"; + $result = CommonUtils::fetchSqlAll($pdo, $sql, array(self::$FOOD,self::$DRINK,self::$CANCELFOOD,self::$CANCELDRINK)); + + foreach ($result as $w) { + $content = json_decode($w["content"],true); + if ($content["workid"] == $workid) { + $sql = "UPDATE %printjobs% SET removed=? WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array(null,$w["id"])); + echo json_encode(array("status" => "OK")); + return; + } + } + + echo json_encode(array("status" => "ERROR","msg" => "Kein Arbeitsbon-Druckjob mit der ID gefunden!")); + } + } + + function deleteSpooledPrintJob($printjobid) { + if ($this->checkForUserRightManagerAdmin()) { + $pdo = DbUtils::openDbAndReturnPdoStatic(); + $sql = "DELETE FROM %printjobs% WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array($printjobid)); + echo json_encode(array("status" => "OK")); } - - $pdo = DbUtils::openDbAndReturnPdoStatic(); - $sql = "DELETE FROM %printjobs% WHERE id=?"; - CommonUtils::execSql($pdo, $sql, array($printjobid)); - echo json_encode(array("status" => "OK")); } function queueReceiptPrintJob($billid,$useaddrecprinter) { @@ -283,10 +355,10 @@ class PrintQueue { $printInsertSql = "INSERT INTO `%printjobs%` (`id` , `content`,`type`,`printer`) VALUES ( NULL,?,?,?)"; $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($printInsertSql)); - $stmt->execute(array((string)($billid),'3',$printer)); + $stmt->execute(array((string)($billid),self::$RECEIPT,$printer)); if (!is_null($addprinter) && ($addprinter != "") && ($useaddrecprinter == 1)) { - $stmt->execute(array((string)($billid),'3',$addprinter)); + $stmt->execute(array((string)($billid),self::$RECEIPT,$addprinter)); } echo json_encode("OK"); @@ -315,7 +387,7 @@ class PrintQueue { $printInsertSql = "INSERT INTO `%printjobs%` (`id` , `content`,`type`,`printer`) VALUES ( NULL,?,?,?)"; $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($printInsertSql)); - $stmt->execute(array((string)($closingid),'4',$printer)); + $stmt->execute(array((string)($closingid),self::$CLOSING,$printer)); echo json_encode("OK"); } } @@ -541,11 +613,11 @@ class PrintQueue { } function getNextFoodWorkPrintJobs($printer,$md5pass,$fl) { - $this->getNextWorkPrintJobs($md5pass,1,$printer,$fl); + $this->getNextWorkPrintJobs($md5pass,self::$FOOD,$printer,$fl); } function getNextDrinkWorkPrintJobs($printer,$md5pass,$fl) { - $this->getNextWorkPrintJobs($md5pass,2,$printer,$fl); + $this->getNextWorkPrintJobs($md5pass,self::$DRINK,$printer,$fl); } function getNextWorkPrintJobs($md5pass,$theType,$printer,$fl) { @@ -574,11 +646,11 @@ class PrintQueue { $template = $this->getTemplate($pdo, $templatekey); if (is_null($printer)) { - $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? ORDER BY id"; + $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? AND removed is null ORDER BY id"; $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); $stmt->execute(array($theType)); } else { - $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? AND printer=? ORDER BY id"; + $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? AND printer=? AND removed is null ORDER BY id"; $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); $stmt->execute(array($theType,$printer)); } @@ -591,6 +663,9 @@ class PrintQueue { $aWork = (array) json_decode($aWorkJob["content"]); // is in json format CommonUtils::log($pdo,"PRINTQUEUE", "getNextWorkPrintJobs: collect work receipt with id=" . $aWorkJob["id"] . " for printer=$printer"); + $workid = $aWork["workid"]; + unset($aWork["workid"]); + if (($fl >= 5) && ($fl <= 6)) { $prods = (array) ($aWork["products"]); $targetProds = array(); @@ -609,13 +684,12 @@ class PrintQueue { $targetProds[] = $newTargetProd; } $aWork["products"] = $targetProds; - } else - if ($fl < 5) { + } else if ($fl < 5) { $prods = (array) ($aWork["products"]); $targetProds = array(); foreach ($prods as $aProd) { $theArrProd = (array) $aProd; - + $newTargetProd = array("id" => $theArrProd["id"], "longname" => $theArrProd["longname"], "option" => $theArrProd["option"], @@ -629,10 +703,14 @@ class PrintQueue { $aWork["products"] = $targetProds; } if ($fl >= 2) { - $workarray[] = array("id" => $aWorkJob["id"],"content" => $aWork, "bigfontworkreceipt" => intval($bigFontWorkReceipt), "template" => $template); + if ($fl >= 10) { + $workarray[] = array("workid" => $workid,"id" => $aWorkJob["id"],"content" => $aWork, "bigfontworkreceipt" => intval($bigFontWorkReceipt), "template" => $template); + } else { + $workarray[] = array("id" => $aWorkJob["id"],"content" => $aWork, "bigfontworkreceipt" => intval($bigFontWorkReceipt), "template" => $template); + } } else { - // default without template - $workarray[] = array("id" => $aWorkJob["id"],"content" => $aWork, "bigfontworkreceipt" => intval($bigFontWorkReceipt)); + // default without template + $workarray[] = array("id" => $aWorkJob["id"],"content" => $aWork, "bigfontworkreceipt" => intval($bigFontWorkReceipt)); } } CommonUtils::log($pdo,"PRINTQUEUE", "getNextWorkPrintJobs: sent data to caller"); @@ -643,6 +721,75 @@ class PrintQueue { } } + function getNextCancelFoodWorkPrintJobs($printer,$md5pass,$fl) { + $this->getNextCancelWorkPrintJobs($md5pass,self::$CANCELFOOD,$printer,$fl); + } + + function getNextCancelDrinkWorkPrintJobs($printer,$md5pass,$fl) { + $this->getNextCancelWorkPrintJobs($md5pass,self::$CANCELDRINK,$printer,$fl); + } + + function getNextCancelWorkPrintJobs($md5pass,$theType,$printer,$fl) { + $pdo = $this->dbutils->openDbAndReturnPdo(); + $isCorrect = $this->isPasswordCorrect($pdo,$md5pass,false); + + if ($isCorrect) { + CommonUtils::log($pdo,"PRINTQUEUE", "getNextCancelWorkPrintJobs: type = $theType, printer = $printer, fl= $fl"); + + $checkType = "f"; + if ($theType == 6) { + $checkType = "d"; + } + if (!$this->checkForPrinterInstance($pdo, $checkType . $printer)) { + echo json_encode(array()); + return; + } + + $this->saveLastPrintServerAccess($pdo); + + $templatekey = "canceltemplate"; + + $template = $this->getTemplate($pdo, $templatekey); + + if (is_null($printer)) { + $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? AND removed is null ORDER BY id"; + $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); + $stmt->execute(array($theType)); + } else { + $sql = "SELECT id,content,type FROM %printjobs% WHERE type=? AND printer=? AND removed is null ORDER BY id"; + $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); + $stmt->execute(array($theType,$printer)); + } + + $result = $stmt->fetchAll(); + CommonUtils::log($pdo,"PRINTQUEUE", "getNextCancelWorkPrintJobs: retrieve " . count($result) . " jobs"); + + $workarray = array(); + foreach($result as $aWorkJob) { + $aWork = (array) json_decode($aWorkJob["content"],true); // is in json format + CommonUtils::log($pdo,"PRINTQUEUE", "getNextCancelWorkPrintJobs: collect work receipt with id=" . $aWorkJob["id"] . " for printer=$printer"); + + $workid = $aWork["workid"]; + unset($aWork["workid"]); + + $workarray[] = array("workid" => $workid, + "id" => $aWorkJob["id"], + "refworkid" => $aWork["refworkid"], + "longname" => $aWork["longname"], + "kind" => $theType, + "table" => $aWork["table"], + "time" => $aWork["time"], + "price" => $aWork["price"], + "extras" => $aWork["extras"], + "template" => $template); + } + CommonUtils::log($pdo,"PRINTQUEUE", "getNextWorkPrintJobs: sent data to caller"); + echo json_encode($workarray); + } else { + CommonUtils::log($pdo,"PRINTQUEUE", "getNextWorkPrintJobs: wrong printcode"); + echo json_encode(array()); + } + } function deletePrintJob($pass,$id) { $pdo = $this->dbutils->openDbAndReturnPdo(); @@ -650,10 +797,20 @@ class PrintQueue { if ($isCorrect) { $pdo = $this->dbutils->openDbAndReturnPdo(); $this->saveLastPrintServerAccess($pdo); - $sql = "DELETE FROM %printjobs% WHERE id=?"; - $stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql)); - $stmt->execute(array($id)); + $sql = "SELECT type FROM %printjobs% WHERE id=?"; + $result = CommonUtils::fetchSqlAll($pdo, $sql, array($id)); + if (count($result) > 0) { + $type = $result[0]['type']; + if (($type == self::$FOOD) || ($type == self::$DRINK) || ($type == self::$CANCELFOOD) || ($type == self::$CANCELDRINK)) { + $sql = "UPDATE %printjobs% SET removed=? WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array(1,$id)); + } else { + $sql = "DELETE FROM %printjobs% WHERE id=?"; + CommonUtils::execSql($pdo, $sql, array($id)); + } + } + echo json_encode(array("status" => "OK", "code" => OK, "msg" => "Druckauftrag erfolgreich gelöscht.")); } else { CommonUtils::log($pdo,"PRINTQUEUE", "deletePrintJob: wrong printcode"); @@ -661,4 +818,3 @@ class PrintQueue { } } } -?> \ No newline at end of file diff --git a/webapp/php/queuecontent.php b/webapp/php/queuecontent.php index 57875f5..b3c8275 100644 --- a/webapp/php/queuecontent.php +++ b/webapp/php/queuecontent.php @@ -1056,6 +1056,7 @@ class QueueContent { $stmt->execute(array($queueid)); $rowsAffected = $stmt->rowCount(); if ($rowsAffected == 1) { + Workreceipts::createCancelWorkReceipt($pdo, $queueid); echo json_encode(array("status" => "OK")); } else { echo json_encode(array("status" => "Failed", "msg" => "Affected rows: $rowsAffected")); diff --git a/webapp/php/updater.php b/webapp/php/updater.php index 13098f6..514ef1f 100644 --- a/webapp/php/updater.php +++ b/webapp/php/updater.php @@ -110,6 +110,7 @@ class Updater { } private static function getAvailableVersion($pdo) { $url = CommonUtils::getConfigValue($pdo, "updateurl", ''); + $installedVersion = CommonUtils::getConfigValue($pdo, "version", ''); $infoFile = self::getInfoFile($url,'updateinfo.txt',true,3); if ($infoFile["status"] != "OK") { return array("status" => "ERROR","msg" => "could not get info file: " . $infoFile["msg"],"url" => $url); @@ -117,7 +118,7 @@ class Updater { $infoFileLines = $infoFile["msg"]; if (count($infoFileLines) > 1) { - $checkIfNewerVersion = self::isV2Newer('1.3.22',trim($infoFileLines[0])); + $checkIfNewerVersion = self::isV2Newer($installedVersion,trim($infoFileLines[0])); return array("status" => "OK","msg" => $infoFileLines[0],"url" => $url,"neweravailable" => ($checkIfNewerVersion ? 1 : 0)); } else { return array("status" => "ERROR","msg" => "Info file not valid","url" => $url); diff --git a/webapp/php/utilities/HistFiller.php b/webapp/php/utilities/HistFiller.php index dc98e3a..68c8fe4 100644 --- a/webapp/php/utilities/HistFiller.php +++ b/webapp/php/utilities/HistFiller.php @@ -41,10 +41,10 @@ class HistFiller { } public static function readUserTableAndSendToHist($pdo) { - $sql = "SELECT * FROM %user%"; + $sql = "SELECT * FROM %user% WHERE active='1'"; $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); $stmt->execute(array()); - $result = $stmt->fetchAll(); + $result = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach($result as $aUser) { self::createUserInHist($pdo, $aUser["id"]); } @@ -60,7 +60,7 @@ class HistFiller { $pdo->commit(); } private static function updateOrCreateUserInHist($pdo,$userid,$histaction) { - self::updateOrCreateEntryInHist($pdo, $userid, $histaction, self::getColNamesForUserHistTable(), 'userid', 'user','histuser',null,null); + self::updateOrCreateUserEntryInHist($pdo, $userid, $histaction, self::getColNamesForUserHistTable(), 'userid', 'user','histuser',null,null); } public static function readAllProdsAndFillHistByDb($pdo) { @@ -94,7 +94,53 @@ class HistFiller { self::updateOrCreateEntryInHist($pdo, $prodid, $histaction, self::getColNamesForProdHistTable(), 'prodid', 'products', 'histprod',$extraCol,$extras); } - + private static function updateOrCreateUserEntryInHist($pdo,$id,$histaction,$colsInSourceTable,$idInHist,$sourcetable, $histtable,$extraCol,$extraVal) { + if (!is_null($extraVal)) { + if (strlen($extraVal) > 299) { + $extraVal = substr($extraVal, 0, 299); + } + } + + $sql = "SELECT * from %". $sourcetable . "%,%roles% WHERE %user%.id=? AND %user%.roleid=%roles%.id "; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array($id)); + $row = $stmt->fetchObject(); + + $cols = $colsInSourceTable; + array_splice($cols, 0, 1, $idInHist); + $valuesStr = implode(",", $cols); + $quests = array(); + $vals = array(); + + foreach($colsInSourceTable as $aHistCol) { + if ($aHistCol == "id") { + $vals[] = $id; + } else { + $vals[] = $row->$aHistCol; + } + $quests[] = "?"; + } + + $sql_insert_hist = "INSERT INTO %". $histtable . "% (id," . $valuesStr . ") VALUES(NULL," . implode(",",$quests) . ")"; + $stmt_insert_hist = $pdo->prepare(DbUtils::substTableAlias($sql_insert_hist)); + $stmt_insert_hist->execute($vals); + $newRefIdForHist = $pdo->lastInsertId(); + + if (!is_null($extraCol)) { + $sql = "UPDATE %". $histtable . "% SET " . $extraCol . "=? WHERE id=?"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + try { + if (strlen($extraVal) > 300) { + $extraVal = substr($extraVal, 0, 300); + } + $stmt->execute(array($extraVal,$newRefIdForHist)); + } catch (Exception $ex) { + } + } + + self::insertIntoHist($pdo, $histaction, $newRefIdForHist); + } + private static function updateOrCreateEntryInHist($pdo,$id,$histaction,$colsInSourceTable,$idInHist,$sourcetable, $histtable,$extraCol,$extraVal) { if (!is_null($extraVal)) { if (strlen($extraVal) > 299) { diff --git a/webapp/php/utilities/basedb.php b/webapp/php/utilities/basedb.php index ce74b79..39c60be 100644 --- a/webapp/php/utilities/basedb.php +++ b/webapp/php/utilities/basedb.php @@ -117,6 +117,7 @@ class Basedb { $this->doSQLcatch($pdo, "drop TABLE `%bill%`"); $this->doSQLcatch($pdo, "drop TABLE `%ratings%`"); $this->doSQLcatch($pdo, "drop TABLE `%user%`"); + $this->doSQLcatch($pdo, "drop TABLE `%roles%`"); $this->doSQLcatch($pdo, "drop TABLE `%closing%`"); $this->doSQLcatch($pdo, "drop TABLE `%config%`"); $this->doSQLcatch($pdo, "drop TABLE `%products%`"); @@ -191,22 +192,6 @@ class Basedb { `id` INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY , `username` VARCHAR ( 150 ) NOT NULL, `userpassword` VARCHAR ( 150 ) NOT NULL, - `is_admin` INT (1) NOT NULL, - `right_waiter` INT (1) NOT NULL, - `right_kitchen` INT (1) NOT NULL, - `right_bar` INT (1) NOT NULL, - `right_supply` INT (1) NOT NULL, - `right_paydesk` INT (1) NOT NULL, - `right_statistics` INT (1) NOT NULL, - `right_bill` INT (1) NOT NULL, - `right_products` INT (1) NOT NULL, - `right_manager` INT (1) NOT NULL, - `right_closing` INT (1) NOT NULL, - `right_dash` INT (1) NOT NULL, - `right_reservation` INT (1) NOT NULL, - `right_rating` INT (1) NOT NULL, - `right_changeprice` INT (1) NOT NULL, - `right_customers` INT (1) NOT NULL, `lastmodule` VARCHAR ( 30 ) NULL, `ordervolume` INT (2) NULL, `language` INT (2) NULL, @@ -222,12 +207,45 @@ class Basedb { `keeptypelevel` INT(1) NOT NULL, `extrasapplybtnpos` INT(1) NOT NULL, `failedlogins` VARCHAR(20) NULL, - `active` INT (2) NOT NULL + `active` INT (2) NOT NULL, + `roleid` INT (10) NULL, + FOREIGN KEY (roleid) REFERENCES %roles%(id) ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDb ; "; $this->doSQL($pdo,$sql); } + function createRolesTable($pdo) + { + try { + $sql = " + CREATE TABLE %roles% ( + id INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY , + name VARCHAR ( 150 ) NOT NULL, + is_admin INT (1) NOT NULL, + right_waiter INT (1) NOT NULL, + right_kitchen INT (1) NOT NULL, + right_bar INT (1) NOT NULL, + right_supply INT (1) NOT NULL, + right_paydesk INT (1) NOT NULL, + right_statistics INT (1) NOT NULL, + right_bill INT (1) NOT NULL, + right_products INT (1) NOT NULL, + right_manager INT (1) NOT NULL, + right_closing INT (1) NOT NULL, + right_dash INT (1) NOT NULL, + right_reservation INT (1) NOT NULL, + right_rating INT (1) NOT NULL, + right_changeprice INT (1) NOT NULL, + right_customers INT (1) NOT NULL + ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDb ; + "; + $this->doSQL($pdo,$sql); + } catch (Exception $ex) { + // table may exists due to other installations + } + } + function createRoomTable($pdo) { $sql = " @@ -578,6 +596,7 @@ class Basedb { `toremove` INT(3) NOT NULL, `cooking` INT(10) NULL, `workprinted` INT(2) NOT NULL, + `printjobid` INT(1) NULL, `isclosed` INT(1) NULL, FOREIGN KEY (tablenr) REFERENCES %resttables%(id), FOREIGN KEY (pricelevel) REFERENCES %pricelevel%(id), @@ -706,7 +725,8 @@ class Basedb { `id` INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY , `content` TEXT NOT NULL , `type` INT (2) NOT NULL , - `printer` INT(2) NULL + `printer` INT(2) NULL, + `removed` INT(1) NULL ) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDb ; "; $stmt = $pdo->prepare($this->resolveTablenamesInSqlString($sql)); @@ -837,6 +857,7 @@ class Basedb { { $this->createLogTable($pdo); $this->createPaymentTable($pdo); + $this->createRolesTable($pdo); $this->createUserTable($pdo); $this->createRoomTable($pdo); $this->createRestTables($pdo); diff --git a/webapp/php/utilities/roles.php b/webapp/php/utilities/roles.php new file mode 100644 index 0000000..1ce5a87 --- /dev/null +++ b/webapp/php/utilities/roles.php @@ -0,0 +1,86 @@ +prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Admin",1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0)); + $id = $pdo->lastInsertId(); + return $id; + } + + public static function insertDigiManagerRole($pdo) { + $sql = "INSERT INTO %roles% (name," + . "is_admin,right_waiter,right_kitchen,right_bar,right_supply,right_paydesk," + . "right_statistics,right_bill,right_products,right_manager,right_closing," + . "right_dash,right_reservation,right_rating,right_changeprice,right_customers) VALUES(" + . "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Manager",0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1)); + $id = $pdo->lastInsertId(); + return $id; + } + + public static function insertWorkManagerRole($pdo) { + $sql = "INSERT INTO %roles% (name," + . "is_admin,right_waiter,right_kitchen,right_bar,right_supply,right_paydesk," + . "right_statistics,right_bill,right_products,right_manager,right_closing," + . "right_dash,right_reservation,right_rating,right_changeprice,right_customers) VALUES(" + . "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Manager",0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1)); + $id = $pdo->lastInsertId(); + return $id; + } + + public static function insertDigiWaiterRole($pdo) { + $sql = "INSERT INTO %roles% (name," + . "is_admin,right_waiter,right_kitchen,right_bar,right_supply,right_paydesk," + . "right_statistics,right_bill,right_products,right_manager,right_closing," + . "right_dash,right_reservation,right_rating,right_changeprice,right_customers) VALUES(" + . "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Kellner",0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0)); + $id = $pdo->lastInsertId(); + return $id; + } + + public static function insertWorkWaiterRole($pdo) { + $sql = "INSERT INTO %roles% (name," + . "is_admin,right_waiter,right_kitchen,right_bar,right_supply,right_paydesk," + . "right_statistics,right_bill,right_products,right_manager,right_closing," + . "right_dash,right_reservation,right_rating,right_changeprice,right_customers) VALUES(" + . "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Kellner",0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0)); + $id = $pdo->lastInsertId(); + return $id; + } + + public static function insertCookRole($pdo) { + $sql = "INSERT INTO %roles% (name," + . "is_admin,right_waiter,right_kitchen,right_bar,right_supply,right_paydesk," + . "right_statistics,right_bill,right_products,right_manager,right_closing," + . "right_dash,right_reservation,right_rating,right_changeprice,right_customers) VALUES(" + . "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($sql)); + $stmt->execute(array("Koch",0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0)); + $id = $pdo->lastInsertId(); + return $id; + } +} diff --git a/webapp/php/workreceipts.php b/webapp/php/workreceipts.php new file mode 100644 index 0000000..954c68e --- /dev/null +++ b/webapp/php/workreceipts.php @@ -0,0 +1,93 @@ +content; + $printer = $row->printer; + $origJob = json_decode($origJobJson, true); + + $refworkid = $origJob["workid"]; + $table = $origJob["table"]; + $time = $origJob["time"]; + $products = $origJob["products"]; + + foreach ($products as $prod) { + $id = $prod["id"]; + if ($id == $queueid) { + $kind = $prod["kind"]; + $longname = $prod["longname"]; + $price = $prod["price"]; + $extrasArr = $prod["extras"]; + $extrasStr = implode(",", $extrasArr); + + $cancelJob = array( + "workid" => $workid, + "refworkid" => $refworkid, + "table" => $table, + "time" => $time, + "longname" => $longname, + "kind" => $kind, + "price" => $price, + "extras" => $extrasStr); + + $cancelJobJson = json_encode($cancelJob); + + $printInsertSql = "INSERT INTO `%printjobs%` (`id` , `content`,`type`,`printer`) VALUES ( NULL,?,?,?)"; + $stmt = $pdo->prepare(DbUtils::substTableAlias($printInsertSql)); + $type = PrintQueue::$CANCELFOOD; + if ($kind == 1) { + $type = PrintQueue::$CANCELDRINK; + } + $stmt->execute(array($cancelJobJson,$type,$printer)); + + $idOfWorkJob = $pdo->lastInsertId(); + + CommonUtils::log($pdo,"QUEUE","Create cancel work job with id=$idOfWorkJob for tableid $table of kind $kind for printer=$printer"); + } + } + } + } catch (Exception $ex) { + $msg = $ex->getMessage(); + return; + } + } + } +} diff --git a/webapp/preferences.html b/webapp/preferences.html index e960f7f..081c3b8 100644 --- a/webapp/preferences.html +++ b/webapp/preferences.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/products.html b/webapp/products.html index c7f9b62..c06b004 100644 --- a/webapp/products.html +++ b/webapp/products.html @@ -7,7 +7,7 @@ - + diff --git a/webapp/rating.html b/webapp/rating.html index 9667b9f..032e04d 100644 --- a/webapp/rating.html +++ b/webapp/rating.html @@ -7,7 +7,7 @@ - + diff --git a/webapp/reports.html b/webapp/reports.html index 9208af2..6f3f4a9 100644 --- a/webapp/reports.html +++ b/webapp/reports.html @@ -7,7 +7,7 @@ - + diff --git a/webapp/reservation.html b/webapp/reservation.html index 3173e72..c3b60c3 100644 --- a/webapp/reservation.html +++ b/webapp/reservation.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/supplydesk.html b/webapp/supplydesk.html index ffb8f3b..c4f55d5 100644 --- a/webapp/supplydesk.html +++ b/webapp/supplydesk.html @@ -5,7 +5,7 @@ - + diff --git a/webapp/waiter.html b/webapp/waiter.html index 0bcba25..ac21269 100644 --- a/webapp/waiter.html +++ b/webapp/waiter.html @@ -4,8 +4,8 @@ - - + + @@ -33,7 +33,7 @@ +var W_TABLES=["Tische","Tables","Mesas"];var W_ATABLE=["Tisch","Table","Mesa"];var W_ROOMS=["Räume","Rooms","Espacios"];var W_SELECTION=["Auswahl","Selection","Selección"];var W_LAST_SELECTED=["zuletzt","last","seleccionado"];var W_FAVS=["Favoriten","Favorites","Favoritos"];var W_NEW_ORDER=["Neue Order","New Orders","Ordenes nuevas"];var W_KIT_BAR=["nicht serviert/unbezahlt","unserved/unpaid","no servido/impagado"];var W_OTHER_PROD=["Auswahl Produktkategorie","Select product categroy","Categoría diferente"];var W_WORK_TICKET=["Arbeitsbon","Work ticket","Tique de trabajar"];var W_NOTE=["Bemerkung","Comment","Comentario"];var W_SEND_ORDERS=["Bestellung senden","Send orders","Enviar Ordenes"];var W_TO_PAYDESK=["-> Kasse","-> Paydesk","-> Caja"];var W_TABLECHANGE=["Tischwechsel","Change table","Cambiar mesa"];var W_ROOMTABLE=["Raum-Tisch","Room-Table","Espacio-Mesa"];var W_TABLE_SEL=["Tischauswahl","Select table","Qué mesa?"];var W_UNDELIV_INFO=["Liste enthält die Produkte die noch in der Küchen-/Baransicht sind, sowie unbezahlte Produkte, die die Bereitstellungsansicht nicht durchlaufen.","List contains the products which are still in kitchen or bar view, as well as unpaid products that do not pass the supplydesk view.","La lista contiene los productos que estan todavía en modulo de cocina/bar, también productos impagados que no pasan vista de productos preparados."];var W_REMOVE_ERROR=["Ansicht nicht mehr aktuell - Liste wird neu geladen.","View is obsolete - List will be reloaded.","Vista no esta actual - vamos a actualisar la lista."];var W_FOOD_FOR=["Speisen für","Food for","Comidas para"];var W_DRINKS_FOR=["Getränke für","Beverage for","Bebidas para"];var W_ACT_NEW_ORD_EL=["Aktion auswählen","Select action","Que acción?"];var W_ACT_CHANGE=["Ändern","Modify","Modificar"];var W_ACT_CHANGE_ALL=["Alle Ändern","Modify all","Modificar todo"];var W_ACT_CHANGE_ONE=["Einen Artikel ändern","Modify one item","Modificar un artículo"];var W_APPLY=["Anwenden","Apply","Aplicar"];var W_CANCEL=["Abbrechen","Cancel","Cancelar"];var W_STILL_UNSENT_ORDERS=["Es sind noch ungesendete Orders vorhanden!","There are unsent orders in the list","Hay elementos in la liste que no han enviados"];var W_EXTRAS=["Extras/Optionen","Add-ons/Options","Opciones"];var W_OPEN_PANEL=["Extras-Auswahl noch offen","Add-ons selection still open","Selección de opciones todavía abierta"];var W_DEL=["Löschen","Delete","Removar"];var W_MSG=["Nachricht","Message","Mensaje"];var W_CHANGE_PRICE=["Neuer Preis: ","New price: ","Cambiar precio: "];var W_PRICE=["Preis","Price","Precio"];var W_WRONG_FORMAT=["Falsches Zahlenformat","Wrong number format","Formato de precio incorecto"];var W_TOGO=["Außer-Haus-Verkauf","Sale with Tax No 2","Venta IVA 2"];var W_YES=["Ja","Yes","Si"];var W_NO=["Nein","No","No"];var W_DISCARD_NO_ASK=["Es sind noch ungesendete Orders vorhanden! Sollen diese verworfen werden?","There are still unsent orders. Do you want to discard them?","Hay todavía ordenes non-enviados. Removarlos?"];var W_DISCARD_HEADER=["Neue Orders verwerfen?","Discard new orders?","Removar ordenes nuevos?"];var W_SEARCH=["Produktsuche","Product search","Buscar producto"];var W_SEARCHRESULTS=["Suchergebnis","Search Result","Encontrado"];var W_WRONG_PIN=["Falscher Stornocode","Wrong cancel code","Codigo falso"];var W_NO_ORDERS=["Keine gebuchten Orders vorhanden!","No orders available!","No hay ningún orden!"];var W_TO_PAY=["offen","to pay","a pagar"];var W_MOVE_PRODS=["Produkte verschieben","Move products","Productos a otra mesa"];var W_NO_PRODS_SELECTED=["Es wurden keine Produkte ausgewählt!","You have not chosen any products!","No ha seleccionado ningún producto!"];var W_MAX_PRICE_EXCEEDED=["Der Maximalwert für den Preis wurde überschritten!","The max. value for the price is exceeded!","El valor del precio es más que el maximum!"];var W_REORDER=["Nachbestellen","Reorder","Order una vez mas"];var W_REMOVE=["Entfernen","Remove","Removar"];var W_SELALL=["Alles auswählen","Select all","Elegir todo"];var W_UNSELALL=["Alles abwählen","Unselect all","No elegir nada"];var W_ONLY=["noch","only","sólo"];var W_DEL_ALL_UNDELIVERED=["Entferne alles","Remove all","Borrar todo"];var W_DEL_ALL_ASSIGNED_PRODS=["Alle Produkte löschen?","Delete all products?","Removar todos los productos?"];var W_NO_VALID_PRICE=["Keine gültige Preiseingabe","No valid price","Precio no valido"];var W_NO_REORDER_VAR_PRICE=["Produkt mit variablem Preis kann nicht auf diese Weise nachbestellt werden.","Produkt with variable price cannot be reordered this way.","Producto con un precio variable no se puede reordenado asi."];var CHANGE_ALL=0;var CHANGE_ONE=1;var WORKFLOW_DIGI_WORK=0;var WORKFLOW_DIGI=1;var WORKFLOW_WORK=2;var WORKFLOW_WORK_SEND=3;function Grouping(b,a){this.set=b;this.sortedset=[];this.group=function(){this.sortedset=[];for(var g=0;g/g,">"))}function setLanguage(h){lang=h;$("#roomtableheader2").html(W_ROOMTABLE[lang]);$("#tableselection").html(W_TABLE_SEL[lang]);$("#actiontxt").html(W_ACT_NEW_ORD_EL[lang]);$("#actdeltxt").html(W_DEL[lang]);$("#discard_new_orders_yes").html(W_YES[lang]);$("#discard_new_orders_no").html(W_NO[lang]);$("#discardnewordersask").html(W_DISCARD_NO_ASK[lang]);$("#discardnoheader").html(W_DISCARD_HEADER[lang]);$("#moveprods").html(W_MOVE_PRODS[lang]);var f="";if(prominentsearch==0){f+='
'}else{f+='
'}f+="
";var e='
';if(prominentsearch==0){$("#searchposition-normal").html(f)}else{$("#searchposition-prominent").html(f)}var b=e;if((workflowconfig==WORKFLOW_DIGI_WORK)||(workflowconfig==WORKFLOW_DIGI)||(workflowconfig==WORKFLOW_WORK_SEND)){b+=''+W_SEND_ORDERS[lang]+""}if((workflowconfig==WORKFLOW_DIGI_WORK)||(workflowconfig==WORKFLOW_WORK)||(workflowconfig==WORKFLOW_WORK_SEND)){b+=''+W_WORK_TICKET[lang]+""}if(cashenabled==1){b+=''+W_TO_PAYDESK[lang]+""}b+='';$("#commandbuttons").html(b);$("#waiterui").trigger("create");var c='
';$("#actremark").html(c);if(rightchangeprice==1){var a='';$("#actchangepricesection").html(a);var g='
';g+=getDiscountButton("discount1","a",discount1,discountname1);g+=getDiscountButton("discount2","b",discount2,discountname2);g+=getDiscountButton("discount3","c",discount3,discountname3);g+="
";$("#actdiscount").html(g)}$("#actionneworderconfirm_all").html(W_ACT_CHANGE_ALL[lang]);$("#actionneworderconfirm_one").html(W_ACT_CHANGE_ONE[lang]);$("#actionnewordercancel").html(W_CANCEL[lang]);$("#select-comment").off("change").on("change",function(k){var i=$("#select-comment").find(":selected").val();$("#optionfield").val(i)});$("#act-select-comment").off("change").on("change",function(k){var i=$("#act-select-comment").find(":selected").val();$("#act-optionfield").val(i)});$("#discard_new_orders_no").off("click").on("click",function(i){i.stopImmediatePropagation();i.preventDefault();parent.history.back()});$("#discard_priceenter").off("click").on("click",function(i){i.stopImmediatePropagation();i.preventDefault();$("#enterpricedlg").dialog("close")});$("#discard_new_orders_yes").off("click").on("click",function(i){i.stopImmediatePropagation();i.preventDefault();neworders=[];gotoOtherPage($("#discardnewordersdlg").data("link"))});$("#prodbackbtn").off("click").on("click",function(i){if(neworders.length!=0){i.stopImmediatePropagation();i.preventDefault();hideMenuProd();$("#discardnewordersdlg").data("link","back_table");$.mobile.changePage("#discardnewordersdlg")}else{parent.history.back()}});$("#searchField").off("keyup").on("keyup",function(i){generateSearchResults()})}function getDiscountButton(f,e,c,a){var b='";if(a.trim()!=""){b='"}return b}function generateSearchResults(){var e=$("#searchField").val().trim().toLowerCase();if(e.length";var a=$("#typprodpage").data("types_prods_sorted");$.each(a,function(h,k){var g=k.longname;if(g.toLowerCase().indexOf(e)>=0){b+='
  • ';if(preferimgmobile==1){var f="php/contenthandler.php?module=products&command=getprodimage&prodid="+k.id+"&size=l";b+=''}b+=toHtml(g);b+=createSearchProdInfoTxt(k.id);b+="
  • "}});b+="";$("#searchResult").html(b);$("#searchResult").trigger("create");$(".srinfo").off("click").on("click",function(i){i.stopImmediatePropagation();i.preventDefault();var f=this.id.split("_")[1];var h=getProdEntry(f);var g=h.price;alert(W_PRICE[lang]+": "+g+" "+currency)});$(".srplus").off("click").on("click",function(h){h.stopImmediatePropagation();h.preventDefault();var g=this.id.split("_")[1];var f=getSearchProdCount(g);$("#srprodcount_"+g).html(f+1)});$(".srminus").off("click").on("click",function(h){h.stopImmediatePropagation();h.preventDefault();var g=this.id.split("_")[1];var f=getSearchProdCount(g);if(f==2){$("#srprodcount_"+g).html("");selectedProdCount=1}else{if(f>2){$("#srprodcount_"+g).html(f-1)}}});$(".searchresult").off("click").on("click",function(g){g.stopImmediatePropagation();g.preventDefault();favOrSearchWasClicked=true;var f=this.id.split("_")[1];selectedProdCount=getSearchProdCount(f);clearSearchAndGoToHigherTypeIfExtrasOpen();levelOneType=0;handleClickOnProd(f)})}}function fillGenCommentsList(f){if(f.status!="OK"){alert("Fehler "+f.code+": "+f.msg);return}var b='';var e=f.msg;var c=0;for(c=0;c'+a+""}htmlComments=b;predefinedComments=b;$("#select-comment").html(b);$("#select-comment").selectmenu("refresh")}function initializeMainMenu(a,h,e,i,g){$("#"+e).html(" "+a.user);$("#"+i).html(a.version+" ");var k='
  • Module
  • ';$.each(a.menu,function(n,m){var l=m.name;var o=m.link;if(g){k+='
  • '+l+"
  • "}else{k+='
  • '+l+"
  • "}});$(h).empty().append(k).promise().done(function(){refreshList(h)});if(h=="#modulemenu-room"){var c=a.waitermessage;if(c!=""){$("#waitermessage").show();var b='
  • '+W_MSG[lang]+"
  • ";var f='
  • '+toHtml(c)+"
  • ";$("#waitermessage").html(b+f);refreshList("#waitermessage")}else{$("#waitermessage").hide()}}$(".modulebutton").off("click").on("click",function(m){var l=$(this).attr("href");doJsonAjaxAsync("POST","php/contenthandler.php?module=admin&command=setLastModuleOfUser",{view:l},null,"Problem Benutzerdatenpflege",false)})}function refreshList(a){if($(a).hasClass("ui-listview")){$(a).listview("refresh")}else{$(a).trigger("create")}}function gotoOtherPage(a){var b=a.split("_");if(b[0]=="menu"){doJsonAjax("POST","php/contenthandler.php?module=admin&command=setLastModuleOfUser",{view:b[1]},null,null);setTimeout(function(){document.location.href=b[1]},250)}else{if(b[0]=="back"){$("#discardnewordersdlg").dialog("close");parent.history.back()}}}function moduleForward(a){if(neworders.length==0){gotoOtherPage(a)}else{hideMenuProd();$("#discardnewordersdlg").data("link",a);$.mobile.changePage("#discardnewordersdlg")}}function getPayPrintType(){doJsonAjax("GET","php/contenthandler.php?module=admin&command=getPayPrintType",null,insertPayPrintType,"Fehler Druckkonfiguration")}function insertPayPrintType(a){$("#workprintarea").data("payPrintType",a)}function getUserHasRightForPaydesk(){doJsonAjax("GET","php/contenthandler.php?module=admin&command=hasUserPaydeskRight",null,hasUserPaydeskRight,"Fehler Kassenberechtigung")}function hasUserPaydeskRight(a){$("#gopaydesk_btn").data("allowed",a)}function hideMenuRoom(){$("#modulepanel-room").panel("close");$("#menuswitch").off("click").on("click",function(a){a.stopImmediatePropagation();a.preventDefault();$("#modulepanel-room").panel("open")})}function hideMenuTable(){$("#modulepanel-table").panel("close");$("#menuswitchtable").off("click").on("click",function(a){a.stopImmediatePropagation();a.preventDefault();$("#modulepanel-table").panel("open")})}function hideMenuProd(){$("#modulepanel-prod").panel("close");$("#menuswitchprod").off("click").on("click",function(a){a.stopImmediatePropagation();a.preventDefault();$("#modulepanel-prod").panel("open")})}function calcTotalPriceOfProdAndExtras(b,e){var a=parseFloat(b);if(e!=null){for(var c=0;c";var m=groupedNewOrders.count.length;for(g=0;g1){l=""+h.toString()+"x "+l}var f=groupedNewOrders.prodids[g];if(k!=""){k="

    "+toHtml(k)+"

    "}var c=groupedNewOrders.changedPrices[g];var b=groupedNewOrders.togos[g];var o="";var e=groupedNewOrders.extras[g];if((e!=null)&&(e!="")){o=""+e+""}if(c!="NO"){c=c.replace(".",decpoint);if(b!=0){n+='
  • '+l+k+o+" ("+c+" - To-Go)
  • "}else{n+='
  • '+l+k+o+" ("+c+")
  • "}}else{if(b!=0){n+='
  • '+l+k+o+" - To-Go
  • "}else{n+='
  • '+l+k+o+"
  • "}}}$("#neworders").html(n);refreshList("#neworders");binding_neworderelem()}function getProdSizeClass(){if(osprodbtnsize==1){return("osprod-1")}else{if(osprodbtnsize==2){return("osprod-2")}}return""}function binding_neworderelem(){$(".neworder_el").off("click").on("click",function(c){c.stopImmediatePropagation();c.preventDefault();var b=$("#neworders li").index($(this).closest("li"))-1;var a={count:groupedNewOrders.count[b],name:groupedNewOrders.name[b],price:groupedNewOrders.price[b],option:groupedNewOrders.option[b],extras:groupedNewOrders.extras[b],prodid:groupedNewOrders.prodids[b],origidxs:groupedNewOrders.origidxs[b],changedPrices:groupedNewOrders.changedPrices[b],togos:groupedNewOrders.togos[b]};$("#actiononneworderel").data("entry",a);$("#actiononneworderel").data("newcount",a.count);$("#actiononneworderel").data("groupedListIndex",b);$("#act-optionfield").val(a.option);$("#togocheckbox").prop("checked",a.togos==1?true:false);actionSelOnNewOrderElem()})}function sendNewOrders(c,f,a){var g=$("#typprodpage").data("table-info");var b=g[1];if(neworders.length!=0){var e={tableid:b,prods:neworders,print:(c?1:0),payprinttype:f};$("#typprodpage").data("neworders",[]);if(f=="s"){doJsonAjax("POST","php/contenthandler.php?module=queue&command=addProductListToQueue",e,a,"Fehler bei Produktversand")}else{doJsonAjax("POST","php/contenthandler.php?module=queue&command=addProductListToQueue",e,fillPrintAreaAndPrint,"Fehler bei Produktversand")}}else{if(c&¬DeliveredProdsAvailable){}}}function reloadPage(){tableListActive=false;setTimeout(function(){document.location.href="waiter.html"},250)}function gotoTablePage(){var a=$("#tables-page").data("allroomtables");var b=a.length;if(!isTogoOrderSelected||(b==1)){$.mobile.changePage("#tables-page")}else{reloadPage()}}function removeProductFromQueue(a,c,f,e,b,g){if(typeof g==="undefined"){g=true}if(!b){alert(W_WRONG_PIN[lang]);return}$.ajax({type:"POST",dataType:"json",url:"php/contenthandler.php?module=queue&command=removeProductFromQueue",data:{queueid:a,isPaid:c,isCooking:f,isReady:e},async:false,success:function(l){if(l.status!="OK"){alert(W_REMOVE_ERROR[lang])}var k=$("#typprodpage").data("table-info");var h=k[1];var i="php/contenthandler.php?module=queue&command=getJsonLongNamesOfProdsForTableNotDelivered&tableid="+h;if(g){fillNotDeliveredProductsOfATable(i)}},error:function(h){alert("Sorry, Fehler bei Produktentfernung!")}})}function reorderProduct(f,b,g){var a=getProdProperties(f);if((a.unit!=0)&&(a.unit!="null")){alert(W_NO_REORDER_VAR_PRICE[lang]);return}var e=[];for(var c=0;c'+k.name+""});a+='
  • '+W_TOGO[lang];var f=h.takeawayprice;var c=f.replace(".",decpoint)+" "+currency;if(f!=0){a+=" ("+W_TO_PAY[lang]+": "+c+")"}a+=createServeInfo(null,h.takeawayprodcount,h.takeawayprodready);a+="
  • ";$("#room-list").append(a).promise().done(function(){bindTogoOrdering();bindServeClick();$(this).off("click").on("click","a",function(l){l.stopImmediatePropagation();l.preventDefault();var k=b[this.id];currentRoomIndex=this.id;isTogoOrderSelected=false;$("#tables-page").data("roomdetail",k);nextPage="tables-page";$.mobile.changePage("#tables-page")});refreshList(this)})}})}function handleClickInTablemap(a){forwardDisplayToProductView.call(this,a.roomid,a.tableid,a.tablename)}$(document).on("pagebeforeshow","#tables-page",function(){lastSelectedProduct="";tableListActive=true;if(nextPage==""){reloadPage()}hideMenuTable();checkForLogIn();$("#searchField").val("");generateSearchResults();$("#tableselbackbtn").off("click").on("click",function(a){a.stopImmediatePropagation();a.preventDefault();tableListActive=false;$.mobile.changePage("#info-page")});updateTableList()});$(document).on("pagebeforeshow","#changetablewhatdialog",function(){var a=$("#changetablewhatdialog").data("fromtableid");doJsonAjax("GET","php/contenthandler.php?module=queue&command=getProdsForTableChange",{tableId:a},insertProductsToChangeTableDlg,"Tischartikel")});function insertProductsToChangeTableDlg(a){if(a.status!="OK"){alert("Fehler");return}prodsToMove=a.msg;allselected=1;updateProdToMoveList();$("#selectallnothing").off("click").on("click",function(f){f.stopImmediatePropagation();f.preventDefault();allselected=1-allselected;for(var c=0;c"+c.productname+b+"";a+="
  • "+g+"
  • "}$("#productsToMoveList").html(a);refreshList("#productsToMoveList");handleClickOnMoveableProd()}function handleClickOnMoveableProd(){$(".prodToMoveEl").off("click").on("click",function(f){f.stopImmediatePropagation();f.preventDefault();var b=this.id.split("_")[1];var a=prodsToMove[b];var c=a["class"];if(c=="unselecteditem"){a["class"]="selecteditem"}else{a["class"]="unselecteditem"}updateProdToMoveList()});$("#moveprods").off("click").on("click",function(k){k.stopImmediatePropagation();k.preventDefault();var g=[];for(var f=0;f'+W_TOGO[lang]+"";$("#tables-list-togo").html(k);$("#togoarea").show();refreshList("#tables-list-togo");bindTogoOrdering();bindServeClick()}}else{$(h).show();$("#togoarea").hide();$("#tablemapcontent").hide();var k='
  • '+W_TABLES[lang]+"
  • ";var f="";if(ostablebtnsize==1){f="ostable-1"}else{if(ostablebtnsize==2){f="ostable-2"}}$.each(l,function(p,s){var r=s.pricesum;var n=r.replace(".",decpoint)+" "+currency;var o=s.prodcount;var m=s.prodready;var q=s.readyQueueIds;if(r!=0){k+='
  • '+s.name+" ("+W_TO_PAY[lang]+": "+n+")"+createServeInfo(s.id,o,m)+"
  • "}else{k+='
  • '+s.name+createServeInfo(s.id,o,m)+"
  • "}});if(c=="t"){k+='
  • '+W_TOGO[lang]+"
  • "}$(h).empty().append(k).promise().done(function(){bindTogoOrdering();bindServeClick();$(this).off("click").on("click",".info-go",function(p){p.stopImmediatePropagation();p.preventDefault();var o=g;var m=l[this.id]["id"];var n=l[this.id]["name"];forwardDisplayToProductView.call(this,a,m,n)});refreshList(this)})}}function bindServeClick(){$(".prodreadyicon").off("click").on("click",function(l){l.stopImmediatePropagation();l.preventDefault();var f=this.id.split("_")[1];var h=queueIdsOfTakeAway;if((f!=null)&&(f!="n")){var a=$("#tables-page").data("roomdetail");var c=a.tables;for(var b=0;b0){var k=h.join();doJsonAjax("POST","php/contenthandler.php?module=queue&command=declareMultipleProductsDelivered",{queueids:k},updateAfterDelivery,"Bereitstellung")}})}function updateAfterDelivery(a){if(tableListActive){updateTableList()}else{reloadPage()}}function bindTogoOrdering(){$(".togoorder").off("click").on("click",function(a){a.stopImmediatePropagation();a.preventDefault();isTogoOrderSelected=true;forwardDisplayToProductView.call(this,0,0,W_TOGO[lang])})}function forwardDisplayToProductView(b,a,c){neworders=[];updateNewOrdersGui();var e=new Array(b,a,c);$("#typprodpage").data("table-info",e);nextPage="typprodpage";$.mobile.changePage("#typprodpage");neworders=[];updateNewOrdersGui()}function attachAndDisplayFirstRefTypes(e){$("#typprodpage").data("types_prods",e);var a=e.prods;var c=[];for(var b=0;b";if(applyExtraBtnPos!=1){k+='
  • '+W_APPLY[lang]+"
  • "}for(var f=0;f=0){b="f";h="check"}k+='
  • '+toHtml(g)+"
  • "}if(requestPriceInExtras!=false){k+='
  • '}if(applyExtraBtnPos!=2){k+='
  • '+W_APPLY[lang]+"
  • "}k+=createHigherLine(l);return k}function bindExtrasSel(){$(".extrasel").off("click").on("click",function(n){n.stopImmediatePropagation();n.preventDefault();var a=this.id.split("_");var b=a[1];var f=a[2];if((b=="abottom")||(b=="atop")){var l=getProdEntry(f);var c=l.extras;var o=[];for(var h=0;h=0){o[o.length]={id:b,name:m,price:g.price}}}if(requestPriceInExtras){var k=$("#enterpriceextrasfield").val();k=k.trim();k=k.replace(decpoint,".");if((k!="")&&($.isNumeric(k))){requestPriceInExtras=false;presetPriceInExtras="";addProductToNewOrdersList(f,o,k)}else{alert(W_NO_VALID_PRICE[lang])}}else{addProductToNewOrdersList(f,o)}}else{if(w_extras.indexOf(b)>=0){w_extras.splice(w_extras.indexOf(b),1)}else{w_extras[w_extras.length]=b}if(requestPriceInExtras!==false){presetPriceInExtras=$("#enterpriceextrasfield").val()}var p=listOfExtras(f);$("#typeproducts-list").html(p);refreshList("#typeproducts-list");bindExtrasSel();bindHigherButtons()}})}function lastSelectedProdToStr(){return" ("+W_LAST_SELECTED[lang]+": "+lastSelectedProduct+")"}function listOfTypesProds(e){var a='
  • '+W_SELECTION[lang]+"";if(lastSelectedProduct!=""){a+=lastSelectedProdToStr()}a+="
  • ";var b=$("#typprodpage").data("types_prods");var c=getProdSizeClass();$.each(b.types,function(g,f){if(parseInt(f.ref)==e){a+='
  • '+toHtml(f.name)+"
  • "}});$.each(b.prods,function(g,h){if(parseInt(h.ref)==e){a+='
  • ';if(preferimgmobile==1){var f="php/contenthandler.php?module=products&command=getprodimage&prodid="+h.id+"&size=l";a+=''}a+=toHtml(h.name);if((h.amount!="null")&&(h.amount<11)){a+=" ("+W_ONLY[lang]+" "+h.amount+")"}a+=createProdInfoTxt(h.id);a+="
  • "}});if(e!=0){a+=createHigherLine(c)}return a}function createHigherLine(b){var a='
  • ';a+='
    ';a+='
    ';a+='
    ';a+="
    ";a+="
  • ";return a}function createProdEntryWithTextPrice(a,e,f){var c=getProdEntry(a);if(c!=null){var b=c.price.replace(".",decpoint);return"
    "+b+"
    "}return""}function createProdInfoTxt(b){var a="";if(priceinlist==0){a+="
    "}else{a+=createProdEntryWithTextPrice(b,"prodtextinfo","pinfo")}if(showplusminus==1){a+="
    ";a+="
    "}return a}function createSearchProdInfoTxt(b){var a="";if(priceinlist==0){a+="
    "}else{a+=createProdEntryWithTextPrice(b,"srtextinfo","srinfo")}if(showplusminus==1){a+="
    ";a+="
    "}return a}function createServeInfo(e,c,b){if(supplyright==0){return""}if(e==null){e="n"}if(b>0){var a=""+b+"("+c+")";if(b>=c){a+="
    "}else{a+="
    "}return a}else{return""}}function getProdEntry(e){var b=$("#typprodpage").data("types_prods");var c=0;var a=b.prods;for(c=0;c";var b=$("#typprodpage").data("types_prods");var e=getProdSizeClass();var a=false;var c=[];$.each(b.prods,function(g,h){if(parseInt(h.favorite)==1){a=true;c[c.length]={id:h.id,longname:h.longname}}});c.sort(prodcompare);$.each(c,function(g,h){f+='
  • '+toHtml(h.longname);f+=createProdInfoTxt(h.id);f+="
  • "});f+="";if(a){$("#favarea").html(f);$("#favarea").trigger("create")}else{$("#favarea").html("");$("#favarea").trigger("create")}}function bindFavEvent(){$(".fav").off("click").on("click",function(b){b.stopImmediatePropagation();b.preventDefault();favOrSearchWasClicked=true;levelOneType=0;var a=this.id.split("_")[1];selectedProdCount=getProdCount(a);handleClickOnProd(a)})}function displayTypesProds(c,b){window.scrollTo(0,0);if(c==0){fillFavArea();bindFavEvent()}else{$("#favarea").html("")}var a=null;if(b==null){idOfHigherType=c;a=listOfTypesProds(parseInt(c));extrasMenuOpen=false}else{a=listOfExtras(parseInt(c));extrasMenuOpen=true}$("#typeproducts-list").empty().append(a).promise().done(function(){refreshList("#typeproducts-list");$(this).off("click").on("click","a",function(i){i.stopImmediatePropagation();i.preventDefault();favOrSearchWasClicked=false;$("#searchField").val("");generateSearchResults();var g=this.id;var f=g.split("_");if(f[0]=="t"){if(c==0){levelOneType=f[1];c=f[1]}displayTypesProds(f[1],null)}else{var h=f[1];selectedProdCount=getProdCount(h);handleClickOnProd(h)}});bindHigherButtons()});$(".prodinfo").off("click").on("click",function(i){i.stopImmediatePropagation();i.preventDefault();var f=this.id.split("_")[1];var h=getProdEntry(f);var g=h.price;alert(W_PRICE[lang]+": "+g+" "+currency)});$(".prodplus").off("click").on("click",function(h){h.stopImmediatePropagation();h.preventDefault();var g=this.id.split("_")[1];var f=getProdCount(g);$("#prodcount_"+g).html(f+1)});$(".prodminus").off("click").on("click",function(h){h.stopImmediatePropagation();h.preventDefault();var g=this.id.split("_")[1];var f=getProdCount(g);if(f==2){$("#prodcount_"+g).html("");selectedProdCount=1}else{if(f>2){$("#prodcount_"+g).html(f-1)}}})}function getHigherType(){var c=$("#typprodpage").data("types_prods");var b=c.types;var f=0;if(!extrasMenuOpen){for(var e=0;e0)){w_extras=[];w_allextras=a;idOfHigherType=c.ref;if(c.unit==1){requestPriceInExtras=true;presetPriceInExtras=""}else{requestPriceInExtras=false}displayTypesProds(b,a);bindExtrasSel()}else{if(c.unit==1){hideMenuProd();enterpricedlgshown=true;$("#enterpricedlg").data("prodid",b);$("#enterpricefield").val("");$.mobile.changePage("#enterpricedlg");bindEnterPriceNumbers()}else{addProductToNewOrdersList(b,null)}}}function bindEnterPriceNumbers(){$(".numfield td").off("click").on("click",function(b){b.stopImmediatePropagation();b.preventDefault();var f=$(this).html();var a=$(this).attr("class");if(a!="keyboardapply"){var c=String($("#enterpricefield").val());$("#enterpricefield").val(c+f)}});$("#apply_priceenter").off("click").on("click",function(c){c.stopImmediatePropagation();c.preventDefault();var a=$("#enterpricedlg").data("prodid");var b=$("#enterpricefield").val();b=b.trim();b=b.replace(decpoint,".");if((b!="")&&($.isNumeric(b))){$("#enterpricedlg").dialog("close");addProductToNewOrdersList(a,null,b)}else{alert(W_NO_VALID_PRICE[lang])}})}function addProductToNewOrdersList(b,c,f){var g=$("#typprodpage").data("table-info");var a=g[1];addProductToQueue(b,c,"NO",0,f);var h=getProdAudio(parseInt(b));var e=parseInt($("#typprodpage").data("ordervolume"))/10;if(h!=""){var k="customer/"+h;if(h.match(/mp3$/)){$("#audiofile").html('')}else{if(h.match(/ogg$/)){$("#audiofile").html('')}else{if(h.match(/wav$/)){$("#audiofile").html('')}}}document.getElementById("audiofile").load();document.getElementById("audiofile").volume=e;document.getElementById("audiofile").play()}else{if(e>0.5){beep()}}var i="php/contenthandler.php?module=queue&command=getJsonLongNamesOfProdsForTableNotDelivered&tableid="+a;fillNotDeliveredProductsOfATable(i);if((keeptypelevel==0)||(favOrSearchWasClicked)){displayTypesProds(levelOneType,null)}else{if(extrasMenuOpen){displayTypesProds(idOfHigherType,null)}}allowPrintAndOrderBtn=true;refreshList("#typeproducts-list")}function beep(){var a=new Audio("data:audio/wav;base64,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qJrx4KOQjahZxWbcZgztj2c49nKmkId44S71j0c8eV9yDK6uPRzx5X18eDvjvQ6yKo9ZSS6l//8elePK/Lf//IInrOF/FvDoADYAGBMGb7FtErm5MXMlmPAJQVgWta7Zx2go+8xJ0UiCb8LHHdftWyLJE0QIAIsI+UbXu67dZMjmgDGCGl1H+vpF4NSDckSIkk7Vd+sxEhBQMRU8j/12UIRhzSaUdQ+rQU5kGeFxm+hb1oh6pWWmv3uvmReDl0UnvtapVaIzo1jZbf/pD6ElLqSX+rUmOQNpJFa/r+sa4e/pBlAABoAAAAA3CUgShLdGIxsY7AUABPRrgCABdDuQ5GC7DqPQCgbbJUAoRSUj+NIEig0YfyWUho1VBBBA//uQZB4ABZx5zfMakeAAAAmwAAAAF5F3P0w9GtAAACfAAAAAwLhMDmAYWMgVEG1U0FIGCBgXBXAtfMH10000EEEEEECUBYln03TTTdNBDZopopYvrTTdNa325mImNg3TTPV9q3pmY0xoO6bv3r00y+IDGid/9aaaZTGMuj9mpu9Mpio1dXrr5HERTZSmqU36A3CumzN/9Robv/Xx4v9ijkSRSNLQhAWumap82WRSBUqXStV/YcS+XVLnSS+WLDroqArFkMEsAS+eWmrUzrO0oEmE40RlMZ5+ODIkAyKAGUwZ3mVKmcamcJnMW26MRPgUw6j+LkhyHGVGYjSUUKNpuJUQoOIAyDvEyG8S5yfK6dhZc0Tx1KI/gviKL6qvvFs1+bWtaz58uUNnryq6kt5RzOCkPWlVqVX2a/EEBUdU1KrXLf40GoiiFXK///qpoiDXrOgqDR38JB0bw7SoL+ZB9o1RCkQjQ2CBYZKd/+VJxZRRZlqSkKiws0WFxUyCwsKiMy7hUVFhIaCrNQsKkTIsLivwKKigsj8XYlwt/WKi2N4d//uQRCSAAjURNIHpMZBGYiaQPSYyAAABLAAAAAAAACWAAAAApUF/Mg+0aohSIRobBAsMlO//Kk4soosy1JSFRYWaLC4qZBYWFRGZdwqKiwkNBVmoWFSJkWFxX4FFRQWR+LsS4W/rFRb/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////VEFHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAU291bmRib3kuZGUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjAwNGh0dHA6Ly93d3cuc291bmRib3kuZGUAAAAAAAAAACU=");a.play()}function fetchTypeProdsFromServer(){doJsonAjaxAsync("GET","php/contenthandler.php?module=products&command=getAllTypesAndAvailProds",null,attachAndDisplayFirstRefTypes,true)}var waitProdTimer=null;function fillTypeProdList(b){var a=$("#typprodpage").data("types_prods");if(a!=undefined){displayTypesProds(b,null)}else{waitProdTimer=setInterval(function(){var c=$("#typprodpage").data("types_prods");if(c!=undefined){clearInterval(waitProdTimer);displayTypesProds(b,null)}},200)}}function fillTypeProdList_(a){displayTypesProds(a,null)}function createTxtAssignedProd(e){var b="";if(e.option!=""){b=" ("+toHtml(e.option)+")"}var c=e.longname;if(e.togo==1){c="To-Go: "+c}if(e.pricechanged==1){c+=" - "+e.price.replace(".",decpoint)}var a="";if(e.isready=="1"){a+=" ☞"}if(e.isCooking=="1"){a+=" ♨"}if(e.isPaid=="1"){a+=" ☑"}return toHtml(c)+b+a+"
    "+createExtraParagraph(e.extras)}function createListElOfAssignedProd(b){var a="";if("count" in b){if(b.count>1){a=b.count+"x "}}if(b.isready=="0"){return'
  • '+a+createTxtAssignedProd(b)+"
  • "}else{return'
  • '+a+createTxtAssignedProd(b)+"
  • "}}function fillAssignedProdList(b){if(b.length>0){notDeliveredProdsAvailable=true}else{notDeliveredProdsAvailable=false}$("#cancelcodefield").val("");if(cancelunpaidcode!=""){if(b.length>0){$("#cancelcodearea").show()}else{$("#cancelcodearea").hide()}}else{$("#cancelcodearea").hide()}var c=new Grouping(b,createTxtAssignedProd);c.group();var a='
  • '+W_KIT_BAR[lang]+"
  • ";a+=c.outputList(createListElOfAssignedProd);if(notDeliveredProdsAvailable){a+='
  • '+W_DEL_ALL_UNDELIVERED[lang]+"
  • "}$("#orderedprod-list-0").html(a);refreshList("#orderedprod-list-0");$("#undeliveredheader").off("click").on("click",function(f){f.stopImmediatePropagation();f.preventDefault();alert(W_UNDELIV_INFO[lang])});bindingOfAssignedProds(c);bindDelAllUndeliveredProds(b);$("#cancelcodeform").off("submit").on("submit",function(f){f.stopImmediatePropagation();f.preventDefault()})}function bindDelAllUndeliveredProds(a){$("#delallundelivered").off("click").on("click",function(b){b.stopImmediatePropagation();b.preventDefault();areYouSure("Produkte löschen.",W_DEL_ALL_ASSIGNED_PRODS[lang],W_REMOVE[lang],function(){removeAllAssignedProds(a)})})}function removeAllAssignedProds(h){var c=true;if(cancelunpaidcode!=""){if($("#cancelcodefield").val()!=cancelunpaidcode){c=false;alert(W_WRONG_PIN[lang]);return}}for(var f=0;f