CORE-POS/IS4C

View on GitHub
fannie/item/inventory/DateCountPage.php

Summary

Maintainability
A
1 hr
Test Coverage
C
79%
<?php
/*******************************************************************************

    Copyright 2015 Whole Foods Community Co-op

    This file is part of CORE-POS.

    CORE-POS is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    CORE-POS is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    in the file license.txt along with IT CORE; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA

*********************************************************************************/

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

class DateCountPage extends FannieRESTfulPage
{
    protected $header = 'Inventory Counts';
    protected $title = 'Inventory Counts';
    protected $must_authenticate = true;
    protected $enable_linea = true;
    public $description = '[Re-Date Counts] adjusts the count date for an item or vendor';

    public function preprocess()
    {
        $this->addRoute('get<vendor>');
        $this->addRoute('post<vendor>');
        return parent::preprocess();
    }

    public function post_vendor_handler()
    {
        try {
            $date = $this->form->date . ' 00:00:03';
            $upP = $this->connection->prepare('
                UPDATE InventoryCounts AS i
                    INNER JOIN products AS p ON p.upc=i.upc AND p.store_id=i.storeID
                SET i.countDate=?
                WHERE p.default_vendor_id=?
                    AND i.mostRecent=1
                    AND i.storeID=?
            ');
            $upR = $this->connection->execute($upP, array($date, $this->vendor,$this->form->store));
        } catch (Exception $ex) {
        }

        return 'InvCountPage.php?vendor=' . $this->vendor . '&store=' . $this->form->store;
    }

    public function get_vendor_view()
    {
        $vendor = new VendorsModel($this->connection);
        $vendor->vendorID($this->vendor);
        if (!$vendor->load()) {
            return '<div class="alert alert-danger">Unknown vendor</div>';
        }
        $stores = FormLib::storePicker('store', false);

        $ret = '<form method="post">
            <div class="form-group">
                <label>Vendor</label>
                ' . $vendor->vendorName() . '
                <input type="hidden" name="vendor" value="' . $vendor->vendorID() . '" />
            </div>
            <div class="form-group">
                <label>Set Count Date to</label>
                <input type="text" name="date" class="form-control date-field" />
            </div>
            <div class="form-group">
                <label>Store</label>
                ' . $stores['html'] . '
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-default">Update</button>
            </div>
            </form>';

        return $ret;
    }

    public function post_id_handler()
    {
        $upc = BarcodeLib::padUPC($this->id);
        try {
            $date = $this->form->date . ' 00:00:01';
            $store = $this->form->store;
            $upP = $this->connection->prepare('
                UPDATE InventoryCounts
                SET countDate=?
                WHERE upc=?
                    AND mostRecent=1
                    AND storeID=?');
            $upR = $this->connection->execute($upP, array($date, $upc, $store));
        } catch (Exception $ex) {
        }

        return 'InvCountPage.php?id=' . $upc;
    }

    public function get_id_view()
    {
        $stores = FormLib::storePicker('store', false);
        $store = FormLib::get('store', 1);
        $upc = BarcodeLib::padUPC($this->id);
        $inv = new InventoryCountsModel($this->connection);
        $inv->upc($upc);
        $inv->mostRecent(1);
        $inv->setFindLimit(1);
        $inv->storeID($store);
        if (count($inv->find()) == 0) {
            return '<div class="alert alert-danger">No count for item ' . $upc . '</div>';
        }

        $ret = '<form method="post">
            <div class="form-group">
                <label>UPC</label>
                ' . $upc . '
                <input type="hidden" name="id" value="' . $upc . '" />
            </div>
            <div class="form-group">
                <label>Set Count Date to</label>
                <input type="text" name="date" class="form-control date-field" />
            </div>
            <div class="form-group">
                <label>Store</label>
                ' . $stores['html'] . '
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-default">Update</button>
            </div>
            </form>';

        return $ret;
    }

    public function unitTest($phpunit)
    {
        $this->id = '4011';
        $form = new COREPOS\common\mvc\ValueContainer();
        $form->store=1;
        $form->date = date('Y-m-d');
        $this->setForm($form);
        $phpunit->assertNotEquals(0, strlen($this->get_id_view()));
        $phpunit->assertNotEquals(0, strlen($this->post_id_handler()));
        $this->vendor = 1;
        $phpunit->assertNotEquals(0, strlen($this->get_vendor_view()));
        $phpunit->assertNotEquals(0, strlen($this->post_vendor_handler()));
    }

    public function helpContent()
    {
        return '<p>On-hand inventory is based on activity since the most recent count.
            Enter a new date and time to adjust <em>when</em> the count occurred. If for
            example counts were collected yesterday on paper but entered into the computer
            today those counts should likely be backdated to yesterday.</p>';
    }
}

FannieDispatch::conditionalExec();