public ActionResult UserEdit(UserEditModel viewModel) { User user = userRepository.Find(UserContext.GetCurrent().ID); user.InjectFrom<NotNullValueInjection>(viewModel); viewModel.Rank = user.Rank; if (!ValidateNumberOfTyperatingsInternal(viewModel.TypeRatingIDs.Count(), user)) { // TODO loc ModelState.AddModelError("TypeRatingIDs", "No way"); } HashSet<int> notReleaseableRatingIDs = new HashSet<int>(userTypeRatingRepository.All.Where(t => t.UserID == user.ID && t.ValidTo == null).ToList().Where(t => !t.CanBeReleased()).Select(t => t.TypeRatingID)); HashSet<int> currentRatingIDsSelected = new HashSet<int>(viewModel.TypeRatingIDs.Select(t => int.Parse(t))); if (!notReleaseableRatingIDs.IsSubsetOf(currentRatingIDsSelected)) { throw new NotSupportedException("You cannot release type ratings that you don't hold for at least 50 days."); } if (ModelState.IsValid) { userRepository.InsertOrUpdate(user); userRepository.Save(); var currentUserTypeRatings = userTypeRatingRepository.All.Where(t => t.UserID == user.ID && t.ValidTo == null).ToList(); foreach (var rating in currentUserTypeRatings) { if (!viewModel.TypeRatingIDs.Contains(rating.TypeRatingID.ToString())) { UserTypeRating toChange = userTypeRatingRepository.Find(rating.ID); toChange.ValidTo = DateTime.UtcNow; userTypeRatingRepository.InsertOrUpdate(toChange); } } foreach (string rating in viewModel.TypeRatingIDs) { if (!currentUserTypeRatings.Any(t => t.TypeRatingID.ToString() == rating)) { UserTypeRating newRating = new UserTypeRating(); newRating.TypeRatingID = int.Parse(rating); newRating.UserID = user.ID; newRating.ValidFrom = DateTime.UtcNow; userTypeRatingRepository.InsertOrUpdate(newRating); } } userTypeRatingRepository.Save(); return RedirectToAction("UserEdit", new { id = user.ID }); } else { SetupViewModel(viewModel); return View(viewModel); } }
private UserEditModel SetupViewModel(UserEditModel viewModel) { viewModel.PossibleCountries = countryRepository.All.Select(t => new SelectListItem() { Text = t.English, Value = t.ISO }).ToList(); viewModel.PossibleTypeRatings = userTypeRatingRepository.CurrentUserTypeRatings(UserContext.GetCurrent().ID).ToList(); viewModel.PossibleHomeBases = airportRepository.All.Select(t => new SelectListItem() { Text = t.Name + " (" + t.ICAO + ")", Value = t.ICAO }).ToList(); ViewBag.PhotoLink = "/ImageHandler.ashx?file=" + UserContext.GetCurrent().ID + "/Photo/me.jpg&q=90&h=120&w=100&usercontent=1"; ViewBag.HasPhoto = FileHelper.FileExists(HttpContext.Server.MapPath("~") + ConfigurationManager.AppSettings["UserContentBasePath"] + @"\" + UserContext.GetCurrent().ID + @"\" + "Photo" + @"\", "me.jpg"); return viewModel; }
public ActionResult UserEdit() { int id = UserContext.GetCurrent().ID; UserEditModel viewModel = new UserEditModel(); User user = userRepository.Find(id); viewModel.InjectFrom(user); SetupViewModel(viewModel); viewModel.TypeRatingIDs = viewModel.PossibleTypeRatings.Where(t => t.UserTypeRatingID != null).Select(t => t.TypeRatingID.ToString()).ToArray(); return View(viewModel); }