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); }
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); } }
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); }
public async Task <ActionResult> Purchase(CarReservationModel flight, CancellationToken cancellationToken) { await _carsController.Purchase(flight, cancellationToken); return(RedirectToAction("Index", "Cart")); }
// 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)); } }
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); } }