public async Task <IActionResult> Manage(ManageViewModel vm)
        {
            if (vm.HasBranch)
            {
                vm.AllBranches = await _branchesDao.GetAllAsync();
            }
            if (vm.HasCar)
            {
                vm.AllCars = await _carsDao.GetAllAsync();
            }

            if (!ModelState.IsValid)
            {
                return(View(vm));
            }

            var user = new User
            {
                Id        = vm.UserId,
                UserName  = vm.UserName,
                Email     = vm.Email,
                FirstName = vm.FirstName,
                LastName  = vm.LastName
            };

            if (!await _usersDao.CheckPasswordAsync(user.Id, vm.Password))
            {
                ModelState.AddModelError(nameof(vm.Password), "Wrong password");
                return(View(vm));
            }

            try
            {
                await _usersDao.UpdateAsync(user);

                if (vm.HasBranch)
                {
                    if (!await _currentUserService.SetBranchAsync(vm.BranchId))
                    {
                        throw new Exception("Failed to set current branch");
                    }
                }

                if (vm.HasCar)
                {
                    if (!await _currentUserService.SetCarAsync(vm.CarId))
                    {
                        throw new Exception("Failed to set current car");
                    }
                }
            }
            catch (IdentityException e)
            {
                foreach (var error in e.Errors)
                {
                    ModelState.AddModelError("", error);
                }
            }
            catch (Exception e)
            {
                ModelState.AddModelError("", e.Message);
            }

            return(View(vm));
        }