public IActionResult Home()
        {
            StedenService stedenService = new StedenService();
            KlasseService klasseService = new KlasseService();

            ZoekListVM zoekListVM = new ZoekListVM();

            zoekListVM.Steden = new SelectList(stedenService.GetAll(), "StadId", "Naam");

            zoekListVM.Klasses = new SelectList(klasseService.GetAll(), "KlasseId", "Klassenaam");

            return(View(zoekListVM));
        }
        public IActionResult Payment(List <CartVM> cart)
        {
            string             userID        = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            HotelsService      hotelsService = new HotelsService();
            StatusService      statusService = new StatusService();
            AspNetUsersService klantService  = new AspNetUsersService();
            StedenService      stedenService = new StedenService();
            OrderService       orderService  = new OrderService();
            KlasseService      klasseService = new KlasseService();

            TicketService ticketService = new TicketService();

            try
            {
                var   id            = 0;
                Order geboekteOrder = new Order();

                foreach (CartVM c in cart)
                {
                    Order order = new Order();
                    order.Klant         = klantService.Get(userID);
                    order.KlantId       = userID;
                    order.AantalTickets = c.AantalTickets;
                    order.Klasse        = klasseService.GetKlasseVanId(c.Klasse);
                    order.Prijs         = (decimal)c.Prijs;
                    order.Status        = statusService.Get(1);
                    order.StatusId      = 1;
                    order.Boekingsdatum = DateTime.UtcNow;
                    order.TrajectId     = c.TrajectId;
                    order.Aankomstdatum = c.Aankomstdatum;
                    order.Vertrekdatum  = c.Vertrekdatum;

                    orderService.Create(order);

                    geboekteOrder = orderService.Get(order.OrderId);
                    id            = geboekteOrder.OrderId;

                    RittenService        rittenService     = new RittenService();
                    IEnumerable <Ritten> reisMogelijkheden = rittenService.GetRittenVanTrajectId(c.TrajectId);

                    ReisMogelijkhedenService reisMogelijkhedenService = new ReisMogelijkhedenService();

                    //aanmaken van tickets
                    for (int i = 0; i < c.AantalTickets; i++)
                    {
                        foreach (var item in reisMogelijkheden)
                        {
                            Ticket ticket = new Ticket();

                            ticket.OrderId             = id;
                            ticket.Zetelnummer         = ticketService.GetAantalPlaatsenGereserveerd(item.ReisMogelijkhedenId, c.Vertrekdatum, c.Klasse) + 1;
                            ticket.VoornaamPassagier   = c.Voornamen.ElementAt(i);
                            ticket.AchternaamPassagier = c.Achternamen.ElementAt(i);
                            ticket.ReismogelijkhedenId = item.ReisMogelijkhedenId;
                            ticket.Reismogelijkheden   = reisMogelijkhedenService.Get(item.ReisMogelijkhedenId);
                            ticketService.Create(ticket);
                        }
                    }


                    Delete(c.TrajectId);
                }

                return(RedirectToAction("Validation"));
            }
            catch (DataException ex)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
            }
            catch (Exception ex)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.
                ModelState.AddModelError("", "call system administrator.");
            }



            return(View("Index"));
        }
        public IActionResult Home(ZoekListVM zoekListVM)
        {
            ModelState.Clear();

            if (zoekListVM == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                StedenService stedenService = new StedenService();

                zoekListVM.Steden = new SelectList(stedenService.GetAll(), "StadId", "Naam");

                KlasseService klasseService = new KlasseService();
                zoekListVM.Klasses             = new SelectList(klasseService.GetAll(), "KlasseId", "Klassenaam");
                zoekListVM.GeselecteerdeKlasse = klasseService.GetKlasseVanId(zoekListVM.Klasse);

                RittenService  rittenService  = new RittenService();
                TrajectService trajectService = new TrajectService();
                TicketService  ticketService  = new TicketService();

                VakantiesService vakantiesService = new VakantiesService();

                zoekListVM.RoutesHeen = rittenService.GetRittenVanTraject(Convert.ToInt16(zoekListVM.Van), Convert.ToInt16(zoekListVM.Naar));

                double totalePrijsh = 0;
                double totalePrijst = 0;

                foreach (var item in zoekListVM.RoutesHeen)
                {
                    if (item.ReisMogelijkheden.Prijs != null)
                    {
                        totalePrijsh += Convert.ToDouble(item.ReisMogelijkheden.Prijs);
                    }

                    var vakantie      = new Vakanties();
                    var extraPlaatsen = 1.0;
                    //controle vakantie
                    if (item.ReisMogelijkheden.Kerstvakantie == true && vakantiesService.DatumInVakantie(Convert.ToDateTime(zoekListVM.HeenDate), true) == true)
                    {
                        vakantie      = vakantiesService.Get(Convert.ToDateTime(zoekListVM.HeenDate), true);
                        extraPlaatsen = 1 + vakantie.PercentExtraPlaatsen;
                    }
                    else if (item.ReisMogelijkheden.Paasvakantie == true && vakantiesService.DatumInVakantie(Convert.ToDateTime(zoekListVM.HeenDate), false) == true)
                    {
                        vakantie      = vakantiesService.Get(Convert.ToDateTime(zoekListVM.HeenDate), false);
                        extraPlaatsen = 1 + vakantie.PercentExtraPlaatsen;
                    }

                    //controle nog genoeg plaatsen op de trein
                    if (zoekListVM.Klasse == 1)
                    {
                        var vrijePlaatsen = Convert.ToInt16(item.ReisMogelijkheden.Trein.AantalPlaatsenEc * extraPlaatsen) - ticketService.GetAantalPlaatsenGereserveerd(item.ReisMogelijkhedenId, Convert.ToDateTime(zoekListVM.HeenDate), zoekListVM.Klasse);

                        if (vrijePlaatsen < zoekListVM.Aantal)
                        {
                            return(RedirectToAction("ErrorTreinOverboekt"));
                        }
                    }
                    else
                    {
                        var vrijePlaatsen = (item.ReisMogelijkheden.Trein.AantalPlaatsenBus * extraPlaatsen) - ticketService.GetAantalPlaatsenGereserveerd(item.ReisMogelijkhedenId, Convert.ToDateTime(zoekListVM.HeenDate), zoekListVM.Klasse);


                        if (vrijePlaatsen < zoekListVM.Aantal)
                        {
                            return(RedirectToAction("ErrorTreinOverboekt"));
                        }
                    }
                }


                var aankomstdatumheenreis = Convert.ToDateTime(zoekListVM.HeenDate);

                //overstap gemist
                if (zoekListVM.RoutesHeen.Count() > 1)
                {
                    for (int i = 0; i < zoekListVM.RoutesHeen.Count() - 1; i++)
                    {
                        if (zoekListVM.RoutesHeen.ElementAt(i).ReisMogelijkheden.Aankomsttijd >= zoekListVM.RoutesHeen.ElementAt(i + 1).ReisMogelijkheden.Vertrektijd)
                        {
                            aankomstdatumheenreis = aankomstdatumheenreis.AddDays(1);
                        }
                    }
                }
                ViewBag.Aankomstdatumheen = aankomstdatumheenreis;



                var aankomstdatumterugreis = Convert.ToDateTime(zoekListVM.TerugDate);

                if (zoekListVM.TerugDate != null)
                {
                    zoekListVM.RoutesTerug = rittenService.GetRittenVanTraject(Convert.ToInt16(zoekListVM.Naar), Convert.ToInt16(zoekListVM.Van));

                    foreach (var item in zoekListVM.RoutesTerug)
                    {
                        if (item.ReisMogelijkheden.Prijs != null)
                        {
                            totalePrijst += Convert.ToDouble(item.ReisMogelijkheden.Prijs);
                        }

                        var vakantie      = new Vakanties();
                        var extraPlaatsen = 1.0;
                        //controle vakantie
                        if (item.ReisMogelijkheden.Kerstvakantie == true && vakantiesService.DatumInVakantie(Convert.ToDateTime(zoekListVM.TerugDate), true) == true)
                        {
                            vakantie      = vakantiesService.Get(Convert.ToDateTime(zoekListVM.TerugDate), true);
                            extraPlaatsen = 1 + vakantie.PercentExtraPlaatsen;
                        }
                        else if (item.ReisMogelijkheden.Paasvakantie == true && vakantiesService.DatumInVakantie(Convert.ToDateTime(zoekListVM.TerugDate), false) == true)
                        {
                            vakantie      = vakantiesService.Get(Convert.ToDateTime(zoekListVM.TerugDate), false);
                            extraPlaatsen = 1 + vakantie.PercentExtraPlaatsen;
                        }

                        //controle nog genoeg plaatsen op de trein
                        if (zoekListVM.Klasse == 1)
                        {
                            var vrijePlaatsen = Convert.ToInt16(item.ReisMogelijkheden.Trein.AantalPlaatsenEc * extraPlaatsen) - ticketService.GetAantalPlaatsenGereserveerd(item.ReisMogelijkhedenId, Convert.ToDateTime(zoekListVM.HeenDate), zoekListVM.Klasse);

                            if (vrijePlaatsen < zoekListVM.Aantal)
                            {
                                return(RedirectToAction("ErrorTreinOverboekt"));
                            }
                        }
                        else
                        {
                            var vrijePlaatsen = Convert.ToInt16(item.ReisMogelijkheden.Trein.AantalPlaatsenBus * extraPlaatsen) - ticketService.GetAantalPlaatsenGereserveerd(item.ReisMogelijkhedenId, Convert.ToDateTime(zoekListVM.HeenDate), zoekListVM.Klasse);

                            if (vrijePlaatsen < zoekListVM.Aantal)
                            {
                                return(RedirectToAction("ErrorTreinOverboekt"));
                            }
                        }
                    }


                    //overstap gemist
                    if (zoekListVM.RoutesTerug.Count() > 1)
                    {
                        for (int i = 0; i < zoekListVM.RoutesTerug.Count() - 1; i++)
                        {
                            if (zoekListVM.RoutesTerug.ElementAt(i).ReisMogelijkheden.Aankomsttijd >= zoekListVM.RoutesTerug.ElementAt(i + 1).ReisMogelijkheden.Vertrektijd)
                            {
                                aankomstdatumterugreis = aankomstdatumterugreis.AddDays(1);
                            }
                        }
                    }
                }
                ViewBag.Aankomstdatumterug = aankomstdatumterugreis;

                ViewBag.PrijsTicketh = Convert.ToDouble(totalePrijsh);
                ViewBag.PrijsTickett = Convert.ToDouble(totalePrijst);

                //if (ModelState.IsValid)
                //{
                return(View(zoekListVM));
            }
            else
            {
                zoekListVM.RoutesHeen = null;
                return(View("Home", zoekListVM));
            }
        }