CORE-POS/IS4C

View on GitHub
fannie/admin/labels/pdf_layouts/WFC_Dark_Shelf_Labels.php

Summary

Maintainability
C
1 day
Test Coverage
B
84%
<?php
use COREPOS\Fannie\API\FanniePlugin;
if (!class_exists('FpdfWithBarcode')) {
    include(dirname(__FILE__) . '/../FpdfWithBarcode.php');
}
if (!class_exists('FannieAPI')) {
    include(__DIR__ . '/../../classlib2.0/FannieAPI.php');
}
/*
    Using layouts
    1. Make a file, e.g. New_Layout.php
    2. Make a PDF class New_Layout_PDF extending FPDF
       (just copy an existing one to get the UPC/EAN/Barcode
        functions)
    3. Make a function New_Layout($data)
       Data is an array database rows containing:
        normal_price
        description
        brand
        units
        size
        sku
        pricePerUnit
        upc
        vendor
        scale
    4. In your function, build the PDF. Look at 
       existings ones for some hints and/or FPDF
       documentation

    Name matching is important
*/

class WFC_Dark_Shelf_Labels_PDF extends FpdfWithBarcode
{
    private $tagdate;
    function setTagDate($str){
        $this->tagdate = $str;
    }

    function barcodeText($x, $y, $h, $barcode, $len)
    {
        $this->SetFont('Arial','',8);
        $this->Text($x,$y-$h+(17/$this->k),substr($barcode,-$len).' '.$this->tagdate);
    }
}

function WFC_Dark_Shelf_Labels($data,$offset=0){

$pdf=new WFC_Dark_Shelf_Labels_PDF('P','mm','Letter'); //start new instance of PDF
$pdf->Open(); //open new PDF Document
$pdf->setTagDate(date("m/d/Y"));
$pdf->SetFillColor(0, 0, 0);
$pdf->SetTextColor(255, 255, 255);
$dbc = FannieDB::get(FannieConfig::config('OP_DB'));

$font = 'Arial';
if (FanniePlugin::isEnabled('CoopDealsSigns')) {
    $font = 'Gill';
    define('FPDF_FONTPATH', dirname(__FILE__) . '/../../../modules/plugins2.0/CoopDealsSigns/noauto/fonts/');
    $pdf->AddFont('Gill', '', 'GillSansMTPro-Medium.php');
    $pdf->AddFont('Gill', 'B', 'GillSansMTPro-Heavy.php');
}

$width = 69; // tag width in mm
$height = 39; // tag height in mm
$left = 1; // left margin
$top = 10; // top margin

// undo margin if offset is true
if($offset) {
    $top = 32;
}

$pdf->SetTopMargin($top);  //Set top margin of the page
$pdf->SetLeftMargin($left);  //Set left margin of the page
$pdf->SetRightMargin($left);  //Set the right margin of the page
$pdf->SetAutoPageBreak(False); // manage page breaks yourself
$pdf->AddPage('L');  //Add page #1

$num = 1; // count tags 
$x = $left;
$y = $top;
//cycle through result array of query

/*
for ($ocount=0;$ocount<$offset;$ocount++){
    // move right by tag width
    $x += $width;

    if ($num % 32 == 0){
        $pdf->AddPage();
        $x = $left;
        $y = $top;
    }
    else if ($num % 4 == 0){
        $x = $left;
        $y += $height;
    }

    $num++;
}
*/
$str = '';
$tagcount = count($data);
if ($tagcount < 20) {
    for ($tagcount; $tagcount < 20; $tagcount++) {
        $data[]['upc'] = "0000000000000";
    }
}
$i = 0;
foreach($data as $k => $row){
    $i++;
    if ($i > $tagcount+1) {
        $pdf->SetFillColor(255, 255, 255);
        $pdf->SetTextColor(0, 0, 0);
    } 
   $price = isset($row['normal_price']) ? $row['normal_price'] : 0;
   //$desc = strtoupper(substr($row['description'],0,27));
   //$desc = str_replace("\n", "", $desc);
   //$desc = str_replace("\r", "", $desc);
   $brand = ucwords(strtolower(isset($row['brand']) ? $row['brand'] : ''));
   if ($brand == 'Bulk') $brand = '';
   $pak = isset($row['units']) ? $row['units'] : 1;
   $size = $pak . "-" . (isset($row['size']) ? $row['size'] : '');
   $sku = isset($row['sku']) ? $row['sku'] : '';
   $ppu = isset($row['pricePerUnit']) ? $row['pricePerUnit'] : '';
   $upc = ltrim($row['upc'],0);
   $check = $pdf->GetCheckDigit($upc);
   $vendor = substr(isset($row['vendor']) ? $row['vendor'] : '',0,7);

   //get fancy description
   $args = array($row['upc']);
   $prep = $dbc->prepare("
        SELECT pu.description, p.scale
        FROM productUser AS pu
            INNER JOIN products AS p ON pu.upc=p.upc
        WHERE pu.upc = ?");
   $res = $dbc->execute($prep, $args);
   $row = $dbc->fetchRow($res);
   $desc = $row['description'];
   $scale = $row['scale'];

   $pScale = $dbc->prepare("SELECT weight FROM scaleItems WHERE plu = ?");
   $rScale = $dbc->execute($pScale, $args);
   $row = $dbc->fetchRow($rScale);
   $weight = $row['weight'];
       
   $desc = str_replace("\n", "", $desc);
   $desc = str_replace("\r", "", $desc);

   if ($scale == 1 || $weight == 1 || $desc == '') {
        $price = "";       
   } else {
        $price = "$".$price;
   }

   // writing data
   // basically just set cursor position
   // then write text w/ Cell
   $wrp = wordwrap($desc, 25, "*", false);
   $dscripts = explode('*', $wrp);
   $descFontSize = 13;
   if (count($dscripts) == 1) {
       $descHeight = 10;
   } else {
       $descHeight = 5;
   }
    
   if (strlen($brand) >25) {
        $brandFontSize = 12;
   } elseif (strlen($brand) > 20) {
        $brandFontSize = 14;
   } elseif (strlen($brand) > 18) {
        $brandFontSize = 16;
   } else {
       $brandFontSize = 18;
   }
    
   $pdf->SetFont($font,'B',$brandFontSize);  //Set the font 
   $pdf->SetXY($x,$y);
   $pdf->Cell($width,3,'',0,1,'C',true);
   $pdf->SetX($x);
   $pdf->Cell($width,7,$brand,0,1,'C',true);
   $pdf->SetX($x);
   $pdf->Cell($width,1,'',0,1,'C',true);
   $pdf->SetX($x);

   $pdf->SetFont($font,'B',$descFontSize);  //Set the font 
   foreach ($dscripts as $i => $desc) {
       $pdf->Cell($width,$descHeight,$desc,0,1,'C',true);
       $pdf->SetX($x);
   }
   //$pdf->Cell($width,5,$desc,0,1,'C',true);
   //$pdf->SetX($x);
   //$pdf->Cell($width,4,$desc2,0,1,'C',true);

   $pdf->SetFont($font,'B',18);  //change font size
   $pdf->SetXY($x,$y+20);
   $pdf->Cell($width,10,$price,0,0,'C',true);
   $pdf->SetXY($x,$y+30);
   $pdf->Cell($width,12,'',0,0,'C',true);

   // add guide-lines
   $pdf->SetFillColor(155, 155, 155);
   // horizontal lines
   $pdf->SetXY($x+5,$y+30);
   $pdf->Cell(5,0.2,'',0,0,'C',true);
   $pdf->SetXY($x+60,$y+30);
   $pdf->Cell(5,0.2,'',0,0,'C',true);
   $pdf->SetXY($x,$y);
   $pdf->Cell(5,0.2,'',0,0,'C',true);
   $pdf->SetXY($x+60,$y);
   $pdf->Cell(5,0.2,'',0,0,'C',true);
   // vertical lines
   $pdf->SetXY($x,$y);
   $pdf->Cell(0.2,5,'',0,0,'C',true);
   $pdf->SetXY($x,$y+64);
   $pdf->Cell(0.2,5,'',0,0,'C',true);

   $pdf->SetFillColor(0, 0, 0);

   // move right by tag width
   $x += $width;

   // if it's the end of a page, add a new
   // one and reset x/y top left margins
   // otherwise if it's the end of a line,
   // reset x and move y down by tag height
   if ($num % 20 == 0){
    $pdf->AddPage('L');
    $x = $left;
    $y = $top;
   }
   else if ($num % 4 == 0){
    $x = $left;
    $y += $height;
   }

   $num++;
}

    $pdf->Output();  //Output PDF file to screen.
}