public TOFastTicket(FastTicket fastTicket, DatabaseContext _context) { Seat = new TOSeat(_context.Seats.Find(fastTicket.SeatId)); AirlineName = fastTicket.Airline.Name; NewPrice = fastTicket.NewPrice; }
public async Task <IActionResult> CancelFlightReservation(int id, JObject username) { var tempUsername = username["username"].ToString(); var tempFlightReservation = await _context.FlightReservations.Include(reservation => reservation.FlightReservationDetails) .ThenInclude(details => details.PassengerSeats).FirstOrDefaultAsync(reservation => reservation.ReservationId == id); for (int i = 0; i < tempFlightReservation.FlightReservationDetails.Count; i++) { for (int j = 0; j < tempFlightReservation.FlightReservationDetails[i].PassengerSeats.Count; j++) { if (tempFlightReservation.FlightReservationDetails[i].PassengerSeats[j].Username == tempUsername) { Seat seat = await _context.Seats.FindAsync(tempFlightReservation.FlightReservationDetails[i].PassengerSeats[j].SeatId); seat.Occupied = false; _context.Entry(seat).State = EntityState.Modified; if (seat.Discount != 0) { FastTicket fastTicket = new FastTicket() { SeatId = seat.SeatId, Airline = _context.Airlines.Find(tempFlightReservation.FlightReservationDetails[i].AirlineName), NewPrice = seat.Price * (1 - (0.01 * seat.Discount)) }; _context.FastTickets.Add(fastTicket); } await _context.SaveChangesAsync(); tempFlightReservation.FlightReservationDetails[i].PassengerSeats.Remove(tempFlightReservation.FlightReservationDetails[i].PassengerSeats[j]); break; } } } if (tempFlightReservation.FlightReservationDetails[0].PassengerSeats.Count() != 0) { _context.Entry(tempFlightReservation).State = EntityState.Modified; } else { if (tempFlightReservation.VehicleReservationId != 0) { await deleteVehicleReservation(tempFlightReservation.VehicleReservationId).ConfigureAwait(false); } _context.Entry(tempFlightReservation).State = EntityState.Deleted; } try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!FlightReservationExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public async Task <IActionResult> PutSeat(int id, TOSeat seat, [FromQuery] int version) { if (id != seat.SeatId) { return(BadRequest()); } Flight tempFlight = await _context.Flights.FindAsync(seat.FlightId); var success = false; if (tempFlight.Version != version) { return(Ok(new { success })); } tempFlight.Version++; _context.Entry(tempFlight).State = EntityState.Modified; Seat oldSeat = await _context.Seats .Include(s => s.Flight).ThenInclude(f => f.Airline) .FirstOrDefaultAsync(s => s.SeatId == seat.SeatId); Seat tempSeat = new Seat(seat, _context); if (oldSeat.Discount == 0 && tempSeat.Discount != 0) { FastTicket fastTicket = new FastTicket() { SeatId = tempSeat.SeatId, Airline = tempSeat.Flight.Airline, NewPrice = Math.Round(tempSeat.Price * (1 - (0.01 * tempSeat.Discount))) }; _context.Add(fastTicket); } else if (seat.Discount == 0 && oldSeat.Discount != 0) { FastTicket fastTicket = await _context.FastTickets.FindAsync(tempSeat.SeatId); _context.Remove(fastTicket); } else if (seat.Discount != oldSeat.Discount) { FastTicket oldFastTicket = await _context.FastTickets.FindAsync(tempSeat.SeatId); FastTicket fastTicket = new FastTicket() { Airline = oldFastTicket.Airline, SeatId = oldFastTicket.SeatId, NewPrice = Math.Round(tempSeat.Price * (1 - (0.01 * tempSeat.Discount))) }; _context.Entry(oldFastTicket).CurrentValues.SetValues(fastTicket); } _context.Entry(oldSeat).CurrentValues.SetValues(tempSeat); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SeatExists(id)) { return(NotFound()); } else { throw; } } success = true; return(Ok(new { success })); }
public async Task <IActionResult> PutFastTicket(int id, [FromBody] JObject Obj, [FromQuery] int version) { TOFastTicket fastTicket = Obj["fastTicket"].ToObject <TOFastTicket>(); bool occupied = Obj["occupied"].ToObject <bool>(); if (id != fastTicket.Seat.SeatId) { return(BadRequest()); } Flight tempFlight = await _context.Flights.FindAsync(fastTicket.Seat.FlightId); var success = false; if (tempFlight.Version != version) { return(Ok(new { success })); } tempFlight.Version++; _context.Entry(tempFlight).State = EntityState.Modified; FastTicket tempFastTicket = await _context.FastTickets.FindAsync(fastTicket.Seat.SeatId); Seat seat = await _context.Seats.Include(seat => seat.Flight).ThenInclude(flight => flight.Airline).FirstAsync(seat => seat.SeatId == fastTicket.Seat.SeatId); seat.Occupied = occupied; _context.Entry(seat).State = EntityState.Modified; try { await _context.SaveChangesAsync(); string userId = User.Claims.First(c => c.Type == "UserID").Value; var user = await _userManager.FindByIdAsync(userId); if (occupied == true) { FlightReservation flightReservation = new FlightReservation() { ReservationId = 0, Creator = user.UserName, FinalPrice = fastTicket.NewPrice, TimeOfCreation = DateTime.Now, VehicleReservationId = 0 }; FlightReservationDetail flightReservationDetail = new FlightReservationDetail() { FlightReservation = flightReservation, AirlineName = seat.Flight.Airline.Name, FlightReservationDetailId = 0, FlightId = seat.Flight.FlightId }; PassengerSeat passengerSeat = new PassengerSeat() { PassengerSeatId = 0, FlightReservationDetail = flightReservationDetail, SeatId = seat.SeatId, Username = user.UserName, Accepted = true, AirlineScored = false, FlightScored = false, Name = "", Surname = "", Passport = "" }; flightReservationDetail.PassengerSeats = new List <PassengerSeat>(); flightReservationDetail.PassengerSeats.Add(passengerSeat); flightReservation.FlightReservationDetails = new List <FlightReservationDetail>(); flightReservation.FlightReservationDetails.Add(flightReservationDetail); _context.FlightReservations.Add(flightReservation); _context.FastTickets.Remove(tempFastTicket); await _context.SaveChangesAsync(); } } catch (DbUpdateConcurrencyException) { if (!FastTicketExists(id)) { return(NotFound()); } else { throw; } } success = true; return(Ok(new { success })); }