public async Task <IActionResult> VerkoopAandelen(BeursModel model)
        {
            if (GeplandeTelMomentenManager.IsMarktDicht)
            {
                return(RedirectToAction("Beurs", new { id = model.Beurs.BeursId }));
            }

            var gebruiker = await GetGebruikerWithAandelen(HttpContext);

            if (gebruiker == null)
            {
                throw new NullReferenceException("Gebruiker is null");
            }
            if (model.Beurs == null)
            {
                model.Beurs = await GetBeurs(model.BeursId);
            }

            var errors = new List <string>();

            if (gebruiker.Aandelen == null)
            {
                ModelState.AddModelError("Verkoopfout", "Je hebt hier niet genoeg aandelen in deze beurs voor");
                return(RedirectToAction("Beurs", new { id = model.BeursId }));
            }

            var aandeelHouder =
                gebruiker.Aandelen.FirstOrDefault(x => x.BeursId == model.BeursId && x.ApplicationUserId == gebruiker.Id);

            if (model.Aantal <= 0)
            {
                errors.Add("Je moet tenminste 1 aandeel verkopen");
            }
            if (aandeelHouder == null || aandeelHouder.Aantal < model.Aantal)
            {
                errors.Add("Je hebt hier niet genoeg aandelen in deze beurs voor");
            }

            if (errors.Count == 0)
            {
                await gebruiker.VerkoopAandelen(model.Beurs, model.Aantal);
            }
            TempData.Put("errors", errors);
            TempData.Put("errorType", "Verkoopfout");
            return(RedirectToAction("Beurs", new { id = model.Beurs.BeursId }));
        }
        public async Task <IActionResult> KoopAandelen(BeursModel model)
        {
            if (GeplandeTelMomentenManager.IsMarktDicht)
            {
                return(RedirectToAction("Beurs", new { id = model.Beurs.BeursId }));
            }
            var gebruiker = await _userManager.GetCurrentUser(HttpContext);

            if (gebruiker == null)
            {
                throw new NullReferenceException("Gebruiker is null");
            }
            if (model.Beurs == null)
            {
                model.Beurs = await GetBeurs(model.BeursId);
            }

            var errors = new List <string>();

            if (!User.IsInRole("Deelnemer"))
            {
                errors.Add("Je bent nog geen deelnemer!");
            }

            var modelValue = model.Aantal * model.Beurs.AandeelPrijs;

            if (model.Aantal <= 0)
            {
                errors.Add("Je moet tenminste 1 aandeel kopen");
            }
            if (modelValue > gebruiker.Geld)
            {
                errors.Add("Je hebt hier niet genoeg geld voor");
            }

            if (errors.Count == 0)
            {
                await gebruiker.KoopAandelen(model.Beurs, model.Aantal);
            }
            TempData.Put("errors", errors);
            TempData.Put("errorType", "Koopfout");
            return(RedirectToAction("Beurs", new { id = model.Beurs.BeursId }));
        }