public virtual ActionResult ExpertSignUp(ExpertSignUpModel model) { if (ModelState.IsValid) { if(model.ExpertProfileForm.RecommendationId != null) { var recommendation = Repository.Recommendation.Get(model.ExpertProfileForm.RecommendationId ?? 0); try { Repository.Recommendation.ConfirmExpertRegistration(recommendation.RecommendationKey); } catch (RecommendationNotFoundException) { Flash.Error(Resources.Account.RecommendationNotFound); return RedirectToAction(MVC.StaticPages.Home()); } catch (ExpertAlreadyRegisteredException) { Flash.Warning(Resources.Account.RecommendationAlreadyUsed); return RedirectToAction(MVC.StaticPages.Home()); } } var user = Mapper.Map<ProfileForm, User>(model.UserProfileForm); var expert = Mapper.Map<ExpertProfileForm, Expert>(model.ExpertProfileForm); expert.PublicName = expert.FirstName + " " + expert.LastName; Repository.Expert.AssignProvisionToExpert(expert, ProvisionExpert.Novice); Repository.User.Add(user); Repository.User.AddEmailConfigurationDefaultValue(user); expert.User = user; if (model.ExpertProfileForm.RecommendationId != null) { var recommendation = Repository.Recommendation.Get(model.ExpertProfileForm.RecommendationId ?? 0); expert.Recommendation = recommendation; } Repository.Expert.Add(expert); CreatePartner(user); Email.Send<ActivationEmail>(user); Email.Send<NewExpertEmail>(expert.User); if(model.ExpertProfileForm.RecommendationId != null) { var recommendation = Repository.Recommendation.Get(model.ExpertProfileForm.RecommendationId ?? 0); if(recommendation.Recommender == null) { Email.Send<RecommenderNotRegisteredEmail>(recommendation); } else { Email.Send<RecommenderEmail>(recommendation.Recommender); } } EventLog.Event<ExpertRegisteredEvent>(user); Flash.Success(Resources.Account.AccountCreated); return RedirectToAction(MVC.Account.SignIn()); } return View(new ExpertSignUpModel(Repository.Category.All()){ UserProfileForm = model.UserProfileForm,ExpertProfileForm = model.ExpertProfileForm}); }
public virtual ActionResult ExpertSignUp(string recommendationKey = null) { if (AuthenticationHelper.IsAuthenticated) return RedirectToAction(MVC.Account.BecomeExpert()); if(recommendationKey != null) { try { var recommendation = Repository.Recommendation.CheckRecommendationKey(recommendationKey); var categoryIds = new List<int>(); categoryIds.Add(recommendation.RecommendedCategory.Id); var model = new ExpertSignUpModel(Repository.Category.All()) { ExpertProfileForm = new ExpertProfileForm { FirstName = recommendation.RecommendedExpertName, LastName = recommendation.RecommendedExpertSurname, RecommendationId = recommendation.Id, ExpertProfileCategoriesForm = new ExpertProfileCategoriesForm { SelectedCategories = categoryIds } }, UserProfileForm = new ProfileForm { EmailForm = new EmailForm { Email = recommendation.RecommendedExpertEmail } } }; return View(model); } catch (RecommendationNotFoundException) { Flash.Error(Resources.Account.RecommendationNotFound); return RedirectToAction(MVC.StaticPages.Home()); } catch (ExpertAlreadyRegisteredException) { Flash.Warning(Resources.Account.RecommendationAlreadyUsed); return RedirectToAction(MVC.StaticPages.Home()); } } return View(new ExpertSignUpModel(Repository.Category.All())); }