Fri, 25 Jan 2019 13:33:10 +0100
Fixed yeast database import differences between grams, ml and packs. Added cells field filled with defaults. Some edit screen improvements. Dynamic prompts depending on the yeast type. Disable men and filter of most columns in the yeasts list. Friendlier display of inverntory.
--- a/www/import/from_brouwhulp.php Thu Jan 24 20:54:45 2019 +0100 +++ b/www/import/from_brouwhulp.php Fri Jan 25 13:33:10 2019 +0100 @@ -279,15 +279,23 @@ if ($yeast->FORM == 'Liquid') { $sql .= "', cells='100000000000"; // 100 billion cells per pack + if ($yeast->COST) + $sql .= "', cost='" . floatval($yeast->COST); + if ($yeast->INVENTORY) + $sql .= "', inventory='" . floatval($yeast->INVENTORY); } else if ($yeast->FORM == 'Dry') { $sql .= "', cells='15000000000"; // 6..15 billion per gram + if ($yeast->INVENTORY) + $sql .= "', inventory='" . floatval($yeast->INVENTORY) / 1000.0; // To kg + if ($yeast->COST) + $sql .= "', cost='" . floatval($yeast->COST) * 1000.0; // to Euro/kg } else { $sql .= "', cells='1700000000"; // 1.7 billion cells per ml. + if ($yeast->INVENTORY) + $sql .= "', inventory='" . floatval($yeast->INVENTORY) / 1000.0; // To liter + if ($yeast->COST) + $sql .= "', cost='" . floatval($yeast->COST) * 1000.0; // to Euro/liter } - if ($yeast->INVENTORY) - $sql .= "', inventory='" . floatval($yeast->INVENTORY) / 1000.0; // To kg or liter - if ($yeast->COST) - $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;
--- a/www/includes/db_inventory_yeasts.php Thu Jan 24 20:54:45 2019 +0100 +++ b/www/includes/db_inventory_yeasts.php Fri Jan 25 13:33:10 2019 +0100 @@ -31,7 +31,8 @@ $sql .= "', notes='" . mysqli_real_escape_string($connect, $_POST['notes']); $sql .= "', best_for='" . mysqli_real_escape_string($connect, $_POST['best_for']); $sql .= "', max_reuse='" . $_POST['max_reuse']; - $sql .= "', inventory='" . floatval($_POST['inventory']) / 1000.0; + $sql .= "', cells='" . floatval($_POST['cells']) * 1000000000.0; + $sql .= "', inventory='" . $_POST['inventory']; $sql .= "', cost='" . $_POST['cost'] . "'"; if ($_POST['production_date'] == '') $sql .= ", production_date=NULL"; @@ -92,10 +93,11 @@ 'notes' => $row['notes'], 'best_for' => $row['best_for'], 'max_reuse' => $row['max_reuse'], - 'inventory' => floatval($row['inventory']) * 1000.0, + 'inventory' => $row['inventory'], 'cost' => $row['cost'], 'production_date' => $row['production_date'], - 'tht_date' => $row['tht_date'] + 'tht_date' => $row['tht_date'], + 'cells' => floatval($row['cells']) / 1000000000.0 ); } echo json_encode($yeasts);
--- a/www/inv_yeasts.php Thu Jan 24 20:54:45 2019 +0100 +++ b/www/inv_yeasts.php Fri Jan 25 13:33:10 2019 +0100 @@ -29,24 +29,24 @@ <tr> <td align="right" style="vertical-align: top;">Type:</td> <td align="left"><div id="type"></div></td> - <td align="right" style="vertical-align: top;">Minimum temperatuur:</td> + <td align="right" style="vertical-align: top;">Minimum temperatuur °C:</td> <td align="left"><div id="min_temperature"></div></td> </tr> <tr> <td align="right" style="vertical-align: top;">Gist vorm:</td> <td align="left"><div id="form"></div></td> - <td align="right" style="vertical-align: top;">Maximum temperatuur:</td> + <td align="right" style="vertical-align: top;">Maximum temperatuur °C:</td> <td align="left"><div id="max_temperature"></div></td> </tr> <tr> <td align="right" style="vertical-align: top;">Laboratorium:</td> <td align="left" style="vertical-align: top;"><input id="laboratory" /></td> - <td align="right" style="vertical-align: top;">Vergistingsgraad:</td> + <td align="right" style="vertical-align: top;">Vergistingsgraad %:</td> <td align="left"><div id="attenuation"></div></td> </tr> <tr> - <td rowspan="2" align="right" style="vertical-align: top;">Geschikt voor:</td> - <td rowspan="2" align="left"><textarea id="best_for"></textarea></td> + <td rowspan="3" align="right" style="vertical-align: top;">Geschikt voor:</td> + <td rowspan="3" align="left"><textarea id="best_for"></textarea></td> <td align="right" style="vertical-align: top;">Maximum Hergebruik:</td> <td align="left"><div id="max_reuse"></div></td> </tr> @@ -55,29 +55,33 @@ <td align="left"><div id="flocculation"></div></td> </tr> <tr> + <td align="right" style="vertical-align: top;"><div id="pmpt_cells">cells:</div></td> + <td align="left"><div id="cells"></div></td> + </tr> + <tr> <td colspan="4"><hr></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Voorraad gr/ml:</td> + <td align="right" style="vertical-align: top;"><div id="pmpt_inventory">Voorraad xx:</div></td> <td align="left"><div id="inventory"></div></td> <td align="right" style="vertical-align: top;">Productie datum:</td> <td align="left" style="vertical-align: top;"><div id="production_date"></div></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Prijs per kg:</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> <td align="right" style="vertical-align: top;">THT datum:</td> <td align="left" style="vertical-align: top;"><div id="tht_date"></div></td> </tr> <tr> - <td align="right" style="vertical-align: top;">Waarde voorraad:</td> + <td align="right" style="vertical-align: top;">Waarde voorraad €:</td> <td align="left" colspan="3"><div id="totval"></div></td> </tr> <tr> - <td style="padding-top: 40px;" align="right"><input type="button" id="Delete" value="Verwijder" /></td> + <td style="padding-top: 20px;" align="right"><input type="button" id="Delete" value="Verwijder" /></td> <td align="right"></td> <td align="right"></td> - <td style="padding-top: 40px;" align="left"><input style="margin-right: 5px;" type="button" id="Save" value="Sla op" /><input id="Cancel" type="button" value="Annuleer" /></td> + <td style="padding-top: 20px;" align="left"><input style="margin-right: 5px;" type="button" id="Save" value="Sla op" /><input id="Cancel" type="button" value="Annuleer" /></td> </tr> </table> </div>
--- a/www/js/inv_yeasts.js Thu Jan 24 20:54:45 2019 +0100 +++ b/www/js/inv_yeasts.js Fri Jan 25 13:33:10 2019 +0100 @@ -46,9 +46,25 @@ var dataRecord = {}; - function calcTotal(cost, inventory) { + function calcTotal() { - $('#totval').val(cost * (inventory / 1000)); + $('#totval').val(dataRecord.cost * dataRecord.inventory); + if (dataRecord.form == 0) { // Liquid + $("#pmpt_cost").html('Prijs per pak:'); + $("#pmpt_inventory").html('Voorraad pak(ken):'); + $("#pmpt_cells").html('Biljoen cellen per pak:'); + $("#inventory").jqxNumberInput({ decimalDigits: 0, spinButtonsStep: 1 }); + } else if (dataRecord.form == 1) { // Dry + $("#pmpt_cost").html('Prijs per kg:'); + $("#pmpt_inventory").html('Voorraad gram:'); + $("#pmpt_cells").html('Biljoen cellen per gram:'); + $("#inventory").jqxNumberInput({ decimalDigits: 1, spinButtonsStep: 0.5 }); + } else { + $("#pmpt_cost").html('Prijs per liter:'); + $("#pmpt_inventory").html('Voorraad ml:'); + $("#pmpt_cells").html('Biljoen cellen per ml:'); + $("#inventory").jqxNumberInput({ decimalDigits: 1, spinButtonsStep: 0.5 }); + } } var url = "includes/db_inventory_yeasts.php"; @@ -154,7 +170,7 @@ autoDropDownHeight: true }); $("#notes").jqxInput({ theme: theme, width: 800, height: 120 }); - $("#best_for").jqxInput({ theme: theme, width: 320, height: 50 }); + $("#best_for").jqxInput({ theme: theme, width: 320, height: 75 }); $("#inventory").jqxNumberInput( Spin1dec1 ); $("#production_date").jqxDateTimeInput( Dateopts ); $("#min_temperature").jqxNumberInput( YeastT ); @@ -168,13 +184,14 @@ height: 23, autoDropDownHeight: true }); - $("#attenuation").jqxNumberInput( Perc1dec1 ); + $("#attenuation").jqxNumberInput( Perc1dec5 ); $("#max_reuse").jqxNumberInput( PosInt ); $("#max_reuse").jqxNumberInput({ max: 10 }); $("#cost").jqxNumberInput( Spin2dec1 ); $("#tht_date").jqxDateTimeInput( Dateopts ); $("#totval").jqxNumberInput( Spin2dec1 ); $("#totval").jqxNumberInput({ width: 90, readOnly: true, spinButtons: false }); + $("#cells").jqxNumberInput( Spin1dec1 ); var dataAdapter = new $.jqx.dataAdapter(source); var editrow = -1; @@ -212,6 +229,7 @@ $("#cost").val(0); $("#production_date").val(''); $("#tht_date").val(''); + $("#cells").val(1); $("#popupWindow").jqxWindow('open'); }); }, @@ -219,22 +237,33 @@ filtermode: 'excel', columns: [ { text: 'Laboratorium', datafield: 'laboratory', width: 150 }, - { text: 'Product ID', datafield: 'product_id', width: 120 }, - { text: 'Gist naam', datafield: 'name' }, - { text: 'Type', datafield: 'type', align: 'center', cellsalign: 'center', width: 90, + { text: 'Product ID', datafield: 'product_id', width: 120, menu: false }, + { text: 'Gist naam', datafield: 'name', menu: false }, + { text: 'Type', datafield: 'type', align: 'center', cellsalign: 'center', menu: false, width: 110, cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { return "<div style='margin: 4px;' class='jqx-center-align'>" + YeastTypeData[value].nl + "</div>"; } }, - { text: 'Vorm', datafield: 'form', align: 'center', cellsalign: 'center', width: 90, + { text: 'Vorm', datafield: 'form', align: 'center', cellsalign: 'center', menu: false, width: 110, cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { return "<div style='margin: 4px;' class='jqx-center-align'>" + YeastFormData[value].nl + "</div>"; } }, - { text: 'Vergistingsgraad', datafield: 'attenuation', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'p0' }, - { text: 'Voor. gr/ml', datafield: 'inventory', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'f1' }, - { text: 'Prijs kg/l', datafield: 'cost', width: 100, align: 'right', cellsalign: 'right', cellsformat: 'c2' }, - { text: 'Wijzig', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', cellsrenderer: function () { + { text: 'SVG', datafield: 'attenuation', width: 80, align: 'right', cellsalign: 'right', menu: false, cellsformat: 'p1' }, + { text: 'Voorraad', datafield: 'inventory', width: 100, align: 'right', menu: false, cellsalign: 'right', + cellsrenderer: function (index, datafield, value, defaultvalue, column, rowdata) { + if (value == 0) + return "<div style='margin: 4px;' class='jqx-right-align'></div>"; + if ((rowdata.form == 0) && (value > 1)) + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value,"f0")+" pakken</div>"; + if (rowdata.form == 0) + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value,"f0")+" pak</div>"; + if (rowdata.form == 1) + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value * 1000,"f1")+" gram</div>"; + return "<div style='margin: 4px;' class='jqx-right-align'>"+dataAdapter.formatNumber(value * 1000,"f1")+" ml</div>"; + } + }, + { text: 'Wijzig', datafield: 'Edit', columntype: 'button', width: 100, align: 'center', menu: false, cellsrenderer: function () { return "Wijzig"; }, buttonclick: function (row) { // open the popup window when the user clicks a button. @@ -254,11 +283,15 @@ $("#notes").val(dataRecord.notes); $("#best_for").val(dataRecord.best_for); $("#max_reuse").val(dataRecord.max_reuse); - $("#inventory").val(dataRecord.inventory); + if (dataRecord.form == 0) + $("#inventory").val(dataRecord.inventory); + else + $("#inventory").val(dataRecord.inventory * 1000); $("#cost").val(dataRecord.cost); $("#production_date").val(dataRecord.production_date); $("#tht_date").val(dataRecord.tht_date); - calcTotal(dataRecord.cost, dataRecord.inventory); + $("#cells").val(dataRecord.cells); + calcTotal(); // show the popup window. $("#popupWindow").jqxWindow('open'); } @@ -266,13 +299,23 @@ ] }); + $('#popupWindow').on('open', function (event) { calcTotal(); }); $("#cost").on('change', function (event) { dataRecord.cost = parseFloat(event.args.value); - calcTotal(dataRecord.cost, dataRecord.inventory); + calcTotal(); }); $("#inventory").on('change', function (event) { - dataRecord.inventory = parseFloat(event.args.value); - calcTotal(dataRecord.cost, dataRecord.inventory); + if (dataRecord.form == 0) + dataRecord.inventory = parseFloat(event.args.value); + else + dataRecord.inventory = parseFloat(event.args.value) / 1000.0; + calcTotal(); + }); + $("#form").on('select', function (event) { + if (event.args) { + dataRecord.form = event.args.index; + calcTotal(); + } }); // initialize the popup window and buttons. @@ -309,6 +352,10 @@ if (editrow >= 0) { rowID = $('#jqxgrid').jqxGrid('getrowid', editrow); } + if (dataRecord.form == 0) + var n_inventory = parseFloat($("#inventory").jqxNumberInput('decimal')); + else + var n_inventory = parseFloat($("#inventory").jqxNumberInput('decimal')) / 1000.0; var row = { record: rowID, name: $("#name").val(), @@ -323,10 +370,11 @@ notes: $("#notes").val(), best_for: $("#best_for").val(), max_reuse: parseInt($("#max_reuse").jqxNumberInput('decimal')), - inventory: parseFloat($("#inventory").jqxNumberInput('decimal')), + inventory: n_inventory, cost: parseFloat($("#cost").jqxNumberInput('decimal')), production_date: $("#production_date").val(), - tht_date: $("#tht_date").val() + tht_date: $("#tht_date").val(), + cells: parseFloat($("#cells").jqxNumberInput('decimal')) }; if (editrow >= 0) { $('#jqxgrid').jqxGrid('updaterow', rowID, row);