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); }
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." });; }
public VehicleCalculationResultModel CalculateStayFee(VehicleFeeCalculationDTO vehicleFeeCalculationDTO) { VehicleCalculationResultModel result = _calculatorService.CalculateFee(vehicleFeeCalculationDTO); return(result); }