Na rynku jest dużo komercyjnych produktów z tego zakresu, ale jeżeli szukasz czegoś darmowego, co można by samemu dostosowywać, to proponowałbym jakiś współczesny system obsługi zgłoszeń (współczesny, żeby miał API). Wówczas zgłoszenie = task/urlop, w szczegółach zgłoszenia można podać czas. Niektóre systemy (np. Redmine) potrafią rozbijać wykonywanie tasku na kolejne okresy czasowe, więc nie musi dochodzić do sytuacji duplikowania zadań każdego dnia.