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()); } } }
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")); } }
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(); } }
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")); } }
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")); } }
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); } } }
public ActionResult CheckingAvailability() { List <City> lstCity = ARSMVCUtilities.GetDB().Cities.ToList(); return(View(lstCity)); }
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)); }
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)); }