예제 #1
0
        public FormAirplaneClassCE(AirplaneClass airplaneClass = null, FormMode mode = FormMode.CREATE)
        {
            InitializeComponent();
            // Luu admin account ben FormList truyen sang
            this.airplaneClass = airplaneClass;

            // Luu che do (tao moi hay chinh sua)
            this.mode = mode;
        }
예제 #2
0
        public IHttpActionResult GetAirplaneClass(int id)
        {
            AirplaneClass airplaneClass = db.AirplaneClasses.Find(id);

            if (airplaneClass == null)
            {
                return(NotFound());
            }

            return(Ok(airplaneClass));
        }
예제 #3
0
        public IHttpActionResult DeleteAirplaneClass(int id)
        {
            AirplaneClass airplaneClass = db.AirplaneClasses.Find(id);

            if (airplaneClass == null)
            {
                return(NotFound());
            }

            db.AirplaneClasses.Remove(airplaneClass);
            db.SaveChanges();

            return(Ok(airplaneClass));
        }
예제 #4
0
 private void FormAirplaneClassCE_Load(object sender, EventArgs e)
 {
     // Neu la che do chinh sua (Edit) thi hien thi thong tin cua account len form
     if (mode == FormMode.EDIT)
     {
         txtClass.Text     = airplaneClass.Class;
         txtPriceRate.Text = airplaneClass.PriceRate.ToString();
     }
     else
     {
         // Neu dang o che do them moi
         // Tao moi mot class
         airplaneClass = new AirplaneClass();
         // Gan gia tri mac dinh cho ID (ID no se tu tang nen minh khong can phai tao)
         airplaneClass.ID = 0;
         // Nhung gia tri khac se duoc gan vao account khi nguoi dung bam nut Submit
     }
 }
        private AirplaneClass GetSelectedAirplaneClass()
        {
            // Neu khong co dong nao dang duoc chon thi tra ve null
            if (dgvAirplaneClass.SelectedRows.Count != 1)
            {
                return(null);
            }

            // Neu co 1 dong dang duoc chon thi lay dong do ra
            DataGridViewRow row = dgvAirplaneClass.SelectedRows[0];

            // Lay du lieu trong dong do va tao ra mot AirplaneClass moi
            AirplaneClass airplaneClass = new AirplaneClass()
            {
                ID        = Convert.ToInt32(row.Cells["ID"].Value),
                Class     = row.Cells["Class"].Value.ToString(),
                PriceRate = Convert.ToDouble(row.Cells["PriceRate"].Value)
            };

            // Tra AirplaneClass vua tao ve
            return(airplaneClass);
        }
        private void btnEdit_Click(object sender, EventArgs e)
        {
            // Lay class dang duoc chon trong bang
            AirplaneClass airplaneClass = GetSelectedAirplaneClass();

            // Neu hien tai khong co class  nao duoc chon thi hien thong bao
            if (airplaneClass == null)
            {
                MessageBox.Show("You must choose an account to edit!", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                return;
            }

            // Neu co tai khoan dang duoc chon thi hien form chinh sua thong tin len, truyen du lieu qua
            FormAirplaneClassCE f = new FormAirplaneClassCE(airplaneClass, HelperClass.FormMode.EDIT);

            // f.MdiParent = this.MdiParent;

            // Hien form Edit len va doi cho den khi form bi tat di
            f.ShowDialog();

            // Load lai bang sau khi form Edit da tat
            LoadDataGridView();
        }
예제 #7
0
        public IHttpActionResult PostAirplaneClass(AirplaneClass airplaneClass)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                db.AirplaneClasses.Add(airplaneClass);
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                while (ex.InnerException != null)
                {
                    ex = ex.InnerException;
                }
                return(Content(HttpStatusCode.InternalServerError, ex.Message));
            }

            return(CreatedAtRoute("DefaultApi", new { id = airplaneClass.ID }, airplaneClass));
        }
예제 #8
0
        public IHttpActionResult PutAirplaneClass(int id, AirplaneClass airplaneClass)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != airplaneClass.ID)
            {
                return(BadRequest());
            }

            db.Entry(airplaneClass).State = EntityState.Modified;

            try
            {
                db.SaveChanges();
            }
            catch (Exception ex)
            {
                if (!AirplaneClassExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    while (ex.InnerException != null)
                    {
                        ex = ex.InnerException;
                    }
                    return(Content(HttpStatusCode.InternalServerError, ex.Message));
                }
            }

            return(StatusCode(HttpStatusCode.NoContent));
        }
예제 #9
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);
                }
            }
        }
예제 #10
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));
        }