function calcMealPolicyTotalTime($meal_policy_obj = NULL)
 {
     //Debug::arr($meal_policy_obj, 'MealPolicyObject param:', __FILE__, __LINE__, __METHOD__, 10);
     //Get total worked time for the day.
     $udtlf = new UserDateTotalListFactory();
     $daily_total_time = $udtlf->getWorkedTimeSumByUserDateID($this->getUserDateID());
     if (is_object($meal_policy_obj) == FALSE) {
         //Lookup meal policy
         $mplf = new MealPolicyListFactory();
         //$mplf->getByPolicyGroupUserId( $this->getUserDateObject()->getUser() );
         $mplf->getByPolicyGroupUserIdAndDayTotalTime($this->getUserDateObject()->getUser(), $daily_total_time);
         if ($mplf->getRecordCount() > 0) {
             Debug::text('Found Meal Policy to apply.', __FILE__, __LINE__, __METHOD__, 10);
             $meal_policy_obj = $mplf->getCurrent();
         }
     }
     $meal_policy_time = 0;
     if (is_object($meal_policy_obj) and $daily_total_time >= $meal_policy_obj->getTriggerTime()) {
         Debug::text('Meal Policy ID: ' . $meal_policy_obj->getId() . ' Type ID: ' . $meal_policy_obj->getType() . ' Amount: ' . $meal_policy_obj->getAmount() . ' Daily Total TIme: ' . $daily_total_time, __FILE__, __LINE__, __METHOD__, 10);
         //Get lunch total time.
         $lunch_total_time = 0;
         $plf = new PunchListFactory();
         $plf->getByUserDateIdAndTypeId($this->getUserDateId(), 20);
         //Only Lunch punches
         if ($plf->getRecordCount() > 0) {
             $pair = 0;
             $x = 0;
             $out_for_lunch = FALSE;
             foreach ($plf as $p_obj) {
                 if ($p_obj->getStatus() == 20 and $p_obj->getType() == 20) {
                     $lunch_out_timestamp = $p_obj->getTimeStamp();
                     $out_for_lunch = TRUE;
                 } elseif ($out_for_lunch == TRUE and $p_obj->getStatus() == 10 and $p_obj->getType() == 20) {
                     $lunch_punch_arr[$pair][20] = $lunch_out_timestamp;
                     $lunch_punch_arr[$pair][10] = $p_obj->getTimeStamp();
                     $out_for_lunch = FALSE;
                     $pair++;
                     unset($lunch_out_timestamp);
                 } else {
                     $out_for_lunch = FALSE;
                 }
                 $x++;
             }
             if (isset($lunch_punch_arr)) {
                 foreach ($lunch_punch_arr as $punch_control_id => $time_stamp_arr) {
                     if (isset($time_stamp_arr[10]) and isset($time_stamp_arr[20])) {
                         $lunch_total_time = bcadd($lunch_total_time, bcsub($time_stamp_arr[10], $time_stamp_arr[20]));
                     } else {
                         Debug::text(' Lunch Punches not paired... Skipping!', __FILE__, __LINE__, __METHOD__, 10);
                     }
                 }
             } else {
                 Debug::text(' No Lunch Punches found, or none are paired.', __FILE__, __LINE__, __METHOD__, 10);
             }
         }
         Debug::text(' Lunch Total Time: ' . $lunch_total_time, __FILE__, __LINE__, __METHOD__, 10);
         switch ($meal_policy_obj->getType()) {
             case 10:
                 //Auto-Deduct
                 Debug::text(' Lunch AutoDeduct.', __FILE__, __LINE__, __METHOD__, 10);
                 if ($meal_policy_obj->getIncludeLunchPunchTime() == TRUE) {
                     $meal_policy_time = bcsub($meal_policy_obj->getAmount(), $lunch_total_time) * -1;
                     //If they take more then their alloted lunch, zero it out so time isn't added.
                     if ($meal_policy_time > 0) {
                         $meal_policy_time = 0;
                     }
                 } else {
                     $meal_policy_time = $meal_policy_obj->getAmount() * -1;
                 }
                 break;
             case 15:
                 //Auto-Include
                 Debug::text(' Lunch AutoInclude.', __FILE__, __LINE__, __METHOD__, 10);
                 if ($meal_policy_obj->getIncludeLunchPunchTime() == TRUE) {
                     if ($lunch_total_time > $meal_policy_obj->getAmount()) {
                         $meal_policy_time = $meal_policy_obj->getAmount();
                     } else {
                         $meal_policy_time = $lunch_total_time;
                     }
                 } else {
                     $meal_policy_time = $meal_policy_obj->getAmount();
                 }
                 break;
         }
         Debug::text(' Meal Policy Total Time: ' . $meal_policy_time, __FILE__, __LINE__, __METHOD__, 10);
         if ($meal_policy_time != 0) {
             $udtf = new UserDateTotalFactory();
             $udtf->setUserDateID($this->getUserDateID());
             $udtf->setStatus(10);
             //System
             $udtf->setType(100);
             //Lunch
             $udtf->setMealPolicyId($meal_policy_obj->getId());
             $udtf->setBranch($this->getUserDateObject()->getUserObject()->getDefaultBranch());
             $udtf->setDepartment($this->getUserDateObject()->getUserObject()->getDefaultDepartment());
             $udtf->setTotalTime($meal_policy_time);
             $udtf->setEnableCalcSystemTotalTime(FALSE);
             if ($udtf->isValid() == TRUE) {
                 $udtf->Save();
             }
             unset($udtf);
         }
     } else {
         Debug::text(' No Meal Policy found, or not after meal policy trigger time yet...', __FILE__, __LINE__, __METHOD__, 10);
     }
     return $meal_policy_time;
 }