public async Task<ActionResult> RequestAccount(RequestAccountViewModel model) { if (ModelState.IsValid) { string accountType = Request["AccountType"]; if (accountType == "Physician") { Physician physician = new Physician() { FirstName = model.FirstName, LastName = model.LastName, Email = model.Email, Address = model.Address, PhoneNumber = model.PhoneNumber }; // Write to ASP user database var user = new ApplicationUser { UserName = model.Username, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { // Successful account creation; add user to Physician database. _physicianService.CreatePhysician(physician); _physicianService.SaveChanges(); AccountRequest newUser = new AccountRequest() { ReasonForAccount = model.ReasonForAccount }; _accountRequestService.CreateAccountRequest(newUser); _accountRequestService.SaveChanges(); user.PhysicianId = physician.Id; user.AccountRequestId = newUser.Id; result = await UserManager.UpdateAsync(user); //Role must match what is found in the database AspNetRoles table. result = await UserManager.AddToRoleAsync(user.Id, "Physician"); } else { // Create Physician failed. AddErrors(result); return View(model); } return RedirectToAction("RequestPhysicianAccountConfirm", new System.Web.Routing.RouteValueDictionary( new { email = physician.Email, address = physician.Address, phoneNumber = physician.PhoneNumber, firstName = physician.FirstName, lastName = physician.LastName, reasonForAccount = model.ReasonForAccount })); } else if (accountType == "ExperimentAdministrator") { ExperimentAdministrator experimentAdministrator = new ExperimentAdministrator() { FirstName = model.FirstName, LastName = model.LastName, Email = model.Email, Address = model.Address, PhoneNumber = model.PhoneNumber }; // Write to ASP user database var user = new ApplicationUser { UserName = model.Username, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { // Successful account creation; add user to Experiment Administrator database. _experimentAdminService.CreateExperimentAdministrator(experimentAdministrator); _experimentAdminService.SaveChanges(); AccountRequest newUser = new AccountRequest() { ReasonForAccount = model.ReasonForAccount }; _accountRequestService.CreateAccountRequest(newUser); _accountRequestService.SaveChanges(); user.ExperimentAdministratorId = experimentAdministrator.Id; user.AccountRequestId = newUser.Id; result = await UserManager.UpdateAsync(user); //Role must match what is found in the database AspNetRoles table. result = await UserManager.AddToRoleAsync(user.Id, "Experiment Administrator"); } else { // Create Physician failed. AddErrors(result); return View(model); } return RedirectToAction("RequestExperimentAdministratorAccountConfirm", new System.Web.Routing.RouteValueDictionary( new { email = experimentAdministrator.Email, address = experimentAdministrator.Address, phoneNumber = experimentAdministrator.PhoneNumber, firstName = experimentAdministrator.FirstName, lastName = experimentAdministrator.LastName, reasonForAccount = model.ReasonForAccount })); } else { // ERROR: Shouldn't be here. return View("Error"); } } /* if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); return RedirectToAction("Index", "Home"); } AddErrors(result); } */ // If we got this far, something failed, redisplay form return View(model); }
/// <summary> /// Add a new account request to the database /// </summary> /// <param name="accountRequest">AccountRequest object to add to the database</param> public void CreateAccountRequest(AccountRequest accountRequest) { if(accountRequest != null) { _accountRequestRepository.Add(accountRequest); } }