Esempio n. 1
0
        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);
        }