public IPriceCalculationStrategy GetStrategy(DateTime runDate) { var defStrategy = new DefaultPriceCalculationStrategy(_runRepository, _trainRepository); if (IsHoliday(runDate)) { return(new HolidaysPriceCalculationDecorator(defStrategy)); } else { return(defStrategy); } }
public IPriceCalculationStrategy GetStrategy(IRunRepository runRepository, ITrainRepository trainRepository, DTO dto = null) { var defStrategy = new DefaultPriceCalculationStrategy(runRepository, trainRepository); if (dto == null && dto.TeaCount == 0 && dto.CoffeeCount == 0 && dto.CookiesCount == 0) { return(defStrategy); } else { return(new PriceCalculationDecorator(defStrategy, dto.TeaCount, dto.CoffeeCount, dto.CookiesCount)); } }
public List <PriceComponent> CalculatePrice(PlaceInRun placeInRun) { var run = _runRepository.GetRunDetails(placeInRun.RunId); var train = _trainRepository.GetTrainDetails(run.TrainId); var components = new DefaultPriceCalculationStrategy(_runRepository, _trainRepository). CalculatePrice(placeInRun); if (_trainRepository.GetTrainDetails(placeInRun.Run.TrainId).Booking != null) { components.AddRange(new BookingPriceCalculationStrategy(_runRepository, _trainRepository). CalculatePrice(placeInRun)); } return(components); }
public DefaultPriceCalculationDecorator(DefaultPriceCalculationStrategy strategy, ITrainRepository trainRepository) { _strategy = strategy; _trainRepository = trainRepository; }