Пример #1
0
        public async Task <CarReservation> MakeReservation(CarReservationModel reservation)
        {
            Car car = await GetCar(reservation.CarId);

            car.IsReserved = true;

            var carReservation = new CarReservation()
            {
                Car       = car,
                EndDate   = reservation.EndDate,
                FullPrice = reservation.FullPrice,
                StartDate = reservation.StartDate,
                UserEmail = reservation.UserEmail
            };

            //update this car in db
            _context.Car.Update(car);

            //write in reservations
            _context.CarReservations.Add(carReservation);

            await _context.SaveChangesAsync();

            //posalji izvestaj na email
            await _emailSender.SendEmailAsync(carReservation.UserEmail,
                                              "Succesfull car reservation!",
                                              $"<h2>Congratulations!</h2><p>You made a successful car reservation. Your {carReservation.Car.Mark} is ready to go!</p>");

            return(carReservation);
        }
Пример #2
0
        public async Task <object> GetCarsAsync(long id, [FromQuery] CarReservationModel model, [FromQuery] bool all)
        {
            var user = await GetLoginUserAsync();

            if (user is User)
            {
                var carsModel = new List <CarReservationDetailsModel>();

                foreach (var item in await carRepository.GetCarsOfAgencyAsync(id))
                {
                    if (!all)
                    {
                        if (item.PassengerNumber != model.PassengerNumber || model.MaxCost < item.CostPerDay || model.Type != item.Type || item.IsReserved)
                        {
                            continue;
                        }
                    }
                    if (all && item.IsReserved)
                    {
                        continue;
                    }
                    carsModel.Add(new CarReservationDetailsModel(item)
                    {
                        AverageRating = await carRepository.GetAverageRatingAsync(item.Id),
                        CostForRange  = (model.ReturnDate - model.TakeDate).TotalDays * item.CostPerDay
                    });
                }

                return(carsModel);
            }
            else
            {
                return(Forbid());
            }
        }
        public async Task Purchase(CarReservationModel car, CancellationToken cancellationToken)
        {
            string cartId      = _cartCookieProvider.GetCartCookie();
            var    updatedCart = await _cartDataProvider.UpsertCartCar(cartId, car.SelectedCar, car.NumberOfDays, cancellationToken);

            if (string.IsNullOrEmpty(cartId))
            {
                _cartCookieProvider.SetCartCookie(updatedCart.Id);
            }
        }
Пример #4
0
        public async Task <object> MakeReservation(CarReservationModel carReservationModel)
        {
            try
            {
                var res = await _repository.MakeReservation(carReservationModel);

                return(Ok(res));
            }
            catch (Exception e)
            {
                Console.WriteLine($"Error while making car reservation. [{e.Message}]");
                return(BadRequest(new { message = "Failed to make car reservation." }));
            }
        }
        public async Task <CarReservationModel> Search(SearchModel searchRequest, CancellationToken cancellationToken)
        {
            CarReservationModel carReservation = new CarReservationModel()
            {
                NumberOfDays = searchRequest.EndDate.Subtract(searchRequest.StartDate).TotalDays
            };

            carReservation.Cars = await _carDataProvider.FindCars(searchRequest.StartLocation, searchRequest.StartDate, cancellationToken);

            if (searchRequest.IsTest)
            {
                carReservation.SelectedCar = carReservation.Cars.Skip(TestSettings.random.Next(carReservation.Cars.Count() - 1)).First().Id;
            }

            return(carReservation);
        }
Пример #6
0
        public async Task <ActionResult> Purchase(CarReservationModel flight, CancellationToken cancellationToken)
        {
            await _carsController.Purchase(flight, cancellationToken);

            return(RedirectToAction("Index", "Cart"));
        }
Пример #7
0
        // POST: api/CarReservation/Reserve
        public async Task <IActionResult> Reserve([FromBody] CarReservationModel model)
        {
            //int DropoffLocationId = model.PickupLocationId;

            string userName = User.Claims.First(claim => claim.Type == "UserName").Value;
            User   user     = await userManager.FindByNameAsync(userName);

            Car car = await dbContext.Cars
                      .FirstOrDefaultAsync(car => car.Id == model.CarId);

            DateTime from = String2Date(model.FromDate);
            DateTime to   = String2Date(model.ToDate);

            if (model.PickupLocationId != model.DropoffLocationId)
            {
                to = to.AddDays(2);
            }

            DateTime iterator = from;

            var date = await dbContext.CarDates.AddAsync(new Date { DateReserved = iterator, CarId = car.Id });

            if (date == null)
            {
                return(BadRequest());
            }

            while (iterator != to)
            {
                iterator = iterator.AddDays(1);

                date = await dbContext.CarDates.AddAsync(new Date { DateReserved = iterator, CarId = car.Id });

                if (date == null)
                {
                    return(BadRequest());
                }
            }

            try
            {
                var reservation = await dbContext.CarReservations.AddAsync(new CarReservation {
                    User              = user,
                    Car               = car,
                    PickupDate        = model.FromDate,
                    PickupLocationId  = model.PickupLocationId,
                    PickupTime        = model.FromTime,
                    DropoffDate       = model.ToDate,
                    DropoffLocationId = model.DropoffLocationId,
                    DropoffTime       = model.ToTime,
                    Price             = model.Price
                });

                dbContext.SaveChanges();

                return(Ok(reservation.Entity));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex));
            }
        }
Пример #8
0
        public async Task <object> CreateReservation(Reservation reservation, string initiatorEmail)
        {
            AirlineReservation airlineReservation;
            CarReservation     carReservation;
            User user;

            if (reservation.AirlineReservation != null)
            {
                user = (await _userManager.FindByEmailAsync(reservation.AirlineReservation.PassengerEmail));    //user koji sedi                                                                                                                       //ako je to taj user treba mu postaviti status rezervacije na CONFIRMED da bi bila vidljiva na profilu
                var role = await _userManager.GetRolesAsync(user);
            }
            else
            {
                user = await _userManager.FindByEmailAsync(reservation.CarReservation.UserEmail);
            }


            try
            {
                if (reservation.AirlineReservation == null)
                {
                    airlineReservation = null;
                }
                else
                {
                    //red i vrsta => rowNo seatNo
                    var flight = (await _context.Flight.ToListAsync()).FirstOrDefault(f => f.Id == reservation.AirlineReservation.Flight.Id);
                    var seat   = flight.SeatConfiguration.Seats[reservation.AirlineReservation.RowNumber].Seats[reservation.AirlineReservation.SeatNumber];


                    seat.PassengerEmail = user.Email;
                    seat.SeatStatus     = "TAKEN";

                    await _context.SaveChangesAsync();

                    airlineReservation = new AirlineReservation()
                    {
                        Flight               = flight,
                        PassengerEmail       = user.Email,
                        DeadlineForCanceling = reservation.AirlineReservation.DeadlineForCanceling,
                        RowNumber            = reservation.AirlineReservation.RowNumber,
                        SeatNumber           = reservation.AirlineReservation.SeatNumber,
                        ConfirmDate          = ""
                    };

                    await _context.AirlineReservation.AddAsync(airlineReservation);

                    await _context.SaveChangesAsync();
                }


                if (reservation.CarReservation == null)
                {
                    carReservation = null;
                }
                else
                {
                    var carResModel = new CarReservationModel()
                    {
                        Car       = reservation.CarReservation.Car,
                        CarId     = reservation.CarReservation.CarId,
                        EndDate   = reservation.CarReservation.EndDate,
                        StartDate = reservation.CarReservation.StartDate,
                        FullPrice = reservation.CarReservation.FullPrice,
                        UserEmail = reservation.CarReservation.UserEmail
                    };

                    carReservation = await _carService.MakeReservation(carResModel);
                }


                var fullReservation = new Reservation()
                {
                    AirlineReservation = airlineReservation,
                    CarReservation     = carReservation,
                    Status             = (user.Email == initiatorEmail) ? "CONFIRMED" : reservation.Status, //da li je napustena tj otkazana (UNCONFIRMED polje iz Ang)
                    IsFinished         = reservation.IsFinished                                             //na osnovu ovoga znamo da li je zavrsena
                };

                await _context.Reservation.AddAsync(fullReservation);

                await _context.SaveChangesAsync();

                return(fullReservation);
            }
            catch (DbException dex)
            {
                Console.WriteLine(dex);
                return(HttpStatusCode.InternalServerError);
            }
        }