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; }