public void TheCorrectNumber_When_TheParkingIsCatCAndThereIsDiscountCard(int endHour, double fee)
        {
            var vehicles = new List <Vehicle>
            {
                new Vehicle()
                {
                    Number          = "1234",
                    EntryTime       = new DateTime(2021, 3, 30, 2, 15, 0),
                    DiscountCard    = DiscountCard.Silver,
                    VehicleCategory = VehicleCategory.C
                }
            };

            _lab08ParkingLotUnitOfWork.Setup(r => r.VehicleRepository.GetAll()).Returns(vehicles.AsQueryable());

            var vehicleCalc = new VehicleFeeCalculationDTO()
            {
                VehicleNumber = "1234",
                CheckTime     = new DateTime(2021, 3, 30, endHour, 15, 0),
            };

            VehicleCalculationResultModel result = _controller.CalculateStayFee(vehicleCalc);

            Assert.AreEqual(fee, result.Fee);
        }
Exemple #2
0
        public VehicleCalculationResultModel CalculateFee(VehicleFeeCalculationDTO vehicleFeeCalculationDTO)
        {
            Vehicle vehicle =
                _lab08ParkingLotUnitOfWork.VehicleRepository.GetAll().FirstOrDefault(v => v.Number == vehicleFeeCalculationDTO.VehicleNumber);

            if (vehicle == null)
            {
                return(new VehicleCalculationResultModel()
                {
                    Fee = 0,
                    Message = "Vehicle not found!"
                });
            }

            VehicleRatesModel rates = _vehicleRatesService.GetRatesByVehicleCategory(vehicle.VehicleCategory);

            int result = 0;

            double totalDays = (vehicleFeeCalculationDTO.CheckTime - vehicle.EntryTime).TotalDays;
            int    wholeDays = (int)Math.Truncate(totalDays);

            if (wholeDays > 0)
            {
                result = wholeDays * 12 * rates.DayLightRates + wholeDays * 12 * rates.NightlyRates;

                DateTime reminder = vehicleFeeCalculationDTO.CheckTime.AddDays(wholeDays);

                result = result + CalculateWhenStayTimeIsLessThanADay(reminder, vehicleFeeCalculationDTO.CheckTime, rates);
            }
            else
            {
                result = CalculateWhenStayTimeIsLessThanADay(vehicle.EntryTime, vehicleFeeCalculationDTO.CheckTime, rates);
            }

            return(new VehicleCalculationResultModel()
            {
                Fee = ApplyDiscount(result, vehicle.DiscountCard),
                Message = "Vehicle fee calculated."
            });;
        }
Exemple #3
0
        public VehicleCalculationResultModel CalculateStayFee(VehicleFeeCalculationDTO vehicleFeeCalculationDTO)
        {
            VehicleCalculationResultModel result = _calculatorService.CalculateFee(vehicleFeeCalculationDTO);

            return(result);
        }