Ejemplo n.º 1
0
 public TOFastTicket(FastTicket fastTicket, DatabaseContext _context)
 {
     Seat        = new TOSeat(_context.Seats.Find(fastTicket.SeatId));
     AirlineName = fastTicket.Airline.Name;
     NewPrice    = fastTicket.NewPrice;
 }
Ejemplo n.º 2
0
        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());
        }
Ejemplo n.º 3
0
        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 }));
        }
Ejemplo n.º 4
0
        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 }));
        }