Sat, 17 Nov 2018 15:58:13 +0100
Removed default water setting from the inventory_waters table. Added global setup record with default settings and the default water selection. Added a setup screen.
--- a/www/getwatersources.php Fri Nov 16 16:20:17 2018 +0100 +++ b/www/getwatersources.php Sat Nov 17 15:58:13 2018 +0100 @@ -20,7 +20,6 @@ 'magnesium' => $row['magnesium'], 'ph' => $row['ph'], 'total_alkalinity' => $row['total_alkalinity'], - 'default_water' => $row['default_water'], 'cost' => $row['cost'] ); }
--- a/www/import/from_brouwhulp.php Fri Nov 16 16:20:17 2018 +0100 +++ b/www/import/from_brouwhulp.php Sat Nov 17 15:58:13 2018 +0100 @@ -212,7 +212,6 @@ ($water->NAME == "Spa Reine") || ($water->NAME == "Velsen") || ($water->NAME == "Zutphen") || ($water->NAME == "Aurele Bronwater (Colruyt)")) { $sql = "INSERT INTO inventory_waters SET name='" . mysqli_real_escape_string($db, $water->NAME); - ($water->DEFAULT_WATER == 'TRUE') ? $sql .= "', default_water='1" : $sql .= "', default_water='0"; } else { $sql = "INSERT INTO profile_water SET name='" . mysqli_real_escape_string($db, $water->NAME); } @@ -801,7 +800,6 @@ $waters .= ',"w_cost":' . floatval($water->COST); else $waters .= ',"w_cost":0.00'; - ($water->DEFAULT_WATER== "TRUE") ? $waters .= ',"w_default_water":true' : $waters.= ',"w_default_water":false'; $waters .= "}"; }
--- a/www/includes/db_inventory_water.php Fri Nov 16 16:20:17 2018 +0100 +++ b/www/includes/db_inventory_water.php Sat Nov 17 15:58:13 2018 +0100 @@ -10,19 +10,6 @@ } mysqli_set_charset($connect, "utf8" ); -/* - * If a new default will be set, clear the old default. - */ -function clear_default() { - global $connect; - - $usql = "UPDATE inventory_waters SET default_water='0' WHERE (default_water = '1');"; - $result = mysqli_query($connect, $usql); - if (! $result) { - syslog(LOG_NOTICE, "db_inventory_waters: " . $usql . " result: ".mysqli_error($connect)); - } -} - // get data and store in a json array $query = "SELECT * FROM inventory_waters ORDER BY name"; @@ -39,12 +26,6 @@ $sql .= "', ph='" . $_GET['ph']; $sql .= "', notes='" . mysqli_real_escape_string($connect, $_GET['notes']); $sql .= "', total_alkalinity='" . $_GET['total_alkalinity']; - if ($_GET['default_water'] == 'true') { - clear_default(); - $sql .= "', default_water='1"; - } else { - $sql .= "', default_water='0"; - } $sql .= "', inventory='" . $_GET['inventory']; $sql .= "', cost='" . $_GET['cost']; $sql .= "';"; @@ -69,12 +50,6 @@ $sql .= "', ph='" . $_GET['ph']; $sql .= "', notes='" . mysqli_real_escape_string($connect, $_GET['notes']); $sql .= "', total_alkalinity='" . $_GET['total_alkalinity']; - if ($_GET['default_water'] == 'true') { - clear_default(); - $sql .= "', default_water='1"; - } else { - $sql .= "', default_water='0"; - } $sql .= "', inventory='" . $_GET['inventory']; $sql .= "', cost='" . $_GET['cost']; $sql .= "' WHERE record='" . $_GET['record'] . "';"; @@ -114,7 +89,6 @@ 'ph' => $row['ph'], 'notes' => $row['notes'], 'total_alkalinity' => $row['total_alkalinity'], - 'default_water' => $row['default_water'], 'inventory' => $row['inventory'], 'cost' => $row['cost'] );
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/includes/db_setup.php Sat Nov 17 15:58:13 2018 +0100 @@ -0,0 +1,69 @@ +<?php +require($_SERVER['DOCUMENT_ROOT']."/config.php"); +require($_SERVER['DOCUMENT_ROOT']."/version.php"); + +#Connect to the database +$connect = mysqli_connect(DBASE_HOST, DBASE_USER, DBASE_PASS, DBASE_NAME); +if (! $connect) { + die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); +} +mysqli_set_charset($connect, "utf8" ); + +$escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c"); +$replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b"); + +$query = "SELECT * FROM profile_setup WHERE record='1'"; + +if (isset($_POST['update'])) { + /* Search water record */ + $result = mysqli_query($connect, "SELECT record FROM inventory_waters WHERE name='".$_POST['default_water']."';"); + if ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) + $default_water = $row['record']; + else + $default_water = 0; + $sql = "UPDATE `profile_setup` SET "; + $sql .= "brewery_name='" . mysqli_real_escape_string($connect, $_POST['brewery_name']); + $sql .= "', factor_mashhop='" . $_POST['factor_mashhop']; + $sql .= "', factor_fwh='" . $_POST['factor_fwh']; + $sql .= "', factor_pellet='" . $_POST['factor_pellet']; + $sql .= "', factor_plug='" . $_POST['factor_plug']; + $sql .= "', color_method='" . mysqli_real_escape_string($connect, $_POST['color_method']); + $sql .= "', ibu_method='" . mysqli_real_escape_string($connect, $_POST['ibu_method']); + $sql .= "', brix_correction='" . $_POST['brix_correction']; + $sql .= "', grain_absorbtion='" . $_POST['grain_absorbtion']; + $sql .= "', default_water='" . $default_water; + $sql .= "' WHERE record='1';"; +// syslog(LOG_NOTICE, $sql); + $result = mysqli_query($connect, $sql); + if (! $result) { + syslog(LOG_NOTICE, "db_profile_setup: ".$sql." result: ".mysqli_error($connect)); + } else { + syslog(LOG_NOTICE, "db_profile_setup: updated record 1"); + } + echo $result; +} else { + $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect)); + if ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { + /* search water name */ + $wresult = mysqli_query($connect, "SELECT name FROM inventory_waters WHERE record='".$row['default_water']."';"); + if ($wrow = mysqli_fetch_array($wresult, MYSQLI_ASSOC)) + $default_water = $wrow['name']; + else + $default_water = ''; + $data = '{"record":' . $row['record']; + $data .= ',"brewery_name":"' . str_replace($escapers, $replacements, $row['brewery_name']); + $data .= '","factor_mashhop":' . $row['factor_mashhop']; + $data .= ',"factor_fwh":' . $row['factor_fwh']; + $data .= ',"factor_pellet":' . $row['factor_pellet']; + $data .= ',"factor_plug":' . $row['factor_plug']; + $data .= ',"ibu_method":"' . str_replace($escapers, $replacements, $row['ibu_method']); + $data .= '","color_method":"' . str_replace($escapers, $replacements, $row['color_method']); + $data .= '","brix_correction":' . floatval($row['brix_correction']); + $data .= ',"grain_absorbtion":' . floatval($row['grain_absorbtion']); + $data .= ',"default_water":"' . str_replace($escapers, $replacements, $default_water); + $data .= '"}'; + } + header("Content-type: application/json"); + echo $data; +} +?>
--- a/www/includes/global.inc.php Fri Nov 16 16:20:17 2018 +0100 +++ b/www/includes/global.inc.php Sat Nov 17 15:58:13 2018 +0100 @@ -149,11 +149,12 @@ <li><a href="inv_instock.php">Voorraad lijst</a></li> </ul> </li> - <li>Profielen + <li>Instellingen <ul> <li><a href="profile_water.php">Water profielen</a></li> <li><a href="profile_mash.php">Maisch schemas</a></li> <li><a href="profile_styles.php">Bierstijlen</a></li> + <li><a href="profile_setup.php">Instellingen</a></li> </ul> </li> <li>Over
--- a/www/inv_waters.php Fri Nov 16 16:20:17 2018 +0100 +++ b/www/inv_waters.php Sat Nov 17 15:58:13 2018 +0100 @@ -48,9 +48,7 @@ </tr> <tr> <td style="vertical-align: top; float: right;">Onbeperkt op voorraad:</td> - <td><div id="unlimited_stock"></div></td> - <td style="vertical-align: top; float: right;">Standaard water:</td> - <td><div id="default_water"></div></td> + <td colspan="3"><div id="unlimited_stock"></div></td> </tr> <tr> <td style="vertical-align: top; float: right;">Voorraad:</td>
--- a/www/js/inv_waters.js Fri Nov 16 16:20:17 2018 +0100 +++ b/www/js/inv_waters.js Sat Nov 17 15:58:13 2018 +0100 @@ -56,7 +56,6 @@ $("#magnesium").jqxTooltip({ content: 'Magnesium (Mg).' }); $("#ph").jqxTooltip({ content: 'De zuurgraad (pH).' }); $("#total_alkalinity").jqxTooltip({ content: 'Totale alkaliniteit.' }); - $("#default_water").jqxTooltip({ content: 'Is dit het standaard water voor de meeste bieren.' }); $("#inventory").jqxTooltip({ content: 'Voorraad in liters.' }); $("#cost").jqxTooltip({ content: 'Kostprijs per liter. 5 cijfers achter de comma zodat het kraanwater er ook in kan.' }); // prepare the data @@ -76,7 +75,6 @@ { name: 'ph', type: 'float' }, { name: 'notes', type: 'string' }, { name: 'total_alkalinity', type: 'float' }, - { name: 'default_water', type: 'bool' }, { name: 'inventory', type: 'float' }, { name: 'cost', type: 'float' } ], @@ -144,7 +142,6 @@ $("#notes").jqxInput({ theme: theme, width: 640, height: 100 }); $("#total_alkalinity").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 70, height: 23, min: 0, decimalDigits: 1, spinButtons: true }); - $("#default_water").jqxCheckBox({ theme: theme, width: 120, height: 23 }); $("#inventory").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 70, height: 23, min: 0, decimalDigits: 1, spinButtons: true }); $("#cost").jqxNumberInput({inputMode: 'simple', spinMode: 'simple', theme: theme, width: 110, height: 23, min: 0, decimalDigits: 5, spinButtons: true }); var dataAdapter = new $.jqx.dataAdapter(source); @@ -178,7 +175,6 @@ $("#ph").val(''); $("#notes").val(''); $("#total_alkalinity").val(''); - $("#default_water").val(''); $("#inventory").val(''); $("#cost").val(''); $("#popupWindow").jqxWindow('open'); @@ -189,7 +185,6 @@ columns: [ { text: 'Water leverancier', datafield: 'name', width: 225 }, { text: 'Opmerkingen', datafield: 'notes' }, - { text: 'Standaard', datafield: 'default_water', columntype: 'checkbox', width: 80 }, { text: 'Onbeperkt', datafield: 'unlimited_stock', columntype: 'checkbox', width: 80 }, { text: 'Liters', datafield: 'inventory', width: 70, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, { text: 'Wijzig', datafield: 'Edit', width: 120, align: 'center', columntype: 'button', cellsrenderer: function () { @@ -211,7 +206,6 @@ $("#ph").val(dataRecord.ph); $("#notes").val(dataRecord.notes); $("#total_alkalinity").val(dataRecord.total_alkalinity); - $("#default_water").val(dataRecord.default_water); $("#inventory").val(dataRecord.inventory); $("#cost").val(dataRecord.cost); // show the popup window. @@ -258,7 +252,6 @@ ph: parseFloat($("#ph").jqxNumberInput('decimal')), notes: $("#notes").val(), total_alkalinity: parseFloat($("#total_alkalinity").jqxNumberInput('decimal')), - default_water: $("#default_water").val(), inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), cost: parseFloat($("#cost").jqxNumberInput('decimal')) }; @@ -279,7 +272,6 @@ ph: parseFloat($("#ph").jqxNumberInput('decimal')), notes: $("#notes").val(), total_alkalinity: parseFloat($("#total_alkalinity").jqxNumberInput('decimal')), - default_water: $("#default_water").val(), inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), cost: parseFloat($("#cost").jqxNumberInput('decimal')) };
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/js/profile_setup.js Sat Nov 17 15:58:13 2018 +0100 @@ -0,0 +1,147 @@ +/***************************************************************************** + * Copyright (C) 2018 + * + * Michiel Broek <mbroek at mbse dot eu> + * + * This file is part of BMS + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2, or (at your option) any + * later version. + * + * BrewCloud is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with ThermFerm; see the file COPYING. If not, write to the Free + * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + *****************************************************************************/ + + +$(document).ready(function () { + + var dataRecord = {}; + + // dropdownlist datasource from inventory_waters, must load sync + var waterUrl = "getwatersources.php"; + var waterInvSource = { + datatype: "json", + datafields: [ + { name: 'name', type: 'string' }, + ], + url: waterUrl, + async: false + }; + var waterlist = new $.jqx.dataAdapter(waterInvSource); + + var url = "includes/db_setup.php"; + + // Tooltips + $("#brewery_name").jqxTooltip({ content: 'De naam voor deze brouwerij.' }); + $("#factor_mashhop").jqxTooltip({ content: 'Het efficientie percentage voor hop tijdens de maisch.' }); + $("#factor_fwh").jqxTooltip({ content: 'Het efficientie percentage voor First Wort Hop.' }); + $("#factor_pellet").jqxTooltip({ content: 'Het efficientie percentage bij gebruik van hop pellets.' }); + $("#factor_plug").jqxTooltip({ content: 'Het efficientie percentage bij gebruik van hop plugs.' }); + $("#brix_correction").jqxTooltip({ content: 'Omzettingsfactor voor Plato naar Brix' }); + $("#grain_absorbtion").jqxTooltip({ content: 'Absorbtie van water door graan (L/Kg)' }); + + // Prepare the data + var source = { + datatype: "json", + cache: false, + datafields: [ + { name: 'brewery_name', type: 'string' }, + /* { name: 'brewery_logo', type: 'array' }, */ + { name: 'factor_mashhop', type: 'number' }, + { name: 'factor_fwh', type: 'number' }, + { name: 'factor_pellet', type: 'number' }, + { name: 'factor_plug', type: 'number' }, + { name: 'ibu_method', type: 'string' }, + { name: 'color_method', type: 'string' }, + { name: 'brix_correction', type: 'float' }, + { name: 'grain_absorbtion', type: 'float' }, + { name: 'default_water', type: 'string' } + ], + url: url + }; + + // Load data and select one record. + var dataAdapter = new $.jqx.dataAdapter(source, { + loadComplete: function () { + var records = dataAdapter.records; + dataRecord = records[0]; + $("#brewery_name").val(dataRecord.brewery_name); + $("#factor_mashhop").val(dataRecord.factor_mashhop); + $("#factor_fwh").val(dataRecord.factor_fwh); + $("#factor_pellet").val(dataRecord.factor_pellet); + $("#factor_plug").val(dataRecord.factor_plug); + $("#color_method").val(dataRecord.color_method); + $("#ibu_method").val(dataRecord.ibu_method); + $("#brix_correction").val(dataRecord.brix_correction); + $("#grain_absorbtion").val(dataRecord.grain_absorbtion); + $("#default_water").val(dataRecord.default_water); + }, + loadError: function (jqXHR, status, error) { + }, + }); + dataAdapter.dataBind(); + + // Editers + var srcColor = [ "Morey", "Mosher", "Daniels" ]; + var srcIBU = [ "Tinseth", "Rager", "Daniels" ]; // Only these are supported at this time. + $("#brewery_name").jqxInput({ theme: theme, width: 640, height: 23 }); + $("#factor_fwh").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: -50, max: 50, decimalDigits: 0, spinButtons: true, symbol: '%', symbolPosition: 'right' }); + $("#factor_mashhop").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: -50, max: 50, decimalDigits: 0, spinButtons: true, symbol: '%', symbolPosition: 'right' }); + $("#factor_pellet").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: -50, max: 50, decimalDigits: 0, spinButtons: true, symbol: '%', symbolPosition: 'right' }); + $("#factor_plug").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: -50, max: 50, decimalDigits: 0, spinButtons: true, symbol: '%', symbolPosition: 'right' }); + $("#brix_correction").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: 1.00, max: 1.08, decimalDigits: 2, spinButtons: true, spinButtonsStep: 0.01 }); + $("#grain_absorbtion").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 100, height: 23, min: 1.00, max: 1.25, decimalDigits: 2, spinButtons: true, spinButtonsStep: 0.01 }); + $("#color_method").jqxDropDownList({ theme: theme, source: srcColor, width: 125, height: 23, dropDownHeight: 95 }); + $("#ibu_method").jqxDropDownList({ theme: theme, source: srcIBU, width: 125, height: 23, dropDownHeight: 95 }); + $('#default_water').jqxDropDownList({ + placeHolder: "Kies water:", + theme: theme, + source: waterlist, + valueMember: "name", + displayMember: "name", + width: 250, + height: 27, + dropDownHorizontalAlignment: 'right', + dropDownWidth: 300 + }); + $('#default_water').jqxDropDownList( 'selectItem', dataRecord.default_water ); + + $("#Save").jqxButton({ template: "success", width: '90px', theme: theme }); + $("#Save").click(function () { + var row = { + record: 1, + brewery_name: $("#brewery_name").val(), + factor_mashhop: $("#factor_mashhop").val(), + factor_fwh: $("#factor_fwh").val(), + factor_pellet: $("#factor_pellet").val(), + factor_plug: $("#factor_plug").val(), + color_method: $("#color_method").val(), + ibu_method: $("#ibu_method").val(), + brix_correction: parseFloat($("#brix_correction").jqxNumberInput('decimal')), + grain_absorbtion: parseFloat($("#grain_absorbtion").jqxNumberInput('decimal')), + default_water: $("#default_water").val() + }; + var data = "update=true&" + $.param(row); + $.ajax({ + dataType: 'json', + url: url, + cache: false, + data: data, + type: "POST", + success: function (data, status, xhr) { + // update command is executed. + //window.location.href = my_return; + }, + error: function(jqXHR, textStatus, errorThrown) { + } + }); + }); +});
--- a/www/js/rec_edit.js Fri Nov 16 16:20:17 2018 +0100 +++ b/www/js/rec_edit.js Sat Nov 17 15:58:13 2018 +0100 @@ -992,7 +992,6 @@ { name: 'w_ph', type: 'float' }, { name: 'w_total_alkalinity', type: 'float' }, { name: 'w_cost', type: 'float' }, - { name: 'w_default_water', type: 'bool' } ], addrow: function (rowid, rowdata, position, commit) { commit(true); @@ -1018,7 +1017,6 @@ { name: 'ph', type: 'float' }, { name: 'total_alkalinity', type: 'float' }, { name: 'cost', type: 'float' }, - { name: 'default_water', type: 'bool' } ], url: waterUrl, async: true @@ -1065,7 +1063,6 @@ row["w_magnesium"] = datarecord.magnesium; row["w_ph"] = datarecord.ph; row["w_total_alkalinity"] = datarecord.total_alkalinity; - row["w_default_water"] = datarecord.default_water; row["w_cost"] = datarecord.cost; var commit = $("#waterGrid").jqxGrid('addrow', null, row); }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/www/profile_setup.php Sat Nov 17 15:58:13 2018 +0100 @@ -0,0 +1,54 @@ +<?php +require_once($_SERVER['DOCUMENT_ROOT'].'/includes/global.inc.php'); +page_header('Brouwerij instellingen', 'profile_setup' ); +?> + + <div id="MainPanel"> + <div style="overflow: hidden;"> + <table style="width: 100%;"> + <tr> + <td style="vertical-align: top; float: right; padding: 3px;">Brouwerij naam:</td> + <td align="left" colspan="5" style="vertical-align: top; padding: 3px;"><input id="brewery_name" /></td> + </tr> + <tr> + <td colspan="6"><hr></td> + </tr> + <tr> + <td colspan="3"></td> + <th>Brouw instellingen</th> + <td colspan="2"></td> + </tr> + <tr> + <td style="vertical-align: top; float: right; padding: 3px;">First Wort Hop factor:</td> + <td style="padding: 3px;"><div id="factor_fwh"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Maischhop factor:</td> + <td style="padding: 3px;"><div id="factor_mashhop"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Kleur methode:</td> + <td style="padding: 3px;"><div style="float: left;" id="color_method"></div></td> + </tr> + <tr> + <td style="vertical-align: top; float: right; padding: 3px;">Pellet factor:</td> + <td style="padding: 3px;"><div id="factor_pellet"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Plug factor:</td> + <td style="padding: 3px;"><div id="factor_plug"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Bitterheid methode:</td> + <td style="padding: 3px;"><div style="float: left;" id="ibu_method"></div></td> + </tr> + <tr> + <td style="vertical-align: top; float: right; padding: 3px;">Brix correctie factor:</td> + <td style="padding: 3px;"><div id="brix_correction"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Graan absorbtie:</td> + <td style="padding: 3px;"><div id="grain_absorbtion"></div></td> + <td style="vertical-align: top; float: right; padding: 3px;">Standaard water:</td> + <td style="padding: 3px;"><div style="float: left;" id="default_water"></div></td> + </tr> + </table> + <div style="float: right; margin-top: 330px; margin-bottom: 10px;"> + <input style="margin-right: 595px;" type="button" id="Save" value="Save" /> + </div> + </div> + </div> + +<?php +page_footer(); +?>