CORE-POS/IS4C

View on GitHub
fannie/modules/plugins2.0/ShelfAudit/SaAdjustmentsPage.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php

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

class SaAdjustmentsPage extends FannieRESTfulPage 
{
    public $page_set = 'Plugin :: Shelf Audit';
    public $description = '[Adjustments] is an interface for entering final, larger adjustments';
    protected $title = 'ShelfAudit Inventory';
    protected $header = '';

    protected function post_handler()
    {
        $store = FormLib::get('store');
        if (!$store) {
            echo 'Invalid entry';
            exit;
        }

        $upcs = FormLib::get('upc');
        $qtys = FormLib::get('qty');

        $table = FannieDB::fqn('sa_inventory', 'plugin:ShelfAuditDB');
        $curP = $this->connection->prepare("SELECT id FROM {$table} WHERE clear=0 AND section=0 AND storeID=? AND upc=?");
        $insP = $this->connection->prepare("INSERT INTO {$table} (datetime, upc, clear, quantity, section, storeID)
                                                VALUES (?, ?, 0, ?, 0, ?)");
        $upP = $this->connection->prepare("UPDATE {$table} SET quantity=?
                                            WHERE section=0
                                                AND clear=0
                                                AND storeID=?
                                                AND upc=?");
        for ($i=0; $i<count($upcs); $i++) {
            $upc = $upcs[$i];
            $qty = $qtys[$i];
            $exists = $this->connection->getValue($curP, array($store, $upc));
            if ($exists) {
                $this->connection->execute($upP, array($qty, $store, $upc));
            } elseif ($qty <> 0) {
                $this->connection->execute($insP, array(date('Y-m-d H:i:s'), $upc, $qty, $store));
            }
        }

        return 'SaAdjustmentsPage.php?store=' . $store;
    }

    protected function get_view()
    {
        $store = FormLib::get('store');
        if (!$store) {
            $store = COREPOS\Fannie\API\lib\Store::getIdByIp();
        }
        $stores = FormLib::storePicker();
        $stHTML = str_replace('<select', '<select onchange="location=\'SaAdjustmentsPage.php?store=\'+this.value;"', $stores['html']);

        $curP = $this->connection->prepare("
            SELECT SUM(quantity) AS qty
            FROM " . FannieDB::fqn('sa_inventory', 'plugin:ShelfAuditDB') . "
            WHERE clear=0
                AND section=0
                AND storeID=?
                AND upc=?");

        $ret = '<p>' . $stHTML . '</p>';
        $ret .= '<form method="post" action="SaAdjustmentsPage.php">';
        $ret .= '<input type="hidden" name="store" value="' . $store . '" />';

        $ret .= '<h3>Manual Counts (in dollars, at cost)</h3>';
        $ret .= '<table class="table table-bordered small table-striped">';
        $manualR = $this->connection->query("
            SELECT upc, description
            FROM products
            WHERE store_id=1
                AND inUse=0
                AND description LIKE '% @ COST%'
            ORDER BY upc");
        while ($row = $this->connection->fetchRow($manualR)) {
            $current = $this->connection->getValue($curP, array($store, $row['upc']));
            $ret .= sprintf('<tr><td>%s<input type="hidden" name="upc[]" value="%s" /></td>
                                <td>%s</td><td><input type="text" class="form-control input-sm" name="qty[]" value="%.2f" /></td></tr>',
                                ltrim($row['upc'], '0'), $row['upc'],
                                $row['description'], $current);
        }
        $ret .= '</table>';

        $ret .= '<h3>Service Counts (in dollars, at retail)</h3>';
        $ret .= '<table class="table table-bordered small table-striped">';
        $manualR = $this->connection->query("
            SELECT upc, description
            FROM products
            WHERE store_id=1
                AND inUse=0
                AND description LIKE 'INV SERVICE%'
            ORDER BY upc");
        while ($row = $this->connection->fetchRow($manualR)) {
            $current = $this->connection->getValue($curP, array($store, $row['upc']));
            $ret .= sprintf('<tr><td>%s<input type="hidden" name="upc[]" value="%s" /></td>
                                <td>%s</td><td><input type="text" class="form-control input-sm" name="qty[]" value="%.2f" /></td></tr>',
                                ltrim($row['upc'], '0'), $row['upc'],
                                $row['description'], $current);
        }
        $ret .= '</table>';

        $ret .= '<h3>Invoice Adjustments (in dollars, at cost)</h3>';
        $ret .= '<table class="table table-bordered small table-striped">';
        $manualR = $this->connection->query("
            SELECT upc, description
            FROM products
            WHERE store_id=1
                AND inUse=0
                AND description LIKE '% RECV %'
            ORDER BY upc");
        while ($row = $this->connection->fetchRow($manualR)) {
            $current = $this->connection->getValue($curP, array($store, $row['upc']));
            $ret .= sprintf('<tr><td>%s<input type="hidden" name="upc[]" value="%s" /></td>
                                <td>%s</td><td><input type="text" class="form-control input-sm" name="qty[]" value="%.2f" /></td></tr>',
                                ltrim($row['upc'], '0'), $row['upc'],
                                $row['description'], $current);
        }
        $ret .= '</table>';

        $ret .= '<h3>Sales Adjustments (in dollars, at cost, normally negative)</h3>';
        $ret .= '<table class="table table-bordered small table-striped">';
        $manualR = $this->connection->query("
            SELECT upc, description
            FROM products
            WHERE store_id=1
                AND inUse=0
                AND description LIKE '% ADJ SALES %'
            ORDER BY upc");
        while ($row = $this->connection->fetchRow($manualR)) {
            $current = $this->connection->getValue($curP, array($store, $row['upc']));
            $ret .= sprintf('<tr><td>%s<input type="hidden" name="upc[]" value="%s" /></td>
                                <td>%s</td><td><input type="text" class="form-control input-sm" name="qty[]" value="%.2f" /></td></tr>',
                                ltrim($row['upc'], '0'), $row['upc'],
                                $row['description'], $current);
        }
        $ret .= '</table>';

        $ret .= '<p><button type="submit" class="btn btn-default">Save</button></p>';

        return $ret;
    }
}

FannieDispatch::conditionalExec();