Adjust water, hops, yeasts and miscs when the batch size or equipment changes.

Mon, 11 Feb 2019 15:26:29 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Mon, 11 Feb 2019 15:26:29 +0100
changeset 263
ed22ac46404b
parent 262
36cf32fcd210
child 264
24139883b9fa

Adjust water, hops, yeasts and miscs when the batch size or equipment changes.

www/js/prod_edit.js file | annotate | diff | comparison | revisions
www/js/rec_edit.js file | annotate | diff | comparison | revisions
--- a/www/js/prod_edit.js	Sun Feb 10 22:08:01 2019 +0100
+++ b/www/js/prod_edit.js	Mon Feb 11 15:26:29 2019 +0100
@@ -389,6 +389,104 @@
 		calcStage();
 	};
 
+	function adjustHops(factor) {
+
+		console.log("adjustHops("+factor+")");
+
+		var rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#hopGrid").jqxGrid('getrowdata', i);
+			var amount = row.h_amount * factor;
+			$("#hopGrid").jqxGrid('setcellvalue', i, "h_amount", amount);
+		}
+	};
+
+	function adjustMiscs(factor) {
+
+		console.log("adjustMiscs("+factor+")");
+
+		var rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#miscGrid").jqxGrid('getrowdata', i);
+			var amount = row.m_amount * factor;
+			$("#miscGrid").jqxGrid('setcellvalue', i, "m_amount", amount);
+			switch (row.m_name) {
+				case 'CaCl2':		$("#wa_cacl2").val(row.m_amount * 1000);
+							break;
+				case 'CaSO4':		$("#wa_caso4").val(row.m_amount * 1000);
+							break;
+				case 'MgSO4':		$("#wa_mgso4").val(row.m_amount * 1000);
+							break;
+				case 'NaCl':		$("#wa_nacl").val(row.m_amount * 1000);
+							break;
+				case 'Melkzuur':
+				case 'Zoutzuur':
+				case 'Fosforzuur':
+				case 'Zwavelzuur':	$("#wa_acid").val(row.m_amount * 1000);
+							break;
+				case 'NaHCO3':
+				case 'Na2CO3':
+				case 'CaCO3':
+				case 'Ca(OH)2':		$("#wa_base").val(row.m_amount * 1000);
+							break;
+			}
+		}
+	};
+
+	function adjustYeasts(factor) {
+
+		console.log("adjustYeasts("+factor+")");
+
+		var rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#yeastGrid").jqxGrid('getrowdata', i);
+			if (row.y_form == 1) { // Only adjust dry yeast
+				var amount = row.y_amount * factor;
+				$("#yeastGrid").jqxGrid('setcellvalue', i, "y_amount", amount);
+			}
+		}
+		// TODO: adjust starter size
+	};
+
+	function adjustWaters(factor) {
+
+		console.log("adjustWaters("+factor+")");
+
+		var rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		mash_infuse = 0;
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#mashGrid").jqxGrid('getrowdata', i);
+			if (row.step_type == 0) { // Infusion
+				var amount = Math.round(row.step_infuse_amount * factor * 10) / 10;
+				$("#mashGrid").jqxGrid('setcellvalue', i, "step_infuse_amount", amount);
+				mash_infuse += amount;
+			}
+		}
+		if (dataRecord.w2_amount == 0) {
+			dataRecord.w1_amount = mash_infuse;
+			$("#w1_amount").val(mash_infuse);
+		} else {
+			dataRecord.w1_amount = (dataRecord.w1_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+			dataRecord.w2_amount = (dataRecord.w2_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+			$("#w1_amount").val(dataRecord.w1_amount);
+			$("#w2_amount").val(dataRecord.w2_amount);
+		}
+	};
+
+
+
 	function calcMashEfficiency() {
 //		console.log("calcMashEfficiency()");
 		var c = sg_to_plato(est_mash_sg);
@@ -1420,26 +1518,34 @@
 			console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size);
 			$("#est_a_vol").val(event.args.value * 1.04);
 			var new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size;
+			var factor = parseFloat(event.args.value) / dataRecord.batch_size;
 			dataRecord.boil_size = new_boil;
 			$("#boil_size").val(Math.round(new_boil * 100) / 100);
 			$("#est_pre_vol").val(Math.round(new_boil * 1.04 * 100) / 100);
+			dataRecord.sparge_volume *= factor;
+			$("#sparge_volume").val(dataRecord.sparge_volume);
 			dataRecord.batch_size = parseFloat(event.args.value);
 			calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
+			adjustWaters(factor);
 			calcFermentables();
-			// TODO: adjust the hops, miscs, yeast, water.
+			adjustHops(factor);
+			adjustMiscs(factor);
+			adjustYeasts(factor);
 			calcIBUs();
+			calcWater();
+			calcSparge();
 		});
 		$('#boil_time').on('change', function (event) {
 			console.log("boil_time change:"+parseFloat(event.args.value)+" old:"+dataRecord.boil_time);
 			var old_evap = parseFloat(dataRecord.boil_size) - parseFloat(dataRecord.batch_size);
 			var new_evap = old_evap * (parseFloat(event.args.value) / dataRecord.boil_time);
 			var new_boil = parseFloat(dataRecord.batch_size) + new_evap;
+			var factor = new_boil / dataRecord.boil_size;
 			dataRecord.boil_time = parseFloat(event.args.value);
 			dataRecord.boil_size = new_boil;
 			$("#est_pre_vol").val(Math.round(new_boil * 1.04 * 100) / 100);
 			$("#boil_size").val(Math.round(new_boil * 100) / 100);
 			calcFermentables();
-			// TODO: adjust the hops, miscs, yeast, water.
 			calcIBUs();
 		});
 		$('#efficiency').on('change', function (event) {
@@ -1601,6 +1707,7 @@
 		if (event.args) {
 			var index = event.args.index;
 			var datarecord = equipmentlist.records[index];
+			var factor = datarecord.batch_size / dataRecord.batch_size;
 			$("#eq_name").val(datarecord.name);
 			$("#eq_boil_size").val(datarecord.boil_size);
 			dataRecord.boil_size = datarecord.boil_size;
@@ -1615,6 +1722,7 @@
 			dataRecord.eq_tun_material = datarecord.tun_material;
 			dataRecord.eq_tun_height = datarecord.tun_height / 100.0;
 			$("#eq_top_up_water").val(datarecord.top_up_water);
+			dataRecord.eq_trub_chiller_loss = datarecord.trub_chiller_loss;
 			$("#eq_trub_chiller_loss").val(datarecord.trub_chiller_loss);
 			$("#eq_evap_rate").val(datarecord.evap_rate);
 			$("#eq_boil_time").val(datarecord.boil_time);
@@ -1635,10 +1743,18 @@
 			dataRecord.efficiency = datarecord.efficiency;
 			$("#efficiency").val(datarecord.efficiency);
 
+			dataRecord.sparge_volume = Math.round(datarecord.boil_size * 5) / 10;
+			$("#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);
 			calcFermentables();
-			// TODO: adjust the hops, miscs, yeast, water.
+			adjustHops(factor);
+			adjustMiscs(factor);
+			adjustYeasts(factor);
 			calcIBUs();
+			calcWater();
+			calcSparge();
 		}
 	});
 
--- a/www/js/rec_edit.js	Sun Feb 10 22:08:01 2019 +0100
+++ b/www/js/rec_edit.js	Mon Feb 11 15:26:29 2019 +0100
@@ -334,6 +334,101 @@
 		$("#hop_aroma").jqxProgressBar('val', hop_aroma * 10);
 	};
 
+	function adjustHops(factor) {
+
+		console.log("adjustHops("+factor+")");
+
+		var rowscount = $("#hopGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#hopGrid").jqxGrid('getrowdata', i);
+			var amount = row.h_amount * factor;
+			$("#hopGrid").jqxGrid('setcellvalue', i, "h_amount", amount);
+		}
+	};
+
+	function adjustMiscs(factor) {
+
+		console.log("adjustMiscs("+factor+")");
+
+		var rowscount = $("#miscGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#miscGrid").jqxGrid('getrowdata', i);
+			var amount = row.m_amount * factor;
+			$("#miscGrid").jqxGrid('setcellvalue', i, "m_amount", amount);
+			switch (row.m_name) {
+				case 'CaCl2':           $("#wa_cacl2").val(row.m_amount * 1000);
+							break;
+				case 'CaSO4':           $("#wa_caso4").val(row.m_amount * 1000);
+							break;
+				case 'MgSO4':           $("#wa_mgso4").val(row.m_amount * 1000);
+							break;
+				case 'NaCl':            $("#wa_nacl").val(row.m_amount * 1000);
+							break;
+				case 'Melkzuur':
+				case 'Zoutzuur':
+				case 'Fosforzuur':
+				case 'Zwavelzuur':      $("#wa_acid").val(row.m_amount * 1000);
+							break;
+				case 'NaHCO3':
+				case 'Na2CO3':
+				case 'CaCO3':
+				case 'Ca(OH)2':         $("#wa_base").val(row.m_amount * 1000);
+							break;
+			}
+		}
+	};
+
+	function adjustYeasts(factor) {
+
+		console.log("adjustYeasts("+factor+")");
+
+		var rowscount = $("#yeastGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#yeastGrid").jqxGrid('getrowdata', i);
+			if (row.y_form == 1) { // Only adjust dry yeast
+				var amount = row.y_amount * factor;
+				$("#yeastGrid").jqxGrid('setcellvalue', i, "y_amount", amount);
+			}
+		}
+	};
+
+	function adjustWaters(factor) {
+
+		console.log("adjustWaters("+factor+")");
+
+		var rowscount = $("#mashGrid").jqxGrid('getdatainformation').rowscount;
+		if (rowscount == 0)
+			return;
+
+		mash_infuse = 0;
+		for (var i = 0; i < rowscount; i++) {
+			var row = $("#mashGrid").jqxGrid('getrowdata', i);
+			if (row.step_type == 0) { // Infusion
+				var amount = Math.round(row.step_infuse_amount * factor * 10) / 10;
+				$("#mashGrid").jqxGrid('setcellvalue', i, "step_infuse_amount", amount);
+				mash_infuse += amount;
+			}
+		}
+		if (dataRecord.w2_amount == 0) {
+			dataRecord.w1_amount = mash_infuse;
+			$("#w1_amount").val(mash_infuse);
+		} else {
+			dataRecord.w1_amount = (dataRecord.w1_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+			dataRecord.w2_amount = (dataRecord.w2_amount / (dataRecord.w1_amount + dataRecord.w2_amount)) * mash_infuse;
+			$("#w1_amount").val(dataRecord.w1_amount);
+			$("#w2_amount").val(dataRecord.w2_amount);
+		}
+	};
+
 /*	function GetBUGUMin() {
 
 		var Result = 0;
@@ -1194,13 +1289,21 @@
 		$('#batch_size').on('change', function (event) {
 			console.log("batch_size change:"+event.args.value+" old:"+dataRecord.batch_size);
 			var new_boil = parseFloat(event.args.value) + dataRecord.boil_size - dataRecord.batch_size;
+			var factor = parseFloat(event.args.value) / dataRecord.batch_size;
 			dataRecord.boil_size = new_boil;
 			$("#boil_size").val(Math.round(new_boil * 100) / 100);
+			dataRecord.sparge_volume *= factor;
+			$("#sparge_volume").val(dataRecord.sparge_volume);
 			dataRecord.batch_size = parseFloat(event.args.value);
 			calcFermentablesFromOG(parseFloat($("#est_og").jqxNumberInput('decimal')));     // Keep the OG
+			adjustWaters(factor);
 			calcFermentables();
-			// TODO: adjust the hops, miscs, yeast, water.
+			adjustHops(factor);
+			adjustMiscs(factor);
+			adjustYeasts(factor);
 			calcIBUs();
+			calcWater();
+			calcSparge();
 		});
 		$('#boil_time').on('change', function (event) {
 			console.log("boil_time change:"+parseFloat(event.args.value)+" old:"+dataRecord.boil_time);

mercurial