CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/LBMX/LbmxReformat.php

Summary

Maintainability
B
5 hrs
Test Coverage
<?php

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

class LbmxReformat extends COREPOS\Fannie\API\FannieUploadPage
{
    protected $header = 'LBMX Data Reformat (Input: TXT)';
    protected $title = 'LBMX Data Reformat';

    protected $preview_opts = array(
        'vendorID' => array(
            'display_name' => 'Vendor ID',
            'default' => 0,
            'required' => true
        ),
        'invoice' => array(
            'display_name' => 'Invoice #',
            'default' => 2,
            'required' => true
        ),
        'date' => array(
            'display_name' => 'Invoice Date',
            'default' => 5,
            'required' => true
        ),
        'customerID' => array(
            'display_name' => 'Customer ID',
            'default' => 9,
            'required' => true
        ),
        'due' => array(
            'display_name' => 'Due Date',
            'default' => 18,
            'required' => true
        ),
        'po' => array(
            'display_name' => 'PO #',
            'default' => 32,
            'required' => true
        ),
        'coding' => array(
            'display_name' => 'GL Code',
            'default' => 41,
            'required' => true
        ),
        'cost' => array(
            'display_name' => 'Cost',
            'default' => 47,
            'required' => true
        ),
    );

    private $results = '';

    public function process_file($linedata, $indexes)
    {
        $getStoreP = $this->connection->prepare("SELECT posID FROM LbmxStores WHERE lbmxID=?");
        $getVendorP = $this->connection->prepare("SELECT vendorName FROM LbmxVendors AS l
            LEFT JOIN vendors AS v on l.posID=v.vendorID WHERE lbmxID=?");

        /*
         * Find existing POs and/or generate new POs
         * as needed. Re-importing the same PO should
         * just update its data
         */
        $header = true;
        $fp = fopen(__DIR__ . '/noauto/' . $this->original_file_name . '.csv', 'w');
        $invoices = array();
        foreach ($linedata as $line) {
            if ($header) {
                $header = false;
                continue;
            }
            if (!isset($line[$indexes['vendorID']])) {
                continue;
            } 
            if (!isset($line[$indexes['customerID']])) {
                continue;
            } 
            if (!isset($line[$indexes['invoice']])) {
                continue;
            } 

            $storeID = $this->connection->getValue($getStoreP, array($line[$indexes['customerID']]));
            $vendorID = $this->connection->getValue($getVendorP, array($line[$indexes['vendorID']]));
            $invDate = date('m/d/Y', strtotime($line[$indexes['date']]));
            $dueDate = date('m/d/Y', strtotime($line[$indexes['due']]));
            $coding = str_replace('-', '', $line[$indexes['coding']]);
            $cost = $line[$indexes['cost']];
            $invoice = $line[$indexes['invoice']];
            $po = $line[$indexes['po']];

            fprintf($fp, '2,'
                . $vendorID . ','
                . $invoice . ','
                . $invDate . ','
                . $dueDate . ','
                . $cost . ','
                . $cost . ','
                . $coding . ','
                . $po . "\r\n");

            $key = $storeID . '-' . $vendorID . '-' . $invoice;
            if (!isset($invoices[$key])) {
                $invoices[$key] = array(
                    'date' => $invDate,
                    'due' => $dueDate,
                    'invoiceID' => $invoice,
                    'vendorID' => $vendorID,
                    'po' => $po,
                    'totalCost' => 0,
                    'codes' => array(),
                );
            }
            if (!isset($invoices[$key]['codes'][$coding])) {
                $invoices[$key]['codes'][$coding] = 0;
            }
            $invoices[$key]['codes'][$coding] += $cost;
            $invoices[$key]['totalCost'] += $cost;
        }
        fclose($fp);

        $fp = fopen(__DIR__ . '/noauto/' . $this->original_file_name . '_ROLLUP.csv', 'w');
        foreach ($invoices as $inv) {
            foreach($inv['codes'] as $coding => $cost) {
                fprintf($fp, '2,'
                    . $inv['vendorID'] . ','
                    . $inv['invoiceID'] . ','
                    . $inv['date'] . ','
                    . $inv['due'] . ','
                    . $inv['totalCost'] . ','
                    . $cost . ','
                    . $coding . ','
                    . $inv['po'] . "\r\n");
            }
        }
        fclose($fp);

        return true;
    }

    public function results_content()
    {
        return <<<HTML
<p>
Conversion complete.
</p>
<p>
<a href="noauto/{$this->original_file_name}_ROLLUP.csv">{$this->original_file_name}_ROLLUP.csv</a><br />
</p>
<p>
<a href="LbmxReformat.php">Process another file</a>
</p>
HTML;
    }

}

FannieDispatch::conditionalExec();