示例#1
0
        public BaseResult ChangeStatusTrip(int tripId, TripStatus status)
        {
            var result = new BaseResult();

            try
            {
                result.Success = UnitOfWork.TripDao.ChangeTripStatus(tripId, status.ToString()[0]);
                result.Message = GeneralSuccessMessage;
            }
            catch (Exception ex)
            {
                result.Success = false;
                result.Message = GeneralErrorMessage;
            }
            return(result);
        }
        //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());
            }
        }