public async Task <IActionResult> CreateOrUpdate(UsersViewModel viewModel)
        {
            ViewBag.Roles = _roleManager.GetAllRoles();
            if (viewModel.Id != null)
            {
                ModelState.Remove("Password");
                ModelState.Remove("ConfirmPassword");
                ModelState.Remove("ImageFile");
            }

            if (ModelState.IsValid)
            {
                IdentityResult result = null;
                if (viewModel.ImageFile != null)
                {
                    viewModel.Image = _userManager.CheckAvatarFileName(viewModel.ImageFile.FileName);
                }

                viewModel.Roles = new List <UserRole> {
                    new UserRole {
                        RoleId = (int)viewModel.RoleId
                    }
                };
                viewModel.BirthDate = viewModel.PersianBirthDate.ConvertShamsiToMiladi();
                if (viewModel.Id != null)
                {
                    var user = await _userManager.FindByIdAsync(viewModel.Id.ToString());

                    user.FirstName   = viewModel.FirstName;
                    user.LastName    = viewModel.LastName;
                    user.BirthDate   = viewModel.BirthDate;
                    user.Email       = viewModel.Email;
                    user.UserName    = viewModel.UserName;
                    user.Gender      = viewModel.Gender.Value;
                    user.PhoneNumber = viewModel.PhoneNumber;
                    user.Roles       = viewModel.Roles;
                    user.Bio         = viewModel.Bio;
                    var userRoles = await _userManager.GetRolesAsync(user);

                    if (viewModel.ImageFile != null)
                    {
                        await viewModel.ImageFile.UploadFileAsync($"{_env.WebRootPath}/avatars/{viewModel.Image}");

                        FileExtensions.DeleteFile($"{_env.WebRootPath}/avatars/{user.Image}");
                        user.Image = viewModel.Image;
                    }

                    result = await _userManager.RemoveFromRolesAsync(user, userRoles);

                    if (result.Succeeded)
                    {
                        result = await _userManager.UpdateAsync(user);
                    }
                }

                else
                {
                    await viewModel.ImageFile.UploadFileAsync($"{_env.WebRootPath}/avatars/{viewModel.Image}");

                    viewModel.EmailConfirmed = true;
                    result = await _userManager.CreateAsync(_mapper.Map <User>(viewModel), viewModel.Password);
                }

                if (result.Succeeded)
                {
                    TempData["notification"] = OperationSuccess;
                }
                else
                {
                    ModelState.AddErrorsFromResult(result);
                }
            }

            return(PartialView("_RenderUser", viewModel));
        }