OrderSprinter 1.5.0
This commit is contained in:
parent
9ec356f06b
commit
a29e2865af
|
@ -9,8 +9,8 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" href="css/gueststyle.css?v=1.4.18" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css?v=1.4.18" />
|
||||
<link rel="stylesheet" href="css/gueststyle.css?v=1.5.0" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css?v=1.5.0" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
|
||||
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
|
||||
|
@ -105,7 +105,7 @@
|
|||
<div data-role="footer" data-theme="b" id="thefooter1">
|
||||
<div class="ui-grid-a">
|
||||
<div class="ui-block-a"> OrderSprinter</div>
|
||||
<div class="ui-block-b grid_right" id="versioninfo">1.4.18 </div>
|
||||
<div class="ui-block-b grid_right" id="versioninfo">1.5.0 </div>
|
||||
</div><!-- /grid-a -->
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -90,10 +90,10 @@ if (isset($_POST['code'])) {
|
|||
} else {
|
||||
echo "<html>";
|
||||
echo "<head><title>Installation Gastsystem</title>";
|
||||
echo '<link rel="stylesheet" type="text/css" href="css/gueststyle.css?v=1.4.18">';
|
||||
echo '<link rel="stylesheet" type="text/css" href="css/gueststyle.css?v=1.5.0">';
|
||||
echo "</head>";
|
||||
echo "<body><div class=surround>";
|
||||
echo "<span class=headerline>Installation OrderSprinter-Gastsystem 1.4.18</span><br><br>";
|
||||
echo "<span class=headerline>Installation OrderSprinter-Gastsystem 1.5.0</span><br><br>";
|
||||
echo "<form action='install.php' method='post'><input class=installfield name=code id=code type=text placeholder='Installationscode' />";
|
||||
echo "<br><input type=submit value='Installation starten' class=installbtn />";
|
||||
echo "</form></div></html>";
|
||||
|
|
Binary file not shown.
|
@ -85,7 +85,7 @@ class Installer {
|
|||
}
|
||||
Database::dropTables($pdo);
|
||||
Database::createEmptyTables($pdo, $prefix);
|
||||
Database::setVersion($pdo,$prefix,"1.4.18");
|
||||
Database::setVersion($pdo,$prefix,"1.5.0");
|
||||
Database::setAccessPassword($pdo,$prefix,$adminpass);
|
||||
Database::setRefreshRate($pdo,$prefix,"5"); // default: 5 times per hour
|
||||
return array("status" => "OK","msg" => "Installation successful");
|
||||
|
|
Binary file not shown.
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
@ -13,8 +13,8 @@
|
|||
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
|
||||
<script src="php/3rdparty/jquery-2.0.3.min.js"></script>
|
||||
<script src="php/3rdparty/jquery.mobile-1.4.0.min.js"></script>
|
||||
<script src="utilities.js"></script>
|
||||
<script src="kitchenbar.js"></script>
|
||||
<script src="utilities.js?v=1.5.0"></script>
|
||||
<script src="kitchenbar.js?v=1.5.0"></script>
|
||||
<style>
|
||||
|
||||
#tableWithEntriesToCook,#tableWithCookedEntries,#headertableToCook
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -21,6 +21,7 @@ Speisen = KBF = 1
|
|||
Suzukakia 2 Hacksteaks; 10,00 # Kurzname:Suzukakia 2H ; Bildnr: 1
|
||||
Souvlaki; 10,00 # ID:9 ; Bildnr: 1
|
||||
Schaschlik; 5,00 # Bildnr: 23
|
||||
Chili Con Carne; 9,00 # Bildnr:24
|
||||
Italienische Küche = KBF = 1
|
||||
Ital. Tagesspecial; 6,00 # Kurzname:Special ; Bildnr: 1
|
||||
Pizza = KBF = 1
|
||||
|
@ -30,6 +31,15 @@ Speisen = KBF = 1
|
|||
Salami = KBF = 1
|
||||
Pizza Salami klein; 6,00 # Kurzname:klein; Bildnr: 1
|
||||
Pizza Salami groß; 7,00 # Kurzname:groß; Bildnr: 1
|
||||
Salata = KBF = 1
|
||||
Blattsalat ; 2,00 # Bildnr:25
|
||||
Bunter Salat; 3,00 # Bildnr:26
|
||||
Deftiges = KBF = 1
|
||||
Mittagsgericht ; 12,00 # Bildnr:28
|
||||
Pasta ; 5,00 # Bildnr:29
|
||||
Kartoffelspalten ; 5,00 # Bildnr:27
|
||||
Rinderroulade ; 6,00 # Bildnr:31
|
||||
Rosenkohl; 3,00 # Bildnr:32
|
||||
Dessert = KBF = 1
|
||||
Mohnkuchen; 1,50 # Bildnr: 8
|
||||
Kuchen all; 1,50 # Bildnr: 1
|
||||
|
@ -37,6 +47,8 @@ Speisen = KBF = 1
|
|||
Schokoteilchen; 3,20 # Bildnr: 21
|
||||
Kirschstreusel; 3,20 # Bildnr: 17
|
||||
Vanilleteilchen; 3,40 # Bildnr: 22
|
||||
Suessigkeitenteller ; 10,00 # Bildnr:33
|
||||
Eliseplätzchen ; 5,00 # Bildnr:30
|
||||
Kategorie Selbstbedienung = F = 1
|
||||
Frühstücksbuffet; 8,00 # Bildnr: 1
|
||||
Frühstücksbuffet + Kaffe; 12,00 # Bildnr: 1
|
||||
|
@ -80,4 +92,4 @@ Getränke = KBD = 1
|
|||
!Sahne # 0,50 ; Tasse Kaffee , Becher Kaffee
|
||||
!Karamellaroma # 0,50 ; Tasse Kaffee , Becher Kaffee , Latte Macchiato
|
||||
!Majo # 0,50 ; Pommes
|
||||
!Ketchup # 0,50 ; Pommes
|
||||
!Ketchup # 0,50 ; Pommes
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
|
|
@ -9,8 +9,8 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/orderstyle.min.css" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
@ -215,7 +215,7 @@ function handleResultOfInstallCheck(is_installed) {
|
|||
if (is_installed == "Yes") {
|
||||
useInstallation();
|
||||
} else {
|
||||
setTimeout(function(){document.location.href = "install.html?v=1.4.18"},500);
|
||||
setTimeout(function(){document.location.href = "install.html?v=1.5.0"},500);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -727,7 +727,7 @@ $(document).ready(function() {
|
|||
<tr id=updateline>
|
||||
<td> </td>
|
||||
<td align=center>
|
||||
<button id="updatebtn">Update -> 1.4.18</button>
|
||||
<button id="updatebtn">Update -> 1.5.0</button>
|
||||
<span id="updateinprogresstxt" style="display:none;">Update... bitte warten.</span>
|
||||
</td>
|
||||
<td> </td>
|
||||
|
|
|
@ -413,7 +413,7 @@ $zones[] = $timezone_identifiers[$i];
|
|||
echo json_encode($zones);
|
||||
} else if ($command == 'update') {
|
||||
set_time_limit(60*30);
|
||||
$installerVersion = "1.4.18";
|
||||
$installerVersion = "1.5.0";
|
||||
|
||||
$admin = new InstallAdmin();
|
||||
$pdo = $admin->openDbAndReturnPdo($_POST['host'],$_POST['db'],$_POST['user'],$_POST['password']);
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
@ -13,8 +13,8 @@
|
|||
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
|
||||
<script src="php/3rdparty/jquery-2.0.3.min.js"></script>
|
||||
<script src="php/3rdparty/jquery.mobile-1.4.0.min.js"></script>
|
||||
<script src="utilities.js"></script>
|
||||
<script src="kitchenbar.js"></script>
|
||||
<script src="utilities.js?v=1.5.0"></script>
|
||||
<script src="kitchenbar.js?v=1.5.0"></script>
|
||||
<style>
|
||||
|
||||
#tableWithEntriesToCook,#tableWithCookedEntries,#headertableToCook
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
@ -74,6 +74,8 @@ var MAN_CUSTOMERS = ["Gäste","Guests","Clientes"];
|
|||
var MAN_MANAGER = ["Verwaltung","Administration","Administración"];
|
||||
var MAN_CLOSINGRIGHT = ["Tageserfassung","Closing","Cerrar día"];
|
||||
var MAN_DASHRIGHT = ["Dashboard","Dashboard","Dashboard"];
|
||||
var MAN_TIMETRACKINGRIGHT = ["Zeiterfassung","Time Tracking","Tiempos de Trabajo"];
|
||||
var MAN_TIMEMANAGERRIGHT = ["Zeitmanagement","Time management","Administrar Tiempos de Trabajo"];
|
||||
var MAN_USER_NAME = ["Benutzername","User name","Nombre de usario"];
|
||||
var MAN_USER_PASS = ["Passwort","Password","Contraseña"];
|
||||
var MAN_YES = ["Ja","Yes","Si"];
|
||||
|
@ -286,7 +288,10 @@ var MAN_STARTPRODSEARCH = ["Starte Produktsuche ab # Zeichen","Start product sea
|
|||
var MAN_DISCOUNTNAME1 = ["Bezeichnung Rabatt 1","Name of discount 1","Nombre del descuento 1"];
|
||||
var MAN_DISCOUNTNAME2 = ["Bezeichnung Rabatt 2","Name of discount 2","Nombre del descuento 2"];
|
||||
var MAN_DISCOUNTNAME3 = ["Bezeichnung Rabatt 3","Name of discount 3","Nombre del descuento 3"];
|
||||
var MAN_TIMETRACKING = ["Zeiterfassung:","Time tracking:","Tiempos de los empleados:"];
|
||||
var MAN_MEMORYLIMIT = ["PHP Memory Limit (MB)","PHP Memory Limit (MB)","PHP Memory Limit (MB)"];
|
||||
var MAN_MINBEFORECOME = ["'Kommen' stempelt Minuten früher","'Come' counts additional minutes earlier","'Venir' añade minutos más temprano"];
|
||||
var MAN_MINAFTERGO = ["'Gehen' stempelt Minuten später","'Go' counts additional minutes later","'Irse' añade minutos despues"];
|
||||
var MAN_UPDATEURL = ["Update-Server","Update server","Servidor de actualizar"];
|
||||
var MAN_TMPDIR = ["PHP-Temp-Verzeichnis","PHP temp directory","PHP Tmp"];
|
||||
var MAN_FTPHOST = ["Ftp-Server","Ftp server","Ftp servidor"];
|
||||
|
@ -409,6 +414,9 @@ var MAN_DAYNAMES = [
|
|||
["Samstag","Saturday","Sábado"],
|
||||
["Sonntag","Sunday","Domingo"]
|
||||
];
|
||||
var MAN_CATEGORY = ["Kategorie","Category","Categoria"];
|
||||
var MAN_FOOD_CAT = ["Speisen","Food","Comidas"];
|
||||
var MAN_DRINKS_CAT = ["Getränke","Drinks","Bebidas"];
|
||||
|
||||
var lang = 0;
|
||||
var generalVals = [12,2,0,3,0,1,1,0,0,1, 0,50,20,10,1,0,0,0,1,0,1,0,0,1,1, 1,1,1,1,1,1,1,1,1,1, 1,2,3, 1,0, 1,0,1, 1,1,0,0, 0,0];
|
||||
|
@ -508,6 +516,8 @@ var generalValuesSettings = [
|
|||
["discountname3",MAN_DISCOUNTNAME3[lang],"i",0,""],
|
||||
|
||||
["memorylimit",MAN_MEMORYLIMIT[lang],"i",0,""],
|
||||
["minbeforecome",MAN_MINBEFORECOME[lang],"i",0,""],
|
||||
["minaftergo",MAN_MINAFTERGO[lang],"i",0,""],
|
||||
["updateurl",MAN_UPDATEURL[lang],"i",0,""],
|
||||
["tmpdir",MAN_TMPDIR[lang],"i",0,""],
|
||||
["ftphost",MAN_FTPHOST[lang],"i",0,""],
|
||||
|
@ -586,6 +596,8 @@ function setLanguage(l) {
|
|||
$("#discountname3txt").html(MAN_DISCOUNTNAME3[l]);
|
||||
|
||||
$("#memorylimittxt").html(MAN_MEMORYLIMIT[l]);
|
||||
$("#minbeforecometxt").html(MAN_MINBEFORECOME[l]);
|
||||
$("#minaftergotxt").html(MAN_MINAFTERGO[l]);
|
||||
$("#updateurltxt").html(MAN_UPDATEURL[l]);
|
||||
$("#tmpdirtxt").html(MAN_TMPDIR[l]);
|
||||
$("#tmpdirhint").html(MAN_TMPDIRHINT[l]);
|
||||
|
@ -660,6 +672,7 @@ function setLanguage(l) {
|
|||
$("#digiprinthint").html(MAN_DIGI_PRINTWORK_HINT[l]);
|
||||
$("#generalsectiontxt").html(MAN_GENSECTION_TXT[l]);
|
||||
$("#mobilviewsectiontxt").html(MAN_MOBILSECTION_TXT[l]);
|
||||
$("#timetrackingtxt").html(MAN_TIMETRACKING[l]);
|
||||
$("#desktopviewsectiontxt").html(MAN_DESKTOP_SECTION_TXT[l]);
|
||||
$("#specialsettingssectiontxt").html(MAN_SPECIAL_SETTINGS_TXT[l]);
|
||||
$("#guestsystemsectiontxt").html(MAN_GUEST_SYSTEM_TXT[l]);
|
||||
|
@ -927,6 +940,8 @@ function insertGeneralConfigItems(configResult) {
|
|||
$("#discountname3").val(values.discountname3);
|
||||
|
||||
$("#memorylimit").val(values.memorylimit);
|
||||
$("#minbeforecome").val(values.minbeforecome);
|
||||
$("#minaftergo").val(values.minaftergo);
|
||||
$("#updateurl").val(values.updateurl);
|
||||
$("#tmpdir").val(values.tmpdir);
|
||||
$("#ftphost").val(values.ftphost);
|
||||
|
@ -1276,7 +1291,7 @@ function initRestoreFileUpload() {
|
|||
} else {
|
||||
alert("Import war erfolgreich.");
|
||||
setTimeout(function(){
|
||||
document.location.href = "index.html?v=1.4.18";
|
||||
document.location.href = "index.html?v=1.5.0";
|
||||
},250);
|
||||
}
|
||||
},
|
||||
|
@ -1485,7 +1500,9 @@ function bindingExports() {
|
|||
window.open("php/contenthandler.php?module=bill&command=exportPdfSummary&" + dateparams,'_blank');
|
||||
} else if (theId == "createlogexport") {
|
||||
window.open("php/contenthandler.php?module=admin&command=exportLog",'_blank');
|
||||
}
|
||||
} else if (theId == "createtimesexport") {
|
||||
window.location.href = "php/contenthandler.php?module=timetracking&command=exportTimesCsv&" + dateparams;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
@ -1814,9 +1831,9 @@ function handleUpdateCheckResult(answer) {
|
|||
|
||||
var millis=getMillis();
|
||||
setTimeout(function(){
|
||||
document.location.href = "install.html?v=1.4.18&mode=onlyupdate&n=" + millis;
|
||||
document.location.href = "install.html?v=1.5.0&mode=onlyupdate&n=" + millis;
|
||||
},250);
|
||||
document.location.href = "install.html?v=1.4.18&mode=onlyupdate&n=" + millis;
|
||||
document.location.href = "install.html?v=1.5.0&mode=onlyupdate&n=" + millis;
|
||||
}
|
||||
|
||||
function handleUpdateReplace(answer) {
|
||||
|
@ -2313,14 +2330,15 @@ function displayReceivedClosings(closingresult) {
|
|||
var cashsum = aClosing.cashsum;
|
||||
var usersums = aClosing.usersums;
|
||||
var taxessums = aClosing.taxessums;
|
||||
var categorysums = aClosing.categorysums;
|
||||
var cashops = aClosing.cashops;
|
||||
|
||||
var closDateTxt = closingDate + ' (' + dayname + ')';
|
||||
|
||||
if (remark != "") {
|
||||
closingParts += createClosingPart(id + ": " + closDateTxt + ": " + remark,id,totalsum,cashsum,usersums,taxessums,cashops);
|
||||
closingParts += createClosingPart(id + ": " + closDateTxt + ": " + remark,id,totalsum,cashsum,usersums,taxessums,categorysums,cashops);
|
||||
} else {
|
||||
closingParts += createClosingPart(id + ": " + closDateTxt,id,totalsum,cashsum,usersums,taxessums,cashops);
|
||||
closingParts += createClosingPart(id + ": " + closDateTxt,id,totalsum,cashsum,usersums,taxessums,categorysums,cashops);
|
||||
}
|
||||
});
|
||||
$("#partofclosings").html(closingParts);
|
||||
|
@ -2431,7 +2449,7 @@ function createCollapsibeOfUser(id,username,roleid,forNewUser,roles) {
|
|||
return collapsiblePart;
|
||||
}
|
||||
|
||||
function createCollapsibeOfRole(id,name,isAdmin,rWaiter,rKitchen,rBar,rSupply,rPay,rStat,rBill,rProd,rReservation,rRating,rChangeprice,rCustomers,rClosing, rDash, rManager,forNewRole) {
|
||||
function createCollapsibeOfRole(id,name,isAdmin,rWaiter,rKitchen,rBar,rSupply,rPay,rStat,rBill,rProd,rReservation,rRating,rChangeprice,rCustomers,rClosing, rDash, rTimetracking, rTimeManager, rManager,forNewRole) {
|
||||
var collapsiblePart = '<div data-role="collapsible" id="' + id + '"';
|
||||
if (forNewRole) {
|
||||
collapsiblePart += ' data-theme="d" data-content-theme="d">';
|
||||
|
@ -2459,6 +2477,8 @@ function createCollapsibeOfRole(id,name,isAdmin,rWaiter,rKitchen,rBar,rSupply,rP
|
|||
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,"timetracking",MAN_TIMETRACKINGRIGHT[lang],possibleValues,rTimetracking);
|
||||
collapsiblePart += createLabelWithOption("rolelabel_",id,"timemanager",MAN_TIMEMANAGERRIGHT[lang],possibleValues,rTimeManager);
|
||||
collapsiblePart += createLabelWithOption("rolelabel_",id,"manager",MAN_MANAGER[lang],possibleValues,rManager);
|
||||
|
||||
if (forNewRole) {
|
||||
|
@ -2534,13 +2554,15 @@ function fillRoleListIntoGui(answer) {
|
|||
aRole.right_customers,
|
||||
aRole.right_closing,
|
||||
aRole.right_dash,
|
||||
aRole.right_timetracking,
|
||||
aRole.right_timemanager,
|
||||
aRole.right_manager,
|
||||
false
|
||||
);
|
||||
}
|
||||
rolesPart += createCollapsibeOfRole(
|
||||
"roleid_newrole",MAN_NEW_ROLE[lang],
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true);
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,true);
|
||||
$("#rolescontentpart").html(rolesPart);
|
||||
|
||||
$("#rolescontentpart").trigger("create");
|
||||
|
@ -2593,7 +2615,9 @@ function collectRoleInfo(roleid) {
|
|||
["rCustomers", "#rolelabel_customers", true,true],
|
||||
["rManager", "#rolelabel_manager", true,true],
|
||||
["rClosing", "#rolelabel_closingright", true,true],
|
||||
["rDash", "#rolelabel_dash", true,true]
|
||||
["rDash", "#rolelabel_dash", true,true],
|
||||
["rTimetracking","#rolelabel_timetracking",true,true],
|
||||
["rTimemanager", "#rolelabel_timemanager", true,true]
|
||||
];
|
||||
|
||||
var data = {};
|
||||
|
@ -2765,7 +2789,7 @@ function invokeCmd(theCommand) {
|
|||
doAjax("GET","php/contenthandler.php?module=admin&command=" + theCommand,null,handleResultOfDbAction,"Problemkommando " . theCommand);
|
||||
}
|
||||
|
||||
function createClosingPart (aText,id,totalsum,cashsum,usersums,taxessums,cashops) {
|
||||
function createClosingPart (aText,id,totalsum,cashsum,usersums,taxessums,categorysums,cashops) {
|
||||
var decpoint = $("#admin-page").data("decpoint");
|
||||
var currency = $("#admin-page").data("currency");
|
||||
var closingPart = '<div data-role="collapsible" data-theme="e" data-content-theme="d">';
|
||||
|
@ -2806,6 +2830,25 @@ function createClosingPart (aText,id,totalsum,cashsum,usersums,taxessums,cashops
|
|||
closingPart += '</table><br>';
|
||||
}
|
||||
|
||||
if (categorysums.length > 0) {
|
||||
closingPart += '<br><table class="categorysums">';
|
||||
closingPart += '<tr><th>' + MAN_CATEGORY[lang] + '<th>' + MAN_BILLSUMALL[lang] + ' (' + currency + ')</tr>';
|
||||
|
||||
for (var i=0;i<categorysums.length;i++) {
|
||||
var aSum = categorysums[i];
|
||||
if (aSum.kind == 0) {
|
||||
closingPart += '<tr><td>' + MAN_FOOD_CAT[lang];
|
||||
} else if (aSum.kind == 1) {
|
||||
closingPart += '<tr><td>' + MAN_DRINKS_CAT[lang];
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
closingPart += '<td>' + aSum.brutto.replace(".", decpoint);
|
||||
closingPart += '</tr>';
|
||||
}
|
||||
closingPart += '</table><br>';
|
||||
}
|
||||
|
||||
closingPart += '<i>' + MAN_CLOSING_INCOME[lang] + ' (' + currency + '):</i> <b>' + (parseFloat(Math.round(totalsum * 100) / 100).toFixed(2)).replace(".", decpoint) + "</b><br>";
|
||||
closingPart += '<i>' + MAN_CLOSING_INCOME_CASH[lang] + ' (' + currency + '):</i> <b>' + (parseFloat(Math.round(cashsum * 100) / 100).toFixed(2)).replace(".", decpoint) + "</b><br>";
|
||||
closingPart += '<p>' + MAN_CLOSING_DET_TXT[lang] + '</p>';
|
||||
|
@ -3255,6 +3298,7 @@ $(document).on("pageinit", "#admin-page", function () {
|
|||
<button type="submit" data-theme="f" class="cancelButton exportbtn" data-icon="check" id="createprodexport">Export Produktdaten</button>
|
||||
<button type="submit" data-theme="f" class="cancelButton exportbtn" data-icon="check" id="createuserexport">Export Benutzerdaten</button>
|
||||
<button type="submit" data-theme="f" class="cancelButton exportbtn" data-icon="check" id="createconfigexport">Export Konfiguration</button>
|
||||
<button type="submit" data-theme="f" class="cancelButton exportbtn" data-icon="check" id="createtimesexport">Export Zeiterfassung</button>
|
||||
<button type="submit" data-theme="f" class="cancelButton exportbtn" data-icon="check" id="createlogexport">Export Log</button>
|
||||
</form>
|
||||
</div><!-- Datenexport -->
|
||||
|
@ -3467,7 +3511,7 @@ $(document).on("pageinit", "#admin-page", function () {
|
|||
<input type="text" value="" data-mini="true" placeholder="EUR" id="hscurrency" data-theme="c" class="genConfigEl"/>
|
||||
</div>
|
||||
<div data-role="fieldcontain">
|
||||
<label for="hs3refresh"><span id="hs3refreshtxt">PHP Memory Limit:</span></label>
|
||||
<label for="hs3refresh"><span id="hs3refreshtxt">HS/3 Refresh:</span></label>
|
||||
<input type="text" value="" data-mini="true" placeholder="60" id="hs3refresh" data-theme="c" class="genConfigEl"/>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -3546,6 +3590,16 @@ $(document).on("pageinit", "#admin-page", function () {
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<br><b><u><span id="timetrackingtxt">Zeitmanagement</span></u></b><br><br>
|
||||
<div data-role="fieldcontain">
|
||||
<label for="minbeforecome"><span id="minbeforecometxt">Stempelminuten früher:</span></label>
|
||||
<input type="text" value="" data-mini="true" placeholder="0" id="minbeforecome" data-theme="c" class="genConfigEl"/>
|
||||
</div>
|
||||
<div data-role="fieldcontain">
|
||||
<label for="minaftergo"><span id="minaftergotxt">Stempelminuten später</span></label>
|
||||
<input type="text" value="" data-mini="true" placeholder="0" id="minaftergo" data-theme="c" class="genConfigEl"/>
|
||||
</div>
|
||||
|
||||
<br><b><u><span id="mobilviewsectiontxt">MOBILANSICHT</span></u></b><br><br>
|
||||
|
||||
<div id="partOfProminentSearch"></div>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
|
|
@ -497,9 +497,7 @@ class Admin {
|
|||
|
||||
|
||||
$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();
|
||||
$result = CommonUtils::fetchSqlAll($pdo, $sql, array($userid));
|
||||
|
||||
$numberOfEntries = count($result);
|
||||
if ($numberOfEntries == 1) {
|
||||
|
@ -555,7 +553,7 @@ class Admin {
|
|||
$zeile['right_bar'],$zeile['right_supply'],$zeile['right_paydesk'],
|
||||
$zeile['right_statistics'],$zeile['right_bill'],$zeile['right_products'],
|
||||
$zeile['right_reservation'],$zeile['right_changeprice'],$zeile['right_customers'],$zeile['right_manager'],
|
||||
$zeile['right_closing'],$zeile['right_dash']);
|
||||
$zeile['right_closing'],$zeile['right_dash'],$zeile['right_timetracking'],$zeile['right_timemanager']);
|
||||
$right_rating = $zeile['right_rating'];
|
||||
|
||||
if (self::isOnlyRatingUser($rights,$right_rating, 1)) {
|
||||
|
@ -576,6 +574,8 @@ class Admin {
|
|||
$_SESSION['right_manager'] = false;
|
||||
$_SESSION['right_closing'] = false;
|
||||
$_SESSION['right_dash'] = false;
|
||||
$_SESSION['right_timetracking'] = false;
|
||||
$_SESSION['right_timemanager'] = false;
|
||||
$_SESSION['keeptypelevel'] = false;
|
||||
} else {
|
||||
$_SESSION['is_admin'] = ($zeile['is_admin'] == 1 ? true : false);
|
||||
|
@ -600,6 +600,8 @@ class Admin {
|
|||
$_SESSION['right_manager'] = ($zeile['right_manager'] == 1 ? true : false);
|
||||
$_SESSION['right_closing'] = ($zeile['right_closing'] == 1 ? true : false);
|
||||
$_SESSION['right_dash'] = ($zeile['right_dash'] == 1 ? true : false);
|
||||
$_SESSION['right_timetracking'] = ($zeile['right_timetracking'] == 1 ? true : false);
|
||||
$_SESSION['right_timemanager'] = ($zeile['right_timemanager'] == 1 ? true : false);
|
||||
$_SESSION['keeptypelevel'] = ($zeile['keeptypelevel'] == 1 ? true : false);
|
||||
}
|
||||
|
||||
|
@ -607,7 +609,7 @@ class Admin {
|
|||
$_SESSION['right_bar'], $_SESSION['right_supply'], $_SESSION['right_paydesk'], $_SESSION['right_statistics'],
|
||||
$_SESSION['right_bill'], $_SESSION['right_products'], $_SESSION['right_reservation'], $_SESSION['right_rating'],
|
||||
$_SESSION['right_changeprice'], $_SESSION['right_customers'],$_SESSION['right_manager'], $_SESSION['right_closing'],
|
||||
$_SESSION['right_dash']);
|
||||
$_SESSION['right_dash'],$_SESSION['right_timetracking'],$_SESSION['right_timemanager']);
|
||||
|
||||
$assoc = array ("0" => "roombtnsize","1" => "tablebtnsize","2" => "prodbtnsize");
|
||||
|
||||
|
@ -1124,6 +1126,8 @@ class Admin {
|
|||
$discountname3 = trim(CommonUtils::getConfigValueStmt($pdo,$stmt, "discountname3", ''));
|
||||
|
||||
$memorylimit = CommonUtils::getConfigValueStmt($pdo,$stmt,"memorylimit",256);
|
||||
$minbeforecome = CommonUtils::getConfigValueStmt($pdo,$stmt,"minbeforecome",0);
|
||||
$minaftergo = CommonUtils::getConfigValueStmt($pdo,$stmt,"minaftergo",0);
|
||||
$updateurl = CommonUtils::getConfigValueStmt($pdo,$stmt,"updateurl","");
|
||||
$tmpdir = CommonUtils::getConfigValueStmt($pdo,$stmt,"tmpdir","");
|
||||
$ftphost = CommonUtils::getConfigValueStmt($pdo,$stmt,"ftphost","");
|
||||
|
@ -1169,6 +1173,7 @@ class Admin {
|
|||
"webimpressum" => $webimpressum, "cancelunpaidcode" => $cancelunpaidcode, "cancelguestcode" => $cancelguestcode, "discount1" => $discount1,"discount2" => $discount2,"discount3" => $discount3,
|
||||
"austria" => $austria, "digigopaysetready" => $digigopaysetready, "waitergopayprint" => $waitergopayprint, "oneprodworkrecf" => $oneprodworkrecf, "oneprodworkrecd" => $oneprodworkrecd,
|
||||
"digiprintwork" => $digiprintwork, "memorylimit" => $memorylimit, "updateurl" => $updateurl, "tmpdir" => $tmpdir, "hs3refresh" => $hs3refresh,
|
||||
"minbeforecome" => $minbeforecome, "minaftergo" => $minaftergo,
|
||||
"paydeskid" => $paydeskid, "aeskey" => $aeskey, "certificatesn" => $certificatesn, "rksvserver" => $rksvserver, "addreceipttoprinter" => $addreceipttoprinter,
|
||||
"printandqueuejobs" => $printandqueuejobs, "cashenabled" => $cashenabled, "returntoorder" => $returntoorder, "beepcooked" => $beepcooked,"beepordered" => $beepordered, "restaurantmode" => $restaurantmode,
|
||||
"discountname1" => $discountname1,"discountname2" => $discountname2,"discountname3" => $discountname3, "dblog" => $dblog,"startprodsearch" => $startprodsearch,
|
||||
|
@ -1257,7 +1262,8 @@ class Admin {
|
|||
"rating.html" => 'right_rating',
|
||||
"customers.html" => 'right_customers',
|
||||
"waiterdesktop.php" => 'right_waiter',
|
||||
"dash.php" => 'right_dash'
|
||||
"dash.php" => 'right_dash',
|
||||
"timetracking.html" => 'right_timetracking'
|
||||
);
|
||||
|
||||
$valid = false;
|
||||
|
@ -1276,7 +1282,7 @@ class Admin {
|
|||
$view = "preferences.html";
|
||||
}
|
||||
|
||||
echo json_encode($view . "?v=1.4.18");
|
||||
echo json_encode($view . "?v=1.5.0");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1464,6 +1470,7 @@ class Admin {
|
|||
$lang = $_SESSION['language'];
|
||||
$waiterdesktxt = array("Kellneransicht","Waiter's View","Vista de camareros");
|
||||
$kitchentxt = array("Küche","Kitchen","Cocina");
|
||||
$timetrackingtxt = array("Zeiterfassung","Time tracking","Tiempos");
|
||||
$waitertxt = array("Bestellung","Orderdesk","Camarero");
|
||||
$paydesktxt = array("Kasse","Paydesk","Caja");
|
||||
$settingtxt = array("Einstellungen","Preferences","Propriedades");
|
||||
|
@ -1482,32 +1489,33 @@ class Admin {
|
|||
$_SESSION['right_bar'],$_SESSION['right_supply'],$_SESSION['right_paydesk'],
|
||||
$_SESSION['right_statistics'],$_SESSION['right_bill'],$_SESSION['right_products'],
|
||||
$_SESSION['right_reservation'],$_SESSION['right_changeprice'],$_SESSION['right_customers'],
|
||||
$_SESSION['right_manager'],$_SESSION['right_closing'],$_SESSION['right_dash']);
|
||||
$_SESSION['right_manager'],$_SESSION['right_closing'],$_SESSION['right_dash'],$_SESSION['right_timetracking'],$_SESSION['right_timemanager']);
|
||||
$right_rating = $_SESSION['right_rating'];
|
||||
|
||||
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.4.18"); };
|
||||
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waitertxt[$lang], "link" => "waiter.html?v=1.5.0"); }
|
||||
} else {
|
||||
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.4.18"); };
|
||||
if ($_SESSION['right_waiter']) { $mainMenu[] = array("name" => $waiterdesktxt[$lang], "link" => "waiterdesktop.php?v=1.5.0"); }
|
||||
}
|
||||
if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_kitchen']) { $mainMenu[] = array("name" => $kitchentxt[$lang], "link" => "kitchen.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_bar']) { $mainMenu[] = array("name" => "Bar", "link" => "bar.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_supply']) { $mainMenu[] = array("name" => $supplytxt[$lang], "link" => "supplydesk.html?v=1.5.0"); }
|
||||
if ($_SESSION['modus'] == 0) {
|
||||
if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_paydesk']) { $mainMenu[] = array("name" => $paydesktxt[$lang], "link" => "paydesk.html?v=1.5.0"); }
|
||||
}
|
||||
if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.4.18"); };
|
||||
if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.4.18"); };
|
||||
if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.4.18"); };
|
||||
$mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.4.18");
|
||||
$mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.4.18");
|
||||
$mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.4.18");
|
||||
if ($_SESSION['right_statistics']) { $mainMenu[] = array("name" => $stattxt[$lang], "link" => "reports.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_bill']) { $mainMenu[] = array("name" => $bontxt[$lang], "link" => "bill.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_products']) { $mainMenu[] = array("name" => $prodtxt[$lang], "link" => "products.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_reservation']) { $mainMenu[] = array("name" => $restxt[$lang], "link" => "reservation.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_rating']) { $mainMenu[] = array("name" => $ratingtxt[$lang], "link" => "rating.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_customers']) { $mainMenu[] = array("name" => $customerstxt[$lang], "link" => "customers.html?v=1.5.0"); }
|
||||
if ($_SESSION['right_dash']) { $mainMenu[] = array("name" => $dashtxt[$lang], "link" => "dash.php?v=1.5.0"); }
|
||||
if ($_SESSION['right_manager'] || $_SESSION['is_admin'] || $_SESSION['right_closing']) { $mainMenu[] = array("name" => $admintxt[$lang], "link" => "manager.html?v=1.5.0"); }
|
||||
$mainMenu[] = array("name" => $settingtxt[$lang], "link" => "preferences.html?v=1.5.0");
|
||||
if ($_SESSION['right_timetracking'] || $_SESSION['right_timemanager']) { $mainMenu[] = array("name" => $timetrackingtxt[$lang], "link" => "timetracking.html?v=1.5.0"); }
|
||||
$mainMenu[] = array("name" => "Hilfe", "link" => "help.php?v=1.5.0");
|
||||
$mainMenu[] = array("name" => "Feedback", "link" => "feedback.html?v=1.5.0");
|
||||
}
|
||||
|
||||
$mainMenu[] = array("name" => $logout[$lang], "link" => "logout.php");
|
||||
|
@ -2036,6 +2044,8 @@ class Admin {
|
|||
"discountname3" => array("dbcol" => "discountname3","checknum" => 0),
|
||||
|
||||
"memorylimit" => array("dbcol" => "memorylimit","checknum" => 0),
|
||||
"minbeforecome" => array("dbcol" => "minbeforecome","checknum" => 0),
|
||||
"minaftergo" => array("dbcol" => "minaftergo","checknum" => 0),
|
||||
"updateurl" => array("dbcol" => "updateurl","checknum" => 0),
|
||||
"tmpdir" => array("dbcol" => "tmpdir","checknum" => 0),
|
||||
"ftphost" => array("dbcol" => "ftphost","checknum" => 0),
|
||||
|
@ -2096,6 +2106,30 @@ class Admin {
|
|||
}
|
||||
}
|
||||
}
|
||||
if ($name == "minbeforecome") {
|
||||
$aVal = trim($aVal);
|
||||
if ($aVal != "-1") {
|
||||
if (!ctype_digit($aVal)) {
|
||||
$aVal = "0";
|
||||
}
|
||||
$aVal = intval($aVal);
|
||||
if ($aVal < 0) {
|
||||
$aVal = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($name == "minaftergo") {
|
||||
$aVal = trim($aVal);
|
||||
if ($aVal != "-1") {
|
||||
if (!ctype_digit($aVal)) {
|
||||
$aVal = "0";
|
||||
}
|
||||
$aVal = intval($aVal);
|
||||
if ($aVal < 0) {
|
||||
$aVal = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($name == "guesttimeout") {
|
||||
if (is_numeric($aVal)) {
|
||||
|
@ -2397,11 +2431,11 @@ class Admin {
|
|||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
$this->writeCsvHeader("datenexport-benutzer.csv");
|
||||
|
||||
echo("Eintragsid; Datum ; Benutzerid; Benutzername; Adminrechte; Kellnerrechte;Kuechenrechte; Barrechte; Bereitstellungsrechte; Kassenrechte; Reportrechte; Kassenbonrechte; Angebotsrechte; Beurteilungsrechte; Preisänderungsrechte; Gästerechte; Tageserfassungsrecht; Dashboardrechte; Managerrechte; Aktiviert\n");
|
||||
echo("Eintragsid; Datum ; Benutzerid; Benutzername; Adminrechte; Kellnerrechte;Kuechenrechte; Barrechte; Bereitstellungsrechte; Kassenrechte; Reportrechte; Kassenbonrechte; Angebotsrechte; Beurteilungsrechte; Preisänderungsrechte; Gästerechte; Tageserfassungsrecht; Dashboardrechte; Zeiterfassung; Zeitmanagement; Managerrechte; Aktiviert\n");
|
||||
|
||||
$sql = "SELECT DISTINCT %hist%.id as id,date,";
|
||||
$sql .= "IFNULL(userid,'') as userid,IFNULL(username,'') as username,is_admin,right_waiter,right_kitchen,right_bar,right_supply,";
|
||||
$sql .= "right_paydesk,right_statistics,right_bill,right_products,right_rating,right_changeprice,right_customers,right_closing,right_dash,right_manager,active,";
|
||||
$sql .= "right_paydesk,right_statistics,right_bill,right_products,right_rating,right_changeprice,right_customers,right_closing,right_dash,right_timetracking,right_timemanager,right_manager,active,";
|
||||
$sql .= "description ";
|
||||
$sql .= " FROM %hist%, %histuser%, %histactions% ";
|
||||
$sql .= " WHERE (refid=%histuser%.id) ";
|
||||
|
@ -2432,12 +2466,14 @@ class Admin {
|
|||
$val16 = ($zeile['right_customers'] == '1' ? "Ja" : "Nein");
|
||||
$val17 = ($zeile['right_closing'] == '1' ? "Ja" : "Nein");
|
||||
$val18 = ($zeile['right_dash'] == '1' ? "Ja" : "Nein");
|
||||
$val19 = ($zeile['right_manager'] == '1' ? "Ja" : "Nein");
|
||||
$val20 = ($zeile['active'] == '1' ? "Ja" : "Nein");
|
||||
$val21 = $zeile['description'];
|
||||
$val19 = ($zeile['right_timetracking'] == '1' ? "Ja" : "Nein");
|
||||
$val20 = ($zeile['right_timemanager'] == '1' ? "Ja" : "Nein");
|
||||
$val21 = ($zeile['right_manager'] == '1' ? "Ja" : "Nein");
|
||||
$val22 = ($zeile['active'] == '1' ? "Ja" : "Nein");
|
||||
$val23 = $zeile['description'];
|
||||
|
||||
echo "$val1; $val2; $val3; $val4; $val5; $val6; $val7; $val8; $val9; $val10;";
|
||||
echo "$val11;$val12;$val13;$val14;$val15;$val16;$val17;$val18;$val19;$val20; $val21\n";
|
||||
echo "$val11;$val12;$val13;$val14;$val15;$val16;$val17;$val18;$val19;$val20; $val21; $val22; $val23\n";
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2476,13 +2512,13 @@ class Admin {
|
|||
|
||||
private function getAllTablesToBackupRestore() {
|
||||
return array("closing","logo","printjobs","ratings","work","payment","room","resttables","tablepos","tablemaps","pricelevel","prodtype","prodimages","products","config",
|
||||
"roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","records","recordsqueue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist",
|
||||
"roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","times","records","recordsqueue","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",
|
||||
"roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","records","recordsqueue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist",
|
||||
"roles","user","reservations","customers","groups","groupcustomer","vacations","bill","customerlog","queue","times","records","recordsqueue","billproducts","hsin","hsout","comments","histprod","histconfig","histuser","histactions","hist",
|
||||
"extras","extrasprods","queueextras");
|
||||
}
|
||||
|
||||
|
@ -3138,6 +3174,11 @@ class Admin {
|
|||
|
||||
try {
|
||||
self::doSql($pdo, "DELETE FROM %customerlog%", null);
|
||||
|
||||
self::doSql($pdo, "DELETE FROM %times%", null);
|
||||
|
||||
self::doSql($pdo, "DELETE FROM %recordsqueue%", null);
|
||||
self::doSql($pdo, "DELETE FROM %records%", null);
|
||||
|
||||
self::doSql($pdo, "DELETE FROM %hist%", null);
|
||||
self::doSql($pdo, "DELETE FROM %histprod%", null);
|
||||
|
|
|
@ -903,6 +903,9 @@ class Bill {
|
|||
$stmt->execute(array($aQueueid,$refIdOfStornoEntry));
|
||||
}
|
||||
|
||||
if ($tableid == 0) {
|
||||
$tableid = null;
|
||||
}
|
||||
$sql = "INSERT INTO %records% (date,userid,tableid,action) VALUES(?,?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($currentTime,$userIdOfStornoUser,$tableid,$recordaction));
|
||||
$recordid = $pdo->lastInsertId();
|
||||
|
|
|
@ -345,6 +345,16 @@ $row = $stmt->fetchObject();
|
|||
return ($row->cashsum);
|
||||
}
|
||||
|
||||
private function getCategoriasBruttoOfClosing($pdo,$closingid) {
|
||||
$sql = "SELECT SUM(price) as brutto,kind FROM %queue% Q,%bill%,%closing%,%prodtype% T,%products% P ";
|
||||
$sql .= " WHERE billid=%bill%.id AND %bill%.closingid=%closing%.id AND closingid=? ";
|
||||
$sql .= " AND Q.productid=P.id AND P.category=T.id ";
|
||||
$sql .= " GROUP BY kind";
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
$stmt->execute(array($closingid));
|
||||
return ($stmt->fetchAll(PDO::FETCH_OBJ));
|
||||
}
|
||||
|
||||
/*
|
||||
* Get all closings that are requested:
|
||||
* if month and year is null or empty ==> last 30 closings
|
||||
|
@ -375,9 +385,10 @@ $totalSum = $this->getSumOfBillsWithClosingId($pdo,$theId, false);
|
|||
$cashSum = $this->getSumOfBillsWithClosingId($pdo,$theId, true);
|
||||
$userSums = $this->getUserGroupedSumOfClosing($pdo, $theId);
|
||||
$taxessums = $this->getTaxesGroupedOfClosing($pdo,$theId);
|
||||
$categorysums = $this->getCategoriasBruttoOfClosing($pdo,$theId);
|
||||
$cashops = $this->getCashOpsOfClosing($pdo,$theId);
|
||||
$daynameno = date('N', strtotime($closingDate));
|
||||
$closingEntry = array("id" => $theId, "closingDate" => $closingDate, "daynameno" => $daynameno, "remark" => $remark, "totalsum" => $totalSum, "cashsum" => $cashSum, "usersums" => $userSums, "taxessums" => $taxessums,"cashops" => $cashops);
|
||||
$closingEntry = array("id" => $theId, "closingDate" => $closingDate, "daynameno" => $daynameno, "remark" => $remark, "totalsum" => $totalSum, "cashsum" => $cashSum, "usersums" => $userSums, "taxessums" => $taxessums, "categorysums" => $categorysums, "cashops" => $cashops);
|
||||
$resultarray[] = $closingEntry;
|
||||
}
|
||||
|
||||
|
@ -561,7 +572,7 @@ header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
|||
header("Pragma: no-cache");
|
||||
header("Expires: 0");
|
||||
|
||||
$csv .= $this->t['ID'][$l] . ";" . $this->t['Date'][$l] . ";" . $this->t['Tablename'][$l] . ";" . $this->t['Prod'][$l] . ";" . $this->t['Option'][$l] . ";" . $this->t['Brutto'][$l] . "($currency);";
|
||||
$csv .= $this->t['ID'][$l] . ";" . $this->t['Date'][$l] . ";" . $this->t['Tablename'][$l] . ";" . $this->t['Prod'][$l] . ";" . $this->t['Category'][$l] . ";" . $this->t['Option'][$l] . ";" . $this->t['Brutto'][$l] . "($currency);";
|
||||
$csv .= $this->t['Netto'][$l] . "($currency);";
|
||||
$csv .= $this->t['Tax'][$l] . ";";
|
||||
$csv .= $this->t['PayWay'][$l] . ";";
|
||||
|
@ -637,6 +648,7 @@ $retValues[] = array (
|
|||
"tablename" => '',
|
||||
"paidtime" => $billdate,
|
||||
"productname" => $this->t['cashaction'][$l], // Kassenaktion
|
||||
"kind" => "-",
|
||||
"option" => '',
|
||||
"price" => $brutto,
|
||||
"netto" => $netto,
|
||||
|
@ -647,18 +659,18 @@ $retValues[] = array (
|
|||
"status" => $statusTxt,
|
||||
"ref" => $ref);
|
||||
if ($doCsvExport || $onlyresultreturn) {
|
||||
$csv .= "$aBillId; \"$billdate\" ; \"$tablename\" ; \"" . $this->t['cashaction'][$l] . "\" ; \"$brutto\" ; \"$netto\" ; \"$tax\" ; \"$paymentArray[$paymentid]\";$userid; \"$username\"; \"$statusTxt\"; $ref\n";
|
||||
$csv .= "$aBillId; \"$billdate\" ; \"$tablename\" ; \"" . $this->t['cashaction'][$l] . "\" ; - ; \"\" ; \"$brutto\" ; \"$netto\" ; \"$tax\" ; \"$paymentArray[$paymentid]\";$userid; \"$username\"; \"$statusTxt\"; $ref\n";
|
||||
}
|
||||
} else {
|
||||
|
||||
$sql = "SELECT DISTINCT productname,price,%queue%.tax as tax,anoption FROM %queue%,%billproducts% WHERE %billproducts%.billid=? AND %billproducts%.queueid=%queue%.id";
|
||||
$sql = "SELECT DISTINCT productname,price,Q.tax as tax,anoption,kind FROM %queue% Q,%billproducts%,%prodtype%,%products% P WHERE %billproducts%.billid=? AND %billproducts%.queueid=Q.id AND Q.productid=P.id AND P.category=%prodtype%.id";
|
||||
if ($status == 'x') {
|
||||
$statusTxt = $this->t["laterCancelled"][$l];
|
||||
} else if ($status == 's') {
|
||||
$statusTxt = $this->t["storno"][$l];
|
||||
} else {
|
||||
$statusTxt = "";
|
||||
$sql = "SELECT productname,anoption,paidtime,price,tax FROM %queue% WHERE billid=?";
|
||||
$sql = "SELECT productname,anoption,paidtime,price,Q.tax as tax,kind FROM %queue% Q,%prodtype%,%products% P WHERE billid=? AND Q.productid=P.id AND P.category=%prodtype%.id";
|
||||
}
|
||||
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
|
@ -668,6 +680,10 @@ foreach ($result as $zeile) {
|
|||
$productname = $zeile['productname'];
|
||||
$option = $zeile['anoption'];
|
||||
$tax = $zeile['tax'];
|
||||
$kind = "Speise";
|
||||
if ($zeile['kind'] == 1) {
|
||||
$kind = "Getraenk";
|
||||
}
|
||||
|
||||
$paidtime = ($billdate == null ? "" : $billdate) ;
|
||||
$price = ($status == 's' ? 0.0-floatval($zeile['price']) : $zeile['price']);
|
||||
|
@ -682,6 +698,7 @@ $retValues[] = array (
|
|||
"tablename" => $tablename,
|
||||
"paidtime" => $paidtime,
|
||||
"productname" => $productname,
|
||||
"kind" => $kind,
|
||||
"option" => $option,
|
||||
"price" => $price,
|
||||
"netto" => $netto,
|
||||
|
@ -694,7 +711,7 @@ $retValues[] = array (
|
|||
$productname = str_replace('"','""',$productname);
|
||||
$option = str_replace('"','""',$option);
|
||||
if ($doCsvExport || $onlyresultreturn) {
|
||||
$csv .= "$aBillId; \"$paidtime\" ; \"$tablename\" ; \"$productname\" ; \"$option\" ; \"$price\" ; \"$netto\" ; \"$formattedtax\" ; \"$paymentArray[$paymentid]\"; $userid; \"$username\"; \"$statusTxt\"; $ref\n";
|
||||
$csv .= "$aBillId; \"$paidtime\" ; \"$tablename\" ; \"$productname\" ; \"$kind\" ; \"$option\" ; \"$price\" ; \"$netto\" ; \"$formattedtax\" ; \"$paymentArray[$paymentid]\"; $userid; \"$username\"; \"$statusTxt\"; $ref\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@ require_once ('workreceipts.php');
|
|||
require_once ('utilities/Logger.php');
|
||||
require_once ('utilities/roles.php');
|
||||
require_once ('guestsync.php');
|
||||
require_once ('timetracking.php');
|
||||
|
||||
$module = $_GET["module"];
|
||||
$command = $_GET["command"];
|
||||
|
@ -79,6 +80,8 @@ if ($module == 'admin') {
|
|||
$updater->handleCommand($command);
|
||||
} else if ($module == 'guestsync') {
|
||||
Guestsync::handleCommand($command);
|
||||
} else if ($module == 'timetracking') {
|
||||
Timetracking::handleCommand($command);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -117,6 +117,7 @@ class DbUtils {
|
|||
$out = str_replace("%roles%",$prefix . 'roles', $out);
|
||||
$out = str_replace("%recordsqueue%",$prefix . 'recordsqueue', $out);
|
||||
$out = str_replace("%records%",$prefix . 'records', $out);
|
||||
$out = str_replace("%times%",$prefix . 'times', $out);
|
||||
|
||||
return (str_replace("%prodtype%",$prefix . 'prodtype',$out));
|
||||
}
|
||||
|
@ -160,6 +161,8 @@ class DbUtils {
|
|||
array("col" => 'right_manager', "hist" => 1, "new" => 'rManager', "update" => 'rManager'),
|
||||
array("col" => 'right_closing', "hist" => 1, "new" => 'rClosing', "update" => 'rClosing'),
|
||||
array("col" => 'right_dash', "hist" => 1, "new" => 'rDash', "update" => 'rDash'),
|
||||
array("col" => 'right_timetracking',"hist" => 1, "new" => 'rTimetracking', "update" => 'rTimetracking'),
|
||||
array("col" => 'right_timemanager', "hist" => 1, "new" => 'rTimemanager', "update" => 'rTimemanager'),
|
||||
array("col" => 'active', "hist" => 1, "new" => null ,"default" => 1, "update" => null),
|
||||
array("col" => 'lastmodule', "hist" => 0, "new" => null ,"default" => null, "update" => null),
|
||||
array("col" => 'ordervolume', "hist" => 0, "new" => null ,"default" => null, "update" => null),
|
||||
|
|
|
@ -27,7 +27,7 @@ if (isset($_POST["cmd"])) {
|
|||
if (strlen($status) > 150) {
|
||||
$status = substr($status, 0,149);
|
||||
}
|
||||
$version = "1.4.18";
|
||||
$version = "1.5.0";
|
||||
|
||||
$arr = array("cmd" => $cmd,"fct" => $fct, "xhr" => $xhr,"errormsg" => $errormsg,"status" => $status,"version" => $version,"phpversion" => $phpversion);
|
||||
} else {
|
||||
|
|
|
@ -41,8 +41,8 @@ class Products {
|
|||
|
||||
$cmdArray = array('showDbProducts', 'getMenuLevelUp', 'applySingleProdData', 'createExtra', 'applyExtra', 'upExtra', 'delExtra','sortup','sortdown', 'delproduct',
|
||||
'reassign', 'applyType', 'delType', 'getSingleProdData', 'getSingleTypeData', 'getPriceLevelInfo','setPriceLevelInfo', 'createProduct','createProdType',
|
||||
'addGeneralComment','changeGeneralComment','delGeneralComment','upGeneralComment','downGeneralComment','sortProdAlpha','getOnlyAllProds','loadprodimage',
|
||||
'deleteImageProdAssignment');
|
||||
'addGeneralComment','changeGeneralComment','delGeneralComment','upGeneralComment','downGeneralComment','sortProdAlpha','getOnlyAllProds','loadprodimage','loadfullprodimageset',
|
||||
'deleteImageProdAssignment','cleanprodimagestable','getkeynames','assignProdImageToKey','prodimghmlexport');
|
||||
if (in_array($command, $cmdArray)) {
|
||||
if (!($this->userrights->hasCurrentUserRight('right_products'))) {
|
||||
if ($command == 'createProdType') {
|
||||
|
@ -153,6 +153,8 @@ class Products {
|
|||
$this->deleteImageProdAssignment($_POST['prodid']);
|
||||
} else if ($command == 'loadprodimage') {
|
||||
$this->loadprodimage();
|
||||
} else if ($command == 'loadfullprodimageset') {
|
||||
$this->loadfullprodimageset();
|
||||
} else if ($command == 'getprodimage') {
|
||||
if ($_GET['prodid']) {
|
||||
$size = 'h';
|
||||
|
@ -165,6 +167,14 @@ class Products {
|
|||
}
|
||||
} else if ($command == 'prodimghmlexport') {
|
||||
self::exportImgHml();
|
||||
} else if ($command == 'cleanprodimagestable') {
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
self::cleanProdImagesTable($pdo);
|
||||
echo json_encode(array("status" => "OK"));
|
||||
} else if ($command == 'assignProdImageToKey') {
|
||||
self::assignProdImageToKey($_POST['prodid'],$_POST['prodimageid']);
|
||||
} else if ($command == 'getkeynames') {
|
||||
self::getkeynames();
|
||||
} else {
|
||||
echo "Command not supported.";
|
||||
}
|
||||
|
@ -191,10 +201,19 @@ class Products {
|
|||
);
|
||||
|
||||
public static function exportImgHml() {
|
||||
$file_name = "bilddaten.ocs";
|
||||
header("Content-type: text/x-csv");
|
||||
header("Content-Disposition: attachment; filename=$file_name");
|
||||
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
|
||||
header("Pragma: no-cache");
|
||||
header("Expires: 0");
|
||||
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
$sql = "SELECT imgh,imgm,imgl from %prodimages% where id='24'";
|
||||
$sql = "SELECT id,keyname,imgh,imgm,imgl from %prodimages% order by id";
|
||||
$result = CommonUtils::fetchSqlAll($pdo, $sql, null);
|
||||
echo $result[0]['imgh'] . ";" . $result[0]['imgm'] . ";" . $result[0]['imgl'];
|
||||
for ($i=0;$i<count($result);$i++) {
|
||||
echo ($i+1) . ";" . $result[$i]['keyname'] . ';' . $result[$i]['imgh'] . ";" . $result[$i]['imgm'] . ";" . $result[$i]['imgl'] . "\n";
|
||||
}
|
||||
}
|
||||
function getDateValueAsBoolInterpretatedIcon($aValue) {
|
||||
if ($aValue != '0' ) {
|
||||
|
@ -1092,7 +1111,6 @@ class Products {
|
|||
$pdo = $this->dbutils->openDbAndReturnPdo();
|
||||
$pdo->beginTransaction();
|
||||
$this->sorter->delproduct($pdo, $prodid);
|
||||
self::cleanProdImagesTable($pdo);
|
||||
$pdo->commit();
|
||||
|
||||
echo json_encode("OK");
|
||||
|
@ -1213,6 +1231,25 @@ class Products {
|
|||
return $retStr;
|
||||
}
|
||||
|
||||
private static function getkeynames() {
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
$sql = "SELECT id,keyname FROM %prodimages% ORDER BY keyname";
|
||||
$result = CommonUtils::fetchSqlAll($pdo, $sql, null);
|
||||
echo json_encode(array("status" => "OK","msg" => $result));
|
||||
}
|
||||
|
||||
private static function assignProdImageToKey($prodid,$prodimageid) {
|
||||
try {
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
$sql = "UPDATE %products% SET prodimageid=? WHERE id=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($prodimageid,$prodid));
|
||||
$ret = array("status" => "OK","prodid" => $prodid);
|
||||
echo json_encode($ret);
|
||||
} catch (Exception $ex) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => $ex->getMessage()));
|
||||
}
|
||||
|
||||
}
|
||||
public static function cleanProdImagesTable($pdo) {
|
||||
$sql = "UPDATE %products% SET prodimageid=? WHERE removed is not null";
|
||||
CommonUtils::execSql($pdo, $sql, array(null));
|
||||
|
@ -1307,7 +1344,6 @@ class Products {
|
|||
try{
|
||||
$sql = "UPDATE %products% SET prodimageid=? WHERE id=?";
|
||||
CommonUtils::execSql($pdo, $sql, array(null,$prodid));
|
||||
self::cleanProdImagesTable($pdo);
|
||||
HistFiller::updateProdInHist($pdo, $prodid);
|
||||
$pdo->commit();
|
||||
} catch (Exception $ex) {
|
||||
|
@ -1349,15 +1385,29 @@ class Products {
|
|||
$pdo->beginTransaction();
|
||||
|
||||
try {
|
||||
$sql = "INSERT INTO %prodimages% (imgh,imgm,imgl) VALUES(?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($imageBaseh_64,$imageBasem_64,$imageBasel_64));
|
||||
$prodimageid = $pdo->lastInsertId();
|
||||
$sql = "SELECT SUBSTRING(REPLACE(longname,';','_'),1,30) as longname FROM %products% WHERE id=?";
|
||||
$prodnameResult = CommonUtils::fetchSqlAll($pdo, $sql, array($prodid));
|
||||
$keyname = "Bild_" . $prodid;
|
||||
if (count($prodnameResult) > 0) {
|
||||
$keyname = $prodnameResult[0]['longname'];
|
||||
}
|
||||
|
||||
$sql = "SELECT id FROM %prodimages% WHERE keyname=?";
|
||||
$res = CommonUtils::fetchSqlAll($pdo, $sql, array($keyname));
|
||||
if (count($res) > 0) {
|
||||
$sql = "UPDATE %prodimages% SET imgh=?,imgm=?,imgl=? WHERE keyname=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($imageBaseh_64,$imageBasem_64,$imageBasel_64,$keyname));
|
||||
CommonUtils::execSql($pdo, "UPDATE %products% SET prodimageid=? WHERE id=?", array($res[0]["id"],$prodid));
|
||||
} else {
|
||||
$sql = "INSERT INTO %prodimages% (keyname,imgh,imgm,imgl) VALUES(?,?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($keyname,$imageBaseh_64,$imageBasem_64,$imageBasel_64));
|
||||
$prodimageid = $pdo->lastInsertId();
|
||||
|
||||
$sql = "UPDATE %products% SET prodimageid=? WHERE id=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($prodimageid,$prodid));
|
||||
$sql = "UPDATE %products% SET prodimageid=? WHERE id=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($prodimageid,$prodid));
|
||||
}
|
||||
|
||||
HistFiller::updateProdInHist($pdo,$prodid);
|
||||
self::cleanProdImagesTable($pdo);
|
||||
} catch (Exception $ex) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => $ex->getMessage()));
|
||||
$pdo->rollBack();
|
||||
|
@ -1368,6 +1418,60 @@ class Products {
|
|||
echo json_encode(array("status" => "OK"));
|
||||
}
|
||||
|
||||
function loadfullprodimageset() {
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
|
||||
if ($_FILES['textfile']['error'] != UPLOAD_ERR_OK
|
||||
&& is_uploaded_file($_FILES['textfile']['tmp_name'])) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => "Kann Datei nicht laden."));
|
||||
exit();
|
||||
}
|
||||
|
||||
if(!file_exists($_FILES['textfile']['tmp_name'])) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => "Datei existiert nicht. Bitte PHP-Variablen upload_max_filesize und post_max_size_checken."));
|
||||
exit();
|
||||
}
|
||||
|
||||
if(!is_uploaded_file($_FILES['textfile']['tmp_name'])) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => "Datei konnte nicht hochgeladen werden."));
|
||||
exit();
|
||||
}
|
||||
|
||||
$file = $_FILES['textfile']['tmp_name'];
|
||||
|
||||
$handle = fopen ($file, "r");
|
||||
|
||||
$pdo->beginTransaction();
|
||||
|
||||
try {
|
||||
while (!feof($handle)) {
|
||||
$textline = trim(fgets($handle));
|
||||
if ($textline != "") {
|
||||
$parts = explode(';', $textline);
|
||||
|
||||
$keyname = $parts[1];
|
||||
$sql = "SELECT id FROM %prodimages% WHERE keyname=?";
|
||||
$res = CommonUtils::fetchSqlAll($pdo, $sql, array($keyname));
|
||||
if (count($res) > 0) {
|
||||
$sql = "UPDATE %prodimages% SET imgh=?,imgm=?,imgl=? WHERE keyname=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($parts[2],$parts[3],$parts[4],$keyname));
|
||||
} else {
|
||||
$sql = "INSERT INTO %prodimages% (keyname,imgh,imgm,imgl) VALUES(?,?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($keyname,$parts[2],$parts[3],$parts[4]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fclose ($handle);
|
||||
$pdo->commit();
|
||||
} catch (Exception $ex) {
|
||||
echo json_encode(array("status" => "ERROR","msg" => $ex->getMessage()));
|
||||
$pdo->rollBack();
|
||||
exit();
|
||||
}
|
||||
|
||||
echo json_encode(array("status" => "OK"));
|
||||
}
|
||||
function sortProdAlpha($typeid) {
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
$pdo->beginTransaction();
|
||||
|
|
|
@ -0,0 +1,330 @@
|
|||
<?php
|
||||
|
||||
require_once ('dbutils.php');
|
||||
require_once ('commonutils.php');
|
||||
require_once ('queuecontent.php');
|
||||
|
||||
class Timetracking {
|
||||
|
||||
private static $ACTION_COME = 1;
|
||||
private static $ACTION_GO = 2;
|
||||
|
||||
private static $rights = array(
|
||||
"come" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timetracking","timemanager")),
|
||||
"go" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timetracking","timemanager")),
|
||||
"getusers" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timetracking","timemanager")),
|
||||
"getoverview" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timetracking","timemanager")),
|
||||
"delentry" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timemanager")),
|
||||
"newadmincome" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timemanager")),
|
||||
"newadmingo" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timemanager")),
|
||||
"exportTimesCsv" => array("loggedin" => 1, "isadmin" => 0, "rights" => array("timemanager"))
|
||||
);
|
||||
|
||||
private static function checkRights($command) {
|
||||
if (session_id() == '') {
|
||||
session_start();
|
||||
}
|
||||
if (!array_key_exists($command, self::$rights)) {
|
||||
echo json_encode(array("status" => "ERROR", "code" => ERROR_COMMAND_NOT_FOUND, "msg" => ERROR_COMMAND_NOT_FOUND_MSG));
|
||||
return false;
|
||||
}
|
||||
$cmdRights = self::$rights[$command];
|
||||
if ($cmdRights["loggedin"] == 1) {
|
||||
if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
|
||||
echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if ($cmdRights["isadmin"] == 1) {
|
||||
if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
|
||||
echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG));
|
||||
return false;
|
||||
} else {
|
||||
if ($_SESSION['is_admin'] == false) {
|
||||
echo json_encode(array("status" => "ERROR", "code" => ERROR_COMMAND_NOT_ADMIN, "msg" => ERROR_COMMAND_NOT_ADMIN_MSG));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!is_null($cmdRights["rights"])) {
|
||||
foreach ($cmdRights["rights"] as $aRight) {
|
||||
if ($aRight == 'timetracking') {
|
||||
if (($_SESSION['is_admin']) || ($_SESSION['right_timetracking'])) {
|
||||
return true;
|
||||
}
|
||||
} else if ($aRight == 'timemanager') {
|
||||
if ($_SESSION['right_timemanager']) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG));
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static function handleCommand($command) {
|
||||
|
||||
$pdo = DbUtils::openDbAndReturnPdoStatic();
|
||||
|
||||
if (!self::checkRights($command)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$ret = array("status" => "ERROR", "msg" => "Falsches Kommando");
|
||||
|
||||
if ($command == 'come') {
|
||||
$ret = self::come($pdo,$_POST['comment']);
|
||||
} else if ($command == 'go') {
|
||||
$ret = self::go($pdo,$_POST['comment']);
|
||||
} else if ($command == 'getusers') {
|
||||
$ret = self::getusers($pdo);
|
||||
} else if ($command == 'getoverview') {
|
||||
$ret = self::getoverview($pdo,$_POST['userid'],$_POST['startday'],$_POST['startmonth'],$_POST['startyear'],$_POST['endday'],$_POST['endmonth'],$_POST['endyear']);
|
||||
} else if ($command == 'delentry') {
|
||||
$ret = self::delentry($pdo,$_POST['id']);
|
||||
} else if ($command == 'newadmincome') {
|
||||
$ret = self::newadmincome($pdo,$_POST['day'],$_POST['month'],$_POST['year'],$_POST['userid'],$_POST['time'],$_POST['comment']);
|
||||
} else if ($command == 'newadmingo') {
|
||||
$ret = self::newadmingo($pdo,$_POST['day'],$_POST['month'],$_POST['year'],$_POST['userid'],$_POST['time'],$_POST['comment']);
|
||||
} else if ($command == 'exportTimesCsv') {
|
||||
self::exportTimesCsv($pdo,$_GET['startMonth'],$_GET['startYear'],$_GET['endMonth'],$_GET['endYear']);
|
||||
return;
|
||||
}
|
||||
echo json_encode($ret);
|
||||
}
|
||||
|
||||
private static function come($pdo,$comment) {
|
||||
$minBeforeCome = intval(CommonUtils::getConfigValue($pdo, 'minbeforecome', 0));
|
||||
date_default_timezone_set(DbUtils::getTimeZone());
|
||||
$now = date('Y-m-d H:i:s', strtotime("-$minBeforeCome minutes"));
|
||||
return self::insertAction($pdo, self::$ACTION_COME, $comment,$now);
|
||||
}
|
||||
private static function go($pdo,$comment) {
|
||||
$minAfterGo = intval(CommonUtils::getConfigValue($pdo, 'minaftergo', 0));
|
||||
date_default_timezone_set(DbUtils::getTimeZone());
|
||||
$now = date('Y-m-d H:i:s', strtotime("+$minAfterGo minutes"));
|
||||
return self::insertAction($pdo, self::$ACTION_GO, $comment,$now);
|
||||
}
|
||||
|
||||
private static function insertAction($pdo,$action,$comment,$dateTimeToRegister) {
|
||||
try {
|
||||
if (is_null($comment)) {
|
||||
$comment = "";
|
||||
}
|
||||
$userid = $_SESSION['userid'];
|
||||
$sql = "INSERT INTO %times% (date,userid,action,comment) VALUES(?,?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($dateTimeToRegister,$userid,$action,$comment));
|
||||
return array("status" => "OK");
|
||||
} catch (Exception $ex) {
|
||||
return array("status" => "ERROR","msg" => $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static function getusers($pdo) {
|
||||
$ownuserid = $_SESSION['userid'];
|
||||
$username = $_SESSION['currentuser'];
|
||||
|
||||
if ($_SESSION['right_timemanager']) {
|
||||
$sql = "SELECT id,username FROM %user% WHERE active=?";
|
||||
$users = CommonUtils::fetchSqlAll($pdo, $sql, array(1));
|
||||
$mayManageTimes = 1;
|
||||
} else {
|
||||
$sql = "SELECT id,username FROM %user% WHERE active=? AND id=?";
|
||||
$users = CommonUtils::fetchSqlAll($pdo, $sql, array(1,$ownuserid));
|
||||
$mayManageTimes = 0;
|
||||
}
|
||||
|
||||
return array("status" => "OK","msg" => array("ownuserid" => $ownuserid, "users" => $users, "username" => $username, "maymanageusers" => $mayManageTimes));
|
||||
}
|
||||
|
||||
private static function getoverview($pdo,$userid,$startday,$startmonth,$startyear,$endday,$endmonth,$endyear) {
|
||||
$timesOfSelectedUser = self::getoverviewofuser($pdo, $userid, $startday, $startmonth, $startyear, $endday, $endmonth, $endyear);
|
||||
|
||||
if ($_SESSION['right_timemanager']) {
|
||||
$sql = "SELECT id,username FROM %user% WHERE active=?";
|
||||
$users = CommonUtils::fetchSqlAll($pdo, $sql, array(1));
|
||||
$workTimes = array();
|
||||
foreach($users as $aUser) {
|
||||
$uid = $aUser["id"];
|
||||
$uname = $aUser["username"];
|
||||
$times = self::getoverviewofuser($pdo, $uid, $startday, $startmonth, $startyear, $endday, $endmonth, $endyear);
|
||||
if (($times["status"] == "OK") && ($times["msg"]["totalduration"]["status"] == "OK")) {
|
||||
$workMinutesOfUser = $times["msg"]["totalduration"]["minutes"];
|
||||
$workTimes[] = array("userid" => $uid,"username" => $uname,"minutes" => $workMinutesOfUser);
|
||||
} else {
|
||||
$workTimes[] = array("userid" => $uid,"username" => $uname,"minutes" => (-1));
|
||||
}
|
||||
}
|
||||
$timesOfSelectedUser["allusertimes"] = $workTimes;
|
||||
}
|
||||
return $timesOfSelectedUser;
|
||||
}
|
||||
private static function getoverviewofuser($pdo,$userid,$startday,$startmonth,$startyear,$endday,$endmonth,$endyear) {
|
||||
$ownuserid = $_SESSION['userid'];
|
||||
|
||||
if ($ownuserid != $userid) {
|
||||
if (!$_SESSION['right_timemanager']) {
|
||||
return array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG);
|
||||
}
|
||||
}
|
||||
|
||||
$sday = sprintf("%02s", $startday);
|
||||
$smonth = sprintf("%02s", $startmonth);
|
||||
$startDate = "$startyear-$smonth-$sday";
|
||||
|
||||
$eday = sprintf("%02s", $endday);
|
||||
$emonth = sprintf("%02s", $endmonth);
|
||||
$endDate = "$endyear-$emonth-$eday";
|
||||
|
||||
$begin = new DateTime( $startDate );
|
||||
$end = new DateTime( $endDate );
|
||||
|
||||
$interval = DateInterval::createFromDateString('1 day');
|
||||
$end->add($interval);
|
||||
$period = new DatePeriod($begin, $interval, $end);
|
||||
|
||||
$sql = "SELECT id,date,TIME(date) as thetime,HOUR(date) as timehour,MINUTE(date) as timemin,action,comment FROM %times% WHERE userid=? AND DATE(date)=? ORDER BY date";
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
|
||||
$totalWorkTime = 0;
|
||||
$timesCalcOk = true;
|
||||
$times = array();
|
||||
foreach ( $period as $dt ) {
|
||||
$aDate = $dt->format( "Y-m-d\n" );
|
||||
$stmt->execute(array($userid,$aDate));
|
||||
$timesOfDate = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||
$workMinutes = self::calcWorkTime($timesOfDate);
|
||||
if ($workMinutes["status"] == "OK") {
|
||||
$totalWorkTime += $workMinutes["minutes"];
|
||||
} else {
|
||||
$timesCalcOk = false;
|
||||
}
|
||||
|
||||
$daynameno = date('N', strtotime($aDate));
|
||||
|
||||
$times[] = array("dayno" => $daynameno, "date" => $aDate, "timesofdate" => $timesOfDate,"workminutes" => $workMinutes);
|
||||
}
|
||||
if ($timesCalcOk) {
|
||||
$totalWorkMinutes = array("status" => "OK","minutes" => $totalWorkTime);
|
||||
} else {
|
||||
$totalWorkMinutes = array("status" => "ERROR","minutes" => $totalWorkTime);
|
||||
}
|
||||
return array("status" => "OK","msg" => array("times" => $times, "totalduration" => $totalWorkMinutes));
|
||||
}
|
||||
|
||||
private static function calcWorkTime($timesOfDay) {
|
||||
$workDuration = 0;
|
||||
|
||||
if (count($timesOfDay) == 0) {
|
||||
return array("status" => "OK","minutes" => 0);
|
||||
}
|
||||
|
||||
$currentEntry = $timesOfDay[0];
|
||||
$entryStatus = $currentEntry['action'];
|
||||
if ($entryStatus == self::$ACTION_COME) {
|
||||
$waitstatus = self::$ACTION_COME;
|
||||
} else {
|
||||
$lastCome = 0;
|
||||
$waitstatus = self::$ACTION_GO;
|
||||
}
|
||||
|
||||
for ($i=0;$i<count($timesOfDay);$i++) {
|
||||
$currentEntry = $timesOfDay[$i];
|
||||
$entryStatus = $currentEntry['action'];
|
||||
$hour = intval($currentEntry['timehour']);
|
||||
$min = intval($currentEntry['timemin']);
|
||||
$minuteOfDay = ($hour * 60 + $min);
|
||||
|
||||
if ($entryStatus != $waitstatus) {
|
||||
return array("status" => "ERROR","minutes" => $workDuration);
|
||||
} else {
|
||||
if ($entryStatus == self::$ACTION_COME) {
|
||||
$lastCome = $minuteOfDay;
|
||||
$waitstatus = self::$ACTION_GO;
|
||||
} else {
|
||||
$workDuration += $minuteOfDay - $lastCome;
|
||||
$waitstatus = self::$ACTION_COME;
|
||||
}
|
||||
if (($i+1) == count($timesOfDay)) {
|
||||
if ($waitstatus == self::$ACTION_GO) {
|
||||
$workDuration += (24*60 - $minuteOfDay);
|
||||
return array("status" => "OK","minutes" => $workDuration);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return array("status" => "OK","minutes" => $workDuration);
|
||||
}
|
||||
|
||||
private static function delentry($pdo,$timeid) {
|
||||
try {
|
||||
$sql = "DELETE FROM %times% WHERE id=?";
|
||||
CommonUtils::execSql($pdo, $sql, array($timeid));
|
||||
return array("status" => "OK");
|
||||
} catch (Exception $ex) {
|
||||
return array("status" => "ERROR","msg" => $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static function newadmincome($pdo,$day,$month,$year,$userid,$time,$comment) {
|
||||
return self::createAdminComeGoEntry($pdo, $day, $month, $year, $userid, $time, $comment, self::$ACTION_COME);
|
||||
}
|
||||
private static function newadmingo($pdo,$day,$month,$year,$userid,$time,$comment) {
|
||||
return self::createAdminComeGoEntry($pdo, $day, $month, $year, $userid, $time, $comment, self::$ACTION_GO);
|
||||
}
|
||||
private static function parseTime($timeStr) {
|
||||
$parts = explode(':',$timeStr);
|
||||
if (count($parts) != 2) {
|
||||
return array(false,0,0);
|
||||
}
|
||||
if (!is_numeric($parts[0]) || !is_numeric($parts[1])) {
|
||||
return array(false,0,0);
|
||||
}
|
||||
$hour = sprintf("%02s", $parts[0]);
|
||||
$min = sprintf("%02s", $parts[1]);
|
||||
return array(true,$hour,$min);
|
||||
}
|
||||
private static function createAdminComeGoEntry($pdo,$day,$month,$year,$userid,$time,$comment,$action) {
|
||||
$timevalues = self::parseTime($time);
|
||||
if (!$timevalues[0]) {
|
||||
return array("status" => "ERROR","msg" => "Falsches Uhrzeitformat");
|
||||
}
|
||||
try {
|
||||
$day = sprintf("%02s", $day);
|
||||
$month = sprintf("%02s", $month);
|
||||
$hour = $timevalues[1];
|
||||
$min = $timevalues[2];
|
||||
$date = "$year-$month-$day $hour:$min:00";
|
||||
|
||||
$sql = "INSERT INTO %times% (date,userid,action,comment) VALUES(?,?,?,?)";
|
||||
CommonUtils::execSql($pdo, $sql, array($date,$userid,$action,$comment));
|
||||
return array("status" => "OK");
|
||||
} catch (Exception $ex) {
|
||||
return array("status" => "ERROR","msg" => $ex->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
private static function exportTimesCsv($pdo,$startMonth,$startYear,$endMonth,$endYear) {
|
||||
$startMonth = sprintf("%02s", $startMonth);
|
||||
$endMonth = sprintf("%02s", $endMonth);
|
||||
$startDate = $startYear . "-" . $startMonth . "-01";
|
||||
$endDate = $endYear . "-" . $endMonth . "-01";
|
||||
$lastdayOfMonth = date("t", strtotime($endDate));
|
||||
$endDate = $endYear . "-" . $endMonth . "-" . $lastdayOfMonth;
|
||||
|
||||
$sql = "SELECT date,userid,username,IF(action=1,'Kommen','Gehen') as action,comment FROM %times% t,%user% u WHERE t.userid=u.id AND DATE(date) >= ? AND DATE(date) <= ? ORDER BY date";
|
||||
$result = CommonUtils::fetchSqlAll($pdo, $sql, array($startDate,$endDate));
|
||||
|
||||
$txt = "Zeitstempel;Benutzer-ID;Benutzername;Aktion;Kommentar\n";
|
||||
foreach($result as $r) {
|
||||
$txt .= $r['date'] . ";" . $r['userid'] .';"' . $r['username'] . '";"' . $r['action'] . '";"' . $r['comment'] . '";' . "\n";
|
||||
}
|
||||
|
||||
header("Content-type: text/x-csv");
|
||||
header("Content-Disposition: attachment; filename=\"ordersprinter-zeiterfassung.csv\"");
|
||||
header("Cache-Control: max-age=0");
|
||||
echo $txt;
|
||||
}
|
||||
}
|
|
@ -4,6 +4,7 @@ $this->t = array(
|
|||
"Tablename" => array("Tisch","Table","Mesa"),
|
||||
"Date" => array("Zahlungsdatum","Pay date","Fecha de pago"),
|
||||
"Prod" => array("Produkt","Product","Producto"),
|
||||
"Category" => array("Kategorie","Category","Categoria"),
|
||||
"Option" => array("Bemerkung","Comment","Comentario"),
|
||||
"Brutto" => array("Bruttopreis","Gross","Bruto"),
|
||||
"Netto" => array("Nettopreis","Net","Neto"),
|
||||
|
|
|
@ -113,6 +113,7 @@ class Basedb {
|
|||
$this->doSQLcatch($pdo, "drop TABLE `%billproducts%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%recordsqueue%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%records%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%times%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%queue%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%printjobs%`");
|
||||
$this->doSQLcatch($pdo, "drop TABLE `%customerlog%`");
|
||||
|
@ -773,6 +774,21 @@ class Basedb {
|
|||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
$stmt->execute();
|
||||
}
|
||||
|
||||
function createTimesTable($pdo) {
|
||||
$sql = "
|
||||
CREATE TABLE `%times%` (
|
||||
`id` INT (10) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
|
||||
`date` DATETIME NOT NULL ,
|
||||
`userid` INT (10) NULL,
|
||||
`action` INT(1) NULL,
|
||||
`comment` VARCHAR(200) NULL,
|
||||
FOREIGN KEY (userid) REFERENCES %user%(id)
|
||||
) CHARACTER SET utf8 COLLATE utf8_general_ci ENGINE = InnoDb ;
|
||||
";
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
$stmt->execute();
|
||||
}
|
||||
|
||||
function getPrivkey($pdo) {
|
||||
$sql = "SELECT signature FROM %work% WHERE item=?";
|
||||
|
@ -1126,12 +1142,12 @@ class Basedb {
|
|||
$file = "../customer/prodimages.txt";
|
||||
|
||||
$handle = fopen ($file, "r");
|
||||
$sql = "INSERT INTO %prodimages% (imgh,imgm,imgl) VALUES(?,?,?)";
|
||||
$sql = "INSERT INTO %prodimages% (keyname,imgh,imgm,imgl) VALUES(?,?,?,?)";
|
||||
while (!feof($handle)) {
|
||||
$textline = trim(fgets($handle));
|
||||
if ($textline != "") {
|
||||
$parts = explode(';', $textline);
|
||||
CommonUtils::execSql($pdo, $sql, array($parts[1],$parts[2],$parts[3]));
|
||||
CommonUtils::execSql($pdo, $sql, array($parts[1],$parts[2],$parts[3],$parts[4]));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -16,10 +16,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) VALUES("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?,?,?)";
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
$stmt->execute(array("Admin",1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0));
|
||||
$stmt->execute(array("Admin",1,0,0,0,0,0,1,0,1,1,1,1,0,0,0,0,1,1));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
@ -28,10 +28,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) 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));
|
||||
$stmt->execute(array("Manager",0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
@ -40,10 +40,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) 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));
|
||||
$stmt->execute(array("Manager",0,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
@ -52,10 +52,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) 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));
|
||||
$stmt->execute(array("Kellner",0,1,1,1,1,1,0,1,0,0,1,0,1,0,1,0,1,0));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
@ -64,10 +64,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) 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));
|
||||
$stmt->execute(array("Kellner",0,1,0,0,0,1,0,1,0,0,1,0,1,0,1,0,1,0));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
@ -76,10 +76,10 @@ class Roles {
|
|||
$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("
|
||||
. "?,?,?,?,? ,?,?,?,?,?, ?,?,?,?,?, ?,?)";
|
||||
. "right_dash,right_reservation,right_rating,right_changeprice,right_customers,right_timetracking,right_timemanager) 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));
|
||||
$stmt->execute(array("Koch",0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0));
|
||||
$id = $pdo->lastInsertId();
|
||||
return $id;
|
||||
}
|
||||
|
|
|
@ -858,6 +858,37 @@ class Version {
|
|||
}
|
||||
}
|
||||
|
||||
public static function upd_1418_1500($pdo, $prefix, $dbname) {
|
||||
try {
|
||||
self::execSql($pdo, "ALTER TABLE %roles% ADD right_timetracking INT(1) NULL AFTER right_dash");
|
||||
self::execSql($pdo, "ALTER TABLE %roles% ADD right_timemanager INT(1) NULL AFTER right_timetracking");
|
||||
self::execSql($pdo, "ALTER TABLE %histuser% ADD right_timetracking INT(1) NULL AFTER right_dash");
|
||||
self::execSql($pdo, "ALTER TABLE %histuser% ADD right_timemanager INT(1) NULL AFTER right_timetracking");
|
||||
|
||||
self::execSqlWithParam($pdo, "UPDATE %roles% SET right_timetracking=?,right_timemanager=?", array(1,0));
|
||||
self::execSqlWithParam($pdo, "UPDATE %histuser% SET right_timetracking=?,right_timemanager=?", array(1,0));
|
||||
self::execSqlWithParam($pdo, "UPDATE %roles% SET right_timemanager=? WHERE right_manager=? OR is_admin=?", array(1, 1, 1));
|
||||
self::execSqlWithParam($pdo, "UPDATE %histuser% SET right_timemanager=? WHERE right_manager=? OR is_admin=?", array(1, 1, 1));
|
||||
|
||||
self::execSql($pdo, "OPTIMIZE TABLE %roles%");
|
||||
self::execSql($pdo, "OPTIMIZE TABLE %histuser%");
|
||||
|
||||
$basedb = new BaseDb(); $basedb->createTimesTable($pdo);
|
||||
self::insertOrUpdateConfigItem($pdo, 'minbeforecome', '0');
|
||||
self::insertOrUpdateConfigItem($pdo, 'minaftergo', '0');
|
||||
self::execSql($pdo, "ALTER TABLE %config% MODIFY name VARCHAR(30) NULL");
|
||||
$sql = "ALTER TABLE %config% ADD INDEX tconfig (name)";
|
||||
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
|
||||
$stmt->execute();
|
||||
|
||||
self::execSql($pdo, "ALTER TABLE %prodimages% ADD keyname VARCHAR(30) NULL AFTER id");
|
||||
self::execSql($pdo, "UPDATE %prodimages% set keyname=CONCAT('Bild_',id)");
|
||||
return array(true);
|
||||
} catch (PDOException $e) {
|
||||
return array(false,$e);
|
||||
}
|
||||
}
|
||||
|
||||
public static $updateOrder = array(
|
||||
"1.3.0" => array("upd_1300_1301","1.3.1"),
|
||||
"1.3.1" => array("upd_1301_1302","1.3.2"),
|
||||
|
@ -904,7 +935,8 @@ class Version {
|
|||
"1.4.14" => array("upd_1414_1415","1.4.15"),
|
||||
"1.4.15" => array("upd_1415_1416","1.4.16"),
|
||||
"1.4.16" => array("upd_1416_1417","1.4.17"),
|
||||
"1.4.17" => array("upd_1417_1418","1.4.18")
|
||||
"1.4.17" => array("upd_1417_1418","1.4.18"),
|
||||
"1.4.18" => array("upd_1418_1500","1.5.0")
|
||||
);
|
||||
|
||||
// RE;* also for install process no check is required
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
@ -78,6 +78,9 @@ var PROD_APPLIED = ["Aktion wurde durchgeführt.","Action was performed.","Acci
|
|||
var PROD_TYPEPROPS = ["Kategorieeigenschaften ein-/ausblenden","Show/hide properties of type","Mostrar o ocultar characterística de typo"];
|
||||
var PROD_CATS_LIST = ["Unterkategorien","Sub Categories","Categorias contenidas"];
|
||||
var PROD_PRODUCTS_LIST = ["Produkte","Products","Productos"];
|
||||
var PROD_SET_TITLE = ["Gesamtes Bildmaterial","Full image set","Todos los imagenes"];
|
||||
var PROD_CLEAN_PRODIMAGES = ["Entferne nicht zugewiesene Bilder in der DB","Remove unassigned images from database","Removar imagenes non usados"];
|
||||
var PROD_DOWNLOAD_PRODIMAGES = ["Download gesamtes Bildmaterial","Download complete Image Set","Download todos los imagenes"];
|
||||
|
||||
// this is the maximal price that a product may cost
|
||||
var MAX_PRICE = 999.99;
|
||||
|
@ -99,6 +102,7 @@ var audiofiles;
|
|||
var p_allextras = [];
|
||||
|
||||
var p_currenttypeid = null;
|
||||
var keynames = [];
|
||||
|
||||
function setLanguage(language) {
|
||||
lang = language;
|
||||
|
@ -107,6 +111,9 @@ function setLanguage(language) {
|
|||
$("#extrasheader").html(PROD_EXTRAS[lang]);
|
||||
$("#prodimagesheader").html(PROD_PRODIMAGES[lang]);
|
||||
$("#menuheader").html(PROD_MENU[lang]);
|
||||
$("#headeroffullprodset").html(PROD_SET_TITLE[lang]);
|
||||
$("#cleantxt").html(PROD_CLEAN_PRODIMAGES[lang]);
|
||||
$("#downloadprodimagestxt").html(PROD_DOWNLOAD_PRODIMAGES[lang]);
|
||||
}
|
||||
|
||||
function getAudioFiles() {
|
||||
|
@ -137,6 +144,17 @@ function setLanguage(language) {
|
|||
}
|
||||
|
||||
function getProdsForProdsImageArea() {
|
||||
doAjax("GET","php/contenthandler.php?module=products&command=getkeynames",null,insertkeynamesAndContinue,null);
|
||||
}
|
||||
function insertkeynamesAndContinue(answer) {
|
||||
if (answer.status == "OK") {
|
||||
keynames = answer.msg;
|
||||
getAllIndividualProdsForProdsImageArea();
|
||||
} else {
|
||||
alert("Fehler: " + answer.msg);
|
||||
}
|
||||
}
|
||||
function getAllIndividualProdsForProdsImageArea() {
|
||||
doAjax("GET","php/contenthandler.php?module=products&command=getOnlyAllProds",null,fillProdImagesArea,null);
|
||||
}
|
||||
function fillProdImagesArea(answer) {
|
||||
|
@ -167,6 +185,13 @@ function setLanguage(language) {
|
|||
|
||||
txt += '<a href="#" data-role="button" data-icon="delete" data-theme="d" data-ajax="false" id="prodimagedelete_' + prodid + '" class="deleteprodimage" >Bildzuordnung entfernen</a> '
|
||||
|
||||
txt += '<select id="prodimageassignbox_' + prodid +'" data-theme="e" class="prodimageassbox">';
|
||||
txt += '<option value="0"> </option>';
|
||||
keynames.forEach(function(aKey,index) {
|
||||
txt += '<option value="' + aKey.id + '">' + aKey.keyname + '</option>';
|
||||
});
|
||||
txt += '</select>';
|
||||
|
||||
txt += "</div>";
|
||||
|
||||
return txt;
|
||||
|
@ -188,12 +213,34 @@ function setLanguage(language) {
|
|||
e.preventDefault();
|
||||
var prodid = this.id.split('_')[1];
|
||||
|
||||
doAjax("POST","php/contenthandler.php?module=products&command=deleteImageProdAssignment",{prodid:prodid},createProdEntryArea,"Aufhebnung der Zuordnung ist fehlgeschlagen");
|
||||
doAjax("POST","php/contenthandler.php?module=products&command=deleteImageProdAssignment",{prodid:prodid},createProdEntryArea,"Aufhebung der Zuordnung ist fehlgeschlagen");
|
||||
});
|
||||
|
||||
$(".prodimageassbox").off("change").on("change", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
var id = this.id;
|
||||
var prodid = id.split('_')[1];
|
||||
var prodimageid = $("#" + id).val();
|
||||
if (prodimageid != 0) {
|
||||
var data = {
|
||||
prodid: prodid,
|
||||
prodimageid: prodimageid
|
||||
};
|
||||
doAjax("POST","php/contenthandler.php?module=products&command=assignProdImageToKey",data,createProdEntryAreaOfId,"Zuordnung ist fehlgeschlagen");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function createProdEntryAreaOfId(answer) {
|
||||
if (answer.status == "OK") {
|
||||
createProdEntryArea(answer.prodid);
|
||||
} else {
|
||||
alert("Fehler: " + answer.msg);
|
||||
}
|
||||
}
|
||||
function createProdEntryArea(prodid) {
|
||||
updateProdImagePart(prodid)
|
||||
updateProdImagePart(prodid);
|
||||
var txt = "";
|
||||
txt = ' <div id="restorefilearea_' + prodid + '" >Upload</div>';
|
||||
txt += '<div id="restorestatus_' + prodid + '" ></div>';
|
||||
|
@ -209,6 +256,37 @@ function setLanguage(language) {
|
|||
$("#prodimageentry_" + prodid + " .imagepart img").attr("src", src);
|
||||
}
|
||||
|
||||
function initFullProdimageSetFileUpload() {
|
||||
var settings = {
|
||||
url: "php/contenthandler.php?module=products&command=loadfullprodimageset",
|
||||
method: "POST",
|
||||
allowedTypes:"ocs,txt",
|
||||
fileName: "textfile",
|
||||
multiple: false,
|
||||
uploadQueueOrder: 'replace',
|
||||
showFileCounter: false,
|
||||
dragDropStr: "<span>Datei</span>",
|
||||
extErrorStr: " ist nicht erlaubt. Erlaubte Dateiendung: ",
|
||||
onSuccess:function(files,data,xhr)
|
||||
{
|
||||
var answer = jQuery.parseJSON(data);
|
||||
if (answer.status != "OK") {
|
||||
alert("Upload war nicht erfolgreich: " + answer.msg);
|
||||
} else {
|
||||
alert("Import war erfolgreich.");
|
||||
getProdsForProdsImageArea();
|
||||
}
|
||||
},
|
||||
onError: function(files,status,errMsg)
|
||||
{
|
||||
$("#uploadprodsetstatus").html("<font color='red'>Upload fehlgeschlagen</font>");
|
||||
}
|
||||
};
|
||||
$("#uploadprodsetfilearea").uploadFile(settings);
|
||||
|
||||
$("#uploadprodsetfilearea").trigger("create");
|
||||
}
|
||||
|
||||
function initRestoreFileUpload(prodid) {
|
||||
var settings = {
|
||||
url: "php/contenthandler.php?module=products&command=loadprodimage&prodid=" + prodid,
|
||||
|
@ -228,13 +306,13 @@ function setLanguage(language) {
|
|||
} else {
|
||||
//alert("Import war erfolgreich.");
|
||||
updateProdImagePart(prodid)
|
||||
}
|
||||
};
|
||||
},
|
||||
onError: function(files,status,errMsg)
|
||||
{
|
||||
$("#restorestatus_" + prodid).html("<font color='red'>Upload fehlgeschlagen</font>");
|
||||
}
|
||||
}
|
||||
};
|
||||
$("#restorefilearea_" + prodid).uploadFile(settings);
|
||||
|
||||
$("#restorefilearea_" + prodid).trigger("create");
|
||||
|
@ -754,7 +832,7 @@ function setLanguage(language) {
|
|||
usekitchen: useKit,
|
||||
usesupply: useSupply,
|
||||
printer: printer
|
||||
}
|
||||
};
|
||||
doAjax("POST","php/contenthandler.php?module=products&command=applyType",data,null,"Fehler Kategorieänderung");
|
||||
}
|
||||
}
|
||||
|
@ -781,7 +859,7 @@ function setLanguage(language) {
|
|||
if (result.status != "OK") {
|
||||
alert("Fehler aufgetreten - bitte Aktion wiederholen!");
|
||||
} else {
|
||||
setTimeout(function(){document.location.href = "products.html"},250);
|
||||
setTimeout(function(){document.location.href = "products.html";},250);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1049,8 +1127,30 @@ function setLanguage(language) {
|
|||
$("#radio-pricelevel-c").off("click").on("click", function (e) {
|
||||
setPriceLevel(3);
|
||||
});
|
||||
|
||||
$("#cleanprodimageindb").off("click").on("click", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
// cleanprodimagestable
|
||||
doAjax("POST","php/contenthandler.php?module=products&command=cleanprodimagestable",null,handleCleanProcess,"Extras");
|
||||
});
|
||||
|
||||
$("#downloadprodimages").off("click").on("click", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
window.location.href = "php/contenthandler.php?module=products&command=prodimghmlexport";
|
||||
});
|
||||
}
|
||||
|
||||
function handleCleanProcess(answer) {
|
||||
if (answer.status == "OK") {
|
||||
alert("OK");
|
||||
getProdsForProdsImageArea();
|
||||
} else {
|
||||
alert("Fehler: " + answer.msg);
|
||||
}
|
||||
}
|
||||
|
||||
function getGeneralConfigItems() {
|
||||
doAjax("GET", "php/contenthandler.php?module=admin&command=getGeneralConfigItems", null, insertDecPointStartRest, "Fehler Konfigurationsdaten");
|
||||
}
|
||||
|
@ -1069,6 +1169,8 @@ function setLanguage(language) {
|
|||
createExtrasArea();
|
||||
|
||||
binding();
|
||||
|
||||
initFullProdimageSetFileUpload();
|
||||
} else {
|
||||
setTimeout(function(){document.location.href = "index.html"},250); // not logged in
|
||||
}
|
||||
|
@ -1112,19 +1214,27 @@ function setLanguage(language) {
|
|||
<div id="extrasarea">
|
||||
<div data-role="collapsible" data-content-theme="f" data-theme="c">
|
||||
<h3><span id="extrasheader">Extras/Optionen</span></h3>
|
||||
<p>
|
||||
<div id=extraslist></div>
|
||||
</p>
|
||||
<p><div id=extraslist></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="prodimagesarea">
|
||||
<div data-role="collapsible" data-content-theme="f" data-theme="c">
|
||||
<h3><span id="prodimagesheader">Bildzuweisung</span></h3>
|
||||
<p>
|
||||
<div id=prodimageslist></div>
|
||||
</p>
|
||||
</div>
|
||||
<div data-role="collapsible" data-content-theme="f" data-theme="c">
|
||||
<h3><span id="prodimagesheader">Bildzuweisung</span></h3>
|
||||
<p><div id="prodsetimageuploadarea">
|
||||
<div class="roundedborderarea">
|
||||
<h3><span id="headeroffullprodset">Setmanipulation</span></h3>
|
||||
<div id="uploadprodsetfilearea">Bildset-Upload</div>
|
||||
<div id="uploadprodsetstatus"></div>
|
||||
|
||||
|
||||
<p><button id="cleanprodimageindb" type="submit" data-theme="e"><span id="cleantxt">Bereinigen</span></button>
|
||||
<p><button id="downloadprodimages" type="submit" data-theme="e"><span id="downloadprodimagestxt">Download</span></button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p><div id=prodimageslist></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -1141,6 +1251,7 @@ function setLanguage(language) {
|
|||
<div data-role="dialog" id="assigndialog" data-title="Zuweisung">
|
||||
<div data-role="content">
|
||||
<h3 id="assignheader">?</h3>
|
||||
|
||||
<div id=assprodlist></div>
|
||||
|
||||
<button id="assignprodbtnaftersel" type="submit" data-theme="b" class="oscmd" data-icon="check">Ja</button>
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
|
|
@ -0,0 +1,471 @@
|
|||
<html>
|
||||
<head>
|
||||
<title>Ansicht Zeiterfassung</title>
|
||||
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
<link rel="stylesheet" href="php/3rdparty/jquery.mobile-1.4.0.min.css" type="text/css" />
|
||||
<script src="php/3rdparty/jquery-1.11.3.min.js"></script>
|
||||
<script src="php/3rdparty/jquery.mobile-1.4.5.min.js"></script>
|
||||
|
||||
<script src="utilities.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="php/3rdparty/jqueryui1-11-4/jquery-ui.min.css" />
|
||||
<script src="php/3rdparty/jqueryui1-11-4/jquery-ui.min.js"></script>
|
||||
<script src="php/3rdparty/jqueryui1-11-4/jquery-ui-i18n.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="php/3rdparty/jquerymobiledatepicker/jquery.mobile.datepicker.css" />
|
||||
<script src="php/3rdparty/jquerymobiledatepicker/jquery.mobile.datepicker.js"></script>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
var TIME_DATE_START = ["Startdatum","Start date","Fecha de inicio"];
|
||||
var TIME_DATE_END = ["Enddatum","End date","Fecha del fin"];
|
||||
var TIME_USER_ACTIONS_TITLE = ["Benutzeraktionen","User actions","Acciones del usario"];
|
||||
var TIME_COME = ["Kommen","Coming","Venir"];
|
||||
var TIME_GO = ["Gehen","Go","Irse"];
|
||||
var TIME_OVERVIEW = ["Übersicht","Overview","Resumen"];
|
||||
var TIME_ACTION_FAILED = ["Aktion konnte nicht ausgeführt werden","Action failed","Error en accion"];
|
||||
var TIME_ACTION_OK = ["Aktion wurde ausgeführt","Action was executed","Completado"];
|
||||
var TIME_DAYNAMES = [
|
||||
["Montag","Monday","Lunes"],
|
||||
["Dienstag","Tuesday","Martes"],
|
||||
["Mittwoch","Wednesday","Miércoles"],
|
||||
["Donnerstag","Thursday","Jueves"],
|
||||
["Freitag","Friday","Viernes"],
|
||||
["Samstag","Saturday","Sábado"],
|
||||
["Sonntag","Sunday","Domingo"]
|
||||
];
|
||||
var TIME_NEW_OVERVIEW_TABLE = ["Liste der Einträge für","List of entries für","Lista de las entradas para"];
|
||||
var TIME_NEW_ENTRY = ["Neuen Eintrag erstellen","Create new entry","Crear entrada nueva"];
|
||||
var TIME_TIME = ["Uhrzeit","Time","Hora"];
|
||||
var TIME_NO_TIME_ERROR = ["Zeitangabe fehlt","Missing time entry","No tiempo"];
|
||||
var TIME_SUM = ["Arbeitszeit","Work time","Horas de trabajo"];
|
||||
var TIME_NON_CALCULABLE = ["nicht berechenbar","not calculable","no posible calcular"];
|
||||
var TIME_TOTAL_SUM = ["Gesamte Arbeitszeit im gewählten Zeitraum","Total work time in chosen date frame","Horas de trabajo total"];
|
||||
var TIME_ALL_USERS_TIMES = ["Arbeitszeiten aller Benutzer","Work times of all users","Horas de trabajos de cada usario"];
|
||||
|
||||
var lang = 0;
|
||||
var maymanageusers = 0;
|
||||
var activeuserid = 0;
|
||||
var activeusername = "";
|
||||
var allusers = null;
|
||||
|
||||
function setLanguage(language) {
|
||||
lang = language;
|
||||
|
||||
$("#datestarttxt").html(TIME_DATE_START[lang]);
|
||||
$("#dateendtxt").html(TIME_DATE_END[lang]);
|
||||
$("#useractionstitle").html(TIME_USER_ACTIONS_TITLE[lang]);
|
||||
$(".comebtntxt").html(TIME_COME[lang]);
|
||||
$(".gobtntxt").html(TIME_GO[lang]);
|
||||
$("#useroverview").html(TIME_OVERVIEW[lang]);
|
||||
$("#newentrytxt").html(TIME_NEW_ENTRY[lang]);
|
||||
$("#listofentriestxt").html(TIME_NEW_OVERVIEW_TABLE[lang]);
|
||||
$("#timetxt").html(TIME_TIME[lang]);
|
||||
$("#listofalluserstimestxt").html(TIME_ALL_USERS_TIMES[lang]);
|
||||
}
|
||||
|
||||
function initializeOverviewDateFields() {
|
||||
var langtxt = "de";
|
||||
if (lang == 1) {
|
||||
langtxt = "en";
|
||||
} else if (lang == 2) {
|
||||
langtxt = "es";
|
||||
};
|
||||
|
||||
var currentYear = new Date().getFullYear();
|
||||
var yearRangeTxt = (currentYear-1) + ":" + (currentYear+1);
|
||||
|
||||
$("#datepickerstart").datepicker($.datepicker.regional[langtxt]).datepicker("option", {
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
yearRange: yearRangeTxt,
|
||||
});
|
||||
|
||||
var date = new Date();
|
||||
var firstDayOfMonth = new Date(date.getFullYear(), date.getMonth(), 1);
|
||||
$('#datepickerstart').datepicker('setDate', firstDayOfMonth);
|
||||
|
||||
$("#datepickerend").datepicker($.datepicker.regional[langtxt]).datepicker("option", {
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
yearRange: yearRangeTxt,
|
||||
});
|
||||
|
||||
$('#datepickerend').datepicker('setDate', new Date());
|
||||
|
||||
$("#datepickernew").datepicker($.datepicker.regional[langtxt]).datepicker("option", {
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
yearRange: yearRangeTxt,
|
||||
});
|
||||
|
||||
$('#datepickernew').datepicker('setDate', new Date());
|
||||
}
|
||||
|
||||
function getGeneralConfigItems() {
|
||||
doAjax("GET", "php/contenthandler.php?module=admin&command=getGeneralConfigItems", null, insertGenConfigStartRest, "Fehler Konfigurationsdaten");
|
||||
}
|
||||
|
||||
function insertGenConfigStartRest(configResult) {
|
||||
if (configResult.status == "OK") {
|
||||
var values = configResult.msg;
|
||||
|
||||
setLanguage(values.userlanguage);
|
||||
|
||||
} else {
|
||||
setTimeout(function(){document.location.href = "index.html";},250); // not logged in
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function bindComeGoBtns() {
|
||||
$(".actionsbtn").off("click").on("click", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
var id = this.id;
|
||||
|
||||
var comment = $("#comment").val();
|
||||
var data = {
|
||||
comment: comment
|
||||
};
|
||||
if (id == "comebtn") {
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=come",data,handleActionAnswer,"Problem Zeiterfassung");
|
||||
} else if (id == "gobtn") {
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=go",data,handleActionAnswer,"Problem Zeiterfassung");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function bindUserSelection() {
|
||||
$("#userselbox").off("change").on("change", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
activeuserid = $("#userselbox").val();
|
||||
activeusername = $("#userselbox option:selected").text();
|
||||
updateUserSelBox();
|
||||
getOverview();
|
||||
});
|
||||
}
|
||||
|
||||
function bindNewEntryBtns() {
|
||||
$(".newactionsbtn").off("click").on("click", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
var id = this.id;
|
||||
|
||||
var date = $("#datepickernew").datepicker("getDate");
|
||||
|
||||
var userid = $("#userselbox").val();
|
||||
var comment = $("#commentnewentry").val();
|
||||
var time = $("#timenew").val().trim();
|
||||
|
||||
if (time == '') {
|
||||
alert(TIME_NO_TIME_ERROR[lang]);
|
||||
return;
|
||||
}
|
||||
|
||||
var data = {
|
||||
day: date.getDate(),
|
||||
month: (date.getMonth() + 1),
|
||||
year: date.getFullYear(),
|
||||
userid: userid,
|
||||
time: time,
|
||||
comment: comment
|
||||
};
|
||||
if (id == "newcomebtn") {
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=newadmincome",data,handleActionAnswer,"Problem Zeiterfassung");
|
||||
} else if (id == "newgobtn") {
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=newadmingo",data,handleActionAnswer,"Problem Zeiterfassung");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function handleActionAnswer(answer) {
|
||||
if (answer.status != "OK") {
|
||||
alert(TIME_ACTION_FAILED[lang] + ": " + answer.msg);
|
||||
} else {
|
||||
clearNewEntryFields();
|
||||
alert(TIME_ACTION_OK[lang] + ".");
|
||||
$("#comment").val("");
|
||||
getOverview();
|
||||
}
|
||||
}
|
||||
|
||||
function handleDateChangeEvents() {
|
||||
$(".overviewdatepicker").off("change").on("change", function (e) {
|
||||
getOverview();
|
||||
});
|
||||
}
|
||||
|
||||
function createUsersSelectBox() {
|
||||
var txt = "<select id='userselbox' data-theme='f'>";
|
||||
allusers.forEach(function(aUser, index) {
|
||||
var userid = aUser.id;
|
||||
var username = aUser.username;
|
||||
var selected = "";
|
||||
if (userid == activeuserid) {
|
||||
selected = " selected ";
|
||||
}
|
||||
txt += "<option value='" + userid + "' " + selected + ">" + toHtml(username) + "</option>";
|
||||
});
|
||||
txt += "</select>";
|
||||
return txt;
|
||||
}
|
||||
|
||||
function getAllowedOverviewUsers() {
|
||||
doAjax("GET","php/contenthandler.php?module=timetracking&command=getusers",null,handleUsersAnswer,null);
|
||||
}
|
||||
|
||||
function updateUserSelBox() {
|
||||
var userSelBox = createUsersSelectBox();
|
||||
$("#userselpart").html(userSelBox);
|
||||
$('#userselpart').trigger('create');
|
||||
$("#selectedusername").html(activeusername);
|
||||
}
|
||||
|
||||
function handleUsersAnswer(answer) {
|
||||
if (answer.status == "OK") {
|
||||
maymanageusers = answer.msg.maymanageusers;
|
||||
if (maymanageusers == 1) {
|
||||
showCreateNewEntryAreaAndAllUsersList();
|
||||
}
|
||||
activeuserid = answer.msg.ownuserid;
|
||||
activeusername = answer.msg.username;
|
||||
allusers = answer.msg.users;
|
||||
updateUserSelBox();
|
||||
initializeOverviewDateFields();
|
||||
getOverview();
|
||||
bindUserSelection();
|
||||
bindNewEntryBtns();
|
||||
}
|
||||
}
|
||||
|
||||
function showCreateNewEntryAreaAndAllUsersList() {
|
||||
$("#newentrypart").show();
|
||||
$("#listofalluserspart").show();
|
||||
}
|
||||
|
||||
function getOverview() {
|
||||
var startdate = $("#datepickerstart").datepicker("getDate");
|
||||
var enddate = $("#datepickerend").datepicker("getDate");
|
||||
var userid = activeuserid;
|
||||
var data = {
|
||||
startday: startdate.getDate(),
|
||||
startmonth: (startdate.getMonth() + 1),
|
||||
startyear: startdate.getFullYear(),
|
||||
endday: enddate.getDate(),
|
||||
endmonth: (enddate.getMonth() + 1),
|
||||
endyear: enddate.getFullYear(),
|
||||
userid: userid
|
||||
};
|
||||
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=getoverview",data,handleOverviewAnswer,null);
|
||||
}
|
||||
|
||||
function handleOverviewAnswer(answer) {
|
||||
if (answer.status == "OK") {
|
||||
var txt = "";
|
||||
|
||||
txt += "<p><i><b>" + TIME_TOTAL_SUM[lang] + ": <u>";
|
||||
if (answer.msg.totalduration.status == "OK") {
|
||||
txt += minutesToHourMin(answer.msg.totalduration.minutes);
|
||||
} else {
|
||||
txt += TIME_NON_CALCULABLE[lang];
|
||||
}
|
||||
|
||||
txt += "</u></i><b><p>";
|
||||
|
||||
answer.msg.times.forEach(function(aTimeEntry, index) {
|
||||
var aDate = aTimeEntry.date;
|
||||
var dayno = aTimeEntry.dayno;
|
||||
|
||||
var dayname = TIME_DAYNAMES[dayno-1][lang];
|
||||
|
||||
var timesofdate = aTimeEntry.timesofdate;
|
||||
|
||||
if (timesofdate.length > 0) {
|
||||
txt += "<p><table class='infotable'>";
|
||||
txt += "<tr><th colspan=2 class='heading'>" + aDate + " (" + dayname + ")</tr>";
|
||||
|
||||
timesofdate.forEach(function(aTime,index2) {
|
||||
txt += "<tr>";
|
||||
var id = aTime.id;
|
||||
var actionid = aTime.action;
|
||||
var thetime = aTime.thetime;
|
||||
var timeparts = thetime.split(':');
|
||||
thetime = timeparts[0] + ":" + timeparts[1];
|
||||
var comment = toHtml(aTime.comment);
|
||||
var actiontxt = TIME_COME[lang];
|
||||
if (actionid == 2) {
|
||||
actiontxt = TIME_GO[lang];
|
||||
}
|
||||
txt += "<td>" + thetime + " - " + actiontxt;
|
||||
if (comment != '') {
|
||||
txt += " (" + comment + ")";
|
||||
}
|
||||
if (maymanageusers == 1) {
|
||||
txt += '<td><img src=img/delete.png class="deltimeentry" id="timeentry_' + id + '" />';
|
||||
}
|
||||
txt += "</tr>";
|
||||
});
|
||||
var workMinutesOfDay = aTimeEntry.workminutes;
|
||||
if (workMinutesOfDay.status == "OK") {
|
||||
txt += "<tr><td class='relevantdata' colspan=2>" + TIME_SUM[lang] + ": " + minutesToHourMin(workMinutesOfDay.minutes) + "</tr>";
|
||||
} else {
|
||||
txt += "<tr><td class='relevantdata' colspan=2>" + TIME_SUM[lang] + ": " + TIME_NON_CALCULABLE[lang] + "</tr>";
|
||||
}
|
||||
|
||||
txt += "</table>";
|
||||
}
|
||||
});
|
||||
|
||||
$("#overviewtable").html(txt);
|
||||
|
||||
if (answer["allusertimes"] != undefined) {
|
||||
txt = "<table class='infotable'>";
|
||||
var allusers = answer.allusertimes;
|
||||
allusers.forEach(function(aUserEntry,index) {
|
||||
var username = aUserEntry.username;
|
||||
var minutes = aUserEntry.minutes;
|
||||
if (minutes != "-1") {
|
||||
txt += "<tr><td>" + username + "<td>" + minutesToHourMin(minutes) + "</tr>";
|
||||
} else {
|
||||
txt += "<tr><td>" + username + "<td>" + TIME_NON_CALCULABLE[lang] + "</tr>";
|
||||
}
|
||||
});
|
||||
txt += "</table>";
|
||||
$("#allusersoverviewtable").html(txt);
|
||||
};
|
||||
|
||||
bindUserSelection();
|
||||
bindDelTimeEntry();
|
||||
}
|
||||
}
|
||||
|
||||
function bindDelTimeEntry() {
|
||||
$(".deltimeentry").off("click").on("click", function (e) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
|
||||
var id = this.id.split("_")[1];
|
||||
doAjax("POST","php/contenthandler.php?module=timetracking&command=delentry",{id:id},handleActionAnswer,null);
|
||||
});
|
||||
}
|
||||
|
||||
function clearNewEntryFields() {
|
||||
$("#timenew").val("");
|
||||
$("#commentnewentry").val("");
|
||||
}
|
||||
|
||||
function minutesToHourMin(minutes) {
|
||||
var hour = Math.floor(minutes/60);
|
||||
var min = minutes % 60;
|
||||
return hour + "h " + min + " min";
|
||||
}
|
||||
|
||||
$(document).on("pageinit", "#time-page", function () {
|
||||
initializeMainMenu("#modulemenu");
|
||||
hideMenu();
|
||||
$.ajaxSetup({ cache: false });
|
||||
$("#time-page").data("date",new Date());
|
||||
$("#comment").val("");
|
||||
clearNewEntryFields();
|
||||
getGeneralConfigItems();
|
||||
bindComeGoBtns();
|
||||
getAllowedOverviewUsers();
|
||||
handleDateChangeEvents();
|
||||
});
|
||||
|
||||
|
||||
</script>
|
||||
<div data-role="page" id="time-page">
|
||||
<div data-role="panel" id="modulepanel" data-position="right" data-display="overlay">
|
||||
<ul data-role="listview" id="modulemenu" data-divider-theme="a" data-inset="true">
|
||||
<li data-theme="b" data-role="heading">Hauptmenü</li>
|
||||
</ul>
|
||||
</div><!-- /panel -->
|
||||
<div data-role="header" data-theme="b" data-position="fixed" id="theheader">
|
||||
<h1><span id="timetitletxt">Zeiterfassung</span> <img src="img/connection.png" class="connectionstatus" style="display:none;" /> <img src="img/printerstatus.png" class="printerstatus" style="display:none;" /></h1>
|
||||
<div data-type="horizontal" style="top:0px;position:absolute;float:right;z-index:10;display:inline;" align="right" class="ui-btn-right">
|
||||
<a href="#" data-role="button" data-icon="arrow-d" data-ajax="false" id="menuswitch"><span id="modulstxt2">Hauptmenü</span></a>
|
||||
</div>
|
||||
</div>
|
||||
<div data-role="content" id="fullcontent">
|
||||
|
||||
<div data-role="collapsible" data-content-theme="c" data-collapsed="false" data-theme="e" id="useractions">
|
||||
<H2><span id="useractionstitle">Aktionen</span></H2>
|
||||
<p>
|
||||
<input name="comment" id="comment" type="text" class="whiteinput" placeholder="Kommentar" />
|
||||
<div class="ui-grid-a" >
|
||||
<div class="ui-block-a"><button id="comebtn" type="submit" data-theme="f" class="actionsbtn" ><span class="comebtntxt">Kommen</span></button></div>
|
||||
<div class="ui-block-b"><button id="gobtn" type="submit" data-theme="f" class="actionsbtn" ><span class="gobtntxt">Gehen</span></button></div>
|
||||
</div>
|
||||
</div> <!-- useractions -->
|
||||
|
||||
<div data-role="collapsible" data-content-theme="c" data-collapsed="false" data-theme="e" id="timeoverview">
|
||||
<H2><span id="useroverview">Übersicht</span></H2>
|
||||
<div id="userselpart"></div>
|
||||
<div data-role="fieldcontain">
|
||||
<label for="datepickerstart"><span id=datestarttxt>Datum S</span>: </label>
|
||||
<input data-role="date" data-inline="true" type="text" id="datepickerstart" data-theme="d" class="overviewdatepicker">
|
||||
</div>
|
||||
<div data-role="fieldcontain">
|
||||
<label for="datepickerend"><span id=dateendtxt>Datum E</span>: </label>
|
||||
<input data-role="date" data-inline="true" type="text" id="datepickerend" data-theme="d" class="overviewdatepicker">
|
||||
</div>
|
||||
|
||||
<p><div class="roundedborderarea">
|
||||
<h2><span id="listofentriestxt">Liste</span> <span id="selectedusername"></span></h2>
|
||||
<div id="overviewtable"></div>
|
||||
</div>
|
||||
|
||||
<p><div id="newentrypart" style="display:none;" class="roundedborderarea">
|
||||
<h2><span id="newentrytxt">Neueintrag</span></h2>
|
||||
<div data-role="fieldcontain" >
|
||||
<label for="datepickernew"><span id=datetxt>Datum </span>: </label>
|
||||
<input data-role="date" data-inline="true" type="text" id="datepickernew" data-theme="d" >
|
||||
</div>
|
||||
<div data-role="fieldcontain" >
|
||||
<label for="timenew"><span id=timetxt>Uhrzeit</span>: </label>
|
||||
<input type="text" id="timenew" name="timenew" class="whiteinput" placeholder="hh:mm" >
|
||||
</div>
|
||||
<input name="commentnewentry" id="commentnewentry" type="text" class="whiteinput" placeholder="Kommentar" />
|
||||
<div class="ui-grid-a" >
|
||||
<div class="ui-block-a"><button id="newcomebtn" type="submit" data-theme="f" class="newactionsbtn" ><span class="comebtntxt">Kommen</span></button></div>
|
||||
<div class="ui-block-b"><button id="newgobtn" type="submit" data-theme="f" class="newactionsbtn" ><span class="gobtntxt">Gehen</span></button></div>
|
||||
</div>
|
||||
</div> <!-- newentrypart -->
|
||||
|
||||
<p><div id="listofalluserspart" class="roundedborderarea" style="display:none;">
|
||||
<h2><span id="listofalluserstimestxt">Liste</span></h2>
|
||||
<div id="allusersoverviewtable"></div>
|
||||
</div>
|
||||
|
||||
</div> <!-- time overview -->
|
||||
|
||||
<br>
|
||||
</div>
|
||||
|
||||
<div data-role="footer" data-theme="b" id="thefooterr">
|
||||
<div class="ui-grid-a">
|
||||
<div class="ui-block-a userinfo" id="loggedinuser"></div>
|
||||
<div class="ui-block-b grid_right" id="versioninfo"></div>
|
||||
</div><!-- /grid-a -->
|
||||
</div> <!-- footer -->
|
||||
|
||||
</div> <!-- first page -->
|
||||
|
||||
</body>
|
||||
</html>
|
|
@ -4,8 +4,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
||||
<meta name="author" content="Stefan Pichel">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.4.18">
|
||||
<link rel="stylesheet" type="text/css" href="css/bestformat.css?v=1.5.0">
|
||||
<link rel="stylesheet" type="text/css" href="css/numfield.css?v=1.5.0">
|
||||
<link rel="stylesheet" href="php/contenthandler.php?module=admin&command=getmobilecss" />
|
||||
<link rel="stylesheet" href="php/3rdparty/orderstyle/jquery.mobile.icons.min.css" />
|
||||
|
||||
|
|
Loading…
Reference in New Issue