Esempio n. 1
0
 public void Add(GetReservation_Result seated)
 {
     if (HasRemainingSeats)
     {
         Seateds.Add(seated);
     }
     else
     {
         throw new OverflowException("There are no more empty seat at the table.");
     }
 }
Esempio n. 2
0
        public void Generate()
        {
            List <GetReservation_Result> ClientsToSeat = new List <GetReservation_Result>();
            Table CurrentTable = new Table(_nbSeats);
            bool  goodFeeling;
            bool  found;

            _tablesMaps = null;
            _disliked   = new List <Disliked>();
            foreach (GetReservation_Result client in _clients.Where(client => client.IsValid == true))
            {
                ClientsToSeat.Add(client);
                _disliked.Add(new Disliked(client.ClientId));
            }
            while (ClientsToSeat.Count > 0)
            {
                foreach (GetReservation_Result CurrentClient in ClientsToSeat.ToList())
                {
                    if (CurrentTable.HasRemainingSeats)
                    {
                        goodFeeling = true;
                        foreach (GetReservation_Result seated in CurrentTable.Seateds)
                        {
                            if (HasBadFeeling(CurrentClient.ClientId, seated.ClientId)) // BR024
                            {
                                goodFeeling = false;
                                break;
                            }
                        }
                        if (goodFeeling)
                        {
                            CurrentTable.Add(CurrentClient);
                            ClientsToSeat.Remove(CurrentClient);
                        }
                    }
                    else
                    {
                        break;
                    }
                }
                Tables.Add(CurrentTable);
                CurrentTable = new Table(_nbSeats);
            }
            foreach (Table table in Tables.Where(table => !table.isValid).ToList())
            {
                if (table.Seateds.Count > 0)
                {
                    GetReservation_Result seated = table.Seateds[0];
                    foreach (Table otherTable in Tables.Where(tbl => tbl.isValid && tbl.HasRemainingSeats))
                    {
                        goodFeeling = true;
                        foreach (GetReservation_Result otherSeated in otherTable.Seateds)
                        {
                            if (HasBadFeeling(seated.ClientId, otherSeated.ClientId)) // BR024
                            {
                                goodFeeling = false;
                                break;
                            }
                        }
                        if (goodFeeling)
                        {
                            otherTable.Add(seated);
                            Tables.Remove(table);
                            break;
                        }
                    }
                }
                else
                {
                    Tables.Remove(table);
                }
            }
            foreach (Table table in Tables.Where(table => !table.isValid).ToList())
            {
                GetReservation_Result seated = table.Seateds[0];
                foreach (Table otherTable in Tables.Where(tbl => tbl.isValid && tbl.Seateds.Count > 2))
                {
                    found = false;
                    foreach (GetReservation_Result otherSeated in otherTable.Seateds)
                    {
                        if (!HasBadFeeling(seated.ClientId, otherSeated.ClientId)) // BR024
                        {
                            otherTable.Seateds.Remove(otherSeated);
                            table.Add(seated);
                            found = true;
                            break;
                        }
                    }
                    if (found)
                    {
                        break;
                    }
                }
            }
        }