Sun, 02 Jun 2019 12:48:54 +0200
Added 15 fields to the recipes table. Added 18 fields to the products table. These are calculated values that are now stored in the database so export programs can use these values without calculating them again. Product and recipe print have water and mash schedule added. Product print has brewday results added if the brewday is over. The ingredients layout changed in the product and recipe prints.
<?php require_once($_SERVER['DOCUMENT_ROOT'].'/includes/global.inc.php'); require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php'); $link = mysqli_connect(DBASE_HOST,DBASE_USER,DBASE_PASS,DBASE_NAME); if (! $link) { die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } if (! mysqli_set_charset($link, "utf8" )) { echo "error"; return 1; } setlocale ( LC_ALL, 'nl_NL.UTF-8'); $record = $_GET["record"]; $result = mysqli_query($link, "SELECT * FROM products WHERE record='".$record."'"); $row = mysqli_fetch_array($result); $preboil_sg = 0; date_default_timezone_set('Europe/Amsterdam'); $prdate = date(DATE_RFC2822); ?> <!DOCTYPE html> <html lang=nl-NL> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <title>BMS v<?php echo $my_version;?> - Export recipe</title> <meta name="viewport" content="width=device-width, initial-scale=1 maximum-scale=1 minimum-scale=1" /> </head> <body> <pre> <?php $recipetype = array( 'Extract', 'Deelmaisch', 'Mout' ); $colormethod = array( 'Morey', 'Mosher', 'Daniels' ); $ibumethod = array( 'Tinseth', 'Rager', 'Daniels' ); $added = array( 'Maischen', 'Koken', 'Vergisten', 'Nagisten/lageren', 'Bottelen' ); $hopform = array( 'Pellets', 'Plugs', 'Bellen', 'Hop nat' ); $hopuse = array( 'Maischen', 'First wort', 'Koken', 'Vlamuit', 'Whirlpool', 'Koudhop' ); $misctype = array( 'Specerij', 'Kruid', 'Smaakstof', 'Klaringsmiddel', 'Brouwzout', 'Gistvoeding', 'Anders' ); $miscuse = array( 'Starter', 'Maischen', 'Koken', 'Hoofdvergisting', 'Nagisting/lagering', 'Bottelen' ); $yeastform = array( 'Vloeibaar', 'Droog', 'Schuine buis', 'Slurry', 'Ingevroren', 'Depot' ); $yeastuse = array( 'Hoofdgisting', 'Nagisting', 'Lagering', 'Bottelen' ); $steptype = array( 'Infusie', 'Directe verwarming', 'Decoctie' ); $acidtype = array( 'Melkzuur', 'Zoutzuur', 'Fosforzuur', 'Zwavelzuur' ); function itemline($item, $content) { echo $item . " "; for ($i = strlen($item); $i < 40; $i++) echo "."; echo ": " . $content . PHP_EOL; } function formatstr($strin, $len) { $strout = null; $cnt = 0; for ($i = 0; $i < strlen($strin); $i++) { $ord = ord($strin[$i]); if ($ord != 195) $cnt++; switch ($strin[$i]) { case '<': $strout .= '<'; break; case '>': $strout .= '>'; break; case '&': $strout .= '&'; break; case '"': $strout .= '"'; break; default: $strout .= $strin[$i]; } if ($cnt >= $len) break; } for ($i = $cnt; $i < $len; $i++) $strout .= " "; return $strout; } echo "BMS v" . $my_version . " - Datum export: " . $prdate . PHP_EOL; echo "----------------------------------------------------------" . PHP_EOL; itemline("Bier naam", $row['code'].' '.$row['name']); itemline("Bier stijl", $row['st_name']); itemline("Recept type", $recipetype[$row['type']]); itemline("Batch grootte", $row['batch_size'].' liter'); itemline("Kooktijd", $row['boil_time'].' minuten'); itemline("Brouwzaal rendement", $row['efficiency'].' %'); itemline("Geschatte begin densiteit", sprintf("%.3f",$row['est_og']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_og'])).'°P'); itemline("Geschatte eind densiteit", sprintf("%.3f",$row['est_fg']).' SG/ '.sprintf("%.1f", sg_to_plato($row['est_fg'])).'°P'); itemline("Geschat alcohol", sprintf("%.1f",$row['est_abv']).'% vol'); itemline("Kleur (" . $colormethod[$row['color_method']] . ")", $row['est_color'] . ' EBC'); itemline("Bitterheid (" . $ibumethod[$row['ibu_method']] . ")", $row['est_ibu'] . ' IBU'); echo PHP_EOL . PHP_EOL; $sugarsm = 0; $grainabsorbtion = 0; $mashwater = 0; $arr = json_decode($row['json_fermentables'], true); echo "Mout, granen en suikers EBC Gewicht kg % Gebruik tijdens" . PHP_EOL; echo "---------------------------------------- --- ---------- ----- ----------------" . PHP_EOL; foreach($arr as $item) { $name = formatstr($item['f_name'] . " (" . $item['f_supplier'] . ")", 40); $amount = floatval($item['f_amount']); $d = $amount * (floatval($item['f_yield']) / 100) * (1 - floatval($item['f_moisture']) / 100); if ($item['f_added'] == 0) { $d = floatval($row['efficiency']) / 100 * $d; $sugarsm += $d; $grainabsorbtion += $item['f_amount']; } echo sprintf("%s %3.0f %10.3f %5.1f ", $name, floatval($item['f_color']), $amount, floatval($item['f_percentage'])); echo $added[$item['f_added']] . PHP_EOL; } $preboil_sg = estimate_sg($sugarsm, floatval($row['boil_size'])); echo PHP_EOL . PHP_EOL; echo "Hop Vorm α % IBU Gram Toevoegen moment" . PHP_EOL; echo "---------------------------------------- ------- ----- ----- ------ --------------------" . PHP_EOL; $arr = json_decode($row['json_hops'], true); foreach($arr as $item) { $name = formatstr($item['h_name'] . " (" . $item['h_origin'] . ")", 40); $amount = floatval($item['h_amount']) * 1000; $time = floatval($item['h_time']); $alpha = floatval($item['h_alpha']); $ibu = calc_IBU($item['h_useat'], $item['h_form'], $preboil_sg, floatval($row['batch_size']), $amount, $time, $alpha, $row['ibu_method']); $moment = $hopuse[$item['h_useat']]; if ($item['h_useat'] == 2) { // Boil $moment = "Koken ".$time." minuten"; } else if ($item['h_useat'] == 5) { // Dryhop $moment = 'Koudhop '.sprintf("%.0f", $time / 1440).' dagen'; } echo sprintf("%s %-7s %5.1f %5.1f %6.1f %-20s", $name, $hopform[$item['h_form']], $alpha, $ibu, $amount, $moment); echo PHP_EOL; } echo PHP_EOL . PHP_EOL; echo "Specerij, kruid, brouwzout etc Type grondstof Gebruik tijdens Hoeveel" . PHP_EOL; echo "------------------------------ --------------- -------------------- -----------" . PHP_EOL; $arr = json_decode($row['json_miscs'], true); foreach($arr as $item) { $amount = floatval($item['m_amount']) * 1000; $aiw = $item['m_amount_is_weight']; $use_use = $item['m_use_use']; $time = floatval($item['m_time']); if ($use_use == 2) // Boil $gebruik = sprintf("%s %d min",$miscuse[$use_use],$time); else $gebruik = $miscuse[$use_use]; $hoeveel = sprintf("%.2f %s",$amount,$aiw ? "gr":"ml"); echo sprintf("%s %-15s %-20s %11s", formatstr($item['m_name'], 30), $misctype[$item['m_type']], $gebruik, $hoeveel) . PHP_EOL; } echo PHP_EOL . PHP_EOL; echo "Gistlab en code Omschrijving Gebruik Vorm Hoeveel" . PHP_EOL; echo "-------------------- ------------------------------ ------------ ------------ ----------" . PHP_EOL; $arr = json_decode($row['json_yeasts'], true); foreach($arr as $item) { $name = formatstr($item['y_name'], 30); $product = formatstr($item['y_laboratory']." ".$item['y_product_id'], 20); if ($item['y_form'] == 0) // Liquid $amount = sprintf("%.0f",floatval($item['y_amount']))." pak"; else if ($item['y_form'] == 1) // Dry $amount = sprintf("%.1f",floatval($item['y_amount'])*1000)." gr"; else $amount = sprintf("%.0f",floatval($item['y_amount'])*1000)." ml"; echo sprintf("%s %s %-12s %-12s %10s", $product, $name, $yeastuse[$item['y_use']], $yeastform[$item['y_form']], $amount) . PHP_EOL; } if ($row['starter_enable'] && $row['prop1_volume']) { $sv = 0; for ($i = 1; $i < 5; $i++) { $pv = "prop".$i."_volume"; if (floatval($row[$pv]) && (floatval($row[$pv]) > $sv)) { $sv = floatval($row[$pv]); } } echo PHP_EOL . "Maak een giststarter van " . sprintf("%.1f", $sv) . " liter." . PHP_EOL; } echo PHP_EOL . PHP_EOL; if ($row['w1_name']) $mashwater += floatval($row['w1_amount']); if ($row['w2_name']) $mashwater += floatval($row['w2_amount']); echo "Maisch stap stap type stap temp rusten opwarmen" . PHP_EOL; echo "-------------------- ---------------------- --------- --------- ---------" . PHP_EOL; $arr = json_decode($row['json_mashs'], true); foreach($arr as $item) { if ($item['step_type'] == 1) { $stype = formatstr($steptype[$item['step_type']], 22); } else { $stype = formatstr($steptype[$item['step_type']].' '.sprintf("%.1f", $item['step_infuse_amount']).' liter', 22); } echo sprintf("%s %s %s %s %s", formatstr($item['step_name'], 20), $stype, sprintf("%6.1f °C", $item['step_temp']), sprintf("%4.0f min.", $item['step_time']), sprintf("%4.0f min.", $item['ramp_time'])) . PHP_EOL; } echo PHP_EOL; if ($row['w1_name'] && $row['w2_name']) { itemline("Maischwater 1", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']); itemline("Maischwater 2", sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name']); } else { itemline("Maischwater", sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']); } itemline("Maischwater aanzuren tot pH", $row['mash_ph'].' pH'); itemline("Spoelwater geschat", sprintf("%.1f", $row['brew_sparge_est'])." liter"); itemline("Spoelwater temperatuur", $row['sparge_temp'].' °C'); itemline("Spoelwater aanzuren tot pH", sprintf("%.1f",$row['sparge_ph']).' pH'); echo PHP_EOL . PHP_EOL; ?> </pre> </body> </html>