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 org.synyx.urlaubsverwaltung.core.sicknote.SickNote;
import org.synyx.urlaubsverwaltung.core.sicknote.SickNoteService;
import java.util.List;
import java.util.Optional;
/**
* @author Timo Eifler - eifler@synyx.de
*/
@Service
class SickDayAbsenceProvider extends AbstractTimedAbsenceProvider {
private SickNoteService sickNoteService;
@Autowired
SickDayAbsenceProvider(VacationAbsenceProvider nextPriorityProvider, SickNoteService sickNoteService) {
super(nextPriorityProvider);
this.sickNoteService = sickNoteService;
}
@Override
TimedAbsenceSpans addAbsence(TimedAbsenceSpans knownAbsences, Person person, DateMidnight date) {
Optional<TimedAbsence> sickDayAbsence = checkForSickDay(date, person);
if (sickDayAbsence.isPresent()) {
List<TimedAbsence> knownAbsencesList = knownAbsences.getAbsencesList();
knownAbsencesList.add(sickDayAbsence.get());
return new TimedAbsenceSpans(knownAbsencesList);
}
return knownAbsences;
}
@Override
boolean isLastPriorityProvider() {
return false;
}
private Optional<TimedAbsence> checkForSickDay(DateMidnight date, Person person) {
List<SickNote> sickNotes = sickNoteService.getByPersonAndPeriod(person, date, date);
if (!sickNotes.isEmpty()) {
SickNote sickNote = sickNotes.get(0);
if (sickNote != null && sickNote.isActive()) {
return Optional.of(new TimedAbsence(sickNote.getDayLength(), TimedAbsence.Type.SICK_NOTE));
}
}
return Optional.empty();
}
}