public IDictionary <string, ConsultantSchedule> GetConsultantScheduleWebApi(int dealerId, string clientDateTime)
        {
            var consultants = _dealerConsultantsRepository.Value.GetQuery()
                              .Where(x => x.DealerId == dealerId).ToList();

            var schedule = _dealerConsultantSchedulesRepository.Value.GetQuery()
                           .Where(x => x.DealerConsultant.DealerId == dealerId)
                           //.OrderBy(x => x.TimeFrom)
                           .ToList();

            if (!schedule.Any())
            {
                return(new Dictionary <string, ConsultantSchedule>());
            }

            var userDateTime = DateTime.Now;

            if (clientDateTime != null)
            {
                userDateTime = DateTime.Parse(clientDateTime);
            }

            var dateNow = userDateTime.Date;

            var inspectionOrders =
                _inspectionOrdersRepository.Value.GetQuery()
                .Where(x =>
                       x.DealerId == dealerId && x.ToType == OrderToTypes.Consultant &&
                       x.OrderDateTime >= dateNow)
                .ToList();

            var result = new Dictionary <string, ConsultantSchedule>();

            foreach (var consultant in consultants)
            {
                var dealerSchedule = new ConsultantSchedule();
                dealerSchedule.Name = $"{consultant.Firstname} {consultant.Surname}";
                dealerSchedule.WeekendWorkTimeFrom  = consultant.WeekendWorkTimeFrom.Value.ToString("hh\\:mm");
                dealerSchedule.WeekendWorkTimeTo    = consultant.WeekendWorkTimeTo.Value.ToString("hh\\:mm");
                dealerSchedule.WorkweekWorkTimeFrom = consultant.WorkweekWorkTimeFrom.Value.ToString("hh\\:mm");
                dealerSchedule.WorkweekWorkTimeTo   = consultant.WorkweekWorkTimeTo.Value.ToString("hh\\:mm");
                dealerSchedule.Image = !string.IsNullOrWhiteSpace(consultant.ImageName) ? _baseUrl + _dealerConsultantImgPath + consultant.ImageName
                    : _baseUrl + "/Content/Images/profile_user_flat.png";
                dealerSchedule.IsTimetableHidden = consultant.IsTimetableHidden;

                for (var date = DateTime.Today; date < DateTime.Today + 31.Days(); date += 1.Days())
                {
                    var values = schedule.Any(x => x.DealerConsultantId == consultant.Id)
                        ? schedule.Where(x => x.DealerConsultantId == consultant.Id && x.Date >= date && x.Date < date + 1.Days())
                        : new List <DealerConsultantSchedule>();

                    values = values.Where(x => x.Date > DateTime.Now.Date || x.Date == DateTime.Now.Date && x.TimeFrom >= DateTime.Now.TimeOfDay);


                    dealerSchedule.ScheduleByDate.Add(
                        date.ToString("dd.MM.yyyy"),
                        values
                        .Select(x => new ViewModels.FZ.Home.DealerSchedule
                    {
                        IntervalFrom     = x.TimeFrom.ToString("hh\\:mm"),
                        IntervalAsString = string.Format("{0:hh\\:mm} - {1:hh\\:mm}", x.TimeFrom, x.TimeTo),
                        //dont use Resharper here please
                        //dont use Resharper here please
                        //IsFree = inspectionOrders.Any()
                        //&& inspectionOrders.Any(y => y.DealerId == dealerId && y.DealerConsultantCode == consultant.Code && y.OrderDateTime == (x.Date + x.TimeFrom)) ? false : x.IsFree,
                        IsFree         = x.IsFree,
                        IsSpecialPrice = false,
                        Comment        = ""
                    })
                        .ToList()
                        );
                }

                result.Add(consultant.Id.ToString(), dealerSchedule);
            }

            return(result);
        }
        public IDictionary <string, ConsultantSchedule> GetConsultantSchedule(int dealerId, string clientDateTime)
        {
            var consultants = _dealerConsultantsRepository.Value.GetQuery()
                              .Where(x => x.DealerId == dealerId).ToList();

            var schedule = _dealerConsultantSchedulesRepository.Value.GetQuery()
                           .Where(x => x.DealerConsultant.DealerId == dealerId)
                           //.OrderBy(x => x.TimeFrom)
                           .ToList();

            if (!schedule.Any())
            {
                return(new Dictionary <string, ConsultantSchedule>());
            }

            string convertetUserDateTime;
            var    userDateTime = DateTime.Now;

            if (clientDateTime != null)
            {
                convertetUserDateTime = clientDateTime.Substring(0, clientDateTime.IndexOf("G")).Trim();
                userDateTime          = DateTime.ParseExact(convertetUserDateTime,
                                                            "ddd MMM dd yyyy HH:mm:ss",
                                                            CultureInfo.InvariantCulture);
            }

            var dateNow = userDateTime.Date;

            var inspectionOrders =
                _inspectionOrdersRepository.Value.GetQuery()
                .Where(x =>
                       x.DealerId == dealerId && x.ToType == OrderToTypes.Consultant &&
                       x.OrderDateTime >= dateNow)
                .ToList();

            var result = new Dictionary <string, ConsultantSchedule>();

            foreach (var consultant in consultants)
            {
                var dealerSchedule = new ConsultantSchedule();
                dealerSchedule.Name = $"{consultant.Firstname} {consultant.Surname}";
                dealerSchedule.WeekendWorkTimeFrom  = consultant.WeekendWorkTimeFrom.Value.ToString("hh\\:mm");
                dealerSchedule.WeekendWorkTimeTo    = consultant.WeekendWorkTimeTo.Value.ToString("hh\\:mm");
                dealerSchedule.WorkweekWorkTimeFrom = consultant.WorkweekWorkTimeFrom.Value.ToString("hh\\:mm");
                dealerSchedule.WorkweekWorkTimeTo   = consultant.WorkweekWorkTimeTo.Value.ToString("hh\\:mm");
                dealerSchedule.IsTimetableHidden    = consultant.IsTimetableHidden;
                dealerSchedule.Image = !string.IsNullOrWhiteSpace(consultant.ImageName) ? _dealerConsultantImgPath + consultant.ImageName
                    : ("/Content/Images/profile_user_flat.svg");

                for (var date = userDateTime.Date; date < userDateTime.Date + 31.Days(); date += 1.Days())
                {
                    var values = schedule.Any(x => x.DealerConsultantId == consultant.Id)
                        ? schedule.Where(x => x.DealerConsultantId == consultant.Id && x.Date >= date && x.Date < date + 1.Days())
                        : new List <DealerConsultantSchedule>();

                    values = values.Where(x => x.Date > userDateTime.Date || x.Date == userDateTime.Date && x.TimeFrom >= userDateTime.TimeOfDay);

                    var dealerOfConsultantShedule = _dealerSchedulesRepository.Value.Where(s => s.DealerId == consultant.DealerId).ToList();

                    dealerSchedule.ScheduleByDate.Add(
                        date.ToString("dd.MM.yyyy"),
                        values
                        .Select(x => new ViewModels.FZ.Home.DealerSchedule
                    {
                        IntervalFrom     = x.TimeFrom.ToString("hh\\:mm"),
                        IntervalAsString = string.Format("{0:hh\\:mm} - {1:hh\\:mm}", x.TimeFrom, x.TimeTo),
                        IsFree           = x.IsFree,
                        IsSpecialPrice   = GetSpecPriceIdent(dealerOfConsultantShedule, date, x.TimeFrom, x.TimeTo).IsSpecPrice,
                        Comment          = GetSpecPriceIdent(dealerOfConsultantShedule, date, x.TimeFrom, x.TimeTo).Comment
                    })
                        .ToList()
                        );
                }

                result.Add(consultant.Id.ToString(), dealerSchedule);
            }

            return(result);
        }