Exemple #1
0
        public async Task <ActionResult> Edit(UserDetailsViewModel model)
        {
            if (ModelState.IsValid)
            {
                using (var db = new ApplicationDbContext())
                {
                    MyUser user = db.Users.Find(model.UserId);

                    user.Id                = model.UserId;
                    user.UserName          = model.UserName;
                    user.Email             = model.EmailAddress;
                    user.EmailConfirmed    = model.EmailAddressConfirmed;
                    user.AccessFailedCount = model.AccessFailedCount;
                    user.LockoutEnabled    = model.LockoutEnabled;
                    user.LockoutEndDateUtc = model.LockoutEndDate;

                    user.UserDetails.FirstName = model.FirstName;
                    user.UserDetails.LastName  = model.LastName;
                    user.UserDetails.Age       = model.Age;
                    user.UserDetails.Address   = model.Address;
                    user.UserDetails.City      = model.City;
                    user.UserDetails.Country   = model.Country;

                    MyUserRole currentRole = db.Users.FirstOrDefault(m => m.Id == model.UserId)
                                             .Roles.FirstOrDefault();

                    db.Users.FirstOrDefault(m => m.Id == model.UserId)
                    .Roles.Remove(currentRole);
                    db.Users.FirstOrDefault(m => m.Id == model.UserId)
                    .Roles.Add(new MyUserRole {
                        RoleId = int.Parse(model.Role), UserId = model.UserId
                    });

                    db.Entry(user).State = EntityState.Modified;
                    await db.SaveChangesAsync();

                    ApplicationUserManager userManager = new ApplicationUserManager(new MyUserStore(new ApplicationDbContext()));

                    // Dodati da se novi password salje ;)

                    await userManager.RemovePasswordAsync(model.UserId);

                    await userManager.AddPasswordAsync(model.UserId, model.Password);
                }
                return(RedirectToAction("Index", new { Message = UserMessageId.ChangeUser }));
            }

            ViewBag.Roles = new SelectList(db.Roles.AsEnumerable().ToList(),
                                           "Id", "Name", db.Roles.FirstOrDefault(m => m.Id.ToString() == model.Role));

            ViewBag.Id = new SelectList(db.UserDetails, "Id", "Role", model.Role);
            return(View(model));
        }
        public async Task <JsonResult> AddUserRole(MyUserRole model)
        {
            try
            {
                await AddUserToRole(model);

                return(Json(new { success = true, data = "", error = "" }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception ex)
            {
                Elmah.ErrorSignal.FromCurrentContext().Raise(ex);
            }

            return(Json(new { success = false, data = "", error = "Error!" }, JsonRequestBehavior.AllowGet));
        }
        private async Task AddUserToRole(MyUserRole model)
        {
            var user = await UserManager.FindByIdAsync(model.UserId);

            model.UserRoleId = Guid.NewGuid().ToString();


            //check if same role exists already
            var prevRoleExists = user.Roles.Where(x => x.UserId == model.UserId &&
                                                  x.RoleId == model.RoleId
                                                  ).Any();

            #region Adding entry in physician table in case of role is physician
            var role = await RoleManager.FindByNameAsync(UserRoles.Physician.ToDescription());

            var physician = _physicianService.GetDetail(model.UserId);
            // if the user role has been changed from physician to some different role
            if (role.Id != model.RoleId && physician != null)
            {
                user.status_key                = null;
                user.status_change_date        = DateTime.Now.ToEST();
                user.status_change_date_forAll = DateTime.Now.ToEST();
                user.status_change_cas_key     = null;
                UserManager.Update(user);
            }
            else if (role.Id == model.RoleId && physician != null)
            {
                if (!user.status_key.HasValue)
                {
                    var defaultStatus = _physicianStatus.GetDefault();

                    user.status_key                = defaultStatus.phs_move_status_key;
                    user.status_change_date        = DateTime.Now.ToEST();
                    user.status_change_date_forAll = DateTime.Now.ToEST();
                    user.status_change_cas_key     = null;
                    UserManager.Update(user);
                }
            }

            #endregion

            //if not only then add that role
            if (!prevRoleExists)
            {
                user.Roles.Add(model);
                IdentityResult identityResult = await UserManager.UpdateAsync(user);
            }
        }