public void Add(GetReservation_Result seated) { if (HasRemainingSeats) { Seateds.Add(seated); } else { throw new OverflowException("There are no more empty seat at the table."); } }
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; } } } }