예제 #1
0
        public async Task <IActionResult> Edit(int id)
        {
            var email = "";

            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("ToLogin", "Account"));
            }

            if (User.IsInRole("Administrator"))
            {
                Supervisor supervisor = _cc.Supervisor.Find(id);

                var users = await UserManager.GetUsersInRoleAsync("Supervisor");

                foreach (var user in users)
                {
                    if (user.SupervisorKey == id)
                    {
                        email = user.Email;
                    }
                }

                NewSupervisor newSupervisor = new NewSupervisor(supervisor.SupervisorKey, supervisor.SupervisorID, supervisor.Deleted, supervisor.FirstName, supervisor.LastName, email, true);
                return(View("New", newSupervisor));
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }
        }
예제 #2
0
        public async Task <IActionResult> Save(NewSupervisor newSupervisor, int ID)
        {
            if (!User.Identity.IsAuthenticated)
            {
                return(RedirectToAction("ToLogin", "Account"));
            }

            if (User.IsInRole("Administrator"))
            {
                Supervisor supervisor = new Supervisor(newSupervisor.SupervisorID, newSupervisor.Deleted, newSupervisor.FirstName, newSupervisor.LastName);
                Supervisor sv         = _cc.Supervisor.Find(ID) != null?_cc.Supervisor.Find(ID) : supervisor;

                PropertyInfo[] props    = typeof(Supervisor).GetProperties();
                var            subgroup = props.Where(p => !p.Name.Contains("SupervisorKey") && p.CanWrite);
                foreach (PropertyInfo property in subgroup)
                {
                    property.SetValue(sv, property.GetValue(supervisor) != null ? property.GetValue(supervisor) : "");
                }

                if (_cc.Supervisor.Any(s => s.SupervisorID == sv.SupervisorID && s.SupervisorKey != sv.SupervisorKey))
                {
                    ModelState.AddModelError(string.Empty, $"Another supervisor already exists for {sv.SupervisorID} Supervisor ID.");
                }
                if (newSupervisor.Edit == false)
                {
                    AppUser user = await UserManager.FindByEmailAsync(newSupervisor.Email);

                    if (user != null)
                    {
                        ModelState.AddModelError(string.Empty, $"An account already exists with this email.");
                    }
                    else
                    {
                        user                 = new AppUser();
                        user.UserName        = newSupervisor.Email;
                        user.Email           = newSupervisor.Email;
                        user.PasswordChanged = false;
                        user.Deleted         = false;
                    }

                    if (ModelState.IsValid == true)
                    {
                        if (_cc.Supervisor.Find(ID) == null)
                        {
                            _cc.Supervisor.Add(sv);
                        }
                        _cc.SaveChanges();

                        var SupKey = (from s in _cc.Supervisor
                                      where s.SupervisorID == newSupervisor.SupervisorID
                                      select s.SupervisorKey).Single();
                        user.SupervisorKey = SupKey;
                        IdentityResult result = await UserManager.CreateAsync(user, "Test123!");

                        if (result.Succeeded)
                        {
                            var roleResult = await UserManager.AddToRoleAsync(user, "Supervisor");
                        }

                        return(RedirectToAction("Index", "Supervisors"));
                    }
                }
                else
                {
                    sv.FirstName    = supervisor.FirstName;
                    sv.LastName     = supervisor.LastName;
                    sv.SupervisorID = supervisor.SupervisorID;
                    _cc.SaveChanges();

                    return(RedirectToAction("Index", "Supervisors"));
                }

                return(View("New", newSupervisor));
            }
            else
            {
                return(RedirectToAction("Index", "Home"));
            }
        }