public Ticket CreateTicket(int reservationId, string fName, string lName, DTO.StrategyDTO strategyDTO) { var res = _resRepo.Get(reservationId); if (res.TicketId != null) { throw new InvalidOperationException("ticket has been already issued to this reservation, unable to create another one"); } var placeInRun = _runRepository.GetPlaceInRun(res.PlaceInRunId); var newTicket = new Ticket() { ReservationId = res.Id, CreatedDate = DateTime.Now, FirstName = fName, LastName = lName, Status = TicketStatusEnum.Active, PriceComponents = new List <PriceComponent>() }; newTicket.PriceComponents = _strategyFactory.createCalculationStrategy(strategyDTO).CalculatePrice(placeInRun); _tickRepo.Create(newTicket); return(newTicket); }
public IPriceCalculationStrategy createCalculationStrategy(DTO.StrategyDTO strategyDTO) { List <IPriceCalculationStrategy> strategyList = new List <IPriceCalculationStrategy>(); strategyList.Add(new PriceCalculationStrategy.DefaultPriceCalculationStrategy(_runRepository, _trainRepository)); if (strategyDTO.IncludeTea) { strategyList.Add(new PriceCalculationStrategy.BeveragesPriceCalculationStrategy("Tea", Prices.Tea)); } if (strategyDTO.IncludeCoffee) { strategyList.Add(new PriceCalculationStrategy.BeveragesPriceCalculationStrategy("Coffee", Prices.Coffee)); } return(new PriceCalculationStrategy.DecoratorCalculationStrategy(strategyList)); }