public RentalFinalization FinalizeRental(IClient client, IRental rental) { if (rental.IsFinalized()) { throw new RentalIsAlreadyFinalizedException("Rental is already finalized"); } RentalFinalization rentalFinalization = new RentalFinalization(client, this); rental.Finalization = rentalFinalization; Bike bike = rental.Bike; bike.ChangeState(BikeState.Free); bike.Rental = null; return(rentalFinalization); }
public Rental ProvideRental(IClient client, Bike bike, UnitOfTime unitOfTime) { if (!bike.IsAvailable()) { throw new BikeIsNotAvailableException("Bike is not available"); } RentalModality rentalModality; switch (unitOfTime) { case UnitOfTime.Hour: rentalModality = this.CurrentRentalByHourModality; break; case UnitOfTime.Day: rentalModality = this.CurrentRentalByDayModality; break; case UnitOfTime.Week: rentalModality = this.CurrentRentalByWeekModality; break; default: throw new UnitOfTimeIsNotValidException("Unit of time is not valid"); } Rental rental = new Rental(client, new RentalBeginning(this), bike, rentalModality); bike.ChangeState(BikeState.In_Use); bike.Rental = rental; client.AddRental(rental); return(rental); }