public async Task <IActionResult> Create(VerenigingEditViewModel evm)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    evm.IBAN = NormalizeIBAN(evm.IBAN);
                    Vereniging vereniging = new Vereniging(evm.Email, evm.Naam, evm.EmailZeden, evm.IBAN);

                    //create identity user aka account om in te loggen, standaard wachten P@ssword1
                    var user = new IdentityUser {
                        UserName = evm.Email, Email = evm.Email
                    };
                    Random random     = new Random();
                    int    passNumber = random.Next(100);
                    string password;
                    if (vereniging.NormalizedGroepNaam.Length > 8)
                    {
                        password = $"{vereniging.NormalizedGroepNaam.Substring(0,8)}@ww{passNumber}!";
                    }
                    else
                    {
                        password = $"{vereniging.NormalizedGroepNaam}@ww{passNumber}!";
                    }
                    await _userManager.CreateAsync(user, password);

                    await _userManager.AddClaimAsync(user, new Claim(ClaimTypes.Role, "vereniging"));

                    await MapVerenigingEditViewModelToVereniging(evm, vereniging);

                    _verenigingRepository.Add(vereniging);
                    _verenigingRepository.SaveChanges();

                    //send mail to vereniging about new account
                    if (evm.SendMail)
                    {
                        SendMailVerenigingUpdate(vereniging, password, true);
                    }

                    int verenigingId = _verenigingRepository.GetByMail(evm.Email).GroepId;
                    TempData["message"] = $"U heeft succesvol de vereniging {vereniging.GroepNaam} aangemaakt";
                    return(RedirectToAction(nameof(Details), new { id = verenigingId }));
                }
                catch (Exception e)
                {
                    TempData["error"] = $"Sorry, er liep iets fout, de vereniging kon niet worden aangemaakt: {e.Message}";
                }
            }
            ViewData["IsEdit"]    = false;
            ViewData["Konventen"] = GetKonventenAsSelectList();
            return(View(nameof(Edit), evm));
        }
        public async Task <IActionResult> Edit(VerenigingEditViewModel evm, string command, int id)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    Vereniging vereniging = _verenigingRepository.GetById(id);
                    if (vereniging == null)
                    {
                        return(NotFound());
                    }
                    if (command.Equals("addKleur"))
                    {
                        await MapVerenigingEditViewModelToVereniging(evm, vereniging);

                        vereniging.Kleuren.Add(new Kleur("Wit", "#ffffff"));
                        _verenigingRepository.SaveChanges();
                        return(RedirectToAction(nameof(Edit), id));
                    }
                    else if (command.Equals("removeKleur"))
                    {
                        await MapVerenigingEditViewModelToVereniging(evm, vereniging);

                        vereniging.Kleuren.RemoveAt(vereniging.Kleuren.Count - 1);
                        _verenigingRepository.SaveChanges();
                        return(RedirectToAction(nameof(Edit), id));
                    }
                    else   //when no command is given, process as normal edit
                    {
                        await MapVerenigingEditViewModelToVereniging(evm, vereniging);

                        _verenigingRepository.SaveChanges();
                        if (evm.SendMail)
                        {
                            SendMailVerenigingUpdate(vereniging);
                        }
                        TempData["message"] = $"U heeft succesvol vereniging {vereniging.GroepNaam} gewijzigd";
                    }
                }
                catch (Exception e)
                {
                    TempData["error"] = $"Sorry, er liep iets fout, de vereniging kon niet worden aangepast: {e.Message}";
                }
                return(RedirectToAction(nameof(Index)));
            }
            ViewData["IsEdit"]    = true;
            ViewData["Konventen"] = GetKonventenAsSelectList();
            return(View(nameof(Edit), evm));
        }
        private async Task MapVerenigingEditViewModelToVereniging(VerenigingEditViewModel evm, Vereniging vereniging)
        {
            //update user account when mail changed (so vereniging can login with the new mail)
            if (vereniging.Email != evm.Email)
            {
                var user = await _userManager.FindByEmailAsync(vereniging.Email);

                var setUserNameResult = await _userManager.SetUserNameAsync(user, evm.Email);

                if (!setUserNameResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}', vereniging: {vereniging.GroepNaam}.");
                }
                vereniging.Email = evm.Email;
                var setAccountEmailResult = await _userManager.SetEmailAsync(user, evm.Email);

                if (!setAccountEmailResult.Succeeded)
                {
                    var userId = await _userManager.GetUserIdAsync(user);

                    throw new InvalidOperationException($"Unexpected error occurred setting email for user with ID '{userId}', vereniging: {vereniging.GroepNaam}.");
                }
            }
            vereniging.GroepNaam           = evm.Naam;
            vereniging.IsGroot             = evm.IsGroot;
            vereniging.Konvent             = evm.KonventId == null ? null : _konventRepository.GetById(evm.KonventId.Value);
            vereniging.EmailZeden          = evm.EmailZeden;
            vereniging.MaxTicketsException = evm.MaxTicketsException;
            vereniging.IBAN = evm.IBAN;
            List <Kleur> kleuren = new List <Kleur>();

            if (evm.KleurenCodes != null)
            {
                for (int i = 0; i < evm.KleurenCodes.Count; i++)
                {
                    kleuren.Add(new Kleur(evm.KleurenNamen[i], evm.KleurenCodes[i]));
                }
            }
            vereniging.Kleuren = kleuren;
        }