pos/is4c-nf/gui-modules/drawerPage.php
<?php
/*******************************************************************************
Copyright 2010 Whole Foods 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\NoInputCorePage;
use COREPOS\pos\lib\Authenticate;
use COREPOS\pos\lib\Database;
use COREPOS\pos\lib\Drawers;
include_once(dirname(__FILE__).'/../lib/AutoLoader.php');
class drawerPage extends NoInputCorePage
{
private $isAdmin = false;
private $myDrawer = 0;
private $available = array();
private function giveUp()
{
if (empty($this->available) && !$this->isAdmin && $this->myDrawer == 0){
// no drawer available and not admin
// sign out and go back to main login screen
Database::setglobalvalue("LoggedIn", 0);
$this->session->set("LoggedIn",0);
$this->session->set("training",0);
$this->change_page($this->page_url."gui-modules/login2.php");
} else {
$this->change_page($this->page_url."gui-modules/pos2.php");
}
return false;
}
private function takeOver($drawer)
{
// take over a drawer
$drawers = new Drawers($this->session, Database::pDataConnect());
if ($this->myDrawer != 0){
// free up the current drawer if it exists
$drawers->kick();
$drawers->free($this->myDrawer);
}
// switch to the requested drawer
$drawers->assign($this->session->get('CashierNo'),$drawer);
$drawers->kick();
$this->myDrawer = $drawer;
}
private function switchDrawer($drawer)
{
$drawers = new Drawers($this->session, Database::pDataConnect());
foreach($this->available as $id){
// verify the requested drawer is available
if ($drawer == $id){
if ($this->myDrawer != 0){
// free up the current drawer if it exists
$drawers->kick();
$drawers->free($this->myDrawer);
}
// switch to the requested drawer
$drawers->assign($this->session->get('CashierNo'),$drawer);
$drawers->kick();
$this->myDrawer = $drawer;
break;
}
}
}
function preprocess()
{
$drawers = new Drawers($this->session, Database::pDataConnect());
$this->myDrawer = $drawers->current();
$this->available = $drawers->available();
$this->isAdmin = false;
$sec = Authenticate::getPermission($this->session->get('CashierNo'));
if ($sec >= 30) {
$this->isAdmin = true;
}
try {
$choice = $this->form->selectlist;
if (empty($choice)) {
return $this->giveUp();
}
if (substr($choice,0,2) == 'TO' && $this->isAdmin){
$this->takeOver(substr($choice, 2));
} elseif (substr($choice,0,2) == 'SW') {
$this->switchDrawer(substr($choice, 2));
}
} catch (Exception $ex) {}
return true;
}
function head_content()
{
?>
<script type="text/javascript" src="../js/selectSubmit.js"></script>
<?php
} // END head() FUNCTION
function body_content()
{
$msg = sprintf(_('You are using drawer #%d'), $this->myDrawer);
if ($this->myDrawer == 0)
$msg = _('You do not have a drawer');
$numDrawers = ($this->session->get('dualDrawerMode')===1) ? 2 : 1;
$dbc = Database::pDataConnect();
?>
<div class="baseHeight">
<div class="centeredDisplay colored">
<span class="larger"><?php echo $msg; ?></span>
<br />
<form id="selectform" method="post" action="<?php echo AutoLoader::ownURL(); ?>">
<select name="selectlist" id="selectlist" onblur="$('#selectlist').focus();">
<option value=''>
<?php
if ($this->isAdmin){
for($i=0;$i<$numDrawers;$i++){
$nameQ = 'SELECT FirstName FROM drawerowner as d
LEFT JOIN employees AS e ON e.emp_no=d.emp_no
WHERE d.drawer_no='.($i+1);
$name = $dbc->query($nameQ);
if ($dbc->num_rows($name) > 0)
$name = array_pop($dbc->fetch_row($name));
if (empty($name)) $name = _('Unassigned');
$opt = sprintf(_('Take over drawer #%d (%s)'), ($i+1), $name);
printf('<option value="TO%d">%s</option>', ($i+1), $opt);
}
}
elseif (count($this->available) > 0){
foreach($this->available as $num){
$opt = sprintf(_('Switch to drawer #%d'), $num);
printf('<option value="SW%d">%s</option>', $num, $opt);
}
}
else
echo '<option value="">' . _('No actions available') . '</option>';
?>
</select>
</form>
<p>
<span class="smaller"><?php echo _("clear to cancel"); ?></span>
</p>
</div>
</div>
<?php
$this->add_onload_command("selectSubmit('#selectlist', '#selectform')\n");
$this->add_onload_command("\$('#selectlist').focus();");
} // END body_content() FUNCTION
public function unitTest($phpunit)
{
ob_start();
$phpunit->assertEquals(false, $this->giveUp());
$this->switchDrawer(1);
$this->takeOver(1);
$phpunit->assertEquals(1, $this->myDrawer);
ob_get_clean();
}
}
AutoLoader::dispatch();