# HG changeset patch # User Michiel Broek # Date 1549477785 -3600 # Node ID 8580a08cbaa741e5c07c29fa91de87f86af04363 # Parent 3649c3d31d15d2e7fb386d8998eaf6df153d0dc7 Tab brouwdag automatische berekening rendement voor en na het koken. Bij import worden de kook volumes omgerekend naar 100 graden. diff -r 3649c3d31d15 -r 8580a08cbaa7 www/import/from_brouwhulp.php --- a/www/import/from_brouwhulp.php Wed Feb 06 15:14:41 2019 +0100 +++ b/www/import/from_brouwhulp.php Wed Feb 06 19:29:45 2019 +0100 @@ -1617,13 +1617,13 @@ if ($recipe->VOLUME_HLT) $sql .= "', brew_sparge_volume='" . floatval($recipe->VOLUME_HLT); if ($recipe->VOLUME_BEFORE_BOIL) - $sql .= "', brew_preboil_volume='" . floatval($recipe->VOLUME_BEFORE_BOIL); + $sql .= "', brew_preboil_volume='" . sprintf("%.5f",floatval($recipe->VOLUME_BEFORE_BOIL) * 1.04); if (floatval($recipe->OG_BEFORE_BOIL) != 1.0) $sql .= "', brew_preboil_sg='" . floatval($recipe->OG_BEFORE_BOIL); if ($recipe->PH_BEFORE_BOIL) $sql .= "', brew_preboil_ph='" . floatval($recipe->PH_BEFORE_BOIL); if ($recipe->VOLUME_AFTER_BOIL) - $sql .= "', brew_aboil_volume='" . floatval($recipe->VOLUME_AFTER_BOIL); + $sql .= "', brew_aboil_volume='" . sprintf("%.5f",floatval($recipe->VOLUME_AFTER_BOIL) * 1.04); $sql .= "', brew_aboil_sg='" . floatval($recipe->OG); if ($recipe->PH_AFTER_BOIL) $sql .= "', brew_aboil_ph='" . floatval($recipe->PH_AFTER_BOIL); 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.' }); diff -r 3649c3d31d15 -r 8580a08cbaa7 www/prod_edit.php --- a/www/prod_edit.php Wed Feb 06 15:14:41 2019 +0100 +++ b/www/prod_edit.php Wed Feb 06 19:29:45 2019 +0100 @@ -437,32 +437,32 @@ Maisch pH:
- pH voor koken: + Voor koken pH:
- pH na koken: + Na koken pH:
Maisch SG:
- SG voor koken: + Voor koken SG:
- SG na koken: + Na koken SG:
- Maisch rendement: + Maisch rendement %:
- Volume voor koken: + Voor koken vol@100°C:
- Volume na koken: + Na koken vol@100°C:
- Rendement voor koken: + Voor koken rendement %:
- Rendement na koken: + Na koken rendement %:
@@ -470,36 +470,36 @@ - Spoelwater temperatuur: + Spoelwater °C:
Koelen en whirlpoolen - Spoelwater volume: + Spoelwater liters:
- Whirlpool 85..100°C: + Whirlpool 85..100°C min:
- Koelen tot: + Koelen tot °C:
Spoelwater pH:
- Whirlpool 72..79°C: + Whirlpool 72..79°C min:
Koelen met:
- Whirlpool 60..66°C: + Whirlpool 60..66°C min:
- Koelen tijd: + Koelen minuten:
Beluchten - Whirlpool koud: + Whirlpool koud min: