Esempio n. 1
0
        public async Task <Rental> RegisterRental(DateTime from, DateTime to, int carMilageKm, long customerId, long rentalCarId)
        {
            var carRentals = await this.unitOfWork.Rental.GetRentals(rentalCarId : rentalCarId);

            if (carRentals.Any(c => c.ReturnedAt == null && IsOverlapping(interval1: (c.From, c.To), interval2: (from, to))))
            {
                throw new ArgumentException("Car is not available!");
            }
            var rentalCar = await this.unitOfWork.RentalCar.Get(rentalCarId : rentalCarId);

            rentalCar.MilageKm = carMilageKm;
            this.unitOfWork.RentalCar.Update(rentalCar: rentalCar);

            var bookingNumber = Guid.NewGuid().ToString();
            var newRental     = new DAL.Models.Rental()
            {
                BookingNumber = bookingNumber,
                From          = from,
                To            = to,
                RentalCarId   = rentalCarId,
                CustomerId    = customerId,
                ReturnedAt    = null,
                PaidPrice     = null,
            };

            await this.unitOfWork.Rental.Add(rental : newRental);

            await this.unitOfWork.CompleteAsync();

            return(this.rentalConverter.Convert(rental: newRental));
        }
Esempio n. 2
0
        public void TestIsOverlapping()
        {
            var interval = (5, 10);

            Assert.Equal(false, IsOverlapping(interval, (1, 2)));
            Assert.Equal(true, IsOverlapping(interval, (1, 6)));
            Assert.Equal(true, IsOverlapping(interval, (1, 11)));
            Assert.Equal(true, IsOverlapping(interval, (5, 9)));
            Assert.Equal(true, IsOverlapping(interval, (8, 11)));
            Assert.Equal(false, IsOverlapping(interval, (11, 12)));
        }