private int GetHospitalEmptyPlacesCount(GetClinicRegistrationScheduleCommand command, DateTime date) { var placeCount = _emptyPlaceByTypeStatisticRepository.GetModels() .Where(model => (int)model.Sex == command.Sex && model.EmptyPlaceStatistic.Date == date && model.EmptyPlaceStatistic.HospitalSectionProfile.HospitalId == command.CurrentHospitalId && model.EmptyPlaceStatistic.HospitalSectionProfile.SectionProfileId == command.SectionProfileId) .Select(model => model.Count) .FirstOrDefault(); var registrationCount = _emptyPlaceByTypeStatisticRepository.GetModels() .Where(model => (int)model.Sex == command.Sex && model.EmptyPlaceStatistic.Date == date && model.EmptyPlaceStatistic.HospitalSectionProfile.HospitalId == command.CurrentHospitalId && model.EmptyPlaceStatistic.HospitalSectionProfile.SectionProfileId == command.SectionProfileId) .SelectMany(model => model.Reservations.Where(storageModel => storageModel.Status == ReservationStatus.Opened)) .Count(model => model.Status == ReservationStatus.Opened); return placeCount - registrationCount; }
public ActionResult Step2(GetClinicRegistrationScheduleCommand command) { var answer = _clinicRegistrationsService.GetClinicRegistrationSchedule(command); return View(answer); }
public GetClinicRegistrationScheduleCommandAnswer GetClinicRegistrationSchedule( GetClinicRegistrationScheduleCommand command) { const int days = 30; var now = DateTime.Now; var deadLine = now + new TimeSpan(days, 0, 0, 0); var startMonday = GetPreviousMonday(now); var endMonday = GetPreviousMonday(deadLine); var weeks = (endMonday - startMonday).Days / 7 + 1; var user = this._tokenManager.GetUserByToken(command.Token); var clinicId = this._clinicManager.GetClinicByUser(user).Id; if (command.CurrentHospitalId == null || command.CurrentHospitalId == 0) { command.CurrentHospitalId = this.GetDefaultHospitalIdByClinicId(clinicId); } if (command.AgeCategoryId == null) { command.AgeCategoryId = (int)AgeRange.After18; } var startSchedule = Enumerable.Range(0, weeks) .Select(week => new ClinicScheduleTableItem { Cells = Enumerable.Range(0, 7) .ToDictionary(day => (DayOfWeek)day, day => new ClinicScheduleTableCell { IsBlocked = startMonday.AddDays(7 * week + day).Date < now.Date || startMonday.AddDays(7 * week + day).Date > deadLine.Date, Day = startMonday.AddDays(7 * week + day).Day, IsThisMonth = startMonday.AddDays(7 * week + day).Month == now.Month, IsThisDate = startMonday.AddDays(7 * week + day).Date == now.Date, Date = startMonday.AddDays(7 * week + day).Date, Count = this.GetHospitalEmptyPlacesCount(command, startMonday.AddDays(7 * week + day).Date) }) }) .ToList(); var hospitals = _clinicUserHospitalSectionProfileAccessRepository .GetModels() .Where(model => !model.IsBlocked && model.ClinicUserId == user.Id) .Select(model => new { HospitalId = model.HospitalSectionProfile.HospitalId, Name = model.HospitalSectionProfile.Hospital.Name }) .GroupBy(arg => arg.HospitalId) .Select(grouping => grouping.FirstOrDefault()) .ToList() .Select(model => new KeyValuePair<int, string>(model.HospitalId, model.Name)) .ToList(); var ageCategories = Enum.GetValues(typeof (AgeRange)) .Cast<AgeRange>() .Select(ageRange => new KeyValuePair<int, string>((int) ageRange, ageRange.ToCorrectString())) .ToList(); return new GetClinicRegistrationScheduleCommandAnswer { Token = command.Token.Value, Sex = command.Sex != null ? ((Sex)command.Sex).ToCorrectString() : string.Empty, SexId = command.Sex, SectionProfileId = command.SectionProfileId, SectionProfile = _sectionProfileRepository .GetModels() .FirstOrDefault(model => model.Id == command.SectionProfileId) .Name, Schedule = startSchedule, CurrentHospitalId = command.CurrentHospitalId.Value, Hospitals = hospitals, AgeCategoryId = command.AgeCategoryId, AgeCategories = ageCategories, HasDialogMessage = command.HasDialogMessage != null && command.HasDialogMessage.Value, DialogMessage = command.DialogMessage }; }