public override IParkingReceipt GetParkingCharges(DateTime entryDateAndTime, DateTime exitDateAndTime) { var entryDay = entryDateAndTime.Date.DayOfWeek; var exitDay = exitDateAndTime.Date.DayOfWeek; var parkingInOutDateAndTime = new ParkingInOutDateAndTime { EntryDateTime = entryDateAndTime, ExitDateTime = exitDateAndTime }; var entryTimeFrame = new EntryTimeFrame { EntryCommenceTime = entryCommenceTime, EntryFinishTime = entryFinishTime }; var exitTimeFrame = new ExitTimeFrame { ExitCommenceTime = exitCommenceTime, ExitFinishTime = exitFinishTime }; var parkingInOutDateAndTimeDTO = new ParkingInOutDateAndTimeDTO { EntryTimeFrame = entryTimeFrame, ExitTimeFrame = exitTimeFrame, ParkingInOutDateAndTime = parkingInOutDateAndTime, ParkingRate = ParkingRate, DaysOfWeek = Extension.Weekdays }; if (Extension.Weekdays.Any(w => w.Equals(entryDay)) && Extension.Weekdays.Any(x => x.Equals(entryDay)) && exitDateAndTime.Subtract(entryDateAndTime).Days < 1) { parkingInOutDateAndTimeDTO.EntryExitConditionMet = true; } return(base.ProcessParkingRate(parkingInOutDateAndTimeDTO)); }
public virtual IParkingReceipt ProcessParkingRate(ParkingInOutDateAndTimeDTO inOutTimeDTO) { if (_nextRateHandler == null) { return(null); } var timeInOut = inOutTimeDTO.ParkingInOutDateAndTime; var entryTimeCondition = timeInOut.EntryDateTime.TimeBetween(inOutTimeDTO.EntryTimeFrame.EntryCommenceTime, inOutTimeDTO.EntryTimeFrame.EntryFinishTime); var exitTimeCondition = timeInOut.ExitDateTime.TimeBetween(inOutTimeDTO.ExitTimeFrame.ExitCommenceTime, inOutTimeDTO.ExitTimeFrame.ExitFinishTime); if (inOutTimeDTO.EntryExitConditionMet && entryTimeCondition && exitTimeCondition) { return(new ParkingReceipt { ParkingName = ParkingName, ParkingPrice = ParkingRate, Erred = false, RateType = RateType }); } else { return(_nextRateHandler.GetParkingCharges(timeInOut.EntryDateTime, timeInOut.ExitDateTime)); } }