function setRoundInterValPolicy($id)
 {
     $id = trim($id);
     $riplf = new RoundIntervalPolicyListFactory();
     if ($id == 0 or $this->Validator->isResultSetWithRows('round_inteval_policy', $riplf->getByID($id), TTi18n::gettext('Selected Interval Rounding Policy is invalid'))) {
         $this->data['round_interval_policy_id'] = $id;
         return TRUE;
     }
     return FALSE;
 }
예제 #2
0
     BreadCrumb::setCrumb($title);
     $pglf = new PolicyGroupListFactory();
     $pglf->getByIdAndCompanyID($id, $current_company->getID());
     foreach ($pglf as $pg_obj) {
         //Debug::Arr($station,'Department', __FILE__, __LINE__, __METHOD__,10);
         $data = array('id' => $pg_obj->getId(), 'name' => $pg_obj->getName(), 'meal_policy_ids' => $pg_obj->getMealPolicy(), 'break_policy_ids' => $pg_obj->getBreakPolicy(), 'holiday_policy_ids' => $pg_obj->getHolidayPolicy(), 'exception_policy_control_id' => $pg_obj->getExceptionPolicyControlID(), 'user_ids' => $pg_obj->getUser(), 'over_time_policy_ids' => $pg_obj->getOverTimePolicy(), 'premium_policy_ids' => $pg_obj->getPremiumPolicy(), 'round_interval_policy_ids' => $pg_obj->getRoundIntervalPolicy(), 'accrual_policy_ids' => $pg_obj->getAccrualPolicy(), 'created_date' => $pg_obj->getCreatedDate(), 'created_by' => $pg_obj->getCreatedBy(), 'updated_date' => $pg_obj->getUpdatedDate(), 'updated_by' => $pg_obj->getUpdatedBy(), 'deleted_date' => $pg_obj->getDeletedDate(), 'deleted_by' => $pg_obj->getDeletedBy());
     }
 }
 $none_array_option = array('0' => TTi18n::gettext('-- None --'));
 $ulf = new UserListFactory();
 $user_options = $ulf->getByCompanyIDArray($current_company->getId(), FALSE, TRUE);
 $otplf = new OverTimePolicyListFactory();
 $over_time_policy_options = Misc::prependArray($none_array_option, $otplf->getByCompanyIDArray($current_company->getId(), FALSE));
 $pplf = new PremiumPolicyListFactory();
 $premium_policy_options = Misc::prependArray($none_array_option, $pplf->getByCompanyIDArray($current_company->getId(), FALSE));
 $riplf = new RoundIntervalPolicyListFactory();
 $round_interval_policy_options = Misc::prependArray($none_array_option, $riplf->getByCompanyIDArray($current_company->getId(), FALSE));
 $mplf = new MealPolicyListFactory();
 $meal_options = Misc::prependArray($none_array_option, $mplf->getByCompanyIdArray($current_company->getId(), FALSE));
 $bplf = new BreakPolicyListFactory();
 $break_options = Misc::prependArray($none_array_option, $bplf->getByCompanyIdArray($current_company->getId(), FALSE));
 $epclf = new ExceptionPolicyControlListFactory();
 $exception_options = Misc::prependArray($none_array_option, $epclf->getByCompanyIdArray($current_company->getId(), FALSE));
 $hplf = new HolidayPolicyListFactory();
 $holiday_policy_options = Misc::prependArray($none_array_option, $hplf->getByCompanyIdArray($current_company->getId(), FALSE));
 $aplf = new AccrualPolicyListFactory();
 $aplf->getByCompanyIdAndTypeID($current_company->getId(), array(20, 30));
 //Calendar and Hour based.
 $accrual_options = Misc::prependArray($none_array_option, $aplf->getArrayByListFactory($aplf, FALSE));
 //Select box options;
 $data['user_options'] = $user_options;
 function setRoundIntervalPolicyID($id)
 {
     $id = trim($id);
     if ($id == '' or empty($id)) {
         $id = NULL;
     }
     $riplf = new RoundIntervalPolicyListFactory();
     if ($id == NULL or $this->Validator->isResultSetWithRows('round_interval_policy', $riplf->getByID($id), TTi18n::gettext('Round Interval Policy is invalid'))) {
         $this->data['round_interval_policy_id'] = $id;
         return TRUE;
     }
     return FALSE;
 }
예제 #4
0
 function roundTimeStamp($epoch)
 {
     $original_epoch = $epoch;
     Debug::text(' Rounding Timestamp: ' . TTDate::getDate('DATE+TIME', $epoch) . ' Status ID: ' . $this->getStatus() . ' Type ID: ' . $this->getType(), __FILE__, __LINE__, __METHOD__, 10);
     /*
     		//Punch control is no longer used for rounding.
     		if ( !is_object( $this->getPunchControlObject() ) ) {
     			return FALSE;
     		}
     */
     //Check for rounding policies.
     $riplf = new RoundIntervalPolicyListFactory();
     $type_id = $riplf->getPunchTypeFromPunchStatusAndType($this->getStatus(), $this->getType());
     Debug::text(' Round Interval Punch Type: ' . $type_id . ' User: '******' Found Rounding Policy: ' . $round_policy_obj->getId() . ' Punch Type: ' . $round_policy_obj->getPunchType(), __FILE__, __LINE__, __METHOD__, 10);
         //FIXME: It will only do proper total rounding if they edit the Lunch Out punch.
         //We need to account for cases when they edit just the Lunch In Punch.
         if ($round_policy_obj->getPunchType() == 100) {
             Debug::text('Lunch Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             //On Lunch Punch In (back from lunch) do the total rounding.
             if ($this->getStatus() == 10 and $this->getType() == 20) {
                 Debug::text('bLunch Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
                 //If strict is set, round to scheduled lunch time?
                 //Find Lunch Punch In.
                 $plf = new PunchListFactory();
                 //$plf->getPreviousPunchByUserDateIdAndStatusAndTypeAndEpoch( $this->getPunchControlObject()->getUserDateID(), 20, 20, $epoch );
                 $plf->getPreviousPunchByUserIdAndStatusAndTypeAndEpoch($this->getUser(), 20, 20, $epoch);
                 if ($plf->getRecordCount() == 1) {
                     Debug::text('Found Lunch Punch Out: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                     $total_lunch_time = $epoch - $plf->getCurrent()->getTimeStamp();
                     Debug::text('Total Lunch Time: ' . $total_lunch_time, __FILE__, __LINE__, __METHOD__, 10);
                     //Set the ScheduleID
                     $has_schedule = $this->setScheduleID($this->findScheduleID($epoch));
                     if ($has_schedule == TRUE and $round_policy_obj->getGrace() > 0 and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                         Debug::text(' Applying Grace Period: ', __FILE__, __LINE__, __METHOD__, 10);
                         $total_lunch_time = TTDate::graceTime($total_lunch_time, $round_policy_obj->getGrace(), $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount());
                         Debug::text('After Grace: ' . $total_lunch_time, __FILE__, __LINE__, __METHOD__, 10);
                     }
                     if ($round_policy_obj->getInterval() > 0) {
                         Debug::Text(' Rounding to interval: ' . $round_policy_obj->getInterval(), __FILE__, __LINE__, __METHOD__, 10);
                         $total_lunch_time = TTDate::roundTime($total_lunch_time, $round_policy_obj->getInterval(), $round_policy_obj->getRoundType(), $round_policy_obj->getGrace());
                         Debug::text('After Rounding: ' . $total_lunch_time, __FILE__, __LINE__, __METHOD__, 10);
                     }
                     if ($has_schedule == TRUE and $round_policy_obj->getStrict() == TRUE and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                         Debug::Text(' Snap Time: Round Type: ' . $round_policy_obj->getRoundType(), __FILE__, __LINE__, __METHOD__, 10);
                         if ($round_policy_obj->getRoundType() == 10) {
                             Debug::Text(' Snap Time DOWN ', __FILE__, __LINE__, __METHOD__, 10);
                             $total_lunch_time = TTDate::snapTime($total_lunch_time, $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount(), 'DOWN');
                         } elseif ($round_policy_obj->getRoundType() == 30) {
                             Debug::Text(' Snap Time UP', __FILE__, __LINE__, __METHOD__, 10);
                             $total_lunch_time = TTDate::snapTime($total_lunch_time, $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount(), 'UP');
                         } else {
                             Debug::Text(' Not Snaping Time', __FILE__, __LINE__, __METHOD__, 10);
                         }
                     }
                     $epoch = $plf->getCurrent()->getTimeStamp() + $total_lunch_time;
                     Debug::text('Epoch after total rounding is: ' . $epoch . ' - ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
                 } else {
                     Debug::text('DID NOT Find Lunch Punch Out: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                 }
             } else {
                 Debug::text('Skipping Lunch Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             }
         } elseif ($round_policy_obj->getPunchType() == 110) {
             //Break Total
             Debug::text('break Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             //On break Punch In (back from break) do the total rounding.
             if ($this->getStatus() == 10 and $this->getType() == 30) {
                 Debug::text('bbreak Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
                 //If strict is set, round to scheduled break time?
                 //Find break Punch In.
                 $plf = new PunchListFactory();
                 //$plf->getPreviousPunchByUserDateIdAndStatusAndTypeAndEpoch( $this->getPunchControlObject()->getUserDateID(), 20, 30, $epoch );
                 $plf->getPreviousPunchByUserIdAndStatusAndTypeAndEpoch($this->getUser(), 20, 30, $epoch);
                 if ($plf->getRecordCount() == 1) {
                     Debug::text('Found break Punch Out: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                     $total_break_time = $epoch - $plf->getCurrent()->getTimeStamp();
                     Debug::text('Total break Time: ' . $total_break_time, __FILE__, __LINE__, __METHOD__, 10);
                     //Set the ScheduleID
                     $has_schedule = $this->setScheduleID($this->findScheduleID($epoch));
                     if ($has_schedule == TRUE and $round_policy_obj->getGrace() > 0 and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                         Debug::text(' Applying Grace Period: ', __FILE__, __LINE__, __METHOD__, 10);
                         $total_break_time = TTDate::graceTime($total_break_time, $round_policy_obj->getGrace(), $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount());
                         Debug::text('After Grace: ' . $total_break_time, __FILE__, __LINE__, __METHOD__, 10);
                     }
                     if ($round_policy_obj->getInterval() > 0) {
                         Debug::Text(' Rounding to interval: ' . $round_policy_obj->getInterval(), __FILE__, __LINE__, __METHOD__, 10);
                         $total_break_time = TTDate::roundTime($total_break_time, $round_policy_obj->getInterval(), $round_policy_obj->getRoundType(), $round_policy_obj->getGrace());
                         Debug::text('After Rounding: ' . $total_break_time, __FILE__, __LINE__, __METHOD__, 10);
                     }
                     if ($has_schedule == TRUE and $round_policy_obj->getStrict() == TRUE and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                         Debug::Text(' Snap Time: Round Type: ' . $round_policy_obj->getRoundType(), __FILE__, __LINE__, __METHOD__, 10);
                         if ($round_policy_obj->getRoundType() == 10) {
                             Debug::Text(' Snap Time DOWN ', __FILE__, __LINE__, __METHOD__, 10);
                             $total_break_time = TTDate::snapTime($total_break_time, $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount(), 'DOWN');
                         } elseif ($round_policy_obj->getRoundType() == 30) {
                             Debug::Text(' Snap Time UP', __FILE__, __LINE__, __METHOD__, 10);
                             $total_break_time = TTDate::snapTime($total_break_time, $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount(), 'UP');
                         } else {
                             Debug::Text(' Not Snaping Time', __FILE__, __LINE__, __METHOD__, 10);
                         }
                     }
                     $epoch = $plf->getCurrent()->getTimeStamp() + $total_break_time;
                     Debug::text('Epoch after total rounding is: ' . $epoch . ' - ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
                 } else {
                     Debug::text('DID NOT Find break Punch Out: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                 }
             } else {
                 Debug::text('Skipping break Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             }
         } elseif ($round_policy_obj->getPunchType() == 120) {
             //Day Total Rounding
             Debug::text('Day Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             if ($this->getStatus() == 20 and $this->getType() == 10) {
                 //Out, Type Normal
                 Debug::text('bDay Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
                 //If strict is set, round to scheduled time?
                 $plf = new PunchListFactory();
                 $plf->getPreviousPunchByUserIdAndEpochAndNotPunchIDAndMaximumShiftTime($this->getUser(), $epoch, $this->getId());
                 if ($plf->getRecordCount() == 1) {
                     Debug::text('Found Previous Punch In: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                     //Get day total time prior to this punch control.
                     $pclf = new PunchControlListFactory();
                     $pclf->getByUserDateId($plf->getCurrent()->getPunchControlObject()->getUserDateID());
                     if ($pclf->getRecordCount() > 0) {
                         $day_total_time = $epoch - $plf->getCurrent()->getTimeStamp();
                         Debug::text('aDay Total Time: ' . $day_total_time . ' Current Punch Control ID: ' . $this->getPunchControlID(), __FILE__, __LINE__, __METHOD__, 10);
                         foreach ($pclf as $pc_obj) {
                             if ($plf->getCurrent()->getPunchControlID() != $pc_obj->getID()) {
                                 Debug::text('Punch Control Total Time: ' . $pc_obj->getTotalTime() . ' ID: ' . $pc_obj->getId(), __FILE__, __LINE__, __METHOD__, 10);
                                 $day_total_time += $pc_obj->getTotalTime();
                             }
                         }
                         Debug::text('bDay Total Time: ' . $day_total_time, __FILE__, __LINE__, __METHOD__, 10);
                         $original_day_total_time = $day_total_time;
                         if ($day_total_time > 0) {
                             //Set the ScheduleID
                             $has_schedule = $this->setScheduleID($this->findScheduleID($epoch));
                             if ($has_schedule == TRUE and $round_policy_obj->getGrace() > 0 and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                                 Debug::text(' Applying Grace Period: ', __FILE__, __LINE__, __METHOD__, 10);
                                 $day_total_time = TTDate::graceTime($day_total_time, $round_policy_obj->getGrace(), $this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject()->getAmount());
                                 Debug::text('After Grace: ' . $day_total_time, __FILE__, __LINE__, __METHOD__, 10);
                             }
                             if ($round_policy_obj->getInterval() > 0) {
                                 Debug::Text(' Rounding to interval: ' . $round_policy_obj->getInterval(), __FILE__, __LINE__, __METHOD__, 10);
                                 $day_total_time = TTDate::roundTime($day_total_time, $round_policy_obj->getInterval(), $round_policy_obj->getRoundType(), $round_policy_obj->getGrace());
                                 Debug::text('After Rounding: ' . $day_total_time, __FILE__, __LINE__, __METHOD__, 10);
                             }
                             if ($has_schedule == TRUE and $round_policy_obj->getStrict() == TRUE and is_object($this->getScheduleObject()->getSchedulePolicyObject()) and is_object($this->getScheduleObject()->getSchedulePolicyObject()->getMealPolicyObject())) {
                                 Debug::Text(' Snap Time: Round Type: ' . $round_policy_obj->getRoundType(), __FILE__, __LINE__, __METHOD__, 10);
                                 if ($round_policy_obj->getRoundType() == 10) {
                                     Debug::Text(' Snap Time DOWN ', __FILE__, __LINE__, __METHOD__, 10);
                                     $day_total_time = TTDate::snapTime($day_total_time, $this->getScheduleObject()->getTotalTime(), 'DOWN');
                                 } elseif ($round_policy_obj->getRoundType() == 30) {
                                     Debug::Text(' Snap Time UP', __FILE__, __LINE__, __METHOD__, 10);
                                     $day_total_time = TTDate::snapTime($day_total_time, $this->getScheduleObject()->getTotalTime(), 'UP');
                                 } else {
                                     Debug::Text(' Not Snaping Time', __FILE__, __LINE__, __METHOD__, 10);
                                 }
                             }
                             Debug::text('cDay Total Time: ' . $day_total_time, __FILE__, __LINE__, __METHOD__, 10);
                             $day_total_time_diff = $day_total_time - $original_day_total_time;
                             Debug::text('Day Total Diff: ' . $day_total_time_diff, __FILE__, __LINE__, __METHOD__, 10);
                             $epoch = $original_epoch + $day_total_time_diff;
                         }
                     }
                 } else {
                     Debug::text('DID NOT Find Normal Punch Out: ' . TTDate::getDate('DATE+TIME', $plf->getCurrent()->getTimeStamp()), __FILE__, __LINE__, __METHOD__, 10);
                 }
             } else {
                 Debug::text('Skipping Lunch Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             }
         } else {
             Debug::text('NOT Total Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             if ($this->inScheduleStartStopWindow($epoch) and $round_policy_obj->getGrace() > 0) {
                 Debug::text(' Applying Grace Period: ', __FILE__, __LINE__, __METHOD__, 10);
                 $epoch = TTDate::graceTime($epoch, $round_policy_obj->getGrace(), $this->getScheduleWindowTime());
                 Debug::text('After Grace: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             }
             $grace_time = $round_policy_obj->getGrace();
             //If strict scheduling is enabled, handle grace times differently.
             //Only apply them above if we are near the schedule start/stop time.
             //This allows for grace time to apply if an employee punches in late,
             //but afterwards not apply at all.
             if ($round_policy_obj->getStrict() == TRUE) {
                 $grace_time = 0;
             }
             if ($round_policy_obj->getInterval() > 0) {
                 Debug::Text(' Rounding to interval: ' . $round_policy_obj->getInterval(), __FILE__, __LINE__, __METHOD__, 10);
                 $epoch = TTDate::roundTime($epoch, $round_policy_obj->getInterval(), $round_policy_obj->getRoundType(), $grace_time);
                 Debug::text('After Rounding: ' . TTDate::getDate('DATE+TIME', $epoch), __FILE__, __LINE__, __METHOD__, 10);
             }
             //ONLY perform strict rounding on Normal punches, not break/lunch punches?
             //Modify the UI to restrict this as well perhaps?
             if ($round_policy_obj->getStrict() == TRUE and $this->getScheduleWindowTime() !== FALSE) {
                 Debug::Text(' Snap Time: Round Type: ' . $round_policy_obj->getRoundType(), __FILE__, __LINE__, __METHOD__, 10);
                 if ($round_policy_obj->getRoundType() == 10) {
                     Debug::Text(' Snap Time DOWN ', __FILE__, __LINE__, __METHOD__, 10);
                     $epoch = TTDate::snapTime($epoch, $this->getScheduleWindowTime(), 'DOWN');
                 } elseif ($round_policy_obj->getRoundType() == 30) {
                     Debug::Text(' Snap Time UP', __FILE__, __LINE__, __METHOD__, 10);
                     $epoch = TTDate::snapTime($epoch, $this->getScheduleWindowTime(), 'UP');
                 } else {
                     //If its an In Punch, snap up, if its out punch, snap down?
                     Debug::Text(' Average rounding type, automatically determining snap direction.', __FILE__, __LINE__, __METHOD__, 10);
                     if ($this->getStatus() == 10) {
                         Debug::Text(' Snap Time UP', __FILE__, __LINE__, __METHOD__, 10);
                         $epoch = TTDate::snapTime($epoch, $this->getScheduleWindowTime(), 'UP');
                     } else {
                         Debug::Text(' Snap Time DOWN ', __FILE__, __LINE__, __METHOD__, 10);
                         $epoch = TTDate::snapTime($epoch, $this->getScheduleWindowTime(), 'DOWN');
                     }
                 }
             }
         }
     } else {
         Debug::text(' NO Rounding Policy(s) Found', __FILE__, __LINE__, __METHOD__, 10);
     }
     Debug::text(' Rounded TimeStamp: ' . TTDate::getDate('DATE+TIME', $epoch) . ' Original TimeStamp: ' . TTDate::getDate('DATE+TIME', $original_epoch), __FILE__, __LINE__, __METHOD__, 10);
     return $epoch;
 }
예제 #5
0
    default:
        if (isset($id)) {
            BreadCrumb::setCrumb($title);
            $hplf = new HolidayPolicyListFactory();
            $hplf->getByIdAndCompanyID($id, $current_company->getID());
            foreach ($hplf as $hp_obj) {
                //Debug::Arr($station,'Department', __FILE__, __LINE__, __METHOD__,10);
                $data = array('id' => $hp_obj->getId(), 'name' => $hp_obj->getName(), 'type_id' => $hp_obj->getType(), 'default_schedule_status_id' => $hp_obj->getDefaultScheduleStatus(), 'minimum_employed_days' => $hp_obj->getMinimumEmployedDays(), 'minimum_worked_period_days' => $hp_obj->getMinimumWorkedPeriodDays(), 'minimum_worked_days' => $hp_obj->getMinimumWorkedDays(), 'worked_scheduled_days' => $hp_obj->getWorkedScheduledDays(), 'minimum_worked_after_period_days' => $hp_obj->getMinimumWorkedAfterPeriodDays(), 'minimum_worked_after_days' => $hp_obj->getMinimumWorkedAfterDays(), 'worked_after_scheduled_days' => $hp_obj->getWorkedAfterScheduledDays(), 'average_time_days' => $hp_obj->getAverageTimeDays(), 'average_time_worked_days' => $hp_obj->getAverageTimeWorkedDays(), 'force_over_time_policy' => $hp_obj->getForceOverTimePolicy(), 'include_over_time' => $hp_obj->getIncludeOverTime(), 'include_paid_absence_time' => $hp_obj->getIncludePaidAbsenceTime(), 'minimum_time' => $hp_obj->getMinimumTime(), 'maximum_time' => $hp_obj->getMaximumTime(), 'round_interval_policy_id' => $hp_obj->getRoundIntervalPolicyID(), 'absence_policy_id' => $hp_obj->getAbsencePolicyID(), 'recurring_holiday_ids' => $hp_obj->getRecurringHoliday(), 'created_date' => $hp_obj->getCreatedDate(), 'created_by' => $hp_obj->getCreatedBy(), 'updated_date' => $hp_obj->getUpdatedDate(), 'updated_by' => $hp_obj->getUpdatedBy(), 'deleted_date' => $hp_obj->getDeletedDate(), 'deleted_by' => $hp_obj->getDeletedBy());
            }
        } elseif ($action != 'submit') {
            //Defaults
            $data = array('default_schedule_status_id' => 20, 'minimum_employed_days' => 30, 'minimum_worked_period_days' => 30, 'minimum_worked_days' => 15, 'minimum_worked_after_period_days' => 0, 'minimum_worked_after_days' => 0, 'average_time_days' => 30, 'force_over_time_policy' => FALSE, 'include_over_time' => FALSE, 'include_paid_absence_time' => TRUE, 'minimum_time' => 0, 'maximum_time' => 0);
        }
        $aplf = new AbsencePolicyListFactory();
        $absence_options = $aplf->getByCompanyIDArray($current_company->getId(), TRUE);
        $riplf = new RoundIntervalPolicyListFactory();
        $round_interval_options = $riplf->getByCompanyIDArray($current_company->getId(), TRUE);
        $rhlf = new RecurringHolidayListFactory();
        $recurring_holiday_options = $rhlf->getByCompanyIDArray($current_company->getId(), TRUE);
        $sf = new ScheduleFactory();
        //Select box options;
        $data['type_options'] = $hpf->getOptions('type');
        $data['schedule_status_options'] = $sf->getOptions('status');
        $data['scheduled_day_options'] = $hpf->getOptions('scheduled_day');
        $data['absence_options'] = $absence_options;
        $data['round_interval_options'] = $round_interval_options;
        $data['recurring_holiday_options'] = $recurring_holiday_options;
        $smarty->assign_by_ref('data', $data);
        break;
}
$smarty->assign_by_ref('hpf', $hpf);
 function getByCompanyIdArray($company_id, $include_blank = TRUE)
 {
     $riplf = new RoundIntervalPolicyListFactory();
     $riplf->getByCompanyId($company_id);
     if ($include_blank == TRUE) {
         $list[0] = '--';
     }
     foreach ($riplf as $rip_obj) {
         $list[$rip_obj->getID()] = $rip_obj->getName();
     }
     if (isset($list)) {
         return $list;
     }
     return FALSE;
 }
        $ripf->setInterval($data['interval']);
        $ripf->setGrace($data['grace']);
        if (isset($data['strict'])) {
            $ripf->setStrict(TRUE);
        } else {
            $ripf->setStrict(FALSE);
        }
        if ($ripf->isValid()) {
            $ripf->Save();
            Redirect::Page(URLBuilder::getURL(NULL, 'RoundIntervalPolicyList.php'));
            break;
        }
    default:
        if (isset($id)) {
            BreadCrumb::setCrumb($title);
            $riplf = new RoundIntervalPolicyListFactory();
            $riplf->getByIdAndCompanyID($id, $current_company->getID());
            foreach ($riplf as $rip_obj) {
                //Debug::Arr($station,'Department', __FILE__, __LINE__, __METHOD__,10);
                $data = array('id' => $rip_obj->getId(), 'name' => $rip_obj->getName(), 'punch_type_id' => $rip_obj->getPunchType(), 'round_type_id' => $rip_obj->getRoundType(), 'interval' => $rip_obj->getInterval(), 'grace' => $rip_obj->getGrace(), 'strict' => $rip_obj->getStrict(), 'created_date' => $rip_obj->getCreatedDate(), 'created_by' => $rip_obj->getCreatedBy(), 'updated_date' => $rip_obj->getUpdatedDate(), 'updated_by' => $rip_obj->getUpdatedBy(), 'deleted_date' => $rip_obj->getDeletedDate(), 'deleted_by' => $rip_obj->getDeletedBy());
            }
        } elseif ($action != 'submit') {
            $data = array('interval' => 900, 'grace' => 0);
        }
        //Select box options;
        $data['punch_type_options'] = $ripf->getOptions('punch_type');
        $data['round_type_options'] = $ripf->getOptions('round_type');
        $smarty->assign_by_ref('data', $data);
        break;
}
$smarty->assign_by_ref('ripf', $ripf);
         $delete = TRUE;
     } else {
         $delete = FALSE;
     }
     $riplf = new RoundIntervalPolicyListFactory();
     foreach ($ids as $id) {
         $riplf->getByIdAndCompanyId($id, $current_company->getId());
         foreach ($riplf as $rip_obj) {
             $rip_obj->setDeleted($delete);
             $rip_obj->Save();
         }
     }
     Redirect::Page(URLBuilder::getURL(NULL, 'RoundIntervalPolicyList.php'));
     break;
 default:
     $riplf = new RoundIntervalPolicyListFactory();
     $riplf->getByCompanyId($current_company->getId());
     $pager = new Pager($riplf);
     $punch_type_options = $riplf->getOptions('punch_type');
     $show_no_policy_group_notice = FALSE;
     foreach ($riplf as $rip_obj) {
         if ((int) $rip_obj->getColumn('assigned_policy_groups') == 0) {
             $show_no_policy_group_notice = TRUE;
         }
         $policies[] = array('id' => $rip_obj->getId(), 'name' => $rip_obj->getName(), 'punch_type_id' => $rip_obj->getPunchType(), 'punch_type' => $punch_type_options[$rip_obj->getPunchType()], 'interval' => $rip_obj->getInterval(), 'assigned_policy_groups' => (int) $rip_obj->getColumn('assigned_policy_groups'), 'deleted' => $rip_obj->getDeleted());
     }
     $smarty->assign_by_ref('policies', $policies);
     $smarty->assign_by_ref('show_no_policy_group_notice', $show_no_policy_group_notice);
     $smarty->assign_by_ref('sort_column', $sort_column);
     $smarty->assign_by_ref('sort_order', $sort_order);
     $smarty->assign_by_ref('paging_data', $pager->getPageVariables());