Exemplo n.º 1
0
        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}");
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 4
0
        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();
        }
Exemplo n.º 5
0
        //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} ");
        }
Exemplo n.º 7
0
        //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());
            }
        }
Exemplo n.º 8
0
        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);
        }