www/rec_print.php

Sat, 23 May 2020 20:53:48 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Sat, 23 May 2020 20:53:48 +0200
changeset 691
9c21125f584e
parent 667
1246550451ca
permissions
-rw-r--r--

Added clone command to the equipment inventory.

<?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 recipes 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;
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 */
		global $recipetype;
		$vul = $this->w - $this->rMargin - $this->lMargin - 120;
		$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(25,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(25,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(25,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(25,5,$row['efficiency'].' %',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 $added;
		global $fermentabletype;
		global $graintype;
		$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;
		$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',$graintype[$item['f_graintype']]);
			else
				$soort = iconv('UTF-8','windows-1252',$fermentabletype[$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) {	// Mash
				$d = floatval($row['efficiency']) / 100 * $d;
				$sugarsm += $d;
			}
			$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;
		global $hopform;
		global $hopuse;
		$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) || ($item['h_useat'] == 4)) {	// Boil or Whirlpool
				$moment  = $hopuse[$item['h_useat']].' '.$time." min";
			} else if ($item['h_useat'] == 5) {	// Dryhop
				$moment  = $hopuse[$item['h_useat']].' '.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'], $row['brew_whirlpool9'], $row['brew_whirlpool7'], $row['brew_whirlpool6']);
			$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;
		global $yeastform;
		global $yeastuse;
		$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 || $item['y_form'] == 6)	// 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();
		}

		$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;
		global $misctype;
		global $miscuse;
		$vul = $this->w - $this->rMargin - $this->lMargin - 95;
		if ($this->GetY() > 200)
                        $this->AddPage();
                else
                        $this->Ln();
		$this->AddCol($vul,'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("%.1f %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;
                global $mashtype;
                $vul = $this->w - $this->rMargin - $this->lMargin - 138;
                if ($this->GetY() > 250)
                        $this->AddPage();
                else
                        $this->Ln();
                $this->AddCol($vul,'Maisch stap naam','L');
                $this->AddCol(25,'Stap type','L');
                $this->AddCol(16,'Start '.DEG.'C','R');
                $this->AddCol(16,'Eind '.DEG.'C','R');
                $this->AddCol(15,'Rust min','R');
                $this->AddCol(15,'Stap min','R');
                $this->AddCol(15,'L/Kg','R');
		$this->AddCol(18,'Inf/dec L','R');
		$this->AddCol(18,'Inf/dec '.DEG.'C','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(16,5,sprintf("%.1f",$item['step_temp']),0,0,'R',true);
                        $this->Cell(16,5,sprintf("%.1f",$item['end_temp']),0,0,'R',true);
                        $this->Cell(15,5,sprintf("%.0f",$item['step_time']),0,0,'R',true);
                        $this->Cell(15,5,sprintf("%.0f",$item['ramp_time']),0,0,'R',true);
                        $this->Cell(15,5,sprintf("%.2f",$thick),0,0,'R',true);
			if ($item['step_type'] == 1) {
				$this->Cell(18,5,' ',0,0,'R',true);
				$this->Cell(18,5,' ',0,0,'R',true);
			} else {
				$this->Cell(18,5,sprintf("%.1f",$item['step_infuse_amount']),0,0,'R',true);
				$this->Cell(18,5,sprintf("%.1f",$item['step_infuse_temp']),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 $colormethod;
		global $ibumethod;
		/* 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);

		$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();
	}
}



class PDF extends PDF_MySQL_Table {
	function Header() {
		global $row;
		global $prdate;
		$this->Image('images/logo.png',10,6,30);
		// Title
		$this->SetFont('Helvetica','B',18);
		$this->SetX(45);
		$this->Cell(0,8,$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->Ln(7);
		// 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);
}
// Disclaimer toevoegen dat dit alleen recept ontwikkeling is. Uitkomsten zoals IBU zijn een berekende schatting.
// Footer sectie met berekende/geschatte uitkomsten zoals ABV, kostprijs per liter enz. 
$pdf->Output();

mercurial