public async Task <IActionResult> AjoutVoyageur(VoyagePersonnesViewModel voyagePersonnes, int idVoyage, int nbPersonnes) { //On récupère le voyage en cours var voyage = _context.Voyage.Where(v => v.Id == idVoyage).Include(v => v.IdDestinationNavigation).FirstOrDefault(); voyagePersonnes.Voyage = voyage; //On récupère l'utilisateur ViewBag.Utilisateur = _context.Personne.Where(p => p.Id == 4).FirstOrDefault(); //Prix de base pour l'utilisateur double prixTva = (double)voyage.PrixHt; List <double> prixParVoyageur = PrixParVoyageur((double)voyage.PrixHt, voyagePersonnes.Voyageurs); foreach (var item in prixParVoyageur) { prixTva += item; } prixTva += prixTva * 0.20; ViewBag.PrixParVoyageur = prixParVoyageur; ViewBag.Utilisateur = await _context.Personne.Where(p => p.Email == User.FindFirstValue(ClaimTypes.Name)).FirstOrDefaultAsync(); ViewBag.PrixTva = prixTva; HttpContext.Session.Set("prix", prixTva); if (ModelState.IsValid) { //On stock en session si le voyageur est valide HttpContext.Session.Set("voyageurs", voyagePersonnes.Voyageurs); return(RedirectToAction(nameof(Index), new { idVoyage, nbPersonnes })); } return(View("Index", voyagePersonnes)); }
// GET: Client/Reservation public async Task <IActionResult> Index(int idVoyage, int nbPersonnes) { //Gestion si la personne a déjà réservé le voyage var userMail = User.FindFirstValue(ClaimTypes.Name); var personne = await _context.Personne .Where(p => p.Email == userMail).Include(p => p.Client).ThenInclude(c => c.Dossierresa) .FirstOrDefaultAsync(); if (personne.Client != null && personne.Client.Dossierresa.Where(d => d.IdVoyage == idVoyage).Any()) { return(RedirectToAction("Details", "Personnes")); } var voyage = await _context.Voyage.Where(v => v.Id == idVoyage).Include(v => v.IdDestinationNavigation).FirstOrDefaultAsync(); //Prix de base pour l'utilisateur double prixTva = (double)voyage.PrixHt; //On s'assure que la liste de voyageur en session est déjà instancié List <Personne> voyageurs = HttpContext.Session.Get <List <Personne> >("voyageurs") == null ? new List <Personne>() : HttpContext.Session.Get <List <Personne> >("voyageurs"); List <double> prixParVoyageur = PrixParVoyageur((double)voyage.PrixHt, voyageurs); if (nbPersonnes > voyageurs.Count()) { voyageurs.Add(new Personne()); } foreach (var item in prixParVoyageur) { prixTva += item; } prixTva += prixTva * 0.20; HttpContext.Session.Set("voyageurs", voyageurs); ViewBag.Utilisateur = await _context.Personne.Where(p => p.Email == User.FindFirstValue(ClaimTypes.Name)).FirstOrDefaultAsync(); ViewBag.PrixParVoyageur = prixParVoyageur; HttpContext.Session.Set("prix", prixTva); ViewBag.PrixTva = prixTva; HttpContext.Session.Set("idVoyage", idVoyage); var voyagePersonnes = new VoyagePersonnesViewModel(voyage, voyageurs); return(View(voyagePersonnes)); }