using System.Linq.Expressions; using FoodsharingSiegen.Contracts.Entity; using FoodsharingSiegen.Contracts.Model; namespace FoodsharingSiegen.Shared.Helper { public static class FilterHelper { #region Public Method ApplyFilter /// /// Filters the given prospect list based on the provided filter criteria. /// /// /// The list of prospects to be filtered. Can be null. /// /// /// The filter criteria used to narrow down the prospect list. /// /// /// A filtered list of prospects that meet the criteria specified in the filter. /// public static List ApplyFilter(this List? prospectList, ProspectFilter filter) { if (prospectList == null) return []; var filterListQ = prospectList.AsQueryable(); if (!string.IsNullOrWhiteSpace(filter.Text)) filterListQ = filterListQ .Where(x => x.Name.Contains(filter.Text, StringComparison.OrdinalIgnoreCase) || (!string.IsNullOrWhiteSpace(x.Memo) && x.Memo.Contains(filter.Text, StringComparison.OrdinalIgnoreCase) == true) || x.FsId.ToString().Contains(filter.Text, StringComparison.OrdinalIgnoreCase)).AsQueryable(); if (filter.WithoutStepInBriefing) filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.StepInBriefing)); if (filter.WithoutIdCheck) filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.IdCheck)); if (filter.NoActivity) { var days = 180; // Half year Func q1 = x => x.Interactions.Any() && x.Interactions.All(i => DateTime.Now - i.Date > TimeSpan.FromDays(days)); Func q2 = x => DateTime.Now - x.Created > TimeSpan.FromDays(days); filterListQ = filterListQ.Where(x => q1(x) && q2(x)); } return filterListQ.ToList(); } #endregion } }