package org.synyx.urlaubsverwaltung.restapi.availability;
import org.joda.time.DateMidnight;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.synyx.urlaubsverwaltung.core.person.Person;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* Service to retrieve {@link DayAvailability} information.
*
* @author Timo Eifler - eifler@synyx.de
*/
@Service
public class AvailabilityService {
private final FreeTimeAbsenceProvider freeTimeAbsenceProvider;
@Autowired
public AvailabilityService(FreeTimeAbsenceProvider freeTimeAbsenceProvider) {
this.freeTimeAbsenceProvider = freeTimeAbsenceProvider;
}
/**
* Fetch an {@link AvailabilityList} for the given person on all days in the given period of time.
*/
public AvailabilityList getPersonsAvailabilities(DateMidnight startDate, DateMidnight endDate, Person person) {
List<DayAvailability> availabilities = new ArrayList<>();
DateMidnight currentDay = startDate;
while (!currentDay.isAfter(endDate)) {
TimedAbsenceSpans absences = freeTimeAbsenceProvider.checkForAbsence(person, currentDay);
BigDecimal presenceRatio = absences.calculatePresenceRatio();
availabilities.add(new DayAvailability(presenceRatio, currentDay.toString("yyyy-MM-dd"), absences));
currentDay = currentDay.plusDays(1);
}
return new AvailabilityList(availabilities, person);
}
}