예제 #1
0
        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);
            }
        }
예제 #2
0
        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;
        }
예제 #3
0
        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);
        }