コード例 #1
0
 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;
 }
コード例 #2
0
 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));
 }