示例#1
0
 private List <Ticket> InitializeTickets(List <Ticket> tickets, IEasyTrainTicketsDbEntities dbContext)
 {
     for (int i = 0; i < tickets.Count; i++)
     {
         HashSet <int> ids = new HashSet <int>();
         foreach (var id in tickets[i].conPartsId)
         {
             ids.Add(id);
         }
         List <ConnectionPart> parts = dbContext.ConnectionParts.Where(cp => ids.Contains(cp.Id)).ToList();
         for (int j = 0; j < tickets[i].Seats.Count; j++)
         {
             tickets[i].ConnectionPath.Add(parts.Find(p => p.Id == tickets[i][j]));
         }
         Dictionary <int, int> dict = new Dictionary <int, int>();
         foreach (var id in tickets[i].discountsId)
         {
             if (dict.ContainsKey(id))
             {
                 dict[id]++;
             }
             else
             {
                 dict.Add(id, 1);
             }
         }
         foreach (var id in dict.Keys)
         {
             Discount discount = dbContext.Discounts.Where(d => d.Id == id).First();
             tickets[i].Discounts.Add(discount, dict[id]);
         }
     }
     return(tickets);
 }
        public ActionResult AddConnection(string stringConnection)
        {
            Connection connection = JsonConvert.DeserializeObject<Connection>(stringConnection);
            addConnectionModel.EndInitializationConnection(connection);

            if(Session["connections"] is List<Connection>)
            {
                List<Connection> connections = Session["connections"] as List<Connection>;
                connections.Add(connection);
                Session["connections"] = connections;
                return RedirectToAction("ListConnections", new { page = 1 });
            }
            else
            {
                using (IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
                {
                    dbContext.Trains.Attach(connection.Train);
                    foreach (var part in connection.Parts)
                    {
                        dbContext.Routes.Attach(part.Route);
                 
                    }            
                    dbContext.Connections.Add(connection);
                    dbContext.SaveChanges();
                }
                   
                return View("MySuccess", new ErrorViewModel() { ErrorMessage = "Udało się dodać wybrane połączenie" });
            }
        }
示例#3
0
        public List <ConnectionPathDTO> Search(FilterPathsDTO fp, IUnitOfWorkFactory unitOfWorkFactory)
        {
            List <Path>           paths    = Mapper.Map <List <PathDTO>, List <Path> >(fp.Paths);
            List <ConnectionPath> conPaths = new List <ConnectionPath>();

            IEasyTrainTicketsDbEntities[] dbContexts = new IEasyTrainTicketsDbEntities[paths.Count];
            Parallel.For(0, paths.Count, i =>
            {
                dbContexts[i] = unitOfWorkFactory.CreateUnitOfWork();

                List <ConnectionPath> candidatePaths = paths[i].SecondSearch(fp.UserTime, dbContexts[i]);
                foreach (var conpath in candidatePaths)
                {
                    conPaths.Add(conpath);
                }
            });

            JourneyTimeFilter(ref conPaths);

            StartTimeFilter(ref conPaths);

            EndTimeFilter(ref conPaths);

            return(Mapper.Map <List <ConnectionPath>, List <ConnectionPathDTO> >(conPaths));
        }
        public ActionResult PrepareReserveSeats(string conIds, string dictDiscount, decimal price)
        {
            TicketViewModel viewModel;

            try
            {
                viewModel = new TicketViewModel(conIds, dictDiscount, price);
            }
            catch
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wystąpił nieoczekiwany błąd."
                }));
            }
            using (IEasyTrainTicketsDbEntities dbContext = unitOfFactory.CreateUnitOfWork())
            {
                if (!buyTicketModel.NextPart(viewModel, dbContext))
                {
                    return(View("MyError", new ErrorViewModel()
                    {
                        ErrorMessage = "Z przykrością informujemy, że nie ma wystarczającej ilości miejsc w wybranym połączeniu"
                    }));
                }
            }

            return(View("ReserveSeats", viewModel));
        }
 public BuyTicketDiscountViewModel(IUnitOfWorkFactory unitOfFactory)
 {
     using (IEasyTrainTicketsDbEntities dbContext = unitOfFactory.CreateUnitOfWork())
     {
         discounts        = dbContext.Discounts.ToList();
         qualityDiscounts = new int[discounts.Count];
     }
 }
示例#6
0
        private List <ConnectionPart> ListOfConnections(int i, DateTime userTime, IEasyTrainTicketsDbEntities _dbContext)
        {
            Route route = Track[i];

            return(_dbContext.ConnectionParts.Where(cp => cp.Route.Id == route.Id &&
                                                    (cp.StartTime.Day == userTime.Day || cp.StartTime.Day == userTime.Day + 1) &&
                                                    cp.StartTime.Month == userTime.Month).ToList());
        }
        private List <Ticket> InitializeTickets(List <Ticket> tickets, IEasyTrainTicketsDbEntities dbContext)
        {
            for (int i = 0; i < tickets.Count; i++)
            {
                HashSet <int> ids = new HashSet <int>();
                foreach (var id in tickets[i].conPartsId)
                {
                    ids.Add(id);
                }
                List <ConnectionPart> parts = dbContext.ConnectionParts.Where(cp => ids.Contains(cp.Id)).ToList();
                for (int j = 0; j < tickets[i].Seats.Count; j++)
                {
                    tickets[i].ConnectionPath.Add(parts.Find(p => p.Id == tickets[i][j]));
                }
                Dictionary <int, int> dict = new Dictionary <int, int>();
                int capacity = dbContext.Discounts.ToList().Count();
                tickets[i].ListDiscount = new int[capacity].ToList();
                for (int j = 0; j < tickets[i].ListDiscount.Count; j++)
                {
                    tickets[i].ListDiscount[j] = 0;
                }
                foreach (var id in tickets[i].discountsId)
                {
                    if (dict.ContainsKey(id))
                    {
                        dict[id]++;
                    }
                    else
                    {
                        dict.Add(id, 1);
                    }
                    tickets[i].ListDiscount[id - 1]++;
                }
                foreach (var id in dict.Keys)
                {
                    Discount discount = dbContext.Discounts.Where(d => d.Id == id).First();
                    tickets[i].Discounts.Add(discount, dict[id]);
                }
                tickets[i].ConnectionPath.WriteConnection();
                tickets[i].ConnectionPath.Initialize();
                decimal count = 0;
                foreach (var key in tickets[i].Discounts.Keys)
                {
                    count += (decimal)(tickets[i].Discounts[key] * key.Percent);
                }
                tickets[i].Price = Math.Round(count * tickets[i].ConnectionPath.Price, 2);

                tickets[i].Way = new List <string>();
                for (int k = 0; k < tickets[i].ConnectionPath.Count; k++)
                {
                    tickets[i].Way.Add(string.Format("{0,15} => {1,15}   Odjazd: {2,7}   Przyjazd: {3,7}   Pociąg: {4,10}   Zarezerwowane miejsca: {5,10}",
                                                     tickets[i].ConnectionPath[k].Route.From, tickets[i].ConnectionPath[k].Route.To, tickets[i].ConnectionPath[k].StartTime.ToShortTimeString(),
                                                     tickets[i].ConnectionPath[k].EndTime.ToShortTimeString(), tickets[i].ConnectionPath[k].Connection.Name, string.Join(",", tickets[i].Seats[k])));
                }
            }
            tickets = tickets.OrderByDescending(t => t.ConnectionPath.StartTime).ThenByDescending(t => t.ConnectionPath.EndTime).ToList();
            return(tickets);
        }
 public ActionResult PrepareAddConnection()
 {
     AddConnectionViewModel viewModel;
     using (IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
     {
         viewModel = new AddConnectionViewModel(dbContext);
     }
     ViewBag.Date = (DateTime)Session["Date"];
     return View(viewModel);
 }
        public AddConnectionViewModel(IEasyTrainTicketsDbEntities dbContext)
        {
            List <Train> trains = dbContext.Trains.ToList();

            Trains = new List <string>();
            foreach (var t in trains)
            {
                Trains.Add(String.Format("{0}. {1}", t.Id, t.Type));
            }
        }
示例#10
0
        public List <Ticket> GetTicketsUser(IEasyTrainTicketsDbEntities dbContext, PagingInfo PagingInfo)
        {
            ApplicationUser user        = System.Web.HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());
            List <Ticket>   listTickets = CreateTickets(user);

            PagingInfo.TotalItems = listTickets.Count();
            listTickets           = InitializeTickets(listTickets, dbContext);
            listTickets           = listTickets.Skip((PagingInfo.CurrentPage - 1) * PagingInfo.ItemsPerPage).Take(PagingInfo.ItemsPerPage).ToList();

            return(listTickets);
        }
示例#11
0
        private int Min(int i, DateTime userTime, IEasyTrainTicketsDbEntities _dbContext)
        {
            var list = ListOfConnections(i, userTime, _dbContext);

            if (list.Count == 0)
            {
                return(int.MaxValue);
            }
            return(list.Min(cp => SqlMethods.DateDiffMinute(userTime, cp.StartTime) >= 0 ?
                            SqlMethods.DateDiffMinute(userTime, cp.StartTime) : int.MaxValue));
        }
示例#12
0
        public bool DeleteTicket(TicketDTO ticketDTO, IEasyTrainTicketsDbEntities dbContext)
        {
            var list = dbContext.Users.Where(u => u.Id == ticketDTO.User.Id && u.Password == ticketDTO.User.Password).ToList();

            if (list.Count == 0)
            {
                return(false);
            }
            User   user   = list.First();
            Ticket ticket = AutoMapper.Mapper.Map <TicketDTO, Ticket>(ticketDTO);

            string ticketString = CreateStringTicket(ticket);
            string userTickets  = user.Tickets;
            int    index        = userTickets.IndexOf(ticketString);
            string newTickets;

            if (index < 0)
            {
                return(false);
            }
            else if (ticketString.Length == userTickets.Length)
            {
                newTickets = "";
            }
            else if (index == userTickets.Length - ticketString.Length)
            {
                newTickets = userTickets.Remove(index - 1, ticketString.Length + 1);
            }
            else
            {
                newTickets = userTickets.Remove(index, ticketString.Length + 1);
            }
            user.Tickets = newTickets;

            for (int i = 0; i < ticket.Count; i++)
            {
                var tmp = ticket.ConnectionPath[i];
                ticket.ConnectionPath[i] = dbContext.ConnectionParts.Where(cp => cp.Id == tmp.Id).First();
                if (ticket.ConnectionPath[i].Seats == "")
                {
                    ticket.ConnectionPath[i].Seats = string.Join(",", ticket.Seats[i]).Replace(',', ';');
                }
                else
                {
                    ticket.ConnectionPath[i].Seats = String.Format("{0};{1}", ticket.ConnectionPath[i].Seats, string.Join(",", ticket.Seats[i]).Replace(',', ';'));
                }
                ticket.ConnectionPath[i].FreeSeats += ticket.Seats[i].Length;
            }

            dbContext.SaveChanges();
            return(true);
        }
示例#13
0
        private ConnectionPart FindBestConnectionPart(int i, DateTime userTime, IEasyTrainTicketsDbEntities dbContext)
        {
            int minTime = Min(i, userTime, dbContext);

            if (minTime > 300)
            {
                return(null);
            }
            ConnectionPart conPart = ListOfConnections(i, userTime, dbContext).Where(cp =>
                                                                                     SqlMethods.DateDiffMinute(userTime, cp.StartTime) == minTime).First();

            return(conPart);
        }
示例#14
0
        public bool NextPart(TicketViewModel ticketViewModel, IEasyTrainTicketsDbEntities dbContext)
        {
            if (ticketViewModel.SeatsChoose != null)
            {
                for (int i = 0; i < ticketViewModel.CountParts; i++)
                {
                    ticketViewModel.Seats.Add(ticketViewModel.SeatsChoose.ToArray());
                }
                ticketViewModel.Way.Add(String.Format("{0,15} ==> {1,15}  -  Pociąg: {2,15}    Zarezerwowane miejsca: {3} ", ticketViewModel.FromStation, ticketViewModel.EndStation, ticketViewModel.ConnectionsParts[ticketViewModel.Seats.Count - 1].Connection.Name, string.Join(",", ticketViewModel.Seats.Last())));
            }
            if (ticketViewModel.Seats.Count == ticketViewModel.ConnectionsParts.Count)
            {
                return(true);
            }
            int part, to;

            part = to = ticketViewModel.Seats.Count;
            ticketViewModel.FromStation = ticketViewModel.ConnectionsParts[part].Route.From;
            while (to + 1 < ticketViewModel.ConnectionsParts.Count && ticketViewModel.ConnectionsParts[to].Connection.Id == ticketViewModel.ConnectionsParts[to + 1].Connection.Id)
            {
                to++;
            }
            ticketViewModel.EndStation = ticketViewModel.ConnectionsParts[to].Route.To;

            if (ticketViewModel.ConnectionsParts[to].Connection.Train.Type == "Pośpieszny")
            {
                ticketViewModel.SourcePicture = "/Content/Images/pospMsc.png";                                                                             // popraw
            }
            else if (ticketViewModel.ConnectionsParts[to].Connection.Train.Type == "Ekspres")
            {
                ticketViewModel.SourcePicture = "/Content/Images/exMsc.png";                                                                               // popraw
            }
            ticketViewModel.FreeSeats = GetSeats(ticketViewModel.ConnectionsParts, part, to, dbContext);
            if (ticketViewModel.FreeSeats.Count < ticketViewModel.Count)
            {
                ticketViewModel.EndStation = ticketViewModel.ConnectionsParts[part].Route.To;
                to = part;
                ticketViewModel.FreeSeats = GetSeats(ticketViewModel.ConnectionsParts, part, to, dbContext);
                if (ticketViewModel.FreeSeats.Count < ticketViewModel.Count)
                {
                    //SendMessage(string.Format("Zostało miejsc: {0}", ticketViewModel.FreeSeats.Count));
                    //IsOK = false;
                    //Cancel();
                    return(false);
                }
            }
            ticketViewModel.CountParts = to - part + 1;
            return(true);
        }
示例#15
0
        public List <TicketDTO> GetTicketsUser(string loginUser, IEasyTrainTicketsDbEntities dbContext)
        {
            var list = dbContext.Users.Where(u => u.Login == loginUser).ToList();

            if (list.Count == 0)
            {
                return(null);
            }
            User          user        = list.First();
            List <Ticket> listTickets = CreateTickets(user);

            listTickets = InitializeTickets(listTickets, dbContext);

            return(AutoMapper.Mapper.Map <List <Ticket>, List <TicketDTO> >(listTickets));
        }
示例#16
0
        public UserDTO Registration(UserDTO userDTO, IEasyTrainTicketsDbEntities dbcontext)
        {
            var  record = dbcontext.Users.Where((u) => u.Login == userDTO.Login);
            User user   = Mapper.Map <UserDTO, User>(userDTO);

            if (record.Count() == 1)
            {
                return(null);
            }

            dbcontext.Users.Add(user);
            dbcontext.SaveChanges();
            userDTO = Mapper.Map <User, UserDTO>(user);
            return(userDTO);
        }
示例#17
0
        public UserDTO ChangePassword(ChangePasswordDTO changePasswordDTO, IEasyTrainTicketsDbEntities dbcontext)
        {
            User user = Mapper.Map <ChangePasswordDTO, User>(changePasswordDTO);

            var record = dbcontext.Users.Where((u) => u.Login == changePasswordDTO.Login);

            if (record.Count() == 0 || record.ToList()[0].Password != user.Password)
            {
                return(null);
            }

            record.ToList()[0].Password = changePasswordDTO.NewPassword;

            return(Mapper.Map <User, UserDTO>(user));
        }
        public ActionResult ReserveSeats(string ticket, TicketViewModel ticketViewModel)
        {
            TicketViewModel viewModel;

            try
            {
                viewModel = JsonConvert.DeserializeObject <TicketViewModel>(ticket);
            }
            catch
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wystąpił nieoczekiwany błąd."
                }));
            }
            if (viewModel == null)
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wystąpił nieoczekiwany błąd."
                }));
            }
            viewModel.SeatsChoose = ticketViewModel.SeatsChoose;
            if (viewModel.SeatsChoose.Count != viewModel.Count)
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wybrano niepoprawną liczbę miejsc."
                }));
            }
            using (IEasyTrainTicketsDbEntities dbContext = unitOfFactory.CreateUnitOfWork())
            {
                if (!buyTicketModel.NextPart(viewModel, dbContext))
                {
                    return(View("MyError", new ErrorViewModel()
                    {
                        ErrorMessage = "Z przykrością informujemy, że nie ma wystarczającej ilości miejsc w wybranym połączeniu"
                    }));
                }
            }
            ModelState.Clear();
            if (buyTicketModel.IsEnd(viewModel))
            {
                return(View("SummaryReservation", viewModel));
            }
            return(View(viewModel));
        }
示例#19
0
        public void AddConnectionPart(AddConnectionViewModel viewModel, IEasyTrainTicketsDbEntities dbContext, Connection connection)
        {
            List <Route>   routes  = dbContext.Routes.ToList();
            string         idRoute = viewModel.SelectRoute.Split('.').First();
            int            id      = Int16.Parse(idRoute);
            Route          route   = routes.Where(r => r.Id == id).First();
            ConnectionPart conPart = new ConnectionPart()
            {
                Route      = route,
                Connection = connection
            };

            if (connection.Parts.Count == 0)
            {
                conPart.StartTime = viewModel.StartTime;
                conPart.EndTime   = conPart.StartTime.AddMinutes(viewModel.Variance + route.BestTime);
            }
            else
            {
                conPart.StartTime = connection.Parts.Last().EndTime.AddMinutes(viewModel.StopTime);
                conPart.EndTime   = conPart.StartTime.AddMinutes(viewModel.Variance + route.BestTime);
            }
            string seats        = @"11;12;13;14;15;16;17;18;21;22;23;24;25;26;27;28;31;32;33;34;35;36;37;38;41;42;43;44;45;46;47;48;51;52;53;54;55;56;57;58;61;62;63;64;65;66;67;68;71;72;73;74;75;76;77;78;81;82;83;84;85;86;87;88;91;92;93;94;95;96;97;98;101;102;103;104;105;106;107;108";
            string expressSeats = @"11;12;13;14;15;16;21;22;23;24;25;26;31;32;33;34;35;36;41;42;43;44;45;46;51;52;53;54;55;56;61;62;63;64;65;66;71;72;73;74;75;76;81;82;83;84;85;86;91;92;93;94;95;96;101;102;103;104;105;106";

            if (connection.Train.Type == "Ekspres")
            {
                conPart.Seats     = expressSeats;
                conPart.FreeSeats = 60;
            }
            else if (connection.Train.Type == "Pośpieszny")
            {
                conPart.Seats     = seats;
                conPart.FreeSeats = 80;
            }
            string endStation = viewModel.SelectRoute.Split('>').Last();

            endStation = endStation.Substring(1);
            foreach (var r in routes.Where(r => r.From == endStation))
            {
                viewModel.AvailableRoutes.Add(String.Format("{0}. {1} => {2}", r.Id, r.From, r.To));
            }
            viewModel.SelectRoute = null;

            connection.Parts.Add(conPart);
            viewModel.Connection.Connection = connection;
        }
示例#20
0
        public bool DeleteTicket(Ticket ticket, IEasyTrainTicketsDbEntities dbContext, ApplicationUserManager userManager)
        {
            ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager <ApplicationUserManager>().FindById(System.Web.HttpContext.Current.User.Identity.GetUserId());

            string ticketString = ticket.StringTicket;
            string userTickets  = user.Tickets;
            int    index        = userTickets.IndexOf(ticketString);
            string newTickets;

            if (index < 0)
            {
                return(false);
            }
            else if (ticketString.Length == userTickets.Length)
            {
                newTickets = "";
            }
            else if (index == userTickets.Length - ticketString.Length)
            {
                newTickets = userTickets.Remove(index - 1, ticketString.Length + 1);
            }
            else
            {
                newTickets = userTickets.Remove(index, ticketString.Length + 1);
            }
            user.Tickets = newTickets;

            for (int i = 0; i < ticket.conPartsId.Count; i++)
            {
                int            id      = ticket.conPartsId[i];
                ConnectionPart conPart = dbContext.ConnectionParts.Where(cp => cp.Id == id).First();
                if (conPart.Seats == "")
                {
                    conPart.Seats = string.Join(",", ticket.Seats[i]).Replace(',', ';');
                }
                else
                {
                    conPart.Seats = String.Format("{0};{1}", conPart.Seats, string.Join(",", ticket.Seats[i]).Replace(',', ';'));
                }
                conPart.FreeSeats += ticket.Seats[i].Length;
            }

            dbContext.SaveChanges();
            userManager.Update(user);
            return(true);
        }
示例#21
0
        public List <ConnectionPath> SecondSearch(DateTime userTime, IEasyTrainTicketsDbEntities _dbContext)
        {
            List <ConnectionPath> conPaths   = new List <ConnectionPath>();
            List <ConnectionPart> startParts = ListOfConnections(0, userTime, _dbContext).
                                               Where(cp => SqlMethods.DateDiffMinute(userTime, cp.StartTime) >= 0 &&
                                                     SqlMethods.DateDiffHour(userTime, cp.StartTime) < 20).ToList();

            foreach (var startPart in startParts)
            {
                userTime = startPart.EndTime;
                ConnectionPath conPath = new ConnectionPath();
                conPath.Add(startPart);
                for (int i = 1; i < Count; i++)
                {
                    var conpart = FindBestConnectionPart(i, userTime, _dbContext);
                    if (conpart == null)
                    {
                        conPath = null;
                        break;
                    }
                    conPath.Add(conpart);
                    Connection            con  = conpart.Connection;
                    List <ConnectionPart> list = con.Parts.ToList();
                    int k = list.FindIndex(cp => cp.Id == conpart.Id);
                    while (i + 1 < Count && k + 1 < list.Count && list[k + 1].Route.Id == Track[i + 1].Id)
                    {
                        conPath.Add(list[k + 1]);
                        k++;
                        i++;
                    }
                    userTime = list[k].EndTime;
                }
                if (conPath != null)
                {
                    if (conPath.Changes < 5)
                    {
                        if (TimeSpan.Compare(conPath.ConnectionsParts.Last().EndTime - conPath.ConnectionsParts.First().StartTime, new TimeSpan(25, 0, 0)) < 0)
                        {
                            conPaths.Add(conPath);
                        }
                    }
                }
            }
            return(conPaths);
        }
示例#22
0
        public void CreateConnection(AddConnectionViewModel viewModel, IEasyTrainTicketsDbEntities dbContext)
        {
            Connection connection = new Connection();
            string     idTrain    = viewModel.SelectTrain.Split('.')[0];
            int        id         = Int16.Parse(idTrain);

            connection.Name  = viewModel.Name;
            connection.Train = dbContext.Trains.Where(t => t.Id == id).First();
            connection.Parts = new List <ConnectionPart>();

            List <Route> routes = dbContext.Routes.ToList();

            foreach (var r in routes)
            {
                viewModel.AvailableRoutes.Add(String.Format("{0}. {1} => {2}", r.Id, r.From, r.To));
            }

            viewModel.Connection.Connection = connection;
        }
示例#23
0
        public List <ConnectionPath> Search(SearchParameters searchParameters, IUnitOfWorkFactory unitOfWorkFactory)
        {
            List <Path> paths = SearchPaths(searchParameters.From, searchParameters.Middle, searchParameters.To);

            List <ConnectionPath> conPaths = new List <ConnectionPath>();

            IEasyTrainTicketsDbEntities[] dbContexts = new IEasyTrainTicketsDbEntities[paths.Count];
            Parallel.For(0, paths.Count, i =>
            {
                dbContexts[i] = unitOfWorkFactory.CreateUnitOfWork();

                List <ConnectionPath> candidatePaths = paths[i].SecondSearch(searchParameters.UserTime, dbContexts[i]);
                foreach (var conpath in candidatePaths)
                {
                    conPaths.Add(conpath);
                }
            });

            foreach (var conPath in conPaths)
            {
                conPath.Initialize();
            }

            if (searchParameters.IsWithoutChange)
            {
                WithoutChangeFilter(ref conPaths);
            }
            if (!searchParameters.IsExpress)
            {
                WithoutExpressFilter(ref conPaths);
            }

            JourneyTimeFilter(ref conPaths);

            StartTimeFilter(ref conPaths);

            EndTimeFilter(ref conPaths);

            TakeBestFilter(ref conPaths);

            return(conPaths);
        }
        public ActionResult PrepareListConnections(DateViewModel dateViewModel)
        {
            List<Connection> connections;
            using (IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
            {
                int number = dbContext.Connections.Where(c => c.Parts.FirstOrDefault().StartTime.Day == dateViewModel.Date.Day && c.Parts.FirstOrDefault().StartTime.Month == dateViewModel.Date.Month && c.Parts.FirstOrDefault().StartTime.Year == dateViewModel.Date.Year).Count();
                if (number > 0)
                {
                    return View("MyError", new ErrorViewModel() { ErrorMessage = "Na ten dzień istnieja już połączenia" });
                }
                connections = ConnectionsGenerator.PerDay(dateViewModel.Date, dbContext);
            }
            PagingInfo PagingInfo = new PagingInfo() { CurrentPage = 1, ItemsPerPage = PageSize, TotalItems = connections.Count };
            ListConnectionsViewModel viewModel = new ListConnectionsViewModel();
            viewModel.Show(connections, PagingInfo);
            Session["connections"] = connections;
            Session["Date"] = dateViewModel.Date;

            return View("ListConnections", viewModel);
        }
 public ActionResult AddConnectionParts(AddConnectionViewModel viewModel, string stringConnection)
 {
     if (viewModel.SelectRoute == null)
     {
         DateTime date = (DateTime)Session["Date"];
         viewModel.StartTime = date.Date + viewModel.TimeOfDay;
         using (IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
         {
             addConnectionModel.CreateConnection(viewModel, dbContext);
         }
     }
     else
     {
         using (IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
         {
             addConnectionModel.AddConnectionPart(viewModel, dbContext, JsonConvert.DeserializeObject<Connection>(stringConnection));
         }
     }
     ModelState.Clear();
     return View(viewModel);
 }
        public ActionResult SummaryPrice(string SelectedDiscount, string conIds)
        {
            List <int> qualDiscount;

            try
            {
                qualDiscount = JsonConvert.DeserializeObject <int[]>(SelectedDiscount).ToList();
            }
            catch
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wybrane zniżki mają być liczbami."
                }));
            }
            if (qualDiscount == null || qualDiscount.Sum() == 0 || qualDiscount.Count != 4)
            {
                return(View("MyError", new ErrorViewModel()
                {
                    ErrorMessage = "Wybierz coś."
                }));
            }
            foreach (var discount in qualDiscount)
            {
                if (discount < 0 || discount > 5)
                {
                    return(View("MyError", new ErrorViewModel()
                    {
                        ErrorMessage = "Wybrane ilości mają być liczbami od 0 do 5."
                    }));
                }
            }
            BuyTicketSummaryPriceViewModel viewModel;

            using (IEasyTrainTicketsDbEntities dbContext = unitOfFactory.CreateUnitOfWork())
            {
                viewModel = new BuyTicketSummaryPriceViewModel(dbContext, conIds, SelectedDiscount);
            }
            return(View(viewModel));
        }
示例#27
0
        public UserDTO SignIn(UserDTO userDTO, IEasyTrainTicketsDbEntities dbcontext)
        {
            var record = dbcontext.Users.Where(u => u.Login == userDTO.Login);

            if (record.Count() == 1)
            {
                string sqlpass = record.First().Password;
                if (sqlpass == userDTO.Password)
                {
                    userDTO = AutoMapper.Mapper.Map <User, UserDTO>(record.ToList()[0]);
                    return(userDTO);
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                return(null);
            }
        }
        public ActionResult RandomSeats(string conIds, string dictDiscount, decimal price)
        {
            TicketViewModel viewModel = new TicketViewModel(conIds, dictDiscount, price);

            using (IEasyTrainTicketsDbEntities dbContext = unitOfFactory.CreateUnitOfWork())
            {
                do
                {
                    if (!buyTicketModel.NextPart(viewModel, dbContext))
                    {
                        return(View("MyError", new ErrorViewModel()
                        {
                            ErrorMessage = "Z przykrością informujemy, że nie ma wystarczającej ilości miejsc w wybranym połączeniu"
                        }));
                    }


                    viewModel.SeatsChoose = viewModel.FreeSeats.GetRange(0, viewModel.Count);
                } while (!buyTicketModel.IsEnd(viewModel));
            }
            ModelState.Clear();
            return(View("SummaryReservation", viewModel));
        }
        public ActionResult AddConnections(DateViewModel viewModel)
        {
            using(IEasyTrainTicketsDbEntities dbContext = unitOfWorkFactory.CreateUnitOfWork())
            {
                List<Connection> connections = Session["connections"] as List<Connection>;
                foreach (var con in connections)
                {
                    con.Train = dbContext.Trains.Where(c => c.Id == con.Train.Id).First();
                    dbContext.Trains.Attach(con.Train);
                    foreach (var part in con.Parts)
                    {
                        part.Route = dbContext.Routes.Where(r => r.Id == part.Route.Id).First();
                        dbContext.Routes.Attach(part.Route);

                    }
                    
                    dbContext.Connections.Add(con);
                }
                dbContext.SaveChanges();
            }
            Session["connections"] = null;
            return View("MySuccess", new ErrorViewModel() { ErrorMessage = "Udało się dodać rozkład jazdy na wybrany dzień" });
        }
        public BuyTicketSummaryPriceViewModel(IEasyTrainTicketsDbEntities dbContext, string conIds, string qualityDiscount)
        {
            List <int> qualDiscount = JsonConvert.DeserializeObject <int[]>(qualityDiscount).ToList();

            Dict = new Dictionary <Discount, int>();
            List <Discount> discounts = dbContext.Discounts.ToList();

            for (int i = 0; i < discounts.Count; i++)
            {
                Dict.Add(discounts[i], qualDiscount[i]);
            }
            List <int> list = new List <int>();

            foreach (var key in Dict.Keys)
            {
                list.Add(Dict[key]);
            }
            ListDiscount = JsonConvert.SerializeObject(list);

            ConIds = conIds;
            List <ConnectionPart> conParts = JsonConvert.DeserializeObject <List <ConnectionPart> >(conIds);
            ConnectionPath        conPath  = new ConnectionPath()
            {
                ConnectionsParts = conParts
            };

            conPath.Initialize();
            decimal count = 0;

            foreach (var key in Dict.Keys)
            {
                count += (decimal)(Dict[key] * key.Percent);
            }
            Price = Math.Round(count * conPath.Price, 2);
            conPath.WriteConnection();
            Way = conPath.Way;
        }