Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
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));
        }
Esempio n. 6
0
        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());
        }