Exemple #1
0
        public IEnumerable <DateTime> GetAvaliableTime(string DoctorId, DateTime date)
        {
            User foundUser = DbContext.Users.Include(u => u.TimeTable).ThenInclude(t => t.Visits).ThenInclude(v => v.Status).FirstOrDefault(u => u.Id == DoctorId);

            if (foundUser is null)
            {
                return(null);
            }

            var times = new List <DateTime>();

            if (date.DayOfWeek == DayOfWeek.Sunday || date.DayOfWeek == DayOfWeek.Saturday)
            {
                return(times);
            }

            DateTime currentTime = foundUser.WorktimeStart ?? new DateTime(0, 0, 0, 9, 0, 0);
            DateTime endTime     = foundUser.WorktimeEnd ?? new DateTime(0, 0, 0, 18, 0, 0);

            do
            {
                if (currentTime.ActualTime() < foundUser.BreakStart.ActualTime() || currentTime.ActualTime() > foundUser.BreakEnd.ActualTime())
                {
                    times.Add(currentTime);
                }

                currentTime = currentTime.AddMinutes(20d);
            } while (endTime.Hour != currentTime.Hour);

            foundUser.TimeTable.Visits.Where(v => v.StartTime.DayOfYear == date.DayOfYear && v.Status.Status == VisitStatuses.PENDING).ToList().ForEach(v =>
            {
                DateTime time = times.FirstOrDefault(t => v.StartTime.Hour == t.Hour && v.StartTime.Minute == t.Minute);
                if (time is DateTime found)
                {
                    times.Remove(found);
                }
            });

            return(times);
        }