public bool Accept( IReservation[] reservations, IReservation candidate, ITable[] tables, TimeSpan seatingDuration) { var sameDayReservations = new SameIntervalReservationFilter() .Filter(reservations, candidate, seatingDuration); var assignedTables = new AlternativeConfigurationsTableAssigner() .Assign(sameDayReservations, tables); var leftTables = tables.Except(assignedTables); var leftTblsGroups = new TableConfigurationsGenerator() .Generate(leftTables); return(leftTblsGroups.Any(t => candidate.CanFit(t))); }
private IEnumerable <ITable> AssignAlternativeConfiguration( IReservation reservation, IEnumerable <ITable> tables) { var rectangularTables = tables.Where(t => t is RectangularTable); var alternativeConfigs = new TableConfigurationsGenerator() .Generate(rectangularTables); // choose a configuration var assignedTbl = AssignTable(reservation, alternativeConfigs); if (assignedTbl == null || !(assignedTbl is TableGroup assignedTblGroup)) { return(new ITable[0]); } // return the selected tables in that configuration return(assignedTblGroup); }