public void PredictWaitingTime(List <Table> ptables, List <Customer> pcustomers)
        {
            List <Table>       tmp_tables = new List <Table>(ptables);
            List <Table>       opt_seat;
            CustomerManager    cus    = new CustomerManager();
            PlacementOptimizer opt_pl = new PlacementOptimizer();

            foreach (var i in pcustomers)
            {
                opt_pl.PlaceTabletoCustomer(tmp_tables, i);
                opt_seat = opt_pl.Get_opt_seat();
                if (opt_seat.Count > 0)
                {
                    i.EstimatedWaitingTime = 0;
                    cus.Update(i);

                    foreach (var j in opt_seat)
                    {
                        tmp_tables.Find(x => x.TableId == j.TableId).TableStatus = TableStatus.Ordering;
                    }
                }
            }

            foreach (var i in tmp_tables)
            {
                if (i.TableStatus == TableStatus.Cleaning)
                {
                    i.TableStatus = TableStatus.Active;
                }
            }

            foreach (var i in pcustomers)
            {
                if (i.EstimatedWaitingTime == 0)
                {
                    continue;
                }
                else if (i.EstimatedWaitingTime > 0)
                {
                    i.EstimatedWaitingTime = i.EstimatedWaitingTime - 1;
                    cus.Update(i);
                    continue;
                }
                opt_pl.PlaceTabletoCustomer(tmp_tables, i);
                opt_seat = opt_pl.Get_opt_seat();
                if (opt_seat.Count > 0)
                {
                    i.EstimatedWaitingTime = 300;
                    cus.Update(i);

                    foreach (var j in opt_seat)
                    {
                        tmp_tables.Find(x => x.TableId == j.TableId).TableStatus = TableStatus.Ordering;
                    }
                }
            }
        }
Esempio n. 2
0
        private void lbList_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (lbList.SelectedIndex != -1)
            {
                List <Table> opt_seat;

                //clear data
                txtCustomerId.Text      = "";
                txtNoOfPeople.Text      = "";
                comboBoxWaiterName.Text = "";
                nudTableId3.Value       = 0;
                nudTableId2.Value       = 0;
                nudTableId1.Value       = 0;
                //set new data
                Customer selectedCustomer = diningArea.Customers[lbList.SelectedIndex];
                txtCustomerId.Text            = selectedCustomer.WaitingNumber.ToString();
                txtNoOfPeople.Text            = selectedCustomer.NumberofPeople.ToString();
                comboBoxWaiterName.DataSource = diningArea.Waiters.Select(waiter => waiter.Name).ToList();


                IntelligentRestaurantManager.BLL.PlacementOptimizer opt_place = new IntelligentRestaurantManager.BLL.PlacementOptimizer();
                opt_place.PlaceTabletoCustomer((List <Table>)tableManager.GetAll(), selectedCustomer);
                opt_seat = opt_place.Get_opt_seat();

                System.Diagnostics.Debug.WriteLine("debug message");
                foreach (var k in opt_seat)
                {
                    System.Diagnostics.Debug.WriteLine("debug message" + k.TableId);
                }

                if (opt_seat.Count >= 3)
                {
                    nudTableId3.Value = opt_seat[2].TableId;
                }
                if (opt_seat.Count >= 2)
                {
                    nudTableId2.Value = opt_seat[1].TableId;
                }
                if (opt_seat.Count >= 1)
                {
                    nudTableId1.Value = opt_seat[0].TableId;
                }


                //get all NumericUpDown contral in groupBox1: 3
                List <NumericUpDown> nudTableIds = this.groupBox1.Controls.OfType <NumericUpDown>().ToList();
                for (int i = 0; i < selectedCustomer.RecommendedTableId.Length; i++)
                {
                    if (selectedCustomer.RecommendedTableId[i] > 0)
                    {
                        nudTableIds[i].Value = selectedCustomer.RecommendedTableId[i];
                    }
                }
            }
            //Todo: waiter name order by workload, i.e. sum of customers
        }
Esempio n. 3
0
 public void InitDiningArea(Staff staff)
 {
     CurrentStaff          = staff;
     Tables                = (List <Table>) new TableManager().GetAll();
     Orders                = (List <Order>) new OrderManager().GetByOrderStatus(OrderStatus.Start);
     Customers             = (List <Customer>) new CustomerManager().GetAll();
     Waiters               = (List <Staff>) new StaffManager().GetByRole(StaffRole.Waiter);
     APlacementOptimizer   = new PlacementOptimizer();
     AWaitingTimePredictor = new WaitingTimePredictor();
 }