# HG changeset patch # User Michiel Broek # Date 1549308641 -3600 # Node ID e95d2886f49f4275eb4d6ba23e73248d22d12c1e # Parent a85c1d4c4d12098d731805a3dfe5e69e971c1df4 Added soe extra debug logging in db_product.php. Automatic stage increment in the product editor. On the brewday tab added tooltips. diff -r a85c1d4c4d12 -r e95d2886f49f www/includes/db_product.php --- a/www/includes/db_product.php Mon Feb 04 15:21:49 2019 +0100 +++ b/www/includes/db_product.php Mon Feb 04 20:30:41 2019 +0100 @@ -71,6 +71,7 @@ $sql .= "', eq_efficiency='" . $_POST['eq_efficiency']; if ($stage > 1) { + syslog(LOG_NOTICE, "write brewdate data"); $sql .= "', brew_date_start='" . $_POST['brew_date_start']; $sql .= "', brew_mash_ph='" . $_POST['brew_mash_ph']; $sql .= "', brew_mash_sg='" . $_POST['brew_mash_sg']; @@ -98,13 +99,17 @@ $sql .= "', brew_fermenter_extrawater='" . $_POST['brew_fermenter_extrawater']; $sql .= "', brew_fermenter_sg='" . $_POST['brew_fermenter_sg']; $sql .= "', brew_fermenter_ibu='" . $_POST['brew_fermenter_ibu']; - $sql .= "', brew_date_end='" . $_POST['brew_date_end']; + if ($stage > 2) { + syslog(LOG_NOTICE, "write brewdate data end"); + $sql .= "', brew_date_end='" . $_POST['brew_date_end']; + } ($_POST['brew_log_available'] == 'true') ? $sql .= "', brew_log_available='1" : $sql .= "', brew_log_available='0"; } $sql .= "', og='" . $_POST['og']; $sql .= "', fg='" . $_POST['fg']; if ($stage > 2) { + syslog(LOG_NOTICE, "write primary data"); $sql .= "', primary_start_temp='" . $_POST['primary_start_temp']; $sql .= "', primary_max_temp='" . $_POST['primary_max_temp']; $sql .= "', primary_end_temp='" . $_POST['primary_end_temp']; @@ -113,12 +118,14 @@ } if ($stage > 3) { + syslog(LOG_NOTICE, "write secondary data"); $sql .= "', secondary_temp='" . $_POST['secondary_temp']; $sql .= "', secondary_end_date='" . $_POST['secondary_end_date']; $sql .= "', tertiary_temp='" . $_POST['tertiary_temp']; } if ($stage > 4) { + syslog(LOG_NOTICE, "write package data"); $sql .= "', package_date='" . $_POST['package_date']; $sql .= "', bottle_amount='" . $_POST['bottle_amount']; $sql .= "', bottle_carbonation='" . $_POST['bottle_carbonation']; @@ -135,6 +142,7 @@ } if ($stage > 8) { + syslog(LOG_NOTICE, "write taste data"); $sql .= "', taste_notes='" . mysqli_real_escape_string($connect, $_POST['taste_notes']); $sql .= "', taste_rate='" . $_POST['taste_rate']; $sql .= "', taste_date='" . $_POST['taste_date']; diff -r a85c1d4c4d12 -r e95d2886f49f www/js/global.js --- a/www/js/global.js Mon Feb 04 15:21:49 2019 +0100 +++ b/www/js/global.js Mon Feb 04 20:30:41 2019 +0100 @@ -428,6 +428,10 @@ theme: theme, width: 150, height: 23, allowNullDate: true, todayString: 'Vandaag', clearString: 'Wissen', showFooter: true, formatString: 'yyyy-MM-dd', enableBrowserBoundsDetection: true }; +var DateTimeopts = { + theme: theme, width: 230, height: 23, allowNullDate: true, todayString: 'Vandaag', clearString: 'Wissen', showFooter: true, + formatString: 'yyyy-MM-dd HH:mm:ss', enableBrowserBoundsDetection: true, showTimeButton: true +}; var sugardensity = 1.611; //kg/l in solution @@ -1010,8 +1014,6 @@ var BD; - console.log("estimate_fg("+percSugar+","+percCara+","+WGratio+","+TotTme+","+Temp+","+attenuation+","+og+")"); - if (percSugar > 40) percSugar = 0; if (percCara > 50) @@ -1030,7 +1032,8 @@ var AttBeer = 0.00825 * attenuation + 0.00817 * BD - 0.00684 * Temp + 0.00026 * TotTme - 0.00356 * percCara + 0.00553 * percSugar + 0.547; var fg = Math.round((1 + (1 - AttBeer) * (og - 1)) * 1000) / 1000; - console.log("fg:"+fg); + + console.log("estimate_fg("+percSugar+","+percCara+","+WGratio+","+TotTme+","+Temp+","+attenuation+","+og+") :"+fg); return fg; } diff -r a85c1d4c4d12 -r e95d2886f49f www/js/prod_edit.js --- a/www/js/prod_edit.js Mon Feb 04 15:21:49 2019 +0100 +++ b/www/js/prod_edit.js Mon Feb 04 20:30:41 2019 +0100 @@ -1094,22 +1094,22 @@ function calcStage() { var newstage = dataRecord.stage; - - if (newstage < 1 && dataRecord.est_og > 1.005 && dataRecord.est_color > 3 && dataRecord.est_ibu > 3) + /* parseFloat$("#brew_date_start").val()) returns the year if it is a valid mysql style date. */ + if (newstage == 0 && dataRecord.est_og > 1.005 && dataRecord.est_color > 3 && dataRecord.est_ibu > 3) newstage = 1; - if (newstage < 2 && dataRecord.brew_date_start != '') + if (newstage == 1 && parseFloat($("#brew_date_start").val()) > 2000) newstage = 2; // Brewday - if (newstage < 3 && dataRecord.brew_date_end != '') + if (newstage == 2 && parseFloat($("#brew_date_end").val()) > 2000) newstage = 3; // Primary - if (newstage < 4 && dataRecord.primary_end_date != '') + if (newstage == 3 && parseFloat($("#primary_end_date").val()) > 2000) newstage = 4; // Secondary - if (newstage < 5 && dataRecord.secondary_end_date != '') + if (newstage == 4 && parseFloat($("#secondary_end_date").val()) > 2000) newstage = 5; // Tertiary - if (newstage < 6 && dataRecord.package_date != '') + if (newstage == 5 && parseFloat($("#package_date").val()) > 2000) newstage = 6; // Package - if (newstage >= 6 && newstage < 10) { + if (newstage >= 6 && newstage < 9) { var d = new Date(); - var date2 = dataRecord.package_date; + var date2 = $("#package_date").val(); date2 = date2.split('-'); // Now we convert the array to a Date object date1 = new Date(d.getFullYear(), d.getMonth(), d.getDate()); @@ -1121,14 +1121,16 @@ var timeDifference = date1_unixtime - date2_unixtime; var timeDifferenceInDays = timeDifference / 60 / 60 / 24; console.log(date1+' '+date2+' days: '+timeDifferenceInDays); - if (newstage < 7 && timeDifferenceInDays < 14) // Carbonation period - newstage = 7; - else if (newstage < 8 && timeDifferenceInDays < 42) // Mature 6 weeks - newstage = 8; - else - newstage = 9; + if (timeDifferenceInDays > 0) { // At least one day + if (timeDifferenceInDays >= 42) // 6 weeks + newstage = 9; // Ready to taste + else if (timeDifferenceInDays >= 14) // 14 days + newstage = 8; // Mature + else + newstage = 7; // Carbonation + } } - if (newstage < 10 && dataRecord.taste_date != '') + if (newstage == 9 && parseFloat($("#taste_date").val()) > 2000) newstage = 10; // Ready if (newstage > dataRecord.stage) { @@ -1163,7 +1165,7 @@ } else { $('#jqxTabs').jqxTabs('enableAt', 9); } - if (dataRecord.stage < 4) { // At least primary + if (dataRecord.stage < 5) { // At least secondary $('#jqxTabs').jqxTabs('disableAt', 10); // Packaging tab } else { $('#jqxTabs').jqxTabs('enableAt', 10); @@ -3555,6 +3557,7 @@ } $("#mashGrid").jqxGrid('deleterow', rowIDs); // Then add the new steps + var datarecord = mashlist.records[index]; $("#mash_name").val(datarecord.name); for (var i = 0; i < datarecord.steps.length; i++) { var data = datarecord.steps[i]; @@ -3866,25 +3869,42 @@ $("#sparge_acid_perc").jqxNumberInput({ symbol: '%', symbolPosition: 'right' }); // Tab 9, Brewday - $("#brew_date_start").jqxDateTimeInput({ theme: theme, width: 230, height: 23, formatString: 'yyyy-MM-dd HH:mm:ss', showTimeButton: true }); - $("#brew_date_end").jqxDateTimeInput({ theme: theme, width: 230, height: 23, formatString: 'yyyy-MM-dd HH:mm:ss', showTimeButton: true }); + $("#brew_date_start").jqxTooltip({ content: 'Brouw datum en tijd. Voor planning laat de tijd op 00:00:00 staan.' }); + $("#brew_date_start").jqxDateTimeInput( DateTimeopts ); + $('#brew_date_start').on('close', function (event) { calcStage(); }); + $("#brew_date_end").jqxTooltip({ content: 'End datum en tijd van de brouw. Leeg laten als er nog niet gebrouwen is.' }); + $("#brew_date_end").jqxDateTimeInput( DateTimeopts ); + $('#brew_date_end').on('close', function (event) { calcStage(); }); + $("#brew_mash_ph").jqxTooltip({ content: 'De gemeten pH tijdens het maischen eventueel na correctie.' }); $("#brew_mash_ph").jqxNumberInput( SpinpH ); + $("#est_mash_ph").jqxTooltip({ content: 'De gewenste pH tijdens het maischen.' }); $("#est_mash_ph").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); + $("#brew_preboil_ph").jqxTooltip({ content: 'De gemeten pH in de kookketel na het spoelen en voor de kook.' }); $("#brew_preboil_ph").jqxNumberInput( SpinpH ); // est_preboil_ph + $("#brew_aboil_ph").jqxTooltip({ content: 'De gemeten pH na het koken.' }); $("#brew_aboil_ph").jqxNumberInput( SpinpH ); // est_aboil_ph + $("#brew_mash_sg").jqxTooltip({ content: 'Het bereikte SG na het maischen.' }); $("#brew_mash_sg").jqxNumberInput( SGopts ); $("#brew_mash_sg").on('valueChanged', function () { calcMashEfficiency(); }); + $("#est_mash_sg").jqxTooltip({ content: 'Het berekende verwachte SG na het maischen.' }); $("#est_mash_sg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 3 }); + $("#brew_preboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het spoelen en voor het koken.' }); $("#brew_preboil_sg").jqxNumberInput( SGopts ); + $("#brew_aboil_sg").jqxTooltip({ content: 'Het gemeten SG in de kookketel na het koken.' }); $("#brew_aboil_sg").jqxNumberInput( SGopts ); - $("#est_og3").jqxTooltip({ content: 'Het geschatte begin SG van dit product.' }); + $("#est_og3").jqxTooltip({ content: 'Het geschatte SG in de kookketel na het koken.' }); $("#est_og3").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 70, height: 23, decimalDigits: 3, readOnly: true }); + $("#brew_mash_efficiency").jqxTooltip({ content: 'Het behaalde maisch rendement.' }); $("#brew_mash_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); + $("#brew_preboil_volume").jqxTooltip({ content: 'Het volume van het wort voor het koken.' }); $("#brew_preboil_volume").jqxNumberInput( Spin1dec5 ); + $("#brew_aboil_volume").jqxTooltip({ content: 'Het volume van het wort na het koken.' }); $("#brew_aboil_volume").jqxNumberInput( Spin1dec5 ); + $("#brew_preboil_efficiency").jqxTooltip({ content: 'Het berekende rendement voor het koken.' }); $("#brew_preboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); + $("#brew_aboil_efficiency").jqxTooltip({ content: 'Het bereikte rendement na het koken.' }); $("#brew_aboil_efficiency").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 90, height: 23, decimalDigits: 1 }); $("#brew_sparge_temperature").jqxNumberInput( Spin1dec5 ); $("#brew_sparge_volume").jqxNumberInput( Spin1dec5 ); @@ -3945,9 +3965,11 @@ $("#primary_svg").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); $("#primary_end_date").jqxTooltip({ content: 'De eind datum van de hoofdvergisting en eventueel overhevelen.' }); $("#primary_end_date").jqxDateTimeInput( Dateopts ); + $('#primary_end_date').on('close', function (event) { calcStage(); }); $("#secondary_temp").jqxNumberInput( YeastT ); $("#secondary_end_date").jqxTooltip({ content: 'De eind datum van de navergisting en het begin van het lageren.' }); $("#secondary_end_date").jqxDateTimeInput( Dateopts ); + $('#secondary_end_date').on('close', function (event) { calcStage(); }); $("#tertiary_temp").jqxNumberInput( YeastT ); $("#fg").jqxNumberInput({ inputMode: 'simple', spinMode: 'simple', theme: theme, width: 90, height: 23, min: 0, decimalDigits: 3, spinButtons: true, spinButtonsStep: 0.001 }); $("#final_abv").jqxNumberInput({ inputMode: 'simple', readOnly: true, theme: theme, width: 70, height: 23, decimalDigits: 1 }); @@ -3963,6 +3985,7 @@ // TODO: high gravity packaging, extra water and recalc abv, color and ibu. $("#package_date").jqxTooltip({ content: 'De verpakkings datum van dit bier.' }); $("#package_date").jqxDateTimeInput( Dateopts ); + $('#package_date').on('close', function (event) { calcStage(); }); $("#st_carb_min2").jqxTooltip({ content: 'Het minimum aanbevolen koolzuur volume voor deze bierstijl.'}); $("#st_carb_min2").jqxNumberInput({ inputMode: 'simple', theme: theme, width: 50, height: 23, decimalDigits: 1, readOnly: true }); $("#st_carb_max2").jqxTooltip({ content: 'Het maximum aamnevolen koolzuur volume voor deze bierstijl.'}); @@ -4009,6 +4032,7 @@ // Tab 12, Tasting $("#taste_date").jqxTooltip({ content: 'De proef datum van dit bier.' }); $("#taste_date").jqxDateTimeInput( Dateopts ); + $('#taste_date').on('close', function (event) { calcStage(); }); $("#taste_rate").jqxTooltip({ content: 'Het cijfer voor dit bier van 1 tot 10.' }); $("#taste_rate").jqxNumberInput( Spin1dec5 ); $("#taste_rate").jqxNumberInput({ max: 10 }); diff -r a85c1d4c4d12 -r e95d2886f49f www/js/rec_edit.js --- a/www/js/rec_edit.js Mon Feb 04 15:21:49 2019 +0100 +++ b/www/js/rec_edit.js Mon Feb 04 20:30:41 2019 +0100 @@ -2364,9 +2364,6 @@ } ] }); - $("#mashGrid").on('cellendedit', function (event) { - $('#mashGrid').jqxGrid('sortby', 'step_temp', 'asc'); - }); }; // initialize the input fields. diff -r a85c1d4c4d12 -r e95d2886f49f www/prod_print.php --- a/www/prod_print.php Mon Feb 04 15:21:49 2019 +0100 +++ b/www/prod_print.php Mon Feb 04 20:30:41 2019 +0100 @@ -369,7 +369,7 @@ } $this->SetFillColor(210,245,255); - $this->Cell($vul+75,5,'',0,0,'L',false); + $this->Cell($vul+80,5,'',0,0,'L',false); $this->Cell(20,5,sprintf("%8.3f",$cost_miscs).EURO,0,0,'R',true); $this->Ln(10);