/** Add a tender to the transaction @right tender amount in cents (100 = $1) @strl tender code from tenders table @return An array see Parser::default_json() for format explanation. This function will automatically end a transaction if the amount due becomes <= zero. */ public static function tender($right, $strl) { $ret = array('main_frame' => false, 'redraw_footer' => false, 'target' => '.baseHeight', 'output' => ""); $strl = MiscLib::centStrToDouble($strl); if (CoreLocal::get('RepeatAgain')) { // the default tender prompt utilizes boxMsg2.php to // repeat the previous input, plus amount, on confirmation // the tender's preReqCheck methods will need to pretend // this is the first input rather than a repeat CoreLocal::set('msgrepeat', 0); CoreLocal::set('RepeatAgain', false); } $tender_mods = self::getTenderMods($right); $tender_object = null; foreach ($tender_mods as $class) { if (!class_exists($class)) { $ret['output'] = DisplayLib::boxMsg(_('tender is misconfigured'), _('Notify Administrator'), false, DisplayLib::standardClearButton()); return $ret; } $tender_object = new $class($right, $strl); /** Do tender-specific error checking and prereqs */ $error = $tender_object->ErrorCheck(); if ($error !== true) { $ret['output'] = $error; return $ret; } $prereq = $tender_object->PreReqCheck(); if ($prereq !== true) { $ret['main_frame'] = $prereq; return $ret; } } // add the tender record $tender_object->Add(); Database::getsubtotals(); // see if transaction has ended if (CoreLocal::get("amtdue") <= 0.005) { CoreLocal::set("change", -1 * CoreLocal::get("amtdue")); $cash_return = CoreLocal::get("change"); TransRecord::addchange($cash_return, $tender_object->ChangeType(), $tender_object->ChangeMsg()); CoreLocal::set("End", 1); $ret['receipt'] = 'full'; $ret['output'] = DisplayLib::printReceiptFooter(); TransRecord::finalizeTransaction(); } else { CoreLocal::set("change", 0); CoreLocal::set("fntlflag", 0); Database::setglobalvalue("FntlFlag", 0); $chk = self::ttl(); if ($chk === true) { $ret['output'] = DisplayLib::lastpage(); } else { $ret['main_frame'] = $chk; } } $ret['redraw_footer'] = true; return $ret; }