CORE-POS/IS4C

View on GitHub
pos/is4c-nf/plugins/WicPlugin/WicTenderPage.php

Summary

Maintainability
B
4 hrs
Test Coverage
<?php
/*******************************************************************************
    Copyright 2001, 2004 Wedge Community Co-op
    This file is part of IT CORE.
    IT CORE 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.
    IT CORE 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
*********************************************************************************/

use COREPOS\pos\lib\gui\BasicCorePage;
use COREPOS\pos\lib\Database;
use COREPOS\pos\lib\DisplayLib;
use COREPOS\pos\lib\FormLib;
use COREPOS\pos\lib\MiscLib;
include_once(dirname(__FILE__).'/../../lib/AutoLoader.php');
class WicTenderPage extends BasicCorePage 
{
    private $step = 0;
    private $box_color="coloredArea";
    private $errMsg;
    public function preprocess()
    {
        if (FormLib::get('reginput', false) !== false) {
            $inp = strtoupper(FormLib::get('reginput'));
            $this->step = FormLib::get('step', 0);
            // clear backtracks through steps
            if ($inp == 'CL' && $this->step == 0) {
                $this->change_page(MiscLib::baseURL() . 'gui-modules/pos2.php');
                return false;
            } elseif ($inp == 'CL') {
                $this->step--;
                return true;
            }
            switch ($this->step) {
                case 0:
                    $this->handleDateInput($inp, true, false);
                    break;
                case 1:
                    $this->handleDateInput($inp, false, true);
                    break;
                case 2:
                case 3:
                    if ($inp !== '') {
                        $this->box_color="errorColoredArea";
                        $this->errMsg = '[enter] to continue';
                    } else {
                        $this->step++;
                    }
                    break;
                case 4:
                    if ($this->validateAmount($inp)) {
                        $tender = $inp . 'WT';
                        CoreLocal::set('RepeatAgain', true);
                        $this->change_page(
                            MiscLib::baseURL() 
                            . 'gui-modules/pos2.php'
                            . '?reginput=' . urlencode($tender)
                            . '&repeat=1');
                        return false;
                    }
                    break;
            }
        }
        return true;
    }
    private function validateAmount($inp)
    {
        if (!is_numeric($inp)) {
            $this->box_color="errorColoredArea";
            $this->errMsg = 'Invalid amount';
            return false;
        } elseif (($inp/100) - CoreLocal::get('amtdue') > 0.005) {
            $this->box_color="errorColoredArea";
            $this->errMsg = 'Max amount is ' . CoreLocal::get('amtdue');
            return false;
        } else {
            return true;
        }
    }
    private function handleDateInput($inp, $issue=true, $expire=false)
    {
        if (strlen($inp) != 6 || !is_numeric($inp)) {
            $this->box_color="errorColoredArea";
            $this->errMsg = 'Invalid Date: MMDDYY';
        } else {
            $stamp = mktime(0, 0, 0, substr($inp, 0, 2), substr($inp, 2, 2), 2000+substr($inp, -2));
            $today = mktime(0, 0, 0, date('n'), date('j'), date('Y'));
            if ($issue && $stamp > $today) {
                $this->box_color="errorColoredArea";
                $this->errMsg = 'Not valid until ' . date('m/d/Y', $stamp);
            } elseif ($expire && $stamp < $today) {
                $this->box_color="errorColoredArea";
                $this->errMsg = 'Expired ' . date('m/d/Y', $stamp);
            } else {
                $this->step++;
            }
        }
    }
    public function body_content()
    {
        $this->input_header();
        echo DisplayLib::printheaderb();
        echo '<div class="baseHeight">';
        echo '<div class=" ' .$this->box_color . ' centeredDisplay">';
        echo $this->stepContent();
        echo '</div>';
        echo '</div>';
        Database::getsubtotals();
        echo "<div id=\"footer\">";
        echo DisplayLib::printfooter();
        echo "</div>";
        $this->add_onload_command("\$('<input type=\"hidden\" name=\"step\">').val(" . $this->step . ").appendTo('#formlocal');\n");
    }
    private function stepContent()
    {
        switch ($this->step) {
            case 0:
                return $this->issueForm();
            case 1:
                return $this->expiresForm();
            case 2:
                return $this->priceForm();
            case 3:
                return $this->sigForm();
            case 4:
                return $this->amountForm();
        }
    }
    private function amountForm()
    {
        return '<span class="larger">
            ' . ($this->errMsg ? $this->errMsg : 'Enter Amount') . '
            </span><br />
            <p>
            [clear] to go back
            </p>';
    }
    private function issueForm()
    {
        return '<span class="larger">
            ' . ($this->errMsg ? $this->errMsg : 'Issue Date') . '
            </span><br />
            <p>
            enter issue date MMDDYY or [clear] to cancel
            </p>';
    }
    private function expiresForm()
    {
        return '<span class="larger">
            ' . ($this->errMsg ? $this->errMsg : 'Expiration Date') . '
            </span><br />
            <p>
            enter expiration date MMDDYY or [clear] to go back
            </p>';
    }
    
    private function priceForm()
    {
        return '<span class="larger">
            Write Price on WIC Voucher
            </span><br />
            <p>
            Write Price on Voucher or [clear] to go back
            </p>';
    }
    private function sigForm()
    {
        return '<span class="larger">
            Confirm signature and ID
            </span><br />
            <p>
            [enter] to continue or [clear] to go back
            </p>';
    }
}

AutoLoader::dispatch();