CORE-POS/IS4C

View on GitHub
fannie/item/images/ScannieBulkWrapper.php

Summary

Maintainability
C
1 day
Test Coverage
<?php

include(__DIR__ . '/../../config.php');
if (!class_exists('FannieAPI')) {
    include(__DIR__ . '/../../classlib2.0/FannieAPI.php');
}

if (!class_exists('FDFBulkFormatter')) {
    include(__DIR__ . '/../../../../../Scannie/content/Testing/FDFBulkFormatter.php');
}

class ScannieBulkWrapper extends FannieRESTfulPage
{

    protected $header = 'Bulk Labels';
    protected $title = 'Bulk Labels';

    protected function post_id_view()
    {
        $upcs = explode("\n", $this->id);
        $upcs = array_map('trim', $upcs);
        $upcs = array_filter($upcs, function ($i) { return strlen($i) > 0; });
        $bids = explode("\n", FormLib::get('bid'));
        $bids = array_map('trim', $bids);
        $bids = array_filter($bids, function ($i) { return strlen($i) > 0; });
        $organic = FormLib::get('organic', false) ? true : false;
        $local = FormLib::get('local', false) ? true : false;

        chdir('../../../../../Scannie/content/Testing');
        exec('rm fdfs/*.fdf');
        exec('rm fdfs/finishedPdfs/*.fin.pdf');
        $fdf = new FDFBulkFormatter();
        $fdf->setUPCs($upcs);
        $fdf->setOrganic($organic);
        $fdf->setLocal($local);
        $fdf->setBatchIDs($bids);
        $barcodeOrder = $fdf->run();

        $template = 'conv.pdf';
        if ($organic && $local) {
            $template = 'localog.pdf';
        } elseif ($organic && !$local) {
            $template = 'og.pdf';
        } elseif (!$organic && $local) {
            $template = 'localconv.pdf';
        }
        exec("sh finishFDFs.sh $template");

        $this->get_barcodes($barcodeOrder);

        $ret = '';
        $dh = opendir('fdfs/finishedPdfs/');
        while (($file = readdir($dh)) !== false) {
            if (substr($file, -8) == ".fin.pdf") {
                chmod("fdfs/finishedPdfs/$file", 0666);
                $newfilename = substr($file, 0, 15) . '.fin.pdf';
                exec("pdftk fdfs/finishedPdfs/$file stamp tmp_barcodes.pdf output fdfs/finishedPdfs/$newfilename");
                chmod("fdfs/finishedPdfs/$newfilename", 0666);
                exec("rm fdfs/finishedPdfs/$file");
            }
        }
        $dh = opendir('fdfs/finishedPdfs/');
        while (($file = readdir($dh)) !== false) {
            if (substr($file, -8) == ".fin.pdf") {
                $ret .= sprintf('<li><a href="/Scannie/content/Testing/fdfs/finishedPdfs/%s">%s</a></li>', $file, $file);
            }
        }

        return <<<HTML
Sign file(s):
<ul>
    {$ret}
</ul>
HTML;
    }

    private function get_barcodes($order)
    {
        $pdf = new FPDF('P', 'mm', 'Letter');
        $pdf->AddPage();
        $pdf->SetMargins(10,10,10);
        $pdf->SetFont('Arial', '', 7);
        $dbc = $this->connection;

        $upcs = explode(".", $order);
        $upcs = array_map('trim', $upcs);
        $upcs = array_filter($upcs, function ($i) { return strlen($i) > 0; });

        $items = $upcs;
        $myitems = array();
        foreach ($items as $k => $upc) {
            $upc = BarcodeLib::padUPC($upc);
            $items[$k] = $upc;
            $myitems[] = $upc;
        }

        $prep = $dbc->prepare("SELECT i.sku, p.description, i.size, i.units, v.vendorName, p.brand, p.upc
            FROM products AS p 
                LEFT JOIN vendors AS v ON p.default_vendor_id=v.vendorID
                LEFT JOIN vendorItems AS i ON p.default_vendor_id=i.vendorID AND p.upc=i.upc
            WHERE p.upc = ?
        ");

        $myskus = array();
        foreach ($myitems as $upc) {
            if ($upc < 9999) {
                $res = $dbc->execute($prep, $upc);
                $row = $dbc->fetchRow($res);
                // don't print barcodes that are too wide for slotted space
                $row['sku'] = (strlen($row['sku']) > 8) ? 1 : $row['sku'];
                $myskus[] = $row['sku'];
            }
        }

        $posX = 60;
        $posY = 105;

        foreach (array(0,1,2,3) as $k => $v) {
            // create SKU barcode
            $img = Image_Barcode2::draw(isset($myskus[$k]) ? $myskus[$k] : '', 'code128', 'png', false, 7, 1, false);
            $file = tempnam(sys_get_temp_dir(), 'img') . '.png';
            imagepng($img, $file);

            // create UPC barcode
            $img2 = Image_Barcode2::draw(isset($upcs[$k]) ? $upcs[$k] : '', 'code128', 'png', false, 7, 1, false);
            $file2 = tempnam(sys_get_temp_dir(), 'imgo') . '.png';
            imagepng($img2, $file2);

            if ($v == 0) {
                $pdf->Image($file, $posX-3, $posY-5);
                $pdf->Image($file2, $posX-3, $posY+1);
            } elseif ($v == 1) {
                $pdf->Image($file, $posX+94, $posY-5);
                $pdf->Image($file2, $posX+94, $posY+1);
            } elseif ($v == 2) {
                $pdf->Image($file, $posX-3, $posY+97);
                $pdf->Image($file2, $posX-3, $posY+103);
            } elseif ($v == 3) {
                $pdf->Image($file, $posX+94, $posY+97);
                $pdf->Image($file2, $posX+94, $posY+103);
            }
            unlink($file);
        }

        $filename = "/var/www/html/Scannie/content/Testing/tmp_barcodes.pdf";
        $pdf->Output($filename, 'F');
        chmod($filename, 0666);

        return false;
    }

    protected function get_view()
    {
        return <<<HTML

<div class="row">
    <div class="col-lg-12">
    <div>
        <ul>
            <li><a href= "NutriFactEntry.php">Enter Nutrition Facts</a></li>
            <li><a href= "IngredientSOPFormatter.php">Ingredients SOP Formatter</a></li>
        </ul>
    </div>
    <form method="post" action="ScannieBulkWrapper.php">
        <div class="row">
            <div class="col-lg-6">
                <div class="form-group">
                    <label>PLU(s)</label>
                    <textarea name="id" class="form-control" rows="8"></textarea>
                </div>
            </div>
            <div class="col-lg-6">
                <div class="form-group">
                    <label>Sales Batch ID(s)</label> <i>Optional - use batch price instead of current price</i>
                    <textarea name="bid" class="form-control" rows="8"></textarea>
                </div>
            </div>
        </div>
        <div class="form-group">
            <label>
                <input type="checkbox" value="1" name="organic" checked />
                Organic
            </label>
        </div>
        <div class="form-group">
            <label>
                <input type="checkbox" value="1" name="local" />
                Local
            </label>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-default">Make Signs</button>
        </div>
    </form>
    </div>
</div>
HTML;
    }
}

FannieDispatch::conditionalExec();