ordersprinter/webapp/php/products.php

1240 lines
45 KiB
PHP
Raw Normal View History

2020-11-19 22:47:44 +01:00
<?php
// Datenbank-Verbindungsparameter
require_once ('dbutils.php');
require_once ('queuecontent.php');
require_once ('commonutils.php');
require_once ('utilities/userrights.php');
require_once ('utilities/HistFiller.php');
require_once ('utilities/sorter.php');
2020-11-19 22:59:47 +01:00
require_once ('utilities/TypeAndProducts/ProductEntry.php');
2020-11-19 22:47:44 +01:00
class Products {
var $dbutils;
var $queue;
var $commonUtils;
var $userrights;
var $histfiller;
var $sorter;
function __construct() {
$this->dbutils = new DbUtils();
$this->queue = new QueueContent();
$this->commonUtils = new CommonUtils();
$this->userrights = new Userrights();
$this->histfiller = new HistFiller();
$this->sorter = new Sorter();
}
function isCmdAllowed($rights) {
if ($this->userrights->isCmdAllowedForUser($rights)) {
return true;
} else {
echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG));
return false;
}
}
function handleCommand($command) {
$cmdArray = array('showDbProducts', 'getMenuLevelUp', 'applySingleProdData', 'createExtra', 'applyExtra', 'delExtra','sortup','sortdown', 'delproduct', 'reassign', 'applyType', 'delType', 'getSingleProdData', 'getSingleTypeData', 'getPriceLevelInfo','setPriceLevelInfo', 'createProduct','createProdType','addGeneralComment','changeGeneralComment','delGeneralComment','upGeneralComment','downGeneralComment');
if (in_array($command, $cmdArray)) {
if (!($this->userrights->hasCurrentUserRight('right_products'))) {
if ($command == 'createProdType') {
echo json_encode(array("status" => "ERROR", "code" => ERROR_PRODUCTS_NOT_AUTHOTRIZED, "msg" => ERROR_PRODUCTS_NOT_AUTHOTRIZED_MSG));
} else {
echo "Benutzerrechte nicht ausreichend!";
}
return false;
}
}
if($command == 'showDbProducts') {
$this->showDbProducts();
} else if ($command == 'getMenu') {
if ($this->isCmdAllowed(R_PRO)) {
$this->getMenu($_GET['ref'],null);
}
} else if ($command == 'getMenuLevelUp') {
$this->getMenuLevelUp($_GET['ref']);
} else if ($command == 'getSpeisekarte') {
if ($this->userrights->hasCurrentUserRight('is_admin') || ($this->userrights->hasCurrentUserRight('right_manager'))) {
2020-11-19 22:59:47 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
echo json_encode($this->getSpeisekarte($pdo));
2020-11-19 22:47:44 +01:00
} else {
2020-11-19 22:59:47 +01:00
echo json_encode(array("status" => "ERROR", "code" => ERROR_NOT_AUTHOTRIZED, "msg" => ERROR_NOT_AUTHOTRIZED_MSG));
2020-11-19 22:47:44 +01:00
}
} else if ($command == 'exportCsv') {
if (($this->userrights->hasCurrentUserRight('is_admin'))
|| ($this->userrights->hasCurrentUserRight('right_manager'))) {
$this->exportCsv();
}
} else if ($command == 'getAllTypesAndAvailProds') {
$this->getAllTypesAndAvailProds();
} else if ($command == 'getAllAvailProdsAlphaSorted') {
$this->getAllAvailProdsAlphaSorted();
} else if ($command == 'getAllExtrasAlphaSorted') {
$this->getAllExtrasAlphaSorted();
} else if ($command == 'getSingleProdData') {
2020-11-19 22:54:51 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
$this->getSingleProdData($pdo,$_GET['id']);
2020-11-19 22:47:44 +01:00
} else if ($command == 'getSingleTypeData') {
$this->getSingleTypeData($_GET['id']);
} else if ($command == 'applySingleProdData') {
$extras = null;
if(isset($_POST['extras'])) {
$extras = $_POST['extras'];
}
2020-11-19 23:00:42 +01:00
$prodEntry = new ProductEntry();
$prodEntry->createFromPostData($_POST);
$this->applySingleProdData($prodEntry,$_POST['changeExtras'],$extras,$_POST['assignextrastotype']);
2020-11-19 22:47:44 +01:00
} else if ($command == 'createExtra') {
$this->createExtra($_POST['name'],$_POST['price']);
} else if ($command == 'delExtra') {
$this->delExtra($_POST['id']);
} else if ($command == 'applyExtra') {
$this->applyExtra($_POST['name'],$_POST['price'],$_POST['id']);
} else if ($command == 'sortup') {
$this->sortup($_POST['prodid']);
} else if ($command == 'sortdown') {
$this->sortdown($_POST['prodid']);
} else if ($command == 'delproduct') {
$this->delproduct($_POST['prodid']);
} else if ($command == 'createProduct') {
2020-11-19 23:00:42 +01:00
$prodEntry = new ProductEntry();
$prodEntry->createFromPostData($_POST);
$this->createProduct($prodEntry);
2020-11-19 22:47:44 +01:00
} else if ($command == 'reassign') {
$this->reassign($_POST['productid'],$_POST['typeid']);
} else if ($command == 'createProdType') {
$this->createProdType($_POST['refid'],$_POST['name']);
} else if ($command == 'applyType') {
$this->applyType($_POST['id'],$_POST['name'],$_POST['kind'],$_POST['usekitchen'],$_POST['usesupply'],$_POST['printer']);
} else if ($command == 'delType') {
$this->delType($_POST['id']);
} else if ($command == 'getPriceLevelInfo') {
$this->getPriceLevelInfo();
} else if ($command == 'setPriceLevelInfo') {
$this->setPriceLevelInfo($_POST['priceLevelId']);
} else if ($command == 'getAudioFiles') {
$this->getAudioFiles();
} else if ($command == 'addGeneralComment') {
$this->addGeneralComment($_POST['comment']);
} else if ($command == 'getAllGeneralComments') {
if ($this->userrights->hasCurrentUserRight('is_admin') || ($this->userrights->hasCurrentUserRight('right_waiter')) || ($this->userrights->hasCurrentUserRight('right_products'))) {
$this->getAllGeneralComments();
} else {
echo "Fehlende Benutzerechte";
}
} else if ($command == 'changeGeneralComment') {
$this->changeGeneralComment($_POST['id'],$_POST['comment']);
} else if ($command == 'delGeneralComment') {
$this->delGeneralComment($_POST['id']);
} else if ($command == 'upGeneralComment') {
$this->upGeneralComment($_POST['id']);
} else if ($command == 'downGeneralComment') {
$this->downGeneralComment($_POST['id']);
} else if ($command == 'getAssignedExtrasOfProd') {
if ($this->isCmdAllowed(R_WAI | R_PRO)) {
$this->getAssignedExtrasOfProd($_GET['prodid']);
}
} else {
echo "Command not supported.";
}
}
function getDateValueAsBoolInterpretatedIcon($aValue) {
if ($aValue != '0' ) {
$imgFile = "ok.png";
} else {
$imgFile = "notavailable.png";
}
return $imgFile;
}
private function getAllTypesAndAvailProds() {
$pdo = DbUtils::openDbAndReturnPdoStatic();
$pdo->beginTransaction();
$sql = "select setting FROM %config% WHERE name=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array("pricelevel"));
$row = $stmt->fetchObject();
$pricelevel = $row->setting;
$priceTxt = "priceA";
if ($pricelevel == 2) {
$priceTxt = "priceB";
} else if ($pricelevel == 3) {
$priceTxt = "priceC";
}
$sql = "select id,name,reference from %prodtype% where removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll();
$typeArray = array();
foreach($result as $row) {
$ref = $row['reference'];
if ($ref == null) {
$ref = 0;
}
$typeArray[] = array("id" => $row['id'], "name" => $row['name'], "ref" => $ref);
}
2020-11-19 23:00:31 +01:00
$sql = "select id,shortname,longname,audio,category as ref,favorite,$priceTxt as price,IF(tax is not null, tax, 'null') as tax,IF(taxaustria is not null, taxaustria, 'null') as taxaustria,IF(amount is not null, amount, 'null') as amount from %products% where available='1' AND removed is null ORDER BY sorting";
2020-11-19 22:47:44 +01:00
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll();
$prodArray = array();
foreach($result as $row) {
$ref = $row['ref'];
if ($ref == null) {
$ref = 0;
}
$audio = $row['audio'];
if ($audio == null) {
$audio = "";
}
$fav = $row['favorite'];
if ($fav == null) {
$fav = 0;
}
$sql = "SELECT DISTINCT %extras%.id AS extraid,%extras%.name AS name FROM %extras%,%extrasprods%
WHERE %extrasprods%.prodid=? AND %extras%.id=%extrasprods%.extraid AND %extras%.removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($row['id']));
$extras = $stmt->fetchAll(PDO::FETCH_OBJ);
2020-11-19 23:00:31 +01:00
$prodArray[] = array("id" => $row['id'], "name" => $row['shortname'], "longname" => $row['longname'], "audio" => $audio, "ref" => $ref, "favorite" => $fav, "price" => $row['price'], "tax" => $row['tax'], "taxaustria" => $row['taxaustria'],"amount" => $row['amount'],"extras" => $extras);
2020-11-19 22:47:44 +01:00
}
$pdo->commit();
$retArray = array("types" => $typeArray, "prods" => $prodArray);
echo json_encode($retArray);
}
/*
* Return all available product with id and name, category
* (used for re-assignment to type)
*/
function getAllAvailProdsAlphaSorted() {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "select id,longname,category from %products% WHERE available='1' AND removed is null ORDER BY longname";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
echo json_encode($result);
}
function getAllExtrasAlphaSorted() {
$pdo = $this->dbutils->openDbAndReturnPdo();
$ret = $this->getAllExtrasAlphaSortedCore($pdo);
echo json_encode(array("status" => "OK", "msg" => $ret));
}
function getAllExtrasAlphaSortedCore($pdo) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "select id,name,price from %extras% WHERE removed is null ORDER BY name";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
return $result;
}
/*
* Return in array all products with their id and longname that have a reference to
* the given category.
*
* The output is this:
* ["id" => 1, "longname" => "Whatever Product"],
* ["id" => 2, "longname" => "Whatever Other Product"], ...
*/
2020-11-19 22:54:51 +01:00
private function getProductsWithReferenz($pdo,$ref) {
2020-11-19 22:47:44 +01:00
$prods = array();
2020-11-19 23:00:31 +01:00
$sql = "SELECT id,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, 'null') as tax,IF(taxaustria is not null, taxaustria, 'null') as taxaustria,available,IF(amount is not null, amount, 'null') as amount,audio from %products% where removed is null AND category is null ORDER BY sorting";
2020-11-19 22:47:44 +01:00
if ($ref > 0) {
2020-11-19 23:00:31 +01:00
$sql = "SELECT id,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, 'null') as tax,IF(taxaustria is not null, taxaustria, 'null') as taxaustria,available,IF(amount is not null, amount, 'null') as amount,audio from %products% where removed is null AND category=$ref ORDER BY sorting";
2020-11-19 22:47:44 +01:00
}
2020-11-19 22:54:51 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $zeile) {
2020-11-19 22:47:44 +01:00
$prod_entry = array(
"id" => $zeile['id'],
"shortname" => $zeile['shortname'],
"longname" => $zeile['longname'],
"available" => $zeile['available'],
"priceA" => $zeile['priceA'],
"priceB" => $zeile['priceB'],
"priceC" => $zeile['priceC'],
"tax" => $zeile['tax'],
2020-11-19 23:00:31 +01:00
"taxaustria" => $zeile['taxaustria'],
"amount" => $zeile['amount'],
2020-11-19 22:47:44 +01:00
"audio" => ($zeile['audio'] == null ? '' : $zeile['audio']),
"type" => "p");
$prods[] = $prod_entry;
}
return $prods;
}
private static function getAllSubTypes($pdo,$prodtypeid) {
$sql = "SELECT id,reference FROM %prodtype% WHERE reference=? AND removed is null";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($prodtypeid));
$allSubTypes = $stmt->fetchAll(PDO::FETCH_OBJ);
$subtypeids = array();
foreach ($allSubTypes as $aType) {
$typeids = self::getAllSubTypes($pdo,$aType->id);
$subtypeids = array_merge($subtypeids,$typeids);
}
return array_merge(array($prodtypeid),$subtypeids);
}
private static function getAllProdIdOfSameTypeAndBelow($pdo,$prodid) {
$sql = "SELECT category FROM %products% WHERE id=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($prodid));
$row =$stmt->fetchObject();
$theType = $row->category;
$allTypes = self::getAllSubTypes($pdo,$theType);
$prodIds = array();
foreach ($allTypes as $aTypeId) {
$sql = "SELECT id FROM %products% WHERE category=? AND removed is null";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($aTypeId));
$allProdIdsOfThisType = $stmt->fetchAll(PDO::FETCH_OBJ);
foreach($allProdIdsOfThisType as $aProd) {
$prodIds[] = $aProd->id;
}
}
return $prodIds;
}
/*
* Return in array all types with their id and name that have a reference to
* the given category.
*
* The output is this:
* ["id" => 1, "name" => "Meal"],
* ["id" => 2, "name" => "Drinks"], ...
*/
2020-11-19 22:54:51 +01:00
private function getProdTypesWithReferenz($pdo,$ref) {
$sql = "SELECT id,name,kind,usekitchen,usesupplydesk,printer,'t' as type from %prodtype% where removed is null AND reference is null";
2020-11-19 22:47:44 +01:00
if ($ref > 0) {
2020-11-19 22:54:51 +01:00
$sql = "SELECT id,name,kind,usekitchen,usesupplydesk,printer,'t' as type from %prodtype% where removed is null AND reference=$ref";
2020-11-19 22:47:44 +01:00
}
2020-11-19 22:54:51 +01:00
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$types = $stmt->fetchAll();
2020-11-19 22:47:44 +01:00
return $types;
}
function showDbProducts() {
2020-11-19 22:54:51 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
$productArray = $this->getDbProductsWithRef_json_version($pdo,0,0);
2020-11-19 22:47:44 +01:00
echo json_encode($productArray);
}
private function getMenuLevelUp($ref) {
// from which type does the current type reference to?
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "SELECT reference from %prodtype% where removed is null AND id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($ref));
$currentRef =$stmt->fetchObject();
$this->getMenu($currentRef->reference,$pdo);
}
private function getMenu($ref,$pdo) {
if (is_null($pdo)) {
$pdo = $this->dbutils->openDbAndReturnPdo();
}
if (!is_null($ref) && ($ref>0)) {
$sql = "SELECT id,name,kind,usekitchen,usesupplydesk,printer,'t' as type from %prodtype% where removed is null AND id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($ref));
$currentProdType =$stmt->fetchObject();
} else {
$currentProdType = null;
}
if (!is_null($ref) && ($ref>0)) {
$sql = "SELECT id,name,kind,usekitchen,usesupplydesk,printer,'t' as type from %prodtype% where removed is null AND reference=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($ref));
} else {
$sql = "SELECT id,name,kind,usekitchen,usesupplydesk,printer,'t' as type from %prodtype% where removed is null AND reference is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
}
$containedTypes = $stmt->fetchAll(PDO::FETCH_OBJ);
if (!is_null($ref) && ($ref>0)) {
2020-11-19 23:00:31 +01:00
$sql = "SELECT id,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, 'null') as tax,IF(taxaustria is not null, taxaustria, 'null') as taxaustria,available,IF(amount is not null, amount, 'null') as amount,favorite,audio,'p' as type from %products% where removed is null AND category=? ORDER BY sorting";
2020-11-19 22:47:44 +01:00
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($ref));
} else {
2020-11-19 23:00:31 +01:00
$sql = "SELECT id,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, 'null') as tax,IF(taxaustria is not null, taxaustria, 'null') as taxaustria,available,IF(amount is not null, amount, 'null') as amount,favorite,audio,'p' as type from %products% where removed is null AND category is null ORDER BY sorting";
2020-11-19 22:47:44 +01:00
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
}
$containedProds = $stmt->fetchAll(PDO::FETCH_OBJ);
$msg = array("currentType" => $currentProdType,"containedTypes" => $containedTypes,"containedProds" => $containedProds);
echo json_encode(array("status" => "OK", "msg" => $msg));
}
2020-11-19 22:54:51 +01:00
function readDbProducts($pdo) {
$speisekarte = $this->readDbProductsWithRef_json_version($pdo,0,0);
2020-11-19 22:59:47 +01:00
$speisekarte .= $this->readExtrasFromDb($pdo);
2020-11-19 22:47:44 +01:00
return $speisekarte;
}
function readExtrasFromDb($pdo) {
if (is_null($pdo)) {
$pdo = $this->dbutils->openDbAndReturnPdo();
}
$sql = "SELECT id,name,price FROM %extras% WHERE removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
$extrasTxt = "";
2020-11-19 22:59:47 +01:00
$decpoint = $this->getDecPoint($pdo);
2020-11-19 22:47:44 +01:00
foreach ($result as $aRes) {
$extrasTxt .= "!" . $aRes->name . " (ID:" . $aRes->id . ") #" ;
$priceTxt = number_format($aRes->price, 2, $decpoint, '');
$extrasTxt .= $priceTxt;
$sql = "SELECT prodid FROM %extrasprods% WHERE extraid=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($aRes->id));
$assignedProds = $stmt->fetchAll(PDO::FETCH_OBJ);
$assProdArr = array();
foreach ($assignedProds as $anAssProd) {
$assProdArr[] = "(" . $anAssProd->prodid . ")";
}
$extrasTxt .= " ; " . join(",",$assProdArr) . "\n";
}
return $extrasTxt;
}
2020-11-19 22:59:47 +01:00
private function getDecPoint($pdo) {
2020-11-19 22:47:44 +01:00
$sql = "SELECT name,setting FROM %config% WHERE name=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array("decpoint"));
$row = $stmt->fetchObject();
return($row->setting);
}
private function exportCsv() {
2020-11-19 22:54:51 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
2020-11-19 22:59:47 +01:00
$decpoint = $this->getDecPoint($pdo);
2020-11-19 22:47:44 +01:00
$file_name = "datenexport-produkte.csv";
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");
echo("Eintragsid; Datum ; Produktid; Kurzname; Langname; Preis (Stufe A); Preis (Stufe B);");
echo("Preis (Stufe C); Steuer; Verfügbarkeit; Favorit; Extras/Optionen; Beschreibung");
echo("\n");
$sql = "SELECT DISTINCT %hist%.id as id,date,";
$sql .= "prodid,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, '-') as tax,available,favorite,extras,description ";
$sql .= " FROM %hist%, %histprod%, %histactions% ";
$sql .= " WHERE (refid=%histprod%.id) ";
$sql .= " AND (action='1' OR action='4' OR action='5') ";
$sql .= " AND (action=%histactions%.id) ";
$sql .= " ORDER BY date,id";
2020-11-19 22:54:51 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $zeile) {
2020-11-19 22:47:44 +01:00
$val1 = $zeile['id'];
$val2 = $zeile['date'];
$val3 = $zeile['prodid'];
$val4 = str_replace('"','""',$zeile['shortname']);
$val5 = str_replace('"','""',$zeile['longname']);
$val6 = str_replace(".",$decpoint,$zeile['priceA']);
$val7 = str_replace(".",$decpoint,$zeile['priceB']);
$val8 = str_replace(".",$decpoint,$zeile['priceC']);
$val9 = str_replace(".",$decpoint,$zeile['tax']);
$val10 = ($zeile['available'] == '1' ? "Ja" : "Nein");
$val11 = ($zeile['favorite'] == '1' ? "Ja" : "Nein");
$val12 = $zeile['extras'];
$val13 = $zeile['description'];
echo "$val1; $val2; $val3; \"$val4\"; \"$val5\"; $val6; $val7; $val8; $val9; $val10; $val11; $val12; $val13\n";
}
}
2020-11-19 22:54:51 +01:00
function getSingleProdData($pdo,$id) {
2020-11-19 22:47:44 +01:00
if (is_numeric($id)) {
2020-11-19 22:54:51 +01:00
$sql = "SELECT id,shortname,longname,priceA,priceB,priceC,IF(tax is not null, tax, 'null') as tax,available,audio,favorite from %products% where id=?";
2020-11-19 22:47:44 +01:00
2020-11-19 22:54:51 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($id));
$row = $stmt->fetchObject();
echo json_encode($row);
2020-11-19 22:47:44 +01:00
}
}
function getSingleTypeData($id) {
if (is_numeric($id)) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "SELECT id,name,usekitchen,usesupplydesk,kind,reference FROM %prodtype% WHERE removed is NULL AND id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
$affectedRows = $stmt->rowCount();
if ($affectedRows == 1) {
$row = $stmt->fetchObject();
echo json_encode(array("status" => "OK", "msg" => $row));
}
} else {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
function reassign($prodid,$typeid) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// getSortingOfProduct
$this->sorter->resortAfterProduct($pdo, $prodid);
$sql = "UPDATE %products% SET category=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($typeid,$prodid));
$affectedRows = $stmt->rowCount();
$pdo->commit();
if ($affectedRows == 1) {
// now declare as set to end to list
$this->sorter->setMaxSortingForProdId($pdo, $prodid);
echo json_encode(array("status" => "OK"));
} else {
echo json_encode(array("status" => "ERROR"));
}
}
private function getMaxSortOfGenComment($pdo) {
$sql = "SELECT MAX(sorting) as maxsort from %comments% WHERE prodid is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$row = $stmt->fetchObject();
$maxSorting = 0;
if ($row != null) {
$maxSorting = intval($row->maxsort);
}
return $maxSorting;
}
private function getAssignedExtrasOfProd($prodid) {
$ret = $this->getAssignedExtrasOfProdCore($prodid,null);
echo json_encode(array("status" => "OK", "msg" => $ret, "prodid" => $prodid));
}
private function getAssignedExtrasOfProdCore($prodid,$pdo) {
if (is_null($pdo)) {
$pdo = $this->dbutils->openDbAndReturnPdo();
}
$sql = "SELECT DISTINCT %extras%.id AS extraid FROM %extras%,%extrasprods%
WHERE %extrasprods%.prodid=? AND %extras%.id=%extrasprods%.extraid AND %extras%.removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($prodid));
$result = $stmt->fetchAll(PDO::FETCH_OBJ);
$ids = array();
foreach ($result as $aRes) {
$ids[] = $aRes->extraid;
}
return $ids;
}
// to be called by manager-readSpeisekarte
public static function createExtraCore($pdo,$name,$price,$assignedProdIds) {
if (is_null($pdo)) {
$pdo = DbUtils::openDbAndReturnPdoStatic();
}
$sql = "SELECT id FROM %extras% WHERE name=? AND removed is null";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($name));
$numberOfExtras = $stmt->rowCount();
if ($numberOfExtras > 0) {
return ERROR_NAME_EXISTS_ALREADY;
}
$sql = "INSERT INTO `%extras%` (`id`,`name`,`price`) VALUES(NULL,?,?)";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($name,$price));
$lastExtraId = $pdo->lastInsertId();
$sql = "DELETE FROM %extrasprods% WHERE id=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($lastExtraId));
foreach ($assignedProdIds as $assProdId) {
$sql = "INSERT INTO %extrasprods% (`id` , `extraid` , `prodid`) VALUES (NULL,?,?)";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($lastExtraId,$assProdId));
$histextra = self::getExtrasForProd($pdo,$assProdId);
self::updateHistOnlyForExtrasOfProd($pdo, $assProdId,$histextra);
}
return OK;
}
private function createExtra($name,$price) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
2020-11-19 22:53:50 +01:00
$ret = self::createExtraCore($pdo,$name,$price,array());
2020-11-19 22:47:44 +01:00
if ($ret == ERROR_NAME_EXISTS_ALREADY) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_NAME_EXISTS_ALREADY, "msg" => ERROR_NAME_EXISTS_ALREADY_MSG));
$pdo->rollBack();
return;
}
$pdo->commit();
$this->getAllExtrasAlphaSorted();
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function applyExtra($name,$price,$id) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$sql = "SELECT id FROM %extras% WHERE name=? AND id <> ? AND removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($name,$id));
$numberOfExtras = $stmt->rowCount();
if ($numberOfExtras > 0) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_NAME_EXISTS_ALREADY, "msg" => ERROR_NAME_EXISTS_ALREADY_MSG, "id" => $id));
$pdo->rollBack();
return;
}
$sql = "UPDATE %extras% SET name=?, price=? WHERE id=? AND removed is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($name,$price,$id));
$numberOfExtras = $stmt->rowCount();
if ($numberOfExtras != 1) {
echo json_encode(array("status" => "ERROR", "code" => DB_NOT_CHANGED, "msg" => DB_NOT_CHANGED_MSG, "id" => $id));
$pdo->rollBack();
return;
}
$pdo->commit();
$this->getAllExtrasAlphaSorted();
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG, "id" => $id));
}
}
private function delExtra($id) {
// TODO: hist!
// TODO: extrasprods cleanen
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "UPDATE %extras% SET removed='1' WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
$this->getAllExtrasAlphaSorted();
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
/**
* Add a new comment to the list of general comments that are not bound to a product
* @param string $comment
*/
private function addGeneralComment($comment) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// what is the max sort number because it shall be added afterwards
$maxSorting = $this->getMaxSortOfGenComment($pdo);
// insert the comment
$sql = "INSERT INTO `%comments%` (`id`,`comment`,`prodid`,`active`,`sorting`) VALUES(NULL,?,NULL,1,?)";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($comment,$maxSorting+1));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function getAllGeneralComments() {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "SELECT id,comment,sorting FROM %comments% WHERE prodid is null ORDER BY sorting ASC";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute();
$result = $stmt->fetchAll();
$commentArray = array();
foreach($result as $row) {
$commentArray[] = array("id" => $row['id'], "comment" => $row['comment'], "sorting" => $row['sorting']);
}
echo json_encode(array("status" => "OK", "msg" => $commentArray));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function changeGeneralComment($id,$comment) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$sql = "UPDATE %comments% SET comment=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($comment,$id));
echo json_encode(array("status" => "OK"));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function getSortingOfComment($pdo,$id) {
$sql = "SELECT sorting FROM %comments% WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
$row = $stmt->fetchObject();
if ($row == null) {
return (-1);
} else {
return intval($row->sorting);
}
}
private function delGeneralComment($id) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// which sorting has the comment to delete?
$sorting = $this->getSortingOfComment($pdo, $id);
if ($sorting < 0) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
return;
}
// delete the comment
$sql = "DELETE FROM %comments% WHERE id=? AND prodid is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
// subtract all sortings by one higher then the deleted sorting index
$sql = "SELECT id,sorting FROM %comments% WHERE sorting>? AND prodid is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting));
$result = $stmt->fetchAll();
$commentsToUpdate = array();
foreach($result as $row) {
$theId = $row['id'];
$theSort = intval($row['sorting'])-1;
$sql = "UPDATE %comments% SET sorting=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($theSort,$theId));
}
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function upGeneralComment($id) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// which sorting has the comment to delete?
$sorting = $this->getSortingOfComment($pdo, $id);
if ($sorting < 0) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
return;
}
if ($sorting == 1) {
// finished
$pdo->commit();
echo json_encode(array("status" => "OK"));
return;
}
// get comment before
$sql = "SELECT id FROM %comments% WHERE sorting=? AND prodid is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting - 1));
$row = $stmt->fetchObject();
$previousId = $row->id;
// change these two comments in its ordering
$sql = "UPDATE %comments% SET sorting=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting,$previousId));
$sql = "UPDATE %comments% SET sorting=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting-1,$id));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
private function downGeneralComment($id) {
try {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// which sorting has the comment to delete?
$sorting = $this->getSortingOfComment($pdo, $id);
if ($sorting < 0) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
return;
}
// is it at end of list?
$maxSorting = $this->getMaxSortOfGenComment($pdo);
if (($maxSorting == 0) || ($maxSorting == $sorting)) {
// finished
$pdo->commit();
echo json_encode(array("status" => "OK"));
return;
}
// get comment afterwards
$sql = "SELECT id FROM %comments% WHERE sorting=? AND prodid is null";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting + 1));
$row = $stmt->fetchObject();
$nextId = $row->id;
// change these two comments in its ordering
$sql = "UPDATE %comments% SET sorting=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting,$nextId));
$sql = "UPDATE %comments% SET sorting=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($sorting+1,$id));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
catch (PDOException $e) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
}
}
function sortup($prodid) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$this->sorter->sortup($pdo, $prodid);
$pdo->commit();
echo json_encode("OK");
}
function sortdown($prodid) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$this->sorter->sortdown($pdo, $prodid);
$pdo->commit();
echo json_encode("OK");
}
function delproduct($prodid) {
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$this->sorter->delproduct($pdo, $prodid);
$pdo->commit();
echo json_encode("OK");
}
2020-11-19 23:00:42 +01:00
function applySingleProdData(ProductEntry $prodEntry,$changeExtras,$extras,$assignextrastotype) {
$id = $prodEntry->getProdId();
if (!is_numeric($id)) {
return;
}
$pdo = DbUtils::openDbAndReturnPdoStatic();
$pdo->beginTransaction();
$prodEntry->applyProductInDb($pdo);
2020-11-19 22:47:44 +01:00
if ($assignextrastotype == 0) {
if ($changeExtras == 1) {
$this->changeExtraAssignment($pdo, $id, $extras);
}
// now this has to be logged in the history tables...
2020-11-19 22:59:47 +01:00
HistFiller::updateProdInHist($pdo,$id);
2020-11-19 22:47:44 +01:00
} else {
$prodids = self::getAllProdIdOfSameTypeAndBelow($pdo,$id);
foreach ($prodids as $aProdId) {
$this->changeExtraAssignment($pdo, $aProdId, $extras);
$histextra = self::getExtrasForProd($pdo,$aProdId);
self::updateHistOnlyForExtrasOfProd($pdo, $aProdId,$histextra);
}
}
$pdo->commit();
2020-11-19 22:54:51 +01:00
$this->getSingleProdData($pdo,$id);
2020-11-19 22:47:44 +01:00
}
private static function updateHistOnlyForExtrasOfProd($pdo,$aProdId,$histextra) {
2020-11-19 22:59:47 +01:00
HistFiller::updateProdInHist($pdo, $aProdId);
2020-11-19 22:47:44 +01:00
}
function changeExtraAssignment($pdo,$prodid,$extras) {
$sql = "DELETE FROM %extrasprods% WHERE prodid=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($prodid));
$histextra = "";
if (!is_null($extras) && ($extras != "")) {
$sql = "INSERT INTO %extrasprods% (`id` , `extraid` , `prodid`) VALUES (NULL,?,?)";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
foreach($extras as $anExtra) {
$stmt->execute(array($anExtra,$prodid));
}
}
}
private static function getExtrasForProd($pdo,$prodid) {
$sql = "SELECT DISTINCT %extras%.name as extraname from %extras%,%extrasprods% where %extras%.removed is null AND %extrasprods%.extraid=%extras%.id AND %extrasprods%.prodid=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array($prodid));
$result = $stmt->fetchAll();
$extraArr = array();
if (count($result) == 0) {
return "";
} else {
foreach($result as $row) {
$extraArr[] = $row['extraname'];
}
return(implode(", ", $extraArr));
}
}
function createProdType($id,$prodTypeName) {
if (!is_numeric($id)) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_ID_TYPE, "msg" => ERROR_GENERAL_ID_TYPE_MSG));
return;
}
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
// which kind is the referenced type?
$sql = "SELECT kind FROM %prodtype% WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($id));
$row =$stmt->fetchObject();
if ($row == null) {
echo json_encode(array("status" => "ERROR", "code" => ERROR_GENERAL_DB_NOT_READABLE, "msg" => ERROR_GENERAL_DB_NOT_READABLE_MSG));
return;
}
$kind = $row->kind;
$sql = "INSERT INTO `%prodtype%` (`id`,`name`,`usekitchen`,`usesupplydesk`,`kind`,`printer`,`sorting`,`reference`) ";
$sql .= " VALUES(NULL,?,1,1,?,1,NULL,?)";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($sql));
$stmt->execute(array($prodTypeName,$kind,$id));
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
2020-11-19 23:00:42 +01:00
function createProduct(ProductEntry $prodEntry) {
$typeId = $prodEntry->getCategory();
$available = $prodEntry->getAvailable();
$favorite = $prodEntry->getFavorite();
$priceA = $prodEntry->getPriceA();
$priceB = $prodEntry->getPriceB();
$priceC = $prodEntry->getPriceC();
$tax = $prodEntry->getTax();
$taxaustria = $prodEntry->getTaxAustria();
$audioFile = $prodEntry->getAudio();
$shortname = $prodEntry->getShortName();
$longname = $prodEntry->getLongName();
$amount = $prodEntry->getAmount();
if (!is_numeric($typeId)) {
2020-11-19 22:47:44 +01:00
return;
}
2020-11-19 23:00:42 +01:00
try {
$pdo = DbUtils::openDbAndReturnPdoStatic();
$pdo->beginTransaction();
$newProdId = $prodEntry->createProductInDb($pdo);
$this->sorter->setMaxSortingForProdId($pdo, $newProdId);
2020-11-19 22:47:44 +01:00
2020-11-19 23:00:42 +01:00
$pdo->commit();
} catch (Exception $e) {
echo json_encode("ERROR: " . $e->getMessage());
return;
}
2020-11-19 22:47:44 +01:00
// now this has to be logged in the history tables...
2020-11-19 22:59:47 +01:00
HistFiller::createProdInHist($pdo, $newProdId);
2020-11-19 22:47:44 +01:00
echo json_encode("OK: sql");
}
/*
* Change the properties of a type of products
*/
function applyType($id,$name,$kind,$usekitchen,$usesupply,$printer) {
if (!is_numeric($id) || !is_numeric($kind) || !is_numeric($usekitchen) || !is_numeric($usesupply) || !is_numeric($printer)) {
return;
}
$pdo = $this->dbutils->openDbAndReturnPdo();
$updateSql = "UPDATE %prodtype% SET kind=?, name=?, usekitchen=?, usesupplydesk=?, printer=? WHERE id=?";
$stmt = $pdo->prepare($this->dbutils->resolveTablenamesInSqlString($updateSql));
$stmt->execute(array($kind,$name,$usekitchen,$usesupply,$printer,$id));
echo json_encode("OK: $updateSql");
}
function delType($id) {
if (!is_numeric($id)) {
echo json_encode(array("status" => "FAILED"));
}
$pdo = $this->dbutils->openDbAndReturnPdo();
$pdo->beginTransaction();
$this->delTypeCore($pdo, $id);
$pdo->commit();
echo json_encode(array("status" => "OK"));
}
function delTypeCore($pdo,$id) {
2020-11-19 22:54:51 +01:00
$allTypesInThisLevel = $this->getProdTypesWithReferenz($pdo,$id);
2020-11-19 22:47:44 +01:00
foreach ($allTypesInThisLevel as $aType) {
$this->delTypeCore($pdo, $aType["id"]);
}
2020-11-19 22:54:51 +01:00
$allProdsInThisLevel = $this->getProductsWithReferenz($pdo,$id);
2020-11-19 22:47:44 +01:00
foreach ($allProdsInThisLevel as $aProd) {
self::declareProductAsDeletedWithoutResort($pdo, $aProd["id"]);
}
self::declareTypeAsDeleted($pdo, $id);
}
static private function declareTypeAsDeleted($pdo,$id) {
$sql = "UPDATE %prodtype% SET removed=? WHERE id=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array(1,$id));
}
static private function declareProductAsDeletedWithoutResort($pdo,$id) {
$sql = "UPDATE %products% SET removed=? WHERE id=?";
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute(array(1,$id));
}
/*
* Return a html table with all products in a structured way
*/
2020-11-19 22:54:51 +01:00
private function getDbProductsWithRef_json_version($pdo,$ref,$depth) {
2020-11-19 22:47:44 +01:00
$allProdsAndTypesInThisLevel = array();
2020-11-19 22:54:51 +01:00
$allProdsInThisLevel = $this->getProductsWithReferenz($pdo,$ref);
$allTypesInThisLevel = $this->getProdTypesWithReferenz($pdo,$ref);
2020-11-19 22:47:44 +01:00
for ($index_prod=0;$index_prod<count($allProdsInThisLevel);$index_prod++) {
$aProd = $allProdsInThisLevel[$index_prod];
$allProdsAndTypesInThisLevel[] = array("entry" => $aProd, "content" => '');
}
for ($index_type=0;$index_type < count($allTypesInThisLevel);$index_type++) {
$aProdType = $allTypesInThisLevel[$index_type];
$typeRef = $aProdType['id'];
2020-11-19 22:54:51 +01:00
$allProdsAndTypesInThisLevel[] = array("entry" => $aProdType,"content" => $this->getDbProductsWithRef_json_version($pdo,$typeRef,$depth+1));
2020-11-19 22:47:44 +01:00
}
return $allProdsAndTypesInThisLevel;
}
// return in text format
2020-11-19 22:54:51 +01:00
private function readDbProductsWithRef_json_version($pdo,$ref,$depth) {
2020-11-19 22:59:47 +01:00
$decpoint = $this->getDecPoint($pdo);
2020-11-19 22:47:44 +01:00
$text = "";
2020-11-19 22:54:51 +01:00
$allProdsInThisLevel = $this->getProductsWithReferenz($pdo,$ref);
$allTypesInThisLevel = $this->getProdTypesWithReferenz($pdo,$ref);
2020-11-19 22:47:44 +01:00
for ($index_prod=0;$index_prod<count($allProdsInThisLevel);$index_prod++) {
$aProd = $allProdsInThisLevel[$index_prod];
// Kurzname ; NormalPreis (Stufe A); Langname # Preis (Stufe B); Preis (Stufe C)
2020-11-19 22:59:47 +01:00
$prodText = ProductEntry::createProductStr($aProd,$decpoint);
$text .= substr(" ", 0, $depth) . $prodText . "\n";
2020-11-19 22:47:44 +01:00
}
for ($index_type=0;$index_type < count($allTypesInThisLevel);$index_type++) {
$aProdType = $allTypesInThisLevel[$index_type];
$typeRef = $aProdType['id'];
$indent = substr ( " " , 0 ,$depth);
$prodTypeName = $aProdType['name'];
$kind = ($aProdType['kind'] == 0 ? "F" : "D");
$usekitchen = ($aProdType['usekitchen'] == 1 ? "K" : "");
$usesupplydesk = ($aProdType['usesupplydesk'] == 1 ? "B" : "");
$printer = ($aProdType['printer']);
$text .= $indent . $prodTypeName . " = $usekitchen$usesupplydesk$kind = $printer\n";
2020-11-19 22:54:51 +01:00
$text .= $this->readDbProductsWithRef_json_version($pdo,$typeRef,$depth+1);
2020-11-19 22:47:44 +01:00
}
return $text;
}
private function getPriceLevelInfo() {
2020-11-19 22:54:51 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
2020-11-19 22:47:44 +01:00
if(session_id() == '') {
session_start();
}
$lang = $_SESSION['language'];
2020-11-19 22:54:51 +01:00
$currentPriceLevel = $this->commonUtils->getCurrentPriceLevel($pdo);
2020-11-19 22:47:44 +01:00
$currentPriceLevelId = $currentPriceLevel["id"];
$currentPriceLevelName = $currentPriceLevel["name"];
$pricelevels = array();
$sql = "SELECT id,name,info FROM %pricelevel%";
if ($lang == 1) {
$sql = "SELECT id,name,info_en as info FROM %pricelevel%";
} else if ($lang == 2) {
$sql = "SELECT id,name,info_esp as info FROM %pricelevel%";
}
2020-11-19 22:54:51 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
$stmt->execute();
$result = $stmt->fetchAll();
foreach($result as $zeile) {
2020-11-19 22:47:44 +01:00
$theId = $zeile['id'];
$selected = "0";
if ($theId == $currentPriceLevelId) {
$selected = "1";
}
$levels_entry = array(
"id" => $theId,
"name" => $zeile['name'],
"info" => $zeile['info'],
"selected" => $selected);
$pricelevels[] = $levels_entry;
}
$retArray = array("currentId" => $currentPriceLevelId, "currentName" => $currentPriceLevelName, "levels" => $pricelevels);
echo json_encode($retArray);
}
private function setPriceLevelInfo($levelId) {
if (is_numeric($levelId)) {
2020-11-19 22:54:51 +01:00
$pdo = DbUtils::openDbAndReturnPdoStatic();
$updateSql = "UPDATE %config% SET setting=? WHERE name='pricelevel'";
$stmt = $pdo->prepare(DbUtils::substTableAlias($updateSql));
$stmt->execute(array($levelId));
2020-11-19 22:47:44 +01:00
echo json_encode("OK");
}
}
2020-11-19 22:59:47 +01:00
public function getSpeisekarte($pdo) {
2020-11-19 22:47:44 +01:00
$legend = file_get_contents("../customer/menulegend.txt");
2020-11-19 22:59:47 +01:00
$decpoint = $this->getDecPoint($pdo);
2020-11-19 22:47:44 +01:00
$sql = "SELECT * FROM %products% WHERE removed is null";
2020-11-19 22:59:47 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
2020-11-19 22:47:44 +01:00
$stmt->execute();
$numberOfProds = $stmt->rowCount();
$sql = "SELECT * FROM %prodtype% WHERE removed is null";
2020-11-19 22:59:47 +01:00
$stmt = $pdo->prepare(DbUtils::substTableAlias($sql));
2020-11-19 22:47:44 +01:00
$stmt->execute();
$numberOfProdTypes = $stmt->rowCount();
$predef = file_get_contents ("../customer/speisekarte.txt");
$predef = str_replace('{.}',$decpoint,$predef);
if (($numberOfProds == 0) && ($numberOfProdTypes == 0)) {
// no products defined yet - present Beispiel
$text = $legend;
} else {
2020-11-19 22:54:51 +01:00
$text = $legend . $this->readDbProducts($pdo);
2020-11-19 22:47:44 +01:00
}
2020-11-19 22:59:47 +01:00
return array("status" => "OK","msg" => $text, "predef" => $predef);
2020-11-19 22:47:44 +01:00
}
private function endsWith($haystack, $needle)
{
return $needle === "" || substr($haystack, -strlen($needle)) === $needle;
}
private function getAudioFiles() {
$dir = '../customer';
$fileList = scandir($dir);
$audioFiles = array();
foreach ($fileList as $aFile) {
if ($this->endsWith($aFile, '.mp3') || $this->endsWith($aFile, '.ogg') || $this->endsWith($aFile, '.wav')) {
$audioFiles[] = $aFile;
}
}
echo json_encode($audioFiles);
}
}
?>