예제 #1
0
        public IActionResult Create(TicketDTO ticketDTO, string to, string from, Guid trainId)
        {
            Train train = _context.Trains.Include("RouteNodes")
                          .FirstOrDefault(m => m.Id == trainId);
            var source = new TicketDTO()
            {
                OriginStationName      = from,
                DestinationStationName = to,
                DepartureTime          = train.RouteNodes.FirstOrDefault(o => o.OriginStationName == from).DepartureTime,
                ArrivalTime            = train.RouteNodes.FirstOrDefault(o => o.OriginStationName == to).ArrivalTime,
                TrainCategory          = train.Category,
                TrainNumber            = train.OfficialNumber,
                TrainId       = train.Id,
                DepartureDate = DateTime.Now
            };

            source.Adults   = ticketDTO.Adults;
            source.Students = ticketDTO.Students;
            source.Children = ticketDTO.Children;
            source.Pet      = ticketDTO.Pet;
            source.Class    = ticketDTO.Class;
            var config = new MapperConfiguration(cfg => {
                cfg.CreateMap <TicketDTO, Ticket>();
            });
            IMapper          mapper        = config.CreateMapper();
            var              ticket        = mapper.Map <TicketDTO, Ticket>(source);
            PriceComputer    priceComputer = new PriceComputer();
            int              from_id       = train.RouteNodes.FirstOrDefault(o => o.OriginStationName == from).OfficialCode;
            int              to_id         = train.RouteNodes.FirstOrDefault(o => o.OriginStationName == to).OfficialCode;
            List <RouteNode> nodes         = train.RouteNodes.Where(o => o.OfficialCode >= from_id && o.OfficialCode <= to_id).ToList();
            int              distance      = 0;

            foreach (var node in nodes)
            {
                distance += node.Km / 1000;
            }
            ticket.Km    = distance;
            ticket.Price = (int)priceComputer.GetPrice(ticket);
            ticket.Email = this.User.Identity.Name;
            //ticket.Email = "*****@*****.**";
            Shuffler   shuffler = new Shuffler();
            List <int> list     = new List <int>();

            for (int i = 1; i <= 100; i++)
            {
                list.Add(i);
            }
            shuffler.Shuffle(list);
            for (int i = 0; i < source.Adults + source.Children + source.Students; i++)
            {
                ticket.Seats += list[i] + "; ";
            }
            ticket.Car = new Random().Next(1, 2);
            _context.Add(ticket);
            //Wagon wagon = _context.Trains.Include("Wagons").FirstOrDefault(m => m.Id == trainId).Wagons.FirstOrDefault(o => o.Class == source.Class);
            //_context.Update(wagon);
            _context.SaveChanges();
            return(RedirectToAction(nameof(Index)));
        }
예제 #2
0
        public void Given_Ticket_ResultPrice_ShouldBe_TheSame()
        {
            var ticket = new Ticket();
            var result = new PriceComputer();

            ticket.Adults        = 2;
            ticket.Km            = 400;
            ticket.Children      = 1;
            ticket.Pet           = 1;
            ticket.TrainCategory = "IR";
            ticket.Class         = 1;
            var price       = 323.4f;
            var resultprice = result.GetPrice(ticket);

            resultprice.ShouldBeEquivalentTo(price);
        }