Merged with default. stable

Sun, 30 Jun 2019 20:05:44 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sun, 30 Jun 2019 20:05:44 +0200
branch
stable
changeset 435
2dacad5f5fd3
parent 427
e5b7055f473f (current diff)
parent 434
3ad856b99c56 (diff)
child 436
4daef9c8aa8e

Merged with default.

config.status file | annotate | diff | comparison | revisions
configure file | annotate | diff | comparison | revisions
configure.ac file | annotate | diff | comparison | revisions
--- 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
+
--- 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();
 
--- 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']);
--- 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;
-
-
-
-
-*/
-
 ?>
--- 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;
 }
 
--- 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.' });
--- 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,
--- 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,
--- 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' );
--- 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";
--- 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 @@
         <td style="padding: 3px;"><div style="float: left;" id="est_og"></div><div style="float: left; margin-left: 15px;" id="st_og_min"></div><div style="float: left; margin-left: 5px;" id="st_og_max"></div></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Eind SG:</td>
         <td style="padding: 3px;"><div style="float: left;" id="est_fg"></div><div style="float: left; margin-left: 15px;" id="st_fg_min"></div><div style="float: left; margin-left: 5px;" id="st_fg_max"></div></td>
-        <td style="vertical-align: top; float: right; padding: 3px;">Alcohol vol%:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Alcohol vol.%:</td>
         <td style="padding: 3px;"><div style="float: left;" id="est_abv"></div><div style="float: left; margin-left: 15px;" id="st_abv_min"></div><div style="float: left; margin-left: 5px;" id="st_abv_max"></div></td>
        </tr>
        <tr>
@@ -102,8 +102,8 @@
         <td style="padding: 3px;"><div style="float: left;" id="est_ibu"></div><div style="float: left; margin-left: 15px;" id="st_ibu_min"></div><div style="float: left; margin-left: 5px;" id="st_ibu_max"></div></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Bitterheid methode:</td>
         <td style="padding: 3px;"><div style="float: left;" id="ibu_method"></div></td>
-        <td></td>
-        <td></td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Energie-inhoud kcal/l:</td>
+        <td style="padding: 3px;"><div style="float: left;" id="kcal"></div></div></td>
        </tr>
       </table>
       <div style="float: right; margin-top: 20px; margin-bottom: 5px;">
@@ -463,7 +463,7 @@
 	<td style="padding: 3px;"><div id="wa_cacl2"></div></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Maish pH:</td>
         <td style="padding: 3px;"><div id="mash_ph"></div></td>
-        <td style="vertical-align: top; float: right; padding: 3px;">Spoelwater liters:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Spoelwater voorraad l:</td>
         <td style="padding: 3px;"><div id="sparge_volume"></div></td>
        </tr>
        <tr>
@@ -708,7 +708,7 @@
         <td align="left" style="vertical-align: top;"><div id="final_brix"></div></td>
        </tr>
        <tr>
-        <td style="vertical-align: top; float: right; padding: 3px;">Alcohol percentage voor hergisting:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Alcoholgehalte voor hergisting vol.%:</td>
         <td align="left" style="vertical-align: top;"><div id="final_abv"></div></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Schijnbare vergistingsgraad %:</td>
         <td align="left" style="vertical-align: top;"><div id="final_svg"></div></td>
@@ -750,7 +750,7 @@
         <td align="left" colspan="3" style="vertical-align: top; padding: 3px;"><input id="package_infuse_notes" /></td>
        </tr>
        <tr>
-        <td style="vertical-align: top; float: right; padding: 3px;">Finaal alcohol %:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Alcoholgehalte vol.%:</td>
         <td align="left" colspan="3" style="vertical-align: top;"><div id="package_abv"></div></td>
        </tr>
        <tr>
@@ -808,9 +808,9 @@
         <td align="left" style="vertical-align: top;"><div id="keg_pressure"></div></td>
        </tr>
        <tr>
-        <td style="vertical-align: top; float: right; padding: 3px;">Alcohol op fles:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Alcoholgehalte flessen vol.%:</td>
         <td align="left" style="vertical-align: top;"><div id="bottle_abv"></div></td>
-        <td style="vertical-align: top; float: right; padding: 3px;">Alcohol op fust:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Alcoholgehalte fusten vol.%:</td>
         <td align="left" style="vertical-align: top;"><div id="keg_abv"></div></td>
        </tr>
        <tr>
--- 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);
--- 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' );
--- 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 @@
         <tr>
 	 <td style="vertical-align: top; float: right; padding: 3px;">Brouw type:</td>
 	 <td align="left" style="padding: 3px;"><div id="type"></div></td>
-         <td style="vertical-align: top; float: right; padding: 3px;">Brouwzaal rendement %:</td>
+         <td style="vertical-align: top; float: right; padding: 3px;">Brouwzaal rendement:</td>
          <td colspan="3" style="padding: 3px;"><div id="efficiency"></div></td>
         </tr>
         <tr>
@@ -73,7 +73,7 @@
          <td style="padding: 3px;"><div style="float: left;" id="est_og"></div><div style="float: left; margin-left: 15px;" id="st_og_min"></div><div style="float: left; margin-left: 5px;" id="st_og_max"></div></td>
          <td style="vertical-align: top; float: right; padding: 3px;">Verwacht eind SG:</td>
 	 <td style="padding: 3px;"><div style="float: left;" id="est_fg"></div><div style="float: left; margin-left: 15px;" id="st_fg_min"></div><div style="float: left; margin-left: 5px;" id="st_fg_max"></div></td>
-         <td style="vertical-align: top; float: right; padding: 3px;">Alcohol vol%:</td>
+         <td style="vertical-align: top; float: right; padding: 3px;">Alcohol vol.%:</td>
          <td style="padding: 3px;"><div style="float: left;" id="est_abv"></div><div style="float: left; margin-left: 15px;" id="st_abv_min"></div><div style="float: left; margin-left: 5px;" id="st_abv_max"></div></td>
 	</tr>
         <tr>
@@ -89,8 +89,8 @@
          <td style="padding: 3px;"><div style="float: left;" id="est_ibu"></div><div style="float: left; margin-left: 35px;" id="st_ibu_min"></div><div style="float: left; margin-left: 5px;" id="st_ibu_max"></div></td>
          <td style="vertical-align: top; float: right; padding: 3px;">Bitterheid methode:</td>
          <td style="padding: 3px;"><div style="float: left;" id="ibu_method"></div></td>
-         <td></td>
-         <td></td>
+         <td style="vertical-align: top; float: right; padding: 3px;">Energie-inhoud kcal/l:</td>
+         <td style="padding: 3px;"><div style="float: left;" id="kcal"></div></div></td>
         </tr>
        </table>
        <div style="float: right; margin-top: 30px; margin-bottom: 10px;">
--- 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";

mercurial