Added a loader during recipe load. Recalculate percentages if a fermentable row is deleted. Don't edit amounts if using weight percentages. Update grid percentages if a fermentable amount is changed. Recalculate IBU's after changes with fermentables.

Sat, 08 Dec 2018 15:01:23 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 08 Dec 2018 15:01:23 +0100
changeset 129
7f41b61c3faf
parent 128
4d188d216c88
child 130
601920b902e5

Added a loader during recipe load. Recalculate percentages if a fermentable row is deleted. Don't edit amounts if using weight percentages. Update grid percentages if a fermentable amount is changed. Recalculate IBU's after changes with fermentables.

www/includes/global.inc.php file | annotate | diff | comparison | revisions
www/js/rec_edit.js file | annotate | diff | comparison | revisions
--- a/www/includes/global.inc.php	Fri Dec 07 21:26:54 2018 +0100
+++ b/www/includes/global.inc.php	Sat Dec 08 15:01:23 2018 +0100
@@ -119,6 +119,7 @@
   <script src="jqwidgets/jqxtabs.js"></script>
   <script src="jqwidgets/jqxdata.js"></script>
   <script src="jqwidgets/jqxdata.export.js"></script>
+  <script src="jqwidgets/jqxloader.js"></script>
   <script src="jqwidgets/jqxbuttons.js"></script>
   <script src="jqwidgets/jqxscrollbar.js"></script>
   <script src="jqwidgets/jqxgrid.js"></script>
@@ -150,6 +151,8 @@
 
  <body class="default">
   <div id="jqxWidget">
+   <div id="jqxLoader">
+   </div>
 
    <!-- Menu -->
    <div id="jqxMenu">
--- a/www/js/rec_edit.js	Fri Dec 07 21:26:54 2018 +0100
+++ b/www/js/rec_edit.js	Sat Dec 08 15:01:23 2018 +0100
@@ -53,6 +53,13 @@
 	var     pcara = 0;      // Percentage cara/crystal malts
 
 	console.log("record:" + my_record + "  return:" + my_return + "  theme:" + theme);
+	$("#jqxLoader").jqxLoader({
+		width: 250,
+		height: 150,
+		isModal: true,
+		text: "Laden recept ...",
+		theme: theme
+	});
 
 	function calcFermentables() {
 		console.log("calcFermentables()");
@@ -111,7 +118,6 @@
 //		$('#efficiency').on('change', function (event) { calcFermentables(); });
 //		$('#batch_size').on('change', function (event) { calcFermentables(); });
 //		$('#boil_time').on('change', function (event) { calcFermentables(); });
-//		$('#fermentableGrid').on('change', function (event) { calcFermentables(); });
 	};
 
 	// Styles dropdown list
@@ -327,6 +333,7 @@
 		},
 		beforeLoadComplete: function (records) {
 			var filteredRecords = [];
+			$('#jqxLoader').jqxLoader('open');
 			for (var i = 0; i < records.length; i++) {
 				if (records[i].record == my_record) {
 					filteredRecords.push(records[i]);
@@ -484,8 +491,37 @@
 					var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
 					if (selectedrowindex >= 0 && selectedrowindex < rowscount) {
 						var id = $("#fermentableGrid").jqxGrid('getrowid', selectedrowindex);
+						var percent = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_percentage");
+						var amount = $('#fermentableGrid').jqxGrid('getcellvalue', id, "f_amount");
 						var commit = $("#fermentableGrid").jqxGrid('deleterow', id);
 					}
+					rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+					if (rowscount > 1) {
+						if (to_100) {
+							for (var i = 0; i < rowscount; i++) {
+								var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+								if (rowdata.f_adjust_to_total_100) {
+									rowdata.f_percentage += percent;
+									rowdata.f_amount += amount;
+								}
+							}
+						} else {
+							var tw = 0;
+							for (i = 0; i < rowscount; i++) {
+								var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+								tw += rowdata.f_amount;
+							};
+							for (i = 0; i < rowscount; i++) {
+								var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+								var percentage = Math.round(rowdata.f_amount / tw * 1000) / 10.0;
+								$("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", percentage);
+							};
+						}
+					} else {
+						$("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100);
+					}
+					calcFermentables();
+					calcIBUs();
 				});
 			},
 			ready: function() {
@@ -507,18 +543,24 @@
 				  }
 				},
 				{ text: 'Opbrengst', editable: false, datafield: 'f_yield', width: 90, align: 'right', cellsalign: 'right', cellsformat: 'p1' },
-				{ text: 'Gewicht Kg', datafield: 'f_amount', width: 110, align: 'right', cellsalign: 'right', cellsformat: 'f3',
+				{ text: 'Gewicht Kg', datafield: 'f_amount', width: 120, align: 'right', cellsalign: 'right', cellsformat: 'f3',
 				  columntype: 'numberinput',
 				  validation: function (cell, value) {
 					// Maximum weight is the batch_size, just a simple check.
 					var maxmout = parseFloat($("#batch_size").jqxNumberInput('decimal'));
 				  	if (value < 0 || value > maxmout) {
-						return { result: false, message: "Gewicht moet  0-"+maxmout+" zijn" };
+						return { result: false, message: "Gewicht moet 0-"+maxmout+" zijn" };
 				  	}
 				  	return true;
 				  },
 				  initeditor: function (row, cellvalue, editor) {
-					editor.jqxNumberInput({ inputMode: 'simple', decimalDigits: 3 });
+					editor.jqxNumberInput({ inputMode: 'simple', min: 0, decimalDigits: 3, spinButtons: false });
+				  },
+				  cellvaluechanging: function (row, column, columntype, oldvalue, newvalue) {
+					if (to_100) {
+						return oldvalue;	// When using percentages, don't allow edited results.
+					}
+//					console.log("row:"+row+" col:"+column+" type:"+columntype+" old:"+oldvalue+" new:"+newvalue);
 				  }
 				},
 				{ text: 'Percentage', datafield: 'f_percentage', width: 110, align: 'right', cellsalign: 'right', cellsformat: 'p1',
@@ -534,7 +576,6 @@
 				  },
 				  cellvaluechanging: function (row, column, columntype, oldvalue, newvalue) {
 					oldvalue = Math.round(oldvalue * 10) / 10.0;
-//					console.log("row:"+row+" col:"+column+" type:"+columntype+" old:"+oldvalue+" new:"+newvalue);
 					var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
 					if ((oldvalue != newvalue) && (rowscount > 1)) {
 						var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', row);
@@ -561,7 +602,6 @@
 						} else {
 							// Adjust all the rows.
 							var nw = tw * diff / 100;
-//							console.log("weight:"+nw);
 							for (i = 0; i < rowscount; i++) {
 								var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
 								if (i == row) {
@@ -572,9 +612,6 @@
 								}
 							}
 						}
-//						$('#fermentableGrid').jqxGrid('sortby', 'f_amount', 'desc');
-						//$('#fermentableGrid').jqxGrid('render');
-//						console.log("diff:"+diff+" len:"+rowscount+" to100:"+to_100+" tw:"+tw);
 					}
 				  }
 				},
@@ -596,8 +633,30 @@
 		$("#fermentableGrid").on('cellendedit', function (event) {
 			var args = event.args;
 			console.log("Event Type: cellendedit, Column: " + args.datafield + ", Row: " + (args.rowindex) + ", Value: " + args.value);
-//			$('#fermentableGrid').jqxGrid('sortby', 'f_amount', 'desc');
+			// Make sure the grid itself is updated.
+			$("#fermentableGrid").jqxGrid('setcellvalue', args.rowindex, args.datafield, args.value);
+			if ((args.datafield == 'f_amount') && (! to_100)) {
+				// If one of the amounts is changed, recalculate the percentages.
+				console.log("adjust percentages");
+				var rowscount = $("#fermentableGrid").jqxGrid('getdatainformation').rowscount;
+	                        if (rowscount > 1) {
+					var tw = 0;
+					for (i = 0; i < rowscount; i++) {
+						var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+						tw += rowdata.f_amount;
+					};
+					for (i = 0; i < rowscount; i++) {
+						var rowdata = $("#fermentableGrid").jqxGrid('getrowdata', i);
+						var percentage = Math.round(rowdata.f_amount / tw * 1000) / 10.0;
+						$("#fermentableGrid").jqxGrid('setcellvalue', i, "f_percentage", percentage);
+					};
+				} else {
+					$("#fermentableGrid").jqxGrid('setcellvalue', 0, "f_percentage", 100);
+				}
+			};
+			$('#fermentableGrid').jqxGrid('sortby', 'f_amount', 'desc');	// TODO: not reliable
 			calcFermentables();
+			calcIBUs();	// Depends on gravity, so recalculate.
 		});
 	};
 
@@ -1261,6 +1320,7 @@
                         },
 			ready: function() {
 				calcInit();
+				$('#jqxLoader').jqxLoader('close');
 				$('#jqxTabs').jqxTabs('first');
 			},
                         columns: [

mercurial