298 var s = 0; |
298 var s = 0; |
299 var gs = 0; // Grain absorbtion |
299 var gs = 0; // Grain absorbtion |
300 var rows = $('#mashGrid').jqxGrid('getrows'); |
300 var rows = $('#mashGrid').jqxGrid('getrows'); |
301 for (var i = 0; i < rows.length; i++) { |
301 for (var i = 0; i < rows.length; i++) { |
302 var row = rows[i]; |
302 var row = rows[i]; |
303 // console.log("step " + i + " " + row.step_name + " " + row.step_type); |
|
304 if (row.step_type == 0) // Infusion |
303 if (row.step_type == 0) // Infusion |
305 mvol += parseFloat(row.step_infuse_amount); |
304 mvol += parseFloat(row.step_infuse_amount); |
306 } |
305 } |
307 if (mvol > 0) { |
306 if (mvol > 0) { |
308 // console.log("mash volume: " + mvol); |
|
309 var rows = $('#fermentableGrid').jqxGrid('getrows'); |
307 var rows = $('#fermentableGrid').jqxGrid('getrows'); |
310 for (var i = 0; i < rows.length; i++) { |
308 for (var i = 0; i < rows.length; i++) { |
311 var row = rows[i]; |
309 var row = rows[i]; |
312 if (row.f_added == 0) { // Mash |
310 if (row.f_added == 0) { // Mash |
313 var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
311 var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
314 mvol += row.f_amount * row.f_moisture / 100; |
312 mvol += row.f_amount * row.f_moisture / 100; |
315 gs += my_grain_absorbtion * row.f_amount; |
313 // TODO: where do I need this gs += my_grain_absorbtion * row.f_amount; |
316 s += d; |
314 s += d; |
317 } |
315 } |
318 } |
316 } |
319 // console.log("mash volume: " + mvol + " gs: " + gs + " s: " + s); |
|
320 var v = s / sugardensity + mvol; |
317 var v = s / sugardensity + mvol; |
321 s = 1000 * s / (v * 10); //deg. Plato |
318 s = 1000 * s / (v * 10); //deg. Plato |
322 est_mash_sg = plato_to_sg(s); |
319 est_mash_sg = plato_to_sg(s); |
323 } |
320 } |
324 console.log("calcSGendMash(): " + est_mash_sg); |
321 console.log("calcSGendMash(): " + est_mash_sg); |
333 if (c > 0.5) |
330 if (c > 0.5) |
334 $("#brew_mash_efficiency").val(100 * m / c); |
331 $("#brew_mash_efficiency").val(100 * m / c); |
335 else |
332 else |
336 $("#brew_mash_efficiency").val(0); |
333 $("#brew_mash_efficiency").val(0); |
337 }; |
334 }; |
|
335 |
|
336 function calcEfficiencyBeforeBoil() { |
|
337 var m = 0; |
|
338 var rows = {}; |
|
339 if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { |
|
340 return; // grid not yet loaded. |
|
341 } |
|
342 for (var i = 0; i < rows.length; i++) { |
|
343 var row = rows[i]; |
|
344 if (row.f_added == 0) { // Mash |
|
345 m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
|
346 } |
|
347 } |
|
348 var tot = sg_to_plato(dataRecord.brew_preboil_sg) * (dataRecord.brew_preboil_volume / 1.04) * dataRecord.brew_preboil_sg * 10 / 1000; |
|
349 if (m > 0) |
|
350 var result = Math.round((tot / m * 100) * 10) / 10; |
|
351 else |
|
352 var result = 0; |
|
353 if (result < 0) |
|
354 result = 0; |
|
355 //console.log("calcEfficiencyBeforeBoil(): "+result); |
|
356 $("#brew_preboil_efficiency").val(result); |
|
357 } |
|
358 |
|
359 function calcEfficiencyAfterBoil() { |
|
360 var m = 0; // Sugars added at mash |
|
361 var b = 0; // Sugars added at boil |
|
362 var rows = {}; |
|
363 if (!(rows = $('#fermentableGrid').jqxGrid('getrows'))) { |
|
364 return; // grid not yet loaded. |
|
365 } |
|
366 for (var i = 0; i < rows.length; i++) { |
|
367 var row = rows[i]; |
|
368 if (row.f_added == 0) { // Mash |
|
369 m += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
|
370 } else if (row.f_added == 1) { // Boil |
|
371 b += row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100); |
|
372 } |
|
373 } |
|
374 var tot = sg_to_plato(dataRecord.brew_aboil_sg) * (dataRecord.brew_aboil_volume / 1.04) * dataRecord.brew_aboil_sg * 10 / 1000; |
|
375 tot -= b; // total sugars in wort minus added sugars. |
|
376 if (m > 0) |
|
377 var result = Math.round((tot / m * 100) * 10) / 10; |
|
378 else |
|
379 var result = 0; |
|
380 if (result < 0) |
|
381 result = 0; |
|
382 //console.log("calcEfficiencyAfterBoil(): "+result); |
|
383 dataRecord.brew_aboil_efficiency = result; |
|
384 $("#brew_aboil_efficiency").val(result); |
|
385 |
|
386 } |
338 |
387 |
339 function GetBUGU() { |
388 function GetBUGU() { |
340 var gu = (dataRecord.est_og - 1) * 1000; |
389 var gu = (dataRecord.est_og - 1) * 1000; |
341 if (gu > 0) |
390 if (gu > 0) |
342 return dataRecord.est_ibu / gu; |
391 return dataRecord.est_ibu / gu; |
3897 $("#brew_mash_sg").on('valueChanged', function () { calcMashEfficiency(); }); |
3948 $("#brew_mash_sg").on('valueChanged', function () { calcMashEfficiency(); }); |
3898 $("#est_mash_sg").jqxTooltip({ content: 'Het berekende verwachte SG na het maischen.' }); |
3949 $("#est_mash_sg").jqxTooltip({ content: 'Het berekende verwachte SG na het maischen.' }); |
3899 $("#est_mash_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
3950 $("#est_mash_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
3900 $("#brew_preboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het spoelen en voor het koken.' }); |
3951 $("#brew_preboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het spoelen en voor het koken.' }); |
3901 $("#brew_preboil_sg").jqxNumberInput( SGopts ); |
3952 $("#brew_preboil_sg").jqxNumberInput( SGopts ); |
|
3953 $("#brew_preboil_sg").on('valueChanged', function (event) { dataRecord.brew_preboil_sg = event.args.value; calcEfficiencyBeforeBoil() }); |
3902 $("#est_pre_sg").jqxTooltip({ content: 'Het berekende SG in de kookketel na het spoelen en voor het koken.' }); |
3954 $("#est_pre_sg").jqxTooltip({ content: 'Het berekende SG in de kookketel na het spoelen en voor het koken.' }); |
3903 $("#est_pre_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
3955 $("#est_pre_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); |
3904 $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); |
3956 $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); |
3905 $("#brew_aboil_sg").jqxNumberInput( SGopts ); |
3957 $("#brew_aboil_sg").jqxNumberInput( SGopts ); |
|
3958 $("#brew_aboil_sg").on('valueChanged', function (event) { dataRecord.brew_aboil_sg = event.args.value; calcEfficiencyAfterBoil() }); |
3906 $("#est_og3").jqxTooltip({ content: 'Het gewenste SG in de kookketel na het koken.' }); |
3959 $("#est_og3").jqxTooltip({ content: 'Het gewenste SG in de kookketel na het koken.' }); |
3907 $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); |
3960 $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); |
3908 $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); |
3961 $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); |
3909 $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
3962 $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
3910 $("#brew_preboil_volume").jqxTooltip({ content: 'Het volume van het wort voor het koken.' }); |
3963 $("#brew_preboil_volume").jqxTooltip({ content: 'Het volume van het wort voor het koken.' }); |
3911 $("#brew_preboil_volume").jqxNumberInput( Spin1dec ); |
3964 $("#brew_preboil_volume").jqxNumberInput( Spin1dec ); |
|
3965 $("#brew_preboil_volume").on('valueChanged', function (event) { dataRecord.brew_preboil_volume = event.args.value; calcEfficiencyBeforeBoil() }); |
3912 $("#est_pre_vol").jqxTooltip({ content: 'Het berekende volume van het wort voor het koken.' }); |
3966 $("#est_pre_vol").jqxTooltip({ content: 'Het berekende volume van het wort voor het koken.' }); |
3913 $("#est_pre_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
3967 $("#est_pre_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
3914 $("#brew_aboil_volume").jqxTooltip({ content: 'Het volume van het wort na het koken.' }); |
3968 $("#brew_aboil_volume").jqxTooltip({ content: 'Het volume van het wort na het koken.' }); |
3915 $("#brew_aboil_volume").jqxNumberInput( Spin1dec ); |
3969 $("#brew_aboil_volume").jqxNumberInput( Spin1dec ); |
|
3970 $("#brew_aboil_volume").on('valueChanged', function (event) { dataRecord.brew_aboil_volume = event.args.value; calcEfficiencyAfterBoil() }); |
3916 $("#est_a_vol").jqxTooltip({ content: 'Het gewenste volume na het koken.' }); |
3971 $("#est_a_vol").jqxTooltip({ content: 'Het gewenste volume na het koken.' }); |
3917 $("#est_a_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
3972 $("#est_a_vol").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); |
3918 $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' }); |
3973 $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' }); |
3919 $("#brew_preboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
3974 $("#brew_preboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); |
3920 $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); |
3975 $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); |