$pf_out = new PunchFactory();
 $pf_out->setUser($user_id);
 $pf_out->setType(10);
 //Normal
 $pf_out->setStatus(20);
 //Out
 $pf_out->setTimeStamp($recurring_schedule_shift_end_time, TRUE);
 $pf_out->setPunchControlID($pf_in->findPunchControlID());
 //Use the In punch object to find the punch_control_id.
 $pf_out->setActualTimeStamp($pf_out->getTimeStamp());
 $pf_out->setOriginalTimeStamp($pf_out->getTimeStamp());
 if ($pf_out->isValid()) {
     Debug::text('Punch Out: Valid!', __FILE__, __LINE__, __METHOD__, 10);
     $pf_out->setEnableCalcTotalTime(TRUE);
     $pf_out->setEnableCalcSystemTotalTime(TRUE);
     $pf_out->setEnableCalcUserDateTotal(TRUE);
     $pf_out->setEnableCalcException(TRUE);
     $pf_out->Save(FALSE);
 } else {
     Debug::text('Punch Out: InValid!', __FILE__, __LINE__, __METHOD__, 10);
 }
 if ($pf_in->isValid() == TRUE or $pf_out->isValid() == TRUE) {
     Debug::text('Punch In and Out succeeded, saving punch control!', __FILE__, __LINE__, __METHOD__, 10);
     $pcf = new PunchControlFactory();
     $pcf->setId($pf_in->getPunchControlID());
     if ($pf_in->isValid() == TRUE) {
         $pcf->setPunchObject($pf_in);
     } elseif ($pf_out->isValid() == TRUE) {
         $pcf->setPunchObject($pf_out);
     }
     if ($recurring_schedule_shift['branch_id'] == -1) {