. */ include('../../libraries/tcpdf/tcpdf.php'); class MYPDF extends TCPDF { /** * Widths of all columns */ var $w = array(); var $print_time; var $date_format; var $columns = array(); /** * Format a Unix timestamp to a date. * @param int $number unix timestamp * @return string formatted as date */ public function dateformat($number) { return strftime($this->date_format,$number); } /** * Format the duration. * @param int $number number to format (usually in hours) * @return string formatted string */ public function timespan($number) { global $kga; if ($number == -1) return "-------"; else return str_replace(".",$kga['conf']['decimalSeparator'],sprintf("%01.2f",$number))." ".$kga['lang']['xp_ext']['duration_unit']; } /** * Format a number as a money value. * @param int $number amount of money * @return string formatted string */ public function money($number) { return formatCurrency($number,false); } /** * Print a footer on every page. */ public function Footer() { global $kga,$knd_data, $pct_data; // Position at 1.5 cm from bottom $this->SetY(-15); // customer data //$this->SetFont('helvetica', '', 8); // Set font //$this->Cell(80, 10, $knd_data['knd_name'].' ('.$pct_data['pct_name'].')', 0, 0, 'L'); // Page number $this->SetFont('helvetica', 'I', 8); // Set font $this->Cell(30, 10, $kga['lang']['xp_ext']['page'].' '.$this->getAliasNumPage().'/'.$this->getAliasNbPages(), 0, 0, 'C'); //Date $this->SetFont('helvetica', '', 8); // Set font $this->Cell(0, 10, date('d.m.Y H:i:s', $this->print_time), 0, 0, 'R'); } /** * Print the header of the table. * @param array $w widths of the table columns * @param array $header string with the column headers */ public function printHeader($w,$header) { // Colors, line width and bold font $this->SetFillColor(240, 240, 240); $this->SetTextColor(0); $this->SetDrawColor(0,0,0); $this->SetLineWidth(0.3); $this->SetFont('', 'B'); for($i = 0; $i < count($w); $i++) { if ($w[$i] <= 0) continue; $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1); } $this->Ln(); } /** * Print the table containing the detailed information. * @param array $header String with the column headers. * @param array $data Data to print. */ public function ColoredTable($header,$data) { global $kga; $dateWidth = max( $this->GetStringWidth($header[0]), $this->GetStringWidth($this->dateformat(mktime(0,0,0,12,31,2000))) ); $dateWidth += 4; $w = array($dateWidth, $this->getPageWidth()-$this->pagedim[$this->page]['lm']-$this->pagedim[$this->page]['rm']-$dateWidth,0,0); if (isset($this->columns['wage'])) { $w[3] = 30; $w[1] -= 30; } if (isset($this->columns['dec_time'])) { $w[2] = 30; $w[1] -= 30; } // Header $this->printHeader($w,$header); // Color and font restoration $this->SetFillColor(224, 235, 255); $this->SetTextColor(0); $this->SetFont(''); // Data $fill = 0; $moneySum = 0; $timeSum = 0; foreach($data as $row) { $show_comment = !empty($row['comment']) && isset($_REQUEST['print_comments']); // check if page break is nessessary if ($this->getPageHeight()-$this->pagedim[$this->page]['bm']-($this->getY()+20+($show_comment?6:0)) < 0) { $this->Cell(array_sum($w), 0, '', 'T'); if (isset($this->columns['wage']) || isset($this->columns['dec_time'])) { $this->Ln(); $this->Cell($w[0]+$w[1], 6, $kga['lang']['xp_ext']['subtotal'].':', '', 0, 'R', false); if (isset($this->columns['dec_time'])) $this->Cell($w[2], 6, $this->timespan($timeSum), isset($this->columns['wage'])?'R':'', 0, 'R', true); if (isset($this->columns['wage'])) $this->Cell($w[3], 6, $this->money($moneySum), 'L', 0, 'R', true); } $this->Ln(); $this->AddPage(); $this->printHeader($w,$header); // Color and font restoration $this->SetFillColor(224, 235, 255); $this->SetTextColor(0); $this->SetFont(''); } $this->Cell($w[0], 6, $this->dateformat($row['time_in']), 'LR', 0, 'C', $fill); $this->Cell($w[1], 6, $row['knd_name'] . ' - ' . $row['evt_name'], 'LR', 0, 'L', $fill); if (isset($this->columns['dec_time'])) $this->Cell($w[2], 6, $this->timespan(isset($row['dec_zef_time'])?$row['dec_zef_time']:0), 'LR', 0, 'R', $fill); if (isset($this->columns['wage'])) $this->Cell($w[3], 6, $this->money($row['wage']), 'LR', 0, 'R', $fill); $this->Ln(); //Kommentar anzeigen: if ( $show_comment ) { // comment line width $comment_line_width = 58; // split comment in lines $comment_lines = explode("\n", wordwrap(stripslashes($row['comment']), $comment_line_width, "\n", true)); // loop through all comment lines an add a cell for each line if (is_array($comment_lines)) { // determine font sizes to work with $current_font_size = $this->getFontSizePt(); if ($current_font_size <= 0) { $current_font_size = 12; } $comment_font_size = $current_font_size - 2; foreach ($comment_lines as $comment_line) { $this->Cell($w[0], 6, '', 'L', 0, 'C', $fill); $this->SetFont('', 'I', $comment_font_size); //$this->Cell($w[1], 6, $kga['lang']['comment'].': '.nl2br(addEllipsis($row['comment'],40)), 'LR', 0, 'L', $fill); $this->Cell($w[1], 6, $comment_line, 'LR', 0, 'L', $fill); $this->SetFont('', '', $current_font_size); if (isset($this->columns['dec_time'])) $this->Cell($w[2], 6, '', 'LR', 0, 'R', $fill); if (isset($this->columns['wage'])) $this->Cell($w[3], 6, '', 'LR', 0, 'R', $fill); $this->Ln(); } } } $fill=!$fill; $moneySum+=$row['wage']; $timeSum += $row['dec_zef_time']==-1?0:$row['dec_zef_time']; } $this->Cell(array_sum($w), 0, '', 'T'); $this->Ln(); if (isset($this->columns['wage']) || isset($this->columns['dec_time'])) { $this->Cell($w[0]+$w[1], 6, $kga['lang']['xp_ext']['finalamount'].':', '', 0, 'R', false); $this->SetFont('', 'B'); if (isset($this->columns['dec_time'])) $this->Cell($w[2], 6, $this->timespan($timeSum), isset($this->columns['wage'])?'R':'', 0, 'R', true); if (isset($this->columns['wage'])) $this->Cell($w[3], 6, $this->money($moneySum), 'L', 0, 'R', true); } } /** * Print the table containing the summarized information. * @param array $header String with the column headers. * @param array $data Data to print. */ public function ColoredTable_result($header,$data) { global $kga; $w = array($this->getPageWidth()-$this->pagedim[$this->page]['lm']-$this->pagedim[$this->page]['rm'],0,0); if (isset($this->columns['wage'])) { $w[2] = 30; $w[0] -= 30; } if (isset($this->columns['dec_time'])) { $w[1] = 30; $w[0] -= 30; } // Header $this->printHeader($w,$header); // Color and font restoration $this->SetFillColor(224, 235, 255); $this->SetTextColor(0); $this->SetFont(''); // Data $fill = 0; $sum = 0; $sum_time = 0; foreach($data as $row) { // check if page break is nessessary if ($this->getPageHeight()-$this->pagedim[$this->page]['bm']-($this->getY()+20) < 0) { $this->Cell(array_sum($w), 0, '', 'T'); $this->Ln(); $this->Cell($w[0], 6, $kga['lang']['xp_ext']['subtotal'].':', '', 0, 'R', false); if (isset($this->columns['dec_time'])) $this->Cell($w[1], 6, $this->timespan($sum_time), 'R', 0, 'R', true); if (isset($this->columns['wage'])) $this->Cell($w[2], 6, $this->money($sum), 'L', 0, 'R', true); $this->Ln(); $this->AddPage(); $this->printHeader($w,$header); // Color and font restoration $this->SetFillColor(224, 235, 255); $this->SetTextColor(0); $this->SetFont(''); } $this->Cell($w[0], 6, $row['name'], 'LR', 0, 'L', $fill); if (isset($this->columns['dec_time'])) $this->Cell($w[1], 6, $this->timespan($row['time']), 'LR', 0, 'R', $fill); if (isset($this->columns['wage'])) $this->Cell($w[2], 6, $this->money($row['wage']), 'LR', 0, 'R', $fill); $this->Ln(); $fill=!$fill; $sum+=$row['wage']; $sum_time += $row['time']==-1?0:$row['time']; } $this->Cell(array_sum($w), 0, '', 'T'); $this->Ln(); $this->Cell($w[0], 6, $kga['lang']['xp_ext']['finalamount'].':', '', 0, 'R', false); $this->SetFont('', 'B'); if (isset($this->columns['dec_time'])) $this->Cell($w[1], 6, $this->timespan($sum_time), '', 0, 'R', true); if (isset($this->columns['wage'])) $this->Cell($w[2], 6, $this->money($sum), 'L', 0, 'R', true); } } $pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); $pdf->date_format = $dateformat; $pdf->columns = $columns; $pdf->print_time = time(); $pdf->SetDisplayMode('default', 'continuous'); //PDF-Seitenanzeige fortlaufend // determine page title switch ($filter_type) { case 0: $pdf_title = $kga['lang']['xp_ext']['pdf_headline_only_times']; break; case 1: $pdf_title = $kga['lang']['xp_ext']['pdf_headline_only_expenses']; break; case -1: default: $pdf_title = $kga['lang']['xp_ext']['pdf_headline']; } // determine filter values switch ($filter_cleared) { case 0: $pdf_filter[] = $kga['lang']['xp_ext']['cleared_open']; break; case 1: $pdf_filter[] = $kga['lang']['xp_ext']['cleared_cleared']; break; } switch ($filter_refundable) { case 0: $pdf_filter[] = $kga['lang']['xp_ext']['refundable_refundable']; break; case 1: $pdf_filter[] = $kga['lang']['xp_ext']['refundable_not_refundable']; break; } $pdf->SetCreator(PDF_CREATOR); $pdf->SetTitle($pdf_title); $pdf->setPrintHeader(false); $pdf->AddPage(); if (isset($_REQUEST['create_bookmarks'])) $pdf->Bookmark($pdf_title, 0, 0); //$pdf->ImageEps('kimai-logo.ai', 0, 10, 60, 0, "http://www.kimai.org", true, 'T', 'R'); // include company logo $pdf->WriteHtml('