private bool CheckTable(Table table, TableFreeFilterModel filter, int?excludeReservationId = null)
        {
            if (table.Size < (filter.MinSize ?? 0))
            {
                return(false);
            }

            var overlappingReservations = table.Reservations.Where(r => r.IsActive && r.TimeFrom <= filter.TimeTo && r.TimeTo >= filter.TimeFrom && (excludeReservationId == null || r.Id != excludeReservationId));

            return(overlappingReservations.Count() == 0);
        }
 public IEnumerable <TableFreeModel> GetFreeTables(TableFreeFilterModel filter)
 => DbContext.Tables
 .Include(t => t.Reservations)
 .Include(t => t.Category)
 .AsEnumerable()
 .Where(t => CheckTable(t, filter))
 .Select(t => new TableFreeModel()
 {
     Id           = t.Id,
     Code         = t.Code,
     Size         = t.Size,
     CategoryId   = t.CategoryId,
     CategoryName = t.Category?.Name
 }).ToList();
Example #3
0
 public IEnumerable <TableFreeModel> GetFreeTables([FromQuery] TableFreeFilterModel filter)
 => TableService.GetFreeTables(filter);