Пример #1
0
        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);
        }
Пример #2
0
        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));
        }