public RentalReceipt ReturnVehicle(Guid bookingId, DateTime returnDateTime, int dashboardMileage) { var rentalBooking = _rentalStorage.GetRentalRegistration(bookingId); if (rentalBooking == null) { throw new BookingNotFoundException(); } var numberOfDays = rentalBooking.Booking.GetNumberOfRentedDays(returnDateTime); var kilometers = rentalBooking.Vehicle.GetDrivenKilometers(dashboardMileage); var amountToPay = ((IRentCalculatable)rentalBooking.Vehicle) .Calculate(numberOfDays, kilometers, _applicationSettings.GetBaseDayRentalPrice(), _applicationSettings.GetKilometerPrice()); return(new RentalReceipt(amountToPay, new Period(rentalBooking.Booking.StartDate, returnDateTime), kilometers)); }