Added new brew project wizzard. Moved equipment dropdown to global script. The project birth date is allways read-only, so it can never be changed.

Thu, 03 Jan 2019 20:56:47 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 03 Jan 2019 20:56:47 +0100
changeset 167
dabcd35f8f92
parent 166
635033a29c48
child 168
ce92dc75cb09

Added new brew project wizzard. Moved equipment dropdown to global script. The project birth date is allways read-only, so it can never be changed.

www/css/style.css file | annotate | diff | comparison | revisions
www/includes/global.inc.php file | annotate | diff | comparison | revisions
www/js/global.js file | annotate | diff | comparison | revisions
www/js/prod_edit.js file | annotate | diff | comparison | revisions
www/js/prod_new.js file | annotate | diff | comparison | revisions
www/prod_edit.php file | annotate | diff | comparison | revisions
www/prod_new.php file | annotate | diff | comparison | revisions
--- a/www/css/style.css	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/css/style.css	Thu Jan 03 20:56:47 2019 +0100
@@ -210,7 +210,7 @@
 /*
  * New recipe wizzard
  */
-#hintBase, #hintStyle {
+#hintBase, #hintStyle, #hintEq {
     float: left;
     margin-top: 30px;
     margin-right: 20px;
@@ -233,6 +233,12 @@
     margin-right: 10px;
     width: 320px;
 }
+#eqButtonsWrapper {
+    float: right;
+    margin-top: 30px;
+    margin-right: 10px;
+    width: 320px;
+}
 #completedButtonsWrapper {
     float: right;
     margin-right: 10px;
--- a/www/includes/global.inc.php	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/includes/global.inc.php	Thu Jan 03 20:56:47 2019 +0100
@@ -189,7 +189,7 @@
      <li>Productie
       <ul>
        <li><a href="prod_inprod.php">In bewerking</a></li>
-       <li>Start nieuw</li>
+       <li><a href="prod_new.php?return=index.php">Start nieuw</a></li>
        <li>Archief
 	<ul>
          <li>Op naam</li>
--- a/www/js/global.js	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/js/global.js	Thu Jan 03 20:56:47 2019 +0100
@@ -57,6 +57,41 @@
 };
 var styleslist = new $.jqx.dataAdapter(stylesSource);
 
+// Equipemnt dropdown list
+var equipmentUrl = "includes/db_inventory_equipments.php";
+var equipmentSource = {
+	datatype: "json",
+	datafields: [
+		{ name: 'name', type: 'string' },
+		{ name: 'boil_size', type: 'float' },
+		{ name: 'batch_size', type: 'float' },
+		{ name: 'tun_volume', type: 'float' },
+		{ name: 'tun_weight', type: 'float' },
+		{ name: 'tun_specific_heat', type: 'float' },
+		{ name: 'tun_material', type: 'string' },
+		{ name: 'tun_height', type: 'float' },
+		{ name: 'top_up_water', type: 'float' },
+		{ name: 'trub_chiller_loss', type: 'float' },
+		{ name: 'evap_rate', type: 'float' },
+		{ name: 'boil_time', type: 'float' },
+		{ name: 'calc_boil_volume', type: 'bool' },
+		{ name: 'top_up_kettle', type: 'float' },
+		{ name: 'hop_utilization', type: 'float' },
+		{ name: 'notes', type: 'string' },
+		{ name: 'lauter_volume', type: 'float' },
+		{ name: 'lauter_height', type: 'float' },
+		{ name: 'lauter_deadspace', type: 'float' },
+		{ name: 'kettle_volume', type: 'float' },
+		{ name: 'kettle_height', type: 'float' },
+		{ name: 'mash_volume', type: 'float' },
+		{ name: 'mash_max', type: 'float' },
+		{ name: 'efficiency', type: 'float' }
+	],
+	url: equipmentUrl,
+	async: true
+};
+var equipmentlist = new $.jqx.dataAdapter(equipmentSource);
+
 // dropdownlist datasource from inventory_fermentables
 var fermentableInvSource = {
 	datatype: "json",
--- a/www/js/prod_edit.js	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/js/prod_edit.js	Thu Jan 03 20:56:47 2019 +0100
@@ -1309,39 +1309,6 @@
 	});
 
 	// Equipemnt dropdown list
-	var equipmentUrl = "includes/db_inventory_equipments.php";
-	var equipmentSource = {
-		datatype: "json",
-		datafields: [
-			{ name: 'name', type: 'string' },
-			{ name: 'boil_size', type: 'float' },
-			{ name: 'batch_size', type: 'float' },
-			{ name: 'tun_volume', type: 'float' },
-			{ name: 'tun_weight', type: 'float' },
-			{ name: 'tun_specific_heat', type: 'float' },
-			{ name: 'tun_material', type: 'string' },
-			{ name: 'tun_height', type: 'float' },
-			{ name: 'top_up_water', type: 'float' },
-			{ name: 'trub_chiller_loss', type: 'float' },
-			{ name: 'evap_rate', type: 'float' },
-			{ name: 'boil_time', type: 'float' },
-			{ name: 'calc_boil_volume', type: 'bool' },
-			{ name: 'top_up_kettle', type: 'float' },
-			{ name: 'hop_utilization', type: 'float' },
-			{ name: 'notes', type: 'string' },
-			{ name: 'lauter_volume', type: 'float' },
-			{ name: 'lauter_height', type: 'float' },
-			{ name: 'lauter_deadspace', type: 'float' },
-			{ name: 'kettle_volume', type: 'float' },
-			{ name: 'kettle_height', type: 'float' },
-			{ name: 'mash_volume', type: 'float' },
-			{ name: 'mash_max', type: 'float' },
-			{ name: 'efficiency', type: 'float' }
-		],
-		url: equipmentUrl,
-		async: true
-	};
-	var equipmentlist = new $.jqx.dataAdapter(equipmentSource);
 	$("#equipmentSelect").jqxDropDownList({
 		placeHolder: "Kies apparatuur:",
 		theme: theme,
@@ -1783,7 +1750,6 @@
 				$("#equipmentSelect").jqxDropDownList({ disabled: true });
 			if (brewstage > 0) {
 				$("#Delete").jqxButton({ disabled: true });
-				$("#birth").jqxDateTimeInput({ disabled: true });
 			}
 			if (brewstage < 3) {
 				$('#jqxTabs').jqxTabs('disableAt', 9);
@@ -2912,7 +2878,7 @@
 	$("#code").jqxTooltip({ content: 'Product code nummer.' });
 	$("#code").jqxInput({ theme: theme, width: 100, height: 23 });
 	$("#birth").jqxTooltip({ content: 'De ontwerp datum van dit product.' });
-	$("#birth").jqxDateTimeInput({ theme: theme, width: 150, height: 23, formatString: 'yyyy-MM-dd' });
+	$("#birth").jqxInput({ theme: theme, width: 120, height: 23 });
 	$("#stage").jqxTooltip({ content: 'De productie fase van dit product.' });
 	$("#stage").jqxInput({ theme: theme, width: 100, height: 23 });
 	$("#log_brew").jqxCheckBox({ theme: theme, width: 120, height: 23, disabled : true });
--- a/www/js/prod_new.js	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/js/prod_new.js	Thu Jan 03 20:56:47 2019 +0100
@@ -24,13 +24,179 @@
 $(document).ready(function () {
 
 	// tooltips
-	$("#name").jqxTooltip({ content: 'De naam voor dit recept.' });
-	$("#notes").jqxTooltip({ content: 'De uitgebreide opmerkingen over dit recept.' });
+	$("#name").jqxTooltip({ content: 'De naam voor dit brouw project.' });
+	$("#code").jqxTooltip({ content: 'Het unieke code nummer van dit brouw project.' });
+	$("#notes").jqxTooltip({ content: 'De uitgebreide opmerkingen over dit project.' });
+	$("#type").jqxTooltip({ content: 'Het brouw type van bier in dit brouw project.' });
 
 	// editers
 	var srcType = [ "All Grain", "Partial Mash", "Extract" ];
 	$("#name").jqxInput({ theme: theme, width: 640, height: 23 });
+	$("#code").jqxInput({ theme: theme, width: 100, height: 23 });
 	$("#notes").jqxInput({ theme: theme, width: 960, height: 200 });
+	$("#type").jqxDropDownList({ theme: theme, source: srcType, width: 125, height: 23, dropDownHeight: 95 });
+
+	$("#st_name").jqxInput({ theme: theme, width: 250, height: 23 });
+	$("#st_category").jqxInput({ theme: theme, width: 250, height: 23 });
+	$("#st_category_number").jqxInput({ theme: theme, width: 70, height: 23 });
+	$("#st_letter").jqxInput({ theme: theme, width: 250, height: 23 });
+	$("#st_guide").jqxInput({ theme: theme, width: 250, height: 23 });
+	$("#st_notes").jqxInput({ theme: theme, width: 800, height: 100 });
+	$("#st_type").jqxInput({ theme: theme, width: 90, height: 23 });
+	$("#st_og_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true });
+	$("#st_og_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true });
+	$("#st_fg_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true });
+	$("#st_fg_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 3, readOnly: true });
+	$("#st_ibu_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true });
+	$("#st_ibu_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true });
+	$("#st_color_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true });
+	$("#st_color_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 0, readOnly: true });
+	$("#st_carb_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true });
+	$("#st_carb_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true });
+	$("#st_abv_min").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true });
+	$("#st_abv_max").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true });
+	$("#st_profile").jqxInput({ theme: theme, width: 800, height: 48 });
+	$("#st_ingredients").jqxInput({ theme: theme, width: 800, height: 23 });
+	$("#st_examples").jqxInput({ theme: theme, width: 800, height: 48 });
+
+	$("#eq_name").jqxTooltip({ content: 'De naam van deze brouw apparatuur.' });
+	$("#eq_name").jqxInput({ theme: theme, width: 250, height: 23 });
+	$("#eq_calc_boil_volume").jqxCheckBox({ theme: theme, width: 120, height: 23, disabled: true });
+	$("#eq_boil_size").jqxTooltip({ content: 'Normaal kook volume in liters' });
+	$("#eq_boil_size").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_batch_size").jqxTooltip({ content: 'Berekende batch grootte in liters aan het eind van de kook.' });
+	$("#eq_batch_size").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_tun_volume").jqxTooltip({ content: 'Maisch ketel volume.' });
+	$("#eq_tun_volume").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_tun_weight").jqxTooltip({ content: 'Maisch ketel gewicht.' });
+	$("#eq_tun_weight").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_tun_height").jqxTooltip({ content: 'Maisch ketel hoogte.' });
+	$("#eq_tun_height").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_tun_material").jqxTooltip({ content: 'Maisch ketel materiaal.' });
+	$("#eq_tun_material").jqxInput({ theme: theme, width: 120, height: 23 });
+	$("#eq_tun_specific_heat").jqxTooltip({ content: 'Maisch ketel warmte geleiding.' });
+	$("#eq_tun_specific_heat").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_top_up_water").jqxTooltip({ content: 'Extra water in het gistvat.' });
+	$("#eq_top_up_water").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_trub_chiller_loss").jqxTooltip({ content: 'Standaard verlies bij het overbrengen naar het gistvat.' });
+	$("#eq_trub_chiller_loss").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_evap_rate").jqxTooltip({ content: 'Verdamping in liters per uur.' });
+	$("#eq_evap_rate").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 2,  });
+	$("#eq_boil_time").jqxTooltip({ content: 'Normale kooktijd in minuten.' });
+	$("#eq_boil_time").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 0 });
+	$("#eq_top_up_kettle").jqxTooltip({ content: 'Extra water toevoegen tijdens de kook.' });
+	$("#eq_top_up_kettle").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_hop_utilization").jqxTooltip({ content: '100% voor kleine installaties, hoger voor grote brouwerijen.' });
+	$("#eq_hop_utilization").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 0 });
+	$("#eq_notes").jqxTooltip({ content: 'Opmerkingen over deze apparatuur.' });
+	$("#eq_notes").jqxInput({ theme: theme, width: 960, height: 100 });
+	$("#eq_lauter_volume").jqxTooltip({ content: 'Filterkuip volume.' });
+	$("#eq_lauter_volume").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_lauter_height").jqxTooltip({ content: 'Filterkuip hoogte.' });
+	$("#eq_lauter_height").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_lauter_deadspace").jqxTooltip({ content: 'Filterkuip verlies in liters.' });
+	$("#eq_lauter_deadspace").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_kettle_volume").jqxTooltip({ content: 'Kook ketel volume in liters.' });
+	$("#eq_kettle_volume").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_kettle_height").jqxTooltip({ content: 'Kook ketel hoogte in cm.' });
+	$("#eq_kettle_height").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_mash_volume").jqxTooltip({ content: 'Maisch water voor de eerste stap.' });
+	$("#eq_mash_volume").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_mash_max").jqxTooltip({ content: 'De maximale moutstort in Kg.' });
+	$("#eq_mash_max").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+	$("#eq_efficiency").jqxTooltip({ content: 'Gemiddeld brouwzaal rendement.' });
+	$("#eq_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 });
+
+	// Default values
+	$("#type").val('All Grain');
+
+	$("#styleSelect").jqxDropDownList({
+		placeHolder: "Kies bierstijl:",
+		theme: theme,
+		source: styleslist,
+		displayMember: "name",
+		width: 150,
+		height: 27,
+		dropDownWidth: 500,
+		dropDownHeight: 500,
+		renderer: function (index, label, value) {
+		var datarecord = styleslist.records[index];
+			return datarecord.style_guide + " " + datarecord.style_letter+ " " + datarecord.name;
+		}
+	});
+	$("#styleSelect").on('select', function (event) {
+		if (event.args) {
+			var index = event.args.index;
+			var datarecord = styleslist.records[index];
+			$("#st_name").val(datarecord.name);
+			$("#st_category").val(datarecord.category);
+			$("#st_category_number").val(datarecord.category_number);
+			$("#st_letter").val(datarecord.style_letter);
+			$("#st_guide").val(datarecord.style_guide);
+			$("#st_type").val(datarecord.type);
+			$("#st_og_min").val(datarecord.og_min);
+			$("#st_og_max").val(datarecord.og_max);
+			$("#st_fg_min").val(datarecord.fg_min);
+			$("#st_fg_max").val(datarecord.fg_max);
+			$("#st_ibu_min").val(datarecord.ibu_min);
+			$("#st_ibu_max").val(datarecord.ibu_max);
+			$("#st_color_min").val(datarecord.color_min);
+			$("#st_color_max").val(datarecord.color_max);
+			$("#st_carb_min").val(datarecord.carb_min);
+			$("#st_carb_max").val(datarecord.carb_max);
+			$("#st_abv_min").val(datarecord.abv_min);
+			$("#st_abv_max").val(datarecord.abv_max);
+			$("#st_notes").val(datarecord.notes);
+			$("#st_profile").val(datarecord.profile);
+			$("#st_ingredients").val(datarecord.ingredients);
+			$("#st_examples").val(datarecord.examples);
+		}
+	});
+
+	// Equipemnt dropdown list
+	$("#equipmentSelect").jqxDropDownList({
+		placeHolder: "Kies apparatuur:",
+		theme: theme,
+		source: equipmentlist,
+		displayMember: "name",
+		width: 150,
+		height: 27,
+		dropDownWidth: 300,
+		renderer: function (index, label, value) {
+		var datarecord = equipmentlist.records[index];
+			return datarecord.batch_size + " liter " + datarecord.name;
+		}
+	});
+	$("#equipmentSelect").on('select', function (event) {
+		if (event.args) {
+			var index = event.args.index;
+			var datarecord = equipmentlist.records[index];
+			$("#eq_name").val(datarecord.name);
+			$("#eq_boil_size").val(datarecord.boil_size);
+			$("#eq_batch_size").val(datarecord.batch_size);
+			$("#eq_tun_volume").val(datarecord.tun_volume);
+			$("#eq_tun_weight").val(datarecord.tun_weight);
+			$("#eq_tun_specific_heat").val(datarecord.tun_specific_heat);
+			$("#eq_tun_material").val(datarecord.tun_material);
+			$("#eq_tun_height").val(datarecord.tun_height);
+			$("#eq_top_up_water").val(datarecord.top_up_water);
+			$("#eq_trub_chiller_loss").val(datarecord.trub_chiller_loss);
+			$("#eq_evap_rate").val(datarecord.evap_rate);
+			$("#eq_boil_time").val(datarecord.boil_time);
+			$("#eq_calc_boil_volume").val(datarecord.calc_boil_volume);
+			$("#eq_top_up_kettle").val(datarecord.top_up_kettle);
+			$("#eq_hop_utilization").val(datarecord.hop_utilization);
+			$("#eq_notes").val(datarecord.notes);
+			$("#eq_lauter_volume").val(datarecord.lauter_volume);
+			$("#eq_lauter_height").val(datarecord.lauter_height);
+			$("#eq_lauter_deadspace").val(datarecord.lauter_deadspace);
+			$("#eq_kettle_volume").val(datarecord.kettle_volume);
+			$("#eq_kettle_height").val(datarecord.kettle_height);
+			$("#eq_mash_volume").val(datarecord.mash_volume);
+			$("#eq_mash_max").val(datarecord.mash_max);
+			$("#eq_efficiency").val(datarecord.efficiency);
+		}
+	});
 
 	//Creating wizard module
 	var wizard = (function () {
@@ -38,13 +204,25 @@
 		//Adding event listeners
 		var _addHandlers = function () {
 			$('#name').on('change', function (event) { wizard.validate(true); });
+			$('#code').on('change', function (event) { wizard.validate(true); });
+			$('#type').on('change', function (event) { wizard.validate(true); });
+			$('#styleSelect').on('change', function (event) { wizard.validate(true); });
+			$('#equipmentSelect').on('change', function (event) { wizard.validate(true); });
 			$('#nextButtonCompleted').click(function () {
-				console.log("insert start");
+				var d = new Date();
+				var m = d.getMonth() + 1;
+				var b = d.getFullYear() + '-';
+				if (m < 10)
+					b = b + '0';
+				b = b + m + '-';
+				if (d.getDate() < 10)
+					b = b + '0';
+				b = b + d.getDate();
 				var newrow = {
 					record: -1,
 					name: $("#name").val(),
 					code: $("#code").val(),
-					birth: $("#birth").val(),
+					birth: b,
 					stage: 'Plan',
 					notes: $("#notes").val(),
 					log_brew: false,
@@ -55,36 +233,36 @@
 					eq_boil_size: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')),
 					eq_batch_size: parseFloat($("#eq_batch_size").jqxNumberInput('decimal')),
 					eq_tun_volume: parseFloat($("#eq_tun_volume").jqxNumberInput('decimal')),
-					eq_tun_weight: dataRecord.eq_tun_weight,
-					eq_tun_specific_heat: dataRecord.eq_tun_specific_heat,
-					eq_tun_material: dataRecord.eq_tun_material,
-					eq_tun_height: dataRecord.eq_tun_height,
+					eq_tun_weight: parseFloat($("#eq_tun_weight").jqxNumberInput('decimal')),
+					eq_tun_specific_heat: parseFloat($("#eq_tun_specific_heat").jqxNumberInput('decimal')),
+					eq_tun_material: $("#eq_tun_material").val(),
+					eq_tun_height: parseFloat($("#eq_tun_height").jqxNumberInput('decimal')),
 					eq_top_up_water: parseFloat($("#eq_top_up_water").jqxNumberInput('decimal')),
 					eq_trub_chiller_loss: parseFloat($("#eq_trub_chiller_loss").jqxNumberInput('decimal')),
 					eq_evap_rate: parseFloat($("#eq_evap_rate").jqxNumberInput('decimal')),
 					eq_boil_time: parseFloat($("#eq_boil_time").jqxNumberInput('decimal')),
-					eq_calc_boil_volume: dataRecord.eq_calc_boil_volume,
+					eq_calc_boil_volume: $("#eq_calc_boil_volume").val(),
 					eq_top_up_kettle: parseFloat($("#eq_top_up_kettle").jqxNumberInput('decimal')),
 					eq_hop_utilization: parseFloat($("#eq_hop_utilization").jqxNumberInput('decimal')),
 					eq_notes: $("#eq_notes").val(),
 					eq_lauter_volume: parseFloat($("#eq_lauter_volume").jqxNumberInput('decimal')),
-					eq_lauter_height: dataRecord.eq_lauter_height,
+					eq_lauter_height: parseFloat($("#eq_lauter_height").jqxNumberInput('decimal')),
 					eq_lauter_deadspace: parseFloat($("#eq_lauter_deadspace").jqxNumberInput('decimal')),
 					eq_kettle_volume: parseFloat($("#eq_kettle_volume").jqxNumberInput('decimal')),
-					eq_kettle_height: dataRecord.eq_kettle_height,
+					eq_kettle_height: parseFloat($("#eq_kettle_height").jqxNumberInput('decimal')),
 					eq_mash_volume: parseFloat($("#eq_mash_volume").jqxNumberInput('decimal')),
 					eq_mash_max: parseFloat($("#eq_mash_max").jqxNumberInput('decimal')),
 					eq_efficiency: parseFloat($("#eq_efficiency").jqxNumberInput('decimal')),
 					brew_date_start: '',
 					brew_mash_ph: 0.0,
 					brew_mash_sg: 1.000,
-					brew_sparge_temperature: 85,
-					brew_sparge_volume: parseFloat($("#eq_mash_volume").jqxNumberInput('decimal')),
+					brew_sparge_temperature: 0,
+					brew_sparge_volume: 0,
 					brew_sparge_ph: 0.0,
-					brew_preboil_volume: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')),
+					brew_preboil_volume: 0,
 					brew_preboil_sg: 1.000,
 					brew_preboil_ph: 0.0,
-					brew_aboil_volume: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')) * 0.9,
+					brew_aboil_volume: 0,
 					brew_aboil_sg: 1.000,
 					brew_aboil_ph: 0.0,
 					brew_aboil_efficiency: 0,
@@ -95,7 +273,7 @@
 					brew_whirlpool7: 0,
 					brew_whirlpool6: 0,
 					brew_whirlpool2: 0,
-					brew_fermenter_volume: parseFloat($("#eq_batch_size").jqxNumberInput('decimal')),
+					brew_fermenter_volume: 0,
 					brew_fermenter_extrawater: 0,
 					brew_aeration_time: 0,
 					brew_aeration_speed: 0,
@@ -156,11 +334,12 @@
 					st_abv_min: parseFloat($("#st_abv_min").jqxNumberInput('decimal')),
 					st_abv_max: parseFloat($("#st_abv_max").jqxNumberInput('decimal')),
 					type: $("#type").val(),
-					batch_size: 20.0,
-					boil_time: parseFloat($("#boil_time").jqxNumberInput('decimal')),
-					efficiency: parseFloat($("#efficiency").jqxNumberInput('decimal')),
-					est_og: parseFloat($("#est_og").jqxNumberInput('decimal')),
-					est_fg: 1.000,
+					batch_size: parseFloat($("#eq_batch_size").jqxNumberInput('decimal')),
+					boil_size: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')),
+					boil_time: parseFloat($("#eq_boil_time").jqxNumberInput('decimal')),
+					efficiency: parseFloat($("#eq_efficiency").jqxNumberInput('decimal')),
+					est_og: 0.000,
+					est_fg: 0.000,
 					est_color: 0,
 					est_abv: 0.0,
 					est_carb: 0.0,
@@ -169,7 +348,14 @@
 					ibu_method: "Tinseth",
 					mash_name: "",
 					mash_ph: 5.4,
-					mash_sparge_temp: 78.0
+					sparge_temp: 78.0,
+					sparge_volume: parseFloat($("#eq_boil_size").jqxNumberInput('decimal')) / 2,
+					sparge_ph: 5.8,
+					sparge_source: 'Bron 1',
+					sparge_acid_type: 'Melkzuur',
+					sparge_acid_perc: 80,
+					sparge_acid_amount: 0,
+					calc_acid: true
 				};
 				var data = "insert=true&return=" + my_return + "&" + $.param(newrow);
 				$.ajax({
@@ -210,6 +396,8 @@
 				$('#nextButtonBase').jqxButton({ theme: theme, width: 150 });
 				$('#nextButtonStyle').jqxButton({ theme: theme, width: 150});
 				$('#backButtonStyle').jqxButton({ theme: theme, width: 150});
+				$('#nextButtonEq').jqxButton({ theme: theme, width: 150});
+				$('#backButtonEq').jqxButton({ theme: theme, width: 150});
 				$('#nextButtonCompleted').jqxButton({ theme: theme, width: 150});
 				$('#backButtonCompleted').jqxButton({ theme: theme, width: 150});
 				_addHandlers();
@@ -222,16 +410,24 @@
 				if (!this.firstTab(notify)) {
 					$('#jqxTabs').jqxTabs('disableAt', 1);
 					$('#jqxTabs').jqxTabs('disableAt', 2);
+					$('#jqxTabs').jqxTabs('disableAt', 3);
 					return;
 				} else {
 					$('#jqxTabs').jqxTabs('enableAt', 1);
 				}
 				if (!this.secondTab(notify)) {
 					$('#jqxTabs').jqxTabs('disableAt', 2);
+					$('#jqxTabs').jqxTabs('disableAt', 3);
 					return;
 				} else {
 					$('#jqxTabs').jqxTabs('enableAt', 2);
 				}
+				if (!this.thirdTab(notify)) {
+					$('#jqxTabs').jqxTabs('disableAt', 3);
+					return;
+				} else {
+					$('#jqxTabs').jqxTabs('enableAt', 3);
+				}
 			},
 
 			//Displaying message to the user
@@ -247,21 +443,14 @@
 
 			//Validating the first tab
 			firstTab: function (notify) {
-				var name = $('#name').val(),
-				    message = '';
+				var name = $('#name').val(), code = $('#code').val(), message = '';
 				if (name.length < 3) {
-					message += 'Je moet een recept naam invullen. <br />';
+					message += 'Je moet een brouw project naam invullen. <br />';
 				}
-				// Check if name already exists.
-				//if ((boil_time < 4) || (boil_time > 360)) {
-				//	message += 'De kooktijd moet tussen 4 en 360 minuten zijn. <br />';
-				//}
-				//if ((est_og < 1.010) || (est_og > 1.200)) {
-				//	message += 'Het OG moet tussen 1.010 en 1.500 zijn. <br />';
-				//}
-				//if ((efficiency < 35) || (efficiency > 95)) {
-				//	message += 'Het brouwzaal rendement moet tussen 35 en 95 zijn. <br />';
-				//}
+				if (code.length < 3) {
+					message += 'Je moet een brouw project code invullen. <br />';
+				}
+				// Check if code already exists.
 				if (message !== '') {
 					if (notify) {
 						this.showHint(message, '#hintBase');
@@ -287,6 +476,23 @@
 				}
 				this.showHint('Ok, je mag doorgaan.', '#hintStyle');
 				return true;
+			},
+
+			//Validating the third tab
+			thirdTab: function (notify) {
+				var equipsel = $('#equipmentSelect').val(),
+				message = '';
+				if (equipsel.length < 3) {
+					message += 'Je moet een brouw installatie kiezen. <br />';
+				}
+				if (message !== '') {
+					if (notify) {
+						this.showHint(message, '#hintEq');
+					}
+					return false;
+				}
+				this.showHint('Ok, je mag doorgaan.', '#hintEq');
+				return true;
 			}
 		}
 	} ());
--- a/www/prod_edit.php	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/prod_edit.php	Thu Jan 03 20:56:47 2019 +0100
@@ -30,7 +30,7 @@
         <td style="vertical-align: top; float: right; padding: 3px;">Brouw code:</td>
         <td align="left" style="vertical-align: top; padding: 3px;"><input id="code" /></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Start planning:</td>
-        <td align="left" style="vertical-align: top;"><div id="birth"></div></td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="birth" /></td>
         <td style="vertical-align: top; float: right; padding: 3px;">Brouw fase:</td>
         <td align="left" style="vertical-align: top; padding: 3px;"><input id="stage" readonly /></td>
        </tr>
--- a/www/prod_new.php	Thu Jan 03 14:21:35 2019 +0100
+++ b/www/prod_new.php	Thu Jan 03 20:56:47 2019 +0100
@@ -6,6 +6,7 @@
    <div id='jqxTabs'>
     <ul>
      <li style="margin-left: 30px;">Product basis</li>
+     <li>Bierstijl</li>
      <li>Apparatuur</li>
      <li>Overzicht</li>
     </ul>
@@ -14,25 +15,19 @@
      <div style="overflow: hidden;">
       <table>
        <tr>
-        <td style="vertical-align: top; float: right; padding: 3px;">Recept naam:</td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Brouw project naam:</td>
         <td align="left" colspan="3" style="vertical-align: top; padding: 3px;"><input id="name" /></td>
        </tr>
        <tr>
+        <td style="vertical-align: top; float: right; padding: 3px;">Brouw project code:</td>
+	<td align="left" style="vertical-align: top; padding: 3px;"><input id="code" /></td>
+        <td style="vertical-align: top; float: right; padding: 3px;">Brouw type:</td>
+        <td align="left" style="padding: 3px;"><div id="type"></div></td>
+       </tr>
+       <tr>
         <td style="vertical-align: top; float: right; padding: 3px;">Opmerkingen:</td>
         <td colspan="3" style="padding: 3px;"><textarea id="notes"></textarea></td>
        </tr>
-       <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;">Start SG:</td>
-        <td style="padding: 3px;"><div style="float: left;" id="est_og"></div></td>
-       </tr>
-       <tr>
-        <td style="vertical-align: top; float: right; padding: 3px;">Kooktijd minuten:</td>
-        <td style="padding: 3px;"><div id="boil_time"></div></td>
-        <td style="vertical-align: top; float: right; padding: 3px;">Brouwzaal rendement:</td>
-        <td style="padding: 3px;"><div id="efficiency"></div></td>
-       </tr>
       </table>
      </div>
      <div id="hintBase" class="hint">
@@ -49,6 +44,58 @@
 	<td align="right" style="vertical-align: top;">Kies stijl:</td>
         <td align="left" colspan="3"><div id="styleSelect">Stylenlijst</div></td>
        </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Bier stijl:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_name" /></td>
+        <td align="right" style="vertical-align: top;">Bier groep:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_letter" /></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Type:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_type" /></td>
+        <td align="right" style="vertical-align: top;">Stijl gids:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_guide" /></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Categorie:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_category" /></td>
+        <td align="right" style="vertical-align: top;">Categorie nummer:</td>
+        <td align="left" style="vertical-align: top;"><input readonly="1" id="st_category_number" /></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Opmerkingen:</td>
+        <td align="left" colspan="3"><textarea readonly="1" id="st_notes"></textarea></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right; padding: 3px;">Begin SG:</td>
+        <td style="padding: 3px;"><div style="float: left;" 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;">Kleur EBC:</td>
+        <td style="padding: 3px;"><div style="float: left;" id="st_color_min"></div><div style="float: left; margin-left: 5px;" id="st_color_max"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right; padding: 3px;">Eind SG:</td>
+        <td style="padding: 3px;"><div style="float: left;" 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;">Koolzuur vol:</td>
+        <td style="padding: 3px;"><div style="float: left;" id="st_carb_min"></div><div style="float: left; margin-left: 5px;" id="st_carb_max"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right; padding: 3px;">Bitterheid IBU:</td>
+        <td style="padding: 3px;"><div style="float: left;" 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;">Alcohol vol%:</td>
+        <td style="padding: 3px;"><div style="float: left;" id="st_abv_min"></div><div style="float: left; margin-left: 5px;" id="st_abv_max"></div></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Profiel:</td>
+        <td align="left" colspan="3"><textarea readonly="1" id="st_profile"></textarea></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Ingredienten:</td>
+        <td align="left" colspan="3"><textarea readonly="1" id="st_ingredients"></textarea></td>
+       </tr>
+       <tr>
+        <td align="right" style="vertical-align: top;">Voorbeelden:</td>
+        <td align="left" colspan="3"><textarea readonly="1" id="st_examples"></textarea></td>
+       </tr>
       </table>
      </div>
      <div class="hint" id="hintStyle">
@@ -60,10 +107,110 @@
     </div>
 
     <div class="section">
+     <div style="overflow: hidden;">
+      <table>
+       <tr>
+        <td align="right" style="vertical-align: top;">Kies apparatuur:</td>
+	<td align="left" colspan="3"><div id="equipmentSelect">Apparatuur</div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Installatie naam:</td>
+        <td style="vertical-align: top;"><input readonly="1" id="eq_name" /></td>
+        <td style="vertical-align: top; float: right;">Bereken kook volume:</td>
+        <td><div id="eq_calc_boil_volume"></div></td>
+       </tr>
+       <tr>
+	<td style="vertical-align: top; float: right;">Opmerkingen:</td>
+        <td colspan="3"><textarea readonly="1" id="eq_notes"></textarea></td>
+       </tr>
+       <tr>
+        <th style="text-align: center;" colspan="2">Maischen</th>
+        <th style="text-align: center;" colspan="2">Koken</th>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischkuip volume l:</td>
+        <td><div id="eq_tun_volume"></div></td>
+        <td style="vertical-align: top; float: right;">Kookketel volume l:</td>
+        <td><div id="eq_kettle_volume"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischkuip hoogte cm:</td>
+        <td><div id="eq_tun_height"></div></td>
+        <td style="vertical-align: top; float: right;">Kookketel hoogte cm:</td>
+        <td><div id="eq_kettle_height"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischkuip gewicht kg:</td>
+        <td><div id="eq_tun_weight"></div></td>
+        <td style="vertical-align: top; float: right;">Kook volume l:</td>
+        <td><div id="eq_boil_size"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischkuip materiaal:</td>
+        <td align="left" style="vertical-align: top; padding: 3px;"><input readonly="1" id="eq_tun_material" /></td>
+        <td style="vertical-align: top; float: right;">Verdamping per uur l:</td>
+        <td><div id="eq_evap_rate"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischkuip specific heat:</td>
+        <td><div id="eq_tun_specific_heat"></div></td>
+        <td style="vertical-align: top; float: right;">Kooktijd in minuten:</td>
+        <td><div id="eq_boil_time"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maischwater l:</td>
+        <td><div id="eq_mash_volume"></div></td>
+        <td style="vertical-align: top; float: right;">Extra water bij koken l:</td>
+        <td><div id="eq_top_up_kettle"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Maximum moutstort kg:</td>
+        <td><div id="eq_mash_max"></div></td>
+        <td style="vertical-align: top; float: right;">Hopfactor %:</td>
+        <td><div id="eq_hop_utilization"></div></td>
+       </tr>
+       <tr>
+        <th style="text-align: center;" colspan="2">Filteren</th>
+        <td style="vertical-align: top; float: right;">Volume eind koken l:</td>
+        <td><div id="eq_batch_size"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Filter volume l:</td>
+        <td><div id="eq_lauter_volume"></div></td>
+        <th style="text-align: center;" colspan="2">Koelen</th>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Filterkuip hoogte cm:</td>
+        <td><div id="eq_lauter_height"></div></td>
+        <td style="vertical-align: top; float: right;">Trub verlies kookketel l:</td>
+        <td><div id="eq_trub_chiller_loss"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Filterkuip verlies l:</td>
+        <td><div id="eq_lauter_deadspace"></div></td>
+        <td style="vertical-align: top; float: right;">Extra water in het gistvat l:</td>
+        <td><div id="eq_top_up_water"></div></td>
+       </tr>
+       <tr>
+        <td style="vertical-align: top; float: right;">Brouwzaalrendement %:</td>
+        <td><div id="eq_efficiency"></div></td>
+        <td colspan="2"></td>
+       </tr>
+      </table>
+     </div>
+     <div class="hint" id="hintEq">
+     </div>
+     <div id="eqButtonsWrapper">
+      <input type="button" value="Terug" class="backButton" id="backButtonEq" />
+      <input type="button" value="Volgende" class="nextButton" id="nextButtonEq" />
+     </div>
+    </div>
+
+    <div class="section">
      <div style="overflow: hidden; margin: 25px;"><br>
       <p>Alle nodige gegevens zijn compleet.</p>
-      <p> Zodra je de "Volgende" toets gebruikt zal een nieuw recept aangemaakt worden en<br>
-      wordt het recept in de database gezet. Hierna kun je dat recept bewerken.</p>
+      <p> Zodra je de "Volgende" toets gebruikt zal een nieuw brouw project aangemaakt worden en<br>
+      worden de gegevens in de database gezet. Hierna kun je dit brouw project bewerken.</p>
      </div>
      <div id="completedButtonsWrapper">
       <input type="button" value="Terug" id="backButtonCompleted" class="backButton" />

mercurial