public async Task <IActionResult> StoreUsers(StoreUsersViewModel vm)
        {
            await FillUsers(vm);

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }
            var user = await _UserManager.FindByEmailAsync(vm.Email);

            if (user == null)
            {
                ModelState.AddModelError(nameof(vm.Email), "Usuario no encontrado");
                return(View(vm));
            }
            if (!StoreRoles.AllRoles.Contains(vm.Role))
            {
                ModelState.AddModelError(nameof(vm.Role), "Rol inválido");
                return(View(vm));
            }
            if (!await _Repo.AddStoreUser(StoreData.Id, user.Id, vm.Role))
            {
                ModelState.AddModelError(nameof(vm.Email), "El usuario ya tiene acceso a esta tienda.");
                return(View(vm));
            }
            StatusMessage = "Usuario agregado exitosamente";
            return(RedirectToAction(nameof(StoreUsers)));
        }
        public async Task <IActionResult> StoreUsers(StoreUsersViewModel vm)
        {
            await FillUsers(vm);

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }
            var user = await _UserManager.FindByEmailAsync(vm.Email);

            if (user == null)
            {
                ModelState.AddModelError(nameof(vm.Email), "User not found");
                return(View(vm));
            }
            if (!StoreRoles.AllRoles.Contains(vm.Role))
            {
                ModelState.AddModelError(nameof(vm.Role), "Invalid role");
                return(View(vm));
            }
            if (!await _Repo.AddStoreUser(StoreData.Id, user.Id, vm.Role))
            {
                ModelState.AddModelError(nameof(vm.Email), "The user already has access to this store");
                return(View(vm));
            }
            StatusMessage = "User added successfully";
            return(RedirectToAction(nameof(StoreUsers)));
        }
        public async Task <IActionResult> StoreUsers()
        {
            StoreUsersViewModel vm = new StoreUsersViewModel();

            await FillUsers(vm);

            return(View(vm));
        }
 private async Task FillUsers(StoreUsersViewModel vm)
 {
     var users = await _Repo.GetStoreUsers(StoreData.Id);
     vm.StoreId = StoreData.Id;
     vm.Users = users.Select(u => new StoreUsersViewModel.StoreUserViewModel()
     {
         Email = u.Email,
         Id = u.Id,
         Role = u.Role
     }).ToList();
 }
 public async Task<IActionResult> DeleteStoreUser(string userId)
 {
     StoreUsersViewModel vm = new StoreUsersViewModel();
     var user = await _UserManager.FindByIdAsync(userId);
     if (user == null)
         return NotFound();
     return View("Confirm", new ConfirmModel()
     {
         Title = $"Remove store user",
         Description = $"Are you sure to remove access to remove access to {user.Email}?",
         Action = "Delete"
     });
 }
        public async Task <IActionResult> DeleteStoreUser(string userId)
        {
            StoreUsersViewModel vm = new StoreUsersViewModel();
            var user = await _UserManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound());
            }
            return(View("Confirm", new ConfirmModel()
            {
                Title = $"Eliminar usuario de la tienda",
                Description = $"¿Está seguro de que desea eliminar el acceso a la tienda para {user.Email}?",
                Action = "Delete"
            }));
        }
        public async Task <IActionResult> DeleteStoreUser(string storeId, string userId)
        {
            StoreUsersViewModel vm = new StoreUsersViewModel();
            var store = await _Repo.FindStore(storeId, userId);

            if (store == null)
            {
                return(NotFound());
            }
            var user = await _UserManager.FindByIdAsync(userId);

            if (user == null)
            {
                return(NotFound());
            }
            return(View("Confirm", new ConfirmModel()
            {
                Title = $"Remove store user",
                Description = $"Are you sure to remove access to remove {store.Role} access to {user.Email}?",
                Action = "Delete"
            }));
        }