protected function getLeaveDurationObject($parameters) { $durationObj = new LeaveDuration(); $type = $parameters['duration']; $durationObj->setType($type); if ($type == LeaveDuration::HALF_DAY) { $durationObj->setAmPm($parameters['ampm']); } else { if ($type == LeaveDuration::SPECIFY_TIME) { $durationObj->setFromTime($parameters['time']['from']); $durationObj->setToTime($parameters['time']['to']); } } return $durationObj; }
protected function updateLeaveDurationParameters(&$leave, $empNumber, LeaveDuration $duration, $isWeekend, $isHoliday, $isHalfday, $isHalfDayHoliday) { $workSchedule = $this->getWorkScheduleService()->getWorkSchedule($empNumber); $workScheduleStartEndTime = $workSchedule->getWorkShiftStartEndTime(); $workScheduleDuration = $workSchedule->getWorkShiftLength(); $midDay = $this->addHoursDuration($workScheduleStartEndTime['start_time'], $workScheduleDuration / 2); // set status switch ($duration->getType()) { case LeaveDuration::FULL_DAY: $leave->setDurationType(Leave::DURATION_TYPE_FULL_DAY); // For backwards compatibility, set to 00:00 $leave->setStartTime('00:00'); $leave->setEndTime('00:00'); break; case LeaveDuration::HALF_DAY: if ($duration->getAmPm() == LeaveDuration::HALF_DAY_AM) { $leave->setDurationType(Leave::DURATION_TYPE_HALF_DAY_AM); $leave->setStartTime($workScheduleStartEndTime['start_time']); $leave->setEndTime($midDay); } else { $leave->setDurationType(Leave::DURATION_TYPE_HALF_DAY_PM); $leave->setStartTime($midDay); $leave->setEndTime($workScheduleStartEndTime['end_time']); } break; case LeaveDuration::SPECIFY_TIME: $leave->setDurationType(Leave::DURATION_TYPE_SPECIFY_TIME); $leave->setStartTime($duration->getFromTime()); $leave->setEndTime($duration->getToTime()); break; } if ($isWeekend || $isHoliday) { // Full Day Off $durationInHours = 0; } else { if ($isHalfday || $isHalfDayHoliday) { if ($duration->getType() == LeaveDuration::FULL_DAY) { $durationInHours = $workScheduleDuration; } else { if ($duration->getType() == LeaveDuration::HALF_DAY) { $durationInHours = $workScheduleDuration / 2; } else { $durationInHours = $this->getDurationInHours($duration->getFromTime(), $duration->getToTime()); } } $halfDayHours = $workScheduleDuration / 2; if ($durationInHours > $halfDayHours) { $durationInHours = $halfDayHours; } // Half Day Off } else { // Full Working Day if ($duration->getType() == LeaveDuration::FULL_DAY) { $durationInHours = $workScheduleDuration; } else { if ($duration->getType() == LeaveDuration::HALF_DAY) { $durationInHours = $workScheduleDuration / 2; } else { $durationInHours = $this->getDurationInHours($duration->getFromTime(), $duration->getToTime()); } } } } $leave->setLengthHours(number_format($durationInHours, 2)); $leave->setLengthDays(number_format($durationInHours / $workScheduleDuration, 3)); }