public async Task <IActionResult> PutLocation([FromRoute] int id, [FromBody] LocationUpdateViewModel location) { #region Prerequisites string token = GetToken(); if (!TokenService.ValidateToken(token) || !TokenService.VerifDateExpiration(token)) { return(Unauthorized()); } if (!ModelState.IsValid || id == 0) { return(BadRequest(ModelState)); } Location loc = _context.Location.FirstOrDefault(l => l.LocId == id); if (loc == null) { return(NotFound()); } #endregion try { LocationService locServ = new LocationService(_context); User user = _context.User.SingleOrDefault(u => u.UserId == loc.LocUserId); Vehicle vehicle = _context.Vehicle.SingleOrDefault(v => v.VehId == location.VehicleId); Pole poleS = _context.Pole.SingleOrDefault(p => p.PoleId == loc.LocPoleIdstart); Pole poleE = _context.Pole.SingleOrDefault(p => p.PoleId == loc.LocPoleIdend); var message1 = ""; var message2 = ""; bool afficherInformationVehicule = false; switch (location.Action) { case "Cancel": // %%MESSAGE1%% Votre location a été annulée. // %%MESSAGE2%% //afficher information véhicule false locServ.CancelLocation(loc); message1 = "Votre location a été annulée par un administrateur..."; message2 = "Vous pouvez le contacter pour avoir plus de détails sur cette annulation."; break; case "Validate": // %%MESSAGE1%% Bonne nouvelle votre location vient d'être validée ! // %%MESSAGE2%% Vous pouvez maintenant consulter le détail de votre location sur BookYourCar ! //afficher information véhicule true locServ.ValidateLocationAndSetVehicule(loc, location.VehicleId); message1 = "Bonne nouvelle, votre location vient d'être validée !"; message2 = "Vous pouvez maintenant consulter le détail de votre location sur BookYourCar !"; afficherInformationVehicule = true; break; case "Update": // %%MESSAGE1%% Votre location vient d'être modifiée ! // %%MESSAGE2%% Vous pouvez maintenant consulter le détail de votre location sur BookYourCar ! //afficher information véhicule true locServ.UpdateLocationAndVehicule(loc, location.VehicleId); message1 = "Votre location vient d'être modifiée !"; message2 = "Un nouveau véhicule vous a été affecté. Consulter le détail de votre location sur BookYourCar !"; afficherInformationVehicule = true; break; case "Start": // %%MESSAGE1%% Votre location vient de commencer ! // %%MESSAGE2%% Bonne route ! // afficher information véhicule true locServ.StartLocation(loc); message1 = "Votre location vient de commencer !"; message2 = "Bonne route !"; afficherInformationVehicule = true; break; case "Finish": // %%MESSAGE1%% Nous esperons que votre location s'est bien passée ! // %%MESSAGE2%% Vous pourrez retrouver le détail de votre location sur BookYourCar ! // afficher information véhicule false message1 = "Nous espérons que votre location s'est bien passée !"; message2 = "Vous pourrez retrouver le détail de votre location sur BookYourCar !"; locServ.FinishLocation(loc); break; default: ModelState.AddModelError("Error", "L'action demandée est inconnue"); return(BadRequest(ModelState)); } _context.Update(loc); await _context.SaveChangesAsync(); if (await EmailService.SendEmailPutLocationAsync(user, loc, poleS, poleE, vehicle, message1, message2, afficherInformationVehicule)) { ModelState.AddModelError("Success", "La location a bien été modifée."); return(Ok(ModelState)); } else { ModelState.AddModelError("Error", "Une erreur s'est produite sur l'envoi de mail de confirmation mais la validation de la réservation a bien été prise en compte."); return(BadRequest(ModelState)); } } catch (Exception ex) { return(BadRequest($"Une erreur s'est produite durant la mise à jour de la location. Cause : {ex.Message}")); } }