diff -r 3649c3d31d15 -r 8580a08cbaa7 www/js/prod_edit.js --- a/www/js/prod_edit.js Wed Feb 06 15:14:41 2019 +0100 +++ b/www/js/prod_edit.js Wed Feb 06 19:29:45 2019 +0100 @@ -300,23 +300,20 @@ var rows = $('#mashGrid').jqxGrid('getrows'); for (var i = 0; i < rows.length; i++) { var row = rows[i]; -// console.log("step " + i + " " + row.step_name + " " + row.step_type); if (row.step_type == 0) // Infusion mvol += parseFloat(row.step_infuse_amount); } if (mvol > 0) { -// console.log("mash volume: " + mvol); var rows = $('#fermentableGrid').jqxGrid('getrows'); for (var i = 0; i < rows.length; i++) { var row = rows[i]; if (row.f_added == 0) { // Mash var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); mvol += row.f_amount * row.f_moisture / 100; - gs += my_grain_absorbtion * row.f_amount; +// TODO: where do I need this gs += my_grain_absorbtion * row.f_amount; s += d; } } -// console.log("mash volume: " + mvol + " gs: " + gs + " s: " + s); var v = s / sugardensity + mvol; s = 1000 * s / (v * 10); //deg. Plato est_mash_sg = plato_to_sg(s); @@ -336,6 +333,58 @@ $("#brew_mash_efficiency").val(0); }; + function calcEfficiencyBeforeBoil() { + var m = 0; + var rows = {}; + if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { + return; // grid not yet loaded. + } + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + if (row.f_added == 0) { // Mash + m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); + } + } + var tot = sg_to_plato(dataRecord.brew_preboil_sg) * (dataRecord.brew_preboil_volume / 1.04) * dataRecord.brew_preboil_sg * 10 / 1000; + if (m > 0) + var result = Math.round((tot / m * 100) * 10) / 10; + else + var result = 0; + if (result < 0) + result = 0; + //console.log("calcEfficiencyBeforeBoil(): "+result); + $("#brew_preboil_efficiency").val(result); + } + + function calcEfficiencyAfterBoil() { + var m = 0; // Sugars added at mash + var b = 0; // Sugars added at boil + var rows = {}; + if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { + return; // grid not yet loaded. + } + for (var i = 0; i < rows.length; i++) { + var row = rows[i]; + if (row.f_added == 0) { // Mash + m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); + } else if (row.f_added == 1) { // Boil + b += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); + } + } + var tot = sg_to_plato(dataRecord.brew_aboil_sg) * (dataRecord.brew_aboil_volume / 1.04) * dataRecord.brew_aboil_sg * 10 / 1000; + tot -= b; // total sugars in wort minus added sugars. + if (m > 0) + var result = Math.round((tot / m * 100) * 10) / 10; + else + var result = 0; + if (result < 0) + result = 0; + //console.log("calcEfficiencyAfterBoil(): "+result); + dataRecord.brew_aboil_efficiency = result; + $("#brew_aboil_efficiency").val(result); + + } + function GetBUGU() { var gu = (dataRecord.est_og - 1) * 1000; if (gu > 0) @@ -1189,6 +1238,8 @@ calcSGendMash(); calcMashEfficiency(); + calcEfficiencyBeforeBoil(); + calcEfficiencyAfterBoil(); $("#calc_acid").on('checked', function (event) { dataRecord.calc_acid = true; @@ -3899,20 +3950,24 @@ $("#est_mash_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); $("#brew_preboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het spoelen en voor het koken.' }); $("#brew_preboil_sg").jqxNumberInput( SGopts ); + $("#brew_preboil_sg").on('valueChanged', function (event) { dataRecord.brew_preboil_sg = event.args.value; calcEfficiencyBeforeBoil() }); $("#est_pre_sg").jqxTooltip({ content: 'Het berekende SG in de kookketel na het spoelen en voor het koken.' }); $("#est_pre_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); $("#brew_aboil_sg").jqxNumberInput( SGopts ); + $("#brew_aboil_sg").on('valueChanged', function (event) { dataRecord.brew_aboil_sg = event.args.value; calcEfficiencyAfterBoil() }); $("#est_og3").jqxTooltip({ content: 'Het gewenste SG in de kookketel na het koken.' }); $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); $("#brew_preboil_volume").jqxTooltip({ content: 'Het volume van het wort voor het koken.' }); $("#brew_preboil_volume").jqxNumberInput( Spin1dec ); + $("#brew_preboil_volume").on('valueChanged', function (event) { dataRecord.brew_preboil_volume = event.args.value; calcEfficiencyBeforeBoil() }); $("#est_pre_vol").jqxTooltip({ content: 'Het berekende volume van het wort voor het koken.' }); $("#est_pre_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); $("#brew_aboil_volume").jqxTooltip({ content: 'Het volume van het wort na het koken.' }); $("#brew_aboil_volume").jqxNumberInput( Spin1dec ); + $("#brew_aboil_volume").on('valueChanged', function (event) { dataRecord.brew_aboil_volume = event.args.value; calcEfficiencyAfterBoil() }); $("#est_a_vol").jqxTooltip({ content: 'Het gewenste volume na het koken.' }); $("#est_a_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' });