public override decimal Calculate(ChargingScheme customerSelection, DateTime entryTime, DateTime exitTime) { var charge = 0m; var currentPeriod = entryTime; while (currentPeriod < exitTime) { if (this.Applies(currentPeriod)) { charge += this.PeriodRate; currentPeriod = currentPeriod.Add(this.Increment); } else { currentPeriod = currentPeriod.Add(this.Increment.Subtract(new TimeSpan(0, 0, 1))); } } return(charge); }
public decimal ProcessParkingCharge(ChargingScheme customerSelection, DateTime entryTime, DateTime exitTime) { var scheme = ActiveSchemes.Single(rule => rule.Scheme == customerSelection); return(scheme.Calculate(customerSelection, entryTime, exitTime)); }
public override decimal Calculate(ChargingScheme customerSelection, DateTime entryTime, DateTime exitTime) { var days = (exitTime.Day - entryTime.Day) + 1; return(days * this.PeriodRate); }
public abstract decimal Calculate(ChargingScheme customerSelection, DateTime entryTime, DateTime exitTime);