예제 #1
0
 public void FinishRide(DateTime time)
 {
     if (Driver.Id == -1 || status != TaxiOrderStatus.InProgress)
     {
         throw new InvalidOperationException();
     }
     status         = TaxiOrderStatus.Finished;
     finishRideTime = time;
 }
예제 #2
0
 public void StartRide(DateTime time)
 {
     if (Driver.Id == -1 || status != TaxiOrderStatus.WaitingCarArrival)
     {
         throw new InvalidOperationException();
     }
     status        = TaxiOrderStatus.InProgress;
     startRideTime = time;
 }
예제 #3
0
 public void Cancel(DateTime time)
 {
     if (status == TaxiOrderStatus.InProgress)
     {
         throw new InvalidOperationException();
     }
     status     = TaxiOrderStatus.Canceled;
     cancelTime = time;
 }
예제 #4
0
 public void UnassignDriver()
 {
     if (Driver.Id == -1 || status == TaxiOrderStatus.InProgress)
     {
         throw new InvalidOperationException();
     }
     Driver = new Driver(-1, new PersonName(null, null), new Car());
     status = TaxiOrderStatus.WaitingForDriver;
 }
예제 #5
0
 public TaxiOrder(int id, PersonName clientName, Address startAddress, DateTime creationTime) : base(id)
 {
     ClientName        = clientName;
     Start             = startAddress;
     Destination       = new Address(null, null);
     Driver            = new Driver(-1, new PersonName(null, null), new Car());
     this.creationTime = creationTime;
     status            = TaxiOrderStatus.WaitingForDriver;
 }
예제 #6
0
        public void FinishRide(DateTime finishRideTime)
        {
            if (Status != TaxiOrderStatus.InProgress)
            {
                throw new InvalidOperationException($"Недопустимая операция для статуса {Status}");
            }

            Status = TaxiOrderStatus.Finished;
            TimeReport.Report(finishRideTime);
        }
예제 #7
0
        public void StartRide(DateTime startRideTime)
        {
            if (Status != TaxiOrderStatus.WaitingCarArrival)
            {
                throw new InvalidOperationException($"Недопустимая операция для статуса {Status}");
            }

            Status = TaxiOrderStatus.InProgress;
            TimeReport.Report(startRideTime);
        }
예제 #8
0
        public void UnassignDriver()
        {
            if (Status != TaxiOrderStatus.WaitingCarArrival)
            {
                throw new InvalidOperationException($"Недопустимая операция для статуса {Status}");
            }

            Driver = null;
            Status = TaxiOrderStatus.WaitingForDriver;
        }
예제 #9
0
 public void AssignDriver(Driver driver, DateTime curTime)
 {
     if (Driver.Id != -1 || status != TaxiOrderStatus.WaitingForDriver)
     {
         throw new InvalidOperationException();
     }
     Driver = driver;
     driverAssignmentTime = curTime;
     this.status          = TaxiOrderStatus.WaitingCarArrival;
 }
예제 #10
0
        public void Cancel(DateTime cancelTime)
        {
            switch (Status)
            {
            case TaxiOrderStatus.InProgress:
            case TaxiOrderStatus.Finished:
                throw new InvalidOperationException($"Недопустимая операция для статуса {Status}");

            case TaxiOrderStatus.Canceled:
                throw new InvalidOperationException("Заказ уже отменен");
            }

            Status = TaxiOrderStatus.Canceled;
            TimeReport.Report(cancelTime);
        }
예제 #11
0
        public void AssignDriver(int driverId, DateTime driverAssignmentTime)
        {
            if (Status != TaxiOrderStatus.WaitingForDriver)
            {
                throw new InvalidOperationException($"Недопустимая операция для статуса {Status}");
            }

            if (driverId == 15)
            {
                Driver = new Driver(driverId, new PersonName("Drive", "Driverson"));
                Car    = new TaxiCar("Lada sedan", "Baklazhan", "A123BT 66");
            }
            else
            {
                throw new Exception("Unknown driver id " + driverId);
            }

            Status = TaxiOrderStatus.WaitingCarArrival;
            TimeReport.Report(driverAssignmentTime);
        }