示例#1
0
        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}"));
            }
        }