Files
FoodsharingOnboarding/FoodsharingSiegen.Shared/Helper/FilterHelper.cs
Andre Beging bf64239625 Refactor enums and update Interaction entity field
Moved enums to a dedicated namespace and updated references across the codebase. Renamed the `Info` field in the `Interaction` entity to `Info1`, including necessary migrations and UI adjustments. These changes improve the organization and consistency of the codebase.
2025-04-01 10:41:09 +02:00

57 lines
2.4 KiB
C#

using System.Linq.Expressions;
using FoodsharingSiegen.Contracts.Entity;
using FoodsharingSiegen.Contracts.Enums;
using FoodsharingSiegen.Contracts.Model;
namespace FoodsharingSiegen.Shared.Helper
{
public static class FilterHelper
{
#region Public Method ApplyFilter
/// <summary>
/// Filters the given prospect list based on the provided filter criteria.
/// </summary>
/// <param name="prospectList">
/// The list of prospects to be filtered. Can be null.
/// </param>
/// <param name="filter">
/// The filter criteria used to narrow down the prospect list.
/// </param>
/// <returns>
/// A filtered list of prospects that meet the criteria specified in the filter.
/// </returns>
public static List<Prospect> ApplyFilter(this List<Prospect>? 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();
// Show only prospect with missing StepIn Briefing
if (filter.WithoutStepInBriefing)
filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.StepInBriefing));
// Show only prospect with missing IdCheck
if (filter.WithoutIdCheck)
filterListQ = filterListQ.Where(x => x.Interactions.All(i => i.Type != InteractionType.IdCheck));
// Show only deleted prospects
if (filter.DeletedOnly)
filterListQ = filterListQ.Where(x => x.RecordState == RecordState.Deleted);
// No Activity Filter
if (filter.NoActivity)
filterListQ = filterListQ.Where(x => DateTime.Now - x.Modified > TimeSpan.FromDays(180));
return filterListQ.ToList();
}
#endregion
}
}