# HG changeset patch # User Michiel Broek # Date 1561917944 -7200 # Node ID 2dacad5f5fd3ffae164fc9b5c6fa05f6f68f3669 # Parent e5b7055f473fb4146bac6b2e07b7ce20bc7c39d5# Parent 3ad856b99c56600a857f1c0f51d76e94a779e784 Merged with default. diff -r e5b7055f473f -r 2dacad5f5fd3 README.design --- a/README.design Thu Jun 20 22:36:33 2019 +0200 +++ b/README.design Sun Jun 30 20:05:44 2019 +0200 @@ -13,8 +13,43 @@ Extra: -Gisten diastaticus bit toevoegen. -Gist typen: kveik en brett? Apart of niet. +Gisten: = Cultures? +Extra vlaggen: + POF+ (Phenolic Off Flavor Positive) (Ferulic acid to 4-vinyl-guaiacol) + glucoamlylase+ + zymocide+ (K1,K2,K28 or Klus) (killer yeast gen) (Alleen in wijngist?) + sta1 (diastatic) + beta glucosidase +Gist typen: Brettanomyces, Wild yeast, Kviek, Spontaneous. +Gist klasse: N/A, Saccharomyces cerevisiae, Saccharomyces pastorianus, Saccharomyces Bayanus, + +Nieuwe velden: + class int32 low16 high16 + none none + Saccharomyces cerevisiae + pastorianus + Bayanus + pofpos boolean + zymocide int4 none, K1, K2, K28, Klus + sta1 boolean + + + +Recept/Product: toevoegen final pH. + +Toevoegen Barrel/Oak aging vergisting stap. Wort souring stap. + +Add dry-hop toevoegen moment. + +Split batch. + +Miscs type: add wood. + +Hop types: Extract, powder + Popups in de editors met rekenhulpjes. + +https://github.com/beerjson/beerjson + diff -r e5b7055f473f -r 2dacad5f5fd3 config.status diff -r e5b7055f473f -r 2dacad5f5fd3 configure diff -r e5b7055f473f -r 2dacad5f5fd3 configure.ac diff -r e5b7055f473f -r 2dacad5f5fd3 www/import/from_brouwhulp.php --- a/www/import/from_brouwhulp.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/import/from_brouwhulp.php Sun Jun 30 20:05:44 2019 +0200 @@ -1611,12 +1611,10 @@ $sql .= "', brew_mash_ph='" . floatval($recipe->PH_ADJUSTED); if (floatval($recipe->SG_END_MASH) != 1.0) $sql .= "', brew_mash_sg='" . floatval($recipe->SG_END_MASH); - if ($recipe->MASH->SPARGE_TEMP) - $sql .= "', brew_sparge_temperature='" . floatval($recipe->MASH->SPARGE_TEMP); if ($recipe->MASH->PH) $sql .= "', brew_sparge_ph='" . floatval($recipe->MASH->PH); if ($recipe->VOLUME_HLT) - $sql .= "', brew_sparge_volume='" . floatval($recipe->VOLUME_HLT); + $sql .= "', sparge_volume='" . floatval($recipe->VOLUME_HLT); if ($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) @@ -1791,10 +1789,10 @@ do_hops(); do_yeasts(); do_miscs(); -//do_waters(); -//do_equipments(); -//do_styles(); -//do_mash(); +do_waters(); +do_equipments(); +do_styles(); +do_mash(); do_recipes(); do_brews(); diff -r e5b7055f473f -r 2dacad5f5fd3 www/includes/db_product.php --- a/www/includes/db_product.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/includes/db_product.php Sun Jun 30 20:05:44 2019 +0200 @@ -75,8 +75,6 @@ $sql .= ", brew_mash_ph='" . $_POST['brew_mash_ph']; $sql .= "', brew_mash_sg='" . $_POST['brew_mash_sg']; $sql .= "', brew_mash_efficiency='" . $_POST['brew_mash_efficiency']; - $sql .= "', brew_sparge_temperature='" . $_POST['brew_sparge_temperature']; - $sql .= "', brew_sparge_volume='" . $_POST['brew_sparge_volume']; $sql .= "', brew_sparge_est='" . $_POST['brew_sparge_est']; $sql .= "', brew_sparge_ph='" . $_POST['brew_sparge_ph']; $sql .= "', brew_preboil_volume='" . $_POST['brew_preboil_volume']; @@ -676,8 +674,6 @@ $brew .= '","brew_mash_ph":' . floatval($row['brew_mash_ph']); $brew .= ',"brew_mash_sg":' . floatval($row['brew_mash_sg']); $brew .= ',"brew_mash_efficiency":' . floatval($row['brew_mash_efficiency']); - $brew .= ',"brew_sparge_temperature":' . floatval($row['brew_sparge_temperature']); - $brew .= ',"brew_sparge_volume":' . floatval($row['brew_sparge_volume']); $brew .= ',"brew_sparge_est":' . floatval($row['brew_sparge_est']); $brew .= ',"brew_sparge_ph":' . floatval($row['brew_sparge_ph']); $brew .= ',"brew_preboil_volume":' . floatval($row['brew_preboil_volume']); diff -r e5b7055f473f -r 2dacad5f5fd3 www/includes/formulas.php --- a/www/includes/formulas.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/includes/formulas.php Sun Jun 30 20:05:44 2019 +0200 @@ -289,198 +289,4 @@ } - -/* - -Brouwhulp data.pas - - - -Procedure TFermentable.SetpHParameters(force : boolean); -var x, ebc : double; -begin - if Between(FDIpH.Value, -0.01, 0.01) or Between(FAcidTo57.Value, -0.1, 0.1) or force then - begin - ebc:= SRMtoEBC(FColor.Value); - case FGrainType of - gtBase, gtKilned: - begin - FDIpH.Value:= -0.0132 * ebc + 5.7605; - x:= 0.4278 * ebc - 1.8106; - FAcidTo57.Value:= x; - end; - gtRoast: - begin - FDIpH.Value:= 0.00018 * ebc + 4.558; - FAcidTo57.Value:= -0.0176 * ebc + 60.04; - end; - gtCrystal: - begin - FDIpH.Value:= -0.0019 * ebc + 5.2175; - FAcidTo57.Value:= 0.132 * ebc + 14.277; - end; - gtSour: - begin - FDIpH.Value:= 3.44; - FAcidTo57.Value:= 337; - end; - gtSpecial: //this could be anything. Assume for now it is a non-acidulated base or kilned malt - begin - FDIpH.Value:= -0.0132 * ebc + 5.7605; - FAcidTo57.Value:= 0.4278 * ebc - 1.8106; - end; - end; - end; - //known parameters should be filled in here - if FSupplier.Value = 'Weyermann' then - begin - if FName.Value = 'Vienna mout' then - begin - FDIpH.Value:= 5.65; - FAcidTo57.Value:= 1.6; - end; - if FName.Value = 'Münchner I' then - begin - FDIpH.Value:= 5.44; - FAcidTo57.Value:= 8.4; - end; - if FName.Value = 'Münchner II' then - begin - FDIpH.Value:= 5.54; - FAcidTo57.Value:= 5.6; - end; - if FName.Value = 'Caramunich I' then - begin - FDIpH.Value:= 5.1; - FAcidTo57.Value:= 22.4; - end; - if FName.Value = 'Caramunich II' then - begin - FDIpH.Value:= 4.71; - FAcidTo57.Value:= 49; - end; - if FName.Value = 'Caramunich III' then - begin - FDIpH.Value:= 4.92; - FAcidTo57.Value:= 31.2; - end; - if FName.Value = 'Cara-aroma' then - begin - FDIpH.Value:= 4.48; - FAcidTo57.Value:= 74.4; - end; - if FName.Value = 'Carafa I' then - begin - FDIpH.Value:= 4.71; - FAcidTo57.Value:= 42; - end; - if FName.Value = 'Carafa III' then - begin - FDIpH.Value:= 4.81; - FAcidTo57.Value:= 35.4; - end; - if FName.Value = 'Carafa II' then - begin - FDIpH.Value:= 4.76; - FAcidTo57.Value:= 38.7; - end; - if FName.Value = 'Carafa Special I' then - begin - FDIpH.Value:= 4.73; - FAcidTo57.Value:= 46.4; - end; - if FName.Value = 'Carafa Special II' then - begin - FDIpH.Value:= 4.78; - FAcidTo57.Value:= 42.9; - end; - if FName.Value = 'Carafa Special III' then - begin - FDIpH.Value:= 4.83; - FAcidTo57.Value:= 38.9; - end; - if IsInString(FName.Value, 'Zuurmout') then - begin - FDIpH.Value:= 3.44; - FAcidTo57.Value:= 358.2; - end; - end; -end; - - -function TFermentable.GetExtract: double; -begin - Result := 0; - if FRecipe <> nil then - begin - Result := FAmount.Value * FYield.Value / 100 * (1 - FMoisture.Value / 100); - if FAdded = atMash then - Result := Result * FRecipe.Efficiency / 100; - end; -end; - - -function TFermentable.GetKolbachIndex: double; -begin - if FProtein.Value > 0 then - Result := FDissolvedProtein.Value / FProtein.Value - else - Result := 0; -end; - - -function TWater.GetResidualAlkalinity: double; -begin - //Result in mg/l as CaCO3 - Result:= FTotalAlkalinity.Value - (FCalcium.Value / 1.4 + FMagnesium.Value / 1.7); -end; - - -function TWater.GetHardness: double; -begin - Result := 0.14 * FCalcium.Value - 0.23 * FMagnesium.Value; -end; - -function TWater.GetEstPhMash: double; -{var - pHdemi, S: double;} -begin - Result:= MashpH; -{ Result := 0; - if FRecipe <> nil then - begin - pHDemi := FRecipe.pHdemi; - S := 0.013 * FRecipe.MashThickness + 0.013; - Result := pHDemi + ResidualAlkalinity / 50 * S; - end;} -end; - - - - - -Procedure TRecipe.CalcCalories; -var sug, alc, org, fig : double; -begin - if FOGFermenter.Value > 1.001 then org:= FOGFermenter.Value - else if FOG.Value > 1.001 then org:= FOG.Value - else org:= 0; - if FFG.Value > 0.999 then fig:= FFG.Value - else if FEstFG.Value > 1.000 then fig:= FEstFG.Value - else if FEstFG2.Value > 1.000 then fig:= FEstFG2.Value - else fig:= 0; - if (org > 0) and (fig > 0) then - begin - alc:= 1881.22 * fig * (org - fig) / (1.775 - org); - sug:= 3550 * fig * (0.1808 * org + 0.8192 * fig - 1.0004); - FCalories.Value:= (alc + sug) / (12 * 0.0295735296); - end - else FCalories.Value:= 0; -end; - - - - -*/ - ?> diff -r e5b7055f473f -r 2dacad5f5fd3 www/js/global.js --- a/www/js/global.js Thu Jun 20 22:36:33 2019 +0200 +++ b/www/js/global.js Sun Jun 30 20:05:44 2019 +0200 @@ -148,6 +148,11 @@ { id: 2, en: 'Wheat', nl: 'Tarwegist' }, { id: 3, en: 'Wine', nl: 'Wijngist' }, { id: 4, en: 'Champagne', nl: 'Champagnegist' } +// { id: 5, en: 'Brett', nl: 'Brett' }, +// { id: 6, en: 'Kveik', nl: 'Kveik' }, +// { id: 7, en: 'Mixed', nl: 'Mixed' }, +// { id: 8, en: 'Spontaneous', nl: 'Spontaan' }, +// { id: 9, en: 'Other', nl: 'Overig' } ]; var YeastTypeSource = { localdata: YeastTypeData, @@ -378,6 +383,8 @@ var Show1wat = { inputMode: 'simple', theme: theme, width: 74, height: 23, decimalDigits: 1, readOnly: true }; var Show2wat = { inputMode: 'simple', theme: theme, width: 74, height: 23, decimalDigits: 2, readOnly: true }; var Show3wat = { inputMode: 'simple', theme: theme, width: 74, height: 23, decimalDigits: 3, readOnly: true }; +var Smal0dec = { inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }; +var Smal1dec = { inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }; var Show0dec = { inputMode: 'simple', theme: theme, width: 90, height: 23, readOnly: true, decimalDigits: 0 }; var Show1dec = { inputMode: 'simple', theme: theme, width: 90, height: 23, readOnly: true, decimalDigits: 1 }; var Show2dec = { inputMode: 'simple', theme: theme, width: 90, height: 23, readOnly: true, decimalDigits: 2 }; @@ -767,35 +774,10 @@ -/* - * Alcohol By Volume - */ -function abvol(og, fg) { - - if (((og - fg) < 0) || (fg < 0.9)) - return 0; - - /* - * Formule van Hans Halberstadt. De constante factor is afhankelijk van de - * zwaarte van het wort. - */ - var factor = og * 3157 * Math.pow(10, -5) + 9.716 * Math.pow(10, -2); - var result = (og * 1000 - fg * 1000) * factor; - - console.log("HH abvol("+ og * 1000 + ", "+ fg * 1000 + ") factor:" + factor + " abv:" + result); - return result; - - /* - * Dit lijkt goed en wordt in veel moderne software gebruikt, maar... - * dit klopt niet. Busted door Hans Halberstadt. - * return (76.08 * (og-fg) / (1.775-og)) * (fg / 0.794); // Daniels - */ - - /* - * Brouwhulp, houdt geen rekening met zwaardere bieren. - * if ((4.749804 - fg) != 0) - * return 486.8693 * (og - fg) / (4.749804 - fg); - */ +function abvol(og,fg){ +if(((og-fg)<0)||(fg<0.9))return 0; +var factor=og*3157*Math.pow(10,-5)+9.716*Math.pow(10,-2); +return (og*1000-fg*1000)*factor; } @@ -804,23 +786,22 @@ * Kleurwerking naar SRM. Niet voor Halberstadt, Naudts */ function kw_to_srm(colormethod, c) { - - if (colormethod == 0) // Morey - return 1.4922 * Math.pow(c, 0.6859); - if (colormethod == 1) // Mosher - return 0.3 * c + 4.7; - if (colormethod == 2) // Daniels - return 0.2 * c + 8.4; - if (colormethod == 3) // Halberstadt + if(colormethod==0)// Morey + return 1.4922*Math.pow(c,0.6859); + if(colormethod==1)// Mosher + return 0.3*c+4.7; + if(colormethod==2)// Daniels + return 0.2*c+8.4; + if(colormethod==3)// Halberstadt return 0; - if (colormethod == 4) + if(colormethod==4)// Naudts return 0; } function kw_to_ebc(colormethod, c) { - return srm_to_ebc(kw_to_srm(colormethod, c)); + return srm_to_ebc(kw_to_srm(colormethod,c)); } @@ -971,42 +952,22 @@ -function sg_to_plato(sg) { - // http://www.brewersfriend.com/2012/10/31/on-the-relationship-between-plato-and-specific-gravity/ - return ((135.997 * sg - 630.272) * sg + 1111.14) * sg - 616.868; -} - - - -function plato_to_sg(plato) { - return 1 + (plato / (258.6 - ((plato / 258.2) * 227.1))); -} +function sg_to_plato(sg){return ((135.997*sg-630.272)*sg+1111.14)*sg-616.868;} +function plato_to_sg(plato){return 1+(plato/(258.6-((plato/258.2)*227.1)));} +function brix_to_sg(brix){return plato_to_sg(brix/my_brix_correction);} +function sg_to_brix(sg){return sg_to_plato(sg)*my_brix_correction;} -function brix_to_sg(brix) { - return plato_to_sg(brix / my_brix_correction); -} - - - -function sg_to_brix(sg) { - return sg_to_plato(sg) * my_brix_correction; -} - - - -function estimate_sg(sugars, batch_size) { +function estimate_sg(sugars,batch_size){ var plato = 100 * sugars / batch_size; - var sg = plato_to_sg(plato); for (var i = 0; i < 20; i++) { if (sg > 0) plato = 100 * sugars / (batch_size * sg); sg = plato_to_sg(plato); } -// console.log("estimate_sg(" + sugars + "," + batch_size + ") : " + sg); - return sg; + return Math.round(sg * 10000) / 10000; } @@ -1037,10 +998,17 @@ if (attenuation < 30) attenuation = 77; + // 0.00825 Attenuation factor yeast + // 0.00817 Attenuation factor water/grain ration + // -0.00684 Attenuation factor mash temperature + // 0.00026 Attenuation factor total mash time (at some places this is 0.0026 this is wrong!) + // -0.00356 Attenuation factor percentage crystal malt + // 0.00553 Attenuation factor percentage simple sugars + // 0.547 Attenuation factor constant var AttBeer = 0.00825 * attenuation + 0.00817 * BD - 0.00684 * Temp + 0.00026 * TotTme - 0.00356 * percCara + 0.00553 * percSugar + 0.547; var fg = Math.round((1 + (1 - AttBeer) * (og - 1)) * 10000) / 10000; - //console.log("estimate_fg("+percSugar+","+percCara+","+BD+","+TotTme+","+Temp+","+attenuation+","+og+") :"+fg); + console.log("estimate_fg("+percSugar+","+percCara+","+BD+","+TotTme+","+Temp+","+attenuation+","+og+") AttBeer:"+AttBeer+" fg:"+fg); return fg; } diff -r e5b7055f473f -r 2dacad5f5fd3 www/js/prod_edit.js --- a/www/js/prod_edit.js Thu Jun 20 22:36:33 2019 +0200 +++ b/www/js/prod_edit.js Sun Jun 30 20:05:44 2019 +0200 @@ -211,7 +211,7 @@ } d = parseFloat(dataRecord.efficiency) / 100 * d; sugarsm += d; - mashkg += row.f_amount; + mashkg += parseFloat(row.f_amount); } if (row.f_added == 0 || row.f_added == 1) // Mash or Boil sugarsf += d; @@ -270,6 +270,7 @@ dataRecord.est_og = estimate_sg(sugarsf + addedS, parseFloat(dataRecord.batch_size)); $('#est_og').val(dataRecord.est_og); $('#est_og2').val(dataRecord.est_og); + var org = dataRecord.est_og; // Estimate SG in kettle after boil aboil_sg = estimate_sg(sugarsf, parseFloat(dataRecord.batch_size)); @@ -387,6 +388,7 @@ $('#est_fg').val(dataRecord.est_fg); $('#est_fg2').val(dataRecord.est_fg); $('#est_fg3').val(dataRecord.est_fg); + var fig = dataRecord.est_fg; dataRecord.est_abv = abvol(dataRecord.est_og, dataRecord.est_fg); $("#est_abv").val(dataRecord.est_abv); @@ -395,10 +397,17 @@ // Calculate the final svg if available use the real value. if ((dataRecord.stage >= 6) && (dataRecord.fg > 0.990) && (dataRecord.fg < dataRecord.brew_fermenter_sg)) { svg = 100 * (dataRecord.brew_fermenter_sg - dataRecord.fg) / (dataRecord.brew_fermenter_sg - 1); + org = dataRecord.brew_fermenter_sg; + fig = dataRecord.fg; } $("#yeast_cells").val(initcells); $("#need_cells").val(getNeededYeastCells()); + + // Calculate the calories in kcal/l (from brouwhulp) + var alc = 1881.22 * fig * (org - fig) / (1.775 - org); + var sug = 3550 * fig * (0.1808 * org + 0.8192 * fig - 1.0004); + $("#kcal").val(Math.round((alc + sug) / (12 * 0.0295735296))); }; function calcMash() { @@ -2036,10 +2045,8 @@ $("#brew_aboil_sg").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_preboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_aboil_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); - $("#brew_sparge_temperature").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_whirlpool9").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_cooling_to").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); - $("#brew_sparge_volume").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_whirlpool7").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); $("#brew_cooling_method").jqxDropDownList({ disabled: true }); $("#brew_whirlpool6").jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 }); @@ -2329,6 +2336,7 @@ $("#est_pre_vol").val(Math.round(new_boil * 1.04 * 100) / 100); dataRecord.sparge_volume *= factor; $("#sparge_volume").val(dataRecord.sparge_volume); + $("#brew_sparge_volume").val(dataRecord.sparge_volume); dataRecord.batch_size = parseFloat(event.args.value); calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal'))); // Keep the OG adjustWaters(factor); @@ -2385,8 +2393,13 @@ }); $('#sparge_volume').on('change', function (event) { dataRecord.sparge_volume = parseFloat(event.args.value); + $('#brew_sparge_volume').val(dataRecord.sparge_volume); calcSparge(); }); + $("#sparge_temp").on('change', function (event) { + dataRecord.sparge_temp = parseFloat(event.args.value); + $('#brew_sparge_temperature').val(dataRecord.sparge_temp); + }); $('#sparge_source').on('change', function (event) { if (event.args) { var index = event.args.index; @@ -2665,6 +2678,7 @@ dataRecord.sparge_volume = Math.round(datarecord.boil_size * 5) / 10; $("#sparge_volume").val(dataRecord.sparge_volume); + $("#brew_sparge_volume").val(dataRecord.sparge_volume); $("#est_pre_vol").val(datarecord.boil_size * 1.04); calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal'))); // Keep the OG adjustWaters(factor); @@ -2725,8 +2739,6 @@ brew_mash_ph: parseFloat($("#brew_mash_ph").jqxNumberInput('decimal')), brew_mash_sg: parseFloat($("#brew_mash_sg").jqxNumberInput('decimal')), brew_mash_efficiency: parseFloat($("#brew_mash_efficiency").jqxNumberInput('decimal')), - brew_sparge_temperature: parseFloat($("#brew_sparge_temperature").jqxNumberInput('decimal')), - brew_sparge_volume: parseFloat($("#brew_sparge_volume").jqxNumberInput('decimal')), brew_sparge_est: parseFloat($("#brew_sparge_est").jqxNumberInput('decimal')), brew_sparge_ph: parseFloat($("#brew_sparge_ph").jqxNumberInput('decimal')), brew_preboil_volume: parseFloat($("#brew_preboil_volume").jqxNumberInput('decimal')), @@ -2953,8 +2965,6 @@ { name: 'brew_mash_ph', type: 'float' }, { name: 'brew_mash_sg', type: 'float' }, { name: 'brew_mash_efficiency', type: 'float' }, - { name: 'brew_sparge_temperature', type: 'float' }, - { name: 'brew_sparge_volume', type: 'float' }, { name: 'brew_sparge_est', type: 'float' }, { name: 'brew_sparge_ph', type: 'float' }, { name: 'brew_preboil_volume', type: 'float' }, @@ -3154,8 +3164,8 @@ $("#brew_mash_sg").val(dataRecord.brew_mash_sg); $("#brew_mash_efficiency").val(dataRecord.brew_mash_efficiency); // Header Spoelen en filteren - $("#brew_sparge_temperature").val(dataRecord.brew_sparge_temperature); - $("#brew_sparge_volume").val(dataRecord.brew_sparge_volume); + $("#brew_sparge_temperature").val(dataRecord.sparge_temp); + $("#brew_sparge_volume").val(dataRecord.sparge_volume); $("#brew_sparge_est").val(dataRecord.brew_sparge_est); $("#brew_sparge_ph").val(dataRecord.brew_sparge_ph); // Header Beluchten @@ -4437,13 +4447,13 @@ $("#st_name").jqxTooltip({ content: 'De bierstijl naam voor dit recept.'}); $("#st_name").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_letter").jqxTooltip({ content: 'De bierstijl letter voor dit recept.'}); - $("#st_letter").jqxInput({ theme: theme, width: 100, height: 23 }); + $("#st_letter").jqxInput({ theme: theme, width: 90, height: 23 }); $("#st_type").jqxTooltip({ content: 'Het bierstijl type.'}); $("#st_type").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_category").jqxTooltip({ content: 'De Amerikaanse bierstijl categorie.'}); $("#st_category").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_category_number").jqxTooltip({ content: 'De Amerikaanse bierstijl categorie sub nummer.'}); - $("#st_category_number").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_category_number").jqxNumberInput(Smal0dec); $("#est_og").jqxTooltip({ content: 'Het begin SG wat je wilt bereiken. De moutstort wordt automatisch herberekend.' }); $("#est_og").jqxNumberInput( SGopts ); @@ -4460,18 +4470,18 @@ $("#st_fg_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true }); $("#est_abv").jqxTooltip({ content: 'Alcohol volume %. Dit wordt automatisch berekend.' }); - $("#est_abv").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_abv").jqxNumberInput(Smal1dec); $("#st_abv_min").jqxTooltip({ content: 'Het minimum alcohol volume % voor deze bierstijl.'}); - $("#st_abv_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_abv_min").jqxNumberInput(Smal1dec); $("#st_abv_max").jqxTooltip({ content: 'Het maximum alcohol volume % voor deze bierstijl.'}); - $("#st_abv_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_abv_max").jqxNumberInput(Smal1dec); $("#est_color").jqxTooltip({ content: 'De kleur in EBC. Dit wordt automatisch berekend.' }); $("#est_color").jqxNumberInput( Show0dec ); $("#st_color_min").jqxTooltip({ content: 'De minimum kleur voor deze bierstijl.'}); - $("#st_color_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_color_min").jqxNumberInput(Smal0dec); $("#st_color_max").jqxTooltip({ content: 'De maximum kleur voor deze bierstijl.'}); - $("#st_color_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_color_max").jqxNumberInput(Smal0dec); $("#color_method").jqxDropDownList({ theme: theme, source: ColorMethodAdapter, @@ -4481,13 +4491,12 @@ height: 23, autoDropDownHeight: true }); - $("#est_ibu").jqxTooltip({ content: 'De bitterheid in IBU. Dit wordt automatisch berekend.' }); $("#est_ibu").jqxNumberInput( Show0dec ); $("#st_ibu_min").jqxTooltip({ content: 'De minimum bitterheid voor deze bierstijl.'}); - $("#st_ibu_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_ibu_min").jqxNumberInput(Smal0dec); $("#st_ibu_max").jqxTooltip({ content: 'De maximum bitterheid voor deze bierstijl.'}); - $("#st_ibu_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_ibu_max").jqxNumberInput(Smal0dec); $("#ibu_method").jqxDropDownList({ theme: theme, source: IBUmethodAdapter, @@ -4498,13 +4507,14 @@ autoDropDownHeight: true, dropDownVerticalAlignment: 'top' }); - + $("#kcal").jqxTooltip({ content: 'Energie-inhoud in kcal/liter.' }); + $("#kcal").jqxNumberInput( Smal0dec ); $("#est_carb").jqxTooltip({ content: 'Koolzuur volume. Dit wordt automatisch berekend.' }); - $("#est_carb").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_carb").jqxNumberInput(Smal1dec); $("#st_carb_min").jqxTooltip({ content: 'Het minimum koolzuur volume voor deze bierstijl.'}); - $("#st_carb_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_min").jqxNumberInput(Smal1dec); $("#st_carb_max").jqxTooltip({ content: 'Het maximum koolzuur volume voor deze bierstijl.'}); - $("#st_carb_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_max").jqxNumberInput(Smal1dec); // Tab 2, Equipment $("#eq_name").jqxTooltip({ content: 'De naam van deze brouw apparatuur.' }); @@ -4829,7 +4839,7 @@ // Tab 4, Hops $("#est_ibu2").jqxTooltip({ content: 'De bitterheid in IBU. Dit wordt automatisch berekend.' }); - $("#est_ibu2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#est_ibu2").jqxNumberInput(Smal0dec); $("#hop_flavour").jqxProgressBar({ width: 300, height: 23, @@ -5145,7 +5155,7 @@ $("#est_fg2").jqxTooltip({ content: 'Het verwachte eind SG. Dit wordt automatisch berekend.' }); $("#est_fg2").jqxNumberInput( Show3dec ); $("#est_abv2").jqxTooltip({ content: 'Alcohol volume %. Dit wordt automatisch berekend.' }); - $("#est_abv2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_abv2").jqxNumberInput(Smal1dec); $("#yeast_cells").jqxNumberInput( Show1dec ); $("#need_cells").jqxNumberInput( Show1dec ); $("#plato_cells").jqxNumberInput( Show2dec ); @@ -5720,8 +5730,10 @@ $("#brew_preboil_efficiency").jqxNumberInput( Show1dec ); $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); $("#brew_aboil_efficiency").jqxNumberInput( Show1dec ); - $("#brew_sparge_temperature").jqxNumberInput( Spin1dec ); - $("#brew_sparge_volume").jqxNumberInput( Spin1dec ); + $("#brew_sparge_temperature").jqxTooltip({ content: 'De spoelwater temperatuur, in te stellen in de Water tab.' }); + $("#brew_sparge_temperature").jqxNumberInput( Show1dec ); + $("#brew_sparge_volume").jqxTooltip({ content: 'Het spoelwater voorraad volume, in te stellen in de Water tab.' }); + $("#brew_sparge_volume").jqxNumberInput( Show1dec ); $("#brew_sparge_est").jqxNumberInput( Show1dec ); $("#brew_whirlpool9").jqxNumberInput( PosInt ); $("#brew_whirlpool9").jqxNumberInput({ max: 120 }); @@ -5824,9 +5836,9 @@ $('#package_abv').jqxTooltip({ content: 'De uiteindelijke hoeveelheid alcohol volume %.' }); $('#package_abv').jqxNumberInput( Show1dec ); $("#st_carb_min2").jqxTooltip({ content: 'Het minimum aanbevolen koolzuur volume voor deze bierstijl.'}); - $("#st_carb_min2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_min2").jqxNumberInput(Smal1dec); $("#st_carb_max2").jqxTooltip({ content: 'Het maximum aamnevolen koolzuur volume voor deze bierstijl.'}); - $("#st_carb_max2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_max2").jqxNumberInput(Smal1dec); $("#bottle_amount").jqxTooltip({ content: 'De totale hoeveelheid te bottelen bier.' }); $("#bottle_amount").jqxNumberInput( Spin1dec ); $("#keg_amount").jqxTooltip({ content: 'De totale hoeveelheid op fust te zetten bier.' }); diff -r e5b7055f473f -r 2dacad5f5fd3 www/js/prod_new.js --- a/www/js/prod_new.js Thu Jun 20 22:36:33 2019 +0200 +++ b/www/js/prod_new.js Sun Jun 30 20:05:44 2019 +0200 @@ -286,8 +286,6 @@ brew_date_start: '', brew_mash_ph: 0.0, brew_mash_sg: 1.000, - brew_sparge_temperature: 0, - brew_sparge_volume: 0, brew_sparge_ph: 0.0, brew_preboil_volume: 0, brew_preboil_sg: 0, diff -r e5b7055f473f -r 2dacad5f5fd3 www/js/rec_edit.js --- a/www/js/rec_edit.js Thu Jun 20 22:36:33 2019 +0200 +++ b/www/js/rec_edit.js Sun Jun 30 20:05:44 2019 +0200 @@ -271,6 +271,7 @@ dataRecord.est_og = estimate_sg(sugarsf + addedS, parseFloat(dataRecord.batch_size)); $('#est_og').val(dataRecord.est_og); $('#est_og2').val(dataRecord.est_og); + var org = dataRecord.est_og; // Estimate SG in kettle before boil preboil_sg = estimate_sg(sugarsm, parseFloat(dataRecord.boil_size)); @@ -318,10 +319,16 @@ } $('#est_fg').val(dataRecord.est_fg); $('#est_fg2').val(dataRecord.est_fg); + var fig = dataRecord.est_fg; dataRecord.est_abv = abvol(dataRecord.est_og, dataRecord.est_fg); $("#est_abv").val(dataRecord.est_abv); $("#est_abv2").val(dataRecord.est_abv); + + // Calculate the calories in kcal/l (from brouwhulp) + var alc = 1881.22 * fig * (org - fig) / (1.775 - org); + var sug = 3550 * fig * (0.1808 * org + 0.8192 * fig - 1.0004); + $("#kcal").val(Math.round((alc + sug) / (12 * 0.0295735296))); }; function hopFlavourContribution(bt, vol, use, amount) { @@ -2809,13 +2816,13 @@ $("#st_name").jqxTooltip({ content: 'De bierstijl naam voor dit recept.'}); $("#st_name").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_letter").jqxTooltip({ content: 'De bierstijl letter voor dit recept.'}); - $("#st_letter").jqxInput({ theme: theme, width: 100, height: 23 }); + $("#st_letter").jqxInput({ theme: theme, width: 90, height: 23 }); $("#st_guide").jqxTooltip({ content: 'De bierstijl gids voor dit recept.'}); $("#st_guide").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_category").jqxTooltip({ content: 'De Amerikaanse bierstijl categorie.'}); $("#st_category").jqxInput({ theme: theme, width: 250, height: 23 }); $("#st_category_number").jqxTooltip({ content: 'De Amerikaanse bierstijl categorie sub nummer.'}); - $("#st_category_number").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_category_number").jqxNumberInput( Smal0dec ); $("#st_type").jqxTooltip({ content: 'Het bierstijl type.'}); $("#st_type").jqxInput({ theme: theme, width: 250, height: 23 }); @@ -2834,18 +2841,18 @@ $("#st_fg_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true }); $("#est_abv").jqxTooltip({ content: 'Alcohol volume %. Dit wordt automatisch berekend.' }); - $("#est_abv").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_abv").jqxNumberInput( Smal1dec ); $("#st_abv_min").jqxTooltip({ content: 'Het minimum alcohol volume % voor deze bierstijl.'}); - $("#st_abv_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_abv_min").jqxNumberInput( Smal1dec ); $("#st_abv_max").jqxTooltip({ content: 'Het maximum alcohol volume % voor deze bierstijl.'}); - $("#st_abv_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_abv_max").jqxNumberInput( Smal1dec ); $("#est_color").jqxTooltip({ content: 'De kleur in EBC. Dit wordt automatisch berekend.' }); $("#est_color").jqxNumberInput( Show0dec ); $("#st_color_min").jqxTooltip({ content: 'De minimum kleur voor deze bierstijl.'}); - $("#st_color_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_color_min").jqxNumberInput( Smal0dec ); $("#st_color_max").jqxTooltip({ content: 'De maximum kleur voor deze bierstijl.'}); - $("#st_color_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_color_max").jqxNumberInput( Smal0dec ); $("#color_method").jqxDropDownList({ theme: theme, source: ColorMethodAdapter, @@ -2855,13 +2862,12 @@ height: 23, autoDropDownHeight: true }); - $("#est_ibu").jqxTooltip({ content: 'De bitterheid in IBU. Dit wordt automatisch berekend.' }); $("#est_ibu").jqxNumberInput( Show0dec ); $("#st_ibu_min").jqxTooltip({ content: 'De minimum bitterheid voor deze bierstijl.'}); - $("#st_ibu_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_ibu_min").jqxNumberInput( Smal0dec ); $("#st_ibu_max").jqxTooltip({ content: 'De maximum bitterheid voor deze bierstijl.'}); - $("#st_ibu_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#st_ibu_max").jqxNumberInput( Smal0dec ); $("#ibu_method").jqxDropDownList({ theme: theme, source: IBUmethodAdapter, @@ -2872,13 +2878,14 @@ autoDropDownHeight: true, dropDownVerticalAlignment: 'top' }); - + $("#kcal").jqxTooltip({ content: 'Energie-inhoud in kcal/liter.' }); + $("#kcal").jqxNumberInput( Smal0dec ); $("#est_carb").jqxTooltip({ content: 'Koolzuur volume. Dit wordt automatisch berekend.' }); - $("#est_carb").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_carb").jqxNumberInput( Smal1dec ); $("#st_carb_min").jqxTooltip({ content: 'Het minimum koolzuur volume voor deze bierstijl.'}); - $("#st_carb_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_min").jqxNumberInput( Smal1dec ); $("#st_carb_max").jqxTooltip({ content: 'Het maximum koolzuur volume voor deze bierstijl.'}); - $("#st_carb_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#st_carb_max").jqxNumberInput( Smal1dec ); // Tab 2, Vergistbaar $("#est_color2").jqxTooltip({ content: 'De kleur in EBC. Dit wordt automatisch berekend.' }); @@ -3163,7 +3170,7 @@ // Tab 3, Hoppen $("#est_ibu2").jqxTooltip({ content: 'De bitterheid in IBU. Dit wordt automatisch berekend.' }); - $("#est_ibu2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true }); + $("#est_ibu2").jqxNumberInput( Smal0dec ); $("#hop_flavour").jqxProgressBar({ width: 300, height: 23, @@ -3480,7 +3487,7 @@ $("#est_fg2").jqxTooltip({ content: 'Het eind SG. Dit wordt automatisch berekend.' }); $("#est_fg2").jqxNumberInput( Show3dec ); $("#est_abv2").jqxTooltip({ content: 'Alcohol volume %. Dit wordt automatisch berekend.' }); - $("#est_abv2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); + $("#est_abv2").jqxNumberInput( Smal1dec ); $("#popupYeast").jqxWindow({ width: 800, height: 300, diff -r e5b7055f473f -r 2dacad5f5fd3 www/prod_beerxml.php --- a/www/prod_beerxml.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/prod_beerxml.php Sun Jun 30 20:05:44 2019 +0200 @@ -30,7 +30,7 @@ $hopuse = array( 'Mash', 'First wort', 'Boil', 'Aroma', 'Whirlpool', 'Dry hop' ); $fermentabletype = array( 'Grain', 'Sugar', 'Extract', 'Dry extract', 'Adjunct' ); $graintype = array( 'Base', 'Roast', 'Crystal', 'Kilned', 'Sour malt', 'Special', 'No malt' ); -$yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne' ); +$yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne', 'Other', 'Other', 'Other', 'Other', 'Other' ); $yeastform = array( 'Liquid', 'Dry', 'Slant', 'Culture', 'Frozen', 'Bottle' ); $yeastuse = array( 'Primary', 'Secondary', 'Tertiary', 'Bottle' ); $misctype = array( 'Spice', 'Herb', 'Flavor', 'Fining', 'Water agent', 'Yeast nutrient', 'Other' ); diff -r e5b7055f473f -r 2dacad5f5fd3 www/prod_duplicate.php --- a/www/prod_duplicate.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/prod_duplicate.php Sun Jun 30 20:05:44 2019 +0200 @@ -64,8 +64,6 @@ $sql .= "', brew_date_start=NULL"; $sql .= ", brew_mash_ph='0.0"; $sql .= "', brew_mash_sg='1.000"; -$sql .= "', brew_sparge_temperature='" . $row['brew_sparge_temperature']; -$sql .= "', brew_sparge_volume='" . $row['brew_sparge_volume']; $sql .= "', brew_sparge_ph='" . $row['brew_sparge_ph']; $sql .= "', brew_preboil_volume='0"; $sql .= "', brew_preboil_sg='0"; diff -r e5b7055f473f -r 2dacad5f5fd3 www/prod_edit.php --- a/www/prod_edit.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/prod_edit.php Sun Jun 30 20:05:44 2019 +0200 @@ -86,7 +86,7 @@
Eind SG:
- Alcohol vol%: + Alcohol vol.%:
@@ -102,8 +102,8 @@
Bitterheid methode:
- - + Energie-inhoud kcal/l: +
@@ -463,7 +463,7 @@
Maish pH:
- Spoelwater liters: + Spoelwater voorraad l:
@@ -708,7 +708,7 @@
- Alcohol percentage voor hergisting: + Alcoholgehalte voor hergisting vol.%:
Schijnbare vergistingsgraad %:
@@ -750,7 +750,7 @@ - Finaal alcohol %: + Alcoholgehalte vol.%:
@@ -808,9 +808,9 @@
- Alcohol op fles: + Alcoholgehalte flessen vol.%:
- Alcohol op fust: + Alcoholgehalte fusten vol.%:
diff -r e5b7055f473f -r 2dacad5f5fd3 www/prod_print.php --- a/www/prod_print.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/prod_print.php Sun Jun 30 20:05:44 2019 +0200 @@ -738,7 +738,7 @@ $coolingtype = array( '-', 'Dompelkoeler', 'Tegenstroomkoeler', 'Au bain marie', 'Laten afkoelen' ); $this->SetX($this->TableX); $this->Cell(35,5,'Spoelwater temperatuur',0,0,'L',true); - $this->Cell(50,5,sprintf("%.1f", $row['brew_sparge_temperature']).DEG.'C',0,0,'L',true); + $this->Cell(50,5,sprintf("%.1f", $row['sparge_temp']).DEG.'C',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Koel methode',0,0,'L',true); $this->Cell(50,5,$coolingtype[$row['brew_cooling_method']],0,0,'L',true); diff -r e5b7055f473f -r 2dacad5f5fd3 www/rec_beerxml.php --- a/www/rec_beerxml.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/rec_beerxml.php Sun Jun 30 20:05:44 2019 +0200 @@ -30,7 +30,7 @@ $hopuse = array( 'Mash', 'First wort', 'Boil', 'Aroma', 'Whirlpool', 'Dry hop' ); $fermentabletype = array( 'Grain', 'Sugar', 'Extract', 'Dry extract', 'Adjunct' ); $graintype = array( 'Base', 'Roast', 'Crystal', 'Kilned', 'Sour malt', 'Special', 'No malt' ); -$yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne' ); +$yeasttype = array( 'Lager', 'Ale', 'Wheat', 'Wine', 'Champagne', 'Other', 'Other', 'Other', 'Other', 'Other' ); $yeastform = array( 'Liquid', 'Dry', 'Slant', 'Culture', 'Frozen', 'Bottle' ); $yeastuse = array( 'Primary', 'Secondary', 'Tertiary', 'Bottle' ); $misctype = array( 'Spice', 'Herb', 'Flavor', 'Fining', 'Water agent', 'Yeast nutrient', 'Other' ); diff -r e5b7055f473f -r 2dacad5f5fd3 www/rec_edit.php --- a/www/rec_edit.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/rec_edit.php Sun Jun 30 20:05:44 2019 +0200 @@ -32,7 +32,7 @@ Brouw type:
- Brouwzaal rendement %: + Brouwzaal rendement:
@@ -73,7 +73,7 @@
Verwacht eind SG:
- Alcohol vol%: + Alcohol vol.%:
@@ -89,8 +89,8 @@
Bitterheid methode:
- - + Energie-inhoud kcal/l: +
diff -r e5b7055f473f -r 2dacad5f5fd3 www/rec_toproduct.php --- a/www/rec_toproduct.php Thu Jun 20 22:36:33 2019 +0200 +++ b/www/rec_toproduct.php Sun Jun 30 20:05:44 2019 +0200 @@ -46,7 +46,7 @@ $sql .= "', eq_kettle_height='20', eq_mash_volume='18', eq_mash_max='6', eq_efficiency='75"; // brewdate $sql .= "', brew_date_start=NULL, brew_mash_ph='0.0', brew_mash_sg='1.000"; -$sql .= "', brew_sparge_temperature='0', brew_sparge_volume='0', brew_sparge_ph='0.0"; +$sql .= "', brew_sparge_ph='0.0"; $sql .= "', brew_preboil_volume='0', brew_preboil_sg='0', brew_preboil_ph='0.0"; $sql .= "', brew_aboil_volume='0', brew_aboil_sg='0', brew_aboil_ph='0.0', brew_aboil_efficiency='0"; $sql .= "', brew_cooling_method='0', brew_cooling_time='0', brew_cooling_to='20";