Thu, 24 Jan 2019 20:54:45 +0100
Miscs from bool to ints. Miscs database uses POST instead of GET. Dropdowns are unsing indexes. Dynamic edit screen adjust for weight and liter. Edit screen redesigned. Friendly show duration of ingredients.
--- a/README.design Wed Jan 23 22:53:24 2019 +0100 +++ b/README.design Thu Jan 24 20:54:45 2019 +0100 @@ -36,7 +36,7 @@ inventory_equipments Ok. Ok. inventory_fermentables Ok. Ok. Ok. Ok. Ok. Ok. inventory_hops Ok. Ok. Ok. Ok. Ok. Ok. -inventory_miscs Ok. +inventory_miscs Ok. Ok. Ok. Ok. Ok. Ok. inventory_suppliers Ok. Ok. inventory_water Ok. Ok. inventory_yeasts Ok. Ok. Ok. Ok. Ok. Ok. @@ -47,13 +47,11 @@ recipes products + Handelsmaten (een zooitje ongeregeld): -vergistbare ingredienten: Prijs per kilo, hoeveelheid in gram. -hoppen Prijs per ons, hoeveelheid in gram. Kruiden Prijs per gram, hoeveelheden in gram. Additieven Prijs per 100 ml, hoeveeheid in ml. Water Prijs per liter of kuub, hoveelheden in liters. -Gist Prijs per gram / ml. hoeveelheden in gram/ml. Alles naar standaard maten in de database en presentatie naar behoefte? Opslag kilos, liter en Euros met veel cijfers achter de comma.
--- a/www/import/from_brouwhulp.php Wed Jan 23 22:53:24 2019 +0100 +++ b/www/import/from_brouwhulp.php Thu Jan 24 20:54:45 2019 +0100 @@ -276,10 +276,18 @@ $sql .= "', best_for='" . mysqli_real_escape_string($db, $yeast->BEST_FOR); if ($yeast->MAX_REUSE) $sql .= "', max_reuse='" . $yeast->MAX_REUSE; + + if ($yeast->FORM == 'Liquid') { + $sql .= "', cells='100000000000"; // 100 billion cells per pack + } else if ($yeast->FORM == 'Dry') { + $sql .= "', cells='15000000000"; // 6..15 billion per gram + } else { + $sql .= "', cells='1700000000"; // 1.7 billion cells per ml. + } if ($yeast->INVENTORY) - $sql .= "', inventory='" . floatval($yeast->INVENTORY) / 1000.0; + $sql .= "', inventory='" . floatval($yeast->INVENTORY) / 1000.0; // To kg or liter if ($yeast->COST) - $sql .= "', cost='" . floatval($yeast->COST) * 1000.0; + $sql .= "', cost='" . floatval($yeast->COST) * 1000.0; // to Euro/kg or liter if ($yeast->CULTURE_DATE) { $date = substr($yeast->CULTURE_DATE, 6, 4) . '-' . substr($yeast->CULTURE_DATE, 3, 2) . '-' . substr($yeast->CULTURE_DATE, 0, 2); $sql .= "', production_date='" . $date; @@ -356,8 +364,39 @@ $sql = "INSERT INTO inventory_miscs SET name='" . mysqli_real_escape_string($db, $misc->NAME); if ($misc->NOTES) $sql .= "', notes='" . mysqli_real_escape_string($db, $misc->NOTES); - $sql .= "', type='" . $misc->TYPE; - $sql .= "', use_use='" . $misc->USE; + + if ($misc->TYPE == 'Spice') + $sql .= "', type='0"; + else if ($misc->TYPE == 'Herb') + $sql .= "', type='1"; + else if ($misc->TYPE == 'Flavor') + $sql .= "', type='2"; + else if ($misc->TYPE == 'Fining') + $sql .= "', type='3"; + else if ($misc->TYPE == 'Water agent') + $sql .= "', type='4"; + else if ($misc->TYPE == 'Yeast nutrient') + $sql .= "', type='5"; + else if ($misc->TYPE == 'Other') + $sql .= "', type='6"; + else + echo "Unknown TYPE " . $misc->TYPE . PHP_EOL; + + if ($misc->USE == 'Starter') + $sql .= "', use_use='0"; + else if ($misc->USE == 'Mash') + $sql .= "', use_use='1"; + else if ($misc->USE == 'Boil') + $sql .= "', use_use='2"; + else if ($misc->USE == 'Primary') + $sql .= "', use_use='3"; + else if ($misc->USE == 'Secondary') + $sql .= "', use_use='4"; + else if ($misc->USE == 'Bottling') + $sql .= "', use_use='5"; + else + echo "Unknown USE " . $misc->USE . PHP_EOL; + $sql .= "', time='" . $misc->TIME; ($misc->AMOUNT_IS_WEIGHT == 'TRUE') ? $sql .= "', amount_is_weight='1" : $sql .= "', amount_is_weight='0"; if ($misc->USE_FOR)
--- a/www/includes/db_inventory_miscs.php Wed Jan 23 22:53:24 2019 +0100 +++ b/www/includes/db_inventory_miscs.php Thu Jan 24 20:54:45 2019 +0100 @@ -10,67 +10,68 @@ } mysqli_set_charset($connect, "utf8" ); -// get data and store in a json array -$query = "SELECT * FROM inventory_miscs ORDER BY name"; -if (isset($_GET['insert'])) { - // INSERT COMMAND - $sql = "INSERT INTO `inventory_miscs` SET name='" . mysqli_real_escape_string($connect, $_GET['name']); - $sql .= "', type='" . $_GET['type']; - $sql .= "', use_use='" . $_GET['use_use']; - $sql .= "', time='" . $_GET['time']; - ($_GET['amount_is_weight'] == 'true') ? $sql .= "', amount_is_weight='1" : $sql .= "', amount_is_weight='0"; - $sql .= "', use_for='" . mysqli_real_escape_string($connect, $_GET['use_for']); - $sql .= "', notes='" . mysqli_real_escape_string($connect, $_GET['notes']); - ($_GET['always_on_stock'] == 'true') ? $sql .= "', always_on_stock='1" : $sql .= "', always_on_stock='0"; - $sql .= "', inventory='" . $_GET['inventory']; - $sql .= "', cost='" . $_GET['cost']; - $sql .= "', production_date='" . $_GET['production_date']; - $sql .= "', tht_date='" . $_GET['tht_date']; - $sql .= "';"; +if (isset($_POST['insert']) || isset($_POST['update'])) { + if (isset($_POST['insert'])) { + $sql = "INSERT INTO `inventory_miscs` SET "; + } + if (isset($_POST['update'])) { + $sql = "UPDATE `inventory_miscs` SET "; + } + + $sql .= "name='" . mysqli_real_escape_string($connect, $_POST['name']); + $sql .= "', type='" . $_POST['type']; + $sql .= "', use_use='" . $_POST['use_use']; + $sql .= "', time='" . $_POST['time']; + ($_POST['amount_is_weight'] == 'true') ? $sql .= "', amount_is_weight='1" : $sql .= "', amount_is_weight='0"; + $sql .= "', use_for='" . mysqli_real_escape_string($connect, $_POST['use_for']); + $sql .= "', notes='" . mysqli_real_escape_string($connect, $_POST['notes']); + ($_POST['always_on_stock'] == 'true') ? $sql .= "', always_on_stock='1" : $sql .= "', always_on_stock='0"; + $sql .= "', inventory='" . floatval($_POST['inventory']) / 1000.0; + $sql .= "', cost='" . $_POST['cost'] . "'"; + if ($_POST['production_date'] == '') + $sql .= ", production_date=NULL"; + else + $sql .= ", production_date='" . $_POST['production_date'] . "'"; + if ($_POST['tht_date'] == '') + $sql .= ", tht_date=NULL"; + else + $sql .= ", tht_date='" . $_POST['tht_date'] . "'"; + + if (isset($_POST['insert'])) { + $sql .= ";"; + } + if (isset($_POST['update'])) { + $sql .= " WHERE record='" . $_POST['record'] . "';"; + } + syslog(LOG_NOTICE, $sql); + $result = mysqli_query($connect, $sql); if (! $result) { syslog(LOG_NOTICE, "db_inventory_miscs: ".$sql." result: ".mysqli_error($connect)); } else { - syslog(LOG_NOTICE, "db_inventory_miscs: inserted ".$_GET['name']); + if (isset($_POST['update'])) { + syslog(LOG_NOTICE, "db_inventory_miscs: updated record ".$_POST['record']); + } else { + $lastid = mysqli_insert_id($connect); + syslog(LOG_NOTICE, "db_inventory_miscs: inserted record ".$lastid); + } } echo $result; -} else if (isset($_GET['update'])) { - // UPDATE COMMAND - $sql = "UPDATE `inventory_miscs` SET name='" . mysqli_real_escape_string($connect, $_GET['name']); - $sql .= "', type='" . $_GET['type']; - $sql .= "', use_use='" . $_GET['use_use']; - $sql .= "', time='" . $_GET['time']; - ($_GET['amount_is_weight'] == 'true') ? $sql .= "', amount_is_weight='1" : $sql .= "', amount_is_weight='0"; - $sql .= "', use_for='" . mysqli_real_escape_string($connect, $_GET['use_for']); - $sql .= "', notes='" . mysqli_real_escape_string($connect, $_GET['notes']); - ($_GET['always_on_stock'] == 'true') ? $sql .= "', always_on_stock='1" : $sql .= "', always_on_stock='0"; - $sql .= "', inventory='" . $_GET['inventory']; - $sql .= "', cost='" . $_GET['cost']; - $sql .= "', production_date='" . $_GET['production_date']; - $sql .= "', tht_date='" . $_GET['tht_date']; - $sql .= "' WHERE record='" . $_GET['record'] . "';"; +} else if (isset($_POST['delete'])) { + // DELETE COMMAND + $sql = "DELETE FROM `inventory_miscs` WHERE record='".$_POST['record']."';"; $result = mysqli_query($connect, $sql); if (! $result) { syslog(LOG_NOTICE, "db_inventory_miscs: ".$sql." result: ".mysqli_error($connect)); } else { - syslog(LOG_NOTICE, "db_inventory_miscs: updated record ".$_GET['record']); - } - echo $result; - -} else if (isset($_GET['delete'])) { - // DELETE COMMAND - $sql = "DELETE FROM `inventory_miscs` WHERE record='".$_GET['record']."';"; - $result = mysqli_query($connect, $sql); - if (! $result) { - syslog(LOG_NOTICE, "db_inventory_miscs: ".$sql." result: ".mysqli_error($connect)); - } else { - syslog(LOG_NOTICE, "db_inventory_miscs: deleted record ".$_GET['record']); + syslog(LOG_NOTICE, "db_inventory_miscs: deleted record ".$_POST['record']); } echo $result; } else { // SELECT COMMAND + $query = "SELECT * FROM inventory_miscs ORDER BY name"; $result = mysqli_query($connect, $query) or die("SQL Error 1: " . mysqli_error($connect)); while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $miscs[] = array( @@ -83,7 +84,7 @@ 'use_for' => $row['use_for'], 'notes' => $row['notes'], 'always_on_stock' => $row['always_on_stock'], - 'inventory' => $row['inventory'], + 'inventory' => floatval($row['inventory']) * 1000.0, 'cost' => $row['cost'], 'production_date' => $row['production_date'], 'tht_date' => $row['tht_date']
--- a/www/inv_miscs.php Wed Jan 23 22:53:24 2019 +0100 +++ b/www/inv_miscs.php Thu Jan 24 20:54:45 2019 +0100 @@ -13,40 +13,45 @@ <div id="popupWindow"> <div>Wijzig ingredient.</div> <div style="overflow: hidden;"> - <table> + <table style="width: 100%;"> <tr> <td align="right" style="vertical-align: top;">Ingredient naam:</td> <td align="left" colspan="3" style="vertical-align: top;"><input id="name" /></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Soort:</td> - <td align="left"><div id="type" /></div></td> - <td align="right" style="vertical-align: top;">Gebruik tijdens:</td> - <td align="left"><div id="use_use" /></div></td> - </tr> - <tr> - <td align="right" style="vertical-align: top;">Gebruik tijd:</td> - <td align="left" style="vertical-align: top;"><input id="time" /></td> - <td align="right" style="vertical-align: top;">Hoeveelheid is gewicht:</td> - <td align="left"><div id="amount_is_weight"></div></td> - </tr> - <tr> - <td align="right" style="vertical-align: top;">Toepassing:</td> - <td align="left" colspan="3"><textarea id="use_for"></textarea></td> - </tr> - <tr> <td align="right" style="vertical-align: top;">Opmerkingen:</td> <td align="left" colspan="3"><textarea id="notes"></textarea></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Altijd op voorraad::</td> - <td align="left" colspan="3"><div id="always_on_stock"></div></td> + <td align="right" style="vertical-align: top;">Type:</td> + <td align="left"><div id="type" /></div></td> + <td align="right" style="vertical-align: top;"><div id="pmpt_inventory">Voorraad xx:</div></td> + <td align="left"><div id="inventory"></div></td> + </tr> + <tr> + <td align="right" style="vertical-align: top;">Eenheid is gewicht:</td> + <td align="left"><div id="amount_is_weight"></div></td> + <td align="right" style="vertical-align: top;"><div id="pmpt_cost">Prijs per xx:</div></td> + <td align="left"><div id="cost"></div></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Voorraad:</td> - <td align="left"><div id="inventory"></div></td> - <td align="right" style="vertical-align: top;">Prijs:</td> - <td align="left"><div id="cost"></div></td> + <td align="right" style="vertical-align: top;">Toevoegen:</td> + <td align="left"><div id="use_use" /></div></td> + <td align="right" style="vertical-align: top;">Waarde voorraad:</td> + <td align="left"><div id="totval"></div></td> + </tr> + <tr> + <td align="right" style="vertical-align: top;">Tijd minuten:</td> + <td align="left"><div id="time" /></div></td> + <td align="right" style="vertical-align: top;">Altijd op voorraad::</td> + <td align="left"><div id="always_on_stock"></div></td> + </tr> + <tr> + <td align="right" style="vertical-align: top;">Toepassing:</td> + <td align="left"i colspan="3"><textarea id="use_for"></textarea></td> + </tr> + <tr> + <td colspan="4"> </td> </tr> <tr> <td align="right" style="vertical-align: top;">Productie datum:</td> @@ -55,12 +60,12 @@ <td align="left" style="vertical-align: top;"><div id="tht_date"></div></td> </tr> <tr> - <td style="padding-top: 10px;" align="right"><input type="button" id="Delete" value="Delete" /></td> + <td style="padding-top: 110px;" align="right"><input type="button" id="Delete" value="Verwijder" /></td> <td align="right"></td> <td align="right"></td> - <td style="padding-top: 10px;" align="right"> - <input style="margin-right: 5px;" type="button" id="Save" value="Save" /> - <input id="Cancel" type="button" value="Cancel" /> + <td style="padding-top: 110px;" align="left"> + <input style="margin-right: 5px;" type="button" id="Save" value="Sla op" /> + <input id="Cancel" type="button" value="Annuleer" /> </td> </tr> </table>
--- a/www/js/global.js Wed Jan 23 22:53:24 2019 +0100 +++ b/www/js/global.js Thu Jan 24 20:54:45 2019 +0100 @@ -140,12 +140,12 @@ var YeastTypeAdapter = new $.jqx.dataAdapter(YeastTypeSource); var YeastFormData = [ - { id: 0, en: 'Liquid', nl: 'vloeibaar' }, - { id: 1, en: 'Dry', nl: 'droog' }, - { id: 2, en: 'Slant', nl: 'schuine buis' }, - { id: 3, en: 'Culture', nl: 'slurry' }, - { id: 4, en: 'Frozen', nl: 'ingevroren' }, - { id: 5, en: 'Bottle', nl: 'depot' } + { id: 0, en: 'Liquid', nl: 'vloeibaar', cells: 100000000000 }, + { id: 1, en: 'Dry', nl: 'droog', cells: 15000000000 }, + { id: 2, en: 'Slant', nl: 'schuine buis', cells: 1700000000 }, + { id: 3, en: 'Culture', nl: 'slurry', cells: 1700000000 }, + { id: 4, en: 'Frozen', nl: 'ingevroren', cells: 1700000000 }, + { id: 5, en: 'Bottle', nl: 'depot', cells: 1700000000 } ]; var YeastFormSource = { localdata: YeastFormData, @@ -179,6 +179,37 @@ }; var StarterTypeAdapter = new $.jqx.dataAdapter(StarterTypeSource); +var MiscTypeData = [ + { id: 0, en: 'Spice', nl: 'specerij' }, + { id: 1, en: 'Herb', nl: 'kruid' }, + { id: 2, en: 'Flavor', nl: 'smaakstof' }, + { id: 3, en: 'Fining', nl: 'klaringsmiddel' }, + { id: 4, en: 'Water agent', nl: 'brouwzout' }, + { id: 5, en: 'Yeast nutrient', nl: 'gistvoeding' }, + { id: 6, en: 'Other', nl: 'anders' } +]; +var MiscTypeSource = { + localdata: MiscTypeData, + datatype: "array", + datafields: [{ name: 'id' }, { name: 'en' }, { name: 'nl' }] +}; +var MiscTypeAdapter = new $.jqx.dataAdapter(MiscTypeSource); + +var MiscUseData = [ + { id: 0, en: 'Starter', nl: 'starter' }, + { id: 1, en: 'Mash', nl: 'maischen' }, + { id: 2, en: 'Boil', nl: 'koken' }, + { id: 3, en: 'Primary', nl: 'hoofdvergisting' }, + { id: 4, en: 'Secondary', nl: 'nagisting/lagering' }, + { id: 5, en: 'Bottling', nl: 'bottelen' } +]; +var MiscUseSource = { + localdata: MiscUseData, + datatype: "array", + datafields: [{ name: 'id' }, { name: 'en' }, { name: 'nl' }] +}; +var MiscUseAdapter = new $.jqx.dataAdapter(MiscUseSource); +
--- a/www/js/inv_miscs.js Wed Jan 23 22:53:24 2019 +0100 +++ b/www/js/inv_miscs.js Thu Jan 24 20:54:45 2019 +0100 @@ -1,5 +1,5 @@ /***************************************************************************** - * Copyright (C) 2014-2018 + * Copyright (C) 2014-2019 * * Michiel Broek <mbroek at mbse dot eu> * @@ -31,8 +31,8 @@ okButton: $('#delOk'), cancelButton: $('#delCancel'), initContent: function () { - $('#delOk').jqxButton({ width: '65px', theme: theme }); - $('#delCancel').jqxButton({ width: '65px', theme: theme }); + $('#delOk').jqxButton({ template: "danger", width: '65px', theme: theme }); + $('#delCancel').jqxButton({ template: "success", width: '65px', theme: theme }); $('#delCancel').focus(); } }); @@ -41,6 +41,25 @@ $(document).ready(function () { + + var dataRecord = {}; + + function calcTotal(cost, inventory) { + + $('#totval').val(cost * (inventory / 1000)); + } + + function prompts(isweight) { + + if (isweight) { + $("#pmpt_cost").html('Prijs per kg:'); + $("#pmpt_inventory").html('Voorraad gram:'); + } else { + $("#pmpt_cost").html('Prijs per liter:'); + $("#pmpt_inventory").html('Voorraad ml:'); + } + } + var url = "includes/db_inventory_miscs.php"; // prepare the data var source = { @@ -49,14 +68,14 @@ datafields: [ { name: 'record', type: 'number' }, { name: 'name', type: 'string' }, - { name: 'type', type: 'string' }, - { name: 'use_use', type: 'string' }, - { name: 'time', type: 'float' }, + { name: 'type', type: 'int' }, + { name: 'use_use', type: 'int' }, + { name: 'time', type: 'int' }, { name: 'amount', type: 'float' }, - { name: 'amount_is_weight', type: 'bool' }, + { name: 'amount_is_weight', type: 'int' }, { name: 'use_for', type: 'string' }, { name: 'notes', type: 'string' }, - { name: 'always_on_stock', type: 'bool' }, + { name: 'always_on_stock', type: 'int' }, { name: 'inventory', type: 'float' }, { name: 'cost', type: 'float' }, { name: 'production_date', type: 'string' }, @@ -72,6 +91,7 @@ url: url, cache: false, data: data, + type: "POST", success: function (data, status, xhr) { // delete command is executed. commit(true); @@ -88,6 +108,7 @@ url: url, cache: false, data: data, + type: "POST", success: function (data, status, xhr) { commit(true); }, @@ -103,6 +124,7 @@ url: url, cache: false, data: data, + type: "POST", success: function (data, status, xhr) { // update command is executed. commit(true); @@ -113,21 +135,37 @@ }); } }; - var srcType = [ "Spice", "Fining", "Water Agent", "Herb", "Flavor", "Yeast nutrient", "Other" ]; - var srcUse = [ "Boil", "Mash", "Primary", "Secondary", "Bottling" ]; // initialize the input fields. - $("#name").jqxInput({ theme: theme, width: 250, height: 23 }); - $("#type").jqxDropDownList({ theme: theme, source: srcType, width: 130, height: 23, dropDownHeight: 220 }); - $("#use_use").jqxDropDownList({ theme: theme, source: srcUse, width: 90, height: 23, dropDownHeight: 156 }); - $("#time").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 70, height: 23, min: 0, decimalDigits: 2, spinButtons: true }); + $("#name").jqxInput({ theme: theme, width: 640, height: 23 }); + $("#notes").jqxInput({ theme: theme, width: 800, height: 100 }); + + $("#type").jqxDropDownList({theme: theme, + source: MiscTypeAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true + }); + $("#use_use").jqxDropDownList({ + theme: theme, + source: MiscUseAdapter, + valueMember: 'id', + displayMember: 'nl', + width: 180, + height: 23, + autoDropDownHeight: true + }); + $("#time").jqxNumberInput( PosInt ); $("#amount_is_weight").jqxCheckBox({ theme: theme, width: 120, height: 23 }); $("#use_for").jqxInput({ theme: theme, width: 640, height: 48 }); - $("#notes").jqxInput({ theme: theme, width: 640, height: 100 }); $("#always_on_stock").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 }); - $("#production_date").jqxDateTimeInput({ theme: theme, width: 100, height: 23, formatString: 'yyyy-MM-dd' }); - $("#cost").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 70, height: 23, min: 0, decimalDigits: 2, spinButtons: true }); - $("#tht_date").jqxDateTimeInput({ theme: theme, width: 100, height: 23, formatString: 'yyyy-MM-dd' }); + $("#inventory").jqxNumberInput( Spin1dec1 ); + $("#production_date").jqxDateTimeInput( Dateopts ); + $("#cost").jqxNumberInput( Spin2dec1 ); + $("#tht_date").jqxDateTimeInput( Dateopts ); + $("#totval").jqxNumberInput( Spin2dec1 ); + $("#totval").jqxNumberInput({ width: 90, readOnly: true, spinButtons: false }); var dataAdapter = new $.jqx.dataAdapter(source); var editrow = -1; @@ -144,21 +182,21 @@ var addButton = $("<div style='float: right; margin-right: 15px;'><img style='position: relative; margin-top: 2px;' src='images/add.png'/><span style='margin-left: 4px; position: relative; top: -3px;'>Nieuw</span></div>"); container.append(addButton); statusbar.append(container); - addButton.jqxButton({ theme: theme, width: 120, height: 20 }); + addButton.jqxButton({ theme: theme, width: 90, height: 20 }); // add new row. addButton.click(function (event) { editrow = -1; - $("#popupWindow").jqxWindow({ position: { x: 230, y: 30 } }); + $("#popupWindow").jqxWindow({ position: { x: 110, y: 30 } }); $("#name").val(''); - $("#type").val(''); - $("#use_use").val(''); - $("#time").val(''); - $("#amount_is_weight").val(''); + $("#type").val(0); + $("#use_use").val(0); + $("#time").val(0); + $("#amount_is_weight").val(1); $("#use_for").val(''); $("#notes").val(''); - $("#always_on_stock").val(''); - $("#inventory").val(''); - $("#cost").val(''); + $("#always_on_stock").val(0); + $("#inventory").val(0); + $("#cost").val(0); $("#production_date").val(''); $("#tht_date").val(''); $("#popupWindow").jqxWindow('open'); @@ -167,21 +205,45 @@ filterable: true, filtermode: 'excel', columns: [ - { text: 'Ingredient naam', datafield: 'name', width: 525 }, - { text: 'Soort', datafield: 'type', align: 'center', cellsalign: 'center', width: 110 }, - { text: 'Gebruik', datafield: 'use_use', align: 'center', cellsalign: 'center', width: 100 }, - { text: 'Tijd', datafield: 'time', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'f2' }, + { text: 'Ingredient naam', datafield: 'name' }, + { text: 'Type', datafield: 'type', align: 'center', cellsalign: 'center', width: 120, + cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { + return "<div style='margin: 4px;' class='jqx-center-align'>" + MiscTypeData[value].nl + "</div>"; + } + }, + { text: 'Gebruik', datafield: 'use_use', align: 'center', cellsalign: 'center', width: 120, + cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { + return "<div style='margin: 4px;' class='jqx-center-align'>" + MiscUseData[value].nl + "</div>"; + } + }, + { text: 'Tijd', datafield: 'time', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'f0', + cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { + if (value == 0) + return "<div style='margin: 4px;' class='jqx-right-align'></div>"; + if (value == 1) + return "<div style='margin: 4px;' class='jqx-right-align'>1 minuut</div>"; + if (value < 60) + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value, "f0")+" minuten</div>"; + if (value == 60) + return "<div style='margin: 4px;' class='jqx-right-align'>1 uur</div>"; + if (value < 1440) + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value / 60, "f0")+" uren</div>"; + if (value == 1440) + return "<div style='margin: 4px;' class='jqx-right-align'>1 dag</div>"; + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value / 1440, "f0")+" dagen</div>"; + } + }, { text: 'Voor. gr/ml.', datafield: 'inventory', width: 110, align: 'right', cellsalign: 'right' }, { text: 'Prijs kg/l', datafield: 'cost', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'c2' }, { text: 'THT datum', datafield: 'tht_date', width: 100, align: 'center', cellsalign: 'center' }, - { text: 'Wijzig', datafield: 'Edit', columntype: 'button', align: 'center', cellsrenderer: function () { + { text: 'Wijzig', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function () { return "Wijzig"; }, buttonclick: function (row) { // open the popup window when the user clicks a button. editrow = row; - $("#popupWindow").jqxWindow({ position: { x: 230, y: 30 } }); + $("#popupWindow").jqxWindow({ position: { x: 110, y: 30 } }); // get the clicked row's data and initialize the input fields. - var dataRecord = $("#jqxgrid").jqxGrid('getrowdata', editrow); + dataRecord = $("#jqxgrid").jqxGrid('getrowdata', editrow); $("#name").val(dataRecord.name); $("#type").val(dataRecord.type); $("#use_use").val(dataRecord.use_use); @@ -194,20 +256,47 @@ $("#cost").val(dataRecord.cost); $("#production_date").val(dataRecord.production_date); $("#tht_date").val(dataRecord.tht_date); + calcTotal(dataRecord.cost, dataRecord.inventory); + prompts(dataRecord.amount_is_weight); // show the popup window. $("#popupWindow").jqxWindow('open'); } } ] }); + + $("#cost").on('change', function (event) { + dataRecord.cost = parseFloat(event.args.value); + calcTotal(dataRecord.cost, dataRecord.inventory); + }); + $("#inventory").on('change', function (event) { + dataRecord.inventory = parseFloat(event.args.value); + calcTotal(dataRecord.cost, dataRecord.inventory); + }); + $("#amount_is_weight").on('checked', function (event) { + dataRecord.amount_is_weight = true; + prompts(true); + }); + $("#amount_is_weight").on('unchecked', function (event) { + dataRecord.amount_is_weight = false; + prompts(false); + }); + // initialize the popup window and buttons. $("#popupWindow").jqxWindow({ - width: 860, resizable: false, theme: theme, isModal: true, autoOpen: false, cancelButton: $("#Cancel"), modalOpacity: 0.40 + width: 1050, + height: 550, + resizable: false, + theme: theme, + isModal: true, + autoOpen: false, + cancelButton: $("#Cancel"), + modalOpacity: 0.40 }); $("#popupWindow").on('open', function () { $("#name").jqxInput('selectAll'); }); - $("#Delete").jqxButton({ theme: theme }); + $("#Delete").jqxButton({ template: "danger", width: '90px', theme: theme }); $("#Delete").click(function () { if (editrow >= 0) { // Open a popup to confirm this action. @@ -219,49 +308,36 @@ } $("#popupWindow").jqxWindow('hide'); }); - $("#Cancel").jqxButton({ theme: theme }); - $("#Save").jqxButton({ theme: theme }); + $("#Cancel").jqxButton({ template: "primary", width: '90px', theme: theme }); + $("#Save").jqxButton({ template: "success", width: '90px', theme: theme }); // update the edited row when the user clicks the 'Save' button. $("#Save").click(function () { + var rowID = -1; if (editrow >= 0) { - var rowID = $('#jqxgrid').jqxGrid('getrowid', editrow); - var row = { - record: rowID, - name: $("#name").val(), - type: $("#type").val(), - use_use: $("#use_use").val(), - time: parseFloat($("#time").jqxNumberInput('decimal')), - amount_is_weight: $("#amount_is_weight").val(), - use_for: $("#use_for").val(), - notes: $("#notes").val(), - always_on_stock: $("#always_on_stock").val(), - inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), - cost: parseFloat($("#cost").jqxNumberInput('decimal')), - production_date: $("#production_date").val(), - tht_date: $("#tht_date").val() - }; + rowID = $('#jqxgrid').jqxGrid('getrowid', editrow); + } + var row = { + record: rowID, + name: $("#name").val(), + type: $("#type").val(), + use_use: $("#use_use").val(), + time: parseFloat($("#time").jqxNumberInput('decimal')), + amount_is_weight: $("#amount_is_weight").val(), + use_for: $("#use_for").val(), + notes: $("#notes").val(), + always_on_stock: $("#always_on_stock").val(), + inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), + cost: parseFloat($("#cost").jqxNumberInput('decimal')), + production_date: $("#production_date").val(), + tht_date: $("#tht_date").val() + }; + if (editrow >= 0) { $('#jqxgrid').jqxGrid('updaterow', rowID, row); - $("#popupWindow").jqxWindow('hide'); } else { - // Insert a record - var newrow = { - record: -1, - name: $("#name").val(), - type: $("#type").val(), - use_use: $("#use_use").val(), - time: parseFloat($("#time").jqxNumberInput('decimal')), - amount_is_weight: $("#amount_is_weight").val(), - use_for: $("#use_for").val(), - notes: $("#notes").val(), - always_on_stock: $("#always_on_stock").val(), - inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), - cost: parseFloat($("#cost").jqxNumberInput('decimal')), - production_date: $("#production_date").val(), - tht_date: $("#tht_date").val() - }; - $('#jqxgrid').jqxGrid('addrow', null, newrow); - $("#popupWindow").jqxWindow('hide'); + $('#jqxgrid').jqxGrid('addrow', null, row); } + $("#popupWindow").jqxWindow('hide'); + location.reload( true ); // reload ourself. }); createDelElements(); });
--- a/www/js/inv_yeasts.js Wed Jan 23 22:53:24 2019 +0100 +++ b/www/js/inv_yeasts.js Thu Jan 24 20:54:45 2019 +0100 @@ -73,7 +73,8 @@ { name: 'inventory', type: 'float' }, { name: 'cost', type: 'float' }, { name: 'production_date', type: 'string' }, - { name: 'tht_date', type: 'string' } + { name: 'tht_date', type: 'string' }, + { name: 'cells', type: 'float' } ], id: 'record', url: url,