Exemplo n.º 1
0
        public List <PriceComponent> CalculatePrice(TicketParametersDTO parametrs)
        {
            var components = new List <PriceComponent>();

            var run   = _runRepository.GetRunDetails(parametrs.PlaceInRun.RunId);
            var train = _trainRepository.GetTrainDetails(run.TrainId);
            var place =
                train.Carriages
                .Select(car => car.Places.SingleOrDefault(pl =>
                                                          pl.Number == parametrs.PlaceInRun.Number &&
                                                          car.Number == parametrs.PlaceInRun.CarriageNumber))
                .SingleOrDefault(x => x != null);

            var placeComponent = new PriceComponent()
            {
                Name = "Main price"
            };

            placeComponent.Value = place.Carriage.DefaultPrice * place.PriceMultiplier;
            components.Add(placeComponent);

            if (placeComponent.Value > 30)
            {
                var cashDeskComponent = new PriceComponent()
                {
                    Name  = "Cash desk service tax",
                    Value = placeComponent.Value * 0.2m
                };
                components.Add(cashDeskComponent);
            }

            return(components);
        }
Exemplo n.º 2
0
        public Ticket CreateTicket(int reservationId, string fName, string lName, string code)
        {
            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>()
            };

            var parametrs = new TicketParametersDTO();

            parametrs.PlaceInRun = placeInRun;
            parametrs.Code       = code;
            parametrs.Ticket     = newTicket;

            newTicket.PriceComponents = _priceStr.CalculatePrice(parametrs);

            _tickRepo.Create(newTicket);
            return(newTicket);
        }
Exemplo n.º 3
0
        public List <PriceComponent> CalculatePrice(TicketParametersDTO parameters)
        {
            var PriceComponents = new List <PriceComponent>();

            foreach (IPriceCalculationStrategy strategy in _strategys)
            {
                PriceComponents.AddRange(strategy.CalculatePrice(parameters));
            }

            return(PriceComponents);
        }
Exemplo n.º 4
0
        public List <PriceComponent> CalculatePrice(TicketParametersDTO parametrs)
        {
            var components = new List <PriceComponent>();

            var            defaultPrice = _priceCalculationStrategy.CalculatePrice(parametrs);
            PriceComponent mainPrice    = defaultPrice.Find(p => p.Name == "Main price");

            if (parametrs.Code != null)
            {
                components.Add(new PriceComponent
                {
                    Name     = "Code markup price",
                    Ticket   = parametrs.Ticket,
                    TicketId = parametrs.Ticket.Id,
                    Value    = _bookingAgencies.GetMarkup(parametrs.Code)
                });
            }

            return(components);
        }
Exemplo n.º 5
0
        public ActionResult ReservePlace(int placeId)
        {
            var place = _runRepo.GetPlaceInRun(placeId);

            var reservation = _resServ.Reserve(place);

            var parametrs = new TicketParametersDTO();

            parametrs.PlaceInRun = place;

            var model = new ReservationViewModel()
            {
                Reservation     = reservation,
                PlaceInRun      = place,
                PriceComponents = _priceCalc.CalculatePrice(parametrs),
                Date            = place.Run.Date,
                Train           = _trainRepo.GetTrainDetails(place.Run.TrainId),
            };

            return(View(model));
        }