Exemple #1
0
        public ActionResult Index(FormCollection form)
        {
            if (Session[SessionKey.UserProfile] == null)
            {
                return(RedirectToAction("Login", "UserAccount"));
            }
            var code = form["txtConfirmationCode"];

            if (code == null || code == "")
            {
                ViewBag.ErrorMessage = "Invalid Ticket Code";
                return(View());
            }
            else
            {
                Profile userProfile = (Profile)Session[SessionKey.UserProfile];
                Ticket  rs          = ARSMVCUtilities.GetDB().Tickets.SingleOrDefault(s => s.TicketCode == code && s.ProfileID == userProfile.ID);
                if (rs != null)
                {
                    return(RedirectToAction("TicketDetail", rs));
                }
                else
                {
                    ViewBag.ErrorMessage = "Ticket not found";
                    return(View());
                }
            }
        }
Exemple #2
0
        public ActionResult FlightStatus(string airplaneCode, DateTime?departureDate = null)
        {
            // if airplaneCode == null => back to QueryFlightDetails
            if (airplaneCode == null)
            {
                ViewBag.QueryFlightDetailsError = "Airplane code is required";
                return(View("QueryFlightDetails"));
            }

            //Search in the database returns the list of airplane code is "airplaneCode", if not find returned error message
            List <FlightSchedule> rs;

            if (departureDate == null)
            {
                rs = ARSMVCUtilities.GetDB().FlightSchedules.Where(s => s.AirplaneCode == airplaneCode && s.DepartureDate >= DateTime.Now).ToList();
            }
            else
            {
                rs = ARSMVCUtilities.GetDB().FlightSchedules.Where(s => s.AirplaneCode == airplaneCode && s.DepartureDate == departureDate).ToList();
            }

            if (rs != null && rs.Count > 0)
            {
                return(View(rs));
            }
            else
            {
                ViewBag.QueryFlightDetailsError = "The airplane " + airplaneCode + " does not have any flight schedule at the given date";
                return(View("QueryFlightDetails"));
            }
        }
Exemple #3
0
 private void InitDB()
 {
     if (dbRoutes == null)
     {
         dbRoutes = ARSMVCUtilities.GetDB().Routes.ToList();
     }
     if (dbCities == null)
     {
         dbCities = ARSMVCUtilities.GetDB().Cities.ToList();
     }
     if (dbFlightSchedule == null)
     {
         dbFlightSchedule = ARSMVCUtilities.GetDB().FlightSchedules.ToList();
     }
 }
Exemple #4
0
        public ActionResult TicketDetail(Ticket ticket)
        {
            if (ticket.Status == "Preview")
            {
                return(View(ticket));
            }

            if (ticket.TicketCode != null)
            {
                var rs = ARSMVCUtilities.GetDB().Tickets.SingleOrDefault(s => s.TicketCode == ticket.TicketCode);
                return(View(rs));
            }
            else
            {
                return(View("Index"));
            }
        }
Exemple #5
0
        public ActionResult ConfirmTicket(string ticketCode)
        {
            if (Session[SessionKey.UserProfile] == null)
            {
                return(RedirectToAction("Login", "UserAccount"));
            }
            Profile profile = (Profile)Session[SessionKey.UserProfile];
            var     rs      = ARSMVCUtilities.GetDB().Tickets.SingleOrDefault(s => s.TicketCode == ticketCode && s.ProfileID == profile.ID);

            if (rs != null)
            {
                rs.Status = "Reserved";

                ARSMVCUtilities.GetDB().SaveChanges();

                return(RedirectToAction("TicketDetail", rs));
            }
            else
            {
                return(RedirectToAction("Index"));
            }
        }
Exemple #6
0
        private void AutoGenerateTicket()
        {
            // Lay danh sách người dùng
            List <Profile>       lstProfile       = ARSMVCUtilities.GetDB().Profiles.ToList();
            List <AirplaneClass> lstAirplaneClass = ARSMVCUtilities.GetDB().AirplaneClasses.ToList();

            // Lấy danh sách chuyến bay, route, city
            InitDB();

            Random   rnd = new Random();
            bool     skipThisCustomer = false;
            DateTime currentDate      = DateTime.Now;
            int      count            = 1;

            // Chạy từng ngày bắt đầu từ hôm nay tới 15 ngày tiếp theo
            for (int i = 0; i < 15; i++)
            {
                currentDate = DateTime.Now.AddDays(i);

                // Lặp qua từng người
                foreach (Profile profile in lstProfile)
                {
                    // 30% khach dat ve
                    if (rnd.Next(1, 4) != 3)
                    {
                        continue;
                    }

                    int tryChooseFromToCount = 0;

                    // Lấy random ID của điểm đến + điểm kết thúc
                    int cityAID, cityBID;
                    Dictionary <int, List <Route> > dictListRoute;

                    do
                    {
                        cityAID = rnd.Next(1, 28);
                        do
                        {
                            cityBID = rnd.Next(1, 28);
                        } while (cityAID == cityBID);

                        // Truyền vào hàm ChooseRoute
                        ChooseRoute(cityAID, cityBID);

                        // Lấy kết quả từ Session[SessionKey.ListPossibleRoute]
                        dictListRoute = (Dictionary <int, List <Route> >)Session[SessionKey.ListPossibleRoute];

                        // Nếu có tuyến đường, chọn ngẫu nhiên một trong số đó lưu vào Session[SessionKey.ChosenRouteID] = dictRouteID;
                        if (dictListRoute.Count > 0)
                        {
                            int tryChooseRouteCount = 0;
                            Dictionary <int, List <FlightSchedule> > dictListFlightSchedule;

                            do
                            {
                                Session[SessionKey.ChosenRouteID] = rnd.Next(0, dictListRoute.Count);

                                // - Tạo Ticket mới với các thông số ngẫu nhiên
                                Ticket ticket = GetDB().Tickets.Create();
                                // new Ticket()
                                //{
                                ticket.ID              = 0;
                                ticket.TicketCode      = DateTime.Now.Ticks.ToString();
                                ticket.Status          = "";
                                ticket.ChildrenCount   = rnd.Next(0, 3);
                                ticket.AdultCount      = rnd.Next(1, 5);
                                ticket.SeniorCount     = rnd.Next(0, 3);
                                ticket.AirplaneClassID = 1;
                                ticket.OrderDate       = currentDate;
                                ticket.TotalCost       = 0;
                                //};
                                if (ticket.TicketCode.Length > 16)
                                {
                                    ticket.TicketCode = ticket.TicketCode.Substring(ticket.TicketCode.Length - 16);
                                }

                                // - Ngày khởi hành bắt đầu từ hôm nay
                                DateTime departureDate = currentDate.AddDays(rnd.Next(0, (int)(DateTime.Now - currentDate).TotalDays + 1));

                                // - Gọi hàm ChooseFlightSchedule, truyền tham số vào
                                ChooseFlightSchedule(ticket, departureDate);

                                // - Lấy danh sách chuyến bay từ Session[SessionKey.ListPossibleFlightSchedule]
                                dictListFlightSchedule = (Dictionary <int, List <FlightSchedule> >)Session[SessionKey.ListPossibleFlightSchedule];

                                if (dictListFlightSchedule.Count > 0)
                                {
                                    // - Chọn ngẫu nhiên một trong các chuyến đó
                                    int totalSeat   = ticket.ChildrenCount + ticket.AdultCount + ticket.SeniorCount;
                                    int seatClassID = rnd.Next(1, 4);
                                    List <List <FlightSchedule> > lstListFS;

                                    if (seatClassID == 1)
                                    {
                                        lstListFS = dictListFlightSchedule.Values.Where(lFS => lFS.TrueForAll(fs => fs.FirstSeatAvail >= totalSeat)).ToList();
                                    }
                                    else if (seatClassID == 2)
                                    {
                                        lstListFS = dictListFlightSchedule.Values.Where(lFS => lFS.TrueForAll(fs => fs.BusinessSeatAvail >= totalSeat)).ToList();
                                    }
                                    else
                                    {
                                        lstListFS = dictListFlightSchedule.Values.Where(lFS => lFS.TrueForAll(fs => fs.ClubSeatAvail >= totalSeat)).ToList();
                                    }

                                    if (lstListFS.Count == 0)
                                    {
                                        tryChooseRouteCount++;
                                        if (tryChooseRouteCount >= 10)
                                        {
                                            skipThisCustomer = true;
                                        }
                                        continue;
                                    }

                                    int    lstFSChoice = rnd.Next(0, lstListFS.Count);
                                    string status      = (rnd.Next(0, 2) == 1) ? "Blocked" : "Reserved";
                                    ticket.Status = status;

                                    // - Sử dụng code trong hàm PreviewTicket và AddTicket để thêm mới ticket, status ngẫu nhiên Block hoặc Reserved
                                    ticket.ProfileID       = profile.ID;
                                    ticket.Profile         = profile;
                                    ticket.FlightSchedules = lstListFS[lstFSChoice];
                                    ticket.AirplaneClassID = seatClassID;
                                    AirplaneClass airplaneClass = lstAirplaneClass.Find(ac => ac.ID == seatClassID);
                                    ticket.AirplaneClass = airplaneClass;

                                    double priceRate = ticket.AirplaneClass.PriceRate;
                                    double basePrice = ticket.FlightSchedules.Sum(fs => fs.Route.BasePrice);
                                    ticket.TotalCost = Math.Round(basePrice * priceRate * totalSeat, 2);

                                    try
                                    {
                                        ARSMVCUtilities.GetDB().Tickets.Add(ticket);
                                        ARSMVCUtilities.GetDB().SaveChanges();

                                        // - Random Cancelled vé
                                        bool cancelled = (rnd.Next(1, 11) == 1) ? true : false;
                                        if (cancelled)
                                        {
                                            ticket.Status = "Cancelled";
                                        }

                                        // Gen ticket code
                                        ticket.TicketCode = "#" + ticket.ID.ToString();
                                        ARSMVCUtilities.GetDB().Entry(ticket).State = System.Data.Entity.EntityState.Modified;
                                        ARSMVCUtilities.GetDB().SaveChanges();

                                        Console.WriteLine("#{0:0000}: Add ticket success.", count++);
                                    }
                                    catch (Exception ex)
                                    {
                                        while (ex.InnerException != null)
                                        {
                                            ex = ex.InnerException;
                                        }
                                        Console.WriteLine("#{0:0000}: Add ticket failed. Error: {1}", count++, ex.Message);
                                    }

                                    db.Entry(ticket).State = System.Data.Entity.EntityState.Detached;
                                }
                                else
                                {
                                    tryChooseRouteCount++;
                                }

                                if (tryChooseRouteCount >= 10)
                                {
                                    skipThisCustomer = true;
                                }
                            } while (dictListFlightSchedule.Count == 0 && !skipThisCustomer);
                        }
                        else
                        {
                            tryChooseFromToCount++;
                        }

                        // Nếu không có quay lại bước random ID
                        // Nếu quá số lần thử, bỏ qua người này
                        if (tryChooseFromToCount >= 10)
                        {
                            skipThisCustomer = true;
                        }
                    } while (dictListRoute.Count == 0 && !skipThisCustomer);
                }
            }
        }
Exemple #7
0
        public ActionResult CheckingAvailability()
        {
            List <City> lstCity = ARSMVCUtilities.GetDB().Cities.ToList();

            return(View(lstCity));
        }
Exemple #8
0
        public ActionResult PreviewTicket(int lstFSChoice, int seatClassID)
        {
            Session[SessionKey.ListFlightScheduleChosen] = lstFSChoice;
            List <FlightSchedule> lstFS = ((Dictionary <int, List <FlightSchedule> >)Session[SessionKey.ListPossibleFlightSchedule])[lstFSChoice];
            Ticket ticket = (Ticket)Session[SessionKey.Ticket];

            ticket.Profile = new Profile();
            if (Session[SessionKey.UserProfile] == null)
            {
                ticket.Profile.LastName  = "Guest";
                ticket.Profile.FirstName = "";
            }
            else
            {
                ticket.Profile   = (Profile)Session[SessionKey.UserProfile];
                ticket.ProfileID = ticket.Profile.ID;
                ticket.Profile   = ARSMVCUtilities.GetDB().Profiles.Find(ticket.ProfileID);
            }

            List <FlightSchedule> lstTicketFS = new List <FlightSchedule>();

            foreach (FlightSchedule fs in lstFS)
            {
                FlightSchedule f = ARSMVCUtilities.GetDB().FlightSchedules.Find(fs.ID);
                lstTicketFS.Add(f);

                //lstTicketFS.Add(new FlightSchedule()
                //{
                //    ID = f.ID,
                //    AirplaneCode = f.AirplaneCode,
                //    Airplane = new Airplane()
                //    {
                //        AirplaneCode = f.AirplaneCode,
                //        TypeID = f.Airplane.TypeID,
                //        AirplaneType = new AirplaneType()
                //        {
                //            ID = f.Airplane.AirplaneType.ID,
                //            Name = f.Airplane.AirplaneType.Name
                //        }
                //    },
                //    FirstSeatAvail = f.FirstSeatAvail,
                //    BusinessSeatAvail = f.BusinessSeatAvail,
                //    ClubSeatAvail = f.ClubSeatAvail,
                //    DepartureDate = f.DepartureDate,
                //    RouteID = f.RouteID,
                //    Route = new Route()
                //    {
                //        CityA = new City()
                //        {
                //            ID = f.Route.CityA.ID,
                //            Code = f.Route.CityA.Code,
                //            Name = f.Route.CityA.Name
                //        },
                //        CityB = new City()
                //        {
                //            ID = f.Route.CityB.ID,
                //            Code = f.Route.CityB.Code,
                //            Name = f.Route.CityB.Name
                //        },
                //        BasePrice = f.Route.BasePrice,
                //        SkyMiles = f.Route.SkyMiles
                //    },
                //    IsActive = f.IsActive,
                //});
            }

            ticket.FlightSchedules = lstTicketFS;
            ticket.AirplaneClassID = seatClassID;
            AirplaneClass ac = ARSMVCUtilities.GetDB().AirplaneClasses.Find(seatClassID);

            ticket.AirplaneClass = ac;
            //ticket.AirplaneClass = new AirplaneClass()
            //{
            //    ID = ac.ID,
            //    Class = ac.Class,
            //    PriceRate = ac.PriceRate
            //};
            ticket.OrderDate  = DateTime.Now;
            ticket.Status     = "Preview";
            ticket.TicketCode = "N/A";

            int    totalSeat = ticket.ChildrenCount + ticket.AdultCount + ticket.SeniorCount;
            double priceRate = ticket.AirplaneClass.PriceRate;
            double basePrice = lstFS.Sum(fs => fs.Route.BasePrice);

            ticket.TotalCost = Math.Round(basePrice * priceRate * totalSeat, 2);

            Session[SessionKey.Ticket] = ticket;
            return(View("TicketDetail", ticket));
        }
Exemple #9
0
        private ActionResult AddTicket(string ticketStatus)
        {
            if (Session[SessionKey.Ticket] == null)
            {
                RedirectToAction("Index", "Home");
            }

            if (Session[SessionKey.UserProfile] == null)
            {
                Session["lastPageVisit"] = new Dictionary <String, Object>()
                {
                    { "actionName", "PreviewTicket" },
                    { "controllerName", "Ticket" }
                };
                return(RedirectToAction("Login", "UserAccount"));
            }

            Ticket ticket = (Ticket)Session[SessionKey.Ticket];

            ticket.Status = ticketStatus;

            // ticket.AirplaneClass = ARSMVCUtilities.GetDB().AirplaneClasses.Find(ticket.AirplaneClassID);
            // ticket.Profile = ARSMVCUtilities.GetDB().Profiles.Find(1);
            //foreach (FlightSchedule fs in ticket.FlightSchedules)
            //{
            //    fs = new FlightSchedule() {
            //        ARSMVCUtilities.GetDB().Airplanes.Find(fs.AirplaneCode);
            //    fs.Route = ARSMVCUtilities.GetDB().Routes.Find(fs.RouteID);
            //}


            //Ticket newTicket = new Ticket()
            //{
            //    ProfileID = profile.ID,
            //    AirplaneClassID = ticket.AirplaneClassID,
            //    ChildrenCount = ticket.ChildrenCount,
            //    AdultCount = ticket.AdultCount,
            //    SeniorCount = ticket.SeniorCount,
            //    FlightSchedules = lstFS,
            //    TicketCode = "N/A",
            //    OrderDate = ticket.OrderDate,
            //    Status = ticketStatus,
            //    TotalCost = ticket.TotalCost
            //};

            try
            {
                ARSMVCUtilities.GetDB().Tickets.Add(ticket);
                ARSMVCUtilities.GetDB().SaveChanges();

                // Gen ticket code
                ticket.TicketCode = "#" + ticket.ID.ToString();
                ARSMVCUtilities.GetDB().Entry(ticket).State = System.Data.Entity.EntityState.Modified;
                ARSMVCUtilities.GetDB().SaveChanges();
            }
            catch (Exception ex)
            {
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }
                throw ex;
            }

            return(View("TicketDetail", ticket));
        }