Example #1
0
 /**
   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;
 }