Beispiel #1
0
        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);
        }
Beispiel #2
0
 /// <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);
     }
 }