www/prod_checklist.php

Wed, 04 Mar 2020 10:48:21 +0100

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 04 Mar 2020 10:48:21 +0100
changeset 622
39902353b159
parent 616
2cbf21bb9bdc
child 624
7509f9ed5686
permissions
-rw-r--r--

Workaround for hang during startup. Changed order of displayed fields on the yeast tab. Tooltip text changes. More decimals on the checklist for misc ingredients. More decimals for the starter on product print.

<?php
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/global.inc.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/formulas.php');
require_once($_SERVER['DOCUMENT_ROOT'].'/includes/constants.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);

date_default_timezone_set('Europe/Amsterdam');
$prdate = date(DATE_RFC2822);


class PDF_MySQL_Table extends FPDF
{
	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 Checksplit($moment, $row) {
		global $splitat;
		if ($row['divide_type'] && $row['divide_type'] == $moment) {
			$this->Ln(2);
			$this->SetFont('Helvetica','B',14);
               		$this->Cell(0, 4,$splitat[$row['divide_type']]." splits de batch hier!",0,0,'C',true);
               		$this->SetFont('Arial','',10);
			$this->AddPage();
			return true;
		}
		return false;
	}

	function Checklist($row) {

		global $my_grain_absorbtion;
		global $my_brix_correction;
		global $acidtype;
		$mashwater = 0;
		$numsalts = 0;
		$factor = 1 / $row['divide_factor'];

		$this->AddPage();
		$this->SetFillColor(255,255,255);

		$ferms = json_decode($row['json_fermentables'], true);
		$hops = json_decode($row['json_hops'], true);
		$miscs = json_decode($row['json_miscs'], true);
		$yeasts = json_decode($row['json_yeasts'], true);

		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'] * $factor)).' liter water '.$row['w1_name']);
			$mashwater += floatval($row['w1_amount'] * $factor);
		}
		if ($row['w2_name']) {
			$this->Checkline(sprintf("%.1f",floatval($row['w2_amount'] * $factor)).' liter water '.$row['w2_name']);
			$mashwater += floatval($row['w2_amount'] * $factor);
		}
		foreach($miscs as $item) {
			if ($item['m_type'] == 4) {	// Only the water agents
				$unit = ($item['m_amount_is_weight']) ? " gr ":" ml ";
				$this->Checkline(sprintf("%.2f",floatval($item['m_amount'] * 1000 * $factor)).$unit.$item['m_name']);
				$numsalts++;
			}
		}
		$this->Ln(5);

		$this->Checkheader('Mout afwegen en schroten');
		foreach($ferms as $item) {
			if ($item['f_added'] == 0) {	// to mash
				$s = sprintf("%.3f",floatval($item['f_amount'] * $factor)).' 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'] * $factor;	// We need this later.
				if ($loop == 0) {
					if ($item['step_type'] == 0)
						$l = $item['step_infuse_amount'] * $factor;
					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');
					foreach($hops as $item2) {
						if ($item2['h_useat'] == 0) {
							$s = sprintf("%.1f",$item2['h_amount']*1000 * $factor).' gr `';
							$s .= iconv('UTF-8','windows-1252',$item2['h_name']).'` toevoegen';
							$this->Checkline($s);
						}
					}
					foreach($miscs as $item3) {
						if ($item3['m_use_use'] == 1 && $item3['m_type'] != 4) {	// Only if not a water agent
							$unit = ($item3['m_amount_is_weight']) ? " gr ":" ml ";
							$s = sprintf("%.2f",$item3['m_amount']*1000 * $factor).$unit.'`';
							$s .= iconv('UTF-8','windows-1252',$item3['m_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'] * $factor).' 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']*$factor).' liter deelbeslag';
					}
					$this->Checkline($s);
					$this->Checkline($item['step_time'].' min. bij '.$item['step_temp'].' '.DEG.'C');
				}
				$loop++;
			}
			$est_mash_sg = 0;
			foreach($ferms as $item) {
				if ($item['f_added'] == 0) {
					$d = $item['f_amount'] * $factor * ($item['f_yield'] / 100) * (1 - $item['f_moisture'] / 100);
					$mvol += $item['f_amount'] * $factor * $item['f_moisture'] / 100;
					$grainabsorbtion += $my_grain_absorbtion * $item['f_amount'] * $factor;
					$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);

		$this->Checkheader('Filteren en spoelen');
		$s = sprintf("%.1f",$row['sparge_volume'] * $factor).' 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("%.2f",$row['sparge_acid_amount']*1000*$factor).' ml. '.$acidtype[$row['sparge_acid_type']];
		$this->Checkline($s);
		$spoelw = (($row['boil_size']*$factor) - $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'] * $factor * 1.04).' liter (';
		$s .= sprintf("%.1f",kettle_cm($row['boil_size'] * $factor * 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'] * $factor));
		$this->Checkline('doel SG in kookketel: '.density_str($pre_sg));
		foreach($hops as $item2) {
			if ($item2['h_useat'] == 1) {
				$s = sprintf("%.1f",$item2['h_amount']*1000*$factor).' gr `';
				$s .= iconv('UTF-8','windows-1252',$item2['h_name']).'` toevoegen na het spoelen';
				$this->Checkline($s);
			}
		}
		if ($this->Checksplit(1, $row))
			$factor = 1;
		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) {
				foreach($ferms as $item1) {
					if ($item1['f_added'] == 1) {
						$s = sprintf("%.3f",$item1['f_amount']*$factor).' 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');
			}
			foreach($hops as $item2) {
				if (($item2['h_useat'] == 2 || $item2['h_useat'] == 3) && ($item2['h_time'] == $i)) {
					$s = sprintf("%.2f",$item2['h_amount']*1000*$factor).' 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);
				}
			}
			foreach($miscs as $item3) {
				if ($item3['m_use_use'] == 2 && $item3['m_time'] == $i) {
					$unit = ($item3['m_amount_is_weight']) ? " gr ":" ml ";
					$s = sprintf("%.2f",$item3['m_amount']*1000*$factor).$unit.'`';
					$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']*$factor*1.04).' liter (';
		$s .= sprintf("%.1f",kettle_cm($row['batch_size']*$factor*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_og3']));
		if ($this->Checksplit(2, $row))
			$factor = 1;
		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);
			}
			foreach($hops as $item2) {
				if ($item2['h_useat'] == 4) {
					$s = sprintf("%.1f",$item2['h_amount']*1000*$factor).' gr `';
					$s .= iconv('UTF-8','windows-1252',$item2['h_name']).'` voor ';
					$s .= $item2['h_time'].' minuten in de whirlpool';
					$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->Checksplit(3, $row))
			$factor = 1;
		if ($this->GetY() > 240)
			$this->AddPage();
		else
			$this->Ln(5);

		$climate = $row['brew_cooling_to'];
		$this->Checkheader('Gist enten');
		$dry = 0;
		foreach ($yeasts as $item) {
			$name       = iconv('UTF-8','windows-1252',$item['y_name']);
                        $product_id = iconv('UTF-8','windows-1252',$item['y_product_id']);
			if ($item['y_use'] == 0) { // primary
				if ($item['y_form'] == 0) { // Liquid
					$this->Checkline(($item['y_amount']*$factor).' pak '.$product_id.', '.$name.' gist');
				} else if ($item['y_form'] == 1 || $item['y_form'] == 6) { // Dry
					$s = sprintf("%.1f",$item['y_amount']*$factor*1000).' gram '.$product_id.', '.$name;
					$s .= ' gist';
					$dry += $item['y_amount']*$factor*10000;
					$this->Checkline($s);
				} else { // Slant/Culture/Frozen/Bottle
					$s = sprintf("%.0f",$item['y_amount']*$factor*1000).' ml '.$product_id.', '.$name.' gist';
					$this->Checkline($s);
				}
				if ($item['y_type'] == 6 && floatval($item['y_pitch_temperature']) > 0) {
					$s = 'Gist enten bij ' . sprintf("%.1f",floatval($item['y_pitch_temperature'])) . DEG . 'C';
					$this->Checkline($s);
					$climate = $item['y_pitch_temperature'];
				}
			}
		}
		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']*$factor).' 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",$climate).' '.DEG.'C');

		/*
		 * During primary fermentation: fermentables, misc
		 */
		$lines = 0;
                foreach($ferms as $item1) {
                        if ($item1['f_added'] == 2)
				$lines++;
		}
                foreach($miscs as $item3) {
                	if ($item3['m_use_use'] == 3)
				$lines++;
		}
		if ($lines) {
			if ($this->GetY() > (270 - (5 * $lines)))
                        	$this->AddPage();
                	else
                        	$this->Ln(5);
			$this->Checkheader('Hoofdgisting');
		}
		foreach($ferms as $item1) {
                        if ($item1['f_added'] == 2) {
				$s = sprintf("%.3f",$item1['f_amount']*$factor).' kg `';
                                $s .= iconv('UTF-8','windows-1252',$item1['f_name']).'` op dag 3 of 4 toevoegen';
                                $this->Checkline($s);
			}
                }
                foreach($miscs as $item3) {
                        if ($item3['m_use_use'] == 3) {
				$unit = ($item3['m_amount_is_weight']) ? " gr ":" ml ";
				$s = sprintf("%.1f",$item3['m_amount']*$factor*1000).$unit.'`';
                                $s .= iconv('UTF-8','windows-1252',$item3['m_name']).'` op dag 3 of 4 toevoegen';
                                $this->Checkline($s);
			}
                }
		if ($this->Checksplit(4, $row))
			$factor = 1;

		/*
		 * During secondary fermentation: yeast
		 */
		$lines = 0;
                foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 1)
				$lines++;
			if ($item4['y_harvest_time'] > 0)
				$lines++;
		}
		if ($lines) {
			if ($this->GetY() > (270 - (5 * $lines)))
                        	$this->AddPage();
                	else
                        	$this->Ln(5);
                        $this->Checkheader('Nagisting');
                }
		foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 1) {
				$name       = iconv('UTF-8','windows-1252',$item4['y_name']);
                                $product_id = iconv('UTF-8','windows-1252',$item4['y_product_id']);
				if ($item4['y_form'] == 0) { // Liquid
                                        $this->Checkline(($item4['y_amount']*$factor).' pak '.$product_id.', '.$name.' gist (eventueel met starter)');
                                } else if ($item['y_form'] == 1) { // Dry
                                        $s = sprintf("%.1f",$item4['y_amount']*$factor*1000).' gram '.$product_id.', '.$name;
                                        $s .= ' gist';
                                        $this->Checkline($s);
                                } else { // Slant/Culture/Frozen/Bottle
                                        $s = sprintf("%.0f",$item4['y_amount']*$factor*1000).' ml '.$product_id.', '.$name.' gist (eventueel met starter)';
                                        $this->Checkline($s);
                                }
			}
			if ($item4['y_harvest_time'] > 0) {
				$s = 'Na ' . $item4['y_harvest_time'] . ' uur gist oogsten vanaf de ';
				if ($item4['y_harvest_top'] > 0)
					$s .= 'bovenzijde';
				else
					$s .= 'bodem';
				$this->Checkline($s);
			}
                }
		if ($this->Checksplit(5, $row))
			$factor = 1;

		/*
		 * During tertiary fermentation: fermentables, hop, yeast, misc
		 */
		$lines = 0;
		foreach($ferms as $item1) {
                        if ($item1['f_added'] == 3)
                                $lines++;
                }
                foreach($hops as $item2) {
                        if ($item2['h_useat'] == 5)
				$lines++;
		}
                foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 2)
                                $lines++;
                }
                foreach($miscs as $item3) {
                        if ($item3['m_use_use'] == 4)
                                $lines++;
                }
		if ($lines) {
			if ($this->GetY() > (270 - (5 * $lines)))
                                $this->AddPage();
                        else
                                $this->Ln(5);
                        $this->Checkheader('Lagering');
                }
		foreach($ferms as $item1) {
                        if ($item1['f_added'] == 3) {
                                $s = sprintf("%.3f",$item1['f_amount']*$factor).' kg `';
                                $s .= iconv('UTF-8','windows-1252',$item1['f_name']).'` toevoegen';
                                $this->Checkline($s);
                        }
                }
		foreach($hops as $item2) {
                        if ($item2['h_useat'] == 5) {
                                $s = sprintf("%.1f",$item2['h_amount']*$factor*1000).' gr `';
                                $s .= iconv('UTF-8','windows-1252',$item2['h_name']).'` voor ';
				$s .= sprintf("%.0f",$item2['h_time']/1440).' dagen toevoegen';
                                $this->Checkline($s);
                        }
                }
		foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 2) {
				$name       = iconv('UTF-8','windows-1252',$item4['y_name']);
                                $product_id = iconv('UTF-8','windows-1252',$item4['y_product_id']);
                                if ($item4['y_form'] == 0) { // Liquid
                                        $s = ($item4['y_amount']*$factor).' pak '.$product_id.', '.$name.' gist (eventueel met starter)';
                                } else if ($item4['y_form'] == 1) { // Dry
                                        $s = sprintf("%.1f",$item4['y_amount']*$factor*1000).' gram '.$product_id.', '.$name;
                                        $s .= ' gist';
                                } else { // Slant/Culture/Frozen/Bottle
                                        $s = sprintf("%.0f",$item4['y_amount']*$factor*1000).' ml '.$product_id.', '.$name;
					$s .= ' gist (eventueel met starter)';
                                }
				$this->Checkline($s);
                        }
                }
		foreach($miscs as $item3) {
                        if ($item3['m_use_use'] == 4) {
				$unit = ($item3['m_amount_is_weight']) ? " gr ":" ml ";
                                $s = sprintf("%.1f",$item3['m_amount']*$factor*1000).$unit.'`';
                                $s .= iconv('UTF-8','windows-1252',$item3['m_name']).'` voor ';
				$s .= sprintf("%.0f",$item3['m_time']/1440).' dagen toevoegen';
                                $this->Checkline($s);
                        }
                }
		if ($this->Checksplit(6, $row))
			$factor = 1;

		/*
		 * During packaging: fermentables, yeast, misc
		 */
		$lines = 0;
		foreach($ferms as $item1) {
                        if ($item1['f_added'] >= 4)
                                $lines++;
                }
		$yeasts = json_decode($row['json_yeasts'], true);
                foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 3)
                                $lines++;
                }
		$miscs = json_decode($row['json_miscs'], true);
                foreach($miscs as $item3) {
                        if ($item3['m_use_use'] == 5)
                                $lines++;
                }
		if ($lines) {
			if ($this->GetY() > (270 - (5 * $lines)))
                                $this->AddPage();
                        else
                                $this->Ln(5);
                        $this->Checkheader('Verpakken');
                }
		foreach($ferms as $item1) {
                        if ($item1['f_added'] == 4) {
                                $s = sprintf("%.3f",$item1['f_amount']*$factor).' kg `';
                                $s .= iconv('UTF-8','windows-1252',$item1['f_name']).'`';
				if ($row['bottle_priming_water'] > 0)
					$s .= ' met '.sprintf("%.3f",$row['bottle_priming_water']*$factor).' liter water';
				$s .= ' bij bottelen';
                                $this->Checkline($s);
                        }
			if ($item1['f_added'] == 5) {
                                $s = sprintf("%.3f",$item1['f_amount']*$factor).' kg `';
                                $s .= iconv('UTF-8','windows-1252',$item1['f_name']).'`';
				if ($row['keg_priming_water'] > 0)
					$s .= ' met '.sprintf("%.3f",$row['keg_priming_water']*$factor).' liter water';
				$s .= ' bij op fust zetten';
                                $this->Checkline($s);
                        }
                }
		foreach ($yeasts as $item4) {
                        if ($item4['y_use'] == 3) {
				$name       = iconv('UTF-8','windows-1252',$item4['y_name']);
                        	$product_id = iconv('UTF-8','windows-1252',$item4['y_product_id']);
                                if ($item4['y_form'] == 0) { // Liquid
                                        $s = '`'.$product_id.', '.$name;
                                } else if ($item4['y_form'] == 1) { // Dry
                                        $s = sprintf("%.1f",$item4['y_amount']*$factor*1000).' gram `'.$product_id.', '.$name;
                                } else { // Slant/Culture/Frozen/Bottle
                                        $s = sprintf("%.0f",$item4['y_amount']*$factor*1000).' ml `'.$product_id.', '.$name;
                                }
				$s .= '` als bottelgist';
				$this->Checkline($s);
                        }
                }
		foreach($miscs as $item3) {
                        if ($item3['m_use_use'] == 5) {
				$unit = ($item3['m_amount_is_weight']) ? " gr ":" ml ";
                                $s = sprintf("%.1f",$item3['m_amount']*$factor*1000).$unit.'`';
                                $s .= iconv('UTF-8','windows-1252',$item3['m_name']).'` bij bottelen toevoegen';
                                $this->Checkline($s);
                        }
                }
	}
}



class PDF extends PDF_MySQL_Table {
	function Header() {
		global $row;
		global $prdate;
		global $stage;
		$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');
		$st_name = iconv('UTF-8','windows-1252',$row['st_name']);
		$this->Cell(0,5,$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->SetX(45);
                $this->Cell(17,5,'Batch:',0,0,'L');
                if ($row['divide_parts'] == 0)
                        $this->Cell(0,5,"Niet gespitst",0,1,'L');
                else
                        $this->Cell(0,5,"Split batch ".($row['divide_part'] + 1)." van ".($row['divide_parts'] + 1),0,1,'L');
                $this->Ln(2);
		// Ensure table header is printed
		parent::Header();
	}
}


/*
 * Generate checklist PDF from recipe data
 */
$pdf = new PDF();
$pdf->Checklist($row);
$pdf->Output();

mercurial