public IActionResult GedeeltelijkeUpdateInschrijving(Guid inschrijvingsId, [FromBody] JsonPatchDocument <InschrijvingVoorUpdateDto> patchDocument)
        {
            var inschrijvingVanRepo = _inschrijvingRepository.GetInschrijving(inschrijvingsId);

            if (inschrijvingVanRepo == null)
            {
                return(NotFound($"Inschrijving '{inschrijvingsId}' niet gevonden."));
            }
            Guid inschrijvingsStatusVoorPatch = inschrijvingVanRepo.InschrijvingsstatusId.Value;

            var inschrijvingTePatchen = _mapper.Map <InschrijvingVoorUpdateDto>(inschrijvingVanRepo);

            patchDocument.ApplyTo(inschrijvingTePatchen, ModelState);

            if (!TryValidateModel(inschrijvingTePatchen))
            {
                return(ValidationProblem(ModelState));
            }

            _mapper.Map(inschrijvingTePatchen, inschrijvingVanRepo);

            // === START Controle voor manipulatie === // // === EINDE Controle voor manipulatie === //
            if (!_betaalmethodeRepository.BestaatBetaalmethode(inschrijvingVanRepo.BetaalmethodeId.Value))
            {
                return(NotFound($"Betaalmethode '{inschrijvingVanRepo.BetaalmethodeId.Value}' niet gevonden."));
            }

            if (!_inschrijvingsstatusRepository.BestaatInschrijvingsstatus(inschrijvingVanRepo.InschrijvingsstatusId.Value))
            {
                return(NotFound($"Inschrijvingsstatus '{inschrijvingVanRepo.InschrijvingsstatusId.Value}' niet gevonden."));
            }

            if (!_evenementRepository.BestaatEvenement(inschrijvingVanRepo.EvenementId.Value))
            {
                return(NotFound($"Evenement '{inschrijvingVanRepo.EvenementId.Value}' niet gevonden."));
            }

            if (inschrijvingVanRepo.LidId.HasValue)
            {
                if (!_lidRepository.BestaatLid(inschrijvingVanRepo.LidId.Value))
                {
                    return(NotFound($"Lid '{inschrijvingVanRepo.LidId.Value}' niet gevonden."));
                }
            }

            if (inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Gepland().Id)
            {
                if (string.IsNullOrWhiteSpace(inschrijvingVanRepo.Standnummer))
                {
                    return(Conflict($"Bij het plannen van een inschrijving moet een standnummer worden opgegeven."));
                }
            }

            if (inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Afgekeurd().Id)
            {
                if (string.IsNullOrWhiteSpace(inschrijvingVanRepo.RedenAfkeuring))
                {
                    return(Conflict($"Bij het afkeuren van een inschrijving moet een reden tot afkeuring worden opgegeven."));
                }
            }

            if (inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Goedgekeurd().Id | inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Gepland().Id)
            {
                if (inschrijvingVanRepo.BetaalmethodeId.Value == _betaalmethodeRepository.GetBetaalmethode_Overschrijving().Id)
                {
                    if (string.IsNullOrWhiteSpace(inschrijvingVanRepo.GestructureerdeMededeling))
                    {
                        inschrijvingVanRepo.GestructureerdeMededeling = GestructureerdeMededeling.GetNieuweGestructureerdeMededeling(_inschrijvingRepository);
                    }
                }

                if (string.IsNullOrWhiteSpace(inschrijvingVanRepo.QRCode))
                {
                    inschrijvingVanRepo.QRCode = QRCode.GetNieuweQRCode();
                }
            }
            // === EINDE Controle voor manipulatie === //

            // === START null waarden wegwerken === //
            if (!inschrijvingVanRepo.AantalWagens.HasValue)
            {
                inschrijvingVanRepo.AantalWagens = 0;
            }
            if (!inschrijvingVanRepo.AantalAanhangwagens.HasValue)
            {
                inschrijvingVanRepo.AantalAanhangwagens = 0;
            }
            if (!inschrijvingVanRepo.AantalMobilhomes.HasValue)
            {
                inschrijvingVanRepo.AantalMobilhomes = 0;
            }
            // === EINDE null waarden wegwerken === //

            _inschrijvingRepository.UpdatenInschrijving(inschrijvingVanRepo);
            _inschrijvingRepository.Opslaan();

            if (inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Goedgekeurd().Id)
            {
                if (inschrijvingsStatusVoorPatch == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Aangevraagd().Id)
                {
                    _mailing.VerstuurMail_AanvraagGoedgekeurd(inschrijvingVanRepo);
                }
            }

            if (inschrijvingVanRepo.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Afgekeurd().Id)
            {
                if (inschrijvingsStatusVoorPatch == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Aangevraagd().Id)
                {
                    _mailing.VerstuurMail_AanvraagAfgekeurd(inschrijvingVanRepo);
                }
            }

            //return NoContent();
            var inschrijvingTeRetourneren = _mapper.Map <InschrijvingVoorRaadpleegDto>(inschrijvingVanRepo);

            return(CreatedAtRoute("GetInschrijving", new { inschrijvingsId = inschrijvingTeRetourneren.Id }, inschrijvingTeRetourneren));
        }
        public ActionResult <InschrijvingVoorRaadpleegDto> ToevoegenInschrijving([FromBody] InschrijvingVoorAanmaakDto inschrijving)
        {
            var inschrijvingEntity = _mapper.Map <Entities.Inschrijving>(inschrijving);

            inschrijvingEntity.DatumInschrijving = DateTime.UtcNow.AddHours(2);

            // === START Controle voor manipulatie === // // === EINDE Controle voor manipulatie === //
            if (!_betaalmethodeRepository.BestaatBetaalmethode(inschrijvingEntity.BetaalmethodeId.Value))
            {
                return(NotFound($"Betaalmethode '{inschrijvingEntity.BetaalmethodeId.Value}' niet gevonden."));
            }

            if (!_inschrijvingsstatusRepository.BestaatInschrijvingsstatus(inschrijvingEntity.InschrijvingsstatusId.Value))
            {
                return(NotFound($"Inschrijvingsstatus '{inschrijvingEntity.InschrijvingsstatusId.Value}' niet gevonden."));
            }

            if (!_evenementRepository.BestaatEvenement(inschrijvingEntity.EvenementId.Value))
            {
                return(NotFound($"Evenement '{inschrijvingEntity.EvenementId.Value}' niet gevonden."));
            }

            if (inschrijvingEntity.LidId.HasValue)
            {
                if (!_lidRepository.BestaatLid(inschrijvingEntity.LidId.Value))
                {
                    return(NotFound($"Lid '{inschrijvingEntity.LidId.Value}' niet gevonden."));
                }
            }

            if (inschrijvingEntity.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Gepland().Id)
            {
                if (string.IsNullOrWhiteSpace(inschrijvingEntity.Standnummer))
                {
                    return(Conflict($"Bij het plannen van een inschrijving moet een standnummer worden opgegeven."));
                }
            }

            if (inschrijvingEntity.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Afgekeurd().Id)
            {
                if (string.IsNullOrWhiteSpace(inschrijvingEntity.RedenAfkeuring))
                {
                    return(Conflict($"Bij het afkeuren van een inschrijving moet een reden tot afkeuring worden opgegeven."));
                }
            }

            if (inschrijvingEntity.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Goedgekeurd().Id | inschrijvingEntity.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Gepland().Id)
            {
                if (inschrijvingEntity.BetaalmethodeId.Value == _betaalmethodeRepository.GetBetaalmethode_Overschrijving().Id)
                {
                    if (string.IsNullOrWhiteSpace(inschrijvingEntity.GestructureerdeMededeling))
                    {
                        inschrijvingEntity.GestructureerdeMededeling = GestructureerdeMededeling.GetNieuweGestructureerdeMededeling(_inschrijvingRepository);
                    }
                }

                if (string.IsNullOrWhiteSpace(inschrijvingEntity.QRCode))
                {
                    inschrijvingEntity.QRCode = QRCode.GetNieuweQRCode();
                }
            }
            // === EINDE Controle voor manipulatie === //

            // === START null waarden wegwerken === //
            if (!inschrijvingEntity.AantalWagens.HasValue)
            {
                inschrijvingEntity.AantalWagens = 0;
            }
            if (!inschrijvingEntity.AantalAanhangwagens.HasValue)
            {
                inschrijvingEntity.AantalAanhangwagens = 0;
            }
            if (!inschrijvingEntity.AantalMobilhomes.HasValue)
            {
                inschrijvingEntity.AantalMobilhomes = 0;
            }
            // === EINDE null waarden wegwerken === //



            _inschrijvingRepository.ToevoegenInschrijving(inschrijvingEntity);
            _inschrijvingRepository.Opslaan();

            if (inschrijvingEntity.InschrijvingsstatusId.Value == _inschrijvingsstatusRepository.GetInschrijvingsstatus_Aangevraagd().Id)
            {
                _mailing.VerstuurMail_NieuweAanvraag(inschrijvingEntity);
            }

            var inschrijvingTeRetourneren = _mapper.Map <InschrijvingVoorRaadpleegDto>(inschrijvingEntity);

            return(CreatedAtRoute("GetInschrijving", new { inschrijvingsId = inschrijvingTeRetourneren.Id }, inschrijvingTeRetourneren));
        }
        public void VerstuurMail_AanvraagGoedgekeurd(Entities.Inschrijving inschrijving)
        {
            if (_versturenVanAutomatischeMails)
            {
                KeyValuePair <string, string> verzender = new KeyValuePair <string, string>(_email, "De Lozerkermis vrienden");
                ICollection <KeyValuePair <string, string> > ontvangers = new List <KeyValuePair <string, string> >();
                ontvangers.Add(new KeyValuePair <string, string>(inschrijving.Email, $"{inschrijving.Voornaam} {inschrijving.Achternaam}"));
                string onderwerp = "Uw aanvraag tot inschrijving is goedgekeurd";

                ICollection <string> inhoudDeel1 = new List <string>();
                inhoudDeel1.Add($"Beste");
                inhoudDeel1.Add($"Wij hebben het genoegen u mede te delen dat uw aanvraag werd goedgekeurd.");
                if (inschrijving.BetaalmethodeId.Value == _betaalmethodeRepository.GetBetaalmethode_Contant().Id)
                {
                    inhoudDeel1.Add($"Graag herinneren wij u eraan dat u als betaalmethode <<contant>> had aangeduid.");
                    inhoudDeel1.Add($"Mogen wij u vragen <<het gepaste bedrag ({(inschrijving.AantalMeter * inschrijving.Meterprijs).ToString("N", new CultureInfo("nl-BE"))} EUR)>> mee te brengen en ter plaatse te betalen bij de inschrijvingspost op de dag van het evenement?");
                }
                else if (inschrijving.BetaalmethodeId.Value == _betaalmethodeRepository.GetBetaalmethode_Overschrijving().Id)
                {
                    inhoudDeel1.Add($"Graag herinneren wij u eraan dat u als betaalmethode <<overschrijving>> had aangeduid.");
                    inhoudDeel1.Add($"Mogen wij u vragen het gepaste bedrag ({(inschrijving.AantalMeter * inschrijving.Meterprijs).ToString("N", new CultureInfo("nl-BE"))} EUR) zo snel mogelijk over te schrijven op het rekeningnummer {_rekeningnummer}, met volgende gestructureerde mededeling: {GestructureerdeMededeling.GetGeformatteerdeGestructureerdeMededeling(inschrijving.GestructureerdeMededeling)}. De overschrijving dient <<ten laatste 5 dagen voor het evenement>> te gebeuren.");
                    inhoudDeel1.Add($"Indien wij geen overschrijving van u ontvangen hebben, gelieve op de dag van het evenement <<het gepaste bedrag>> dan cash mee te brengen en ter plaatse te betalen bij de inschrijvingspost.");
                }
                inhoudDeel1.Add($"Wij danken u alvast voor uw medewerking!");

                // Link naar opvolgen status

                ICollection <string> inhoudDeel2 = new List <string>();
                inhoudDeel2.Add($"Hieronder vindt u nogmaals alle informatie die u reeds ingevuld hebt:");

                // Details inschrijving

                ICollection <string> inhoudDeel3 = new List <string>();
                inhoudDeel3.Add($"Tot dan!");
                inhoudDeel3.Add($"Met vriendelijke groeten");
                inhoudDeel3.Add($"De Lozerkermis vrienden");


                string        formaat    = "html";
                StringBuilder inhoudHtml = new StringBuilder();
                inhoudHtml = GetInhoudVolgensFormaat(inhoudDeel1, inhoudHtml, formaat);
                inhoudHtml.AppendLine($"Via deze <a href='https://delozerkermisvrienden-organizer-ui.azurewebsites.net/inschrijvingen/{inschrijving.Id}/status'>link</a> kan u een QR-code raadplegen. Bied deze QR-code aan bij het inchecken, dit zal het proces vlotter laten verlopen.");
                inhoudHtml = GetInhoudVolgensFormaat(inhoudDeel2, inhoudHtml, formaat);
                inhoudHtml = DetailsInschrijvingHtmlAanvullen(inschrijving, inhoudHtml);
                inhoudHtml = GetInhoudVolgensFormaat(inhoudDeel3, inhoudHtml, formaat);

                formaat = "txt";
                StringBuilder inhoudTxt = new StringBuilder();
                inhoudTxt = GetInhoudVolgensFormaat(inhoudDeel1, inhoudTxt, formaat);
                inhoudTxt.AppendLine($"Via deze link (https://delozerkermisvrienden-organizer-ui.azurewebsites.net/inschrijvingen/{inschrijving.Id}/status) kan u een QR-code raadplegen. Bied deze QR-code aan bij het inchecken, dit zal het proces vlotter laten verlopen.");
                inhoudTxt = GetInhoudVolgensFormaat(inhoudDeel2, inhoudTxt, formaat);
                inhoudTxt = DetailsInschrijvingTxtAanvullen(inschrijving, inhoudTxt);
                inhoudTxt = GetInhoudVolgensFormaat(inhoudDeel3, inhoudTxt, formaat);



                SendGridMessage bericht = MaakNieuwSendGridBericht(verzender, ontvangers, onderwerp, inhoudTxt.ToString(), inhoudHtml.ToString());

                VerstuurMail(bericht).Wait();
            }
        }