public double CalculatePrice(string bookingNumber, string returnDate, string returnMilage) { var rental = database.CarRentals.Where(x => x.BookingNumber == bookingNumber).First(); CarCategories car = rental.CarCategory; DateTime returnDateConverted; DateTime.TryParse(returnDate, out returnDateConverted); int returnMilageConverted; Int32.TryParse(returnMilage, out returnMilageConverted); int numberOfDays = (int)Math.Ceiling((returnDateConverted - rental.RentalDate).TotalDays); int numberOfKm = returnMilageConverted - rental.Milage; double price = 0; switch (car) { case CarCategories.SmallCar: price = baseDayRental * numberOfDays; break; case CarCategories.Van: price = baseDayRental * numberOfDays * 1.2 + kmPrice * numberOfKm; break; case CarCategories.Minibus: price = baseDayRental * numberOfDays * 1.7 + (kmPrice * numberOfKm * 1.5); break; } return(price); }
private async Task <double> CalculateRentalPrice(Bookings booking, CarCategories carCategory) { Prices priceOfBaceDayRental = await GetPriceOfBaceDayRental(); double daysOfRentalDifference = (booking.DateTimeForReturn - booking.DateTimeForRental).Value.TotalDays; double daysOfRental = Math.Ceiling(daysOfRentalDifference); return(daysOfRental * priceOfBaceDayRental.Cost.Value * carCategory.AddCostPerDay.Value); }
private async Task <double> GetPriceForBooking(Bookings booking) { CarCategories carCategory = await GetCarCategory(booking.CarCategory); double kilometerPrice = await CalculateKilometerPrice(booking, carCategory); double rentalPrice = await CalculateRentalPrice(booking, carCategory); return(rentalPrice + kilometerPrice); }
private async Task <double> CalculateKilometerPrice(Bookings booking, CarCategories carCategory) { if (carCategory.CostPerKilometer.HasValue && carCategory.CostPerKilometer.Value == true) { Prices priceOfKilometerPrice = await GetPriceOfKilometerPrice(); var numberOfKilometers = booking.CarMileageReturn - booking.CarMileageForRental; return(numberOfKilometers.Value * priceOfKilometerPrice.Cost.Value * carCategory.AddCostPerKilometer.Value); } return(0); }
public string CustomerRentsCar(string carCategory, string customerSocialSecurityNumber, decimal currentMilage) { if (!CarCategories.IsOfThisType(carCategory)) { throw new ArgumentNullException("carCategory"); } if (!SocialSecurityNumber.IsValid(customerSocialSecurityNumber)) { throw new ArgumentNullException("customerSocialSecurityNumber"); } return(CreateAndSaveACarRental(carCategory, customerSocialSecurityNumber, currentMilage)); }
private async Task <IResult> AddRentalCountByCategory(CarCategories category) { RentalCount rentalCountByCategory = await _rentalCountDal.GetAsync(r => r.Category == category && r.Month == DateTime.Now.Month); if (rentalCountByCategory == null) { var newRentalCountPerMonthByCategory = new RentalCount { Category = category, Month = DateTime.Now.Month, TotalRent = 1 }; await _rentalCountDal.AddAsync(newRentalCountPerMonthByCategory); return(new SuccessResult()); } rentalCountByCategory.TotalRent++; await _rentalCountDal.UpdateAsync(rentalCountByCategory); return(new SuccessResult()); }