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'); require_once($_SERVER['DOCUMENT_ROOT'].'/fpdf/fpdf.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); $total_fermentables = 0.0; $cost_fermentables = 0.0; $total_hops = 0.0; $cost_hops = 0.0; $cost_yeasts = 0.0; $cost_miscs = 0.0; $pSugar = 0; $pCara = 0; $svg = 77; $colorw = 0; $total_ibus = 0; $preboil_sg = 0; $mashkg = 0; date_default_timezone_set('Europe/Amsterdam'); $prdate = date(DATE_RFC2822); class PDF_MySQL_Table extends FPDF { protected $ProcessingTable=false; protected $aCols=array(); protected $TableX; function Header() { // Print the table header if necessary if ($this->ProcessingTable) $this->TableHeader(); } function TableHeader() { $this->SetFont('Helvetica','B',9); $this->SetX($this->TableX); $this->SetFillColor(255,150,100); foreach($this->aCols as $col) $this->Cell($col['w'],5,$col['c'],0,0,$col['a'],true); $this->Ln(); } function AddCol($width=-1, $caption='', $align='L') { $this->aCols[]=array('c'=>$caption,'w'=>$width,'a'=>$align); } function TableGlobal($row) { /* 2 Columns */ $recipetype = array( 'Extract', 'Deelmaisch', 'Mout' ); $vul = $this->w - $this->rMargin - $this->lMargin - 160; $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->SetFont('Helvetica','B',9); $this->SetX($this->TableX); $this->SetFillColor(255,150,100); $this->Cell(0, 5, 'Recept overzicht',0,0,'C',true); $this->Ln(); $this->SetFont('Helvetica','',9); $this->SetFillColor(210,245,255); $this->SetX($this->TableX); $this->Cell(35,5,'Type',0,0,'L',true); $this->Cell(45,5,$recipetype[$row['type']],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Batch grootte',0,0,'L',true); $this->Cell(45,5,$row['batch_size'].' liter',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Kooktijd',0,0,'L',true); $this->Cell(45,5,$row['boil_time'].' minuten',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Brouwzaal rendement',0,0,'L',true); $this->Cell(45,5,$row['efficiency'].' %',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Bierstijl',0,0,'L',true); $this->Cell(45,5,$row['st_name'],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Installatie',0,0,'L',true); $this->Cell(45,5,$row['eq_name'],0,0,'L',true); $this->Ln(); $this->cMargin=$cMargin; } function TableFermentables($row) { global $cost_fermentables; global $total_fermentables; global $pSugar; global $pCara; global $colorw; global $preboil_sg; global $mashkg; $added = array( 'Maischen', 'Koken 10 min', 'Vergisten', 'Nagisten/lageren', 'Bottelen' ); $ftype = array( 'Mout', 'Suiker', 'Vloeibaar extract', 'Droog extract', 'Ongemout graan' ); $mtype = array( 'Basismout', 'Geroosterde mout', 'Cara- of crystalmout', 'Geƫeste mout', 'Zuurmout', 'Speciale mout', 'Geen mout' ); $vul = $this->w - $this->rMargin - $this->lMargin - 125; $this->Ln(); $this->AddCol($vul,'Mout, granen en suikers','L'); $this->AddCol(15,'Procent','R'); $this->AddCol(15,'Opbr.','R'); $this->AddCol(25,'Soort', 'L'); $this->AddCol(30,'Gebruik moment','L'); $this->AddCol(20,'Hoeveel','R'); $this->AddCol(20,'Prijs','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $sugarsf = 0; $sugarsm = 0; $mashkg = 0; $this->SetFont('Helvetica','',9); $this->SetFillColor(250, 195, 65); $arr = json_decode($row['json_fermentables'], true); foreach($arr as $item) { //foreach element in $arr $name = iconv('UTF-8','windows-1252',$item['f_name']); $supplier = iconv('UTF-8','windows-1252',$item['f_supplier']); $amount = floatval($item['f_amount']); $costkg = floatval($item['f_cost']); $yield = floatval($item['f_yield']); $moisture = floatval($item['f_moisture']); $color = floatval($item['f_color']); $percent = floatval($item['f_percentage']); if ($item['f_type'] == 1) // Sugar $pSugar += $percent; if ($item['f_graintype'] == 2) // Crystal $pCara += $percent; if ($item['f_type'] == 0) $soort = iconv('UTF-8','windows-1252',$mtype[$item['f_graintype']]); else $soort = iconv('UTF-8','windows-1252',$ftype[$item['f_type']]); $cost = $amount * $costkg; $cost_fermentables += $cost; $total_fermentables += $amount; /* Calculate the amount of sugars */ $d = $amount * ($yield / 100) * (1 - $moisture / 100); if ($item['f_added'] == 0) { $d = floatval($row['efficiency']) / 100 * $d; $sugarsm += $d; $mashkg += $amount; } $sugarsf += $d; $colorw += ($amount * ebc_to_srm($color) / $row['batch_size']) * 8.34436; if ($amount > 100) $amount = sprintf("%.1f",$amount).' kg'; else if ($amount > 10) $amount = sprintf("%.2f",$amount).' kg'; else $amount = sprintf("%.0f",$amount * 1000).' gr'; $this->Cell($vul,5,$name.' ('.$supplier.') '.sprintf("%.0f",$color).' EBC',0,0,'L',true); $this->Cell(15,5,sprintf("%.1f%%",$percent),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f%%",$yield),0,0,'R',true); $this->Cell(25,5,$soort,0,0,'L',true); $this->Cell(30,5,$added[$item['f_added']],0,0,'L',true); $this->Cell(20,5,$amount,0,0,'R',true); $this->Cell(20,5,sprintf("%.3f",$cost).EURO,0,0,'R',true); $this->Ln(); } $row['est_og'] = estimate_sg($sugarsf, floatval($row['batch_size'])); $preboil_sg = estimate_sg($sugarsm, floatval($row['boil_size'])); $this->SetFillColor(210,245,255); $this->Cell($vul+105,5,'',0,0,'L',false); $this->Cell(20,5,sprintf("%.3f",$cost_fermentables).EURO,0,0,'R',true); $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableHops($row) { global $total_hops; global $total_ibus; global $cost_hops; global $preboil_sg; $hopform = array( 'Pellets', 'Plugs', 'Bellen', 'Hop nat' ); $hopuse = array( 'Maischen', 'First wort', 'Koken', 'Vlamuit', 'Whirlpool', 'Koudhop' ); $vul = $this->w - $this->rMargin - $this->lMargin - 122; $this->Ln(); $this->AddCol($vul,'Hop','L'); $this->AddCol(15,'Alpha','R'); $this->AddCol(12,'IBU','R'); $this->AddCol(25,'Soort','L'); $this->AddCol(30,'Gebruik moment','L'); $this->AddCol(20,'Hoeveel','R'); $this->AddCol(20,'Prijs','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $this->SetFont('Helvetica','',9); $this->SetFillColor(100, 250, 65); $arr = json_decode($row['json_hops'], true); foreach($arr as $item) { //foreach element in $arr $name = iconv('UTF-8','windows-1252',$item['h_name']); $origin = iconv('UTF-8','windows-1252',$item['h_origin']); $amount = floatval($item['h_amount']); $mass = $amount * 1000; $costkg = floatval($item['h_cost']); $time = floatval($item['h_time']); $alpha = floatval($item['h_alpha']); $cost = ($amount * $costkg); $cost_hops += $cost; $total_hops += $amount; $moment = $hopuse[$item['h_useat']]; if ($item['h_useat'] == 2) { // Boil $moment = "Koken ".$time." min"; } else if ($item['h_useat'] == 5) { // Dryhop $moment = 'Koudhop '.sprintf("%.0f", $time / 1440).' dagen'; } $ibu = calc_IBU($item['h_useat'], $item['h_form'], $preboil_sg, floatval($row['batch_size']), $mass, $time, $alpha, $row['ibu_method']); $total_ibus += $ibu; if ($amount > 1) $amount = sprintf("%.3f",$amount).' kg'; else $amount = sprintf("%.1f",$amount * 1000).' gr'; $this->Cell($vul,5,$name.' ('.$origin.')',0,0,'L',true); $this->Cell(15,5,sprintf("%.1f%%",$alpha),0,0,'R',true); $this->Cell(12,5,sprintf("%.1f",$ibu),0,0,'R',true); $this->Cell(25,5,$hopform[$item['h_form']],0,0,'L',true); $this->Cell(30,5,$moment,0,0,'L',true); $this->Cell(20,5,$amount,0,0,'R',true); $this->Cell(20,5,sprintf("%.3f",$cost).EURO,0,0,'R',true); $this->Ln(); } $this->SetFillColor(210,245,255); $this->Cell($vul+102,5,'',0,0,'L',false); $this->Cell(20,5,sprintf("%.3f",$cost_hops).EURO,0,0,'R',true); $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableYeasts($row) { global $cost_yeasts; global $svg; $yeastform = array( 'Vloeibaar', 'Droog', 'Schuine buis', 'Slurry', 'Ingevroren', 'Depot' ); $yeastuse = array( 'Hoofdgisting', 'Nagisting', 'Lagering', 'Bottelen' ); $vul = $this->w - $this->rMargin - $this->lMargin - 110; $this->Ln(); $this->AddCol($vul,'Gist','L'); $this->AddCol(15,'Attn','R'); $this->AddCol(25,'Soort','L'); $this->AddCol(30,'Gebruik moment','L'); $this->AddCol(20,'Hoeveel','R'); $this->AddCol(20,'Prijs','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $this->SetFont('Helvetica','',9); $this->SetFillColor(175, 175, 255); $arr = json_decode($row['json_yeasts'], true); foreach($arr as $item) { //foreach element in $arr $name = iconv('UTF-8','windows-1252',$item['y_name']); $laboratory = iconv('UTF-8','windows-1252',$item['y_laboratory']); $product_id = iconv('UTF-8','windows-1252',$item['y_product_id']); $attenuation = floatval($item['y_attenuation']); $cost = floatval($item['y_amount']) * floatval($item['y_cost']); $cost_yeasts += $cost; if ($item['y_use'] == 0) // Primary $svg = $attenuation; 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"; $this->Cell($vul,5,$laboratory.' '.$product_id.' ('.$name.')',0,0,'L',true); $this->Cell(15,5,sprintf("%.1f%%",$attenuation),0,0,'R',true); $this->Cell(25,5,$yeastform[$item['y_form']],0,0,'L',true); $this->Cell(30,5,$yeastuse[$item['y_use']],0,0,'L',true); $this->Cell(20,5,$amount,0,0,'R',true); $this->Cell(20,5,sprintf("%8.3f",$cost).EURO,0,0,'R',true); $this->Ln(); } if ($row['starter_enable'] && $row['prop1_volume']) { $sv = 0; $st = 0; for ($i = 1; $i < 5; $i++) { $pv = "prop".$i."_volume"; if (floatval($row[$pv])) { $st++; if (floatval($row[$pv]) > $sv) $sv = floatval($row[$pv]); } } $this->Cell($vul,5,$st." staps giststarter",0,0,'L',true); $this->Cell(40,5,'',0,0,'R',true); $this->Cell(30,5,"Vooraf",0,0,'L',true); $this->Cell(20,5,sprintf("%.2f",$sv)." L",0,0,'R',true); $this->Cell(20,5,'',0,0,'R',true); $this->Ln(); } $this->SetFillColor(210,245,255); $this->Cell($vul+90,5,'',0,0,'L',false); $this->Cell(20,5,sprintf("%8.3f",$cost_yeasts).EURO,0,0,'R',true); $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableMiscs($row) { global $cost_miscs; $misctype = array( 'Specerij', 'Kruid', 'Smaakstof', 'Klaringsmiddel', 'Brouwzout', 'Gistvoeding', 'Anders' ); $miscuse = array( 'Starter', 'Maischen', 'Koken', 'Hoofdvergisting', 'Nagisting/lagering', 'Bottelen' ); $vul = $this->w - $this->rMargin - $this->lMargin - 95; if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(); $this->AddCol($vul,'Diversen naam','L'); $this->AddCol(25,'Soort','L'); $this->AddCol(30,'Gebruik moment','L'); $this->AddCol(20,'Hoeveel','R'); $this->AddCol(20,'Prijs','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $this->SetFont('Helvetica','',9); $this->SetFillColor(175, 175, 255); $arr = json_decode($row['json_miscs'], true); foreach($arr as $item) { $name = iconv('UTF-8','windows-1252',$item['m_name']); $type = $item['m_type']; $use_use = $item['m_use_use']; $amount = floatval($item['m_amount']) * 1000; $costg = floatval($item['m_cost']) / 1000; $time = floatval($item['m_time']); $aiw = $item['m_amount_is_weight']; $cost = $amount * $costg; $cost_miscs += $cost; if ($type == 4) // Water agent $this->SetFillColor(240,140,130); else if ($type == 3) // Fining $this->SetFillColor(95,180,25); else if (($type == 0) || ($type == 1) || ($type == 2) || ($type == 5)) // Spice, Herb, Flavour, Yeast nutrient $this->SetFillColor(240,250,65); else $this->SetFillColor(210,245,255); 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"); $this->Cell($vul,5,$name,0,0,'L',true); $this->Cell(25,5,$misctype[$type],0,0,'L',true); $this->Cell(30,5,$gebruik,0,0,'L',true); $this->Cell(20,5,$hoeveel,0,0,'R',true); $this->Cell(20,5,sprintf("%8.3f",$cost).EURO,0,0,'R',true); $this->Ln(); } $this->SetFillColor(210,245,255); $this->Cell($vul+75,5,'',0,0,'L',false); $this->Cell(20,5,sprintf("%8.3f",$cost_miscs).EURO,0,0,'R',true); $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableMashs($row) { global $cost_yeasts; global $svg; global $mashkg; $mashtype = array( 'Infusie', 'Verwarming', 'Decoctie' ); $vul = $this->w - $this->rMargin - $this->lMargin - 137; if ($this->GetY() > 250) $this->AddPage(); else $this->Ln(); $this->AddCol($vul,'Maisch stap naam','L'); $this->AddCol(25,'Stap type','L'); $this->AddCol(18,'Start '.DEG.'C','R'); $this->AddCol(18,'Eind '.DEG.'C','R'); $this->AddCol(18,'Rust min','R'); $this->AddCol(18,'Stap min','R'); $this->AddCol(20,'L/Kg','R'); $this->AddCol(20,'Infusie L','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $this->SetFont('Helvetica','',9); $this->SetFillColor(175, 175, 255); $vol = 0; $arr = json_decode($row['json_mashs'], true); foreach($arr as $item) { //foreach element in $arr if ($item['step_type'] == 0) $vol += $item['step_infuse_amount']; if ($mashkg > 0) $thick = $vol / $mashkg; else $thick = 0; $this->Cell($vul,5,$item['step_name'],0,0,'L',true); $this->Cell(25,5,$mashtype[$item['step_type']],0,0,'L',true); $this->Cell(18,5,sprintf("%.1f",$item['step_temp']),0,0,'R',true); $this->Cell(18,5,sprintf("%.1f",$item['end_temp']),0,0,'R',true); $this->Cell(18,5,sprintf("%.0f",$item['step_time']),0,0,'R',true); $this->Cell(18,5,sprintf("%.0f",$item['ramp_time']),0,0,'R',true); $this->Cell(20,5,sprintf("%.2f",$thick),0,0,'R',true); $this->Cell(20,5,sprintf("%.1f",$item['step_infuse_amount']),0,0,'R',true); $this->Ln(); } $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableWaters($row) { $vul = $this->w - $this->rMargin - $this->lMargin - 137; if ($this->GetY() > 250) $this->AddPage(); else $this->Ln(); $this->AddCol($vul,'Water bron','L'); $this->AddCol(20,'Volume','R'); $this->AddCol(15,'Ca','R'); $this->AddCol(15,'Mg','R'); $this->AddCol(15,'Na','R'); $this->AddCol(15,'CaCO3','R'); $this->AddCol(15,'Cl','R'); $this->AddCol(15,'SO4','R'); $this->AddCol(15,'pH','R'); $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->TableHeader(); $this->ProcessingTable=true; $this->SetFont('Helvetica','',9); $this->SetFillColor(120, 255, 250); $this->Cell($vul,5,$row['w1_name'],0,0,'L',true); $this->Cell(20,5,sprintf("%.1f", $row['w1_amount']).' L',0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_calcium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_magnesium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_sodium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_total_alkalinity']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_chloride']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_sulfate']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w1_ph']),0,0,'R',true); $this->Ln(); $this->Cell($vul,5,$row['w2_name'],0,0,'L',true); $this->Cell(20,5,sprintf("%.1f", $row['w2_amount']).' L',0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_calcium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_magnesium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_sodium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_total_alkalinity']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_chloride']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_sulfate']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['w2_ph']),0,0,'R',true); $this->Ln(); $this->Cell($vul,5,'Gemengd water',0,0,'L',true); $this->Cell(20,5,sprintf("%.1f", $row['wg_amount']).' L',0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_calcium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_magnesium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_sodium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_total_alkalinity']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_chloride']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_sulfate']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wg_ph']),0,0,'R',true); $this->Ln(); $this->Cell($vul,5,'Behandeld water',0,0,'L',true); $this->Cell(20,5,'',0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_calcium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_magnesium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_sodium']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_total_alkalinity']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_chloride']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_sulfate']),0,0,'R',true); $this->Cell(15,5,sprintf("%.1f", $row['wb_ph']),0,0,'R',true); $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function TableSummary($row) { global $pSugar; global $pCara; global $svg; global $colorw; global $cost_fermentables; global $cost_hops; global $cost_miscs; global $cost_yeasts; global $mashkg; $colormethod = array( 'Morey', 'Mosher', 'Daniels' ); $ibumethod = array( 'Tinseth', 'Rager', 'Daniels' ); /* 2 Columns */ if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(); $vul = $this->w - $this->rMargin - $this->lMargin - 170; $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->SetFont('Helvetica','B',9); $this->SetX($this->TableX); $this->SetFillColor(255,150,100); $this->Cell(0, 5, 'Recept samenvatting',0,0,'C',true); $this->Ln(); $this->SetFont('Helvetica','',9); $this->SetFillColor(210,245,255); $mashtime = 0; $mashtemp = 0; $mash_infuse = 0; $arr = json_decode($row['json_mashs'], true); foreach($arr as $item) { if ($item['step_type'] == 0) { // infusion $mash_infuse += floatval($item['step_infuse_amount']); } if ($item['step_temp'] < 75) { // ignore mashout temps $mashtime += floatval($item['step_time']); $mashtemp += floatval($item['step_time']) * floatval($item['step_temp']); } } $mashtemp = $mashtemp / $mashtime; if (($mashkg > 0) && ($mash_infuse > 0) && ($mashtime > 0) && ($mashtemp > 0)) { $row['est_fg'] = estimate_fg($pSugar, $pCara, $mash_infuse / $mashkg, $mashtime, $mashtemp, $svg, $row['est_og']); } else { $row['est_fg'] = estimate_fg($pSugar, $pCara, 0, 0, 0, $svg, $row['est_og']); } $this->SetX($this->TableX); $this->Cell(35,5,'Start SG',0,0,'L',true); $this->Cell(25,5,sprintf("%.3f",$row['est_og']),0,0,'L',true); $this->Cell(25,5,'('.sprintf("%.3f",$row['st_og_min']).' - '.sprintf("%.3f",$row['st_og_max']).')',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Eind SG',0,0,'L',true); $this->Cell(25,5,sprintf("%.3f",$row['est_fg']),0,0,'L',true); $this->Cell(25,5,'('.sprintf("%.3f",$row['st_fg_min']).' - '.sprintf("%.3f",$row['st_fg_max']).')',0,0,'L',true); $this->Ln(); $row['est_abv'] = abvol($row['est_og'], $row['est_fg']); $this->SetX($this->TableX); $this->Cell(35,5,'Geschat alcohol',0,0,'L',true); $this->Cell(25,5,sprintf("%.1f",$row['est_abv']).'%',0,0,'L',true); $this->Cell(25,5,'('.sprintf("%.1f",$row['st_abv_min']).' - '.sprintf("%.1f",$row['st_abv_max']).'%)',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'CO2',0,0,'L',true); $this->Cell(25,5,sprintf("%.1f",$row['est_carb']).'%',0,0,'L',true); $this->Cell(25,5,'('.sprintf("%.1f",$row['st_carb_min']).' - '.sprintf("%.1f",$row['st_carb_max']).'%)',0,0,'L',true); $this->Ln(); $row['est_color'] = kw_to_ebc($row['color_method'], $colorw); $this->SetX($this->TableX); $this->Cell(35,5,'Kleur ('.$colormethod[$row['color_method']].')',0,0,'L',true); $beercolor = ebc_to_color($row['est_color']); if ($row['est_color'] > 30) $this->SetTextColor(250); $this->SetFillColor($beercolor[0],$beercolor[1],$beercolor[2]); $this->Cell(25,5,$row['est_color'].' EBC',0,0,'L',true); $this->Cell(25,5,'('.$row['st_color_min'].' - '.$row['st_color_max'].' EBC)',0,0,'L',true); $this->SetTextColor(0); $this->SetFillColor(210,245,255); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Bitterheid ('.$ibumethod[$row['ibu_method']].')',0,0,'L',true); $this->Cell(25,5,sprintf("%.0f",$row['est_ibu']).' IBU',0,0,'L',true); $this->Cell(25,5,'('.$row['st_ibu_min'].' - '.$row['st_ibu_max'].' IBU)',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $cost_total = $cost_fermentables + $cost_hops + $cost_miscs + $cost_yeasts; $this->Cell(35,5,'Kosten',0,0,'L',true); $this->Cell(25,5,sprintf("%.2f",$cost_total).EURO,0,0,'L',true); $this->Cell(25,5,sprintf("%.2f",$cost_total/$row['batch_size']).EURO.' / liter',0,0,'L',true); // calorieen $this->ProcessingTable=false; $this->cMargin=$cMargin; $this->aCols=array(); $this->Ln(); } function Checkheader($text) { $this->SetFont('Arial','B',10); $this->Cell(0, 4,$text,0,0,'L',true); $this->SetFont('Arial','',10); $this->Ln(6); } function Checkline($text) { $this->Cell(2, 4,' ',0,0,'L',true); $this->Cell(4, 4,' ',1,0,'L',true); $this->Cell(0, 4,' '.$text,0,1,'L',true); $this->Ln(1); } function Checklist($row) { global $my_grain_absorbtion; global $my_brix_correction; $mashwater = 0; $numsalts = 0; $this->AddPage(); $this->SetFillColor(255,255,255); if ($row['starter_enable'] && $row['prop1_volume']) { $this->Checkheader('Giststarter maken'); $days = 0; $last = 0; for ($i = 1; $i < 5; $i++) { $pt = "prop".$i."_type"; $pv = "prop".$i."_volume"; if (floatval($row[$pv])) { $last = $i; if ($row[$pt] == 0) $days += 2; else if ($row[$pt] == 1) $days += 4; else $days += 6; } } $this->Checkline("begin ongeveer ".$days." dagen voor de brouwdag met de giststarter"); for ($i = 1; $i < 5; $i++) { $pt = "prop".$i."_type"; $pv = "prop".$i."_volume"; if (floatval($row[$pv])) { $s = "Starter stap ".$i.", van ".sprintf("%.3f",floatval($row[$pv])); $s .= " liter maken met SG ".sprintf("%.3f",floatval($row['starter_sg'])); $this->Checkline($s); if ($row[$pt] == 0) { $s = "ongeveer 24 uur op een magneetroerder"; } else if ($row[$pt] == 1) { $s = "enkele dagen regelmatig schudden"; } else { $s = "bijna een week rustig laten staan"; } $s .= " tot er voldoende gist is"; $this->Checkline($s); if ($i < $last) { $this->Checkline("starter minstens 24 uur in de koeling laten uitzakken"); $this->Checkline("starter uit de koelkast halen en afgieten"); } else { $this->Checkline("starter in de koeling zetten tot de brouwdag"); $this->Checkline("starter op de brouwdag uit de koelkast halen en afgieten"); } } } $this->Ln(5); } $this->Checkheader('Water en -behandeling'); if ($row['w1_name']) { $this->Checkline(sprintf("%.1f",floatval($row['w1_amount'])).' liter water '.$row['w1_name']); $mashwater += floatval($row['w1_amount']); } if ($row['w2_name']) { $this->Checkline(sprintf("%.1f",floatval($row['w2_amount'])).' liter water '.$row['w2_name']); $mashwater += floatval($row['w2_amount']); } $arr = json_decode($row['json_miscs'], true); foreach($arr as $item) { if ($item['m_type'] == 4) { // Only the water agents $unit = ($item['m_amount_is_weight']) ? " gram ":" ml "; $this->Checkline(sprintf("%.1f",floatval($item['m_amount'] * 1000)).$unit.$item['m_name']); $numsalts++; } } $this->Ln(5); $this->Checkheader('Mout afwegen en schroten'); $arr = json_decode($row['json_fermentables'], true); foreach($arr as $item) { if ($item['f_added'] == 0) { // to mash $s = sprintf("%.3f",floatval($item['f_amount'])).' kg '; $s .= iconv('UTF-8','windows-1252',$item['f_name']); $s .= ' ('.iconv('UTF-8','windows-1252',$item['f_supplier']).')'; $this->Checkline($s); } } $this->Checkline('mout schroten'); $this->Ln(5); $this->Checkheader('Maischen'); $mvol = 0; $msugars = 0; // mash sugars $grainabsorbtion = 0; $arr = json_decode($row['json_mashs'], true); if (count($arr) > 0) { $loop = 0; foreach($arr as $item) { if ($item['step_type'] == 0) $mvol += $item['step_infuse_amount']; // We need this later. if ($loop == 0) { if ($item['step_type'] == 0) $l = $item['step_infuse_amount']; else $l = $mashwater; $s = sprintf("%.1f",$l).' liter water opwarmen tot '; $s .= sprintf("%.1f",$item['step_temp']).' '.DEG.'C ('; $s .= sprintf("%.1f",kettle_cm($l,$row['eq_tun_volume'],$row['eq_tun_height'])); $s .= ' cm onder de rand)'; $this->Checkline($s); if ($numsalts > 0) $this->Checkline('brouwzouten en -zuren toevoegen'); $this->Checkline('mout storten en inmaischen'); $hops = json_decode($row['json_hops'], true); foreach($hops as $item2) { if ($item2['h_useat'] == 0) { $s = sprintf("%.1f",$item2['h_amount']*1000).' gr '; $s .= iconv('UTF-8','windows-1252',$item2['h_name']).' toevoegen'; $this->Checkline($s); } } $this->Checkline($item['step_time'].' min. bij '.$item['step_temp'].' '.DEG.'C'); $this->Checkline('pH meten en bijstellen (doel pH beslag: '.sprintf("%.1f",$row['mash_ph']).' pH)'); } else { if ($item['step_type'] == 0) { // Infusion $s = 'toevoegen '.$item['step_infuse_amount'].' liter water van xx '.DEG.'C'; } else if ($item['step_type'] == 1) { // Direct heat $s = 'opwarmen tot '.$item['step_temp'].' '.DEG.'C'; } else { // Decoction $s = 'uitnemen, opwarmen, koken en terugstorten van '.$item['step_infuse_amount'].' liter deelbeslag'; } $this->Checkline($s); $this->Checkline($item['step_time'].' min. bij '.$item['step_temp'].' '.DEG.'C'); } $loop++; } $est_mash_sg = 0; $ferms = json_decode($row['json_fermentables'], true); foreach($ferms as $item) { if ($item['f_added'] == 0) { $d = $item['f_amount'] * ($item['f_yield'] / 100) * (1 - $item['f_moisture'] / 100); $mvol += $item['f_amount'] * $item['f_moisture'] / 100; $grainabsorbtion += $my_grain_absorbtion * $item['f_amount']; $msugars += $d; } } $sugardensity = 1.611; $v = $msugars / $sugardensity + $mvol; $plato = 1000 * $msugars / ($v * 10); // deg. Plato $mash_sg = plato_to_sg($plato); $this->Checkline('doel SG eind maischen: '.density_str($mash_sg)); } if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(5); $acidtype = array( 'Melkzuur', 'Zoutzuur', 'Fosforzuur', 'Zwavelzuur' ); $this->Checkheader('Filteren en spoelen'); $s = sprintf("%.1f",$row['sparge_volume']).' liter spoelwater opwarmen tot '.sprintf("%.1f",$row['sparge_temp']).' '.DEG.'C'; $this->Checkline($s); $s = 'spoelwater aanzuren tot pH <= '.sprintf("%.1f",$row['sparge_ph']).' met '; $s .= sprintf("%.1f",$row['sparge_acid_amount']*1000).' ml. '.$acidtype[$row['sparge_acid_type']]; $this->Checkline($s); $spoelw = ($row['boil_size'] - $mashwater + $grainabsorbtion + $row['eq_lauter_deadspace']) * 1.03; // A small heat correction $this->Checkline('spoelen met ongeveer '.sprintf("%.1f",$spoelw).' liter spoelwater'); $s = 'doelvolume in kookketel: '.sprintf("%.1f",$row['boil_size'] * 1.04).' liter ('; $s .= sprintf("%.1f",kettle_cm($row['boil_size'] * 1.04,$row['eq_kettle_volume'],$row['eq_kettle_height'])).' cm onder de rand)'; $this->Checkline($s); $pre_sg = estimate_sg($msugars * floatval($row['efficiency']) / 100,floatval($row['boil_size'])); $this->Checkline('doel SG in kookketel: '.density_str($pre_sg)); $hops = json_decode($row['json_hops'], true); foreach($hops as $item2) { if ($item2['h_useat'] == 1) { $s = sprintf("%.1f",$item2['h_amount']*1000).' gr '; $s .= iconv('UTF-8','windows-1252',$item2['h_name']).' toevoegen na het spoelen'; $this->Checkline($s); } } if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(5); $this->Checkheader('Koken'); $this->Checkline('totale kooktijd: '.$row['boil_time'].' min.'); for ($i = $row['boil_time']; $i >= 0; $i--) { if ($i == 10) { $ferms = json_decode($row['json_fermentables'], true); foreach($ferms as $item1) { if ($item1['f_added'] == 1) { $s = sprintf("%.3f",$item1['f_amount']).' kg '; $s .= iconv('UTF-8','windows-1252',$item1['f_name']).' bij 10 minuten voor einde koken'; $this->Checkline($s); } } if ($row['brew_cooling_method'] == 1) $this->Checkline('Plaats dompelkoeler bij 10 minuten voor einde koken'); } $hops = json_decode($row['json_hops'], true); foreach($hops as $item2) { if (($item2['h_useat'] == 2 || $item2['h_useat'] == 3) && ($item2['h_time'] == $i)) { $s = sprintf("%.1f",$item2['h_amount']*1000).' gr '; $s .= iconv('UTF-8','windows-1252',$item2['h_name']).' bij '; if ($i > 0) $s .= $i.' minuten voor einde koken'; else $s .= 'vlamuit'; $this->Checkline($s); } } $miscs = json_decode($row['json_miscs'], true); foreach($miscs as $item3) { if ($item3['m_use_use'] == 2 && $item3['m_time'] == $i) { $s = sprintf("%.1f",$item3['m_amount']*1000).' gr '; $s .= iconv('UTF-8','windows-1252',$item3['m_name']).' bij '; if ($i > 0) $s .= $i.' minuten voor einde koken'; else $s .= 'vlamuit'; $this->Checkline($s); } } } $s = 'doelvolume einde koken: '.sprintf("%.1f",$row['batch_size']*1.04).' liter ('; $s .= sprintf("%.1f",kettle_cm($row['batch_size']*1.04,$row['eq_kettle_volume'],$row['eq_kettle_height'])); $s .= ' cm onder de rand)'; $this->Checkline($s); $this->Checkline('doel SG einde koken: '.density_str($row['est_og'])); if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(5); if (($row['brew_whirlpool9'] + $row['brew_whirlpool7'] + $row['brew_whirlpool6'] + $row['brew_whirlpool2']) > 0) { $this->Checkheader('Whirlpool en koelen'); if ($row['brew_whirlpool9'] > 0) { $s = 'Whirlpool voor '.$row['brew_whirlpool9'].' min. Temperatuur boven 85 '.DEG.'C houden'; $this->Checkline($s); } if ($row['brew_whirlpool7'] > 0) { $this->Checkline('koelen tot 79 '.DEG.'C'); $s = 'Whirlpool voor '.$row['brew_whirlpool7'].' min. Temperatuur tussen 72 en 79 '.DEG.'C houden'; $this->Checkline($s); } if ($row['brew_whirlpool6'] > 0) { $this->Checkline('koelen tot 66 '.DEG.'C'); $s = 'Whirlpool voor '.$row['brew_whirlpool6'].' min. Temperatuur tussen 60 en 66 '.DEG.'C houden'; $this->Checkline($s); } $this->Checkline('koelen tot '.sprintf("%.1f",$row['brew_cooling_to']).' '.DEG.'C'); if ($row['brew_whirlpool2'] > 0) { $s = 'Whirlpool voor '.$row['brew_whirlpool2'].' min.'; $this->Checkline($s); } } else { $this->Checkheader('Koelen'); $this->Checkline('koelen tot '.sprintf("%.1f",$row['brew_cooling_to']).' '.DEG.'C'); } $this->Checkline('gistvat ontsmetten en evt. pomp en slangen ontsmetten'); $this->Checkline('wort naar gistvat overbrengen'); if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(5); $this->Checkheader('Gist enten'); $dry = 0; $yeasts = json_decode($row['json_yeasts'], true); foreach ($yeasts as $item) { if ($item['y_use'] == 0) { // primary if ($item['y_form'] == 0) { // Liquid $this->Checkline($item['y_amount'].' pak '.$item['y_product_id'].', '.$item['y_name'].' gist'); } else if ($item['y_form'] == 1) { // Dry $s = sprintf("%.1f",$item['y_amount']*1000).' gram '.$item['y_product_id'].', '.$item['y_name']; $s .= ' gist'; $dry += $item['y_amount']*10000; $this->Checkline($s); } else { // Slant/Culture/Frozen/Bottle $s = sprintf("%.0f",$item['y_amount']*1000).' ml '.$item['y_product_id'].', '.$item['y_name'].' gist'; $this->Checkline($s); } } } if ($dry > 0) { $this->Checkline(' gist hydrateren in '.$dry.' ml gedesinfecteerd water van 32 '.DEG.'C'); $this->Checkline(' 15 minuten laten staan bij 32 '.DEG.'C'); $this->Checkline(' gistmengsel voorzichtig roeren en laten afkoelen tot temperatuur wort'); $this->Checkline(' gist toevoegen'); $this->Checkline('Of'); $this->Checkline(' gist rechtstreeks over het wort strooien'); } else { if ($row['starter_enable'] && $row['prop1_volume']) $this->Checkline('giststarter toevoegen'); else $this->Checkline('gist toevoegen'); } if ($row['brew_fermenter_extrawater'] > 0) $this->Checkline(sprintf("%.1f", $row['brew_fermenter_extrawater']).' liter water toevoegen in gistvat'); if ($row['brew_aeration_type'] > 0) { $s = 'wort '.$row['brew_aeration_time'].' minuten beluchten met '; $s .= ($row['brew_aeration_type'] == 1) ? "lucht":"zuurstof"; $this->Checkline($s); } if ($this->GetY() > 200) $this->AddPage(); else $this->Ln(5); $this->Checkheader('Vergisting starten'); $this->Checkline('klimaatkast instellen op '.sprintf("%.1f",$row['brew_cooling_to']).' '.DEG.'C'); // 'Toevoegingen tijdens vergisting' // 'Toevoegingen tijdens nagisting/lagering' // fermentables & hops & miscs verdelen over primary/secondary/teriary // 'Toevoegingen tijdens bottelen/op fust zetten' } function Brewday($row) { global $my_brix_correction; global $my_grain_absorbtion; if ($this->GetY() > 180) $this->AddPage(); else $this->Ln(10); $vul = $this->w - $this->rMargin - $this->lMargin - 170; $cMargin=$this->cMargin; $this->cMargin=2; $this->TableX=$this->lMargin; $this->SetFont('Helvetica','B',9); $this->SetX($this->TableX); $this->SetFillColor(255,150,100); $this->Cell(0, 5, 'Brouwdag gegevens',0,0,'C',true); $this->Ln(); $this->SetFont('Helvetica','',9); $this->SetFillColor(210,245,255); $this->SetX($this->TableX); $this->Cell(35,5,'Datum start',0,0,'L',true); $this->Cell(50,5,$row['brew_date_start'],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Maisch zuurgraad',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_mash_ph']).' pH',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Datum eind',0,0,'L',true); $this->Cell(50,5,$row['brew_date_end'],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Maisch densiteit',0,0,'L',true); $this->Cell(50,5,density_str(floatval($row['brew_mash_sg'])),0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(85+$vul,5,'',0,0,'L',false); $this->Cell(35,5,'Maisch rendement',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_mash_efficiency']))."%",0,0,'L',true); $this->Ln(7); $this->SetX($this->TableX); $this->Cell(35,5,'Voor koken zuurgraad',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_preboil_ph'])." pH",0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Na koken zuurgraad',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_aboil_ph'])." pH",0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Voor koken densiteit',0,0,'L',true); $this->Cell(50,5,density_str(floatval($row['brew_preboil_sg'])),0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Na koken densiteit',0,0,'L',true); $this->Cell(50,5,density_str(floatval($row['brew_aboil_sg'])),0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Voor koken volume',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_preboil_volume'])." liter",0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Na koken volume',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_aboil_volume'])." liter",0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Voor koken rendement',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_preboil_efficiency']))."%",0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Na koken rendement',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_aboil_efficiency']))."%",0,0,'L',true); $this->Ln(7); $coolingtype = array( '-', 'Dompelkoeler', 'Tegenstroomkoeler', 'Au bain marie', 'Laten afkoelen' ); $this->SetX($this->TableX); $this->Cell(35,5,'Spoelwater temperatuur',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_sparge_temperature']).DEG.'C',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Koel methode',0,0,'L',true); $this->Cell(50,5,$coolingtype[$row['brew_cooling_method']],0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Spoelwater geschat',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_sparge_est'])).' liter',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Koel temperatuur',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_cooling_to'])).DEG.'C',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Spoelwater zuurgraad',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", $row['brew_sparge_ph']).' pH',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Koel tijdsduur',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", floatval($row['brew_cooling_time'])).' minuten',0,0,'L',true); $this->Ln(7); $this->SetX($this->TableX); $this->Cell(35,5,'Whirlpool +85'.DEG.'C',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", $row['brew_whirlpool9']).' minuten',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Koeler & trub verlies',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_fermenter_tcloss'])).' liter',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Whirlpool 72..79'.DEG.'C',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", $row['brew_whirlpool7']).' minuten',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Extra water in gistvat',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_fermenter_extrawater'])).' liter',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Whirlpool 60..66'.DEG.'C',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", $row['brew_whirlpool6']).' minuten',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Volume naar gistvat',0,0,'L',true); $this->Cell(50,5,sprintf("%.1f", floatval($row['brew_fermenter_volume'])).' liter',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Whirlpool koud',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", $row['brew_whirlpool2']).' minuten',0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Densiteit in gistvat',0,0,'L',true); $this->Cell(50,5,density_str(floatval($row['brew_fermenter_sg'])),0,0,'L',true); $this->Ln(7); $aerationtype = array( 'Geen', 'Lucht', 'Zuurstof' ); $this->SetX($this->TableX); $this->Cell(35,5,'Beluchten met',0,0,'L',true); $this->Cell(50,5,$aerationtype[$row['brew_aeration_type']],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Kleur in gistvat',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", floatval($row['brew_fermenter_color'])).' EBC',0,0,'L',true); $this->Ln(); $this->SetX($this->TableX); $this->Cell(35,5,'Beluchten snelheid/tijd',0,0,'L',true); $this->Cell(50,5,$row['brew_aeration_speed'].'/'.$row['brew_aeration_time'],0,0,'L',true); $this->Cell($vul,5,'',0,0,'L',false); $this->Cell(35,5,'Bitterheid in gistvat',0,0,'L',true); $this->Cell(50,5,sprintf("%.0f", floatval($row['brew_fermenter_ibu'])).' IBU',0,0,'L',true); $this->Ln(); } } class PDF extends PDF_MySQL_Table { function Header() { global $row; global $prdate; $stage = array( 'Plan', 'Wacht', 'Brouwen', 'Hoofdgisting', 'Nagisting', 'Lagering', 'Afvullen', 'Hergisten', 'Rijpen', 'Proeven', 'Gereed', 'Afgesloten' ); $this->Image('images/logo.png',10,10,30); // Title $this->SetFont('Helvetica','B',18); $this->SetX(45); $this->Cell(0,8,$row['code'].' '.$row['name'],0,1,'L'); $this->Ln(1); $this->SetFont('Helvetica','',10); $this->SetX(45); $this->Cell(17,5,'Datum:',0,0,'L'); $this->Cell(0,5,$prdate,0,1,'L'); $this->SetX(45); $this->Cell(17,5,'Stijl:',0,0,'L'); $this->Cell(0,5,$row['st_name'],0,1,'L'); $this->SetX(45); $this->Cell(17,5,'Fase:',0,0,'L'); $this->Cell(0,5,$stage[$row['stage']],0,1,'L'); $this->Ln(6); // Ensure table header is printed parent::Header(); } } /* * Generate PDF from recipe data */ $pdf = new PDF(); $pdf->AddPage(); $pdf->TableGlobal($row); $pdf->TableFermentables($row); $pdf->TableHops($row); $pdf->TableYeasts($row); $pdf->TableMiscs($row); $pdf->TableMashs($row); $pdf->TableWaters($row); $pdf->TableSummary($row); if (strlen($row['notes'])) { if ($pdf->GetY() > 200) $pdf->AddPage(); else $pdf->Ln(10); $pdf->SetFillColor(255,150,100); $pdf->SetFont('Helvetica','B',9); $pdf->Cell(0, 5, 'Recept opmerkingen',0,0,'C',true); $pdf->Ln(); $pdf->SetFont('Helvetica','',9); $pdf->SetFillColor(210,245,255); $pdf->MultiCell(0,4,$row['notes'],0,'L',true); } if ($row['stage'] > 2) { $pdf->Brewday($row); } if ($row['stage'] > 3) { // Vergisting gegevens } if ($row['stage'] > 6) { // Package report } if ($row['stage'] > 9) { // Taste notes } if ($row['stage'] == 1 || $row['stage'] == 2) { $pdf->Checklist($row); } $pdf->Output();