예제 #1
0
        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));
            }
        }