Fixed some html errors. Added volume calculations for the brewday tab using a popup tool.

Thu, 19 Mar 2020 20:41:18 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Thu, 19 Mar 2020 20:41:18 +0100
changeset 646
2246d830a42a
parent 645
3b1510050c9b
child 647
243be110285c

Fixed some html errors. Added volume calculations for the brewday tab using a popup tool.

README.design 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/prod_edit.php file | annotate | diff | comparison | revisions
--- a/README.design	Thu Mar 19 13:42:59 2020 +0100
+++ b/README.design	Thu Mar 19 20:41:18 2020 +0100
@@ -52,12 +52,8 @@
 Bij splits na brouwen, de brouw log records kopieren onder nieuwe code en naam. includes/db_divide.php
 
 
-Miscs type: add wood.
-
 Hop types: Extract IKE.
 
-Popups in de editors met rekenhulpjes.
-
 
 https://github.com/beerjson/beerjson
 
--- a/www/js/global.js	Thu Mar 19 13:42:59 2020 +0100
+++ b/www/js/global.js	Thu Mar 19 20:41:18 2020 +0100
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (C) 2014-2019
+ * Copyright (C) 2014-2020
  *
  * Michiel Broek <mbroek at mbse dot eu>
  *
@@ -1190,3 +1190,16 @@
 }
 
 
+function kettle_cm(vol, kettle_vol, kettle_height) {
+ if ((vol > 0) && (kettle_vol > 0) && (vol <= kettle_vol))
+  return Round(100 * ((1 - vol / kettle_vol) * kettle_height), 1);
+ return 0;
+}
+
+
+function kettle_vol(cm, kettle_vol, kettle_height) {
+ if ((cm >= 0) && (kettle_vol > 0) && (cm <= (kettle_height * 100)))
+  return Round(((kettle_height - (cm / 100)) / kettle_height) * kettle_vol, 1);
+ return 0;
+}
+
--- a/www/js/prod_edit.js	Thu Mar 19 13:42:59 2020 +0100
+++ b/www/js/prod_edit.js	Thu Mar 19 20:41:18 2020 +0100
@@ -31,6 +31,7 @@
   resizable: false,
   isModal: true,
   modalOpacity: 0.4,
+  autoOpen: false,
   okButton: $('#delOk'),
   cancelButton: $('#delCancel'),
   initContent: function() {
@@ -40,6 +41,19 @@
   }
  });
  $('#eventWindow').jqxWindow('hide');
+
+ $('#volumeWindow').jqxWindow({
+  theme: theme,
+  position: { x: 380, y: 210 },
+  width: 500,
+  height: 200,
+  resizable: false,
+  isModal: true,
+  modalOpacity: 0.4,
+  autoOpen: false,
+  cancelButton: $('#volumeReady')
+ });
+ $('#volumeWindow').jqxWindow('hide');
 }
 
 
@@ -66,6 +80,9 @@
 
  data_loaded = 0;
  error_count = 0;
+ k_cm = 0;
+ k_vol = 0;
+ k_what = 0;
 
  hop_flavour = 0,
  hop_aroma = 0,
@@ -3594,6 +3611,8 @@
    $('#brew_aeration_time').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
    $('#brew_fermenter_extrawater').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
    $('#brew_aeration_speed').jqxNumberInput({ spinButtons: false, readOnly: true, width: 90 });
+   $('#but_pre_boil').jqxButton({ disabled: true });
+   $('#but_after_boil').jqxButton({ disabled: true });
   }
   if (dataRecord.stage == 5) // Lagering, allow packaging
    $('#package_date').jqxDateTimeInput({ disabled: false });
@@ -5720,6 +5739,50 @@
   calcFermentables();
   calcIBUs();
  });
+ $('#ketel_volume').jqxNumberInput(Show1dec);
+ $('#ketel_cm').jqxNumberInput(Spin1dec);
+ $('#ketel_cm').on('change', function(event) {
+  k_cm = parseFloat(event.args.value);
+  k_vol = kettle_vol(k_cm, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  $('#ketel_volume').val(k_vol);
+ });
+ $('#volumeReady').jqxButton({ template: 'success', width: '90px', theme: theme });
+ $('#volumeReady').click(function() {
+  /* Is it pre or after boil */
+  console.log('volumeReady ' + k_what + ' volume: ' + Round(k_vol, 1));
+  if (k_what == 0) {
+   dataRecord.brew_preboil_volume = Round(k_vol, 1);
+   $('#brew_preboil_volume').val(Round(k_vol, 1));
+  } else if (k_what == 1) {
+   dataRecord.brew_aboil_volume = Round(k_vol, 1);
+   $('#brew_aboil_volume').val(Round(k_vol, 1));
+  }
+ });
+ $('#but_pre_boil').jqxButton({ template: 'success', width: '23px', height: 23, theme: theme });
+ $('#but_pre_boil').bind('click', function() {
+  /* If we already have measured a value, use that. Else use the estimated value. */
+  if (dataRecord.brew_preboil_volume > 0)
+   k_cm = kettle_cm(dataRecord.brew_preboil_volume, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  else
+   k_cm = kettle_cm(dataRecord.boil_size * 1.04, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  k_vol = kettle_vol(k_cm, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  k_what = 0;
+  $('#ketel_cm').val(k_cm);
+  $('#ketel_volume').val(k_vol);
+  $('#volumeWindow').jqxWindow('open');
+ });
+ $('#but_after_boil').jqxButton({ template: 'success', width: 23, height: 23, theme: theme });
+ $('#but_after_boil').bind('click', function() {
+  if (dataRecord.brew_aboil_volume > 0)
+   k_cm = kettle_cm(dataRecord.brew_aboil_volume, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  else
+   k_cm = kettle_cm(dataRecord.batch_size * 1.04, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  k_vol = kettle_vol(k_cm, dataRecord.eq_kettle_volume, dataRecord.eq_kettle_height);
+  k_what = 1;
+  $('#ketel_cm').val(k_cm);
+  $('#ketel_volume').val(k_vol);
+  $('#volumeWindow').jqxWindow('open');
+ });
  $('#est_pre_vol,#est_a_vol').jqxNumberInput(Show1wat);
  $('#brew_preboil_efficiency,#brew_aboil_efficiency,#brew_sparge_temperature,#brew_sparge_volume,#brew_sparge_est').jqxNumberInput(Show1dec);
  $('#brew_cooling_to').jqxNumberInput(Spin1dec);
--- a/www/prod_edit.php	Thu Mar 19 13:42:59 2020 +0100
+++ b/www/prod_edit.php	Thu Mar 19 20:41:18 2020 +0100
@@ -111,7 +111,7 @@
         <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 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>
+        <td style="padding: 3px;"><div style="float: left;" id="kcal"></div></td>
        </tr>
       </table>
       <div style="float: right; margin-top: 20px; margin-bottom: 5px;">
@@ -544,7 +544,7 @@
       </tr>
       <tr>
        <td style="vertical-align: top; float: right;">Maisch pH:</td>
-       <td><div style="float: left;" id="brew_mash_ph"></div><div style="float: left; margin-left: 15px;" id="est_mash_ph"></div></td>
+       <td><div style="float: left;" id="brew_mash_ph"></div><div style="float: left; margin-left: 10px;" id="est_mash_ph"></div></td>
        <td style="vertical-align: top; float: right;">Voor koken pH:</td>
        <td><div id="brew_preboil_ph"></div></td>
        <td style="vertical-align: top; float: right;">Na koken pH:</td>
@@ -552,19 +552,19 @@
       </tr>
       <tr>
        <td style="vertical-align: top; float: right;">Maisch SG:</td>
-       <td><div style="float: left;" id="brew_mash_sg"></div><div style="float: left; margin-left: 15px;" id="est_mash_sg"></div></td>
+       <td><div style="float: left;" id="brew_mash_sg"></div><div style="float: left; margin-left: 10px;" id="est_mash_sg"></div></td>
        <td style="vertical-align: top; float: right;">Voor koken SG:</td>
-       <td><div style="float: left;" id="brew_preboil_sg"></div><div style="float: left; margin-left: 15px;" id="est_pre_sg"></div></td>
+       <td><div style="float: left;" id="brew_preboil_sg"></div><div style="float: left; margin-left: 10px;" id="est_pre_sg"></div></td>
        <td style="vertical-align: top; float: right;">Na koken SG:</td>
-       <td><div style="float: left;" id="brew_aboil_sg"></div><div style="float: left; margin-left: 15px;" id="est_og3"></div></td>
+       <td><div style="float: left;" id="brew_aboil_sg"></div><div style="float: left; margin-left: 10px;" id="est_og3"></div></td>
       </tr>
       <tr>
        <td style="vertical-align: top; float: right;">Maisch rendement %:</td>
        <td><div id="brew_mash_efficiency"></div></td>
        <td style="vertical-align: top; float: right;">Voor koken vol@100&deg;C:</td>
-       <td><div style="float: left;" id="brew_preboil_volume"></div><div style="float: left; margin-left: 15px;" id="est_pre_vol"></div></td>
+       <td><div style="float: left;" id="brew_preboil_volume"></div><div style="float: left; margin-left: 10px;" id="est_pre_vol"></div><input type="button" id="but_pre_boil" value="?" style="margin-left: 10px" /></td>
        <td style="vertical-align: top; float: right;">Na koken vol@100&deg;C:</td>
-       <td><div style="float: left;" id="brew_aboil_volume"></div><div style="float: left; margin-left: 15px;" id="est_a_vol"></div></td>
+       <td><div style="float: left;" id="brew_aboil_volume"></div><div style="float: left; margin-left: 10px;" id="est_a_vol"></div><input type="button" id="but_after_boil" value="?" style="margin-left: 10px" /></td>
       </tr>
       <tr>
        <td colspan="2"> </td>
@@ -632,7 +632,7 @@
        <td style="vertical-align: top; float: right;">Extra water in gistvat l:</td>
        <td><div id="brew_fermenter_extrawater"></div></td>
        <td style="vertical-align: top; float: right;">Kleur in gistvat EBC:</td>
-       <td><div style="float: left;" id="brew_fermenter_color"></div><div style="float: left; margin-left: 15px;" id="bcolorf" class='ebccolor'> </div></td>
+       <td><div style="float: left;" id="brew_fermenter_color"></div><div style="float: left; margin-left: 10px;" id="bcolorf" class='ebccolor'> </div></td>
       </tr>
       <tr>
        <td style="vertical-align: top; float: right;">Beluchten snelheid:</td>
@@ -903,7 +903,7 @@
      <table style="width: 100%;">
       <tr>
        <td align="right" style="vertical-align: top;">Ingredi&euml;nt naam:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wf_name" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wf_name" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Ander ingredi&euml;nt:</td>
@@ -948,7 +948,7 @@
      <table style="width: 100%;">
       <tr>
        <td align="right" style="vertical-align: top;">Hop naam:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wh_name" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wh_name" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Andere hop:</td>
@@ -989,7 +989,7 @@
      <table style="width: 100%;">
       <tr>
        <td align="right" style="vertical-align: top;">Ingredi&euml;nt naam:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wm_name" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wm_name" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Ander ingredi&euml;nt:</td>
@@ -1026,15 +1026,15 @@
      <table style="width: 100%;">
       <tr>
        <td align="right" style="vertical-align: top;">Gist naam:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wy_name" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wy_name" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Product code:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wy_product_id" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wy_product_id" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Leverancier:</td>
-       <td style="padding: 3px;"><input readonly="1" id="wy_laboratory" /></div></td>
+       <td style="padding: 3px;"><input readonly="1" id="wy_laboratory" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Andere gist:</td>
@@ -1067,7 +1067,7 @@
      <table style="width: 100%;">
       <tr>
        <td align="right" style="vertical-align: top;">Stap naam:</td>
-       <td style="padding: 3px;"><input id="wstep_name" /></div></td>
+       <td style="padding: 3px;"><input id="wstep_name" /></td>
       </tr>
       <tr>
        <td align="right" style="vertical-align: top;">Stap type:</td>
@@ -1102,6 +1102,29 @@
     </div>
    </div>
 
+   <div id="volumeWindow">
+    <div>Bereken volume in de ketel</div>
+    <div style="overflow: hidden;">
+     <table style="width: 100%;">
+      <col width="50%">
+      <col width="50%">
+      <tr>
+       <td align="right" style="vertical-align: top;">Ketel volume:</td>
+       <td style="padding: 3px;"><input readonly="1" id="ketel_volume" /></td>
+      </tr>
+      <tr>
+       <td align="right" style="vertical-align: top;">cm vanaf de bovenrand:</td>
+       <td style="padding: 3px;"><div id="ketel_cm" /></div></td>
+      </tr>
+      <tr>
+       <td style="padding-top: 30px;" colspan="2" align="center">
+        <input id="volumeReady" type="button" value="Ok" />
+       </td>
+      </tr>
+     </table>
+    </div>
+   </div>
+
 <?php
 confirm_delete();
 page_footer();

mercurial