// GET: PerdoruesiController/Edit/5
        public async Task <ActionResult> EditAsync(string id)
        {
            if (string.IsNullOrEmpty(id))
            {
                ViewBag.ErrorTitle = $"Id nuk mund të jetë null";
                return(View("_NotFound"));
            }

            var userFound = await userManager.FindByIdAsync(id);

            if (userFound == null)
            {
                ViewBag.ErrorTitle = $"Përdoruesi me këtë id { id } nuk mund të gjendet.";
                return(View("_NotFound"));
            }

            var userRoles = await userManager.GetRolesAsync(userFound);

            var role = await roleManager.FindByNameAsync(userRoles.FirstOrDefault());

            PerdoruesiEditViewModel model = new PerdoruesiEditViewModel
            {
                Id          = userFound.Id,
                FirstName   = userFound.FirstName,
                LastName    = userFound.LastName,
                Email       = userFound.Email,
                RoleId      = role.Id,
                Address     = userFound.Address,
                PhoneNumber = userFound.PhoneNumber,
                UserProfile = userFound.Image,
                KompaniaId  = userFound.KompaniaId,
                RoleName    = role.Name
            };


            ViewBag.RoleId = await LoadRoles(userRoles.FirstOrDefault(), "User");

            ViewBag.KompaniaId = await kompaniaRepository.KompaniaSelectList(null, false, false);

            model.resetPassword.UserId = userFound.Id;

            //random hashed password
            var random = userManager.PasswordHasher.HashPassword(userFound, RandomNumberGenerator.Create().ToString());

            model.resetPassword.Password        = random;
            model.resetPassword.ConfirmPassword = random;
            return(View(model));
        }
        public async Task <IActionResult> ResetPasswordAsync(PerdoruesiEditViewModel model)
        {
            string userId = null;

            var userFound = await userManager.FindByIdAsync(model.resetPassword.UserId);

            if (userFound != null)
            {
                userId = userFound.Id;
                var code = await userManager.GeneratePasswordResetTokenAsync(userFound);

                var result = await userManager.ResetPasswordAsync(userFound, code, model.resetPassword.Password);

                if (result.Succeeded)
                {
                    alertService.Success("Fjalëkalimi u resetua me sukses", true);

                    return(RedirectToAction("Edit", new { id = userFound.Id }));
                }
                else
                {
                    alertService.Information("Fjalëkalimi nuk është ndryshuar", true);

                    return(RedirectToAction("Edit", new { id = userFound.Id }));
                }
            }

            if (!string.IsNullOrEmpty(userId))
            {
                return(RedirectToAction("Edit", new { id = userId }));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
        public async Task <IActionResult> EditAsync(PerdoruesiEditViewModel model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    var userFound = await userManager.FindByIdAsync(model.Id);

                    if (userFound == null)
                    {
                        ViewBag.ErrorTitle = $"Përdoruesi me këtë id { model.Id } nuk mund të gjendet.";
                        return(View("_NotFound"));
                    }

                    var roleFound = await roleManager.FindByIdAsync(model.RoleId);

                    if (roleFound.Name == "HR")
                    {
                        if (!model.KompaniaId.HasValue)
                        {
                            alertService.Information("Plotesoni te dhenat obligative");

                            ViewBag.RoleId = await LoadRoles(null, "User");

                            ViewBag.KompaniaId = await kompaniaRepository.KompaniaSelectList(null, false, false);

                            return(View(model));
                        }
                    }
                    else
                    {
                        model.KompaniaId = null;
                    }

                    userFound.FirstName   = model.FirstName;
                    userFound.LastName    = model.LastName;
                    userFound.Email       = model.Email;
                    userFound.Address     = model.Address;
                    userFound.PhoneNumber = model.PhoneNumber;
                    userFound.KompaniaId  = model.KompaniaId;

                    var userRoles = await userManager.GetRolesAsync(userFound);

                    var role = await roleManager.FindByNameAsync(userRoles.FirstOrDefault());

                    if (role.Id != model.RoleId)
                    {
                        await userManager.RemoveFromRolesAsync(userFound, userRoles);

                        role = await roleManager.FindByIdAsync(model.RoleId);

                        await userManager.AddToRoleAsync(userFound, role.Name);
                    }

                    var result = await userManager.UpdateAsync(userFound);

                    if (result.Succeeded)
                    {
                        alertService.Success("Të dhënat e përdoruesit u modifikuan me sukses", true);

                        return(RedirectToAction("Edit", new { id = userFound.Id }));
                    }
                }
                catch
                {
                    ViewBag.RoleId = await LoadRoles(model.RoleId, "User");

                    return(View());
                }
            }


            IEnumerable <string> allErrors = ModelState.Values.SelectMany(v => v.Errors.Select(b => b.ErrorMessage));

            foreach (var item in allErrors)
            {
                alertService.Information(item, true);
            }

            ViewBag.RoleId = await LoadRoles(model.RoleId, "User");

            return(View(model));
        }