Example #1
0
        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});
        }
Example #2
0
        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()));
        }