www/js/rec_edit.js

changeset 136
bcc4583fd013
parent 135
cd1403633e96
child 137
dfbf43b2797e
--- a/www/js/rec_edit.js	Sun Dec 09 22:27:38 2018 +0100
+++ b/www/js/rec_edit.js	Mon Dec 10 22:20:19 2018 +0100
@@ -51,6 +51,7 @@
 	var	sugarsf = 0;	// Sugars after boil
 	var     psugar = 0;     // Percentage real sugars
 	var     pcara = 0;      // Percentage cara/crystal malts
+	var	svg = 77;	// Default attenuation
 
 	console.log("record:" + my_record + "  return:" + my_return + "  theme:" + theme);
 	$("#jqxLoader").jqxLoader({
@@ -77,7 +78,7 @@
 				my_100 = true;
 			if (row.f_type == "Sugar")
 				psugar += row.f_percentage;
-			if (row.f_type == "Crystal")
+			if (row.f_graintype == "Crystal")
 				pcara += row.f_percentage;
 			var d = row.f_amount * (row.f_yield / 100) * (1 - row.f_moisture / 100);
 			if (row.f_added == "Mash") {
@@ -95,6 +96,42 @@
 		$('#est_color').val(kw_to_ebc($("#color_method").val(), colorw));
 	};
 
+	function hopFlavourContribution(bt, vol, use, amount) {
+		var result;
+
+		if ((use == "First Wort") || (use == "First wort")) {
+			result = 0.15 * amount * 1000;		// assume 15% flavourcontribution for fwh
+		} else if (bt > 50) {
+			result = 0.10 * amount * 1000;		// assume 10% flavourcontribution as a minimum
+		} else {
+			result = 15.25 / (6 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 21) /6, 2)) * amount * 1000;
+			if (result < (0.10 * amount * 1000))
+				result = 0.10 * amount * 1000;	// assume 10% flavourcontribution as a minimum
+		}
+		console.log("hopFlavourContribution("+bt+","+vol+","+use+","+amount+"): "+(result / vol));
+		return result / vol;
+	}
+
+	function hopAromaContribution(bt, vol, use, amount) {
+		var result = 0;
+
+		if (bt > 20) {
+			result = 0;
+		} else if (bt > 7.5) {
+			result = 10.03 / (4 * Math.sqrt(2 * Math.PI)) * Math.exp(-0.5 * Math.pow((bt - 7.5) /4, 2)) * amount * 1000;
+		} else if (use == "Boil") {
+			result = amount * 1000;
+		} else if (use == "Aroma") {
+			result = 1.2 * amount * 1000;
+		} else if (use == "Whirlpool") {
+			result = 1.2 * amount * 1000;
+		} else if ((use == "Dry Hop") || (use == "Dry hop")) {
+			result = 1.33 * amount * 1000;
+		}
+		console.log("hopAromaContribution("+bt+","+vol+","+use+","+amount+"): "+(result / vol));
+		return result / vol;
+	}
+
 	function calcIBUs() {
 		var total_ibus = 0;
 		var rows = $('#hopGrid').jqxGrid('getrows');
@@ -102,11 +139,24 @@
 			var row = rows[i];
 			total_ibus += toIBU(row.h_useat, row.h_form, preboil_sg, parseFloat($("#batch_size").jqxNumberInput('decimal')),
 					parseFloat(row.h_amount), parseFloat(row.h_time), parseFloat(row.h_alpha), $("#ibu_method").val());
+			hopFlavourContribution(parseFloat(row.h_time), parseFloat($("#batch_size").jqxNumberInput('decimal')),
+						row.h_useat, parseFloat(row.h_amount));
+			hopAromaContribution(parseFloat(row.h_time), parseFloat($("#batch_size").jqxNumberInput('decimal')),
+					                                                row.h_useat, parseFloat(row.h_amount));
 		}
 		console.log("calcIBUs(): " + total_ibus);
 		$('#est_ibu').val(total_ibus);
 	};
 
+	function calcSVG() {
+		var rows = $('#yeastGrid').jqxGrid('getrows');
+		for (var i = 0; i < rows.length; i++) {
+			var row = rows[i];
+			if (row.y_use == "Primary")
+				svg = parseFloat(row.y_attenuation);
+		}
+	}
+
 	function calcFermentablesFromOG(OG) {
 
 		console.log("calcFermentablesFromOG("+OG+")");
@@ -157,6 +207,7 @@
 			dataRecord.batch_size = parseFloat(event.args.value);
 			calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
 			calcFermentables();
+			calcSVG();
 			calcABV();
 			// TODO: adjust the hops, miscs, yeast, water.
 			calcIBUs();
@@ -171,6 +222,7 @@
 			dataRecord.boil_size = new_boil;
 			$("#boil_size").val(Math.round(new_boil * 100) / 100);
 			calcFermentables();
+			calcSVG();
 			calcABV();
 			// TODO: adjust the hops, miscs, yeast, water.
 			calcIBUs();
@@ -178,6 +230,7 @@
 		$('#efficiency').on('change', function (event) {
 			console.log("efficiency change:"+event.args.value);
 			calcFermentables();
+			calcSVG();
 			calcABV();
 			calcIBUs();
 		});
@@ -185,6 +238,7 @@
 			console.log("est_og change:"+event.args.value);
 			calcFermentablesFromOG(event.args.value);       // Adjust fermentables amounts
 			calcFermentables();                             // Update the recipe details
+			calcSVG();
 			calcABV();                                      // and ABV
 			calcIBUs();                                     // and the IBU's.
 		});
@@ -583,6 +637,7 @@
 						$("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100);
 					}
 					calcFermentables();
+					calcSVG();
 					calcABV();
 					calcIBUs();
 				});
@@ -719,6 +774,7 @@
 			};
 			$('#fermentableGrid').jqxGrid('sortby', 'f_amount', 'desc');	// TODO: not reliable
 			calcFermentables();
+			calcSVG();
 			calcABV();
 			calcIBUs();	// Depends on gravity, so recalculate.
 		});
@@ -1160,6 +1216,7 @@
                                 });
                         },
 			ready: function() {
+				calcSVG();
 				$('#jqxTabs').jqxTabs('next');
 			},
                         columns: [
@@ -1395,6 +1452,7 @@
                                 });
                         },
 			ready: function() {
+				var fg = estimate_fg(psugar, pcara, 0, 0, 0, svg, parseFloat(parseFloat($("#est_og").jqxNumberInput('decimal'))));
 				calcInit();
 				$('#jqxLoader').jqxLoader('close');
 				$('#jqxTabs').jqxTabs('first');

mercurial