public ActionResult Add(int? PackageId)
        {
            if (Roles.IsUserInRole("ActiveUser") && !Roles.IsUserInRole("Admin"))
            {
                return RedirectToAction("Index", "Home");
            }

            RegisterUserViewModel model = new RegisterUserViewModel();

            if (MvcApplication.SHOW_SAMPLE_FORM_DATA)
            {
                // Show dummy user data for model
                model = SampleModelData.GetSampleRegisterViewModel();
            }

            if (PackageId.HasValue)
            {
                model.HasPackage = true;
                model.PackageId = PackageId.GetValueOrDefault();
            }
            else
            {
                model.HasPackage = false;
            }

            // Set IsAdmin property on model
            if (Roles.IsUserInRole("Admin"))
            {
                model.IsAdmin = true;
            }
            else
            {
                model.IsAdmin = false;
            }

            return View(model);
        }
        public ActionResult Add(RegisterUserViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return View(model);
            }

            string errorMessage = "Unable to register. Please contact us for assistance.";

            try
            {
                if (Roles.IsUserInRole("Admin"))
                {
                    model.IsAdmin = true;
                }

                string userLogin = model.Email.ToLower();

                if (WebSecurity.UserExists(userLogin))
                {
                    ModelState.AddModelError("EmailAlreadyExists", "The Email address is already in use.");
                    return View(model);
                }

                WebSecurity.CreateUserAndAccount(userLogin, model.Password);

                ApplicationUser user = model.ToApplicationUser();
                user.ApplicationUserId = WebSecurity.GetUserId(userLogin);
                user.Email = userLogin;

                ResultEnum result = userService.CreateApplicationUser(user);
                switch (result)
                {
                    case ResultEnum.Success:
                        if (model.IsProvider && !Roles.IsUserInRole("Admin"))
                        {
                            Roles.AddUserToRoles(userLogin, new string[] { "Provider" });
                        }
                        else if (model.IsProvider && Roles.IsUserInRole("Admin"))
                        {
                            Roles.AddUserToRoles(userLogin, new string[] { "Provider", "ActiveUser" });
                        }
                        else if (!model.IsAdmin)
                        {
                            Roles.AddUserToRoles(userLogin, new string[] { "Customer", "ActiveUser" });
                        }

                        if (!Roles.IsUserInRole("Admin"))
                        {
                            if (WebSecurity.Login(model.Email, model.Password))
                            {
                                // Login successful

                                // Send SMS message to confirm successful registration
                                string phoneNumber = PhoneValidation.ValidateMobileNumber(model.Phone);

                                if (phoneNumber != null)
                                {
                                    string message = String.Format(
            "Hi {0}, We're just confirming your successful registration with Grande Travel.", model.FirstName);

                                    GrandeTravel.Utility.IPhoneService commClient =
                                        UtilityFactory.GetPhoneService(Authentication.GetTwilioAuthentication());

                                    Task task = commClient.SendSMSAsync(phoneNumber, message);
                                }

                                // If the customer wants to order a package, redirect to Payment
                                if (model.HasPackage)
                                {
                                    return RedirectToAction("CreateTransaction", "Payment", new { PackageId = model.PackageId });
                                }

                                // If a provider, show confirmation message
                                if (model.IsProvider && !Roles.IsUserInRole("Admin"))
                                {
                                    model.AccountCreatedSuccessfully = true;
                                    model.isProviderConfirmed = true;
                                    WebSecurity.Logout();
                                    return View(model);
                                }

                                return RedirectToAction("Index", "Home");
                            }
                            else
                            {
                                // Login unsuccessful
                                ModelState.AddModelError("ErrorMessage", errorMessage);
                                return View(model);
                            }
                        }
                        else
                        {
                            // Admin user - Create user only. Show success message, but do not log in.
                            model.AccountCreatedSuccessfully = true;
                            return View(model);
                        }

                    case ResultEnum.Fail:
                        break;
                }
            }
            catch (Exception)
            {
                ModelState.AddModelError("ErrorMessage", errorMessage);
                return View(model);
            }

            return View(model);
        }