public void ChangeStatus(int tripId, Status status) { using (var context = new BusTicketSystemContext()) { Trip trip = context.Trips.FirstOrDefault(t => t.Id == tripId); Status oldStatus = trip.Status; trip.Status = status; int ticketCount = 0; ticketCount = context.Tickets.Where(t => t.TripId == tripId).Count(); if (status == Status.arrived) { ArrivedTrip arTrip = new ArrivedTrip { ActualArrivalTime = DateTime.Now, OriginStation = trip.OriginStation, DestinationStation = trip.DestinationStation, PassengerCount = ticketCount }; context.ArrivedTrips.Add(arTrip); } context.SaveChanges(); Console.WriteLine($"Trip from {trip.OriginStation.Town.Name} to {trip.DestinationStation.Town.Name} on {trip.DepartureTime}"); Console.WriteLine($"Status changed from {oldStatus} to {trip.Status}"); } }
public void AddArrivedTrip(BusStation originBusStation, BusStation destinationBusStation, int passengersCount) { var trip = new ArrivedTrip { ActualArrivalTime = DateTime.Now, OriginBusStation = originBusStation, DestinationBusStation = destinationBusStation, PassengersCount = passengersCount }; this.db.Add(trip); this.db.SaveChanges(); }
internal string ChangeTripStatus(string[] args) { int tripId = int.Parse(args[0]); string newStatus = args[1]; using (var context = new BusTicketContext()) { var trip = context.Trips .Include(t => t.OriginBusStation) .ThenInclude(obs => obs.Town) .Include(t => t.DestinationBusStation) .ThenInclude(dbs => dbs.Town) .Include(t => t.Tickets) .SingleOrDefault(t => t.Id == tripId); if (trip == null) { throw new CustomException($"Trip with Id '{tripId}' does not exist!"); } if (trip.Status == Status.Arrived) { throw new CustomException("This trip has already arrived!"); } string result = $"Trip from {trip.OriginBusStation.Town.Name} to {trip.DestinationBusStation.Town.Name} " + $"on {trip.DepartureTime}{Environment.NewLine}" + $"Status changed from {trip.Status} to {newStatus}"; trip.Status = Enum.Parse <Status>(newStatus); if (trip.Status == Status.Arrived) { var arrivedTrip = new ArrivedTrip { ArrivalTime = trip.ArrivalTime, PassengersCount = trip.Tickets.Count(), OriginBusStation = trip.OriginBusStation, OriginBusStationId = trip.OriginBusStationId, DestinationBusStation = trip.DestinationBusStation, DestinationBusStationId = trip.DestinationBusStationId }; context.ArrivedTrips.Add(arrivedTrip); context.SaveChanges(); result += $"{Environment.NewLine}On {DateTime.Now} - {arrivedTrip.PassengersCount} passengers arrived at " + $"{arrivedTrip.DestinationBusStation.Town.Name} from {arrivedTrip.DestinationBusStation.Town.Name}"; } return(result); } }
public void AddArrivalTrip(DateTime actualTime, BusStation originStation, BusStation destinationStation, int passengers) { ArrivedTrip arrivedTrip = new ArrivedTrip { ArriveTime = actualTime, OriginBusStation = originStation, DestinationBusStation = destinationStation, Passengers = passengers }; context.ArrivedTrips.Add(arrivedTrip); context.SaveChanges(); }
//change-trip-status {Trip Id} {New Status} public static string Execute(string[] data) { int tripId = int.Parse(data[1]); string newStatus = data[2]; string result = ""; using (var db = new BusTicketContext()) { var trip = db.Trips .Include(t => t.OriginBusStation) .Include(t => t.DestinationBusStation) .SingleOrDefault(t => t.TripId == tripId); if (trip == null) { throw new ArgumentException("No such trip."); } bool isStatus = Enum.IsDefined(typeof(TripStatus), newStatus); if (!isStatus) { throw new ArgumentException("Status must be departed,arrived,delayed or cancelled"); } if (trip.Status.ToString() == newStatus) { throw new ArgumentException("The current status of the trip is the given one."); } var oldStatus = trip.Status.ToString(); trip.Status = Enum.Parse <TripStatus>(newStatus); result = $"Trip from {trip.OriginBusStation.Name} to {trip.DestinationBusStation.Name} change {oldStatus} to {newStatus}"; if (newStatus == TripStatus.arrived.ToString()) { var passangers = db.Tickets.Where(t => t.TripId == tripId).Count(); var arrivalTrip = new ArrivedTrip { OriginBusStationName = trip.OriginBusStation.Name, DestinationBusStationName = trip.DestinationBusStation.Name, PassengerCount = passangers }; db.ArrivalTrips.Add(arrivalTrip); result = result + Environment.NewLine + $"On {DateTime.Now} - {passangers} passengers arrived at {trip.DestinationBusStation.Name} from {trip.OriginBusStation.Name}"; } db.SaveChanges(); return(result); } }
public string ChangeTripStatus(int id, string statusString) { var trip = context.Trips.SingleOrDefault(p => p.Id == id); var oldStatus = trip.Status.ToString(); Status status; string originStationName = context.BusStations.SingleOrDefault(p => p.Id == trip.OriginStationId).Name; string destinationStationName = context.BusStations.SingleOrDefault(p => p.Id == trip.DestinationStationId).Name; try { status = Enum.Parse <Status>(statusString); } catch (Exception ex) { return("Invalid status"); } trip.Status = status; context.SaveChanges(); if (status == Status.Arrived) { var arrivedTrip = new ArrivedTrip() { ArrivedTime = DateTime.Now, OriginStationId = trip.OriginStationId, DestinationStationId = trip.DestinationStationId, PassengersCount = context.Tickets.Count(p => p.TripId == trip.Id) }; context.ArrivedTrips.Add(arrivedTrip); context.SaveChanges(); } return($"Trip from {trip.OriginStation.Name} to {trip.DestinationStation.Name} on {trip.DepartureTime} Status changed from {oldStatus} to {status} "); }
//Command: change-trip-status <Trip Id> <New Status> public static string Execute(string[] data) { var tripId = int.Parse(data[1]); var newStatus = data[2].ToLower(); using (var db = new BusTicketsDbContext()) { var newTripStatus = new TripStatus(); //change-trip-status 2 delayed switch (newStatus) { case "departed": newTripStatus = TripStatus.Departed; break; case "arrived": newTripStatus = TripStatus.Arrived; break; case "delayed": newTripStatus = TripStatus.Delayed; break; case "cancalled": newTripStatus = TripStatus.Cancelled; break; default: throw new ArgumentException("Wrong status input."); } var trip = db.Trips .Where(t => t.TripId == tripId) .Include(t => t.DestinationBusStation) .ThenInclude(dbs => dbs.Town) .Include(t => t.OriginBusStation) .ThenInclude(obs => obs.Town) .SingleOrDefault(); string oldTripStatus = trip.Status.ToString(); if (trip == null) { throw new ArgumentException("Invalid Trip Number!"); } if (trip.Status == newTripStatus) { throw new ArgumentException($"The status of this trip is already {newTripStatus.ToString()}"); } var builder = new StringBuilder(); db.Trips.SingleOrDefault(t => t.TripId == trip.TripId).Status = newTripStatus; db.SaveChanges(); builder.AppendLine($"Trip from {trip.OriginBusStation.Town.TownName} to {trip.DestinationBusStation.Town.TownName} on {trip.DepartureTime} Status changed from { oldTripStatus } to { newTripStatus.ToString() }"); if (newTripStatus == TripStatus.Arrived) { var passengersCount = db.Tickets.Where(t => t.TripId == trip.TripId).Count(); var arrivedTrip = new ArrivedTrip() { DateTimeArrived = trip.ArrivalTime, OriginArrivedId = trip.OriginBusStation.BusStationId, OriginArrived = trip.OriginBusStation, DestinationArrivedId = trip.DestinationBusStation.BusStationId, DestinationArrived = trip.DestinationBusStation, PassangersCounted = passengersCount }; db.ArrivedTrips.Add(arrivedTrip); db.SaveChanges(); builder.AppendLine($"On {arrivedTrip.DateTimeArrived.Date} - {arrivedTrip.PassangersCounted} passengers arrived at {arrivedTrip.DestinationArrived.BusStationName} " + $"from {arrivedTrip.OriginArrived.BusStationName}"); } return(builder.ToString().Trim()); } }
public string Execute(string[] data) { if (data.Length != 2) { throw new InvalidOperationException("Invalid parameters!"); } int tripId = int.Parse(data[0]); string newStatus = data[1]; var result = new StringBuilder(); using (var db = new BusTicketSystemContext()) { var trip = db.Trips .Include(t => t.OriginBusStation) .ThenInclude(s => s.Town) .Include(t => t.DestinationBusStation) .ThenInclude(s => s.Town) .Include(t => t.Tickets) .SingleOrDefault(t => t.Id == tripId); if (trip == null) { throw new InvalidOperationException("There is no such trip!"); } var statusNames = Enum.GetNames(typeof(Status)).ToList(); if (!statusNames.Contains(newStatus)) { throw new InvalidOperationException("Invalid status name!"); } string oldStatus = trip.Status.ToString(); trip.Status = (Status)statusNames.IndexOf(newStatus); string originTown = trip.OriginBusStation.Town.Name; string destinationTown = trip.DestinationBusStation.Town.Name; result.AppendLine($"Trip from {originTown} to {destinationTown} on {trip.DepartureTime}"); result.AppendLine($"Status changed from {oldStatus} to {newStatus}"); if (newStatus == "Arrived") { int passengersCount = trip.Tickets.Count; result.Append($"On {trip.ArrivalTime} - {passengersCount} passengers arrived at {destinationTown} from {originTown}"); var arrivedTrip = new ArrivedTrip() { ActualArrivedTime = trip.ArrivalTime, DestinationBusStation = destinationTown, OriginBusStation = originTown, PassengersCount = passengersCount }; db.ArrivedTrips.Add(arrivedTrip); } db.SaveChanges(); } return(result.ToString()); }
public static string Execute(string[] data) { int tripId = int.Parse(data[1]); string newStatus = data[2].ToLower(); string result = string.Empty; using (var db = new BusTicketContext()) { var trip = db.Trips .Include(x => x.OriginBusStation) .ThenInclude(x => x.Town) .Include(x => x.DestinationBusStation) .ThenInclude(x => x.Town) .Include(x => x.Tickets) .Where(x => x.TripId == tripId) .FirstOrDefault(); if (trip == null) { throw new InvalidOperationException("No such trip."); } if (trip.Status.ToString().ToLower() == newStatus.ToLower()) { throw new InvalidOperationException("The new status must be different from the old one!"); } string currentStatus = trip.Status.ToString(); switch (newStatus) { case "departed": trip.Status = TripStatus.Departed; break; case "arrived": trip.Status = TripStatus.Arrived; break; case "delayed": trip.Status = TripStatus.Delayed; break; case "cancelled": trip.Status = TripStatus.Cancelled; break; default: break; } db.SaveChanges(); string outputStatus = trip.Status.ToString(); if (newStatus == "arrived") { var arrivedTrip = new ArrivedTrip() { ActualArriveTime = trip.ArrivalTime.AddMinutes(25), ArriveDestinationBusStationId = trip.DestinationBusStationId, ArriveOriginBusStationId = trip.OriginBusStationId, PassengersCount = trip.Tickets.Count() }; db.ArrivedTrips.Add(arrivedTrip); db.SaveChanges(); StringBuilder sb = new StringBuilder(); string actualTime = arrivedTrip.ActualArriveTime.ToString(@"yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture); sb.AppendLine($"Trip from {trip.OriginBusStation.Town.Name} to {trip.DestinationBusStation.Town.Name} on {trip.DepartureTime}"); sb.AppendLine($"Status changed from {currentStatus} to {outputStatus}"); sb.AppendLine($"On {actualTime} - {arrivedTrip.PassengersCount} passengers arrived at {trip.DestinationBusStation.Town.Name} from {trip.OriginBusStation.Town.Name}"); result = sb.ToString().Trim(); } else { StringBuilder sb = new StringBuilder(); sb.AppendLine($"Trip from {trip.OriginBusStation.Town.Name} to {trip.DestinationBusStation.Town.Name} on {trip.DepartureTime}"); sb.AppendLine($"Status changed from {currentStatus} to {outputStatus}"); result = sb.ToString().Trim(); } } return(result); }