public ActionResult AnnouncementsSelect() { var announcementSelect = new GeneralSelect { IsBlocked = false }; if (User.IsInRole("Admin")) { announcementSelect.IsBlocked = null; } if (User.IsInRole("Admin") || User.IsInRole("HR")) { announcementSelect.CanSelectCandidates = true; announcementSelect.CanSelectVacancyes = true; announcementSelect.IncludeCandidates = true; announcementSelect.IncludeVacancyes = true; announcementSelect.SelectCandidates = new SelectCandidates(); announcementSelect.SelectVacancyes = new SelectVacancyes(); } if (User.IsInRole("Employee")) { announcementSelect.CanSelectCandidates = true; announcementSelect.IncludeCandidates = true; announcementSelect.SelectCandidates = new SelectCandidates(); } if (User.IsInRole("Jobseeker")) { announcementSelect.CanSelectVacancyes = true; announcementSelect.IncludeVacancyes = true; announcementSelect.SelectVacancyes = new SelectVacancyes(); } var timesJob = Enum.GetValues(typeof(TimeJob)).Cast <TimeJob>(); ViewBag.Employments = timesJob.Select(x => new SelectListItem { Value = x.ToString(), Text = General.Employments[x] }).ToList(); return(View(announcementSelect)); }
public ActionResult AnnouncementsSelect(GeneralSelect generalSelect) { var timesJob = Enum.GetValues(typeof(TimeJob)).Cast <TimeJob>(); ViewBag.Employments = timesJob.Select(x => new SelectListItem { Value = x.ToString(), Text = General.Employments[x] }).ToList(); if (!ModelState.IsValid) { var modelStateValues = ModelState.Values.ToArray(); var modelStateKeys = ModelState.Keys.ToArray(); if (modelStateValues.Any(x => x.Errors.Count > 0 && !General.NulableBoolPropertyes.Contains(modelStateKeys[Array.IndexOf(modelStateValues, x)]))) { ModelState.Clear(); MessageForClient(ActionStatus.Error, $"Отсутствует модель представления данных для выборки объявлений."); return(PartialView("~/Views/Announcement/ListAnnouncement.cshtml", new List <MyAnnouncement>())); } } if (!User.IsInRole("Admin")) { generalSelect.IsBlocked = false; } var generalParams = generalSelect.GetType()?.GetProperties()?.ToDictionary(p => p.Name, p => p.GetValue(generalSelect)); if (generalParams.Keys.Any(x => x == "IncludeVacancyes" && !(bool)generalParams[x]) && generalParams.Keys.Any(x => x == "IncludeCandidates" && !(bool)generalParams[x])) { ModelState.Clear(); MessageForClient(ActionStatus.Warning, $"Вы не выбрали ни один тип объявлений для выборки."); return(PartialView("~/Views/Announcement/ListAnnouncement.cshtml", new List <MyAnnouncement>())); } var resultAnnouncements = new List <MyAnnouncement>(); if (generalParams.Keys.Any(x => x == "IncludeVacancyes" && (bool)generalParams[x])) { var vacancyesParams = generalParams["SelectVacancyes"].GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(generalParams["SelectVacancyes"])); foreach (var param in generalParams.Where(x => !General.NotFilteredProperties.Contains(x.Key))) { vacancyesParams.Add(param.Key, param.Value); } var vacancyesSelectResult = _announcementRepository.SelectAnnouncements(vacancyesParams); if (vacancyesSelectResult.Status == ActionStatus.Success) { var vacancyAnnouncements = vacancyesSelectResult.Entity.Select(x => _mapper.Map <IAnnouncement, MyVacancy>(x as IAnnouncement)); resultAnnouncements.AddRange(vacancyAnnouncements); } } if (generalParams.Keys.Any(x => x == "IncludeCandidates" && (bool)generalParams[x])) { var candidatesParams = generalParams["SelectCandidates"].GetType().GetProperties().ToDictionary(p => p.Name, p => p.GetValue(generalParams["SelectCandidates"])); candidatesParams["BirthDayMin"] = DateTime.Now.AddYears(-(int)candidatesParams["AgeMax"]); candidatesParams["BirthDayMax"] = DateTime.Now.AddYears(-(int)candidatesParams["AgeMin"]); candidatesParams.Remove("AgeMin"); candidatesParams.Remove("AgeMax"); foreach (var param in generalParams.Where(x => !General.NotFilteredProperties.Contains(x.Key))) { candidatesParams.Add(param.Key, param.Value); } var candidatesSelectResult = _announcementRepository.SelectAnnouncements(candidatesParams); if (candidatesSelectResult.Status == ActionStatus.Success) { var vacancyAnnouncements = candidatesSelectResult.Entity.Select(x => _mapper.Map <IAnnouncement, MyCandidate>(x as IAnnouncement)); resultAnnouncements.AddRange(vacancyAnnouncements); } } ModelState.Clear(); if (resultAnnouncements.Count() == 0) { MessageForClient(ActionStatus.Warning, $"Не найдены объявления, удовлетворяющие параметрам запроса."); } else { MessageForClient(ActionStatus.Success, $"Найдено {resultAnnouncements.Count()} объявлений."); } return(PartialView("~/Views/Announcement/ListAnnouncement.cshtml", resultAnnouncements)); }