private List <Appointment> GetFreeAppointmentsForDay(TimeInterval time, RecommendationDTO appointmentsDay)
        {
            List <Appointment> freeAppointments  = new List <Appointment>();
            List <Appointment> takenAppointments = appointmentsDay.TakenAppointments;

            TimeIterator timeIterator = GetTimeIterator(time, appointmentsDay.DoctorShift);

            // iterate through every taken appointment
            for (int i = 0; i < takenAppointments.Count(); i++)
            {
                Appointment takenAp = takenAppointments[i];
                freeAppointments.AddRange(GetFreeAppointmentsUntilTaken(timeIterator, takenAp, appointmentsDay.Doctor));

                // skip taken appointment
                timeIterator.SkipInterval(takenAp.TimeInterval);

                // if taken appointment is the last one for given day, fill the rest of the time with free appointments
                if (i == takenAppointments.Count() - 1) //last one
                {
                    freeAppointments.AddRange(GetFreeAppointmentsRestOfTheDay(timeIterator, appointmentsDay.Doctor));
                }
            }

            // if no taken appointments exist for given day, fill the list with free appointments for that day
            if (takenAppointments.Count() == 0)
            {
                freeAppointments.AddRange(GetFreeAppointmentsRestOfTheDay(timeIterator, appointmentsDay.Doctor));
            }

            return(freeAppointments);
        }
        private List <Appointment> GetFreeAppointmentsUntilTaken(TimeIterator timeIterator, Appointment takenAp, Doctor doctor)
        {
            List <Appointment> freeAppointments = new List <Appointment>();

            while (!takenAp.TimeInterval.IsOverlappingWith(timeIterator.GetCurrentTimeFrame()))
            {
                freeAppointments.Add(GetFreeAppointment(timeIterator, doctor));
                timeIterator.Next();
            }

            return(freeAppointments);
        }
        private List <Appointment> GetFreeAppointmentsRestOfTheDay(TimeIterator timeIterator, Doctor doctor)
        {
            List <Appointment> freeAppointments = new List <Appointment>();

            while (timeIterator.HasNext())
            {
                freeAppointments.Add(GetFreeAppointment(timeIterator, doctor));
                timeIterator.Next();
            }

            return(freeAppointments);
        }
 private Appointment GetFreeAppointment(TimeIterator timeIt, Doctor doctor)
 {
     return(new Appointment(doctor, null, null, AppointmentType.checkup, timeIt.GetCurrentTimeFrame()));
 }